summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Moreau <oreaus@gmail.com>2010-08-11 03:05:06 -0600
committerScott Moreau <oreaus@gmail.com>2010-08-11 03:05:06 -0600
commitcb78df2807da6b8c84316770f8fbf48c573c7aae (patch)
tree5d8470509c8e7b5f7d374e7f7ef45bbd15511ddb
downloadwizard-cb78df2807da6b8c84316770f8fbf48c573c7aae.tar.gz
wizard-cb78df2807da6b8c84316770f8fbf48c573c7aae.tar.bz2
Initial C++ port.
-rw-r--r--CMakeLists.txt5
-rw-r--r--include/wizard.h212
-rwxr-xr-xinclude/wizard_tex.h2824
-rwxr-xr-xsrc/wizard.c1186
-rwxr-xr-xsrc/wizard.cpp997
-rwxr-xr-xwizard.xml.in853
6 files changed, 6077 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..2fa0096
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,5 @@
+find_package (Compiz REQUIRED)
+
+include (CompizPlugin)
+
+compiz_plugin (wizard PLUGINDEPS composite opengl mousepoll)
diff --git a/include/wizard.h b/include/wizard.h
new file mode 100644
index 0000000..5b86b5c
--- /dev/null
+++ b/include/wizard.h
@@ -0,0 +1,212 @@
+/*
+ * Compiz wizard particle system plugin
+ *
+ * wizard.c
+ *
+ * Written by : Sebastian Kuhlen
+ * E-mail : DiCon@tankwar.de
+ *
+ * This plugin and parts of its code have been inspired by the showmouse plugin
+ * by Dennis Kasprzyk
+ *
+ * This program is free software; you can 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.
+ *
+ */
+
+#include <core/core.h>
+#include <composite/composite.h>
+#include <opengl/opengl.h>
+#include <mousepoll/mousepoll.h>
+
+#include "wizard_options.h"
+#include "wizard_tex.h"
+
+static float
+rRange (float avg, float range)
+{
+ return avg + (float)((random () & 0xff)/127.5-1.)*range;
+}
+
+typedef enum
+{
+ TRIGGER_PERSISTENT = 0,
+ TRIGGER_MOUSEMOVEMENT,
+ TRIGGER_RANDOMSHOT,
+ TRIGGER_RANDOMPERIOD
+} TriggerType;
+
+typedef enum
+{
+ MOVEMENT_MOUSEPOSITION = 0,
+ MOVEMENT_FOLLOWMOUSE,
+ MOVEMENT_BOUNCE,
+ MOVEMENT_WRAP
+} MovementType;
+
+class GPoint
+{
+ public:
+
+ float strength; // Strength of this gravity source
+ float x; // X position
+ float y; // Y position
+ float espeed; // Speed of the gravity source
+ float eangle; // Angle for the movement of this gravity source
+ int movement; // Type of movement of this gravity source
+};
+
+class Particle
+{
+ public:
+
+ float c[3]; // Color
+ float a; // alpha value
+ float x; // X position
+ float y; // Y position
+ float t; // t position (age, born at 1, dies at 0)
+ float phi; // Orientation of texture
+ float vx; // X speed
+ float vy; // Y speed
+ float vt; // t speed (aging speed)
+ float vphi; // Rotation speed
+ float s; // size (side of the square)
+ float snew; // Size when born (reduced to s while new)
+ float g; // Gravity from this particle
+};
+
+class Emitter
+{
+ public:
+
+ bool set_active; // Set to active in the settings
+ bool active; // Currently active (differs from set_active for
+ // the random period trigger)
+ int trigger; // When to generate particles
+ int count; // Amount of particles to be generated
+ float h; // color hue (0..1)
+ float dh; // color hue range
+ float l; // color lightness (0..1)
+ float dl; // color lightness range
+ float a; // Alpha
+ float da; // Alpha range
+ float x; // X position
+ float y; // Y position
+ float espeed; // Speed of the emitter
+ float eangle; // Angle for the movement of this emitter
+ int movement; // Type of movement of this emitter
+ float dx; // X range
+ float dy; // Y range
+ float dcirc; // Circular range
+ float vx; // X speed
+ float vy; // Y speed
+ float vt; // t speed (aging speed)
+ float vphi; // Rotation speed
+ float dvx; // X speed range
+ float dvy; // Y speed range
+ float dvcirc; // Circular speed range
+ float dvt; // t speed (aging speed) range
+ float dvphi; // Rotation speed range
+ float s; // size (side of the square)
+ float ds; // size (side of the square) range
+ float snew; // Size when born (reduced to s while new)
+ float dsnew; // Size when born (reduced to s while new) range
+ float g; // Gravity of particles
+ float dg; // Gravity range
+ float gp; // Part of particles that have gravity
+};
+
+class ParticleSystem
+{
+ public:
+
+ int hardLimit; // Not to be exceeded
+ int softLimit; // If exceeded, old particles age faster
+ int lastCount; // Living particle count to evaluate softLimit
+ float tnew; // Particle is new if t > tnew
+ float told; // Particle is old if t < told
+ float gx; // Global gravity x
+ float gy; // Global gravity y
+ Particle *particles; // The actual particles
+ GLuint tex; // Particle Texture
+ bool active;
+ float darken; // Darken background
+ GLuint blendMode;
+ Emitter *e; // All emitters in here
+ GPoint *g; // All gravity point sources in here
+ int ne; // Emitter count
+ int ng; // GPoint count
+
+ GLfloat *vertices_cache;
+ int vertex_cache_count;
+ GLfloat *coords_cache;
+ int coords_cache_count;
+ GLfloat *colors_cache;
+ int color_cache_count;
+ GLfloat *dcolors_cache;
+ int dcolors_cache_count;
+};
+
+class WizardScreen :
+ public PluginClassHandler <WizardScreen, CompScreen>,
+ public WizardOptions,
+ public ScreenInterface,
+ public CompositeScreenInterface,
+ public GLScreenInterface
+{
+ public:
+ WizardScreen (CompScreen *screen);
+ ~WizardScreen ();
+
+ CompositeScreen *cScreen;
+ GLScreen *gScreen;
+
+ int mx, my; //Mouse Position from polling
+
+ bool active;
+
+ ParticleSystem *ps;
+
+ MousePoller pollHandle;
+
+ void loadGPoints (ParticleSystem *ps);
+
+ void loadEmitters (ParticleSystem *ps);
+
+ void drawParticles (ParticleSystem * ps);
+
+ void positionUpdate (const CompPoint &pos);
+
+ void preparePaint (int time);
+
+ void donePaint ();
+
+ bool
+ glPaintOutput (const GLScreenPaintAttrib &sa,
+ const GLMatrix &transform,
+ const CompRegion &region,
+ CompOutput *output,
+ unsigned int mask);
+
+ bool toggle ();
+
+ void
+ optionChanged (CompOption *opt,
+ WizardOptions::Options num);
+};
+
+class WizardPluginVTable :
+ public CompPlugin::VTableForScreen <WizardScreen>
+{
+ public:
+ bool init ();
+};
+
+COMPIZ_PLUGIN_20090315 (wizard, WizardPluginVTable);
diff --git a/include/wizard_tex.h b/include/wizard_tex.h
new file mode 100755
index 0000000..35685a2
--- /dev/null
+++ b/include/wizard_tex.h
@@ -0,0 +1,2824 @@
+/*
+ * Compiz wizard particle system plugin
+ * Texture of a single particle. Generated using GIMP.
+ *
+ * wizard_tex.h
+ *
+ * Written by : Sebastian Kuhlen
+ * E-mail : DiCon@tankwar.de
+ *
+ * This plugin and parts of its code have been inspired by the showmouse plugin
+ * by Dennis Kasprzyk
+ *
+ * This program is free software; you can 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.
+ *
+ */
+
+static const unsigned char particleTex[65536] = {
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\2"
+ "\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\1\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2"
+ "\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0"
+ "\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377"
+ "\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377"
+ "\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\2\377\377\377\2\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\377\377\377"
+ "\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\4"
+ "\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\0"
+ "\0\0\0\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377"
+ "\4\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4"
+ "\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377"
+ "\377\377\3\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377"
+ "\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377"
+ "\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377"
+ "\4\377\377\377\3\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\4\377"
+ "\377\377\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377"
+ "\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377"
+ "\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377"
+ "\377\4\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377"
+ "\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2"
+ "\377\377\377\3\377\377\377\4\377\377\377\5\377\377\377\7\377\377\377\6\377"
+ "\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377"
+ "\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377"
+ "\5\377\377\377\6\377\377\377\5\377\377\377\4\377\377\377\3\377\377\377\2"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\3\377"
+ "\377\377\5\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\7\377\377"
+ "\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4"
+ "\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377"
+ "\377\377\5\377\377\377\4\377\377\377\3\377\377\377\2\377\377\377\1\377\377"
+ "\377\1\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\5\377\377\377"
+ "\7\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\6"
+ "\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377"
+ "\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377"
+ "\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377"
+ "\7\377\377\377\6\377\377\377\4\377\377\377\3\377\377\377\2\377\377\377\1"
+ "\377\377\377\1\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\6\377"
+ "\377\377\10\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\7\377"
+ "\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377"
+ "\377\5\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377"
+ "\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377"
+ "\377\377\3\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\4\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\2"
+ "\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\4\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377\6\377\377"
+ "\377\7\377\377\377\7\377\377\377\7\377\377\377\5\377\377\377\4\377\377\377"
+ "\3\377\377\377\2\377\377\377\1\377\377\377\2\377\377\377\4\377\377\377\5"
+ "\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\11\377\377\377\10"
+ "\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377"
+ "\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377"
+ "\377\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377"
+ "\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377"
+ "\377\6\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\7\377\377\377"
+ "\5\377\377\377\4\377\377\377\3\377\377\377\2\377\377\377\1\377\377\377\2"
+ "\377\377\377\4\377\377\377\5\377\377\377\7\377\377\377\11\377\377\377\12"
+ "\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377\7\377\377\377\7"
+ "\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\6\377"
+ "\377\377\5\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377"
+ "\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4"
+ "\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6\377"
+ "\377\377\5\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\3\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4"
+ "\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10\377"
+ "\377\377\10\377\377\377\7\377\377\377\6\377\377\377\5\377\377\377\3\377\377"
+ "\377\2\377\377\377\1\377\377\377\3\377\377\377\5\377\377\377\6\377\377\377"
+ "\10\377\377\377\13\377\377\377\12\377\377\377\12\377\377\377\11\377\377\377"
+ "\11\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377"
+ "\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5"
+ "\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377"
+ "\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377"
+ "\377\5\377\377\377\6\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377"
+ "\5\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377"
+ "\377\6\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\11\377\377"
+ "\377\10\377\377\377\7\377\377\377\5\377\377\377\3\377\377\377\2\377\377\377"
+ "\2\377\377\377\3\377\377\377\5\377\377\377\7\377\377\377\11\377\377\377\14"
+ "\377\377\377\13\377\377\377\12\377\377\377\12\377\377\377\11\377\377\377"
+ "\10\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377"
+ "\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5"
+ "\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\2\377"
+ "\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377"
+ "\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4\377"
+ "\377\377\4\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10\377\377"
+ "\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\5\377\377\377\5\377"
+ "\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\11\377"
+ "\377\377\12\377\377\377\11\377\377\377\7\377\377\377\5\377\377\377\3\377"
+ "\377\377\2\377\377\377\2\377\377\377\4\377\377\377\6\377\377\377\10\377\377"
+ "\377\13\377\377\377\15\377\377\377\14\377\377\377\13\377\377\377\13\377\377"
+ "\377\12\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377\10\377\377"
+ "\377\10\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377"
+ "\5\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377"
+ "\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377"
+ "\377\377\7\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\7\377"
+ "\377\377\6\377\377\377\6\377\377\377\5\377\377\377\4\377\377\377\4\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\4\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\7"
+ "\377\377\377\10\377\377\377\11\377\377\377\12\377\377\377\12\377\377\377"
+ "\7\377\377\377\5\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\4"
+ "\377\377\377\6\377\377\377\11\377\377\377\14\377\377\377\15\377\377\377\15"
+ "\377\377\377\14\377\377\377\13\377\377\377\12\377\377\377\12\377\377\377"
+ "\11\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377"
+ "\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5"
+ "\377\377\377\5\377\377\377\4\377\377\377\3\377\377\377\2\377\377\377\1\377"
+ "\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377"
+ "\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1"
+ "\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\4\377"
+ "\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377"
+ "\4\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10"
+ "\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\6"
+ "\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\4\377"
+ "\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5\377\377"
+ "\377\5\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\11\377\377"
+ "\377\12\377\377\377\13\377\377\377\13\377\377\377\10\377\377\377\6\377\377"
+ "\377\4\377\377\377\2\377\377\377\3\377\377\377\5\377\377\377\7\377\377\377"
+ "\12\377\377\377\15\377\377\377\16\377\377\377\15\377\377\377\14\377\377\377"
+ "\14\377\377\377\13\377\377\377\12\377\377\377\12\377\377\377\11\377\377\377"
+ "\11\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377"
+ "\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\4\377\377\377\3"
+ "\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377"
+ "\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377"
+ "\5\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5"
+ "\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\4\377"
+ "\377\377\4\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10\377\377"
+ "\377\12\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377\7\377\377"
+ "\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377"
+ "\4\377\377\377\5\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5"
+ "\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\12"
+ "\377\377\377\14\377\377\377\13\377\377\377\10\377\377\377\6\377\377\377\4"
+ "\377\377\377\2\377\377\377\3\377\377\377\5\377\377\377\10\377\377\377\13"
+ "\377\377\377\17\377\377\377\17\377\377\377\16\377\377\377\15\377\377\377"
+ "\14\377\377\377\13\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377"
+ "\11\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377"
+ "\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\4\377\377\377\3"
+ "\377\377\377\2\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377"
+ "\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377"
+ "\4\377\377\377\6\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\6"
+ "\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\4\377"
+ "\377\377\4\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10\377\377"
+ "\377\11\377\377\377\13\377\377\377\13\377\377\377\12\377\377\377\11\377\377"
+ "\377\10\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377"
+ "\5\377\377\377\5\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377\6"
+ "\377\377\377\6\377\377\377\7\377\377\377\11\377\377\377\11\377\377\377\13"
+ "\377\377\377\14\377\377\377\14\377\377\377\12\377\377\377\7\377\377\377\5"
+ "\377\377\377\2\377\377\377\3\377\377\377\6\377\377\377\11\377\377\377\15"
+ "\377\377\377\21\377\377\377\20\377\377\377\17\377\377\377\16\377\377\377"
+ "\15\377\377\377\14\377\377\377\14\377\377\377\13\377\377\377\13\377\377\377"
+ "\12\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377"
+ "\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\4\377\377\377\3"
+ "\377\377\377\2\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377"
+ "\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\2\377\377\377\3\377\377\377\3\377\377"
+ "\377\4\377\377\377\5\377\377\377\6\377\377\377\10\377\377\377\10\377\377"
+ "\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377"
+ "\5\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10"
+ "\377\377\377\11\377\377\377\13\377\377\377\14\377\377\377\13\377\377\377"
+ "\12\377\377\377\11\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377"
+ "\5\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6"
+ "\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\11\377\377\377\12"
+ "\377\377\377\13\377\377\377\15\377\377\377\16\377\377\377\12\377\377\377"
+ "\7\377\377\377\5\377\377\377\2\377\377\377\4\377\377\377\7\377\377\377\13"
+ "\377\377\377\16\377\377\377\22\377\377\377\21\377\377\377\17\377\377\377"
+ "\16\377\377\377\15\377\377\377\15\377\377\377\14\377\377\377\13\377\377\377"
+ "\13\377\377\377\12\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377"
+ "\10\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377\4\377\377\377"
+ "\3\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\0\0\0\0\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377"
+ "\377\377\3\377\377\377\3\377\377\377\4\377\377\377\5\377\377\377\6\377\377"
+ "\377\10\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377\10\377\377"
+ "\377\7\377\377\377\7\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377"
+ "\6\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\13\377\377\377"
+ "\15\377\377\377\14\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377"
+ "\10\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\5"
+ "\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\10"
+ "\377\377\377\11\377\377\377\13\377\377\377\14\377\377\377\16\377\377\377"
+ "\17\377\377\377\13\377\377\377\10\377\377\377\5\377\377\377\3\377\377\377"
+ "\4\377\377\377\10\377\377\377\14\377\377\377\20\377\377\377\22\377\377\377"
+ "\22\377\377\377\20\377\377\377\17\377\377\377\16\377\377\377\15\377\377\377"
+ "\14\377\377\377\14\377\377\377\13\377\377\377\13\377\377\377\12\377\377\377"
+ "\12\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377\7\377\377\377"
+ "\5\377\377\377\4\377\377\377\3\377\377\377\2\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377"
+ "\3\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10"
+ "\377\377\377\12\377\377\377\12\377\377\377\11\377\377\377\11\377\377\377"
+ "\10\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\5\377\377\377\7"
+ "\377\377\377\10\377\377\377\11\377\377\377\12\377\377\377\14\377\377\377"
+ "\16\377\377\377\15\377\377\377\14\377\377\377\12\377\377\377\11\377\377\377"
+ "\10\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5"
+ "\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\12"
+ "\377\377\377\13\377\377\377\15\377\377\377\17\377\377\377\20\377\377\377"
+ "\13\377\377\377\10\377\377\377\5\377\377\377\3\377\377\377\5\377\377\377"
+ "\11\377\377\377\15\377\377\377\22\377\377\377\24\377\377\377\22\377\377\377"
+ "\21\377\377\377\20\377\377\377\17\377\377\377\16\377\377\377\16\377\377\377"
+ "\15\377\377\377\15\377\377\377\14\377\377\377\13\377\377\377\12\377\377\377"
+ "\11\377\377\377\11\377\377\377\10\377\377\377\7\377\377\377\5\377\377\377"
+ "\3\377\377\377\3\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377"
+ "\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\3\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\3\377\377"
+ "\377\3\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377\10\377\377\377"
+ "\12\377\377\377\13\377\377\377\13\377\377\377\12\377\377\377\12\377\377\377"
+ "\11\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377"
+ "\10\377\377\377\11\377\377\377\13\377\377\377\14\377\377\377\16\377\377\377"
+ "\17\377\377\377\16\377\377\377\14\377\377\377\13\377\377\377\11\377\377\377"
+ "\10\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377"
+ "\6\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\12\377\377\377"
+ "\14\377\377\377\15\377\377\377\17\377\377\377\21\377\377\377\15\377\377\377"
+ "\11\377\377\377\5\377\377\377\3\377\377\377\5\377\377\377\12\377\377\377"
+ "\17\377\377\377\25\377\377\377\25\377\377\377\24\377\377\377\22\377\377\377"
+ "\20\377\377\377\17\377\377\377\17\377\377\377\16\377\377\377\15\377\377\377"
+ "\15\377\377\377\14\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377"
+ "\11\377\377\377\10\377\377\377\6\377\377\377\4\377\377\377\3\377\377\377"
+ "\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\3"
+ "\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377"
+ "\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377"
+ "\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377"
+ "\3\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\11"
+ "\377\377\377\13\377\377\377\14\377\377\377\14\377\377\377\13\377\377\377"
+ "\13\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377\7\377\377\377"
+ "\7\377\377\377\10\377\377\377\13\377\377\377\14\377\377\377\16\377\377\377"
+ "\20\377\377\377\20\377\377\377\16\377\377\377\14\377\377\377\13\377\377\377"
+ "\10\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377"
+ "\7\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377\12\377\377\377"
+ "\14\377\377\377\16\377\377\377\20\377\377\377\22\377\377\377\16\377\377\377"
+ "\12\377\377\377\5\377\377\377\3\377\377\377\6\377\377\377\13\377\377\377"
+ "\20\377\377\377\27\377\377\377\26\377\377\377\24\377\377\377\22\377\377\377"
+ "\21\377\377\377\20\377\377\377\20\377\377\377\17\377\377\377\16\377\377\377"
+ "\15\377\377\377\14\377\377\377\14\377\377\377\13\377\377\377\12\377\377\377"
+ "\11\377\377\377\7\377\377\377\5\377\377\377\4\377\377\377\2\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\3\377\377\377\3\377"
+ "\377\377\4\377\377\377\5\377\377\377\6\377\377\377\5\377\377\377\5\377\377"
+ "\377\5\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2"
+ "\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\5\377\377\377\7\377"
+ "\377\377\10\377\377\377\11\377\377\377\14\377\377\377\16\377\377\377\16\377"
+ "\377\377\15\377\377\377\14\377\377\377\13\377\377\377\12\377\377\377\10\377"
+ "\377\377\7\377\377\377\10\377\377\377\12\377\377\377\14\377\377\377\15\377"
+ "\377\377\20\377\377\377\22\377\377\377\20\377\377\377\17\377\377\377\14\377"
+ "\377\377\12\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377\10\377"
+ "\377\377\7\377\377\377\10\377\377\377\11\377\377\377\12\377\377\377\13\377"
+ "\377\377\14\377\377\377\17\377\377\377\21\377\377\377\23\377\377\377\17\377"
+ "\377\377\12\377\377\377\6\377\377\377\3\377\377\377\7\377\377\377\15\377"
+ "\377\377\22\377\377\377\30\377\377\377\27\377\377\377\25\377\377\377\23\377"
+ "\377\377\22\377\377\377\21\377\377\377\20\377\377\377\20\377\377\377\17\377"
+ "\377\377\16\377\377\377\15\377\377\377\14\377\377\377\13\377\377\377\12\377"
+ "\377\377\10\377\377\377\6\377\377\377\4\377\377\377\3\377\377\377\2\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377"
+ "\5\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6"
+ "\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377"
+ "\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\5\377\377\377\6"
+ "\377\377\377\7\377\377\377\11\377\377\377\13\377\377\377\15\377\377\377\17"
+ "\377\377\377\17\377\377\377\16\377\377\377\15\377\377\377\14\377\377\377"
+ "\12\377\377\377\11\377\377\377\10\377\377\377\11\377\377\377\13\377\377\377"
+ "\15\377\377\377\20\377\377\377\22\377\377\377\23\377\377\377\20\377\377\377"
+ "\16\377\377\377\14\377\377\377\12\377\377\377\11\377\377\377\11\377\377\377"
+ "\10\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377\12\377\377\377"
+ "\14\377\377\377\16\377\377\377\17\377\377\377\22\377\377\377\24\377\377\377"
+ "\20\377\377\377\12\377\377\377\7\377\377\377\4\377\377\377\10\377\377\377"
+ "\16\377\377\377\26\377\377\377\32\377\377\377\30\377\377\377\26\377\377\377"
+ "\24\377\377\377\22\377\377\377\22\377\377\377\21\377\377\377\20\377\377\377"
+ "\17\377\377\377\16\377\377\377\15\377\377\377\14\377\377\377\13\377\377\377"
+ "\12\377\377\377\7\377\377\377\5\377\377\377\3\377\377\377\2\377\377\377\1"
+ "\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\5\377"
+ "\377\377\6\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\6\377\377"
+ "\377\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377"
+ "\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\3\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4"
+ "\377\377\377\5\377\377\377\6\377\377\377\10\377\377\377\12\377\377\377\14"
+ "\377\377\377\16\377\377\377\21\377\377\377\20\377\377\377\20\377\377\377"
+ "\16\377\377\377\15\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377"
+ "\12\377\377\377\15\377\377\377\17\377\377\377\22\377\377\377\25\377\377\377"
+ "\23\377\377\377\21\377\377\377\16\377\377\377\14\377\377\377\12\377\377\377"
+ "\12\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377"
+ "\12\377\377\377\14\377\377\377\16\377\377\377\20\377\377\377\23\377\377\377"
+ "\26\377\377\377\21\377\377\377\13\377\377\377\7\377\377\377\4\377\377\377"
+ "\12\377\377\377\20\377\377\377\30\377\377\377\33\377\377\377\31\377\377\377"
+ "\27\377\377\377\25\377\377\377\24\377\377\377\23\377\377\377\22\377\377\377"
+ "\21\377\377\377\20\377\377\377\17\377\377\377\16\377\377\377\15\377\377\377"
+ "\14\377\377\377\11\377\377\377\7\377\377\377\4\377\377\377\3\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\4\377\377\377\5\377\377\377\5"
+ "\377\377\377\7\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377\7\377"
+ "\377\377\7\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377"
+ "\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\6\377\377"
+ "\377\7\377\377\377\10\377\377\377\12\377\377\377\15\377\377\377\20\377\377"
+ "\377\23\377\377\377\22\377\377\377\21\377\377\377\17\377\377\377\15\377\377"
+ "\377\14\377\377\377\12\377\377\377\12\377\377\377\14\377\377\377\16\377\377"
+ "\377\21\377\377\377\24\377\377\377\26\377\377\377\23\377\377\377\20\377\377"
+ "\377\16\377\377\377\14\377\377\377\13\377\377\377\12\377\377\377\11\377\377"
+ "\377\11\377\377\377\12\377\377\377\13\377\377\377\14\377\377\377\16\377\377"
+ "\377\21\377\377\377\23\377\377\377\27\377\377\377\22\377\377\377\14\377\377"
+ "\377\7\377\377\377\5\377\377\377\13\377\377\377\22\377\377\377\34\377\377"
+ "\377\35\377\377\377\33\377\377\377\30\377\377\377\26\377\377\377\25\377\377"
+ "\377\24\377\377\377\23\377\377\377\22\377\377\377\21\377\377\377\17\377\377"
+ "\377\16\377\377\377\15\377\377\377\12\377\377\377\10\377\377\377\5\377\377"
+ "\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\4\377\377\377"
+ "\5\377\377\377\6\377\377\377\10\377\377\377\11\377\377\377\10\377\377\377"
+ "\10\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377"
+ "\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\4"
+ "\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\4\377\377\377\3\377\377\377\4\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\7\377\377\377"
+ "\11\377\377\377\14\377\377\377\16\377\377\377\21\377\377\377\25\377\377\377"
+ "\24\377\377\377\22\377\377\377\21\377\377\377\17\377\377\377\15\377\377\377"
+ "\13\377\377\377\13\377\377\377\16\377\377\377\20\377\377\377\23\377\377\377"
+ "\27\377\377\377\26\377\377\377\23\377\377\377\21\377\377\377\16\377\377\377"
+ "\14\377\377\377\13\377\377\377\13\377\377\377\12\377\377\377\12\377\377\377"
+ "\14\377\377\377\15\377\377\377\17\377\377\377\22\377\377\377\25\377\377\377"
+ "\30\377\377\377\24\377\377\377\15\377\377\377\7\377\377\377\5\377\377\377"
+ "\14\377\377\377\25\377\377\377\37\377\377\377\36\377\377\377\33\377\377\377"
+ "\31\377\377\377\27\377\377\377\26\377\377\377\25\377\377\377\24\377\377\377"
+ "\23\377\377\377\22\377\377\377\20\377\377\377\16\377\377\377\15\377\377\377"
+ "\11\377\377\377\6\377\377\377\4\377\377\377\2\377\377\377\2\377\377\377\3"
+ "\377\377\377\4\377\377\377\5\377\377\377\7\377\377\377\10\377\377\377\11"
+ "\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377"
+ "\11\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377"
+ "\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4"
+ "\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\1\377\377\377\2\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377"
+ "\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4"
+ "\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377\10\377\377\377\12"
+ "\377\377\377\14\377\377\377\17\377\377\377\22\377\377\377\26\377\377\377"
+ "\26\377\377\377\24\377\377\377\22\377\377\377\20\377\377\377\16\377\377\377"
+ "\14\377\377\377\15\377\377\377\17\377\377\377\23\377\377\377\27\377\377\377"
+ "\32\377\377\377\27\377\377\377\23\377\377\377\20\377\377\377\15\377\377\377"
+ "\15\377\377\377\13\377\377\377\12\377\377\377\12\377\377\377\14\377\377\377"
+ "\15\377\377\377\17\377\377\377\22\377\377\377\25\377\377\377\31\377\377\377"
+ "\25\377\377\377\15\377\377\377\10\377\377\377\7\377\377\377\16\377\377\377"
+ "\30\377\377\377\"\377\377\377\37\377\377\377\35\377\377\377\32\377\377\377"
+ "\31\377\377\377\30\377\377\377\26\377\377\377\25\377\377\377\23\377\377\377"
+ "\22\377\377\377\20\377\377\377\17\377\377\377\13\377\377\377\7\377\377\377"
+ "\5\377\377\377\3\377\377\377\1\377\377\377\3\377\377\377\4\377\377\377\6"
+ "\377\377\377\7\377\377\377\11\377\377\377\13\377\377\377\12\377\377\377\12"
+ "\377\377\377\12\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377"
+ "\11\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377"
+ "\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5\377"
+ "\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377"
+ "\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\10\377\377\377"
+ "\13\377\377\377\15\377\377\377\20\377\377\377\24\377\377\377\30\377\377\377"
+ "\30\377\377\377\26\377\377\377\24\377\377\377\21\377\377\377\16\377\377\377"
+ "\14\377\377\377\17\377\377\377\22\377\377\377\26\377\377\377\31\377\377\377"
+ "\33\377\377\377\27\377\377\377\23\377\377\377\20\377\377\377\16\377\377\377"
+ "\14\377\377\377\13\377\377\377\12\377\377\377\14\377\377\377\16\377\377\377"
+ "\20\377\377\377\23\377\377\377\27\377\377\377\33\377\377\377\30\377\377\377"
+ "\17\377\377\377\10\377\377\377\10\377\377\377\20\377\377\377\33\377\377\377"
+ "$\377\377\377!\377\377\377\36\377\377\377\33\377\377\377\31\377\377\377\30"
+ "\377\377\377\27\377\377\377\26\377\377\377\24\377\377\377\22\377\377\377"
+ "\20\377\377\377\15\377\377\377\11\377\377\377\7\377\377\377\4\377\377\377"
+ "\2\377\377\377\3\377\377\377\5\377\377\377\6\377\377\377\10\377\377\377\12"
+ "\377\377\377\14\377\377\377\13\377\377\377\13\377\377\377\13\377\377\377"
+ "\13\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377\11\377\377\377"
+ "\10\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\4"
+ "\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5"
+ "\377\377\377\5\377\377\377\6\377\377\377\5\377\377\377\6\377\377\377\6\377"
+ "\377\377\5\377\377\377\6\377\377\377\5\377\377\377\7\377\377\377\11\377\377"
+ "\377\13\377\377\377\16\377\377\377\22\377\377\377\26\377\377\377\32\377\377"
+ "\377\32\377\377\377\30\377\377\377\25\377\377\377\22\377\377\377\17\377\377"
+ "\377\15\377\377\377\20\377\377\377\24\377\377\377\30\377\377\377\35\377\377"
+ "\377\33\377\377\377\27\377\377\377\23\377\377\377\17\377\377\377\15\377\377"
+ "\377\15\377\377\377\14\377\377\377\15\377\377\377\17\377\377\377\21\377\377"
+ "\377\24\377\377\377\27\377\377\377\34\377\377\377\31\377\377\377\20\377\377"
+ "\377\10\377\377\377\11\377\377\377\22\377\377\377\37\377\377\377%\377\377"
+ "\377!\377\377\377\36\377\377\377\34\377\377\377\33\377\377\377\32\377\377"
+ "\377\31\377\377\377\26\377\377\377\24\377\377\377\23\377\377\377\21\377\377"
+ "\377\14\377\377\377\10\377\377\377\5\377\377\377\2\377\377\377\3\377\377"
+ "\377\5\377\377\377\6\377\377\377\11\377\377\377\13\377\377\377\14\377\377"
+ "\377\14\377\377\377\14\377\377\377\13\377\377\377\14\377\377\377\14\377\377"
+ "\377\13\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377\7\377\377"
+ "\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377"
+ "\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4"
+ "\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377"
+ "\377\377\6\377\377\377\6\377\377\377\7\377\377\377\6\377\377\377\6\377\377"
+ "\377\6\377\377\377\6\377\377\377\7\377\377\377\6\377\377\377\7\377\377\377"
+ "\11\377\377\377\14\377\377\377\17\377\377\377\23\377\377\377\27\377\377\377"
+ "\35\377\377\377\35\377\377\377\32\377\377\377\27\377\377\377\24\377\377\377"
+ "\20\377\377\377\20\377\377\377\23\377\377\377\30\377\377\377\34\377\377\377"
+ "\40\377\377\377\33\377\377\377\26\377\377\377\22\377\377\377\20\377\377\377"
+ "\16\377\377\377\15\377\377\377\15\377\377\377\17\377\377\377\21\377\377\377"
+ "\24\377\377\377\30\377\377\377\34\377\377\377\33\377\377\377\20\377\377\377"
+ "\10\377\377\377\12\377\377\377\25\377\377\377#\377\377\377&\377\377\377\""
+ "\377\377\377\37\377\377\377\35\377\377\377\34\377\377\377\32\377\377\377"
+ "\31\377\377\377\27\377\377\377\25\377\377\377\23\377\377\377\16\377\377\377"
+ "\11\377\377\377\6\377\377\377\3\377\377\377\3\377\377\377\5\377\377\377\10"
+ "\377\377\377\11\377\377\377\13\377\377\377\16\377\377\377\16\377\377\377"
+ "\15\377\377\377\15\377\377\377\15\377\377\377\14\377\377\377\14\377\377\377"
+ "\14\377\377\377\12\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377"
+ "\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\4\377\377\377\4"
+ "\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377"
+ "\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377"
+ "\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6\377\377"
+ "\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377"
+ "\10\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\7"
+ "\377\377\377\11\377\377\377\15\377\377\377\20\377\377\377\24\377\377\377"
+ "\31\377\377\377\37\377\377\377\40\377\377\377\34\377\377\377\31\377\377\377"
+ "\24\377\377\377\20\377\377\377\21\377\377\377\26\377\377\377\33\377\377\377"
+ "!\377\377\377!\377\377\377\33\377\377\377\26\377\377\377\21\377\377\377\20"
+ "\377\377\377\16\377\377\377\15\377\377\377\17\377\377\377\21\377\377\377"
+ "\24\377\377\377\30\377\377\377\35\377\377\377\34\377\377\377\21\377\377\377"
+ "\11\377\377\377\13\377\377\377\27\377\377\377'\377\377\377&\377\377\377#"
+ "\377\377\377\37\377\377\377\36\377\377\377\34\377\377\377\33\377\377\377"
+ "\31\377\377\377\27\377\377\377\25\377\377\377\22\377\377\377\14\377\377\377"
+ "\7\377\377\377\4\377\377\377\2\377\377\377\5\377\377\377\10\377\377\377\12"
+ "\377\377\377\15\377\377\377\17\377\377\377\17\377\377\377\17\377\377\377"
+ "\16\377\377\377\16\377\377\377\16\377\377\377\15\377\377\377\14\377\377\377"
+ "\13\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377\7\377\377\377"
+ "\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5"
+ "\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377"
+ "\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377"
+ "\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377"
+ "\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6"
+ "\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\10"
+ "\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377"
+ "\10\377\377\377\10\377\377\377\10\377\377\377\12\377\377\377\15\377\377\377"
+ "\21\377\377\377\25\377\377\377\33\377\377\377\"\377\377\377\"\377\377\377"
+ "\36\377\377\377\32\377\377\377\26\377\377\377\21\377\377\377\24\377\377\377"
+ "\31\377\377\377\37\377\377\377&\377\377\377\40\377\377\377\32\377\377\377"
+ "\24\377\377\377\21\377\377\377\17\377\377\377\16\377\377\377\17\377\377\377"
+ "\21\377\377\377\24\377\377\377\31\377\377\377\36\377\377\377\36\377\377\377"
+ "\22\377\377\377\11\377\377\377\15\377\377\377\33\377\377\377,\377\377\377"
+ "'\377\377\377#\377\377\377\40\377\377\377\37\377\377\377\35\377\377\377\33"
+ "\377\377\377\31\377\377\377\27\377\377\377\25\377\377\377\17\377\377\377"
+ "\12\377\377\377\6\377\377\377\2\377\377\377\5\377\377\377\10\377\377\377"
+ "\13\377\377\377\16\377\377\377\21\377\377\377\20\377\377\377\20\377\377\377"
+ "\20\377\377\377\17\377\377\377\17\377\377\377\17\377\377\377\15\377\377\377"
+ "\14\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377"
+ "\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\5"
+ "\377\377\377\5\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377"
+ "\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377"
+ "\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377"
+ "\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\7"
+ "\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\11"
+ "\377\377\377\11\377\377\377\11\377\377\377\12\377\377\377\11\377\377\377"
+ "\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377"
+ "\12\377\377\377\15\377\377\377\21\377\377\377\26\377\377\377\35\377\377\377"
+ "%\377\377\377&\377\377\377\"\377\377\377\35\377\377\377\27\377\377\377\23"
+ "\377\377\377\27\377\377\377\35\377\377\377#\377\377\377&\377\377\377\37\377"
+ "\377\377\30\377\377\377\23\377\377\377\21\377\377\377\17\377\377\377\17\377"
+ "\377\377\22\377\377\377\25\377\377\377\31\377\377\377\37\377\377\377!\377"
+ "\377\377\23\377\377\377\11\377\377\377\17\377\377\377\37\377\377\377-\377"
+ "\377\377(\377\377\377$\377\377\377!\377\377\377\37\377\377\377\36\377\377"
+ "\377\34\377\377\377\31\377\377\377\27\377\377\377\22\377\377\377\14\377\377"
+ "\377\7\377\377\377\4\377\377\377\6\377\377\377\11\377\377\377\14\377\377"
+ "\377\20\377\377\377\22\377\377\377\22\377\377\377\22\377\377\377\21\377\377"
+ "\377\21\377\377\377\21\377\377\377\17\377\377\377\16\377\377\377\14\377\377"
+ "\377\13\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377\7\377\377"
+ "\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377"
+ "\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\5"
+ "\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377"
+ "\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4"
+ "\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\7\377"
+ "\377\377\7\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\11\377"
+ "\377\377\11\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377\13\377"
+ "\377\377\13\377\377\377\13\377\377\377\12\377\377\377\13\377\377\377\12\377"
+ "\377\377\12\377\377\377\12\377\377\377\15\377\377\377\22\377\377\377\30\377"
+ "\377\377\37\377\377\377(\377\377\377*\377\377\377$\377\377\377\37\377\377"
+ "\377\30\377\377\377\25\377\377\377\32\377\377\377\40\377\377\377(\377\377"
+ "\377%\377\377\377\35\377\377\377\26\377\377\377\23\377\377\377\21\377\377"
+ "\377\17\377\377\377\22\377\377\377\25\377\377\377\32\377\377\377\40\377\377"
+ "\377#\377\377\377\24\377\377\377\11\377\377\377\21\377\377\377#\377\377\377"
+ ".\377\377\377)\377\377\377$\377\377\377\"\377\377\377\40\377\377\377\36\377"
+ "\377\377\34\377\377\377\31\377\377\377\26\377\377\377\16\377\377\377\10\377"
+ "\377\377\4\377\377\377\5\377\377\377\11\377\377\377\15\377\377\377\22\377"
+ "\377\377\24\377\377\377\24\377\377\377\23\377\377\377\23\377\377\377\23\377"
+ "\377\377\22\377\377\377\21\377\377\377\17\377\377\377\16\377\377\377\14\377"
+ "\377\377\13\377\377\377\11\377\377\377\10\377\377\377\7\377\377\377\10\377"
+ "\377\377\10\377\377\377\7\377\377\377\10\377\377\377\7\377\377\377\7\377"
+ "\377\377\7\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377"
+ "\377\6\377\377\377\6\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4"
+ "\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377"
+ "\377\377\7\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\11\377"
+ "\377\377\11\377\377\377\12\377\377\377\13\377\377\377\13\377\377\377\13\377"
+ "\377\377\14\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377\14\377"
+ "\377\377\14\377\377\377\13\377\377\377\14\377\377\377\13\377\377\377\16\377"
+ "\377\377\23\377\377\377\31\377\377\377!\377\377\377,\377\377\377.\377\377"
+ "\377'\377\377\377\40\377\377\377\31\377\377\377\27\377\377\377\35\377\377"
+ "\377%\377\377\377,\377\377\377#\377\377\377\33\377\377\377\25\377\377\377"
+ "\22\377\377\377\20\377\377\377\22\377\377\377\25\377\377\377\32\377\377\377"
+ "!\377\377\377&\377\377\377\25\377\377\377\11\377\377\377\24\377\377\377)"
+ "\377\377\3770\377\377\377*\377\377\377&\377\377\377#\377\377\377!\377\377"
+ "\377\37\377\377\377\34\377\377\377\31\377\377\377\21\377\377\377\12\377\377"
+ "\377\5\377\377\377\5\377\377\377\11\377\377\377\16\377\377\377\23\377\377"
+ "\377\26\377\377\377\26\377\377\377\25\377\377\377\25\377\377\377\24\377\377"
+ "\377\24\377\377\377\22\377\377\377\20\377\377\377\16\377\377\377\15\377\377"
+ "\377\13\377\377\377\12\377\377\377\11\377\377\377\11\377\377\377\11\377\377"
+ "\377\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\10\377\377"
+ "\377\10\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\7\377\377"
+ "\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377"
+ "\377\377\6\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\11\377"
+ "\377\377\12\377\377\377\12\377\377\377\12\377\377\377\13\377\377\377\14\377"
+ "\377\377\14\377\377\377\15\377\377\377\15\377\377\377\15\377\377\377\16\377"
+ "\377\377\16\377\377\377\16\377\377\377\15\377\377\377\16\377\377\377\15\377"
+ "\377\377\14\377\377\377\16\377\377\377\24\377\377\377\33\377\377\377$\377"
+ "\377\377/\377\377\3771\377\377\377)\377\377\377!\377\377\377\31\377\377\377"
+ "\32\377\377\377!\377\377\377*\377\377\377*\377\377\377!\377\377\377\30\377"
+ "\377\377\24\377\377\377\22\377\377\377\22\377\377\377\26\377\377\377\33\377"
+ "\377\377\"\377\377\377*\377\377\377\26\377\377\377\11\377\377\377\30\377"
+ "\377\3770\377\377\3771\377\377\377+\377\377\377'\377\377\377%\377\377\377"
+ "\"\377\377\377\37\377\377\377\34\377\377\377\26\377\377\377\15\377\377\377"
+ "\7\377\377\377\5\377\377\377\11\377\377\377\16\377\377\377\24\377\377\377"
+ "\27\377\377\377\27\377\377\377\27\377\377\377\30\377\377\377\27\377\377\377"
+ "\26\377\377\377\23\377\377\377\21\377\377\377\17\377\377\377\16\377\377\377"
+ "\14\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377"
+ "\12\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377\11\377\377\377"
+ "\12\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377"
+ "\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5"
+ "\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5"
+ "\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\11"
+ "\377\377\377\12\377\377\377\13\377\377\377\13\377\377\377\14\377\377\377"
+ "\14\377\377\377\15\377\377\377\16\377\377\377\16\377\377\377\16\377\377\377"
+ "\17\377\377\377\17\377\377\377\20\377\377\377\17\377\377\377\20\377\377\377"
+ "\17\377\377\377\16\377\377\377\16\377\377\377\16\377\377\377\25\377\377\377"
+ "\34\377\377\377%\377\377\3771\377\377\3774\377\377\377+\377\377\377\"\377"
+ "\377\377\31\377\377\377\35\377\377\377&\377\377\3771\377\377\377)\377\377"
+ "\377\36\377\377\377\27\377\377\377\24\377\377\377\22\377\377\377\26\377\377"
+ "\377\33\377\377\377#\377\377\377-\377\377\377\30\377\377\377\11\377\377\377"
+ "\34\377\377\3779\377\377\3772\377\377\377,\377\377\377)\377\377\377&\377"
+ "\377\377#\377\377\377\37\377\377\377\33\377\377\377\20\377\377\377\11\377"
+ "\377\377\4\377\377\377\11\377\377\377\17\377\377\377\25\377\377\377\31\377"
+ "\377\377\31\377\377\377\31\377\377\377\31\377\377\377\31\377\377\377\27\377"
+ "\377\377\24\377\377\377\22\377\377\377\20\377\377\377\16\377\377\377\15\377"
+ "\377\377\14\377\377\377\13\377\377\377\14\377\377\377\14\377\377\377\13\377"
+ "\377\377\14\377\377\377\13\377\377\377\13\377\377\377\13\377\377\377\13\377"
+ "\377\377\13\377\377\377\12\377\377\377\11\377\377\377\11\377\377\377\10\377"
+ "\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377"
+ "\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4"
+ "\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\7\377"
+ "\377\377\10\377\377\377\11\377\377\377\12\377\377\377\13\377\377\377\14\377"
+ "\377\377\15\377\377\377\15\377\377\377\17\377\377\377\17\377\377\377\20\377"
+ "\377\377\20\377\377\377\20\377\377\377\22\377\377\377\22\377\377\377\22\377"
+ "\377\377\21\377\377\377\22\377\377\377\21\377\377\377\20\377\377\377\17\377"
+ "\377\377\24\377\377\377\34\377\377\377&\377\377\3773\377\377\3777\377\377"
+ "\377-\377\377\377#\377\377\377\31\377\377\377\"\377\377\377,\377\377\377"
+ "2\377\377\377&\377\377\377\33\377\377\377\27\377\377\377\24\377\377\377\26"
+ "\377\377\377\34\377\377\377$\377\377\377/\377\377\377\31\377\377\377\12\377"
+ "\377\377!\377\377\377<\377\377\3774\377\377\377-\377\377\377*\377\377\377"
+ "'\377\377\377#\377\377\377\37\377\377\377\25\377\377\377\13\377\377\377\5"
+ "\377\377\377\11\377\377\377\17\377\377\377\26\377\377\377\32\377\377\377"
+ "\33\377\377\377\33\377\377\377\33\377\377\377\33\377\377\377\30\377\377\377"
+ "\26\377\377\377\23\377\377\377\21\377\377\377\17\377\377\377\16\377\377\377"
+ "\15\377\377\377\16\377\377\377\15\377\377\377\16\377\377\377\15\377\377\377"
+ "\15\377\377\377\15\377\377\377\15\377\377\377\15\377\377\377\14\377\377\377"
+ "\13\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377\11\377\377\377"
+ "\10\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377"
+ "\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4"
+ "\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377"
+ "\377\377\7\377\377\377\10\377\377\377\11\377\377\377\12\377\377\377\13\377"
+ "\377\377\14\377\377\377\15\377\377\377\16\377\377\377\17\377\377\377\20\377"
+ "\377\377\20\377\377\377\21\377\377\377\21\377\377\377\23\377\377\377\23\377"
+ "\377\377\24\377\377\377\24\377\377\377\24\377\377\377\23\377\377\377\23\377"
+ "\377\377\22\377\377\377\21\377\377\377\24\377\377\377\34\377\377\377'\377"
+ "\377\3776\377\377\377;\377\377\377/\377\377\377$\377\377\377\35\377\377\377"
+ "'\377\377\3774\377\377\3770\377\377\377#\377\377\377\32\377\377\377\26\377"
+ "\377\377\26\377\377\377\34\377\377\377&\377\377\3772\377\377\377\33\377\377"
+ "\377\14\377\377\377(\377\377\377>\377\377\3775\377\377\377/\377\377\377,"
+ "\377\377\377(\377\377\377#\377\377\377\33\377\377\377\17\377\377\377\6\377"
+ "\377\377\11\377\377\377\20\377\377\377\30\377\377\377\34\377\377\377\35\377"
+ "\377\377\35\377\377\377\35\377\377\377\33\377\377\377\31\377\377\377\26\377"
+ "\377\377\24\377\377\377\22\377\377\377\17\377\377\377\17\377\377\377\20\377"
+ "\377\377\17\377\377\377\20\377\377\377\17\377\377\377\20\377\377\377\17\377"
+ "\377\377\17\377\377\377\16\377\377\377\16\377\377\377\15\377\377\377\14\377"
+ "\377\377\13\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377\11\377"
+ "\377\377\10\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377\6\377"
+ "\377\377\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377"
+ "\377\377\6\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\11\377"
+ "\377\377\12\377\377\377\13\377\377\377\14\377\377\377\15\377\377\377\17\377"
+ "\377\377\20\377\377\377\22\377\377\377\22\377\377\377\23\377\377\377\24\377"
+ "\377\377\25\377\377\377\25\377\377\377\26\377\377\377\27\377\377\377\30\377"
+ "\377\377\27\377\377\377\26\377\377\377\24\377\377\377\23\377\377\377\23\377"
+ "\377\377\34\377\377\377(\377\377\3779\377\377\377@\377\377\3772\377\377\377"
+ "$\377\377\377\"\377\377\377.\377\377\377=\377\377\377-\377\377\377\36\377"
+ "\377\377\31\377\377\377\26\377\377\377\35\377\377\377'\377\377\3775\377\377"
+ "\377\35\377\377\377\17\377\377\3772\377\377\377A\377\377\3776\377\377\377"
+ "2\377\377\377.\377\377\377(\377\377\377#\377\377\377\23\377\377\377\11\377"
+ "\377\377\11\377\377\377\21\377\377\377\32\377\377\377\37\377\377\377\37\377"
+ "\377\377\37\377\377\377\37\377\377\377\34\377\377\377\31\377\377\377\26\377"
+ "\377\377\24\377\377\377\22\377\377\377\21\377\377\377\22\377\377\377\22\377"
+ "\377\377\22\377\377\377\22\377\377\377\22\377\377\377\21\377\377\377\22\377"
+ "\377\377\21\377\377\377\20\377\377\377\17\377\377\377\16\377\377\377\15\377"
+ "\377\377\15\377\377\377\13\377\377\377\13\377\377\377\13\377\377\377\12\377"
+ "\377\377\11\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\7\377"
+ "\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377"
+ "\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5"
+ "\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\7\377"
+ "\377\377\10\377\377\377\11\377\377\377\12\377\377\377\13\377\377\377\14\377"
+ "\377\377\16\377\377\377\17\377\377\377\21\377\377\377\22\377\377\377\24\377"
+ "\377\377\25\377\377\377\26\377\377\377\27\377\377\377\30\377\377\377\30\377"
+ "\377\377\32\377\377\377\32\377\377\377\31\377\377\377\30\377\377\377\27\377"
+ "\377\377\25\377\377\377\23\377\377\377\34\377\377\377)\377\377\377<\377\377"
+ "\377E\377\377\3775\377\377\377%\377\377\377'\377\377\3777\377\377\377;\377"
+ "\377\377(\377\377\377\35\377\377\377\31\377\377\377\36\377\377\377(\377\377"
+ "\3778\377\377\377\40\377\377\377\22\377\377\377>\377\377\377C\377\377\377"
+ "9\377\377\3774\377\377\377.\377\377\377(\377\377\377\32\377\377\377\14\377"
+ "\377\377\10\377\377\377\21\377\377\377\34\377\377\377!\377\377\377!\377\377"
+ "\377\"\377\377\377!\377\377\377\35\377\377\377\32\377\377\377\27\377\377"
+ "\377\24\377\377\377\23\377\377\377\23\377\377\377\24\377\377\377\25\377\377"
+ "\377\24\377\377\377\25\377\377\377\24\377\377\377\25\377\377\377\23\377\377"
+ "\377\23\377\377\377\21\377\377\377\20\377\377\377\20\377\377\377\16\377\377"
+ "\377\16\377\377\377\15\377\377\377\14\377\377\377\13\377\377\377\13\377\377"
+ "\377\12\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377\7\377\377"
+ "\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377"
+ "\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5"
+ "\377\377\377\6\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6\377"
+ "\377\377\7\377\377\377\10\377\377\377\11\377\377\377\11\377\377\377\12\377"
+ "\377\377\13\377\377\377\14\377\377\377\15\377\377\377\17\377\377\377\21\377"
+ "\377\377\23\377\377\377\25\377\377\377\30\377\377\377\30\377\377\377\32\377"
+ "\377\377\33\377\377\377\33\377\377\377\34\377\377\377\34\377\377\377\35\377"
+ "\377\377\33\377\377\377\32\377\377\377\30\377\377\377\26\377\377\377\33\377"
+ "\377\377*\377\377\377?\377\377\377L\377\377\3778\377\377\377%\377\377\377"
+ "/\377\377\377D\377\377\3777\377\377\377#\377\377\377\35\377\377\377\36\377"
+ "\377\377(\377\377\377;\377\377\377#\377\377\377\27\377\377\377O\377\377\377"
+ "F\377\377\377<\377\377\3776\377\377\377/\377\377\377%\377\377\377\20\377"
+ "\377\377\7\377\377\377\22\377\377\377\37\377\377\377$\377\377\377%\377\377"
+ "\377%\377\377\377#\377\377\377\36\377\377\377\32\377\377\377\27\377\377\377"
+ "\24\377\377\377\25\377\377\377\26\377\377\377\27\377\377\377\27\377\377\377"
+ "\30\377\377\377\30\377\377\377\30\377\377\377\26\377\377\377\25\377\377\377"
+ "\24\377\377\377\23\377\377\377\22\377\377\377\20\377\377\377\20\377\377\377"
+ "\17\377\377\377\16\377\377\377\15\377\377\377\14\377\377\377\13\377\377\377"
+ "\13\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377\7\377\377\377"
+ "\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\4"
+ "\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6"
+ "\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\7\377"
+ "\377\377\10\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\10\377"
+ "\377\377\11\377\377\377\12\377\377\377\14\377\377\377\15\377\377\377\16\377"
+ "\377\377\17\377\377\377\21\377\377\377\23\377\377\377\25\377\377\377\30\377"
+ "\377\377\32\377\377\377\35\377\377\377\35\377\377\377\36\377\377\377\36\377"
+ "\377\377\37\377\377\377\37\377\377\377\37\377\377\377\35\377\377\377\33\377"
+ "\377\377\31\377\377\377\32\377\377\377*\377\377\377C\377\377\377S\377\377"
+ "\377<\377\377\377&\377\377\377:\377\377\377L\377\377\3771\377\377\377\"\377"
+ "\377\377\36\377\377\377*\377\377\377?\377\377\377&\377\377\377\36\377\377"
+ "\377Z\377\377\377H\377\377\377?\377\377\3778\377\377\377/\377\377\377\30"
+ "\377\377\377\10\377\377\377\22\377\377\377\"\377\377\377(\377\377\377(\377"
+ "\377\377(\377\377\377$\377\377\377\37\377\377\377\33\377\377\377\27\377\377"
+ "\377\27\377\377\377\30\377\377\377\31\377\377\377\32\377\377\377\33\377\377"
+ "\377\33\377\377\377\33\377\377\377\32\377\377\377\30\377\377\377\27\377\377"
+ "\377\25\377\377\377\24\377\377\377\23\377\377\377\22\377\377\377\21\377\377"
+ "\377\20\377\377\377\17\377\377\377\16\377\377\377\15\377\377\377\14\377\377"
+ "\377\13\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377\10\377\377"
+ "\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4"
+ "\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377"
+ "\377\377\6\377\377\377\7\377\377\377\7\377\377\377\10\377\377\377\10\377"
+ "\377\377\10\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\12\377"
+ "\377\377\11\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377\13\377"
+ "\377\377\13\377\377\377\14\377\377\377\16\377\377\377\17\377\377\377\21\377"
+ "\377\377\23\377\377\377\25\377\377\377\30\377\377\377\32\377\377\377\35\377"
+ "\377\377\40\377\377\377\40\377\377\377!\377\377\377\"\377\377\377\"\377\377"
+ "\377#\377\377\377\"\377\377\377\40\377\377\377\35\377\377\377\32\377\377"
+ "\377*\377\377\377G\377\377\377]\377\377\377@\377\377\377/\377\377\377J\377"
+ "\377\377G\377\377\377*\377\377\377!\377\377\377+\377\377\377C\377\377\377"
+ "+\377\377\377)\377\377\377`\377\377\377L\377\377\377C\377\377\3778\377\377"
+ "\377#\377\377\377\13\377\377\377\23\377\377\377&\377\377\377,\377\377\377"
+ "-\377\377\377,\377\377\377&\377\377\377\40\377\377\377\33\377\377\377\31"
+ "\377\377\377\33\377\377\377\34\377\377\377\35\377\377\377\36\377\377\377"
+ "\36\377\377\377\36\377\377\377\34\377\377\377\33\377\377\377\32\377\377\377"
+ "\31\377\377\377\27\377\377\377\25\377\377\377\24\377\377\377\23\377\377\377"
+ "\22\377\377\377\21\377\377\377\17\377\377\377\16\377\377\377\15\377\377\377"
+ "\14\377\377\377\13\377\377\377\12\377\377\377\12\377\377\377\11\377\377\377"
+ "\10\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5"
+ "\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377"
+ "\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6"
+ "\377\377\377\7\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\11"
+ "\377\377\377\11\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377"
+ "\13\377\377\377\13\377\377\377\14\377\377\377\14\377\377\377\15\377\377\377"
+ "\14\377\377\377\15\377\377\377\15\377\377\377\15\377\377\377\15\377\377\377"
+ "\15\377\377\377\16\377\377\377\21\377\377\377\22\377\377\377\25\377\377\377"
+ "\27\377\377\377\31\377\377\377\34\377\377\377\37\377\377\377#\377\377\377"
+ "$\377\377\377%\377\377\377&\377\377\377'\377\377\377'\377\377\377%\377\377"
+ "\377\"\377\377\377\37\377\377\377*\377\377\377K\377\377\377h\377\377\377"
+ "D\377\377\377;\377\377\377b\377\377\377=\377\377\377)\377\377\377-\377\377"
+ "\377G\377\377\3770\377\377\3778\377\377\377e\377\377\377R\377\377\377F\377"
+ "\377\3777\377\377\377\22\377\377\377\23\377\377\377+\377\377\3772\377\377"
+ "\3773\377\377\377/\377\377\377'\377\377\377\40\377\377\377\34\377\377\377"
+ "\36\377\377\377\37\377\377\377!\377\377\377\"\377\377\377\"\377\377\377!"
+ "\377\377\377\37\377\377\377\36\377\377\377\34\377\377\377\33\377\377\377"
+ "\32\377\377\377\31\377\377\377\27\377\377\377\26\377\377\377\24\377\377\377"
+ "\23\377\377\377\21\377\377\377\20\377\377\377\17\377\377\377\15\377\377\377"
+ "\14\377\377\377\13\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377"
+ "\10\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377"
+ "\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377"
+ "\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6"
+ "\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\11"
+ "\377\377\377\12\377\377\377\12\377\377\377\13\377\377\377\13\377\377\377"
+ "\14\377\377\377\14\377\377\377\15\377\377\377\15\377\377\377\16\377\377\377"
+ "\16\377\377\377\17\377\377\377\17\377\377\377\20\377\377\377\20\377\377\377"
+ "\20\377\377\377\21\377\377\377\21\377\377\377\21\377\377\377\21\377\377\377"
+ "\22\377\377\377\24\377\377\377\26\377\377\377\30\377\377\377\33\377\377\377"
+ "\36\377\377\377\"\377\377\377&\377\377\377)\377\377\377*\377\377\377+\377"
+ "\377\377,\377\377\377-\377\377\377)\377\377\377%\377\377\377(\377\377\377"
+ "O\377\377\377w\377\377\377H\377\377\377O\377\377\377a\377\377\3774\377\377"
+ "\377-\377\377\377L\377\377\3777\377\377\377Q\377\377\377k\377\377\377X\377"
+ "\377\377F\377\377\377\36\377\377\377\22\377\377\3771\377\377\3779\377\377"
+ "\377:\377\377\3772\377\377\377(\377\377\377!\377\377\377\"\377\377\377$\377"
+ "\377\377&\377\377\377'\377\377\377&\377\377\377$\377\377\377\"\377\377\377"
+ "!\377\377\377\37\377\377\377\36\377\377\377\34\377\377\377\33\377\377\377"
+ "\32\377\377\377\30\377\377\377\26\377\377\377\25\377\377\377\22\377\377\377"
+ "\21\377\377\377\20\377\377\377\16\377\377\377\15\377\377\377\15\377\377\377"
+ "\13\377\377\377\12\377\377\377\12\377\377\377\11\377\377\377\11\377\377\377"
+ "\10\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5"
+ "\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377"
+ "\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3"
+ "\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377"
+ "\377\377\6\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\10\377"
+ "\377\377\11\377\377\377\12\377\377\377\13\377\377\377\14\377\377\377\15\377"
+ "\377\377\16\377\377\377\17\377\377\377\17\377\377\377\20\377\377\377\21\377"
+ "\377\377\21\377\377\377\22\377\377\377\23\377\377\377\24\377\377\377\24\377"
+ "\377\377\25\377\377\377\24\377\377\377\25\377\377\377\26\377\377\377\26\377"
+ "\377\377\25\377\377\377\25\377\377\377\24\377\377\377\27\377\377\377\31\377"
+ "\377\377\34\377\377\377\40\377\377\377$\377\377\377*\377\377\3770\377\377"
+ "\3771\377\377\3773\377\377\3774\377\377\3773\377\377\377.\377\377\377'\377"
+ "\377\377S\377\377\377\213\377\377\377K\377\377\377o\377\377\377Q\377\377"
+ "\3771\377\377\377P\377\377\377@\377\377\377}\377\377\377r\377\377\377]\377"
+ "\377\3775\377\377\377\21\377\377\3779\377\377\377C\377\377\377C\377\377\377"
+ "4\377\377\377)\377\377\377'\377\377\377*\377\377\377,\377\377\377.\377\377"
+ "\377,\377\377\377)\377\377\377'\377\377\377$\377\377\377#\377\377\377!\377"
+ "\377\377\37\377\377\377\35\377\377\377\33\377\377\377\31\377\377\377\30\377"
+ "\377\377\26\377\377\377\25\377\377\377\23\377\377\377\22\377\377\377\20\377"
+ "\377\377\17\377\377\377\15\377\377\377\14\377\377\377\13\377\377\377\13\377"
+ "\377\377\12\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377\7\377"
+ "\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377"
+ "\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377"
+ "\377\377\5\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\7\377\377"
+ "\377\10\377\377\377\11\377\377\377\12\377\377\377\13\377\377\377\14\377\377"
+ "\377\14\377\377\377\16\377\377\377\17\377\377\377\20\377\377\377\21\377\377"
+ "\377\24\377\377\377\25\377\377\377\26\377\377\377\27\377\377\377\30\377\377"
+ "\377\31\377\377\377\31\377\377\377\32\377\377\377\33\377\377\377\33\377\377"
+ "\377\33\377\377\377\33\377\377\377\33\377\377\377\32\377\377\377\32\377\377"
+ "\377\31\377\377\377\32\377\377\377\36\377\377\377\"\377\377\377(\377\377"
+ "\377.\377\377\3777\377\377\377;\377\377\377=\377\377\377?\377\377\377;\377"
+ "\377\3773\377\377\377U\377\377\377\247\377\377\377M\377\377\377\230\377\377"
+ "\377E\377\377\377T\377\377\377M\377\377\377\265\377\377\377\177\377\377\377"
+ "^\377\377\377\20\377\377\377D\377\377\377Q\377\377\377I\377\377\3776\377"
+ "\377\377.\377\377\3773\377\377\3776\377\377\3777\377\377\3773\377\377\377"
+ "/\377\377\377,\377\377\377)\377\377\377'\377\377\377$\377\377\377!\377\377"
+ "\377\36\377\377\377\34\377\377\377\32\377\377\377\30\377\377\377\27\377\377"
+ "\377\25\377\377\377\24\377\377\377\23\377\377\377\21\377\377\377\20\377\377"
+ "\377\16\377\377\377\15\377\377\377\14\377\377\377\14\377\377\377\12\377\377"
+ "\377\12\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377\7\377\377"
+ "\377\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4"
+ "\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377"
+ "\377\377\7\377\377\377\10\377\377\377\11\377\377\377\12\377\377\377\12\377"
+ "\377\377\13\377\377\377\14\377\377\377\15\377\377\377\16\377\377\377\17\377"
+ "\377\377\21\377\377\377\22\377\377\377\24\377\377\377\26\377\377\377\27\377"
+ "\377\377\32\377\377\377\34\377\377\377\37\377\377\377!\377\377\377!\377\377"
+ "\377\"\377\377\377\"\377\377\377\"\377\377\377\"\377\377\377\"\377\377\377"
+ "\"\377\377\377\"\377\377\377!\377\377\377\40\377\377\377\37\377\377\377$"
+ "\377\377\377+\377\377\3773\377\377\377?\377\377\377I\377\377\377L\377\377"
+ "\377O\377\377\377E\377\377\377T\377\377\377\321\377\377\377w\377\377\377"
+ "z\377\377\377Z\377\377\377`\377\377\377\313\377\377\377\214\377\377\377$"
+ "\377\377\377U\377\377\377f\377\377\377N\377\377\3779\377\377\377?\377\377"
+ "\377D\377\377\377B\377\377\377<\377\377\3777\377\377\3773\377\377\377/\377"
+ "\377\377*\377\377\377&\377\377\377\"\377\377\377\37\377\377\377\35\377\377"
+ "\377\33\377\377\377\31\377\377\377\27\377\377\377\25\377\377\377\24\377\377"
+ "\377\23\377\377\377\22\377\377\377\21\377\377\377\17\377\377\377\16\377\377"
+ "\377\16\377\377\377\14\377\377\377\14\377\377\377\13\377\377\377\12\377\377"
+ "\377\11\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377\7\377\377"
+ "\377\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377"
+ "\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4\377\377"
+ "\377\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377"
+ "\6\377\377\377\7\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377"
+ "\11\377\377\377\12\377\377\377\13\377\377\377\14\377\377\377\15\377\377\377"
+ "\16\377\377\377\17\377\377\377\21\377\377\377\22\377\377\377\24\377\377\377"
+ "\25\377\377\377\30\377\377\377\31\377\377\377\34\377\377\377\36\377\377\377"
+ "\40\377\377\377#\377\377\377&\377\377\377)\377\377\377,\377\377\377-\377"
+ "\377\377-\377\377\377.\377\377\377.\377\377\377.\377\377\377-\377\377\377"
+ ",\377\377\377*\377\377\377.\377\377\3779\377\377\377I\377\377\377`\377\377"
+ "\377f\377\377\377g\377\377\377O\377\377\377\377\377\377\377\337\377\377\377"
+ "c\377\377\377\200\377\377\377\343\377\377\377j\377\377\377r\377\377\377\206"
+ "\377\377\377R\377\377\377U\377\377\377\\\377\377\377R\377\377\377I\377\377"
+ "\377B\377\377\377;\377\377\3773\377\377\377-\377\377\377(\377\377\377$\377"
+ "\377\377\40\377\377\377\35\377\377\377\33\377\377\377\31\377\377\377\27\377"
+ "\377\377\26\377\377\377\24\377\377\377\23\377\377\377\22\377\377\377\21\377"
+ "\377\377\21\377\377\377\20\377\377\377\16\377\377\377\15\377\377\377\15\377"
+ "\377\377\13\377\377\377\13\377\377\377\12\377\377\377\12\377\377\377\10\377"
+ "\377\377\10\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377\6\377"
+ "\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\4\377\377"
+ "\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377"
+ "\377\6\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\10\377\377\377"
+ "\11\377\377\377\11\377\377\377\12\377\377\377\13\377\377\377\14\377\377\377"
+ "\15\377\377\377\15\377\377\377\17\377\377\377\20\377\377\377\21\377\377\377"
+ "\23\377\377\377\24\377\377\377\26\377\377\377\30\377\377\377\31\377\377\377"
+ "\33\377\377\377\35\377\377\377\40\377\377\377\"\377\377\377%\377\377\377"
+ ")\377\377\377-\377\377\3772\377\377\3779\377\377\377@\377\377\377C\377\377"
+ "\377D\377\377\377E\377\377\377D\377\377\377B\377\377\377>\377\377\377V\377"
+ "\377\377\177\377\377\377\231\377\377\377\213\377\377\377\377\377\377\377"
+ "\365\377\377\377\301\377\377\377\377\377\377\377\253\377\377\377\235\377"
+ "\377\377\177\377\377\377\204\377\377\377n\377\377\377_\377\377\377M\377\377"
+ "\377?\377\377\3776\377\377\377.\377\377\377)\377\377\377$\377\377\377!\377"
+ "\377\377\36\377\377\377\34\377\377\377\32\377\377\377\30\377\377\377\26\377"
+ "\377\377\25\377\377\377\24\377\377\377\23\377\377\377\22\377\377\377\21\377"
+ "\377\377\20\377\377\377\17\377\377\377\17\377\377\377\15\377\377\377\14\377"
+ "\377\377\14\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377\11\377"
+ "\377\377\11\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\6\377\377"
+ "\377\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377"
+ "\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\7"
+ "\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\11\377\377\377\11"
+ "\377\377\377\12\377\377\377\13\377\377\377\14\377\377\377\14\377\377\377"
+ "\16\377\377\377\17\377\377\377\17\377\377\377\21\377\377\377\22\377\377\377"
+ "\23\377\377\377\24\377\377\377\26\377\377\377\27\377\377\377\31\377\377\377"
+ "\33\377\377\377\35\377\377\377\40\377\377\377#\377\377\377&\377\377\377+"
+ "\377\377\3770\377\377\3777\377\377\377@\377\377\377K\377\377\377[\377\377"
+ "\377q\377\377\377\207\377\377\377\212\377\377\377\205\377\377\377\254\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\376\377\377\377\335\377\377\377\231\377\377\377l\377\377\377R\377\377\377"
+ "B\377\377\3778\377\377\3770\377\377\377*\377\377\377&\377\377\377\"\377\377"
+ "\377\37\377\377\377\34\377\377\377\32\377\377\377\30\377\377\377\27\377\377"
+ "\377\25\377\377\377\24\377\377\377\23\377\377\377\22\377\377\377\21\377\377"
+ "\377\20\377\377\377\17\377\377\377\17\377\377\377\16\377\377\377\15\377\377"
+ "\377\14\377\377\377\13\377\377\377\13\377\377\377\12\377\377\377\11\377\377"
+ "\377\11\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\6\377\377"
+ "\377\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377"
+ "\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\7"
+ "\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377"
+ "\11\377\377\377\12\377\377\377\13\377\377\377\13\377\377\377\15\377\377\377"
+ "\15\377\377\377\16\377\377\377\17\377\377\377\20\377\377\377\22\377\377\377"
+ "\22\377\377\377\23\377\377\377\24\377\377\377\25\377\377\377\26\377\377\377"
+ "\27\377\377\377\30\377\377\377\32\377\377\377\33\377\377\377\35\377\377\377"
+ "\37\377\377\377!\377\377\377$\377\377\377'\377\377\377+\377\377\377/\377"
+ "\377\3774\377\377\377;\377\377\377C\377\377\377N\377\377\377^\377\377\377"
+ "v\377\377\377\235\377\377\377\353\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\261\377\377\377v\377\377\377Y\377\377\377G\377\377\377"
+ ";\377\377\3772\377\377\377,\377\377\377'\377\377\377#\377\377\377\40\377"
+ "\377\377\35\377\377\377\33\377\377\377\31\377\377\377\27\377\377\377\26\377"
+ "\377\377\25\377\377\377\23\377\377\377\22\377\377\377\21\377\377\377\21\377"
+ "\377\377\20\377\377\377\17\377\377\377\16\377\377\377\16\377\377\377\15\377"
+ "\377\377\15\377\377\377\14\377\377\377\13\377\377\377\12\377\377\377\12\377"
+ "\377\377\11\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\7\377"
+ "\377\377\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377"
+ "\377\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377"
+ "\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377"
+ "\7\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\12\377\377\377"
+ "\12\377\377\377\12\377\377\377\13\377\377\377\14\377\377\377\15\377\377\377"
+ "\16\377\377\377\17\377\377\377\20\377\377\377\22\377\377\377\22\377\377\377"
+ "\24\377\377\377\25\377\377\377\26\377\377\377\27\377\377\377\31\377\377\377"
+ "\32\377\377\377\33\377\377\377\35\377\377\377\37\377\377\377!\377\377\377"
+ "$\377\377\377'\377\377\377*\377\377\377.\377\377\3773\377\377\3779\377\377"
+ "\377>\377\377\377D\377\377\377K\377\377\377S\377\377\377]\377\377\377j\377"
+ "\377\377\225\377\377\377\377\377\377\377\363\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\332\377\377\377\320\377"
+ "\377\377\236\377\377\377h\377\377\377I\377\377\3776\377\377\377*\377\377"
+ "\377\"\377\377\377\35\377\377\377\32\377\377\377\31\377\377\377\27\377\377"
+ "\377\25\377\377\377\24\377\377\377\23\377\377\377\22\377\377\377\21\377\377"
+ "\377\20\377\377\377\20\377\377\377\17\377\377\377\16\377\377\377\16\377\377"
+ "\377\15\377\377\377\15\377\377\377\14\377\377\377\14\377\377\377\12\377\377"
+ "\377\12\377\377\377\12\377\377\377\10\377\377\377\10\377\377\377\10\377\377"
+ "\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377"
+ "\5\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377"
+ "\4\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6"
+ "\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377\11"
+ "\377\377\377\12\377\377\377\13\377\377\377\14\377\377\377\14\377\377\377"
+ "\16\377\377\377\17\377\377\377\17\377\377\377\21\377\377\377\22\377\377\377"
+ "\23\377\377\377\25\377\377\377\27\377\377\377\30\377\377\377\31\377\377\377"
+ "\33\377\377\377\34\377\377\377\35\377\377\377\37\377\377\377\40\377\377\377"
+ "\"\377\377\377#\377\377\377%\377\377\377'\377\377\377)\377\377\377,\377\377"
+ "\377/\377\377\3772\377\377\3775\377\377\377:\377\377\377J\377\377\377b\377"
+ "\377\377\207\377\377\377\217\377\377\377z\377\377\377\322\377\377\377\354"
+ "\377\377\377\352\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\271\377\377\377\220\377\377\377y\377\377\377m\377\377\377k\377\377\377"
+ "h\377\377\377c\377\377\377O\377\377\377?\377\377\3774\377\377\377+\377\377"
+ "\377$\377\377\377\37\377\377\377\33\377\377\377\30\377\377\377\25\377\377"
+ "\377\22\377\377\377\21\377\377\377\17\377\377\377\16\377\377\377\15\377\377"
+ "\377\15\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377\13\377\377"
+ "\377\12\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377\10\377\377"
+ "\377\7\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\5\377\377\377"
+ "\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377"
+ "\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6"
+ "\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377\12"
+ "\377\377\377\13\377\377\377\13\377\377\377\14\377\377\377\15\377\377\377"
+ "\16\377\377\377\17\377\377\377\20\377\377\377\21\377\377\377\21\377\377\377"
+ "\23\377\377\377\24\377\377\377\25\377\377\377\26\377\377\377\30\377\377\377"
+ "\31\377\377\377\31\377\377\377\32\377\377\377\33\377\377\377\34\377\377\377"
+ "\36\377\377\377\37\377\377\377\40\377\377\377\"\377\377\377#\377\377\377"
+ "%\377\377\377*\377\377\3771\377\377\377;\377\377\377H\377\377\377Z\377\377"
+ "\377b\377\377\377[\377\377\377Q\377\377\377r\377\377\377\332\377\377\377"
+ "\236\377\377\377o\377\377\377\223\377\377\377\305\377\377\377\377\377\377"
+ "\377\377\377\377\377\310\377\377\377\247\377\377\377p\377\377\377`\377\377"
+ "\377U\377\377\377L\377\377\377H\377\377\377H\377\377\377G\377\377\377E\377"
+ "\377\377C\377\377\377>\377\377\3774\377\377\377-\377\377\377'\377\377\377"
+ "\"\377\377\377\36\377\377\377\33\377\377\377\30\377\377\377\26\377\377\377"
+ "\24\377\377\377\22\377\377\377\20\377\377\377\17\377\377\377\16\377\377\377"
+ "\15\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377"
+ "\7\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5"
+ "\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377"
+ "\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4"
+ "\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6\377"
+ "\377\377\7\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\11\377"
+ "\377\377\11\377\377\377\13\377\377\377\13\377\377\377\14\377\377\377\15\377"
+ "\377\377\15\377\377\377\16\377\377\377\17\377\377\377\20\377\377\377\20\377"
+ "\377\377\22\377\377\377\22\377\377\377\24\377\377\377\25\377\377\377\26\377"
+ "\377\377\27\377\377\377\30\377\377\377\31\377\377\377\31\377\377\377\32\377"
+ "\377\377\33\377\377\377\35\377\377\377!\377\377\377%\377\377\377*\377\377"
+ "\3771\377\377\3779\377\377\377C\377\377\377J\377\377\377G\377\377\377B\377"
+ "\377\377=\377\377\377N\377\377\377i\377\377\377\314\377\377\377v\377\377"
+ "\377K\377\377\377u\377\377\377\36\377\377\377\224\377\377\377\260\377\377"
+ "\377\223\377\377\377\342\377\377\377\226\377\377\377\223\377\377\377]\377"
+ "\377\377Q\377\377\377H\377\377\377A\377\377\377<\377\377\3777\377\377\377"
+ "6\377\377\3776\377\377\3775\377\377\3775\377\377\3774\377\377\3773\377\377"
+ "\3771\377\377\377,\377\377\377'\377\377\377#\377\377\377\37\377\377\377\34"
+ "\377\377\377\32\377\377\377\27\377\377\377\25\377\377\377\23\377\377\377"
+ "\21\377\377\377\20\377\377\377\16\377\377\377\14\377\377\377\13\377\377\377"
+ "\12\377\377\377\12\377\377\377\11\377\377\377\7\377\377\377\7\377\377\377"
+ "\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4"
+ "\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377"
+ "\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377"
+ "\6\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377"
+ "\11\377\377\377\11\377\377\377\12\377\377\377\13\377\377\377\13\377\377\377"
+ "\14\377\377\377\15\377\377\377\15\377\377\377\16\377\377\377\17\377\377\377"
+ "\20\377\377\377\21\377\377\377\21\377\377\377\23\377\377\377\23\377\377\377"
+ "\25\377\377\377\25\377\377\377\26\377\377\377\30\377\377\377\33\377\377\377"
+ "\35\377\377\377!\377\377\377%\377\377\377)\377\377\377/\377\377\3776\377"
+ "\377\377;\377\377\377:\377\377\3777\377\377\3774\377\377\3770\377\377\377"
+ ";\377\377\377I\377\377\377n\377\377\377\272\377\377\377^\377\377\3778\377"
+ "\377\377H\377\377\377\223\377\377\377/\377\377\377v\377\377\377\216\377\377"
+ "\377\246\377\377\377\216\377\377\377\232\377\377\377x\377\377\377\201\377"
+ "\377\377Y\377\377\377F\377\377\377?\377\377\3779\377\377\3775\377\377\377"
+ "2\377\377\377.\377\377\377,\377\377\377+\377\377\377+\377\377\377+\377\377"
+ "\377*\377\377\377*\377\377\377)\377\377\377)\377\377\377(\377\377\377&\377"
+ "\377\377\"\377\377\377\37\377\377\377\34\377\377\377\32\377\377\377\27\377"
+ "\377\377\25\377\377\377\22\377\377\377\21\377\377\377\17\377\377\377\15\377"
+ "\377\377\14\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377\10\377"
+ "\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377"
+ "\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377"
+ "\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377"
+ "\377\6\377\377\377\7\377\377\377\7\377\377\377\10\377\377\377\10\377\377"
+ "\377\11\377\377\377\12\377\377\377\12\377\377\377\13\377\377\377\14\377\377"
+ "\377\14\377\377\377\14\377\377\377\16\377\377\377\16\377\377\377\17\377\377"
+ "\377\20\377\377\377\20\377\377\377\22\377\377\377\24\377\377\377\26\377\377"
+ "\377\30\377\377\377\33\377\377\377\35\377\377\377\40\377\377\377$\377\377"
+ "\377(\377\377\377-\377\377\3772\377\377\3771\377\377\377/\377\377\377-\377"
+ "\377\377+\377\377\377(\377\377\377/\377\377\3779\377\377\377F\377\377\377"
+ "m\377\377\377\246\377\377\377O\377\377\377-\377\377\3777\377\377\377N\377"
+ "\377\377J\377\377\3777\377\377\377b\377\377\377w\377\377\377\206\377\377"
+ "\377b\377\377\377\231\377\377\377s\377\377\377d\377\377\377r\377\377\377"
+ "S\377\377\377>\377\377\3778\377\377\3774\377\377\3770\377\377\377-\377\377"
+ "\377*\377\377\377(\377\377\377&\377\377\377$\377\377\377$\377\377\377$\377"
+ "\377\377$\377\377\377#\377\377\377#\377\377\377#\377\377\377\"\377\377\377"
+ "\"\377\377\377!\377\377\377!\377\377\377\36\377\377\377\33\377\377\377\30"
+ "\377\377\377\25\377\377\377\23\377\377\377\22\377\377\377\17\377\377\377"
+ "\16\377\377\377\15\377\377\377\14\377\377\377\13\377\377\377\11\377\377\377"
+ "\10\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5"
+ "\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377"
+ "\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\7"
+ "\377\377\377\7\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\11"
+ "\377\377\377\11\377\377\377\12\377\377\377\13\377\377\377\13\377\377\377"
+ "\14\377\377\377\15\377\377\377\16\377\377\377\17\377\377\377\21\377\377\377"
+ "\23\377\377\377\26\377\377\377\27\377\377\377\32\377\377\377\35\377\377\377"
+ "\40\377\377\377#\377\377\377&\377\377\377*\377\377\377*\377\377\377)\377"
+ "\377\377(\377\377\377&\377\377\377$\377\377\377\"\377\377\377(\377\377\377"
+ ".\377\377\3776\377\377\377H\377\377\377j\377\377\377\203\377\377\377C\377"
+ "\377\377%\377\377\377-\377\377\3775\377\377\377]\377\377\377\40\377\377\377"
+ ";\377\377\377T\377\377\377f\377\377\377k\377\377\377l\377\377\377Y\377\377"
+ "\377\221\377\377\377[\377\377\377U\377\377\377a\377\377\377N\377\377\377"
+ "<\377\377\3772\377\377\377/\377\377\377,\377\377\377)\377\377\377'\377\377"
+ "\377%\377\377\377#\377\377\377!\377\377\377\40\377\377\377\37\377\377\377"
+ "\37\377\377\377\37\377\377\377\37\377\377\377\36\377\377\377\36\377\377\377"
+ "\36\377\377\377\36\377\377\377\34\377\377\377\33\377\377\377\32\377\377\377"
+ "\31\377\377\377\30\377\377\377\26\377\377\377\24\377\377\377\21\377\377\377"
+ "\20\377\377\377\16\377\377\377\15\377\377\377\14\377\377\377\12\377\377\377"
+ "\11\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377"
+ "\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4"
+ "\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377"
+ "\377\377\6\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\10\377"
+ "\377\377\11\377\377\377\12\377\377\377\13\377\377\377\14\377\377\377\15\377"
+ "\377\377\16\377\377\377\20\377\377\377\22\377\377\377\23\377\377\377\26\377"
+ "\377\377\30\377\377\377\33\377\377\377\37\377\377\377!\377\377\377$\377\377"
+ "\377%\377\377\377$\377\377\377#\377\377\377\"\377\377\377!\377\377\377\37"
+ "\377\377\377\36\377\377\377\"\377\377\377'\377\377\377,\377\377\3774\377"
+ "\377\377I\377\377\377f\377\377\377k\377\377\377;\377\377\377\40\377\377\377"
+ "%\377\377\377+\377\377\377:\377\377\377U\377\377\377\17\377\377\377<\377"
+ "\377\377J\377\377\377Y\377\377\377X\377\377\377k\377\377\377I\377\377\377"
+ "b\377\377\377q\377\377\377K\377\377\377K\377\377\377T\377\377\377I\377\377"
+ "\377:\377\377\377.\377\377\377+\377\377\377(\377\377\377&\377\377\377$\377"
+ "\377\377\"\377\377\377\40\377\377\377\37\377\377\377\36\377\377\377\35\377"
+ "\377\377\33\377\377\377\33\377\377\377\33\377\377\377\33\377\377\377\33\377"
+ "\377\377\33\377\377\377\31\377\377\377\30\377\377\377\30\377\377\377\27\377"
+ "\377\377\26\377\377\377\25\377\377\377\24\377\377\377\24\377\377\377\23\377"
+ "\377\377\21\377\377\377\20\377\377\377\16\377\377\377\14\377\377\377\13\377"
+ "\377\377\12\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377\7\377"
+ "\377\377\6\377\377\377\6\377\377\377\5\377\377\377\4\377\377\377\4\377\377"
+ "\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377"
+ "\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377"
+ "\377\6\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\11\377\377"
+ "\377\12\377\377\377\13\377\377\377\14\377\377\377\15\377\377\377\17\377\377"
+ "\377\21\377\377\377\22\377\377\377\24\377\377\377\26\377\377\377\30\377\377"
+ "\377\34\377\377\377\36\377\377\377\40\377\377\377\40\377\377\377\40\377\377"
+ "\377\37\377\377\377\36\377\377\377\35\377\377\377\34\377\377\377\33\377\377"
+ "\377\36\377\377\377!\377\377\377&\377\377\377+\377\377\3776\377\377\377H"
+ "\377\377\377a\377\377\377Z\377\377\3774\377\377\377\33\377\377\377\40\377"
+ "\377\377%\377\377\377*\377\377\377C\377\377\3771\377\377\377\23\377\377\377"
+ "7\377\377\377A\377\377\377N\377\377\377N\377\377\377Z\377\377\377O\377\377"
+ "\377@\377\377\377f\377\377\377\\\377\377\377@\377\377\377B\377\377\377J\377"
+ "\377\377D\377\377\3777\377\377\377-\377\377\377'\377\377\377%\377\377\377"
+ "#\377\377\377!\377\377\377\40\377\377\377\36\377\377\377\35\377\377\377\34"
+ "\377\377\377\33\377\377\377\32\377\377\377\31\377\377\377\30\377\377\377"
+ "\30\377\377\377\27\377\377\377\27\377\377\377\26\377\377\377\26\377\377\377"
+ "\25\377\377\377\24\377\377\377\23\377\377\377\22\377\377\377\22\377\377\377"
+ "\21\377\377\377\20\377\377\377\17\377\377\377\17\377\377\377\16\377\377\377"
+ "\15\377\377\377\14\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377"
+ "\10\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\5\377\377\377\5"
+ "\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\2\377"
+ "\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4"
+ "\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377"
+ "\377\377\7\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377\12\377"
+ "\377\377\13\377\377\377\14\377\377\377\16\377\377\377\17\377\377\377\21\377"
+ "\377\377\22\377\377\377\25\377\377\377\27\377\377\377\31\377\377\377\32\377"
+ "\377\377\33\377\377\377\33\377\377\377\33\377\377\377\34\377\377\377\33\377"
+ "\377\377\32\377\377\377\31\377\377\377\30\377\377\377\32\377\377\377\35\377"
+ "\377\377!\377\377\377$\377\377\377*\377\377\3777\377\377\377G\377\377\377"
+ "]\377\377\377N\377\377\377/\377\377\377\30\377\377\377\34\377\377\377\40"
+ "\377\377\377$\377\377\377/\377\377\377I\377\377\377\34\377\377\377\27\377"
+ "\377\3772\377\377\377;\377\377\377E\377\377\377G\377\377\377L\377\377\377"
+ "S\377\377\377:\377\377\377G\377\377\377f\377\377\377M\377\377\3777\377\377"
+ "\377<\377\377\377B\377\377\377@\377\377\3775\377\377\377,\377\377\377%\377"
+ "\377\377#\377\377\377!\377\377\377\37\377\377\377\36\377\377\377\34\377\377"
+ "\377\33\377\377\377\32\377\377\377\31\377\377\377\31\377\377\377\30\377\377"
+ "\377\27\377\377\377\25\377\377\377\25\377\377\377\23\377\377\377\23\377\377"
+ "\377\22\377\377\377\22\377\377\377\21\377\377\377\21\377\377\377\20\377\377"
+ "\377\20\377\377\377\17\377\377\377\17\377\377\377\16\377\377\377\15\377\377"
+ "\377\14\377\377\377\14\377\377\377\13\377\377\377\13\377\377\377\12\377\377"
+ "\377\11\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377\6\377\377"
+ "\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377"
+ "\3\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377\377"
+ "\377\7\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\12\377\377"
+ "\377\13\377\377\377\15\377\377\377\16\377\377\377\17\377\377\377\21\377\377"
+ "\377\22\377\377\377\25\377\377\377\26\377\377\377\27\377\377\377\26\377\377"
+ "\377\27\377\377\377\27\377\377\377\27\377\377\377\27\377\377\377\27\377\377"
+ "\377\26\377\377\377\26\377\377\377\30\377\377\377\32\377\377\377\35\377\377"
+ "\377\40\377\377\377#\377\377\377+\377\377\3777\377\377\377F\377\377\377X"
+ "\377\377\377D\377\377\377+\377\377\377\26\377\377\377\31\377\377\377\34\377"
+ "\377\377\37\377\377\377#\377\377\3774\377\377\3777\377\377\377\20\377\377"
+ "\377\32\377\377\377.\377\377\3776\377\377\377>\377\377\377@\377\377\377B"
+ "\377\377\377L\377\377\377>\377\377\3771\377\377\377J\377\377\377X\377\377"
+ "\377B\377\377\3771\377\377\3776\377\377\377;\377\377\377<\377\377\3773\377"
+ "\377\377+\377\377\377$\377\377\377\40\377\377\377\37\377\377\377\35\377\377"
+ "\377\34\377\377\377\33\377\377\377\32\377\377\377\31\377\377\377\30\377\377"
+ "\377\27\377\377\377\27\377\377\377\25\377\377\377\24\377\377\377\23\377\377"
+ "\377\22\377\377\377\20\377\377\377\20\377\377\377\17\377\377\377\17\377\377"
+ "\377\16\377\377\377\16\377\377\377\15\377\377\377\15\377\377\377\14\377\377"
+ "\377\14\377\377\377\14\377\377\377\13\377\377\377\13\377\377\377\12\377\377"
+ "\377\11\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377\7\377\377"
+ "\377\7\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377"
+ "\4\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377"
+ "\377\377\7\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\12\377"
+ "\377\377\13\377\377\377\15\377\377\377\16\377\377\377\17\377\377\377\20\377"
+ "\377\377\22\377\377\377\22\377\377\377\23\377\377\377\23\377\377\377\23\377"
+ "\377\377\24\377\377\377\23\377\377\377\24\377\377\377\23\377\377\377\23\377"
+ "\377\377\23\377\377\377\26\377\377\377\27\377\377\377\32\377\377\377\34\377"
+ "\377\377\37\377\377\377#\377\377\377+\377\377\3776\377\377\377D\377\377\377"
+ "S\377\377\377<\377\377\377'\377\377\377\24\377\377\377\26\377\377\377\31"
+ "\377\377\377\33\377\377\377\36\377\377\377'\377\377\3779\377\377\377%\377"
+ "\377\377\12\377\377\377\33\377\377\377+\377\377\3771\377\377\3778\377\377"
+ "\377;\377\377\377:\377\377\377C\377\377\377A\377\377\3771\377\377\3777\377"
+ "\377\377L\377\377\377K\377\377\3779\377\377\377-\377\377\3772\377\377\377"
+ "6\377\377\3779\377\377\3771\377\377\377)\377\377\377$\377\377\377\37\377"
+ "\377\377\35\377\377\377\34\377\377\377\33\377\377\377\32\377\377\377\31\377"
+ "\377\377\30\377\377\377\27\377\377\377\25\377\377\377\24\377\377\377\23\377"
+ "\377\377\22\377\377\377\21\377\377\377\20\377\377\377\20\377\377\377\16\377"
+ "\377\377\16\377\377\377\15\377\377\377\15\377\377\377\15\377\377\377\14\377"
+ "\377\377\14\377\377\377\13\377\377\377\13\377\377\377\12\377\377\377\11\377"
+ "\377\377\11\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377\7\377"
+ "\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377"
+ "\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377"
+ "\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377"
+ "\377\377\7\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\12\377"
+ "\377\377\13\377\377\377\14\377\377\377\15\377\377\377\17\377\377\377\17\377"
+ "\377\377\17\377\377\377\20\377\377\377\20\377\377\377\20\377\377\377\21\377"
+ "\377\377\20\377\377\377\21\377\377\377\20\377\377\377\21\377\377\377\20\377"
+ "\377\377\23\377\377\377\24\377\377\377\27\377\377\377\31\377\377\377\33\377"
+ "\377\377\36\377\377\377#\377\377\377,\377\377\3776\377\377\377B\377\377\377"
+ "I\377\377\3776\377\377\377$\377\377\377\24\377\377\377\24\377\377\377\26"
+ "\377\377\377\31\377\377\377\33\377\377\377\35\377\377\377+\377\377\3779\377"
+ "\377\377\30\377\377\377\14\377\377\377\35\377\377\377(\377\377\377-\377\377"
+ "\3773\377\377\3777\377\377\3776\377\377\377;\377\377\377C\377\377\3773\377"
+ "\377\377(\377\377\377:\377\377\377L\377\377\377A\377\377\3773\377\377\377"
+ "*\377\377\377.\377\377\3771\377\377\3774\377\377\377.\377\377\377(\377\377"
+ "\377#\377\377\377\36\377\377\377\33\377\377\377\32\377\377\377\31\377\377"
+ "\377\30\377\377\377\27\377\377\377\27\377\377\377\25\377\377\377\24\377\377"
+ "\377\23\377\377\377\22\377\377\377\20\377\377\377\20\377\377\377\17\377\377"
+ "\377\16\377\377\377\15\377\377\377\15\377\377\377\14\377\377\377\13\377\377"
+ "\377\13\377\377\377\12\377\377\377\12\377\377\377\11\377\377\377\11\377\377"
+ "\377\11\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\7\377\377"
+ "\377\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3"
+ "\377\377\377\3\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377"
+ "\377\377\7\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\12\377"
+ "\377\377\13\377\377\377\14\377\377\377\14\377\377\377\15\377\377\377\15\377"
+ "\377\377\15\377\377\377\16\377\377\377\16\377\377\377\16\377\377\377\16\377"
+ "\377\377\16\377\377\377\16\377\377\377\16\377\377\377\16\377\377\377\20\377"
+ "\377\377\22\377\377\377\23\377\377\377\26\377\377\377\30\377\377\377\33\377"
+ "\377\377\36\377\377\377$\377\377\377,\377\377\3775\377\377\377@\377\377\377"
+ "A\377\377\3771\377\377\377!\377\377\377\23\377\377\377\22\377\377\377\24"
+ "\377\377\377\26\377\377\377\30\377\377\377\32\377\377\377!\377\377\377.\377"
+ "\377\377)\377\377\377\20\377\377\377\16\377\377\377\35\377\377\377&\377\377"
+ "\377*\377\377\377/\377\377\3773\377\377\3772\377\377\3775\377\377\377;\377"
+ "\377\3776\377\377\377*\377\377\377,\377\377\377<\377\377\377H\377\377\377"
+ "9\377\377\377-\377\377\377'\377\377\377*\377\377\377.\377\377\3770\377\377"
+ "\377-\377\377\377'\377\377\377\"\377\377\377\36\377\377\377\32\377\377\377"
+ "\31\377\377\377\30\377\377\377\27\377\377\377\25\377\377\377\25\377\377\377"
+ "\23\377\377\377\22\377\377\377\22\377\377\377\20\377\377\377\20\377\377\377"
+ "\16\377\377\377\16\377\377\377\15\377\377\377\14\377\377\377\13\377\377\377"
+ "\13\377\377\377\12\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377"
+ "\10\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377"
+ "\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5"
+ "\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377"
+ "\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377"
+ "\6\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377"
+ "\12\377\377\377\12\377\377\377\13\377\377\377\13\377\377\377\13\377\377\377"
+ "\13\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377"
+ "\15\377\377\377\14\377\377\377\15\377\377\377\16\377\377\377\17\377\377\377"
+ "\20\377\377\377\23\377\377\377\24\377\377\377\26\377\377\377\31\377\377\377"
+ "\36\377\377\377$\377\377\377+\377\377\3774\377\377\377>\377\377\377;\377"
+ "\377\377-\377\377\377\37\377\377\377\23\377\377\377\21\377\377\377\22\377"
+ "\377\377\24\377\377\377\26\377\377\377\30\377\377\377\32\377\377\377$\377"
+ "\377\3771\377\377\377\35\377\377\377\12\377\377\377\17\377\377\377\36\377"
+ "\377\377#\377\377\377'\377\377\377,\377\377\377/\377\377\377/\377\377\377"
+ "0\377\377\3776\377\377\3777\377\377\377,\377\377\377\"\377\377\377/\377\377"
+ "\377=\377\377\377?\377\377\3773\377\377\377)\377\377\377%\377\377\377(\377"
+ "\377\377*\377\377\377-\377\377\377+\377\377\377&\377\377\377!\377\377\377"
+ "\35\377\377\377\32\377\377\377\30\377\377\377\27\377\377\377\25\377\377\377"
+ "\24\377\377\377\23\377\377\377\22\377\377\377\20\377\377\377\20\377\377\377"
+ "\17\377\377\377\16\377\377\377\15\377\377\377\15\377\377\377\14\377\377\377"
+ "\13\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377\11\377\377\377"
+ "\10\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377"
+ "\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5"
+ "\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377"
+ "\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377"
+ "\6\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377"
+ "\10\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\12\377\377\377"
+ "\12\377\377\377\13\377\377\377\12\377\377\377\13\377\377\377\12\377\377\377"
+ "\13\377\377\377\13\377\377\377\14\377\377\377\15\377\377\377\16\377\377\377"
+ "\20\377\377\377\21\377\377\377\23\377\377\377\26\377\377\377\30\377\377\377"
+ "\36\377\377\377#\377\377\377+\377\377\3773\377\377\377<\377\377\3775\377"
+ "\377\377)\377\377\377\35\377\377\377\22\377\377\377\20\377\377\377\21\377"
+ "\377\377\22\377\377\377\24\377\377\377\26\377\377\377\27\377\377\377\35\377"
+ "\377\377'\377\377\377*\377\377\377\25\377\377\377\7\377\377\377\20\377\377"
+ "\377\36\377\377\377!\377\377\377%\377\377\377)\377\377\377,\377\377\377,"
+ "\377\377\377,\377\377\3771\377\377\3775\377\377\377-\377\377\377$\377\377"
+ "\377%\377\377\3771\377\377\377=\377\377\3778\377\377\377.\377\377\377%\377"
+ "\377\377\"\377\377\377%\377\377\377'\377\377\377*\377\377\377)\377\377\377"
+ "$\377\377\377\40\377\377\377\35\377\377\377\32\377\377\377\26\377\377\377"
+ "\25\377\377\377\23\377\377\377\22\377\377\377\22\377\377\377\20\377\377\377"
+ "\20\377\377\377\17\377\377\377\16\377\377\377\15\377\377\377\14\377\377\377"
+ "\13\377\377\377\13\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377"
+ "\11\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377"
+ "\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\4"
+ "\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377"
+ "\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377"
+ "\5\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\7"
+ "\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377\10"
+ "\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377"
+ "\11\377\377\377\12\377\377\377\14\377\377\377\15\377\377\377\16\377\377\377"
+ "\17\377\377\377\20\377\377\377\22\377\377\377\24\377\377\377\27\377\377\377"
+ "\34\377\377\377\"\377\377\377(\377\377\3771\377\377\377:\377\377\3771\377"
+ "\377\377&\377\377\377\33\377\377\377\22\377\377\377\16\377\377\377\20\377"
+ "\377\377\21\377\377\377\22\377\377\377\24\377\377\377\25\377\377\377\27\377"
+ "\377\377\37\377\377\377)\377\377\377\40\377\377\377\17\377\377\377\10\377"
+ "\377\377\21\377\377\377\35\377\377\377\37\377\377\377\"\377\377\377&\377"
+ "\377\377)\377\377\377*\377\377\377)\377\377\377,\377\377\3771\377\377\377"
+ "/\377\377\377&\377\377\377\37\377\377\377'\377\377\3772\377\377\377=\377"
+ "\377\3773\377\377\377*\377\377\377\"\377\377\377!\377\377\377#\377\377\377"
+ "%\377\377\377'\377\377\377'\377\377\377#\377\377\377\37\377\377\377\33\377"
+ "\377\377\30\377\377\377\25\377\377\377\23\377\377\377\22\377\377\377\21\377"
+ "\377\377\20\377\377\377\20\377\377\377\16\377\377\377\15\377\377\377\15\377"
+ "\377\377\14\377\377\377\13\377\377\377\13\377\377\377\12\377\377\377\11\377"
+ "\377\377\11\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\7\377"
+ "\377\377\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377"
+ "\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377"
+ "\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377"
+ "\6\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\7"
+ "\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377"
+ "\11\377\377\377\12\377\377\377\13\377\377\377\13\377\377\377\15\377\377\377"
+ "\16\377\377\377\20\377\377\377\21\377\377\377\23\377\377\377\27\377\377\377"
+ "\33\377\377\377!\377\377\377'\377\377\377.\377\377\3775\377\377\377-\377"
+ "\377\377#\377\377\377\32\377\377\377\21\377\377\377\15\377\377\377\17\377"
+ "\377\377\20\377\377\377\21\377\377\377\22\377\377\377\23\377\377\377\25\377"
+ "\377\377\32\377\377\377!\377\377\377*\377\377\377\30\377\377\377\12\377\377"
+ "\377\11\377\377\377\22\377\377\377\33\377\377\377\36\377\377\377!\377\377"
+ "\377$\377\377\377'\377\377\377'\377\377\377'\377\377\377)\377\377\377-\377"
+ "\377\3770\377\377\377'\377\377\377\40\377\377\377\40\377\377\377)\377\377"
+ "\3773\377\377\3777\377\377\377.\377\377\377&\377\377\377\40\377\377\377\37"
+ "\377\377\377!\377\377\377#\377\377\377%\377\377\377&\377\377\377!\377\377"
+ "\377\36\377\377\377\31\377\377\377\27\377\377\377\24\377\377\377\21\377\377"
+ "\377\20\377\377\377\20\377\377\377\16\377\377\377\16\377\377\377\15\377\377"
+ "\377\14\377\377\377\13\377\377\377\13\377\377\377\13\377\377\377\12\377\377"
+ "\377\11\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377\7\377\377"
+ "\377\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5"
+ "\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377"
+ "\377\377\7\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\10\377"
+ "\377\377\11\377\377\377\12\377\377\377\13\377\377\377\14\377\377\377\15\377"
+ "\377\377\16\377\377\377\20\377\377\377\22\377\377\377\26\377\377\377\32\377"
+ "\377\377\37\377\377\377$\377\377\377+\377\377\3770\377\377\377(\377\377\377"
+ "\40\377\377\377\31\377\377\377\21\377\377\377\15\377\377\377\16\377\377\377"
+ "\17\377\377\377\20\377\377\377\21\377\377\377\22\377\377\377\23\377\377\377"
+ "\25\377\377\377\34\377\377\377#\377\377\377!\377\377\377\22\377\377\377\7"
+ "\377\377\377\12\377\377\377\23\377\377\377\32\377\377\377\34\377\377\377"
+ "\37\377\377\377\"\377\377\377$\377\377\377%\377\377\377%\377\377\377&\377"
+ "\377\377)\377\377\377,\377\377\377(\377\377\377\"\377\377\377\34\377\377"
+ "\377\"\377\377\377*\377\377\3773\377\377\3771\377\377\377*\377\377\377#\377"
+ "\377\377\35\377\377\377\35\377\377\377\37\377\377\377!\377\377\377\"\377"
+ "\377\377#\377\377\377\37\377\377\377\34\377\377\377\30\377\377\377\25\377"
+ "\377\377\23\377\377\377\21\377\377\377\17\377\377\377\16\377\377\377\16\377"
+ "\377\377\15\377\377\377\14\377\377\377\13\377\377\377\13\377\377\377\12\377"
+ "\377\377\11\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377\7\377"
+ "\377\377\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377"
+ "\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377"
+ "\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377"
+ "\377\6\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377"
+ "\10\377\377\377\11\377\377\377\12\377\377\377\13\377\377\377\14\377\377\377"
+ "\16\377\377\377\17\377\377\377\22\377\377\377\25\377\377\377\31\377\377\377"
+ "\35\377\377\377\"\377\377\377(\377\377\377*\377\377\377$\377\377\377\35\377"
+ "\377\377\26\377\377\377\17\377\377\377\14\377\377\377\15\377\377\377\16\377"
+ "\377\377\17\377\377\377\20\377\377\377\21\377\377\377\22\377\377\377\23\377"
+ "\377\377\27\377\377\377\35\377\377\377$\377\377\377\32\377\377\377\16\377"
+ "\377\377\6\377\377\377\13\377\377\377\23\377\377\377\31\377\377\377\33\377"
+ "\377\377\35\377\377\377\40\377\377\377\"\377\377\377#\377\377\377#\377\377"
+ "\377#\377\377\377&\377\377\377)\377\377\377)\377\377\377#\377\377\377\35"
+ "\377\377\377\34\377\377\377#\377\377\377+\377\377\3773\377\377\377-\377\377"
+ "\377&\377\377\377\40\377\377\377\33\377\377\377\34\377\377\377\36\377\377"
+ "\377\36\377\377\377\37\377\377\377\40\377\377\377\35\377\377\377\32\377\377"
+ "\377\27\377\377\377\24\377\377\377\22\377\377\377\20\377\377\377\16\377\377"
+ "\377\16\377\377\377\14\377\377\377\14\377\377\377\13\377\377\377\13\377\377"
+ "\377\12\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377\10\377\377"
+ "\377\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377"
+ "\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4"
+ "\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5\377"
+ "\377\377\5\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\10\377\377"
+ "\377\11\377\377\377\12\377\377\377\13\377\377\377\14\377\377\377\15\377\377"
+ "\377\17\377\377\377\21\377\377\377\24\377\377\377\30\377\377\377\34\377\377"
+ "\377!\377\377\377&\377\377\377%\377\377\377\40\377\377\377\32\377\377\377"
+ "\24\377\377\377\17\377\377\377\12\377\377\377\13\377\377\377\15\377\377\377"
+ "\16\377\377\377\17\377\377\377\17\377\377\377\20\377\377\377\21\377\377\377"
+ "\23\377\377\377\31\377\377\377\37\377\377\377\"\377\377\377\25\377\377\377"
+ "\12\377\377\377\6\377\377\377\14\377\377\377\23\377\377\377\30\377\377\377"
+ "\32\377\377\377\34\377\377\377\36\377\377\377\40\377\377\377\"\377\377\377"
+ "!\377\377\377!\377\377\377#\377\377\377&\377\377\377)\377\377\377$\377\377"
+ "\377\36\377\377\377\31\377\377\377\35\377\377\377$\377\377\377+\377\377\377"
+ "0\377\377\377)\377\377\377#\377\377\377\36\377\377\377\32\377\377\377\32"
+ "\377\377\377\33\377\377\377\34\377\377\377\34\377\377\377\35\377\377\377"
+ "\33\377\377\377\30\377\377\377\26\377\377\377\23\377\377\377\20\377\377\377"
+ "\17\377\377\377\15\377\377\377\14\377\377\377\13\377\377\377\13\377\377\377"
+ "\12\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377"
+ "\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\5"
+ "\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377"
+ "\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5"
+ "\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\10\377"
+ "\377\377\11\377\377\377\11\377\377\377\12\377\377\377\14\377\377\377\16\377"
+ "\377\377\21\377\377\377\23\377\377\377\27\377\377\377\33\377\377\377\36\377"
+ "\377\377#\377\377\377!\377\377\377\35\377\377\377\27\377\377\377\22\377\377"
+ "\377\15\377\377\377\12\377\377\377\12\377\377\377\13\377\377\377\14\377\377"
+ "\377\16\377\377\377\16\377\377\377\17\377\377\377\20\377\377\377\21\377\377"
+ "\377\25\377\377\377\32\377\377\377\40\377\377\377\33\377\377\377\20\377\377"
+ "\377\10\377\377\377\7\377\377\377\15\377\377\377\24\377\377\377\27\377\377"
+ "\377\31\377\377\377\33\377\377\377\35\377\377\377\37\377\377\377\40\377\377"
+ "\377\40\377\377\377\40\377\377\377!\377\377\377$\377\377\377&\377\377\377"
+ "$\377\377\377\37\377\377\377\32\377\377\377\30\377\377\377\37\377\377\377"
+ "%\377\377\377+\377\377\377,\377\377\377&\377\377\377\40\377\377\377\33\377"
+ "\377\377\27\377\377\377\27\377\377\377\31\377\377\377\31\377\377\377\31\377"
+ "\377\377\32\377\377\377\31\377\377\377\26\377\377\377\24\377\377\377\22\377"
+ "\377\377\20\377\377\377\16\377\377\377\15\377\377\377\13\377\377\377\13\377"
+ "\377\377\12\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377\10\377"
+ "\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377"
+ "\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377"
+ "\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377"
+ "\5\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\10"
+ "\377\377\377\11\377\377\377\12\377\377\377\13\377\377\377\15\377\377\377"
+ "\20\377\377\377\22\377\377\377\25\377\377\377\31\377\377\377\34\377\377\377"
+ "!\377\377\377\36\377\377\377\32\377\377\377\25\377\377\377\21\377\377\377"
+ "\15\377\377\377\10\377\377\377\12\377\377\377\12\377\377\377\13\377\377\377"
+ "\14\377\377\377\15\377\377\377\15\377\377\377\17\377\377\377\20\377\377\377"
+ "\22\377\377\377\26\377\377\377\33\377\377\377!\377\377\377\26\377\377\377"
+ "\15\377\377\377\6\377\377\377\10\377\377\377\15\377\377\377\24\377\377\377"
+ "\26\377\377\377\30\377\377\377\31\377\377\377\33\377\377\377\35\377\377\377"
+ "\37\377\377\377\37\377\377\377\36\377\377\377\37\377\377\377!\377\377\377"
+ "$\377\377\377%\377\377\377\40\377\377\377\33\377\377\377\27\377\377\377\32"
+ "\377\377\377\40\377\377\377&\377\377\377+\377\377\377'\377\377\377\"\377"
+ "\377\377\34\377\377\377\30\377\377\377\25\377\377\377\25\377\377\377\27\377"
+ "\377\377\27\377\377\377\27\377\377\377\30\377\377\377\27\377\377\377\25\377"
+ "\377\377\23\377\377\377\21\377\377\377\17\377\377\377\15\377\377\377\14\377"
+ "\377\377\12\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\10\377"
+ "\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377"
+ "\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5"
+ "\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\10\377"
+ "\377\377\10\377\377\377\11\377\377\377\13\377\377\377\15\377\377\377\17\377"
+ "\377\377\21\377\377\377\24\377\377\377\27\377\377\377\33\377\377\377\36\377"
+ "\377\377\32\377\377\377\27\377\377\377\24\377\377\377\17\377\377\377\13\377"
+ "\377\377\10\377\377\377\10\377\377\377\11\377\377\377\12\377\377\377\13\377"
+ "\377\377\14\377\377\377\14\377\377\377\15\377\377\377\16\377\377\377\20\377"
+ "\377\377\23\377\377\377\27\377\377\377\34\377\377\377\34\377\377\377\22\377"
+ "\377\377\12\377\377\377\5\377\377\377\10\377\377\377\15\377\377\377\24\377"
+ "\377\377\25\377\377\377\27\377\377\377\30\377\377\377\32\377\377\377\34\377"
+ "\377\377\35\377\377\377\35\377\377\377\35\377\377\377\35\377\377\377\37\377"
+ "\377\377!\377\377\377#\377\377\377\40\377\377\377\34\377\377\377\30\377\377"
+ "\377\26\377\377\377\33\377\377\377\40\377\377\377%\377\377\377)\377\377\377"
+ "#\377\377\377\37\377\377\377\32\377\377\377\26\377\377\377\23\377\377\377"
+ "\24\377\377\377\25\377\377\377\25\377\377\377\26\377\377\377\26\377\377\377"
+ "\25\377\377\377\23\377\377\377\21\377\377\377\17\377\377\377\16\377\377\377"
+ "\14\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377"
+ "\10\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\6"
+ "\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377"
+ "\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4"
+ "\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\10\377"
+ "\377\377\11\377\377\377\12\377\377\377\14\377\377\377\16\377\377\377\20\377"
+ "\377\377\23\377\377\377\26\377\377\377\31\377\377\377\33\377\377\377\27\377"
+ "\377\377\24\377\377\377\21\377\377\377\16\377\377\377\13\377\377\377\10\377"
+ "\377\377\10\377\377\377\10\377\377\377\11\377\377\377\11\377\377\377\12\377"
+ "\377\377\14\377\377\377\14\377\377\377\15\377\377\377\16\377\377\377\20\377"
+ "\377\377\23\377\377\377\30\377\377\377\35\377\377\377\27\377\377\377\17\377"
+ "\377\377\10\377\377\377\5\377\377\377\11\377\377\377\16\377\377\377\23\377"
+ "\377\377\25\377\377\377\26\377\377\377\27\377\377\377\31\377\377\377\33\377"
+ "\377\377\34\377\377\377\34\377\377\377\34\377\377\377\34\377\377\377\35\377"
+ "\377\377\37\377\377\377!\377\377\377!\377\377\377\35\377\377\377\31\377\377"
+ "\377\25\377\377\377\26\377\377\377\33\377\377\377\37\377\377\377$\377\377"
+ "\377$\377\377\377\40\377\377\377\33\377\377\377\30\377\377\377\24\377\377"
+ "\377\22\377\377\377\23\377\377\377\23\377\377\377\24\377\377\377\23\377\377"
+ "\377\23\377\377\377\24\377\377\377\22\377\377\377\20\377\377\377\17\377\377"
+ "\377\15\377\377\377\14\377\377\377\12\377\377\377\11\377\377\377\10\377\377"
+ "\377\7\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377"
+ "\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4"
+ "\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377"
+ "\377\377\5\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\10\377\377"
+ "\377\11\377\377\377\13\377\377\377\15\377\377\377\17\377\377\377\21\377\377"
+ "\377\24\377\377\377\27\377\377\377\30\377\377\377\26\377\377\377\23\377\377"
+ "\377\20\377\377\377\15\377\377\377\12\377\377\377\7\377\377\377\7\377\377"
+ "\377\10\377\377\377\10\377\377\377\11\377\377\377\11\377\377\377\12\377\377"
+ "\377\13\377\377\377\13\377\377\377\15\377\377\377\15\377\377\377\21\377\377"
+ "\377\24\377\377\377\30\377\377\377\33\377\377\377\23\377\377\377\14\377\377"
+ "\377\6\377\377\377\6\377\377\377\11\377\377\377\16\377\377\377\23\377\377"
+ "\377\24\377\377\377\25\377\377\377\26\377\377\377\30\377\377\377\31\377\377"
+ "\377\33\377\377\377\33\377\377\377\33\377\377\377\33\377\377\377\34\377\377"
+ "\377\35\377\377\377\37\377\377\377!\377\377\377\35\377\377\377\31\377\377"
+ "\377\25\377\377\377\23\377\377\377\27\377\377\377\33\377\377\377\36\377\377"
+ "\377\"\377\377\377!\377\377\377\34\377\377\377\31\377\377\377\25\377\377"
+ "\377\22\377\377\377\21\377\377\377\21\377\377\377\22\377\377\377\22\377\377"
+ "\377\21\377\377\377\22\377\377\377\22\377\377\377\21\377\377\377\17\377\377"
+ "\377\15\377\377\377\14\377\377\377\12\377\377\377\12\377\377\377\11\377\377"
+ "\377\10\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377"
+ "\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5"
+ "\377\377\377\5\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\13"
+ "\377\377\377\14\377\377\377\16\377\377\377\20\377\377\377\22\377\377\377"
+ "\25\377\377\377\25\377\377\377\23\377\377\377\20\377\377\377\16\377\377\377"
+ "\14\377\377\377\11\377\377\377\7\377\377\377\6\377\377\377\7\377\377\377"
+ "\10\377\377\377\10\377\377\377\11\377\377\377\11\377\377\377\12\377\377\377"
+ "\12\377\377\377\13\377\377\377\14\377\377\377\15\377\377\377\21\377\377\377"
+ "\24\377\377\377\30\377\377\377\27\377\377\377\17\377\377\377\10\377\377\377"
+ "\3\377\377\377\6\377\377\377\12\377\377\377\16\377\377\377\22\377\377\377"
+ "\23\377\377\377\24\377\377\377\26\377\377\377\27\377\377\377\30\377\377\377"
+ "\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377\377\32\377\377\377"
+ "\34\377\377\377\35\377\377\377\36\377\377\377\35\377\377\377\31\377\377\377"
+ "\26\377\377\377\22\377\377\377\23\377\377\377\27\377\377\377\32\377\377\377"
+ "\36\377\377\377!\377\377\377\35\377\377\377\31\377\377\377\26\377\377\377"
+ "\23\377\377\377\20\377\377\377\17\377\377\377\20\377\377\377\20\377\377\377"
+ "\20\377\377\377\20\377\377\377\20\377\377\377\20\377\377\377\17\377\377\377"
+ "\15\377\377\377\14\377\377\377\13\377\377\377\12\377\377\377\11\377\377\377"
+ "\10\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5"
+ "\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377"
+ "\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3"
+ "\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377"
+ "\377\377\6\377\377\377\7\377\377\377\11\377\377\377\12\377\377\377\13\377"
+ "\377\377\15\377\377\377\17\377\377\377\21\377\377\377\24\377\377\377\23\377"
+ "\377\377\21\377\377\377\17\377\377\377\15\377\377\377\12\377\377\377\11\377"
+ "\377\377\6\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\7\377\377"
+ "\377\10\377\377\377\10\377\377\377\11\377\377\377\12\377\377\377\12\377\377"
+ "\377\13\377\377\377\14\377\377\377\16\377\377\377\21\377\377\377\25\377\377"
+ "\377\31\377\377\377\22\377\377\377\14\377\377\377\7\377\377\377\3\377\377"
+ "\377\6\377\377\377\11\377\377\377\15\377\377\377\20\377\377\377\22\377\377"
+ "\377\24\377\377\377\25\377\377\377\26\377\377\377\27\377\377\377\30\377\377"
+ "\377\30\377\377\377\30\377\377\377\30\377\377\377\30\377\377\377\31\377\377"
+ "\377\33\377\377\377\33\377\377\377\34\377\377\377\31\377\377\377\25\377\377"
+ "\377\23\377\377\377\20\377\377\377\23\377\377\377\27\377\377\377\32\377\377"
+ "\377\35\377\377\377\36\377\377\377\32\377\377\377\26\377\377\377\23\377\377"
+ "\377\21\377\377\377\17\377\377\377\16\377\377\377\16\377\377\377\16\377\377"
+ "\377\17\377\377\377\17\377\377\377\17\377\377\377\17\377\377\377\16\377\377"
+ "\377\15\377\377\377\14\377\377\377\12\377\377\377\11\377\377\377\10\377\377"
+ "\377\7\377\377\377\7\377\377\377\6\377\377\377\5\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377"
+ "\4\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10"
+ "\377\377\377\11\377\377\377\13\377\377\377\14\377\377\377\16\377\377\377"
+ "\20\377\377\377\22\377\377\377\21\377\377\377\17\377\377\377\15\377\377\377"
+ "\13\377\377\377\12\377\377\377\10\377\377\377\6\377\377\377\5\377\377\377"
+ "\5\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\10"
+ "\377\377\377\10\377\377\377\11\377\377\377\12\377\377\377\13\377\377\377"
+ "\14\377\377\377\16\377\377\377\21\377\377\377\24\377\377\377\25\377\377\377"
+ "\17\377\377\377\12\377\377\377\5\377\377\377\3\377\377\377\6\377\377\377"
+ "\11\377\377\377\16\377\377\377\20\377\377\377\21\377\377\377\22\377\377\377"
+ "\23\377\377\377\24\377\377\377\25\377\377\377\27\377\377\377\27\377\377\377"
+ "\27\377\377\377\27\377\377\377\27\377\377\377\27\377\377\377\30\377\377\377"
+ "\32\377\377\377\32\377\377\377\30\377\377\377\25\377\377\377\22\377\377\377"
+ "\20\377\377\377\20\377\377\377\23\377\377\377\26\377\377\377\31\377\377\377"
+ "\34\377\377\377\33\377\377\377\27\377\377\377\25\377\377\377\22\377\377\377"
+ "\17\377\377\377\15\377\377\377\15\377\377\377\15\377\377\377\15\377\377\377"
+ "\15\377\377\377\16\377\377\377\15\377\377\377\15\377\377\377\15\377\377\377"
+ "\14\377\377\377\12\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377"
+ "\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4"
+ "\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4"
+ "\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\11"
+ "\377\377\377\13\377\377\377\15\377\377\377\17\377\377\377\20\377\377\377"
+ "\17\377\377\377\16\377\377\377\14\377\377\377\13\377\377\377\11\377\377\377"
+ "\7\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6"
+ "\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\10\377\377\377\10"
+ "\377\377\377\11\377\377\377\11\377\377\377\12\377\377\377\14\377\377\377"
+ "\17\377\377\377\22\377\377\377\24\377\377\377\22\377\377\377\14\377\377\377"
+ "\10\377\377\377\4\377\377\377\4\377\377\377\6\377\377\377\12\377\377\377"
+ "\16\377\377\377\17\377\377\377\20\377\377\377\21\377\377\377\21\377\377\377"
+ "\22\377\377\377\24\377\377\377\25\377\377\377\25\377\377\377\25\377\377\377"
+ "\25\377\377\377\25\377\377\377\26\377\377\377\27\377\377\377\30\377\377\377"
+ "\31\377\377\377\30\377\377\377\25\377\377\377\23\377\377\377\20\377\377\377"
+ "\16\377\377\377\20\377\377\377\23\377\377\377\26\377\377\377\30\377\377\377"
+ "\32\377\377\377\30\377\377\377\25\377\377\377\22\377\377\377\20\377\377\377"
+ "\16\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377"
+ "\14\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377"
+ "\13\377\377\377\12\377\377\377\11\377\377\377\7\377\377\377\7\377\377\377"
+ "\6\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2"
+ "\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377"
+ "\377\377\6\377\377\377\7\377\377\377\10\377\377\377\12\377\377\377\14\377"
+ "\377\377\15\377\377\377\16\377\377\377\15\377\377\377\14\377\377\377\13\377"
+ "\377\377\11\377\377\377\10\377\377\377\7\377\377\377\5\377\377\377\4\377"
+ "\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6\377\377"
+ "\377\7\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\10\377\377"
+ "\377\11\377\377\377\13\377\377\377\15\377\377\377\17\377\377\377\21\377\377"
+ "\377\24\377\377\377\17\377\377\377\12\377\377\377\6\377\377\377\3\377\377"
+ "\377\4\377\377\377\7\377\377\377\11\377\377\377\15\377\377\377\16\377\377"
+ "\377\17\377\377\377\20\377\377\377\21\377\377\377\22\377\377\377\23\377\377"
+ "\377\24\377\377\377\25\377\377\377\25\377\377\377\24\377\377\377\23\377\377"
+ "\377\24\377\377\377\25\377\377\377\26\377\377\377\26\377\377\377\30\377\377"
+ "\377\25\377\377\377\22\377\377\377\20\377\377\377\16\377\377\377\16\377\377"
+ "\377\20\377\377\377\23\377\377\377\25\377\377\377\26\377\377\377\30\377\377"
+ "\377\26\377\377\377\23\377\377\377\21\377\377\377\17\377\377\377\14\377\377"
+ "\377\13\377\377\377\13\377\377\377\13\377\377\377\13\377\377\377\13\377\377"
+ "\377\13\377\377\377\13\377\377\377\13\377\377\377\13\377\377\377\12\377\377"
+ "\377\10\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377\5\377\377"
+ "\377\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377"
+ "\377\377\4\377\377\377\5\377\377\377\5\377\377\377\7\377\377\377\10\377\377"
+ "\377\11\377\377\377\12\377\377\377\14\377\377\377\14\377\377\377\13\377\377"
+ "\377\12\377\377\377\11\377\377\377\10\377\377\377\7\377\377\377\6\377\377"
+ "\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377"
+ "\5\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\10"
+ "\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377\13\377\377\377"
+ "\15\377\377\377\17\377\377\377\22\377\377\377\21\377\377\377\14\377\377\377"
+ "\10\377\377\377\5\377\377\377\2\377\377\377\4\377\377\377\6\377\377\377\11"
+ "\377\377\377\15\377\377\377\16\377\377\377\16\377\377\377\17\377\377\377"
+ "\20\377\377\377\21\377\377\377\21\377\377\377\22\377\377\377\23\377\377\377"
+ "\23\377\377\377\23\377\377\377\23\377\377\377\23\377\377\377\24\377\377\377"
+ "\24\377\377\377\25\377\377\377\26\377\377\377\24\377\377\377\22\377\377\377"
+ "\20\377\377\377\16\377\377\377\14\377\377\377\16\377\377\377\20\377\377\377"
+ "\22\377\377\377\24\377\377\377\25\377\377\377\26\377\377\377\23\377\377\377"
+ "\21\377\377\377\17\377\377\377\15\377\377\377\13\377\377\377\12\377\377\377"
+ "\12\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377"
+ "\12\377\377\377\12\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377"
+ "\7\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4"
+ "\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377"
+ "\2\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\5\377\377\377\6"
+ "\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\12\377\377\377\13"
+ "\377\377\377\12\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377"
+ "\6\377\377\377\5\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\4"
+ "\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377"
+ "\377\377\6\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\10\377\377"
+ "\377\11\377\377\377\13\377\377\377\15\377\377\377\17\377\377\377\21\377\377"
+ "\377\16\377\377\377\12\377\377\377\7\377\377\377\4\377\377\377\3\377\377"
+ "\377\5\377\377\377\6\377\377\377\11\377\377\377\14\377\377\377\15\377\377"
+ "\377\15\377\377\377\16\377\377\377\17\377\377\377\17\377\377\377\20\377\377"
+ "\377\21\377\377\377\22\377\377\377\22\377\377\377\22\377\377\377\21\377\377"
+ "\377\21\377\377\377\22\377\377\377\23\377\377\377\24\377\377\377\24\377\377"
+ "\377\24\377\377\377\22\377\377\377\17\377\377\377\16\377\377\377\14\377\377"
+ "\377\14\377\377\377\16\377\377\377\20\377\377\377\21\377\377\377\23\377\377"
+ "\377\24\377\377\377\23\377\377\377\21\377\377\377\17\377\377\377\15\377\377"
+ "\377\14\377\377\377\12\377\377\377\11\377\377\377\11\377\377\377\11\377\377"
+ "\377\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377"
+ "\377\10\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377\6\377\377"
+ "\377\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377"
+ "\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4"
+ "\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\11"
+ "\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377\7\377\377\377\7"
+ "\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5\377\377"
+ "\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377"
+ "\7\377\377\377\7\377\377\377\11\377\377\377\13\377\377\377\15\377\377\377"
+ "\17\377\377\377\20\377\377\377\14\377\377\377\10\377\377\377\5\377\377\377"
+ "\3\377\377\377\3\377\377\377\4\377\377\377\6\377\377\377\11\377\377\377\13"
+ "\377\377\377\14\377\377\377\14\377\377\377\15\377\377\377\16\377\377\377"
+ "\17\377\377\377\20\377\377\377\20\377\377\377\20\377\377\377\21\377\377\377"
+ "\21\377\377\377\20\377\377\377\20\377\377\377\21\377\377\377\21\377\377\377"
+ "\22\377\377\377\23\377\377\377\23\377\377\377\22\377\377\377\20\377\377\377"
+ "\16\377\377\377\14\377\377\377\13\377\377\377\14\377\377\377\15\377\377\377"
+ "\17\377\377\377\21\377\377\377\22\377\377\377\23\377\377\377\22\377\377\377"
+ "\17\377\377\377\16\377\377\377\14\377\377\377\13\377\377\377\11\377\377\377"
+ "\10\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377"
+ "\10\377\377\377\10\377\377\377\7\377\377\377\10\377\377\377\7\377\377\377"
+ "\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377"
+ "\3\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10"
+ "\377\377\377\10\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377"
+ "\377\377\5\377\377\377\4\377\377\377\4\377\377\377\2\377\377\377\3\377\377"
+ "\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6"
+ "\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\13\377\377\377\15"
+ "\377\377\377\17\377\377\377\15\377\377\377\12\377\377\377\7\377\377\377\4"
+ "\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\7\377\377\377\10\377"
+ "\377\377\13\377\377\377\13\377\377\377\14\377\377\377\15\377\377\377\15\377"
+ "\377\377\15\377\377\377\16\377\377\377\17\377\377\377\20\377\377\377\20\377"
+ "\377\377\20\377\377\377\20\377\377\377\20\377\377\377\17\377\377\377\20\377"
+ "\377\377\21\377\377\377\21\377\377\377\22\377\377\377\21\377\377\377\17\377"
+ "\377\377\16\377\377\377\14\377\377\377\12\377\377\377\12\377\377\377\13\377"
+ "\377\377\15\377\377\377\16\377\377\377\20\377\377\377\21\377\377\377\22\377"
+ "\377\377\17\377\377\377\16\377\377\377\14\377\377\377\13\377\377\377\11\377"
+ "\377\377\10\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377"
+ "\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377"
+ "\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377"
+ "\3\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\7"
+ "\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\4\377"
+ "\377\377\4\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\3\377\377"
+ "\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6"
+ "\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\13\377\377\377\15"
+ "\377\377\377\17\377\377\377\13\377\377\377\10\377\377\377\5\377\377\377\3"
+ "\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\6\377\377\377\11\377"
+ "\377\377\12\377\377\377\13\377\377\377\13\377\377\377\13\377\377\377\14\377"
+ "\377\377\15\377\377\377\16\377\377\377\16\377\377\377\16\377\377\377\16\377"
+ "\377\377\16\377\377\377\16\377\377\377\16\377\377\377\16\377\377\377\17\377"
+ "\377\377\17\377\377\377\20\377\377\377\21\377\377\377\21\377\377\377\17\377"
+ "\377\377\15\377\377\377\14\377\377\377\13\377\377\377\11\377\377\377\12\377"
+ "\377\377\13\377\377\377\14\377\377\377\16\377\377\377\17\377\377\377\20\377"
+ "\377\377\17\377\377\377\16\377\377\377\14\377\377\377\13\377\377\377\11\377"
+ "\377\377\10\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\7\377\377"
+ "\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377"
+ "\5\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\3\377\377\377\3"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1"
+ "\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377"
+ "\377\377\4\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\5\377\377"
+ "\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377"
+ "\3\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377"
+ "\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377"
+ "\377\6\377\377\377\10\377\377\377\11\377\377\377\13\377\377\377\14\377\377"
+ "\377\15\377\377\377\11\377\377\377\7\377\377\377\5\377\377\377\2\377\377"
+ "\377\2\377\377\377\3\377\377\377\5\377\377\377\6\377\377\377\11\377\377\377"
+ "\11\377\377\377\12\377\377\377\12\377\377\377\13\377\377\377\14\377\377\377"
+ "\14\377\377\377\15\377\377\377\15\377\377\377\16\377\377\377\16\377\377\377"
+ "\16\377\377\377\16\377\377\377\16\377\377\377\16\377\377\377\16\377\377\377"
+ "\16\377\377\377\17\377\377\377\17\377\377\377\20\377\377\377\17\377\377\377"
+ "\15\377\377\377\14\377\377\377\12\377\377\377\11\377\377\377\11\377\377\377"
+ "\12\377\377\377\13\377\377\377\14\377\377\377\15\377\377\377\16\377\377\377"
+ "\17\377\377\377\16\377\377\377\14\377\377\377\13\377\377\377\12\377\377\377"
+ "\10\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6"
+ "\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377"
+ "\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377"
+ "\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\4\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377"
+ "\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377"
+ "\10\377\377\377\11\377\377\377\13\377\377\377\14\377\377\377\12\377\377\377"
+ "\10\377\377\377\6\377\377\377\4\377\377\377\2\377\377\377\2\377\377\377\3"
+ "\377\377\377\5\377\377\377\6\377\377\377\10\377\377\377\11\377\377\377\11"
+ "\377\377\377\12\377\377\377\13\377\377\377\13\377\377\377\13\377\377\377"
+ "\14\377\377\377\14\377\377\377\15\377\377\377\15\377\377\377\15\377\377\377"
+ "\15\377\377\377\15\377\377\377\14\377\377\377\15\377\377\377\15\377\377\377"
+ "\16\377\377\377\16\377\377\377\17\377\377\377\16\377\377\377\15\377\377\377"
+ "\13\377\377\377\13\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377"
+ "\12\377\377\377\13\377\377\377\14\377\377\377\14\377\377\377\15\377\377\377"
+ "\16\377\377\377\14\377\377\377\13\377\377\377\12\377\377\377\10\377\377\377"
+ "\7\377\377\377\7\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5"
+ "\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\4\377"
+ "\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\2\377\377"
+ "\377\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377"
+ "\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377"
+ "\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\2\377\377\377\2\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377"
+ "\377\5\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377"
+ "\11\377\377\377\13\377\377\377\13\377\377\377\11\377\377\377\7\377\377\377"
+ "\5\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\4"
+ "\377\377\377\6\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377\11"
+ "\377\377\377\11\377\377\377\12\377\377\377\12\377\377\377\13\377\377\377"
+ "\14\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377"
+ "\14\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377\14\377\377\377"
+ "\15\377\377\377\15\377\377\377\16\377\377\377\14\377\377\377\13\377\377\377"
+ "\12\377\377\377\11\377\377\377\10\377\377\377\7\377\377\377\10\377\377\377"
+ "\11\377\377\377\12\377\377\377\13\377\377\377\14\377\377\377\14\377\377\377"
+ "\14\377\377\377\13\377\377\377\11\377\377\377\11\377\377\377\7\377\377\377"
+ "\7\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4"
+ "\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377"
+ "\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5"
+ "\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\11\377\377\377\12"
+ "\377\377\377\12\377\377\377\10\377\377\377\6\377\377\377\4\377\377\377\2"
+ "\377\377\377\1\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\6\377"
+ "\377\377\10\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\11\377"
+ "\377\377\11\377\377\377\12\377\377\377\13\377\377\377\13\377\377\377\13\377"
+ "\377\377\13\377\377\377\13\377\377\377\13\377\377\377\13\377\377\377\13\377"
+ "\377\377\13\377\377\377\13\377\377\377\14\377\377\377\14\377\377\377\14\377"
+ "\377\377\15\377\377\377\14\377\377\377\13\377\377\377\12\377\377\377\11\377"
+ "\377\377\10\377\377\377\7\377\377\377\7\377\377\377\10\377\377\377\11\377"
+ "\377\377\11\377\377\377\12\377\377\377\13\377\377\377\13\377\377\377\13\377"
+ "\377\377\11\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377\6\377"
+ "\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377"
+ "\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377"
+ "\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\6\377\377\377"
+ "\7\377\377\377\10\377\377\377\11\377\377\377\12\377\377\377\10\377\377\377"
+ "\6\377\377\377\4\377\377\377\3\377\377\377\1\377\377\377\1\377\377\377\2"
+ "\377\377\377\3\377\377\377\4\377\377\377\5\377\377\377\7\377\377\377\7\377"
+ "\377\377\7\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377\12\377"
+ "\377\377\12\377\377\377\12\377\377\377\12\377\377\377\13\377\377\377\13\377"
+ "\377\377\13\377\377\377\13\377\377\377\12\377\377\377\12\377\377\377\12\377"
+ "\377\377\13\377\377\377\13\377\377\377\14\377\377\377\14\377\377\377\14\377"
+ "\377\377\13\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377\7\377"
+ "\377\377\6\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\11\377"
+ "\377\377\11\377\377\377\12\377\377\377\12\377\377\377\11\377\377\377\10\377"
+ "\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\4\377\377"
+ "\377\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377"
+ "\377\377\5\377\377\377\6\377\377\377\6\377\377\377\10\377\377\377\11\377"
+ "\377\377\11\377\377\377\7\377\377\377\5\377\377\377\4\377\377\377\2\377\377"
+ "\377\1\377\377\377\1\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377"
+ "\5\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\10\377\377\377\10"
+ "\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377"
+ "\12\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377\11\377\377\377"
+ "\11\377\377\377\11\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377"
+ "\13\377\377\377\13\377\377\377\13\377\377\377\12\377\377\377\12\377\377\377"
+ "\10\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377"
+ "\6\377\377\377\7\377\377\377\10\377\377\377\10\377\377\377\11\377\377\377"
+ "\11\377\377\377\11\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377"
+ "\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\7"
+ "\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377\4\377\377\377\3\377"
+ "\377\377\2\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\3\377\377"
+ "\377\4\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377"
+ "\7\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377"
+ "\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377"
+ "\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377"
+ "\11\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377\12\377\377\377"
+ "\11\377\377\377\10\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377"
+ "\5\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\10"
+ "\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\6"
+ "\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\3\377\377\377\3\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\5\377\377"
+ "\377\6\377\377\377\6\377\377\377\7\377\377\377\10\377\377\377\6\377\377\377"
+ "\5\377\377\377\4\377\377\377\3\377\377\377\2\377\377\377\1\377\377\377\1"
+ "\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\5\377\377\377\6\377"
+ "\377\377\6\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377"
+ "\377\10\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\11\377\377"
+ "\377\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377\377\11\377\377"
+ "\377\10\377\377\377\10\377\377\377\11\377\377\377\11\377\377\377\11\377\377"
+ "\377\11\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377\7\377\377"
+ "\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377"
+ "\6\377\377\377\6\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\10"
+ "\377\377\377\7\377\377\377\6\377\377\377\5\377\377\377\4\377\377\377\4\377"
+ "\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377"
+ "\5\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\5"
+ "\377\377\377\4\377\377\377\3\377\377\377\2\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\5\377\377"
+ "\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377"
+ "\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\10\377\377\377\10"
+ "\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377"
+ "\10\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377"
+ "\11\377\377\377\11\377\377\377\11\377\377\377\10\377\377\377\10\377\377\377"
+ "\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4"
+ "\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6\377"
+ "\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\4\377\377"
+ "\377\4\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\4\377"
+ "\377\377\4\377\377\377\5\377\377\377\6\377\377\377\7\377\377\377\6\377\377"
+ "\377\5\377\377\377\3\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\5"
+ "\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377"
+ "\377\377\6\377\377\377\7\377\377\377\6\377\377\377\7\377\377\377\7\377\377"
+ "\377\10\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377"
+ "\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\10"
+ "\377\377\377\10\377\377\377\10\377\377\377\10\377\377\377\7\377\377\377\7"
+ "\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377"
+ "\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377"
+ "\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377"
+ "\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377"
+ "\5\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\4\377\377\377\3"
+ "\377\377\377\2\377\377\377\1\0\0\0\0\377\377\377\1\377\377\377\1\377\377"
+ "\377\2\377\377\377\2\377\377\377\3\377\377\377\4\377\377\377\5\377\377\377"
+ "\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6"
+ "\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377"
+ "\377\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377"
+ "\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377\7\377\377\377"
+ "\7\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377\6\377\377\377\5"
+ "\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\4\377\377\377\4\377"
+ "\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377"
+ "\377\5\377\377\377\5\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377"
+ "\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377"
+ "\377\377\3\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5\377\377"
+ "\377\4\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\1\0\0\0\0\377"
+ "\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377"
+ "\5\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6"
+ "\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377"
+ "\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377"
+ "\377\6\377\377\377\6\377\377\377\7\377\377\377\7\377\377\377\6\377\377\377"
+ "\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377"
+ "\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377"
+ "\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\5\377"
+ "\377\377\4\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\1\377\377"
+ "\377\1\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\3\377"
+ "\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5\377\377"
+ "\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377"
+ "\6\377\377\377\5\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6"
+ "\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\5\377\377\377\5\377"
+ "\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377\377\6\377\377"
+ "\377\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377"
+ "\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377"
+ "\377\377\3\377\377\377\3\377\377\377\2\377\377\377\1\377\377\377\1\0\0\0"
+ "\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377"
+ "\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\5\377\377\377\5\377\377\377\5"
+ "\377\377\377\5\377\377\377\5\377\377\377\6\377\377\377\5\377\377\377\5\377"
+ "\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377"
+ "\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377"
+ "\6\377\377\377\5\377\377\377\5\377\377\377\4\377\377\377\4\377\377\377\3"
+ "\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377"
+ "\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377"
+ "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377\4\377\377\377\3\377"
+ "\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\3\377\377"
+ "\377\3\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5"
+ "\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377"
+ "\377\377\5\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\5\377\377"
+ "\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377\5\377\377\377"
+ "\5\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377"
+ "\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\3\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4"
+ "\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377"
+ "\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\4\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4"
+ "\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377"
+ "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\4\377\377"
+ "\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377\4\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3"
+ "\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\3\377\377\377\3\377\377\377\3\377"
+ "\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377\377\3\377\377"
+ "\377\3\377\377\377\3\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377"
+ "\3\377\377\377\3\377\377\377\2\377\377\377\3\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\3\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377"
+ "\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377"
+ "\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\2"
+ "\377\377\377\2\377\377\377\2\377\377\377\2\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1"
+ "\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377"
+ "\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377"
+ "\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377\1\377\377\377"
+ "\1\377\377\377\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\1\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+};
diff --git a/src/wizard.c b/src/wizard.c
new file mode 100755
index 0000000..d26340b
--- /dev/null
+++ b/src/wizard.c
@@ -0,0 +1,1186 @@
+/*
+ * Compiz wizard particle system plugin
+ *
+ * wizard.c
+ *
+ * Written by : Sebastian Kuhlen
+ * E-mail : DiCon@tankwar.de
+ *
+ * This plugin and parts of its code have been inspired by the showmouse plugin
+ * by Dennis Kasprzyk
+ *
+ * This program is free software; you can 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.
+ *
+ */
+
+#include <math.h>
+#include <string.h>
+
+#include "wizard.h"
+
+static void
+initParticles (int hardLimit, int softLimit, ParticleSystem * ps)
+{
+ if (ps->particles)
+ free (ps->particles);
+ ps->particles = calloc (hardLimit, sizeof (Particle));
+ ps->tex = 0;
+ ps->hardLimit = hardLimit;
+ ps->softLimit = softLimit;
+ ps->active = false;
+ ps->lastCount = 0;
+
+ // Initialize cache
+ ps->vertices_cache = NULL;
+ ps->colors_cache = NULL;
+ ps->coords_cache = NULL;
+ ps->dcolors_cache = NULL;
+ ps->vertex_cache_count = 0;
+ ps->color_cache_count = 0;
+ ps->coords_cache_count = 0;
+ ps->dcolors_cache_count = 0;
+
+ Particle *part = ps->particles;
+ int i;
+ for (i = 0; i < hardLimit; i++, part++)
+ part->t = 0.0f;
+}
+
+void
+WizardScreen::loadGPoints (ParticleSystem *ps)
+{
+ if (ps->g)
+ free (ps->g);
+
+ int i;
+ GPoint *gi;
+ CompListValue *clv = optionGetGStrength ();
+ ps->ng = clv->nValue;
+ ps->g = calloc (ps->ng, sizeof (GPoint));
+
+ gi = ps->g;
+ for (i = 0; i < ps->ng; i++, gi++)
+ gi->strength = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetGPosx ();
+ gi = ps->g;
+ for (i = 0; i < ps->ng; i++, gi++)
+ gi->x = (float)clv->value[i].i;
+
+ clv = optionGetGPosy ();
+ gi = ps->g;
+ for (i = 0; i < ps->ng; i++, gi++)
+ gi->y = (float)clv->value[i].i;
+
+ clv = optionGetGSpeed ();
+ gi = ps->g;
+ for (i = 0; i < ps->ng; i++, gi++)
+ gi->espeed = (float)clv->value[i].i / 100.;
+
+ clv = optionGetGAngle ();
+ gi = ps->g;
+ for (i = 0; i < ps->ng; i++, gi++)
+ gi->eangle = (float)clv->value[i].i / 180.*M_PI;
+
+ clv = optionGetGMovement ();
+ gi = ps->g;
+ for (i = 0; i < ps->ng; i++, gi++)
+ gi->movement = clv->value[i].i;
+}
+
+void
+WizardScreen::loadEmitters (ParticleSystem *ps)
+{
+ if (ps->e)
+ free (ps->e);
+
+ int i;
+ Emitter *ei;
+ CompListValue *clv = optionGetEActive ();
+ ps->ne = clv->nValue;
+ ps->e = calloc (ps->ne, sizeof (Emitter));
+
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->set_active = ei->active = clv->value[i].b;
+
+ clv = optionGetETrigger ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->trigger = clv->value[i].i;
+
+ clv = optionGetEPosx ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->x = (float)clv->value[i].i;
+
+ clv = optionGetEPosy ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->y = (float)clv->value[i].i;
+
+ clv = optionGetESpeed ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->espeed = (float)clv->value[i].i / 100.;
+
+ clv = optionGetEAngle ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->eangle = (float)clv->value[i].i / 180.*M_PI;
+
+ clv = optionGetEMovement ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->movement = clv->value[i].i;
+
+ clv = optionGetECount ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->count = (float)clv->value[i].i;
+
+ clv = optionGetEH ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->h = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetEDh ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dh = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetEL ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->l = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetEDl ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dl = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetEA ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->a = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetEDa ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->da = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetEDx ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dx = (float)clv->value[i].i;
+
+ clv = optionGetEDy ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dy = (float)clv->value[i].i;
+
+ clv = optionGetEDcirc ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dcirc = (float)clv->value[i].i;
+
+ clv = optionGetEVx ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->vx = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetEVy ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->vy = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetEVt ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->vt = (float)clv->value[i].i / 10000.;
+
+ clv = optionGetEVphi ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->vphi = (float)clv->value[i].i / 10000.;
+
+ clv = optionGetEDvx ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dvx = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetEDvy ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dvy = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetEDvcirc ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dvcirc = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetEDvt ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dvt = (float)clv->value[i].i / 10000.;
+
+ clv = optionGetEDvphi ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dvphi = (float)clv->value[i].i / 10000.;
+
+ clv = optionGetES ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->s = (float)clv->value[i].i;
+
+ clv = optionGetEDs ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->ds = (float)clv->value[i].i;
+
+ clv = optionGetESnew ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->snew = (float)clv->value[i].i;
+
+ clv = optionGetEDsnew ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dsnew = (float)clv->value[i].i;
+
+ clv = optionGetEG ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->g = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetEDg ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dg = (float)clv->value[i].i / 1000.;
+
+ clv = optionGetEGp ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->gp = (float)clv->value[i].i / 10000.;
+}
+
+void
+WizardScreen::drawParticles (ParticleSystem * ps)
+{
+ glPushMatrix ();
+
+ glEnable (GL_BLEND);
+ if (ps->tex)
+ {
+ glBindTexture (GL_TEXTURE_2D, ps->tex);
+ glEnable (GL_TEXTURE_2D);
+ }
+ glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+
+ /* Check that the cache is big enough */
+ if (ps->hardLimit > ps->vertex_cache_count)
+ {
+ ps->vertices_cache =
+ realloc (ps->vertices_cache,
+ ps->hardLimit * 4 * 3 * sizeof (GLfloat));
+ ps->vertex_cache_count = ps->hardLimit;
+ }
+
+ if (ps->hardLimit > ps->coords_cache_count)
+ {
+ ps->coords_cache =
+ realloc (ps->coords_cache,
+ ps->hardLimit * 4 * 2 * sizeof (GLfloat));
+ ps->coords_cache_count = ps->hardLimit;
+ }
+
+ if (ps->hardLimit > ps->color_cache_count)
+ {
+ ps->colors_cache =
+ realloc (ps->colors_cache,
+ ps->hardLimit * 4 * 4 * sizeof (GLfloat));
+ ps->color_cache_count = ps->hardLimit;
+ }
+
+ if (ps->darken > 0)
+ {
+ if (ps->dcolors_cache_count < ps->hardLimit)
+ {
+ ps->dcolors_cache =
+ realloc (ps->dcolors_cache,
+ ps->hardLimit * 4 * 4 * sizeof (GLfloat));
+ ps->dcolors_cache_count = ps->hardLimit;
+ }
+ }
+
+ GLfloat *dcolors = ps->dcolors_cache;
+ GLfloat *vertices = ps->vertices_cache;
+ GLfloat *coords = ps->coords_cache;
+ GLfloat *colors = ps->colors_cache;
+
+ int cornersSize = sizeof (GLfloat) * 8;
+ int colorSize = sizeof (GLfloat) * 4;
+
+ GLfloat cornerCoords[8] = {0.0, 0.0,
+ 0.0, 1.0,
+ 1.0, 1.0,
+ 1.0, 0.0};
+
+ int numActive = 0;
+
+ Particle *part = ps->particles;
+ int i;
+ for (i = 0; i < ps->hardLimit; i++, part++)
+ {
+ if (part->t > 0.0f)
+ {
+ numActive += 4;
+
+ float cOff = part->s / 2.; //Corner offset from center
+
+ if (part->t > ps->tnew) //New particles start larger
+ cOff += (part->snew - part->s) * (part->t - ps->tnew)
+ / (1. - ps->tnew) / 2.;
+ else if (part->t < ps->told) //Old particles shrink
+ cOff -= part->s * (ps->told - part->t) / ps->told / 2.;
+
+ //Offsets after rotation of Texture
+ float offA = cOff * (cos (part->phi) - sin (part->phi));
+ float offB = cOff * (cos (part->phi) + sin (part->phi));
+
+ vertices[0] = part->x - offB;
+ vertices[1] = part->y - offA;
+ vertices[2] = 0;
+
+ vertices[3] = part->x - offA;
+ vertices[4] = part->y + offB;
+ vertices[5] = 0;
+
+ vertices[6] = part->x + offB;
+ vertices[7] = part->y + offA;
+ vertices[8] = 0;
+
+ vertices[9] = part->x + offA;
+ vertices[10] = part->y - offB;
+ vertices[11] = 0;
+
+ vertices += 12;
+
+ memcpy (coords, cornerCoords, cornersSize);
+
+ coords += 8;
+
+ colors[0] = part->c[0];
+ colors[1] = part->c[1];
+ colors[2] = part->c[2];
+
+ if (part->t > ps->tnew) //New particles start at a == 1
+ colors[3] = part->a + (1. - part->a) * (part->t - ps->tnew)
+ / (1. - ps->tnew);
+ else if (part->t < ps->told) //Old particles fade to a = 0
+ colors[3] = part->a * part->t / ps->told;
+ else //The others have their own a
+ colors[3] = part->a;
+
+ memcpy (colors + 4, colors, colorSize);
+ memcpy (colors + 8, colors, colorSize);
+ memcpy (colors + 12, colors, colorSize);
+
+ colors += 16;
+
+ if (ps->darken > 0)
+ {
+ dcolors[0] = colors[0];
+ dcolors[1] = colors[1];
+ dcolors[2] = colors[2];
+ dcolors[3] = colors[3] * ps->darken;
+ memcpy (dcolors + 4, dcolors, colorSize);
+ memcpy (dcolors + 8, dcolors, colorSize);
+ memcpy (dcolors + 12, dcolors, colorSize);
+
+ dcolors += 16;
+ }
+ }
+ }
+
+ glEnableClientState (GL_COLOR_ARRAY);
+
+ glTexCoordPointer (2, GL_FLOAT, 2 * sizeof (GLfloat), ps->coords_cache);
+ glVertexPointer (3, GL_FLOAT, 3 * sizeof (GLfloat), ps->vertices_cache);
+
+ // darken the background
+ if (ps->darken > 0)
+ {
+ glBlendFunc (GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
+ glColorPointer (4, GL_FLOAT, 4 * sizeof (GLfloat), ps->dcolors_cache);
+ glDrawArrays (GL_QUADS, 0, numActive);
+ }
+ // draw particles
+ glBlendFunc (GL_SRC_ALPHA, ps->blendMode);
+
+ glColorPointer (4, GL_FLOAT, 4 * sizeof (GLfloat), ps->colors_cache);
+
+ glDrawArrays (GL_QUADS, 0, numActive);
+
+ glDisableClientState (GL_COLOR_ARRAY);
+
+ glPopMatrix ();
+ glColor4usv (defaultColor);
+ screenTexEnvMode (s, GL_REPLACE);
+ glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+ glDisable (GL_TEXTURE_2D);
+ glDisable (GL_BLEND);
+}
+
+static void
+updateParticles (ParticleSystem * ps, float time)
+{
+ int i, j;
+ int newCount = 0;
+ Particle *part;
+ GPoint *gi;
+ float gdist, gangle;
+ ps->active = false;
+
+ part = ps->particles;
+ for (i = 0; i < ps->hardLimit; i++, part++)
+ {
+ if (part->t > 0.0f)
+ {
+ // move particle
+ part->x += part->vx * time;
+ part->y += part->vy * time;
+
+ // Rotation
+ part->phi += part->vphi*time;
+
+ //Aging of particles
+ part->t += part->vt * time;
+ //Additional aging of particles increases if softLimit is exceeded
+ if (ps->lastCount > ps->softLimit)
+ part->t += part->vt * time * (ps->lastCount - ps->softLimit)
+ / (ps->hardLimit - ps->softLimit);
+
+ //Global gravity
+ part->vx += ps->gx * time;
+ part->vy += ps->gy * time;
+
+ //GPoint gravity
+ gi = ps->g;
+ for (j = 0; j < ps->ng; j++, gi++)
+ {
+ if (gi->strength != 0)
+ {
+ gdist = sqrt ((part->x-gi->x)*(part->x-gi->x)
+ + (part->y-gi->y)*(part->y-gi->y));
+ if (gdist > 1)
+ {
+ gangle = atan2 (gi->y-part->y, gi->x-part->x);
+ part->vx += gi->strength / gdist * cos (gangle) * time;
+ part->vy += gi->strength / gdist * sin (gangle) * time;
+ }
+ }
+ }
+
+ ps->active = true;
+ newCount++;
+ }
+ }
+ ps->lastCount = newCount;
+
+ //Particle gravity
+ Particle *gpart;
+ part = ps->particles;
+ for (i = 0; i < ps->hardLimit; i++, part++)
+ {
+ if (part->t > 0.0f && part->g != 0)
+ {
+ gpart = ps->particles;
+ for (j = 0; j < ps->hardLimit; j++, gpart++)
+ {
+ if (gpart->t > 0.0f)
+ {
+ gdist = sqrt ((part->x-gpart->x)*(part->x-gpart->x)
+ + (part->y-gpart->y)*(part->y-gpart->y));
+ if (gdist > 1)
+ {
+ gangle = atan2 (part->y-gpart->y, part->x-gpart->x);
+ gpart->vx += part->g/gdist* cos (gangle) * part->t*time;
+ gpart->vy += part->g/gdist* sin (gangle) * part->t*time;
+ }
+ }
+ }
+ }
+ }
+}
+
+static void
+finiParticles (ParticleSystem * ps)
+{
+ free (ps->e);
+ free (ps->particles);
+ if (ps->tex)
+ glDeleteTextures (1, &ps->tex);
+
+ if (ps->vertices_cache)
+ free (ps->vertices_cache);
+ if (ps->colors_cache)
+ free (ps->colors_cache);
+ if (ps->coords_cache)
+ free (ps->coords_cache);
+ if (ps->dcolors_cache)
+ free (ps->dcolors_cache);
+}
+
+static void
+genNewParticles (ParticleSystem *ps, Emitter *e)
+{
+
+ float q, p, t, h, l;
+ int count = e->count;
+
+ Particle *part = ps->particles;
+ int i, j;
+
+ for (i = 0; i < ps->hardLimit && count > 0; i++, part++)
+ {
+ if (part->t <= 0.0f)
+ {
+ //Position
+ part->x = rRange (e->x, e->dx); // X Position
+ part->y = rRange (e->y, e->dy); // Y Position
+ if ((q = rRange (e->dcirc/2.,e->dcirc/2.)) > 0)
+ {
+ p = rRange (0, M_PI);
+ part->x += q * cos (p);
+ part->y += q * sin (p);
+ }
+
+ //Speed
+ part->vx = rRange (e->vx, e->dvx); // X Speed
+ part->vy = rRange (e->vy, e->dvy); // Y Speed
+ if ((q = rRange (e->dvcirc/2.,e->dvcirc/2.)) > 0)
+ {
+ p = rRange (0, M_PI);
+ part->vx += q * cos (p);
+ part->vy += q * sin (p);
+ }
+ part->vt = rRange (e->vt, e->dvt); // Aging speed
+ if (part->vt > -0.0001)
+ part->vt = -0.0001;
+
+ //Size, Gravity and Rotation
+ part->s = rRange (e->s, e->ds); // Particle size
+ part->snew = rRange (e->snew, e->dsnew); // Particle start size
+ if (e->gp > (float)(random () & 0xffff) / 65535.)
+ part->g = rRange (e->g, e->dg); // Particle gravity
+ else
+ part->g = 0.;
+ part->phi = rRange (0, M_PI); // Random orientation
+ part->vphi = rRange (e->vphi, e->dvphi); // Rotation speed
+
+ //Alpha
+ part->a = rRange (e->a, e->da); // Alpha
+ if (part->a > 1)
+ part->a = 1.;
+ else if (part->a < 0)
+ part->a = 0.;
+
+ //HSL to RGB conversion from Wikipedia simplified by S = 1
+ h = rRange (e->h, e->dh); //Random hue within range
+ if (h < 0)
+ h += 1.;
+ else if (t > 1)
+ h -= 1.;
+ l = rRange (e->l, e->dl); //Random lightness ...
+ if (l > 1)
+ l = 1.;
+ else if (l < 0)
+ l = 0.;
+ q = e->l * 2;
+ if (q > 1)
+ q = 1.;
+ p = 2 * e->l - q;
+ for (j = 0; j < 3; j++)
+ {
+ t = h + (1-j)/3.;
+ if (t < 0)
+ t += 1.;
+ else if (t > 1)
+ t -= 1.;
+ if (t < 1/6.)
+ part->c[j] = p + ((q-p)*6*t);
+ else if (t < .5)
+ part->c[j] = q;
+ else if (t < 2/3.)
+ part->c[j] = p + ((q-p)*6*(2/3.-t));
+ else
+ part->c[j] = p;
+ }
+
+ // give new life
+ part->t = 1.;
+
+ ps->active = true;
+ count -= 1;
+ }
+ }
+}
+
+void
+WizardScreen::damageRegion ()
+{
+// int i;
+// Particle *p;
+// float cOff;
+ float x1, x2, y1, y2;
+
+ if (!ps)
+ return;
+
+ x1 = 0;
+ x2 = screen->width ();
+ y1 = 0;
+ y2 = screen->height ();
+
+ CompRegion r (x1, x2, y1, y2);
+
+/* // I don't know much about this system, but since this plugin is meant to be
+ // a heavy toy, which occupies almost the whole screen, calculating the
+ // exact region each time seems to waste more ressources than just using
+ // the whole screen.
+ x1 = s->width;
+ x2 = 0;
+ y1 = s->height;
+ y2 = 0;
+
+ p = ws->ps->particles;
+
+ for (i = 0; i < ws->ps->hardLimit; i++, p++)
+ {
+ cOff = p->s / 2;
+ if (p->t > ws->ps->tnew)
+ cOff += (p->snew - p->s) * (p->t - ws->ps->tnew)
+ / (1. - ws->ps->tnew) / 2.;
+ else if (p->t < ws->ps->told)
+ cOff -= p->s * (ws->ps->told - p->t) / ws->ps->told / 2.;
+
+ x1 = MIN (x1, p->x - cOff);
+ x2 = MAX (x2, p->x + cOff);
+ y1 = MIN (y1, p->y - cOff);
+ y2 = MAX (y2, p->y + cOff);
+ }
+
+
+ r.rects = &r.extents;
+ r.numRects = r.size = 1;
+
+ r.extents.x1 = floor (x1);
+ r.extents.x2 = ceil (x2);
+ r.extents.y1 = floor (y1);
+ r.extents.y2 = ceil (y2);
+*/
+ cScreen->damageRegion (r);
+}
+
+void
+WizardScreen::positionUpdate (const CompPoint &pos)
+{
+ mx = pos.x ();
+ my = pos.x ();
+
+ if (ps && active && ps->e)
+ {
+ Emitter *ei = ps->e;
+ GPoint *gi = ps->g;
+ int i;
+ for (i = 0; i < ps->ng; i++, gi++)
+ {
+ if (gi->movement == MOVEMENT_MOUSEPOSITION)
+ {
+ gi->x = x;
+ gi->y = y;
+ }
+ }
+
+ for (i = 0; i < ps->ne; i++, ei++)
+ {
+ if (ei->movement == MOVEMENT_MOUSEPOSITION)
+ {
+ ei->x = x;
+ ei->y = y;
+ }
+ if (ei->active && ei->trigger == TRIGGER_MOUSEMOVEMENT)
+ genNewParticles (ps, ei);
+ }
+ }
+}
+
+void
+WizardScreen::preparePaint (int time)
+{
+ if (active && !pollHandle.active ())
+ {
+// (*wd->mpFunc->getCurrentPosition) (s, &mx, &my); //???
+ pollHandle.start ();
+ }
+
+ if (active && !ps)
+ {
+ ps = (ParticleSystem*) calloc(1, sizeof (ParticleSystem));
+ if (!ps)
+ {
+ cScreen->preparePaint (time);
+ return;
+ }
+ loadGPoints (s, ps);
+ loadEmitters (s, ps);
+ initParticles (optionGetHardLimit (), optionGetSoftLimit (), ps);
+ ps->darken = optionGetDarken ();
+ ps->blendMode = (optionGetBlend ()) ? GL_ONE :
+ GL_ONE_MINUS_SRC_ALPHA;
+ ps->tnew = optionGetTnew ();
+ ps->told = optionGetTold ();
+ ps->gx = optionGetGx ();
+ ps->gy = optionGetGy ();
+
+ glGenTextures (1, &ps->tex);
+ glBindTexture (GL_TEXTURE_2D, ps->tex);
+
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 128, 128, 0,
+ GL_RGBA, GL_UNSIGNED_BYTE, particleTex);
+ glBindTexture (GL_TEXTURE_2D, 0);
+ }
+
+ if (ps && active && ps->e)
+ {
+ Emitter *ei = ps->e;
+ GPoint *gi = ps->g;
+ int i;
+
+ for (i = 0; i < ps->ng; i++, gi++)
+ {
+ if (gi->movement==MOVEMENT_BOUNCE || gi->movement==MOVEMENT_WRAP)
+ {
+ gi->x += gi->espeed * cos (gi->eangle) * time;
+ gi->y += gi->espeed * sin (gi->eangle) * time;
+ if (gi->x >= s->width)
+ {
+ if (gi->movement==MOVEMENT_BOUNCE)
+ {
+ gi->x = 2*s->width - gi->x - 1;
+ gi->eangle = M_PI - gi->eangle;
+ }
+ else if (gi->movement==MOVEMENT_WRAP)
+ gi->x -= s->width;
+ }
+ else if (gi->x < 0)
+ {
+ if (gi->movement==MOVEMENT_BOUNCE)
+ {
+ gi->x *= -1;
+ gi->eangle = M_PI - gi->eangle;
+ }
+ else if (gi->movement==MOVEMENT_WRAP)
+ gi->x += s->width;
+ }
+ if (gi->y >= s->height)
+ {
+ if (gi->movement==MOVEMENT_BOUNCE)
+ {
+ gi->y = 2*s->height - gi->y - 1;
+ gi->eangle *= -1;
+ }
+ else if (gi->movement==MOVEMENT_WRAP)
+ gi->y -= s->height;
+ }
+ else if (gi->y < 0)
+ {
+ if (gi->movement==MOVEMENT_BOUNCE)
+ {
+ gi->y *= -1;
+ gi->eangle *= -1;
+ }
+ else if (gi->movement==MOVEMENT_WRAP)
+ gi->y += s->height;
+ }
+ }
+ if (gi->movement==MOVEMENT_FOLLOWMOUSE
+ && (my!=gi->y||mx!=gi->x))
+ {
+ gi->eangle = atan2(my-gi->y, mx-gi->x);
+ gi->x += gi->espeed * cos(gi->eangle) * time;
+ gi->y += gi->espeed * sin(gi->eangle) * time;
+ }
+ }
+
+ for (i = 0; i < ps->ne; i++, ei++)
+ {
+ if (ei->movement==MOVEMENT_BOUNCE || ei->movement==MOVEMENT_WRAP)
+ {
+ ei->x += ei->espeed * cos (ei->eangle) * time;
+ ei->y += ei->espeed * sin (ei->eangle) * time;
+ if (ei->x >= s->width)
+ {
+ if (ei->movement==MOVEMENT_BOUNCE)
+ {
+ ei->x = 2*s->width - ei->x - 1;
+ ei->eangle = M_PI - ei->eangle;
+ }
+ else if (ei->movement==MOVEMENT_WRAP)
+ ei->x -= s->width;
+ }
+ else if (ei->x < 0)
+ {
+ if (ei->movement==MOVEMENT_BOUNCE)
+ {
+ ei->x *= -1;
+ ei->eangle = M_PI - ei->eangle;
+ }
+ else if (ei->movement==MOVEMENT_WRAP)
+ ei->x += s->width;
+ }
+ if (ei->y >= s->height)
+ {
+ if (ei->movement==MOVEMENT_BOUNCE)
+ {
+ ei->y = 2*s->height - ei->y - 1;
+ ei->eangle *= -1;
+ }
+ else if (ei->movement==MOVEMENT_WRAP)
+ ei->y -= s->height;
+ }
+ else if (ei->y < 0)
+ {
+ if (ei->movement==MOVEMENT_BOUNCE)
+ {
+ ei->y *= -1;
+ ei->eangle *= -1;
+ }
+ else if (ei->movement==MOVEMENT_WRAP)
+ ei->y += s->height;
+ }
+ }
+ if (ei->movement==MOVEMENT_FOLLOWMOUSE
+ && (my!=ei->y||mx!=ei->x))
+ {
+ ei->eangle = atan2 (my-ei->y, mx-ei->x);
+ ei->x += ei->espeed * cos (ei->eangle) * time;
+ ei->y += ei->espeed * sin (ei->eangle) * time;
+ }
+ if (ei->trigger == TRIGGER_RANDOMPERIOD
+ && ei->set_active && !((int)random ()&0xff))
+ ei->active = !ei->active;
+ if (ei->active && (
+ (ei->trigger == TRIGGER_PERSISTENT) ||
+ (ei->trigger == TRIGGER_RANDOMSHOT && !((int)random()&0xff)) ||
+ (ei->trigger == TRIGGER_RANDOMPERIOD)
+ ))
+ genNewParticles (ps, ei);
+ }
+ }
+
+ if (ps && ps->active)
+ {
+ updateParticles (ps, time);
+ damageRegion ();
+ }
+
+ cScreen->preparePaint (time);
+}
+
+void
+WizardScreen::donePaint ()
+{
+ if (active || (ps && ps->active))
+ cScreen->damageRegion ();
+
+ if (!active && pollHandle.active ())
+ pollHandle.stop ();
+
+ if (!active && ps && !ps->active)
+ {
+ finiParticles (ps);
+ free (ps);
+ ps = NULL;
+ }
+
+ cScreen->donePaint ();
+}
+
+static bool
+WizardScreen::glPaintOutput (const GLScreenPaintAttrib &sa,
+ const GLMatrix &transform,
+ const CompRegion &region,
+ CompOutput *output,
+ unsigned int mask)
+{
+ bool status;
+ GLMatrix sTransform;
+
+ status = gScreen->glPaintOutput (attrib, transform, region, output, mask);
+
+ if (!ps || !ps->active)
+ return status;
+
+ sTransform.reset ();
+// matrixGetIdentity (&sTransform);
+
+ sTransform.toScreenSpace (output, -DEFAULT_Z_CAMERA);
+// transformToScreenSpace (output, -DEFAULT_Z_CAMERA, &sTransform);
+
+ glPushMatrix ();
+ glLoadMatrixf (sTransform.getMatrix ());
+
+ drawParticles (ps);
+
+ glPopMatrix ();
+
+ glColor4usv (defaultColor);
+
+ return status;
+}
+
+bool
+WizardScreen::initiate ()
+{
+ active = true;
+ return true;
+}
+
+bool
+WizardScreen::terminate ()
+{
+ active = false;
+ return true;
+}
+
+WizardScreen::WizardScreen (CompScreen *screen) :
+ PluginClassHandler <WizardScreen, CompScreen> (screen),
+ cScreen (CompositeScreen::get (screen)),
+ gScreen (GLScreen::get (screen)),
+ active (false),
+ pollHandle (0),
+ ps (NULL);
+
+ return true;
+{
+ ScreenInterface::setHandler (screen, false);
+ CompositeScreenInterface::setHandler (cScreen, false);
+ GLScreenInterface::setHandler (gScreen, false);
+
+ poller.setCallback (boost::bind (&WizardScreen::positionUpdate, this, _1));
+
+ optionSetInitiateInitiate (boost::bind (&WizardScreen::initiate, this));
+ optionSetInitiateTerminate (boost::bind (&WizardScreen::terminate, this));
+}
+
+WizardScreen::~WizardScreen ()
+{
+ pollHandle.stop ();
+// if (ws->apollHandle)
+// (*wd->mpFunc->removePositionPolling) (s, ws->pollHandle);
+
+ if (ps && ps->active)
+ cScreen->damageScreen ();
+
+ //Free the pointer
+ free (ws);
+}
+
+bool
+WizardPluginVTable::init ()
+{
+ if (!CompPlugin::checkPluginABI ("core", CORE_ABIVERSION))
+ return false;
+ if (!CompPlugin::checkPluginABI ("composite", COMPIZ_COMPOSITE_ABI))
+ return false;
+ if (!CompPlugin::checkPluginABI ("opengl", COMPIZ_OPENGL_ABI))
+ return false;
+ if (!CompPlugin::checkPluginABI ("mousepoll", COMPIZ_MOUSEPOLL_ABI))
+ return false;
+
+ return true;
+}
+
+/*
+static bool
+wizardTerminate (CompDisplay *d,
+ CompAction *action,
+ CompActionState state,
+ CompOption *option,
+ int nOption)
+{
+ CompScreen *s;
+ Window xid;
+
+ xid = getIntOptionNamed (option, nOption, "root", 0);
+
+ s = findScreenAtDisplay (d, xid);
+ if ()
+ {
+ WIZARD_SCREEN ();
+
+ ws->active = false;
+ damageRegion ();
+
+ return true;
+ }
+ return false;
+}
+
+static bool
+wizardInitiate (CompDisplay *d,
+ CompAction *action,
+ CompActionState state,
+ CompOption *option,
+ int nOption)
+{
+ CompScreen *s;
+ Window xid;
+
+ xid = getIntOptionNamed (option, nOption, "root", 0);
+
+ s = findScreenAtDisplay (d, xid);
+ if ()
+ {
+ WIZARD_SCREEN ();
+
+ if (ws->active)
+ return wizardTerminate (d, action, state, option, nOption);
+
+ ws->active = true;
+
+ return true;
+ }
+ return false;
+}
+static bool
+wizardInitScreen (CompPlugin *p, CompScreen *s)
+{
+ WIZARD_DISPLAY (s->display);
+
+ WizardScreen *ws = (WizardScreen *) calloc (1, sizeof (WizardScreen) );
+
+ if (!ws)
+ return false;
+
+ s->base.privates[wd->screenPrivateIndex].ptr = ws;
+
+ WRAP (ws, s, paintOutput, wizardPaintOutput);
+ WRAP (ws, s, preparePaintScreen, wizardPreparePaintScreen);
+ WRAP (ws, s, donePaintScreen, wizardDonePaintScreen);
+
+ ws->active = false;
+
+ ws->pollHandle = 0;
+
+ ws->ps = NULL;
+
+ return true;
+}
+
+static void
+wizardFiniScreen (CompPlugin *p, CompScreen *s)
+{
+ WIZARD_SCREEN ();
+ WIZARD_DISPLAY (s->display);
+
+ //Restore the original function
+ UNWRAP (ws, s, paintOutput);
+ UNWRAP (ws, s, preparePaintScreen);
+ UNWRAP (ws, s, donePaintScreen);
+
+ if (ws->pollHandle)
+ (*wd->mpFunc->removePositionPolling) (s, ws->pollHandle);
+
+ if (ws->ps && ws->ps->active)
+ damageScreen ();
+
+ //Free the pointer
+ free (ws);
+}
+
+static bool
+wizardInitDisplay (CompPlugin *p, CompDisplay *d)
+{
+ //Generate a wizard display
+ WizardDisplay *wd;
+ int index;
+
+ if (!checkPluginABI ("core", CORE_ABIVERSION) ||
+ !checkPluginABI ("mousepoll", MOUSEPOLL_ABIVERSION))
+ return false;
+
+ if (!getPluginDisplayIndex (d, "mousepoll", &index))
+ return false;
+
+ wd = (WizardDisplay *) malloc (sizeof (WizardDisplay));
+
+ if (!wd)
+ return false;
+
+ //Allocate a private index
+ wd->screenPrivateIndex = allocateScreenPrivateIndex (d);
+
+ //Check if its valid
+ if (wd->screenPrivateIndex < 0)
+ {
+ //Its invalid so free memory and return
+ free (wd);
+ return false;
+ }
+
+ wd->mpFunc = d->base.privates[index].ptr;
+
+ optionSetInitiateInitiate (d, wizardInitiate);
+ optionSetInitiateTerminate (d, wizardTerminate);
+
+ //Record the display
+ d->base.privates[displayPrivateIndex].ptr = wd;
+ return true;
+}
+
+static void
+wizardFiniDisplay (CompPlugin *p, CompDisplay *d)
+{
+ WIZARD_DISPLAY (d);
+ //Free the private index
+ freeScreenPrivateIndex (d, wd->screenPrivateIndex);
+ //Free the pointer
+ free (wd);
+}
+
+
+
+static bool
+wizardInit (CompPlugin * p)
+{
+ displayPrivateIndex = allocateDisplayPrivateIndex ();
+
+ if (displayPrivateIndex < 0)
+ return false;
+
+ return true;
+}
+
+static void
+wizardFini (CompPlugin * p)
+{
+ if (displayPrivateIndex >= 0)
+ freeDisplayPrivateIndex (displayPrivateIndex);
+}
+
+*/
diff --git a/src/wizard.cpp b/src/wizard.cpp
new file mode 100755
index 0000000..5108855
--- /dev/null
+++ b/src/wizard.cpp
@@ -0,0 +1,997 @@
+/*
+ * Compiz wizard particle system plugin
+ *
+ * wizard.c
+ *
+ * Written by : Sebastian Kuhlen
+ * E-mail : DiCon@tankwar.de
+ *
+ * This plugin and parts of its code have been inspired by the showmouse plugin
+ * by Dennis Kasprzyk
+ *
+ * This program is free software; you can 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.
+ *
+ */
+
+#include <math.h>
+#include <string.h>
+
+#include "wizard.h"
+
+static void
+initParticles (int hardLimit, int softLimit, ParticleSystem * ps)
+{
+ if (ps->particles)
+ free (ps->particles);
+ ps->particles = (Particle*) calloc (hardLimit, sizeof (Particle));
+ ps->tex = 0;
+ ps->hardLimit = hardLimit;
+ ps->softLimit = softLimit;
+ ps->active = false;
+ ps->lastCount = 0;
+
+ // Initialize cache
+ ps->vertices_cache = NULL;
+ ps->colors_cache = NULL;
+ ps->coords_cache = NULL;
+ ps->dcolors_cache = NULL;
+ ps->vertex_cache_count = 0;
+ ps->color_cache_count = 0;
+ ps->coords_cache_count = 0;
+ ps->dcolors_cache_count = 0;
+
+ Particle *part = ps->particles;
+ int i;
+ for (i = 0; i < hardLimit; i++, part++)
+ part->t = 0.0f;
+}
+
+void
+WizardScreen::loadGPoints (ParticleSystem *ps)
+{
+ if (ps->g)
+ free (ps->g);
+
+ int i;
+ GPoint *gi;
+ CompOption::Value::Vector cvv = optionGetGStrength ();
+ ps->ng = cvv.size ();
+ ps->g = (GPoint*) calloc (ps->ng, sizeof (GPoint));
+
+ gi = ps->g;
+ for (i = 0; i < ps->ng; i++, gi++)
+ gi->strength = (float)cvv.at (i).i ()/ 1000.;
+
+ cvv = optionGetGPosx ();
+ gi = ps->g;
+ for (i = 0; i < ps->ng; i++, gi++)
+ gi->x = (float)cvv.at (i).i ();
+
+ cvv = optionGetGPosy ();
+ gi = ps->g;
+ for (i = 0; i < ps->ng; i++, gi++)
+ gi->y = (float)cvv.at (i).i ();
+
+ cvv = optionGetGSpeed ();
+ gi = ps->g;
+ for (i = 0; i < ps->ng; i++, gi++)
+ gi->espeed = (float)cvv.at (i).i () / 100.;
+
+ cvv = optionGetGAngle ();
+ gi = ps->g;
+ for (i = 0; i < ps->ng; i++, gi++)
+ gi->eangle = (float)cvv.at (i).i () / 180.*M_PI;
+
+ cvv = optionGetGMovement ();
+ gi = ps->g;
+ for (i = 0; i < ps->ng; i++, gi++)
+ gi->movement = cvv.at (i).i ();
+}
+
+void
+WizardScreen::loadEmitters (ParticleSystem *ps)
+{
+ if (ps->e)
+ free (ps->e);
+
+ int i;
+ Emitter *ei;
+ CompOption::Value::Vector cvv = optionGetEActive ();
+ ps->ne = cvv.size ();
+ ps->e = (Emitter*) calloc (ps->ne, sizeof (Emitter));
+
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->set_active = ei->active = cvv.at (i).b ();
+
+ cvv = optionGetETrigger ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->trigger = cvv.at (i).i ();
+
+ cvv = optionGetEPosx ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->x = (float)cvv.at (i).i ();
+
+ cvv = optionGetEPosy ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->y = (float)cvv.at (i).i ();
+
+ cvv = optionGetESpeed ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->espeed = (float)cvv.at (i).i () / 100.;
+
+ cvv = optionGetEAngle ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->eangle = (float)cvv.at (i).i () / 180.*M_PI;
+
+ cvv = optionGetEMovement ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->movement = cvv.at (i).i ();
+
+ cvv = optionGetECount ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->count = (float)cvv.at (i).i ();
+
+ cvv = optionGetEH ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->h = (float)cvv.at (i).i () / 1000.;
+
+ cvv = optionGetEDh ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dh = (float)cvv.at (i).i () / 1000.;
+
+ cvv = optionGetEL ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->l = (float)cvv.at (i).i () / 1000.;
+
+ cvv = optionGetEDl ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dl = (float)cvv.at (i).i () / 1000.;
+
+ cvv = optionGetEA ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->a = (float)cvv.at (i).i () / 1000.;
+
+ cvv = optionGetEDa ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->da = (float)cvv.at (i).i () / 1000.;
+
+ cvv = optionGetEDx ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dx = (float)cvv.at (i).i ();
+
+ cvv = optionGetEDy ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dy = (float)cvv.at (i).i ();
+
+ cvv = optionGetEDcirc ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dcirc = (float)cvv.at (i).i ();
+
+ cvv = optionGetEVx ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->vx = (float)cvv.at (i).i () / 1000.;
+
+ cvv = optionGetEVy ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->vy = (float)cvv.at (i).i () / 1000.;
+
+ cvv = optionGetEVt ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->vt = (float)cvv.at (i).i () / 10000.;
+
+ cvv = optionGetEVphi ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->vphi = (float)cvv.at (i).i () / 10000.;
+
+ cvv = optionGetEDvx ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dvx = (float)cvv.at (i).i () / 1000.;
+
+ cvv = optionGetEDvy ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dvy = (float)cvv.at (i).i () / 1000.;
+
+ cvv = optionGetEDvcirc ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dvcirc = (float)cvv.at (i).i () / 1000.;
+
+ cvv = optionGetEDvt ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dvt = (float)cvv.at (i).i () / 10000.;
+
+ cvv = optionGetEDvphi ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dvphi = (float)cvv.at (i).i () / 10000.;
+
+ cvv = optionGetES ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->s = (float)cvv.at (i).i ();
+
+ cvv = optionGetEDs ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->ds = (float)cvv.at (i).i ();
+
+ cvv = optionGetESnew ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->snew = (float)cvv.at (i).i ();
+
+ cvv = optionGetEDsnew ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dsnew = (float)cvv.at (i).i ();
+
+ cvv = optionGetEG ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->g = (float)cvv.at (i).i () / 1000.;
+
+ cvv = optionGetEDg ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->dg = (float)cvv.at (i).i () / 1000.;
+
+ cvv = optionGetEGp ();
+ ei = ps->e;
+ for (i = 0; i < ps->ne; i++, ei++)
+ ei->gp = (float)cvv.at (i).i () / 10000.;
+}
+
+void
+WizardScreen::drawParticles (ParticleSystem * ps)
+{
+ glPushMatrix ();
+
+ glEnable (GL_BLEND);
+ if (ps->tex)
+ {
+ glBindTexture (GL_TEXTURE_2D, ps->tex);
+ glEnable (GL_TEXTURE_2D);
+ }
+ glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+
+ /* Check that the cache is big enough */
+ if (ps->hardLimit > ps->vertex_cache_count)
+ {
+ ps->vertices_cache =
+ (GLfloat*) realloc (ps->vertices_cache,
+ ps->hardLimit * 4 * 3 * sizeof (GLfloat));
+ ps->vertex_cache_count = ps->hardLimit;
+ }
+
+ if (ps->hardLimit > ps->coords_cache_count)
+ {
+ ps->coords_cache =
+ (GLfloat*) realloc (ps->coords_cache,
+ ps->hardLimit * 4 * 2 * sizeof (GLfloat));
+ ps->coords_cache_count = ps->hardLimit;
+ }
+
+ if (ps->hardLimit > ps->color_cache_count)
+ {
+ ps->colors_cache =
+ (GLfloat*) realloc (ps->colors_cache,
+ ps->hardLimit * 4 * 4 * sizeof (GLfloat));
+ ps->color_cache_count = ps->hardLimit;
+ }
+
+ if (ps->darken > 0)
+ {
+ if (ps->dcolors_cache_count < ps->hardLimit)
+ {
+ ps->dcolors_cache =
+ (GLfloat*) realloc (ps->dcolors_cache,
+ ps->hardLimit * 4 * 4 * sizeof (GLfloat));
+ ps->dcolors_cache_count = ps->hardLimit;
+ }
+ }
+
+ GLfloat *dcolors = ps->dcolors_cache;
+ GLfloat *vertices = ps->vertices_cache;
+ GLfloat *coords = ps->coords_cache;
+ GLfloat *colors = ps->colors_cache;
+
+ int cornersSize = sizeof (GLfloat) * 8;
+ int colorSize = sizeof (GLfloat) * 4;
+
+ GLfloat cornerCoords[8] = {0.0, 0.0,
+ 0.0, 1.0,
+ 1.0, 1.0,
+ 1.0, 0.0};
+
+ int numActive = 0;
+
+ Particle *part = ps->particles;
+ int i;
+ for (i = 0; i < ps->hardLimit; i++, part++)
+ {
+ if (part->t > 0.0f)
+ {
+ numActive += 4;
+
+ float cOff = part->s / 2.; //Corner offset from center
+
+ if (part->t > ps->tnew) //New particles start larger
+ cOff += (part->snew - part->s) * (part->t - ps->tnew)
+ / (1. - ps->tnew) / 2.;
+ else if (part->t < ps->told) //Old particles shrink
+ cOff -= part->s * (ps->told - part->t) / ps->told / 2.;
+
+ //Offsets after rotation of Texture
+ float offA = cOff * (cos (part->phi) - sin (part->phi));
+ float offB = cOff * (cos (part->phi) + sin (part->phi));
+
+ vertices[0] = part->x - offB;
+ vertices[1] = part->y - offA;
+ vertices[2] = 0;
+
+ vertices[3] = part->x - offA;
+ vertices[4] = part->y + offB;
+ vertices[5] = 0;
+
+ vertices[6] = part->x + offB;
+ vertices[7] = part->y + offA;
+ vertices[8] = 0;
+
+ vertices[9] = part->x + offA;
+ vertices[10] = part->y - offB;
+ vertices[11] = 0;
+
+ vertices += 12;
+
+ memcpy (coords, cornerCoords, cornersSize);
+
+ coords += 8;
+
+ colors[0] = part->c[0];
+ colors[1] = part->c[1];
+ colors[2] = part->c[2];
+
+ if (part->t > ps->tnew) //New particles start at a == 1
+ colors[3] = part->a + (1. - part->a) * (part->t - ps->tnew)
+ / (1. - ps->tnew);
+ else if (part->t < ps->told) //Old particles fade to a = 0
+ colors[3] = part->a * part->t / ps->told;
+ else //The others have their own a
+ colors[3] = part->a;
+
+ memcpy (colors + 4, colors, colorSize);
+ memcpy (colors + 8, colors, colorSize);
+ memcpy (colors + 12, colors, colorSize);
+
+ colors += 16;
+
+ if (ps->darken > 0)
+ {
+ dcolors[0] = colors[0];
+ dcolors[1] = colors[1];
+ dcolors[2] = colors[2];
+ dcolors[3] = colors[3] * ps->darken;
+ memcpy (dcolors + 4, dcolors, colorSize);
+ memcpy (dcolors + 8, dcolors, colorSize);
+ memcpy (dcolors + 12, dcolors, colorSize);
+
+ dcolors += 16;
+ }
+ }
+ }
+
+ glEnableClientState (GL_COLOR_ARRAY);
+
+ glTexCoordPointer (2, GL_FLOAT, 2 * sizeof (GLfloat), ps->coords_cache);
+ glVertexPointer (3, GL_FLOAT, 3 * sizeof (GLfloat), ps->vertices_cache);
+
+ // darken the background
+ if (ps->darken > 0)
+ {
+ glBlendFunc (GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
+ glColorPointer (4, GL_FLOAT, 4 * sizeof (GLfloat), ps->dcolors_cache);
+ glDrawArrays (GL_QUADS, 0, numActive);
+ }
+ // draw particles
+ glBlendFunc (GL_SRC_ALPHA, ps->blendMode);
+
+ glColorPointer (4, GL_FLOAT, 4 * sizeof (GLfloat), ps->colors_cache);
+
+ glDrawArrays (GL_QUADS, 0, numActive);
+
+ glDisableClientState (GL_COLOR_ARRAY);
+
+ glPopMatrix ();
+ glColor4usv (defaultColor);
+ gScreen->setTexEnvMode (GL_REPLACE);
+ glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+ glDisable (GL_TEXTURE_2D);
+ glDisable (GL_BLEND);
+}
+
+static void
+updateParticles (ParticleSystem * ps, float time)
+{
+ int i, j;
+ int newCount = 0;
+ Particle *part;
+ GPoint *gi;
+ float gdist, gangle;
+ ps->active = false;
+
+ part = ps->particles;
+ for (i = 0; i < ps->hardLimit; i++, part++)
+ {
+ if (part->t > 0.0f)
+ {
+ // move particle
+ part->x += part->vx * time;
+ part->y += part->vy * time;
+
+ // Rotation
+ part->phi += part->vphi*time;
+
+ //Aging of particles
+ part->t += part->vt * time;
+ //Additional aging of particles increases if softLimit is exceeded
+ if (ps->lastCount > ps->softLimit)
+ part->t += part->vt * time * (ps->lastCount - ps->softLimit)
+ / (ps->hardLimit - ps->softLimit);
+
+ //Global gravity
+ part->vx += ps->gx * time;
+ part->vy += ps->gy * time;
+
+ //GPoint gravity
+ gi = ps->g;
+ for (j = 0; j < ps->ng; j++, gi++)
+ {
+ if (gi->strength != 0)
+ {
+ gdist = sqrt ((part->x-gi->x)*(part->x-gi->x)
+ + (part->y-gi->y)*(part->y-gi->y));
+ if (gdist > 1)
+ {
+ gangle = atan2 (gi->y-part->y, gi->x-part->x);
+ part->vx += gi->strength / gdist * cos (gangle) * time;
+ part->vy += gi->strength / gdist * sin (gangle) * time;
+ }
+ }
+ }
+
+ ps->active = true;
+ newCount++;
+ }
+ }
+ ps->lastCount = newCount;
+
+ //Particle gravity
+ Particle *gpart;
+ part = ps->particles;
+ for (i = 0; i < ps->hardLimit; i++, part++)
+ {
+ if (part->t > 0.0f && part->g != 0)
+ {
+ gpart = ps->particles;
+ for (j = 0; j < ps->hardLimit; j++, gpart++)
+ {
+ if (gpart->t > 0.0f)
+ {
+ gdist = sqrt ((part->x-gpart->x)*(part->x-gpart->x)
+ + (part->y-gpart->y)*(part->y-gpart->y));
+ if (gdist > 1)
+ {
+ gangle = atan2 (part->y-gpart->y, part->x-gpart->x);
+ gpart->vx += part->g/gdist* cos (gangle) * part->t*time;
+ gpart->vy += part->g/gdist* sin (gangle) * part->t*time;
+ }
+ }
+ }
+ }
+ }
+}
+
+static void
+finiParticles (ParticleSystem * ps)
+{
+ free (ps->e);
+ free (ps->particles);
+ if (ps->tex)
+ glDeleteTextures (1, &ps->tex);
+
+ if (ps->vertices_cache)
+ free (ps->vertices_cache);
+ if (ps->colors_cache)
+ free (ps->colors_cache);
+ if (ps->coords_cache)
+ free (ps->coords_cache);
+ if (ps->dcolors_cache)
+ free (ps->dcolors_cache);
+}
+
+static void
+genNewParticles (ParticleSystem *ps, Emitter *e)
+{
+
+ float q, p, t, h, l;
+ int count = e->count;
+
+ Particle *part = ps->particles;
+ int i, j;
+
+ for (i = 0; i < ps->hardLimit && count > 0; i++, part++)
+ {
+ if (part->t <= 0.0f)
+ {
+ //Position
+ part->x = rRange (e->x, e->dx); // X Position
+ part->y = rRange (e->y, e->dy); // Y Position
+ if ((q = rRange (e->dcirc/2.,e->dcirc/2.)) > 0)
+ {
+ p = rRange (0, M_PI);
+ part->x += q * cos (p);
+ part->y += q * sin (p);
+ }
+
+ //Speed
+ part->vx = rRange (e->vx, e->dvx); // X Speed
+ part->vy = rRange (e->vy, e->dvy); // Y Speed
+ if ((q = rRange (e->dvcirc/2.,e->dvcirc/2.)) > 0)
+ {
+ p = rRange (0, M_PI);
+ part->vx += q * cos (p);
+ part->vy += q * sin (p);
+ }
+ part->vt = rRange (e->vt, e->dvt); // Aging speed
+ if (part->vt > -0.0001)
+ part->vt = -0.0001;
+
+ //Size, Gravity and Rotation
+ part->s = rRange (e->s, e->ds); // Particle size
+ part->snew = rRange (e->snew, e->dsnew); // Particle start size
+ if (e->gp > (float)(random () & 0xffff) / 65535.)
+ part->g = rRange (e->g, e->dg); // Particle gravity
+ else
+ part->g = 0.;
+ part->phi = rRange (0, M_PI); // Random orientation
+ part->vphi = rRange (e->vphi, e->dvphi); // Rotation speed
+
+ //Alpha
+ part->a = rRange (e->a, e->da); // Alpha
+ if (part->a > 1)
+ part->a = 1.;
+ else if (part->a < 0)
+ part->a = 0.;
+
+ //HSL to RGB conversion from Wikipedia simplified by S = 1
+ h = rRange (e->h, e->dh); //Random hue within range
+ if (h < 0)
+ h += 1.;
+ else if (t > 1)
+ h -= 1.;
+ l = rRange (e->l, e->dl); //Random lightness ...
+ if (l > 1)
+ l = 1.;
+ else if (l < 0)
+ l = 0.;
+ q = e->l * 2;
+ if (q > 1)
+ q = 1.;
+ p = 2 * e->l - q;
+ for (j = 0; j < 3; j++)
+ {
+ t = h + (1-j)/3.;
+ if (t < 0)
+ t += 1.;
+ else if (t > 1)
+ t -= 1.;
+ if (t < 1/6.)
+ part->c[j] = p + ((q-p)*6*t);
+ else if (t < .5)
+ part->c[j] = q;
+ else if (t < 2/3.)
+ part->c[j] = p + ((q-p)*6*(2/3.-t));
+ else
+ part->c[j] = p;
+ }
+
+ // give new life
+ part->t = 1.;
+
+ ps->active = true;
+ count -= 1;
+ }
+ }
+}
+
+void
+WizardScreen::positionUpdate (const CompPoint &pos)
+{
+ mx = pos.x ();
+ my = pos.y ();
+
+ if (ps && active && ps->e)
+ {
+ Emitter *ei = ps->e;
+ GPoint *gi = ps->g;
+ int i;
+ for (i = 0; i < ps->ng; i++, gi++)
+ {
+ if (gi->movement == MOVEMENT_MOUSEPOSITION)
+ {
+ gi->x = pos.x ();
+ gi->y = pos.y ();
+ }
+ }
+
+ for (i = 0; i < ps->ne; i++, ei++)
+ {
+ if (ei->movement == MOVEMENT_MOUSEPOSITION)
+ {
+ ei->x = pos.x ();
+ ei->y = pos.y ();
+ }
+ if (ei->active && ei->trigger == TRIGGER_MOUSEMOVEMENT)
+ genNewParticles (ps, ei);
+ }
+ }
+}
+
+void
+WizardScreen::preparePaint (int time)
+{
+ if (active && !pollHandle.active ())
+ pollHandle.start ();
+
+ if (active && !ps)
+ {
+ ps = (ParticleSystem*) calloc(1, sizeof (ParticleSystem));
+ if (!ps)
+ {
+ cScreen->preparePaint (time);
+ return;
+ }
+ loadGPoints (ps);
+ loadEmitters (ps);
+ initParticles (optionGetHardLimit (), optionGetSoftLimit (), ps);
+ ps->darken = optionGetDarken ();
+ ps->blendMode = (optionGetBlend ()) ? GL_ONE :
+ GL_ONE_MINUS_SRC_ALPHA;
+ ps->tnew = optionGetTnew ();
+ ps->told = optionGetTold ();
+ ps->gx = optionGetGx ();
+ ps->gy = optionGetGy ();
+
+ glGenTextures (1, &ps->tex);
+ glBindTexture (GL_TEXTURE_2D, ps->tex);
+
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 128, 128, 0,
+ GL_RGBA, GL_UNSIGNED_BYTE, particleTex);
+ glBindTexture (GL_TEXTURE_2D, 0);
+ }
+
+ if (ps && active && ps->e)
+ {
+ Emitter *ei = ps->e;
+ GPoint *gi = ps->g;
+ int i;
+
+ for (i = 0; i < ps->ng; i++, gi++)
+ {
+ if (gi->movement==MOVEMENT_BOUNCE || gi->movement==MOVEMENT_WRAP)
+ {
+ gi->x += gi->espeed * cos (gi->eangle) * time;
+ gi->y += gi->espeed * sin (gi->eangle) * time;
+ if (gi->x >= screen->width ())
+ {
+ if (gi->movement==MOVEMENT_BOUNCE)
+ {
+ gi->x = 2*screen->width () - gi->x - 1;
+ gi->eangle = M_PI - gi->eangle;
+ }
+ else if (gi->movement==MOVEMENT_WRAP)
+ gi->x -= screen->width ();
+ }
+ else if (gi->x < 0)
+ {
+ if (gi->movement==MOVEMENT_BOUNCE)
+ {
+ gi->x *= -1;
+ gi->eangle = M_PI - gi->eangle;
+ }
+ else if (gi->movement==MOVEMENT_WRAP)
+ gi->x += screen->width ();
+ }
+ if (gi->y >= screen->height ())
+ {
+ if (gi->movement==MOVEMENT_BOUNCE)
+ {
+ gi->y = 2*screen->height () - gi->y - 1;
+ gi->eangle *= -1;
+ }
+ else if (gi->movement==MOVEMENT_WRAP)
+ gi->y -= screen->height ();
+ }
+ else if (gi->y < 0)
+ {
+ if (gi->movement==MOVEMENT_BOUNCE)
+ {
+ gi->y *= -1;
+ gi->eangle *= -1;
+ }
+ else if (gi->movement==MOVEMENT_WRAP)
+ gi->y += screen->height ();
+ }
+ }
+ if (gi->movement==MOVEMENT_FOLLOWMOUSE
+ && (my!=gi->y||mx!=gi->x))
+ {
+ gi->eangle = atan2(my-gi->y, mx-gi->x);
+ gi->x += gi->espeed * cos(gi->eangle) * time;
+ gi->y += gi->espeed * sin(gi->eangle) * time;
+ }
+ }
+
+ for (i = 0; i < ps->ne; i++, ei++)
+ {
+ if (ei->movement==MOVEMENT_BOUNCE || ei->movement==MOVEMENT_WRAP)
+ {
+ ei->x += ei->espeed * cos (ei->eangle) * time;
+ ei->y += ei->espeed * sin (ei->eangle) * time;
+ if (ei->x >= screen->width ())
+ {
+ if (ei->movement==MOVEMENT_BOUNCE)
+ {
+ ei->x = 2*screen->width () - ei->x - 1;
+ ei->eangle = M_PI - ei->eangle;
+ }
+ else if (ei->movement==MOVEMENT_WRAP)
+ ei->x -= screen->width ();
+ }
+ else if (ei->x < 0)
+ {
+ if (ei->movement==MOVEMENT_BOUNCE)
+ {
+ ei->x *= -1;
+ ei->eangle = M_PI - ei->eangle;
+ }
+ else if (ei->movement==MOVEMENT_WRAP)
+ ei->x += screen->width ();
+ }
+ if (ei->y >= screen->height ())
+ {
+ if (ei->movement==MOVEMENT_BOUNCE)
+ {
+ ei->y = 2*screen->height () - ei->y - 1;
+ ei->eangle *= -1;
+ }
+ else if (ei->movement==MOVEMENT_WRAP)
+ ei->y -= screen->height ();
+ }
+ else if (ei->y < 0)
+ {
+ if (ei->movement==MOVEMENT_BOUNCE)
+ {
+ ei->y *= -1;
+ ei->eangle *= -1;
+ }
+ else if (ei->movement==MOVEMENT_WRAP)
+ ei->y += screen->height ();
+ }
+ }
+ if (ei->movement==MOVEMENT_FOLLOWMOUSE
+ && (my!=ei->y||mx!=ei->x))
+ {
+ ei->eangle = atan2 (my-ei->y, mx-ei->x);
+ ei->x += ei->espeed * cos (ei->eangle) * time;
+ ei->y += ei->espeed * sin (ei->eangle) * time;
+ }
+ if (ei->trigger == TRIGGER_RANDOMPERIOD
+ && ei->set_active && !((int)random ()&0xff))
+ ei->active = !ei->active;
+ if (ei->active && (
+ (ei->trigger == TRIGGER_PERSISTENT) ||
+ (ei->trigger == TRIGGER_RANDOMSHOT && !((int)random()&0xff)) ||
+ (ei->trigger == TRIGGER_RANDOMPERIOD)
+ ))
+ genNewParticles (ps, ei);
+ }
+ }
+
+ if (ps && ps->active)
+ {
+ updateParticles (ps, time);
+ cScreen->damageScreen ();
+ }
+
+ cScreen->preparePaint (time);
+}
+
+void
+WizardScreen::donePaint ()
+{
+ if (active || (ps && ps->active))
+ cScreen->damageScreen ();
+
+ if (!active && pollHandle.active ())
+ pollHandle.stop ();
+
+ if (!active && ps && !ps->active)
+ {
+ finiParticles (ps);
+ free (ps);
+ ps = NULL;
+ }
+
+ cScreen->donePaint ();
+}
+
+bool
+WizardScreen::glPaintOutput (const GLScreenPaintAttrib &sa,
+ const GLMatrix &transform,
+ const CompRegion &region,
+ CompOutput *output,
+ unsigned int mask)
+{
+ bool status;
+ GLMatrix sTransform;
+
+ status = gScreen->glPaintOutput (sa, transform, region, output, mask);
+
+ if (!ps || !ps->active)
+ return status;
+
+ sTransform.reset ();
+
+ sTransform.toScreenSpace (output, -DEFAULT_Z_CAMERA);
+
+ glPushMatrix ();
+ glLoadMatrixf (sTransform.getMatrix ());
+
+ drawParticles (ps);
+
+ glPopMatrix ();
+
+ glColor4usv (defaultColor);
+
+ return status;
+}
+
+bool
+WizardScreen::toggle ()
+{
+ active = !active;
+ cScreen->preparePaintSetEnabled (this, active);
+ cScreen->donePaintSetEnabled (this, active);
+ gScreen->glPaintOutputSetEnabled (this, active);
+
+ cScreen->damageScreen ();
+ return true;
+}
+
+void
+WizardScreen::optionChanged (CompOption *opt,
+ WizardOptions::Options num)
+{
+ loadGPoints (ps);
+ loadEmitters (ps);
+}
+
+WizardScreen::WizardScreen (CompScreen *screen) :
+ PluginClassHandler <WizardScreen, CompScreen> (screen),
+ cScreen (CompositeScreen::get (screen)),
+ gScreen (GLScreen::get (screen)),
+ active (false),
+ ps (NULL)
+{
+ ScreenInterface::setHandler (screen, false);
+ CompositeScreenInterface::setHandler (cScreen, false);
+ GLScreenInterface::setHandler (gScreen, false);
+
+#define optionNotify(name) \
+ optionSet##name##Notify (boost::bind (&WizardScreen::optionChanged, \
+ this, _1, _2))
+
+ optionNotify (GStrength);
+ optionNotify (GPosx);
+ optionNotify (GPosy);
+ optionNotify (GSpeed);
+ optionNotify (GAngle);
+ optionNotify (GMovement);
+ optionNotify (EActive);
+ optionNotify (EName);
+ optionNotify (ETrigger);
+ optionNotify (EPosx);
+ optionNotify (EPosy);
+ optionNotify (ESpeed);
+ optionNotify (EAngle);
+ optionNotify (GMovement);
+ optionNotify (ECount);
+ optionNotify (EH);
+ optionNotify (EDh);
+ optionNotify (EL);
+ optionNotify (EDl);
+ optionNotify (EA);
+ optionNotify (EDa);
+ optionNotify (EDx);
+ optionNotify (EDy);
+ optionNotify (EDcirc);
+ optionNotify (EVx);
+ optionNotify (EVy);
+ optionNotify (EVt);
+ optionNotify (EVphi);
+ optionNotify (EDvx);
+ optionNotify (EDvy);
+ optionNotify (EDvcirc);
+ optionNotify (EDvt);
+ optionNotify (EDvphi);
+ optionNotify (ES);
+ optionNotify (EDs);
+ optionNotify (ESnew);
+ optionNotify (EDsnew);
+ optionNotify (EG);
+ optionNotify (EDg);
+ optionNotify (EGp);
+
+#undef optionNotify
+
+ pollHandle.setCallback (boost::bind (&WizardScreen::positionUpdate, this, _1));
+
+ optionSetToggleInitiate (boost::bind (&WizardScreen::toggle, this));
+}
+
+WizardScreen::~WizardScreen ()
+{
+ if (pollHandle.active ())
+ pollHandle.stop ();
+
+ if (ps && ps->active)
+ cScreen->damageScreen ();
+}
+
+bool
+WizardPluginVTable::init ()
+{
+ if (!CompPlugin::checkPluginABI ("core", CORE_ABIVERSION) ||
+ !CompPlugin::checkPluginABI ("composite", COMPIZ_COMPOSITE_ABI) ||
+ !CompPlugin::checkPluginABI ("opengl", COMPIZ_OPENGL_ABI) ||
+ !CompPlugin::checkPluginABI ("mousepoll", COMPIZ_MOUSEPOLL_ABI))
+ return false;
+
+ return true;
+}
diff --git a/wizard.xml.in b/wizard.xml.in
new file mode 100755
index 0000000..222cd68
--- /dev/null
+++ b/wizard.xml.in
@@ -0,0 +1,853 @@
+<?xml version="1.0"?>
+<compiz>
+ <plugin name="wizard" useBcop="true">
+ <_short>Wizard</_short>
+ <_long>Wastes resources to create fancy particle systems for wizard-wannabes :)</_long>
+ <category>Effects</category>
+ <deps>
+ <relation type="after">
+ <plugin>cube</plugin>
+ </relation>
+ <requirement>
+ <plugin>mousepoll</plugin>
+ </requirement>
+ </deps>
+ <options>
+ <group>
+ <_short>General</_short>
+ <option name="toggle" type="key">
+ <_short>Toggle</_short>
+ <_long>Toggle all particle effects.</_long>
+ <default>&lt;Super&gt;w</default>
+ </option>
+ </group>
+ <group>
+ <_short>Gravity</_short>
+ <subgroup>
+ <_short>Global gravity</_short>
+ <option name="gx" type="float">
+ <_short>Gravity X</_short>
+ <_long>Global horizontal gravity</_long>
+ <default>0.0</default>
+ <min>-0.01</min>
+ <max>0.01</max>
+ <precision>0.00001</precision>
+ </option>
+ <option name="gy" type="float">
+ <_short>Gravity Y</_short>
+ <_long>Global vertical gravity</_long>
+ <default>0.0005</default>
+ <min>-0.01</min>
+ <max>0.01</max>
+ <precision>0.00001</precision>
+ </option>
+ </subgroup>
+ <subgroup>
+ <_short>Point gravity sources</_short>
+ <option name="g_strength" type="list">
+ <_short>Strength</_short>
+ <_long>The strength of this gravity source. Use negative values for a repulsing effect.</_long>
+ <type>int</type>
+ <min>-1000</min>
+ <max>1000</max>
+ <default>
+ <value>200</value>
+ </default>
+ </option>
+ <option name="g_posx" type="list">
+ <_short>Position X</_short>
+ <_long>The horizontal position of this gravity source. May be ignored or used for initialisation, depending on the movement type.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>3000</max>
+ <default>
+ <value>0</value>
+ </default>
+ </option>
+ <option name="g_posy" type="list">
+ <_short>Position Y</_short>
+ <_long>The vertical position of this gravity source. May be ignored or used for initialisation, depending on the movement type.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>2000</max>
+ <default>
+ <value>0</value>
+ </default>
+ </option>
+ <option name="g_speed" type="list">
+ <_short>Speed</_short>
+ <_long>The speed of this gravity source. May be ignored or used for initialisation, depending on the movement type.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>100</value>
+ </default>
+ </option>
+ <option name="g_angle" type="list">
+ <_short>Angle</_short>
+ <_long>The angle for the movement of this gravity source. May be ignored or used for initialisation, depending on the movement type.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>360</max>
+ <default>
+ <value>20</value>
+ </default>
+ </option>
+ <option name="g_movement" type="list">
+ <_short>Movement Type</_short>
+ <_long>The movement type of this source: Fixed (not moving at all), Mouse Position (exactly on the core pointer), Follow Mouse (moving towards core pointer at set speed), Bounce (moving at constant speed, bouncing off the walls) or Wrap (moving at constant speed, jumping to the opposite side at a wall).</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>4</max>
+ <default>
+ <value>2</value>
+ </default>
+ <desc>
+ <value>0</value>
+ <_name>Mouse Position</_name>
+ </desc>
+ <desc>
+ <value>1</value>
+ <_name>Follow Mouse</_name>
+ </desc>
+ <desc>
+ <value>2</value>
+ <_name>Bounce</_name>
+ </desc>
+ <desc>
+ <value>3</value>
+ <_name>Wrap</_name>
+ </desc>
+ </option>
+ </subgroup>
+ </group>
+ <group>
+ <_short>Emitters</_short>
+ <option name="e_active" type="list">
+ <_short>Active</_short>
+ <_long>Since emitters have a lot of options, you can simply deactivate and name them instead of deleting them.</_long>
+ <type>bool</type>
+ <default>
+ <value>false</value>
+ <value>false</value>
+ <value>true</value>
+ <value>true</value>
+ <value>false</value>
+ <value>true</value>
+ <value>true</value>
+ <value>true</value>
+ <value>true</value>
+ <value>true</value>
+ </default>
+ </option>
+ <option name="e_name" type="list">
+ <_short>Name</_short>
+ <_long>Since emitters have a lot of options, you can simply deactivate and name them instead of deleting them.</_long>
+ <type>string</type>
+ <default>
+ <value>Fire Ball</value>
+ <value>Flame Pointer</value>
+ <value>Magic Pointer</value>
+ <value>Magic Rain (On/Off)</value>
+ <value>Magic Rain with Gravity Particles</value>
+ <value>Random Red Explosion</value>
+ <value>Random Yellow Explosion</value>
+ <value>Random Green Explosion</value>
+ <value>Random Blue Explosion</value>
+ <value>Random Purple Explosion</value>
+ </default>
+ </option>
+ <option name="e_trigger" type="list">
+ <_short>Trigger</_short>
+ <_long>The trigger to create particles: Persitent (create particles all the time), Mouse Movement (create particles when the mouse is being moved), Random Shot (a single particle burst once in a while), Random Period (randomly turning on and off particle production) or Notification (a single particle burst on notification events).</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>5</max>
+ <default>
+ <value>0</value>
+ <value>0</value>
+ <value>1</value>
+ <value>3</value>
+ <value>0</value>
+ <value>2</value>
+ <value>2</value>
+ <value>2</value>
+ <value>2</value>
+ <value>2</value>
+ </default>
+ <desc>
+ <value>0</value>
+ <_name>Persistent</_name>
+ </desc>
+ <desc>
+ <value>1</value>
+ <_name>Mouse Movement</_name>
+ </desc>
+ <desc>
+ <value>2</value>
+ <_name>Random Shot</_name>
+ </desc>
+ <desc>
+ <value>3</value>
+ <_name>Random Period</_name>
+ </desc>
+ </option>
+ <option name="e_posx" type="list">
+ <_short>Position X</_short>
+ <_long>The horizontal position of this emitter. May be ignored or used for initialisation, depending on the movement type.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>3000</max>
+ <default>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>1000</value>
+ <value>1000</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ </default>
+ </option>
+ <option name="e_posy" type="list">
+ <_short>Position Y</_short>
+ <_long>The vertical position of this emitter. May be ignored or used for initialisation, depending on the movement type.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>2000</max>
+ <default>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ </default>
+ </option>
+ <option name="e_speed" type="list">
+ <_short>Emitter Speed</_short>
+ <_long>The speed of this emitter. May be ignored or used for initialisation, depending on the movement type.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>100</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>1000</value>
+ <value>1000</value>
+ <value>1000</value>
+ <value>1000</value>
+ <value>1000</value>
+ </default>
+ </option>
+ <option name="e_angle" type="list">
+ <_short>Emitter Angle</_short>
+ <_long>The angle for the movement of this emitter. May be ignored or used for initialisation, depending on the movement type.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>360</max>
+ <default>
+ <value>326</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>13</value>
+ <value>33</value>
+ <value>53</value>
+ <value>73</value>
+ <value>93</value>
+ </default>
+ </option>
+ <option name="e_movement" type="list">
+ <_short>Movement Type</_short>
+ <_long>The movement type of this emitter: Mouse Position (exactly on the core pointer), Follow Mouse (moving towards core pointer at set speed), Bounce (moving at constant speed, bouncing off the walls) or Wrap (moving at constant speed, jumping to the opposite side at a wall).</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>3</max>
+ <default>
+ <value>2</value>
+ <value>0</value>
+ <value>0</value>
+ <value>3</value>
+ <value>3</value>
+ <value>3</value>
+ <value>3</value>
+ <value>3</value>
+ <value>3</value>
+ <value>3</value>
+ </default>
+ <desc>
+ <value>0</value>
+ <_name>Mouse Position</_name>
+ </desc>
+ <desc>
+ <value>1</value>
+ <_name>Follow Mouse</_name>
+ </desc>
+ <desc>
+ <value>2</value>
+ <_name>Bounce</_name>
+ </desc>
+ <desc>
+ <value>3</value>
+ <_name>Wrap</_name>
+ </desc>
+ </option>
+ <option name="e_count" type="list">
+ <_short>Particle count</_short>
+ <_long>The amount of particles generated each time this emitter is triggered.</_long>
+ <type>int</type>
+ <min>1</min>
+ <max>1000</max>
+ <default>
+ <value>50</value>
+ <value>20</value>
+ <value>40</value>
+ <value>20</value>
+ <value>20</value>
+ <value>200</value>
+ <value>200</value>
+ <value>200</value>
+ <value>200</value>
+ <value>200</value>
+ </default>
+ </option>
+ <option name="e_h" type="list">
+ <_short>Color hue</_short>
+ <_long>The color of the particles. This is hue like in HSL colors. It is the center of the range given below.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>67</value>
+ <value>100</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>167</value>
+ <value>333</value>
+ <value>667</value>
+ <value>833</value>
+ </default>
+ </option>
+ <option name="e_dh" type="list">
+ <_short>Color hue range</_short>
+ <_long>The color of the particles can be any value from the hue (given above) plus/minus this range. A range of 500 means any color.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>500</max>
+ <default>
+ <value>100</value>
+ <value>150</value>
+ <value>500</value>
+ <value>500</value>
+ <value>500</value>
+ <value>133</value>
+ <value>133</value>
+ <value>133</value>
+ <value>133</value>
+ <value>133</value>
+ </default>
+ </option>
+ <option name="e_l" type="list">
+ <_short>Color lightness</_short>
+ <_long>The color of the particles. This is lightness like in HSL colors. It is the center of the range given below.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>450</value>
+ <value>600</value>
+ <value>650</value>
+ <value>650</value>
+ <value>650</value>
+ <value>650</value>
+ <value>650</value>
+ <value>650</value>
+ <value>650</value>
+ <value>650</value>
+ </default>
+ </option>
+ <option name="e_dl" type="list">
+ <_short>Color lightness range</_short>
+ <_long>The color of the particles can be any value from the lightness (given above) plus/minus this range.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>250</value>
+ <value>100</value>
+ <value>150</value>
+ <value>150</value>
+ <value>150</value>
+ <value>150</value>
+ <value>150</value>
+ <value>150</value>
+ <value>150</value>
+ <value>150</value>
+ </default>
+ </option>
+ <option name="e_a" type="list">
+ <_short>Alpha</_short>
+ <_long>The alpha (opacity) of the particles. This is the center of the range given below.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>500</value>
+ <value>400</value>
+ <value>700</value>
+ <value>700</value>
+ <value>700</value>
+ <value>700</value>
+ <value>700</value>
+ <value>700</value>
+ <value>700</value>
+ <value>700</value>
+ </default>
+ </option>
+ <option name="e_da" type="list">
+ <_short>Alpha range</_short>
+ <_long>The alpha (opacity) of the particles can be any value from the alpha (given above) plus/minus this range.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>200</value>
+ <value>200</value>
+ <value>200</value>
+ <value>200</value>
+ <value>200</value>
+ <value>200</value>
+ <value>200</value>
+ <value>200</value>
+ <value>200</value>
+ <value>200</value>
+ </default>
+ </option>
+ <option name="e_dx" type="list">
+ <_short>X range</_short>
+ <_long>The horizontal range of the particles.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1500</max>
+ <default>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>1000</value>
+ <value>1000</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ </default>
+ </option>
+ <option name="e_dy" type="list">
+ <_short>Y range</_short>
+ <_long>The vertical range of the particles.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ </default>
+ </option>
+ <option name="e_dcirc" type="list">
+ <_short>Circular range</_short>
+ <_long>The circular range of the particles.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>30</value>
+ <value>5</value>
+ <value>20</value>
+ <value>0</value>
+ <value>0</value>
+ <value>5</value>
+ <value>5</value>
+ <value>5</value>
+ <value>5</value>
+ <value>5</value>
+ </default>
+ </option>
+ <option name="e_vx" type="list">
+ <_short>X speed</_short>
+ <_long>The horizontal speed of the particles.</_long>
+ <type>int</type>
+ <min>-1000</min>
+ <max>1000</max>
+ <default>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ </default>
+ </option>
+ <option name="e_vy" type="list">
+ <_short>Y speed</_short>
+ <_long>The vertical speed of the particles.</_long>
+ <type>int</type>
+ <min>-1000</min>
+ <max>1000</max>
+ <default>
+ <value>0</value>
+ <value>-200</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ </default>
+ </option>
+ <option name="e_vt" type="list">
+ <_short>Aging speed</_short>
+ <_long>The more negative the sooner particles disappear.</_long>
+ <type>int</type>
+ <min>-1000</min>
+ <max>-1</max>
+ <default>
+ <value>-30</value>
+ <value>-30</value>
+ <value>-5</value>
+ <value>-5</value>
+ <value>-5</value>
+ <value>-10</value>
+ <value>-10</value>
+ <value>-10</value>
+ <value>-10</value>
+ <value>-10</value>
+ </default>
+ </option>
+ <option name="e_vphi" type="list">
+ <_short>Rotation speed</_short>
+ <_long>The rotation of the particles can probably only be seen on the really big ones.</_long>
+ <type>int</type>
+ <min>-1000</min>
+ <max>1000</max>
+ <default>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ </default>
+ </option>
+ <option name="e_dvx" type="list">
+ <_short>X speed range</_short>
+ <_long>The horizontal speed range of the particles.</_long>
+ <type>int</type>
+ <min>-1000</min>
+ <max>1000</max>
+ <default>
+ <value>0</value>
+ <value>50</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ </default>
+ </option>
+ <option name="e_dvy" type="list">
+ <_short>Y speed range</_short>
+ <_long>The vertical speed range of the particles.</_long>
+ <type>int</type>
+ <min>-1000</min>
+ <max>1000</max>
+ <default>
+ <value>0</value>
+ <value>200</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ </default>
+ </option>
+ <option name="e_dvcirc" type="list">
+ <_short>Circular speed range</_short>
+ <_long>The circular speed range of the particles.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>50</value>
+ <value>0</value>
+ <value>100</value>
+ <value>50</value>
+ <value>50</value>
+ <value>500</value>
+ <value>500</value>
+ <value>500</value>
+ <value>500</value>
+ <value>500</value>
+ </default>
+ </option>
+ <option name="e_dvt" type="list">
+ <_short>Aging speed range</_short>
+ <_long>The range of aging speeds</_long>
+ <type>int</type>
+ <min>1</min>
+ <max>1000</max>
+ <default>
+ <value>30</value>
+ <value>10</value>
+ <value>4</value>
+ <value>3</value>
+ <value>3</value>
+ <value>5</value>
+ <value>5</value>
+ <value>5</value>
+ <value>5</value>
+ <value>5</value>
+ </default>
+ </option>
+ <option name="e_dvphi" type="list">
+ <_short>Rotation speed range</_short>
+ <_long>The rotation of the particles can probably only be seen on the really big ones.</_long>
+ <type>int</type>
+ <min>-1000</min>
+ <max>1000</max>
+ <default>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ </default>
+ </option>
+ <option name="e_s" type="list">
+ <_short>Particle Size</_short>
+ <_long>The size of the particles.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>50</value>
+ <value>20</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ </default>
+ </option>
+ <option name="e_ds" type="list">
+ <_short>Particle Size Range</_short>
+ <_long>The size range of the particles.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>25</value>
+ <value>10</value>
+ <value>25</value>
+ <value>25</value>
+ <value>25</value>
+ <value>25</value>
+ <value>25</value>
+ <value>25</value>
+ <value>25</value>
+ <value>25</value>
+ </default>
+ </option>
+ <option name="e_snew" type="list">
+ <_short>New Size</_short>
+ <_long>The size of the particles when they are new.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>300</value>
+ <value>50</value>
+ <value>100</value>
+ <value>125</value>
+ <value>125</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ <value>50</value>
+ </default>
+ </option>
+ <option name="e_dsnew" type="list">
+ <_short>New Size Range</_short>
+ <_long>The size range of the particles when they are new.</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>1000</max>
+ <default>
+ <value>150</value>
+ <value>30</value>
+ <value>25</value>
+ <value>50</value>
+ <value>50</value>
+ <value>25</value>
+ <value>25</value>
+ <value>25</value>
+ <value>25</value>
+ <value>25</value>
+ </default>
+ </option>
+ <option name="e_g" type="list">
+ <_short>Gravity</_short>
+ <_long>The strength of the gravity effect, these particles have. (See gravity probability. May be especially resource consuming.</_long>
+ <type>int</type>
+ <min>-1000</min>
+ <max>1000</max>
+ <default>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ </default>
+ </option>
+ <option name="e_dg" type="list">
+ <_short>Gravity Range</_short>
+ <_long>The strength range of the gravity effect, these particles have. (See gravity probability. May be especially resource consuming.</_long>
+ <type>int</type>
+ <min>-1000</min>
+ <max>1000</max>
+ <default>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>200</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ </default>
+ </option>
+ <option name="e_gp" type="list">
+ <_short>Gravity Probability</_short>
+ <_long>The probability that a particle has the gravity effect, that has been set up above. This value represents gravity particles out of 10000 particles. (Using gravity on too many particles may be very resource consuming)</_long>
+ <type>int</type>
+ <min>0</min>
+ <max>10000</max>
+ <default>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>10</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ <value>0</value>
+ </default>
+ </option>
+ </group>
+ <group>
+ <_short>General</_short>
+ <subgroup>
+ <_short>Advanced</_short>
+ <option name="hard_limit" type="int">
+ <_short>Hard limit for particles</_short>
+ <_long>If this hard limit is reached, no new particles are created</_long>
+ <default>3000</default>
+ <min>100</min>
+ <max>5000</max>
+ </option>
+ <option name="soft_limit" type="int">
+ <_short>Soft limit for particles</_short>
+ <_long>This soft limit can be exceeded. If this happens, particles will die faster</_long>
+ <default>2000</default>
+ <min>100</min>
+ <max>5000</max>
+ </option>
+ <option name="darken" type="float">
+ <_short>Darken backgound</_short>
+ <_long>Darken background under particles</_long>
+ <default>0.9</default>
+ <min>0.0</min>
+ <max>1.0</max>
+ <precision>0.1</precision>
+ </option>
+ <option name="blend" type="bool">
+ <_short>Additive blending</_short>
+ <_long>Additive blending of particles</_long>
+ <default>true</default>
+ </option>
+ <option name="tnew" type="float">
+ <_short>New particle time</_short>
+ <_long>If the age of a particle is above this value, it is regarded as new and is especially bright and large. Particles are born at the age of 1.0 and die at the age of 0.0</_long>
+ <default>0.98</default>
+ <min>0.0</min>
+ <max>1.0</max>
+ <precision>0.01</precision>
+ </option>
+ <option name="told" type="float">
+ <_short>Old particle time</_short>
+ <_long>If the age of a particle is below this value, it is regarded as old and starts to fade. Particles are born at the age of 1.0 and die at the age of 0.0</_long>
+ <default>0.4</default>
+ <min>0.0</min>
+ <max>1.0</max>
+ <precision>0.01</precision>
+ </option>
+ </subgroup>
+ </group>
+ </options>
+ </plugin>
+</compiz>