Merge branch 'next' into master

This commit is contained in:
Jonathan Moore Liles 2012-08-06 20:10:45 -07:00
commit c4b4f49575
212 changed files with 22423 additions and 2839 deletions

24
.gitignore vendored
View File

@ -6,4 +6,26 @@ TAGS
.nfs* .nfs*
make.conf make.conf
.deps .deps
misc/ .config
.files
FL/About_Dialog.C
FL/About_Dialog.H
FL/Fl_Text_Edit_Window.C
FL/Fl_Text_Edit_Window.H
FL/New_Project_Dialog.C
FL/New_Project_Dialog.H
mixer/src/mixer
sequencer/src/gui/event_edit.C
sequencer/src/gui/event_edit.H
sequencer/src/gui/ui.C
sequencer/src/gui/ui.H
sequencer/src/gui/widgets.C
sequencer/src/gui/widgets.H
sequencer/src/sequencer
session-manager/src/jackpatch
session-manager/src/nsmd
session-manager/src/send_osc
session-manager/src/session-manager
timeline/src/TLE.C
timeline/src/TLE.H
timeline/src/timeline

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "lib/ntk"]
path = lib/ntk
url = git://git.tuxfamily.org/gitroot/non/fltk.git

View File

@ -13,15 +13,7 @@ decl {\#include <FL/filename.H>} {private local
Function {open_url( const char *url )} {open return_type void Function {open_url( const char *url )} {open return_type void
} { } {
code {\#if ! ( FL_MAJOR_VERSION >= 1 && FL_MINOR_VERSION >= 1 && FL_PATCH_VERSION >= 8 ) code {fl_open_uri( url );} {}
// FIXME: got a better idea?
char cmd[256];
snprintf( cmd, sizeof( cmd ), "x-www-browser '%s' &", url );
system( cmd );
\#else
fl_open_uri( url );
\#endif} {}
} }
class About_Dialog {open class About_Dialog {open

View File

@ -1,385 +0,0 @@
/*******************************************************************************/
/* Copyright (C) 2008 Jonathan Moore Liles */
/* */
/* This program is free software; you can 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; see the file COPYING. If not,write to the Free Software */
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/*******************************************************************************/
#pragma GCC diagnostic ignored "-Wchar-subscripts"
#include "Crystal_Boxtypes.H"
#include <FL/fl_draw.H>
#include <string.h>
/* Crystal boxes, base (obviously) on the FLTK1 'plastic' boxes, but
* without the rude color blending and with a slightly enhanced
* appearance. */
extern uchar *fl_gray_ramp();
inline Fl_Color
shade_color ( uchar gc, Fl_Color bc )
{
return fl_color_average( ( Fl_Color ) gc, bc, 0.25f );
}
static void
frame_rect ( int x, int y, int w, int h, const char *c, Fl_Color bc )
{
uchar *g = fl_gray_ramp();
int b = strlen( c ) / 4 + 1;
for ( x += b, y += b, w -= 2 * b, h -= 2 * b; b > 1; b-- )
{
// Draw lines around the perimeter of the button, 4 colors per
// circuit.
fl_color( shade_color( g[*c++], bc ) );
fl_line( x, y + h + b, x + w - 1, y + h + b, x + w + b - 1, y + h );
fl_color( shade_color( g[*c++], bc ) );
fl_line( x + w + b - 1, y + h, x + w + b - 1, y, x + w - 1, y - b );
fl_color( shade_color( g[*c++], bc ) );
fl_line( x + w - 1, y - b, x, y - b, x - b, y );
fl_color( shade_color( g[*c++], bc ) );
fl_line( x - b, y, x - b, y + h, x, y + h + b );
}
}
static void
frame_round ( int x, int y, int w, int h, const char *c, Fl_Color bc )
{
uchar *g = fl_gray_ramp();
int b = strlen( c ) / 4 + 1;
if ( ! Fl::draw_box_active() )
bc = fl_inactive( bc );
if ( w == h )
{
for ( ; b > 1; b--, x++, y++, w -= 2, h -= 2 )
{
fl_color( shade_color( g[*c++], bc ) );
fl_arc( x, y, w, h, 45.0, 135.0 );
fl_color( shade_color( g[*c++], bc ) );
fl_arc( x, y, w, h, 315.0, 405.0 );
fl_color( shade_color( g[*c++], bc ) );
fl_arc( x, y, w, h, 225.0, 315.0 );
fl_color( shade_color( g[*c++], bc ) );
fl_arc( x, y, w, h, 135.0, 225.0 );
}
}
else if ( w > h )
{
int d = h / 2;
for ( ; b > 1; d--, b--, x++, y++, w -= 2, h -= 2 )
{
fl_color( shade_color( g[*c++], bc ) );
fl_arc( x, y, h, h, 90.0, 135.0 );
fl_xyline( x + d, y, x + w - d );
fl_arc( x + w - h, y, h, h, 45.0, 90.0 );
fl_color( shade_color( g[*c++], bc ) );
fl_arc( x + w - h, y, h, h, 315.0, 405.0 );
fl_color( shade_color( g[*c++], bc ) );
fl_arc( x + w - h, y, h, h, 270.0, 315.0 );
fl_xyline( x + d, y + h - 1, x + w - d );
fl_arc( x, y, h, h, 225.0, 270.0 );
fl_color( shade_color( g[*c++], bc ) );
fl_arc( x, y, h, h, 135.0, 225.0 );
}
}
else if ( w < h )
{
int d = w / 2;
for ( ; b > 1; d--, b--, x++, y++, w -= 2, h -= 2 )
{
fl_color( shade_color( g[*c++], bc ) );
fl_arc( x, y, w, w, 45.0, 135.0 );
fl_color( shade_color( g[*c++], bc ) );
fl_arc( x, y, w, w, 0.0, 45.0 );
fl_yxline( x + w - 1, y + d, y + h - d );
fl_arc( x, y + h - w, w, w, 315.0, 360.0 );
fl_color( shade_color( g[*c++], bc ) );
fl_arc( x, y + h - w, w, w, 225.0, 315.0 );
fl_color( shade_color( g[*c++], bc ) );
fl_arc( x, y + h - w, w, w, 180.0, 225.0 );
fl_yxline( x, y + d, y + h - d );
fl_arc( x, y, w, w, 135.0, 180.0 );
}
}
}
static void
shade_rect ( int x, int y, int w, int h, const char *c, Fl_Color bc )
{
uchar *g = fl_gray_ramp();
int i, j;
int clen = strlen( c ) - 1;
int chalf = clen / 2;
int cstep = 1;
if ( ! Fl::draw_box_active() )
bc = fl_inactive( bc );
if ( h < ( w * 2 ) )
{
// Horizontal shading...
if ( clen >= h )
cstep = 2;
for ( i = 0, j = 0; j < chalf; i++, j += cstep )
{
// Draw the top line and points...
fl_color( shade_color( g[c[i]], bc ) );
fl_xyline( x + 1, y + i, x + w - 2 );
fl_color( shade_color( g[c[i] - 2], bc ) );
fl_point( x, y + i + 1 );
fl_point( x + w - 1, y + i + 1 );
// Draw the bottom line and points...
fl_color( shade_color( g[c[clen - i]], bc ) );
fl_xyline( x + 1, y + h - i, x + w - 2 );
fl_color( shade_color( g[c[clen - i] - 2], bc ) );
fl_point( x, y + h - i );
fl_point( x + w - 1, y + h - i );
}
// Draw the interior and sides...
i = chalf / cstep;
// fl_color( shade_color( g[c[chalf]], bc ) );
fl_color( bc );
fl_rectf( x + 1, y + i, w - 2, h - 2 * i + 1 );
fl_color( shade_color( g[c[chalf] - 2], bc ) );
fl_yxline( x, y + i, y + h - i );
fl_yxline( x + w - 1, y + i, y + h - i );
}
else
{
// Vertical shading...
if ( clen >= w )
cstep = 2;
for ( i = 0, j = 0; j < chalf; i++, j += cstep )
{
// Draw the left line and points...
fl_color( shade_color( g[c[i]], bc ) );
fl_yxline( x + i, y + 1, y + h - 1 );
fl_color( shade_color( g[c[i] - 2], bc ) );
fl_point( x + i + 1, y );
fl_point( x + i + 1, y + h );
// Draw the right line and points...
fl_color( shade_color( g[c[clen - i]], bc ) );
fl_yxline( x + w - 1 - i, y + 1, y + h - 1 );
fl_color( shade_color( g[c[clen - i] - 2], bc ) );
fl_point( x + w - 2 - i, y );
fl_point( x + w - 2 - i, y + h );
}
// Draw the interior, top, and bottom...
i = chalf / cstep;
fl_color( shade_color( g[c[chalf]], bc ) );
fl_rectf( x + i, y + 1, w - 2 * i, h - 1 );
fl_color( shade_color( g[c[chalf] - 2], bc ) );
fl_xyline( x + i, y, x + w - i );
fl_xyline( x + i, y + h, x + w - i );
}
}
static void
shade_round ( int x, int y, int w, int h, const char *c, Fl_Color bc )
{
uchar *g = fl_gray_ramp();
int i;
int clen = strlen( c ) - 1;
int chalf = clen / 2;
if ( w > h )
{
int d = h / 2;
const int na = 8;
for ( i = 0; i < chalf; i++, d--, x++, y++, w -= 2, h -= 2 )
{
fl_color( shade_color( g[c[i]], bc ) );
fl_pie( x, y, h, h, 90.0, 135.0 + i * na );
fl_xyline( x + d, y, x + w - d );
fl_pie( x + w - h, y, h, h, 45.0 + i * na, 90.0 );
fl_color( shade_color( g[c[i] - 2], bc ) );
fl_pie( x + w - h, y, h, h, 315.0 + i * na, 405.0 + i * na );
fl_color( shade_color( g[c[clen - i]], bc ) );
fl_pie( x + w - h, y, h, h, 270.0, 315.0 + i * na );
fl_xyline( x + d, y + h - 1, x + w - d );
fl_pie( x, y, h, h, 225.0 + i * na, 270.0 );
fl_color( shade_color( g[c[clen - i] - 2], bc ) );
fl_pie( x, y, h, h, 135.0 + i * na, 225.0 + i * na );
}
// fl_color( shade_color( g[c[chalf]], bc ) );
fl_color( bc );
fl_rectf( x + d, y, w - h + 1, h + 1 );
fl_pie( x, y, h, h, 90.0, 270.0 );
fl_pie( x + w - h, y, h, h, 270.0, 90.0 );
}
else
{
int d = w / 2;
const int na = 8;
for ( i = 0; i < chalf; i++, d--, x++, y++, w -= 2, h -= 2 )
{
fl_color( shade_color( g[c[i]], bc ) );
fl_pie( x, y, w, w, 45.0 + i * na, 135.0 + i * na );
fl_color( shade_color( g[c[i] - 2], bc ) );
fl_pie( x, y, w, w, 0.0, 45.0 + i * na );
fl_yxline( x + w - 1, y + d, y + h - d );
fl_pie( x, y + h - w, w, w, 315.0 + i * na, 360.0 );
fl_color( shade_color( g[c[clen - i]], bc ) );
fl_pie( x, y + h - w, w, w, 225.0 + i * na, 315.0 + i * na );
fl_color( shade_color( g[c[clen - i] - 2], bc ) );
fl_pie( x, y + h - w, w, w, 180.0, 225.0 + i * na );
fl_yxline( x, y + d, y + h - d );
fl_pie( x, y, w, w, 135.0 + i * na, 180.0 );
}
// fl_color( shade_color( g[c[chalf]], bc ) );
fl_color( bc );
fl_rectf( x, y + d, w + 1, h - w + 1 );
fl_pie( x, y, w, w, 0.0, 180.0 );
fl_pie( x, y + h - w, w, w, 180.0, 360.0 );
}
}
static void
up_frame ( int x, int y, int w, int h, Fl_Color c )
{
frame_rect( x, y, w, h - 1, "KLDIIJLM", c );
}
static void
narrow_thin_box ( int x, int y, int w, int h, Fl_Color c )
{
if ( h <= 0 || w <= 0 )
return;
uchar *g = fl_gray_ramp();
fl_color( shade_color( g['R'], c ) );
fl_rectf( x + 1, y + 1, w - 2, h - 2 );
fl_color( shade_color( g['I'], c ) );
if ( w > 1 )
{
fl_xyline( x + 1, y, x + w - 2 );
fl_xyline( x + 1, y + h - 1, x + w - 2 );
}
if ( h > 1 )
{
fl_yxline( x, y + 1, y + h - 2 );
fl_yxline( x + w - 1, y + 1, y + h - 2 );
}
}
static void
thin_up_box ( int x, int y, int w, int h, Fl_Color c )
{
if ( w > 4 && h > 4 )
{
shade_rect( x + 1, y + 1, w - 2, h - 3, "RQOQSUWQ", c );
frame_rect( x, y, w, h - 1, "IJLM", c );
}
else
narrow_thin_box( x, y, w, h, c );
}
static void
up_box ( int x, int y, int w, int h, Fl_Color c )
{
if ( w > 8 && h > 8 )
{
shade_rect( x + 1, y + 1, w - 2, h - 3, "RVQNOPQRSTUVWVQ", c );
// shade_rect( x + 1, y + 1, w - 2, h - 3, "STUVWVQRWXVUVVQ", c );
// shade_rect( x + 1, y + 1, w - 2, h - 3, "FISPPQQRSSTTUPJ", c );
frame_rect( x, y, w, h - 1, "IJLM", c );
}
else
thin_up_box( x, y, w, h, c );
}
static void
up_round ( int x, int y, int w, int h, Fl_Color c )
{
shade_round( x, y, w, h, "RVQNOPQRSTUVWVQ", c );
frame_round( x, y, w, h, "IJLM", c );
}
static void
down_frame ( int x, int y, int w, int h, Fl_Color c )
{
frame_rect( x, y, w, h - 1, "LLLLTTRR", c );
}
static void
down_box ( int x, int y, int w, int h, Fl_Color c )
{
if ( w > 6 && h > 6 )
{
// shade_rect( x + 2, y + 2, w - 4, h - 5, "STUVWWWVT", c );
fl_rectf( x + 2, y + 2, w - 4, h - 5 , fl_darker( c ) );
down_frame( x, y, w, h, c );
}
else
{
narrow_thin_box( x, y, w, h, c );
}
}
static void
down_round ( int x, int y, int w, int h, Fl_Color c )
{
shade_round( x, y, w, h, "STUVWWWVT", c );
frame_round( x, y, w, h, "IJLM", c );
}
void
init_crystal_boxtypes ( void )
{
/* replace the plastic boxes... (is there a better way?) */
Fl::set_boxtype( FL_PLASTIC_UP_BOX, up_box, 4,4,8,8 );
Fl::set_boxtype( FL_PLASTIC_DOWN_BOX, down_box, 2,2,4,4 );
Fl::set_boxtype( FL_PLASTIC_UP_FRAME, up_frame, 2,2,4,4 );
Fl::set_boxtype( FL_PLASTIC_DOWN_FRAME, down_frame, 2,2,4,4 );
Fl::set_boxtype( FL_PLASTIC_THIN_UP_BOX, thin_up_box, 1,1,2,2 );
Fl::set_boxtype( FL_PLASTIC_THIN_DOWN_BOX, down_box, 1,1,2,2 );
Fl::set_boxtype( FL_PLASTIC_ROUND_UP_BOX, up_round, 1,1,2,2 );
Fl::set_boxtype( FL_PLASTIC_ROUND_DOWN_BOX, down_round, 1,1,2,2 );
}

View File

@ -1,332 +0,0 @@
/*******************************************************************************/
/* Copyright (C) 2008 Jonathan Moore Liles */
/* */
/* This program is free software; you can 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; see the file COPYING. If not,write to the Free Software */
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/*******************************************************************************/
#include "Fl_Arc_Dial.H"
#include <FL/fl_draw.H>
#include <FL/Fl.H>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <algorithm>
int Fl_Arc_Dial::_default_style = Fl_Arc_Dial::PLASTIC_DIAL;
/** This simple box is suitable for use with knob-type widgets. It
* comprises a border with shadow, and a cap with glare-lines akin
* to those seen on burnished aluminum knobs. */
static void
burnished_oval_box ( int x, int y, int w, int h, Fl_Color c )
{
/* draw background */
fl_color( fl_darker( c ) );
fl_pie( x, y, w, h, 0, 360 );
fl_color( fl_darker( fl_darker( c ) ) );
fl_pie( x, y, w, h, 180 + 215, 180 + 45 );
/* shrink */
x += 4;
y += 4;
w -= 7;
h -= 7;
/* draw cap */
fl_color( c );
fl_pie( x, y, w, h, 0, 360 );
/* draw glare */
const int a1 = 10;
const int a2 = 90;
fl_color( fl_color_average( FL_WHITE, c, 0.15f ) );
fl_pie( x, y, w, h, a1, a2 );
fl_pie( x, y, w, h, 180 + a1, 180 + a2 );
fl_color( fl_color_average( FL_WHITE, c, 0.25f ) );
const int d = (a2 - a1) / 2;
fl_pie( x, y, w, h, a1 + (d / 2), a2 - (d / 2) );
fl_pie( x, y, w, h, 180 + a1 + (d / 2), 180 + a2 - (d / 2) );
}
void
Fl_Arc_Dial::draw_box ( void )
{
}
int
Fl_Arc_Dial::handle ( int m )
{
/* Fl_Dial and friends should really handle mousewheel, but they don't in FTLK1 */
switch ( m )
{
case FL_MOUSEWHEEL:
{
if ( this != Fl::belowmouse() )
return 0;
int steps = 16;
if ( Fl::event_ctrl() )
steps = 128;
float step = fabs( maximum() - minimum() ) / (float)steps;
float d = ((float)Fl::event_dy()) * step;
double v = value() + d;
if ( maximum() > minimum() )
{
if ( v < minimum() )
v = minimum();
else if ( v > maximum() )
v = maximum();
}
else
{
if ( v > minimum() )
v = minimum();
else if ( v < maximum() )
v = maximum();
}
value( v );
do_callback();
return 1;
}
}
int X, Y, S;
get_knob_dimensions ( &X, &Y, &S );
return Fl_Dial::handle( m, X, Y, S, S );
}
void
Fl_Arc_Dial::draw ( void )
{
int X, Y, S;
get_knob_dimensions ( &X, &Y, &S);
draw_box();
draw_label();
double angle = ( angle2() - angle1() ) * ( value() - minimum()) / ( maximum() - minimum() ) + angle1();
if ( type() == ARC_DIAL )
{
/* fl_line_style( FL_SOLID, 0 ); */
if ( type() == ARC_DIAL )
fl_draw_box( FL_ROUNDED_BOX, X, Y, S, S, color() );
/* shrink a bit */
X += S / 8.0;
Y += S / 8.0;
S -= S / 4;
fl_line_style( FL_SOLID, S / 6 );
/* background arc */
fl_color( fl_darker( color() ) );
fl_arc( X, Y, S, S, 270 - angle1(), 270 - angle2() );
/* foreground arc */
fl_color( selection_color() );
fl_arc( X, Y, S, S, 270 - angle1(), 270 - angle );
fl_line_style( FL_SOLID, 0 );
fl_color( fl_contrast( labelcolor(), color() ) );
}
else if ( type() == PLASTIC_DIAL || type() == BURNISHED_DIAL )
{
draw_knob();
draw_cursor( X, Y, S);
}
/* Some strange bug in FLTK prevents us from always been able to draw text
* here, so don't even try for now. */
/* char s[10]; */
/* fl_font( FL_HELVETICA, 8 ); */
/* snprintf( s, sizeof( s ), "%.1f", value() ); */
/* /\* fl_rectf( X, Y + S, S, 14, FL_BACKGROUND2_COLOR ); *\/ */
/* fl_color( FL_WHITE ); */
/* fl_draw( s, X, Y + S, S, 14, FL_ALIGN_CENTER ); */
}
void
Fl_Arc_Dial::get_knob_dimensions ( int *X, int *Y, int *S )
{
int ox, oy, ww, hh, side;
ox = x();
oy = y();
ww = w();
hh = h();
if (ww > hh)
{
side = hh;
ox = ox + (ww - side) / 2;
}
else
{
side = ww;
oy = oy + (hh - side) / 2;
}
side = w() > h() ? hh : ww;
*X = ox;
*Y = oy;
*S = side;
}
void
Fl_Arc_Dial::draw_cursor ( int ox, int oy, int side )
{
double angle;
// fl_color(fl_color_average(FL_BACKGROUND_COLOR, FL_BLACK, .7f));
angle = ( angle2() - angle1() ) * ( value() - minimum()) / ( maximum() - minimum() ) + angle1();
fl_color( fl_contrast( selection_color(), FL_BACKGROUND_COLOR ) );
fl_line_style( FL_SOLID, side / 8 );
const int d = 6;
/* account for edge conditions */
angle = angle < angle1() + d ? angle1() + d : angle;
angle = angle > angle2() - d ? angle2() - d : angle;
ox += side / 4;
oy += side / 4;
side -= side / 2;
fl_arc( ox, oy, side, side, 270 - (angle - d), 270 - (angle + d) );
fl_line_style( FL_SOLID, 0 );
}
void
Fl_Arc_Dial::draw_knob ( void )
{
int ox, oy, ww, hh, side;
get_knob_dimensions ( &ox, &oy, &side );
ww = w();
hh = h();
draw_label();
fl_clip(ox, oy, ww, hh);
// background
/* fl_color(FL_BACKGROUND_COLOR); */
/* fl_rectf(ox, oy, side, side); */
/* scale color */
fl_color(fl_color_average(color(), FL_BACKGROUND2_COLOR, .6));
fl_pie(ox + 1, oy + 3, side - 2, side - 12, 0, 360);
// scale
draw_scale(ox, oy, side);
Fl_Color c = active_r() ? fl_color_average(FL_BACKGROUND_COLOR, FL_WHITE, .7) : FL_INACTIVE_COLOR;
if ( type() == BURNISHED_DIAL )
{
burnished_oval_box( ox + 5, oy + 5, side - 12, side - 12, c );
}
else
{
fl_color(FL_BACKGROUND_COLOR);
fl_pie(ox + 6, oy + 6, side - 12, side - 12, 0, 360);
// shadow
fl_color(fl_color_average(FL_BACKGROUND_COLOR, FL_BLACK, .8f));
fl_pie(ox + 8, oy + 12, side - 16, side - 16, 0, 360);
fl_color(fl_color_average(FL_BACKGROUND_COLOR, FL_BLACK, .2f));
fl_pie(ox + 9, oy + 12, side - 18, side - 18, 0, 360);
// knob edge
fl_color( c);
fl_pie(ox + 8, oy + 8, side - 16, side - 16, 0, 360);
fl_color(fl_color_average(FL_BACKGROUND_COLOR, FL_WHITE, .6));
fl_pie(ox + 10, oy + 10, side - 20, side - 20, 0, 360);
}
fl_pop_clip();
}
void
Fl_Arc_Dial::draw_scale ( int ox, int oy, int side )
{
float x1, y1, x2, y2, rds, cx, cy, ca, sa;
rds = side / 2;
cx = ox + side / 2;
cy = oy + side / 2;
if (_scaleticks == 0)
return;
double a_step = (10.0 * 3.14159 / 6.0) / _scaleticks;
double a_orig = -(3.14159 / 3.0);
for (int a = 0; a <= _scaleticks; a++)
{
double na = a_orig + a * a_step;
ca = cos(na);
sa = sin(na);
x1 = cx + (rds) * ca;
y1 = cy - (rds) * sa;
x2 = cx + (rds - 6) * ca;
y2 = cy - (rds - 6) * sa;
fl_color(FL_BACKGROUND_COLOR);
fl_line(x1, y1, x2, y2);
}
}
void
Fl_Arc_Dial::scaleticks ( int tck )
{
_scaleticks = tck;
if (_scaleticks < 0)
_scaleticks = 0;
if (_scaleticks > 31)
_scaleticks = 31;
if (visible())
damage(FL_DAMAGE_ALL);
}

View File

@ -20,15 +20,19 @@
#include <FL/Fl_Button.H> #include <FL/Fl_Button.H>
#include <FL/Fl.H> #include <FL/Fl.H>
class Fl_Blinker : public Fl_Button /* Kind of like Fl_Light_Button except that the whole thing is the
* indicator and it can optionally blink */
class Fl_Blink_Button : public Fl_Button
{ {
bool _on; bool _on;
float _blink_interval; float _blink_interval;
bool _blinking;
static void static void
update_cb ( void *v ) update_cb ( void *v )
{ {
((Fl_Blinker*)v)->update_cb(); ((Fl_Blink_Button*)v)->update_cb();
} }
void void
@ -48,33 +52,67 @@ public:
static const float FAST = 0.1f; static const float FAST = 0.1f;
static const float DEFAULT = 0.5f; static const float DEFAULT = 0.5f;
Fl_Blinker ( int X, int Y, int W, int H, const char *L ) Fl_Blink_Button ( int X, int Y, int W, int H, const char *L )
: Fl_Button( X, Y, W, H, L ) : Fl_Button( X, Y, W, H, L )
{ {
_blinking = true;
_on = false; _on = false;
_blink_interval = DEFAULT; _blink_interval = DEFAULT;
Fl::add_timeout( _blink_interval, update_cb, this );
type( FL_TOGGLE_BUTTON ); type( FL_TOGGLE_BUTTON );
} }
virtual virtual
~Fl_Blinker () ~Fl_Blink_Button ()
{ {
Fl::remove_timeout( update_cb, this ); if ( value() )
Fl::remove_timeout( update_cb, this );
}
void blink ( bool b )
{
_blinking = b;
if ( ! b )
_on = true;
}
bool blink ( void ) const
{
return _blinking;
} }
void void
interval ( float v ) blink_interval ( float v )
{ {
_blink_interval = v; _blink_interval = v;
Fl::remove_timeout( update_cb, this ); if ( value() )
Fl::add_timeout( _blink_interval, update_cb, this ); {
Fl::remove_timeout( update_cb, this );
Fl::add_timeout( _blink_interval, update_cb, this );
}
} }
virtual void value ( float v )
{
if ( v )
{
if ( _blinking )
Fl::add_timeout( _blink_interval, update_cb, this );
Fl_Button::value( v );
redraw();
}
else
{
Fl_Button::value( v );
Fl::remove_timeout( update_cb, this );
redraw();
}
}
virtual float value ( void ) { return Fl_Button::value(); }
virtual void virtual void
draw ( void ) draw ( void )
{ {

View File

@ -28,7 +28,6 @@
class Fl_Sometimes_Input : public Fl_Input class Fl_Sometimes_Input : public Fl_Input
{ {
Fl_Boxtype _up_box; Fl_Boxtype _up_box;
public: public:
@ -38,7 +37,7 @@ public:
{ {
clear_visible_focus(); clear_visible_focus();
up_box( FL_NO_BOX ); up_box( FL_NO_BOX );
when(FL_WHEN_ENTER_KEY_ALWAYS); when(FL_WHEN_ENTER_KEY);
} }
void up_box ( Fl_Boxtype b ) { _up_box = b; } void up_box ( Fl_Boxtype b ) { _up_box = b; }
@ -73,20 +72,19 @@ public:
switch ( m ) switch ( m )
{ {
case FL_KEYDOWN:
{
if ( r && Fl::event_key() == FL_Enter )
Fl::focus( NULL );
}
case FL_FOCUS: case FL_FOCUS:
case FL_UNFOCUS:
redraw(); redraw();
return 1; return 1;
case FL_PUSH: case FL_PUSH:
take_focus(); take_focus();
redraw(); redraw();
return 1; return 1;
case FL_UNFOCUS:
if ( window() )
window()->damage( FL_DAMAGE_EXPOSE, x(), y(), w(), h() );
redraw();
return r;
default: default:
return r; return r;
} }

View File

@ -1,180 +0,0 @@
/*******************************************************************************/
/* Copyright (C) 2012 Jonathan Moore Liles */
/* Copyright (C) 2001-2005 by Colin Jones */
/* */
/* This program is free software; you can 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; see the file COPYING. If not,write to the Free Software */
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/*******************************************************************************/
/* Taken from the "Gleam" FLTK scheme, as modified by prodatum */
#include <FL/Fl.H>
#include <FL/fl_draw.H>
#include "Gleam_Boxtypes.H"
static void gleam_color(Fl_Color c)
{
if (Fl::draw_box_active())
fl_color(c);
else
fl_color(fl_inactive(c));
}
static void frame_rect(int x, int y, int w, int h, Fl_Color bc)
{
// Draw the outline around the perimeter of the box
fl_color(fl_color_average(FL_BLACK, FL_BACKGROUND_COLOR, .1));
fl_line(x, y, x + w, y);
fl_line(x + w, y, x + w, y + h);
fl_line(x + w, y + h, x, y + h);
fl_line(x, y + h, x, y);
}
static void shade_rect_up(int x, int y, int w, int h, Fl_Color bc)
{
// Draws the shiny
float third = (float) h / 3;
gleam_color(bc);
fl_rectf(x, y, w, third + 1);
//gleam_color(fl_color_average(bc, FL_WHITE, .90f));
//fl_rectf(x, y, w, half + 1);
float step_size = 0.10 / ((float) h - third);
int j = 0;
//step_size = (.1 / (float) half);
//printf("1 / %i = %f \n", half, (1.0/half));
/**
* This loop generates the nice gradient at the bottom of the
* widget
**/
for (float k = 1; k >= .90; k -= step_size)
{
j++;
gleam_color(fl_color_average(bc, FL_WHITE, k));
fl_line(x, y + j + third - 1, x + w - 1, y + j + third - 1);
}
}
static void frame_rect_up(int x, int y, int w, int h, Fl_Color bc)
{
// Draw the outline around the perimeter of the box
gleam_color(bc);
fl_line(x, y, x + w, y); //Go across.
fl_line(x, y + (h / 2), x, y + 1); //Go to top
fl_line(x + w, y + (h / 2), x + w, y + 1); //Go to top
gleam_color(fl_darker(bc));
fl_line(x, y + h, x + w, y + h); //Go across again!
fl_line(x, y + (h / 2), x, y + h - 1); //Go to top
fl_line(x + w, y + (h / 2), x + w, y + h - 1); //Go to top
}
static void frame_rect_down(int x, int y, int w, int h, Fl_Color bc)
{
// Draw the outline around the perimeter of the box
gleam_color(fl_darker(bc));
fl_line(x, y, x + w, y); //Go across.
fl_line(x, y + (h / 2), x, y + 1); //Go to top
fl_line(x + w, y + (h / 2), x + w, y + 1); //Go to top
//gleam_color(bc);
fl_line(x, y + h, x + w, y + h); //Go across again!
fl_line(x, y + (h / 2), x, y + h - 1); //Go to top
fl_line(x + w, y + (h / 2), x + w, y + h - 1); //Go to top
}
static void shade_rect_down(int x, int y, int w, int h, Fl_Color bc)
{
gleam_color(bc);
Fl_Color color = fl_color();
fl_rectf(x, y, w, h);
gleam_color(fl_color_average(bc, fl_darker(color), 0.65));
fl_line(x, y + 1, x + w, y + 1);
fl_line(x, y + 1, x, y + h - 2);
gleam_color(fl_color_average(bc, fl_darker(color), 0.85));
fl_line(x + 1, y + 2, x + w, y + 2);
fl_line(x + 1, y + 2, x + 1, y + h - 2);
}
static void up_frame(int x, int y, int w, int h, Fl_Color c)
{
frame_rect_up(x, y, w - 1, h - 1, fl_darker(c));
}
static void thin_up_box(int x, int y, int w, int h, Fl_Color c)
{
shade_rect_up(x + 1, y, w - 2, h - 1, c);
frame_rect(x + 1, y + 1, w - 3, h - 3, fl_color_average(c, FL_WHITE, .25f));
frame_rect_up(x, y, w - 1, h - 1, fl_darker(c));
}
static void up_box(int x, int y, int w, int h, Fl_Color c)
{
shade_rect_up(x + 1, y, w - 2, h - 1, c);
frame_rect_up(x, y, w - 1, h - 1, fl_darker(c));
//draw the inner rect.
frame_rect(x + 1, y + 1, w - 3, h - 3, fl_color_average(c, FL_WHITE, .25f));
}
static void down_frame(int x, int y, int w, int h, Fl_Color c)
{
frame_rect_down(x, y, w - 1, h - 1, fl_darker(c));
}
static void down_box(int x, int y, int w, int h, Fl_Color c)
{
shade_rect_down(x + 1, y, w - 2, h, c);
down_frame(x, y, w, h, fl_darker(c));
//draw the inner rect.
//frame_rect(x + 1, y + 1, w - 3, h - 3, fl_color_average(c, FL_BLACK, .65));
}
static void thin_down_box(int x, int y, int w, int h, Fl_Color c)
{
down_box(x, y, w, h, c);
}
void
init_gleam_boxtypes ( void )
{
/* replace the gtk+ boxes... (is there a better way?) */
Fl::set_boxtype( FL_GTK_UP_BOX, up_box, 2,2,4,4 );
Fl::set_boxtype( FL_GTK_DOWN_BOX, down_box, 2,2,3,3 );
Fl::set_boxtype( FL_GTK_THIN_UP_BOX, up_box, 2,2,3,3 );
Fl::set_boxtype( FL_GTK_THIN_DOWN_BOX, down_box, 2,2,3,3 );
Fl::set_boxtype( FL_GTK_UP_FRAME, up_frame, 2,2,3,3 );
Fl::set_boxtype( FL_GTK_DOWN_FRAME, down_frame, 2,2,3,3 );
/* Fl::set_boxtype( FL_GTK_THIN_UP_BOX, thin_up_box, 1,1,1,1 ); */
/* Fl::set_boxtype( FL_GTK_THIN_DOWN_BOX, thin_down_box, 1,1,1,1 ); */
Fl::set_boxtype( FL_GTK_ROUND_UP_BOX, up_box, 2,2,3,3 );
Fl::set_boxtype( FL_GTK_ROUND_DOWN_BOX, down_box, 2,2,3,3 );
}

View File

@ -1,81 +0,0 @@
/*******************************************************************************/
/* Copyright (C) 2010 Jonathan Moore Liles */
/* */
/* This program is free software; you can 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; see the file COPYING. If not,write to the Free Software */
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/*******************************************************************************/
#include "color_scheme.H"
#include <FL/Fl.H>
#include <string.h>
static Fl_Color system_colors[3];
void
get_system_colors ( void )
{
Fl::get_system_colors();
system_colors[ 0 ] = (Fl_Color)Fl::get_color( FL_BACKGROUND_COLOR );
system_colors[ 1 ] = (Fl_Color)Fl::get_color( FL_FOREGROUND_COLOR );
system_colors[ 2 ] = (Fl_Color)Fl::get_color( FL_BACKGROUND2_COLOR );
}
void
color_scheme ( const char *name )
{
if ( !strcasecmp( name, "gray" ) )
{
Fl::background2( 127, 127, 127 );
Fl::background( 100, 100, 100 );
Fl::foreground( 255, 255, 255 );
}
if ( !strcasecmp( name, "dark" ) )
{
Fl::background2( 100, 100, 100 );
Fl::background( 50, 50, 50 );
Fl::foreground( 255, 255, 255 );
}
else if ( !strcasecmp( name, "light" ))
{
Fl::background2( 192, 192, 192 );
Fl::background( 220, 220, 220 );
Fl::foreground( 0, 0, 0 );
}
if ( !strcasecmp( name, "very dark" ) )
{
Fl::background2( 100, 100, 100 );
Fl::background( 20, 20, 20 );
Fl::foreground( 240, 240, 240 );
}
else if ( !strcasecmp( name, "system" ) )
{
unsigned char r, g, b;
Fl::get_color( system_colors[ 0 ], r, g, b );
Fl::background( r, g, b );
Fl::get_color( system_colors[ 1 ], r, g, b );
Fl::foreground( r, g, b );
Fl::get_color( system_colors[ 2 ], r, g, b );
Fl::background2( r, g, b );
}
Fl::scheme( Fl::scheme() );
}

2
FL/configure vendored
View File

@ -14,7 +14,7 @@ ask "Build for debugging" USE_DEBUG no
begin_tests begin_tests
require_FLTK 1.1.7 images require_FLTK 1.1.7 images
require_command FLUID fluid require_command FLUID lib/ntk/fluid/fluid
require_command ar ar require_command ar ar
require_command makedepend makedepend require_command makedepend makedepend

1
FL/lib Symbolic link
View File

@ -0,0 +1 @@
../lib

View File

@ -11,7 +11,7 @@ SRCS:=$(SRCS:.fl=.C)
SRCS:=$(sort $(SRCS)) SRCS:=$(sort $(SRCS))
OBJS:=$(SRCS:.C=.o) OBJS:=$(SRCS:.C=.o)
all: FL/libfl_widgets.a all: FL/libfl_widgets.a util/ntk-perf
FL/libfl_widgets.a: $(OBJS) FL/libfl_widgets.a: $(OBJS)
@ ar rcs $@ $(OBJS) @ ar rcs $@ $(OBJS)
@ -19,8 +19,19 @@ FL/libfl_widgets.a: $(OBJS)
.PHONEY: FL .PHONEY: FL
FL: FL/libfl_widgets.a FL: FL/libfl_widgets.a
# ntk-chtheme: ntk-chtheme.o $(FLTK_LIBS) FL/libfl_widgets.a
# @ echo -n Linking session handler.
# @ $(CXX) $(CXXFLAGS) $(FLTK_LDFLAGS) $(LIBS) $^ -o $@ -LFL -lfl_widgets && echo $(DONE)
util/ntk-perf.o: util/ntk-perf.C
util/ntk-perf: util/ntk-perf.o $(FLTK_LIBS) FL/libfl_widgets.a
@ echo -n Linking session handler.
@ $(CXX) $(CXXFLAGS) $^ -o $@ $(FLTK_LDFLAGS) $(LIBS) -LFL -lfl_widgets && echo $(DONE)
clean: clean:
rm -f $(OBJS) FL/libfl_widgets.a rm -f $(OBJS) FL/libfl_widgets.a .deps
install: install:
@ @

View File

@ -18,7 +18,7 @@
/*******************************************************************************/ /*******************************************************************************/
class Fl_Menu_; class Fl_Menu_;
class Fl_Menu_Item; struct Fl_Menu_Item;
class Fl_Widget; class Fl_Widget;
bool menu_popup ( Fl_Menu_ *m, int X, int Y ); bool menu_popup ( Fl_Menu_ *m, int X, int Y );

View File

@ -1,6 +1,6 @@
/*******************************************************************************/ /*******************************************************************************/
/* Copyright (C) 2008 Jonathan Moore Liles */ /* Copyright (C) 2012 Jonathan Moore Liles */
/* */ /* */
/* This program is free software; you can redistribute it and/or modify it */ /* This program is free software; you can redistribute it and/or modify it */
/* under the terms of the GNU General Public License as published by the */ /* under the terms of the GNU General Public License as published by the */
@ -17,6 +17,16 @@
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/*******************************************************************************/ /*******************************************************************************/
#include <FL/Fl.H> #include "FL/themes.H"
#include "FL/Fl_Theme_Chooser.C"
void init_crystal_boxtypes ( void );
int
main ( int argc, char **argv )
{
fl_register_themes();
Fl_Theme::set();
fl_theme_chooser();
}

163
FL/util/ntk-perf.C Normal file
View File

@ -0,0 +1,163 @@
/*******************************************************************************/
/* Copyright (C) 2012 Jonathan Moore Liles */
/* */
/* This program is free software; you can 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; see the file COPYING. If not,write to the Free Software */
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/*******************************************************************************/
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Single_Window.H>
#include <FL/Fl_Scalepack.H>
#include <FL/Fl_Choice.H>
#include <FL/fl_draw.H>
#include <sys/time.h>
#include <stdio.h>
static Fl_Boxtype boxtype = FL_UP_BOX;
#include <unistd.h>
unsigned long long tv_to_ts ( timeval *tv )
{
return tv->tv_sec * 1e6 + tv->tv_usec;
}
unsigned long long get_ts ( void )
{
struct timeval then;
gettimeofday( &then, NULL );
return tv_to_ts( &then );
}
class PerfTest : public Fl_Widget
{
public:
PerfTest ( int X, int Y, int W, int H, const char *L=0 ) : Fl_Widget( X, Y, W, H, L )
{
align(FL_ALIGN_TOP | FL_ALIGN_RIGHT |FL_ALIGN_INSIDE);
box(FL_UP_BOX);
labelcolor( FL_WHITE );
use_cairo = false;
}
bool use_cairo;
void draw ( void )
{
if ( use_cairo )
fl_push_use_cairo(true);
fl_rectf( x(), y(), w(), h(), FL_BLACK );
unsigned long long then = get_ts();
fl_push_clip( x(), y(), w(), h() );
int count = 400;
/* draw stuff */
int i = 0;
for ( ; i < count; ++i )
fl_draw_box( boxtype, x(), y(), w(), h(), fl_lighter( FL_BLACK ) );
fl_pop_clip();
unsigned long long now = get_ts();
double elapsedms = (now - then) / 1000.0;
static char text[256];
sprintf( text, "Drew %i boxes in in %fms", i, elapsedms );
fl_color( FL_RED );
fl_draw( text, x(), y(), w(), h(), FL_ALIGN_CENTER | FL_ALIGN_INSIDE );
draw_label();
if ( use_cairo )
fl_pop_use_cairo();
}
};
void
boxtype_cb ( Fl_Widget *w, void *v )
{
const char *picked = ((Fl_Choice*)w)->mvalue()->label();
if ( !strcmp( picked, "UP_BOX" ) )
boxtype = FL_UP_BOX;
else if ( !strcmp( picked, "FLAT_BOX" ) )
boxtype = FL_FLAT_BOX;
else if ( !strcmp( picked, "ROUNDED_BOX" ) )
boxtype = FL_ROUNDED_BOX;
else if ( !strcmp( picked, "OVAL_BOX" ) )
boxtype = FL_OVAL_BOX;
w->window()->redraw();
}
int
main ( int argc, char **argv )
{
{
Fl_Single_Window *w = new Fl_Single_Window( 800, 600 );
{ Fl_Choice *o = new Fl_Choice( 0, 0, 200, 24, "Boxtype" );
o->align( FL_ALIGN_RIGHT );
o->callback( boxtype_cb, NULL );
o->add( "UP_BOX" );
o->add( "FLAT_BOX" );
o->add( "ROUNDED_BOX" );
o->add( "OVAL_BOX" );
}
{
Fl_Scalepack *o = new Fl_Scalepack( 0, 24, 800, 600 - 24 );
o->type( 0 );
{
PerfTest *o = new PerfTest( 0,0, 800, 400, "Xlib" );
}
{
PerfTest *o = new PerfTest( 0,0, 800, 400, "Cairo" );
o->use_cairo = true;
}
o->end();
}
w->end();
w->show();
}
/* { */
/* Fl_Single_Window *w = new Fl_Single_Window( 800, 600 ); */
/* PerfTest *o = new PerfTest( 0,0, 800, 600 ); */
/* w->end(); */
/* w->show(); */
/* } */
Fl::run();
}

View File

@ -17,16 +17,25 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #
############################################################################### ###############################################################################
SUBDIRS=nonlib FL timeline mixer session-manager SUBDIRS=lib nonlib FL timeline mixer session-manager sequencer
all: all: lib/ntk/configure lib/.built .config
@ for dir in $(SUBDIRS); do $(MAKE) -s -C $$dir; done @ for dir in $(SUBDIRS); do echo Building $$dir; $(MAKE) -s -C $$dir; done
lib/ntk/configure:
@ git submodule update --init
lib/.built:
@ make -C lib
.config: configure
./configure
config: configure
./configure
clean: clean:
@ for dir in $(SUBDIRS); do $(MAKE) -s -C $$dir clean; done @ for dir in $(SUBDIRS); do $(MAKE) -s -C $$dir clean; done
install: install:
@ for dir in $(SUBDIRS); do $(MAKE) -s -C $$dir install; done @ for dir in $(SUBDIRS); do $(MAKE) -s -C $$dir install; done
config:
@ for dir in $(SUBDIRS); do $(MAKE) -s -C $$dir config; done

7
README.build Normal file
View File

@ -0,0 +1,7 @@
This repository contains all of the non-* software.
To build it, just type 'make'. Stuff will happen. Eventually, you'll
have to answer some build questions. Just answer them. Don't make
things harder on yourself by trying to build everything
individually. Just type 'make'. I'm serious. It's that simple.

59
configure vendored Executable file
View File

@ -0,0 +1,59 @@
#!/bin/sh
#
# Copyright (C) 2008 Jonathan Moore Liles
# This file is licensed under version 2 of the GPL.
. scripts/config-funcs
begin
begin_options
echo "Master configuration"
ask "Installation prefix" prefix /usr/local
ask "Build for debugging" USE_DEBUG no
begin_tests
# should require everything all of the subprojects require
require_command ar ar
require_command makedepend makedepend
require_FLTK 1.3.0 images
require_command FLUID lib/ntk/fluid/fluid
require_package JACK 0.103.0 jack
test_version `version_of jack` 0.105.0 || append "JACK_MIDI_PROTO_API=yes"
require_package sndfile 1.0.17 sndfile
require_package lrdf 0.4.0 lrdf
require_package liblo 0.23 liblo
suggest_package XPM 2.0.0 xpm
require_package sigcpp 2.0.0 sigc++-2.0
test_version `version_of liblo` 0.26 || warn "Version $(version_of liblo) of liblo is slow to create servers. Consider upgrading to 0.26 or later"
if ! hostname_resolvable
then
echo "Your hostname \"$(hostname)\" does not resolve to a valid address."
echo "This is a broken configuration and will cause liblo (the"
echo "OSC library) to fail to function. Add the line:"
echo
echo "127.0.0.1 $(hostname)"
echo
echo "to your /etc/hosts file to fix. And consider switching to a saner distribution."
echo
fail "Invalid hostname!"
fi
end
# installing configuration
echo -n "Copying configuration to modules..."
for i in nonlib FL timeline mixer sequencer session-manager
do
echo -n "$i "
cp .config "$i"
done
echo

21
lib/Makefile Normal file
View File

@ -0,0 +1,21 @@
OBJS:= ntk/lib/libntk.a ntk/lib/libntk_images.a
SRCS:= $(wildcard ntk/src/*.cxx ntk/FL/*.H)
$(SRCS): ntk/config.h
@ echo Building NTK
$(MAKE) -C ntk
@ touch .built
$(OBJS): $(SRCS)
ntk/config.h: Makefile
@ echo Configuring NTK
cd ntk && ./configure --prefix=/usr/local --enable-debug --enable-shared --disable-gl --enable-threads --enable-xft --enable-cairo --enable-cairoext --enable-xinerama
@ touch ntk/config.h
config: ntk/config.h
clean:
all: $(OBJS)

1
lib/ntk Submodule

@ -0,0 +1 @@
Subproject commit 41d4f68b3b9f9526cb4e31a060042936d542595e

5
mixer/configure vendored
View File

@ -14,14 +14,13 @@ ask "Build for debugging" USE_DEBUG no
begin_tests begin_tests
require_FLTK 1.1.7 images
require_command FLUID fluid
require_command ar ar require_command ar ar
require_command makedepend makedepend require_command makedepend makedepend
require_FLTK 1.3.0 images
require_command FLUID lib/ntk/fluid/fluid
require_package JACK 0.103.0 jack require_package JACK 0.103.0 jack
require_package lrdf 0.4.0 lrdf require_package lrdf 0.4.0 lrdf
require_package liblo 0.23 liblo require_package liblo 0.23 liblo
require_package sigcpp 2.0.0 sigc++-2.0
suggest_package XPM 2.0.0 xpm suggest_package XPM 2.0.0 xpm
test_version `version_of liblo` 0.26 || warn "Version $(version_of liblo) of liblo is slow to create servers. Consider upgrading to 0.26 or later" test_version `version_of liblo` 0.26 || warn "Version $(version_of liblo) of liblo is slow to create servers. Consider upgrading to 0.26 or later"

View File

@ -17,8 +17,8 @@ upload: all
@ rm -f index.html @ rm -f index.html
install: install:
@ mkdir -p $(DOCUMENT_PATH)/non-mixer @ install -d "$(DESTDIR)$(DOCUMENT_PATH)"/non-mixer
@ cp $(OBJS) *.png mup.css ../../COPYING $(DOCUMENT_PATH)/non-mixer @ cp $(OBJS) *.png mup.css ../../COPYING "$(DESTDIR)$(DOCUMENT_PATH)"/non-mixer
# @ ln -sf $(PIXMAP_PATH)/logo.png $(DOCUMENT_PATH) # @ ln -sf $(PIXMAP_PATH)/logo.png $(DOCUMENT_PATH)
clean: clean:

1
mixer/lib Symbolic link
View File

@ -0,0 +1 @@
../lib

View File

@ -12,26 +12,27 @@ SRCS:=$(SRCS:.fl=.C)
SRCS:=$(sort $(SRCS)) SRCS:=$(sort $(SRCS))
OBJS:=$(SRCS:.C=.o) OBJS:=$(SRCS:.C=.o)
LIBS := $(FLTK_LIBS) $(JACK_LIBS) $(LASH_LIBS) $(LRDF_LIBS) $(LIBLO_LIBS) $(SIGCPP_LIBS) $(XPM_LIBS) LIBS += $(FLTK_LDFLAGS) $(JACK_LIBS) $(LRDF_LIBS) $(LIBLO_LIBS) $(XPM_LIBS)
CFLAGS := $(FLTK_CFLAGS) $(JACK_CFLAGS) $(LIBLO_CFLAGS) $(SIGCPP_CFLAGS) $(XPM_CFLAGS) CFLAGS += $(FLTK_CFLAGS) $(JACK_CFLAGS) $(LRDF_CFLAGS) $(LIBLO_CFLAGS) $(XPM_CFLAGS)
src/mixer: $(OBJS) FL/libfl_widgets.a nonlib/libnonlib.a src/mixer: $(OBJS) FL/libfl_widgets.a nonlib/libnonlib.a $(FLTK_LIBS)
@ echo -n Linking mixer... @ echo -n Linking mixer...
@ $(CXX) $(CXXFLAGS) $(LIBS) $(OBJS) -o $@ -LFL -lfl_widgets -Lnonlib -lnonlib -ldl && echo $(DONE) @ $(CXX) $(CXXFLAGS) $^ -o $@ $(LIBS) -LFL -lfl_widgets -Lnonlib -lnonlib -ldl && echo $(DONE)
Mixer: src/mixer Mixer: src/mixer
clean: clean:
rm -f $(OBJS) src/mixer rm -f $(OBJS) src/mixer .deps
install: all install: all
@ echo -n "Installing..." @ echo -n "Installing..."
@ install src/mixer "$(DESTDIR)$(prefix)"/bin/non-mixer @ install -Dm755 src/mixer "$(DESTDIR)$(prefix)"/bin/non-mixer
@ mkdir -p "$(DESTDIR)$(SYSTEM_PATH)"/non-mixer @ ln -s "$(DESTDIR)$(prefix)"/bin/non-mixer "$(DESTDIR)$(prefix)"/bin/non-mixer-noui
@ install -d "$(DESTDIR)$(SYSTEM_PATH)"/non-mixer
@ $(MAKE) -s -C doc install @ $(MAKE) -s -C doc install
@ install -d "$(DESTDIR)$(PIXMAP_PATH)/non-mixer" @ install -d "$(DESTDIR)$(PIXMAP_PATH)/non-mixer"
@ install -m 644 icons/hicolor/256x256/apps/non-mixer.png "$(DESTDIR)$(PIXMAP_PATH)"/non-mixer/icon-256x256.png @ install -Dm644 icons/hicolor/256x256/apps/non-mixer.png "$(DESTDIR)$(PIXMAP_PATH)"/non-mixer/icon-256x256.png
@ install -d "$(DESTDIR)$(ICON_PATH)/hicolor" @ install -d "$(DESTDIR)$(ICON_PATH)/hicolor"
@ cp -au icons/hicolor/ "$(DESTDIR)$(ICON_PATH)" @ cp -au icons/hicolor/ "$(DESTDIR)$(ICON_PATH)"
@ install -d "$(DESTDIR)$(DESKTOP_PATH)" @ install -d "$(DESTDIR)$(DESKTOP_PATH)"
@ -39,6 +40,6 @@ install: all
@ echo "$(DONE)" @ echo "$(DONE)"
ifneq ($(USE_DEBUG),yes) ifneq ($(USE_DEBUG),yes)
@ echo -n "Stripping..." @ echo -n "Stripping..."
@ strip $(DESTDIR)$(prefix)/bin/non-mixer @ strip "$(DESTDIR)$(prefix)"/bin/non-mixer
@ echo "$(DONE)" @ echo "$(DONE)"
endif endif

View File

@ -293,6 +293,25 @@ void Chain::cb_handle(Fl_Widget* o, void* v) {
((Chain*)(v))->cb_handle(o); ((Chain*)(v))->cb_handle(o);
} }
void
Chain::remove ( Controller_Module *m )
{
DMESSAGE( "Removing controller module from chain" );
engine()->lock();
m->disconnect();
controls_pack->remove( m );
modules_pack->remove( m );
build_process_queue();
engine()->unlock();
redraw();
}
/* remove a module from the chain. this isn't guaranteed to succeed, /* remove a module from the chain. this isn't guaranteed to succeed,
* because removing the module might result in an invalid routing */ * because removing the module might result in an invalid routing */
@ -311,11 +330,15 @@ Chain::remove ( Module *m )
fl_alert( "Can't remove module at this point because the resultant chain is invalid" ); fl_alert( "Can't remove module at this point because the resultant chain is invalid" );
} }
engine()->lock();
strip()->handle_module_removed( m ); strip()->handle_module_removed( m );
modules_pack->remove( m ); modules_pack->remove( m );
configure_ports(); configure_ports();
engine()->unlock();
} }
/* determine number of output ports, signal if changed. */ /* determine number of output ports, signal if changed. */
@ -363,14 +386,9 @@ Chain::get_module_instance_number ( Module *m )
{ {
int n = 0; int n = 0;
for ( int i = 0; i < modules(); ++i ) for ( int i = 0; i < modules() && module(i) != m; ++i )
{ if ( ! strcmp( module(i)->label(), m->label() ) )
if ( module(i) == m )
break;
if ( ! strcmp( module(i)->name(), m->name() ) )
n++; n++;
}
return n; return n;
} }

View File

@ -101,6 +101,7 @@ public:
int modules ( void ) const { return modules_pack->children(); } int modules ( void ) const { return modules_pack->children(); }
Module *module ( int n ) const { return (Module*)modules_pack->child( n ); } Module *module ( int n ) const { return (Module*)modules_pack->child( n ); }
void remove ( Controller_Module *m );
void remove ( Module *m ); void remove ( Module *m );
bool add ( Module *m ); bool add ( Module *m );
bool add ( Controller_Module *m ); bool add ( Controller_Module *m );

View File

@ -30,9 +30,8 @@
#include <FL/Fl_Menu_Button.H> #include <FL/Fl_Menu_Button.H>
#include <FL/Fl_Menu_.H> #include <FL/Fl_Menu_.H>
#include <FL/Fl_Light_Button.H> #include <FL/Fl_Light_Button.H>
#include "FL/Crystal_Boxtypes.H"
#include <FL/fl_draw.H> #include <FL/fl_draw.H>
#include "FL/Fl_Arc_Dial.H" #include "FL/Fl_Dial.H"
#include "FL/Fl_Labelpad_Group.H" #include "FL/Fl_Labelpad_Group.H"
#include "FL/Fl_Value_SliderX.H" #include "FL/Fl_Value_SliderX.H"
#include "Panner.H" #include "Panner.H"
@ -92,6 +91,17 @@ Controller_Module::handle_chain_name_changed()
// change_osc_path( generate_osc_path() ); // change_osc_path( generate_osc_path() );
} }
void
Controller_Module::disconnect ( void )
{
for ( std::vector<Module::Port>::iterator i = control_output.begin();
i != control_output.end();
++i )
{
(*i).disconnect();
}
}
void void
@ -100,11 +110,21 @@ Controller_Module::get ( Log_Entry &e ) const
Module::get( e ); Module::get( e );
Port *p = control_output[0].connected_port(); Port *p = control_output[0].connected_port();
Module *m = p->module();
e.add( ":module", m ); if ( !p )
e.add( ":port", m->control_input_port_index( p ) ); {
e.add( ":mode", mode() ); e.add( ":module", "" );
e.add( ":port", "" );
e.add( ":mode", "" );
}
else
{
Module *m = p->module();
e.add( ":module", m );
e.add( ":port", m->control_input_port_index( p ) );
e.add( ":mode", mode() );
}
} }
void void
@ -361,7 +381,7 @@ Controller_Module::connect_to ( Port *p )
} }
else else
{ {
{ Fl_Arc_Dial *o = new Fl_Arc_Dial( 0, 0, 50, 50, p->name() ); { Fl_Dial *o = new Fl_Dial( 0, 0, 50, 50, p->name() );
w = o; w = o;
control = o; control = o;
@ -486,6 +506,8 @@ Controller_Module::menu_cb ( const Fl_Menu_ *m )
mode( GUI ); mode( GUI );
else if ( ! strcmp( picked, "Mode/Control Voltage (JACK)" ) ) else if ( ! strcmp( picked, "Mode/Control Voltage (JACK)" ) )
mode( CV ); mode( CV );
else if ( ! strcmp( picked, "/Remove" ) )
command_remove();
} }
/** build the context menu for this control */ /** build the context menu for this control */
@ -499,7 +521,8 @@ Controller_Module::menu ( void )
{ "Mode", 0, 0, 0, FL_SUBMENU }, { "Mode", 0, 0, 0, FL_SUBMENU },
{ "GUI + OSC", 0, 0, 0, FL_MENU_RADIO | ( mode() == GUI ? FL_MENU_VALUE : 0 ) }, { "GUI + OSC", 0, 0, 0, FL_MENU_RADIO | ( mode() == GUI ? FL_MENU_VALUE : 0 ) },
{ "Control Voltage (JACK)", 0, 0, 0, FL_MENU_RADIO | ( mode() == CV ? FL_MENU_VALUE : 0 ) }, { "Control Voltage (JACK)", 0, 0, 0, FL_MENU_RADIO | ( mode() == CV ? FL_MENU_VALUE : 0 ) },
{ 0 }, { 0 },
{ "Remove", 0, 0, 0, 0 },
{ 0 }, { 0 },
}; };
@ -570,6 +593,18 @@ Controller_Module::handle_control_changed ( Port *p )
} }
} }
void
Controller_Module::command_remove ( void )
{
if ( is_default() )
fl_alert( "Default modules may not be deleted." );
else
{
chain()->remove( this );
Fl::delete_widget( this );
}
}
/**********/ /**********/
/* Engine */ /* Engine */
/**********/ /**********/

View File

@ -78,10 +78,13 @@ public:
void connect_to ( Port *p ); void connect_to ( Port *p );
bool connect_spatializer_to ( Module *m ); bool connect_spatializer_to ( Module *m );
void disconnect ( void );
void handle_control_changed ( Port *p ); void handle_control_changed ( Port *p );
void handle_chain_name_changed ( void ); void handle_chain_name_changed ( void );
virtual void command_remove ( void );
LOG_CREATE_FUNC( Controller_Module ); LOG_CREATE_FUNC( Controller_Module );
void process ( nframes_t nframes ); void process ( nframes_t nframes );

View File

@ -55,7 +55,7 @@ DPM::DPM ( int X, int Y, int W, int H, const char *L ) :
if ( DPM::_gradient[ 0 ] == 0 ) if ( DPM::_gradient[ 0 ] == 0 )
DPM::blend( FL_GREEN, FL_RED ); DPM::blend( FL_GREEN, FL_RED );
box( FL_ROUNDED_BOX ); box( FL_FLAT_BOX );
color( FL_BACKGROUND_COLOR ); color( FL_BACKGROUND_COLOR );
} }
@ -114,6 +114,8 @@ DPM::resize ( int X, int Y, int W, int H )
void void
DPM::draw ( void ) DPM::draw ( void )
{ {
if ( !_segments )
return;
snprintf( peak_string, sizeof( peak_string ), "%.1f", peak() ); snprintf( peak_string, sizeof( peak_string ), "%.1f", peak() );
tooltip( peak_string ); tooltip( peak_string );
@ -129,6 +131,8 @@ DPM::draw ( void )
int v = pos( value() ); int v = pos( value() );
int pv = pos( peak() ); int pv = pos( peak() );
int clipv = pos( 0 );
int bh = h() / _segments; int bh = h() / _segments;
int bw = w() / _segments; int bw = w() / _segments;
@ -170,10 +174,14 @@ DPM::draw ( void )
for ( int p = lo; p <= hi; p++ ) for ( int p = lo; p <= hi; p++ )
{ {
Fl_Color c = DPM::div_color( p ); Fl_Color c;
if ( p > v && p != pv ) if ( p > v && p != pv )
c = dim_div_color( p ); c = dim_div_color( p );
else if ( p != clipv )
c = div_color( p );
else
c = fl_color_average( FL_YELLOW, div_color( p ), 0.40 );
if ( ! active ) if ( ! active )
c = fl_inactive( c ); c = fl_inactive( c );

View File

@ -27,9 +27,8 @@
#include <FL/fl_draw.H> #include <FL/fl_draw.H>
#include <FL/Fl_Counter.H> #include <FL/Fl_Counter.H>
#include <FL/Fl_Light_Button.H> #include <FL/Fl_Light_Button.H>
#include "FL/Crystal_Boxtypes.H"
#include "FL/Fl_Arc_Dial.H" #include "FL/Fl_Dial.H"
#include "FL/Fl_Labelpad_Group.H" #include "FL/Fl_Labelpad_Group.H"
#include "FL/Fl_Scalepack.H" #include "FL/Fl_Scalepack.H"
@ -49,7 +48,7 @@ Meter_Indicator_Module::Meter_Indicator_Module ( bool is_default )
: Module ( is_default, 50, 100, name() ) : Module ( is_default, 50, 100, name() )
{ {
box( FL_FLAT_BOX ); box( FL_FLAT_BOX );
color( FL_GREEN ); color( FL_BACKGROUND_COLOR );
_pad = true; _pad = true;
control_value = 0; control_value = 0;
@ -57,6 +56,8 @@ Meter_Indicator_Module::Meter_Indicator_Module ( bool is_default )
add_port( Port( this, Port::INPUT, Port::CONTROL ) ); add_port( Port( this, Port::INPUT, Port::CONTROL ) );
dpm_pack = new Fl_Scalepack( x(), y(), w(), h() ); dpm_pack = new Fl_Scalepack( x(), y(), w(), h() );
dpm_pack->color( FL_BACKGROUND_COLOR );
dpm_pack->box( FL_FLAT_BOX );
dpm_pack->type( FL_HORIZONTAL ); dpm_pack->type( FL_HORIZONTAL );
end(); end();

View File

@ -192,11 +192,7 @@ get_peak_sample ( const sample_t* buf, nframes_t nframes )
for ( int j = nframes; j--; ++f ) for ( int j = nframes; j--; ++f )
{ {
float s = *f; const float s = fabs( *f );
/* rectify */
if ( s < 0.0f )
s = 0 - s;
if ( s > p ) if ( s > p )
p = s; p = s;
@ -212,7 +208,8 @@ Meter_Module::process ( nframes_t nframes )
{ {
if ( audio_input[i].connected() ) if ( audio_input[i].connected() )
{ {
float dB = 20 * log10( get_peak_sample( (float*)audio_input[i].buffer(), nframes ) / 2.0f ); // float dB = 20 * log10( get_peak_sample( (float*)audio_input[i].buffer(), nframes ) / 2.0f );
float dB = 20 * log10( get_peak_sample( (float*)audio_input[i].buffer(), nframes ) );
((float*)control_output[0].buffer())[i] = dB; ((float*)control_output[0].buffer())[i] = dB;
control_value[i] = dB; control_value[i] = dB;

View File

@ -35,6 +35,7 @@
#include "FL/Fl_Menu_Settings.H" #include "FL/Fl_Menu_Settings.H"
#include "About_Dialog.H" #include "About_Dialog.H"
#include <FL/Fl_File_Chooser.H> #include <FL/Fl_File_Chooser.H>
#include "FL/Fl_Theme_Chooser.H"
#include "file.h" #include "file.h"
@ -44,17 +45,11 @@
#include <sys/types.h> #include <sys/types.h>
#include "FL/Fl_Value_SliderX.H" #include "FL/Fl_Value_SliderX.H"
#include "FL/color_scheme.H"
#include "OSC/Endpoint.H" #include "OSC/Endpoint.H"
#include <lo/lo.h> #include <lo/lo.h>
#include "FL/Fl_Blinker.H"
#include "OSC/Endpoint.H"
const double STATUS_UPDATE_FREQ = 0.2f; const double STATUS_UPDATE_FREQ = 0.2f;
const double OSC_INTERVAL = 1.0 / 20.0; /* 20 hz */
extern char *user_config_dir; extern char *user_config_dir;
extern char *instance_name; extern char *instance_name;
@ -89,8 +84,11 @@ static int osc_add_strip ( const char *path, const char *, lo_arg **, int , lo_m
{ {
OSC_DMSG(); OSC_DMSG();
Fl::lock();
((Mixer*)(OSC_ENDPOINT())->owner)->command_add_strip(); ((Mixer*)(OSC_ENDPOINT())->owner)->command_add_strip();
Fl::unlock();
OSC_REPLY_OK(); OSC_REPLY_OK();
return 0; return 0;
@ -102,19 +100,29 @@ Mixer::reply_to_finger ( lo_message msg )
int argc = lo_message_get_argc( msg ); int argc = lo_message_get_argc( msg );
lo_arg **argv = lo_message_get_argv( msg ); lo_arg **argv = lo_message_get_argv( msg );
if ( argc < 1 ) if ( argc >= 4 )
return; {
const char *url = &argv[0]->s;
const char *name = &argv[1]->s;
const char *version = &argv[2]->s;
const char *id = &argv[3]->s;
lo_address to = lo_address_new_from_url( &argv[0]->s ); MESSAGE( "Discovered NON peer %s (%s) @ %s with ID \"%s\"", name, version, url, id );
MESSAGE( "Registering Signals" );
osc_endpoint->send( to, lo_address to = lo_address_new_from_url( &argv[0]->s );
"/non/hello",
osc_endpoint->url(),
APP_NAME,
VERSION,
instance_name );
lo_address_free( to ); osc_endpoint->send( to,
"/non/hello",
osc_endpoint->url(),
APP_NAME,
VERSION,
instance_name );
mixer->osc_endpoint->hello( url );
lo_address_free( to );
}
} }
void void
@ -273,51 +281,23 @@ void Mixer::cb_menu(Fl_Widget* o) {
{ {
rows( 3 ); rows( 3 );
} }
else if (! strcmp( picked, "&Options/&Display/&Style/&Default") ) else if (! strcmp( picked, "&View/&Theme") )
{ {
Fl::scheme( "gtk+" ); fl_theme_chooser();
}
else if (! strcmp( picked, "&Options/&Display/&Style/&Flat") )
{
Fl::scheme( "gtk+" );
}
else if (! strcmp( picked, "&Options/&Display/&Style/&Round") )
{
Fl::scheme( "plastic" );
}
else if (! strcmp( picked, "&Options/&Display/&Colors/&System") )
{
color_scheme( "system" );
}
else if (! strcmp( picked, "&Options/&Display/&Colors/&Dark") )
{
color_scheme( "dark" );
}
else if (! strcmp( picked, "&Options/&Display/&Colors/&Very Dark") )
{
color_scheme( "very dark" );
}
else if (! strcmp( picked, "&Options/&Display/&Colors/&Light") )
{
color_scheme( "light" );
}
else if (! strcmp( picked, "&Options/&Display/&Colors/&Gray") )
{
color_scheme( "gray" );
} }
else if (! strcmp( picked, "&Options/&Display/&Knobs/&Burnished") ) else if (! strcmp( picked, "&Options/&Display/&Knobs/&Burnished") )
{ {
Fl_Arc_Dial::default_style( Fl_Arc_Dial::BURNISHED_DIAL ); Fl_Dial::default_style( Fl_Dial::BURNISHED_DIAL );
redraw_windows(); redraw_windows();
} }
else if (! strcmp( picked, "&Options/&Display/&Knobs/&Arc") ) else if (! strcmp( picked, "&Options/&Display/&Knobs/&Arc") )
{ {
Fl_Arc_Dial::default_style( Fl_Arc_Dial::ARC_DIAL ); Fl_Dial::default_style( Fl_Dial::ARC_DIAL );
redraw_windows(); redraw_windows();
} }
else if (! strcmp( picked, "&Options/&Display/&Knobs/&Plastic") ) else if (! strcmp( picked, "&Options/&Display/&Knobs/&Plastic") )
{ {
Fl_Arc_Dial::default_style( Fl_Arc_Dial::PLASTIC_DIAL ); Fl_Dial::default_style( Fl_Dial::PLASTIC_DIAL );
redraw_windows(); redraw_windows();
} }
else if (! strcmp( picked, "&Options/&Display/&Sliders/&Nice") ) else if (! strcmp( picked, "&Options/&Display/&Sliders/&Nice") )
@ -377,74 +357,68 @@ void Mixer::cb_menu(Fl_Widget* o, void* v) {
Mixer::Mixer ( int X, int Y, int W, int H, const char *L ) : Mixer::Mixer ( int X, int Y, int W, int H, const char *L ) :
Fl_Group( X, Y, W, H, L ) Fl_Group( X, Y, W, H, L )
{ {
get_system_colors();
Fl::scheme( "plastic" );
color_scheme( "dark" );
Loggable::dirty_callback( &Mixer::handle_dirty, this ); Loggable::dirty_callback( &Mixer::handle_dirty, this );
_rows = 1; _rows = 1;
box( FL_NO_BOX ); box( FL_FLAT_BOX );
labelsize( 96 ); labelsize( 96 );
{ Fl_Menu_Bar *o = menubar = new Fl_Menu_Bar( X, Y, W, 24 ); { Fl_Group *o = new Fl_Group( X, Y, W, 24 );
o->add( "&Project/&New" );
o->add( "&Project/&Open" ); { Fl_Menu_Bar *o = menubar = new Fl_Menu_Bar( X, Y, W, 24 );
o->add( "&Project/&Save", FL_CTRL + 's', 0, 0 ); o->add( "&Project/&New" );
o->add( "&Project/&Quit", FL_CTRL + 'q', 0, 0 ); o->add( "&Project/&Open" );
o->add( "&Mixer/&Add Strip", 'a', 0, 0 ); o->add( "&Project/&Save", FL_CTRL + 's', 0, 0 );
o->add( "&Mixer/Add &N Strips" ); o->add( "&Project/&Quit", FL_CTRL + 'q', 0, 0 );
o->add( "&Mixer/&Import Strip" ); o->add( "&Mixer/&Add Strip", 'a', 0, 0 );
o->add( "&Mixer/&Rows/One", '1', 0, 0 ); o->add( "&Mixer/Add &N Strips" );
o->add( "&Mixer/&Rows/Two", '2', 0, 0 ); o->add( "&Mixer/&Import Strip" );
o->add( "&Mixer/&Rows/Three", '3', 0, 0 ); o->add( "&Mixer/&Rows/One", '1', 0, 0 );
o->add( "_&Options/&Display/&Style/&Default", 0, 0, 0, FL_MENU_RADIO | FL_MENU_VALUE ); o->add( "&Mixer/&Rows/Two", '2', 0, 0 );
o->add( "_&Options/&Display/&Style/&Flat", 0, 0, 0, FL_MENU_RADIO ); o->add( "&Mixer/&Rows/Three", '3', 0, 0 );
o->add( "_&Options/&Display/&Style/&Round", 0, 0, 0, FL_MENU_RADIO ); o->add( "&View/&Theme", 0, 0, 0 );
o->add( "_&Options/&Display/&Colors/&Dark", 0, 0, 0, FL_MENU_RADIO | FL_MENU_VALUE ); o->add( "_&Options/&Display/&Knobs/&Arc", 0, 0, 0, FL_MENU_RADIO );
o->add( "_&Options/&Display/&Colors/&Very Dark", 0, 0, 0, FL_MENU_RADIO ); o->add( "_&Options/&Display/&Knobs/&Burnished", 0, 0, 0, FL_MENU_RADIO );
o->add( "_&Options/&Display/&Colors/&Light", 0, 0, 0, FL_MENU_RADIO ); o->add( "_&Options/&Display/&Knobs/&Plastic", 0, 0, 0, FL_MENU_RADIO | FL_MENU_VALUE );
o->add( "_&Options/&Display/&Colors/&Gray", 0, 0, 0, FL_MENU_RADIO ); o->add( "_&Options/&Display/&Sliders/&Nice", 0, 0, 0, FL_MENU_RADIO | FL_MENU_VALUE );
o->add( "_&Options/&Display/&Colors/&System", 0, 0, 0, FL_MENU_RADIO ); o->add( "_&Options/&Display/&Sliders/&Fill", 0, 0, 0, FL_MENU_RADIO );
o->add( "_&Options/&Display/&Knobs/&Arc", 0, 0, 0, FL_MENU_RADIO ); o->add( "_&Options/&Display/&Sliders/&Simple", 0, 0, 0, FL_MENU_RADIO );
o->add( "_&Options/&Display/&Knobs/&Burnished", 0, 0, 0, FL_MENU_RADIO ); o->add( "_&Options/&Display/&Colors/&System", 0, 0, 0, FL_MENU_RADIO );
o->add( "_&Options/&Display/&Knobs/&Plastic", 0, 0, 0, FL_MENU_RADIO | FL_MENU_VALUE ); o->add( "&Help/&Manual" );
o->add( "_&Options/&Display/&Sliders/&Nice", 0, 0, 0, FL_MENU_RADIO | FL_MENU_VALUE ); o->add( "&Help/&About" );
o->add( "_&Options/&Display/&Sliders/&Fill", 0, 0, 0, FL_MENU_RADIO ); o->callback( cb_menu, this );
o->add( "_&Options/&Display/&Sliders/&Simple", 0, 0, 0, FL_MENU_RADIO ); }
o->add( "_&Options/&Display/&Colors/&System", 0, 0, 0, FL_MENU_RADIO ); { Fl_Box *o = project_name = new Fl_Box( X + 150, Y, W, 24 );
o->add( "&Help/&Manual" ); o->labelfont( FL_HELVETICA_ITALIC );
o->add( "&Help/&About" ); o->label( 0 );
o->callback( cb_menu, this ); o->align( FL_ALIGN_INSIDE | FL_ALIGN_CENTER );
o->labeltype( FL_SHADOW_LABEL );
Fl_Group::current()->resizable( o );
}
{ sm_blinker = new Fl_Button( ( X + W) - 37, Y + 4, 35, 15, "SM");
sm_blinker->box(FL_ROUNDED_BOX);
sm_blinker->down_box(FL_ROUNDED_BOX);
sm_blinker->color(FL_DARK2);
sm_blinker->selection_color((Fl_Color)93);
sm_blinker->labeltype(FL_NORMAL_LABEL);
sm_blinker->labelfont(3);
sm_blinker->labelsize(14);
sm_blinker->labelcolor(FL_DARK3);
sm_blinker->align(Fl_Align(FL_ALIGN_CENTER));
sm_blinker->when(FL_WHEN_RELEASE);
sm_blinker->deactivate();
} // Fl_Blink_Button* sm_blinker
o->end();
} }
{ Fl_Box *o = project_name = new Fl_Box( X + 150, Y, W, 24 );
o->labelfont( FL_HELVETICA_ITALIC );
o->label( 0 );
o->align( FL_ALIGN_INSIDE | FL_ALIGN_CENTER );
o->labeltype( FL_SHADOW_LABEL );
}
{ sm_blinker = new Fl_Blinker( ( X + W) - 52, Y + 4, 50, 15, "SM");
sm_blinker->box(FL_ROUNDED_BOX);
sm_blinker->down_box(FL_ROUNDED_BOX);
sm_blinker->color((Fl_Color)75);
sm_blinker->selection_color((Fl_Color)86);
sm_blinker->labeltype(FL_NORMAL_LABEL);
sm_blinker->labelfont(2);
sm_blinker->labelsize(14);
sm_blinker->labelcolor(FL_DARK3);
sm_blinker->align(Fl_Align(FL_ALIGN_CENTER));
sm_blinker->when(FL_WHEN_RELEASE);
sm_blinker->deactivate();
} // Fl_Blinker* sm_blinker
{ Fl_Scroll *o = scroll = new Fl_Scroll( X, Y + 24, W, H - 24 ); { Fl_Scroll *o = scroll = new Fl_Scroll( X, Y + 24, W, H - 24 );
o->box( FL_NO_BOX ); o->box( FL_FLAT_BOX );
// o->type( Fl_Scroll::HORIZONTAL_ALWAYS ); // o->type( Fl_Scroll::HORIZONTAL_ALWAYS );
// o->box( Fl_Scroll::BOTH ); // o->box( Fl_Scroll::BOTH );
{ {
Fl_Flowpack *o = mixer_strips = new Fl_Flowpack( X, Y + 24, W, H - 18 - 24 ); Fl_Flowpack *o = mixer_strips = new Fl_Flowpack( X, Y + 24, W, H - 18 - 24 );
label( "Non-Mixer" ); // label( "Non-Mixer" );
align( (Fl_Align)(FL_ALIGN_CENTER | FL_ALIGN_INSIDE) ); align( (Fl_Align)(FL_ALIGN_CENTER | FL_ALIGN_INSIDE) );
o->box( FL_NO_BOX ); o->box( FL_FLAT_BOX );
o->type( Fl_Pack::HORIZONTAL ); o->type( Fl_Pack::HORIZONTAL );
o->hspacing( 2 ); o->hspacing( 2 );
o->vspacing( 2 ); o->vspacing( 2 );
@ -478,21 +452,11 @@ Mixer::init_osc ( const char *osc_port )
osc_endpoint->add_method( "/non/mixer/add_strip", "", osc_add_strip, osc_endpoint, "" ); osc_endpoint->add_method( "/non/mixer/add_strip", "", osc_add_strip, osc_endpoint, "" );
// osc_endpoint->start(); osc_endpoint->start();
/* poll so we can keep OSC handlers running in the GUI thread and avoid extra sync */
Fl::add_timeout( OSC_INTERVAL, check_osc, this );
return 0; return 0;
} }
void
Mixer::check_osc ( void * v )
{
((Mixer*)v)->osc_endpoint->check();
Fl::repeat_timeout( OSC_INTERVAL, check_osc, v );
}
Mixer::~Mixer ( ) Mixer::~Mixer ( )
{ {

View File

@ -26,7 +26,9 @@
#include <FL/Fl_Pack.H> #include <FL/Fl_Pack.H>
#include "Mixer_Strip.H" #include "Mixer_Strip.H"
class Fl_Blinker; #include "Thread.H"
class Fl_Blink_Button;
class Fl_Flowpack; class Fl_Flowpack;
class Fl_Menu_Bar; class Fl_Menu_Bar;
namespace OSC { class Endpoint; } namespace OSC { class Endpoint; }
@ -38,7 +40,7 @@ class Mixer : public Fl_Group
public: public:
OSC::Endpoint *osc_endpoint; OSC::Endpoint *osc_endpoint;
Fl_Blinker *sm_blinker; Fl_Button *sm_blinker;
private: private:
@ -98,8 +100,6 @@ public:
Mixer ( int X, int Y, int W, int H, const char *L ); Mixer ( int X, int Y, int W, int H, const char *L );
virtual ~Mixer(); virtual ~Mixer();
static void check_osc ( void * v );
void reply_to_finger ( lo_message msg ); void reply_to_finger ( lo_message msg );
void announce ( const char *nash_url, const char *process_name ); void announce ( const char *nash_url, const char *process_name );

View File

@ -359,8 +359,7 @@ Mixer_Strip::init ( )
_gain_controller_mode = 0; _gain_controller_mode = 0;
_chain = 0; _chain = 0;
// box(FL_THIN_UP_BOX); box( FL_BORDER_BOX );
box( FL_RFLAT_BOX );
labeltype( FL_NO_LABEL ); labeltype( FL_NO_LABEL );
Fl_Group::color( FL_BACKGROUND_COLOR ); Fl_Group::color( FL_BACKGROUND_COLOR );

View File

@ -25,8 +25,7 @@
#include <FL/Fl_Scalepack.H> #include <FL/Fl_Scalepack.H>
#include <FL/Fl_Pack.H> #include <FL/Fl_Pack.H>
#include <FL/Fl_Flip_Button.H> #include <FL/Fl_Flip_Button.H>
#include <FL/Fl_Arc_Dial.H> #include <FL/Fl_Dial.H>
#include <FL/Crystal_Boxtypes.H>
#include <FL/Fl_Group.H> #include <FL/Fl_Group.H>
#include <FL/Fl_Box.H> #include <FL/Fl_Box.H>
#include <FL/Fl_Button.H> #include <FL/Fl_Button.H>

View File

@ -41,6 +41,8 @@
#include "OSC/Endpoint.H" #include "OSC/Endpoint.H"
#include "string_util.h"
Module *Module::_copied_module_empty = 0; Module *Module::_copied_module_empty = 0;
@ -188,8 +190,15 @@ Module::paste_before ( void )
{ {
Module *m = _copied_module_empty; Module *m = _copied_module_empty;
m->chain( chain() );
Log_Entry le( _copied_module_settings ); Log_Entry le( _copied_module_settings );
le.remove( ":chain" );
char *print = le.print();
DMESSAGE( "Pasting settings: %s", print );
free( print );
m->set( le ); m->set( le );
if ( ! chain()->insert( this, m ) ) if ( ! chain()->insert( this, m ) )
@ -201,7 +210,7 @@ Module::paste_before ( void )
_copied_module_settings = NULL; _copied_module_settings = NULL;
_copied_module_empty = NULL; _copied_module_empty = NULL;
/* set up for another copy */ /* set up for another paste */
m->copy(); m->copy();
} }
@ -243,20 +252,19 @@ Module::Port::generate_osc_path ()
else else
asprintf( &path, "/strip/%s/%s/%s", module()->chain()->name(), p->module()->label(), p->name() ); asprintf( &path, "/strip/%s/%s/%s", module()->chain()->name(), p->module()->label(), p->name() );
// Hack to keep spaces out of OSC URL... Probably need to handle other special characters similarly. char *s = escape_url( path );
for ( int i = strlen( path ); i--; )
{ free( path );
if ( path[i] == ' ' || path[i] == ',' )
path[i] = '_'; path = s;
}
return path; return path;
} }
void void
Module::Port::handle_signal_connection_state_changed ( OSC::Signal * ) Module::Port::handle_signal_connection_state_changed ( OSC::Signal *, void *o )
{ {
module()->redraw(); ((Module::Port*)o)->module()->redraw();
} }
void void
@ -286,8 +294,8 @@ Module::Port::change_osc_path ( char *path )
0.0, 1.0, scaled_default, 0.0, 1.0, scaled_default,
&Module::Port::osc_control_change_cv, this ); &Module::Port::osc_control_change_cv, this );
_scaled_signal->signal_connection_state_changed.connect(
sigc::mem_fun( this, &Module::Port::handle_signal_connection_state_changed ) ); _scaled_signal->connection_state_callback( handle_signal_connection_state_changed, this );
_unscaled_signal = mixer->osc_endpoint->add_signal( unscaled_path, _unscaled_signal = mixer->osc_endpoint->add_signal( unscaled_path,
OSC::Signal::Input, OSC::Signal::Input,
@ -314,6 +322,8 @@ Module::Port::osc_control_change_exact ( float v, void *user_data )
{ {
Module::Port *p = (Module::Port*)user_data; Module::Port *p = (Module::Port*)user_data;
Fl::lock();
float f = v; float f = v;
if ( p->hints.ranged ) if ( p->hints.ranged )
@ -326,6 +336,8 @@ Module::Port::osc_control_change_exact ( float v, void *user_data )
p->control_value( f ); p->control_value( f );
Fl::unlock();
// mixer->osc_endpoint->send( lo_message_get_source( msg ), "/reply", path, f ); // mixer->osc_endpoint->send( lo_message_get_source( msg ), "/reply", path, f );
return 0; return 0;
@ -338,6 +350,8 @@ Module::Port::osc_control_change_cv ( float v, void *user_data )
float f = v; float f = v;
Fl::lock();
// clamp value to control voltage range. // clamp value to control voltage range.
if ( f > 1.0 ) if ( f > 1.0 )
f = 1.0; f = 1.0;
@ -356,6 +370,7 @@ Module::Port::osc_control_change_cv ( float v, void *user_data )
p->control_value( f ); p->control_value( f );
Fl::unlock();
// mixer->osc_endpoint->send( lo_message_get_source( msg ), "/reply", path, f ); // mixer->osc_endpoint->send( lo_message_get_source( msg ), "/reply", path, f );
return 0; return 0;
@ -421,6 +436,26 @@ Module::set ( Log_Entry &e )
void
Module::chain ( Chain *v )
{
if ( _chain != v )
{
DMESSAGE( "Adding module %s in to chain %s", label(), v ? v->name() : "NULL" );
_chain = v;
for ( int i = 0; i < ncontrol_inputs(); ++i )
{
control_input[i].update_osc_port();
}
}
else
{
DMESSAGE( "Module %s already belongs to chain %s", label(), v ? v->name() : "NULL" );
}
}
/* return a string serializing this module's parameter settings. The /* return a string serializing this module's parameter settings. The
format is 1.0:2.0:... Where 1.0 is the value of the first control format is 1.0:2.0:... Where 1.0 is the value of the first control
input, 2.0 is the value of the second control input etc. input, 2.0 is the value of the second control input etc.

View File

@ -184,7 +184,9 @@ public:
void control_value_no_callback ( float f ) void control_value_no_callback ( float f )
{ {
THREAD_ASSERT( UI ); /* can also be called from the OSC thread */
ASSERT( Thread::is( "UI" ) || Thread::is( "OSC" ),
"Function called from wrong thread! (is %s)", Thread::current()->name() );
if ( buffer() ) if ( buffer() )
{ {
@ -259,7 +261,7 @@ public:
OSC::Signal *_scaled_signal; OSC::Signal *_scaled_signal;
OSC::Signal *_unscaled_signal; OSC::Signal *_unscaled_signal;
void handle_signal_connection_state_changed ( OSC::Signal *s ); static void handle_signal_connection_state_changed ( OSC::Signal *, void *o );
}; };
void bbox ( int &X, int &Y, int &W, int &H ) void bbox ( int &X, int &Y, int &W, int &H )
@ -371,18 +373,7 @@ public:
} }
Chain *chain ( void ) const { return _chain; } Chain *chain ( void ) const { return _chain; }
void chain ( Chain * v ) void chain ( Chain * v );
{
if ( _chain != v )
{
_chain = v;
for ( int i = 0; i < ncontrol_inputs(); ++i )
{
control_input[i].update_osc_port();
}
}
}
char *get_parameters ( void ) const; char *get_parameters ( void ) const;
void set_parameters ( const char * ); void set_parameters ( const char * );
@ -435,8 +426,8 @@ protected:
public: public:
void command_open_parameter_editor(); void command_open_parameter_editor();
void command_activate ( void ); virtual void command_activate ( void );
void command_deactivate ( void ); virtual void command_deactivate ( void );
void command_remove ( void ); virtual void command_remove ( void );
}; };

View File

@ -17,6 +17,8 @@
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/*******************************************************************************/ /*******************************************************************************/
#include <FL/Fl.H>
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
@ -27,11 +29,10 @@
#include <FL/Fl_Box.H> #include <FL/Fl_Box.H>
#include <FL/Fl_Menu_Button.H> #include <FL/Fl_Menu_Button.H>
#include <FL/Fl_Counter.H> #include <FL/Fl_Counter.H>
#include "FL/Crystal_Boxtypes.H"
#include "FL/Fl_Flowpack.H" #include "FL/Fl_Flowpack.H"
#include "FL/Fl_Labelpad_Group.H" #include "FL/Fl_Labelpad_Group.H"
#include "FL/Fl_Value_SliderX.H" #include "FL/Fl_Value_SliderX.H"
#include "FL/Fl_Arc_Dial.H" #include "FL/Fl_Dial.H"
#include "Module.H" #include "Module.H"
#include "Module_Parameter_Editor.H" #include "Module_Parameter_Editor.H"
@ -43,7 +44,7 @@
Module_Parameter_Editor::Module_Parameter_Editor ( Module *module ) : Fl_Double_Window( 0, 0, 800, 600 ) Module_Parameter_Editor::Module_Parameter_Editor ( Module *module ) : Fl_Double_Window( 800, 600 )
{ {
_module = module; _module = module;
_resized = false; _resized = false;
@ -199,7 +200,7 @@ Module_Parameter_Editor::make_controls ( void )
{ {
if ( mode_choice->value() == 0 ) if ( mode_choice->value() == 0 )
{ {
Fl_Arc_Dial *o = new Fl_Arc_Dial( 0, 0, 60, 60, p->name() ); Fl_Dial *o = new Fl_Dial( 0, 0, 60, 60, p->name() );
w = o; w = o;
if ( p->hints.ranged ) if ( p->hints.ranged )

View File

@ -43,7 +43,7 @@ NSM_Client::command_broadcast ( const char *path, lo_message msg )
int argc = lo_message_get_argc( msg ); int argc = lo_message_get_argc( msg );
// lo_arg **argv = lo_message_get_argv( msg ); // lo_arg **argv = lo_message_get_argv( msg );
if ( argc == 1 && !strcmp( path, "/non/finger" ) ) if ( !strcmp( path, "/non/hello" ) )
{ {
mixer->reply_to_finger( msg ); mixer->reply_to_finger( msg );
return 0; return 0;

View File

@ -18,9 +18,11 @@
/*******************************************************************************/ /*******************************************************************************/
#include "Panner.H" #include "Panner.H"
#include <FL/x.H>
#include <FL/Fl.H>
#include <stdio.h> #include <stdio.h>
#include <math.h> #include <math.h>
// #include <FL/fl_draw.H>
/* 2D Panner widget. Supports various multichannel configurations. */ /* 2D Panner widget. Supports various multichannel configurations. */
@ -81,8 +83,11 @@ Panner::point_bbox ( const Point *p, int *X, int *Y, int *W, int *H ) const
bbox( tx, ty, tw, th ); bbox( tx, ty, tw, th );
tw -= pw(); const float PW = pw();
th -= ph(); const float PH = ph();
tw -= PW;
th -= PH;
float px, py; float px, py;
@ -91,8 +96,8 @@ Panner::point_bbox ( const Point *p, int *X, int *Y, int *W, int *H ) const
*X = tx + ((tw / 2) * px + (tw / 2)); *X = tx + ((tw / 2) * px + (tw / 2));
*Y = ty + ((th / 2) * py + (th / 2)); *Y = ty + ((th / 2) * py + (th / 2));
*W = pw(); *W = PW;
*H = ph(); *H = PH;
} }
Panner::Point * Panner::Point *
@ -115,36 +120,13 @@ Panner::event_point ( void )
return NULL; return NULL;
} }
void void
Panner::draw ( void ) Panner::draw_the_box ( int tx, int ty, int tw, int th )
{ {
draw_box(); draw_box();
// draw_box( FL_FLAT_BOX, x(), y(), w(), h(), FL_BLACK );
draw_label();
fl_line_style( FL_SOLID, 2 );
if ( _bypassed )
{
fl_color( 0 );
fl_font( FL_HELVETICA, 12 );
fl_draw( "(bypass)", x(), y(), w(), h(), FL_ALIGN_CENTER );
return;
}
int tw, th, tx, ty;
bbox( tx, ty, tw, th );
fl_push_clip( tx, ty, tw, th );
fl_color( FL_RED );
const int b = 10;
tx += b;
ty += b;
tw -= b * 2;
th -= b * 2;
/* draw perimeter */ /* draw perimeter */
{ {
@ -154,8 +136,8 @@ Panner::draw ( void )
if ( Fl::belowmouse() == this ) if ( Fl::belowmouse() == this )
{ {
iter = 12; iter = 12;
c1 = fl_darker( FL_RED ); c1 = fl_darker( fl_darker( FL_RED ) );
c2 = FL_GRAY; c2 = FL_BLACK;
} }
else else
{ {
@ -172,11 +154,58 @@ Panner::draw ( void )
fl_arc( tx + (i * (tw / iter)) / 2, ty + (i * (th / iter)) / 2, tw - (i * (tw / iter)), th - (i * ( th / iter )), 0, 360 ); fl_arc( tx + (i * (tw / iter)) / 2, ty + (i * (th / iter)) / 2, tw - (i * (tw / iter)), th - (i * ( th / iter )), 0, 360 );
/* fl_arc( cr, */
/* tx + tw / 2, */
/* ty + th / 2, */
/* ((float)tw / iter) / 2, */
/* 0, 360 ); */
c = fl_color_average( c1, c2, (float)i / iter); c = fl_color_average( c1, c2, (float)i / iter);
} }
} }
/* fl_color( FL_WHITE ); */ fl_line_style( FL_SOLID, 0 );
}
void
Panner::draw ( void )
{
int tw, th, tx, ty;
bbox( tx, ty, tw, th );
fl_push_clip( tx, ty, tw, th );
const int b = 10;
// draw_box();
draw_label();
if ( _bypassed )
{
draw_box();
fl_color( 0 );
fl_font( FL_HELVETICA, 12 );
fl_draw( "(bypass)", x(), y(), w(), h(), FL_ALIGN_CENTER );
goto done;
}
tx += b;
ty += b;
tw -= b * 2;
th -= b * 2;
if ( damage() & FL_DAMAGE_ALL )
draw_the_box( tx, ty, tw, th );
fl_line_style( FL_SOLID, 2 );
// fl_color( FL_RED );
fl_color( FL_WHITE );
/* fl_arc( tx, ty, tw, th, 0, 360 ); */ /* fl_arc( tx, ty, tw, th, 0, 360 ); */
@ -225,23 +254,52 @@ Panner::draw ( void )
int px, py, pw, ph; int px, py, pw, ph;
point_bbox( p, &px, &py, &pw, &ph ); point_bbox( p, &px, &py, &pw, &ph );
/* draw point */
if ( p != drag )
fl_color( c ); {
else
const float S = ( 0.5 + ( 1.0f - p->d ) );
float po = 5 * S;
fl_push_clip( px - ( po * 12 ),
py - ( po * 12 ),
pw + ( po * 24 ), ph + (po * 24 ));
if ( damage() & FL_DAMAGE_EXPOSE )
draw_the_box( tx, ty, tw, th );
fl_color( FL_WHITE ); fl_color( FL_WHITE );
fl_pie( px, py, pw, ph, 0, 360 ); /* draw point */
if ( p != drag )
fl_color( c );
/* draw echo */ fl_pie( px, py, pw, ph, 0, 360 );
fl_color( c = fl_darker( c ) );
fl_arc( px - 5, py - 5, pw + 10, ph + 10, 0, 360 ); /* draw echo */
if ( Fl::belowmouse() == this )
{
fl_color( c = fl_darker( c ) ); fl_color( c = fl_darker( c ) );
fl_arc( px - 10, py - 10, pw + 20, ph + 20, 0, 360 ); // fl_color_alpha( c = fl_darker( c ), 0.5 );
// fl_arc( cr, px, py, pw + po * 1, 0, 360 );
fl_arc( px - po, py - po, pw + ( po * 2 ), ph + ( po * 2 ), 0, 360 );
if ( Fl::belowmouse() == this )
{
fl_color( c = fl_darker( c ) );
// fl_color_alpha( c = fl_darker( c ), 0.5 );
fl_arc( px - ( po * 2 ), py - ( po * 2 ), pw + ( po * 4 ), ph + ( po * 4 ), 0, 360 );
/* fl_arc( cr, px, py, pw + po * 1, 0, 360 ); */
fl_color( c = fl_darker( c ) ); fl_color( c = fl_darker( c ) );
fl_arc( px - 30, py - 30, pw + 60, ph + 60, 0, 360 );
// fl_color_alpha( c = fl_darker( c ), 0.5 );
fl_arc( px - ( po * 4 ), py - ( po * 4 ), pw + ( po * 8 ), ph + (po * 8 ), 0, 360 );
/* fl_arc( cr, px, py, pw + po * 1, 0, 360 ); */
}
fl_pop_clip();
} }
/* draw number */ /* draw number */
@ -258,6 +316,9 @@ Panner::draw ( void )
/* fl_line( bx + pw() / 2, by + ph() / 2, tx + (tw / 2), ty + (th / 2) ); */ /* fl_line( bx + pw() / 2, by + ph() / 2, tx + (tw / 2), ty + (th / 2) ); */
} }
done:
fl_line_style( FL_SOLID, 0 );
fl_pop_clip(); fl_pop_clip();
} }
@ -281,17 +342,19 @@ Panner::handle ( int m )
redraw(); redraw();
return 1; return 1;
case FL_PUSH: case FL_PUSH:
{
if ( Fl::event_button2() ) if ( Fl::event_button2() )
{ {
_bypassed = ! _bypassed; _bypassed = ! _bypassed;
redraw(); redraw();
return 1; return 1;
} }
else if ( Fl::event_button1() && ( drag = event_point() ) )
return 1; if ( Fl::event_button1() )
else drag = event_point();
return 0;
return 1;
}
case FL_RELEASE: case FL_RELEASE:
if ( Fl::event_button1() && drag ) if ( Fl::event_button1() && drag )
{ {
@ -311,6 +374,10 @@ Panner::handle ( int m )
if ( ! drag ) if ( ! drag )
return 0; return 0;
/* else if ( Fl::event_button1() && ( drag = event_point() ) ) */
/* return 1; */
/* else */
float X = Fl::event_x() - x(); float X = Fl::event_x() - x();
float Y = Fl::event_y() - y(); float Y = Fl::event_y() - y();
@ -325,7 +392,7 @@ Panner::handle ( int m )
if ( when() & FL_WHEN_CHANGED ) if ( when() & FL_WHEN_CHANGED )
do_callback(); do_callback();
redraw(); damage(FL_DAMAGE_EXPOSE);
return 1; return 1;
} }

View File

@ -31,6 +31,8 @@ using namespace std;
class Panner : public Fl_Widget class Panner : public Fl_Widget
{ {
void draw_the_box( int, int, int, int );
struct Point struct Point
{ {
/* axes */ /* axes */

View File

@ -461,11 +461,19 @@ Plugin_Module::load ( unsigned long id )
{ {
p.hints.ranged = true; p.hints.ranged = true;
p.hints.minimum = _idata->descriptor->PortRangeHints[i].LowerBound; p.hints.minimum = _idata->descriptor->PortRangeHints[i].LowerBound;
if ( LADSPA_IS_HINT_SAMPLE_RATE(hd) )
{
p.hints.minimum *= Engine::sample_rate();
}
} }
if ( LADSPA_IS_HINT_BOUNDED_ABOVE(hd) ) if ( LADSPA_IS_HINT_BOUNDED_ABOVE(hd) )
{ {
p.hints.ranged = true; p.hints.ranged = true;
p.hints.maximum = _idata->descriptor->PortRangeHints[i].UpperBound; p.hints.maximum = _idata->descriptor->PortRangeHints[i].UpperBound;
if ( LADSPA_IS_HINT_SAMPLE_RATE(hd) )
{
p.hints.maximum *= Engine::sample_rate();
}
} }
if ( LADSPA_IS_HINT_HAS_DEFAULT(hd) ) if ( LADSPA_IS_HINT_HAS_DEFAULT(hd) )

View File

@ -32,8 +32,8 @@
#include <FL/fl_ask.H> #include <FL/fl_ask.H>
#include <FL/Fl_Shared_Image.H> #include <FL/Fl_Shared_Image.H>
#include <FL/Fl_Pack.H> #include <FL/Fl_Pack.H>
#include <FL/Crystal_Boxtypes.H> #include "FL/themes.H"
#include <FL/Gleam_Boxtypes.H> #include "FL/Fl_Theme.H"
#include "Thread.H" #include "Thread.H"
#include "debug.h" #include "debug.h"
@ -57,6 +57,7 @@
#include "NSM.H" #include "NSM.H"
#include <signal.h> #include <signal.h>
#include <unistd.h>
#ifdef HAVE_XPM #ifdef HAVE_XPM
#include "FL/Fl.H" #include "FL/Fl.H"
@ -107,7 +108,7 @@ check_nsm ( void * v )
Fl::repeat_timeout( NSM_CHECK_INTERVAL, check_nsm, v ); Fl::repeat_timeout( NSM_CHECK_INTERVAL, check_nsm, v );
} }
static int got_sigterm = 0; static volatile int got_sigterm = 0;
void void
sigterm_handler ( int ) sigterm_handler ( int )
@ -129,17 +130,10 @@ check_sigterm ( void * )
int int
main ( int argc, char **argv ) main ( int argc, char **argv )
{ {
bool no_ui = false;
printf( "%s %s %s -- %s\n", APP_TITLE, VERSION, "", COPYRIGHT ); printf( "%s %s %s -- %s\n", APP_TITLE, VERSION, "", COPYRIGHT );
#ifdef HAVE_XPM
fl_open_display();
Pixmap p, mask;
XpmCreatePixmapFromData(fl_display, DefaultRootWindow(fl_display),
(char**)icon_16x16, &p, &mask, NULL);
#endif
Thread::init(); Thread::init();
Thread thread( "UI" ); Thread thread( "UI" );
@ -156,9 +150,6 @@ main ( int argc, char **argv )
Fl_Tooltip::size( 14 ); Fl_Tooltip::size( 14 );
Fl_Tooltip::hoverdelay( 0.1f ); Fl_Tooltip::hoverdelay( 0.1f );
Fl::visible_focus( 0 );
fl_register_images();
LOG_REGISTER_CREATE( Mixer_Strip ); LOG_REGISTER_CREATE( Mixer_Strip );
LOG_REGISTER_CREATE( Chain ); LOG_REGISTER_CREATE( Chain );
@ -170,40 +161,8 @@ main ( int argc, char **argv )
LOG_REGISTER_CREATE( Meter_Indicator_Module ); LOG_REGISTER_CREATE( Meter_Indicator_Module );
LOG_REGISTER_CREATE( Controller_Module ); LOG_REGISTER_CREATE( Controller_Module );
init_crystal_boxtypes();
init_gleam_boxtypes();
signal( SIGPIPE, SIG_IGN ); signal( SIGPIPE, SIG_IGN );
Fl::get_system_colors();
Fl::scheme( "gtk+" );
Fl::lock();
Fl_Double_Window *main_window;
{
Fl_Double_Window *o = main_window = new Fl_Double_Window( 800, 600, "Non-DAW : Mixer" );
{
main_window->xclass( APP_NAME );
{
Fl_Widget *o = mixer = new Mixer( 0, 0, main_window->w(), main_window->h(), NULL );
Fl_Group::current()->resizable(o);
}
}
o->end();
o->size_range( main_window->w(), mixer->min_h(), 0, 0 );
o->callback( (Fl_Callback*)cb_main, main_window );
#ifdef HAVE_XPM
o->icon((char *)p);
#endif
o->show( 0, 0 );
}
const char *osc_port = NULL; const char *osc_port = NULL;
@ -217,6 +176,7 @@ main ( int argc, char **argv )
{ "help", no_argument, 0, '?' }, { "help", no_argument, 0, '?' },
{ "instance", required_argument, 0, 'i' }, { "instance", required_argument, 0, 'i' },
{ "osc-port", required_argument, 0, 'p' }, { "osc-port", required_argument, 0, 'p' },
{ "no-ui", no_argument, 0, 'u' },
{ 0, 0, 0, 0 } { 0, 0, 0, 0 }
}; };
@ -238,6 +198,10 @@ main ( int argc, char **argv )
instance_name = strdup( optarg ); instance_name = strdup( optarg );
instance_override = true; instance_override = true;
break; break;
case 'u':
DMESSAGE( "Disabling user interface" );
no_ui = true;
break;
case '?': case '?':
printf( "\nUsage: %s [--instance instance_name] [--osc-port portnum] [path_to_project]\n\n", argv[0] ); printf( "\nUsage: %s [--instance instance_name] [--osc-port portnum] [path_to_project]\n\n", argv[0] );
exit(0); exit(0);
@ -245,6 +209,70 @@ main ( int argc, char **argv )
} }
} }
{
char *name = strdup( argv[0] );
char *n = basename( name );
if ( ! strcmp( n, "non-mixer-noui" ) )
no_ui = true;
free( name );
}
Pixmap p, mask;
if ( ! no_ui )
{
Fl::visual( FL_DOUBLE | FL_RGB );
#ifdef HAVE_XPM
fl_open_display();
XpmCreatePixmapFromData(fl_display, DefaultRootWindow(fl_display),
(char**)icon_16x16, &p, &mask, NULL);
#endif
Fl::visible_focus( 0 );
fl_register_images();
}
Fl::lock();
Fl_Double_Window *main_window;
{
Fl_Double_Window *o = main_window = new Fl_Double_Window( 800, 600, "Non-DAW : Mixer" );
{
main_window->xclass( APP_NAME );
{
Fl_Widget *o = mixer = new Mixer( 0, 0, main_window->w(), main_window->h(), NULL );
Fl_Group::current()->resizable(o);
}
}
o->end();
o->size_range( main_window->w(), mixer->min_h(), 0, 0 );
o->callback( (Fl_Callback*)cb_main, main_window );
if ( ! no_ui )
{
#ifdef HAVE_XPM
o->icon((char *)p);
#endif
o->show( 0, 0 );
}
}
if ( ! no_ui )
{
fl_register_themes();
Fl_Theme::set();
}
Plugin_Module::spawn_discover_thread(); Plugin_Module::spawn_discover_thread();
mixer->init_osc( osc_port ); mixer->init_osc( osc_port );
@ -263,8 +291,11 @@ main ( int argc, char **argv )
nsm->announce( APP_NAME, ":switch:dirty:", argv[0] ); nsm->announce( APP_NAME, ":switch:dirty:", argv[0] );
// poll so we can keep OSC handlers running in the GUI thread and avoid extra sync /* if ( ! no_ui ) */
Fl::add_timeout( NSM_CHECK_INTERVAL, check_nsm, NULL ); /* { */
// poll so we can keep OSC handlers running in the GUI thread and avoid extra sync
Fl::add_timeout( NSM_CHECK_INTERVAL, check_nsm, NULL );
/* } */
} }
} }
else else
@ -283,9 +314,25 @@ main ( int argc, char **argv )
} }
} }
mixer->say_hello();
Fl::add_check( check_sigterm ); Fl::add_check( check_sigterm );
Fl::run(); if ( ! no_ui )
{
DMESSAGE( "Running UI..." );
Fl::run();
}
else
{
DMESSAGE( "Not Running UI..." );
while ( ! got_sigterm )
{
Fl::check();
usleep( 200 * 1000 );
}
}
delete main_window; delete main_window;
main_window = NULL; main_window = NULL;

View File

@ -280,6 +280,19 @@ Log_Entry::get ( int n, const char **name, const char **value ) const
} }
void
Log_Entry::remove ( const char *name )
{
for ( int i = 0; i < _i; i++ )
{
if ( !strcmp( _sa[ i ], name ) )
{
free( _sa[i] );
_sa[i] = NULL;
}
}
}
char ** char **
Log_Entry::sa ( void ) Log_Entry::sa ( void )
{ {

View File

@ -88,6 +88,9 @@ public:
/* _sa.push( p ); \ */ /* _sa.push( p ); \ */
/* } \ */ /* } \ */
void remove ( const char *s );
ADD( int, "%d", v ); ADD( int, "%d", v );
ADD( nframes_t, "%lu", (unsigned long)v ); ADD( nframes_t, "%lu", (unsigned long)v );
ADD( unsigned long, "%lu", v ); ADD( unsigned long, "%lu", v );

View File

@ -36,6 +36,8 @@
// #include "const.h" // #include "const.h"
#include "debug.h" #include "debug.h"
#include "Mutex.H"
#include <algorithm> #include <algorithm>
using std::min; using std::min;
using std::max; using std::max;
@ -64,8 +66,11 @@ void *Loggable::_dirty_callback_arg = NULL;
static Mutex _lock;
Loggable::~Loggable ( ) Loggable::~Loggable ( )
{ {
Locker lock( _lock );;
_loggables[ _id ].loggable = NULL; _loggables[ _id ].loggable = NULL;
} }
@ -74,12 +79,15 @@ Loggable::~Loggable ( )
void void
Loggable::block_start ( void ) Loggable::block_start ( void )
{ {
Locker lock( _lock );;
++Loggable::_level; ++Loggable::_level;
} }
void void
Loggable::block_end ( void ) Loggable::block_end ( void )
{ {
Locker lock( _lock );;
--Loggable::_level; --Loggable::_level;
ASSERT( Loggable::_level >= 0, "Programming error" ); ASSERT( Loggable::_level >= 0, "Programming error" );
@ -236,17 +244,17 @@ Loggable::close ( void )
if ( ! snapshot( "snapshot" ) ) if ( ! snapshot( "snapshot" ) )
WARNING( "Failed to create snapshot" ); WARNING( "Failed to create snapshot" );
if ( ! save_unjournaled_state() )
WARNING( "Failed to save unjournaled state" );
for ( std::map <unsigned int, Loggable::log_pair >::iterator i = _loggables.begin(); for ( std::map <unsigned int, Loggable::log_pair >::iterator i = _loggables.begin();
i != _loggables.end(); ++i ) i != _loggables.end(); ++i )
{
if ( i->second.loggable ) if ( i->second.loggable )
delete i->second.loggable; delete i->second.loggable;
save_unjournaled_state();
for ( std::map <unsigned int, Loggable::log_pair >::iterator i = _loggables.begin();
i != _loggables.end(); ++i )
if ( i->second.unjournaled_state ) if ( i->second.unjournaled_state )
delete i->second.unjournaled_state; delete i->second.unjournaled_state;
}
_loggables.clear(); _loggables.clear();
@ -271,6 +279,10 @@ Loggable::save_unjournaled_state ( void )
for ( std::map <unsigned int, Loggable::log_pair >::iterator i = _loggables.begin(); for ( std::map <unsigned int, Loggable::log_pair >::iterator i = _loggables.begin();
i != _loggables.end(); ++i ) i != _loggables.end(); ++i )
{ {
/* get the latest state */
if ( i->second.loggable )
i->second.loggable->record_unjournaled();
if ( i->second.unjournaled_state ) if ( i->second.unjournaled_state )
{ {
char *s = i->second.unjournaled_state->print(); char *s = i->second.unjournaled_state->print();
@ -559,6 +571,8 @@ Loggable::compact ( void )
void void
Loggable::log ( const char *fmt, ... ) Loggable::log ( const char *fmt, ... )
{ {
Locker lock( _lock );
static char * buf = NULL; static char * buf = NULL;
static size_t i = 0; static size_t i = 0;
static size_t buf_size = 0; static size_t buf_size = 0;
@ -689,6 +703,8 @@ Loggable::log_print( const Log_Entry *o, const Log_Entry *n ) const
void void
Loggable::log_start ( void ) Loggable::log_start ( void )
{ {
Locker lock( _lock );;
if ( ! _old_state ) if ( ! _old_state )
{ {
_old_state = new Log_Entry; _old_state = new Log_Entry;
@ -702,6 +718,8 @@ Loggable::log_start ( void )
void void
Loggable::log_end ( void ) Loggable::log_end ( void )
{ {
Locker lock( _lock );;
ASSERT( _old_state, "Programming error: log_end() called before log_start()" ); ASSERT( _old_state, "Programming error: log_end() called before log_start()" );
if ( --_nest > 0 ) if ( --_nest > 0 )
@ -737,6 +755,8 @@ Loggable::log_end ( void )
void void
Loggable::log_create ( void ) const Loggable::log_create ( void ) const
{ {
Locker lock( _lock );;
set_dirty(); set_dirty();
if ( ! _fp ) if ( ! _fp )
@ -766,19 +786,18 @@ Loggable::record_unjournaled ( void ) const
get_unjournaled( *e ); get_unjournaled( *e );
Log_Entry *le = _loggables[ _id ].unjournaled_state; Log_Entry **le = &_loggables[ _id ].unjournaled_state;
if ( le ) if ( *le )
delete le; {
delete *le;
*le = NULL;
}
if ( e->size() ) if ( e->size() )
_loggables[ _id ].unjournaled_state = e; *le = e;
else else
{
/* don't waste space on loggables with no unjournaled properties */
_loggables[ _id ].unjournaled_state = NULL;
delete e; delete e;
}
} }
/** Log object destruction. *Must* be called at the beginning of the /** Log object destruction. *Must* be called at the beginning of the
@ -786,8 +805,7 @@ Loggable::record_unjournaled ( void ) const
void void
Loggable::log_destroy ( void ) const Loggable::log_destroy ( void ) const
{ {
/* the unjournaled state may have changed: make a note of it. */ Locker lock( _lock );;
record_unjournaled();
set_dirty(); set_dirty();
@ -795,6 +813,9 @@ Loggable::log_destroy ( void ) const
/* tearing down... don't bother */ /* tearing down... don't bother */
return; return;
/* the unjournaled state may have changed: make a note of it. */
record_unjournaled();
log( "%s 0x%X destroy << ", class_name(), _id ); log( "%s 0x%X destroy << ", class_name(), _id );
Log_Entry e; Log_Entry e;

View File

@ -56,6 +56,21 @@ namespace OSC
int Signal::next_id = 0; int Signal::next_id = 0;
Signal::Signal ( const char *path, Direction dir )
{
_direction = dir;
_path = strdup( path );
_id = ++next_id;
_value = 0.0f;
_endpoint = NULL;
_peer = NULL;
_documentation = 0;
_user_data = 0;
_connection_state_callback = 0;
_connection_state_userdata = 0;
}
Signal::~Signal ( ) Signal::~Signal ( )
{ {
if ( _endpoint ) if ( _endpoint )
@ -140,7 +155,9 @@ namespace OSC
return r; return r;
} }
void void
Endpoint::error_handler(int num, const char *msg, const char *path) Endpoint::error_handler(int num, const char *msg, const char *path)
{ {
@ -149,6 +166,11 @@ namespace OSC
Endpoint::Endpoint ( ) Endpoint::Endpoint ( )
{ {
_peer_scan_complete_callback = 0;
_peer_scan_complete_userdata = 0;
_server = 0;
_name = 0;
owner = 0;
} }
int int
@ -164,7 +186,6 @@ namespace OSC
return -1; return -1;
} }
add_method( "/signal/hello", "ss", &Endpoint::osc_sig_hello, this, "" ); add_method( "/signal/hello", "ss", &Endpoint::osc_sig_hello, this, "" );
add_method( "/signal/connect", "ii", &Endpoint::osc_sig_connect, this, "" ); add_method( "/signal/connect", "ii", &Endpoint::osc_sig_connect, this, "" );
add_method( "/signal/disconnect", "ii", &Endpoint::osc_sig_disconnect, this, "" ); add_method( "/signal/disconnect", "ii", &Endpoint::osc_sig_disconnect, this, "" );
@ -183,7 +204,11 @@ namespace OSC
Endpoint::~Endpoint ( ) Endpoint::~Endpoint ( )
{ {
// lo_server_thread_free( _st ); // lo_server_thread_free( _st );
lo_server_free( _server ); if ( _server )
{
lo_server_free( _server );
_server = 0;
}
} }
OSC::Signal * OSC::Signal *
@ -248,6 +273,8 @@ namespace OSC
void void
Endpoint::hello ( const char *url ) Endpoint::hello ( const char *url )
{ {
assert( name() );
lo_address addr = lo_address_new_from_url ( url ); lo_address addr = lo_address_new_from_url ( url );
char *our_url = this->url(); char *our_url = this->url();
@ -260,6 +287,7 @@ namespace OSC
int int
Endpoint::osc_sig_hello ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ) Endpoint::osc_sig_hello ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data )
{ {
Endpoint *ep = (Endpoint*)user_data; Endpoint *ep = (Endpoint*)user_data;
const char *peer_name = &argv[0]->s; const char *peer_name = &argv[0]->s;
@ -271,7 +299,14 @@ namespace OSC
{ {
ep->scan_peer( peer_name, peer_url ); ep->scan_peer( peer_name, peer_url );
ep->hello( peer_url ); if ( ep->name() )
{
ep->hello( peer_url );
}
else
{
DMESSAGE( "Not sending hello because we don't have a name yet!" );
}
} }
return 0; return 0;
@ -306,7 +341,8 @@ namespace OSC
DMESSAGE( "Peer %s has disconnected from signal %s", p->name, ps->path() ); DMESSAGE( "Peer %s has disconnected from signal %s", p->name, ps->path() );
s->signal_connection_state_changed( s ); if ( s->_connection_state_callback )
s->_connection_state_callback( s, s->_connection_state_userdata );
return 0; return 0;
} }
@ -358,7 +394,8 @@ namespace OSC
/* make a record of it ourselves */ /* make a record of it ourselves */
ps->_outgoing.push_back( s ); ps->_outgoing.push_back( s );
s->signal_connection_state_changed( s ); if ( s->_connection_state_callback )
s->_connection_state_callback( s, s->_connection_state_userdata );
/* return 0; */ /* return 0; */
/* } */ /* } */
@ -522,6 +559,7 @@ namespace OSC
/* reply with current value */ /* reply with current value */
o = (Signal*)user_data; o = (Signal*)user_data;
o->_endpoint->send( lo_message_get_source( msg ), "/reply", path, o->value() ); o->_endpoint->send( lo_message_get_source( msg ), "/reply", path, o->value() );
return 0;
} }
else else
{ {
@ -533,8 +571,6 @@ namespace OSC
if ( ep ) if ( ep )
p = ep->find_peer_by_address( lo_message_get_source( msg ) ); p = ep->find_peer_by_address( lo_message_get_source( msg ) );
if ( 0 == o->_incoming.size() )
return 0;
if ( !p ) if ( !p )
{ {
@ -548,6 +584,9 @@ namespace OSC
/* remote signal */ /* remote signal */
/* if ( t->_peer ) */ /* if ( t->_peer ) */
/* if ( 0 == o->_incoming.size() ) */
/* return 0; */
for ( std::list<Signal*>::const_iterator i = o->_incoming.begin(); for ( std::list<Signal*>::const_iterator i = o->_incoming.begin();
i != o->_incoming.end(); i != o->_incoming.end();
++i ) ++i )
@ -872,7 +911,8 @@ namespace OSC
p->_scanning = false; p->_scanning = false;
DMESSAGE( "Done scanning %s", p->name ); DMESSAGE( "Done scanning %s", p->name );
ep->signal_peer_scan_complete(); if ( ep->_peer_scan_complete_callback )
ep->_peer_scan_complete_callback(ep->_peer_scan_complete_userdata);
} }
else if ( argc == 7 && p->_scanning ) else if ( argc == 7 && p->_scanning )
{ {

View File

@ -25,8 +25,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <sigc++/sigc++.h>
namespace OSC namespace OSC
{ {
class OSC_Value class OSC_Value
@ -163,20 +161,12 @@ namespace OSC
void *_user_data; void *_user_data;
Parameter_Limits _parameter_limits; Parameter_Limits _parameter_limits;
void (*_connection_state_callback)(OSC::Signal *, void*);
void *_connection_state_userdata;
public: public:
Signal ( const char *path, Direction dir ) Signal ( const char *path, Direction dir );
{
_direction = dir;
_path = strdup( path );
_id = ++next_id;
_value = 0.0f;
_endpoint = NULL;
_peer = NULL;
}
sigc::signal <void,Signal*> signal_connection_state_changed;
~Signal ( ); ~Signal ( );
static Signal *get_peer_signal_by_id ( Peer *p, int signal_id ); static Signal *get_peer_signal_by_id ( Peer *p, int signal_id );
@ -198,6 +188,13 @@ namespace OSC
_value = default_value; _value = default_value;
} }
void connection_state_callback ( void(*_cb)(OSC::Signal *, void*), void *userdata)
{
_connection_state_callback = _cb;
_connection_state_userdata = userdata;
}
const Parameter_Limits& parameter_limits ( void ) const { return _parameter_limits; } const Parameter_Limits& parameter_limits ( void ) const { return _parameter_limits; }
const char *path ( void ) const { return _path; } const char *path ( void ) const { return _path; }
@ -234,8 +231,21 @@ namespace OSC
class Endpoint class Endpoint
{ {
static void error_handler(int num, const char *msg, const char *path); Thread _thread;
// lo_server_thread _st;
lo_server _server;
std::list<Peer*> _peers;
std::list<Signal*> _signals;
std::list<Method*> _methods;
void (*_peer_scan_complete_callback)(void*);
void *_peer_scan_complete_userdata;
char *_name;
static void error_handler(int num, const char *msg, const char *path);
static int osc_reply ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data ); static int osc_reply ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data );
@ -251,14 +261,7 @@ namespace OSC
void scan_peer ( const char *name, const char *url ); void scan_peer ( const char *name, const char *url );
Thread _thread; private:
// lo_server_thread _st;
lo_server _server;
std::list<Peer*> _peers;
std::list<Signal*> _signals;
std::list<Method*> _methods;
static void *osc_thread ( void *arg ); static void *osc_thread ( void *arg );
void osc_thread ( void ); void osc_thread ( void );
@ -273,23 +276,22 @@ namespace OSC
static Signal *find_target_by_peer_address ( std::list<Signal*> *l, lo_address addr ); static Signal *find_target_by_peer_address ( std::list<Signal*> *l, lo_address addr );
char *_name;
void del_signal ( Signal *signal ); void del_signal ( Signal *signal );
void send_signal_rename_notifications( Signal *s ); void send_signal_rename_notifications( Signal *s );
public: public:
// can be used to point back to owning object.
void *owner;
void list_peer_signals ( void (*callback) (const char *, const OSC::Signal *, void * ), void *v ); void list_peer_signals ( void (*callback) (const char *, const OSC::Signal *, void * ), void *v );
int init ( int proto, const char *port = 0 ); int init ( int proto, const char *port = 0 );
Endpoint ( ); Endpoint ( );
~Endpoint ( ); ~Endpoint ( );
bool disconnect_signal ( OSC::Signal *s, OSC::Signal *d ); bool disconnect_signal ( OSC::Signal *s, OSC::Signal *d );
bool disconnect_signal ( OSC::Signal *s, const char *peer_name, const char *signal_path ); bool disconnect_signal ( OSC::Signal *s, const char *peer_name, const char *signal_path );
bool connect_signal ( OSC::Signal *s, OSC::Signal *d ); bool connect_signal ( OSC::Signal *s, OSC::Signal *d );
@ -352,10 +354,12 @@ namespace OSC
int send ( lo_address to, const char *path, const char *v1, const char *v2, const char *v3, int v4, float v5, float v6, float v7 ); int send ( lo_address to, const char *path, const char *v1, const char *v2, const char *v3, int v4, float v5, float v6, float v7 );
// can be used to point back to owning object. void peer_scan_complete_callback ( void(*_cb)(void*), void *userdata)
void *owner; {
_peer_scan_complete_callback = _cb;
_peer_scan_complete_userdata = userdata;
}
sigc::signal <void> signal_peer_scan_complete;
friend Signal::~Signal(); friend Signal::~Signal();
friend void Signal::rename ( const char *name ); friend void Signal::rename ( const char *name );

View File

@ -116,3 +116,10 @@ Thread::join ( void )
pthread_join( _thread, NULL ); pthread_join( _thread, NULL );
_thread = 0; _thread = 0;
} }
void
Thread::exit ( void *retval )
{
pthread_exit( retval );
_thread = 0;
}

View File

@ -52,5 +52,6 @@ public:
bool clone ( void *(*entry_point)(void *), void *arg ); bool clone ( void *(*entry_point)(void *), void *arg );
void detach ( void ); void detach ( void );
void join ( void ); void join ( void );
void exit ( void *retval = 0 );
}; };

1
nonlib/configure vendored
View File

@ -17,7 +17,6 @@ require_command ar ar
require_command makedepend makedepend require_command makedepend makedepend
require_package JACK 0.103.0 jack require_package JACK 0.103.0 jack
require_package liblo 0.23 liblo require_package liblo 0.23 liblo
require_package sigcpp 2.0.0 sigc++-2.0
test_version `version_of liblo` 0.26 || warn "Version $(version_of liblo) of liblo is slow to create servers. Consider upgrading to 0.26 or later" test_version `version_of liblo` 0.26 || warn "Version $(version_of liblo) of liblo is slow to create servers. Consider upgrading to 0.26 or later"

View File

@ -19,7 +19,7 @@ nonlib/libnonlib.a: $(OBJS)
nonlib: nonlib/libnonlib.a nonlib: nonlib/libnonlib.a
clean: clean:
rm -f $(OBJS) nonlib/libnonlib.a rm -f $(OBJS) nonlib/libnonlib.a .deps
install: install:
@ @

540
nonlib/nsm.h Normal file
View File

@ -0,0 +1,540 @@
/*************************************************************************/
/* Copyright (C) 2012 Jonathan Moore Liles */
/* */
/* Permission to use, copy, modify, and/or distribute this software for */
/* any purpose with or without fee is hereby granted, provided that the */
/* above copyright notice and this permission notice appear in all */
/* copies. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL */
/* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED */
/* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE */
/* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL */
/* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR */
/* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER */
/* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR */
/* PERFORMANCE OF THIS SOFTWARE. */
/*************************************************************************/
/*************************************************************/
/* A simple, callback based C API for NSM clients. */
/* */
/* Simplified Example: */
/* */
/* #include "nsm.h" */
/* */
/* int */
/* cb_nsm_open ( const char *name, */
/* const char *display_name, */
/* const char *client_id, */
/* char **out_msg, */
/* void *userdata ) */
/* { */
/* do_open_stuff(); */
/* return ERR_OK; */
/* } */
/* */
/* int */
/* cb_nsm_save ( char **out_msg, */
/* void *userdata ) */
/* { */
/* do_save_stuff(); */
/* return ERR_OK; */
/* } */
/* */
/* static nsm_client_t *nsm = 0 */
/* */
/* int main( int argc, char **argv ) */
/* { */
/* const char *nsm_url = getenv( "NSM_URL" ); */
/* */
/* if ( nsm_url ) */
/* { */
/* nsm = nsm_new(); */
/* */
/* nsm_set_open_callback( nsm, cb_nsm_open, 0 ); */
/* nsm_set_save_callback( nsm, cb_nsm_save, 0 ); */
/* */
/* if ( 0 == nsm_init( nsm, nsm_url ) ) */
/* { */
/* nsm_send_announce( nsm, "FOO", "", argv[0] ); */
/* } */
/* else */
/* { */
/* nsm_free( nsm ); */
/* nsm = 0; */
/* } */
/* } */
/* } */
/*************************************************************/
#ifndef _NSM_H
#define _NSM_H
#define NSM_API_VERSION_MAJOR 1
#define NSM_API_VERSION_MINOR 0
#include <lo/lo.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
typedef void * nsm_client_t;
typedef int (nsm_open_callback)( const char *name, const char *display_name, const char *client_id, char **out_msg, void *userdata );
typedef int (nsm_save_callback)( char **out_msg, void *userdata );
typedef void (nsm_active_callback)( int b, void *userdata );
typedef void (nsm_session_is_loaded_callback)( void *userdata );
typedef int (nsm_broadcast_callback)( const char *, lo_message m, void *userdata );
#define _NSM() ((struct _nsm_client_t*)nsm)
#define NSM_EXPORT __attribute__((unused)) static
/* private parts */
struct _nsm_client_t
{
const char *nsm_url;
lo_server _server;
lo_server_thread _st;
lo_address nsm_addr;
int nsm_is_active;
char *nsm_client_id;
char *_session_manager_name;
nsm_open_callback *open;
void *open_userdata;
nsm_save_callback *save;
void *save_userdata;
nsm_active_callback *active;
void *active_userdata;
nsm_session_is_loaded_callback *session_is_loaded;
void *session_is_loaded_userdata;
nsm_broadcast_callback *broadcast;
void *broadcast_userdata;
};
enum
{
ERR_OK = 0,
ERR_GENERAL = -1,
ERR_INCOMPATIBLE_API = -2,
ERR_BLACKLISTED = -3,
ERR_LAUNCH_FAILED = -4,
ERR_NO_SUCH_FILE = -5,
ERR_NO_SESSION_OPEN = -6,
ERR_UNSAVED_CHANGES = -7,
ERR_NOT_NOW = -8
};
NSM_EXPORT
int
nsm_is_active ( nsm_client_t *nsm )
{
return _NSM()->nsm_is_active;
}
NSM_EXPORT
const char *
nsm_get_session_manager_name ( nsm_client_t *nsm )
{
return _NSM()->_session_manager_name;
}
NSM_EXPORT
nsm_client_t *
nsm_new ( void )
{
struct _nsm_client_t *nsm = (struct _nsm_client_t*)malloc( sizeof( struct _nsm_client_t ) );
nsm->nsm_url = 0;
nsm->nsm_is_active = 0;
nsm->nsm_client_id = 0;
nsm->_server = 0;
nsm->_st = 0;
nsm->nsm_addr = 0;
nsm->_session_manager_name = 0;
nsm->open = 0;
nsm->save = 0;
nsm->active = 0;
nsm->session_is_loaded = 0;
nsm->broadcast = 0;
return (nsm_client_t *)nsm;
}
/*******************************************/
/* CLIENT TO SERVER INFORMATIONAL MESSAGES */
/*******************************************/
NSM_EXPORT
void
nsm_send_is_dirty ( nsm_client_t *nsm )
{
if ( _NSM()->nsm_is_active )
lo_send_from( _NSM()->nsm_addr, _NSM()->_server, LO_TT_IMMEDIATE, "/nsm/client/is_dirty", "" );
}
NSM_EXPORT
void
nsm_send_is_clean ( nsm_client_t *nsm )
{
if ( _NSM()->nsm_is_active )
lo_send_from( _NSM()->nsm_addr, _NSM()->_server, LO_TT_IMMEDIATE, "/nsm/client/is_clean", "" );
}
NSM_EXPORT
void
nsm_send_progress ( nsm_client_t *nsm, float p )
{
if ( _NSM()->nsm_is_active )
lo_send_from( _NSM()->nsm_addr, _NSM()->_server, LO_TT_IMMEDIATE, "/nsm/client/progress", "f", p );
}
NSM_EXPORT
void
nsm_send_message ( nsm_client_t *nsm, int priority, const char *msg )
{
if ( _NSM()->nsm_is_active )
lo_send_from( _NSM()->nsm_addr, _NSM()->_server, LO_TT_IMMEDIATE, "/nsm/client/message", "is", priority, msg );
}
NSM_EXPORT void
nsm_send_announce ( nsm_client_t *nsm, const char *app_name, const char *capabilities, const char *process_name )
{
lo_address to = lo_address_new_from_url( _NSM()->nsm_url );
if ( ! to )
{
fprintf( stderr, "NSM: Bad address!" );
return;
}
int pid = (int)getpid();
lo_send_from( to, _NSM()->_server, LO_TT_IMMEDIATE, "/nsm/server/announce", "sssiii",
app_name,
capabilities,
process_name,
NSM_API_VERSION_MAJOR,
NSM_API_VERSION_MINOR,
pid );
lo_address_free( to );
}
NSM_EXPORT void
nsm_send_broadcast ( nsm_client_t *nsm, lo_message msg )
{
if ( _NSM()->nsm_is_active )
lo_send_message_from( _NSM()->nsm_addr, _NSM()->_server, "/nsm/server/broadcast", msg );
}
NSM_EXPORT
void
nsm_check_wait ( nsm_client_t *nsm, int timeout )
{
if ( lo_server_wait( _NSM()->_server, timeout ) )
while ( lo_server_recv_noblock( _NSM()->_server, 0 ) ) {}
}
NSM_EXPORT
void
nsm_check_nowait (nsm_client_t *nsm )
{
nsm_check_wait( nsm, 0 );
}
NSM_EXPORT
void
nsm_thread_start ( nsm_client_t *nsm )
{
lo_server_thread_start( _NSM()->_st );
}
NSM_EXPORT
void
nsm_thread_stop ( nsm_client_t *nsm )
{
lo_server_thread_stop( _NSM()->_st );
}
NSM_EXPORT void
nsm_free ( nsm_client_t *nsm )
{
if ( _NSM()->_st )
nsm_thread_stop( nsm );
if ( _NSM()->_st )
lo_server_thread_free( _NSM()->_st );
else
lo_server_free( _NSM()->_server );
free( _NSM() );
}
/*****************/
/* SET CALLBACKS */
/*****************/
NSM_EXPORT
void
nsm_set_open_callback( nsm_client_t *nsm, nsm_open_callback *open_callback, void *userdata )
{
_NSM()->open = open_callback;
_NSM()->open_userdata = userdata;
}
NSM_EXPORT
void
nsm_set_save_callback( nsm_client_t *nsm, nsm_save_callback *save_callback, void *userdata )
{
_NSM()->save = save_callback;
_NSM()->save_userdata = userdata;
}
NSM_EXPORT
void
nsm_set_active_callback( nsm_client_t *nsm, nsm_active_callback *active_callback, void *userdata )
{
_NSM()->active = active_callback;
_NSM()->active_userdata = userdata;
}
NSM_EXPORT
void
nsm_set_session_is_loaded_callback( nsm_client_t *nsm, nsm_session_is_loaded_callback *session_is_loaded_callback, void *userdata )
{
_NSM()->session_is_loaded = session_is_loaded_callback;
_NSM()->session_is_loaded_userdata = userdata;
}
NSM_EXPORT
void
nsm_set_broadcast_callback( nsm_client_t *nsm, nsm_broadcast_callback *broadcast_callback, void *userdata )
{
_NSM()->broadcast = broadcast_callback;
_NSM()->broadcast_userdata = userdata;
}
/****************/
/* OSC HANDLERS */
/****************/
#undef OSC_REPLY
#undef OSC_REPLY_ERR
#define OSC_REPLY( value ) lo_send_from( ((struct _nsm_client_t*)user_data)->nsm_addr, ((struct _nsm_client_t*)user_data)->_server, LO_TT_IMMEDIATE, "/reply", "ss", path, value )
#define OSC_REPLY_ERR( errcode, value ) lo_send_from( ((struct _nsm_client_t*)user_data)->nsm_addr, ((struct _nsm_client_t*)user_data)->_server, LO_TT_IMMEDIATE, "/error", "sis", path, errcode, value )
NSM_EXPORT int _nsm_osc_open ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data )
{
(void) types;
(void) argc;
(void) msg;
char *out_msg = NULL;
struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data;
nsm->nsm_client_id = strdup( &argv[2]->s );
if ( ! nsm->open )
return 0;
int r = nsm->open( &argv[0]->s, &argv[1]->s, &argv[2]->s, &out_msg, nsm->open_userdata );
if ( r )
OSC_REPLY_ERR( r, ( out_msg ? out_msg : "") );
else
OSC_REPLY( "OK" );
if ( out_msg )
free( out_msg );
return 0;
}
NSM_EXPORT int _nsm_osc_save ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data )
{
(void) types;
(void) argv;
(void) argc;
(void) msg;
char *out_msg = NULL;
struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data;
if ( ! nsm->save )
return 0;
int r = nsm->save(&out_msg, nsm->save_userdata );
if ( r )
OSC_REPLY_ERR( r, ( out_msg ? out_msg : "") );
else
OSC_REPLY( "OK" );
if ( out_msg )
free( out_msg );
return 0;
}
NSM_EXPORT int _nsm_osc_announce_reply ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data )
{
(void) path;
(void) types;
(void) argc;
if ( strcmp( &argv[0]->s, "/nsm/server/announce" ) )
return -1;
struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data;
fprintf( stderr, "NSM: Successfully registered. NSM says: %s", &argv[1]->s );
nsm->nsm_is_active = 1;
nsm->_session_manager_name = strdup( &argv[2]->s );
nsm->nsm_addr = lo_address_new_from_url( lo_address_get_url( lo_message_get_source( msg ) ));
if ( nsm->active )
nsm->active( nsm->nsm_is_active, nsm->active_userdata );
return 0;
}
NSM_EXPORT int _nsm_osc_error ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data )
{
(void) path;
(void) types;
(void) argc;
(void) msg;
if ( strcmp( &argv[0]->s, "/nsm/server/announce" ) )
return -1;
struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data;
fprintf( stderr, "NSM: Failed to register with NSM server: %s", &argv[2]->s );
nsm->nsm_is_active = 0;
if ( nsm->active )
nsm->active( nsm->nsm_is_active, nsm->active_userdata );
return 0;
}
NSM_EXPORT int _nsm_osc_session_is_loaded ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data )
{
(void) path;
(void) types;
(void) argv;
(void) argc;
(void) msg;
struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data;
if ( ! nsm->session_is_loaded )
return 0;
nsm->session_is_loaded( nsm->session_is_loaded_userdata );
return 0;
}
NSM_EXPORT int _nsm_osc_broadcast ( const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data )
{
(void) types;
(void) argv;
(void) argc;
struct _nsm_client_t *nsm = (struct _nsm_client_t*)user_data;
if ( ! nsm->broadcast )
return 0;
return nsm->broadcast( path, msg, nsm->broadcast_userdata );
}
NSM_EXPORT
int
nsm_init ( nsm_client_t *nsm, const char *nsm_url )
{
_NSM()->nsm_url = nsm_url;
lo_address addr = lo_address_new_from_url( nsm_url );
int proto = lo_address_get_protocol( addr );
lo_address_free( addr );
_NSM()->_server = lo_server_new_with_proto( NULL, proto, NULL );
if ( ! _NSM()->_server )
return -1;
lo_server_add_method( _NSM()->_server, "/error", "sis", _nsm_osc_error, _NSM() );
lo_server_add_method( _NSM()->_server, "/reply", "ssss", _nsm_osc_announce_reply, _NSM() );
lo_server_add_method( _NSM()->_server, "/nsm/client/open", "sss", _nsm_osc_open, _NSM() );
lo_server_add_method( _NSM()->_server, "/nsm/client/save", "", _nsm_osc_save, _NSM() );
lo_server_add_method( _NSM()->_server, "/nsm/client/session_is_loaded", "", _nsm_osc_session_is_loaded, _NSM() );
lo_server_add_method( _NSM()->_server, NULL, NULL, _nsm_osc_broadcast, _NSM() );
return 0;
}
NSM_EXPORT
int
nsm_init_thread ( nsm_client_t *nsm, const char *nsm_url )
{
_NSM()->nsm_url = nsm_url;
lo_address addr = lo_address_new_from_url( nsm_url );
int proto = lo_address_get_protocol( addr );
lo_address_free( addr );
_NSM()->_st = lo_server_thread_new_with_proto( NULL, proto, NULL );
_NSM()->_server = lo_server_thread_get_server( _NSM()->_st );
if ( ! _NSM()->_server )
return -1;
lo_server_thread_add_method( _NSM()->_st, "/error", "sis", _nsm_osc_error, _NSM() );
lo_server_thread_add_method( _NSM()->_st, "/reply", "ssss", _nsm_osc_announce_reply, _NSM() );
lo_server_thread_add_method( _NSM()->_st, "/nsm/client/open", "sss", _nsm_osc_open, _NSM() );
lo_server_thread_add_method( _NSM()->_st, "/nsm/client/save", "", _nsm_osc_save, _NSM() );
lo_server_thread_add_method( _NSM()->_st, "/nsm/client/session_is_loaded", "", _nsm_osc_session_is_loaded, _NSM() );
lo_server_thread_add_method( _NSM()->_st, NULL, NULL, _nsm_osc_broadcast, _NSM() );
return 0;
}
#endif /* NSM_H */

85
nonlib/string_util.C Normal file
View File

@ -0,0 +1,85 @@
/*******************************************************************************/
/* Copyright (C) 2012 Jonathan Moore Liles */
/* */
/* This program is free software; you can 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; see the file COPYING. If not,write to the Free Software */
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/*******************************************************************************/
#include <string.h>
#include <stdio.h>
void unescape_url ( char *url )
{
char *r, *w;
r = w = url;
for ( ; *r; r++, w++ )
{
if ( *r == '%' )
{
char data[3] = { *(r + 1), *(r + 2), 0 };
int c;
sscanf( data, "%2X", &c );
*w = c;
r += 2;
}
else
*w = *r;
}
*w = 0;
}
char *escape_url ( const char *url )
{
const char *s;
char *w;
char r[1024];
s = url;
w = r;
for ( ; *s && w < r + sizeof( r ); s++, w++ )
{
switch ( *s )
{
case ' ':
case '<':
case '>':
case '%':
case '#':
case '*':
case ',':
sprintf( w, "%%%2X", *s );
w += 2;
break;
default:
*w = *s;
break;
}
}
*w = 0;
return strdup( r );
}

View File

@ -17,6 +17,5 @@
/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/*******************************************************************************/ /*******************************************************************************/
#include <FL/Fl.H> void unescape_url ( char *url );
char * escape_url ( const char *url );
void init_gleam_boxtypes ( void );

View File

@ -55,6 +55,15 @@ else
CXXFLAGS := -fno-rtti -fno-exceptions CXXFLAGS := -fno-rtti -fno-exceptions
endif endif
# LIBS := "$(FLTK_LIBS) $(LIBS)"
INCLUDES := -I. -Iutil -IFL -Inonlib
INCLUDES += $(FLTK_CFLAGS)
# INCLUDES +=
# CFLAGS += $(FLTK_CFLAGS)
# include FL/makefile.inc # include FL/makefile.inc
include makefile.inc include makefile.inc
@ -66,24 +75,24 @@ CFLAGS+=-DVERSION=\"$(VERSION)\" \
CXXFLAGS := $(CFLAGS) $(CXXFLAGS) CXXFLAGS := $(CFLAGS) $(CXXFLAGS)
INCLUDES := -I. -Iutil -IFL -Inonlib
include scripts/colors include scripts/colors
SPACE+=" `tput cuf 20`" SPACE:=" `tput cuf 20`"
ifneq ($(CALCULATING),yes) ifneq ($(CALCULATING),yes)
COMPILING="$(BOLD)$(BLACK)$(PACKAGE)$(SPACE)$(SGR0)$(CYAN)`scripts/percent-complete .files "$<"`$(SGR0)$(BOLD)$(BLACK)]$(SGR0) $(BOLD)$(CYAN)$<$(SGR0)" COMPILING="$(BOLD)$(BLACK)[$(SGR0) $(PACKAGE)$(SPACE)$(SGR0)$(CYAN)`scripts/percent-complete .files "$<"` $(SGR0)$(BOLD)$(BLACK)]$(SGR0) $(BOLD)$(CYAN)$<$(SGR0)"
else else
COMPILING="Compiling: $<" COMPILING="Compiling: $<"
endif endif
.C.o: .C.o:
@ echo $(COMPILING) @ echo $(COMPILING)
@ $(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@ @ $(CXX) $(INCLUDES) $(CXXFLAGS) -c $< -o $@
%.C : %.fl %.C : %.fl
@ cd `dirname $<` && fluid -c ../$< @ cd `dirname $<` && $(FLUID) -c `basename $<`
DONE := $(BOLD)$(GREEN)done$(SGR0) DONE := $(BOLD)$(GREEN)done$(SGR0)

40
scripts/build_id Executable file
View File

@ -0,0 +1,40 @@
#!/bin/sh
# Copyright (C) 2008 Jonathan Moore Liles #
# #
# This program is free software; you can 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; see the file COPYING. If not,write to the Free Software #
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #
if [ "$#" = 0 ]
then
echo "Usage: $0 [output_file.h] [version]"
fi
if [ -d ../.git ]
then
ID=`git log -1 --format=%h -- .`
# ID="`[ \`git rev-parse HEAD\` = \`git rev-parse v${2}\` ] || git rev-parse --short HEAD`"
if [ -n "$ID" ]
then
ID="git {$ID}"
else
ID="git"
fi
else
ID="dist"
fi
echo "/* generated file */" > "$1"
echo "const char *BUILD_ID = \"${ID}\";" >> "$1"
echo "const char *VERSION = \"${2}\";" >> "$1"

View File

@ -127,18 +127,18 @@ ask ()
ok () ok ()
{ {
echo '\r'`tput cuf 30`"$BOLD${GREEN}ok${SGR0} ${*:+${BOLD}${BLACK}($*)${SGR0}}" echo ' '`tput cuf 30`"$BOLD${GREEN}ok${SGR0} ${*:+${BOLD}${BLACK}($*)${SGR0}}"
} }
failed () failed ()
{ {
echo '\r'`tput cuf 30`"$BOLD${RED}failed!${SGR0}" > /dev/stderr echo ' '`tput cuf 30`"$BOLD${RED}failed!${SGR0}" > /dev/stderr
rm -f .config rm -f .config
} }
missing () missing ()
{ {
echo '\r'`tput cuf 30`"$BOLD${YELLOW}missing!${SGR0}" > /dev/stderr echo ' '`tput cuf 30`"$BOLD${YELLOW}missing!${SGR0}" > /dev/stderr
} }
using () using ()
@ -184,7 +184,7 @@ begin ()
{ {
echo -n "Checking sanity..." echo -n "Checking sanity..."
require_command tput tput > /dev/null require_command tput tput > /dev/null
require_command pkg-config pkg-config > /dev/null require_command pkg_config pkg-config > /dev/null
require_command sed sed > /dev/null require_command sed sed > /dev/null
ok ok
} }
@ -254,13 +254,22 @@ require_command ()
{ {
echo -n "Checking for ${BOLD}$1${SGR0}..." echo -n "Checking for ${BOLD}$1${SGR0}..."
if ! [ -x "`which $2`" ] local name;
if [ -x "$2" ]
then then
name="$PWD/$2"
ok "$name"
elif [ -x "`which "$2"`" ]
then
name="`which "$2"`"
ok "$name"
else
failed failed
fatal "Command $1 not found." fatal "Command $1 not found."
else
ok
fi fi
append "$1=$name"
} }
require_package () require_package ()
@ -352,10 +361,13 @@ hostname_resolvable ()
require_FLTK () require_FLTK ()
{ {
local use local use
local appendflags
require_command ntk_config lib/ntk/ntk-config
echo -n "Checking for ${BOLD}FLTK${SGR0}..." echo -n "Checking for ${BOLD}FLTK${SGR0}..."
FLTK_VERSION=`fltk-config --version` FLTK_VERSION=`lib/ntk/ntk-config --version`
if ! test_version $FLTK_VERSION $1 if ! test_version $FLTK_VERSION $1
then then
@ -366,13 +378,18 @@ require_FLTK ()
fi fi
use= use=
appendflags=
while [ $# -gt 1 ] while [ $# -gt 1 ]
do do
shift 1 shift 1
[ "$1" = 'cairo' ] && appendflags="-DFLTK_HAVE_CAIRO=1 -DUSE_X11=1"
use="$use --use-$1" use="$use --use-$1"
done done
append "FLTK_LIBS=`fltk-config $use --ldflags | sed 's/,\\?--as-needed//g'`" append "FLTK_LIBS=`lib/ntk/ntk-config $use --libs | sed 's/,\\?--as-needed//g'`"
append "FLTK_CFLAGS=`fltk-config $use --cflags`" append "FLTK_LDFLAGS=`lib/ntk/ntk-config $use --ldflags | sed 's/,\\?--as-needed//g'`"
append "FLTK_CFLAGS=`lib/ntk/ntk-config $use --cflags` $appendflags"
} }

340
sequencer/COPYING Normal file
View File

@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

1
sequencer/FL Symbolic link
View File

@ -0,0 +1 @@
../FL

1
sequencer/Makefile Symbolic link
View File

@ -0,0 +1 @@
scripts/Makefile

28
sequencer/configure vendored Executable file
View File

@ -0,0 +1,28 @@
#!/bin/sh
#
# Copyright (C) 2008 Jonathan Moore Liles
# This file is licensed under version 2 of the GPL.
. scripts/config-funcs
begin
begin_options
ask "Installation prefix" prefix /usr/local
ask "Build for debugging" USE_DEBUG no
begin_tests
require_package JACK 0.103.0 jack
suggest_package XPM 2.0.0 xpm
require_FLTK 1.3.0 images
require_command FLUID lib/ntk/fluid/fluid
test_version `version_of jack` 0.105.0 || append "JACK_MIDI_PROTO_API=yes"
require_package liblo 0.23 liblo
test_version `version_of liblo` 0.26 || warn "Version $(version_of liblo) of liblo is slow to create servers. Consider upgrading to 0.26 or later"
require_package sigcpp 2.0.0 sigc++-2.0
end

71
sequencer/doc/KEYS.html Normal file
View File

@ -0,0 +1,71 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta name="generator" content="Generated by MUP v3.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link type="text/css" rel="stylesheet" href="mup.css">
<title>Key Bindings</title>
</head>
<body>
<div id=cover>
<h1>Key Bindings</h1>
<h3></h3>
<address>
<br>
<br>
</address><hr></div>
<div id=body>
<hr width=50%>
<p>
These keys are in effect when the pattern or phrase editor grid is focused.
</p>
<center><div class="fig table"><table id="Fig.1" border=1>
<caption>
<strong>Fig. 1.</strong> Editor Keybindings
</caption>
<tr><th>key</th><th>function</th></tr>
<tr><td>[</td><td>previous</td></tr>
<tr><td>]</td><td>next</td></tr>
<tr><td>1</td><td>horizontal zoom out</td></tr>
<tr><td>2</td><td>horizontal zoom in</td></tr>
<tr><td>3</td><td>vertical zoom out</td></tr>
<tr><td>4</td><td>vertical zoom in</td></tr>
<tr><td>c</td><td>create</td></tr>
<tr><td>d</td><td>duplicate</td></tr>
<tr><td>f</td><td>move to playhead</td></tr>
<tr><td>r</td><td>select range as defined by L and R cursors</td></tr>
<tr><td>q</td><td>select none</td></tr>
<tr><td>C</td><td>crop to range</td></tr>
<tr><td>Delete</td><td>delete selected</td></tr>
<tr><td>Shift-Delete</td><td>clear grid</td></tr>
<tr><td>Control-Delete</td><td>delete time in range</td></tr>
<tr><td>Control-Insert</td><td>insert time</td></tr>
<tr><td>Arrow keys</td><td>move viewport</td></tr>
<tr><td>Ctrl-Left</td><td>move to previous note</td></tr>
<tr><td>Ctrl-Right</td><td>move to next note</td></tr>
<tr><td><</td><td>move selection left</td></tr>
<tr><td>></td><td>move selection right</td></tr>
<tr><td>,</td><td>move selection up</td></tr>
<tr><td>.</td><td>move selection down</td></tr>
<tr><td>t</td><td>trim length</td></tr>
<tr><td>Space</td><td>toggle transport</td></tr>
<tr><td>m</td><td>mute</td></tr>
<tr><td>s</td><td>solo</td></tr>
</table></div></center>
<center><div class="fig table"><table id="Fig.2" border=1>
<caption>
<strong>Fig. 2.</strong> Gloabl keybindings
</caption>
<tr><th>key</th><th>function</th></tr>
<tr><td>Alt-p</td><td>Switch to pattern editor</td></tr>
<tr><td>Alt-a</td><td>Switch to phrase editor</td></tr>
<tr><td>Alt-s</td><td>Switch to sequence editor</td></tr>
<tr><td>Space</td><td>Toggle transport</td></tr>
<tr><td>Home</td><td>Locate transport to frame 0</td></tr>
</table></div></center>
<p>
Other functions are accessible from the menus or the key is otherwise indicated.
</p>
</div>
</body>
</html>

46
sequencer/doc/KEYS.mu Normal file
View File

@ -0,0 +1,46 @@
! title Key Bindings
--
These keys are in effect when the pattern or phrase editor grid is focused.
// Editor Keybindings
[[ key, function
[[ [, previous
[[ ], next
[[ 1, horizontal zoom out
[[ 2, horizontal zoom in
[[ 3, vertical zoom out
[[ 4, vertical zoom in
[[ c, create
[[ d, duplicate
[[ f, move to playhead
[[ r, select range (as defined by L and R cursors)
[[ q, select none
[[ C, crop to range
[[ Delete, delete selected
[[ Shift-Delete, clear grid
[[ Control-Delete, delete time in range
[[ Control-Insert, insert time
[[ Arrow keys, move viewport
[[ Ctrl-Left, move to previous note
[[ Ctrl-Right, move to next note
[[ \<, move selection left
[[ >, move selection right
[[ \,, move selection up
[[ ., move selection down
[[ t, trim length
[[ Space, toggle transport
[[ m, mute
[[ s, solo
// Gloabl keybindings
[[ key, function
[[ Alt-p, Switch to pattern editor
[[ Alt-a, Switch to phrase editor
[[ Alt-s, Switch to sequence editor
[[ Space, Toggle transport
[[ Home, Locate transport to frame 0
Other functions are accessible from the menus or the key is otherwise indicated.

293
sequencer/doc/MANUAL.html Normal file
View File

@ -0,0 +1,293 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta name="generator" content="Generated by MUP v3.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link type="text/css" rel="stylesheet" href="mup.css">
<title>The Non Sequencer</title>
</head>
<body>
<div id=cover>
<h1>The Non Sequencer</h1>
<h3></h3>
<address>
Jonathan Moore Liles <a href="mailto:male@tuxfamily.org">&lt;male@tuxfamily.org&gt;</a><br>
Oct 13 2007<br>
</address><a class=ext href="http://non.tuxfamily.org">Home</a><hr></div>
<div id=body>
<div id=toc>
<h1 id=toc>Table Of Contents</h1>
<ul>
<li><a href="#n:1.">1. Description</a>
<ul><li><a href="#n:1.1.">1.1. Guiding Principles</a>
</ul><li><a href="#n:2.">2. The Interface</a>
<ul><li><a href="#n:2.1.">2.1. The Pattern Editor</a>
<ul><li><a href="#n:2.1.1.">2.1.1. The Notes</a>
<li><a href="#n:2.1.2.">2.1.2. Recording</a>
<li><a href="#n:2.1.3.">2.1.3. The Event Editor</a>
</ul><li><a href="#n:2.2.">2.2. The Phrase Editor</a>
<li><a href="#n:2.3.">2.3. The Sequence Editor</a>
<li><a href="#n:2.4.">2.4. Pattern Triggers</a>
</ul><li><a href="#n:3.">3. MIDI</a>
<ul><li><a href="#n:3.1.">3.1. IO</a>
<ul><li><a href="#n:3.1.1.">3.1.1. About Jack MIDI Connections</a>
</ul><li><a href="#n:3.2.">3.2. Non Files</a>
<li><a href="#n:3.3.">3.3. Exports</a>
<li><a href="#n:3.4.">3.4. Imports</a>
</ul><li><a href="#n:4.">4. Synchronization</a>
<li><a href="#n:5.">5. Control</a>
<li><a href="#n:6.">6. Playback</a>
<li><a href="#n:7.">7. Sister Projects</a>
</ul></ul><hr></div>
<h1 id="n:1.">1. Description</h1>
<center><div class="fig image"><table border=1>
<tr><td><img src="non-new-about.png" alt="fig. "></td></tr>
</table></div></center>
<h2 id="n:1.1.">1.1. Guiding Principles</h2>
<ol><li><span>Flexibility</span>
<li><span>Efficiency</span>
<li><span>Purpose</span>
<li><span>Grace</span>
</ol><p>
Non has many modes and functions. Where flexibility comes at a small cost, we prefer to be flexible and make up the difference elsewhere. Where arbitrary limitations are reasonable and necessary, Non enforces them, but not without being forced into it. Where it is easier to be inefficient than efficient, but the efficiency matters, we prefer to put in the (small amount of) work required to be efficient, often resulting in thousand-fold performance gains; this may sound like an obvious statement, but, in fact, design for efficiency is a rare practice in this (Linux Audio<i>'Modern' software</i> arena. Although it is tempting to implement a kitchen sink in every program, we resist the urge. Non has the purpose of being a real-time sequencer and anything outside of that scope is a job for another day. If there is something related to the task at hand that a computer can do instantly and easily, but which requires labor for you, Non tries to do it for you so that you can continue making music without being bothered. Non's user interface is designed to combine the stark functionality and speed of hardware with the degrees of freedom of software.
</p>
<h1 id="n:2.">2. The Interface</h1>
<p>
The interface is quite simple and is based on the excellent FLTK (1.1.x) toolkit. (Versions < 1 of Non were based on raw Xlib and a few Motif widgets.) The author examined many toolkits before beginning, and has absolutely no interest in pursuing GTK or Qt--Non simply doesn't require much of a toolkit, and these are incapable of providing less than total excess.
</p>
<p>
Non's GUI is highly optimized. Common operations are designed to be as fast as possible. Where other sequencers completely monopolize the CPU when scrolling, etc., Non performs smoothly--even on antiquated hardware. It is not technically difficult to achieve such speed. And, in fact, it is a shame that more developers don't consider good (or even just reasonable) performance a priority.
</p>
<h2 id="n:2.1.">2.1. The Pattern Editor</h2>
<center><div class="fig image"><table border=1>
<tr><td><img src="non-pattern-editor.png" alt="fig. "></td></tr>
</table></div></center>
<p>
Upon invocation, Non enters the pattern editor and loads Pattern 1. The pattern editor presents a grid interface--the heart of a step sequencer. You can toggle a note on the grid by entering its coordinates with the keyboard or clicking an intersection with the mouse. The length of patterns is unlimited and no special action is required to lengthen them (simply adding notes beyond the "end" is enough.) Non can present grids in one of two modes, expanded and compacted. In the compacted view, only named rows are displayed; this means that only the notes the current instrument or scale will consume vertical space--resulting in far more efficient use of screen real-estate. Any notes that are made invisible by the compacted view will be silenced.
</p>
<p>
<p>
The resolution of the pattern display can be adjusted (the default is one point per 1/16th note), and, additionally, the canvas can be zoomed horizontally and vertically as necessary. However, it is highly recommended that you avoid creating 'vertical' compositions, that is, one should place each part in a separate pattern and avoid the need to scroll about looking for notes.
</p>
<p>
Tonic patterns have a choice of scale and key, which limits the display to only valid notes. This <i>row-compaction</i> can be turned off, if desired, so that all 128 notes are visible. Or simply choose the <i>chromatic</i> mapping if you are not creating scale based music.
</p>
<p>
Percussion, or other sample-based patterns can be assigned an <i>instrument</i> mapping, which again limits the display to only those notes for which names and volumes have been provided. The instrument definition format is a simple ASCII file containing one name, note and volume percentage per line.
</p>
<p>
Individual patterns may be soloed or muted right from the pattern editor.
</p>
<p>
Each pattern has a setting for output MIDI channel and sequencer port--and these may also be changed while the transport is running.
</p>
<h3 id="n:2.1.1.">2.1.1. The Notes</h3>
<p>
The type (duration) of note to be inserted can be adjusted in the pattern editor (control+mouse-wheel). The velocity of individual notes may be adjusted (mouse-wheel), and the current value is reflected in the color of the note. Ranges may also be <i>inserted</i> and <i>deleted</i>, a commonly required operation during composition, but one that is, sadly, missing from many sequencers.
</p>
<center><div class="fig image"><table border=1>
<tr><td><img src="non-cursors.png" alt="fig. "></td></tr>
</table></div></center>
<h3 id="n:2.1.2.">2.1.2. Recording</h3>
<p>
A pattern can be recorded via MIDI in one of four modes:
</p>
<dl>
<dt><em>Merge (the most familiar/least useful)</em></dt>
<dd>In this mode recorded events are merged into the pattern on each pass through the loop. This is how most sequencers work, but it usually just results in a jumble of notes that require much manual cleaning up.</dd>
<dt><em>Overwrite (each pass [with input] replaces the previous contents of the pattern)</em></dt>
<dd>This is like merge mode, except that the pattern is cleared before the recorded events are input. If no notes have been played during a loop, the pattern remains unchanged. This is a great way to just get a part down without having to remove your hands from the instrument.</dd>
<dt><em>Layer (each pass [with input] goes into a new pattern)</em></dt>
<dd>This is just like overwrite mode, except that the pattern actually overwritten is a duplicate. Use this mode to record several loops of the same length without removing your hands from the instrument.</dd>
<dt><em>New</em></dt>
<dd>In this mode, all recorded events are placed into a new pattern (of whatever length) when recording is stopped.</dd>
</dl>
<h3 id="n:2.1.3.">2.1.3. The Event Editor</h3>
<center><div class="fig image"><table border=1>
<tr><td><img src="non-event-editor-notes.png" alt="fig. "></td></tr>
</table></div></center>
<p>
For situations requiring close inspection, fine-adjustments or entering of non-note data, the Event Editor allows one to edit the raw MIDI event list of a pattern. A common use is to insert program or control change events.
</p>
<p>
Like everything else in Non, the Event Editor is real-time--change a note and you'll see and hear the result as the pattern plays.
</p>
<h2 id="n:2.2.">2.2. The Phrase Editor</h2>
<center><div class="fig image"><table border=1>
<tr><td><img src="non-phrase-editor.png" alt="fig. "></td></tr>
</table></div></center>
<p>
Phrases are to patterns as patterns are to notes. Switching to the Phrase Editor brings up Phrase 1, where each row corresponds to an existing <i>pattern</i>. The grid of the Phrase Editor is fixed at one column-per-beat. This view is somewhat similar to a timeline view in other sequencers, but do not be deceived--Phrases may be many in number and are triggered just like patterns.
</p>
<p>
When a node on the Phrase Editor grid is activated, the length of the cue event inserted will be the same as that of the pattern being triggered. Adjusting the duration of this event will cause the pattern be cut short or looped. If the length of a referenced pattern is changed, this will <b>not</b> be reflected in the Phrase display. You must either re-insert or adjust the length of the reference.
</p>
<p>
It is recommended that, to avoid confusion, you first compose all of the patterns you need for a phrase, and only then bring up the phrase editor.
</p>
<p>
Editing operations are the same as those for the Pattern Editor.
</p>
<h2 id="n:2.3.">2.3. The Sequence Editor</h2>
<p>
The Sequence Editor defines the sequence of playback. The interface is a list of phrases, to be played sequentially, beginning from bar 1. It is not necessary to include all existing phrases in the playlist. Phrases can be moved up and down the playlist, inserted and deleted. The editor displays the start bar of each phrase in addition to its number and name.
</p>
<p>
This sequence->phrase->pattern hierarchy allows for logical, expressive compositions--without the labor intensive copy<i>paste</i>duplicate work-flow imposed by other sequencers.
</p>
<p>
For example, suppose you have a song with a 12 bar progression that repeats 4 times. This 12 bar sequence is composed of many patterns, each a few measures in length and roughly corresponding to the chords in the progression.
</p>
<p>
In another sequencer you would be required to use clumsy copy/paste operations to destructively extend the 12 bar sequence. Then if you wanted to change a part of that subsequence later, you would have to go edit each instance of it on the 'timeline' view. This is absurdly inefficient for the operator.
</p>
<p>
In Non you simply create your patterns, assemble them into logical phrases, and then assemble these phrases into a sequence that determines the entire song. This approach is similar to the bottom-up approach of factored languages such as Forth.
</p>
<h2 id="n:2.4.">2.4. Pattern Triggers</h2>
<center><div class="fig image"><table border=1>
<tr><td><img src="non-pattern-triggers.png" alt="fig. "></td></tr>
</table></div></center>
<p>
Next to the sequence playlist is an array of pattern triggers. Here one can monitor the progress of multiple patterns during playback and cause them to be muted etc.
</p>
<p>
The left mouse button toggles muting, the middle button toggles soloing, and the right button brings up the given pattern in the pattern editor.
</p>
<p>
Playing patterns appear green, the solo pattern appears red, and muted patterns appear gray,
</p>
<h1 id="n:3.">3. MIDI</h1>
<h2 id="n:3.1.">3.1. IO</h2>
<p>
Non utilizes the Jack MIDI transport. Jack MIDI is an emerging MIDI transport for Linux. Since Jack already provides similar routing as the ALSA Sequencer interface, little is lost--besides compatibility with existing programs. (Jack has an aseq bridge capability, but in order to benefit from Jack MIDI, both sequencer and synth must use Jack). The Jack MIDI API is extremely limited in comparison to the very capable ALSA API, but this is a problem for the programmer, not the user.
</p>
<p>
At the time of writing, Non is one of only two sequencers to use Jack MIDI natively.
</p>
<h3 id="n:3.1.1.">3.1.1. About Jack MIDI Connections</h3>
<p>
Since Jack MIDI is new and not all programs support it, many find themselves confused. This section attempts to explain Jack MIDI ports.
</p>
<p>
The ALSA sequencer interface has long been the standard MIDI routing subsystem on Linux. But many (all) of the programs we use for synthesis these days use Jack for their audio IO. It makes more sense for those MIDI related programs utilizing the Jack Transport for synchronization to also use Jack ports for MIDI delivery. Therefore, ALSA MIDI is quickly becoming obsolete.
</p>
<p>
Jack MIDI ports are <b>not</b> related to ALSA MIDI ports in any way. Jack MIDI ports are just like Jack audio ports, except that the data being transmitted in each buffer are raw, timestamped MIDI events instead of floating point audio samples. Jack MIDI is sample-accurate. This means that a MIDI Note On event can occur concurrently with a sound, and the two will never drift apart as often happens to some extent with ALSA.
</p>
<p>
In essence, Jack MIDI is a way of expressing a direct temporal correlation between audio and MIDI data.
</p>
<div class=admonition>
<table width=100%>
<tr><td><em>Note:</em></td>
<td>Older versions of QJackCtl and other connection managers do not
know about Jack MIDI ports. Please make sure you're using an
up-to-date version.
</td></table>
</div>
<p>
<p>
For example, to connect Non to ZynAddSubFX (the CVS version supports Jack MIDI), type the following into the shell:
</p>
<div class="fig example"><table width=100%><tr><td><pre>
$ jack_connect Non:midi_out-1 ZynAddSubFX:midi_in
</pre></td></tr>
</table></div>
<p>
Also, be sure that Zyn's outputs are connected to system:playback_* so that you can hear the sounds it produces.
</p>
<p>
It is possible to use Jack MIDI clients and ALSA MIDI clients together via the bridge built into jackd. For this to work you must append the <tt>-X seq</tt> option to the <tt>alsa</tt> driver section of the jackd command line. Like so:
</p>
<div class="fig example"><table width=100%><tr><td><pre>
$ jackd -d alsa -X seq
</pre></td></tr>
</table></div>
<p>
The way such bridged ports are named varies between Jack versions, but they should be fairly obvious. When used in this way, many of the advantages of Jack MIDI are lost, so it is recommended that you find a Jack MIDI capable synth for best results.
</p>
<center><div class="fig image"><table id="Fig.3.1" border=1>
<caption>
<strong>Fig. 3.1.</strong> Example of Jack MIDI connections in Patchage
</caption>
<tr><td><img src="non-patchage.png" alt="fig. 3.1"></td></tr>
</table></div></center>
<h2 id="n:3.2.">3.2. Non Files</h2>
<p>
The format of <tt>.non</tt> files is a variation of SMF-2. In an SMF-2 file, each track chunk represents a pattern. Because Non groups patterns into <i>phrases</i>, this usage of SMF-2 is probably not compatible with other implementations (although, the author has never actually seen another program that could play back SMF-2 anyway.)
</p>
<p>
Each phrase is stored as a track of MIDI Cue messages, each referring to a pattern to be triggered. The sequence/playlist is stored as the first track, and consists of a list of Cue Point meta-events referring to phrases.
</p>
<p>
Also in the first track is a sequencer specific meta-event (ID "Non!") containing song data that cannot be readily expressed with existing meta events, and some versioning info to aid future compatibility.
</p>
<p>
In short, the author has done the utmost to save sequences in a standard format--within reason; SMF was hardly designed with a program like Non in mind--instead of some ad-hoc ASCII format (which would have been <b>far</b> easier to implement), or worse, buggy, bulky, and unmaintainable XML.
</p>
<h2 id="n:3.3.">3.3. Exports</h2>
<p>
In addition to saving and loading <tt>.non</tt> files, Non can export individual patterns as flat, SMF-0 MIDI files.
</p>
<h2 id="n:3.4.">3.4. Imports</h2>
<p>
SMF-0 files can be imported as a new pattern (all channels merged), or SMF-1 (such as those written by Seq24) and SMF-2 (ever seen one of these?) can be imported as N new patterns (selected from a track list.) All imported patterns are set to display the Chromatic scale, in order that no notes be hidden from view.
</p>
<p>
This should make it easy to migrate any existing patterns that you may have over to Non, or to permit editing of Non patterns in external programs (for graphic controller tweaking perhaps?)
</p>
<h1 id="n:4.">4. Synchronization</h1>
<p>
Non's transport is driven by the Jack Transport, so in order to sync Non with a DAW like Ardour, you must set Ardour to be the Jack Timebase Master. Therefore, all tempo mapping and time signature information should be manipulated in the Timebase Master--Non will respond to these changes automatically. If there is no Timebase Master registered when Non starts, it will take over that role instead. This is useful if you simply plan to use Non as a musical instrument.
</p>
<h1 id="n:5.">5. Control</h1>
<p>
Non creates two MIDI input ports, one for <i>performance</i> data and one for <i>control</i> data. The control port is used to control Non with hardware MIDI controllers, such as the BCF2000, or other software. The performance port is used to record musical data into patterns.
</p>
<h1 id="n:6.">6. Playback</h1>
<p>
The playback mode can be toggled between Pattern, Sequence and Trigger. In Pattern mode (the default), all patterns are played simultaneously, from the beginning, and looped forever. Since patterns may differ widely in length, interesting compositions are possible. In this mode, Non makes for a very intuitive software instrument--rivaled only by the excellent program FreeWheeling (a live audio looper.)
</p>
<p>
In Sequence mode, playback strictly follows the sequence list and the Jack transport, and does not loop. This mode is suitable for parallel compositions between Non and a Jack Timebase Master capable DAW.
</p>
<p>
Trigger mode is very much like Pattern mode, except that all patterns begin muted and must be enabled via the trigger view.
</p>
<h1 id="n:7.">7. Sister Projects</h1>
<p>
Much of the inspiration to move forward with Non was derived from JP Mercury's highly useful and successful FreeWheeling looper. Mr. Mercury is a visionary.
</p>
<p>
But the closest sister of Non has to be the amazingly capable ZynAddSubFX soft-synth by Nasca Octavian Paul. ZynAddSubFX, like Non, utilizes the FLTK GUI toolkit, and has recently begun to support Jack MIDI (albeit in a limited fashion.) This is, hands down, the best synth available for Linux, and probably one of the best period. If all you have is Non and Zyn, you have all that you require to make great music.
</p>
<p>
Of course, this section can hardly go without mention of Rob Buse's Seq24. It was the author's unending frustration with the abysmal performance and absurd limitations of Seq24 that, more than any other single factor, inspired him to write Non. The most frustrating aspect was that, prior to Non, Seq24 was, in the author's opinion, the best sequencer available on Linux. Seq24, which claims to be light and free of bloat is, without comparison, the slowest, most poorly optimized sequencer the author has tried. Even the huge, snarling beast that is RoseGarden out performs Seq24 in every way but start time.
</p>
<p>
Those days are over.
</p>
</div>
</body>
</html>

394
sequencer/doc/MANUAL.mu Normal file
View File

@ -0,0 +1,394 @@
! title The Non Sequencer
! author Jonathan Moore Liles #(email,male@tuxfamily.org)
! date Oct 13 2007
! keywords Non Jack ALSA FLTK
! extra #(url,http://non.tuxfamily.org,Home)
-- Table Of Contents
: Description
< non-new-about.png
:: Guiding Principles
+ Flexibility
+ Efficiency
+ Purpose
+ Grace
Non has many modes and functions. Where flexibility comes at a small
cost, we prefer to be flexible and make up the difference
elsewhere. Where arbitrary limitations are reasonable and necessary,
Non enforces them, but not without being forced into it. Where it is
easier to be inefficient than efficient, but the efficiency matters,
we prefer to put in the (small amount of) work required to be
efficient, often resulting in thousand-fold performance gains; this
may sound like an obvious statement, but, in fact, design for
efficiency is a rare practice in this (Linux Audio/'Modern'
software) arena. Although it is tempting to implement a kitchen sink
in every program, we resist the urge. Non has the purpose of being a
real-time sequencer and anything outside of that scope is a job for
another day. If there is something related to the task at hand that
a computer can do instantly and easily, but which requires labor for
you, Non tries to do it for you so that you can continue making
music without being bothered. Non's user interface is designed to
combine the stark functionality and speed of hardware with the
degrees of freedom of software.
: The Interface
The interface is quite simple and is based on the excellent FLTK
(1.1.x) toolkit. (Versions \< 1 of Non were based on raw Xlib and a
few Motif widgets.) The author examined many toolkits before
beginning, and has absolutely no interest in pursuing GTK or Qt--Non
simply doesn't require much of a toolkit, and these are incapable of
providing less than total excess.
Non's GUI is highly optimized. Common operations are designed to be
as fast as possible. Where other sequencers completely monopolize
the CPU when scrolling, etc., Non performs smoothly--even on
antiquated hardware. It is not technically difficult to achieve
such speed. And, in fact, it is a shame that more developers don't
consider good (or even just reasonable) performance a priority.
:: The Pattern Editor
< non-pattern-editor.png
Upon invocation, Non enters the pattern editor and loads Pattern
1. The pattern editor presents a grid interface--the heart of a step
sequencer. You can toggle a note on the grid by entering its
coordinates with the keyboard or clicking an intersection with the
mouse. The length of patterns is unlimited and no special action is
required to lengthen them (simply adding notes beyond the "end" is
enough.) Non can present grids in one of two modes, expanded and
compacted. In the compacted view, only named rows are displayed;
this means that only the notes the current instrument or scale will
consume vertical space--resulting in far more efficient use of
screen real-estate. Any notes that are made invisible by the
compacted view will be silenced.
You may add, remove, transpose, move, and edit notes, as well as
trigger/mute patterns, while the transport is running.
The resolution of the pattern display can be adjusted (the default
is one point per 1\/16th note), and, additionally, the canvas can be
zoomed horizontally and vertically as necessary. However, it is
highly recommended that you avoid creating 'vertical' compositions,
that is, one should place each part in a separate pattern and avoid
the need to scroll about looking for notes.
Tonic patterns have a choice of scale and key, which limits the
display to only valid notes. This /row-compaction/ can be turned
off, if desired, so that all 128 notes are visible. Or simply choose
the /chromatic/ mapping if you are not creating scale based music.
Percussion, or other sample-based patterns can be assigned an
/instrument/ mapping, which again limits the display to only those
notes for which names and volumes have been provided. The instrument
definition format is a simple ASCII file containing one name, note
and volume percentage per line.
Individual patterns may be soloed or muted right from the pattern
editor.
Each pattern has a setting for output MIDI channel and sequencer
port--and these may also be changed while the transport is running.
::: The Notes
The type (duration) of note to be inserted can be adjusted in the
pattern editor (control+mouse-wheel). The velocity of individual
notes may be adjusted (mouse-wheel), and the current value is
reflected in the color of the note. Ranges may also be /inserted/
and /deleted/, a commonly required operation during composition, but
one that is, sadly, missing from many sequencers.
< non-cursors.png
::: Recording
A pattern can be recorded via MIDI in one of four modes:
= Merge (the most familiar/least useful)
= In this mode recorded events are merged into the pattern on each pass
= through the loop. This is how most sequencers work, but it usually just
= results in a jumble of notes that require much manual cleaning up.
= Overwrite (each pass [with input] replaces the previous contents of the pattern)
= This is like merge mode, except that the pattern is cleared before
= the recorded events are input. If no notes have been played during
= a loop, the pattern remains unchanged. This is a great way to just get
= a part down without having to remove your hands from the instrument.
= Layer (each pass [with input] goes into a new pattern)
= This is just like overwrite mode, except that the pattern actually
= overwritten is a duplicate. Use this mode to record several loops of
= the same length without removing your hands from the instrument.
= New
= In this mode, all recorded events are placed into a new pattern (of
= whatever length) when recording is stopped.
# It is especially useful if you bind Record to a MIDI footswitch.
::: The Event Editor
< non-event-editor-notes.png
For situations requiring close inspection, fine-adjustments or
entering of non-note data, the Event Editor allows one to edit the
raw MIDI event list of a pattern. A common use is to insert program
or control change events.
Like everything else in Non, the Event Editor is real-time--change a
note and you'll see and hear the result as the pattern plays.
:: The Phrase Editor
< non-phrase-editor.png
Phrases are to patterns as patterns are to notes. Switching to the
Phrase Editor brings up Phrase 1, where each row corresponds to an
existing /pattern/. The grid of the Phrase Editor is fixed at one
column-per-beat. This view is somewhat similar to a timeline view in
other sequencers, but do not be deceived--Phrases may be many in
number and are triggered just like patterns.
When a node on the Phrase Editor grid is activated, the length of
the cue event inserted will be the same as that of the pattern being
triggered. Adjusting the duration of this event will cause the
pattern be cut short or looped. If the length of a referenced
pattern is changed, this will *not* be reflected in the Phrase
display. You must either re-insert or adjust the length of the
reference.
It is recommended that, to avoid confusion, you first compose all of
the patterns you need for a phrase, and only then bring up the
phrase editor.
Editing operations are the same as those for the Pattern Editor.
:: The Sequence Editor
The Sequence Editor defines the sequence of playback. The interface
is a list of phrases, to be played sequentially, beginning from bar
1. It is not necessary to include all existing phrases in the
playlist. Phrases can be moved up and down the playlist, inserted
and deleted. The editor displays the start bar of each phrase in
addition to its number and name.
This sequence->phrase->pattern hierarchy allows for logical,
expressive compositions--without the labor intensive
copy/paste/duplicate work-flow imposed by other sequencers.
For example, suppose you have a song with a 12 bar progression that
repeats 4 times. This 12 bar sequence is composed of many patterns,
each a few measures in length and roughly corresponding to the
chords in the progression.
In another sequencer you would be required to use clumsy copy\/paste
operations to destructively extend the 12 bar sequence. Then if you
wanted to change a part of that subsequence later, you would have to
go edit each instance of it on the 'timeline' view. This is absurdly
inefficient for the operator.
In Non you simply create your patterns, assemble them into logical
phrases, and then assemble these phrases into a sequence that
determines the entire song. This approach is similar to the
bottom-up approach of factored languages such as Forth.
:: Pattern Triggers
< non-pattern-triggers.png
Next to the sequence playlist is an array of pattern triggers. Here
one can monitor the progress of multiple patterns during playback
and cause them to be muted etc.
The left mouse button toggles muting, the middle button toggles
soloing, and the right button brings up the given pattern in the
pattern editor.
Playing patterns appear green, the solo pattern appears red, and
muted patterns appear gray,
: MIDI
:: IO
Non utilizes the Jack MIDI transport. Jack MIDI is an emerging MIDI
transport for Linux. Since Jack already provides similar routing as
the ALSA Sequencer interface, little is lost--besides compatibility
with existing programs. (Jack has an aseq bridge capability, but in
order to benefit from Jack MIDI, both sequencer and synth must use
Jack). The Jack MIDI API is extremely limited in comparison to the
very capable ALSA API, but this is a problem for the programmer, not
the user.
At the time of writing, Non is one of only two sequencers to use
Jack MIDI natively.
::: About Jack MIDI Connections
Since Jack MIDI is new and not all programs support it, many find
themselves confused. This section attempts to explain Jack MIDI
ports.
The ALSA sequencer interface has long been the standard MIDI routing
subsystem on Linux. But many (all) of the programs we use for
synthesis these days use Jack for their audio IO. It makes more
sense for those MIDI related programs utilizing the Jack Transport
for synchronization to also use Jack ports for MIDI
delivery. Therefore, ALSA MIDI is quickly becoming obsolete.
Jack MIDI ports are *not* related to ALSA MIDI ports in any
way. Jack MIDI ports are just like Jack audio ports, except that the
data being transmitted in each buffer are raw, timestamped MIDI
events instead of floating point audio samples. Jack MIDI is
sample-accurate. This means that a MIDI Note On event can occur
concurrently with a sound, and the two will never drift apart as
often happens to some extent with ALSA.
In essence, Jack MIDI is a way of expressing a direct temporal
correlation between audio and MIDI data.
// Note:
{ Older versions of QJackCtl and other connection managers do not
{ know about Jack MIDI ports. Please make sure you're using an
{ up-to-date version.
When Non is started, it will create `Non:midi_in` and
`Non:control_in` input ports, as well as the 16 output ports with
names after the form `Non:midi_out-X`, where `X` is a number from 1
to 16. These ports will be visible in any connection manager capable
of connecting Jack MIDI ports, as well as via the `jack_lsp` and
`jack_connect` command-line utilities.
For example, to connect Non to ZynAddSubFX (the CVS version supports
Jack MIDI), type the following into the shell:
> $ jack_connect Non:midi_out-1 ZynAddSubFX:midi_in
Also, be sure that Zyn's outputs are connected to
system:playback\_\* so that you can hear the sounds it produces.
It is possible to use Jack MIDI clients and ALSA MIDI clients
together via the bridge built into jackd. For this to work you must
append the `-X seq` option to the `alsa` driver section of the jackd
command line. Like so:
> $ jackd -d alsa -X seq
The way such bridged ports are named varies between Jack versions,
but they should be fairly obvious. When used in this way, many of
the advantages of Jack MIDI are lost, so it is recommended that you
find a Jack MIDI capable synth for best results.
// Example of Jack MIDI connections in Patchage
< non-patchage.png
:: Non Files
The format of `.non` files is a variation of SMF-2. In an SMF-2
file, each track chunk represents a pattern. Because Non groups
patterns into /phrases/, this usage of SMF-2 is probably not
compatible with other implementations (although, the author has
never actually seen another program that could play back SMF-2
anyway.)
Each phrase is stored as a track of MIDI Cue messages, each
referring to a pattern to be triggered. The sequence\/playlist is
stored as the first track, and consists of a list of Cue Point
meta-events referring to phrases.
Also in the first track is a sequencer specific meta-event (ID
"Non!") containing song data that cannot be readily expressed with
existing meta events, and some versioning info to aid future
compatibility.
In short, the author has done the utmost to save sequences in a
standard format--within reason; SMF was hardly designed with a
program like Non in mind--instead of some ad-hoc ASCII format (which
would have been *far* easier to implement), or worse, buggy, bulky,
and unmaintainable XML.
:: Exports
In addition to saving and loading `.non` files, Non can export
individual patterns as flat, SMF-0 MIDI files.
:: Imports
SMF-0 files can be imported as a new pattern (all channels merged),
or SMF-1 (such as those written by Seq24) and SMF-2 (ever seen one
of these?) can be imported as N new patterns (selected from a track
list.) All imported patterns are set to display the Chromatic scale,
in order that no notes be hidden from view.
This should make it easy to migrate any existing patterns that you
may have over to Non, or to permit editing of Non patterns in
external programs (for graphic controller tweaking perhaps?)
: Synchronization
Non's transport is driven by the Jack Transport, so in order to sync
Non with a DAW like Ardour, you must set Ardour to be the Jack
Timebase Master. Therefore, all tempo mapping and time signature
information should be manipulated in the Timebase Master--Non will
respond to these changes automatically. If there is no Timebase
Master registered when Non starts, it will take over that role
instead. This is useful if you simply plan to use Non as a musical
instrument.
: Control
Non creates two MIDI input ports, one for /performance/ data and one
for /control/ data. The control port is used to control Non with
hardware MIDI controllers, such as the BCF2000, or other software.
The performance port is used to record musical data into patterns.
: Playback
The playback mode can be toggled between Pattern, Sequence and
Trigger. In Pattern mode (the default), all patterns are played
simultaneously, from the beginning, and looped forever. Since
patterns may differ widely in length, interesting compositions are
possible. In this mode, Non makes for a very intuitive software
instrument--rivaled only by the excellent program FreeWheeling (a
live audio looper.)
In Sequence mode, playback strictly follows the sequence list and
the Jack transport, and does not loop. This mode is suitable for
parallel compositions between Non and a Jack Timebase Master capable
DAW.
Trigger mode is very much like Pattern mode, except that all
patterns begin muted and must be enabled via the trigger view.
: Sister Projects
Much of the inspiration to move forward with Non was derived from JP
Mercury's highly useful and successful FreeWheeling
looper. Mr. Mercury is a visionary.
But the closest sister of Non has to be the amazingly capable
ZynAddSubFX soft-synth by Nasca Octavian Paul. ZynAddSubFX, like
Non, utilizes the FLTK GUI toolkit, and has recently begun to
support Jack MIDI (albeit in a limited fashion.) This is, hands
down, the best synth available for Linux, and probably one of the
best period. If all you have is Non and Zyn, you have all that you
require to make great music.
Of course, this section can hardly go without mention of Rob Buse's
Seq24. It was the author's unending frustration with the abysmal
performance and absurd limitations of Seq24 that, more than any
other single factor, inspired him to write Non. The most
frustrating aspect was that, prior to Non, Seq24 was, in the
author's opinion, the best sequencer available on Linux. Seq24,
which claims to be light and free of bloat is, without comparison,
the slowest, most poorly optimized sequencer the author has
tried. Even the huge, snarling beast that is RoseGarden out performs
Seq24 in every way but start time.
Those days are over.

23
sequencer/doc/Makefile Normal file
View File

@ -0,0 +1,23 @@
SRCS=$(wildcard *.mu)
OBJS=$(SRCS:.mu=.html)
%.html: %.mu
@ echo Mupping $<...
@ mup.wrapper html $<
.PHONY: all clean
all: $(OBJS)
upload: all
@ ln -sf OVERVIEW.html index.html
@ rsync -L mup.css MANUAL.html index.html *.png ssh.tuxfamily.org:/home/non/non-sequencer.tuxfamily.org-web/htdocs
@ rm -f index.html
install:
@ install -d "$(DESTDIR)$(DOCUMENT_PATH)/non-sequencer"
@ install -m 644 $(OBJS) *.png mup.css ../../COPYING "$(DESTDIR)$(DOCUMENT_PATH)/non-sequencer"
clean:
rm -f $(OBJS)

View File

@ -0,0 +1,86 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta name="generator" content="Generated by MUP v3.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link type="text/css" rel="stylesheet" href="mup.css">
<title>The Non Sequencer</title>
</head>
<body>
<div id=cover>
<h1>The Non Sequencer</h1>
<h3></h3>
<address>
Jonathan Moore Liles <a href="mailto:male@tuxfamily.org">&lt;male@tuxfamily.org&gt;</a><br>
<br>
</address><img src="icon.png" alt="logo"><hr></div>
<div id=body>
<hr width=50%>
<h1 id="u:1.">Description</h1>
<p>
The Non Sequencer is a powerful real-time, pattern-based MIDI sequencer for Linux--released under the GPL. Filling the void left by countless DAWs, piano-roll editors, and other purely performance based solutions, it is a compositional tool--one that transforms MIDI music-making on Linux from a complex nightmare into a pleasurable, efficient, and streamlined process.
</p>
<p>
Please see the <a class=ext href="MANUAL.html">manual</a> for more information.
</p>
<h1 id="u:2.">What it is not</h1>
<p>
Non is <b>not</b> a plain MIDI recorder, tracker, software synthesizer, notation editor or AI system. There are other programs available to do those things. Non is intended to be one tool among many in your Linux audio toolbox.
</p>
<p>
Everything in Non happens <i>on-line</i>, in realtime. Music is composed live, while the transport is running.
</p>
<h1 id="u:3.">What does freedom have to do with this software?</h1>
<p>
Non is <i>free software</i>. This means, briefly, that you are free use it as <b>you</b> wish, free to examine and adapt the source code, free to share it with your friends, and free to publish your changes to the source code. Furthermore, Non is <i>copyleft</i>, which means that you are free from the threat of some other entity taking over and denying you the above freedoms. The <i>free</i> part of <i>free software</i> doesn't refer to price any more than the <i>free</i> in <i>free speech</i> does.
</p>
<p>
To learn why free software is so important to us (and why it should be important to you), please see the Free Software Foundation's website:
</p>
<p>
<a class=ext href="http://www.fsf.org/licensing/essays/free-sw.html">What is Free Software?</a> <a class=ext href="http://www.fsf.org/licensing/essays/copyleft.html">What is Copyleft?</a>
</p>
<h1 id="u:4.">Donations</h1>
<p>
Donations can take many forms. You can donate your time in code, either by sending it to me for review or cloning the git repository and publishing one containing your changes. You can donate your time in testing, documentation, artwork, indexing, etc. Or, if you don't feel that you possess the time or skills required for the above forms of donation, you can donate money instead. Money donated will help to ensure that I have the free time, good nutrition and enthusiasm required to implement new features. It can also be a more palpable way of saying "Thanks for caring." or "Job well done!"
</p>
<p>
If you don't love this software, don't feel guilty about not contributing. If you do love it, then please help me improve it--in whatever manner you think is appropriate.
</p>
<p>
<a class=ext href="http://non.tuxfamily.org/donation.html">Make a donation</a>
</p>
<h1 id="u:5.">Distribution</h1>
<p>
Development of the Non Sequencer can be followed with Git:
</p>
<div class="fig example"><table width=100%><tr><td><pre>
git clone git://git.tuxfamily.org/gitroot/non/sequencer.git
</pre></td></tr>
</table></div>
<p>
There are no pre-compiled binaries available.
</p>
<h1 id="u:6.">Requirements</h1>
<p>
The following libraries are required to build Non.
</p>
<ul><li><span>FLTK >= 1.1.7 (with `fluid`)</span>
<li><span>JACK >= 0.103.0</span>
<li><span>sigc++ 2.0</span>
</ul><h1 id="u:7.">Community</h1>
<p>
Feel free to drop by the <tt>#non</tt> channel on irc.freenode.net.
</p>
<p>
There is a mailing list <tt>non-sequencer@lists.tuxfamily.org</tt>.
</p>
<p>
To subscribe, send a message with the subject 'subscribe' to <a href="mailto:non-sequencer-request@lists.tuxfamily.org">&lt;non-sequencer-request@lists.tuxfamily.org&gt;</a>.
</p>
<p>
You can also browse the <a class=ext href="http://listengine.tuxfamily.org/lists.tuxfamily.org/non-sequencer/">archive</a>.
</p>
</div>
</body>
</html>

91
sequencer/doc/OVERVIEW.mu Normal file
View File

@ -0,0 +1,91 @@
! title The Non Sequencer
! author Jonathan Moore Liles #(email,male@tuxfamily.org)
! extra #(image,logo,icon.png)
--
; Description
The Non Sequencer is a powerful real-time, pattern-based MIDI sequencer for
Linux--released under the GPL. Filling the void left by countless DAWs,
piano-roll editors, and other purely performance based solutions, it is a
compositional tool--one that transforms MIDI music-making on Linux from a
complex nightmare into a pleasurable, efficient, and streamlined process.
Please see the #(url,MANUAL.html,manual) for more information.
; What it is not
Non is *not* a plain MIDI recorder, tracker, software synthesizer, notation
editor or AI system. There are other programs available to do those things.
Non is intended to be one tool among many in your Linux audio toolbox.
Everything in Non happens /on-line/, in realtime. Music is composed live,
while the transport is running.
; What does freedom have to do with this software?
Non is /free software/. This means, briefly, that you are free use it as
*you* wish, free to examine and adapt the source code, free to share it with
your friends, and free to publish your changes to the source code.
Furthermore, Non is /copyleft/, which means that you are free from the threat
of some other entity taking over and denying you the above freedoms. The
/free/ part of /free software/ doesn't refer to price any more than the
/free/ in /free speech/ does.
To learn why free software is so important to us (and why it should be
important to you), please see the Free Software Foundation's website:
#(url,http:\/\/www.fsf.org\/licensing\/essays\/free-sw.html,What is Free Software?)
#(url,http:\/\/www.fsf.org\/licensing\/essays\/copyleft.html,What is Copyleft?)
; Donations
Donations can take many forms. You can donate your time in code, either by
sending it to me for review or cloning the git repository and publishing one
containing your changes. You can donate your time in testing, documentation,
artwork, indexing, etc. Or, if you don't feel that you possess the time or
skills required for the above forms of donation, you can donate money
instead. Money donated will help to ensure that I have the free time, good
nutrition and enthusiasm required to implement new features. It can also be
a more palpable way of saying "Thanks for caring." or "Job well done!"
If you don't love this software, don't feel guilty about not contributing. If
you do love it, then please help me improve it--in whatever manner you think
is appropriate.
#(url,http:\/\/non.tuxfamily.org\/donation.html,Make a donation)
; Distribution
Development of the Non Sequencer can be followed with Git:
> git clone git://git.tuxfamily.org/gitroot/non/sequencer.git
# or
#
# > git clone git://repo.or.gz/src/git/non.git
There are no pre-compiled binaries available.
; Requirements
The following libraries are required to build Non.
* FLTK >= 1.1.7 (with `fluid`)
* JACK >= 0.103.0
* sigc++ 2.0
; Community
Feel free to drop by the `#non` channel on irc.freenode.net.
There is a mailing list `non-sequencer@lists.tuxfamily.org`.
To subscribe, send a message with the subject 'subscribe' to
#(email,non-sequencer-request@lists.tuxfamily.org).
You can also browse the #(url,http:\/\/listengine.tuxfamily.org\/lists.tuxfamily.org\/non-sequencer\/,archive).

1
sequencer/doc/icon.png Symbolic link
View File

@ -0,0 +1 @@
../icons/hicolor/256x256/apps/non-sequencer.png

449
sequencer/doc/mup.css Normal file
View File

@ -0,0 +1,449 @@
/* Example CSS Style for MUP */
a:link {
color: yellow;
}
a:visited {
color: olive;
}
a:active {
color: white;
}
a:link:hover {
text-decoration: underline;
}
/* #(url) */
a.ext:link {
color: red;
text-decoration: none;
border-bottom: dashed silver 1;
}
a.ext:visited {
color: darkred;
border-bottom: dashed silver 1;
text-decoration: none;
}
/* #(ref) */
a.int:link {
border-bottom: dashed silver 0.15em;
}
a.int:link:hover {
text-decoration: none;
color: white;
}
/*
a[href^="#"]:link {
border-bottom: dashed silver 0.15em;
}
a[href^="#"]:link:hover {
text-decoration: none;
color: white;
}
*/
p:contains("Warning:") {
background: #d00;
color: white;
border: dotted gray 0.5em;
display: block;
}
/* First letter of first paragraph of every chapter */
/*
h1 + p:first-letter {
text-transform: uppercase;
float: left;
line-height: 0.8em;
font-size: 350%;
font-family: Serif;
letter-spacing: 0;
margin-right: 0.1em;
margin-top: 0.1em;
border: solid gray 1px;
padding: 1px;
color: #d00;
text-shadow: #666 3px 3px 3px;
}
*/
/* First paragraph of every chapter */
/*
h1 + p {
text-indent: 0;
}
*/
/* cover */
#cover * {
background: transparent;
}
#cover {
position: relative;
background: #da0;
color: black;
text-align: center;
margin: 0;
padding: 0.5em;
}
#cover h1, #cover h3 {
text-shadow: #444 0.2em 0.2em 0.2em;
color: white;
border: none;
letter-spacing: 0.2em;
line-height: 0.8em;
margin-left: 2em;
margin-right: 2em;
}
#cover h1:before, #cover h1:after {
content: "::";
font-size: 300%;
color: black;
}
#cover h1:before {
position: absolute;
top: 0.2em;
left: 0.1em;
}
#cover h1:after {
position: absolute;
top: 0.2em;
right: 0.1em;
}
#cover hr {
display: none;
}
hr:first-child {
display: none;
}
hr {
height: 0.2em;
background: #555;
color: #555;
margin-left: 0.5em;
}
#cover a:visited {
color: black;
}
/* endnote */
#endnote {
color: black;
}
/* TOC */
#toc {
position: relative;
}
#toc hr {
}
#toc h1 {
}
#toc ul {
font-size: 125%;
font-weight: bold;
margin-bottom: 1em;
}
#toc ul ul {
font-size: 90%;
font-weight: normal;
margin-bottom: 0;
}
#toc li {
list-style: none;
}
#toc a:link {
border-bottom: 0;
}
body {
margin: 0;
background: #222;
color: white;
font-family: Arial, sans-serif;
}
/* */
#body {
position: relative;
margin: 0.5em;
padding: 0.5em;
}
/* ;, : */
h1 {
color: #ff0;
border-bottom: solid #444 0.1em;
}
/* ::, :::, ::::, :::::, :::::: */
h2, h3, h4, h5, h6 {
color: #dd0;
}
/* tables, figures */
.fig caption {
color: gray;
text-align: center;
/* Required for Mozilla */
margin: auto;
}
.fig table {
border: none;
margin: auto;
/* border-collapse: collapse; */
}
/* / */
.fig.table th {
border: none;
background: gray;
color: black;
}
/* [ */
.fig.table td {
border: none;
background: silver;
color: black;
padding-left: 1em;
padding-right: 1em;
padding-top: 0.2em;
padding-bottom: 0.2em;
}
/* < */
.fig.image table {
border: dashed silver 0.2em;
background: transparent;
/* Every browser should support border radii */
-moz-border-radius: 0.5em;
border-radius: 0.5em;
}
.fig.image tr, .fig.image td {
border: none;
background: transparent;
padding: 0;
}
/* */
p {
margin-right: 2%;
text-align: justify;
text-indent: 1em;
}
/* > */
.example *
{
background: transparent;
}
.example table
{
margin: 0;
padding: 0;
table-layout: fixed;
width: 100%;
caption-side: top;
overflow: auto;
}
.example caption
{
caption-side: top;
}
.example {
}
.example p {
display: inline;
margin: 0;
padding: 0;
text-align: center;
}
.example pre {
margin-top: 0;
font-family: Monospace;
padding: 1em;
border: dashed 0.3em gray;
background: #111;
color: white;
display: block;
overflow: auto;
/* Every browser should support border radii */
-moz-border-radius: 0.5em;
border-radius: 0.5em;
}
/* " */
/*
.quote:before {
float: left;
font-size: 500%;
content: "\201C";
}
*/
/*
blockquote:after {
content: "\201D";
}*/
.quote blockquote {
padding: 0.5em;
margin-left: 0.5em;
font-family: Serif;
border-left: solid 0.4em gray;
/* background: #333; */
color: white;
}
/* ^ */
small {
/*
color: silver;
font-size: 50%;
*/
}
.footnote p {
color: silver;
margin: 0;
}
/* Popup footnotes */
.footnote p {
display: none;
}
.footnote p:target {
display: block;
overflow: auto;
position: fixed;
left: auto;
bottom: 0;
right: 0;
max-width: 50%;
border: solid 0.3em white;
-moz-border-radius: 0.5em;
background: black;
padding: 0.2em;
}
/* { */
.admonition * {
background: transparent;
color: white;
}
.admonition dl
{
display: table;
margin: 0;
padding: 0;
background: #333;
border: dotted black 0.3em;
width: 90%
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.admonition dt
{
display: table-cell;
vertical-align: center;
border-right: solid silver 0.4em;
font-weight: bold;
font-size: 115%;
font-family: Serif;
background: gray;
width: 0;
text-shadow: black 0.15em 0.15em 0.15em;
}
.admonition dd
{
padding-left: 0.4em;
display: table-cell;
width: 100%;
text-align: justify;
}
.admonition table
{
margin: 0;
padding: 0;
background: #333;
border: dotted black 0.3em;
width: 90%
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.admonition td {
width: 100%;
text-align: justify;
}
.admonition td:first-child:contains("Warning:") {
background: #900;
}
.admonition td:first-child:contains("Caution:") {
background: #960;
}
.admonition td:first-child:contains("Note:") {
background: #690;
}
.admonition td:first-child {
border-right: solid silver 0.4em;
font-weight: bold;
font-size: 115%;
font-family: Serif;
background: gray;
width: 0;
text-shadow: black 0.15em 0.15em 0.15em;
}
/* #(b) */
/* b { color: olive; } */
/* #(c) */
tt {
color: #7f0;
}
/* ! keywords ... */
p em {
color: gray;
font-style: normal;
font-weight: bold;
}
/* *, + */
/* Bullet, numbe */
li {
color: #f0f;
}
/* Text */
li span, li p {
color: white;
}
li p {
color: red;
display: block;
}
ul {
list-style-type: square;
}
dl {
margin-left: 2%;
margin-top: 1em;
}
/* = */
dt {
background: #181818;
padding: 0.2em;
font-variant: small-caps;
font-weight: bold;
color: #f0f;
}
dd {
color: white;
text-align: justify;
margin-right: 5%;
}
dt a:link, dt a:visited {
color: #f0f;
}
dt a:link:hover {
color: silver;
text-decoration: underline;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

View File

@ -0,0 +1,998 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="512"
height="512"
id="svg2"
version="1.1"
inkscape:version="0.48.1 r9760"
sodipodi:docname="icon-large.svg"
inkscape:export-filename="/home/male/prog/non-sequencer/doc/just-text.png"
inkscape:export-xdpi="141.06583"
inkscape:export-ydpi="141.06583"
style="enable-background:new">
<defs
id="defs4">
<linearGradient
inkscape:collect="always"
id="linearGradient6483">
<stop
style="stop-color:#ffa903;stop-opacity:1"
offset="0"
id="stop6485" />
<stop
style="stop-color:#fea700;stop-opacity:0;"
offset="1"
id="stop6487" />
</linearGradient>
<linearGradient
id="linearGradient5418">
<stop
style="stop-color:#669a18;stop-opacity:1;"
offset="0"
id="stop5420" />
<stop
style="stop-color:#654d4d;stop-opacity:0;"
offset="1"
id="stop5422" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient5021">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5023" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop5025" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient5013">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5015" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop5017" />
</linearGradient>
<linearGradient
id="linearGradient4861">
<stop
style="stop-color:#a50000;stop-opacity:1;"
offset="0"
id="stop4863" />
<stop
style="stop-color:#a50000;stop-opacity:0;"
offset="1"
id="stop4865" />
</linearGradient>
<linearGradient
id="linearGradient5209"
osb:paint="solid">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5211" />
</linearGradient>
<filter
inkscape:collect="always"
id="filter5252"
x="-0.051939286"
width="1.1038786"
y="-0.80208468"
height="2.6041694"
color-interpolation-filters="sRGB">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="5.3552102"
id="feGaussianBlur5254" />
</filter>
<filter
id="filter6205"
inkscape:label="Black hole"
inkscape:menu="Morphology"
inkscape:menu-tooltip="Creates a black light inside and outside"
height="1.5"
width="1.5"
y="-0.25"
x="-0.25"
color-interpolation-filters="sRGB">
<feGaussianBlur
id="feGaussianBlur6207"
stdDeviation="5"
in="SourceAlpha"
result="result1" />
<feComposite
id="feComposite6209"
in2="result1"
operator="arithmetic"
k2="3.2"
k1="-1"
k4="-2"
result="result3"
k3="0" />
<feColorMatrix
id="feColorMatrix6211"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 10 0 "
result="result2" />
<feComposite
id="feComposite6213"
in2="result2"
result="fbSourceGraphic"
in="SourceGraphic"
operator="out" />
<feBlend
id="feBlend6215"
in2="fbSourceGraphic"
mode="multiply"
in="result1"
result="result91" />
<feBlend
id="feBlend6217"
in2="result91"
mode="screen"
in="fbSourceGraphic" />
</filter>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient6759-3"
id="radialGradient6767-0"
cx="103.21429"
cy="213.43361"
fx="103.21429"
fy="213.43361"
r="8.2009745"
gradientTransform="matrix(1,0,0,1.0160278,0,-3.4208767)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient6759-3">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop6761-5" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop6763-9" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient6759-2"
id="radialGradient6767-9"
cx="103.21429"
cy="213.43361"
fx="103.21429"
fy="213.43361"
r="8.2009745"
gradientTransform="matrix(1,0,0,1.0160278,0,-3.4208767)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient6759-2">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop6761-9" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop6763-0" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient6759-2-4"
id="radialGradient6846-0"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0160278,0,-3.4208767)"
cx="103.21429"
cy="213.43361"
fx="103.21429"
fy="213.43361"
r="8.2009745" />
<linearGradient
inkscape:collect="always"
id="linearGradient6759-2-4">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop6761-9-1" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop6763-0-7" />
</linearGradient>
<filter
id="filter4094"
inkscape:label="Black hole"
inkscape:menu="Morphology"
inkscape:menu-tooltip="Creates a black light inside and outside"
height="1.5"
width="1.5"
y="-0.25"
x="-0.25"
color-interpolation-filters="sRGB">
<feGaussianBlur
id="feGaussianBlur4096"
stdDeviation="5"
in="SourceAlpha"
result="result1" />
<feComposite
id="feComposite4098"
in2="result1"
operator="arithmetic"
k2="3.2"
k1="-1"
k4="-2"
result="result3"
k3="0" />
<feColorMatrix
id="feColorMatrix4100"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 10 0 "
result="result2" />
<feComposite
id="feComposite4102"
in2="result2"
result="fbSourceGraphic"
in="SourceGraphic"
operator="out" />
<feBlend
id="feBlend4104"
in2="fbSourceGraphic"
mode="multiply"
in="result1"
result="result91" />
<feBlend
id="feBlend4106"
in2="result91"
mode="screen"
in="fbSourceGraphic" />
</filter>
<filter
id="filter4108"
inkscape:label="Black hole"
inkscape:menu="Morphology"
inkscape:menu-tooltip="Creates a black light inside and outside"
height="1.5"
width="1.5"
y="-0.25"
x="-0.25"
color-interpolation-filters="sRGB">
<feGaussianBlur
id="feGaussianBlur4110"
stdDeviation="5"
in="SourceAlpha"
result="result1" />
<feComposite
id="feComposite4112"
in2="result1"
operator="arithmetic"
k2="3.2"
k1="-1"
k4="-2"
result="result3"
k3="0" />
<feColorMatrix
id="feColorMatrix4114"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 10 0 "
result="result2" />
<feComposite
id="feComposite4116"
in2="result2"
result="fbSourceGraphic"
in="SourceGraphic"
operator="out" />
<feBlend
id="feBlend4118"
in2="fbSourceGraphic"
mode="multiply"
in="result1"
result="result91" />
<feBlend
id="feBlend4120"
in2="result91"
mode="screen"
in="fbSourceGraphic" />
</filter>
<filter
id="filter2996"
inkscape:label="Black hole"
inkscape:menu="Morphology"
inkscape:menu-tooltip="Creates a black light inside and outside"
height="1.5"
width="1.5"
y="-0.25"
x="-0.25"
color-interpolation-filters="sRGB">
<feGaussianBlur
id="feGaussianBlur2998"
stdDeviation="5"
in="SourceAlpha"
result="result1" />
<feComposite
id="feComposite3000"
in2="result1"
operator="arithmetic"
k2="3.2"
k1="-1"
k4="-2"
result="result3"
k3="0" />
<feColorMatrix
id="feColorMatrix3002"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 10 0 "
result="result2" />
<feComposite
id="feComposite3004"
in2="result2"
result="fbSourceGraphic"
in="SourceGraphic"
operator="out" />
<feBlend
id="feBlend3006"
in2="fbSourceGraphic"
mode="multiply"
in="result1"
result="result91" />
<feBlend
id="feBlend3008"
in2="result91"
mode="screen"
in="fbSourceGraphic" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4523-5"
id="linearGradient4533-8"
x1="40.691368"
y1="-5.0138588"
x2="115.70895"
y2="122.54021"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-1.4285714,-0.26785715)" />
<linearGradient
inkscape:collect="always"
id="linearGradient4523-5">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4525-8" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop4527-2" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4861-0"
id="linearGradient4867-9"
x1="-277.44415"
y1="-50.038612"
x2="36.835873"
y2="319.67722"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient4861-0">
<stop
style="stop-color:#d90000;stop-opacity:1;"
offset="0"
id="stop4863-4" />
<stop
style="stop-color:#a50000;stop-opacity:0;"
offset="1"
id="stop4865-0" />
</linearGradient>
<filter
inkscape:collect="always"
id="filter4948"
color-interpolation-filters="sRGB">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="4.5318938"
id="feGaussianBlur4950" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5013"
id="linearGradient5019"
x1="7.3245215"
y1="-54.502781"
x2="135.65985"
y2="191.63652"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5920888,0,0,1.59211,-0.93895132,-193.95339)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5021"
id="linearGradient5027"
x1="65.545662"
y1="-43.027843"
x2="294.41019"
y2="289.31235"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5920888,0,0,1.59211,-0.93895132,-193.95339)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5013-1"
id="linearGradient5019-5"
x1="26.703053"
y1="29.001957"
x2="170.00505"
y2="221.94109"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
id="linearGradient5013-1">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5015-6" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop5017-1" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6116"
id="linearGradient5285"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30012437,0,0,0.30012437,-202.06109,894.75914)"
x1="432.34528"
y1="197.17313"
x2="432.34528"
y2="544.38947" />
<linearGradient
id="linearGradient6116">
<stop
style="stop-color:#a00000;stop-opacity:1;"
offset="0"
id="stop6118" />
<stop
style="stop-color:#00ff00;stop-opacity:1;"
offset="1"
id="stop6120" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6116"
id="linearGradient5287"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30012437,0,0,0.30012437,-202.06109,894.75914)"
x1="432.34528"
y1="197.17313"
x2="432.34528"
y2="544.38947" />
<linearGradient
id="linearGradient5170">
<stop
style="stop-color:#a00000;stop-opacity:1;"
offset="0"
id="stop5172" />
<stop
style="stop-color:#00ff00;stop-opacity:1;"
offset="1"
id="stop5174" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6116"
id="linearGradient5289"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30012437,0,0,0.30012437,-202.06109,894.75914)"
x1="432.34528"
y1="197.17313"
x2="432.34528"
y2="544.38947" />
<linearGradient
id="linearGradient5177">
<stop
style="stop-color:#a00000;stop-opacity:1;"
offset="0"
id="stop5179" />
<stop
style="stop-color:#00ff00;stop-opacity:1;"
offset="1"
id="stop5181" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6116"
id="linearGradient5291"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30012437,0,0,0.30012437,-202.06109,894.75914)"
x1="432.34528"
y1="197.17313"
x2="432.34528"
y2="544.38947" />
<linearGradient
id="linearGradient5184">
<stop
style="stop-color:#a00000;stop-opacity:1;"
offset="0"
id="stop5186" />
<stop
style="stop-color:#00ff00;stop-opacity:1;"
offset="1"
id="stop5188" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6116"
id="linearGradient5293"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30012437,0,0,0.30012437,-202.06109,894.75914)"
x1="432.34528"
y1="197.17313"
x2="432.34528"
y2="544.38947" />
<linearGradient
id="linearGradient5191">
<stop
style="stop-color:#a00000;stop-opacity:1;"
offset="0"
id="stop5193" />
<stop
style="stop-color:#00ff00;stop-opacity:1;"
offset="1"
id="stop5195" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6116"
id="linearGradient5295"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30012437,0,0,0.30012437,-202.06109,894.75914)"
x1="432.34528"
y1="197.17313"
x2="432.34528"
y2="544.38947" />
<linearGradient
id="linearGradient5198">
<stop
style="stop-color:#a00000;stop-opacity:1;"
offset="0"
id="stop5200" />
<stop
style="stop-color:#00ff00;stop-opacity:1;"
offset="1"
id="stop5202" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6116"
id="linearGradient5297"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30012437,0,0,0.30012437,-202.06109,894.75914)"
x1="432.34528"
y1="197.17313"
x2="432.34528"
y2="544.38947" />
<linearGradient
id="linearGradient5205">
<stop
style="stop-color:#a00000;stop-opacity:1;"
offset="0"
id="stop5207" />
<stop
style="stop-color:#00ff00;stop-opacity:1;"
offset="1"
id="stop5209" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6116"
id="linearGradient5299"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30012437,0,0,0.30012437,-202.06109,894.75914)"
x1="432.34528"
y1="197.17313"
x2="432.34528"
y2="544.38947" />
<linearGradient
id="linearGradient5212">
<stop
style="stop-color:#a00000;stop-opacity:1;"
offset="0"
id="stop5214" />
<stop
style="stop-color:#00ff00;stop-opacity:1;"
offset="1"
id="stop5216" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6116"
id="linearGradient5301"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30012437,0,0,0.30012437,-202.06109,894.75914)"
x1="432.34528"
y1="197.17313"
x2="432.34528"
y2="544.38947" />
<linearGradient
id="linearGradient5219">
<stop
style="stop-color:#a00000;stop-opacity:1;"
offset="0"
id="stop5221" />
<stop
style="stop-color:#00ff00;stop-opacity:1;"
offset="1"
id="stop5223" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6116"
id="linearGradient5303"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30012437,0,0,0.30012437,-202.06109,894.75914)"
x1="432.34528"
y1="197.17313"
x2="432.34528"
y2="544.38947" />
<linearGradient
id="linearGradient5226">
<stop
style="stop-color:#a00000;stop-opacity:1;"
offset="0"
id="stop5228" />
<stop
style="stop-color:#00ff00;stop-opacity:1;"
offset="1"
id="stop5230" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6116"
id="linearGradient5305"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30012437,0,0,0.30012437,-202.06109,894.75914)"
x1="432.34528"
y1="197.17313"
x2="432.34528"
y2="544.38947" />
<linearGradient
id="linearGradient5233">
<stop
style="stop-color:#a00000;stop-opacity:1;"
offset="0"
id="stop5235" />
<stop
style="stop-color:#00ff00;stop-opacity:1;"
offset="1"
id="stop5237" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6116"
id="linearGradient5307"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30012437,0,0,0.30012437,-202.06109,894.75914)"
x1="432.34528"
y1="197.17313"
x2="432.34528"
y2="544.38947" />
<linearGradient
id="linearGradient5240">
<stop
style="stop-color:#a00000;stop-opacity:1;"
offset="0"
id="stop5242" />
<stop
style="stop-color:#00ff00;stop-opacity:1;"
offset="1"
id="stop5244" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6483"
id="linearGradient6489"
x1="-156.01903"
y1="74.887634"
x2="37.546711"
y2="312.74481"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5920888,0,0,1.59211,183.17146,-157.30856)" />
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter3998">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="4.0022328"
id="feGaussianBlur4000" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.3416928"
inkscape:cx="342.78023"
inkscape:cy="263.52795"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1032"
inkscape:window-x="-2"
inkscape:window-y="25"
inkscape:window-maximized="1"
showguides="false"
inkscape:guide-bbox="true"
inkscape:snap-global="false">
<sodipodi:guide
orientation="1,0"
position="46.428571,183.92857"
id="guide6942" />
<sodipodi:guide
orientation="0,1"
position="96.843761,183.49949"
id="guide6944" />
<inkscape:grid
type="xygrid"
id="grid6946"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
<sodipodi:guide
orientation="1,0"
position="42.385351,259.70081"
id="guide7007" />
<sodipodi:guide
orientation="1,0"
position="20.357143,157.14286"
id="guide7009" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Box"
inkscape:groupmode="layer"
id="layer1"
transform="translate(310.95069,254.88855)"
style="display:inline">
<rect
style="opacity:0.98999999;fill:#ffffff;fill-opacity:0.44769874;stroke:#000000;stroke-width:0.4779852;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:0.73127753;stroke-dasharray:1.91194092, 1.91194092;stroke-dashoffset:0;filter:url(#filter5252)"
id="rect5223"
width="247.45247"
height="16.023874"
x="169.8452"
y="186.4931"
rx="12.85704"
ry="12.03072"
transform="matrix(1.3918993,0,0,0.5671588,-459.41639,-330.03016)" />
<rect
style="fill:#000000;fill-opacity:1;stroke:#363434;stroke-width:1.03784263;stroke-miterlimit:4;stroke-opacity:0.72246692;stroke-dasharray:none;display:inline;filter:url(#filter4948);enable-background:new"
id="rect3597-9"
width="312.62057"
height="303.76965"
x="-307.06512"
y="-56.173706"
rx="84.17984"
ry="78.412369"
transform="matrix(1.5920545,0,0,1.6189277,183.16629,-155.1575)" />
<rect
style="fill:url(#linearGradient6489);fill-opacity:1;stroke:#000000;stroke-width:1.66618872;stroke-miterlimit:4;stroke-opacity:0.44052866;stroke-dasharray:none;display:inline;enable-background:new"
id="rect3597"
width="497.70898"
height="491.78116"
x="-308.39767"
y="-252.12758"
rx="134.01889"
ry="126.94395" />
<text
xml:space="preserve"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none"
x="-161.42857"
y="44.714287"
id="text3313"
sodipodi:linespacing="100%"
transform="translate(-310.95069,-61.88855)"><tspan
sodipodi:role="line"
id="tspan3315"
x="-161.42857"
y="44.714287" /></text>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Graphic"
style="display:inline"
transform="translate(0,193)" />
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="Shadow"
style="opacity:0.96153846;display:inline"
transform="translate(0,193)">
<g
transform="matrix(1.5920888,0,0,1.59211,5.8842913,-195.09415)"
style="display:inline"
id="g4707">
<path
inkscape:connector-curvature="0"
id="path4133-5"
d="M 100.40305,75.141103 C 94.747792,60.562595 86.906602,50.296813 76.879444,44.343729 l 0,26.606016 c 7.08077,4.981149 12.545844,12.452694 16.395236,22.414657 2.993834,7.653878 4.490786,15.611378 4.490874,23.872518 -8.8e-5,8.62576 -1.49704,16.70475 -4.490874,24.23699 -2.946464,7.41085 -6.938344,13.54602 -11.975646,18.40553 L 43.30485,44.343729 C 34.085477,49.81086 26.624464,59.165476 20.921787,72.407609 15.219093,85.528488 12.36775,100.47158 12.36775,117.23692 c 0,15.42912 2.471164,29.46104 7.413499,42.09582 5.702678,14.57866 13.543871,24.84443 23.523601,30.79738 l 0,-26.60603 C 36.223985,158.5431 30.758911,151.1323 26.909613,141.29168 c -2.993924,-7.65373 -4.490879,-15.67198 -4.490869,-24.05476 -10e-6,-8.26114 1.473183,-16.1579 4.419585,-23.690285 2.993896,-7.653681 7.009537,-13.910341 12.046936,-18.769998 L 76.879444,190.13012 c 10.027158,-5.95295 17.868348,-16.21872 23.523606,-30.79738 4.94224,-12.63478 7.4134,-26.6667 7.4135,-42.09582 -1e-4,-15.42897 -2.47126,-29.460893 -7.4135,-42.095817"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.62810147;stroke-opacity:1;display:inline;filter:url(#filter3998)" />
<path
inkscape:connector-curvature="0"
id="path4680"
d="m 157.375,44.34375 c -12.54595,1.47e-4 -23.1322,7.032454 -31.78125,21.125 C 116.94466,79.561544 112.625,96.840003 112.625,117.25 c 0,14.45721 2.31155,27.62541 6.96875,39.53125 4.08692,10.44804 9.47185,18.64082 16.125,24.59375 6.70064,5.83145 13.91006,8.75 21.65625,8.75 7.79362,0 15.00306,-2.91855 21.65625,-8.75 6.7006,-5.95293 12.1005,-14.14571 16.1875,-24.59375 4.65712,-11.90584 6.99991,-25.07404 7,-39.53125 -9e-5,-14.45706 -2.34288,-27.656512 -7,-39.5625 -4.087,-10.447902 -9.4869,-18.574664 -16.1875,-24.40625 -6.65319,-5.952801 -13.86263,-8.937353 -21.65625,-8.9375 z m 0,24.0625 c 6.463,1.22e-4 12.47107,2.355812 18.03125,7.09375 5.56006,4.738169 9.94093,11.172864 13.125,19.3125 2.80375,7.16791 4.18743,14.66231 4.1875,22.4375 -7e-5,13.24233 -3.48303,24.71845 -10.46875,34.4375 -6.98586,9.59763 -15.27553,14.37501 -24.875,14.375 -6.41557,1e-5 -12.42364,-2.35567 -18.03125,-7.09375 -5.56015,-4.73803 -9.92604,-11.17272 -13.0625,-19.3125 -2.85136,-7.16777 -4.25002,-14.63091 -4.25,-22.40625 -2e-5,-7.77519 1.39864,-15.26959 4.25,-22.4375 3.13646,-8.139636 7.50235,-14.574331 13.0625,-19.3125 5.60761,-4.737938 11.61568,-7.093628 18.03125,-7.09375 z"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.62810147;stroke-opacity:1;display:inline;filter:url(#filter3998)" />
<path
inkscape:connector-curvature="0"
id="path4137-5"
d="M 294.76235,75.141103 C 289.1071,60.562595 281.26591,50.296813 271.23875,44.343729 l 0,26.606016 c 7.08077,4.981149 12.54585,12.452694 16.39524,22.414657 2.99383,7.653878 4.49078,15.611378 4.49087,23.872518 -9e-5,8.62576 -1.49704,16.70475 -4.49087,24.23699 -2.94647,7.41085 -6.93835,13.54602 -11.97566,18.40553 L 237.66415,44.343729 c -9.21936,5.467131 -16.68038,14.821747 -22.38306,28.06388 -5.70269,13.120879 -8.55404,28.063971 -8.55404,44.829311 0,15.42912 2.47117,29.46104 7.4135,42.09582 5.70268,14.57866 13.54387,24.84443 23.5236,30.79738 l 0,-26.60603 c -7.08086,-4.98099 -12.54594,-12.39179 -16.39523,-22.23241 -2.99393,-7.65373 -4.49088,-15.67198 -4.49087,-24.05476 -1e-5,-8.26114 1.47318,-16.1579 4.41958,-23.690285 2.9939,-7.653681 7.00954,-13.910341 12.04694,-18.769998 l 37.99418,115.353483 c 10.02716,-5.95295 17.86835,-16.21872 23.5236,-30.79738 4.94224,-12.63478 7.4134,-26.6667 7.4135,-42.09582 -1e-4,-15.42897 -2.47126,-29.460893 -7.4135,-42.095817"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.62810147;stroke-opacity:1;display:inline;filter:url(#filter3998)" />
<path
inkscape:connector-curvature="0"
id="path4140-7"
d="m 38.496485,265.43345 -18.274424,0 c -2.963423,0 -4.445132,-2.27906 -4.44513,-6.83716 l 0,-6.21559 c -2e-6,-1.49172 0.301827,-2.65196 0.90549,-3.48073 0.603656,-0.82873 1.317071,-1.2431 2.140247,-1.24311 0.823167,1e-5 1.509143,0.41438 2.057931,1.24311 0.603652,0.74589 0.905482,1.90613 0.905489,3.48073 -7e-6,2.07188 0.164627,3.35643 0.493904,3.85367 0.32926,0.49725 1.152431,0.74588 2.469516,0.74587 l 3.210372,0 c 1.31706,1e-5 2.140232,-0.24862 2.469517,-0.74587 0.38413,-0.58011 0.576203,-1.86467 0.576221,-3.85367 l 0,-4.35091 c -1.8e-5,-2.32047 -0.274408,-3.64647 -0.823173,-3.97799 -0.548797,-0.41434 -1.289651,-0.62153 -2.222565,-0.62155 l -7.820136,0 c -2.908545,2e-5 -4.362815,-2.23759 -4.362813,-6.71284 l 0,-16.28485 c -2e-6,-2.23756 0.411584,-3.93649 1.234759,-5.09679 0.823168,-1.16019 1.92073,-1.74031 3.292689,-1.74036 l 18.192106,0 c 1.317049,5e-5 2.387173,0.62161 3.210372,1.86468 0.878021,1.16029 1.317046,2.81779 1.317075,4.97247 l 0,6.58853 c -2.9e-5,1.57466 -0.301858,2.77634 -0.905489,3.60504 -0.54881,0.74591 -1.262225,1.11884 -2.140248,1.11881 -0.823197,3e-5 -1.536612,-0.41434 -2.140248,-1.24312 -0.603682,-0.82871 -0.905512,-1.98895 -0.905489,-3.48073 -2.3e-5,-2.32045 -0.164658,-3.72932 -0.493904,-4.2266 -0.32929,-0.49721 -1.152462,-0.74584 -2.469517,-0.74587 l -9.219529,0 c -1.262206,3e-5 -2.085378,0.2901 -2.469516,0.87017 -0.329277,0.4973 -0.493911,1.74041 -0.493904,3.72937 l 0,3.72935 c -7e-6,2.07189 0.164627,3.35645 0.493904,3.85367 0.32926,0.49727 1.152431,0.7459 2.469516,0.74587 l 13.746977,0 c 3.018271,3e-5 4.527418,2.27907 4.527447,6.83715 l 0,16.78209 c -2.9e-5,4.5581 -1.509176,6.83716 -4.527447,6.83716"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.62810147;stroke-opacity:1;filter:url(#filter3998)" />
<path
inkscape:connector-curvature="0"
id="path4672"
d="m 50.78125,213.59375 c -2.963423,5e-5 -4.468752,2.28571 -4.46875,6.84375 l 0,38.15625 c -2e-6,4.5581 1.505327,6.84375 4.46875,6.84375 l 22.28125,0 c 2.963388,0 4.468717,-2.28565 4.46875,-6.84375 l 0,-5.59375 c -3.3e-5,-1.49172 -0.302623,-2.59785 -0.90625,-3.34375 -0.548812,-0.82872 -1.239359,-1.24998 -2.0625,-1.25 -0.823202,2e-5 -1.552619,0.42128 -2.15625,1.25 -0.548809,0.7459 -0.812527,1.80991 -0.8125,3.21875 l 0,0.875 c -2.7e-5,2.15474 -0.605208,3.21876 -1.8125,3.21875 l -8.625,0 c -1.207335,10e-6 -1.812515,-1.06401 -1.8125,-3.21875 l 0,-9.6875 c -1.5e-5,-2.07184 0.605165,-3.12497 1.8125,-3.125 l 11.90625,0 c 2.963388,3e-5 4.468717,-2.28562 4.46875,-6.84375 l 0,-13.65625 c -3.3e-5,-4.55804 -1.505362,-6.8437 -4.46875,-6.84375 l -22.28125,0 z m 11.59375,8.46875 5.9375,0 c 0.878026,3e-5 1.576194,0.47431 2.125,1.46875 0.603634,0.91166 0.906223,2.00693 0.90625,3.25 -2.7e-5,1.32603 -0.302616,2.43216 -0.90625,3.34375 -0.603685,0.91165 -1.301852,1.37504 -2.125,1.375 l -5.9375,0 c -0.932945,4e-5 -1.669985,-0.46335 -2.21875,-1.375 -0.548797,-0.91159 -0.812515,-2.01772 -0.8125,-3.34375 -1.5e-5,-1.24307 0.263703,-2.33834 0.8125,-3.25 0.603643,-0.99444 1.340683,-1.46872 2.21875,-1.46875 z"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.62810147;stroke-opacity:1;filter:url(#filter3998)" />
<path
inkscape:connector-curvature="0"
id="path4144-4"
d="m 85.65625,213.59375 c -2.963422,5e-5 -4.437501,2.28571 -4.4375,6.84375 l 0,38.15625 c -10e-7,4.5581 1.474078,6.84375 4.4375,6.84375 l 16.875,0 c 1.2073,0 1.9832,0.25275 2.3125,0.75 0.32924,0.49725 0.49997,1.77189 0.5,3.84375 l 0,22.625 c -3e-5,4.47519 1.47406,6.71872 4.4375,6.71875 l 3.03125,0 c 3.01826,-3e-5 4.5312,-2.24356 4.53125,-6.71875 l 0,-24.125 c -5e-5,-2.07187 -0.17077,-3.47288 -0.5,-4.21875 -3.3476,-5.30396 -5.0854,-8.23236 -5.25,-8.8125 -0.16465,-0.66298 -0.25004,-2.82225 -0.25,-6.46875 l 0,-28.59375 c -4e-5,-2.15468 -0.43448,-3.80846 -1.3125,-4.96875 -0.8232,-1.24307 -1.94058,-1.87495 -3.3125,-1.875 l -21.0625,0 z m 4.53125,8.46875 12.09375,0 c 1.59144,3e-5 2.49922,0.34793 2.71875,1.09375 0.21949,0.74591 0.34372,1.92541 0.34375,3.5 l 0,25.71875 c -3e-5,1.989 -0.20963,3.26364 -0.59375,3.84375 -0.32929,0.49725 -1.1517,0.75001 -2.46875,0.75 l -12.09375,0 c -1.317084,10e-6 -2.139491,-0.25275 -2.46875,-0.75 -0.329275,-0.49724 -0.5,-1.77187 -0.5,-3.84375 l 0,-25.71875 c 0,-1.98896 0.170725,-3.2527 0.5,-3.75 0.384138,-0.58007 1.206545,-0.84372 2.46875,-0.84375 z"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.62810147;stroke-opacity:1;filter:url(#filter3998)" />
<path
inkscape:connector-curvature="0"
id="path4146-3"
d="m 131.97798,252.3807 c -1e-5,2.07188 0.16462,3.35643 0.49391,3.85367 0.32925,0.49725 1.15242,0.74588 2.46951,0.74587 l 3.21037,0 c 1.31706,1e-5 2.14023,-0.24862 2.46952,-0.74587 0.38413,-0.58011 0.5762,-1.86467 0.57622,-3.85367 l 0,-33.56419 c -2e-5,-1.65745 0.3018,-2.94199 0.90549,-3.85367 0.60363,-0.91156 1.31705,-1.36738 2.14025,-1.36743 0.82315,5e-5 1.50912,0.45587 2.05793,1.36743 0.60363,0.8288 0.90546,2.03048 0.90549,3.60504 l 0,40.02841 c -3e-5,4.5581 -1.50918,6.83716 -4.52745,6.83716 l -18.1921,0 c -3.01831,0 -4.52746,-2.27906 -4.52746,-6.83716 l 0,-40.02841 c 0,-1.57456 0.27439,-2.77624 0.82318,-3.60504 0.60366,-0.91156 1.34451,-1.36738 2.22256,-1.36743 0.87805,5e-5 1.59147,0.41443 2.14025,1.24312 0.54878,0.74592 0.82317,1.9476 0.82317,3.60504 l 0,8.57752 c 0,2.0719 0.21951,3.5222 0.65855,4.35091 l 2.14024,3.23211 c 1.53657,2.32052 2.44206,3.85369 2.71647,4.59954 0.32926,0.7459 0.49389,2.07189 0.4939,3.97798 l 0,9.19907"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.62810147;stroke-opacity:1;filter:url(#filter3998)" />
<path
inkscape:connector-curvature="0"
id="path4662"
d="m 155.59375,213.59375 c -2.96343,5e-5 -4.4375,2.28571 -4.4375,6.84375 l 0,38.15625 c 0,4.5581 1.47407,6.84375 4.4375,6.84375 l 22.3125,0 c 2.96339,0 4.43746,-2.28565 4.4375,-6.84375 l 0,-5.59375 c -4e-5,-1.49172 -0.30262,-2.59785 -0.90625,-3.34375 -0.54881,-0.82872 -1.23936,-1.24998 -2.0625,-1.25 -0.8232,2e-5 -1.52137,0.42128 -2.125,1.25 -0.54881,0.7459 -0.84378,1.80991 -0.84375,3.21875 l 0,0.875 c -3e-5,2.15474 -0.57395,3.21876 -1.78125,3.21875 l -8.65625,0 c -1.20733,10e-6 -1.81251,-1.06401 -1.8125,-3.21875 l 0,-9.6875 c -1e-5,-2.07184 0.60517,-3.12497 1.8125,-3.125 l 11.9375,0 c 2.96339,3e-5 4.43746,-2.28562 4.4375,-6.84375 l 0,-13.65625 c -4e-5,-4.55804 -1.47411,-6.8437 -4.4375,-6.84375 l -22.3125,0 z m 11.59375,8.46875 5.9375,0 c 0.87803,3e-5 1.60744,0.47431 2.15625,1.46875 0.60363,0.91166 0.90622,2.00693 0.90625,3.25 -3e-5,1.32603 -0.30262,2.43216 -0.90625,3.34375 -0.60369,0.91165 -1.3331,1.37504 -2.15625,1.375 l -5.9375,0 c -0.93295,4e-5 -1.66998,-0.46335 -2.21875,-1.375 -0.54879,-0.91159 -0.81251,-2.01772 -0.8125,-3.34375 -1e-5,-1.24307 0.26371,-2.33834 0.8125,-3.25 0.60365,-0.99444 1.34068,-1.46872 2.21875,-1.46875 z"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.62810147;stroke-opacity:1;filter:url(#filter3998)" />
<path
inkscape:connector-curvature="0"
id="path4150-7"
d="m 193.5294,265.43345 -3.04573,0 c -2.96343,0 -4.44514,-2.27906 -4.44514,-6.83716 l 0,-38.16373 c 0,-2.23756 0.41159,-3.93649 1.23476,-5.09679 0.82317,-1.16019 1.92073,-1.74031 3.29269,-1.74036 l 18.76833,0 c 2.96339,5e-5 4.4451,2.27911 4.44513,6.83715 l 0,40.0284 c -3e-5,1.57463 -0.30186,2.81774 -0.90549,3.72937 -0.54881,0.82874 -1.23479,1.24312 -2.05793,1.24312 -2.03052,0 -3.04576,-1.74037 -3.04573,-5.2211 l 0,-33.56419 c -3e-5,-2.07183 -0.16467,-3.35639 -0.49391,-3.85367 -0.32929,-0.49721 -1.15246,-0.74584 -2.46951,-0.74587 l -9.79576,0 c -1.2622,3e-5 -2.08537,0.2901 -2.46951,0.87017 -0.32928,0.4973 -0.49391,1.74041 -0.49391,3.72937 0,1.98901 0.0823,3.23213 0.24695,3.72935 0.16463,0.49728 1.01524,1.94758 2.55184,4.35091 1.59145,2.32052 2.52438,3.81226 2.79879,4.47523 0.27437,0.58014 0.41157,1.74039 0.41158,3.48072 l 0,15.91192 c -1e-5,4.5581 -1.50916,6.83716 -4.52745,6.83716"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.62810147;stroke-opacity:1;filter:url(#filter3998)" />
<path
inkscape:connector-curvature="0"
id="path4152-8"
d="m 244.47605,226.64816 c -3e-5,1.24315 -0.30185,2.32052 -0.90549,3.23211 -0.54881,0.82877 -1.17991,1.24314 -1.8933,1.24311 l -6.58537,0 c -0.65856,3e-5 -1.28966,-0.41434 -1.8933,-1.24311 -0.5488,-0.91159 -0.82319,-1.98896 -0.82317,-3.23211 l 0,-1.36743 c -2e-5,-2.1547 -0.60367,-3.23208 -1.81098,-3.23211 l -5.51526,0 c -1.20732,3e-5 -1.81098,1.07741 -1.81097,3.23211 l 0,28.4674 c -1e-5,2.15474 0.60365,3.23212 1.81097,3.23211 l 9.30185,0 c 1.97559,1e-5 3.12803,-0.16574 3.45732,-0.49725 0.38413,-0.41436 0.5762,-1.61604 0.57623,-3.60505 -3e-5,-1.40884 0.27436,-2.48621 0.82317,-3.23211 0.60363,-0.82872 1.34449,-1.24309 2.22257,-1.24311 0.82314,2e-5 1.53656,0.41439 2.14024,1.24311 0.60364,0.82877 0.90546,1.98901 0.90549,3.48074 l 0,5.46972 c -3e-5,4.5581 -1.50917,6.83716 -4.52745,6.83716 l -18.27442,0 c -2.96343,0 -4.44513,-2.27906 -4.44513,-6.83716 l 0,-38.16373 c 0,-4.55804 1.4817,-6.8371 4.44513,-6.83715 l 18.27442,0 c 1.31705,5e-5 2.38717,0.62161 3.21038,1.86468 0.87802,1.16029 1.31704,2.81779 1.31707,4.97247 l 0,6.2156"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.62810147;stroke-opacity:1;filter:url(#filter3998)" />
<path
inkscape:connector-curvature="0"
id="path4654"
d="m 252.375,213.59375 c -2.96342,5e-5 -4.4375,2.28571 -4.4375,6.84375 l 0,38.15625 c 0,4.5581 1.47408,6.84375 4.4375,6.84375 l 22.3125,0 c 2.96339,0 4.43747,-2.28565 4.4375,-6.84375 l 0,-5.59375 c -3e-5,-1.49172 -0.30262,-2.59785 -0.90625,-3.34375 -0.54881,-0.82872 -1.20811,-1.24998 -2.03125,-1.25 -0.8232,2e-5 -1.55262,0.42128 -2.15625,1.25 -0.54881,0.7459 -0.81252,1.80991 -0.8125,3.21875 l 0,0.875 c -2e-5,2.15474 -0.60521,3.21876 -1.8125,3.21875 l -8.65625,0 c -1.20733,10e-6 -1.81251,-1.06401 -1.8125,-3.21875 l 0,-9.6875 c -10e-6,-2.07184 0.60517,-3.12497 1.8125,-3.125 l 11.9375,0 c 2.96339,3e-5 4.43747,-2.28562 4.4375,-6.84375 l 0,-13.65625 c -3e-5,-4.55804 -1.47411,-6.8437 -4.4375,-6.84375 l -22.3125,0 z m 11.625,8.46875 5.90625,0 c 0.87803,3e-5 1.60744,0.47431 2.15625,1.46875 0.60363,0.91166 0.90622,2.00693 0.90625,3.25 -3e-5,1.32603 -0.30262,2.43216 -0.90625,3.34375 -0.60369,0.91165 -1.3331,1.37504 -2.15625,1.375 L 264,231.5 c -0.93294,4e-5 -1.66998,-0.46335 -2.21875,-1.375 -0.54879,-0.91159 -0.84376,-2.01772 -0.84375,-3.34375 -10e-6,-1.24307 0.29496,-2.33834 0.84375,-3.25 0.60365,-0.99444 1.34068,-1.46872 2.21875,-1.46875 z"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.62810147;stroke-opacity:1;filter:url(#filter3998)" />
<path
inkscape:connector-curvature="0"
id="path4156-8"
d="m 294.8439,258.59629 c -1e-5,4.5581 -1.50916,6.83716 -4.52744,6.83716 l -3.04574,0 c -2.96342,0 -4.44513,-2.27906 -4.44513,-6.83716 l 0,-38.16373 c 0,-2.23756 0.41159,-3.93649 1.23476,-5.09679 0.82317,-1.16019 1.92073,-1.74031 3.29269,-1.74036 l 14.32319,0 c 1.31706,5e-5 2.38718,0.62161 3.21038,1.86468 0.87802,1.16029 1.31704,2.81779 1.31707,4.97247 l 0,5.96697 c -3e-5,1.40891 -0.30185,2.56915 -0.90548,3.48074 -0.54881,0.82877 -1.23479,1.24314 -2.05794,1.24311 -2.03051,3e-5 -3.04576,-1.57458 -3.04573,-4.72385 -3e-5,-2.07182 -0.16466,-3.31494 -0.49391,-3.72935 -0.32929,-0.41434 -1.17989,-0.62153 -2.55183,-0.62156 l -5.35062,0 c -1.26221,3e-5 -2.08538,0.2901 -2.46952,0.87017 -0.32928,0.4973 -0.49391,1.74041 -0.4939,3.72937 -10e-6,2.07189 0.0823,3.35644 0.24695,3.85366 0.10975,0.33153 0.96036,1.69897 2.55183,4.10229 1.59146,2.40339 2.52438,3.93657 2.79879,4.59954 0.27438,0.58014 0.41157,1.74039 0.41158,3.48072 l 0,15.91192"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.62810147;stroke-opacity:1;filter:url(#filter3998)" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Text"
style="display:inline"
transform="translate(0,193)">
<g
transform="matrix(1.5920888,0,0,1.59211,1.6954939,-192.96898)"
style="stroke:#a7a7a7;stroke-width:0.62810147;stroke-opacity:0.75770928;display:inline"
id="g4693">
<path
inkscape:connector-curvature="0"
id="path4608"
d="m 156.4375,39.4375 c -12.54595,1.47e-4 -23.1322,7.063704 -31.78125,21.15625 -8.64909,14.092794 -13,31.339997 -13,51.75 0,14.45721 2.3428,27.62541 7,39.53125 4.08692,10.44804 9.47185,18.64082 16.125,24.59375 6.70064,5.83145 13.91006,8.75 21.65625,8.75 7.79362,0 15.00306,-2.91855 21.65625,-8.75 6.7006,-5.95293 12.1005,-14.14571 16.1875,-24.59375 4.65712,-11.90584 6.99991,-25.07404 7,-39.53125 -9e-5,-14.457065 -2.34288,-27.656512 -7,-39.5625 -4.087,-10.447902 -9.4869,-18.574664 -16.1875,-24.40625 -6.65319,-5.952801 -13.86263,-8.937353 -21.65625,-8.9375 z m 0,24.0625 c 6.463,1.22e-4 12.47107,2.355812 18.03125,7.09375 5.56006,4.738169 9.94093,11.172864 13.125,19.3125 2.80375,7.167918 4.18743,14.6623 4.1875,22.4375 -7e-5,13.24232 -3.48303,24.71846 -10.46875,34.4375 -6.98586,9.59763 -15.27553,14.40627 -24.875,14.40625 -6.41557,2e-5 -12.42364,-2.38691 -18.03125,-7.125 -5.56015,-4.73802 -9.92604,-11.17271 -13.0625,-19.3125 -2.85136,-7.16777 -4.25002,-14.63091 -4.25,-22.40625 -2e-5,-7.7752 1.39864,-15.269582 4.25,-22.4375 3.13646,-8.139636 7.50235,-14.574331 13.0625,-19.3125 5.60761,-4.737938 11.61568,-7.093628 18.03125,-7.09375 z"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#a7a7a7;stroke-width:0.63336247;stroke-opacity:0.75770928" />
<path
inkscape:connector-curvature="0"
id="path4133"
d="M 99.462616,70.239967 C 93.807362,55.661459 85.966172,45.395677 75.939014,39.442593 l 0,26.606016 c 7.08077,4.981149 12.545844,12.452694 16.395236,22.414657 2.993834,7.653874 4.490786,15.611374 4.490874,23.872524 -8.8e-5,8.62576 -1.49704,16.70474 -4.490874,24.23698 -2.946464,7.41085 -6.938344,13.54602 -11.975646,18.40553 L 42.36442,39.442593 c -9.219373,5.467131 -16.680386,14.821747 -22.383063,28.06388 -5.702694,13.120879 -8.554037,28.06397 -8.554037,44.829317 0,15.42911 2.471164,29.46104 7.413499,42.09582 5.702678,14.57865 13.543871,24.84442 23.523601,30.79737 l 0,-26.60602 c -7.080865,-4.981 -12.545939,-12.3918 -16.395237,-22.23242 -2.993924,-7.65373 -4.490879,-15.67197 -4.490869,-24.05475 -10e-6,-8.26115 1.473183,-16.157906 4.419585,-23.690291 2.993896,-7.653681 7.009537,-13.910341 12.046936,-18.769998 L 75.939014,185.22898 c 10.027158,-5.95295 17.868348,-16.21872 23.523602,-30.79737 4.942244,-12.63478 7.413404,-26.66671 7.413504,-42.09582 -1e-4,-15.428973 -2.47126,-29.460899 -7.413504,-42.095823"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#a7a7a7;stroke-width:0.63336247;stroke-opacity:0.75770928" />
<path
inkscape:connector-curvature="0"
id="path4137"
d="m 293.82192,70.239967 c -5.65525,-14.578508 -13.49644,-24.84429 -23.5236,-30.797374 l 0,26.606016 c 7.08077,4.981149 12.54585,12.452694 16.39524,22.414657 2.99383,7.653874 4.49078,15.611374 4.49087,23.872524 -9e-5,8.62576 -1.49704,16.70474 -4.49087,24.23698 -2.94647,7.41085 -6.93835,13.54602 -11.97566,18.40553 L 236.72372,39.442593 c -9.21936,5.467131 -16.68038,14.821747 -22.38306,28.06388 -5.70269,13.120879 -8.55404,28.06397 -8.55404,44.829317 0,15.42911 2.47117,29.46104 7.4135,42.09582 5.70268,14.57865 13.54387,24.84442 23.5236,30.79737 l 0,-26.60602 c -7.08086,-4.981 -12.54594,-12.3918 -16.39523,-22.23242 -2.99393,-7.65373 -4.49088,-15.67197 -4.49087,-24.05475 -10e-6,-8.26115 1.47318,-16.157906 4.41958,-23.690291 2.9939,-7.653681 7.00954,-13.910341 12.04694,-18.769998 l 37.99418,115.353479 c 10.02716,-5.95295 17.86835,-16.21872 23.5236,-30.79737 4.94224,-12.63478 7.4134,-26.66671 7.4135,-42.09582 -10e-5,-15.428973 -2.47126,-29.460899 -7.4135,-42.095823"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#a7a7a7;stroke-width:0.63336247;stroke-opacity:0.75770928" />
<path
inkscape:connector-curvature="0"
id="path4140"
d="m 37.556055,260.53231 -18.274424,0 c -2.963423,0 -4.445132,-2.27906 -4.44513,-6.83716 l 0,-6.21559 c -2e-6,-1.49172 0.301827,-2.65196 0.90549,-3.48072 0.603656,-0.82874 1.317071,-1.24311 2.140247,-1.24312 0.823167,1e-5 1.509143,0.41438 2.057931,1.24312 0.603652,0.74588 0.905482,1.90612 0.905489,3.48072 -7e-6,2.07188 0.164627,3.35644 0.493904,3.85367 0.32926,0.49726 1.152431,0.74589 2.469516,0.74587 l 3.210372,0 c 1.31706,2e-5 2.140232,-0.24861 2.469517,-0.74587 0.38413,-0.58011 0.576203,-1.86466 0.576221,-3.85367 l 0,-4.35091 c -1.8e-5,-2.32047 -0.274408,-3.64646 -0.823173,-3.97798 -0.548797,-0.41434 -1.289651,-0.62154 -2.222565,-0.62156 l -7.820136,0 c -2.908545,2e-5 -4.362815,-2.23758 -4.362813,-6.71283 l 0,-16.28486 c -2e-6,-2.23756 0.411584,-3.93648 1.234759,-5.09678 0.823168,-1.1602 1.92073,-1.74032 3.292689,-1.74037 l 18.192106,0 c 1.317049,5e-5 2.387173,0.62161 3.210372,1.86468 0.878021,1.16029 1.317046,2.81779 1.317075,4.97247 l 0,6.58853 c -2.9e-5,1.57466 -0.301858,2.77634 -0.905489,3.60504 -0.54881,0.74591 -1.262225,1.11884 -2.140248,1.11882 -0.823197,2e-5 -1.536612,-0.41435 -2.140248,-1.24312 -0.603682,-0.82871 -0.905512,-1.98895 -0.905489,-3.48074 -2.3e-5,-2.32044 -0.164658,-3.72931 -0.493904,-4.2266 -0.32929,-0.4972 -1.152462,-0.74583 -2.469517,-0.74587 l -9.219529,0 c -1.262206,4e-5 -2.085378,0.2901 -2.469516,0.87018 -0.329277,0.49729 -0.493911,1.74041 -0.493904,3.72936 l 0,3.72935 c -7e-6,2.0719 0.164627,3.35645 0.493904,3.85367 0.32926,0.49727 1.152431,0.7459 2.469516,0.74587 l 13.746977,0 c 3.018271,3e-5 4.527418,2.27907 4.527447,6.83715 l 0,16.78209 c -2.9e-5,4.5581 -1.509176,6.83716 -4.527447,6.83716"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#a7a7a7;stroke-width:0.63336247;stroke-opacity:0.75770928" />
<path
inkscape:connector-curvature="0"
id="path4598"
d="m 49.84375,208.6875 c -2.963423,5e-5 -4.468752,2.28571 -4.46875,6.84375 l 0,38.15625 c -2e-6,4.5581 1.505327,6.84375 4.46875,6.84375 l 22.28125,0 c 2.963388,0 4.468717,-2.28565 4.46875,-6.84375 l 0,-5.59375 c -3.3e-5,-1.49172 -0.302623,-2.59785 -0.90625,-3.34375 -0.548812,-0.82873 -1.239359,-1.24997 -2.0625,-1.25 -0.823202,3e-5 -1.552619,0.42127 -2.15625,1.25 -0.548809,0.7459 -0.812527,1.8099 -0.8125,3.21875 l 0,0.875 c -2.7e-5,2.15475 -0.605208,3.25002 -1.8125,3.25 l -8.65625,0 c -1.207335,2e-5 -1.812515,-1.09525 -1.8125,-3.25 l 0,-9.6875 c -1.5e-5,-2.07184 0.605165,-3.12497 1.8125,-3.125 l 11.9375,0 c 2.963388,3e-5 4.468717,-2.25438 4.46875,-6.8125 l 0,-13.6875 c -3.3e-5,-4.55804 -1.505362,-6.8437 -4.46875,-6.84375 l -22.28125,0 z m 11.59375,8.46875 5.9375,0 c 0.878026,4e-5 1.576194,0.47432 2.125,1.46875 0.603634,0.91167 0.906223,2.00694 0.90625,3.25 -2.7e-5,1.32603 -0.302616,2.43216 -0.90625,3.34375 -0.603685,0.91165 -1.301852,1.37503 -2.125,1.375 l -5.9375,0 c -0.932945,3e-5 -1.669985,-0.46335 -2.21875,-1.375 -0.548797,-0.91159 -0.843765,-2.01772 -0.84375,-3.34375 -1.5e-5,-1.24306 0.294953,-2.33833 0.84375,-3.25 0.603643,-0.99443 1.340683,-1.46871 2.21875,-1.46875 z"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#a7a7a7;stroke-width:0.63336247;stroke-opacity:0.75770928" />
<path
inkscape:connector-curvature="0"
id="path4144"
d="m 84.71875,208.6875 c -2.963422,5e-5 -4.437501,2.28571 -4.4375,6.84375 l 0,38.15625 c -10e-7,4.5581 1.474078,6.84375 4.4375,6.84375 l 16.875,0 c 1.2073,0 1.9832,0.25276 2.3125,0.75 0.32924,0.49726 0.49997,1.77188 0.5,3.84375 l 0,22.625 c -3e-5,4.47519 1.47406,6.71873 4.4375,6.71875 l 3.03125,0 c 3.01826,-2e-5 4.5312,-2.24356 4.53125,-6.71875 l 0,-24.125 c -5e-5,-2.07186 -0.17077,-3.47287 -0.5,-4.21875 -3.3476,-5.30396 -5.0854,-8.23237 -5.25,-8.8125 -0.16465,-0.66299 -0.25004,-2.82225 -0.25,-6.46875 l 0,-28.59375 c -4e-5,-2.15468 -0.43448,-3.80846 -1.3125,-4.96875 -0.8232,-1.24307 -1.94058,-1.87495 -3.3125,-1.875 l -21.0625,0 z m 4.53125,8.46875 12.09375,0 c 1.59144,4e-5 2.49922,0.37918 2.71875,1.125 0.21949,0.74591 0.34372,1.89417 0.34375,3.46875 l 0,25.71875 c -3e-5,1.98901 -0.20963,3.29489 -0.59375,3.875 -0.32929,0.49726 -1.1517,0.75002 -2.46875,0.75 l -12.09375,0 c -1.317084,2e-5 -2.139491,-0.25274 -2.46875,-0.75 -0.329275,-0.49723 -0.5,-1.80312 -0.5,-3.875 l 0,-25.71875 c 0,-1.98895 0.170725,-3.22146 0.5,-3.71875 0.384138,-0.58008 1.206545,-0.87496 2.46875,-0.875 z"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#a7a7a7;stroke-width:0.63336247;stroke-opacity:0.75770928" />
<path
inkscape:connector-curvature="0"
id="path4146"
d="m 131.03755,247.47956 c -1e-5,2.07188 0.16462,3.35644 0.49391,3.85367 0.32925,0.49726 1.15242,0.74589 2.46951,0.74587 l 3.21037,0 c 1.31706,2e-5 2.14023,-0.24861 2.46952,-0.74587 0.38413,-0.58011 0.5762,-1.86466 0.57622,-3.85367 l 0,-33.56419 c -2e-5,-1.65745 0.3018,-2.94199 0.90549,-3.85366 0.60363,-0.91157 1.31705,-1.36739 2.14025,-1.36744 0.82315,5e-5 1.50912,0.45587 2.05793,1.36744 0.60363,0.82879 0.90546,2.03047 0.90549,3.60503 l 0,40.02841 c -3e-5,4.5581 -1.50918,6.83716 -4.52745,6.83716 l -18.1921,0 c -3.01831,0 -4.52746,-2.27906 -4.52746,-6.83716 l 0,-40.02841 c 0,-1.57456 0.27439,-2.77624 0.82318,-3.60503 0.60366,-0.91157 1.34451,-1.36739 2.22256,-1.36744 0.87805,5e-5 1.59147,0.41443 2.14025,1.24312 0.54878,0.74592 0.82317,1.9476 0.82317,3.60504 l 0,8.57752 c 0,2.07191 0.21951,3.5222 0.65855,4.35091 l 2.14024,3.23211 c 1.53657,2.32052 2.44206,3.85369 2.71647,4.59954 0.32926,0.7459 0.49389,2.07189 0.4939,3.97798 l 0,9.19907"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#a7a7a7;stroke-width:0.63336247;stroke-opacity:0.75770928" />
<path
inkscape:connector-curvature="0"
id="path4588"
d="m 154.65625,208.6875 c -2.96343,5e-5 -4.4375,2.28571 -4.4375,6.84375 l 0,38.15625 c 0,4.5581 1.47407,6.84375 4.4375,6.84375 l 22.3125,0 c 2.96339,0 4.43746,-2.28565 4.4375,-6.84375 l 0,-5.59375 c -4e-5,-1.49172 -0.30262,-2.59785 -0.90625,-3.34375 -0.54881,-0.82873 -1.23936,-1.24997 -2.0625,-1.25 -0.8232,3e-5 -1.52137,0.42127 -2.125,1.25 -0.54881,0.7459 -0.84378,1.8099 -0.84375,3.21875 l 0,0.875 c -3e-5,2.15475 -0.6052,3.25002 -1.8125,3.25 l -8.625,0 c -1.20733,2e-5 -1.81251,-1.09525 -1.8125,-3.25 l 0,-9.6875 c -1e-5,-2.07184 0.60517,-3.12497 1.8125,-3.125 l 11.9375,0 c 2.96339,3e-5 4.43746,-2.25438 4.4375,-6.8125 l 0,-13.6875 c -4e-5,-4.55804 -1.47411,-6.8437 -4.4375,-6.84375 l -22.3125,0 z m 11.59375,8.46875 5.9375,0 c 0.87803,4e-5 1.60744,0.47432 2.15625,1.46875 0.60363,0.91167 0.87497,2.00694 0.875,3.25 -3e-5,1.32603 -0.27137,2.43216 -0.875,3.34375 -0.60369,0.91165 -1.3331,1.37503 -2.15625,1.375 l -5.9375,0 c -0.93295,3e-5 -1.66998,-0.46335 -2.21875,-1.375 -0.54879,-0.91159 -0.81251,-2.01772 -0.8125,-3.34375 -1e-5,-1.24306 0.26371,-2.33833 0.8125,-3.25 0.60365,-0.99443 1.34068,-1.46871 2.21875,-1.46875 z"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#a7a7a7;stroke-width:0.63336247;stroke-opacity:0.75770928" />
<path
inkscape:connector-curvature="0"
id="path4150"
d="m 192.58897,260.53231 -3.04573,0 c -2.96343,0 -4.44514,-2.27906 -4.44514,-6.83716 l 0,-38.16373 c 0,-2.23756 0.41159,-3.93648 1.23476,-5.09678 0.82317,-1.1602 1.92073,-1.74032 3.29269,-1.74037 l 18.76833,0 c 2.96339,5e-5 4.4451,2.27911 4.44513,6.83715 l 0,40.02841 c -3e-5,1.57462 -0.30186,2.81774 -0.90549,3.72936 -0.54881,0.82874 -1.23479,1.24312 -2.05793,1.24312 -2.03052,0 -3.04576,-1.74036 -3.04573,-5.2211 l 0,-33.56419 c -3e-5,-2.07183 -0.16467,-3.35638 -0.49391,-3.85367 -0.32929,-0.4972 -1.15246,-0.74583 -2.46951,-0.74587 l -9.79576,0 c -1.2622,4e-5 -2.08537,0.2901 -2.46951,0.87018 -0.32928,0.49729 -0.49391,1.74041 -0.49391,3.72936 0,1.98902 0.0823,3.23213 0.24695,3.72935 0.16463,0.49729 1.01524,1.94758 2.55184,4.35092 1.59145,2.32052 2.52438,3.81225 2.79879,4.47522 0.27437,0.58015 0.41157,1.74039 0.41158,3.48073 l 0,15.91191 c -1e-5,4.5581 -1.50916,6.83716 -4.52745,6.83716"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#a7a7a7;stroke-width:0.63336247;stroke-opacity:0.75770928" />
<path
inkscape:connector-curvature="0"
id="path4152"
d="m 243.53562,221.74702 c -3e-5,1.24316 -0.30185,2.32052 -0.90549,3.23211 -0.54881,0.82877 -1.17991,1.24314 -1.8933,1.24312 l -6.58537,0 c -0.65856,2e-5 -1.28966,-0.41435 -1.8933,-1.24312 -0.5488,-0.91159 -0.82319,-1.98895 -0.82317,-3.23211 l 0,-1.36743 c -2e-5,-2.15469 -0.60367,-3.23207 -1.81098,-3.23211 l -5.51526,0 c -1.20732,4e-5 -1.81098,1.07742 -1.81097,3.23211 l 0,28.4674 c -10e-6,2.15475 0.60365,3.23213 1.81097,3.23211 l 9.30185,0 c 1.97559,2e-5 3.12803,-0.16574 3.45732,-0.49724 0.38413,-0.41437 0.5762,-1.61605 0.57623,-3.60505 -3e-5,-1.40885 0.27436,-2.48621 0.82317,-3.23211 0.60363,-0.82873 1.34449,-1.24309 2.22257,-1.24312 0.82314,3e-5 1.53656,0.41439 2.14024,1.24312 0.60364,0.82876 0.90546,1.989 0.90549,3.48074 l 0,5.46971 c -3e-5,4.5581 -1.50917,6.83716 -4.52745,6.83716 l -18.27442,0 c -2.96343,0 -4.44513,-2.27906 -4.44513,-6.83716 l 0,-38.16373 c 0,-4.55804 1.4817,-6.8371 4.44513,-6.83715 l 18.27442,0 c 1.31705,5e-5 2.38717,0.62161 3.21038,1.86468 0.87802,1.16029 1.31704,2.81779 1.31707,4.97247 l 0,6.2156"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#a7a7a7;stroke-width:0.63336247;stroke-opacity:0.75770928" />
<path
inkscape:connector-curvature="0"
id="path4580"
d="m 251.4375,208.6875 c -2.96342,5e-5 -4.4375,2.28571 -4.4375,6.84375 l 0,38.15625 c 0,4.5581 1.47408,6.84375 4.4375,6.84375 l 22.3125,0 c 2.96339,0 4.43747,-2.28565 4.4375,-6.84375 l 0,-5.59375 c -3e-5,-1.49172 -0.30262,-2.59785 -0.90625,-3.34375 -0.54881,-0.82873 -1.23936,-1.24997 -2.0625,-1.25 -0.8232,3e-5 -1.52137,0.42127 -2.125,1.25 -0.54881,0.7459 -0.81252,1.8099 -0.8125,3.21875 l 0,0.875 c -2e-5,2.15475 -0.60521,3.25002 -1.8125,3.25 l -8.65625,0 c -1.20733,2e-5 -1.81251,-1.09525 -1.8125,-3.25 l 0,-9.6875 c -10e-6,-2.07184 0.60517,-3.12497 1.8125,-3.125 l 11.9375,0 c 2.96339,3e-5 4.43747,-2.25438 4.4375,-6.8125 l 0,-13.6875 c -3e-5,-4.55804 -1.47411,-6.8437 -4.4375,-6.84375 l -22.3125,0 z m 11.625,8.46875 5.90625,0 c 0.87803,4e-5 1.60744,0.47432 2.15625,1.46875 0.60363,0.91167 0.90622,2.00694 0.90625,3.25 -3e-5,1.32603 -0.30262,2.43216 -0.90625,3.34375 -0.60369,0.91165 -1.3331,1.37503 -2.15625,1.375 l -5.90625,0 c -0.93294,3e-5 -1.70123,-0.46335 -2.25,-1.375 -0.54879,-0.91159 -0.81251,-2.01772 -0.8125,-3.34375 -10e-6,-1.24306 0.26371,-2.33833 0.8125,-3.25 0.60365,-0.99443 1.37193,-1.46871 2.25,-1.46875 z"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#a7a7a7;stroke-width:0.63336247;stroke-opacity:0.75770928" />
<path
inkscape:connector-curvature="0"
id="path4156"
d="m 293.90347,253.69515 c -1e-5,4.5581 -1.50916,6.83716 -4.52744,6.83716 l -3.04574,0 c -2.96342,0 -4.44513,-2.27906 -4.44513,-6.83716 l 0,-38.16373 c 0,-2.23756 0.41159,-3.93648 1.23476,-5.09678 0.82317,-1.1602 1.92073,-1.74032 3.29269,-1.74037 l 14.32319,0 c 1.31706,5e-5 2.38718,0.62161 3.21038,1.86468 0.87802,1.16029 1.31704,2.81779 1.31707,4.97247 l 0,5.96697 c -3e-5,1.40891 -0.30185,2.56915 -0.90548,3.48074 -0.54881,0.82877 -1.23479,1.24314 -2.05794,1.24312 -2.03051,2e-5 -3.04576,-1.57459 -3.04573,-4.72386 -3e-5,-2.07181 -0.16466,-3.31493 -0.49391,-3.72935 -0.32929,-0.41433 -1.17989,-0.62152 -2.55183,-0.62156 l -5.35062,0 c -1.26221,4e-5 -2.08538,0.2901 -2.46952,0.87018 -0.32928,0.49729 -0.49391,1.74041 -0.4939,3.72936 -10e-6,2.07189 0.0823,3.35645 0.24695,3.85367 0.10975,0.33153 0.96036,1.69896 2.55183,4.10228 1.59146,2.4034 2.52438,3.93657 2.79879,4.59954 0.27438,0.58015 0.41157,1.74039 0.41158,3.48073 l 0,15.91191"
style="text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#a7a7a7;stroke-width:0.63336247;stroke-opacity:0.75770928" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Gloss"
style="opacity:0.39743593;display:inline"
transform="translate(0,193)">
<path
style="fill:url(#linearGradient5019);fill-opacity:1;stroke:none;display:inline;enable-background:new"
d="m 140.75695,-181.46527 c -72.755273,0 -131.3473247,55.32504 -131.3473247,124.035321 l 0,226.726419 c 0,20.80953 5.4124137,40.37745 14.9258327,57.56472 C 7.7443533,-168.40399 355.28423,-168.5508 427.33293,-164.35009 c -19.53259,-10.874 -42.31047,-17.11518 -66.71847,-17.11518 l -219.85751,0 z"
id="path4983"
inkscape:connector-curvature="0" />
<path
style="fill:url(#linearGradient5027);fill-opacity:1;stroke:none;display:inline;enable-background:new"
d="M 491.91203,111.33371 C 472.74849,191.80784 359.21234,253.0633 254.5913,293.33179 l 106.02316,0 c 72.75527,0 131.29757,-55.32506 131.29757,-124.03532 l 0,-57.96276 z"
id="rect4484"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 59 KiB

View File

@ -0,0 +1,581 @@
/* XPM */
static const char *icon_16x16[] = {
/* columns rows colors chars-per-pixel */
"319 319 256 2 ",
" c #007400670066",
". c #0D6B09B201FA",
"X c #0A540A540A54",
"o c #093D067402B2",
"O c #13050D090215",
"+ c #1C1C130A013A",
"@ c #17F0116E03C0",
"# c #135113511351",
"$ c #1B481B481B48",
"% c #21BB167F00B3",
"& c #255B194D0161",
"* c #2C2D1D6800E2",
"= c #252F1BD008B3",
"- c #2A9D1E6F08C9",
"; c #2D3C211008B1",
": c #33D222810124",
"> c #397A2625011F",
", c #3DBB2916011F",
"< c #35CD266909A1",
"1 c #2A4C232C1537",
"2 c #32B9287E13BA",
"3 c #3EBF321219FA",
"4 c #23C023C023C0",
"5 c #2BB42BB32BB0",
"6 c #3A763467287E",
"7 c #33673365335F",
"8 c #3BD33BCE3BC1",
"9 c #3996384F361F",
"0 c #35752E6E2161",
"q c #43CD2CF80114",
"w c #45472ED904D0",
"e c #4BE93281018E",
"r c #494D328C06B2",
"t c #51E4362200F2",
"y c #55BE39080141",
"u c #5CD13D4B00F7",
"i c #55963B6A098C",
"p c #496637FF16DE",
"a c #60B13F610097",
"s c #46733BA52773",
"d c #43633EBF3737",
"f c #5F16408E053E",
"g c #5A8543991843",
"h c #63ED4286028D",
"j c #6A1C468A02CE",
"k c #6DF749650442",
"l c #693A48180917",
"z c #74084D4802D8",
"x c #78CE4F4C010E",
"c c #73E84ED70843",
"v c #7D0A52C40133",
"b c #767150F40870",
"n c #7C3154DB09E6",
"m c #7DCF57010C16",
"M c #7797568C16CC",
"N c #69494D8D1838",
"B c #57AD478028F0",
"V c #488A43F53A47",
"C c #56204BD23838",
"Z c #5A1A4EBE3848",
"A c #68AC58413931",
"S c #6DC357202BEE",
"D c #79E5639F38E5",
"F c #7DFE61612AAB",
"G c #42E942D742B6",
"H c #4C2A4C064BAB",
"J c #4B234949456D",
"K c #518B4D9F45F4",
"L c #54A752254CFA",
"P c #5B7A559E49FA",
"I c #53FA53C05333",
"U c #5CB85A1B54EF",
"Y c #5B845B3E5ACE",
"T c #5947573252F7",
"R c #68C85C6E44EB",
"E c #62BC5DF15484",
"W c #61075EC55A74",
"Q c #767B669F4871",
"! c #648E61B55BE9",
"~ c #6AF165E65C63",
"^ c #6C31662B5A12",
"/ c #75606D9F5E90",
"( c #75EA6A76546B",
") c #76516ACC5491",
"_ c #644F643163F8",
"` c #6CAF69DB645F",
"' c #6CAD6C1B6B11",
"] c #68F566DA6356",
"[ c #726C6D4E6356",
"{ c #70F76EBF6ABB",
"} c #7B8E72F96215",
"| c #745A71E06D4C",
" . c #7A5C75A26C30",
".. c #798873EC68C3",
"X. c #761E758D7418",
"o. c #7958773573BB",
"O. c #7C7C79B9745D",
"+. c #7E4C7D717C27",
"@. c #824856610127",
"#. c #860B591B0137",
"$. c #8C2C5D0A011F",
"%. c #83EF5ABB0BC2",
"&. c #89165EBF0C5F",
"*. c #812A5765089E",
"=. c #90AB5F780141",
"-. c #86895EC21127",
";. c #8C4F61C40DF3",
":. c #8F7D60330393",
">. c #9435625B0125",
",. c #9A9F666D0116",
"<. c #9E98691A011A",
"1. c #92C4650B0C35",
"2. c #9E486BC10A0A",
"3. c #8B0261A910A5",
"4. c #8B3564BA1A37",
"5. c #949F69171494",
"6. c #A4376CD60121",
"7. c #A8B56F760120",
"8. c #A2226EEF0B0B",
"9. c #AC8A725E012A",
"0. c #A8E173560BD3",
"q. c #B2AC766D0133",
"w. c #B6AB7927013A",
"e. c #BC377CBC0155",
"r. c #B4797A8E0B0B",
"t. c #A9A978EB193C",
"y. c #B2D77EDA18AB",
"u. c #8B926AB22B94",
"i. c #9B1E74482997",
"p. c #85FF6AF536DF",
"a. c #976076B937B2",
"s. c #8EE46FB633C2",
"d. c #A5927ABF289F",
"f. c #A3487D6E3562",
"g. c #C0DB7F7D01F6",
"h. c #8B0A7410482B",
"j. c #95B87B894949",
"k. c #86CB769B56F9",
"l. c #8A0074FE4D61",
"z. c #850D7B8468ED",
"x. c #83377E1C743B",
"c. c #80CF7F3B7CDA",
"v. c #BAA083F319CB",
"b. c #BD6780AB0B36",
"n. c #BA4D895A2A8F",
"m. c #AB95842537FB",
"M. c #B7F38B92364A",
"N. c #BE1C915B3B05",
"B. c #AF0482022BAC",
"V. c #C4D282480206",
"C. c #CAE486330206",
"Z. c #CED288EC0211",
"A. c #C70B86C20AA4",
"S. c #D45B8C940211",
"D. c #D8E68F890216",
"F. c #D3538EB90A60",
"G. c #DCD49241021E",
"H. c #D87D920A0A0A",
"J. c #C7D38B5116AE",
"K. c #D855970019B0",
"L. c #CDCD90901B1B",
"P. c #E2D196200220",
"I. c #E6E998EC0222",
"U. c #EC439C540239",
"Y. c #E70B9BE40C7A",
"T. c #F13D9F9A0260",
"R. c #E3A79E4319DE",
"E. c #F554A25E025E",
"W. c #FB90A67D026E",
"Q. c #FFF1A9A1030B",
"!. c #FFDCAC9C0C02",
"~. c #F4DAA5600C0C",
"^. c #EB39A38219EC",
"/. c #FFB7AEA912BC",
"(. c #F2F0A8571941",
"). c #FFFAB1FA1C21",
"_. c #FFFFB0B01717",
"`. c #EF99A2220D0D",
"'. c #C32E8E8E28EF",
"]. c #CB98946129DD",
"[. c #D6E49B0C27A0",
"{. c #C9449765370B",
"}. c #D36B9E423768",
"|. c #DB2DA38B37C9",
" X c #DE48A1762C97",
".X c #E854A7032967",
"XX c #F41CAE32285A",
"oX c #FFDAB4782385",
"OX c #FFB0B6EE2B4D",
"+X c #FFFFB8B82E38",
"@X c #F688B1802C69",
"#X c #ECC9AD8A33BE",
"$X c #E48EAA7F3A6C",
"%X c #E699AA43362B",
"&X c #EF2EB1A13B2B",
"*X c #F4A9B304340B",
"=X c #FAC8B6DB3394",
"-X c #FFE6BAA1341B",
";X c #F483B50E3AC1",
":X c #FFBFBD003B88",
">X c #F8D6B7FC3AB2",
",X c #F1C6AFAF3106",
"<X c #9B38845357F5",
"1X c #9D7881384B02",
"2X c #A7FA882D4A7C",
"3X c #BB0A937846D4",
"4X c #A79B8B695515",
"5X c #AEB890ED5776",
"6X c #B767965756A6",
"7X c #B4348E8E45A1",
"8X c #9833881368D1",
"9X c #864480EE762D",
"0X c #8CAE848E74A7",
"qX c #836B81A57E32",
"wX c #8AA786837E40",
"eX c #8EA488EB7E72",
"rX c #946189BC74BD",
"tX c #93668C177DB2",
"yX c #96FC8B5E7513",
"uX c #9BC591CD7E5F",
"iX c #9D9D90907721",
"pX c #8AF5816C6E6E",
"aX c #A937936F697E",
"sX c #ADC49AE876E3",
"dX c #A34496BE7E32",
"fX c #A77D98DD7BEA",
"gX c #B22A9DF87759",
"hX c #ACD1946665C1",
"jX c #B8C9A23B7744",
"kX c #C76B9BA8479D",
"lX c #C3439DDD556A",
"zX c #D70CA6FD49CB",
"xX c #CF01A5D85641",
"cX c #EB7CB33346B5",
"vX c #FFCDBF324242",
"bX c #F5D6B9FE46D6",
"nX c #EA92B6835268",
"mX c #C7B8A5F16547",
"MX c #D0BEB14C74FE",
"NX c #E464BACA6ACA",
"BX c #FFFEC0C04624",
"VX c #FFC5C1AF48B8",
"CX c #F6A0C1165858",
"ZX c #838C832A820D",
"AX c #8CF98A0D846D",
"SX c #932C8E3184AD",
"DX c #9A0694FD8B0D",
"FX c #9974974E9309",
"GX c #A71A9C6A87EA",
"HX c #A3279D5F925D",
"JX c #B4EFA5FB8954",
"KX c #AAB6A337948E",
"LX c #B312A9C997AC",
"PX c #AEC0A37E8D1F",
"IX c #C821B232883B",
"UX c None",
/* pixels */
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX+ : , r y f j j k k z x x z z x x b x x b x x x b z x x x x x b b x x x b b b v v b b b b b v b b z x x x b x x b x x x b b b v x b x x x b x x b b x x x b x x x b x x x b z x x x x b b x x x z x x x x x x b b x x x x b z x x x x b b x x x x b z x x z x x x x x x b z b x x b x x b x x x x z z x x b x x x x x k k j j f y e , * @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXO > t h v #.,.7.e.C.Z.D.G.U.I.U.U.U.T.T.T.T.E.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.W.E.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.E.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.E.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.E.T.T.T.T.T.T.T.T.T.T.T.T.U.E.E.U.U.T.`.T.T.T.T.E.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.U.U.U.I.I.P.D.Z.V.e.9.,.#.v h e : @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX: t k #.7.b.S.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.!.!.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.I.Z.e.8.#.j t - o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& t z :.b.Z.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.!.Q.Q.!.!.!.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.I.Z.w.:.k t & UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX: h #.9.C.U.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.!.!.!.!.!.!.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.U.C.9.#.h > UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX% u $.q.F.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.!.!.!./.!././.!./././.!././.!./.!./.!././.!./.!./._.!.!._.!.!._._./.!./.!./.!./.!.!././.!./.!././.!.!././.!./.!.!./.!./.!.!./.!././.!.!./.!./.!./.!.!./.!.!./.!./.!./.!./.!./.!./.!.!./.!.!.!.!.!.!.!.!.!.!.!././.!.!.!.!.!.!./.!.!.!.!.!./.!.!.!./.!.!.!.!.!.!.!.!.!.!.!.!.!./.!.!.!.!.!.!.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.S.9.@.y & UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXe x 7.Z.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.!._._.oX+X:X:X:XBXBXBXBXBXBXBXBXBXBXBXBXvXBXBX:XBXBXvXBXvXBX:X:XBXBXvX:XBXBXBX:X:XBX:X:XvX:XBXBX:X:XBXBX:X:X:XvX:XBX:X:XvX:X:X:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X-X:X-X:X:X-X:X-X:X-X:X-X:X:X-X-X-X:X-X-X-X-X-X-X-X:X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X+X-X-X+X-X+X-X+X-X+X+X-X-X+X+X+X+X+X+X+X+X+XOX+X+X+X+X+X+X+XOXOXoXoX)._././.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Z.7.x w . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX* j :.V.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q./.).+X-XvXBXVXVXBXBXBXBXBXBXBXBXvXBXBXvXBXvX:XBXBXBXvXBXBXBXvXvXvXvXBXBXBXBX:XvX:XvX:XBX:XBX:XBXvXvXBX:X:X:X:X:X:X:XvX:XvX:X:X:X:X:X:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X-X:X-X:X-X:X:X:X-X:X:X-X:X-X-X-X:X-X:X-X-X-X:X-X-X-X-X-X:X-X-X-X-X-X-X-X-X-X:X+X-X-X-X-X+X+X-X-X-X-X+X-X+X-X+X-X+X-X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOX+X+X+XOX+XOXOXOX+X+XOXOXoX)./.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.T.V.:.h & UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX* k <.S.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q./.oX-XBXBXVXVXVXBXBXBXvXBXBXBXBXBXBXBXBXBXBXBXBXvXBXBXBXBXBX:XBX:XBXvXvXvXvXvX:XBX:XvXvXvXvXBX:XBX:XBXBX:X:X:X:X:XBXBX:XBX:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X:X:X:X:X-X:X:X:X:X:X:X:X:X-X:X-X-X-X:X:X:X-X:X-X-X-X-X:X-X-X-X-X:X-X-X-X-X-X-X-X-X-X-X-X+X-X-X+X+X-X-X-X-X-X-X+X-X+X+X-X-X+X-X+X-X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOX+X+XOXOX+XOX+XOXOX+XOXOXOXOXOXOXoX_.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Z.<.j & UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX* k 6.G.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.oX-XBXVXVXVXVXBXBXBXVXVXvXVXVXBXBXBXBXBXBXBXBXBXvXvXvXBXvXBX:XBX:X:XBXBXBX:XvXvXvX:XBX:XBXvX:XvXvX:XBX:X:X:X:X:XBX:XBX:XBX:X:X:X:X:X:X:XvX:XBX:X:X:XvX:X:X:X:X:X:X:X:X:X:X:X-X:X:X:X-X:X-X-X-X:X-X-X:X-X:X-X:X-X-X:X-X-X-X:X-X-X:X-X-X:X-X-X-X-X-X-X-X-X-X-X+X-X-X:X+X-X-X+X-X+X-X+X+X+X-X+X-X+X+X+X-X+X+X+X+X+X-X+X+X+X+X+X+X+XOX+X+X+X+XOX+X+X+XOX+XOXOX+XOXOXOXOXOXOXOXOXOXOXoXOXOXOX)./.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.G.7.j & UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX* x 7.P.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.).:XvXVXVXVXBXVXVXBXBXVXVXBXBXBXBXBXBXBXBXBXBXBXBXBXBXvXBXvXvXvXvXBXBXBXBXBXBX:XvXvXvXvXvXvXvXvXvXvXvX:XBX:XBXBXBX:X:XBX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X:X-X-X:X:X:X:X:X:X-X:X-X:X-X-X-X:X:X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X+X-X-X+X-X+X-X-X-X+X-X+X-X+X+X+X+X-X+X+X-X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOX+X+XOX+XOX+XOX+XOXOX+XOX+XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXoX/.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.P.7.z - UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX@ j 6.G.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q._.+XBXvXVXVXVXVXBXVXBXBXBXVXBXBXBXBXBXBXBXBXBXBXBXBXBXBXvXvXvXvXvXBXvXvXvXBX:XBX:XBXBXvXvX:XvX:XvXvX:X:XvX:XvX:X:X:X:X:XBX:X:X:XBX:XBX:XBX:XBX:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X-X:X-X-X-X:X-X-X:X-X-X:X:X-X-X-X-X:X-X:X-X:X-X-X:X-X-X-X-X-X-X-X-X+X-X-X-X-X+X-X+X-X+X-X+X-X-X+X-X+X+X+X-X+X-X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOXOX+XOX+XOX+X+XOXOXOXOXOXOXOXOXOXOXOXoXOXOXOXOXoXOXoXOXoXOXoXOX)./.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.G.<.h @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXy ,.S.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.oXvXVXVXVXVXVXVXVXBXVXVXBXVXBXBXBXBXBXBXBXVXBXBXBXBXBXvX:X:XBX:XBXBXvXBXvXBXvXvXBXBXBX:XBXvXvXvXvXvXvXvXvXvX:XBX:X:XBX:XBX:X:X:X:X:X:X:X:X:X:XBX:X:X:X:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X:X-X:X:X-X-X:X-X:X:X-X-X:X:X-X-X-X:X-X-X:X-X-X-X-X-X-X-X-X-X-X-X-X+X-X-X-X-X-X+X+X-X-X-X+X-X+X-X+X+X-X+X+X+X-X+X-X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOXOX+XOXOX+X+XOXOXOX+XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXoXOXOXoXOXoXOXoX_.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.D.>.y o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX* v g.W.Q.Q.Q.Q.Q.Q.Q.Q.Q./.-XvXVXBXVXVXVXVXVXvXVXBXVXBXVXBXBXBXBXvXBXBXBXvXVXvXBXvXvXBXBXBXBXBXBXvXvXvXvXvXvXvX:X:X:XBX:XvX:XvXvXvX:XvX:XvXvXvXvX:XBX:X:X:XBXBX:X:XBX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X-X-X:X-X:X-X:X:X:X-X:X:X-X:X-X-X:X-X:X-X-X:X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X+X-X+X-X-X-X+X-X-X+X-X+X-X+X+X+X-X+X-X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOX+XOXOX+XOX+XOXOXOX+XOXOXOXOXOXOXOXOXOXoXOXOXOXOXOXoXoXOXOXOXoXOXOXoXOXoXOXoXoXOXoX_.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.V.x & UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXj 6.U.Q.Q.Q.Q.Q.Q.Q.Q.Q./.-XVXVXVXVXVXVXVXvXVXVXvXVXBXBXBXBXBXBXBXBXBXvXBXBXBXBXvXvXBXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvX:XBXBXBXvX:XBX:XvXvX:XvXvXvXvXvX:XvXvX:XvX:X:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X:X:X:X:X:X:X:X:X:X-X:X-X:X-X:X:X-X:X:X-X:X:X-X-X:X-X-X-X-X-X-X:X-X-X-X-X-X-X-X+X-X+X-X-X+X-X-X-X+X-X-X-X+X+X-X+X+X+X-X+X-X-X-X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOX+X+X+XOX+XOX+X+XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXoXOXoXOXOXOXOXoXOXoXOXoXoXOXoXOXoXoXOXoXoXOX).!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.U.6.y X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX> #.C.W.Q.Q.Q.Q.Q.Q.Q.Q./.-XVXBXVXVXVXVXVXBXVXVXvXVXvXVXBXBXBXBXBXBXvXBXBXBXvXBXBXvXvXBXvXBXvXBXBXBXvXvXvXvXvXvXvXvX:XvXvXBX:XBXvX:XBX:X:XvXvX:XvX:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:XBX:X:X:X:X:X:X:X:X-X:X:X:X:X-X-X:X-X-X:X-X:X-X:X:X:X-X-X-X-X-X-X-X-X-X-X:X-X-X-X-X-X:X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X+X+X-X-X+X+X-X-X+X+X:X+X-X+X+X-X+X+X+X+X+X+X+X+X+X+X+X+X+XOX+XOX+X+XOX+X+XOX+XOXOX+XOXOXOXOXOXOXOXOXOXOXOXoXOXOXOXOXoXOXOXOXOXoXoXOXOXOXoXOXOXoXOXoXOXoXoXOXoXoXoXoX).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Z.#.- UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXy 6.U.Q.Q.Q.Q.Q.Q.Q.Q./.-XVXVXVXVXVXVXVXvXBXVXvXvXVXVXVXvXBXBXBXBXBXBXBXBXBXBXBXvXBXBXBXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXBX:X:XBX:X:X:XvX:XvXvXvXvX:X:XvXvX:XvX:XvXvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X-X:X:X-X-X:X:X-X:X:X-X:X-X:X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X+X+X-X-X-X+X-X+X-X-X+X-X-X+X+X+X-X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOX+XOX+X+X+X+X+X+XOXOXOXOXOXOXoXoX).).)._._._.)././././.!.!.!.!.!.Q.!.Q.!.!.Q.Q.!.Q.!.!.Q.!.!./././././._.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.U.6.y UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX% v V.W.Q.Q.Q.Q.Q.Q.Q.Q.oXVXVXVXVXBXVXVXVXVXVXVXvXVXVXVXvXVXVXBXBXBXBXBXBXBXBXvXBXvXBXvXvXvXVXvXBXvXBXvXvXvXvXvXvXvX:XvXvXvX:X:X:XBX:X:XBX:XBX:XvX:X:X:X:X:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X:X-X:X-X-X:X:X-X-X:X:X:X-X-X-X-X:X-X-X:X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-XOX-X-X+X-X+X-X-X-X-X-X+X-X+X-X+X+X+X+X+X+X-X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOXOX+X+X+X+XoXoX)._._././.!.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.e.v @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX> :.G.Q.Q.Q.Q.Q.Q.Q.Q.).VXVXCXVXVXVXVXBXVXBXvXVXVXvXVXVXvXVXvXVXBXBXvXBXBXVXvXBXvXBXBXvXvXvXVXVXvXBXvXvXvXvXvXvXvXvX:XvXvXvX:XvXvXvXvX:X:X:XBX:XvX:XvXvX:X:X:XvX:X:X:XvX:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X:X:X-X-X:X-X:X-X:X:X-X:X-X-X:X-X-X-X:X:X-X:X-X-X-X-X-X-X>X-X-X-X-X-X-XOX-X-X-X-X-X+X-X-X+X-X+X+X+X-X+X+X+X-X-X-X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOXoXoX_._./.!.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.(.Q.Q.Q.Q.Q.Q.Q.Q.Q.G.=.: UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXy 6.`.Q.Q.Q.Q.Q.Q.Q.!.-XVXCXIXNXVXVXBXVXBXVXBXVXBXVXVXvXvXVXvXvXVXBXvXBXBXvXvXBXvXBXvXvXBXvXBXCXIXNXvXvXvXvXvX>XvXvXvXvXvX:XvXvXvX:X:XvXBX:XBXvX:X:X:X:X:XvXvX:X:X:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X-X-X:X:X:X:X:X-X:X:X-X:X-X-X-X-X:X-X:X:X:XCXNXMXjXJXLXLXLXLXLXJXIXMXnXbX-X-X-X-X-X-X-X-X-X+X-X+X-X-X+X+X-X-X+X-X+X-X+X+X+X+X+X+X+X+X+X+X+X+X+XOXoX)._.!.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.W.zXsXQ.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.xXlX(.W.Q.Q.Q.Q.Q.Q.Q.E.6.t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXj q.W.Q.Q.Q.Q.Q.Q.Q.oXVXVXNXLXX.LXvXvXVXVXVXBXVXBXBXvXVXVXVXVXVXVXvXBXBXvXBXvXBXBXvXvXvXBXvXvXvXVXLXDXIXVXvXvXvXvXvXvX:X:XvXvXvXvX:XvXvX:X:XBX:X:X:X:XvX:XvX:X:X:X:XvX:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X:X-X:X:X-X:X:X:X-X-X:X-X-X:X-X:X:X-X:X:X>XNXMXKXuX| Y H G 7 7 7 7 7 8 H Y .DXPXMXnX;XOX-XOX-XOX+X-X-X+X+X-X+X-X+X+X+X+X-X+X+X-X+X+X+X+XOXoX)./.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.(.aXE ...XW.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.6X~ 8X XW.W.W.Q.Q.Q.Q.Q.W.q.h o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. x V.Q.Q.Q.Q.Q.Q.Q.Q.-XVXCXIXSXI J KXNXbXbXbXVXBXBXBXBXvXVXvXVXvXvXVXVXBXvXBXvXBXvXvXBXvXvXvXvXvXvXVXLXG ' KXNXvX:XvXvXvXvXvX:X:XvX:XvXvX:XBX:X:X:X:XBXvX:X:X:X:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X:X:X-X:X:X:X-X:X:X-X:X:X-X:X-X-X:XVXMXKXx.H 9 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 9 Y wXPXMX&X-X-X-X-X-X+X-X-X+X-X+X+X+X+X-X+X+X+XoXoX_.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.zX0X5 9 6XE.E.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.6X5 $ .6X`.E.W.W.Q.Q.Q.Q.Q.V.k . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX@ v D.Q.Q.Q.Q.Q.Q.Q./.vXBXNXLX' J G J X.MXcXcXbXBXvXBXBXBXVXvXBXBXBXBXvXBXvXBXvXBXvXvXvXvXvXvXvXvXvXvXCXKX8 8 H FXMXcXvXvXvX:X:X:XvXvXvXvX:X:XvX:X:XvX:XvX:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X:X:X:X:X-X:X:X-X:X-X:X:X-X:X:X-X:X>X-XCXjXDXY 9 7 7 7 7 7 7 7 7 7 7 5 7 7 7 7 5 7 7 7 5 7 8 { PXMX&X@X-X-X-X+X-X+X+X-X-XOXOX)./.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.6X! X X yXG.I.T.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.6X5 o G 8XR.E.E.Q.Q.Q.Q.Q.Q.S.v @ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX+ #.G.Q.Q.Q.Q.Q.Q.Q.oXBXVXNXKXY G G G G I LXzXcXbXbXvXBXBXBXBXVXBXBXvXvXvXvXBXvXvXvXvXBXvXBXvXvXvXvXvXvXbXLX8 G G G ZXJXcX&XvX:XvXvX:XvXvX:X:XvXvX:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X:X:X:X-X:X-X:X:X:X-X:X:X-X:X-X-X:X-X-X:X-XBXMXHXY 7 7 7 7 7 7 7 7 5 7 7 7 7 7 7 7 5 7 5 7 5 7 7 7 5 7 7 ] KXNX*X=X@X-X+X+XoX_./.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.(.aXG [ n.S.P.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.6X5 5 rX].U.E.W.!.Q.Q.Q.Q.H.@.@ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& #.P.Q.Q.Q.Q.Q.Q.Q.+XVXVXIXHXH G G H H G H FX6XzXcXvXbXBXBXBXBXVXvXVXvXBXVXvXvXBXvXvXvXvXvXvXvXvXvXvXvXvXbXKXG G 8 8 8 ' LXnX&XbX:X:XvXvX:X:X:XvX:X:X:X:X:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X-X:X:X:X:X:X-X:X-X:X:X-X-X:X-X-X-X:X-XNXPX_ 7 7 7 7 7 7 7 7 7 5 7 7 5 7 7 7 7 5 7 7 7 7 5 7 5 7 7 5 7 5 8 x.JX$X(./.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.(.iX4 9 1Xb.S.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.6X5 $ z.{.I.E.W.Q.Q.Q.Q.Q.P.#.% UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX& $.P.Q.Q.Q.Q.Q.Q.!.:XVXVXIXSXJ H G G G G G G X.gXkXzXcXvXBXBXVXvXvXvXvXBXvXvXvXvXvXBXvXvXvXvXvXvXvXvXvXvX>XcXKX8 8 G 8 8 8 Y PXnX&XbX:X:X:X:XvX:X:X:XvXvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X-X:X:X-X:X-X:X-X-X-X:X-X:X-X:XvXMXAX8 7 7 7 7 7 7 7 7 5 7 7 7 7 7 7 7 5 7 7 5 5 7 5 7 5 7 5 5 7 5 4 # X 5 pX}.`.W.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q..XrX$ X 0X8.C.P.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.5X4 X } 3XI.E.W.Q.Q.Q.Q.Q.P.#.% UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX% $.P.Q.Q.Q.Q.Q.Q./.BXVXVXIXSXJ G G G H G G G G I KX7XzXcXbXvXBXvXBXvXvXBXvXvXvXBXvXvXvXvXvXvXvXvXvXvX:XvXvXvXcXKX8 8 8 8 8 8 8 _ KXnX&XvX>XvX:XvX:XvX:X:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X:X-X:X:X:X:X-X:X:X:X:X-X-X:X-X-X:X:X-XbXJX` 7 7 7 7 7 7 7 7 7 7 7 7 7 5 7 7 7 7 5 7 5 7 7 5 7 7 5 5 4 $ # o X ` 6XY.W.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q..XyX$ ] i.q.D.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.5X4 X [ 3XP.E.W.Q.Q.Q.Q.Q.P.#.@ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX@ #.P.Q.Q.Q.Q.Q.Q._.BXVXVXIXDXJ J G H G G G G G G G DX5XkX$XbXvXvXvXvXBXvXvXvXBXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXcXKXG G 8 G G 8 8 8 Y KXzXcX>XvX:X:X:X:XvX:XvX:X:X:X:X:X:X:X:X:X:X:X-X:X:X:X:X:X-X:X-X:X:X-X:X-X-X:X-X-X:X:X-X:X:X-X:XnXKXT 7 7 7 7 7 7 7 7 5 7 7 7 5 7 7 7 7 5 7 7 5 7 7 5 7 5 $ # X K aXK.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q..XyX$ 9 l.6.Z.I.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.5X5 X [ 3XP.T.W.Q.Q.Q.W.Q.G.@.@ UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX. v G.Q.Q.Q.Q.Q.Q.).vXBXBXNXFXH H G G G G G J G G G G X.fXkXzX&XvXBXvXvXBXBXBXBXvXBXvXvXvXvXvXvXvX:XvXvXvXvX:XvX:XcXKX8 8 8 8 8 8 8 8 8 Y PXcX&X>X>X:X:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X-X-X-X:X:X:X-X:X:X-X:X-X-X-X:X:X-X-X-X-X-XnXPXG 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 5 7 7 5 5 7 7 5 5 $ X 7 yXK.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.(.iX4 X qX,.V.P.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.5X5 X ..M.I.E.E.W.Q.W.W.Q.S.x . UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXz S.Q.Q.Q.Q.Q.Q.).vXVXVXNXHXH G G G G J G G G G G G G I KX7X}.cXbXvXBXBX:X:XBXvXvXBXvXvXvXvXvX:XvXvXvXvX:XvXvXvXbXcXKXG 8 8 G 8 8 8 8 8 8 ' JXzX&XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X-X:X:X-X:X-X-X:X-X-X-X-X:X:X:XCXDXG 7 7 7 7 7 7 7 7 5 7 7 7 5 7 7 5 7 7 5 7 5 4 # o $ 0X[.U.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.(.aX5 ~ u.q.D.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.T.5X5 # x.L.P.E.E.Q.W.Q.Q.W.Z.j o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXh V.Q.Q.Q.Q.Q.Q.).VXVXVXCXLXI G G H G G G G G G G G G G G FX8XkX$XBXBXBXBXvXBXBX:XBXBX:XvX:XvXvXvX:X:XvX:XvXvXvX:XbXcXKX8 8 8 8 8 8 8 8 8 8 8 +.jX$X&X>X:X:X:X:X-X:X:X:X:X:X:X-X:X:X-X:X:X-X-X:X:X:X-X:X-X:X-X:X:X-X-X:X:X:X-X-X-X:XnXGXG 7 7 7 7 7 7 7 7 7 5 7 5 7 5 7 7 7 5 7 4 X o $ rX].U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.6XG 7 k.7.Z.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.5X4 4 rXJ.I.T.T.W.W.W.W.Q.g.y o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXt q.Q.Q.Q.Q.Q.Q._.VXVXVXVXIX_ G G G G G G G G G G G G G G G ' fX3XzXcX;XBXvXvX:XBXBX:X:XBXvXvXvXvXvXvXBX:XBX:XvX:XvX>XcXKX8 8 8 8 8 8 8 8 7 8 8 8 AXmX$XbX>X:X:X:X:X:X:X:X:X:X:X:X-X:X:X:X:X:X:X:X-X-X:X:X:X-X:X-X-X:X-X-X-X-X-X-X:XnXHXG 7 7 7 5 7 7 7 5 7 7 7 7 5 7 7 7 5 4 # $ rXL.U.E.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.zX^ X 0X1.g.G.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.5X5 5 8XZ.P.T.W.W.W.W.W.T.9.w UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX: <.W.Q.Q.Q.Q.Q._.BXVXBXVXIX+.G G H G G G G G G G G G G G G G H KX7XzX$X;XvXvXvXvX:XBX:XBX:XvXvX:XvX:X:XvXBXvX:X:XvX:XvXcXKX8 8 8 8 8 8 8 8 8 8 8 7 J HXxX$X;X:X:X:X:X:X:X:X-X:X:X:X:X:X:X-X:X-X:X-X:X-X-X-X-X-X:X-X:X-X:X-X-X-X-X-XbXKXJ 7 7 7 7 7 7 7 7 7 5 7 7 7 7 5 4 # o $ rXL.U.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q..XpXX ! i.q.S.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.5X4 L 2XD.I.T.W.W.W.W.W.E.,.* UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXO $.T.Q.Q.Q.Q.Q./.BXVXBXBXNXDXG G G G H G G G G G G G G G G G G G DX5XkX$XbXvXvXvXvXvXBXBX:XBXvX:XBXvXvXvXvX:X:XvXvX:X:X:XcXKXG 8 8 8 8 8 8 8 8 8 8 8 8 Y PX}.$X;X-X:X:X:X:X:X-X:X-X:X:X-X:X:X-X:X-X:X:X-X:X-X-X:X-X:X-X-X-X-X-X:X:X:XJXY 7 7 7 5 7 7 7 7 5 7 7 7 5 5 $ o 5 yXF.U.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.(.iX$ 7 k.6.Z.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.5X5 o O.n.D.U.T.W.T.W.W.W.U.#.O UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXz G.Q.Q.Q.Q.Q.!.vXBXBXBXCXLXL G G G G G G G G G G G G G G G G G 8 ' dX3X$XcXvXvXBX:XBX:XBX:XBX:XvXvX:X:XvXvXvXvX:XvX:XvX:XcXKX8 8 7 8 9 8 8 9 8 8 8 8 9 9 +.gX$X&X>X:X:X:X:X-X:X-X:X:X:X:X:X:X:X:X-X:X:X-X:X:X:X-X:X-X:X-X-X:X-X:X>XjX{ 7 7 5 7 7 7 7 5 5 7 7 5 4 X G 4XH.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.6XV X 9X,.V.P.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.T.5X4 $ pXA.G.U.T.W.W.W.W.W.S.j o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXy e.Q.Q.Q.Q.Q.Q.-XBXBXBXBXIX{ G G G G G G G G G G G 8 G G 8 G G G G I HX7XzXcX;XvX:XBX:XBX:X:X:XvXvX:XvXvX:XvXvX:XvX:X:XvX:XcXKX8 8 8 8 8 9 8 8 8 7 7 8 8 8 8 FXlX$X;X>X:X:X:X:X:X:X:X-X+X:X:X+X-X-X:X-X-X:X-X-X-X-X:X-X-X-X-X-X-X-XNXqX7 7 7 7 5 7 7 7 7 7 4 # Y 5XD.T.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q..Xz. ~ u.q.D.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.5X5 G <XC.P.U.E.E.E.E.E.W.w.w UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX* <.Q.Q.Q.Q.Q.Q.-XVXBXBXBXNXDXG G G G G G G G G G G G G 8 G 8 G 8 8 8 G DX4XkX$XbXvXvX:XBX:XBXBX:X:X:XvXvX:XvXvX:X:X:XvXvX:X:XcXKX8 8 8 8 8 8 8 7 8 8 7 8 8 9 8 I GXkX$X;X-X:X:X:X:X-X-X:X:X-X:X:X+X:X-X:X-X-X-X:X-X:X-X-X-X-X-X-X-XbXHX9 7 7 7 7 7 7 7 5 $ X o o o ..n.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.iX$ 7 k.6.Z.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.5X5 .d.S.I.T.E.E.W.E.E.E.,.% UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXo v U.Q.Q.Q.Q.Q.oXBXBXBXBXVXLXI G G G G G 8 G G G G 8 G G G G G G 8 G G 8 ' fXN.|.bX>XvXBX:XBX:XBX:X:XvX:X:XvX:X:XvXvX:X:X:X:X:XcXKX7 8 8 8 7 9 8 8 7 8 8 8 8 7 7 8 qXmX|.#X-X:X-X-X:X:X:X-X-X:X-X+X:X-X:X-X:X-X-X-X-X-X-X-X-X:X-X-X-XJXH 7 7 7 5 7 7 4 # o $ 0XJ.P.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.kXK X 9X1.V.P.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.5X5 4 8Xe.S.I.T.E.E.E.E.E.P.x o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXu V.Q.Q.Q.Q.Q._.vXVXBXBXbXMXO.G G G G G G G G 8 G G 8 G 8 G G G 8 G 8 G 8 H HX7X}.cX>XBXvXvX:XvX:XvXvX:XvXvX:XvX:X:X:X:X:X:X:X:XcXHX8 8 7 8 7 8 8 8 8 7 8 7 8 7 8 7 J HXkX$X&X>X-X:X:X-X:X-X:X-X-X:X:X+X:X-X-X:X+X:X-X-X-X-X-X-X-X-XMX .7 7 7 7 7 $ X G <XS.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.(.0Xo ~ u.q.S.T.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.2X5 Y f.V.H.U.T.E.E.E.E.E.e.t UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUX& <.Q.Q.Q.Q.Q.!.:XBXBXBXBXCXLXH G G G G G G G G G G G G G 8 G 8 G G 8 G 8 G G DX4XkXcXbX:X:XvXvX:XvX:XvX:X:X:X:X:XvX:XvXvX:XvXvX:XcXKX8 8 7 8 8 8 7 8 7 8 8 8 8 7 7 8 9 ' gX}.$X;X:X-X-X:X-X:X:X-X:X:X:X:X-X:X-X-X:X+X:X-X-X-X-X-X-XbXGX8 5 7 5 $ X [ B.S.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.6X7 7 l.6.C.U.~.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.5X5 # pXr.Z.P.T.E.T.E.E.E.T.=.& UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXx I.Q.Q.Q.Q.Q.-XBXBXBXBXBXIX' G G G G G 8 G 8 8 G G G 8 G G 8 8 G 8 G 8 G G 8 ' fX3X|.&X:XvX:X:X:XvX:XvX:X:XvX:X:X:X:X:X:X:X:X:X>X&XKX7 8 8 8 8 7 7 8 8 7 7 7 7 8 8 7 9 8 FXkX|.#X>X-X:X-X-X:X-X-X:X+X+X:X-X+X+X:X+X:X-X-X-X-X-X-X:XJXH 7 5 $ o $ 0XA.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q..Xz. X 0X1.g.P.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.5X4 G j.e.S.I.T.T.T.T.E.W.S.j o UXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXw w.Q.Q.Q.Q.Q.oXBXBXBXBXBXCXHXG G G G G G G G G G G 8 G G G 8 G G 8 G 8 G 8 8 8 H HXm.zX$XbXvXvXBX:XvX:X:XvX:X:XvX:XvX:X:X:X:X:X:X:XcXHX8 8 8 7 8 7 8 8 8 8 7 8 7 8 7 8 7 9 ! dX}.$X*X-X-X-X:X-X:X-X-X:X:X+X-X:X:X+X:X+X-X-X-X-X-X-XNXx.5 # H 1XC.P.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.hX4 ! u.q.D.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.5X5 X 9X0.C.G.U.T.T.T.T.T.T.9.> UXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUX. $.E.Q.Q.Q.Q.!.vXBXBXBXvXVXIX_ G G G G G G 8 G G 8 G G 8 8 G G 8 G 8 G 8 8 8 8 G 8 FX4X{.$XbX>XvXvXvX:XvXvX:X:X:X:X:X:X:X:X:X:X:X:X:X&XKX8 7 7 8 7 8 8 7 7 7 8 7 8 7 8 7 7 9 8 FX3X|.#X>X-X:X-X:X-X-X-X-X+X:X+X:X+X:X+X-X-X-X-X-X-X>XPX4 o # 4 7 8 9 8 7 4 $ o o O.v.S.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q..X[ 7 k.6.C.I.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.5X5 G j.w.S.P.T.T.T.T.E.T.P.v o UXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXy C.Q.Q.Q.Q.Q.-XBXBXBX:XBXCXHXG G G 8 G 8 G G G 8 G 8 G 8 G 8 8 G G 8 8 G 8 G 8 8 8 ' dXN.zX&X:X:X:X:X:X:X:X:X:XvXvX:X:X:X:XvX:X:X:X>XcXHX8 8 8 8 8 7 7 8 7 8 7 8 8 7 7 7 9 7 7 Y GX{.$X*X>X-X-X-X:X:X-X-X-X+X:X+X:X+X:X-X-X-X-X-XOXxXJ $ G ! X.` U K K K K K U ] O._ G 4 7 <XV.G.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.aX4 o 9X1.V.P.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.T.5X4 X x.t.V.G.P.T.T.T.T.T.T.e.q o UXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXO >.W.Q.Q.Q.Q._.BXBXBXBXBXBXIX' G 8 G 8 G G 8 8 G G 8 G 8 G 8 G 8 8 8 8 G 8 8 8 8 8 8 H HXM.}.$X>XvXBX:X:X:XvX:XvX:X:X:X:X:X:X:X:X:X:X>XcXHX7 7 8 7 7 8 7 7 8 8 7 7 7 8 7 8 7 7 7 9 FX3X}.#X=X=X:X-X-X-X:X-X-X-X+X:X+X:X+X-X-X-XOX_.^.rXo X G | ` V 0 = + & & * * * * * * * 3 C ` o.G # o ..d.Z.I.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q..X.. ! u.w.D.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.T.5X5 G j.9.S.P.I.T.T.T.T.T.U.$.O UXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXu Z.Q.Q.Q.Q.Q.:XvXBXvXBXBXbXKXG G G G G G 8 G G G 8 G 8 G 8 G 8 8 G G 8 8 8 8 8 G 8 8 8 DX4XkX$X;XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:XcXLXI 8 7 8 8 7 7 8 7 7 7 8 7 7 7 7 7 8 9 9 _ aX{.$X;X-X-X-X-X-X-X-X+X:X:X+X:X+X:X+XOX).Q.Q.6X7 X H O.L 1 + & - : > q e t y y y y t t q q , 3 P O.L # 5 <Xb.G.`.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.6X5 7 k.6.C.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.T.3XU o X 9X2.g.D.I.U.T.U.T.T.T.V.w X UXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXO ,.Q.Q.Q.Q.Q.oXBXBXBXvXvXBXMX' G G G G 8 G G G 8 8 G G 8 8 G 8 8 8 G 8 8 G 8 G 8 8 8 8 8 ' dXN.|.;X:XvX:XvX:X:X:X:X:X:X:X:X:X:X:X:X-X:X-X*XzXPX| 8 9 8 7 8 7 7 8 7 8 7 7 7 9 7 7 7 9 8 HXN.}.#X=X-X-X-X-X-X-X-X-X-X-X-X-X+X).Q.Q.Q.(.0X 8 X.J = + * > w t y h k x v v #.#.*.@.x z j a y w r Z +.G .t.Z.Y.E.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.^.z. X 9X1.g.P.E.Q.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.T.H.2X{ # I a.q.Z.P.U.U.U.T.U.T.U.$.. UXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXy Z.Q.Q.Q.Q.!.vXvXBXvXBXvXVXLXH G G 8 G 8 8 G G G 8 8 8 G 8 8 G G 8 8 G 8 8 8 8 8 8 8 8 8 H FXm.zX$X;X:X:XvX:X:X:X:X:X:X:X:X:X:X:X:X:X:X>X;X$XkXfXZX8 7 9 7 9 7 7 7 7 9 7 9 9 7 7 7 7 7 X.hX{.%X*X>X-X-X-X-X-X-X-X-X-X+X_.Q.Q.Q.Q.Q.6X8 # ] W = & * > e y h x #.:.,.6.7.9.q.q.9.9.7.6.,.=.@.z h y t ^ { $ 5 pXw.D.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.lX8 ! u.w.S.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.T.G.V.a.O.4 $ z.<.g.D.P.U.U.U.U.U.T.V.w o UXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXO :.Q.Q.Q.Q.Q.OXBXvXvXBXvXvXNX9X8 G G 8 8 G 8 G 8 G G G G 8 8 G 8 Y 8 8 8 8 8 8 8 8 G 8 8 8 8 AX4X{.$X;X>X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X;X$X{.m.iXAXG 7 7 7 8 7 9 7 7 7 7 7 9 7 7 7 7 G HXN.|.%X=X-X-X-X-X-X-X-X-XoX!.Q.Q.Q.Q.Q.(.yXo 8 | 6 + * > e u k #.>.6.q.e.V.Z.Z.D.S.D.D.S.Z.C.g.e.9.6.>.@.j y B O.8 o .t.C.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.yXX # $ 7 l.6.C.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.E.W.T.P.C.6.4.x.5 ] u.w.Z.P.P.U.U.T.T.T.U.@.. UXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXe V.Q.Q.Q.Q./.vXvXBXvXvXvXBXLXL G G 8 G G 8 G 8 G 8 8 8 G 8 8 8 _ FXI G 8 8 8 8 8 8 8 8 8 8 8 ' fXN.zX&X>X:X:X:X:X:X:X:X:X:X-X:X-X:X:X-X:X:X>X&X|.N.f.z.FXG 9 7 7 7 7 7 9 7 7 7 7 7 7 7 7 7 qX5X].%X*X-X-X-X-X-X-XOX!.Q.Q.Q.Q.Q.Q.Q.kXV I ] 1 & : q u k #.<.9.V.Z.S.G.P.U.U.U.T.T.T.U.U.I.P.G.S.C.e.7.,.@.k f } I o 9 j.w.G.T.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.|.T X ` I X x.,.V.P.T.W.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.W.T.U.S.q.=.M z.7 5 k.6.V.H.P.U.U.U.U.U.U.w., UXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUX@.E.Q.Q.Q.Q.-XvXvXBXvXvXvXNXDXG G 8 G 8 G 8 8 G 8 G 8 8 G 8 8 _ FXc.X.G 8 8 8 8 8 8 8 9 8 8 8 G HXm.}.cX>X:X:X:X:X:X:X:X:X:X:X:X:X:X:X:X-X:X-X*X%X}.M.a.k.SXG 9 7 7 7 7 7 7 7 7 7 7 7 7 7 7 I uX'.|.#X=X-X-X-XOX/.Q.Q.Q.Q.Q.Q.Q.Q.~.yXX X ! U + * , t j #.<.q.g.S.G.I.`.E.E.E.W.W.W.W.W.W.W.W.E.E.U.I.H.Z.g.9.,.v h Q _ X X x.0.Z.P.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.aX$ X { J X. E u.q.S.U.W.Q.Q.Q.Q.Q.W.W.W.W.W.W.W.W.W.W.W.E.U.G.C.9.=.l x.7 x.1.q.S.P.U.U.U.U.U.U.P.z UXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUX< w.Q.Q.Q.Q.!.vXvXvXBXvXvXvXMX_ G G 8 8 8 8 G G 8 8 8 8 G 8 8 Y FXI P FX8 8 8 8 8 8 8 8 8 8 9 7 8 SX4X{.$X;X:X:X:X:X:X-X:X:X:X-X:X:X-X-X:X-X:X:X>X&X%X}.M.f.8XAX8 8 7 7 7 7 7 7 7 7 7 7 7 5 7 9 FXm.}.%X*X-X-X).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.|.L X ` K % * q u z >.9.V.S.P.U.E.E.W.W.Q.Q.Q.Q.Q.Q.W.Q.Q.W.Q.W.W.E.E.U.G.Z.e.6.$.k Q { X H a.w.D.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q..X} o { V @ _ 5 7 k.6.Z.I.E.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.E.W.W.E.W.E.T.I.G.V.6.=.c x.5 H p.6.V.D.P.U.I.U.U.U.U.6.* UXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXk P.Q.Q.Q.Q.+XvXvXvXvXvXBXbXLXG 8 8 G 8 G G G 8 G G 8 8 8 G I FXE K Z SXI 8 8 8 8 8 8 8 8 8 8 8 8 ' iXN.|.&X:X:X:X:X:X:X:X:X:X:X-X:X:X-X:X:X-X:X-X=X&X$X}.N.f.yXZX7 7 8 7 7 7 7 7 7 7 7 7 7 7 7 X.hXN. X*XoX!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.aX$ X ] K % : w h @.<.w.Z.G.U.E.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.Q.Q.Q.W.E.E.U.H.C.q.>.x D { X $ pX6.Z.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.lX7 W K % * C I X 0X1.g.P.E.Q.Q.Q.Q.W.W.W.W.W.W.W.W.W.E.E.E.E.E.T.I.D.V.9.=.M O.$ $ z.,.w.S.P.P.I.U.I.U.U.Z.y UXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXO <.Q.Q.Q.Q.!.:XBXvXvXvXvX:XNXwXG 8 G 8 G 8 8 8 8 8 8 8 8 G G FX~ Z A D pXX.8 8 9 8 8 8 9 8 8 9 7 8 G HXm.}.$X;X>X:X:X:X-X:X-X:X:X:X-X:X:X-X-X:X-X:X-X;X#X%X}.M.f.SX' 7 7 7 7 7 7 7 7 7 7 7 7 7 5 H uXn.}.^.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q..XpX _ K & : e j $.6.V.S.I.E.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.U.P.S.e.6.@.Q ` o { i.g.G.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.iXX H W & * q i O.o ! u.q.F.U.W.Q.W.W.Q.W.W.W.W.W.W.T.W.E.W.W.E.E.E.U.U.D.C.9.=.F | X | 4.7.V.G.P.I.I.I.I.U.U.=.. UXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXe V.Q.Q.Q.Q.oXvXvXBXvXvXvXvXMXY 8 G 8 8 8 G 8 G 8 8 8 8 8 8 ZXX.Z R D s.1XFX8 8 8 8 8 8 8 8 8 7 7 8 8 AX4X{.$X;X:X:X:X:X-X-X:X:X:X-X:X-X:X-X:X-X:X-X:X-X>X*X%X}.N.f.DXI 7 7 7 7 7 5 7 7 7 7 7 7 7 7 FXf.b.G.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.kX8 U T % : t j $.9.C.H.U.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.U.H.V.6.$.) W 8 l.9.S.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q..X/ 5 | = : e h k k.5 5 k.6.Z.I.E.W.W.Q.W.W.W.E.W.W.E.W.E.W.T.W.E.E.T.T.T.P.G.C.9.=.h.Y G l.,.w.S.P.P.I.I.I.U.U.q.> X UXUXUXUXUXUXUX",
"UXUXUXUXUXUXz T.Q.Q.Q.Q.:XBXBX:XvXvXvXbXLXG G 8 G G 8 8 8 8 8 G G 8 8 ' AXK A p.a.2X2XGXI 8 8 8 8 7 8 8 8 8 8 8 8 _ dXN.|.&X>X:X-X:X:X:X:X-X-X:X-X:X-X:X-X:X-X:X:X-X=X=X&X%X}.M.1XDX8 7 7 7 7 7 7 5 7 7 5 7 5 5 T s.9.S.U.W.Q.Q.Q.Q.Q.Q.Q.Q.!.W.iXX G _ & : t k >.q.Z.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.U.G.V.7.$.k.H X 0X,.V.Y.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.6X7 X O.2 * e j @.:.a.T X 0X1.V.G.E.W.W.W.W.W.W.W.W.E.W.E.W.E.W.T.T.E.E.E.T.T.P.D.C.7.$.z.7 $ x.$.q.Z.G.P.I.I.I.I.I.D.h UXUXUXUXUXUXUX",
"UXUXUXUXUX@ 6.Q.Q.Q.Q.).vXvX:XvX:XvX:XNXZXG 8 G 8 8 G 8 8 G 8 8 8 8 H FXP P D a.m.N.{.jXX.8 9 8 8 7 8 7 7 8 8 7 8 G FXm.}.%X;X-X:X:X:X:X-X-X:X:X:X-X:X-X-X:X-X-X-X-X-X:X=X&X%X}.M.aX+.7 7 5 7 7 7 7 5 7 7 7 4 4 z.<.V.I.E.W.Q.Q.Q.Q.Q.Q.Q.Q. X^ 4 | = : e j >.9.Z.P.U.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.P.V.7.&.x.5 ! i.w.H.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.iXX W V - q h #.6.q.q.9XX W u.q.S.U.E.W.W.W.W.W.W.W.W.E.E.E.E.E.T.W.T.E.T.T.T.U.P.D.V.7.&.x.# .4.6.V.G.P.P.I.I.I.U.U.=.. UXUXUXUXUXUXUX",
"UXUXUXUXUXe C.Q.Q.Q.Q.-X:XvXvXvXvXvXvXIX_ 8 8 8 8 8 8 8 8 8 8 8 8 8 AX' Z D a.2XkX}.|.kXHX8 8 9 8 8 8 7 8 8 8 7 9 9 AX4X{.$X;X;X-X:X-X-X:X:X-X-X-X:X-X:X-X-X:X-X-X:X-X-X-X=X*X X}.B.DXI 7 7 7 7 7 5 7 7 5 X o x.1.b.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.6X5 X | 0 : q j =.q.Z.P.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.T.P.V.7.4.O.X 7 k.7.Z.U.E.Q.Q.Q.Q.Q.Q.Q.Q..X/ 7 ] & q h #.7.V.Z.V.<X5 5 k.6.C.P.E.W.E.W.E.W.E.E.W.E.W.E.E.E.E.T.E.T.E.T.T.T.T.P.S.e.<.p.~ G p.,.w.S.G.P.I.P.I.I.I.q.> o UXUXUXUXUXUX",
"UXUXUXUXUXk T.Q.Q.Q.!.:XvXvXvXvXvX:XBXLXG 8 8 8 G 8 8 G 8 8 8 8 8 Y AXZ D h.m.N.zX&X$X|.HXI 7 8 7 7 8 8 8 7 8 8 9 9 _ iXM.|.&X>X-X:X-X:X-X:X-X:X-X:X-X-X:X-X-X:X-X-X-X:X-X-X>X#X|.].2XDX7 7 7 7 7 7 7 4 o T s.9.S.U.W.Q.Q.Q.Q.Q.Q.Q.W.iXX I K * q h $.9.C.P.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.G.V.6.s.W X 0X,.V.G.E.W.Q.Q.Q.Q.Q.Q.W.kX8 X X.2 > t x 6.V.H.P.S.M.U X 9X1.e.G.U.E.W.W.E.W.E.E.E.E.E.E.W.T.T.T.T.T.T.T.T.T.U.U.P.S.q.,.z.5 $ z.#.q.C.G.P.P.P.P.I.I.S.u UXUXUXUXUXUX",
"UXUXUXUX. ,.Q.Q.Q.Q.oXvXvXvXvX:XvXvXnXDX8 8 G 8 8 8 8 8 8 8 8 8 G DXE A D f.3X}.$X&X;X$XmXX.8 8 8 8 8 7 7 8 8 7 7 9 V HXm.}.$X;X:X:X:X-X-X-X:X-X:X-X:X-X-X:X-X-X-X-X-X-X-X-X-X=X#X|.{.iX` 5 7 5 5 5 # 5 k.<.C.I.E.Q.Q.Q.Q.Q.Q.Q..X[ 5 ` * , y @.6.C.G.E.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.D.V.<.z.7 ] u.w.S.T.W.Q.Q.Q.Q.Q.Q.W.aX$ G P : e k 1.e.H.U.T.I.A.0Xo E u.q.S.I.E.W.E.W.E.W.E.E.E.E.E.T.T.T.W.T.T.T.T.T.T.U.U.I.G.C.q.5. .o x.*.6.V.S.G.P.P.P.P.P.U.#.X UXUXUXUXUXUX",
"UXUXUXUX> e.Q.Q.Q.Q.-XvXBX:XvX:XvX:XMX' G 8 G 8 8 8 8 8 8 8 8 8 | +.P D s.7X{.$X;X>X>X$XzXFX8 7 8 8 7 8 8 7 8 7 8 7 9 AX4X{.$X;X>X-X-X:X:X-X:X-X-X-X-X-X-X-X-X:X-X-X-X-X-X-X-X=X*X%X}.M.HX8 7 7 4 X X 9X>.b.G.T.Q.Q.Q.Q.Q.Q.W.kXV o | 0 : t x 6.V.G.E.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.S.e.5.x.X G h.6.C.U.E.Q.Q.Q.Q.Q.Q.~.0X # .; q h $.q.S.I.E.E.T.S.<X5 5 k.6.V.I.T.E.W.E.E.E.E.E.E.E.E.W.T.T.T.T.T.T.T.T.T.U.U.I.P.S.V.6.k.V U F ,.w.S.G.P.P.P.P.I.I.6.& UXUXUXUXUXUX",
"UXUXUXUXy G.Q.Q.Q.!.vXvX:XvXvXvXvXvXLXI 8 8 8 8 8 8 8 8 8 8 8 J DXP A p.2X{.$X&X>X:X:X;X|.PXI 8 7 7 8 7 7 8 7 8 7 9 9 ! iXM.|.&X=X-X:X-X:X-X-X-X:X:X-X-X-X-X-X-X-X-X-X-X-X-X-X-X=X*X X{.aX| 5 $ | -.q.H.U.W.Q.Q.Q.Q.Q.W.aX# G T * e j >.w.S.U.E.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.I.S.q.l.H # z.,.V.P.E.Q.Q.Q.Q.Q.Q.|.U Y V : t x 6.V.P.E.W.Q.E.G.M.U X x.>.e.D.T.E.E.E.W.E.E.E.E.E.E.T.T.T.T.T.T.T.U.U.U.T.U.U.U.P.S.r.8.x.X 9 ) $.9.C.G.G.P.P.P.P.I.g.w o UXUXUXUXUX",
"UXUXUXUXx E.Q.Q.Q.).BXvXvXvXvX:X:XbXKXG 8 8 8 8 8 8 8 8 8 8 8 X.[ A D j.N.}.$X>XvX:X-X;X$XmXX.9 9 9 7 8 7 8 7 7 8 7 7 G FXm.}.%X;X-X-X:X-X-X:X-X-X-X-X-X-X-X:X-X-X-X-X-X-X-X-X-X-X@X#X|.N.DX$ H p.6.Z.U.E.Q.Q.Q.Q.Q.`.0X X o.; > f #.b.Z.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.E.G.C.0.0X# O.;.w.H.T.W.Q.Q.Q.Q.W.6X5 $ | * q j :.e.G.T.W.Q.Q.E.P.A.0XX W u.9.S.I.T.W.T.E.E.E.E.E.T.E.T.T.T.T.T.T.T.U.U.U.U.U.U.I.I.G.g.q.l.J # z.@.6.V.S.P.P.G.P.P.P.G.a UXUXUXUXUX",
"UXUXUXo ,.Q.Q.Q.Q.+XvX:XvX:X:XvX:XCXSX8 8 8 8 8 8 8 8 8 8 8 G FXP D p.m.{.$X;X>X:X:X:X;X#XzXHX9 7 9 8 7 8 7 7 8 7 8 8 7 AX4XN.$X&X-X:X-X:X-X-X-X-X-X:X-X-X-X-X-X-X-X-X-X-X+X-X-X-X-X*X%XL.1XK 5 k.1.V.P.E.Q.Q.Q.Q.W.|.P L K : t v <.b.P.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.D.V.a.U T u.7.Z.U.W.Q.Q.Q.Q.E.aX# I V > u #.9.Z.U.T.Q.Q.Q.W.T.D.<X5 5 k.6.g.P.T.E.E.E.E.T.E.T.T.T.T.T.T.U.T.U.U.T.T.U.U.U.I.U.I.P.S.g.8.c.X O.M ,.e.Z.D.G.P.P.G.P.P.#.o UXUXUXUXUX",
"UXUXUX* w.Q.Q.Q.Q.:X:XvXvX:XvX:XvXMX' 8 8 8 8 8 8 8 8 8 8 9 ' +.A D f.N.|.&X>X:X:X:X:X:X&X|.GXL 8 7 8 8 7 7 7 8 7 7 7 9 _ iXM.|.#X-X-X:X-X-X-X-X:X-X-X-X-X-X-X-X-X-X+X-X-X-X-X-X-X-X=X^.S.r.0XX X x.$.w.H.E.W.Q.Q.Q.Q.6X7 # o.; w h :.b.S.U.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.U.S.0.pX$ 7 k.>.C.P.E.Q.Q.Q.Q.`.rX # .: e k ,.g.G.T.W.Q.Q.Q.W.E.G.M.U X x.:.w.D.I.T.E.E.E.E.E.T.T.T.T.T.U.T.U.T.U.U.U.U.U.U.U.U.U.I.G.C.q.j.8 U F :.q.C.G.G.P.G.P.P.P.6.% UXUXUXUXUX",
"UXUXUXe Z.Q.Q.Q./.:XBX:X:XvX:XvXvXIXI 8 8 8 8 8 8 8 8 7 8 G FXP R s.m.kX$X;XvX:X:X:X:X=X;X$XmXX.7 9 7 7 8 8 7 7 9 7 7 7 8 HXm.}.%X*X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X+X-X+X+X/.E.P.V.1XG .-.9.S.U.W.Q.Q.Q.Q.aX# J K : f v 7.Z.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.G.V.f.I # z.=.w.G.T.W.Q.Q.W..X^ H K > u #.q.Z.U.W.Q.Q.Q.Q.W.W.U.A.0Xo T s.9.Z.I.T.E.T.T.E.T.E.T.T.T.T.T.T.T.U.U.U.U.U.U.U.I.U.I.I.P.D.g.8.O. 8 Q #.9.g.S.G.G.G.G.P.P.9.> X UXUXUXUX",
"UXUXUXh P.Q.Q.Q.).vX:XvX:XvXvX:X>XLX8 8 8 8 8 8 8 9 9 8 9 ' +.Z D f.N.|.;X>X:X-X:X-X:X+X>X&XzXHX8 7 7 9 7 7 8 7 9 7 7 7 7 wX4X{.$X#X-X-X-X-X-X-X-X-X-X-X-X-X-X+X-X-X-X+X-X-X-X-XOX!.Q.W.T.D.y.x. Y u.,.C.I.E.Q.Q.Q.`.rX o X.< w k >.b.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.T.D.w.0XX O.-.9.S.U.W.Q.Q.W.kX8 X o.< e z ,.V.P.E.W.Q.Q.Q.Q.Q.W.U.D.<X7 5 k.,.g.P.T.T.E.T.T.T.T.T.T.T.U.T.U.T.U.U.U.U.U.I.U.I.U.I.I.I.G.Z.w.k.5 4 ) @.6.g.S.D.G.G.G.P.P.C.e o UXUXUXUX",
"UXUXUXv E.Q.Q.Q.-X:XvX:XvX:X:XvXnXGX8 8 8 8 8 8 8 8 8 9 8 AXR R s.m.}.cX;X-X:X:X:X:X:X:X-X&X|.fXI 7 8 7 7 7 7 7 7 9 7 9 7 W iXM.}.#X>X-X-X:X-X-X-X-X-X-X-X-X-X-X-X+X-X-X-X-X-XoX!.Q.Q.W.E.P.V.8X4 V p.>.V.P.E.Q.Q.W..X( 9 U > y #.9.Z.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.I.V.1XJ Y u.6.Z.U.W.Q.Q.W.hX4 8 P > u *.q.Z.U.W.!.Q.Q.Q.Q.Q.Q.T.P.M.U X x.1.w.S.I.T.T.T.T.T.T.U.T.T.U.U.T.U.U.U.U.I.U.U.I.U.I.I.I.I.G.S.g.f.! X x.k ,.w.Z.S.P.G.G.G.G.D.h UXUXUXUX",
"UXUX >.Q.Q.Q.Q.:XvX:XvX:X:X:X:XnXAX8 8 8 8 8 7 8 7 8 9 I AXA D 1XN.|.#X>X-X:X:X-X:X:X:X-X;X$XmXX.7 8 7 7 7 9 7 7 7 7 7 7 8 HXm.}.%X*X-X-X-X-X-X-X-X-X+X-X-X-X-X-X-X+X+X-X-X).Q.Q.Q.Q.Q.W.U.S.B.I 4 } $.e.G.E.W.Q.Q.zXG ' 3 w j >.b.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.`.D.v.9Xo G h.,.C.P.E.W.Q.W.iXX { 3 q k ,.V.P.T.W.Q.Q.Q.Q.Q.Q.Q.T.I.C.eXo U u.7.C.P.T.T.T.T.T.T.T.T.U.U.U.U.U.U.I.U.I.U.I.I.I.I.I.I.I.P.D.g.9.eXX | M =.q.C.S.G.G.G.G.P.P.n UXUXUXUX",
"UXUXO 7.Q.Q.Q.!.:X:XvX:X:XvXvX:XNX' 8 8 8 9 9 8 8 8 9 8 X.} A h.m.{.$X;X:X:X-X:X:X:X+X:X:X;X#XzXFX8 7 7 9 9 7 7 7 7 9 7 7 7 wX4X{. X&X-X-X-X-X-X-X-X-X+X-X-X-X+X+X-X-X-X+X_.Q.Q.Q.Q.Q.!.W.E.G.A.0Xo X x.@.9.H.T.W.Q.Q.5X4 $ | > y v 9.Z.U.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.P.V.8X4 4 ) =.e.H.E.W.W.`.rX # | : y #.9.Z.I.W.Q.Q.Q.Q.Q.Q.Q.W.W.U.S.<X5 5 k.,.g.G.U.T.T.T.T.T.U.U.T.U.U.U.U.I.U.U.U.I.U.I.I.I.I.P.I.P.G.S.e.j.7 T S #.9.g.S.D.G.D.G.G.G.=.. UXUXUXUX",
"UXUX- w.Q.Q.Q._.:XvX:X:X:XvX:X:XJXY 8 8 8 8 8 7 7 8 8 8 FXP D a.M.|.$X;X:X:X:X:X:X-X:X:X-X>X*X|.GXI 9 7 7 7 9 7 7 7 7 7 7 7 Y iXM.|.#X>X-X-X-X-X+X-X-X-X-X-X+X-X-X+X-XOX_.Q.Q.Q.Q.Q.Q.Q.Q.W.U.S.<X5 +.m 7.Z.I.W.Q.E.iX# G C w j >.b.G.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.D.m.T X x.#.q.S.E.W.Q..X/ V K , j =.g.G.T.Q.Q.Q.Q.Q.Q.Q.W.W.W.T.G.M.W o x.:.w.Z.U.U.T.T.U.T.U.U.U.U.U.U.U.U.I.U.I.I.I.I.I.I.I.I.I.P.G.S.C.d.~ G D v 6.g.Z.G.G.D.G.G.G.6.% UXUXUXUX",
"UXUXq V.Q.Q.Q.).:X:X:X:X:XvX:X>XJXG 8 8 8 7 8 8 7 8 7 I ZXR D m.{.$X;X:X-X:X:X:X-X:X-X-X:X=X;X$XmXX.7 7 7 7 7 7 7 7 7 7 7 7 8 HXB.{.%X*X-X-X-X-X-X-X-X+X+X-X-X-X-X-X+X!.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.D.M.E ] M 6.C.I.E.Q.~.yX | 2 t x 7.Z.P.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.P.b.0Xo x.*.7.S.U.E.W.|.J | 3 t x 7.Z.U.E.W.Q.Q.Q.Q.Q.Q.Q.W.W.T.P.A.0XX T p.6.C.P.U.T.U.U.U.T.U.U.U.U.I.U.I.U.I.I.I.I.I.I.I.I.I.P.I.P.D.C.q.rXX 5 ) x <.w.Z.S.D.D.D.G.G.7.- UXUXUX",
"UXUXt S.Q.Q.Q.OX:X:XvX:X:X:X:X>XLXG 8 7 7 8 7 8 8 8 7 X.} R s.M.}.#X;X:X:X-X:X-X:X-X:X-X-X-X=X#X}.HX9 7 7 7 7 7 7 7 7 7 7 5 7 qX4X{. X*X-X+X-X-X-X-X-X+X+X-X-X+X+XOX!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.U.A.0Xo L D >.V.P.E.W.^.z. $ ] , h $.q.D.T.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.S.<X4 ` M <.C.I.W.E.lX7 $ { , h $.w.D.U.W.Q.Q.Q.Q.Q.Q.W.Q.W.W.E.U.S.<X5 5 k.,.g.D.U.U.U.T.U.U.U.U.U.U.U.U.I.I.I.I.I.I.I.I.I.P.P.P.P.P.G.Z.e.<X7 $ ..k ,.q.C.S.D.D.D.G.G.q.> X UXUXUX",
"UXUXy D.Q.Q.Q.-X:XvX:X:X:X:X:XnXHX8 8 7 8 8 8 8 8 7 8 FXR D a.N.|.&X>X:X-X:X-X:X-X:X-X:X-X:X>X*X|.GXI 7 7 7 7 7 7 7 7 7 7 7 7 Y iXn.}.#X*X-X-X+X-X+X-X-X-X-X+X-XoXQ.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.H.<X4 9 Q :.e.G.E.W. X^ H C w k ,.V.I.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.G.M.U L D 1.V.P.~.E.5X4 8 P w k ,.V.P.E.Q.Q.Q.Q.W.Q.W.W.W.W.W.E.T.D.n.E X x.$.q.Z.P.U.U.U.U.U.U.U.U.I.U.I.U.I.I.I.I.P.I.P.P.I.P.P.P.P.G.S.C.d.^ X x.h $.9.C.S.D.D.D.G.P.e.w o UXUXUX",
"UXUXh P.Q.Q.Q.:XvX:X:X:X:X:X>XnXeX8 8 9 8 7 8 7 7 8 H SXA p.m.{.$X;X=X-X:X-X:X-X:X:X-X:X-X-X:X*X$XmXX.7 7 7 7 7 7 5 7 7 7 5 7 8 DXB.{..X*X+X-X-X-X-X-X+X+X-X-XoXQ.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.G.M.H 5 ) #.q.G.T.E.zXJ X.3 y v 0.Z.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.I.A.0X 8 Q =.e.P.T.E.aX# W s y x 7.Z.U.W.W.W.Q.W.W.Q.W.W.W.W.W.E.T.P.V.eXo U p.6.C.G.U.U.U.U.U.U.U.U.I.U.U.I.I.I.I.I.I.P.P.P.P.P.P.P.G.P.H.C.r.0X o.l #.9.g.Z.S.D.D.D.G.V.e UXUXUX",
"UXUXk U.Q.Q.Q.:X:X:X:X:X:X:X=XNXO.9 8 9 8 7 7 8 9 8 Y x.A a.M.}.&X;X-X:X-X:X-X:X-X-X-X-X:X-X-X>X%X}.HX7 7 7 5 7 7 7 7 7 7 7 7 7 qX4XN. X*X-X+X-X-X+X-X+X-X+XoXQ.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.'.[ $ } @.9.S.U.E.3X7 # ., h =.e.D.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.H.yX$ 5 ) #.q.D.T.T.uX +., f $.w.G.U.W.Q.Q.Q.Q.W.W.W.W.E.W.W.E.T.P.S.<X7 5 k.>.e.D.P.U.U.U.U.U.I.U.I.I.I.I.I.I.I.P.I.P.P.P.P.P.P.G.P.P.G.S.e.pX$ ` N @.6.g.Z.S.S.D.D.D.Z.y o UXUXUX",
"UXUXx E.Q.Q.!.:XvX:X:X:X:X:X>XNX' 7 9 9 8 8 8 7 7 8 X.} D a.N.|.#X-X-X:X:X-X:X-X-X:X-X:X-X-X-X=X&X|.gXL 7 7 7 7 7 5 7 5 7 7 5 5 Y iXn.|.#X*X+X+X+X-X+X-X+X).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.S.rXo # o.x 6.Z.U.T.aX$ 5 E w k <.C.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.G.2X9 $ } @.9.S.U.`.0X $ [ q j ,.V.P.~.Q.W.Q.Q.W.W.W.W.W.W.W.W.W.T.U.D.n.! o x.&.q.Z.P.I.U.U.P.U.U.I.I.I.I.I.I.I.P.I.P.P.P.P.P.P.P.P.G.G.G.S.V.1X8 Y S n 6.w.Z.S.D.D.D.D.Z.y o UXUXUX",
"UXUXz E.Q.Q./.:X:X:X:X:X:X:X>XMXY 9 9 9 7 8 7 7 8 7 SXQ D f.{.$X;X:X-X-X:X-X-X:X-X-X-X-X:X-X-X-X*X%XmXX.7 5 7 7 7 7 7 7 5 7 7 7 8 FXm.].%X@X-X+X-X+X-X+X).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.G.8X4 9Xx 6.C.I.U.aX# I B t v 7.S.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.I.'.E X x.x 7.Z.U.R... 8 P t x 7.Z.U.E.Q.W.W.Q.W.W.W.W.W.W.E.T.W.E.T.G.g.0XX T u.6.g.G.P.I.U.I.U.I.I.U.I.I.I.I.I.I.P.P.P.P.P.G.P.G.G.P.G.G.S.C.B.E H A x ,.w.C.S.S.S.D.D.F.u UXUXUX",
"UXUXx W.Q.Q./.:X:X:X:X-X:X:XvXjXI 8 7 8 7 7 8 7 8 G DXA p.m.}.%X=X=X:X:X-X:X-X:X-X:X-X-X+X-X-X-X=X#X}.HX7 7 7 7 7 7 7 7 5 7 7 5 5 9X4X'. X,X=X-X+X+X+X).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.I.7XG .c ,.V.P.U.iXX | p u =.q.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.F.0X qXz 6.C.P.[.^ U s u #.q.D.T.W.W.W.W.W.W.W.W.W.W.W.E.E.E.W.T.P.S.<X5 5 ) ,.e.S.P.P.P.U.U.I.U.I.I.I.I.I.P.P.P.P.P.P.G.P.P.P.P.G.G.G.D.C.r.9X 8 R z ,.q.C.S.S.S.S.S.S.a UXUXUX",
"UXUXx W.Q.Q._.:X:X:X:X:X:X:X;XJXH 7 8 7 8 8 7 8 7 I qXD a.M.|.#X>X:X-X-X-X-X-X:X-X-X-X-X:X-X-X:X=X*X|.GXI 7 5 7 5 7 5 5 7 5 7 7 7 U iXB.|.#X@X+X+X+X).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.].E ` S >.g.G.U.tX X .q j ,.V.P.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.H.yX# .c ,.V.P.}.P | p h =.e.G.T.W.W.Q.W.W.W.W.W.E.W.E.E.E.E.E.T.I.S.B.! o x.&.9.Z.P.U.U.U.P.I.P.P.I.P.P.P.P.P.P.P.P.P.P.G.G.G.G.G.G.G.D.S.e.rXX 5 ( j =.q.V.Z.S.S.S.G.S.a X UXUXUX",
"UXUXv Q.Q.Q.).:X:X:X:X:X:X-X>XPXG 7 7 8 7 7 8 7 7 _ X.D a.N.|.&X=X-X:X-X-X-X-X-X-X-X-X-X:X+X:X+X-X*X%XlXX.7 5 7 7 5 7 7 7 5 7 5 5 8 HXm.]..X@X-X+XoXQ.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.L... Y S =.e.H.Y.pX 4 ] e x 6.C.I.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.P.4X4 ` N 1.V.G.{.G +.w k ,.C.P.T.W.W.W.W.W.E.E.W.E.E.E.W.E.E.W.T.U.G.g.0XX U p.6.V.H.P.U.I.P.I.I.I.P.I.P.P.P.P.P.P.G.G.P.G.P.G.G.G.G.G.G.S.g.8X$ 4 ) h =.9.V.Z.S.S.S.D.S.l UXUXUX",
"UXUXv Q.Q.Q._.:X:X-X:X:X:X:X;XLX8 7 8 7 8 7 7 7 7 X...D m.{.$X*X:X-X-X-X-X:X-X-X-X-X:X-X+X:X+X:X-X*X%X}.HX7 7 7 7 7 5 7 5 7 5 7 7 5 c.4X'.|.*X*X).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.H.eX T S =.w.G.K.z. 7 E t @.0.S.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.7X8 W S >.w.G.kX8 # | e x 6.Z.I.E.W.W.W.W.W.W.W.E.W.E.E.E.E.E.T.E.T.P.C.<X7 4 k.>.w.Z.G.I.P.U.I.I.I.I.P.P.P.P.P.G.P.P.P.G.P.G.G.G.G.G.G.D.S.V.1X7 $ [ h #.9.g.Z.S.S.S.D.F.a UXUXUX",
"UXUXv Q.Q.Q.).:X:X:X:X:X:X-X;XKX8 7 8 7 7 8 7 8 7 c.) p.m.{.$X*X-X-X-X-X-X-X-X-X-X-X-X-X-X-X:X+X-X=X#X|.gXI 5 5 5 7 5 7 5 7 5 5 5 5 I iXn.}..X).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.P.rXX H A #.q.D.[.^ J P y $.w.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.{.H T S $.w.S.7X7 4 ! y @.9.Z.U.E.W.W.W.W.W.W.E.W.E.E.E.E.E.E.T.E.T.I.S.B.! o x.#.9.C.G.P.U.P.I.P.P.P.P.P.P.P.P.P.G.G.G.P.G.G.G.G.D.G.G.S.S.C.m.G # | a *.7.g.C.S.Z.S.D.S.j o UXUXUX",
"UXUXv Q.Q.Q.oX:X:X:X:X-X:X-XbXHX7 8 7 7 7 7 7 7 9 SXQ s.B.}.#X*X:X-X:X-X-X-X:X-X-X-X-X-X-X-X+X-X-X-X*X.XlXo.7 7 7 5 7 5 7 5 5 7 5 7 9 FXm.{.R.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.I.4X4 G D @.q.S.].E I B h >.V.P.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.].^ H D #.q.S.5X5 8 R u #.w.D.T.E.W.W.W.E.E.E.E.E.W.E.E.E.E.E.E.T.T.U.G.g.rXX I p.6.g.S.P.I.P.I.P.I.P.P.P.P.P.P.G.G.P.G.G.G.G.G.G.G.D.G.G.S.C.B.E X .u @.6.e.C.Z.Z.S.S.S.a o UXUXUX",
"UXUXv Q.Q.Q.).:X:X:X:X-X:X-XcXHX7 7 7 7 7 7 7 8 7 FXA s.M.|.#X=X-X-X:X-X-X-X-X-X-X-X-X-X-X-X+X-X-X-X=X#X}.HX7 7 7 5 5 7 5 7 5 7 5 5 7 c.4Xv.D.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.5X5 8 Q x 7.S.{.P ' g k ,.V.P.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.K.z. G D v q.Z.4X4 J A a =.e.G.T.E.E.W.E.W.E.E.E.E.E.E.E.E.T.E.T.T.T.U.P.Z.j.7 5 k.:.w.S.G.P.I.P.P.P.P.P.P.P.G.P.G.G.P.G.G.G.G.G.D.D.D.D.S.S.Z.v.[ o +.y @.6.w.C.Z.S.S.S.S.a UXUXUX",
"UXUXv W.Q.Q.).:X-X-X:X:X:X-XcXDX7 8 7 8 8 7 7 7 8 FXD a.M.|.#X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X=X,X|.fXH 7 5 5 7 5 5 7 5 5 7 7 5 I 8X6.Z.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.3X8 7 Q x 7.Z.{.P O.r z 6.C.I.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.H.rX 9 Q n 7.C.8X4 I B j =.g.G.T.E.W.W.W.E.W.E.W.E.E.E.T.E.E.T.T.T.T.T.P.S.B.] o c.&.7.V.D.P.P.P.P.P.P.G.P.G.P.G.P.G.G.G.G.D.G.G.D.G.D.S.G.S.C.v.z. 9Xt x ,.w.V.Z.Z.Z.S.F.f X UXUXUX",
"UXUXv W.Q.Q.oX:X:X-X:X-X:X-XcXSX7 9 7 7 7 7 7 7 8 FXF a.N.|.*X=X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-XOX-X-X*X XlXO.7 7 5 5 5 7 5 7 5 5 5 5 5 0X1.V.P.E.W.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.kXG 5 Q x 7.C.{.H +.t v 7.Z.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.I.tX 8 R v 7.C.<X$ T B j ,.g.P.T.E.E.W.E.E.E.E.E.E.E.T.E.T.E.T.T.T.T.U.U.D.e.rXX I p.<.e.S.G.P.P.G.P.P.P.G.P.G.G.G.P.G.G.G.G.G.D.D.D.D.D.D.S.S.b.9X c.t x ,.w.C.Z.Z.Z.S.S.a o UXUXUX",
"UXUXv W.Q.Q.).-X:X-X-X:X-X-XnXtX7 7 9 9 7 7 7 7 G SXD a.{. X;X-X-X-X-X-X-X-X-X-X+X-X-X+X+X-X+X+X-X-XOX=X#X}.DX7 5 5 7 5 7 5 5 5 5 5 5 ! u.w.S.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.{.J 5 ^ x 6.V.{.G qXy @.9.D.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.I.tXo 7 Q x 7.C.8X$ ! B z <.C.P.T.W.W.E.E.W.E.E.E.E.E.E.E.T.T.T.T.T.T.T.U.G.C.<X7 5 k.:.q.Z.G.P.P.P.P.G.G.P.G.P.G.G.G.G.G.D.D.D.D.D.D.D.D.S.S.Z.V.0X +.y z ,.w.g.Z.Z.Z.S.S.a UXUXUX",
"UX v !.Q.Q.oX-X-X:X-X:X:X>XnXtX7 9 7 7 7 9 7 7 G SXD m.{. X*X-X-X-X-X+X-X-X-X-X:X+X-X-X-X-X+X-XOXOX-X=X,X XsXI 5 7 5 7 5 5 5 5 7 5 7 k.6.Z.I.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.{.L 5 ^ z 6.V.kXG o O.y #.q.D.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.iXX 7 Q k 6.V.8X# ~ g x 6.Z.P.T.W.E.E.E.E.E.E.E.T.E.T.T.T.T.T.T.U.U.U.U.G.S.B.~ x.%.7.V.S.G.P.P.P.P.P.P.G.G.G.G.G.G.D.G.G.D.D.D.D.D.S.S.S.Z.V.tX o.i z >.w.g.Z.Z.Z.Z.S.f o UXUXUX",
"UXo v W.Q.Q.).:X:X:X-X-X-X>XnXwX7 7 7 7 7 7 7 7 H AXD B.{.%X*X-X-X-X-X+X-X-X-X+X-X+X+X-X-X+X+X:X-X-X-XOX*X%XlXo.5 7 5 5 5 5 7 5 5 X o pX1.e.P.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.}.U 5 ( x 6.g.N.8 X o.u $.w.G.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.8X# 5 ( x <.V.8X# ` g x 6.Z.I.T.E.E.W.E.E.E.E.E.T.E.T.T.T.T.T.T.T.T.U.T.P.D.e.0XX I p.,.e.S.G.P.G.G.P.G.G.G.G.G.D.G.D.G.D.D.D.D.D.S.D.S.S.S.S.e.rXX o.i z =.9.g.C.Z.Z.S.F.f UXUXUX",
"UXo v Q.Q.Q.).:X:X-X-X:X-X*XnXwX7 7 7 7 7 7 7 7 I 0XD m.{..X=X=X-X-X-X-X-X+X+X-X+X-X+X-X+X-X+X+X+X+X+X-X@X.X}.HX7 5 5 5 5 5 5 5 # ! u.q.D.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.[.E 5 ^ k <.V.3X8 # .u $.w.G.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.aX# 5 ( k <.g.8X# { g v 7.Z.I.E.E.E.E.E.E.E.E.T.T.T.T.T.T.U.T.U.U.U.U.U.P.G.V.<X7 5 k.:.q.C.D.P.G.P.G.G.G.G.G.G.G.D.G.D.D.D.S.D.D.S.S.D.S.S.Z.V.rXX o.i k >.9.V.Z.Z.Z.Z.S.a UXUXUX",
"UX v W.Q.Q.).-X-X:X:X-X-X;XnXeX7 7 7 7 7 7 7 7 J wXp.m.{.#X>X=X+X-X-X-X-X-X-X-X-X-X-X+X+X+X-X+X+X+X+X+X-X,X XfXI 5 5 5 5 5 5 $ 7 k.6.Z.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.[.E 4 ( k ,.e.N.8 X .h $.e.G.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.8X# 5 Q x 6.e.8X# { g v 7.Z.I.T.E.E.E.E.E.E.E.T.T.T.T.T.T.T.T.U.T.U.T.U.P.P.Z.d.~ x.%.7.g.S.G.G.G.G.G.G.G.G.G.D.D.D.D.D.D.D.S.D.S.S.S.S.S.Z.V.rXX X.i k >.9.g.C.C.Z.Z.S.u o UXUXUX",
"UX v W.Q.Q.oX-X:X-X:X-X-X>XzXAX7 7 7 7 7 7 7 7 G AXp.B.}.%X*X+X-X-X-X-X-X+X-X+X+X-X+X-X+X:X-X+X-X+X-X+X+X@X%XlXo.5 5 5 5 5 $ X pX1.V.G.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.}.P 5 ( k ,.V.3X8 X +.h =.e.P.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.iX# 7 E k <.V.8X# ] N @.9.Z.U.T.E.E.E.E.E.T.E.T.T.T.U.U.T.T.U.U.U.U.U.U.U.P.S.e.rXX L p.,.w.S.G.G.G.G.G.G.G.D.D.G.G.S.D.D.D.D.D.S.S.S.S.S.S.Z.V.tX O.r j =.9.g.C.C.C.Z.Z.a UXUXUX",
"UX v Q.Q.Q.oX-X-X:X+X:X-X*XnXSX7 7 7 7 7 7 7 7 G SXp.B.].%X>X+X-X+X-X-X-X-X-X+X-X+X-X+X-X+X+X+X-X+X+X+X+X@X#X}.HX7 5 5 5 4 ! u.q.D.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.}.K 5 ^ k <.e.N.G c.h >.e.G.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.yXX 7 Q k <.e.8X$ ! B @.7.S.P.T.E.E.E.T.T.T.T.T.T.T.T.T.U.U.T.U.U.U.U.U.U.I.D.V.<X7 5 ) =.9.C.S.G.G.G.G.G.D.G.D.G.D.D.D.D.S.S.S.S.S.S.S.S.S.Z.V.rX O.r k =.q.g.C.C.Z.Z.S.a o UXUXUX",
"UX n Q.Q.Q.oX-X:X-X-X-X-X=XcXSX7 7 7 7 7 7 7 7 8 DXp.f.}.%X*X-X-X-X-X-X-X+X+X-X+X+X:X+X+X+X-X+X+X-X+X+X+XOXXX XfXI 5 5 5 o 7 k.6.C.I.E.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.}.G 5 ( j <.e.{.G c.h =.e.P.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.uXo 8 R k ,.e.8X$ Y B @.7.S.U.T.E.E.T.T.T.T.T.T.T.T.T.U.U.U.U.U.U.U.U.I.U.P.G.g.y./ o x.%.6.e.S.D.G.G.G.D.D.D.G.D.S.D.S.D.S.D.S.S.S.S.S.S.Z.Z.V.0X +.t j =.9.g.C.C.C.Z.Z.f UXUXUX",
"UXo v Q.Q.Q.).-X-X-X-X-X:X=XcXSX7 7 5 7 5 7 7 7 7 FXp.B.].%XOX-X-XOX-XOX-X+X-X+X+X-X+X+X+X-X+X+X+X+X+X+X+X-X,X%XlXO.5 5 X o 9X1.e.P.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.kX8 7 Q k ,.g.N.J +.h =.e.P.~.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.yX 8 Q z ,.e.<X$ T S v 7.Z.P.T.E.T.E.T.T.T.T.T.T.U.U.T.U.U.U.U.U.U.U.U.I.I.P.F.g.x.X L p.,.w.Z.S.G.G.D.D.G.D.S.D.G.S.D.S.S.S.S.S.S.S.Z.S.Z.Z.A.x. qXr k =.q.g.g.C.C.Z.Z.f o UXUXUX",
"UX v W.Q.Q.).-X:X-X-X:X-X>XcXSX7 7 7 7 7 5 7 7 7 FXF m.].#X*X-X-X+X-X+X+X-X+X+X+X+X-X-X-X+X+X+X+X+X+X+X+XOX@X.X}.HX5 # ! u.w.S.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.3X7 9 R k ,.g.{.L | N =.e.G.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.`.0X 8 A k <.g.8X4 K S v 7.Z.P.U.E.T.T.T.T.T.T.T.U.U.U.U.U.U.U.U.U.P.U.I.U.U.P.D.g.4X9 4 } $.9.C.S.D.G.G.G.D.G.D.S.S.S.S.S.S.S.S.S.S.S.Z.S.S.C.v.z. 9Xq j =.9.g.g.g.Z.Z.Z.f UXUXUX",
"UX n W.Q.W.).-X-X-X-X-X-X=X$XHX5 7 7 7 7 7 7 5 7 SXp.m.{.%X@X=X+X-X+X-X-X+X+X+X-X+X+X+X+X+X+X+X+X+X+X+X+X+XOX,X XgXG 5 l.7.Z.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.6X5 G A k <.e.'.E W S =.w.G.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.R.z. J A z ,.e.4X4 8 Q x 6.Z.P.U.T.T.T.T.T.T.T.U.T.U.U.U.U.U.U.U.U.P.U.U.P.U.P.G.g.d.~ +.%.6.e.Z.D.D.D.S.D.S.S.G.S.D.S.S.S.S.S.S.Z.Z.S.Z.Z.C.n.` X O.e k =.9.g.g.C.C.Z.Z.h UXUXUX",
"UXo n Q.Q.Q.).-X-X-X-X-X-X=X&XKX7 5 7 5 5 7 7 7 5 ZXh.f.{..X*XOX-X+X-X+X+X-X+X-X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X,X XkXE X 0X1.g.P.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.8X$ J A k <.V.'.^ H D $.w.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W. X^ I Z x 6.g.2X7 5 ) x 6.C.P.U.T.T.T.U.T.U.T.U.U.U.U.U.I.U.I.U.P.U.P.U.P.P.P.G.S.w.rXX L p.>.q.Z.S.D.D.D.S.G.D.D.S.S.S.S.S.S.S.Z.Z.S.Z.Z.Z.C.M.L # | q k =.9.e.g.C.C.Z.Z.u UXUXUX",
"UX @.W.Q.Q.).-X-X-X-X-X-X=X#XKX7 7 7 7 7 7 5 5 7 | k.f.].%X*XOX+X-X+X-X+X+X+X-X-X+X+X+X+X+X+X+X+X+X+X+XOXOX+X@X.XJ.wXo W u.q.S.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.uXo L Z z <.V.L.} 7 Q #.w.H.U.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.|.L U B x ,.g.7X8 $ } k 6.V.G.U.T.T.T.T.U.U.U.U.U.U.U.U.U.U.U.P.U.P.U.P.U.U.P.G.D.g.<X9 4 } $.9.V.S.S.S.G.S.S.S.S.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.C.7X9 $ ` e z =.9.g.g.C.C.C.C.u o UXUXUX",
"UX v W.Q.Q.).-X-X-X-X-X-X=X,XPX8 5 7 5 5 7 5 7 5 Y pXd.{..X,X-X+X+X-X+X-X+X+X+X+X+X+X+X+X+X+X+X+XOX+XOX+X+X+XOX(.S.<X5 5 k.6.Z.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.`.rX U N z 6.V.L.z. 4 ) #.q.D.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.kX8 _ g x 6.g.7XV X O.k ,.V.G.U.U.T.T.U.T.T.U.U.U.U.U.U.I.U.I.U.P.U.P.P.P.P.P.P.D.V.d.` x.m 6.e.Z.S.D.S.D.S.S.S.S.S.S.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.V.<X5 4 ~ e k >.9.e.A.C.V.C.Z.u UXUXUX",
"UXo v W.Q.Q.).-X-X-X-X-X-X=X,XPXG 7 5 7 7 5 7 7 7 I rXa.n.|.,X=X-X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOX+X+X+XOXOXoXE.P.M.E X 0X1.V.G.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.R... ~ B x 6.C.F.0X # .v 9.S.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.5X4 { g x 6.g.N.H O.k ,.e.H.U.U.U.U.T.U.U.U.U.U.U.U.I.U.I.I.P.U.P.U.U.P.U.P.P.G.S.w.0XX L p.:.q.C.S.S.G.D.S.S.S.S.S.S.Z.S.S.S.Z.Z.Z.Z.Z.Z.V.8X$ 5 E e z >.9.e.V.g.C.C.A.u o UXUXUX",
"UX x Q.Q.Q.).-X-X-X-X-X-X=X,XjXH 7 5 7 7 5 5 5 5 G tXa.n.|.,X=X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOX+X+X+XOXOXQ.W.I.A.rXo W u.q.S.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W. XU { g x 7.Z.S.uXo x.n 6.Z.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.iXX O.i x 6.V.'.E ] M =.w.S.I.U.U.T.U.U.U.U.U.U.U.U.I.I.I.U.I.I.I.I.I.P.P.P.P.G.S.g.1X7 4 } $.7.g.Z.S.S.S.S.S.S.S.S.Z.Z.S.Z.Z.Z.Z.Z.Z.C.Z.g.rXX 7 R t x >.9.g.g.g.g.C.C.f o UXUXUX",
"UX v W.Q.Q.).-X-X-X-X-X+X-X*XjXI 5 7 5 7 5 7 7 7 7 DXs.M.[.,X*X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOX+X+XOX+X+X/.Q.W.T.H.<X5 5 k.6.Z.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.kX8 +.y v 7.Z.G.8X# W F <.C.P.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.`.0X X O.t v 7.V.L./ H D #.q.S.P.U.U.U.U.U.U.U.U.P.U.P.U.I.U.P.I.I.P.I.P.I.P.P.P.P.S.V.d.` o O.m 6.w.C.S.S.S.S.S.Z.S.Z.S.Z.S.Z.Z.Z.Z.Z.C.Z.C.v.z. G P t z >.9.w.g.g.Z.C.C.y UXUXUX",
"UXo v Q.Q.Q.).-X-X-X-X-X-X-X*XmX! 7 5 7 5 5 7 5 5 5 +.j.B.}.#XOX+X+X+X+X+X+X+X+X+X+X+X+XOX+X+XOXOX+X+XOXOX).Q.Q.W.E.G.M.! o 9X2.V.G.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.aX$ X O.y @.q.S.H.4X4 8 Q ,.V.P.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q..X/ # { y #.9.C.J.z. 5 ) @.7.Z.P.U.U.U.U.U.U.U.I.U.U.I.U.I.I.I.I.P.I.P.P.P.P.P.P.G.G.Z.q.0XX I D :.q.V.Z.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.C.C.M.P I B t x ,.q.g.g.g.Z.C.C.f o UXUXUX",
"UX x Q.Q.Q.).-X-X-XOX-X-X-X-XxX{ 5 7 5 5 7 5 5 5 7 ! 8XB.]..X*X+X+X+X+X+X+X+X+X+X+X+X+X+X+XOX+X+X+XOXOXoXQ.Q.Q.Q.E.I.A.0Xo Y u.9.D.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.yX $ | y #.q.S.G.5X5 4 z.#.w.H.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.kX8 4 ^ y #.q.Z.Z.tX X x.x 6.C.G.U.U.U.U.U.I.U.U.I.U.I.I.I.P.I.P.I.P.P.P.I.P.P.G.P.G.S.e.1X8 4 k.#.7.g.Z.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.C.C.C.C.V.2X5 _ p y x ,.9.g.g.g.g.C.C.y UXUXUX",
"UXo n Q.Q.Q.).-X-X-X-X-X-X-X,XzXx.5 7 7 7 5 5 5 5 7 J tXd.]. X@X+X+X+X+X+X+X+XOX+X+XOX+X+X+XOX+X+XOXOXOX!.Q.Q.Q.Q.W.T.D.<X5 5 k.8.Z.I.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q..X/ 4 ~ u #.w.D.P.kXV o c.*.q.S.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.aX$ 7 R u #.q.Z.S.yXX ..M ,.V.G.I.U.U.U.U.U.I.I.I.I.P.I.I.I.I.I.P.P.P.P.P.P.G.P.G.G.S.V.d.` O.m ,.w.V.S.S.S.Z.Z.S.Z.Z.Z.Z.C.Z.C.Z.C.C.C.V.yX# | w u x ,.9.g.g.g.g.C.C.f UXUXUX",
"UX v W.Q.Q.).OX-X-XOX-XOX-X*XcXSX5 5 5 5 5 7 7 5 5 7 FXa.n. X*X+X+X+X+X+X+X+X+XOXOX+XOXOX+X+XOXOX+X+X).Q.Q.Q.Q.Q.W.E.G.M.U X 0X1.V.G.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.kXV 7 R h =.e.G.I.].U ! u.7.Z.I.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.`.rX H Z h =.w.S.D.8X$ L D >.w.D.P.I.U.U.P.I.U.I.I.U.P.I.I.P.I.P.P.P.P.P.P.G.P.P.P.G.S.C.r.0XX I F :.q.g.Z.Z.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.V.A.0X +.q u @.<.q.g.g.g.Z.V.C.f UXUXUX",
"UXo v W.Q.Q.).-XOX-X-X+X-XOX*X%XKX7 5 7 5 7 5 5 7 5 5 qX1Xn. X#X@X+X+X+X+X+X+XOX+XOXOX+X+XOXOXOXOXOXOXQ.Q.Q.Q.Q.Q.Q.E.U.A.rXo Y u.q.S.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.hX4 J Z h :.V.H.U.K... 5 k.<.V.P.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W. X! W B h >.e.S.G.2X5 7 ) =.q.g.P.U.U.U.I.U.I.U.I.P.U.I.P.P.P.P.P.P.P.P.G.G.P.G.G.G.D.S.w.<X9 4 z.#.6.e.Z.S.Z.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.n.E # | q a @.6.q.g.g.g.g.V.C.f o UXUXUX",
"UX n W.Q.Q.).-XOX-X-XOX-X-X=X.XGX8 5 5 5 5 5 5 5 5 5 Y yXB.]..X@X+X+X+X+XOXOX+XOX+X+X+XOXOX+XOXOXOX!.Q.Q.Q.Q.Q.Q.Q.~.T.S.<X7 5 k.6.Z.I.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.~.0X W B j ,.V.G.U.H.rX o 9X1.b.G.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.6X5 | r j ,.g.S.H.{.J X 9X*.7.g.U.I.U.P.U.I.I.P.I.I.P.P.P.P.I.P.G.P.P.P.G.P.G.P.G.G.G.S.g.d./ O.n ,.q.V.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.C.V.<X5 5 ! w a #.6.w.g.g.g.Z.V.V.f UXUXUX",
"UX v W.Q.Q.).-X+X-X+X+X+X-X@X#XgXH 5 5 5 5 5 5 5 5 5 8 DXf.{..X@X+X+X+XOXOX+XOX+XOX+X+XOXOXOXOXOX).Q.Q.Q.Q.Q.Q.Q.Q.W.E.P.n.! o x.1.V.G.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.|.L | p z <.C.I.U.I.yX# U s.9.S.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.~.yXo o +.e k ,.V.G.G.'.! Y u.<.V.G.P.U.U.I.I.I.I.I.P.I.I.P.P.P.P.P.P.P.P.G.G.G.G.G.G.G.S.C.q.pXX L D =.9.V.C.Z.Z.Z.C.Z.Z.C.C.C.C.C.C.C.V.V.0XX 8 K e h $.6.w.e.V.e.V.V.V.y o UXUXUX",
"UXo v W.Q.Q.).OX-X+X+X-X+X+XOX,XmXY 5 7 5 7 5 5 5 5 5 5 9X1X'. X,XOXOX+X+X+X+XOXOXOXOXOXOXOXOXOXOXQ.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.A.rXX W u.q.S.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.aX4 o +.t x 6.Z.I.E.U.4X5 5 k.6.C.I.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.Q.|.E $ [ e x 6.C.G.P.L.z. 5 ) >.q.S.G.I.I.I.I.P.I.P.I.P.P.P.P.P.P.G.G.G.G.G.G.P.G.G.G.G.S.Z.e.j.8 4 } #.6.w.C.Z.Z.Z.Z.Z.C.C.C.C.C.C.V.C.V.M.U L s e k =.7.w.e.e.V.V.C.V.f UXUXUX",
"UX @.Q.Q.Q.).OX+X-X+X-X+X+X+X,XxX .5 5 5 5 5 5 5 5 5 5 T yXn.[..X@X+X+X+XOXOX+XOXOXOXOXOXOXOXOX/.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.S.<X5 5 k.6.C.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.(.pX $ [ t v 7.S.U.E.U.{.G o 9X1.b.P.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.E.hX4 7 R y @.7.Z.P.P.S.rXo o x.%.q.C.G.P.I.I.I.I.P.P.P.P.P.P.P.G.P.G.P.G.G.G.G.G.G.G.G.G.H.Z.V.d.` O.b ,.q.V.C.C.Z.Z.C.C.C.C.C.V.C.C.V.V.4X5 _ s t k :.7.w.e.e.e.V.V.V.y UXUXUX",
"UX n Q.Q.Q.).-X+X-X+X+X-X+X-X,XzXSX5 5 5 5 5 5 5 5 5 5 7 DXf.]..X@X+X+XOX+XOXOXOXOXOXOXOXOXOX).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.P.M.! o 9X1.V.G.E.W.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.}.J 7 E y #.q.S.U.W.U.].~ K h.9.S.`.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.Q.^.0X I C y #.9.S.P.I.S.8X4 T u.<.V.G.G.I.I.P.I.I.P.P.P.P.P.P.P.G.P.G.P.G.G.G.G.G.G.G.S.G.Z.C.7.pX# L p.$.7.e.C.C.C.C.C.C.C.C.C.C.V.C.V.b.0X +.> y x >.9.w.e.V.e.V.V.V.f o UXUXUX",
"UXo x Q.Q.Q.).+X+X+X+X+X-X+X+X@X%XHX7 5 5 5 5 5 5 5 5 5 5 +.2Xn..X@X@XOXOXOXOXOXOXOXOXOXOXOXOX!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.I.A.tXo W u.q.D.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.aX$ H Z h $.w.H.E.E.E.H.0X # 9X6.C.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.W.6Xd ' p a #.q.S.I.I.G.2X9 5 z.:.w.Z.G.P.I.P.P.P.P.P.P.P.G.P.P.P.G.G.G.G.G.G.G.D.G.G.D.D.S.Z.w.j.8 4 } @.6.w.V.C.Z.C.C.C.C.C.V.V.C.V.V.7XL $ { > y v ,.q.w.e.e.e.V.V.V.y UXUXUX",
"UX v W.Q.Q.).+X-X+X-X+X+X+X+X*X.XfXG 5 5 5 5 5 5 5 5 4 5 J uXn.[..X@XOXOXOXOXOXOXOXOXOXOXOX).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.D.<X7 5 k.6.C.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.%X~ ` p h >.V.P.E.W.E.G.yX# o ! i.b.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.W.W.`.yXX o x.q j >.e.D.I.I.G.M.P .4.9.C.G.P.I.P.I.P.P.P.P.P.P.G.G.G.G.G.G.G.G.G.D.G.D.D.G.D.S.Z.e.d.[ O.M >.q.g.V.C.C.C.C.V.C.C.C.V.V.V.yX# 7 P q h @.,.q.q.e.e.e.V.V.V.f o UXUXUX",
"UX v Q.Q.Q.).+X+X+X+X+X+X+X+X@X#XmXT 5 5 5 5 5 5 4 5 4 5 5 AX2X]. X@XOXOXOXOXOXOXOXOXOXOXoXQ.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.P.n.! o 9X1.V.G.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.aX4 o +.w k ,.V.P.E.Q.E.I.4X7 4 pX6.Z.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.E.kXJ 4 ~ q k ,.g.G.U.I.P.J. . 7 l.,.V.Z.G.P.P.P.P.P.G.P.P.G.G.P.G.G.G.G.G.G.G.G.D.D.D.S.G.S.S.V.9.0X# H D $.7.e.V.C.C.C.C.C.V.V.V.C.g.M.E H C q h #.<.q.w.e.e.e.V.V.V.y UXUXUX",
"UX x Q.Q.Q.).+X+X+X+X+X+X+X+X@X.XxX{ 5 5 5 5 5 5 5 5 5 5 4 T iXn.|.XX@XOXOXOXOXOXoXOXOXOX/.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.A.0XX Y u.q.S.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q..Xz. $ [ e x 6.Z.U.W.W.W.U.'.U ` i.V.P.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.W.W.`.iXX J Z t x 6.C.P.I.U.P.C.rXX X 9X;.q.Z.G.P.P.P.G.P.P.G.G.P.G.G.P.G.G.G.G.G.D.D.D.D.G.S.S.S.Z.C.w.j.9 4 } @.<.q.V.V.C.V.C.V.V.C.V.V.V.8X4 ` 3 e j $.6.q.w.e.e.e.e.b.V.f UXUXUX",
"UX n Q.Q.Q.).+X+X+X+X+X+X+X+XOX,X|.DX5 5 5 4 5 5 5 4 5 5 5 5 SXM.]..X@XOXOXOXOXoXOXOXOXoXQ.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.S.<X7 5 k.6.C.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.6X5 8 P y @.9.S.U.W.W.W.T.F.9X 4 pXq.S.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.Q.W.W.W.W.W.E.kXG _ s u #.9.C.P.I.U.P.S.<X5 G h.6.V.S.G.P.P.G.P.G.G.P.G.G.G.G.D.G.D.G.D.G.S.D.S.D.S.D.S.S.Z.e.d.[ o.m >.9.g.g.C.C.C.V.C.V.C.g.n./ X o.: t k =.6.q.e.w.b.e.e.V.b.u UXUXUX",
"UXo v Q.Q.Q._.OX+X+X+X+X+X+X+XOX@X.XGX8 5 5 5 5 4 5 4 5 5 4 4 T iX'. X@XOXoXOXOXOXOXOXoX/.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.P.n.! o x.1.V.G.E.W.Q.Q.Q.Q.Q.Q.Q.^.pX W B u $.w.H.T.W.Q.W.E.H.yX# U f.V.G.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.E.W.^.pXo X O., a $.q.S.P.U.U.I.S.M.H X 9X5.e.Z.G.G.G.P.P.G.P.G.G.G.G.G.G.G.G.S.G.D.G.S.D.D.D.S.S.S.Z.V.7.0X# L D $.7.w.A.g.C.V.V.g.V.V.g.8X5 5 ! > y x ,.7.w.w.w.e.e.V.V.V.y o UXUXUX",
"UX v Q.Q.Q.).+X+X+X+X+X+X+X+XOXOX.XgXL 5 4 5 5 5 5 5 4 4 5 5 5 SXM.[..X@XOXoXOXOXOXOX).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.I.A.rXX Y s.q.D.U.W.Q.Q.Q.Q.Q.Q.Q.hX7 O.w h >.V.G.E.W.Q.Q.E.P.2X9 $ 0X0.S.T.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.W.W.E.W.W.E.hX7 5 ! q j >.e.D.I.U.T.P.S.v... G l.7.V.S.G.P.P.G.G.G.G.G.G.G.G.S.G.D.G.D.G.S.D.D.S.S.S.S.S.Z.V.w.j.8 4 } @.,.q.g.V.C.C.V.V.V.V.M.` H V q a v ,.7.q.e.e.w.e.e.b.V.y UXUXUX",
"UX x W.Q.Q._.+XOX+X+XOX+X+XOXOX@X.XxX .5 5 4 5 4 4 5 5 5 4 5 4 I iX]. XXX@XOXOXOXOXoX!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.H.<X5 5 k.<.Z.Y.E.Q.Q.Q.Q.Q.W.$X[ 4 ` q z <.V.U.E.Q.Q.Q.E.I.].` H 1XC.G.~.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.E.E.|.} I C e x <.g.G.I.U.U.I.G.C.rXX X x.5.q.C.G.G.G.P.G.G.G.G.G.G.G.G.G.S.G.S.S.D.D.S.S.S.S.S.S.Z.Z.w.d.[ O.b =.9.g.g.g.V.V.V.V.V.yX$ { 3 q h #.,.q.w.w.w.e.e.e.e.b.f UXUXUX",
"UXo v W.W.W.).OX+X+X+X+XOX+X+XOX=X,X|.DX5 5 5 4 5 4 5 4 5 4 4 5 5 wX7X[..X@XoXOXOXoX).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.T.P.n.! o 9X>.V.G.E.W.Q.Q.Q.Q.!.iX$ G P t v 7.Z.U.W.!.Q.Q.W.U.F.rXX o .B.S.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.W.W.E.W.E.W.(.yX# O.< u @.7.C.G.I.T.U.I.G.Z.<X5 9 k.6.V.S.G.G.G.G.G.D.G.G.G.S.G.S.D.S.G.S.D.S.S.S.S.S.S.S.Z.Z.e.7.0X# K D #.7.e.g.g.V.V.V.V.2XK X o.* e k =.6.q.w.w.e.w.e.e.e.V.y UXUXUX",
"UX v W.Q.Q.).+X+XOXOX+X+XOXOX+XOXXX.XGXV 5 4 5 4 5 4 5 4 5 5 4 4 G DX'. XXX@XOXOXoXQ.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.Z.0XX U s.9.S.T.W.Q.Q.Q.Q.kXK { p u #.q.D.T.W.Q.Q.Q.W.E.D.4X5 4 0XV.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.E.W.W.W.E.E.T.6X8 4 [ q a $.q.Z.P.I.U.U.I.P.S.M.U { i.q.C.S.G.G.G.G.G.G.D.D.G.D.G.S.G.S.S.S.S.S.S.S.S.S.S.Z.Z.V.q.j.8 4 } x ,.9.g.g.V.V.g.v.rXX 8 U > y x =.7.q.q.w.w.w.w.e.V.e.y UXUXUX",
"UX n Q.Q.Q.).OX+X+XOX+XOXOX+XOXOX@X.X6X] 5 4 4 5 4 5 4 5 5 4 4 4 4 ' hX[..X@XoXOX_.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.U.D.<X7 5 k.6.C.I.W.Q.Q.Q.XX0XX # o.q h >.e.P.E.W.Q.Q.Q.Q.E.P.M.E J <XZ.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.W.W.E.E.W.W.}.[ H Z q z ,.g.D.P.U.I.U.I.P.D.r.0Xo $ 9X2.e.Z.S.G.G.G.D.G.G.D.S.G.S.D.D.S.S.S.S.S.S.S.Z.S.Z.S.Z.V.q.d.[ O.M =.7.e.g.V.V.b.4X7 ! s , u x ,.7.q.w.w.w.w.w.e.e.b.f UXUXUX",
"UXo v Q.Q.Q._.OXOX+X+XOX+XOXOX+XOX@X#X}.SX5 5 5 4 5 4 5 4 4 4 5 4 5 5 AX3X[.XXXXoXQ.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.P.n.~ 9X1.V.H.E.W.Q.~.aX4 8 P e k 6.C.P.E.Q.Q.Q.Q.W.W.U.F.rXX [ m.S.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.Q.W.W.W.W.E.W.W.W.E.E..Xx.X X.< y x 6.g.D.I.I.U.I.U.I.H.V.<X4 8 <X9.V.S.S.G.G.G.S.D.D.D.D.S.D.D.S.S.S.S.S.Z.S.S.S.Z.Z.Z.C.e.6.pX# K D *.6.w.g.g.g.2XW X O.* q h #.,.7.q.w.q.w.w.e.w.e.b.f UXUXUX",
"UXo v W.Q.Q./.+XOX+XOXOXOX+XOXOXOX@X@X XGX8 4 4 4 5 5 4 4 5 4 5 5 4 4 G GX]..XXX(.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.A.yXX T s.q.F.U.W.W.6XJ ] s t v 7.S.U.W.Q.Q.Q.Q.Q.W.T.D.4X7 X z.n.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.Q.W.W.W.W.W.W.E.W.E.W.E.^.yX$ 5 ~ , u #.q.Z.G.P.U.I.I.I.I.G.Z.m.L ` a.w.C.Z.H.G.D.D.D.D.S.D.S.D.S.S.S.S.S.Z.S.Z.S.S.Z.Z.Z.C.g.q.j.8 4 } x ,.9.e.e.n.z.X 5 W : e k $.6.9.q.q.q.w.w.w.e.e.e.y UXUXUX",
"UX v Q.Q.Q._.+X+X+XOX+XOXOXOXOXOXOX@X.X6XW 5 5 5 4 4 4 4 4 4 4 4 4 4 4 Y iX[..XE.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.G.<X7 5 k.6.C.I.E.|... # .> h =.w.H.E.W.Q.Q.Q.Q.Q.W.T.P.n.[ $ 0X'.P.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.E.W.E.E.E.W.`.aX5 I s w k >.w.S.P.U.I.U.I.I.I.G.S.y.9X # x.t.e.Z.S.D.D.D.D.D.D.S.S.S.S.S.S.S.S.S.Z.Z.Z.Z.Z.Z.Z.C.g.e.d.[ .b $.7.w.b.yX4 Y s > y x :.6.q.q.q.w.q.w.w.e.e.b.y o UXUXUX",
"UX v Q.Q.Q._.+XOXOXOXOXOXOXOXOXOXOX@X.X}.SX5 4 4 4 4 5 5 4 5 4 4 4 4 4 4 | hXK.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.G.n.! o 9X1.e.G.R.rX# 8 P q k ,.V.P.E.W.Q.Q.Q.Q.Q.Q.E.U.Z.rX# 4 0XL.P.E.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.W.W.E.W.W.W.E.W.`.aXV X O.> t x 6.V.S.P.I.I.I.I.I.I.P.S.e.<X4 4 pX0.e.Z.S.D.D.D.D.S.D.S.S.S.S.Z.S.Z.Z.S.S.Z.Z.Z.Z.Z.C.g.e.6.x.# H D *.6.0.8Xd X .; q h @.,.7.q.q.q.q.q.w.w.w.e.b.y UXUXUX",
"UXo v Q.Q.Q._.OX+XOXOXOXOXOXOXOXOXOX@X.X[.GXV 4 5 4 4 5 4 4 4 4 4 4 4 4 4 5 9X7XH.E.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.Z.0XX U u.q.L.iX$ ` 3 t n 7.Z.U.W.W.Q.Q.Q.Q.Q.Q.W.T.S.2XG 5 yXL.U.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.Q.W.W.E.W.W.W.W.E.E.E.E.T.hXG 7 U > a #.9.C.G.I.U.I.I.I.I.I.P.D.V.m.U 9 8Xr.V.S.S.S.S.S.S.S.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.C.g.9.j.d 4 } x ,.<XL 7 U * e h $.<.9.q.q.q.q.q.q.w.w.w.V.y UXUXUX",
"UX x Q.Q.Q._.+XOXOXOXOXOXOXOXOXOXOXoXXX.X6X[ 5 4 5 4 4 5 4 4 4 4 4 4 4 4 4 $ .M.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.H.<X7 5 k.8.iX5 $ | > h =.w.H.E.W.Q.Q.Q.Q.Q.Q.Q.Q.T.P.b.x. 4 0X].U.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.W.W.W.E.W.E.W.E.W.`.hXJ { 3 q k >.w.S.P.I.I.I.I.I.I.P.P.G.Z.r.0XX G 8Xq.V.Z.S.S.S.S.S.S.S.Z.S.S.Z.S.Z.Z.Z.Z.Z.Z.C.Z.C.C.g.w.i.[ O.M j.! ] 3 > y x =.6.7.q.q.q.q.q.q.w.w.e.e.f UXUXUX",
"UXo v W.Q.Q._.+XOXOXOXOXOXOXOXoXOXOXOXXX.X{.DX5 4 4 4 4 4 4 4 4 4 4 4 5 4 4 o X z.N.G.E.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.P.n.~ o x.pX7 H C q k ,.V.P.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.Z.<X7 $ 0X{.U.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.Q.W.W.W.W.W.W.W.E.E.E.W.^.iX7 4 ` : t v 6.V.D.P.I.I.P.I.I.P.P.P.G.Z.w.<X7 J 8Xw.C.Z.S.S.S.S.S.S.S.Z.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.g.e.6.0X# K z.] # | & q f v ,.7.q.q.q.q.q.q.q.w.w.e.w.y UXUXUX",
"UXo v Q.Q.Q._.OXOXOXOXOXOXOXOXOX@X+XOXoXXX[.sXI 4 5 4 4 4 4 4 4 4 4 4 4 4 # # .3XP.`.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.Z.rXX I 7 o O.< t v 7.Z.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.T.G.n.[ # [ 5XY.T.Q.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.E.W.W.W.E.W.E.E.|.rX4 Y s , h #.9.Z.G.P.I.I.I.I.I.P.P.P.P.S.V.t.| H 8Xr.C.Z.Z.S.S.S.Z.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.Z.g.e.9.j.9 4 Y o H K * e j #.,.7.q.7.q.9.q.q.q.q.w.w.e.y UXUXUX",
"UX v W.Q.Q._.OXOXOXOXoXOXOXoXOXOXoX+XoXXX X{.eX4 4 4 4 4 4 4 4 4 4 4 4 4 o . [ 5XP.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.D.<X7 X 8 E > h =.w.D.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.P.g.8X4 o J yX[.T.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.W.W.E.E.E.E.E.`.6X..# $ | ; e k ,.w.S.G.I.P.I.I.P.P.P.P.P.P.G.C.q.8X$ 8 0Xv.V.C.S.S.Z.S.S.Z.Z.Z.Z.Z.Z.C.C.C.Z.C.C.C.C.g.g.q.i.} X X o.- > y x >.6.7.q.q.q.q.q.q.q.q.q.w.b.y UXUXUX",
"UX v W.Q.Q._.OXoXOXOXoXOXOXOXoXOXOXOXOXoX.X[.fXG 4 4 4 4 4 4 4 4 4 4 $ $ o T aXH.E.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.P.n.~ | 3 e z <.V.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.D.B.] $ z.5XR.E.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.W.E.W.W.E.E.E.|.iX8 I V > u @.7.C.S.P.I.I.I.P.P.P.P.P.P.G.G.S.e.f.! 5 9XB.V.C.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.V.V.g.w.<.x.# 8 U * q h @.,.6.q.q.q.9.q.9.q.q.q.q.w.w.i UXUXUX",
"UX v Q.Q.Q._.OXOXOXOXOXoXOXOXOXOXoXoXOXXXXX X3Xo.4 4 4 4 4 4 4 4 4 4 4 X 9 yXK.T.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.Y.Z.rXX 4 ` > y @.q.S.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.G.A.rX$ d rX6XR.E.Q.Q.Q.Q.Q.W.Q.Q.W.W.W.W.W.W.E.W.W.E.~.}.iXU # # X.* w k :.q.S.G.I.P.P.P.P.P.P.G.P.P.P.G.S.V.7.pX# # .2Xg.C.Z.Z.Z.Z.Z.C.Z.C.Z.C.C.C.C.C.C.C.V.C.V.e.7.j.8 { 2 : t k $.,.7.9.q.q.q.7.q.9.q.q.q.w.w.y X UXUXUX",
"UX n W.Q.W._.OXOXOXOXoXOXOXOXoXoXoXOXoXoXXX.XL.GX7 4 4 4 4 4 4 $ 4 4 4 G N.G.T.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.G.4X7 _ s q j ,.e.G.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.S.B.! X d pXhX|.`.E.Q.Q.Q.Q.W.W.W.W.W.W.E.W.E. X6XiXP # I C > y v <.V.S.P.P.I.P.P.I.P.P.P.P.P.G.G.G.C.q.j.H X rXq.e.V.Z.Z.Z.Z.Z.C.Z.C.C.C.V.C.V.C.V.C.V.V.e.9.i.| 5 ~ & , u x :.6.9.q.q.q.7.q.9.9.q.q.q.w.w.y UXUXUX",
"UXX v Q.Q.W._.oXoXOXOXOXOXoXoXOXOXOXoXOX@XoX.X[.5X[ 4 4 4 4 4 $ 4 4 $ X G 2XV.P.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.P.n.] $ | : t x 6.Z.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.G.e.rX4 4 P rXaXkX|..X`.~.`.`.(..X XkX5XiX( 7 o $ o.* q j :.q.Z.G.G.P.P.P.P.P.P.P.P.G.G.P.G.G.S.e.0.0XX X pX,.q.g.V.Z.Z.Z.C.C.C.C.C.C.C.C.C.V.C.V.C.V.g.w.6.pX# ] 6 * e h #.,.7.7.q.7.9.q.7.q.q.7.q.q.w.w.y UXUXUX",
"UX x Q.Q.Q._.OXOXoXOXOXOXOXoXOXOXoXOXoXOXoXXX.X].DX9 4 4 4 $ 4 4 4 $ 8 j.q.S.Y.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.I.A.rXX W V q h =.w.H.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.I.S.d... $ 8 P / z.rXrX0Xz.) E 8 $ o Y V : t x 6.e.S.G.P.P.P.P.P.P.G.P.G.P.P.P.G.G.S.C.q.j.J X x.#.,.q.g.C.Z.C.C.C.C.C.C.C.C.C.V.C.V.V.V.V.V.w.7.j.G 5 ~ + , y z =.<.7.q.q.7.9.q.7.9.9.9.q.q.w.w.y UXUXUX",
"UX v W.Q.Q._.OXOXoXOXoXoXoXOXoXoXOXoXOXOXoXoX.X[.5X{ 4 $ 4 4 4 $ 4 # 9 h.,.V.G.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.D.4X7 $ { * t x 6.C.P.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.H.V.k.7 5 { * q j $.q.C.G.P.I.P.P.P.P.P.P.P.G.G.G.G.G.G.D.Z.w.8.0X# X x.k =.9.g.V.Z.C.Z.C.C.C.C.C.V.C.V.V.V.V.V.V.V.e.9.5. . ' 6 * e j v ,.7.q.7.7.q.q.7.9.9.q.9.9.q.q.w.i UXUXUX",
"UXo v Q.Q.Q._.oXOXOXOXOXOXoXoXOXoXOXOXoXoXoXoX.XR.'.DX9 4 4 4 4 4 4 o G D #.q.D.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.P.n.` _ s > a $.q.H.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.U.Z.t.x.X o | 3 > y x <.e.S.G.P.P.P.P.P.P.G.P.P.G.G.G.G.G.G.D.Z.V.7.j.K X O.a @.6.w.V.C.C.C.C.C.C.V.V.C.V.V.V.V.V.V.V.g.e.q.<.z.# 5 ~ + > y k $.<.7.7.9.q.7.q.7.7.7.9.9.9.q.q.w.i UXUXUX",
"UX x Q.Q.Q._.OXoXOXoXoXOXoXOXoXOXoXoXoXOXOX).XX.XK.5X{ 4 4 $ 4 4 # 8 Q v 9.Z.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.Z.rXX 4 | : t x 6.V.P.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.G.V.j.I G T * q j :.q.C.D.P.P.P.G.P.P.G.P.G.P.G.G.G.G.G.G.D.D.C.w.<.9X# X O.y v <.q.V.V.C.C.C.V.C.V.C.V.C.V.A.V.V.g.V.V.e.w.6.j.G ` 0 * w h v ,.6.7.q.q.9.9.7.7.q.q.0.9.9.q.q.w.y UXUXUX",
"UXo n Q.Q.Q._.OXoXOXoXOXoXOXoXoXoXOXoXOXoXoXoX@X(.R.'.uXG 4 $ 4 $ X 8 Q x 6.Z.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.H.2X8 ' 6 > a $.w.S.U.Q.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.I.S.0.pX4 $ .; > y v 6.e.S.G.G.G.P.P.P.G.G.G.P.G.G.G.G.G.G.D.D.D.Z.g.7.a.W X O.y z ,.q.g.Z.Z.g.Z.g.Z.Z.g.Z.g.g.V.V.g.g.g.V.g.w.9.5. . 8 U % > y k $.,.6.9.9.9.9.9.9.6.9.9.9.9.9.9.q.w.t X UXUXUX",
"UX v W.Q.Q./.oXOXoXOXoXOXoXoXOXoXOXoXoXoXoXoXOX@X.X[.M.AX4 4 $ $ 8 A x 6.Z.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.G.n.` G U * t x 2.V.P.T.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.G.V.i. .X ` d * e k :.q.Z.G.G.P.P.P.G.P.G.P.G.P.G.G.G.G.G.D.G.D.D.S.C.w.,.z.5 X O.e z =.q.g.Z.g.Z.g.Z.g.Z.g.g.g.Z.V.V.g.V.V.g.g.e.q.,.x.$ X X.- * q h v >.6.9.9.9.9.9.9.9.9.7.9.6.9.9.q.q.q.t UXUXUX",
"UX v Q.Q.Q._.oXoXoXOXoXoXOXoXOXoXoXoXoXOXoXoXoX).XX[.'.aXU 4 $ # G R x 6.C.U.~.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.U.Z.rXX # o.; q h =.q.D.U.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.S.q.j.U H P * > h @.6.V.S.G.P.P.G.P.P.G.P.G.G.G.G.G.G.G.D.D.D.D.D.S.Z.g.9.4.O.o X O.e z >.q.g.g.g.Z.Z.g.Z.g.g.Z.g.Z.V.g.g.V.g.g.g.e.w.6.j.8 I J & > y z #.<.6.9.9.9.9.9.9.9.6.9.9.7.9.9.9.q.q.t X UXUXUX",
"UX v W.Q.Q._.OXOXoXoXOXOXoXoXoXOXoXoXOXoXoXoXoXoXXX.XK.B.DX5 4 o 8 R x 6.C.U.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.G.2X8 I K : t v 6.C.I.E.W.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.P.C.6.z.7 4 | = > t x ,.w.Z.G.G.P.P.P.P.G.P.G.G.G.G.G.G.D.D.G.G.D.D.D.D.Z.C.w.,.k.G X O.e z =.q.g.g.Z.g.g.Z.g.g.g.g.g.g.g.V.g.g.e.g.g.e.w.9.5. . 4 | + * q h @.>.6.6.9.9.9.9.9.6.6.9.7.6.9.9.9.9.9.q.t UXUXUX",
"UXo v W.W.W._.oXoXOXoXOXoXoXoXOXoXoXoXoXoXoXoXoXoXoXXXR.'.2Xc.$ 8 R x 6.C.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.P.n.[ 5 { * q j =.w.G.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.D.w.5.0X$ # X.2 * q j =.q.C.S.G.G.P.G.G.G.P.G.G.G.G.G.G.G.D.G.D.G.D.S.S.D.S.Z.g.9.=.x.$ X O.y z >.q.g.g.g.Z.g.Z.Z.g.g.g.g.g.g.V.e.V.V.e.e.e.w.9.,.pX# X | 0 & , y k =.,.6.9.9.9.9.9.9.7.7.6.6.9.6.7.9.9.r.q.t UXUXUX",
"UX v Q.Q.Q._.oXoXoXoXoXoXoXoXoXOXoXoXoXoXoXoX).oXoXXX.XK.n.8XH 8 R x 6.C.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.Z.rXX # o.2 > y #.7.S.P.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.S.q.u.o.# X | 6 * q h #.6.e.Z.G.G.P.G.P.P.G.G.G.G.G.G.G.D.D.G.D.D.S.D.D.D.S.S.Z.C.w.,.u. .X X .e j >.9.g.g.Z.g.g.g.g.g.Z.g.g.g.V.g.g.e.e.e.V.V.w.w.6.h.G I K + : e j #.>.6.6.9.9.9.6.9.6.9.6.9.7.7.6.9.9.9.9.q.t UXUXUX",
"UXo n W.Q.Q._.oXOXoXoXoXoXOXoXoXoXoXoXoXoXoXoXoXoXoXXX(..XL.B.pX4 8 A x 6.C.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.S.2X9 _ V * e k ,.g.G.T.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.P.Z.6.p.` o W K & > y x ,.w.C.G.G.P.P.P.G.G.G.G.G.G.G.G.D.D.D.D.D.D.D.S.S.S.D.S.S.C.g.9.=.l.I X o.e z =.9.g.g.g.g.Z.g.g.C.g.g.g.C.g.g.e.e.e.e.e.e.e.w.7.5. . 5 ` + * q u x =.<.7.7.9.9.9.9.6.9.6.9.6.7.6.6.9.7.9.q.q.t o UXUXUX",
"UX v Q.Q.Q._.oXoXoXOXoXoXoXoXoXoXoXoXoXoXoXoXoXoX).).oX(.[.v.i. .o V R x 6.Z.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.P.n.[ 8 ] * q h =.q.S.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.G.g.>.h._ o W P % : t k =.q.V.S.G.G.G.G.P.G.G.G.G.G.G.D.D.D.G.D.D.D.S.D.S.D.S.S.S.Z.Z.C.w.6.#.z.5 X O.t z =.9.g.g.g.Z.C.g.g.C.g.g.g.g.g.e.V.V.e.g.e.e.e.w.9.,.0X# # X.2 & > t k #.,.6.7.9.9.6.9.6.9.6.9.9.6.6.7.6.6.7.9.9.9.t UXUXUX",
"UX v Q.Q.Q./.oXoXOXOXoXoXoXoXoXoXoXoX).oXoXoXoX).oXoXoXXX^.F.9.l.! 8 R x 6.Z.I.~.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.Z.rXX 4 o.; > y v 6.C.I.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.S.w.1.k.T I W % * e j $.9.g.S.G.G.G.G.G.G.G.G.G.G.G.G.D.D.G.S.D.S.D.S.S.S.S.S.S.S.S.Z.Z.g.q.1.-.O.$ X o.e z =.9.g.g.g.C.g.g.g.g.C.g.g.g.V.e.e.e.e.e.e.e.e.w.q.6.j.G X ` d + : t h v >.<.6.7.9.9.7.7.6.9.6.7.6.6.6.7.7.6.9.7.9.q.r o UXUXUX",
"UX v W.Q.Q./.oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX).).XXH.V.6.k.L 8 R x 6.C.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.U.G.2X8 $ o.2 * t z ,.e.H.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.P.S.q.$.k.U I ! & * q j #.6.e.Z.D.G.P.G.G.G.P.G.G.G.G.G.D.G.D.D.D.D.S.D.S.S.S.S.S.S.S.S.S.Z.C.w.6.=.F .# X O.e z =.9.g.g.C.g.g.g.g.g.g.g.g.g.e.e.g.e.e.g.e.w.w.w.q.6.5. . _ J + * q y x $.<.6.7.9.7.7.7.6.9.7.6.6.6.6.6.6.6.6.7.9.9.q.e o UXUXUX",
"UXo v Q.Q.Q./.OXoXoXoXoXoXoXoXoXoXoXoX).oXoXoXoXoX).oXoXoX(.U.D.w.,.z.9 8 A x 6.C.I.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.P.'.[ # { 0 * q j =.w.S.U.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.P.C.9.$.k.W T U % * q a @.<.w.C.S.G.G.G.P.G.G.G.G.G.G.D.D.D.D.G.S.D.S.D.S.S.S.S.S.S.S.S.S.Z.Z.Z.g.w.6.#.D { o X O.q z =.9.e.g.g.g.g.g.g.g.g.g.g.g.V.e.e.e.e.e.e.e.e.w.q.9.>.z.$ K I @ * , y k #.,.6.7.7.7.6.9.7.7.7.6.6.6.6.6.6.6.6.7.6.9.9.9.t o UXUXUX",
"UX v Q.Q.Q./.oXoXoXoXoXoXoXoXoXoXoXoXoXoX).oX).oXoX).oX).!.E.I.Z.q.;.x.5 V R x 6.C.I.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.A.rX# X ] V * q f #.8.C.I.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.T.P.V.6.#.) { # X ' U % * q a @.,.w.C.D.G.G.P.G.G.G.G.G.G.D.G.S.G.D.G.S.D.S.G.S.S.S.S.S.S.S.Z.S.Z.S.Z.Z.C.g.9.,.v Q Y o X .e j =.9.e.g.g.g.g.C.g.g.g.g.e.g.e.g.e.e.e.e.w.e.e.w.q.9.,.j.G 8 ' + & : t j @.:.,.6.7.7.7.9.6.9.6.6.6.6.6.6.6.6.6.6.6.6.6.9.q.r UXUXUX",
"UX v W.Q.Q./.oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX).).).oX).).Q.W.E.P.C.7.4.9X7 8 R x 6.C.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.D.2X9 # ' V & , u v 6.C.G.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.U.H.V.6.@.D x.4 4 | V + * w u v ,.q.g.S.G.G.P.G.G.G.G.G.G.D.D.G.G.S.G.S.S.D.D.S.S.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.C.A.e.7.>.z ) ! o X x.e j >.9.w.g.g.g.g.g.g.g.e.e.e.g.e.e.e.e.e.e.w.e.w.e.w.q.6.4. . G ` # + > e h v =.,.6.7.7.7.7.6.9.9.6.6.6.6.6.6.6.6.6.6.6.6.9.0.9.t o UXUXUX",
"UXo x !.Q.Q./.oXoXoXoXoXoXoXoXoXoXoX).oX).).oXoXoXoX).oX_.Q.W.W.E.G.g.6.-.z.7 G A z 6.C.I.~.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.P.n.[ X ` V % > y x <.V.S.U.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.U.D.g.6.@.N x.G 8 | 0 + * q h v ,.q.g.D.G.G.G.G.G.G.G.G.G.G.D.D.D.D.D.D.S.G.S.S.S.S.S.S.S.S.Z.Z.Z.S.Z.Z.Z.Z.Z.C.V.w.6.$.k Q _ o X o.e z =.7.e.g.g.g.g.e.g.e.e.g.e.e.e.e.e.w.w.w.e.w.w.w.q.q.6.,.z.$ G _ @ % : w f x $.,.6.7.7.7.7.7.6.6.6.7.6.6.6.6.6.6.<.6.<.6.6.7.9.9.r UXUXUX",
"UXo v Q.Q.Q./.oXoXoXoXoXoXoX).oXoX).oX).oXoX).oXoX).oXoX!.Q.Q.W.W.U.D.g.<.M .8 8 R x 6.C.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.Z.rXX # ` V % > t x ,.e.F.U.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.E.U.S.g.6.#.l ( ` $ $ ' U = % : e h v ,.q.V.Z.G.G.P.G.G.G.G.G.G.G.S.G.D.G.S.D.D.G.S.S.S.S.S.S.S.S.S.S.S.Z.Z.Z.Z.C.Z.C.Z.g.g.w.6.#.j Q ! X X o.e k =.7.w.g.g.g.g.g.g.g.g.e.e.e.e.e.e.w.e.w.e.w.w.w.w.q.7.<.h.G J ` = + : q y z #.,.6.6.7.7.7.6.7.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.7.7.9.e o UXUXUX",
"UX v W.Q.Q./.oXoXoX).oXoXoX).oXoX).oXoXoX).oX).oXoX).).Q.Q.Q.Q.W.E.U.D.e.<.m z.L V R x 6.Z.I.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.T.H.2X8 4 X.d & > t z >.w.S.I.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.T.U.D.V.7.#.j S O.I X X H X.6 @ * > t j #.<.q.C.S.D.G.P.G.G.G.G.G.G.D.D.G.D.D.S.D.S.S.S.S.S.S.S.S.S.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.Z.C.Z.V.e.q.,.#.h R o.# o x.e j =.7.w.e.g.g.g.e.e.e.e.e.e.e.e.e.w.e.e.w.w.w.w.w.w.q.7.6.5. . X Y W @ + : q u z @.,.<.6.7.7.7.7.7.6.6.7.6.6.6.6.6.6.<.<.<.<.6.<.6.6.9.9.t o UXUXUX",
"UX v Q.Q.Q./.oXoXoXoXoXoX).oXoX).).oXoX).oX).oX).oX)./.Q.Q.Q.Q.W.W.E.U.S.w.,.n ) ] X G A x 6.C.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.P.n.[ G | 1 * > t x >.w.Z.P.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.W.E.E.T.U.D.g.9.=.x u A O.I # # H X.J + & * q y z $.6.w.C.S.D.G.G.G.G.G.D.G.G.G.D.D.D.D.S.D.D.S.D.S.S.S.S.S.S.S.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.g.e.9.,.@.h B x.7 X o.e k =.7.w.e.g.g.e.e.e.e.e.e.e.e.e.w.e.e.w.w.w.w.w.w.q.q.9.6.>.pX$ $ | G @ + : , y z @.>.<.6.7.7.6.7.6.7.6.6.6.6.6.<.6.6.6.6.<.<.<.<.<.6.8.7.0.r o UXUXUX",
"UX n Q.Q.Q./.oX).oXoX).oXoXoX).oXoXoX).oXoXoX).oX).oX!.Q.Q.Q.Q.Q.Q.W.E.U.S.w.,.v Q o.4 8 Q z 6.C.I.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.U.Z.rX# X I ` 1 & > y x :.w.Z.I.~.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.W.W.W.W.W.E.T.U.G.Z.q.>.@.h i A O.W 5 X o 5 Y o.K = % * > t a v =.9.e.C.S.D.G.G.G.G.G.G.G.G.D.D.G.D.D.D.D.D.S.D.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.g.g.e.9.,.#.j g z.G o . o.e k =.7.w.e.e.g.e.g.e.e.e.e.e.e.b.w.w.w.w.w.w.w.q.w.w.q.q.7.,.h.G 7 o.6 @ % : w f k @.>.<.6.7.7.7.7.7.7.6.6.6.6.6.6.6.6.<.<.<.<.6.6.6.6.6.6.7.7.t UXUXUX",
"UX n W.Q.Q./.oXoXoX).oX).).oXoX).oXoX).oX).oXoX).).).Q.Q.Q.Q.Q.Q.Q.Q.W.~.U.S.e.,.v N x.L H Q x 6.Z.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.H.2X8 7 O.P * : q y v ,.w.S.I.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.Q.W.W.W.W.E.W.W.W.E.E.T.U.P.Z.e.6.$.k u e B ^ O.Y 8 $ $ 9 T X.Y 9 + % * > q y k #.,.q.g.Z.S.G.G.P.G.G.G.D.G.D.G.D.D.D.D.D.S.S.S.S.S.S.S.S.Z.S.Z.Z.Z.S.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.C.C.C.C.g.w.9.,.*.j i ^ | 5 x.t k =.6.w.e.V.e.e.e.e.e.e.w.w.e.e.w.w.w.w.w.w.w.w.q.q.q.q.7.<.4. .# ! ` 1 + & > e f z v ,.<.6.6.7.6.6.7.6.6.6.6.6.6.6.<.6.<.6.<.<.<.<.<.<.<.6.6.7.7.t UXUXUX",
"UXo v W.Q.Q./.).).oXoXoXoXoX).oXoX).oXoXoX).).).).oX_.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.U.S.g.6.#.k Q ZXD @.7.S.U.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.P.'.9Xz.g q > w a @.<.w.S.I.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.W.W.E.E.E.W.E.T.U.P.S.g.9.,.#.k i q , s P { +.| Y T H H H I Y { O.| L 6 = + * * > e y j @.=.7.w.g.S.D.G.G.G.G.G.G.G.G.G.D.D.D.D.S.D.S.D.S.D.S.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.C.Z.Z.C.C.Z.C.C.C.C.V.V.C.g.g.g.w.7.,.#.k y B .x.y x =.7.w.e.e.e.e.e.e.e.w.e.e.w.w.w.e.w.w.w.w.q.q.w.q.q.q.9.6.=.pX9XZ : * * > e f b #.>.,.6.7.7.7.7.7.6.7.6.6.6.6.<.<.6.6.<.<.<.<.<.<.<.<.<.<.6.7.7.e o UXUXUX",
"UX n W.Q.Q./.oXoXoX).).oX).oX).).oXoX).oX).oX).).oX/.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.E.U.D.V.7.$.v M u.$.w.S.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.U.F.m.=.j u u k #.6.V.S.I.E.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.E.W.E.W.E.E.E.E.T.U.I.D.Z.w.7.>.v k u t q > * 2 s s V s V 6 6 1 & & & * : > q e u j @.=.6.q.g.Z.S.D.G.G.G.G.G.G.G.D.G.D.D.D.D.D.D.D.S.D.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.C.C.C.C.C.g.g.g.w.9.<.$.z h i D h v >.7.w.e.e.e.e.e.w.e.e.e.w.w.w.w.w.q.b.q.q.q.q.q.q.q.q.9.7.,.u.N t q , q t h x $.>.6.6.6.7.7.6.6.6.7.6.6.6.6.6.6.<.6.6.<.<.<.<.<.<.,.<.<.<.6.7.7.r o UXUXUX",
"UX v Q.Q.Q./.).).oXoXoX).oX).oXoX).).).).).).).).).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.U.G.C.q.6.1.,.7.V.H.U.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.G.V.7.#.@.#.,.9.V.G.U.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.W.W.W.W.E.W.T.E.W.E.E.E.E.E.T.U.U.P.S.C.w.7.,.#.x j y t e q , > > : : : > > > q e t y j x @.:.6.q.e.C.S.S.G.G.P.G.G.G.G.G.G.D.D.D.D.D.D.D.S.D.S.S.S.S.S.S.S.Z.Z.S.S.Z.S.Z.Z.Z.C.Z.C.C.C.C.C.C.V.C.V.C.g.g.g.C.C.g.g.w.9.6.=.x z k x #.,.9.w.e.e.e.e.w.e.e.w.e.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.9.7.<.=.x j y y a k v :.>.<.6.7.7.7.6.6.7.6.6.6.6.<.6.6.<.<.<.<.<.<.<.<.<.<.<.<.<.<.6.6.7.r o UXUXUX",
"UXo v W.Q.Q./.oX).oX).oXoXoXoX).).).oXoXoXoX).).oX_.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.T.P.Z.g.w.w.V.Z.I.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.I.S.g.9.7.7.w.Z.G.U.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.E.W.W.W.E.W.E.E.E.E.E.E.E.E.T.T.U.P.P.S.C.w.9.<.>.#.v x j h u y y y y y a h j k x #.=.,.7.q.e.C.Z.D.G.G.G.P.G.G.G.G.D.D.D.G.D.D.D.D.S.D.S.S.S.S.S.S.S.Z.Z.S.S.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.C.V.C.g.g.C.g.C.g.C.e.e.w.q.6.,.=.#.=.>.6.q.w.e.e.e.e.e.e.w.e.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.9.9.9.6.>.#.x k k x #.:.,.6.6.7.7.6.7.6.6.6.6.6.6.6.<.6.6.<.6.<.<.<.<.<.<.<.,.<.,.<.<.6.7.7.e o UXUXUX",
"UX x Q.Q.Q./.).oX).oXoX).).).oX).oX).).).).).oX)./.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.E.U.G.F.S.D.P.T.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.I.D.Z.C.S.G.U.E.E.W.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.E.T.W.W.T.E.E.E.E.T.E.T.T.T.T.T.U.U.P.G.D.C.V.w.9.6.,.:.=.#.#.#.#.#.#.#.$.=.,.6.7.q.w.V.Z.S.S.G.G.G.G.G.G.G.G.G.G.G.D.D.D.D.D.D.S.D.S.D.S.S.S.S.Z.S.S.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.C.g.C.C.g.C.g.g.g.V.V.e.w.q.6.6.<.<.6.9.q.w.e.e.e.e.w.w.e.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.9.q.9.9.6.6.,.=.#.$.=.>.<.6.7.6.7.7.6.7.6.6.6.6.6.<.6.6.6.<.<.<.<.6.,.<.,.,.,.,.,.<.,.<.2.7.6.e UXUXUX",
"UXo v W.Q.Q./.).oX).oX).).oX).).).oX).oXoX).).).).!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.E.U.I.U.E.~.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.E.U.I.I.U.T.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.W.E.W.E.E.E.E.E.E.E.E.E.E.T.T.T.T.T.T.U.U.T.I.P.G.G.S.C.V.V.w.q.q.7.7.6.7.7.9.q.w.e.g.V.Z.Z.S.G.G.G.G.P.G.G.G.G.G.D.D.G.D.D.D.D.D.D.S.D.S.D.S.S.S.S.S.Z.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.Z.C.C.C.C.C.V.C.V.V.V.C.C.g.V.g.V.g.g.V.V.e.g.e.q.q.7.q.q.q.w.e.e.b.w.w.e.e.w.w.w.w.w.q.w.q.q.q.q.q.q.q.q.9.q.q.9.9.7.6.6.,.,.,.<.<.6.7.6.7.6.7.6.6.6.6.6.6.6.<.6.6.,.,.<.6.6.,.<.,.<.,.,.,.,.,.,.<.6.6.6.r UXUXUX",
"UX @.W.Q.Q./.oX).oX).oX).oX).oX).).).).).).oX).).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.E.W.E.W.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.E.E.E.E.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.E.E.W.E.E.E.E.E.E.E.E.E.E.E.T.T.T.T.T.T.U.U.T.U.U.U.P.P.G.G.D.S.Z.Z.C.C.C.C.C.C.Z.Z.S.S.D.D.G.G.G.G.G.G.P.G.G.G.G.G.G.G.D.G.D.D.S.D.D.D.S.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.V.V.C.C.V.C.V.g.V.C.g.V.V.g.V.e.g.e.g.e.e.e.w.q.w.w.e.w.w.e.e.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.9.q.9.9.q.9.9.7.6.6.6.<.6.6.7.7.7.6.7.6.6.6.6.6.6.6.6.6.,.,.6.6.<.,.,.<.,.<.,.,.,.,.,.,.,.<.<.6.6.r o UXUXUX",
"UX n Q.Q.Q./.oXoX).).oX).).).oX).oX).).).).).)./.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.W.Q.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.W.W.W.W.W.E.E.E.E.E.E.E.T.T.T.T.T.T.T.T.T.U.T.T.U.U.U.U.I.I.I.P.P.P.G.H.G.G.G.G.G.G.D.H.G.P.G.P.P.G.P.P.G.G.G.G.G.G.G.D.D.D.D.D.D.D.S.S.S.S.S.S.S.S.Z.S.Z.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.V.C.C.C.V.V.C.V.V.V.g.g.g.V.g.g.g.g.e.g.g.V.e.e.e.b.w.e.w.e.w.e.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.9.9.9.q.9.9.9.9.9.9.7.6.6.7.7.6.7.7.7.6.7.6.6.6.6.6.6.,.,.6.,.6.,.6.,.<.,.,.<.,.,.,.,.,.,.,.,.<.<.6.6.r UXUXUX",
"UX v W.Q.W.!.).).oX).).oX).).).).).oX).).).).)./.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.W.W.E.W.E.E.W.E.E.E.T.E.E.E.E.T.T.T.T.T.T.U.T.U.U.U.U.U.U.U.I.U.U.I.I.I.I.P.P.P.P.P.P.G.P.G.P.G.P.G.P.G.P.G.G.G.G.G.G.D.D.G.D.D.S.D.D.D.D.S.S.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.C.V.C.V.V.V.V.g.C.g.g.g.g.g.g.g.g.g.e.e.e.e.e.e.e.e.e.w.e.w.w.w.w.w.w.w.q.q.w.q.q.q.q.q.q.9.q.9.q.9.9.9.9.7.9.7.9.7.7.7.7.7.7.6.6.6.6.6.6.6.<.6.6.6.6.6.6.,.6.<.<.,.<.,.,.,.,.,.,.,.,.,.,.,.<.6.7.r UXUXUX",
"UXo v W.Q.Q./.).).).).oX).).oX).).oX).).).).).).!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.E.W.E.W.E.W.E.E.E.E.E.E.E.T.T.T.T.T.T.T.T.T.U.U.U.U.U.U.U.U.U.I.U.U.I.I.U.I.I.I.P.I.P.P.G.I.G.I.P.P.G.P.G.P.G.G.G.G.G.D.D.D.D.D.D.S.D.D.S.S.D.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.V.C.V.V.C.V.V.V.V.V.V.g.g.g.g.g.g.g.e.g.e.e.e.e.e.w.e.e.w.e.w.e.w.w.w.w.w.q.q.q.w.q.q.q.9.9.q.q.9.q.9.q.9.9.q.7.7.9.7.9.7.7.7.7.7.6.7.6.6.6.6.6.6.6.6.6.,.6.,.,.6.,.<.,.,.,.,.,.,.,.,.,.,.,.,.,.,.<.2.6.e o UXUXUX",
"UX v Q.Q.Q./.).).oX).oXoX).).).).).).).).).).).Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.W.W.E.W.E.E.E.W.E.E.E.E.E.E.E.T.T.T.T.T.T.U.U.U.T.U.U.U.U.U.U.I.U.I.I.I.I.I.I.I.I.P.P.I.P.I.P.I.G.P.G.P.G.G.G.G.G.G.D.D.G.G.G.D.D.D.D.D.S.S.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.V.C.V.V.C.V.V.V.V.V.V.V.C.g.g.g.g.g.g.g.g.e.e.e.e.e.e.e.w.e.e.w.w.w.w.w.w.w.q.w.q.w.q.q.q.q.q.q.9.9.q.9.9.9.9.9.9.7.9.7.7.7.7.7.7.6.7.6.6.6.6.6.6.<.<.6.,.<.6.,.,.6.6.,.<.,.,.<.,.,.>.,.>.>.,.>.,.>.,.<.6.6.e UXUXUX",
"UXo n W.Q.Q./.oX).oX).).).).).).).).).).).).)./.Q.Q.!.Q.Q.Q.Q.Q.!.Q.Q.!.Q.Q.!.Q.Q.!.Q.Q.!.Q.Q.Q.Q.W.Q.!.Q.Q.Q.!.Q.Q.Q.!.Q.!.Q.Q.Q.Q.Q.!.Q.Q.Q.!.Q.Q.Q.!.Q.Q.Q.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.W.W.W.W.E.E.E.E.E.E.E.E.E.T.T.T.T.T.U.U.U.I.T.U.U.U.U.I.I.U.I.I.I.I.I.I.I.I.I.P.P.P.P.P.G.P.G.G.G.G.G.G.P.G.G.G.D.D.D.G.D.D.D.D.S.D.S.S.S.S.S.S.Z.S.Z.S.Z.S.Z.Z.Z.C.Z.C.C.C.C.Z.C.C.g.V.V.A.C.V.C.V.V.A.V.V.V.e.g.g.g.A.g.g.e.e.e.e.e.e.e.w.e.q.w.q.w.w.q.w.w.w.w.q.q.q.q.q.q.q.9.9.q.9.9.9.q.9.9.9.7.9.7.9.7.7.7.7.7.7.7.6.6.6.6.6.6.6.6.6.<.<.6.,.,.6.6.<.,.,.,.,.,.,.,.,.>.,.,.>.>.,.>.,.,.<.<.6.r o UXUXUX",
"UX v Q.Q.Q.!.).).).).).).).).).).).).).).).).!.Q.Q.Q.~./.(.(.(.^.(.(.(.^.(.(.^.(.(.^.(.(.(.(.(.(.(.(.^.(.(.^.(.(.(.^.(.(.^.(.(.(.(.(.^.(.(.(.^.(.(.(.^.(.(.^.(.(.(.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.~.~.(.^.^.^.^.^.^.R.R.^.^.^.^.R.R.^.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.K.R.R.R.K.R.K.R.K.R.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.L.L.K.L.K.K.S.H.D.S.D.S.D.S.D.S.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.A.A.J.J.J.J.v.J.v.v.J.v.v.v.J.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.y.v.v.v.t.v.t.y.v.t.y.y.y.y.t.v.t.t.t.t.v.t.t.t.t.t.t.t.t.t.0.0.7.6.7.6.6.6.7.6.6.6.6.<.6.<.6.6.<.6.,.,.<.,.,.,.,.,.>.,.,.,.,.>.,.,.>.,.1.,.,.<.<.e UXUXUX",
"UX x Q.Q.Q./.).).).).).).).).).).).).).).oX&XzXmXmXJXfXfXdXfXfXdXfXGXfXdXfXdXfXGXfXfXfXdXfXGXfXfXGXfXdXGXfXdXdXfXGXfXdXGXfXdXdXfXGXfXdXGXfXdXdXfXGXfXdXGXfXdXdXsXfXgXjXmXzX.XW.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.(.%XxXmXjXfXfXfXfXdXGXfXdXdXGXfXdXdXdXdXdXdXfXfXGXdXdXfXfXdXdXdXdXdXdXGXdXdXdXdXdXdXdXfXGXuXdXdXdXdXdXGXdXdXdXGXdXdXuXdXdXdXdXdXuXdXdXdXdXuXdXdXdXfXjX6XlX].F.S.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.C.Z.A.'.3X6XgXfXGXdXdXuXuXuXuXuXdXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXuXSXuXuXtXuXuXuXuXuXtXSXuXuXuXuXuXSXuXdXaX4Xf.0.6.6.6.6.6.6.6.6.,.6.,.6.,.,.,.,.,.,.,.,.,.>.,.,.>.>.>.>.>.>.>.,.,.,.<.6.e o UXUXUX",
"UX v W.Q.Q.!.).).).).).).).).).)._.).oXzXIXGXuXqX` I H L H G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G H I T _ +.eXdXgXzX(.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.(.xXgXiXwXo.! L L H H G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G H H H I ] X.wXSXsX6XJ.S.Z.S.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.A.3XfXSXAX+._ I H H G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G J H H Y | ZXAXiX8Xd.,.6.,.<.,.,.6.<.<.,.<.<.,.,.,.,.,.,.,.,.>.,.=.,.>.>.>.,.>.>.,.,.<.2.e UXUXUX",
"UXo n Q.Q.Q./.).).).).).).).)._.).).cXJXDX+.H $ # 9 ` AXfXzX~.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.zXfXwXY 7 # o # 9 _ AXfX'.Z.Z.Z.S.Z.S.Z.Z.Z.C.Z.C.'.sXAX_ 9 # o 5 I qXtX4X5.,.6.<.6.,.<.,.6.,.,.,.,.,.,.,.,.,.>.,.=.,.=.>.>.>.>.>.,.,.,.,.<.e UXUXUX",
"UX v W.Q.Q./.).).).).).).).).).).cXPXqX8 $ X 4 ` uXlX`.W.W.Q.Q.Q.Q.Q.Q.Q.zXdX` $ 4 X.uXn.V.Z.Z.Z.Z.Z.Z.Z.Z.C.'.GX| 4 X H 9XDXi.,.,.,.6.<.,.,.<.,.,.,.,.,.,.,.>.,.>.,.>.,.>.>.>.>.>.>.>.,.<.<.r o UXUXUX",
"UXo n Q.Q.Q./.).).).).)._.).).).,XJXO.4 # $ X H SXlXT.E.W.Q.Q.Q.Q.Q.(.GX_ X # X.dXr.V.Z.Z.Z.Z.Z.C.C.C.sXO.# 4 O.uX1.>.,.,.<.,.,.,.,.,.,.,.>.,.>.,.>.>.,.=.>.>.>.:.>.>.>.,.>.,.2.w o UXUXUX",
"UX v W.Q.Q.!.).).).).).).)._.).MXDX5 # $ # Y fXK.T.E.W.Q.Q.Q.Q.zXtX$ 7 tXm.w.V.C.Z.Z.Z.Z.C.'.uX8 5 9Xj.=.>.,.,.,.<.,.,.,.,.,.,.,.,.>.>.,.=.>.>.>.>.>.>.>.>.>.,.<.<.e UXUXUX",
"UX v Q.Q.Q.!.)._.).).)._.).).).MXX.$ $ # # 4 eXM.D.U.E.Q.Q.Q.Q.mXX. X qX<X7.w.g.C.C.C.C.C.3XeX# | 8X@.=.>.,.,.,.,.,.>.>.,.>.=.,.,.>.>.>.>.>.:.>.>.>.>.>.>.,.,.2.w o UXUXUX",
"UX v W.Q.Q.!.).).).).).).)._.).PX_ # # # # # wX2XC.P.E.W.Q.Q.W.jX_ +.j.>.9.g.C.C.C.C.C.3XZXX Y eXk #.:.,.,.,.,.,.,.,.>.,.>.>.>.>.>.>.>.=.>.>.$.>.$.>.>.,.,.<.w o UXUXUX",
"UXo v W.Q.Q.!.).).)._._.)._.).(.JX_ # $ # X 4 5 9 8 J H 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 H G G 8 5 # X ZXj.w.S.T.E.Q.Q.E.jXW o 4 8 G G H H H H H H H H H H H H H H H H J G 9 $ O.z.#.<.q.V.C.C.C.C.6XZXo # 5 7 8 8 G 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 G G G 9 5 4 o Y wXh x #.:.>.,.,.,.,.,.>.,.>.>.>.>.>.:.>.=.>.$.>.:.>.$.>.>.,.<.r UXUXUX",
"UX v Q.Q.Q.!.)._.).).).).).).oXJX_ # # # o H X.+.ZXc.c.ZXc.ZXqXqXqXZXqXqXqXqXqXZXqXqXZXqXqXqXqXqXZXqXc.qXqXqXZX+.ZXc.+.qXZX{ $ o X ZXl.6.C.I.T.W.W.E.gX_ $ Y +.+.+.qXqXZXc.qXZXc.qXqXqXqXqXc.qXqXqXc.c.c.c.c.ZXX.H X X.k.x ,.q.V.V.C.C.V.5X0X 4 ' +.+.+.c.qX+.qXc.qXqXqX+.c.ZXc.qXZXc.ZXc.c.c.c.c.c.c.c.c.ZXc.c.qXZXc.c.c.c.ZXc.ZXZXc.ZXc.+.+.+.H o T AXy k @.=.,.,.>.>.>.>.>.>.>.>.>.>.:.>.>.=.>.$.$.>.$.>.>.>.,.,.w o UXUXUX",
"UXo n W.Q.Q./.).)._._.)._._./.(.PX_ # # # J c.` J s 0 0 2 2 ; < ; < ; < < < ; ; ; < < ; ; < < < < ; < < < < ; < 2 3 s 3 s P qX{ X qXl.:.e.G.E.W.W.T.jXY H c.ZX! V 0 1 ; - ; ; ; : ; ; ; ; ; ; ; : ; ; - 2 2 3 K | ZXX.5 O.} j =.9.g.V.C.C.g.5XqXo $ +.O.L s 0 0 2 1 = = = = = = = = = = = * = % = = = = = = = = % = = = % = = = = = & = 1 ; 1 0 6 C ` +.G Y wXt j v =.>.>.>.,.>.>.,.:.,.>.>.>.:.>.=.=.$.>.$.>.>.>.>.>.,.,.w UXUXUX",
"UX v Q.Q.Q.!.).)._.)._._.).(.(.PX_ $ # # O.{ % & * > q q e e t e t t t t e t t t t t t t e t t t t t e t e t t t t e e q q R qX4 X qXQ $.q.S.T.E.W.T.gXW I qX] 1 % * : > > q q q q q e q q w q q q q q q q q q q q > B O.+.G o.} h #.7.e.V.C.C.g.5XqX H c.4 @ + & * : : > > > : > > > > > > > > > > > > > < > : > > > > > : > : : : : : : : : > : * : * * o.X. I wXq h x =.=.,.,.>.>.,.>.>.=.>.=.=.=.:.:.=.>.$.=.$.:.$.>.>.,.,.r UXUXUX",
"UX v W.Q.Q.!.)._._.).).)._.).(.PX! # # # # ZXK * q t h j x x x x n v v v v v v n v v v v v v v v v v v v v x v v x v x x k k M wX8 X c.( #.q.S.T.W.W.T.gX_ 5 +.U % * > q t y h h j j j k j j j j j j j j j j j j h a a y e r } +.# X.} h #.6.e.V.C.C.g.5XqXo ` | + * : q e e t y y y y y y y u y y y y y y y y y y y y y y y t t t y t t t t t t t t t t e e e q E qXX Y qXq u x #.>.>.,.>.,.:.:.>.:.>.=.=.:.=.=.=.>.$.$.:.$.>.>.:.>.,.r o UXUXUX",
"UX n W.Q.Q.!.).)._._._._._.).(.JXY # # X 4 ZXC q u x #.1.6.6.6.6.7.7.7.9.7.9.7.9.7.7.7.9.7.7.7.0.7.0.7.7.7.q.7.8.7.7.7.6.6.1.3.tXG X ZXQ @.9.S.U.E.E.T.gXY I c.1 * , t h x @.#.=.:.>.>.>.>.>.>.=.>.>.=.>.:.:.=.$.=.$.#.@.z j S wX7 X.} a #.6.w.g.C.V.g.5X9X X.` * > t h j k x x x x x v x x x x x x x x z x z x z z z z z k z k x k z z k k k k k k k j j j h u D wX$ T ZXq h x #.=.>.>.>.>.:.>.>.>.=.=.=.>.=.=.=.$.:.$.=.$.$.=.>.>.,.r UXUXUX",
"UXo v Q.Q.Q.!.).)._._._._._.(.(.PX_ # # o 4 ZXZ y x <.q.V.C.C.S.S.S.S.S.Z.S.S.S.S.Z.S.S.S.S.Z.Z.S.S.S.S.S.S.S.S.S.S.Z.Z.Z.C.V.w.uXI # qXQ @.9.S.U.E.E.U.sXY I +.< q u x =.,.6.q.q.w.q.w.w.w.w.q.w.w.w.w.w.q.q.q.q.q.q.7.6.,.$.u.AX8 X.} u #.6.w.V.V.V.g.5XqX X.~ > t j v #.:.:.:.,.,.,.:.,.,.:.>.>.>.:.:.:.=.=.=.=.=.$.=.$.$.=.=.=.$.#.=.#.=.#.#.#.#.#.#.#.@.@.x p.wX4 U wXq u x #.:.>.>.>.:.,.:.,.=.:.=.=.=.=.=.$.$.$.=.$.$.=.>.:.>.,.w UXUXUX",
"UX x Q.Q.Q.!._._._.)._._.)./.(.JX_ # # 4 +.S k ,.w.S.G.I.I.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.T.U.U.U.T.U.U.U.U.U.U.U.U.U.U.U.G.S.sX| X 7 ZXS @.9.S.U.E.W.U.gX_ 7 c.R y x >.9.w.V.C.C.Z.Z.Z.Z.Z.Z.C.C.Z.g.g.Z.Z.C.V.C.g.g.g.e.w.8.8Xx.# O.} u #.6.w.g.V.V.e.4XqXX X./ q h x :.<.6.6.7.6.7.7.6.6.7.7.6.7.6.6.6.6.6.6.<.6.<.<.<.<.<.<.<.,.<.,.,.<.,.,.,.,.,.,.,.>.:.=.$.p.qX4 T qXq u x #.:.>.>.>.,.:.:.:.:.:.=.=.$.$.=.$.$.$.$.$.$.$.>.:.>.>.w o UXUXUX",
"UXo v W.Q.Q.!.)./.)._._._._./.(.PXW # # 4 qXA @.7.Z.P.T.E.W.E.W.W.W.W.W.E.W.W.W.W.E.W.W.W.~.W.W.W.W.W.E.W.W.E.W.W.W.E.W.E.E.I.{.SXW # 4 O.x.i #.q.S.U.E.E.U.gX_ _ wXl.&.7.e.Z.S.D.D.S.G.G.S.D.S.S.S.S.S.S.S.S.S.Z.S.Z.C.Z.S.'.hXeXG o.} a @.6.w.g.g.g.g.5Xc.o X.[ t k #.<.7.q.q.q.q.q.q.q.q.7.q.9.9.9.9.9.9.9.9.7.9.7.7.6.6.7.6.6.6.6.6.6.6.6.6.<.6.<.,.6.,.,.,.,.a.wX4 Y wX, u z #.=.:.:.,.>.=.=.>.$.>.>.$.$.$.$.$.$.$.$.$.$.:.=.=.:.>.w UXUXUX",
"UX @.W.Q.Q.!.)._._._._._._.(.(.PX_ # X 4 qXS #.q.D.T.W.Q.Q.Q.Q.W.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.T.D.7XyX+.I 4 X # 7 Y c.c.p a #.w.S.T.E.E.U.gXW X Y qXuX5X{.].H.H.H.H.H.H.S.H.H.H.D.H.F.H.F.F.F.F.F.L.].{.hXuXqX8 X.} u @.6.w.g.g.g.w.5Xx.o O.[ y x >.6.q.w.w.q.q.w.q.q.q.q.q.q.9.q.q.q.9.9.9.9.9.9.9.9.9.9.9.7.7.6.9.6.6.6.6.6.6.6.6.6.6.<.6.,.a.9X4 T qXq y z #.=.=.:.:.>.$.>.$.:.$.$.:.$.>.$.$.$.$.$.#.=.;.$.=.,.,.w UXUXUX",
"UX n Q.Q.Q.Q.)._._._.)._._._.(.PXW # X $ qXD #.q.G.T.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.I.C.d.8XwXZX+.X.{ { | O.+.x.qX! 2 w k >.e.D.U.E.E.U.fX_ 5 ] AXtXuXfXGXdXdXdXfXGXdXdXGXdXdXdXdXdXdXdXdXdXdXuXAXc.L # X.} u @.6.r.g.g.g.g.5Xc. X.} y x :.7.q.w.w.q.w.q.w.q.q.q.q.q.q.q.q.9.9.9.q.9.9.9.7.9.6.9.7.7.9.6.6.6.7.6.6.6.6.6.6.6.6.,.6.,.a.wX4 Y qXq u x #.=.:.:.>.>.>.>.=.$.$.$.$.$.$.$.$.$.#.$.$.$.;.=.=.>.,.w UXUXUX",
"UX v W.Q.Q./._._._._././._._.(.PXW # X # qX( #.w.H.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.~.U.S.q.$.M A ( [ | o.| ~ U V ; : q h @.6.C.P.T.E.E.I.sXW X 4 8 H H H H H H H H H H H H H H H H H H H H 7 $ o X.} u @.<.w.g.g.g.g.5XwXX X./ y x >.6.q.q.w.q.q.q.q.q.q.q.9.9.q.9.9.9.9.9.9.9.7.9.9.9.9.6.9.7.6.6.9.7.6.6.6.6.6.<.6.,.6.6.,.,.a.wX4 Y qX, y z @.=.:.>.:.$.>.$.$.>.$.:.$.$.$.$.$.$.$.#.#.;.1.=.=.:.1.w UXUXUX",
"UXo v W.Q.Q.!._.)./._./._././.^.JXY # o { 0X4.w.H.~.W.Q.Q.Q.Q.Q.!.Q.Q.Q.Q.!.Q.Q.Q.Q.Q.Q.!.Q.Q.Q.!.Q.Q.!.Q.Q.!.Q.!.Q.Q.Q.Q.E.T.P.V.9.$.k y e > : > : > > q e a @.,.e.S.I.T.W.T.U.sXW X.} y @.<.w.g.g.g.e.4Xc.o X./ y x >.6.q.w.q.q.q.q.q.q.q.q.q.q.9.q.9.9.9.9.9.9.7.9.9.7.6.7.6.7.7.6.6.6.6.6.6.6.6.<.<.6.<.<.<.<.a.wX4 Y wXq u k #.=.=.=.=.=.=.$.=.:.$.$.$.$.$.$.$.#.$.#.$.;.1.$.$.,.:.w UXUXUX",
"UX v Q.Q.Q.!.)./.)./._./.)._.(.PX! # 4 +.tXaX6XmXxXxXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXzXxXlX6X2Xj.h.p.D S f y y a j x $.6.w.S.G.T.T.E.T.U.sX_ O./ h @.<.w.g.g.g.e.5XqX +.} y x >.6.q.q.q.q.q.9.q.q.7.q.7.9.q.9.9.9.9.9.9.9.9.6.9.6.9.7.6.6.6.6.6.6.6.6.6.6.6.<.6.<.<.6.<.,.a.0X4 T qX, y z @.#.=.=.=.=.$.=.$.$.$.$.$.$.#.$.#.$.#.#.$.1.;.#.=.=.,.w o UXUXUX",
"UXo n W.Q.Q.!././._._././._./.^.PXY # 4 I ` c.9XeXwXeXAX0XAXeXAXtXAXAXwXtXAXwXeXwXAXeXeXeXAX0XAXAXeXeXAX0XAXeXAXtXAXeXeXwX0XwXwXeXrXeXeXeXAXtXiX<Xi.>.6.9.e.S.P.U.T.E.E.T.U.sX! X qX( u @.<.q.g.g.g.w.4XqX X./ y v >.6.9.q.q.q.q.q.q.q.q.q.7.9.9.9.9.9.9.9.6.6.9.7.9.9.9.6.9.6.7.6.6.6.6.6.6.6.,.6.<.<.<.<.<.,.a.wX4 Y 9Xq y k #.=.=.=.=.$.$.$.=.$.$.$.#.$.#.#.#.$.#.$.=.5.;.=.=.=.>., UXUXUX",
"UX v Q.Q.Q.!._.)./._./._._._.(.JXY X X # X # # # # X # # # # X # # # # # # # X # # # # # X # # # # X # # # # # # # # X $ $ $ 4 7 H ` qXAXaXM.Z.D.P.U.T.E.T.E.T.I.sXW 7 qXZ u @.<.w.e.g.g.r.4XwXX X./ y x :.6.q.q.q.q.q.q.q.7.q.9.q.9.9.9.7.9.9.9.9.9.6.7.6.6.6.6.6.6.6.6.6.<.6.6.<.<.6.<.<.<.<.<.<.,.a.wX4 Y qXq y k @.$.=.$.$.$.=.$.$.$.$.$.$.$.$.#.$.#.#.#.;.3.;.#.=.=.>.w UXUXUX",
"UXo x Q.Q.Q.!._./././._._././.(.JX] X X 8 o.uXkXG.U.T.E.E.T.E.T.P.sX_ X X.c.w h @.6.q.e.V.V.w.4XqX X.[ y z >.6.9.b.q.q.q.q.q.9.q.9.9.9.9.9.9.7.9.6.9.7.7.6.7.7.6.6.6.6.6.6.<.6.<.6.<.<.6.<.<.<.<.<.,.,.a.0X4 Y qXq y k @.$.$.$.:.$.$.$.#.$.$.$.$.#.#.#.$.#.#.#.3.1.;.#.=.$.>., X UXUXUX",
"UX v W.Q.Q.!._.)./._././././.~.jX+.X X Y SX{.U.U.T.E.E.E.T.U.sXW $ | ZXs q h #.6.w.e.e.e.e.4XqX O./ y z :.6.9.9.9.q.7.q.7.9.q.9.9.9.9.9.7.9.9.9.6.7.7.7.7.6.6.6.6.6.6.6.6.<.6.6.<.<.<.<.,.<.,.,.,.,.s.AX4 Y 9Xq y k @.$.$.:.$.$.$.$.$.$.#.$.#.#.$.#.#.#.#.;.3.1.&.#.$.$.:.w UXUXUX",
"UX v Q.Q.Q.!._././._././././.(.xXSX5 X { fXF.P.T.T.T.E.U.P.sXW # 7 _ +.O.d : t k =.8.w.e.e.b.w.4XwXX X./ y z >.6.9.q.q.q.q.9.q.9.9.9.9.9.9.9.7.7.7.7.7.6.7.7.6.6.6.6.6.6.6.6.6.6.6.<.<.<.<.<.<.,.,.<.<.:.a.wX4 T ZX> y k @.#.$.$.$.$.$.$.$.$.$.#.#.$.#.#.#.#.#.3.3.3.&.#.$.:.>.w UXUXUX",
"UX x Q.Q.Q.!././._./._._././.(.R.GXo.$ 7 tXn.S.I.U.T.T.T.I.sX_ $ 7 8 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 G G H I ] X.+.ZXc.L 2 * w u v ,.q.w.e.V.e.w.4XqX X./ y b :.<.9.9.q.q.7.q.7.9.9.9.9.7.9.7.7.7.7.7.7.7.6.6.7.6.6.6.6.6.6.<.<.<.<.<.<.<.<.<.,.<.,.,.,.,.a.wX4 T wXq y k v $.$.$.$.$.$.$.$.#.#.$.#.#.#.#.#.#.&.3.3.3.;.#.=.$.:.w UXUXUX",
"UX n Q.Q.Q.!./._./._././././.~.R.{.uXc.G X $ wX2Xg.D.I.T.T.T.I.sX_ 4 ' +.+.+.c.c.c.c.c.qX+.c.qXc.c.c.ZXc.+.c.+.c.qXqXc.qX+.+.qXZXqX+.+.9Xc.c.+.qX+.c.c.X._ P 6 = & * q y z $.6.q.w.g.e.e.w.4XqXo +./ y z >.6.9.9.9.7.9.q.7.9.9.9.7.7.7.7.7.7.7.7.6.6.6.6.6.6.6.6.6.6.6.6.<.<.<.<.<.<.<.,.<.,.,.,.,.:.a.wX4 Y qX> y k @.#.$.$.$.$.$.#.#.$.#.#.#.#.#.#.#.#.-.3.3.3.&.#.$.$.:.w UXUXUX",
"UXo v Q.Q.Q.!./././././././././.`.H.t.yXAX+._ G 5 $ X o X X X o o X X X o X X X o X X X o X X X X o o # 9Xj.9.Z.P.U.T.U.P.gXY $ O.O.L 6 0 2 2 2 2 1 2 2 2 2 2 2 2 ; 2 2 2 2 2 2 ; 2 2 2 2 2 ; 2 2 2 2 1 2 2 2 2 - & & & * * : > e u k #.,.9.w.e.g.e.e.w.4XwX o./ y z $.6.9.9.9.7.q.9.9.9.7.9.9.7.9.7.7.7.6.7.6.7.6.6.6.6.<.<.6.6.<.<.<.<.<.<.<.<.,.,.,.,.,.,.,.,.a.wX$ Y qXq y k v #.$.$.#.$.$.#.$.#.#.#.#.#.#.#.v #.3.3.3.3.&.#.$.$.>.w UXUXUX",
"UX v Q.Q.Q.!._././._././././.(.^.K.e.>.F ) 9Xc.qXqX+.c.c.c.+.+.+.+.+.c.+.+.+.c.+.+.+.c.+.+.+.c.+.ZX+.+.O.{ ] I 8 $ X c.l.>.e.D.U.U.U.P.sX_ G +.0 % & * > > > q q , q , , q , q , , , > q , , > , , , > > > , , , > > , , > > > q q q q e t u j x =.,.7.w.e.e.e.e.e.q.4XqX o.[ y z =.6.6.9.9.q.9.9.9.9.9.9.7.7.7.7.7.6.7.6.7.6.6.6.6.<.6.6.<.<.<.<.<.<.<.<.,.,.,.,.,.,.,.,.:.:.a.wX4 Y ZX, y k v #.$.$.#.$.#.$.#.#.#.#.#.#.#.#.#.&.3.-.3.&.&.#.#.$.>.w UXUXUX",
"UX x W.Q.Q.!././././.!./././././.Y.Z.q.$.z i g B P P E E E ! E E E W E E E W E E E W E E E W E E E E ] ~ ' X.qXqXc.I X qXl.=.q.S.P.U.U.P.sXY Y c.% * q t y a h h h h h h h h a a h a h h h h f h a h a f a h a u u h u a u u u a u a h j j z @.#.>.6.7.q.e.e.e.e.e.e.q.4XqXX o./ y z $.6.9.9.9.7.9.9.7.7.7.7.7.7.7.7.6.7.6.6.6.6.6.6.6.6.6.<.6.<.<.<.<.<.<.,.<.,.,.,.,.,.,.,.,.,.s.wX4 T ZX> y j @.#.#.$.$.#.#.#.$.#.#.#.#.#.#.v #.3.-.3.3.&.%.@.$.$.$.w UXUXUX",
"UXo v W.W.Q.!._./././././././.!./.~.P.C.9.>.x j y t q q q > > > > > > > > > > > > > > > > > > > > > > > > : : < s ^ ZX8 # qXQ #.9.Z.P.U.U.P.sXW Y qX* q u k v #.$.=.=.$.$.=.$.$.=.#.$.#.#.#.$.#.#.#.#.*.#.#.#.#.#.#.#.#.#.@.@.@.@.@.@.*.#.#.=.=.,.6.9.q.w.w.e.e.e.e.e.w.q.4XwXX X./ y z $.<.7.9.9.9.9.7.9.7.7.7.7.7.7.6.7.6.6.6.6.6.6.6.<.6.<.6.<.<.<.<.,.<.<.<.,.,.,.,.,.>.,.>.,.=.s.eX4 Y qX, y j x #.#.#.#.$.#.$.#.#.#.#.#.@.@.#.-.-.-.-.&.3.%.#.$.$.=.q UXUXUX",
"UX v W.W.Q.!././././.!./././././.~.U.P.Z.b.6.>.@.x k k h h h h a h f f u h u h f f f f f h f f h u u h h a u y y t x.` X qX( v 6.Z.G.U.U.G.sX_ T qX, u x =.<.6.7.7.7.7.7.7.7.8.7.7.6.7.7.7.7.6.6.6.7.7.6.6.6.6.<.<.<.<.<.<.<.,.6.6.<.6.6.7.7.9.9.q.q.e.e.e.e.V.e.e.e.e.q.4XqX X./ t z $.6.7.9.7.9.7.9.7.7.7.7.7.7.7.6.6.6.6.6.6.6.6.<.6.<.6.<.<.<.<.<.<.,.,.,.,.,.,.,.,.,.>.,.>.=.a.wX4 U qX, y j v #.#.$.#.#.#.#.#.#.@.@.@.#.@.#.&.3.-.-.-.&.%.@.$.$.=.q UXUXUX",
"UX n Q.Q.Q.!././././././././././.Q.W.T.Y.].N.5X5XaX4Xj.a.5.=.>.=.=.$.:.=.=.$.:.=.=.=.=.=.=.:.:.:.$.=.=.=.$.$.#.v z k.c. X qX( v 6.C.G.U.U.H.sXW T ZXe j =.6.w.e.V.g.V.V.V.e.e.V.e.V.e.e.e.e.e.e.e.e.e.e.w.w.w.w.w.e.w.w.w.w.w.r.w.q.q.q.w.w.e.e.e.e.e.e.e.e.e.e.e.w.e.w.q.4XqX X./ y k $.<.6.9.9.7.7.7.9.7.7.7.6.7.6.6.6.6.6.6.<.6.6.6.<.<.<.<.<.<.<.<.<.,.,.,.,.,.>.>.,.>.,.>.,.$.s.wX4 Y qX, y j v #.#.#.#.#.#.#.#.@.#.@.@.@.@.&.-.-.-.&.&.&.$.@.#.$.=.q UXUXUX",
"UXo v Q.Q.Q.!./././././.!./.!./.!.Q.(.xXgXdXeXwXqXqXZXwXtXdXhXB.w.w.e.e.e.e.e.e.e.e.e.w.e.e.w.V.e.e.e.e.w.w.w.q.9.6.<XqXX X c.Q x 6.C.D.U.I.P.sXW Y wXy x <.w.V.C.Z.Z.C.Z.C.C.Z.C.C.V.C.V.C.C.V.V.V.V.V.g.V.V.g.g.g.g.g.g.g.g.y.M.6XaXdXfXiXaXhX7Xy.e.e.e.e.e.e.w.e.e.w.w.q.4XqXo O.[ t z $.<.6.7.9.9.7.7.7.7.7.7.7.6.6.6.6.6.6.6.6.<.<.6.<.<.<.<.<.<.,.,.,.,.,.,.,.,.,.,.,.,.>.>.>.>.a.9X4 U qX> y j v v $.$.#.#.#.@.#.#.#.@.@.@.%.&.-.&.-.&.-.&.%.#.#.*.=.q UXUXUX",
"UX x Q.Q.Q.!.!./.!./././.!.!././.%XgXtX_ 8 $ o # 4 L c.uX6XH.G.G.G.G.P.G.G.G.G.G.G.G.G.G.G.G.H.G.G.G.H.D.S.C.2XwXX X ZXQ x 6.C.G.I.U.P.sX_ Y wXu @.6.e.C.S.Z.S.Z.S.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.V.C.V.C.V.C.g.C.g.g.g.y.6XGXeXqX{ Y Y Y ' qXAXuX5Xv.w.w.e.e.w.e.e.w.w.q.4XqXX X./ t z $.<.6.9.7.7.7.7.7.7.6.7.6.6.7.6.6.<.6.6.6.<.6.<.6.<.<.<.<.,.<.,.,.,.,.,.>.>.,.>.>.,.>.,.>.=.a.wX4 Y 9X, y h v v #.#.#.#.v #.#.@.@.@.@.v &.-.-.%.&.&.-.&.%.@.#.#.=.q UXUXUX",
"UXo v W.Q.Q.!././././././././.!.#XGX| 4 X H SX6XI.U.E.`.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.T.E.U.I.3XZXX X c.Q z 6.V.G.I.I.G.sXW Y wXu @.6.e.Z.Z.S.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.V.C.C.g.C.A.'.GXwXT 4 o $ L qXdXm.w.w.w.e.e.w.w.w.q.4XqX X./ t z $.<.6.7.7.7.7.7.7.7.7.6.6.6.6.6.6.6.6.<.<.<.<.<.<.<.<.<.,.<.,.,.,.,.,.,.,.,.,.,.>.>.>.>.>.$.s.qX4 I ZX> y j x v #.#.#.#.#.v #.@.@.@.@.%.-.&.-.-.-.%.%.-.%.@.#.$.$.q UXUXUX",
"UX v Q.Q.Q.!.!./.!./.!.!./././.mXqXX I dXK.U.E.E.W.W.Q.W.Q.W.Q.W.W.W.Q.W.W.Q.Q.W.W.W.~.T.kXAXX X ZXQ x <.V.G.I.I.G.sX_ Y wXy @.6.e.C.Z.S.S.Z.S.Z.Z.Z.C.Z.Z.Z.C.C.C.C.C.C.V.C.V.V.C.V.g.C.C.g.sXX.$ $ ' DXt.9.w.w.w.w.w.q.q.4XqX X./ t j $.<.6.7.7.7.7.6.6.6.6.6.6.6.6.6.<.6.<.<.6.<.<.<.<.,.<.,.<.,.,.,.,.,.>.>.,.,.>.,.>.>.>.:.>.>.s.ZX4 I qX, i j x #.#.#.#.#.#.#.@.@.@.@.@.-.&.&.%.%.-.-.%.&.*.@.@.#.=.> X UXUXUX",
"UX x Q.Q.Q.!./././.!././.!.!./.JXY 5 SX'.H.T.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.kXAXX # +.Q x <.V.G.I.U.G.fXW I eXy @.6.e.Z.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.C.V.V.C.V.V.g.g.g.n.SX7 # wX2X6.q.w.w.w.w.w.q.4XqXo O.[ t z $.,.6.6.7.7.7.6.7.6.6.6.6.6.<.6.6.6.<.<.<.<.<.<.<.<.,.,.,.,.,.,.,.,.,.,.>.>.>.>.>.>.>.>.>.$.a.AX4 H qXr y h x v #.#.#.v #.#.v @.@.v %.%.-.-.%.&.%.%.%.&.*.@.@.*.$.q UXUXUX",
"UX n Q.Q.Q.!././.!././.!./.!./.JXI 4 wXm.C.P.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.E.lXZXX X ZXQ x <.V.G.P.I.G.sX_ Y wXy @.6.w.Z.Z.S.Z.Z.Z.Z.Z.Z.C.Z.C.Z.C.C.C.C.C.C.C.C.V.V.V.V.C.g.g.N.SX$ X.8X,.6.q.w.w.w.q.q.4XqXo | ..t k #.,.6.7.7.6.6.6.6.6.6.6.6.6.<.6.6.<.<.<.<.<.<.<.,.<.,.,.,.,.,.,.,.>.,.>.>.,.:.>.>.>.>.:.>.$.j.wX$ G qXp t j x v #.#.#.#.v #.v v #.%.-.*.&.&.-.%.%.%.%.%.*.*.@.@.$., o UXUXUX",
"UXo v Q.Q.Q.!.!.!././.!./././.~.gXI # qXj.q.S.T.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.mXO. X ZXQ x 6.V.S.P.I.G.sXY I wXy @.6.w.C.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.V.C.V.V.V.V.V.V.V.V.C.g.g.7XeX# X.<X@.,.6.q.q.w.q.q.<X9X ] O.t k #.,.6.6.7.6.7.6.6.6.6.6.6.6.<.<.<.<.<.<.6.<.<.,.,.,.,.,.,.,.>.>.,.,.>.,.>.>.>.>.>.,.:.>.:.$.j.qXX 8 qXB e h x v #.#.v #.v v #.#.v -.&.-.-.%.%.%.%.%.-.%.*.*.@.#.$.q UXUXUX",
"UX v Q.Q.Q.!././.!.!.!./.!./.~.GXI O.yX2.V.P.E.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W..XfXL # c.Q z <.V.D.P.I.G.sX_ G qXD n 8.e.C.C.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.C.C.C.V.C.V.V.V.g.V.g.g.g.aXc.o X.z.z =.6.q.q.w.q.9.4XqXo H ZXN k #.<.6.6.6.6.6.6.<.6.<.6.<.<.6.<.<.6.<.<.<.,.,.,.<.,.,.,.,.,.>.,.>.>.>.>.>.=.:.>.>.:.:.:.,.5.yX_ $ qXE t h x v #.v #.v #.#.v v %.%.-.%.%.%.%.%.%.%.%.*.*.x @.#.$.q UXUXUX",
"UX x W.Q.Q.Q.!.!./.!./.!./.!.(.gXI 8 wXiX5XkX}.%X%X.X.X.X.X.X.X#X%X.X.X.X%X$X$XzXmXfXc.# X ZXQ z <.V.G.P.P.G.fXW X | AX<Xf.B.'.'.'.'.'.'.'.{.n.'.n.'.n.'.n.n.n.n.n.'.n.n.n.n.n.M.7XfXAX8 X.} j #.,.7.q.q.q.7.4XqX # +.tXk.j.a.f.f.d.B.d.d.d.d.d.d.f.f.i.d.d.i.d.i.i.i.d.a.d.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.s.a.a.j.<XtXqX4 _ 9Xz.N k v v #.v #.v v v #.3.%.%.%.-.%.-.%.%.%.%.*.*.@.@.@.$.> UXUXUX",
"UXo v W.W.W.Q././.!.!.!././.!.`.GXI 9 ` qXeXtXtXuXuXuXtXSXuXuXuXuXuXyXSXtXtXtX0XO.Y $ X +.Q x <.V.D.P.P.G.sXW X Y c.wXeXtXtXtXtXtXtXtXtXtXSXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXeXAX| 7 X.} f v ,.6.q.q.q.7.<XwX 4 Y qXwXwXeXeXtXeXeXtXeXeXeXeXeXeXeXeX0XAX0XeXeXtXeXeXeXeXeXeX0XeXwXeXeXAXeXeXeXeXeXeXeXwXwXwXc._ 4 J ZXAXp.v v v #.v v v #.-.-.-.%.%.%.%.*.%.M *.%.M *.@.@.#.#.> o UXUXUX",
"UX v W.Q.Q.!././.!./.!./.!./.`.GXI o $ $ 4 4 5 5 5 5 4 5 5 5 5 5 5 4 4 $ # # c.Q x <.V.S.P.I.D.sX_ X $ 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 # X./ y v ,.6.q.q.q.7.4XqXX # # 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 $ # o $ ` wXpXu.v v #.v v %.%.%.%.%.-.m %.%.%.*.*.*.%.*.x @.#.#.> o UXUXUX",
"UX n Q.Q.Q.!.!.!.!.!.!.!.!.!.~.gXU # c.Q x ,.V.S.P.P.D.gX] c./ y x :.7.q.q.q.9.4XZXX 8 O.eX<XM v v %.-.%.%.%.%.%.-.m m *.%.*.*.*.*.x @.#.#.q UXUXUX",
"UXo v Q.Q.Q.!.!.!././.!.!.!.!.~.jX{ 4 c.A x <.V.S.G.P.D.hXO. # ZXR y x :.6.7.q.q.7.f.wX$ # I ZXtXh.%.%.%.-.%.m -.m %.m m *.M M *.*.n x *.@.*.> o UXUXUX",
"UXo x Q.Q.Q.!.!./.!./.!.!.!./.~.lXeX4 I AXg x 6.V.G.G.P.G.3XeX5 G c.B y x :.6.7.q.9.7.t.tXH $ ' wXSXa.-.%.%.*.-.*.*.M *.*.m m *.*.n x @.@.*., UXUXUX",
"UX v W.Q.Q.!.!.!.!.!.!.!.!.!.~.K.dX{ X 8 +.^ t x 6.V.S.P.P.D.A.dXO.# 5 +.| , y v ,.6.9.q.q.7.<.8XZX5 8 +.SXz.D %.*.*.*.*.*.*.m m n n n *.x x @.$.< UXUXUX",
"UX v Q.Q.Q.!.!.!.!.!.!./.!.!.~.I.N.uXX.5 # I c.| , y #.7.V.S.P.P.G.C.B.iX+.7 X G +.+.2 q f v ,.6.q.q.9.9.6.1.yXqXJ X o o X $ I AXSXk.-.*.M *.M *.n n n m n n x @.@.@.> o UXUXUX",
"UX x Q.Q.Q.Q.!.!.!.!.!.!.!.!.~.U.Z.d.uXZX| H 5 # X 4 G Y c.qX! < q j =.q.Z.G.G.G.G.Z.w.i.rXAXX.I 7 # o o $ 8 I X.+.{ 2 : e j #.<.6.9.9.q.7.6.:.-.z.wX+.I 8 $ X X # X X X 4 ] SXSXF M n *.n n m n n *.b x v @.@.> o UXUXUX",
"UX n Q.Q.Q.Q.!.!.!.!.!.!.!.Q.W.T.G.w.1.p.9XwXc.qXc.| ' _ _ _ _ _ ] ] ] ] ] _ _ ] ] _ ] _ ] _ _ ] _ ] ] ] _ _ _ _ ] _ ] ] ] _ _ _ _ _ _ _ _ _ ] ] _ ] _ ] _ _ _ _ ' ' O.+.ZXc.c.E 3 = , y x <.w.Z.G.P.P.G.S.V.6.#.D z.qXc.c.c.| { ] ] _ ] _ _ ] ] _ _ ] ] ] _ _ _ ] _ _ ] _ _ ] ] ] _ _ _ _ _ _ ] _ _ ] _ _ _ _ _ ] _ _ ] _ _ ] ] _ _ _ _ _ ] ] ] _ ] _ _ _ ] _ _ _ ' X.+.+.+.qX] 6 & * , f z =.<.7.q.q.q.7.6.,.#.k S / wXc.c.c.X.{ ] _ ] ] _ _ ] _ _ _ _ _ _ _ _ _ _ ] ] _ _ _ _ _ ] _ _ _ ] ] ] _ _ ] _ ] _ _ _ _ ] ] ] _ _ _ _ ] _ Y Y I I 8 4 X X # X X X X X 7 ZXc.*.b *.*.m M m n n x x v @.@.> UXUXUX",
"UXo v Q.Q.Q.!.!.!.!.!.!.!.!.!.!.E.P.Z.9.$.k g Z P ! [ [ .| .| o.| | | | | | o.| | | | .| ...| | | | o.| | | o.| | .| | | X.| | X. .o.| | | | | | | | | | | | { ' ^ P V 6 & * : q y x :.q.C.S.G.P.G.G.D.C.q.,.x h p B P E [ ' | | | | | | | | | | | | ..| | | | | | | | | | | ..| | | | | | | | | | | | | | { | | | | | | | | | | | | | | | | | | | | | | | X.| ` ~ U J 6 = + & : q y j #.,.6.7.q.7.9.9.7.6.=.v h e r s K P ] ` | | | | | | | | | { { | | | | | | | | { | | | | | { | | { { { | | | { { | | { | | { | { | | | { | O.c.c.+.+.+.` # X X X X # X # X X # J SXD N c b n b b n n n x x @.@.> o UXUXUX",
"UX v W.Q.Q.Q.!.!.!.!.!.!.!.!.Q.W.T.P.C.7.:.x u t e q > : : : : * : : * : : * : : : * : * * * * * : * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * : : > , w y h x >.9.V.Z.G.P.P.G.G.G.Z.V.9.>.v j t q > > * * * * & * * & * & & & * & & * & & * * & * & & & & & & & & & & & & & & % & & & & & % & & % % % % & & & % % % % % % & & % & % % & % & % & * * * > , e f k @.>.<.7.7.9.7.9.9.7.6.,.#.x h t q > : * & & + + + % + + + + + % + + % + + + + + + @ + + % + @ @ + @ + @ @ + + + @ @ + @ + + @ @ @ @ @ @ @ @ @ @ + = 0 L ZXI o X # # X X X X X X X $ AXl.a N n n b n b b b x x @.@.> o UXUXUX",
"UXUXn W.Q.Q.!.!.!.!.!.!.!.!.!.!.Q.E.T.H.C.q.<.=.x k j u a u y y y y y y y y y y y y y y y y y y y y y y y y y y t y t y t y y t t t y t t y t y t t t t t t t e t t t t t y u h k x $.,.q.V.Z.G.G.G.P.G.G.G.S.Z.V.q.6.#.@.j h y y t e e e e q e q e q e q e q q e q q q q q q q e q q q q q q q q q q q q q q q q q q q q q , q q q , , , q , q , , , , , , , , , , , q , q q t y f h x @.,.<.6.7.q.7.q.9.9.7.6.6.>.=.v k f y e q , , , > > > > > > : > : > : > > : : : > : : : : : : : : : : : : : : * : : * : : * : * : : * : : * : : * ; * * & ~ +. X X X X X X X X # X X X # ZXz.a l c b n b n n b x x v @.< UXUXUX",
"UXUXx W.Q.Q.!.!.Q.!.!.!.!.Q.!.!.Q.W.E.T.P.S.C.w.7.<.>.=.$.$.*.#.#.#.#.#.#.#.#.#.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.v v @.v v v @.v v v v v v v v x v x v x v x v x x x x v v @.#.=.>.,.7.e.C.Z.S.G.G.G.G.G.G.G.G.S.Z.V.w.9.,.>.#.@.x x z k k k k k k k z k j k j j j j j j j j j j j j j j j j j j j a a j j j a j h h j a j a j a h h h h h h h a f h h f f f f f u h u h h h j j z x #.=.,.<.7.9.q.9.9.9.7.7.9.7.6.6.,.=.@.v k j h y y y y y y t t t y y t t t t t t t t t t e t t e t e t e e t e e e e e e e e e e e e e e e q w e w w w q q q > R qX$ X X X X # X X X X X X X X ZXz.i a c b b M b b c x x x @.: UXUXUX",
"UXUXx W.Q.Q.Q.!.!.!.!.!.!.!.Q.!.Q.Q.Q.E.E.U.P.D.Z.C.g.e.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.q.9.q.9.9.9.9.7.7.9.7.9.9.9.7.7.9.7.7.7.7.7.7.7.6.6.6.7.6.6.6.6.6.6.6.6.6.6.6.6.6.6.7.q.w.V.C.Z.S.G.G.G.G.P.P.G.P.G.G.G.S.S.Z.g.w.q.7.6.<.,.,.,.,.>.>.>.>.=.=.=.>.=.>.=.=.=.=.:.=.$.=.$.=.$.$.$.$.$.#.$.=.$.$.#.#.#.$.#.#.#.#.*.#.@.#.#.#.@.@.@.@.@.@.@.@.@.v @.@.@.v v @.v v v v @.@.$.=.:.,.6.6.7.7.9.9.9.9.9.9.7.7.7.6.6.<.<.,.=.$.v @.x x z z z z k k x k k k k k k j j k j j j j j j j j j j j j h j h j h j h h h h h h h u h h h f h h f u f f y t A qX$ X # X X # X X X X X X X X # ZX/ r g l c M n c *.c z x @.x : o UXUXUX",
"UXUXx E.Q.Q.Q.!.!.!.!.!.!.!.Q.!.Q.Q.Q.Q.W.W.E.U.U.P.P.G.H.G.G.G.D.H.H.G.D.D.D.S.D.D.S.S.D.S.S.D.S.S.S.S.Z.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.C.C.Z.Z.Z.C.C.C.C.C.C.V.C.V.V.V.V.V.V.V.C.C.Z.S.S.S.G.G.P.G.P.G.G.G.G.G.G.G.D.D.S.S.S.Z.C.g.e.e.w.w.q.q.w.w.q.w.w.q.q.q.w.q.q.q.q.q.9.q.9.9.9.9.9.9.7.7.7.7.9.7.7.7.7.7.7.7.6.6.6.6.6.6.6.6.6.6.<.<.<.<.<.<.<.<.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.<.6.7.7.9.9.9.9.7.9.9.9.7.7.7.7.7.7.6.6.,.<.,.,.:.=.$.$.=.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.@.@.@.@.v @.@.v v v v @.v v x v v x x x x x x x x x x x x z x z x z k k j D qX4 X # # X X X # X X X # X X X X ZX/ r i l c n c n c z z x x v : X UXUXUX",
"UXUXk T.Q.Q.Q.!.!.!.Q.!.Q.!.!.Q.Q.Q.Q.Q.Q.!.W.W.W.E.E.T.E.T.T.T.E.T.T.E.T.T.T.U.U.U.U.U.U.I.U.U.I.U.I.U.I.I.I.I.P.I.P.P.P.P.P.P.P.G.P.P.G.G.G.G.G.G.G.D.G.D.G.G.G.G.G.S.D.D.D.G.G.G.G.G.G.P.G.P.G.P.G.G.G.G.D.D.G.D.S.S.S.S.Z.Z.C.C.C.C.C.V.C.V.g.g.C.g.g.g.g.g.g.g.g.g.e.g.g.e.e.g.e.e.e.e.e.e.e.w.e.w.w.q.w.q.w.w.w.w.q.q.q.q.q.q.q.q.q.q.9.9.9.9.q.7.7.q.9.9.7.7.7.7.7.7.7.7.7.7.q.7.9.9.9.9.9.7.7.7.7.7.7.7.7.6.7.6.6.<.<.<.<.,.,.,.>.,.>.,.>.>.,.>.>.>.:.=.=.=.=.=.=.=.=.=.=.=.$.$.$.$.=.#.$.$.#.$.#.$.#.#.#.#.#.#.@.@.@.v @.@.v @.v v v x x D qX4 X X X X X X X X X X X X X X X X ZX` w i l l b c b *.z z x v x * UXUXUX",
"UXUXj U.Q.Q.Q.!.!.!.Q.Q.Q.!.!.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.Q.W.Q.W.Q.W.W.W.E.W.E.W.W.T.T.W.T.E.T.E.E.T.E.T.T.T.T.T.T.T.T.U.U.U.U.U.U.U.U.I.I.I.I.I.I.I.I.I.I.P.P.P.G.P.P.P.P.G.G.G.G.P.G.P.G.G.G.G.G.G.G.G.G.G.D.D.D.D.D.D.D.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.C.V.C.V.g.C.g.C.g.C.g.g.g.g.g.g.g.g.e.g.g.g.e.e.e.e.e.e.e.w.e.w.w.w.e.w.w.w.w.w.q.q.q.q.q.q.q.q.9.q.9.9.9.q.q.q.9.9.9.9.9.7.7.9.7.9.7.7.7.6.6.7.6.6.6.6.6.<.6.<.6.<.<.,.<.<.,.<.,.,.,.,.,.,.,.=.,.=.,.=.=.>.:.>.=.:.:.:.=.=.:.:.$.:.$.$.$.$.$.#.$.$.$.$.#.#.#.#.#.#.#.@.@.@.v p.wX4 X X X X X X X X X X X X X # X X X ZX[ w i l l c *.c k x x x v k * UXUXUX",
"UXUXu G.Q.Q.Q.Q.!.Q.!.!.!.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.W.E.W.E.W.E.E.E.E.T.E.T.E.T.T.T.T.T.T.U.U.U.U.U.U.U.U.U.U.U.I.U.I.I.I.I.I.I.I.P.P.P.P.P.P.G.P.P.P.G.P.G.G.G.G.G.G.D.D.G.D.D.D.D.S.S.S.S.S.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.C.C.g.C.g.g.C.C.g.g.g.g.g.g.g.g.e.g.g.g.e.e.e.e.e.w.e.e.e.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.9.q.q.7.q.9.9.7.9.9.7.9.7.7.7.7.6.7.6.6.6.6.6.6.6.6.<.6.<.<.6.,.<.<.<.,.,.,.,.,.,.>.,.,.,.,.,.,.,.>.>.>.>.>.>.>.>.:.:.>.$.:.=.$.$.>.$.$.$.#.$.#.$.#.$.#.#.#.#.#.#.#.v p.9X4 o X # X X # # X X X X X X X X X X X X ZX[ < i a c c l c c k k z v l & o UXUXUX",
"UXUXy S.Q.Q.Q.!.!.!.Q.!.!.Q.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.W.W.W.W.T.W.E.E.E.W.E.E.E.E.T.T.E.T.T.T.T.T.U.T.U.T.U.U.U.I.U.U.U.I.U.U.I.I.I.I.P.I.P.P.P.I.P.P.P.P.P.P.P.P.G.G.P.G.G.G.G.D.D.D.G.S.G.S.D.D.D.S.D.S.S.S.S.S.Z.Z.S.Z.Z.Z.Z.Z.Z.Z.C.Z.C.Z.C.C.C.C.V.C.C.C.g.C.g.C.C.g.C.g.g.g.g.g.g.g.g.g.e.g.e.e.e.e.e.w.e.e.e.w.w.w.w.w.w.w.q.q.q.q.q.q.q.9.q.9.9.q.9.7.q.7.9.9.9.9.7.9.6.7.6.7.7.7.6.6.6.6.6.6.<.6.<.<.6.<.<.<.<.<.,.<.,.,.,.,.,.,.,.,.>.,.=.=.>.>.>.>.>.>.>.>.:.>.=.:.>.:.$.$.=.$.$.$.$.$.$.#.$.#.$.#.#.#.#.#.@.@.@.@.p.AX4 o X # X X X X X X # X X X X X X X X X X ZX` < i g l c c c z z x z v a & UXUXUX",
"UXUXw Z.Q.Q.Q.Q.Q.!.!.!.Q.!.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.W.W.E.W.W.W.E.W.W.E.T.E.E.E.T.E.T.T.T.T.T.U.T.T.U.U.T.U.U.U.U.U.U.I.U.I.I.I.I.I.I.I.I.I.P.P.P.P.P.P.G.P.G.G.G.G.G.G.G.G.G.D.G.D.G.D.D.S.D.D.S.S.S.S.S.S.S.Z.S.Z.S.Z.Z.S.Z.Z.Z.Z.Z.C.C.C.C.C.C.V.V.C.V.V.g.C.g.C.g.g.g.g.g.g.g.g.g.g.e.g.e.e.e.e.e.e.w.e.e.e.w.w.w.w.w.w.w.q.w.q.q.q.q.q.q.q.q.9.9.q.9.9.9.9.7.9.9.7.7.7.7.7.7.7.6.7.6.6.6.6.6.<.6.6.6.<.6.,.<.6.<.<.<.,.,.<.,.,.>.,.,.,.>.,.=.,.>.,.>.>.>.>.:.>.=.:.=.=.$.$.:.$.$.$.$.$.$.$.$.#.$.$.#.#.#.#.#.#.#.#.#.@.v p.9X4 X X X X X X X X X X X X X X X X X X X X ZX` w i f l c z z z k z k v a + X UXUXUX",
"UXUX> e.Q.Q.Q.!.!.Q.!.Q.!.Q.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.W.W.W.W.W.W.E.E.E.E.E.E.T.E.E.E.T.T.T.T.T.T.U.T.T.U.U.T.U.U.U.U.I.U.I.U.U.I.I.I.I.I.I.P.I.P.P.P.P.P.P.P.G.P.P.G.G.G.G.G.G.G.D.D.D.G.G.S.D.S.S.S.S.S.S.S.S.S.S.S.Z.S.S.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.C.C.V.V.C.g.C.V.V.V.g.g.g.C.g.g.g.g.e.g.g.e.e.e.e.e.e.w.e.e.w.w.w.w.w.w.w.q.w.q.q.q.q.q.q.q.9.q.9.9.9.9.9.9.7.7.9.7.7.7.7.7.9.6.6.6.6.6.6.6.6.<.6.<.6.<.<.<.<.<.<.<.,.<.,.,.,.,.,.,.>.,.>.>.,.>.>.>.>.>.>.>.>.>.:.>.>.$.:.=.$.$.>.$.$.$.$.$.$.$.#.#.#.#.#.#.#.@.#.#.@.@.@.@.p.wX4 X X X X # X X X X X X X X X X X X X X X X X ZX] < i f l c c c k k k x x u O . UXUXUX",
"UXUX+ 9.Q.Q.Q.Q.Q.!.Q.!.Q.!.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.W.E.W.E.E.E.E.E.E.E.E.E.T.E.T.T.T.T.T.T.U.U.T.U.U.U.U.U.U.U.I.I.I.I.I.I.I.I.I.I.P.P.P.P.G.P.P.P.G.P.G.G.G.G.G.G.G.G.D.D.G.D.S.S.D.S.G.S.G.S.S.S.S.S.S.Z.Z.Z.Z.Z.Z.Z.Z.C.Z.Z.C.C.C.C.C.C.V.C.C.V.C.V.V.V.V.V.V.g.V.g.g.g.g.g.g.e.g.e.e.e.e.e.e.w.e.e.w.w.q.w.w.w.w.w.q.w.q.q.q.q.q.9.q.q.q.9.q.9.9.9.9.9.9.9.9.7.7.7.7.7.6.7.6.6.6.6.6.6.6.6.6.6.<.6.<.<.<.<.<.<.,.,.,.,.,.,.,.,.,.>.,.,.>.>.>.>.>.>.>.$.>.$.>.$.$.>.$.$.:.$.$.$.$.#.$.$.#.#.$.#.$.#.#.#.#.#.@.@.@.@.@.@.p.ZX$ X X X # X X X X X X X X X X X X X X X X X X X ZX[ , i f l k c c k k x k x t . o UXUXUX",
"UXUXX <.Q.Q.Q.Q.!.Q.!.Q.Q.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.E.E.E.E.E.E.E.E.E.E.E.T.E.T.E.T.T.T.T.U.T.U.T.U.U.U.U.U.U.U.I.I.U.U.I.I.I.P.I.P.P.P.P.P.P.P.P.G.P.G.P.P.G.G.G.G.G.G.D.G.D.G.D.D.S.G.S.G.S.S.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.V.C.C.g.C.V.C.g.C.g.V.g.V.g.g.V.g.g.g.g.g.g.e.g.e.e.e.e.e.e.w.e.w.w.w.b.w.w.w.w.q.w.q.q.q.q.q.9.q.q.9.9.9.9.9.9.9.9.9.7.9.7.7.7.7.7.6.7.6.6.6.6.6.6.6.6.<.<.6.<.<.<.<.<.<.,.,.,.,.,.,.,.,.,.,.>.>.,.>.>.>.>.>.>.>.>.>.>.>.$.:.$.$.>.$.$.$.$.$.$.$.#.#.#.#.#.#.#.#.#.#.#.@.@.@.@.@.@.@.p.wX4 X X X X X X X X X X X X X X X X X X X X X X X X ZX[ < r f l c k c k k k x v w o X UXUXUX",
"UXUX #.Q.Q.Q.Q.Q.!.Q.!.!.Q.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.W.W.W.E.W.E.W.E.E.E.E.T.E.E.T.T.T.T.T.U.T.T.U.T.U.U.U.U.U.U.U.U.I.U.I.I.I.I.I.I.I.I.P.P.P.P.P.P.P.P.P.G.G.G.G.G.G.D.G.G.D.D.G.S.D.D.D.S.S.S.S.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.C.C.C.V.C.V.V.V.V.V.V.g.V.g.g.g.g.e.g.g.e.e.g.e.w.e.w.e.w.e.w.e.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.9.9.9.q.9.9.9.9.9.9.9.7.7.7.7.7.7.6.7.6.7.6.6.6.6.6.<.6.<.6.<.<.<.<.<.<.,.<.,.<.,.,.,.>.,.,.,.>.>.>.>.>.>.>.>.:.>.$.>.$.>.$.$.>.$.:.$.$.$.$.#.$.$.$.#.$.$.#.#.#.#.#.@.@.@.@.@.@.@.@.v p.wX4 X X X X X X X X X X # X X X X X X X X X X X X c.` , p f l l c c k k k x x > UXUXUX",
"UXUXUXk U.Q.Q.Q.Q.!.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.W.E.W.W.W.E.W.E.E.E.E.E.E.E.E.T.T.T.T.T.T.T.U.T.U.U.T.U.U.U.U.U.I.U.I.I.U.I.I.I.I.I.I.P.I.P.P.P.P.P.P.G.P.G.G.P.G.G.G.G.G.G.D.D.D.G.D.G.S.S.S.D.S.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.V.C.C.V.V.V.V.V.g.V.V.V.g.V.g.V.g.g.g.g.g.e.e.g.e.e.e.e.e.e.w.e.w.e.w.w.q.w.w.w.q.9.q.q.q.q.q.9.q.9.9.q.9.9.9.9.9.9.9.9.7.9.7.7.7.6.7.7.6.6.6.6.6.<.6.<.6.6.6.<.<.<.<.<.<.,.,.,.,.,.,.,.,.>.>.,.>.>.,.>.>.>.>.>.>.>.=.>.$.>.$.$.$.$.:.$.$.$.$.$.$.#.$.#.#.$.#.#.#.#.#.v @.@.@.@.@.@.@.@.v p.wX4 X X X X X # X X X X # X X X X X X X X X X X X X X ZX^ < i a l j k k k k k z j * UXUXUX",
"UXUXUXy S.Q.Q.Q.Q.Q.Q.!.Q.!.Q.!.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.W.W.W.W.E.W.E.E.E.E.E.E.E.E.E.E.T.T.T.T.T.T.T.T.U.T.T.U.U.U.U.U.U.U.I.U.U.I.I.I.I.I.P.I.I.P.P.P.P.P.G.P.P.G.G.P.G.G.G.G.G.G.D.G.G.D.S.D.S.D.G.S.S.S.S.S.S.Z.S.Z.S.Z.S.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.V.C.C.V.V.C.V.V.C.g.V.g.g.g.g.g.g.e.g.e.g.e.e.e.e.e.e.e.w.w.e.w.w.w.w.w.q.b.q.q.q.b.q.q.q.q.q.q.q.9.9.q.9.9.9.9.9.9.7.7.9.6.9.6.7.7.6.6.6.6.6.6.6.6.<.6.<.<.<.<.<.<.<.,.,.,.<.,.,.>.,.,.,.,.,.,.,.>.>.>.>.>.>.>.$.>.$.>.>.$.>.$.:.$.$.$.$.$.$.#.$.#.#.$.#.#.#.#.#.#.#.#.@.@.@.@.@.@.x @.x p.wX$ o X # X X X X X X X X X X X X X X X X X X X X X o o X qX^ , t g l k k k j k k z a % X UXUXUX",
"UXUXUX> V.Q.Q.Q.Q.!.Q.Q.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.W.E.W.W.E.E.W.E.E.E.E.T.E.E.E.T.T.T.T.T.T.T.T.T.U.U.U.U.U.U.I.U.I.U.I.I.I.I.I.I.P.I.P.P.P.P.P.P.P.G.P.P.G.G.G.G.G.G.G.G.D.G.D.D.D.S.D.D.S.S.S.S.S.S.S.S.Z.Z.S.S.Z.Z.Z.Z.Z.C.Z.Z.C.C.C.C.C.V.C.C.C.V.C.V.V.V.V.V.V.g.g.g.g.g.g.g.g.g.e.e.e.g.e.e.e.w.e.e.w.e.w.w.w.w.w.q.q.q.q.q.q.9.q.q.q.9.9.9.9.9.9.9.9.9.9.9.6.9.7.9.6.6.6.6.6.7.6.6.6.6.6.6.6.<.6.<.<.<.<.<.<.,.<.,.,.,.,.,.,.,.>.>.:.,.:.>.>.>.>.>.>.>.>.>.:.>.>.>.$.$.$.$.$.$.$.$.$.#.$.#.#.$.#.#.#.#.#.#.#.#.v @.@.@.v @.x @.x v p.c.4 X X X X X X X X X X X X X X X X X X X X X X X X X o ZX` < r i j l k j j k k x y O o X UXUXUX",
"UXUXUX@ 9.Q.Q.Q.Q.Q.!.Q.Q.Q.!.Q.Q.Q.Q.Q.Q.Q.W.W.Q.W.W.W.W.W.W.E.E.W.E.E.E.E.T.E.E.E.E.T.T.T.T.T.T.U.U.U.U.U.U.U.U.U.U.U.I.U.U.P.I.I.I.I.P.I.P.P.P.P.P.P.G.P.P.G.G.G.P.G.G.G.G.D.D.G.D.D.D.D.D.D.S.D.D.S.S.S.S.S.Z.S.S.Z.Z.Z.Z.Z.C.Z.Z.Z.C.C.C.C.C.C.C.V.V.V.V.V.C.V.V.V.V.g.V.V.g.g.g.g.g.e.e.g.e.e.e.e.w.e.e.w.e.w.w.w.w.w.w.q.q.9.b.q.q.q.q.q.q.9.q.9.q.9.9.9.9.9.9.9.7.9.6.9.6.9.6.7.7.6.6.6.6.6.6.6.<.<.<.<.<.<.<.,.<.,.<.,.,.,.,.,.>.,.,.>.>.,.:.,.:.>.>.>.:.>.>.$.$.>.$.$.$.:.$.$.$.$.#.$.$.#.$.#.$.#.#.#.#.#.#.#.v #.v #.@.@.@.@.@.@.@.@.v p.wX4 o X X X # X X X X X X X X X X X X X X X X X X X X X X X X qX` < i a j k k j j k k k e . X UXUXUX",
"UXUXUX #.W.Q.Q.Q.Q.!.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.W.W.E.W.W.W.W.E.E.W.E.E.E.E.E.E.T.T.T.T.T.T.T.U.U.T.U.U.U.U.U.U.U.P.I.U.I.I.U.P.I.I.P.I.P.P.P.P.P.P.P.P.G.P.G.G.G.G.G.G.G.G.D.D.G.D.D.D.D.S.D.S.S.S.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.C.C.V.C.V.V.g.V.V.V.g.V.g.g.g.e.g.g.e.e.e.e.e.e.e.e.e.e.w.w.w.w.w.w.w.w.q.w.q.q.q.q.q.q.q.q.9.b.9.9.9.9.9.7.9.9.9.9.6.9.7.6.7.7.6.7.6.6.6.<.6.6.6.<.<.6.<.<.<.<.<.,.<.<.,.,.,.,.,.,.>.,.>.,.>.>.>.>.>.>.>.>.>.$.>.:.$.$.:.$.$.$.$.$.$.$.$.$.#.$.#.#.#.#.#.#.#.#.#.#.#.v #.v @.v @.v @.v @.x x p.ZX4 X X # X X X X X X X X X X X X X X X X X X X X X X X X X ZX_ < e u l l k j j k k z > o X UXUXUXUX",
"UXUXUXo h I.Q.Q.Q.Q.Q.Q.Q.!.Q.Q.Q.Q.W.Q.W.W.W.W.W.W.W.W.E.E.E.E.E.E.E.E.E.E.T.E.T.T.T.T.T.T.T.T.T.U.U.U.U.U.U.U.U.U.U.I.I.I.I.I.I.I.I.P.I.P.P.P.P.G.P.G.P.G.P.G.P.G.G.G.G.D.D.G.D.D.S.D.S.D.S.D.S.S.S.S.S.S.Z.S.S.Z.Z.Z.Z.Z.Z.C.Z.C.Z.C.C.C.C.V.C.C.V.V.V.V.V.V.V.g.V.g.g.g.g.g.g.g.e.g.e.g.e.e.e.w.e.e.w.w.e.e.w.w.w.q.w.q.w.q.q.q.q.q.q.9.9.q.9.9.9.9.9.9.9.9.9.6.6.9.9.6.9.6.6.7.6.6.6.6.6.6.<.6.<.6.<.<.<.<.<.<.<.<.,.,.,.,.,.,.>.,.,.>.,.>.>.>.>.>.>.>.$.>.>.>.$.>.>.$.>.$.$.$.$.$.$.$.#.$.#.$.#.$.#.#.#.$.#.#.v #.v #.v #.@.v v @.@.v @.x x p.AX5 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X ZX~ < i i a j a k k k z a & UXUXUXUX",
"UXUXUXUXw C.Q.Q.Q.Q.!.Q.Q.Q.Q.!.Q.W.Q.W.Q.W.W.W.E.W.W.W.E.W.E.E.E.E.E.E.E.E.E.T.T.T.T.T.T.T.T.U.U.U.U.U.U.U.U.I.U.U.P.U.I.I.I.I.I.P.P.P.P.P.P.P.P.G.G.P.G.G.G.G.G.G.G.G.G.D.G.S.D.D.D.D.D.D.S.S.S.S.S.S.Z.S.S.Z.Z.Z.Z.Z.C.Z.C.Z.C.C.C.C.C.C.V.C.V.V.V.V.V.V.V.V.V.V.g.g.g.g.g.g.g.e.e.g.e.e.e.e.e.e.e.w.w.e.w.w.w.w.w.w.q.w.q.q.q.q.q.9.9.q.9.9.9.9.9.9.9.9.9.9.9.9.6.9.6.9.6.6.6.6.6.6.6.6.6.6.6.<.<.<.<.<.<.,.<.,.<.,.<.,.,.,.,.>.,.>.>.>.>.,.>.>.>.>.>.>.$.>.$.>.$.$.=.$.$.$.$.$.$.#.$.#.$.$.$.#.#.#.#.#.#.v v v #.#.v #.#.v v @.v @.v @.x @.x p.AX5 X X X X X # X X X X X X X X X X X X X X X X X X X X X X X X ZX` < r i l k k a j k z y @ UXUXUXUX",
"UXUXUXUX+ q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.W.W.E.E.W.E.E.E.E.E.E.E.E.T.T.E.T.T.T.U.T.T.T.U.U.U.U.U.U.U.I.U.I.P.U.U.P.I.I.I.P.I.P.I.P.P.P.P.G.G.P.P.G.P.G.G.G.G.G.D.D.D.G.D.D.D.D.S.S.S.S.S.S.S.S.S.Z.S.Z.Z.S.Z.Z.Z.Z.Z.Z.C.C.Z.C.C.V.V.C.V.C.C.V.C.V.V.V.V.V.g.g.g.V.g.g.g.g.g.e.g.e.e.e.e.e.e.w.w.e.w.w.w.w.w.w.q.w.q.q.q.q.q.q.q.q.q.9.q.9.9.9.9.7.9.9.9.7.6.9.7.6.7.7.6.7.7.6.6.6.6.<.<.6.6.<.6.<.<.<.<.<.,.<.,.,.,.,.>.,.,.,.>.,.,.>.>.>.>.>.>.>.>.$.>.:.:.:.$.>.$.:.$.$.$.$.$.$.#.$.#.#.$.#.#.#.#.#.#.#.#.#.#.v #.v #.v @.v @.v v v v x m p.AX5 X X X X X X X X X X X X X X X X X X X X X X X X X ZX^ < r u a k a j j j j t o X X UXUXUXUX",
"UXUXUXUX v W.Q.Q.Q.Q.Q.Q.Q.Q.Q.W.Q.W.W.E.W.W.W.W.W.E.W.E.E.E.E.E.E.E.T.T.T.T.T.T.T.U.T.T.U.U.U.U.U.U.U.U.U.I.U.I.I.I.I.I.I.P.I.I.P.P.P.P.P.P.G.P.P.G.G.G.G.G.G.G.G.G.D.G.D.D.S.D.S.D.D.S.S.S.S.Z.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.C.V.C.V.V.V.C.g.V.V.V.g.g.g.g.g.g.g.e.g.g.e.e.e.e.e.e.e.w.e.w.w.w.w.w.w.w.w.q.q.w.q.q.q.9.9.q.q.q.9.9.9.9.9.9.9.7.9.7.7.6.9.6.9.6.9.6.6.6.6.6.6.6.<.6.<.<.6.<.<.<.<.<.<.<.,.,.,.,.,.,.>.>.,.>.>.>.>.>.>.>.>.>.>.>.>.$.>.>.$.>.$.:.$.$.$.$.$.#.$.#.$.$.#.#.#.#.v v #.#.#.#.v #.#.v #.v v @.v @.v v v v *.m h.AX5 X X X X X X X X X X X X X X X X X X X X X X X X X X X X ZX^ < r y l a j j j k k : X UXUXUXUX",
"UXUXUXUXo y H.Q.Q.Q.Q.Q.Q.Q.Q.W.W.W.W.W.W.W.W.E.E.E.E.E.E.E.E.E.E.E.T.T.T.E.T.T.T.T.T.U.U.U.U.U.U.U.U.U.U.I.I.I.U.I.I.I.I.P.P.P.P.P.P.P.P.P.G.P.G.G.G.G.G.G.G.G.D.G.S.G.S.D.D.D.S.S.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.Z.C.C.C.C.V.C.V.C.V.C.V.V.V.V.V.g.g.g.g.g.g.g.g.e.g.e.e.e.e.e.e.e.w.e.e.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.b.9.9.9.9.9.9.9.9.9.9.9.9.9.7.7.9.6.9.6.6.6.6.6.6.6.6.<.<.6.<.6.<.<.<.<.<.,.,.,.,.,.,.,.,.>.,.,.,.>.,.>.>.>.>.>.>.>.>.:.$.>.:.$.$.$.$.:.$.$.$.$.$.$.$.#.#.#.#.#.#.#.#.#.#.#.#.v v #.v v v v v #.v v v v v n %.*.m p.AX5 X X X X X X X X X X X X X X X X X X X X X X X X o o qX` > r u j a a j j j u % o X UXUXUXUX",
"UXUXUXUXUX* e.Q.Q.Q.Q.Q.W.Q.W.W.W.W.E.W.W.W.E.W.W.E.W.E.E.E.E.E.T.T.E.T.T.T.T.T.T.U.T.T.U.U.U.U.P.U.U.P.U.I.I.I.P.I.I.I.P.I.P.P.P.G.P.G.G.P.P.G.G.G.P.G.G.G.G.D.D.G.D.D.S.G.S.D.S.S.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.V.C.V.C.V.C.g.V.V.g.V.g.V.V.g.g.g.g.e.g.e.e.e.e.e.e.w.w.e.e.w.w.w.w.w.w.q.w.w.w.q.q.q.q.q.q.q.9.q.9.9.9.9.9.9.9.9.9.7.9.6.7.7.6.6.6.7.6.6.6.6.6.<.6.6.6.<.<.<.<.<.<.<.<.,.,.,.,.,.>.,.>.,.>.>.,.>.,.>.>.>.>.$.>.>.:.:.>.$.>.$.$.:.$.$.$.$.$.$.#.$.#.#.$.#.#.#.#.#.#.#.#.#.#.#.#.v #.v v v v v @.v v x n @.%.m m h.AX5 X X X X X X X X X X X X X X X X X X X X X X X X X X X X ZX~ < r i a a a j j k e . X UXUXUXUXUX",
"UXUXUXUXUXo $.W.Q.Q.Q.W.Q.Q.W.W.W.W.W.W.W.E.W.E.E.E.E.E.E.E.T.E.T.E.T.T.T.T.T.U.T.U.U.U.U.U.U.U.U.U.U.U.I.I.U.I.I.I.P.I.P.P.P.I.P.P.P.P.P.G.G.P.G.G.G.G.G.D.D.G.G.S.G.S.D.S.D.S.S.S.S.S.S.S.S.Z.S.Z.Z.S.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.C.V.C.C.V.V.V.V.V.V.V.g.V.g.g.g.g.g.g.g.e.g.e.e.e.e.e.e.e.w.w.e.w.e.w.w.w.w.q.q.q.q.q.q.9.q.q.9.q.9.q.q.9.9.9.9.7.9.7.7.7.7.7.7.6.9.7.6.6.6.6.6.6.6.<.<.6.<.<.<.<.<.<.,.,.,.<.,.,.,.,.,.,.,.>.,.>.>.>.>.>.>.>.>.=.$.>.:.$.>.$.:.$.$.$.#.$.$.$.#.$.#.$.$.#.#.#.#.#.#.#.v v #.v v #.v v v #.v #.v v v v *.%.*.*.m m p.AX5 X X X X X X X X X X X X X X X X X X X X X X X X ZX^ > w i a a j j j k > X UXUXUXUXUX",
"UXUXUXUXUXX y H.Q.Q.Q.W.W.Q.W.W.W.E.W.W.W.E.E.E.W.E.E.E.E.E.E.T.T.T.T.T.U.T.U.T.U.U.U.U.U.I.U.U.I.U.I.I.I.I.I.I.I.I.P.P.I.P.P.P.P.P.G.P.P.G.G.P.G.G.D.G.D.D.G.D.D.D.S.D.D.S.S.D.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.V.V.C.C.V.V.V.V.V.g.g.V.g.g.g.e.V.e.e.V.e.e.e.e.w.e.e.e.w.e.w.w.w.q.w.q.w.q.q.q.q.9.q.9.q.q.9.9.9.9.9.9.9.9.9.7.7.9.7.7.6.7.7.7.6.7.6.6.6.6.6.<.<.6.<.<.<.<.<.<.<.<.<.,.,.,.,.,.>.,.>.,.>.,.>.>.>.>.>.>.>.:.>.=.$.$.$.>.$.:.$.=.$.#.$.$.$.#.$.#.$.#.#.#.#.#.#.@.@.@.@.@.@.@.v @.v @.@.@.v v v v v %.m m *.m m n p.AX5 X X X X X X X X X X X X X X X X X X X X X X X X X ZX~ < w y a a a j k a % X UXUXUXUXUX",
"UXUXUXUXUXUX& q.W.Q.W.Q.W.W.W.W.W.W.W.E.E.E.W.E.E.E.E.T.E.T.E.T.T.T.T.T.T.U.U.T.T.U.U.U.U.U.I.U.U.I.U.I.I.I.I.I.P.I.P.P.P.P.P.P.G.P.G.G.G.G.G.G.G.G.G.G.G.D.D.D.D.D.D.S.D.S.S.S.S.S.S.S.Z.S.Z.S.Z.Z.C.Z.Z.C.C.C.C.C.C.C.C.V.V.C.V.C.V.V.V.V.V.g.g.g.V.g.g.g.g.e.e.V.e.e.e.e.e.e.e.e.w.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.9.9.q.9.q.9.9.7.9.7.9.9.7.7.7.7.7.6.6.6.6.6.6.6.<.6.<.6.<.6.<.<.<.<.<.<.,.,.,.,.,.,.,.,.,.>.,.,.>.>.>.>.>.>.>.>.>.=.:.:.>.>.$.$.$.:.$.=.#.=.#.$.#.$.$.#.#.#.#.#.#.@.#.@.#.@.@.@.@.v @.v @.v v v v v v *.%.%.m %.m *.m n p.AX8 X X X X X X X X X X X X X X X X X X X X X X X # ZXP < r y a a a j j e . o X UXUXUXUXUX",
"UXUXUXUXUXUX #.T.Q.Q.W.W.W.W.W.W.W.E.E.E.W.E.E.E.E.E.E.T.E.T.T.T.T.T.T.U.U.T.U.U.U.U.U.U.I.I.U.I.I.U.I.I.I.P.I.P.P.P.P.P.P.P.G.G.P.P.G.G.G.G.G.G.G.D.D.G.D.D.S.D.D.D.S.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.C.V.C.V.V.V.V.V.V.g.g.V.g.g.g.g.e.e.e.e.e.e.e.w.w.w.e.e.w.w.e.w.w.w.w.q.w.q.q.q.q.q.q.q.9.q.9.q.9.9.9.9.9.9.9.9.9.7.7.7.7.7.6.7.6.6.6.6.6.6.6.<.6.6.<.<.<.<.<.<.<.,.<.,.,.,.>.,.,.,.>.>.,.>.>.,.>.>.>.>.>.>.$.$.>.$.$.=.>.$.$.$.$.=.$.=.#.#.#.#.#.#.#.#.#.#.@.@.#.@.@.@.@.@.v @.v @.v v v v v v *.*.%.m %.*.m m m n M SXW X X X X X X X X X X o X X X X X X X X X X X X X X 8 ZXV > w y a a j j j : o o UXUXUXUXUXUX",
"UXUXUXUXUXUXo e C.Q.W.W.W.W.W.T.E.E.E.W.E.E.E.E.E.E.E.T.T.T.T.T.T.T.U.U.T.U.U.U.I.U.U.U.U.I.U.U.I.I.P.I.I.I.P.P.P.P.P.P.P.P.G.P.P.G.P.G.G.G.G.G.G.D.D.G.S.D.D.D.S.D.S.D.S.S.S.S.S.S.Z.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.V.V.C.V.V.V.V.V.V.g.V.g.g.V.g.g.g.e.g.g.e.e.b.e.e.e.e.e.e.e.w.e.w.w.w.w.w.w.q.q.q.q.q.q.q.q.9.q.q.9.9.9.9.9.9.9.9.9.9.6.6.6.7.7.6.6.7.6.6.6.6.6.6.6.<.6.<.<.<.<.<.<.<.,.,.,.,.,.,.,.,.,.,.,.>.,.>.>.>.>.>.>.=.>.=.>.$.>.>.>.$.$.$.$.$.$.$.#.$.#.=.$.#.$.#.#.#.#.#.#.#.@.@.@.@.@.@.@.@.v @.v v @.v v @.%.%.*.*.m *.m m m m *.b z.ZX5 X X X X X X X X X X X X X X X X X X X $ X.+.- > q y u a j j y % o UXUXUXUXUXUX",
"UXUXUXUXUXUXUX. >.Q.W.W.W.W.W.W.E.W.E.W.E.E.E.E.E.E.E.T.T.T.T.T.T.U.U.T.U.U.U.U.U.U.U.I.U.I.I.I.I.P.I.I.P.I.P.P.P.P.P.P.P.P.G.P.G.G.G.G.G.G.G.D.D.G.G.D.G.D.S.D.S.S.S.S.S.S.S.S.Z.S.S.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.Z.C.C.C.V.C.C.V.C.V.V.V.V.V.g.g.V.g.g.g.e.g.g.e.e.g.e.e.e.e.w.e.e.e.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.9.9.9.9.9.9.9.9.9.9.9.6.9.6.9.6.7.7.6.6.7.6.6.6.6.6.<.6.<.<.<.<.<.<.,.<.,.<.,.,.,.,.,.,.,.:.,.>.>.,.>.>.>.>.>.>.>.>.>.$.>.$.$.$.$.$.$.$.$.$.$.=.#.#.#.#.#.#.#.#.#.#.#.@.@.@.@.@.@.@.@.v v @.v v v v v *.*.%.*.%.m m m m m n n n c N tXZXG X X X X X X o o X X X X X X X X o o X 5 X.ZX9 * > q y a a j j > o X UXUXUXUXUXUX",
"UXUXUXUXUXUXUXo a D.W.W.W.E.W.E.E.E.E.E.E.E.E.T.T.T.T.T.T.T.T.T.U.T.T.U.U.U.U.U.U.U.U.I.U.I.U.I.I.U.P.I.P.P.I.P.P.P.P.G.G.G.P.G.G.G.G.G.G.G.D.G.D.G.S.D.S.D.D.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.C.Z.C.C.C.C.V.C.C.V.g.C.g.V.V.V.V.V.g.V.g.g.g.g.g.g.e.g.e.e.b.e.e.e.e.e.w.w.e.w.w.w.w.w.q.w.q.q.q.q.q.q.q.q.q.9.q.9.9.9.9.9.9.9.9.6.9.7.9.6.7.7.6.6.6.6.6.6.<.6.<.6.<.6.<.6.<.<.<.<.,.<.,.,.,.>.,.,.>.,.,.:.>.>.>.>.>.>.>.>.>.$.$.>.:.$.>.$.$.>.$.$.$.$.$.$.#.$.$.#.#.#.#.#.#.#.@.#.@.@.@.@.@.v @.v @.v v @.v v #.%.-.%.m m m *.m m v m n n b M l S x.ZXX.G $ X X X X X X X X X X o X X X X $ 9 ' ZX+.9 % ; > e y a h j y & o X UXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUX* 9.W.W.W.W.E.W.W.E.E.E.E.E.E.E.T.T.T.T.T.T.U.T.T.U.T.U.U.U.U.U.I.I.U.U.I.I.I.I.I.P.I.P.P.P.P.P.P.G.P.P.P.G.P.G.G.G.G.G.G.S.G.G.G.S.D.D.S.D.S.S.S.S.S.S.S.S.Z.S.S.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.V.C.V.C.V.C.C.g.C.V.V.V.g.g.g.g.g.g.g.g.g.e.e.g.e.e.e.w.e.e.w.e.e.w.w.w.w.w.w.q.w.q.q.q.q.q.q.q.7.q.9.q.9.9.9.9.9.9.9.9.6.9.6.9.6.9.7.6.6.6.6.6.6.6.6.<.6.<.<.<.<.<.<.<.<.<.,.,.,.,.,.,.,.>.,.>.,.>.>.>.>.>.>.:.>.>.>.$.>.:.:.$.=.:.:.$.$.$.$.$.#.$.#.#.#.$.#.#.#.#.#.@.#.@.@.@.@.@.v @.v @.@.v v v v %.*.%.m m #.m m m n n n n n b b b l a g R qXZXZXc.{ Y H H H H H H H H G H H G H H Y ' X.ZXZXc.Y 1 @ = > w e y a j j w o X X UXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUX j P.W.W.T.W.E.E.E.E.E.E.T.T.T.T.T.T.T.T.U.T.U.U.U.U.U.U.U.I.U.I.U.I.I.I.I.I.P.I.I.P.P.P.P.P.P.P.P.G.G.P.G.G.G.G.G.G.G.G.G.G.S.G.S.D.S.D.D.S.S.S.S.S.S.S.Z.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.g.C.C.V.C.g.C.V.V.g.V.g.g.V.V.g.g.g.g.e.g.e.e.e.e.e.e.e.w.e.w.w.w.w.w.w.w.q.q.w.q.q.q.q.q.q.9.q.q.7.9.q.9.9.9.9.9.9.7.9.7.7.7.6.7.6.6.6.6.6.6.6.6.6.6.6.<.<.6.<.<.,.<.,.,.,.<.,.,.,.,.,.,.,.>.,.>.>.>.>.>.>.>.>.$.>.$.>.$.:.$.=.$.$.$.$.#.$.$.#.$.#.=.#.#.#.#.#.#.@.#.#.@.@.@.@.@.v @.v v @.v v v #.m %.%.%.m *.m m m m n n n b n n n b c l i r w s L ] X.qXZXZXZXZXZXZXZXZXZXZXZXZXZXZXc.X._ H 6 # X + = ; > q t a a j a & X UXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUX& q.W.W.E.E.W.E.E.E.E.E.T.T.T.T.T.T.U.U.T.U.U.U.U.U.U.I.U.I.U.I.U.I.I.I.P.I.P.P.P.I.P.P.P.P.P.G.P.G.G.P.G.G.G.G.G.G.S.D.G.D.D.S.D.D.S.D.S.S.S.S.S.S.S.Z.S.S.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.C.V.C.V.C.V.C.g.V.V.V.V.V.g.V.V.g.e.V.g.e.e.e.g.e.e.e.e.w.e.w.e.e.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.9.9.q.9.9.q.9.9.9.9.9.9.6.9.7.7.6.7.6.7.6.7.6.6.6.6.<.6.6.<.6.<.<.<.<.<.<.,.<.,.,.,.,.>.,.>.,.>.>.>.>.>.>.,.>.>.>.>.$.>.>.:.>.>.$.$.:.$.$.$.$.$.$.$.$.#.#.#.#.#.#.#.#.#.@.@.@.@.@.@.@.@.v v @.v v v #.%.%.*.%.m m m m m m v n n n n n c m b b c l a i r < ; - = = = 1 1 1 4 $ 1 1 1 $ 1 $ $ = @ @ @ @ + + % = : q q t u a a h q . X UXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUX z U.W.W.W.T.E.E.T.E.T.T.T.T.T.T.T.U.T.U.T.U.U.U.U.U.I.U.U.I.I.I.I.I.I.I.I.I.P.P.P.P.P.P.G.P.P.G.P.G.G.G.G.G.G.D.G.G.G.D.D.D.G.S.S.D.S.S.S.S.Z.S.Z.Z.S.Z.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.V.C.C.C.V.V.V.C.V.V.V.V.g.g.V.e.V.g.g.e.V.e.g.e.e.e.e.e.e.e.e.w.w.w.w.w.w.w.q.b.q.b.q.q.q.q.q.9.q.q.q.9.9.9.9.7.9.9.9.6.9.7.7.7.7.7.7.6.6.6.6.6.6.<.6.6.<.6.<.<.<.<.<.<.,.,.,.,.,.,.,.,.,.,.>.,.>.,.>.>.>.:.>.>.:.>.=.=.$.$.$.$.:.$.$.$.#.$.$.$.#.#.#.#.$.#.#.#.#.@.#.#.@.@.@.@.@.v @.v @.@.v @.v v -.m %.%.m *.m m m m m m n n n n n b b b b c c l u i p w < < ; - - - - = = = = % = & = = = = % = = - - : < q q e y u a j a * o X UXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUX- 9.W.E.W.E.E.E.E.T.T.T.T.T.T.T.U.T.U.U.U.U.U.U.U.I.U.U.I.U.I.I.I.I.I.P.I.P.P.P.P.P.P.G.G.P.G.P.G.G.G.G.G.G.D.D.G.G.S.G.G.S.S.D.S.S.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.C.Z.C.Z.C.C.C.C.C.C.C.V.V.V.g.C.g.g.V.g.g.g.V.e.g.e.e.g.e.e.e.e.e.e.e.w.w.e.w.w.w.w.w.w.w.w.q.q.q.q.9.q.q.q.q.9.q.7.9.9.9.9.9.9.9.7.9.6.7.9.7.6.7.7.6.6.6.6.6.6.6.6.<.6.<.<.<.<.<.<.<.<.,.<.<.,.,.,.,.>.>.,.,.>.>.>.>.>.>.>.>.>.=.:.=.=.=.=.$.>.$.$.$.$.$.$.$.$.#.$.#.#.#.#.#.#.#.@.#.#.@.@.@.@.@.v @.v @.v v v @.%.*.%.*.m %.*.*.m m m n n n n n b m b n c b b c c l l a g i r r w < w < < > > < < > < > < < : : < > > < q w w e y u u a a j q O X UXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUX j D.W.E.E.E.E.E.T.T.T.T.T.T.U.T.U.U.U.U.U.U.U.I.U.I.I.I.I.I.I.I.I.P.I.P.P.P.P.P.P.P.G.P.G.P.G.G.G.G.D.G.D.D.G.S.G.S.S.S.D.S.S.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.C.C.g.V.C.V.C.V.V.V.V.V.g.g.g.g.g.g.e.V.e.e.V.e.e.e.e.e.e.e.w.b.w.w.w.w.w.w.q.w.q.q.q.q.q.9.q.q.q.9.q.9.q.9.9.9.9.7.9.7.9.7.6.7.7.6.7.6.6.6.6.6.6.6.<.6.<.6.<.<.<.<.<.,.<.,.,.,.,.>.,.,.,.,.,.>.,.>.>.>.>.>.=.=.=.>.:.>.$.=.$.$.$.>.$.$.$.$.$.#.$.#.#.$.$.#.#.#.#.#.#.@.@.@.@.@.@.@.@.v @.v @.@.*.%.%.*.m -.%.m m *.m n n n n b n n b b b c n b c c c c c c a a i i i r r i r r r w r r w w w w w r w r w r t t y y y u a a j y * o X o UXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUX& 6.W.E.E.E.E.T.T.T.T.U.T.U.U.U.U.U.U.U.U.U.U.I.U.I.U.I.I.I.I.P.P.P.P.P.P.P.P.G.P.G.P.G.P.G.G.G.G.D.G.D.G.D.D.D.S.D.D.S.S.S.S.S.S.S.S.S.Z.Z.Z.Z.S.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.g.C.C.V.V.V.C.g.V.g.V.g.g.V.g.g.g.g.g.e.e.e.e.e.e.e.e.w.w.e.w.e.w.w.w.w.q.b.q.q.q.q.q.q.q.q.q.q.9.9.9.9.9.9.9.7.7.9.7.7.7.7.7.7.6.6.6.7.6.6.6.6.<.6.6.<.<.<.<.<.<.<.<.,.,.,.,.,.,.,.,.>.,.>.>.>.>.,.>.>.>.>.>.>.=.:.=.=.$.=.=.=.$.$.$.$.$.$.$.$.$.#.#.#.#.#.#.#.#.#.@.#.@.@.@.@.v @.v @.v v @.*.%.%.m *.-.m m *.m m n n n n n n n b b b n c b c b c c c c c c l l a l l a l i i u i i i i i i y i i y i y i i i u u u u a a j a q o X UXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUX h Z.W.E.E.T.T.T.T.T.T.U.U.U.U.U.U.U.U.U.I.U.I.I.I.I.I.P.I.I.I.P.P.P.P.P.P.P.P.P.P.G.G.P.G.G.G.G.G.D.D.D.D.D.D.D.S.S.S.D.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.V.C.V.C.V.C.g.C.V.V.V.V.V.g.g.g.g.g.g.e.g.e.g.e.e.e.e.w.e.e.e.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.9.q.9.9.7.q.q.9.q.7.9.9.9.7.7.7.7.7.7.7.6.7.6.6.6.6.6.<.6.6.<.<.<.<.<.<.<.<.,.,.<.,.,.,.,.,.,.,.,.>.,.>.>.>.>.>.>.:.>.:.>.:.=.=.=.$.$.$.$.$.$.$.$.$.#.#.#.#.$.#.#.#.#.#.#.@.@.@.@.@.@.v @.v @.v @.*.%.*.%.%.%.%.*.m m %.m m n n n n n b b n n b n c c n c c c c c c k c k k a l a k a l a l a a a a a a f i a a u a a u u u u a a a a u & X X UXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXO #.T.T.E.T.E.T.T.T.T.U.T.U.U.U.U.U.U.U.U.I.I.I.I.I.I.I.P.I.P.P.P.P.G.P.G.P.G.G.G.G.G.G.G.G.G.D.D.D.G.D.G.D.D.S.S.S.S.S.S.S.Z.S.S.S.Z.S.Z.Z.Z.Z.C.Z.Z.C.C.C.C.C.C.V.C.V.C.V.V.V.C.V.V.V.g.g.g.g.g.g.g.g.g.g.e.g.e.e.e.e.e.w.e.w.e.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.9.q.9.q.q.q.7.9.7.9.9.9.7.7.7.7.7.7.6.6.6.6.6.6.6.6.6.6.6.<.6.<.<.<.<.<.<.,.,.,.,.,.,.>.>.,.>.,.,.>.>.>.>.>.>.>.:.:.>.:.=.=.=.=.=.$.=.$.$.$.$.$.$.#.$.$.#.$.#.#.#.#.#.v #.@.@.@.@.@.@.@.@.n v @.*.%.%.*.m %.m *.*.*.m v m m n n n n b n b b b b c c c c b c c c c c k k c l l l l a l j l l l a a l l a a a a a a l a l a a a a a a a > o o UXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXo w w.W.E.E.T.T.U.T.T.U.U.U.U.U.U.I.U.I.I.U.I.I.I.I.I.P.I.P.I.P.P.P.P.P.P.G.G.P.G.G.G.G.G.D.D.G.D.D.D.D.S.S.D.S.S.S.S.S.S.S.S.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.C.V.C.g.C.V.V.g.g.V.g.g.V.V.g.g.g.g.g.e.e.e.e.e.e.e.w.e.e.e.w.w.w.w.w.w.w.q.q.w.q.q.q.q.9.q.q.q.9.q.9.9.7.9.9.7.9.7.7.7.7.7.7.6.7.6.7.6.6.6.6.<.6.<.6.<.<.<.<.<.<.<.<.,.<.,.,.,.,.,.,.,.,.>.>.>.>.>.>.>.>.:.>.>.=.=.=.=.=.=.=.$.$.$.$.$.#.$.$.$.#.#.#.#.#.#.#.#.#.#.#.@.@.@.@.@.v v @.v @.@.%.%.%.%.%.*.%.m *.m m m m v n n n n b n b n b n c c c c c c c c c l k c l c k k c k k l l j l j l l a l l l a l l a a a a u u a a a h r @ o X UXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUX z I.E.T.T.T.T.U.U.U.U.U.U.U.I.U.I.I.U.I.I.U.P.P.I.P.P.P.P.P.P.P.G.P.P.G.G.G.G.G.G.G.D.G.D.D.D.D.D.D.S.G.S.S.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.V.C.C.V.V.V.V.V.V.V.V.g.g.V.e.V.g.e.e.g.e.e.g.e.e.e.e.e.w.w.e.w.w.w.w.w.q.q.q.q.q.q.q.q.9.q.q.9.9.q.9.9.9.9.9.9.9.7.7.7.7.6.7.6.6.7.6.6.6.6.6.6.6.6.6.<.<.<.<.<.<.<.,.<.,.,.,.,.>.,.>.,.,.>.,.>.>.>.>.>.>.>.>.=.>.:.>.$.$.>.$.>.$.$.$.$.$.$.$.#.$.#.#.#.#.#.#.#.#.#.@.@.@.v @.@.@.v @.@.@.%.%.%.%.%.%.*.*.*.*.*.*.*.M *.c *.M *.c *.*.b c c c *.c c c c c c c k c k c l k l k k k l j l j a l j a l a j l a a a a l f a a a a a h u : X UXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXo % ,.T.T.T.T.T.U.T.U.U.U.U.I.U.I.U.I.P.I.P.I.P.I.P.I.P.P.P.P.G.P.P.G.G.P.G.G.G.G.D.G.G.D.D.D.D.D.D.S.S.S.D.S.S.S.S.S.S.Z.Z.Z.S.Z.Z.Z.Z.C.C.Z.C.C.C.C.C.V.V.C.V.V.V.V.V.V.V.V.V.g.g.V.V.g.g.g.e.V.e.g.e.e.e.e.w.e.w.e.w.e.w.w.w.w.w.w.b.q.q.q.q.q.q.q.q.9.q.9.9.9.9.9.9.9.7.9.7.7.7.7.7.7.7.7.6.6.6.6.6.6.<.6.<.<.<.<.<.<.<.<.<.,.<.,.,.,.,.,.,.,.,.>.>.,.>.>.>.>.>.>.>.>.$.>.$.>.$.>.$.$.$.$.$.$.$.#.$.#.$.#.#.#.$.#.#.#.@.#.v #.@.@.@.@.@.v x @.*.%.%.%.*.%.*.%.m m %.*.b *.*.c *.*.*.c *.c *.c c c c c c c c c c c c c l c k k k k k k k l k l l j j l l a l a a a a l f l a u u a u a a a a > o X X UXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUX r e.T.T.T.U.T.U.U.U.U.I.U.U.I.I.I.I.I.I.P.I.P.P.P.P.P.P.P.G.P.G.P.G.G.G.G.G.G.G.D.D.D.D.D.S.D.D.D.S.S.S.S.S.S.S.S.Z.S.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.C.C.C.V.V.C.V.V.V.g.g.g.V.e.e.g.g.e.g.e.e.e.e.e.e.e.w.e.e.w.w.w.w.w.w.w.q.w.q.q.q.q.q.q.q.9.9.q.9.9.9.9.9.7.9.7.9.7.7.7.7.7.7.6.7.6.7.6.6.6.6.6.6.6.6.<.<.6.<.<.<.<.<.<.,.,.,.,.,.,.,.>.>.,.>.>.>.>.>.>.>.>.>.$.:.:.>.$.=.$.$.>.$.$.$.$.$.$.$.$.#.#.#.#.#.#.#.#.#.#.@.#.@.v @.@.@.@.@.%.%.%.%.%.%.%.m *.*.*.*.M b *.b *.*.c M c *.c c c *.c *.c c c c c c k c k c k k l k k l k l k l j j l j l a l l a l a a a l a a a u u a a a a e + o X UXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX k G.T.T.T.U.U.U.U.I.U.I.I.I.I.I.I.I.P.U.P.P.P.P.G.P.P.G.P.G.P.G.P.G.G.G.G.D.G.D.D.D.D.D.D.S.S.S.S.S.S.S.Z.S.Z.S.S.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.C.V.V.C.V.V.V.V.V.V.V.V.V.g.g.V.g.g.g.e.e.V.e.e.e.e.e.e.e.w.e.e.w.w.w.w.w.w.q.w.q.q.q.q.q.q.q.9.9.q.9.9.q.9.9.9.9.9.9.7.7.7.7.7.7.7.7.6.6.6.6.6.6.6.6.6.<.<.<.<.<.<.<.<.,.<.,.,.,.,.,.,.>.,.,.,.>.>.>.>.>.>.>.>.>.>.$.>.>.$.>.$.$.:.$.$.$.#.$.$.$.$.#.#.#.$.#.#.#.@.#.#.v #.@.#.v #.@.@.@.%.%.%.%.%.*.*.%.*.%.%.*.n *.*.*.M *.b M *.c *.c *.b c b b c c c c c c c c l k c l k k k l k k l l j l j l a l j a a a l a l a i a a u u a u a h y & o o UXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo + =.U.T.U.U.U.U.U.I.U.I.I.I.I.I.I.P.P.P.P.P.P.P.P.P.P.G.G.P.G.G.G.G.G.G.G.D.D.D.D.D.D.S.D.S.S.D.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.C.Z.Z.C.C.C.C.C.C.C.V.C.C.V.C.V.V.V.V.g.V.V.g.V.V.g.g.g.g.g.g.e.e.e.e.e.e.w.w.e.w.w.w.w.w.w.w.w.q.w.q.q.q.q.q.q.q.q.9.q.q.9.9.9.9.9.7.9.7.9.7.7.7.7.6.6.6.6.6.6.6.6.<.6.6.<.<.6.<.<.<.<.<.,.<.,.,.,.,.,.,.,.,.,.>.>.>.>.>.>.>.>.>.>.>.>.>.>.$.>.:.$.:.$.$.$.$.$.$.$.#.#.#.#.#.#.#.#.#.#.#.#.#.#.v #.v v *.*.%.%.%.%.%.%.%.%.%.*.M %.*.m n n n n b *.c c *.*.c c b b c c c c c c k c k l c c k k k k l k l j k l l a j a a l a a l a a l a a a a u u u u a a a > o o o UXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo * 7.T.U.T.U.U.U.U.I.I.I.I.I.P.P.P.P.P.P.P.P.G.P.G.P.G.G.G.G.G.D.G.D.D.D.D.D.D.D.D.S.D.S.S.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.Z.Z.C.C.C.V.C.C.V.V.V.V.V.V.V.V.V.g.g.g.g.e.V.e.g.e.e.e.e.e.e.e.e.e.e.e.e.e.w.w.w.w.w.q.q.w.q.q.q.q.q.9.q.9.9.q.9.9.9.9.9.7.9.9.9.7.7.7.7.7.6.7.6.7.6.6.6.6.6.6.<.<.6.<.<.<.<.<.<.,.<.,.,.,.,.,.>.>.,.>.>.>.,.,.>.>.>.>.>.>.>.$.$.:.$.:.$.$.:.$.$.$.$.$.#.#.$.#.$.#.$.#.#.#.#.#.@.v #.v v #.v @.%.%.%.%.%.*.%.%.*.%.*.*.*.m *.n n n n n n *.c *.c c c c c b c c c c c c k c c c k k k c l k k l k l j a j j l l a a a l l a l a a a u a u a u a u a a w . o X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo y g.T.U.U.U.I.U.I.U.I.I.P.I.P.P.P.P.P.G.P.P.G.G.P.G.G.G.G.G.G.D.G.D.D.D.D.D.D.S.D.S.S.S.S.S.Z.S.Z.S.Z.S.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.V.C.V.V.V.C.V.V.V.V.V.V.g.V.g.g.g.e.g.e.g.e.V.e.e.e.e.e.w.w.e.w.w.w.w.w.w.w.q.w.q.q.q.q.q.q.9.q.9.q.9.9.9.9.9.9.9.9.9.9.9.7.7.7.7.7.7.7.6.6.6.6.6.<.6.6.<.<.<.<.<.<.,.<.,.,.,.,.,.,.,.,.,.,.>.,.>.>.>.>.>.>.>.>.:.$.>.$.>.>.$.$.$.$.$.$.#.$.$.$.#.$.#.#.$.#.#.#.#.#.#.#.#.#.v v #.v #.&.%.%.-.%.%.%.%.%.%.%.*.%.m m n *.n *.n n c c *.*.c c c c *.c c c c c c c k l c k c k k k l k l l j j j l l l a l l l a l a l a f a a a a u u u a a a e & X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo o k Z.T.U.U.U.I.I.I.I.P.I.P.P.P.P.P.P.P.P.G.G.P.G.G.G.G.G.G.G.G.D.D.D.D.D.S.D.D.S.S.S.S.S.S.S.Z.S.Z.S.Z.Z.Z.Z.Z.C.Z.C.C.C.C.V.C.C.C.V.C.V.C.V.V.V.V.V.g.V.g.g.g.g.g.g.e.V.e.e.e.e.e.e.w.e.e.w.e.w.w.w.w.w.w.q.w.q.q.q.q.q.q.q.q.9.q.9.9.9.9.9.9.9.9.9.6.7.6.7.7.7.6.6.6.6.6.6.6.<.6.6.6.<.<.<.6.<.<.<.<.<.,.,.,.,.,.,.>.,.>.,.>.>.>.,.>.>.>.>.>.$.>.>.$.>.$.$.=.$.:.$.$.$.$.$.$.$.#.#.#.$.#.#.#.#.#.#.v @.@.v #.#.m -.%.&.%.%.%.%.*.%.%.*.m *.*.m n m n m n n n b n *.c c c *.c c c c c c c c c k c c k k l k k l k k l j l l j a j a j a a a l a f a f a f a u u u u u a a y & o o X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX . x G.U.U.I.U.U.I.P.I.I.P.P.P.P.P.G.P.P.G.P.G.G.G.G.G.G.G.D.D.D.D.D.D.S.D.D.S.S.S.S.S.S.S.S.S.Z.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.C.V.C.C.V.C.V.V.V.V.g.g.V.g.V.g.g.g.g.e.e.g.e.e.e.e.e.w.e.e.w.w.w.w.w.w.w.w.w.w.q.q.q.q.q.9.q.9.q.9.q.9.9.9.9.9.9.7.9.7.7.7.7.7.7.7.6.6.7.6.6.6.<.6.<.6.<.6.<.<.<.<.<.<.,.,.<.,.,.>.,.,.>.,.,.>.,.>.>.>.>.>.>.>.$.>.>.>.$.:.>.$.$.$.$.$.$.$.$.#.$.#.#.#.$.#.#.#.#.#.@.#.@.@.v #.#.%.%.&.&.%.%.%.%.%.*.%.*.%.%.*.*.*.n n n n n M b c b *.b b b c c c *.c c c k k k l c k l k k k l k j l j l a l l a l a a l a l a a l a a f a u u u u u u a y : o o X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo + $.P.U.U.I.I.I.I.P.P.P.P.P.G.P.P.G.G.P.G.G.G.G.G.D.D.D.D.D.D.D.D.S.D.S.S.S.S.S.S.S.Z.S.Z.Z.S.Z.Z.Z.Z.C.C.Z.C.C.C.C.C.V.C.V.C.V.V.V.V.V.V.V.V.V.g.V.V.e.g.e.g.e.e.g.e.e.e.e.w.e.e.w.e.w.w.w.w.w.q.w.q.q.q.q.q.9.q.q.q.q.q.9.9.9.9.9.9.7.9.9.7.7.7.7.6.7.7.6.6.6.6.6.6.6.6.6.<.6.6.<.<.<.<.<.<.,.<.,.,.,.,.,.,.,.,.,.>.>.>.>.>.>.>.>.>.:.$.>.>.$.$.>.$.$.>.$.$.$.$.$.$.#.$.#.#.$.#.#.#.#.#.#.@.m @.@.@.#.%.-.%.-.%.%.%.%.%.%.*.%.%.*.*.n n n n n n *.b *.*.b *.b c c b b c c c c c c c k k c c k k k k l k l l j l j j j a a l a l l a l l a a a a f a i u u u u u a u > o X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo * 1.U.U.I.I.I.I.P.P.P.P.G.G.P.G.P.G.G.G.G.G.G.D.G.D.G.D.D.D.D.D.S.S.S.S.S.S.S.Z.S.Z.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.V.C.V.V.V.V.V.V.V.V.g.g.g.g.g.g.g.e.g.g.g.e.e.e.e.e.e.w.e.w.e.w.w.w.w.w.w.q.q.w.q.q.q.q.q.q.9.9.9.q.9.9.9.9.9.9.7.7.7.7.7.7.7.7.7.6.6.7.6.6.<.6.6.<.6.<.<.<.<.<.<.<.,.<.<.,.,.,.,.>.>.,.,.>.,.>.>.>.>.>.>.:.:.>.>.>.:.$.$.=.$.$.$.$.$.$.#.$.$.#.#.$.#.#.#.#.#.v @.@.#.#.@.#.*.&.-.&.%.&.%.-.%.%.%.*.*.*.%.*.n *.n n *.n n n n c b b *.b b b b c c c c c k c k c c k k k k k k l l j j l j a l l l a l a a l f a a f a a a i a u u u u u a a q O X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX > ,.I.I.I.I.I.I.P.P.P.P.P.G.G.G.G.G.G.D.G.D.G.D.D.D.D.D.D.S.S.D.S.S.S.S.Z.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.V.C.V.C.V.V.V.V.V.V.g.V.g.g.g.g.g.e.g.e.e.e.e.e.e.e.w.e.e.w.w.w.w.w.w.w.q.w.q.q.q.q.q.q.q.q.9.q.9.9.9.9.9.9.9.9.9.7.7.7.7.7.7.6.7.6.6.6.6.6.6.6.<.6.<.<.6.<.<.<.<.,.<.,.,.,.,.>.,.,.,.,.>.>.>.>.>.>.>.>.>.>.>.=.:.$.$.>.$.:.$.:.$.$.$.$.#.$.$.$.#.#.$.#.#.#.#.#.#.#.@.v #.&.-.-.&.%.%.%.%.%.m #.%.%.*.%.M n n m m *.n n n n b *.c b b c c b b c c c c k c c k c k k l l c l l k k j l j j j l a j l a a l a a a a a a f i a a u u u u u a a > . X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX w 7.I.U.I.I.P.P.P.G.P.G.P.G.G.G.G.G.G.D.G.D.D.D.S.D.S.D.S.S.D.S.S.S.S.S.S.S.S.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.V.C.V.C.V.V.V.V.V.V.V.g.g.g.V.g.g.e.g.e.V.e.e.e.e.e.e.w.e.w.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.9.q.9.9.q.9.9.9.9.9.7.9.9.9.9.9.7.7.7.6.7.6.7.6.6.6.6.6.6.<.6.6.<.<.<.<.<.,.<.<.,.,.,.,.,.,.,.,.>.,.>.,.>.,.>.>.>.$.>.>.$.$.>.:.$.:.$.$.>.$.$.$.$.$.$.$.#.$.#.#.#.#.#.#.#.#.#.@.@.%.;.&.&.%.%.%.%.%.*.%.#.m -.*.%.n %.*.n *.n n M *.n n c n n c c c c c c b c c c k c c c k c k k l k k k k l j l j h l l a l a l a l a l a l a a u u a u u u u u u a q @ X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo t 7.I.I.I.P.P.P.P.G.P.G.P.G.G.G.G.D.D.D.D.D.D.D.S.D.S.D.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.Z.C.C.C.C.V.C.V.C.V.V.V.V.V.V.V.V.g.V.g.g.g.g.g.g.e.e.e.e.e.e.e.e.e.e.w.e.w.w.w.w.w.w.w.q.w.q.q.q.q.q.q.q.q.9.9.9.q.9.9.9.9.9.7.7.7.7.7.7.6.7.6.6.6.6.6.6.6.<.6.<.<.<.<.<.<.<.<.<.,.,.,.,.,.,.>.,.>.,.>.>.>.>.>.>.>.>.>.>.>.>.>.>.>.$.>.$.:.$.$.$.$.$.$.#.$.#.#.$.#.#.#.#.#.#.#.v #.&.&.&.&.-.%.%.-.&.%.%.-.%.%.*.m *.*.n *.n n n *.n b n c *.b c c c *.c c c c c c c c c k k l k k k k k j l k j l j l j l a a l a l a a a a a a a a u u u u u u u u a a q + X o o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo q 6.P.I.P.P.P.P.P.P.G.G.G.G.D.G.D.D.D.D.D.D.D.D.S.S.S.S.S.S.Z.Z.S.Z.S.Z.Z.Z.C.Z.Z.C.Z.C.Z.C.C.C.V.C.C.C.V.C.V.V.V.V.V.V.g.g.V.g.g.g.g.e.g.e.g.e.e.e.e.e.e.w.e.w.e.w.w.w.w.w.q.w.q.q.q.q.9.9.q.q.9.q.9.9.9.9.9.9.9.7.9.6.9.7.7.7.7.6.7.6.7.6.6.6.6.6.<.6.<.6.<.<.<.<.,.,.<.,.,.,.,.,.,.,.,.>.,.>.>.>.,.>.>.>.>.>.>.$.:.$.>.$.$.$.$.$.$.$.$.$.$.$.#.#.#.$.#.#.#.$.#.#.#.v $.%.&.-.&.-.-.%.&.&.%.%.%.%.*.*.%.%.m *.n *.n n n *.b *.b n b n b *.b c b c c c c c c c c c k k l k l c l j j l j l j l a l h l a a l l a a a a a a a u a u u u u u u a u w + X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX e 6.P.I.P.P.P.G.G.G.G.G.G.D.D.G.D.D.D.D.S.S.D.S.S.S.S.Z.S.S.S.Z.S.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.V.V.C.V.C.V.V.V.V.V.V.V.V.g.V.V.e.g.e.g.e.g.e.e.e.e.e.e.e.w.w.e.w.w.w.w.w.w.w.w.q.q.w.q.q.q.q.q.q.q.9.9.9.q.9.9.9.7.9.9.9.7.7.7.6.7.6.7.6.6.6.6.6.<.6.6.<.<.6.<.<.<.<.<.<.<.,.,.,.,.,.,.,.,.>.,.>.,.>.>.>.>.>.>.:.>.>.>.:.:.$.>.$.$.>.$.$.$.$.$.#.$.#.$.#.#.#.#.#.#.#.v %.3.-.&.-.&.&.%.%.%.&.%.#.%.%.%.%.m #.m m *.*.M *.n n *.b b n n b x c c b b c c c c c c k l c k k k c k k k l l j j j l j j h h h l a l a a a a l a a i u u u u u u u u u u q @ o X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX > ,.P.P.P.P.P.G.G.G.G.D.G.G.S.G.S.S.S.S.S.S.S.S.S.S.Z.Z.S.Z.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.C.V.V.V.V.V.V.V.V.g.e.V.g.g.g.e.g.e.g.e.e.e.e.e.e.w.e.e.w.w.w.w.w.w.w.q.w.q.q.q.q.q.q.q.9.q.9.9.9.9.9.9.9.7.9.7.7.9.7.7.7.7.6.6.6.6.6.6.6.6.<.6.6.<.6.<.6.,.<.,.<.<.,.,.,.,.,.,.>.,.>.,.>.>.>.>.>.>.>.>.>.>.>.$.>.=.=.$.=.$.=.$.$.$.$.$.$.$.#.#.#.$.#.#.#.#.#.&.%.;.&.&.-.&.&.%.&.&.%.%.%.*.%.%.*.%.*.*.m *.m m m n n n b n b n b b b b b b c c c c c z c c k l k k k k k k k l j j l j j l h h h h h h f h a a f a u u u u u u u u u u a a q @ X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX - =.G.P.P.G.P.G.G.G.G.S.G.D.D.S.G.S.D.S.S.S.S.S.S.S.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.C.V.C.V.C.V.V.V.g.V.g.g.V.V.g.g.V.g.V.e.g.e.e.e.e.e.e.w.e.w.w.e.w.w.w.w.w.w.q.q.q.q.q.q.q.9.q.q.9.q.9.q.9.9.9.9.9.7.9.7.7.7.7.6.7.6.7.7.6.6.6.6.6.6.<.<.6.,.<.6.,.<.<.,.,.,.,.,.,.>.,.,.,.,.>.,.>.>.>.>.>.>.>.$.>.:.>.$.=.=.=.$.=.$.$.$.$.$.$.#.#.#.$.#.#.#.#.#.%.;.&.;.;.&.&.%.-.-.%.%.%.%.%.%.%.*.%.%.*.*.*.m n n n n n *.b n b b c b b b x b b c c c k c k k c k k k k k k k l l j j l l h h h l h h h l f h h a a l u u a u u u u y u u a y > . o X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX * @.S.P.P.G.G.G.G.G.D.S.D.D.D.S.S.S.S.S.S.S.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.V.C.V.V.C.V.V.V.V.V.V.g.g.V.g.e.V.g.e.e.e.e.e.e.e.e.e.w.w.e.e.w.w.w.w.w.q.w.w.q.w.q.q.9.q.q.q.9.q.q.9.9.q.7.9.9.7.7.7.7.7.7.7.6.7.6.6.6.6.6.6.6.,.6.6.,.6.<.<.,.6.,.,.<.,.,.,.,.,.,.,.,.,.,.>.>.>.>.>.>.>.>.>.:.=.>.$.:.$.$.=.$.$.$.$.$.$.$.#.#.$.$.#.#.#.#.#.#.%.&.3.&.-.&.&.%.-.-.%.%.%.%.%.%.%.%.%.%.*.*.*.*.n n n n n n n b *.n b b b b b b c c c c c c c k k c l c l k k k k k l j j j l h l l h h h h h f h f f a a a u u u u u u u u a a t : X X X o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo @ k e.P.P.G.G.D.G.G.G.S.D.S.G.S.S.S.Z.S.S.Z.Z.S.Z.S.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.V.C.V.C.V.V.V.V.V.V.V.g.V.g.g.g.g.e.e.g.g.e.e.e.e.e.e.e.e.e.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.9.q.9.9.9.7.9.9.7.7.9.7.9.7.7.6.7.7.6.6.7.6.6.6.6.6.6.<.6.6.,.<.<.6.,.<.<.,.,.,.,.,.,.,.,.>.>.>.,.>.>.>.>.>.>.>.>.$.>.>.$.$.>.=.=.$.$.$.$.$.#.$.#.$.#.#.#.$.#.$.&.;.3.3.&.-.;.-.%.&.&.&.%.%.%.%.%.%.%.*.*.*.*.n *.n *.n *.n n n b *.b b b b b b b c c c c c k c l c k k k k k k l l j j j l l h l l h h h h h h h h h f h u a u u u u u u u u u a t * o o X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo X u 9.G.P.G.G.G.S.G.S.D.S.S.S.S.S.S.Z.Z.S.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.C.V.V.V.C.V.V.V.V.V.V.g.V.V.g.g.g.e.g.e.V.e.e.e.e.e.e.w.e.w.w.e.w.w.w.w.w.w.q.w.q.q.q.q.9.q.q.9.q.9.q.7.q.9.9.9.9.7.9.9.7.7.7.7.7.7.6.7.6.6.6.6.6.,.6.6.6.,.<.<.,.6.,.<.,.,.,.,.,.,.,.,.,.>.,.>.>.>.>.>.>.>.>.>.$.>.>.:.$.:.$.:.$.$.$.$.$.$.$.$.#.$.#.#.#.#.%.&.;.&.&.&.&.&.&.&.&.&.%.%.%.%.%.%.%.%.%.*.*.*.M *.n *.n m n b n b b b *.b b b b b c c c c c z c c k c k c k k k k k l j k l l j h l h h j h h h h h h a f a a u u u u u u u u u u a q & o X o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX o e >.S.G.G.D.G.S.G.S.S.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.C.Z.C.C.C.C.C.C.V.V.C.C.C.V.V.V.V.V.V.g.g.g.g.g.g.g.g.e.g.e.e.e.e.e.e.e.e.e.w.e.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.9.q.9.q.q.9.9.9.9.7.9.9.7.7.7.7.7.6.6.6.6.6.6.6.6.6.6.6.6.,.6.,.<.6.,.,.,.,.,.<.,.,.,.>.>.,.>.,.>.,.>.,.>.>.>.>.>.:.>.:.$.>.>.$.=.$.>.$.$.$.$.#.#.$.#.#.#.#.:.;.;.;.;.;.&.&.&.&.&.&.%.%.&.%.%.%.%.*.%.*.%.%.*.*.*.*.m *.n n n n b n *.b b b b b x c c c z c c c c k k k c k k k k l j l j l k a h j h l h h h h h h f f f a a f u u u u u u u u u u > % o o X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX o % x g.G.G.G.G.D.D.S.S.S.S.S.Z.S.Z.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.C.V.V.V.V.V.V.V.V.V.g.V.V.g.g.g.g.e.e.e.e.e.e.e.e.e.e.w.e.w.w.w.w.w.w.w.w.q.q.q.q.9.q.9.9.q.q.q.9.9.9.9.9.7.9.7.7.7.7.7.7.6.6.7.6.7.6.6.6.6.6.6.<.6.6.,.6.6.6.,.6.,.,.6.,.,.,.,.,.,.,.>.>.,.>.>.>.>.>.>.$.>.$.>.$.>.>.$.$.$.$.$.$.$.$.$.$.#.$.#.$.#.;.;.;.;.;.;.;.&.3.&.-.&.-.%.&.%.%.%.%.%.%.%.%.%.m *.m n n n n n n n n n n n b b b b b b c c c c k c k k c k k k l k l k k k l j j j l j l j h h h h h h f h a a a a u u u u u u u u u u t * . o X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX X X . u 6.S.G.G.S.S.S.S.S.S.Z.S.S.Z.Z.Z.Z.Z.C.C.C.C.C.C.C.C.g.V.C.V.V.V.V.V.V.V.V.g.g.V.g.g.g.g.e.g.e.V.e.e.e.e.w.e.w.w.e.w.w.w.w.w.w.q.w.q.q.q.q.q.q.q.q.q.q.9.9.9.9.9.7.9.9.9.7.7.7.7.7.7.7.7.6.7.6.6.6.<.6.6.<.6.,.,.6.,.,.<.,.,.,.,.,.,.,.,.,.>.,.>.,.>.,.,.>.>.>.>.>.>.>.>.:.>.$.$.$.>.:.$.$.$.$.$.#.$.$.#.#.;.1.;.3.;.;.&.&.&.3.&.&.-.-.&.%.%.%.&.%.%.%.*.%.m *.*.m *.n n *.n n n n b n b b b b b b x c c c c c c c k c l k c k k l k l l l l j a l a j h h h h h h f h h f f u a u u u u u u u a u u w % o o X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX ; v V.G.D.G.S.S.S.S.S.Z.Z.Z.Z.Z.Z.Z.C.C.C.C.C.C.V.C.C.V.C.V.V.V.V.V.V.V.g.V.V.e.e.g.e.e.g.e.e.e.e.e.e.e.e.w.w.e.w.w.w.w.w.q.w.w.q.q.q.q.q.q.q.q.9.q.9.9.9.9.9.6.9.7.9.7.7.9.7.6.6.6.9.6.6.6.6.6.6.6.6.6.<.6.<.<.<.<.<.,.,.<.,.,.,.,.,.,.,.>.,.>.,.>.>.>.>.>.>.>.>.$.>.>.$.:.$.=.$.$.$.$.$.$.$.#.$.#.$.:.3.3.;.;.;.;.&.&.&.&.&.-.&.&.&.-.%.%.%.%.-.*.%.%.*.%.*.n *.n *.n *.b *.b *.*.b b b b b c c c c c c c c k k c k c l k k k l j j j j j j j h j l l a l a a a a a a a a u u u u u u u u a a y : . X X o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX X . u ,.S.S.G.S.S.S.S.S.Z.S.Z.Z.Z.C.Z.C.C.V.C.C.C.V.V.V.V.V.V.V.V.V.g.g.V.e.V.e.V.g.e.g.e.g.e.e.e.e.e.w.e.w.e.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.9.9.q.9.9.9.9.9.9.9.9.9.9.9.7.6.9.6.9.6.6.6.6.6.6.6.<.<.6.<.<.<.<.<.<.<.,.<.,.,.,.,.,.,.=.,.>.,.=.>.,.>.>.>.>.>.>.$.>.>.$.$.>.$.=.:.$.$.$.$.$.$.$.$.&.1.3.3.;.3.;.;.;.;.-.&.&.&.-.&.-.%.&.%.%.%.%.%.#.*.*.*.*.M *.*.n n *.b b *.b *.b b b b b x b b c c c z c c k k c l k k k k l k k l j l l h l j l a a a l a a l a a a a u a u u u u u u a a y q & o o X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo % j q.S.S.S.S.S.S.Z.Z.Z.Z.C.C.C.Z.C.C.C.V.C.V.C.V.C.V.V.g.V.g.V.e.V.g.g.g.g.e.V.e.e.e.e.e.e.e.w.e.w.e.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.9.q.q.9.q.9.9.9.9.7.9.9.9.6.7.7.7.6.7.7.6.6.6.6.6.6.6.6.<.<.<.6.<.<.<.<.,.<.,.,.,.,.,.,.,.,.>.,.,.=.>.>.>.>.>.>.>.=.>.:.:.$.>.$.>.$.$.$.$.$.#.$.$.;.3.1.3.;.;.;.;.;.;.&.-.&.-.&.&.&.%.%.%.#.%.%.%.%.%.%.*.%.*.n *.n n n n n *.n b *.c b b b b b c c x c c k c c k c c k k c l k k k j j j j j h j h h l a l l a a l a a a a u a u u u u u u a u t ; . o o X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX o o , @.e.S.S.S.Z.S.Z.Z.Z.C.Z.C.C.C.C.V.C.V.C.V.V.V.V.V.V.V.g.g.V.g.g.g.e.g.e.e.e.e.e.e.e.w.e.e.w.e.w.w.w.w.w.w.q.q.w.q.q.9.q.9.q.9.q.9.9.9.9.9.9.9.9.9.9.6.9.6.6.7.6.7.6.6.6.6.6.6.6.<.<.<.6.<.<.<.<.<.<.,.<.,.<.,.,.,.,.,.=.,.,.>.,.>.>.>.>.>.>.=.=.=.$.>.$.>.$.$.$.$.$.$.$.$.:.;.3.1.1.3.1.;.3.&.;.3.;.;.;.&.-.&.%.-.&.%.%.%.%.%.%.#.m *.*.m *.*.n *.n n n n *.c *.b b b b b b b c c c c c c k k k k k l k k k k l j k l j l h j h l h a l a l a a a a a u a a u u u u u a a t > @ o X o UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX X X q #.V.S.S.S.Z.Z.Z.Z.Z.C.C.C.V.C.V.C.V.V.V.V.g.V.g.g.V.g.V.e.g.e.e.e.e.e.e.e.e.e.w.e.e.w.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.7.q.q.9.9.9.q.7.9.7.9.6.9.6.7.9.7.7.6.6.6.6.6.6.<.6.<.6.6.<.<.<.<.<.,.<.,.,.,.<.,.,.,.>.,.>.,.=.=.,.,.>.>.:.>.:.>.>.$.>.$.>.$.$.=.$.$.$.$.$.;.1.1.1.1.1.3.3.;.;.3.;.;.&.&.&.&.%.-.&.&.%.-.%.%.%.*.%.m #.*.*.m *.n *.n n n *.*.b n b b b b x b b b c c c c c c c k c k c k k k l j l k l l j l j l j h l a j a j a a a u a a u u a u a a a a y > + o X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX o X @ y =.e.S.S.Z.Z.Z.C.C.C.V.C.C.C.V.V.V.V.V.g.V.V.g.g.g.e.g.e.V.e.V.e.e.e.e.w.e.e.w.w.w.w.w.w.w.w.q.q.q.q.q.q.9.9.q.q.9.q.9.7.q.9.9.7.9.9.9.7.9.9.6.7.6.6.6.6.6.6.6.6.6.6.6.6.<.<.6.<.<.<.<.<.,.,.,.,.,.,.,.,.,.>.,.,.=.,.=.>.>.>.>.>.=.$.:.>.>.>.$.$.$.$.$.$.:.;.1.1.1.3.3.3.;.3.1.3.;.3.3.&.;.&.-.&.&.%.%.%.%.#.%.%.%.%.%.%.m %.m m m *.*.n n b b n n c b c *.c c b b c z z c c k k k c k k k l k k k k k j j j j h a h h h h j a a a a a a a a a a u a a a a y q & O X X X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo X @ t #.q.S.Z.Z.Z.C.C.C.V.C.C.V.V.V.V.V.g.g.g.g.g.g.e.e.V.e.e.e.e.e.e.e.e.w.w.e.w.w.w.w.q.w.q.w.q.w.q.q.q.q.q.9.q.q.7.q.7.9.9.9.7.9.7.9.9.6.6.9.6.7.6.6.6.6.6.6.6.6.6.<.<.6.<.<.<.<.<.,.<.,.,.,.,.,.,.>.,.>.,.,.>.,.=.>.>.>.=.>.=.>.>.$.$.$.:.$.>.$.;.;.1.1.1.3.1.4.1.3.;.;.;.;.;.3.3.&.&.&.&.-.&.&.-.%.&.%.%.%.%.*.*.*.m *.*.m *.m *.b *.n *.n x b *.b b b *.c c z z c c c k c c k l k l k k l k k j l j j h h j l h j h a j a a a a a a u a a a a a a y > % . o o X X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX o o @ t n 6.C.Z.Z.C.C.C.V.V.C.V.V.V.V.V.V.g.g.g.g.V.e.e.e.V.e.e.w.e.w.e.w.e.w.w.w.w.w.w.w.q.q.q.q.q.q.q.q.9.q.9.9.q.7.q.7.7.9.9.7.7.7.7.7.9.6.7.6.7.6.6.6.6.6.<.6.<.6.<.<.<.<.,.<.<.<.,.,.,.,.,.>.,.,.>.,.>.>.>.>.>.>.>.=.>.=.=.:.>.:.>.:.$.$.:.1.1.5.1.1.4.1.1.3.1.3.;.;.;.&.3.&.&.&.&.&.%.&.%.%.%.#.&.%.-.*.%.%.m %.*.*.m n *.*.n *.b *.b c *.b c b b b c c c c c c c k k c l c k k k k k k k l j l h h l j j h h a a h a a a a a a a a a a a a e > & . o X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo X . > k >.w.Z.C.C.C.C.V.C.V.V.V.V.g.g.g.g.g.g.e.g.e.e.e.e.e.w.e.w.e.w.w.w.w.w.w.w.q.w.q.q.q.q.q.9.q.q.q.9.q.9.9.9.9.7.9.7.7.7.7.7.7.6.6.7.6.6.7.6.6.6.6.<.6.6.<.<.<.<.<.,.<.,.,.,.,.,.,.>.,.,.>.,.>.>.>.>.>.>.>.>.=.=.>.:.=.$.$.=.$.>.1.5.;.5.5.5.;.5.1.;.;.;.;.;.;.;.;.&.;.&.&.-.-.%.%.&.%.%.%.%.%.%.%.*.m *.*.*.*.n n *.n n b b n n n b b b b b b c c c c c z z k z k k c k k k j k j j j j j j h h h h h a j a a a a a a a a a a h y q : @ o X X X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX X X o + e x 6.e.C.C.C.V.V.V.V.V.g.g.g.g.g.g.g.e.e.e.e.e.e.e.w.e.w.w.w.w.w.q.w.w.q.q.q.q.q.q.q.q.9.7.7.q.7.q.9.9.7.q.7.9.9.9.6.7.7.7.6.6.6.6.6.6.6.6.<.6.<.<.<.<.<.<.<.<.<.<.,.,.,.,.,.,.,.>.,.>.>.,.>.>.>.>.>.=.>.:.:.:.=.$.1.1.5.5.5.1.5.1.;.;.;.;.;.1.;.;.;.;.;.;.;.&.;.&.&.%.%.&.*.%.&.%.%.%.&.#.m %.%.*.*.*.*.n *.n *.n *.*.x x b b n b z x c z c z z c k k z k k k k j k j k j j j j j a a j h h h h a a a a a j a a j a a e > & . o X X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX X X o X * y v ,.w.C.V.g.C.V.g.V.g.g.g.e.e.g.e.e.e.e.w.w.e.e.w.w.w.w.w.w.w.w.q.q.q.q.q.9.q.9.q.q.9.7.q.7.7.q.7.7.7.7.7.7.7.7.6.9.6.6.6.6.6.6.6.6.6.<.6.<.6.<.<.,.<.,.,.<.,.,.,.,.,.>.,.,.>.>.,.>.>.,.>.>.>.>.:.>.:.:.=.$.>.>.$.$.$.$.$.$.$.#.$.#.$.$.#.#.#.#.#.@.#.@.#.@.@.@.@.@.@.@.v v v v v v v v v x x @.x x x x x x z z k x k z z k x k k x x j j k k k k j j j j j j j j j j j a j j a a a j j a a j a j j a j a e q & @ o o X X o X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX X X o o * e z =.7.e.V.C.V.V.g.g.g.g.e.g.e.e.e.e.e.e.w.w.e.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.9.q.q.9.7.q.7.7.q.7.7.7.7.7.7.7.6.9.6.7.6.6.6.6.6.<.6.<.<.6.<.<.<.<.<.<.<.,.<.,.,.,.,.,.,.,.,.>.>.,.>.>.>.>.>.>.:.>.=.=.>.$.>.$.:.$.:.$.$.$.$.$.$.#.$.#.#.$.#.#.#.@.#.@.@.@.@.@.@.@.@.@.#.v #.v @.v v x @.x x x x x x x x x x x x x z x x k x x k k k x k k k k z j k k k j j k j a j j j a j j j a j j j a j h y q > & O o X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXX X X X @ > t z #.<.q.g.g.V.V.e.V.V.e.e.e.e.e.w.e.e.w.w.w.w.q.q.w.q.w.q.q.q.q.q.9.q.q.9.9.q.7.9.7.9.7.9.9.7.7.7.7.7.7.7.6.6.6.6.6.6.6.6.<.6.6.<.<.6.,.6.,.,.<.,.,.,.,.,.,.,.,.>.,.,.>.,.>.>.>.>.>.:.>.:.>.$.>.:.:.:.$.$.$.$.$.$.$.$.$.#.$.#.#.#.#.#.#.#.*.#.#.#.#.@.@.#.@.@.@.v @.v v @.v @.x @.x v v x v x x x x x z x k z z z k z z z k k k k k k k j k j k j j j j j a a j j j j j a a t q > * + o o X X X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX X X o X @ * q y z @.:.,.7.q.w.V.e.e.e.e.e.e.w.e.e.e.w.w.w.w.w.w.q.q.q.q.q.q.q.q.q.q.q.9.q.9.q.9.9.9.9.9.7.9.7.6.9.7.7.7.7.6.6.6.6.6.6.6.6.6.<.6.,.6.<.<.<.<.<.<.<.,.,.,.,.,.,.,.>.,.>.>.,.>.>.>.>.>.>.>.>.>.>.>.>.:.:.$.:.$.:.$.$.$.$.=.#.=.#.#.$.#.#.#.#.#.#.#.#.@.@.@.#.@.@.@.@.@.@.@.x v v v v @.x x @.x x x x x x x z z z z z z z z x z k z k k k k k k j k j a u y e q , * % @ o X o o X X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo X X o X . & ; , e y f j v n @.#.#.#.*.*.#.@.@.v @.@.@.v v v v v x v v x v x v v v x x n v z b b b v b x x b b z b x b z z k k x z k c z k k z z k k k k k j k j j j j j j j j j j j h l h h j h h h h h h h h h h h h f h u h a a h a a h h u u u u u u a u u u u y y u y y y u y y u y t y t t t t t t y t t y t t y y t t e e t t e e e e e q q q : - * % @ O . o o o X X X o X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo X X X X X o o o . . O O @ O @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ O @ @ O O O @ @ @ @ O O O O @ O O @ O O O O O @ @ O O O O O @ O O O O @ @ O @ @ . @ O @ . @ O @ . @ O O O O O O O O O O O O O O O O O . O O O O . O O . . . O . O O O O @ . O . . @ . O O . O . O O . O . O O O O O O O O O O . . O . . . . o O O o O O O O . . o o o X o o o o o X X X o X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX X X X o o X o X o o o X o o o o o o X X o o o o o X o o o X X X o o o o o o o o o X o o o o o o o X o o o X X X X o X o X X o o X X X o X X o X o X o o o o X o o X o o o X X o X o o X o o X X X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX X X X o o X X X o X o o X o X o o o o o o o X X o o X X o X X X o o X o X o o X X o X o X o o o o X X X o o X X o X X X o o o X o X X o X o o X X X o o X o X X o X X o X X o X X X X o o o X X o o o X o o X X o o X X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXo X o X X o o X X o X X X X X X X X X X o X X X X X X o X X X X X X X X X o o X o X o X o X o X X X X X X X X X X X X X X X X X X o X X X X X X o X X X X X X X X X o o X o X o X o X o X X X o X X o X X X o X X X o o X X X X o o o X X X X X X o X o X o X X X o X X o X X X X o X X X X X o X o X o o X X X o o X o X o X X UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX"
};

View File

@ -0,0 +1,13 @@
"Kick", 36, 100
"Snare", 38, 100
"Closed Hat", 42, 80
"Open Hat", 46, 80
"Rim Shot", 37, 100
"Ride", 51, 80
"Crash", 49, 80
"Hi Tom", 48, 100
"Mid Tom", 45, 100
"Low Tom", 41, 100
"Hi Conga", 62, 80
"Low Conga", 63, 80
"Timbale", 65, 80

View File

@ -0,0 +1,44 @@
"Bass Drum 1", 36, 100
"Side Stick", 37, 80
"Acoustic Snare", 38, 100
"Hand Clap", 39, 80
"Electric Snare", 40, 100
"Low Floor Tom", 41, 100
"Closed Hi-Hat", 42, 80
"High Floor Tom", 43, 100
"Pedal Hi-Hat", 44, 80
"Low Tom", 45, 100
"Open Hi-Hat", 46, 64
"Low-Mid Tom", 47, 90
"Hi-Mid Tom", 48, 90
"Crash Cymbal 1", 49, 80
"High Tom", 50, 100
"Ride Cymbal 1", 51, 75
"Chinese Cymbal", 52, 75
"Ride Bell", 53, 75
"Tambourine", 54, 64
"Splash Cymbal", 55, 64
"Cowbell", 56, 64
"Crash Cymbal 2", 57, 64
"Hi Bongo", 60, 100
"Low Bongo", 61, 100
"Mute Hi Conga", 62, 80
"Open Hi Conga", 63, 100
"Low Conga", 64, 100
"High Timbale", 65, 80
"Low Timbale", 66, 80
"High Agogo", 67, 64
"Low Agogo", 68, 64
"Cabasa", 69, 64
"Maracas", 70, 70
"Short Whistle", 71, 64
"Long Whistle", 72, 64
"Short Guiro", 73, 64
"Long Guiro", 74, 64
"Claves", 75, 80
"Hi Wood Block", 76, 80
"Low Wood Block", 77, 80
"Mute Cuica", 78, 64
"Open Cuica", 79, 64
"Mute Triangle", 80, 64
"Open Triangle", 81, 64

View File

@ -0,0 +1,61 @@
"High Q", 27, 100
"Slap", 28, 100
"Scratch Push", 29, 100
"Scratch Pull", 30, 100
"Sticks", 31, 100
"Square Click", 32, 100
"Metronome Click", 33, 100
"Metronome Bell", 34, 100
"Acoustic Bass Drum", 35, 100
"Bass Drum 1", 36, 100
"Side Stick", 37, 100
"Brush Tap", 38, 100
"Brush Slap", 39, 100
"Brush Swirl", 40, 100
"Low Floor Tom", 41, 100
"Closed Hi-Hat", 42, 100
"High Floor Tom", 43, 100
"Pedal Hi-Hat", 44, 100
"Low Tom", 45, 100
"Open Hi-Hat", 46, 100
"Low-Mid Tom", 47, 100
"Hi-Mid Tom", 48, 100
"Crash Cymbal 1", 49, 100
"High Tom", 50, 100
"Ride Cymbal 1", 51, 100
"Chinese Cymbal", 52, 100
"Ride Bell", 53, 100
"Tambourine", 54, 100
"Splash Cymbal", 55, 100
"Cowbell", 56, 100
"Crash Cymbal 2", 57, 100
"Vibraslap", 58, 100
"Ride Cymbal 2", 59, 100
"Hi Bongo", 60, 100
"Low Bongo", 61, 100
"Mute Hi Conga", 62, 100
"Open Hi Conga", 63, 100
"Low Conga", 64, 100
"High Timbale", 65, 100
"Low Timbale", 66, 100
"High Agogo", 67, 100
"Low Agogo", 68, 100
"Cabasa", 69, 100
"Maracas", 70, 100
"Short Whistle", 71, 100
"Long Whistle", 72, 100
"Short Guiro", 73, 100
"Long Guiro", 74, 100
"Claves", 75, 100
"Hi Wood Block", 76, 100
"Low Wood Block", 77, 100
"Mute Cuica", 78, 100
"Open Cuica", 79, 100
"Mute Triangle", 80, 100
"Open Triangle", 81, 100
"Shaker", 82, 100
"Jungle Bell", 83, 100
"Belltree", 84, 100
"Castanets", 85, 100
"Mute Surdo", 86, 100
"Open Surdo", 87, 100

View File

@ -0,0 +1,61 @@
"High Q", 27, 100
"Slap", 28, 100
"Scratch Push", 29, 100
"Scratch Pull", 30, 100
"Sticks", 31, 100
"Square Click", 32, 100
"Metronome Click", 33, 100
"Metronome Bell", 34, 100
"Acoustic Bass Drum", 35, 100
"Elec BD", 36, 100
"Side Stick", 37, 100
"Elec SD", 38, 100
"Hand Clap", 39, 100
"Gated SD", 40, 100
"Elec Low Tom 2", 41, 100
"Closed Hi-Hat", 42, 100
"Elec Low Tom 1", 43, 100
"Pedal Hi-Hat", 44, 100
"Elec Mid Tom 2", 45, 100
"Open Hi-Hat", 46, 100
"Elec Mid Tom 1", 47, 100
"Elec Hi Tom 2", 48, 100
"Crash Cymbal 1", 49, 100
"Elec High Tom 1", 50, 100
"Ride Cymbal 1", 51, 100
"Reverse Cymbal", 52, 100
"Ride Bell", 53, 100
"Tambourine", 54, 100
"Splash Cymbal", 55, 100
"Cowbell", 56, 100
"Crash Cymbal 2", 57, 100
"Vibraslap", 58, 100
"Ride Cymbal 2", 59, 100
"Hi Bongo", 60, 100
"Low Bongo", 61, 100
"Mute Hi Conga", 62, 100
"Open Hi Conga", 63, 100
"Low Conga", 64, 100
"High Timbale", 65, 100
"Low Timbale", 66, 100
"High Agogo", 67, 100
"Low Agogo", 68, 100
"Cabasa", 69, 100
"Maracas", 70, 100
"Short Whistle", 71, 100
"Long Whistle", 72, 100
"Short Guiro", 73, 100
"Long Guiro", 74, 100
"Claves", 75, 100
"Hi Wood Block", 76, 100
"Low Wood Block", 77, 100
"Mute Cuica", 78, 100
"Open Cuica", 79, 100
"Mute Triangle", 80, 100
"Open Triangle", 81, 100
"Shaker", 82, 100
"Jungle Bell", 83, 100
"Belltree", 84, 100
"Castanets", 85, 100
"Mute Surdo", 86, 100
"Open Surdo", 87, 100

View File

@ -0,0 +1,61 @@
"High Q", 27, 100
"Slap", 28, 100
"Scratch Push", 29, 100
"Scratch Pull", 30, 100
"Sticks", 31, 100
"Square Click", 32, 100
"Metronome Click", 33, 100
"Metronome Bell", 34, 100
"Acoustic Bass Drum", 35, 100
"Bass Drum 1", 36, 100
"Side Stick", 37, 100
"Acoustic Snare", 38, 100
"Hand Clap", 39, 100
"Electric Snare", 40, 100
"Low Floor Tom", 41, 100
"Closed Hi-Hat", 42, 100
"High Floor Tom", 43, 100
"Pedal Hi-Hat", 44, 100
"Low Tom", 45, 100
"Open Hi-Hat", 46, 100
"Low-Mid Tom", 47, 100
"Hi-Mid Tom", 48, 100
"Crash Cymbal 1", 49, 100
"High Tom", 50, 100
"Ride Cymbal 1", 51, 100
"Chinese Cymbal", 52, 100
"Ride Bell", 53, 100
"Tambourine", 54, 100
"Splash Cymbal", 55, 100
"Cowbell", 56, 100
"Crash Cymbal 2", 57, 100
"Vibraslap", 58, 100
"Ride Cymbal 2", 59, 100
"Hi Bongo", 60, 100
"Low Bongo", 61, 100
"Mute Hi Conga", 62, 100
"Open Hi Conga", 63, 100
"Low Conga", 64, 100
"High Timbale", 65, 100
"Low Timbale", 66, 100
"High Agogo", 67, 100
"Low Agogo", 68, 100
"Cabasa", 69, 100
"Maracas", 70, 100
"Short Whistle", 71, 100
"Long Whistle", 72, 100
"Short Guiro", 73, 100
"Long Guiro", 74, 100
"Claves", 75, 100
"Hi Wood Block", 76, 100
"Low Wood Block", 77, 100
"Mute Cuica", 78, 100
"Open Cuica", 79, 100
"Mute Triangle", 80, 100
"Open Triangle", 81, 100
"Shaker", 82, 100
"Jungle Bell", 83, 100
"Belltree", 84, 100
"Castanets", 85, 100
"Mute Surdo", 86, 100
"Open Surdo", 87, 100

View File

@ -0,0 +1,62 @@
"Closed HH", 27, 100
"Pedal HH", 28, 100
"Open HH", 29, 100
"Hide Cymbal", 30, 100
"Sticks", 31, 100
"Square Click", 32, 100
"Metronome Click", 33, 100
"Metronome Bell", 34, 100
"Concert BD2", 35, 100
"Concert BD1", 36, 100
"Side Stick", 37, 100
"Concert SD", 38, 100
"Castanets", 39, 100
"Concert SD", 40, 100
"Timpani F", 41, 100
"Timpani F#", 42, 100
"Timpani G", 43, 100
"Timpani G#", 44, 100
"Timpani A", 45, 100
"Timpani A#", 46, 100
"Timpani B", 47, 100
"Timpani c", 48, 100
"Timpani c#", 49, 100
"Timpani d", 50, 100
"Timpani d#", 51, 100
"Timpani e", 52, 100
"Timpani f", 53, 100
"Tambourine", 54, 100
"Splash Cymbal", 55, 100
"Cowbell", 56, 100
"Concert Cymbal 2", 57, 100
"Vibraslap", 58, 100
"Concert Cymbal 1", 59, 100
"Hi Bongo", 60, 100
"Low Bongo", 61, 100
"Mute Hi Conga", 62, 100
"Open Hi Conga", 63, 100
"Low Conga", 64, 100
"High Timbale", 65, 100
"Low Timbale", 66, 100
"High Agogo", 67, 100
"Low Agogo", 68, 100
"Cabasa", 69, 100
"Maracas", 70, 100
"Short Whistle", 71, 100
"Long Whistle", 72, 100
"Short Guiro", 73, 100
"Long Guiro", 74, 100
"Claves", 75, 100
"Hi Wood Block", 76, 100
"Low Wood Block", 77, 100
"Mute Cuica", 78, 100
"Open Cuica", 79, 100
"Mute Triangle", 80, 100
"Open Triangle", 81, 100
"Shaker", 82, 100
"Jungle Bell", 83, 100
"Belltree", 84, 100
"Castanets", 85, 100
"Mute Surdo", 86, 100
"Open Surdo", 87, 100
"Applause", 88, 100

View File

@ -0,0 +1,61 @@
"High Q", 27, 100
"Slap", 28, 100
"Scratch Push", 29, 100
"Scratch Pull", 30, 100
"Sticks", 31, 100
"Square Click", 32, 100
"Metronome Click", 33, 100
"Metronome Bell", 34, 100
"Acoustic Bass Drum", 35, 100
"MONDO Kick", 36, 100
"Side Stick", 37, 100
"Gated SD", 38, 100
"Hand Clap", 39, 100
"Electric Snare", 40, 100
"Room Low Tom 2", 41, 100
"Closed Hi-Hat", 42, 100
"Room Low Tom 1", 43, 100
"Pedal Hi-Hat", 44, 100
"Room Mid Tom 2", 45, 100
"Open Hi-Hat", 46, 100
"Room Mid Tom 1", 47, 100
"Room Hi Tom 2", 48, 100
"Crash Cymbal 1", 49, 100
"Room High Tom 1", 50, 100
"Ride Cymbal 1", 51, 100
"Chinese Cymbal", 52, 100
"Ride Bell", 53, 100
"Tambourine", 54, 100
"Splash Cymbal", 55, 100
"Cowbell", 56, 100
"Crash Cymbal 2", 57, 100
"Vibraslap", 58, 100
"Ride Cymbal 2", 59, 100
"Hi Bongo", 60, 100
"Low Bongo", 61, 100
"Mute Hi Conga", 62, 100
"Open Hi Conga", 63, 100
"Low Conga", 64, 100
"High Timbale", 65, 100
"Low Timbale", 66, 100
"High Agogo", 67, 100
"Low Agogo", 68, 100
"Cabasa", 69, 100
"Maracas", 70, 100
"Short Whistle", 71, 100
"Long Whistle", 72, 100
"Short Guiro", 73, 100
"Long Guiro", 74, 100
"Claves", 75, 100
"Hi Wood Block", 76, 100
"Low Wood Block", 77, 100
"Mute Cuica", 78, 100
"Open Cuica", 79, 100
"Mute Triangle", 80, 100
"Open Triangle", 81, 100
"Shaker", 82, 100
"Jungle Bell", 83, 100
"Belltree", 84, 100
"Castanets", 85, 100
"Mute Surdo", 86, 100
"Open Surdo", 87, 100

View File

@ -0,0 +1,61 @@
"High Q", 27, 100
"Slap", 28, 100
"Scratch Push", 29, 100
"Scratch Pull", 30, 100
"Sticks", 31, 100
"Square Click", 32, 100
"Metronome Click", 33, 100
"Metronome Bell", 34, 100
"Acoustic Bass Drum", 35, 100
"Kick Drum 1", 36, 100
"Side Stick", 37, 100
"Acoustic Snare", 38, 100
"Hand Clap", 39, 100
"Electric Snare", 40, 100
"Room Low Tom 2", 41, 100
"Closed Hi-Hat", 42, 100
"Room Low Tom 1", 43, 100
"Pedal Hi-Hat", 44, 100
"Room Mid Tom 2", 45, 100
"Open Hi-Hat", 46, 100
"Room Mid Tom 1", 47, 100
"Room Hi Tom 2", 48, 100
"Crash Cymbal 1", 49, 100
"Room High Tom 1", 50, 100
"Ride Cymbal 1", 51, 100
"Chinese Cymbal", 52, 100
"Ride Bell", 53, 100
"Tambourine", 54, 100
"Splash Cymbal", 55, 100
"Cowbell", 56, 100
"Crash Cymbal 2", 57, 100
"Vibraslap", 58, 100
"Ride Cymbal 2", 59, 100
"Hi Bongo", 60, 100
"Low Bongo", 61, 100
"Mute Hi Conga", 62, 100
"Open Hi Conga", 63, 100
"Low Conga", 64, 100
"High Timbale", 65, 100
"Low Timbale", 66, 100
"High Agogo", 67, 100
"Low Agogo", 68, 100
"Cabasa", 69, 100
"Maracas", 70, 100
"Short Whistle", 71, 100
"Long Whistle", 72, 100
"Short Guiro", 73, 100
"Long Guiro", 74, 100
"Claves", 75, 100
"Hi Wood Block", 76, 100
"Low Wood Block", 77, 100
"Mute Cuica", 78, 100
"Open Cuica", 79, 100
"Mute Triangle", 80, 100
"Open Triangle", 81, 100
"Shaker", 82, 100
"Jungle Bell", 83, 100
"Belltree", 84, 100
"Castanets", 85, 100
"Mute Surdo", 86, 100
"Open Surdo", 87, 100

View File

@ -0,0 +1,58 @@
"High Q", 27, 100
"Slap", 28, 100
"Scratch Push", 29, 100
"Scratch Pull", 30, 100
"Sticks", 31, 100
"Square Click", 32, 100
"Metronome Click", 33, 100
"Metronome Bell", 34, 100
"Acoustic Bass Drum", 35, 100
"Bass Drum 1", 36, 100
"Side Stick", 37, 100
"Acoustic Snare", 38, 100
"High Q", 39, 100
"Slap", 40, 100
"Scratch Push", 41, 100
"Scratch Pull", 42, 100
"Sticks", 43, 100
"Sqare Click", 44, 100
"Metronome Click", 45, 100
"Metronome Bell", 46, 100
"Guitar sld fing.", 47, 100
"Guitar cutt down", 48, 100
"Guitar cutt up", 49, 100
"String slap", 50, 100
"Fl. Key Click", 51, 100
"Laughing", 52, 100
"Screamming", 53, 100
"Punch", 54, 100
"Heart Beat", 55, 100
"Footsteps 1", 56, 100
"Footsteps 2", 57, 100
"Aplause", 58, 100
"Door Creaking", 59, 100
"Door", 60, 100
"Scratch", 61, 100
"Windchime", 62, 100
"Car-Engine", 63, 100
"Car-Stop", 64, 100
"Car-Pass", 65, 100
"Car-Crash", 66, 100
"Siren", 67, 100
"Train", 68, 100
"Jetplane", 69, 100
"Helicopter", 70, 100
"Starship", 71, 100
"Gun Shot", 72, 100
"Machine Gun", 73, 100
"Lasergun", 74, 100
"Explosion", 75, 100
"Dog", 76, 100
"Horse-Gallop", 77, 100
"Birds", 78, 100
"Rain", 79, 100
"Thunder", 80, 100
"Wind", 81, 100
"Seashore", 82, 100
"Stream", 83, 100
"Bubble", 84, 100

Some files were not shown because too many files have changed in this diff Show More