summaryrefslogtreecommitdiff
path: root/attic/table
diff options
context:
space:
mode:
Diffstat (limited to 'attic/table')
-rw-r--r--attic/table/Makefile14
-rw-r--r--attic/table/clutter-dominatrix.c1008
-rw-r--r--attic/table/clutter-dominatrix.h89
-rw-r--r--attic/table/clutter-video-player.c374
-rw-r--r--attic/table/clutter-video-player.h81
-rw-r--r--attic/table/hand0.pngbin0 -> 6451 bytes
-rw-r--r--attic/table/hand1.pngbin0 -> 6605 bytes
-rw-r--r--attic/table/hand2.pngbin0 -> 7130 bytes
-rw-r--r--attic/table/hand3.pngbin0 -> 6719 bytes
-rw-r--r--attic/table/hand4.pngbin0 -> 6737 bytes
-rw-r--r--attic/table/hand5.pngbin0 -> 6691 bytes
-rw-r--r--attic/table/hand6.pngbin0 -> 7115 bytes
-rw-r--r--attic/table/hand7.pngbin0 -> 7101 bytes
-rw-r--r--attic/table/hand8.pngbin0 -> 7009 bytes
-rw-r--r--attic/table/pause_png.h431
-rw-r--r--attic/table/play_png.h540
-rw-r--r--attic/table/table.c446
17 files changed, 2983 insertions, 0 deletions
diff --git a/attic/table/Makefile b/attic/table/Makefile
new file mode 100644
index 0000000..385061e
--- /dev/null
+++ b/attic/table/Makefile
@@ -0,0 +1,14 @@
+LIBS=`pkg-config --libs clutter-0.6 gnome-vfs-2.0 clutter-gst-0.6`
+INCS=`pkg-config --cflags clutter-0.6 gnome-vfs-2.0 clutter-gst-0.6`
+
+.c.o:
+ $(CC) -g -Wall $(CFLAGS) $(INCS) -c $*.c
+
+all: table
+
+
+table: table.o clutter-dominatrix.o clutter-video-player.o
+ $(CC) -g -Wall $(CFLAGS) -o $@ table.o clutter-dominatrix.o clutter-video-player.o $(LIBS)
+
+clean:
+ rm -fr *.o table
diff --git a/attic/table/clutter-dominatrix.c b/attic/table/clutter-dominatrix.c
new file mode 100644
index 0000000..79e2991
--- /dev/null
+++ b/attic/table/clutter-dominatrix.c
@@ -0,0 +1,1008 @@
+/*
+ * Clutter.
+ *
+ * An OpenGL based 'interactive canvas' library.
+ *
+ * Authored By Tomas Frydrych tf@openedhand.com>
+ *
+ * Copyright (C) 2007 OpenedHand
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:clutter-dominatrix
+ * @short_description: An actor manipulation proxy.
+ *
+ * #ClutterDominatrix is a proxy object for manipulation for actors via a
+ * pointer: the slave actor can be rotated by dragging one of it's corners,
+ * moved by dragging it's center and resizes by dragging the rest of it.
+ */
+
+#include "clutter-dominatrix.h"
+#include <clutter/clutter.h>
+#include <stdlib.h>
+
+#ifndef CLUTTER_PARAM_READWRITE
+#define CLUTTER_PARAM_READWRITE \
+ G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK |G_PARAM_STATIC_BLURB
+#endif
+
+G_DEFINE_TYPE (ClutterDominatrix,
+ clutter_dominatrix,
+ G_TYPE_OBJECT);
+
+#define CLUTTER_DOMINATRIX_GET_PRIVATE(obj) \
+(G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_DOMINATRIX, ClutterDominatrixPrivate))
+
+typedef enum {
+ DRAG_NONE = 0,
+ DRAG_ROTATE,
+ DRAG_MOVE,
+ DRAG_RESIZE_TL,
+ DRAG_RESIZE_TR,
+ DRAG_RESIZE_BL,
+ DRAG_RESIZE_BR,
+ DRAG_SCALE,
+} DragType;
+
+struct _ClutterDominatrixPrivate
+{
+ ClutterActor * slave;
+
+ guint rhandle_width;
+ guint rhandle_height;
+
+ guint mhandle_width;
+ guint mhandle_height;
+
+ DragType dragging;
+ gint prev_x;
+ gint prev_y;
+ gint center_x;
+ gint center_y;
+
+ gboolean scale : 1;
+ gboolean dont_rotate : 1;
+ gboolean dont_resize : 1;
+ gboolean dont_move : 1;
+
+ ClutterGravity gravity;
+
+ ClutterActorBox orig_box;
+ ClutterFixed orig_scale_x;
+ ClutterFixed orig_scale_y;
+ ClutterFixed orig_zang;
+ gint orig_rot_x;
+ gint orig_rot_y;
+
+ guint8 old_opacity;
+};
+
+enum
+{
+ MANIPULATION_STARTED,
+ MANIPULATION_ENDED,
+
+ LAST_SIGNAL
+};
+
+static guint dmx_signals[LAST_SIGNAL] = { 0, };
+
+enum
+{
+ PROP_0,
+ PROP_ROTATE_HANDLE_WIDTH,
+ PROP_ROTATE_HANDLE_HEIGHT,
+ PROP_MOVE_HANDLE_WIDTH,
+ PROP_MOVE_HANDLE_HEIGHT,
+ PROP_SLAVE,
+ PROP_SCALE,
+ PROP_DISABLE_ROTATION,
+ PROP_DISABLE_RESIZING,
+ PROP_DISABLE_MOVEMENT,
+ PROP_GRAVITY,
+};
+
+
+static void
+clutter_dominatrix_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+
+ ClutterDominatrix *dominatrix;
+ ClutterDominatrixPrivate *priv;
+
+ dominatrix = CLUTTER_DOMINATRIX(object);
+ priv = dominatrix->priv;
+
+ switch (prop_id)
+ {
+ case PROP_ROTATE_HANDLE_WIDTH:
+ priv->rhandle_width = g_value_get_int (value);
+ break;
+ case PROP_ROTATE_HANDLE_HEIGHT:
+ priv->rhandle_height = g_value_get_int (value);
+ break;
+ case PROP_MOVE_HANDLE_WIDTH:
+ priv->mhandle_width = g_value_get_int (value);
+ break;
+ case PROP_MOVE_HANDLE_HEIGHT:
+ priv->mhandle_height = g_value_get_int (value);
+ break;
+ case PROP_SLAVE:
+ clutter_dominatrix_set_slave (dominatrix,
+ CLUTTER_ACTOR (g_value_get_pointer (value)));
+ break;
+ case PROP_SCALE:
+ priv->scale = g_value_get_boolean (value);
+ break;
+ case PROP_DISABLE_ROTATION:
+ priv->dont_rotate = g_value_get_boolean (value);
+ break;
+ case PROP_DISABLE_RESIZING:
+ priv->dont_resize = g_value_get_boolean (value);
+ break;
+ case PROP_DISABLE_MOVEMENT:
+ priv->dont_move = g_value_get_boolean (value);
+ break;
+ case PROP_GRAVITY:
+ priv->gravity = g_value_get_enum (value);
+ clutter_actor_move_anchor_point_from_gravity (priv->slave,
+ priv->gravity);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+clutter_dominatrix_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ ClutterDominatrix *dominatrix;
+ ClutterDominatrixPrivate *priv;
+
+ dominatrix = CLUTTER_DOMINATRIX(object);
+ priv = dominatrix->priv;
+
+ switch (prop_id)
+ {
+ case PROP_ROTATE_HANDLE_WIDTH:
+ g_value_set_int (value, priv->rhandle_width);
+ break;
+ case PROP_ROTATE_HANDLE_HEIGHT:
+ g_value_set_int (value, priv->rhandle_height);
+ break;
+ case PROP_MOVE_HANDLE_WIDTH:
+ g_value_set_int (value, priv->mhandle_width);
+ break;
+ case PROP_MOVE_HANDLE_HEIGHT:
+ g_value_set_int (value, priv->mhandle_height);
+ break;
+ case PROP_SLAVE:
+ g_value_set_pointer (value, priv->slave);
+ break;
+ case PROP_SCALE:
+ g_value_set_boolean (value, priv->scale);
+ break;
+ case PROP_DISABLE_ROTATION:
+ g_value_set_boolean (value, priv->dont_rotate);
+ break;
+ case PROP_DISABLE_RESIZING:
+ g_value_set_boolean (value, priv->dont_resize);
+ break;
+ case PROP_DISABLE_MOVEMENT:
+ g_value_set_boolean (value, priv->dont_move);
+ break;
+ case PROP_GRAVITY:
+ g_value_set_enum (value, priv->gravity);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+clutter_dominatrix_release_slave (ClutterDominatrixPrivate * priv)
+{
+ priv->dragging = DRAG_NONE;
+
+ if (priv->slave)
+ {
+ g_object_unref (priv->slave);
+ g_object_set_data (G_OBJECT (priv->slave), "dominatrix", NULL);
+ priv->slave = NULL;
+ }
+}
+
+static void
+clutter_dominatrix_finalize (GObject *object)
+{
+ ClutterDominatrix *dmx = CLUTTER_DOMINATRIX (object);
+
+ clutter_dominatrix_release_slave (dmx->priv);
+
+ G_OBJECT_CLASS (clutter_dominatrix_parent_class)->finalize (object);
+}
+
+static void
+clutter_dominatrix_store_original_settings (ClutterDominatrixPrivate *priv)
+{
+ clutter_actor_move_anchor_point_from_gravity (priv->slave,
+ CLUTTER_GRAVITY_NONE);
+ clutter_actor_query_coords (priv->slave, &priv->orig_box);
+
+ clutter_actor_get_scalex (priv->slave,
+ &priv->orig_scale_x,
+ &priv->orig_scale_y);
+
+ priv->orig_zang = clutter_actor_get_rotationx (priv->slave,
+ CLUTTER_Z_AXIS,
+ &priv->orig_rot_x,
+ &priv->orig_rot_y,
+ NULL);
+ clutter_actor_move_anchor_point_from_gravity (priv->slave,
+ priv->gravity);
+}
+
+static GObject *
+clutter_dominatrix_constructor (GType gtype,
+ guint n_params,
+ GObjectConstructParam *params)
+{
+ GObjectClass * parent_class;
+ GObject * retval;
+ ClutterDominatrix * dmx;
+ ClutterActor * stage;
+
+ parent_class = G_OBJECT_CLASS (clutter_dominatrix_parent_class);
+ retval = parent_class->constructor (gtype, n_params, params);
+
+ dmx = CLUTTER_DOMINATRIX (retval);
+
+ stage = clutter_stage_get_default ();
+
+ clutter_dominatrix_store_original_settings (dmx->priv);
+
+ g_object_set_data (G_OBJECT (dmx->priv->slave), "dominatrix", retval);
+
+ return retval;
+}
+
+static void
+clutter_dominatrix_class_init (ClutterDominatrixClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->constructor = clutter_dominatrix_constructor;
+ object_class->set_property = clutter_dominatrix_set_property;
+ object_class->get_property = clutter_dominatrix_get_property;
+ object_class->finalize = clutter_dominatrix_finalize;
+
+ g_type_class_add_private (klass, sizeof (ClutterDominatrixPrivate));
+
+ /**
+ * ClutterDominatrix:rotate-handle-width:
+ *
+ * Width of the rotation handle.
+ */
+ g_object_class_install_property (object_class,
+ PROP_ROTATE_HANDLE_WIDTH,
+ g_param_spec_int ("rotate-handle-width",
+ "width of rotation handle",
+ "width of rotation handle",
+ 0, G_MAXINT,
+ 0,
+ CLUTTER_PARAM_READWRITE));
+
+ /**
+ * ClutterDominatrix:rotate-handle-height:
+ *
+ * Height of the rotation handle.
+ */
+ g_object_class_install_property (object_class,
+ PROP_ROTATE_HANDLE_HEIGHT,
+ g_param_spec_int ("rotate-handle-height",
+ "height of rotation handle",
+ "height of rotation handle",
+ 0, G_MAXINT,
+ 0,
+ CLUTTER_PARAM_READWRITE));
+
+ /**
+ * ClutterDominatrix:move-handle-width:
+ *
+ * Width of the move handle.
+ */
+ g_object_class_install_property (object_class,
+ PROP_MOVE_HANDLE_WIDTH,
+ g_param_spec_int ("move-handle-width",
+ "width of move handle",
+ "width of move handle",
+ 0, G_MAXINT,
+ 0,
+ CLUTTER_PARAM_READWRITE));
+
+ /**
+ * ClutterDominatrix:move-handle-height:
+ *
+ * Height of the move handle.
+ */
+ g_object_class_install_property (object_class,
+ PROP_MOVE_HANDLE_HEIGHT,
+ g_param_spec_int ("move-handle-height",
+ "height of move handle",
+ "height of move handle",
+ 0, G_MAXINT,
+ 0,
+ CLUTTER_PARAM_READWRITE));
+
+
+ /**
+ * ClutterDominatrix:slave:
+ *
+ * Slave we are manipulating.
+ */
+ g_object_class_install_property (object_class,
+ PROP_SLAVE,
+ g_param_spec_pointer ("slave",
+ "slave",
+ "slave",
+ G_PARAM_CONSTRUCT |
+ CLUTTER_PARAM_READWRITE));
+
+ /**
+ * ClutterDominatrix:scale:
+ *
+ * Whether dragging in the no-mans land should be translated to scaling
+ * or resizing. Deafult TRUE
+ */
+ g_object_class_install_property (object_class,
+ PROP_SCALE,
+ g_param_spec_boolean ("scale",
+ "whether to scale or resize",
+ "whether to scale or resize",
+ TRUE,
+ CLUTTER_PARAM_READWRITE));
+
+ /**
+ * ClutterDominatrix:disable-rotation:
+ *
+ * Whether rotation should be disabled; default FALSE
+ */
+ g_object_class_install_property (object_class,
+ PROP_DISABLE_ROTATION,
+ g_param_spec_boolean ("disable-rotation",
+ "whether to rotate",
+ "whether to rotate",
+ FALSE,
+ CLUTTER_PARAM_READWRITE));
+
+
+ /**
+ * ClutterDominatrix:disable-resizing:
+ *
+ * Whether resizing should be disabled; default FALSE
+ */
+ g_object_class_install_property (object_class,
+ PROP_DISABLE_RESIZING,
+ g_param_spec_boolean ("disable-resizing",
+ "whether to resize",
+ "whether to resize",
+ FALSE,
+ CLUTTER_PARAM_READWRITE));
+
+ /**
+ * ClutterDominatrix:disable-movement:
+ *
+ * Whether moving should be disabled; default FALSE
+ */
+ g_object_class_install_property (object_class,
+ PROP_DISABLE_MOVEMENT,
+ g_param_spec_boolean ("disable-movement",
+ "whether to move",
+ "whether to move",
+ FALSE,
+ CLUTTER_PARAM_READWRITE));
+
+ /**
+ * ClutterDominatrix:gravity:
+ *
+ * Gravity to use when scaling; default CLUTTER_GRAVITY_CENTER
+ */
+ g_object_class_install_property (object_class,
+ PROP_GRAVITY,
+ g_param_spec_enum ("gravity",
+ "which gravity to use for scaling",
+ "which gravity to use for scaling",
+ CLUTTER_TYPE_GRAVITY,
+ CLUTTER_GRAVITY_CENTER,
+ G_PARAM_CONSTRUCT |
+ CLUTTER_PARAM_READWRITE));
+
+ /**
+ * ClutterDominatrix::manipulation-started:
+ * @dmx: the object which received the signal
+ *
+ * This signal is emitted each time the users starts to manipulate the
+ * actor.
+ *
+ */
+ dmx_signals[MANIPULATION_STARTED] =
+ g_signal_new ("manipulation-started",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ClutterDominatrixClass,
+ manipulation_started),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ /**
+ * ClutterDominatrix::manipulation-ended:
+ * @dmx: the object which received the signal
+ *
+ * This signal is emitted each time the users starts to manipulate the
+ * actor.
+ *
+ */
+ dmx_signals[MANIPULATION_ENDED] =
+ g_signal_new ("manipulation-ended",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ClutterDominatrixClass,
+ manipulation_ended),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+}
+
+static void
+clutter_dominatrix_init (ClutterDominatrix *self)
+{
+ self->priv = CLUTTER_DOMINATRIX_GET_PRIVATE (self);
+
+ self->priv->rhandle_width = 30;
+ self->priv->rhandle_height = 30;
+ self->priv->mhandle_width = 30;
+ self->priv->mhandle_height = 30;
+ self->priv->scale = TRUE;
+ self->priv->gravity = CLUTTER_GRAVITY_CENTER;
+ self->priv->old_opacity = 0xff;
+}
+
+void
+clutter_dominatrix_handle_event (ClutterDominatrix *dominatrix,
+ ClutterEvent *event)
+{
+ ClutterDominatrixPrivate * priv = dominatrix->priv;
+
+ switch (event->type)
+ {
+ case CLUTTER_BUTTON_PRESS:
+ {
+ gint x, y;
+ ClutterActor * actor = priv->slave;
+ ClutterVertex v[4];
+ ClutterVertex v1, v2;
+ ClutterFixed xp, yp;
+ ClutterFixed zang;
+ gint32 xmin, xmax, ymin, ymax;
+ gint i;
+ gint width, height;
+ gint mhandle_width = priv->mhandle_width;
+ gint mhandle_height = priv->mhandle_height;
+ gint rhandle_width = priv->rhandle_width;
+ gint rhandle_height = priv->rhandle_height;
+
+ if (((ClutterButtonEvent *)event)->click_count == 2)
+ {
+ clutter_dominatrix_restore (dominatrix);
+ break;
+ }
+
+ clutter_event_get_coords (event, &x, &y);
+
+ clutter_actor_raise_top (priv->slave);
+
+ priv->old_opacity = clutter_actor_get_opacity (priv->slave);
+
+
+ g_signal_emit (dominatrix, dmx_signals[MANIPULATION_STARTED], 0);
+
+ priv->prev_x = x;
+ priv->prev_y = y;
+
+ /* Check that the handle size are sensible in relationship to the
+ * projected size of our slave, otherwise if the user reduces the size
+ * of the slave too much, s/he will not be able to expand it again
+ * -- we practice safe bondage only in this house ;).
+ *
+ * Allow the movement handle to be at most half of the width/height
+ * and the rotation handles to be at most a quarter of width/height.
+ */
+ clutter_actor_get_vertices (actor, v);
+
+ xmin = xmax = v[0].x;
+ ymin = ymax = v[0].y;
+
+ for (i = 1; i < 4; ++i)
+ {
+ if (xmin > v[i].x)
+ xmin = v[i].x;
+ if (xmax < v[i].x)
+ xmax = v[i].x;
+
+ if (ymin > v[i].y)
+ ymin = v[i].y;
+ if (ymax < v[i].y)
+ ymax = v[i].y;
+ }
+
+ width = CLUTTER_FIXED_INT (xmax - xmin);
+ height = CLUTTER_FIXED_INT (ymax - ymin);
+
+ /* FIXME -- make this work when the actor is rotated */
+ if (width < 2 * mhandle_width)
+ {
+ mhandle_width = width >> 1;
+ g_debug ("Adjusted mhandle width to %d", mhandle_width);
+ }
+
+ if (height < 2 * mhandle_height)
+ {
+ mhandle_height = height >> 1;
+ g_debug ("Adjusted mhandle height to %d", mhandle_height);
+ }
+
+ if (width < 4 * rhandle_width)
+ {
+ rhandle_width = width >> 2;
+ g_debug ("Adjusted rhandle width to %d", rhandle_width);
+ }
+
+ if (height < 4 * rhandle_height)
+ {
+ rhandle_height = height >> 2;
+ g_debug ("Adjusted rhandle height to %d", rhandle_height);
+ }
+
+ /*
+ * work out drag type
+ *
+ * First, check for movement
+ */
+ v1.x = CLUTTER_INT_TO_FIXED (clutter_actor_get_width (actor) / 2);
+ v1.y = CLUTTER_INT_TO_FIXED (clutter_actor_get_height (actor) / 2);
+ v1.z = 0;
+
+ clutter_actor_apply_transform_to_point (actor, &v1, &v2);
+
+ xp = CLUTTER_FIXED_INT (v2.x);
+ yp = CLUTTER_FIXED_INT (v2.y);
+
+ /* Store these for later */
+ priv->center_x = xp;
+ priv->center_y = yp;
+
+ if (abs (xp - x) < mhandle_width &&
+ abs (yp - y) < mhandle_height)
+ {
+ priv->dragging = DRAG_MOVE;
+ clutter_actor_set_opacity (priv->slave, priv->old_opacity / 2);
+ return;
+ }
+
+ /*
+ * Next, we check for rotation
+ */
+ for (i = 0; i < 4; ++i)
+ if (abs (CLUTTER_FIXED_INT (v[i].x) - x) < rhandle_width &&
+ abs (CLUTTER_FIXED_INT (v[i].y) - y) < rhandle_height)
+ {
+ priv->dragging = DRAG_ROTATE;
+ return;
+ }
+
+
+ /*
+ * Neither move or rotation, so we are resizing or scaling.
+ */
+ if (priv->scale)
+ {
+ priv->dragging = DRAG_SCALE;
+ return;
+ }
+ else
+ {
+ /*
+ * We notionally divide the projected area into 2 x 2 grid,
+ * representing 4 types of resize.
+ *
+ * If the object is rotated, we need to unrotate the screen
+ * coords first.
+ */
+ zang = clutter_actor_get_rotationx (actor, CLUTTER_Z_AXIS,
+ NULL, NULL, NULL);
+
+ if (zang)
+ {
+ gint x2 = x - xp;
+ gint y2 = y - yp;
+ ClutterFixed zang_rad = -CFX_MUL (zang, CFX_PI) / 180;
+
+ x = CLUTTER_FIXED_INT (x2 * clutter_cosx (zang_rad) -
+ y2 * clutter_sinx (zang_rad)) + xp;
+
+ y = CLUTTER_FIXED_INT (y2 * clutter_cosx (zang_rad) +
+ x2 * clutter_sinx (zang_rad)) + yp;
+ }
+
+ if (x < xp && y < yp)
+ {
+ priv->dragging = DRAG_RESIZE_TL;
+ return;
+ }
+
+ if (x < xp && y >= yp)
+ {
+ priv->dragging = DRAG_RESIZE_BL;
+ return;
+ }
+
+ if (x >= xp && y < yp)
+ {
+ priv->dragging = DRAG_RESIZE_TR;
+ return;
+ }
+
+ if (x >= xp && y >= yp)
+ {
+ priv->dragging = DRAG_RESIZE_BR;
+ return;
+ }
+ }
+
+ g_warning ("Error calculating drag type");
+ priv->dragging = DRAG_NONE;
+ }
+ break;
+
+ case CLUTTER_MOTION:
+ {
+ gint x, y;
+ ClutterFixed zang;
+ ClutterActorBox box;
+
+ if (priv->dragging == DRAG_NONE)
+ return;
+
+ clutter_event_get_coords (event, &x, &y);
+
+ /* We intentionally do not test here if the pointer is within
+ * our slave since we want to be able to manipulate the objects with
+ * the point outwith the object (i.e., for greater precission when
+ * rotating)
+ */
+ clutter_actor_query_coords (priv->slave, &box);
+
+ zang = clutter_actor_get_rotationx (priv->slave, CLUTTER_Z_AXIS,
+ NULL, NULL, NULL);
+
+ if (priv->dragging == DRAG_MOVE)
+ {
+ if (priv->dont_move)
+ return;
+
+ clutter_actor_move_by (priv->slave,
+ x - priv->prev_x,
+ y - priv->prev_y);
+ }
+ else if (priv->dragging >= DRAG_RESIZE_TL &&
+ priv->dragging <= DRAG_RESIZE_BR)
+ {
+ ClutterFixed xp, yp;
+
+ if (priv->dont_resize)
+ return;
+
+
+ xp = CLUTTER_INT_TO_FIXED (x - priv->prev_x);
+ yp = CLUTTER_INT_TO_FIXED (y - priv->prev_y);
+
+ if (zang)
+ {
+ gint x2 = x - priv->prev_x;
+ gint y2 = y - priv->prev_y;
+
+ ClutterFixed zang_rad = -CFX_MUL (zang, CFX_PI) / 180;
+
+ xp = x2 * clutter_cosx (zang_rad) -
+ y2 * clutter_sinx (zang_rad);
+
+ yp = y2 * clutter_cosx (zang_rad) +
+ x2 * clutter_sinx (zang_rad);
+ }
+
+ switch (priv->dragging)
+ {
+ case DRAG_RESIZE_TL:
+ box.x1 += xp;
+ box.y1 += yp;
+ break;
+ case DRAG_RESIZE_TR:
+ box.x2 += xp;
+ box.y1 += yp;
+ break;
+ case DRAG_RESIZE_BL:
+ box.x1 += xp;
+ box.y2 += yp;
+ break;
+ case DRAG_RESIZE_BR:
+ box.x2 += xp;
+ box.y2 += yp;
+ break;
+ default:
+ break;
+ }
+
+ clutter_actor_request_coords (priv->slave, &box);
+ }
+ else if (priv->dragging == DRAG_ROTATE)
+ {
+ ClutterFixed a;
+ gint x1, x2, y1, y2, div;
+
+ if (priv->dont_rotate)
+ return;
+
+ x1 = priv->prev_x;
+ y1 = priv->prev_y;
+ x2 = x;
+ y2 = y;
+
+ /*
+ * For the incremental angle a,
+ *
+ * sin(a) = (x1*y2 - x2*y1) / (x1^2 + y1^2)
+ *
+ * where x1,y1 and x2,y2 are coords relative to the center of
+ * rotation.
+ *
+ * For very small a, we can assume sin(a) == a,
+ * and after converting from rad to deg and to ClutterFixed,
+ * we get,
+ *
+ * a = 0x394bb8 * (x1*y2 - x2*y1) / (x1^2 + y1^2),
+ *
+ */
+
+ /* We work out the rotation on screen, not in the actor space.
+ * This is not entirely acurate, but considerably easier, and
+ * since the angles are very small should be generally enough for
+ * the rotatated actor not to get out of sync with the position
+ * of the pointer even if it is somewhat rotated around x and/or y
+ * axes.
+ *
+ * FIXME: if the actor has been rotated around the Z axis prior to
+ * start of our dragging, and the center of rotation was not the
+ * center of the actor, the actor will move from it's current
+ * position, since we will preserve the rotation angle, but change
+ * the pivot point. This is probably not a great deal for the
+ * kinds of application the dominatrix is intended for.
+ *
+ * First, project the center of the actor, which will be our
+ * reference point.
+ */
+ x1 -= priv->center_x;
+ y1 -= priv->center_y;
+ x2 -= priv->center_x;
+ y2 -= priv->center_y;
+
+ div = x1 * x1 + y1 * y1;
+
+ if (div)
+ a = (((x1 * y2 - x2 * y1) * 0x32000) / div) << 4;
+ else
+ a = CFX_ONE;
+
+ /*
+ * For anything above 0.7 rad, we tweak the value a bit
+ */
+ if (a >= 0xb333)
+ a = CFX_MUL (a, 0x14000);
+
+ clutter_actor_set_rotationx (priv->slave, CLUTTER_Z_AXIS, zang + a,
+ 0, 0, 0);
+ }
+ else if (priv->dragging == DRAG_SCALE)
+ {
+ /*
+ * for each pixel of movement from the center increase scale by
+ * some sensible step, proportionate to the actor width.
+ */
+#define SCALE_STEP 40
+ ClutterFixed sx, sy;
+ gint d1, d2, diff, x1, y1, x2, y2;
+
+ if (priv->dont_resize)
+ return;
+
+ x1 = abs (priv->prev_x - priv->center_x);
+ y1 = abs (priv->prev_y - priv->center_y);
+ x2 = abs (x - priv->center_x);
+ y2 = abs (y - priv->center_y);
+
+ clutter_actor_get_scalex (priv->slave, &sx, &sy);
+
+ d1 = x1*x1 + y1*y1;
+ d2 = x2*x2 + y2*y2;
+
+ /* What we should do now is to sqrt d1 and d2 and substract the
+ * results but d1 and d2 can be quite big and sqrti does not
+ * handle very big numbers well, while ClutterFixed range is
+ * limited, ruling out sqrtx. We do not want to use sqrt for
+ * performance reasons, and all we need is reasonable speed of
+ * scaling and semblance of constancy. So, we substract the
+ * numbers first, then sqrti the difference, give it appropriate
+ * sign and choose a suitable step to go with what that produces.
+ */
+ diff = (clutter_sqrti (abs (d2 - d1)) *
+ clutter_actor_get_width (priv->slave)) / 25;
+
+ if (d1 > d2)
+ diff = -diff;
+
+ sx += SCALE_STEP * diff;
+ sy += SCALE_STEP * diff;
+
+ clutter_actor_set_scalex (priv->slave, sx, sy);
+#undef SCALE_STEP
+ }
+
+ priv->prev_x = x;
+ priv->prev_y = y;
+
+ }
+ break;
+
+ case CLUTTER_BUTTON_RELEASE:
+ {
+ if (priv->dragging != DRAG_NONE)
+ {
+ clutter_actor_set_opacity (priv->slave, priv->old_opacity);
+ g_signal_emit (dominatrix, dmx_signals[MANIPULATION_ENDED], 0);
+ priv->dragging = DRAG_NONE;
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+ clutter_actor_move_anchor_point_from_gravity (priv->slave,
+ priv->gravity);
+}
+
+
+/**
+ * clutter_dominatrix_new:
+ * @slave: a #ClutterActor to manipulate
+ *
+ * Creates a ClutterDominatrix proxy for the given actor that allows
+ * the user to be manipulated via a pointer.
+ *
+ * When you are done with the proxy, release the references to it.
+ */
+ClutterDominatrix *
+clutter_dominatrix_new (ClutterActor *slave)
+{
+ return g_object_new (CLUTTER_TYPE_DOMINATRIX, "slave", slave, NULL);
+}
+
+/**
+ * clutter_dominatrix_new_with_gravity:
+ * @slave: a #ClutterActor to manipulate
+ * @gravity: a #ClutterGravity to use when the actor is being scaled.
+ *
+ * Creates a ClutterDominatrix proxy for the given actor that allows
+ * the user to be manipulated via a pointer, and sets the gravity for scaling
+ * to the provided value.
+ *
+ * When you are done with the proxy, release the references to it.
+ */
+ClutterDominatrix *
+clutter_dominatrix_new_with_gravity (ClutterActor * slave,
+ ClutterGravity gravity)
+{
+ return g_object_new (CLUTTER_TYPE_DOMINATRIX,
+ "slave", slave,
+ "gravity", gravity,
+ NULL);
+}
+
+/**
+ * clutter_dominatrix_set_slave:
+ * @dmx: a #ClutterDominatrix
+ * @slave: a #ClutterActor that the proxy should operate on.
+ *
+ */
+void
+clutter_dominatrix_set_slave (ClutterDominatrix *dmx, ClutterActor *slave)
+{
+ clutter_dominatrix_release_slave (dmx->priv);
+
+ g_object_ref (slave);
+ dmx->priv->slave = slave;
+
+ clutter_dominatrix_store_original_settings (dmx->priv);
+ clutter_actor_move_anchor_point_from_gravity (slave,
+ dmx->priv->gravity);
+}
+
+/**
+ * clutter_dominatrix_get_slave:
+ * @dmx: a #ClutterDominatrix
+ *
+ * Returns the #ClutterActor that the proxy currently operates on. When you
+ * are done with it, you have to unref the slave.
+ */
+ClutterActor *
+clutter_dominatrix_get_slave (ClutterDominatrix *dmx)
+{
+ g_return_val_if_fail (CLUTTER_IS_DOMINATRIX (dmx), NULL);
+
+ if (dmx->priv->slave)
+ g_object_ref (dmx->priv->slave);
+
+ return dmx->priv->slave;
+}
+
+/**
+ * clutter_dominatrix_restore:
+ * @dmx: a #ClutterDominatrix
+ *
+ * Restores the slave the proxy manipulates to it's original state.
+ */
+void
+clutter_dominatrix_restore (ClutterDominatrix *dmx)
+{
+ ClutterDominatrixPrivate * priv;
+ g_return_if_fail (CLUTTER_IS_DOMINATRIX (dmx));
+
+ priv = dmx->priv;
+
+ clutter_actor_move_anchor_point_from_gravity (priv->slave,
+ CLUTTER_GRAVITY_NONE);
+ clutter_actor_set_rotationx (priv->slave, CLUTTER_Z_AXIS, priv->orig_zang,
+ priv->orig_rot_x, priv->orig_rot_y, 0);
+
+ clutter_actor_set_scalex (priv->slave,
+ priv->orig_scale_x, priv->orig_scale_y);
+
+ clutter_actor_request_coords (priv->slave, &priv->orig_box);
+ clutter_actor_move_anchor_point_from_gravity (priv->slave,
+ priv->gravity);
+}
diff --git a/attic/table/clutter-dominatrix.h b/attic/table/clutter-dominatrix.h
new file mode 100644
index 0000000..d99e510
--- /dev/null
+++ b/attic/table/clutter-dominatrix.h
@@ -0,0 +1,89 @@
+/*
+ * Clutter.
+ *
+ * An OpenGL based 'interactive canvas' library.
+ *
+ * Authored By Tomas Frydrych tf@openedhand.com>
+ *
+ * Copyright (C) 2007 OpenedHand
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _HAVE_CLUTTER_DOMINATRIX_H
+#define _HAVE_CLUTTER_DOMINATRIX_H
+
+/* clutter-dominatrix.h */
+
+#include <glib-object.h>
+#include <clutter/clutter-fixed.h>
+#include <clutter/clutter-actor.h>
+#include <clutter/clutter-event.h>
+
+G_BEGIN_DECLS
+
+#define CLUTTER_TYPE_DOMINATRIX clutter_dominatrix_get_type()
+
+#define CLUTTER_DOMINATRIX(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_DOMINATRIX, ClutterDominatrix))
+#define CLUTTER_DOMINATRIX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_DOMINATRIX, ClutterDominatrixClass))
+#define CLUTTER_IS_DOMINATRIX(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_DOMINATRIX))
+#define CLUTTER_IS_DOMINATRIX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_DOMINATRIX))
+#define CLUTTER_DOMINATRIX_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_DOMINATRIX, ClutterDominatrixClass))
+
+typedef struct _ClutterDominatrix ClutterDominatrix;
+typedef struct _ClutterDominatrixClass ClutterDominatrixClass;
+typedef struct _ClutterDominatrixPrivate ClutterDominatrixPrivate;
+
+struct _ClutterDominatrix
+{
+ /*< public >*/
+ GObject parent_instance;
+
+ /*< private >*/
+ ClutterDominatrixPrivate *priv;
+};
+
+struct _ClutterDominatrixClass
+{
+ GObjectClass parent_class;
+
+ void (* manipulation_started) (ClutterDominatrix *dmx);
+ void (* manipulation_ended) (ClutterDominatrix *dmx);
+};
+
+GType clutter_dominatrix_get_type (void) G_GNUC_CONST;
+
+ClutterDominatrix * clutter_dominatrix_new (ClutterActor *actor);
+ClutterDominatrix * clutter_dominatrix_new_with_gravity (ClutterActor *actor,
+ ClutterGravity gravity);
+
+void clutter_dominatrix_set_slave (ClutterDominatrix *dmx,
+ ClutterActor *slave);
+ClutterActor * clutter_dominatrix_get_slave (ClutterDominatrix *dmx);
+void clutter_dominatrix_restore (ClutterDominatrix *dmx);
+
+void
+clutter_dominatrix_handle_event (ClutterDominatrix *dominatrix,
+ ClutterEvent *event);
+
+G_END_DECLS
+
+#endif /* _HAVE_CLUTTER_DOMINATRIX_H */
diff --git a/attic/table/clutter-video-player.c b/attic/table/clutter-video-player.c
new file mode 100644
index 0000000..2f62e0a
--- /dev/null
+++ b/attic/table/clutter-video-player.c
@@ -0,0 +1,374 @@
+
+#include <clutter-gst/clutter-gst.h>
+#include "clutter-video-player.h"
+#include "play_png.h"
+#include "pause_png.h"
+
+#define CTRL_SIZE 10
+
+#ifndef CLUTTER_PARAM_READWRITE
+#define CLUTTER_PARAM_READWRITE \
+ G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK |G_PARAM_STATIC_BLURB
+#endif
+
+G_DEFINE_TYPE (ClutterVideoPlayer, clutter_video_player, CLUTTER_TYPE_GROUP);
+
+#define CLUTTER_VIDEO_PLAYER_GET_PRIVATE(obj) \
+(G_TYPE_INSTANCE_GET_PRIVATE ((obj), CLUTTER_TYPE_VIDEO_PLAYER, ClutterVideoPlayerPrivate))
+
+struct _ClutterVideoPlayerPrivate
+{
+ ClutterActor * vtexture;
+
+ ClutterActor * control;
+ ClutterActor * control_play;
+ ClutterActor * control_pause;
+
+ gboolean paused;
+
+ gint width;
+ gint height;
+
+ gchar * uri;
+};
+
+static void
+toggle_pause_state (ClutterVideoPlayer *player);
+
+static void
+input_cb (ClutterStage * stage, ClutterEvent * event, gpointer data);
+
+static gboolean
+autostop_playback (gpointer data)
+{
+ ClutterVideoPlayer * player = data;
+ ClutterVideoPlayerPrivate * priv = player->priv;
+
+ clutter_actor_show (priv->vtexture);
+
+ toggle_pause_state (player);
+ clutter_media_set_position (CLUTTER_MEDIA (priv->vtexture), 0);
+ return FALSE;
+}
+
+static void
+eos_cb (ClutterMedia * media, gpointer data)
+{
+ ClutterVideoPlayer * player = data;
+
+ if (!player->priv->paused)
+ toggle_pause_state (player);
+
+ clutter_media_set_position (media, 0);
+}
+
+static GdkPixbuf *
+pixbuf_from_data (const guchar * data, gint length)
+{
+ GdkPixbuf *pixbuf;
+ GdkPixbufLoader * ldr = gdk_pixbuf_loader_new_with_type ("png", NULL);
+
+ if (!ldr)
+ {
+ g_warning ("Could not create loader");
+ return NULL;
+ }
+
+ if (!gdk_pixbuf_loader_write (ldr, data, length, NULL))
+ {
+ g_warning ("Failed to write to loader.");
+ return NULL;
+ }
+
+ pixbuf = gdk_pixbuf_loader_get_pixbuf (ldr);
+
+ return pixbuf;
+}
+
+void
+size_change (ClutterTexture *texture,
+ gint width,
+ gint height,
+ gpointer data)
+{
+ ClutterVideoPlayer *player = data;
+ gint h = player->priv->width * height / width;
+
+ clutter_actor_set_size (CLUTTER_ACTOR (player), player->priv->width, h);
+}
+
+static void
+construct_controls (ClutterVideoPlayer *player)
+{
+ ClutterVideoPlayerPrivate *priv = player->priv;
+ GdkPixbuf *pixb;
+
+ priv->vtexture = clutter_gst_video_texture_new ();
+
+ if (priv->vtexture == NULL)
+ g_error("failed to create vtexture");
+
+ /* Dont let the underlying pixbuf dictate size */
+ g_object_set (G_OBJECT(priv->vtexture), "sync-size", FALSE, NULL);
+
+ g_signal_connect (CLUTTER_TEXTURE(priv->vtexture),
+ "size-change",
+ G_CALLBACK (size_change), player);
+
+ clutter_media_set_filename(CLUTTER_MEDIA(priv->vtexture), priv->uri);
+ clutter_media_set_playing (CLUTTER_MEDIA(priv->vtexture), TRUE);
+ priv->paused = FALSE;
+ g_signal_connect (priv->vtexture, "eos", G_CALLBACK (eos_cb), player);
+ g_timeout_add (100, autostop_playback, player);
+
+ priv->control = clutter_group_new ();
+
+ pixb = pixbuf_from_data (&play_png[0], sizeof (play_png));
+
+ if (pixb == NULL)
+ g_error("Unable to load play button image");
+
+ priv->control_play = clutter_texture_new_from_pixbuf (pixb);
+ clutter_actor_set_size (priv->control_play, CTRL_SIZE, CTRL_SIZE);
+ clutter_actor_show (priv->control_play);
+
+ pixb = pixbuf_from_data (&pause_png[0], sizeof (pause_png));
+
+ if (pixb == NULL)
+ g_error("Unable to load pause button image");
+
+ priv->control_pause = clutter_texture_new_from_pixbuf (pixb);
+ clutter_actor_set_size (priv->control_pause, CTRL_SIZE, CTRL_SIZE);
+
+ clutter_group_add_many (CLUTTER_GROUP (priv->control),
+ priv->control_play,
+ priv->control_pause,
+ NULL);
+
+ clutter_actor_set_opacity (priv->control, 0xee);
+
+ clutter_actor_set_position (priv->control_play, 0, 0);
+ clutter_actor_set_position (priv->control_pause, 0, 0);
+
+ clutter_group_add_many (CLUTTER_GROUP (player),
+ priv->vtexture, priv->control, NULL);
+
+ g_signal_connect (clutter_stage_get_default(), "event",
+ G_CALLBACK (input_cb),
+ player);
+}
+
+enum
+{
+ PROP_0,
+ PROP_URI,
+};
+
+static void
+clutter_video_player_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ ClutterVideoPlayer *player;
+ ClutterVideoPlayerPrivate *priv;
+
+ player = CLUTTER_VIDEO_PLAYER(object);
+ priv = player->priv;
+
+ switch (prop_id)
+ {
+ case PROP_URI:
+ g_free (priv->uri);
+ priv->uri = g_strdup (g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+clutter_video_player_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ ClutterVideoPlayer *player;
+ ClutterVideoPlayerPrivate *priv;
+
+ player = CLUTTER_VIDEO_PLAYER(object);
+ priv = player->priv;
+
+ switch (prop_id)
+ {
+ case PROP_URI:
+ g_value_set_string (value, priv->uri);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GObject *
+clutter_video_player_constructor (GType gtype,
+ guint n_params,
+ GObjectConstructParam *params)
+{
+ GObjectClass * parent_class;
+ GObject * retval;
+
+ parent_class = G_OBJECT_CLASS (clutter_video_player_parent_class);
+ retval = parent_class->constructor (gtype, n_params, params);
+
+ construct_controls (CLUTTER_VIDEO_PLAYER (retval));
+
+ return retval;
+}
+
+static void
+clutter_video_player_finalize (GObject *object)
+{
+ ClutterVideoPlayer *player = CLUTTER_VIDEO_PLAYER (object);
+
+ g_free (player->priv->uri);
+
+ G_OBJECT_CLASS (clutter_video_player_parent_class)->finalize (object);
+}
+
+static void
+clutter_video_player_request_coords (ClutterActor *self,
+ ClutterActorBox *box)
+{
+ ClutterVideoPlayer * player = CLUTTER_VIDEO_PLAYER (self);
+ ClutterVideoPlayerPrivate *priv = player->priv;
+ ClutterActorBox cbox;
+
+ cbox.x1 = 0;
+ cbox.y1 = 0;
+ cbox.x2 = box->x2 - box->x1;
+ cbox.y2 = box->y2 - box->y1;
+
+ priv->width = CLUTTER_FIXED_INT (cbox.x2);
+ priv->height = CLUTTER_FIXED_INT (cbox.y2);
+
+ g_debug ("coords request %d x %d",
+ CLUTTER_FIXED_INT (cbox.x2),
+ CLUTTER_FIXED_INT (cbox.y2));
+
+ clutter_actor_request_coords (priv->vtexture, &cbox);
+
+ clutter_actor_set_position (priv->control, 0, 0);
+
+ CLUTTER_ACTOR_CLASS (clutter_video_player_parent_class)->request_coords (self, box);
+
+ g_object_notify (G_OBJECT (self), "height");
+ g_object_notify (G_OBJECT (self), "width");
+
+ clutter_actor_set_position (priv->control,
+ (clutter_actor_get_width (priv->vtexture) -
+ CTRL_SIZE) / 2,
+ clutter_actor_get_height (priv->vtexture) -
+ (CTRL_SIZE + CTRL_SIZE/2));
+
+ clutter_actor_show (priv->control);
+ clutter_actor_queue_redraw (priv->vtexture);
+}
+
+static void
+clutter_video_player_class_init (ClutterVideoPlayerClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
+
+ gobject_class->constructor = clutter_video_player_constructor;
+ gobject_class->set_property = clutter_video_player_set_property;
+ gobject_class->get_property = clutter_video_player_get_property;
+ gobject_class->finalize = clutter_video_player_finalize;
+
+ actor_class->request_coords = clutter_video_player_request_coords;
+
+ g_object_class_install_property (gobject_class,
+ PROP_URI,
+ g_param_spec_string ("uri",
+ "uri",
+ "uri",
+ "test.avi",
+ G_PARAM_CONSTRUCT |
+ CLUTTER_PARAM_READWRITE));
+
+ g_type_class_add_private (gobject_class, sizeof (ClutterVideoPlayerPrivate));
+}
+
+static void
+clutter_video_player_init (ClutterVideoPlayer *self)
+{
+ ClutterVideoPlayerPrivate *priv;
+
+ self->priv = priv = CLUTTER_VIDEO_PLAYER_GET_PRIVATE (self);
+
+ priv->paused = TRUE;
+}
+
+ClutterActor *
+clutter_video_player_new (const gchar * uri)
+{
+ return g_object_new (CLUTTER_TYPE_VIDEO_PLAYER, "uri", uri, NULL);
+}
+
+static void
+toggle_pause_state (ClutterVideoPlayer *player)
+{
+ if (player->priv->paused)
+ {
+ clutter_media_set_playing (CLUTTER_MEDIA(player->priv->vtexture),
+ TRUE);
+ player->priv->paused = FALSE;
+ clutter_actor_hide (player->priv->control_play);
+ clutter_actor_show (player->priv->control_pause);
+ }
+ else
+ {
+ clutter_media_set_playing (CLUTTER_MEDIA(player->priv->vtexture),
+ FALSE);
+ player->priv->paused = TRUE;
+ clutter_actor_hide (player->priv->control_pause);
+ clutter_actor_show (player->priv->control_play);
+ }
+}
+
+static void
+input_cb (ClutterStage *stage,
+ ClutterEvent *event,
+ gpointer user_data)
+{
+ ClutterVideoPlayer *player = (ClutterVideoPlayer*)user_data;
+ ClutterVideoPlayerPrivate *priv = player->priv;
+
+ switch (event->type)
+ {
+ case CLUTTER_BUTTON_PRESS:
+ {
+ ClutterActor *actor;
+ ClutterButtonEvent *bev = (ClutterButtonEvent *) event;
+
+ actor
+ = clutter_stage_get_actor_at_pos
+ (CLUTTER_STAGE(clutter_stage_get_default()),
+ bev->x, bev->y);
+
+ printf("got actor %p at pos %ix%i\n", actor, bev->x, bev->y);
+
+ if (actor == priv->control_pause || actor == priv->control_play)
+ {
+ toggle_pause_state (player);
+ return;
+ }
+
+ }
+ break;
+ default:
+ break;
+ }
+}
diff --git a/attic/table/clutter-video-player.h b/attic/table/clutter-video-player.h
new file mode 100644
index 0000000..f2ec2e2
--- /dev/null
+++ b/attic/table/clutter-video-player.h
@@ -0,0 +1,81 @@
+/*
+ * Clutter.
+ *
+ * An OpenGL based 'interactive canvas' library.
+ *
+ * Authored By Matthew Allum <mallum@openedhand.com>
+ *
+ * Copyright (C) 2006 OpenedHand
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __CLUTTER_VIDEO_PLAYER_H__
+#define __CLUTTER_VIDEO_PLAYER_H__
+
+#include <clutter/clutter-group.h>
+#include <clutter/clutter-color.h>
+#include <clutter/clutter-event.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+
+G_BEGIN_DECLS
+
+#define CLUTTER_TYPE_VIDEO_PLAYER (clutter_video_player_get_type())
+
+#define CLUTTER_VIDEO_PLAYER(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ CLUTTER_TYPE_VIDEO_PLAYER, ClutterVideoPlayer))
+
+#define CLUTTER_VIDEO_PLAYER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ CLUTTER_TYPE_VIDEO_PLAYER, ClutterVideoPlayerClass))
+
+#define CLUTTER_IS_VIDEO_PLAYER(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ CLUTTER_TYPE_VIDEO_PLAYER))
+
+#define CLUTTER_IS_VIDEO_PLAYER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ CLUTTER_TYPE_VIDEO_PLAYER))
+
+#define CLUTTER_VIDEO_PLAYER_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ CLUTTER_TYPE_VIDEO_PLAYER, ClutterVideoPlayerClass))
+
+typedef struct _ClutterVideoPlayer ClutterVideoPlayer;
+typedef struct _ClutterVideoPlayerClass ClutterVideoPlayerClass;
+typedef struct _ClutterVideoPlayerPrivate ClutterVideoPlayerPrivate;
+
+struct _ClutterVideoPlayer
+{
+ ClutterGroup parent_instance;
+
+ /*< private >*/
+ ClutterVideoPlayerPrivate *priv;
+};
+
+struct _ClutterVideoPlayerClass
+{
+ ClutterGroupClass parent_class;
+};
+
+GType clutter_video_player_get_type (void) G_GNUC_CONST;
+
+ClutterActor *clutter_video_player_new (const gchar * uri);
+
+G_END_DECLS
+
+#endif /* __CLUTTER_VIDEO_PLAYER_H__ */
diff --git a/attic/table/hand0.png b/attic/table/hand0.png
new file mode 100644
index 0000000..5b71eeb
--- /dev/null
+++ b/attic/table/hand0.png
Binary files differ
diff --git a/attic/table/hand1.png b/attic/table/hand1.png
new file mode 100644
index 0000000..2cf1b78
--- /dev/null
+++ b/attic/table/hand1.png
Binary files differ
diff --git a/attic/table/hand2.png b/attic/table/hand2.png
new file mode 100644
index 0000000..ac5243a
--- /dev/null
+++ b/attic/table/hand2.png
Binary files differ
diff --git a/attic/table/hand3.png b/attic/table/hand3.png
new file mode 100644
index 0000000..83c7c07
--- /dev/null
+++ b/attic/table/hand3.png
Binary files differ
diff --git a/attic/table/hand4.png b/attic/table/hand4.png
new file mode 100644
index 0000000..2d289ee
--- /dev/null
+++ b/attic/table/hand4.png
Binary files differ
diff --git a/attic/table/hand5.png b/attic/table/hand5.png
new file mode 100644
index 0000000..f0fb783
--- /dev/null
+++ b/attic/table/hand5.png
Binary files differ
diff --git a/attic/table/hand6.png b/attic/table/hand6.png
new file mode 100644
index 0000000..7a50ab7
--- /dev/null
+++ b/attic/table/hand6.png
Binary files differ
diff --git a/attic/table/hand7.png b/attic/table/hand7.png
new file mode 100644
index 0000000..d0dfd4f
--- /dev/null
+++ b/attic/table/hand7.png
Binary files differ
diff --git a/attic/table/hand8.png b/attic/table/hand8.png
new file mode 100644
index 0000000..21236ce
--- /dev/null
+++ b/attic/table/hand8.png
Binary files differ
diff --git a/attic/table/pause_png.h b/attic/table/pause_png.h
new file mode 100644
index 0000000..7971cf9
--- /dev/null
+++ b/attic/table/pause_png.h
@@ -0,0 +1,431 @@
+static unsigned char pause_png [] = {
+0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,
+0x52,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x08,0x06,0x00,0x00,0x00,0x5c,
+0x5a,0xf3,0xe0,0x00,0x00,0x00,0x04,0x73,0x42,0x49,0x54,0x08,0x08,0x08,0x08,
+0x7c,0x08,0x64,0x88,0x00,0x00,0x00,0x19,0x74,0x45,0x58,0x74,0x53,0x6f,0x66,
+0x74,0x77,0x61,0x72,0x65,0x00,0x77,0x77,0x77,0x2e,0x69,0x6e,0x6b,0x73,0x63,
+0x61,0x70,0x65,0x2e,0x6f,0x72,0x67,0x9b,0xee,0x3c,0x1a,0x00,0x00,0x18,0xb4,
+0x49,0x44,0x41,0x54,0x78,0x9c,0xe5,0x5d,0xcf,0x8f,0x25,0xc9,0x51,0x8e,0xa8,
+0xd7,0xdd,0xef,0x47,0xf7,0x74,0xcf,0xec,0x0c,0x06,0x76,0x61,0x77,0xc6,0xbb,
+0xd8,0xbb,0x7b,0x40,0x2c,0x86,0x03,0x12,0x48,0x20,0x2c,0x21,0xc4,0x09,0x63,
+0xa1,0xe5,0x80,0xe4,0x83,0x25,0x0c,0x47,0x2e,0x9c,0xf9,0x07,0x10,0x37,0x8c,
+0xb9,0x21,0x0e,0x7b,0x47,0xb2,0x40,0x32,0x57,0x30,0xa7,0x35,0x02,0x2f,0x12,
+0x07,0x66,0x90,0x58,0x2d,0xf6,0xee,0x7a,0xd7,0xeb,0xf1,0xcc,0x74,0xbf,0x7e,
+0x15,0x1c,0xea,0x57,0x66,0xc6,0x17,0x59,0x99,0x2f,0xdf,0x7b,0xfd,0xba,0x37,
+0xa4,0x99,0xae,0xca,0xaa,0xcc,0x8a,0xf8,0x32,0x32,0x22,0x32,0x32,0xab,0x1e,
+0x8b,0x08,0x11,0x11,0x31,0x33,0x13,0xd1,0x31,0x11,0xdd,0x22,0xa2,0x13,0x22,
+0x62,0xba,0xde,0x74,0x49,0x44,0x3f,0x24,0xa2,0x1f,0x48,0x27,0xe4,0x9a,0xc4,
+0xcc,0x15,0x35,0x98,0xdc,0x22,0xa2,0x05,0x5d,0x7f,0x6c,0x96,0xd4,0xe0,0xf2,
+0xc3,0xae,0x80,0x45,0x84,0x98,0xf9,0x88,0x88,0x5e,0x24,0xa2,0xea,0xca,0x58,
+0xdb,0x1e,0x5d,0x10,0xd1,0xff,0x89,0xc8,0xb3,0x75,0x2a,0x33,0xf3,0x31,0x11,
+0x3d,0x4f,0xd7,0xbf,0xf3,0x11,0x3d,0x25,0xa2,0xef,0x89,0xc8,0x45,0xd7,0xf1,
+0x3f,0x49,0x37,0x53,0x09,0x88,0x88,0x8e,0x88,0xe8,0x45,0x66,0x3e,0xc8,0xad,
+0xd8,0x5a,0x82,0xcf,0xd0,0xcd,0x54,0x02,0x22,0xa2,0x39,0x35,0xd8,0x70,0xc5,
+0xcc,0x67,0x6d,0xc1,0x4d,0xa7,0x5b,0x6b,0xd4,0xb9,0x4b,0x44,0x87,0x9b,0x66,
+0x64,0xcf,0xa8,0x22,0xa2,0xe3,0x8a,0x88,0x9e,0xbb,0x6a,0x4e,0x76,0x44,0x59,
+0x8a,0xd0,0xc6,0x4c,0x77,0xb6,0xc4,0xcb,0xbe,0xd1,0xad,0x83,0xaa,0xaa,0x4c,
+0x93,0x79,0xfb,0xf6,0xd9,0xec,0xce,0x73,0x77,0x4e,0x76,0xc9,0x51,0x09,0x7d,
+0xf2,0xc9,0x8f,0x9e,0x7c,0xf0,0xfe,0x07,0x4f,0x8c,0xcb,0x33,0x66,0x9e,0x88,
+0xc8,0x2a,0xb1,0xb9,0x49,0x55,0xd9,0xde,0xf2,0xee,0xbd,0xbb,0x8b,0xd3,0xd3,
+0x5b,0x8b,0x6c,0x26,0xaf,0x88,0x7e,0xf0,0xe1,0x47,0x8f,0x3f,0xfe,0xf8,0x63,
+0x2b,0x4e,0x3a,0x39,0xa8,0xaa,0x4a,0xf9,0xbf,0x97,0xee,0xbf,0x78,0xf7,0xb5,
+0xd7,0x5f,0xfb,0xe3,0xd9,0x6c,0xfa,0xa5,0x36,0x58,0xba,0x16,0x24,0x22,0xcb,
+0xe5,0x72,0xf9,0xad,0x47,0x0f,0xff,0xe7,0x2f,0xff,0xe3,0xdf,0xbf,0xfb,0x28,
+0xbc,0xbe,0x5a,0xad,0x2a,0x22,0x4a,0x52,0x84,0xd9,0x6c,0xc6,0x97,0x97,0x97,
+0xaa,0xfc,0xb5,0xd7,0x5f,0x7d,0xf1,0xc1,0x67,0xef,0xff,0xc9,0xd1,0xd1,0xd1,
+0xef,0xb4,0x41,0xf6,0xb5,0x20,0x11,0x79,0x7a,0x71,0x7e,0xf1,0xcd,0x77,0xde,
+0xf9,0xcf,0xbf,0x78,0xf8,0xdf,0x8f,0x3e,0x08,0x2e,0x73,0x55,0x55,0x95,0x84,
+0xff,0x5e,0x7b,0xfd,0xd5,0xaf,0xce,0xe7,0xb3,0x3f,0xbc,0x4e,0x4a,0x40,0x44,
+0xc4,0xcc,0x87,0x47,0x47,0x47,0xbf,0x7d,0xff,0xc1,0x4b,0x7f,0x8a,0xe4,0x9a,
+0xcd,0x66,0x59,0xed,0xa1,0x36,0x5e,0x7e,0xe5,0xb3,0x7f,0x36,0x9d,0x4e,0x7f,
+0xf7,0x3a,0x29,0x01,0x11,0x11,0x33,0xcf,0xa7,0xb3,0xe9,0xef,0xbd,0xfa,0xea,
+0xe7,0xbf,0x82,0xe4,0xaa,0xaa,0xaa,0xa2,0xf0,0xdf,0x6c,0x36,0xfb,0xd2,0x55,
+0x33,0x5e,0x42,0x87,0x87,0x87,0x5f,0xbc,0xff,0xe0,0xa5,0xbb,0xa1,0x5c,0xb9,
+0x14,0xd6,0xbf,0xff,0xe0,0xa5,0xbb,0x07,0x07,0x07,0xbf,0xb1,0x05,0x96,0x77,
+0x46,0xb3,0xf9,0xec,0xcb,0xa8,0xcf,0x0f,0x10,0x40,0xcc,0x7c,0xfb,0x0a,0x78,
+0xdc,0x18,0x31,0xf3,0xe4,0xf4,0xf4,0xf4,0xac,0xaa,0xaa,0x0f,0xdd,0xf2,0xdc,
+0xbc,0x52,0x88,0xcd,0xe9,0xe9,0xe9,0x19,0x33,0x4f,0xca,0x39,0xbc,0x3a,0x62,
+0xe6,0x3b,0xa8,0xcf,0xa1,0x22,0xdc,0x04,0xaa,0x2a,0xa6,0xc9,0xc4,0xef,0x33,
+0xe4,0xf3,0xe3,0x6d,0xf8,0xd8,0xf0,0x0d,0xc9,0x26,0x84,0xb8,0x10,0x65,0x28,
+0xc2,0x9b,0x6f,0xbe,0x49,0x6f,0xfc,0xc2,0x1b,0x9b,0xe6,0xa9,0x98,0x1e,0x3e,
+0x7c,0x48,0x5f,0xff,0xeb,0xaf,0xeb,0x0b,0xcc,0xaa,0x23,0x73,0x62,0x84,0xd9,
+0x6c,0x46,0x75,0x5d,0xab,0x36,0x11,0x7d,0xed,0x8f,0xbe,0x46,0x0f,0x1e,0x3c,
+0x48,0x6e,0x7b,0x57,0xf4,0xf6,0x77,0xde,0xa6,0xb7,0xde,0x7a,0x4b,0x95,0x17,
+0x59,0x84,0x57,0x5e,0xf9,0x39,0x7a,0x70,0xff,0xe5,0x62,0xe6,0x36,0x4d,0x87,
+0x87,0x38,0x66,0x63,0xd2,0x8a,0x90,0x4b,0xca,0x22,0x18,0x09,0xc6,0xcf,0x7d,
+0xee,0xf3,0xf4,0x33,0x2f,0xfc,0x6c,0xd1,0xb3,0xb6,0x41,0x3f,0x7a,0xfc,0x18,
+0x96,0x7f,0xaa,0x5c,0x03,0x03,0x8b,0xa0,0x46,0xf8,0x08,0x69,0xd7,0x70,0x33,
+0x7c,0x83,0xa5,0x08,0x45,0x2b,0x73,0xfb,0x4a,0x5c,0xb1,0x84,0xb2,0xad,0xa1,
+0x08,0x5e,0x7d,0xae,0xf8,0x46,0x60,0x85,0xfa,0xfc,0xe6,0x5a,0x04,0xe0,0x1a,
+0x16,0x8b,0x45,0x72,0x47,0x2e,0x16,0x0b,0x09,0x83,0x4b,0xcb,0x35,0x5c,0x37,
+0x82,0x16,0x01,0x45,0x90,0xa9,0x24,0x22,0xf4,0xf4,0x99,0x95,0xd1,0xdd,0x3c,
+0x4d,0x8f,0xa6,0x34,0x99,0xa4,0x2d,0x22,0x22,0xd7,0x90,0x4b,0x21,0x36,0x20,
+0x09,0x6b,0x52,0x5d,0xaf,0xe8,0xd9,0x79,0x7c,0xe5,0xbb,0xdd,0x02,0xe0,0x1c,
+0x57,0xc4,0x44,0x24,0x84,0xf5,0xb5,0xbb,0x5f,0xa4,0x59,0x0e,0x6d,0x8e,0x9b,
+0x93,0xf9,0x6c,0x91,0xec,0xba,0x36,0xae,0x08,0x97,0x97,0x4b,0x7a,0xff,0x83,
+0xef,0xed,0xcc,0x77,0xde,0xbd,0x73,0x8f,0x8e,0x8f,0xd3,0xd6,0x8e,0xb6,0xa1,
+0x08,0xcd,0xaa,0x74,0x1a,0x3d,0x7d,0xfa,0x84,0x3e,0xfc,0x28,0xcc,0xe4,0x6e,
+0x8f,0x7e,0xea,0x33,0xcf,0xd3,0xd1,0xd1,0x34,0xe9,0x5e,0xa8,0x08,0xe5,0x9d,
+0xb8,0x9f,0xe6,0x72,0x13,0xc1,0x62,0x09,0x36,0x85,0x9b,0xa2,0xb6,0x4a,0x9f,
+0xae,0x60,0x11,0x28,0xc2,0xd1,0x51,0xfa,0xf2,0xc0,0x6c,0x36,0xa3,0xd5,0x6a,
+0xe5,0x61,0x93,0xe3,0x1a,0xf6,0x99,0x3e,0x8d,0xd3,0xc7,0x22,0x25,0x57,0xd8,
+0xdc,0x9c,0xe9,0x63,0xc1,0xac,0x41,0xf6,0xdb,0xdc,0x85,0xc4,0xac,0x53,0xcc,
+0xa5,0x6b,0x0d,0xf6,0xac,0x41,0x54,0xdb,0xfb,0x8c,0x54,0x51,0x8a,0x19,0x45,
+0xb2,0xbb,0x16,0x56,0x08,0x75,0x26,0xe6,0xa2,0x34,0x46,0x40,0xf5,0xad,0x98,
+0x61,0x5f,0x3a,0x5d,0x61,0x63,0x30,0x76,0x23,0x5d,0x83,0xd5,0x09,0x3b,0xcd,
+0x2c,0xee,0x81,0x26,0x20,0x16,0xac,0x69,0x68,0xd9,0xac,0x41,0xc0,0xe3,0xf6,
+0xc1,0x55,0x98,0x9a,0xa0,0x3b,0x6e,0x3e,0x4f,0xdf,0xa3,0x3b,0x9f,0xcf,0xf5,
+0x6a,0x65,0x14,0xaa,0x3d,0xc0,0x22,0x91,0x50,0x9f,0x67,0xe4,0x11,0x64,0x2f,
+0xfa,0x3d,0x15,0xf0,0x8a,0x2b,0xe8,0x0b,0x73,0x48,0x25,0x94,0x8c,0x3c,0x82,
+0x20,0x6c,0x76,0x0d,0x96,0x08,0xe9,0x81,0x8a,0x6f,0xb5,0x62,0x84,0x24,0x8e,
+0xf7,0x43,0x07,0x34,0xe0,0x96,0xf9,0x63,0xd6,0x6b,0x0d,0x6b,0x04,0x8b,0xfe,
+0x5a,0x03,0x1b,0x6b,0x0d,0xa0,0xf4,0x2a,0xf0,0xd2,0xe2,0x99,0xae,0x41,0xcf,
+0x1a,0x8a,0x52,0xcc,0x6b,0xd7,0xdc,0xe0,0xf3,0x0c,0x26,0x98,0xb5,0x2f,0x5c,
+0xad,0x52,0x37,0x30,0x37,0xa4,0x33,0x8b,0xd7,0x6b,0xfa,0x68,0xf5,0x4f,0x59,
+0xb0,0x88,0x4c,0xcf,0x7e,0xd8,0x09,0x4c,0x85,0x09,0xa5,0xf9,0x7c,0xae,0x14,
+0xc7,0x9e,0x35,0x20,0x6c,0x76,0x4b,0x39,0x4f,0x2f,0x0a,0x16,0x9b,0xa9,0x5b,
+0xc1,0xd3,0x37,0x46,0xe1,0x7c,0xdd,0x70,0x0d,0x1b,0xd8,0x98,0x92,0x63,0x01,
+0x52,0xcd,0xf2,0xf6,0x08,0xc5,0x08,0x19,0xb3,0x86,0xd2,0x80,0x6a,0xd7,0x94,
+0xea,0xe6,0xd1,0xf4,0x31,0x47,0x31,0xaa,0xaa,0x52,0x8a,0x60,0xa6,0x98,0xf7,
+0x21,0x8a,0x16,0xcd,0xc6,0x96,0x5c,0x83,0x6e,0x7a,0x0f,0xc4,0x37,0x3b,0x61,
+0x13,0xab,0x8f,0xa9,0x29,0x66,0x71,0xfe,0x1f,0x61,0x6b,0x2f,0x68,0x0b,0x8b,
+0x4e,0xbb,0x95,0x56,0x32,0x94,0x11,0xa5,0x98,0x73,0x83,0x45,0x35,0x6b,0xd8,
+0xd3,0x95,0x56,0x22,0xac,0x8c,0x59,0xd3,0xc7,0xf4,0x18,0x01,0xcd,0x95,0x93,
+0xaa,0x6e,0x94,0x84,0xd2,0x16,0xbe,0xd1,0xf4,0x31,0x37,0x58,0x5c,0x2e,0x97,
+0xaa,0x4d,0xcc,0xd4,0x1e,0xe4,0x58,0x32,0x18,0xd8,0xf8,0xf4,0xf1,0x4a,0x48,
+0x02,0xfd,0xdb,0xa2,0x6b,0xb8,0x6e,0xd3,0xc7,0xd4,0x1c,0x4b,0x61,0x8a,0xf9,
+0xea,0xa7,0x48,0x59,0xcf,0x07,0x29,0xe6,0x5c,0x52,0xf5,0xa3,0x4b,0x0d,0x57,
+0x8d,0x4d,0x3a,0x15,0xa5,0x98,0x73,0x16,0x35,0xb6,0x4b,0x69,0x31,0x02,0x4a,
+0x31,0xe7,0x2e,0x3a,0xa5,0xa6,0x98,0x11,0x5d,0x8d,0xab,0x48,0x9b,0x3e,0x16,
+0x2d,0x43,0x47,0xda,0xdd,0x1d,0x49,0x4e,0x8c,0x90,0x37,0x5d,0x0c,0x09,0xbd,
+0x38,0x6b,0x1a,0x98,0x3d,0x88,0x11,0x72,0x06,0xa5,0x95,0x47,0x48,0x6b,0x21,
+0x63,0x51,0x63,0xab,0x94,0x18,0x23,0x10,0x08,0x16,0x73,0x2c,0xc2,0x62,0xb1,
+0xa0,0xe5,0x72,0x19,0xac,0x35,0xe0,0x19,0x16,0x76,0x0d,0xbb,0x07,0x27,0x23,
+0x8f,0xa0,0x83,0xc5,0xeb,0xb5,0x1f,0x41,0x2b,0xa3,0xbd,0x0a,0x0d,0xdf,0x6b,
+0xc8,0x7a,0x5a,0xfa,0x4b,0xb0,0x57,0x6d,0x2a,0x3b,0x16,0x76,0x90,0x59,0xec,
+0xba,0x80,0xbd,0xb2,0x3d,0x00,0x20,0x63,0x87,0x52,0x2e,0x25,0x6f,0x67,0xdf,
+0x07,0x18,0x32,0xa8,0x68,0xd6,0xd0,0xdd,0x75,0xd5,0x32,0x77,0xcf,0x1f,0xe3,
+0x7a,0x13,0x8a,0x90,0xb5,0xd6,0x30,0x5a,0xb0,0x5d,0x92,0x76,0x58,0xa6,0x70,
+0x5c,0x94,0x62,0x6e,0x2c,0x8f,0x96,0xae,0xc1,0x2a,0xf6,0xf8,0xcd,0x21,0x22,
+0xe0,0xd8,0x0e,0x11,0x58,0x75,0x64,0xf1,0xe6,0xd5,0x98,0x62,0x84,0x6d,0x8f,
+0xe2,0x42,0xb4,0x0d,0x6d,0x41,0x18,0x85,0x04,0xa7,0x8f,0xe5,0x31,0x02,0xb7,
+0xaf,0x69,0xd9,0xd7,0x31,0xad,0x09,0x42,0x62,0x67,0x32,0x33,0x1d,0x1c,0xf8,
+0xaf,0xc7,0x85,0xe7,0x31,0x42,0x5b,0xd5,0xb2,0xf2,0x12,0x92,0x62,0x45,0xb7,
+0x8c,0x8d,0x81,0x15,0xc2,0x21,0x73,0x3f,0x82,0x41,0xcc,0xc4,0x16,0xf3,0xe2,
+0xfd,0x71,0x2b,0x59,0x0f,0x8a,0x31,0x91,0x7c,0x7f,0xe3,0x1a,0xca,0x12,0x4a,
+0xa9,0xc1,0x22,0xe4,0x80,0x87,0x0a,0x10,0x1b,0x81,0x87,0x4e,0xe5,0xa4,0xa7,
+0x24,0x5f,0x76,0x29,0x63,0xd1,0x09,0x4f,0xb3,0xd0,0xb3,0x06,0x70,0x0c,0x94,
+0xb8,0xa9,0xa9,0xae,0x26,0x2b,0x88,0x3d,0x4b,0x60,0x8b,0xa9,0x86,0x2f,0xe1,
+0x40,0xb6,0x9c,0x74,0x7a,0x7b,0xaf,0xdf,0x3a,0xd7,0x26,0xdc,0xf1,0x7e,0x00,
+0xd8,0xf4,0x45,0xa9,0xd8,0xc4,0x95,0xa3,0x8b,0x11,0xdc,0x3b,0x8b,0xa7,0x8f,
+0x35,0x52,0x04,0x93,0x8f,0x31,0xd7,0x60,0x54,0x46,0x0a,0x92,0x04,0x80,0x78,
+0x47,0xe6,0x73,0x99,0xb3,0x32,0x81,0x88,0xd4,0x76,0x78,0xeb,0x89,0x96,0x32,
+0xc6,0x2f,0x07,0x77,0x85,0x45,0xeb,0x63,0xd3,0xdf,0x93,0x33,0x7d,0x84,0x8a,
+0x90,0x93,0x89,0x6d,0x83,0xa2,0x81,0xa5,0x30,0xe3,0x93,0xe1,0x23,0x0d,0x00,
+0xe2,0xc3,0xd0,0x70,0x0d,0x20,0x8f,0x50,0x1a,0x2c,0x4a,0x5d,0xc3,0x29,0xb3,
+0xe9,0x80,0x7a,0xd7,0xd0,0xb7,0xb0,0x53,0x6c,0x22,0x16,0x41,0x95,0xe1,0x18,
+0x01,0x29,0x82,0x02,0xbd,0x13,0x32,0x84,0x81,0xb1,0x0c,0x44,0x4a,0x43,0xad,
+0x2e,0xd4,0xcd,0xc5,0x1c,0x2a,0xee,0x06,0x34,0x7d,0x5c,0x63,0x3f,0x82,0x77,
+0x5e,0x0b,0xc3,0x41,0xe6,0xef,0x59,0x8c,0xc5,0x25,0x16,0x36,0xa9,0x0a,0x92,
+0x87,0x8d,0x15,0xd3,0x94,0xbf,0xe9,0xe4,0xe7,0x76,0xf3,0x13,0x4a,0x01,0x67,
+0x08,0x84,0x24,0x00,0x3c,0x36,0xac,0x60,0xb1,0x7c,0x17,0xb3,0x0a,0x16,0x6b,
+0x93,0x41,0xd7,0x1e,0x0f,0xf7,0x47,0x6e,0xf7,0x29,0x4d,0x41,0xf2,0xb1,0xc1,
+0xc5,0xdb,0x79,0xe5,0x8d,0x5b,0xab,0x10,0x28,0xc9,0x08,0x2f,0x61,0x03,0xee,
+0x99,0xd7,0xb9,0xa3,0xb8,0x9b,0xcd,0x96,0xa5,0x98,0x17,0x8b,0x85,0x56,0x9c,
+0xdc,0x65,0x6d,0x66,0xd2,0x5b,0x59,0x4a,0xb0,0x49,0x51,0x0c,0x27,0xc7,0x62,
+0x5c,0x2f,0x5a,0x74,0xb2,0x3d,0x31,0x77,0x87,0x5e,0x79,0x7f,0xb4,0x8e,0x82,
+0x38,0x80,0xa7,0x2a,0x46,0x48,0x15,0xb3,0x24,0x2f,0xa8,0x19,0x14,0xd6,0xaf,
+0x2e,0x39,0xf9,0xd3,0xee,0x3d,0x29,0xdd,0x29,0xc1,0x26,0x32,0x68,0x40,0x4c,
+0x60,0xa9,0x2d,0xc2,0xa5,0xc8,0x22,0x24,0x8d,0x8f,0x51,0x05,0x49,0x00,0x20,
+0x32,0x12,0x63,0xa0,0x85,0x09,0xa0,0x9c,0xe9,0xe3,0xc1,0xc1,0x41,0xf2,0x07,
+0x37,0xad,0xe7,0xe7,0xdd,0x62,0x63,0x93,0x34,0x68,0xc0,0xe3,0xac,0x7a,0x1b,
+0xc9,0x2c,0x8a,0x77,0xdc,0x45,0xb1,0xd6,0xee,0xde,0x88,0x08,0x20,0xff,0x90,
+0x06,0x40,0xa2,0xd7,0x2d,0xdc,0x8f,0x40,0x94,0xfe,0x7d,0x04,0x6c,0x8a,0x25,
+0xba,0xd9,0x35,0x07,0x1b,0x64,0x39,0xb0,0xc7,0x09,0x23,0xce,0xc2,0xe9,0xa3,
+0x45,0xb0,0xd9,0x48,0xba,0x0d,0x03,0x11,0x81,0xc0,0x04,0x20,0xa8,0x23,0xc6,
+0x71,0xc0,0xd7,0xa6,0xa7,0x8f,0xb1,0xd7,0xe2,0x31,0x36,0x46,0xc3,0xb9,0xd8,
+0x84,0x96,0x43,0xfc,0x29,0xa9,0x97,0xdd,0xd0,0x13,0x3b,0x45,0x1b,0x78,0xaf,
+0xc1,0x22,0x10,0x1f,0x8f,0x24,0xa0,0xfc,0xe2,0x91,0x8c,0x0c,0x39,0x41,0x57,
+0x24,0xf8,0xf2,0xab,0x6e,0x7e,0xfa,0x68,0x7a,0x06,0x58,0xce,0x64,0xce,0x1b,
+0x4a,0xb1,0x09,0x14,0x83,0x3b,0xc5,0x48,0xd4,0xf3,0x42,0x8b,0x30,0x36,0x79,
+0xd1,0xd2,0x29,0x23,0x66,0x00,0x10,0x8a,0x3f,0x2e,0xfc,0x38,0x31,0xf8,0x3a,
+0x7b,0x8e,0x22,0x2c,0x16,0x0b,0xf0,0x7d,0x04,0xdb,0x22,0x40,0x1e,0x9c,0xff,
+0x71,0x95,0xcd,0x61,0x03,0x59,0x30,0xf8,0x4a,0x7e,0xaf,0xc1,0x5e,0x65,0x43,
+0x4c,0xb0,0x79,0x19,0x01,0x31,0x0a,0x40,0xaa,0xf0,0x4e,0x2b,0x96,0x0c,0x61,
+0x79,0xee,0x0e,0xa5,0xb0,0x3e,0x6a,0xb3,0xb9,0xe0,0x72,0x13,0x96,0x07,0xcc,
+0x7a,0x97,0xb6,0x83,0x4d,0x5f,0x62,0xf0,0x0b,0x83,0xc5,0x83,0x83,0x03,0xd5,
+0x52,0x9e,0x72,0xb8,0xf3,0x19,0x43,0x05,0x95,0x6c,0x1c,0x5c,0x4a,0x15,0x1e,
+0xad,0xe3,0x61,0x61,0xab,0xaa,0x92,0x50,0xb6,0xdc,0x18,0x21,0xac,0x5f,0x55,
+0x95,0xe4,0x6d,0x91,0x1f,0xc1,0x66,0x44,0x39,0x72,0x15,0x03,0xa9,0x84,0xd1,
+0xe9,0x7a,0xfa,0x98,0xd7,0xe9,0x9a,0x50,0xae,0x50,0x31,0x15,0x82,0xb0,0xb6,
+0x62,0x84,0xfc,0x37,0xe7,0xa9,0x16,0x21,0x47,0x11,0x0e,0x0f,0x0f,0xe1,0x6b,
+0xf1,0x10,0x9b,0xb1,0x10,0x27,0x38,0x1b,0x46,0x6c,0x5c,0x39,0x62,0xd8,0x48,
+0x2d,0xb4,0xaa,0x57,0x24,0x52,0xd3,0xaa,0x5e,0xd1,0x29,0x9f,0xc1,0x86,0x92,
+0x2d,0x02,0x8a,0x11,0xd0,0x8d,0xb9,0x99,0x19,0x04,0x82,0x09,0x40,0x54,0x78,
+0x14,0x06,0xfb,0xf5,0xa1,0x45,0x60,0xbd,0x1d,0x3d,0xf7,0xad,0x2e,0xf5,0x36,
+0x35,0xeb,0x37,0xa4,0x03,0x76,0xe3,0x65,0xea,0x92,0xad,0x1c,0x52,0x0b,0xd5,
+0x52,0x93,0xd4,0x4d,0x47,0xaf,0x56,0xab,0xe6,0x5c,0xea,0x5e,0x41,0xb1,0x62,
+0x27,0x60,0x93,0x1a,0x2c,0x9a,0x5a,0x84,0x9e,0xab,0xee,0x15,0xef,0x8f,0x77,
+0x6b,0x70,0x94,0xa6,0x18,0x46,0xfb,0x4e,0x53,0x16,0xbf,0xdb,0x98,0x3e,0x26,
+0x7f,0x59,0x4d,0x28,0x8a,0x8d,0x48,0x4d,0x75,0xdb,0xd9,0x75,0x5d,0x53,0x2d,
+0xab,0xe6,0xef,0xaa,0xf9,0x2b,0x61,0x9d,0x5e,0x06,0xa2,0x6e,0x36,0xa2,0x79,
+0x09,0x99,0x30,0xdd,0xa6,0x2a,0x83,0xbb,0x98,0xb1,0xf9,0x1b,0x9b,0x35,0x0c,
+0x25,0xa2,0x2e,0x60,0xe5,0x48,0x52,0x8c,0xb1,0xbe,0x13,0x4b,0xeb,0xcb,0xa7,
+0x8f,0xe8,0xeb,0xec,0xa9,0xae,0x81,0xab,0xe6,0x0b,0xed,0xab,0x55,0x63,0xbe,
+0x3b,0x53,0xde,0x75,0xbc,0xaa,0xec,0xe6,0x22,0xbc,0x1d,0x5f,0xec,0x5d,0x1b,
+0xde,0xc3,0x75,0x57,0x42,0xed,0xbe,0xc9,0xb1,0x08,0xe9,0xc1,0x22,0xb6,0xcc,
+0x90,0x81,0xb0,0x04,0x2a,0x47,0x44,0x31,0xa2,0x7e,0x14,0xf1,0xa6,0x0b,0xed,
+0xb7,0x97,0x13,0xe8,0xf8,0xf8,0x18,0xbd,0xe0,0x92,0x8c,0x0d,0x13,0xd1,0x93,
+0x27,0x8f,0xdd,0x22,0xff,0x7e,0x71,0x3a,0xb4,0xad,0xe0,0x0d,0x07,0x71,0x31,
+0x70,0x10,0x71,0xca,0x5d,0xa5,0x40,0x24,0x64,0xf6,0xa5,0x0e,0x16,0xb3,0x62,
+0x84,0x31,0xd7,0x10,0xd1,0x50,0x6d,0xc4,0x1c,0xf0,0x80,0xc5,0x80,0x4a,0xa1,
+0x18,0x8a,0x68,0x3d,0x70,0x0d,0xc7,0xc7,0x79,0xbf,0x67,0xaa,0x5c,0x83,0x65,
+0x11,0x80,0x52,0x37,0x15,0x9c,0x88,0x27,0xc0,0x46,0xc2,0x85,0x35,0xa2,0x56,
+0x39,0x80,0x62,0xb4,0x05,0x43,0x39,0x50,0x96,0x80,0x9d,0xee,0xf1,0x1b,0x8f,
+0x11,0x2c,0xe2,0xe0,0x44,0xc2,0x52,0x43,0x39,0xc2,0x60,0xd2,0xb7,0x18,0x62,
+0x28,0x85,0x6a,0x26,0xa2,0xf5,0xeb,0xfd,0xe8,0xa7,0x4b,0x3a,0x58,0x8c,0xc4,
+0x08,0x9a,0x03,0x3f,0xbe,0x61,0xf1,0xb0,0x09,0x95,0xa3,0x91,0xdf,0xbd,0xd6,
+0xcd,0x11,0x86,0x01,0xa3,0x14,0xc0,0x55,0x0a,0xaf,0xbd,0xe1,0x7c,0xf3,0xc1,
+0xa2,0x19,0x06,0xb3,0xc7,0x81,0xba,0x2b,0x54,0x8e,0x04,0xc5,0x50,0xd6,0x22,
+0x66,0xe0,0x4d,0xad,0xd7,0x99,0xc5,0x5c,0xd2,0xc1,0xa2,0x31,0x6b,0x30,0xb0,
+0x61,0x66,0x72,0xb7,0x94,0x2a,0x83,0xec,0x28,0xc7,0xa0,0x18,0xbe,0xc5,0xb0,
+0xad,0xc5,0x88,0x55,0xe8,0xda,0x05,0xfc,0x26,0xbf,0x0d,0x9d,0x95,0x34,0xe1,
+0x86,0x19,0x4d,0x86,0x72,0x40,0xc5,0x48,0x51,0x0a,0xb0,0xdb,0x97,0x6c,0xd7,
+0xc0,0x95,0x7e,0x2d,0x3e,0xe7,0x33,0x41,0x87,0x87,0x87,0x12,0x2e,0x43,0xdb,
+0xae,0xc1,0x20,0x26,0x62,0x17,0x9b,0x5e,0x64,0xac,0x1c,0xc2,0xd2,0xdf,0xe4,
+0x2a,0x06,0xb6,0x16,0x86,0x55,0x70,0x1f,0x6f,0x0c,0x92,0x74,0x45,0x40,0xef,
+0x03,0x18,0xf2,0xb3,0x73,0xcd,0x63,0x47,0x29,0x07,0x56,0x0c,0x51,0x0d,0x68,
+0xa5,0x68,0xa6,0x57,0x35,0xd5,0xc1,0x35,0x69,0xff,0x21,0x7e,0xd1,0x6b,0xed,
+0xb9,0x84,0xbe,0xca,0x06,0xb1,0x31,0x88,0x1d,0xcb,0xe6,0xe6,0x43,0x42,0xe5,
+0xf0,0xec,0x82,0xeb,0x2e,0xb8,0x2f,0x8d,0x2a,0x05,0x1a,0x22,0xbd,0xaa,0x19,
+0xd8,0x84,0x04,0x15,0xa1,0x82,0xae,0x41,0x53,0xc3,0xe2,0x10,0x2e,0xe3,0x91,
+0xdf,0x5d,0xc6,0x8a,0xd1,0x74,0xb4,0x90,0xc8,0x8a,0x56,0x6d,0x87,0x4b,0xdd,
+0xce,0xad,0xdb,0xf3,0x8e,0x4e,0x16,0x27,0x4e,0xcd,0xf6,0x48,0x30,0xbf,0x28,
+0x58,0x2c,0xfd,0x3a,0x7b,0xc5,0x9c,0x8c,0x4d,0x73,0x81,0x7b,0x1e,0xfd,0x78,
+0xa1,0x77,0x00,0xcd,0xa9,0x83,0x8d,0x30,0xb2,0x16,0x71,0xa5,0xf0,0x2d,0xa8,
+0x7f,0x04,0xb1,0x29,0x99,0x3e,0x22,0x8a,0x85,0x7f,0xae,0x62,0x34,0x1d,0x5d,
+0xd3,0xca,0xe9,0x64,0xe9,0x3a,0x5d,0x9c,0x4d,0xb0,0x61,0xf0,0x44,0x9d,0xe8,
+0x9d,0xdf,0xf4,0x9f,0x24,0xc4,0xa6,0xf9,0x43,0x1f,0xd3,0x2a,0xfe,0xdd,0x47,
+0x66,0xbc,0xd6,0x60,0xe0,0xd5,0x8f,0x5b,0x15,0x3b,0x4b,0xdb,0xc9,0x83,0x40,
+0x43,0x39,0xb2,0x16,0x86,0x52,0xb8,0x0a,0xe1,0x3d,0x73,0x70,0xa9,0xd6,0x3a,
+0x4c,0x58,0x56,0x14,0x23,0xf4,0x0f,0x95,0x21,0x1d,0x3a,0xfc,0x6d,0x3a,0xbf,
+0xe9,0x68,0x52,0x09,0x29,0x6f,0x44,0x78,0x80,0xf8,0x82,0xfb,0x7e,0x93,0x9d,
+0x5a,0x71,0x7e,0x19,0x24,0x94,0x72,0xa6,0x8f,0x6d,0x1e,0x41,0xb5,0x09,0xa7,
+0xd6,0xf0,0xe5,0xe0,0xe1,0x5e,0x71,0xfe,0x0b,0x95,0xa3,0xc3,0xc6,0x2d,0xef,
+0xb1,0x71,0x2c,0x09,0xb2,0x14,0x1d,0x36,0xd8,0x22,0x50,0xde,0xac,0x21,0x39,
+0xb3,0x08,0x48,0x88,0xe8,0xc9,0xd3,0x1f,0x23,0x16,0x3c,0x77,0xdf,0x28,0xb0,
+0xdb,0x89,0xce,0x88,0x18,0x11,0x7c,0x18,0x21,0x4d,0x44,0x10,0x9a,0x3e,0x8b,
+0xdf,0x6d,0x7d,0xa6,0x1f,0x5b,0x1f,0x5d,0x77,0x48,0x05,0xb7,0xc1,0x9c,0x13,
+0x0b,0x29,0xc5,0x48,0xc0,0x06,0xb9,0x0f,0x1f,0x1b,0xed,0x16,0xac,0x94,0x38,
+0x0c,0x16,0x93,0x15,0xc1,0xf0,0x8d,0x43,0x71,0x2b,0x4c,0xdf,0xf9,0x58,0x78,
+0x6e,0x47,0xbc,0x2f,0x24,0x39,0x65,0x81,0x90,0x8e,0x95,0xa0,0x60,0xaa,0x1a,
+0xe3,0x17,0x59,0x84,0x5c,0x02,0xb3,0x8e,0xe4,0xe9,0x63,0xe3,0xb2,0xfc,0xeb,
+0x26,0x36,0xc0,0x5a,0x60,0x4b,0xe1,0x63,0x23,0x83,0x69,0x68,0x9f,0x93,0x86,
+0x0d,0xb4,0x08,0x40,0x2a,0x23,0x8f,0x80,0x6e,0x6c,0xee,0x75,0x2d,0xa3,0x97,
+0x0b,0x77,0x78,0x73,0x85,0x37,0xcd,0xa1,0x0c,0x1b,0x3e,0xa5,0x8b,0x8a,0xbc,
+0x40,0x6b,0x70,0x13,0x63,0x16,0xa1,0x74,0x19,0x7a,0x3a,0x9d,0xd2,0xc5,0xc5,
+0x05,0x94,0x37,0x95,0xc2,0x77,0xc4,0x31,0x36,0xd2,0x2a,0x8c,0x3b,0x60,0x80,
+0xa5,0x00,0xd8,0x70,0x18,0x34,0x65,0x60,0x13,0x92,0x61,0x11,0xd0,0x48,0x42,
+0xf6,0xaf,0x29,0x1f,0xda,0x6d,0xe7,0xb7,0x9e,0x4b,0x70,0x84,0xf7,0x94,0x02,
+0x8c,0x06,0xee,0x80,0x03,0x56,0xc2,0x0d,0xae,0xc2,0x30,0x15,0xf0,0x8b,0x96,
+0xa1,0x73,0xbe,0x8f,0x40,0x84,0x5c,0xc3,0xc4,0xc0,0xc6,0x20,0x0e,0xa3,0x1a,
+0x84,0x0d,0xb2,0x16,0x11,0x6c,0x9c,0x01,0xe4,0x0e,0x96,0x81,0x12,0xb0,0x29,
+0x5a,0x74,0x52,0x25,0xd4,0x8e,0x10,0x72,0x98,0x6e,0x59,0xec,0x18,0x24,0x22,
+0x71,0x7c,0x9b,0x5e,0x39,0x1b,0x46,0x03,0x76,0x1d,0x8e,0x45,0xf0,0x94,0xcd,
+0x67,0x62,0x8b,0x29,0xe6,0xb4,0x59,0x83,0x41,0xc3,0xec,0x91,0xfd,0xb2,0x08,
+0x36,0x32,0x98,0xc7,0x00,0x1b,0x7b,0xb0,0x48,0x26,0x36,0x45,0x29,0x66,0x68,
+0x54,0x55,0xe7,0xb7,0x85,0x8e,0xf0,0x71,0xc1,0x43,0x2b,0x11,0x00,0xa1,0x2c,
+0x02,0x66,0x22,0x75,0xfa,0x98,0x4b,0xa9,0x8b,0x4e,0xf6,0xc0,0x61,0xf2,0x74,
+0x38,0x01,0x1b,0xd7,0x52,0x84,0x56,0xc2,0x1a,0x2c,0xf6,0x1a,0x2b,0xc6,0xa6,
+0x68,0xfa,0x68,0xed,0xcc,0x61,0xdf,0x24,0x90,0x78,0xc2,0x27,0x08,0x1e,0x8c,
+0x04,0x2f,0x96,0x08,0x14,0x02,0x93,0xad,0xf5,0x1b,0xf8,0x3a,0xbb,0x7f,0x6e,
+0xae,0x35,0x20,0xb6,0x78,0x73,0xd8,0xf4,0x4a,0x82,0x07,0x8b,0x99,0xe1,0xcf,
+0x99,0x35,0xac,0xb5,0x67,0xb1,0x77,0xd5,0xdc,0x06,0x44,0x83,0x5f,0x1b,0x0c,
+0x83,0x24,0x09,0x1e,0x15,0x32,0x38,0xb7,0x78,0x49,0x0d,0x16,0x73,0x29,0x79,
+0x17,0xb3,0xc3,0x4b,0x4f,0x42,0x18,0x9b,0x56,0x96,0x38,0x36,0x39,0x0a,0x81,
+0xd7,0x60,0xba,0xc2,0xb2,0x60,0x71,0x6c,0xad,0x41,0x9c,0x03,0x6e,0x7d,0xb8,
+0x53,0xd6,0x78,0x8c,0x30,0x1d,0xea,0x08,0x2e,0x4e,0x76,0xdd,0x52,0x08,0x24,
+0xb4,0x41,0x38,0x9f,0xae,0x57,0x1f,0xa7,0xd3,0xa9,0xd9,0x46,0x48,0xc7,0xc7,
+0xc7,0xea,0xbd,0x86,0xaa,0xe2,0xf8,0x5a,0x83,0x37,0x45,0x20,0x85,0x8d,0x38,
+0xd6,0xae,0xc3,0xa1,0x29,0x0f,0xb1,0x31,0x06,0x0b,0x54,0x08,0xfc,0xcd,0x86,
+0xe6,0x7e,0xcc,0x6f,0xd1,0xea,0x23,0xbb,0x91,0x61,0x2f,0xd9,0xb0,0xe6,0xee,
+0x65,0xbe,0xda,0x5b,0x90,0xe0,0x9e,0x92,0x90,0xf4,0x41,0x66,0x5c,0x68,0xe9,
+0x70,0x05,0x7c,0x19,0xfc,0x6e,0x61,0xd1,0x89,0xcd,0x3c,0x02,0x69,0x6c,0x88,
+0x14,0x36,0x5a,0x29,0x5c,0x4b,0x51,0x80,0x8d,0xa5,0x9b,0x62,0xc6,0x08,0xaa,
+0x0c,0xbe,0x16,0x1f,0xdd,0xa9,0xeb,0x06,0x88,0xbd,0x30,0x02,0x35,0x1f,0x09,
+0x6e,0x5b,0x84,0x98,0xd0,0x40,0xeb,0x9d,0x73,0x2b,0x58,0x0c,0x65,0x0b,0x53,
+0xc6,0x31,0xba,0xbc,0xbc,0xa4,0xc3,0xc3,0xc3,0xc4,0x59,0x43,0x17,0x0b,0x0c,
+0xc7,0x6e,0x5c,0xe3,0xe1,0xa0,0x94,0x22,0xb4,0xa0,0x01,0x36,0xde,0x39,0x72,
+0x19,0x36,0x36,0x91,0xcc,0xa2,0x0e,0x16,0xad,0x6d,0x5e,0x4a,0xd4,0x61,0xc0,
+0x7b,0x0f,0x74,0x23,0x83,0x3e,0xd1,0x81,0x04,0xef,0xb2,0x61,0x31,0x85,0x08,
+0x85,0xee,0xfd,0x66,0x17,0x2f,0xb8,0x0c,0x0d,0x02,0x5b,0xab,0x8f,0xa1,0x6c,
+0x27,0x27,0x27,0xea,0x3e,0x8b,0x4e,0x4e,0x4e,0x54,0x42,0xc9,0x5a,0x7d,0x1c,
+0x90,0xf7,0x4b,0xbc,0x97,0x4f,0x54,0x5a,0x98,0x86,0xb5,0x82,0xd8,0x60,0xf1,
+0xce,0x07,0x05,0xf0,0x77,0x33,0x07,0xec,0x8c,0x60,0x53,0xf4,0x5e,0x83,0xe5,
+0xa2,0x19,0x25,0x81,0x08,0x28,0x40,0x30,0x12,0x6c,0xa1,0x1d,0x21,0x99,0xda,
+0x73,0xd7,0x67,0x52,0xa0,0x11,0x76,0x40,0xb4,0x71,0xd7,0x60,0x8c,0x30,0x73,
+0xfa,0xe8,0x30,0x3c,0xe0,0xd0,0x9c,0x13,0x01,0x6c,0x62,0x83,0x25,0xc0,0x26,
+0xb4,0x9c,0x3d,0x05,0x03,0x76,0x0b,0x7b,0x16,0x23,0xc1,0x5a,0xfb,0x3f,0x4a,
+0x0b,0x63,0x21,0xbb,0x73,0xac,0xf5,0xc8,0x3a,0x34,0xbf,0x12,0xc0,0xc3,0x03,
+0x7b,0x65,0x30,0x3a,0x67,0x03,0x6b,0x0d,0xe9,0x9b,0x57,0x01,0xb1,0x8b,0x18,
+0x3b,0x69,0xe1,0xf6,0x22,0x45,0x06,0x4b,0x88,0x4d,0x37,0x70,0x62,0xd8,0x38,
+0xcf,0x25,0x21,0xcf,0x3d,0x8c,0xc9,0x45,0x94,0x33,0x7d,0xe4,0x00,0x7f,0xe7,
+0xde,0x5e,0x09,0xdb,0x2d,0x54,0x83,0x67,0x10,0x5b,0xeb,0x1d,0xb3,0x28,0x03,
+0xd7,0xc4,0xe6,0x08,0x10,0xcc,0x00,0x99,0x09,0xa5,0x9d,0x4d,0x1f,0xbb,0x40,
+0x36,0x0b,0x1b,0x6f,0xed,0x60,0x04,0x9b,0x3e,0xde,0x8a,0x60,0x43,0x90,0x81,
+0xf4,0xe9,0xe3,0xe1,0xe1,0x61,0xd2,0x8d,0x1d,0xd3,0x5e,0x88,0xc0,0xdc,0x5e,
+0x19,0x3a,0x72,0x10,0xb2,0xb9,0x3b,0x5c,0x20,0x71,0x85,0x0e,0x83,0xca,0xde,
+0x24,0xc2,0x11,0x80,0xac,0x41,0x07,0x04,0x8a,0x11,0xca,0x7f,0xca,0x27,0xc4,
+0x66,0x52,0x4d,0xe0,0xb3,0x50,0xf8,0xd4,0xa9,0x87,0x89,0x8d,0x77,0xde,0xed,
+0x3f,0x1c,0xac,0xa9,0x69,0x39,0xa1,0x35,0x30,0xb0,0x11,0xdc,0x97,0xc9,0xbf,
+0x16,0x3f,0x36,0x92,0xc4,0x39,0x6a,0x6e,0x75,0xb3,0x80,0x5a,0xe8,0x66,0x9e,
+0xec,0x0a,0xd9,0x08,0x8d,0xdc,0x85,0xab,0x1c,0xfd,0x6a,0x61,0x0b,0xc0,0xc0,
+0xa0,0x2f,0x70,0x6a,0x66,0x71,0x5b,0x3b,0x94,0xbc,0xa0,0x90,0x7a,0xc3,0xaf,
+0x12,0x62,0x10,0x9b,0x6e,0xd6,0xd5,0x76,0xe8,0xb8,0x75,0x68,0xf7,0x6c,0x89,
+0x3f,0x50,0x1c,0x66,0x1c,0xb7,0x90,0xa1,0x08,0xeb,0x64,0x16,0x9d,0x10,0xa8,
+0x3f,0xf3,0xa7,0x32,0xbe,0xd0,0x9d,0x59,0x0c,0xfd,0xa4,0x18,0x23,0xa0,0xd7,
+0x79,0xf6,0xcd,0x61,0xfb,0xd0,0x9e,0xfa,0x91,0x88,0x5d,0x99,0xa0,0x37,0x7a,
+0x52,0x69,0x3e,0x9f,0x2b,0xc5,0xb1,0x5c,0x03,0xd8,0xa8,0x4c,0x83,0x45,0x20,
+0x22,0x80,0x4d,0xbf,0x5d,0x5d,0x61,0x13,0xb7,0x0e,0x2e,0x36,0xee,0x40,0x69,
+0x18,0x71,0x78,0x6a,0xff,0x59,0x53,0xeb,0xb0,0x2c,0x73,0xab,0x9a,0xf6,0x84,
+0x3d,0x0f,0xce,0xdc,0x36,0x1c,0x05,0xd2,0x76,0x28,0xb4,0x0e,0xc8,0x55,0x38,
+0x02,0xfb,0xe6,0x50,0x73,0x63,0xf1,0x8b,0x96,0xa1,0xe7,0xf3,0xb9,0x21,0x17,
+0xa6,0xe4,0x59,0x43,0xff,0xbf,0x78,0x65,0xfd,0x94,0x17,0x60,0xd3,0xcf,0xb5,
+0x00,0x36,0xc8,0x3a,0x8c,0x2a,0x03,0x74,0x4c,0xb6,0xb5,0x0c,0x69,0x8d,0x45,
+0xa7,0xc1,0x1e,0x78,0x30,0x74,0x2f,0x6b,0x48,0x6b,0xfc,0x7b,0xb3,0x18,0xb1,
+0x0e,0xbd,0x7f,0x04,0xae,0x01,0x28,0x43,0xf7,0xb8,0xf0,0xe5,0x4f,0x6b,0xd6,
+0x50,0x1a,0x2c,0xe6,0xcf,0x1a,0x34,0x36,0x9d,0x45,0x88,0x61,0xa3,0xad,0x43,
+0xc4,0x1a,0x98,0xca,0xd0,0xb8,0x8d,0x24,0x6c,0x92,0xf3,0x08,0xa3,0x7b,0xf7,
+0xbb,0x70,0xa5,0xd5,0xfa,0x2e,0x7a,0xed,0x84,0x76,0x72,0xe1,0x32,0x0c,0x0b,
+0x6d,0x1d,0xfa,0xe3,0x34,0x65,0xe8,0x1e,0xcd,0x2e,0x07,0x8c,0xf9,0xad,0xaa,
+0x4a,0x6d,0x44,0x51,0xdf,0x44,0x1a,0xa1,0xf5,0xde,0x6b,0x70,0x94,0x37,0x11,
+0x1b,0x6d,0x1d,0xf2,0x06,0x4a,0x1f,0xa3,0x24,0x62,0x03,0x7f,0xb8,0xc3,0xda,
+0xd4,0x11,0x27,0x57,0xf3,0x51,0x9a,0x18,0x8c,0x00,0x67,0xcd,0x60,0x6d,0x65,
+0xf0,0x38,0x70,0x76,0x32,0x02,0x7e,0x91,0x19,0xcf,0xcd,0x2c,0x9e,0x9f,0x9f,
+0x83,0x36,0xc7,0x2c,0xa8,0x7f,0x3c,0x86,0x4d,0x03,0x4b,0x21,0x36,0x41,0x17,
+0x7a,0x2a,0x32,0xca,0x6f,0x43,0x19,0x9b,0x57,0x09,0x85,0x08,0xbe,0xd6,0x3b,
+0xd3,0x19,0x25,0x64,0x54,0x19,0xc8,0x37,0x85,0x44,0x58,0xf8,0x96,0x06,0x7b,
+0x14,0x33,0x7f,0x9b,0xdf,0xc5,0x6c,0xbf,0xfb,0x48,0x18,0x1b,0x87,0x57,0x0b,
+0x9b,0x71,0x65,0xa0,0x11,0x6c,0xd4,0x8c,0x91,0xc6,0xb0,0xb1,0x66,0x0d,0x6a,
+0xb8,0x45,0xa7,0x48,0xa1,0x1b,0xa4,0xce,0x04,0x76,0xd6,0x61,0x1d,0x65,0x18,
+0xfc,0x22,0x94,0x2e,0x42,0x22,0x96,0x22,0x94,0xcd,0x1a,0x9a,0x36,0xfc,0xfa,
+0x6d,0x9b,0xe8,0x4e,0xef,0xcf,0xb0,0xb5,0x48,0x27,0x7e,0x52,0x94,0x41,0xb5,
+0x1d,0xc5,0x06,0xd5,0x19,0xae,0x24,0xcf,0x1a,0x90,0x76,0xe0,0x85,0x95,0x4e,
+0xc8,0xf0,0x51,0x7d,0xe3,0x49,0xca,0x40,0x23,0x02,0xfb,0x32,0x87,0x89,0x95,
+0xee,0xce,0xc1,0x3e,0x30,0x5b,0x8b,0x4e,0xdb,0x79,0xaf,0x01,0xbf,0xf2,0xa6,
+0x3b,0xc7,0xe5,0x36,0x65,0xa0,0x0c,0xc7,0x14,0x0c,0x92,0x7e,0xd8,0x0c,0x5d,
+0x9e,0x88,0x4d,0xc3,0x73,0xa2,0x45,0x98,0x4c,0x26,0x70,0xbe,0xac,0xc9,0xd1,
+0x7a,0x67,0xc2,0xe0,0x99,0xac,0x98,0x32,0x90,0x73,0x6c,0x0a,0x4c,0x64,0xd4,
+0xe8,0xb9,0x08,0x4d,0x9f,0xc5,0x2f,0x8a,0x11,0x72,0x82,0xc5,0xd5,0x6a,0xa5,
+0x82,0x2a,0x33,0x8f,0xd0,0x06,0x66,0x0e,0x83,0x5a,0x8e,0x98,0x0b,0xed,0xef,
+0x0f,0x3a,0x7d,0xc4,0x45,0x68,0x3e,0x86,0x56,0x5c,0x9e,0x43,0x82,0x31,0x02,
+0xb3,0xde,0xc9,0x33,0x9a,0x4f,0xef,0x0e,0xda,0x68,0xcd,0x9f,0xce,0x18,0x02,
+0x3b,0x8b,0x23,0x81,0x7e,0xfb,0x4f,0x71,0x4d,0x5f,0xa0,0x74,0xae,0xb8,0x6e,
+0x9d,0xd4,0xcc,0x62,0x4e,0x1e,0xe1,0xd6,0xad,0x5b,0x7a,0x19,0xda,0xd8,0x98,
+0x02,0xb1,0x69,0x8f,0x07,0x6c,0x02,0xf5,0x76,0xd3,0xc3,0x2c,0x69,0x16,0xd3,
+0xd7,0x32,0x10,0x2c,0xea,0x20,0x25,0x39,0x46,0xc8,0x0a,0x16,0xa3,0x02,0x23,
+0x8d,0x8c,0x08,0x34,0x62,0x15,0x62,0xbe,0xcf,0x25,0x21,0x7b,0xd1,0x69,0xd3,
+0x6f,0x3a,0x99,0x79,0x84,0xb0,0x88,0x9d,0x42,0x0f,0x8e,0x7e,0x94,0xa8,0xdb,
+0x91,0xfd,0x73,0xb1,0xf1,0x6f,0x4c,0xc3,0x26,0x36,0x48,0x42,0x2a,0xff,0x50,
+0x86,0xf3,0xd0,0x21,0x52,0xf5,0xe2,0x25,0x68,0x15,0xc2,0x3a,0x61,0x19,0x74,
+0x15,0x3a,0x3c,0x36,0x03,0x22,0x64,0x11,0x72,0x29,0x79,0x17,0x73,0xd8,0x4f,
+0x01,0x8d,0xbb,0x88,0xa0,0x32,0x68,0x68,0x6c,0x78,0x75,0xd6,0x39,0xe4,0x67,
+0xf3,0x16,0xc1,0x61,0xc1,0x0b,0x5a,0xc8,0x31,0x4f,0xe2,0xdf,0x17,0xa3,0x54,
+0x9d,0x56,0x95,0x9c,0xe3,0x41,0xd9,0xd2,0x62,0x84,0x5c,0x4a,0xb6,0x08,0x3d,
+0x73,0x3e,0x36,0xa1,0xf5,0x73,0xef,0x0b,0xeb,0x6a,0xcf,0x9f,0xe0,0x1e,0x8c,
+0x9a,0x1d,0x36,0x42,0x79,0x31,0x82,0xea,0x0f,0x6b,0xfa,0xd8,0x3f,0xd0,0xe8,
+0xc1,0xb5,0x3a,0x17,0xd5,0x1b,0x55,0xff,0xa0,0xbe,0x21,0xec,0x64,0x32,0xf1,
+0x3e,0x7f,0x93,0xfb,0xc1,0x4d,0x35,0x7d,0x34,0x4c,0x2d,0x31,0x01,0x6c,0x70,
+0x14,0x94,0xf4,0xdc,0x35,0xeb,0xa1,0x76,0xac,0x3d,0x8b,0xe1,0x04,0x61,0xbd,
+0xed,0xec,0xd1,0x47,0xa7,0xf9,0x2e,0x6d,0xfb,0xb0,0xff,0x54,0xe4,0xc5,0x4b,
+0xad,0xb9,0x05,0xfc,0x76,0xa3,0xd7,0x95,0x2f,0x37,0xc5,0x0c,0x2d,0x42,0xea,
+0xa7,0x73,0x22,0xa6,0x7d,0x6b,0x24,0xc1,0x09,0x1b,0xd8,0x80,0x09,0x42,0xc1,
+0x47,0xb9,0x4b,0xc4,0x5a,0xb7,0xae,0x80,0xda,0xf6,0x2e,0x9c,0x50,0xd8,0x1c,
+0x45,0x38,0x39,0x39,0xd1,0x1f,0xca,0x48,0x76,0x37,0x5a,0xbe,0x6d,0x2b,0x41,
+0xbb,0xc9,0x4f,0x3b,0x93,0xd4,0x18,0xa1,0x28,0x58,0x94,0xf0,0x74,0x3d,0x71,
+0x85,0xc8,0xb7,0x06,0x20,0x28,0x1c,0x0e,0xc3,0x67,0xd8,0x7b,0xf7,0x43,0xd9,
+0x72,0xd6,0x1a,0xba,0x36,0xc2,0xf3,0x9c,0xb8,0xa3,0x4c,0xdd,0xd7,0xa9,0x17,
+0x76,0x48,0xc6,0xac,0x21,0xfb,0x8b,0x29,0x81,0xf9,0xc1,0x9d,0x9f,0x32,0xed,
+0x5b,0x83,0x04,0xd7,0x4b,0xb5,0x08,0xb9,0x84,0xf2,0x2b,0xd1,0x64,0x1b,0x0c,
+0xe5,0xc3,0x72,0x8c,0xd7,0xba,0x36,0x24,0x3a,0xf8,0x72,0xf2,0x08,0xa9,0xc1,
+0xa2,0xcf,0x1b,0x78,0xb8,0x33,0xa2,0xbd,0xc1,0xed,0xd4,0x49,0x13,0x16,0xdd,
+0x85,0x9e,0x37,0x1c,0xa6,0xae,0x35,0x14,0x07,0x8b,0xe6,0x5a,0x83,0x44,0xb1,
+0xf1,0x32,0xa3,0x2e,0x1e,0x86,0xe5,0xb3,0x09,0xdb,0x44,0xe3,0x36,0xb2,0xac,
+0x25,0x5c,0x6b,0xe8,0xd2,0xa8,0x6e,0x14,0x19,0x37,0x7f,0xa2,0x8f,0x04,0x96,
+0x92,0x62,0x59,0x9c,0x32,0xef,0x36,0x2d,0x60,0x4e,0x97,0x59,0xab,0x8f,0xa5,
+0x5f,0x67,0x0f,0x7f,0xfb,0xd1,0x5c,0x7d,0x04,0x4a,0x80,0x67,0x58,0x63,0x52,
+0x89,0x86,0xc8,0xc5,0x26,0x3a,0x10,0x09,0x06,0xf4,0xc9,0xae,0xa1,0xbb,0xd1,
+0x35,0x17,0x96,0x22,0x58,0xd3,0xc7,0x71,0x8d,0x17,0xd0,0xc9,0x86,0x76,0x63,
+0xed,0x6a,0x4f,0x01,0xd0,0x06,0xbf,0x9b,0xc8,0x23,0x84,0xee,0x25,0x96,0x47,
+0x80,0xd8,0x84,0x3c,0x5b,0xd8,0xd8,0x20,0xd8,0x65,0xe2,0x3f,0xb3,0x0b,0x16,
+0x3d,0x5e,0x28,0x23,0x8f,0x90,0xfa,0xc1,0x4d,0xc8,0x8f,0xf8,0xe6,0x56,0xa0,
+0x7b,0x70,0xb5,0x7c,0x44,0xe3,0x81,0x72,0x78,0x2a,0xd4,0x1d,0x06,0x81,0xa5,
+0xf5,0x51,0xc9,0x70,0xd1,0x28,0xe7,0xc7,0xbd,0x4e,0x4f,0x4f,0xc1,0x2b,0x6f,
+0x78,0xf5,0xd1,0x79,0x67,0xcd,0xe3,0xcb,0x57,0x82,0x9e,0x79,0x63,0x80,0xa4,
+0x59,0x83,0xd1,0x80,0xdc,0xc1,0x86,0x09,0x63,0x93,0xb1,0x43,0x29,0xe6,0x07,
+0xb1,0x01,0xf7,0x94,0x60,0xd4,0x25,0x18,0x1a,0x1f,0xb1,0x06,0x6e,0x7d,0xdf,
+0x71,0x6f,0xd7,0x22,0x24,0xb5,0x29,0x3a,0x07,0xe2,0x7b,0xbe,0x88,0x12,0x8c,
+0x60,0x03,0x07,0x08,0xb0,0x06,0xc3,0xb1,0x5b,0x37,0xe3,0x05,0x17,0xa4,0x1d,
+0xf6,0xc7,0xb4,0x7c,0x86,0xba,0x33,0xdb,0xcc,0x75,0xe7,0xed,0x9d,0xee,0xf1,
+0x50,0x60,0x6a,0xbc,0x5e,0x7e,0xd6,0x16,0x42,0x0c,0x7e,0xd1,0x2e,0xe6,0x9c,
+0xf7,0x1a,0xea,0xba,0x56,0x23,0xa7,0x99,0x3e,0xea,0x67,0xe1,0xa1,0xd1,0x72,
+0x1b,0x73,0x95,0x09,0xd8,0x44,0x07,0x88,0xe2,0xc3,0xc7,0xa6,0xc9,0x2c,0x26,
+0x7e,0x4c,0x2b,0xd9,0x22,0xa0,0x19,0x92,0x94,0x0b,0xea,0x1f,0x5b,0x5a,0x8e,
+0x2d,0x48,0xd7,0xa4,0xb5,0x8b,0xb9,0xf3,0xef,0xb9,0x2f,0xb6,0xf4,0x6d,0x24,
+0x5a,0x04,0x76,0xe5,0xea,0xd9,0xdb,0x14,0x36,0x5e,0x2d,0xff,0xd8,0xc3,0x49,
+0x9a,0xec,0xac,0x73,0x87,0x00,0x19,0x88,0x08,0xe2,0x82,0xdf,0x74,0x42,0x69,
+0x54,0x4f,0x31,0xc3,0x2a,0x05,0x82,0xa6,0x9a,0x3d,0x72,0x8f,0x9d,0xbd,0x0d,
+0x76,0x1a,0xb5,0xff,0x98,0x56,0x37,0x02,0xd6,0xd8,0xc5,0xec,0x7b,0x21,0x66,
+0x41,0xcf,0xea,0x40,0x6f,0x4e,0x7c,0xa9,0x7c,0x6b,0x3f,0x82,0x53,0x58,0x3f,
+0x63,0x80,0x08,0xd1,0x10,0x2a,0x76,0xd8,0x10,0xc6,0x26,0xc4,0x85,0x28,0x37,
+0xb3,0x18,0x2a,0x00,0x33,0x4d,0xa7,0x33,0x87,0x15,0x72,0x84,0xa6,0x80,0x4d,
+0xbf,0x0d,0x6d,0x4e,0x05,0x14,0x06,0xdb,0xae,0xaa,0x0a,0x9a,0xc6,0x6d,0xed,
+0x47,0xc8,0xfb,0x95,0x37,0x9f,0xb1,0xaa,0x62,0x9a,0x4e,0xbb,0x8d,0x30,0x25,
+0xd8,0xe8,0xba,0xc8,0x4a,0x32,0x33,0xf4,0x1c,0xd9,0xd3,0xc7,0xb1,0xca,0xea,
+0xd1,0xed,0xc9,0x10,0x95,0xb2,0xf7,0xa7,0xd1,0x50,0x21,0x50,0x18,0x5c,0x1b,
+0xda,0x13,0x6b,0xaf,0xa9,0x78,0xb6,0x40,0xf1,0x94,0x1a,0x2c,0x9e,0x9d,0x85,
+0x3f,0x92,0x69,0xd3,0xd9,0xd9,0x19,0x3d,0x7b,0xf6,0x6c,0xb4,0xcd,0x96,0x75,
+0x80,0x0d,0xd3,0x30,0x18,0x47,0xb0,0xf1,0x0e,0xc1,0xd7,0xa2,0xd6,0xc2,0x86,
+0xa2,0x81,0x74,0x48,0x46,0xb0,0x68,0xc4,0x08,0x20,0x33,0x87,0x35,0x1b,0x1e,
+0x9a,0x25,0x76,0x1c,0x40,0x9e,0xa0,0x61,0xa5,0xe1,0x05,0x1f,0x1c,0x23,0x94,
+0x5a,0x04,0x1c,0x2c,0x1a,0x31,0xc2,0x3e,0x62,0x43,0x19,0x16,0x21,0xd9,0x35,
+0xb8,0x9f,0x7c,0x09,0x39,0x35,0x0f,0xf5,0xa8,0x37,0xaf,0x21,0x4a,0x10,0x94,
+0xd8,0x58,0x74,0x62,0x9d,0x47,0xc8,0xa5,0x54,0xd7,0xe0,0x8e,0xe1,0xbd,0xc2,
+0xc6,0x18,0x24,0x45,0x79,0x04,0x7f,0x79,0x09,0x0b,0x31,0x1c,0x62,0xcd,0xee,
+0xda,0x81,0x34,0xa2,0xf9,0x43,0xfe,0x54,0xbb,0xa8,0x54,0xd7,0x20,0x19,0x8b,
+0x0d,0x22,0xa2,0xd6,0x15,0xec,0x3c,0x82,0x81,0x0d,0x84,0x69,0xd3,0xd8,0xf8,
+0x27,0x29,0x31,0x82,0x95,0x59,0x54,0x4f,0x40,0x37,0x2e,0x97,0x17,0xb4,0xba,
+0x5c,0xea,0x67,0xbb,0xfc,0x80,0xd9,0x04,0x8a,0x75,0x3c,0x96,0x25,0xb8,0xea,
+0x05,0x3c,0xa1,0x60,0x7e,0x34,0x24,0x42,0x74,0x7e,0x71,0x6e,0x2e,0xac,0xec,
+0xea,0x17,0x5c,0x2e,0x5a,0x6c,0x2c,0x2d,0xdb,0x3e,0x36,0xba,0x21,0x11,0xa2,
+0xf3,0x25,0xc6,0xa6,0xe8,0x13,0xbc,0xdf,0xf9,0xb7,0xb7,0xe9,0x9d,0x77,0xbe,
+0x1b,0x8a,0x62,0x50,0xf2,0xc0,0x8b,0x53,0xc2,0x88,0x5a,0xad,0x56,0xc9,0xb3,
+0x86,0xd2,0xdf,0x74,0xb2,0x2c,0xc2,0xb7,0xff,0xf5,0x9f,0xe9,0x60,0xe2,0x9b,
+0xdb,0x5d,0x62,0x63,0x59,0xea,0xcb,0xe5,0xe5,0xe6,0x63,0x84,0xe5,0x72,0x99,
+0xf5,0x9d,0xc2,0x5d,0xd2,0x55,0x4f,0x1f,0xcf,0xcf,0xcf,0xe9,0x9c,0xce,0x55,
+0xf9,0x3e,0x50,0xb2,0x22,0xa0,0xc0,0x21,0xba,0xe8,0x74,0x4d,0x68,0x52,0x55,
+0x52,0xa2,0x08,0xb7,0x6f,0xdf,0x56,0x8b,0x4e,0x93,0xc9,0x44,0x6e,0x02,0x36,
+0xc9,0x16,0x61,0x32,0x99,0xfc,0x4b,0x5d,0xd7,0xbf,0xb2,0x0b,0xa6,0xb6,0x44,
+0xef,0x7d,0xe1,0x17,0x7f,0xf9,0x91,0xab,0xe4,0x75,0x5d,0xd3,0xed,0xdb,0xb7,
+0xb3,0x1a,0x09,0xb1,0xf9,0xc2,0x1b,0xbf,0xf4,0xe8,0xbd,0xf7,0xde,0x7d,0x97,
+0x88,0x5e,0xd8,0x04,0x93,0x57,0x41,0x55,0x55,0x7d,0x3b,0xc4,0x85,0xc8,0x50,
+0x84,0xe3,0xe3,0xe3,0xbf,0x79,0xfc,0xf8,0xf1,0x75,0x55,0x04,0x99,0x4e,0xa7,
+0x7f,0x75,0xe7,0xce,0x73,0x5e,0x3e,0x79,0x1d,0xeb,0x10,0xd6,0xb9,0x7b,0xf7,
+0xde,0xe5,0x6c,0x36,0xff,0xc6,0xf9,0xf9,0xb3,0x3f,0x2f,0x63,0xf1,0xca,0x68,
+0x75,0xbc,0x38,0xfe,0x86,0x5b,0xd0,0xc9,0xc8,0x22,0xf2,0x1c,0xaa,0xf1,0xad,
+0x7f,0xfa,0xc7,0x97,0xbf,0xff,0xfe,0xf7,0xff,0xa0,0xae,0x57,0x3f,0xbd,0x03,
+0x06,0x37,0x42,0x15,0x57,0x1f,0xde,0xbb,0xf7,0x13,0x7f,0xf7,0xc5,0xdf,0xfc,
+0xad,0xff,0x82,0xd7,0xab,0xea,0x63,0x22,0x4a,0x8d,0x18,0x2b,0x22,0x82,0x26,
+0xe4,0x9b,0xff,0xf0,0xf7,0x3f,0xff,0xf1,0x47,0x1f,0xfd,0x7e,0x2d,0xf5,0x9d,
+0x35,0x59,0xdd,0x39,0x55,0xd5,0xe4,0xdd,0x17,0x9e,0x7f,0xe1,0x6f,0x7f,0xed,
+0x57,0x7f,0xfd,0x7f,0xd1,0x75,0x16,0x91,0x13,0x22,0x3a,0xda,0x31,0x5f,0x57,
+0x45,0x1f,0x51,0x5e,0xd8,0x7e,0x46,0x44,0x65,0x3b,0x60,0xaf,0x07,0xd5,0x15,
+0x11,0x5d,0x8c,0xde,0x76,0x33,0xe8,0x19,0xe5,0xcf,0xdd,0xf6,0x73,0x2a,0xb0,
+0x79,0x7a,0x5a,0x11,0xd1,0x92,0x36,0x36,0xb9,0xdd,0x5b,0xaa,0x89,0xe8,0xe9,
+0x1a,0xf5,0x3e,0x0d,0x83,0xe4,0x92,0x88,0xce,0x2b,0x6a,0x94,0xe0,0x93,0xb6,
+0xe0,0xa6,0xd2,0x8f,0x69,0x3d,0x65,0xaf,0xa9,0xc1,0x26,0x6f,0xfb,0xf3,0xf5,
+0x21,0xa1,0x06,0x1b,0xe2,0x20,0xfd,0x3e,0x25,0xa2,0x39,0x35,0x81,0xd2,0x75,
+0xa7,0x25,0x35,0x23,0xfa,0x82,0x36,0x63,0xf1,0xe6,0x44,0x34,0x23,0xb8,0x69,
+0xfc,0xda,0x51,0x87,0x4b,0xef,0x0d,0xfe,0x1f,0x25,0x02,0xa9,0x06,0xfd,0x19,
+0xc9,0xa6,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
+};
diff --git a/attic/table/play_png.h b/attic/table/play_png.h
new file mode 100644
index 0000000..e76dd0b
--- /dev/null
+++ b/attic/table/play_png.h
@@ -0,0 +1,540 @@
+static unsigned char play_png [] = {
+0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,
+0x52,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x82,0x08,0x06,0x00,0x00,0x00,0x9e,
+0xba,0x4c,0x59,0x00,0x00,0x00,0x04,0x73,0x42,0x49,0x54,0x08,0x08,0x08,0x08,
+0x7c,0x08,0x64,0x88,0x00,0x00,0x00,0x19,0x74,0x45,0x58,0x74,0x53,0x6f,0x66,
+0x74,0x77,0x61,0x72,0x65,0x00,0x77,0x77,0x77,0x2e,0x69,0x6e,0x6b,0x73,0x63,
+0x61,0x70,0x65,0x2e,0x6f,0x72,0x67,0x9b,0xee,0x3c,0x1a,0x00,0x00,0x1f,0x07,
+0x49,0x44,0x41,0x54,0x78,0x9c,0xed,0x5d,0x79,0x9c,0x14,0xd5,0x9d,0xff,0xbe,
+0x3a,0xba,0xbb,0xfa,0x1a,0x06,0x66,0x98,0x01,0x86,0x73,0x18,0x6e,0x10,0xe5,
+0x46,0x8e,0x19,0x30,0x1a,0x24,0x11,0x5d,0xb3,0x2e,0xc9,0x1a,0x4d,0x62,0x44,
+0xa2,0xc6,0xb8,0xc1,0xcd,0x6e,0x92,0xcd,0x1a,0x3f,0x2b,0x72,0x1f,0x8a,0x5c,
+0x2a,0x87,0x20,0xc2,0x20,0x51,0x50,0x23,0x2a,0x31,0x86,0x78,0xc5,0x80,0x89,
+0x37,0xa7,0x9a,0x21,0x20,0xcc,0xd1,0xdd,0xd3,0x73,0xf4,0xcc,0xf4,0x51,0x6f,
+0xff,0xa8,0xee,0x9e,0xaa,0xae,0x57,0xd5,0xc7,0x0c,0xcc,0x00,0xfd,0xe5,0xd3,
+0x43,0xd5,0xbb,0xab,0xbe,0xfd,0xfb,0xfd,0xde,0xfb,0xbd,0xa3,0x09,0xa5,0x14,
+0x84,0x10,0x02,0x20,0x17,0x80,0x1b,0x40,0x10,0x40,0x08,0x40,0x1d,0xa5,0xb4,
+0x05,0x59,0x74,0x6a,0x10,0x00,0x02,0x80,0x9e,0x00,0x6c,0x8c,0x78,0x3f,0x80,
+0x1a,0x4a,0x69,0xe4,0x82,0xb6,0x2a,0x8b,0x94,0x41,0x00,0xe4,0x01,0xe8,0x6a,
+0x92,0x46,0x06,0xe0,0x01,0x50,0x4b,0x29,0xa5,0x17,0xa4,0x55,0x59,0xa4,0x0c,
+0x02,0xa0,0x1f,0x00,0x4b,0x0a,0x69,0x43,0x00,0xaa,0x29,0xa5,0x0d,0xe7,0xb5,
+0x45,0x59,0xa4,0x05,0x0e,0xa9,0x91,0x07,0x00,0x22,0x80,0x9e,0x84,0x90,0x22,
+0x42,0x88,0xf5,0x3c,0xb6,0x29,0x8b,0x34,0xc0,0x65,0x90,0xc7,0x0e,0xa0,0x2f,
+0x21,0xa4,0x80,0x10,0xc2,0xb7,0x77,0x83,0xb2,0x48,0x0f,0x42,0x62,0xc0,0x90,
+0x21,0x83,0x4b,0x7a,0x15,0xf5,0x5c,0x42,0x29,0x9a,0x9b,0x9a,0x9a,0x5e,0x3a,
+0x7c,0xe8,0x83,0xdd,0xa1,0x50,0x88,0xd5,0x89,0xc9,0x01,0xe0,0x22,0x84,0x78,
+0x01,0xf8,0xb2,0xf6,0xb1,0x63,0x40,0x00,0x0c,0x52,0x07,0x5c,0xf3,0x8d,0x19,
+0x07,0x39,0x8e,0x2b,0x8c,0xdd,0x47,0x22,0x91,0x63,0x1e,0x8f,0x77,0xe1,0x87,
+0x7f,0xff,0xe8,0x7d,0x93,0x72,0xb2,0xf6,0xb1,0x83,0xa0,0x53,0xa1,0x6a,0xf2,
+0x00,0x80,0xe7,0xf9,0xc1,0xdd,0xbb,0xe7,0x6f,0x2b,0x9b,0x31,0x7d,0xcd,0x80,
+0xe2,0xfe,0x45,0x06,0xe5,0xc4,0xec,0x63,0xef,0xac,0x7d,0xbc,0xb0,0x48,0xd9,
+0x06,0x8a,0xa2,0x78,0x6d,0x71,0xf1,0x80,0x57,0xa6,0x4e,0xbb,0xfa,0x3f,0xba,
+0x74,0xc9,0x91,0x0c,0x92,0x49,0x50,0xec,0x63,0x21,0x21,0x44,0xa7,0x9e,0xb3,
+0x68,0x7f,0xa4,0xd5,0x89,0x21,0x84,0x58,0x25,0x49,0x9a,0x3f,0x76,0xdc,0x98,
+0xd7,0x27,0x4c,0x1c,0x37,0x27,0xea,0xc1,0x61,0xc1,0x0d,0xa0,0x1f,0x21,0xa4,
+0xab,0x49,0x9a,0x2c,0xda,0x01,0xa6,0x04,0x0a,0x82,0x80,0x69,0xd3,0xa6,0xe9,
+0x33,0x71,0x5c,0xf7,0x9c,0x9c,0x9c,0xa5,0x33,0x66,0x96,0xee,0x1a,0x39,0x72,
+0xf8,0x28,0x93,0xb2,0xf3,0xa0,0x10,0xe9,0x6a,0x7b,0x53,0xb3,0x60,0x21,0x29,
+0x81,0xbf,0xfa,0xe5,0xff,0xe0,0xf1,0xb5,0x6b,0xd1,0xa7,0x4f,0x1f,0x5d,0x3c,
+0xcf,0xf3,0xa3,0x0b,0x7b,0x14,0xee,0x2e,0x2d,0x9b,0xb6,0xb8,0x77,0xef,0xa2,
+0x7c,0x83,0x62,0x44,0x00,0x3d,0xa2,0xf6,0x91,0xe5,0xae,0xcb,0xa2,0x0d,0x48,
+0xaa,0x42,0x09,0x21,0x28,0x29,0x1e,0x84,0x0d,0xeb,0x9f,0xc0,0xaf,0x7e,0xf5,
+0x2b,0xd8,0x6c,0xb6,0xc4,0x78,0x62,0xb1,0x58,0x6e,0x1a,0x32,0x74,0xf0,0xeb,
+0x57,0x4f,0x99,0x3c,0xcf,0xe1,0xb0,0x1b,0x39,0x06,0x24,0x00,0x7d,0xb2,0xf6,
+0xb1,0x7d,0x91,0xb2,0x0d,0xe4,0x79,0x1e,0xd3,0xa7,0x95,0x61,0xd7,0xce,0x72,
+0xcc,0xfd,0xee,0x5c,0x5d,0x3c,0x21,0xc4,0xee,0x70,0xd8,0x17,0x4c,0x9a,0x3c,
+0xf1,0x95,0xb1,0xe3,0xc6,0x5c,0x63,0x52,0x54,0xcc,0x3e,0x76,0xcb,0xda,0xc7,
+0xb6,0x23,0x6d,0x4f,0x8c,0x24,0xd9,0xf1,0xc3,0xdb,0xef,0xc0,0xf6,0xed,0xcf,
+0x60,0xcc,0xd8,0x31,0xfa,0x02,0x39,0xae,0x77,0xd7,0xae,0xb9,0x6b,0x67,0xcc,
+0x2c,0xdd,0x3a,0x64,0xe8,0xe0,0x12,0x93,0x7a,0xbb,0x01,0xe8,0x9f,0xb5,0x8f,
+0x6d,0x43,0x26,0xae,0x34,0x00,0x40,0xf7,0xfc,0x02,0x2c,0xfc,0xbf,0x45,0x58,
+0xb1,0x62,0x25,0xba,0x77,0xef,0xae,0x8b,0x17,0x04,0x61,0x52,0xef,0xde,0x45,
+0xfb,0xa6,0x97,0x4e,0xfd,0xdf,0x82,0x82,0xee,0x39,0x06,0xc5,0x08,0x50,0xec,
+0x63,0x9f,0xac,0x7d,0xcc,0x0c,0x19,0x13,0x08,0x28,0xf6,0x71,0xc4,0xf0,0x91,
+0xd8,0xb2,0x79,0x2b,0xee,0xbf,0xff,0x7e,0x08,0x82,0x90,0x18,0xcf,0x5b,0xad,
+0xd6,0x7f,0x1f,0x75,0xc5,0xc8,0x03,0x93,0xaf,0x9e,0x78,0xab,0xc5,0x62,0x31,
+0xf2,0x9d,0xda,0x90,0xb5,0x8f,0x19,0x21,0x2d,0x02,0x29,0xa5,0x68,0x6e,0x69,
+0xd2,0x85,0x0b,0x82,0x88,0x59,0xdf,0x9c,0x8d,0xf2,0x5d,0xbb,0xf1,0xad,0x6f,
+0x7f,0x4b,0x17,0x4f,0x08,0xc9,0x71,0x3a,0x9d,0xbf,0x99,0x3a,0x6d,0xca,0xbe,
+0x2b,0xaf,0x1a,0x3d,0xd9,0xa4,0x0a,0x37,0x14,0xb5,0x9a,0xb5,0x8f,0x29,0x22,
+0x6d,0x02,0xfd,0x75,0xb5,0xf0,0xd6,0xd6,0x20,0x1c,0x0e,0xe9,0xe2,0x9d,0x4e,
+0x17,0x7e,0x7a,0xcf,0xcf,0xb0,0x69,0xd3,0x66,0x0c,0x1b,0x36,0x54,0x17,0xcf,
+0xf3,0x5c,0x49,0x7e,0x7e,0xde,0x96,0xb2,0x19,0xd3,0xd7,0x0d,0x1c,0x58,0xac,
+0x1f,0x97,0x28,0x20,0x68,0xb5,0x8f,0xee,0x74,0xda,0x77,0x39,0x22,0x23,0x15,
+0x1a,0x0a,0x85,0xe0,0xad,0xf5,0xc0,0x5f,0xe7,0x83,0x4c,0x65,0x5d,0x7c,0x51,
+0xaf,0xde,0x58,0xb1,0x7c,0x35,0x16,0x2e,0x5c,0x88,0x9c,0x1c,0xbd,0xf9,0x13,
+0x45,0x71,0x66,0xff,0x01,0xfd,0x7e,0x3f,0x75,0xda,0x94,0x07,0xba,0x76,0xed,
+0xea,0x30,0xa8,0x46,0x00,0x50,0x98,0xb5,0x8f,0xe6,0xc8,0xd8,0x06,0x2a,0xea,
+0xb4,0x19,0x1e,0x6f,0x35,0x1a,0x1a,0xf5,0x93,0x10,0x1c,0xc7,0x61,0xec,0x98,
+0xf1,0x78,0x66,0xfb,0x0e,0xcc,0xbb,0xeb,0x2e,0x24,0x6a,0x44,0x42,0x88,0x45,
+0x92,0x6c,0x77,0x5e,0x35,0x66,0xf4,0xeb,0x13,0x27,0x8e,0xff,0x17,0x13,0x95,
+0x19,0xb3,0x8f,0x3d,0xb2,0xf6,0x51,0x8f,0x36,0x75,0x62,0x00,0x40,0x96,0x65,
+0x34,0x06,0xea,0xe1,0xf1,0x56,0xa3,0xa5,0x45,0xbf,0x88,0xcd,0x62,0xb1,0xe2,
+0xe6,0x9b,0xbe,0x83,0x5d,0xbb,0xca,0x51,0x56,0x56,0xa6,0x6f,0x00,0xc7,0xe5,
+0xb9,0x73,0xdc,0x8b,0x66,0xcc,0x2c,0x7d,0x6e,0xd4,0xa8,0x11,0x57,0x9a,0x54,
+0xe5,0x82,0xa2,0x56,0xf3,0x08,0x21,0x6d,0x6e,0xf7,0xa5,0x82,0x76,0x7b,0x11,
+0xe1,0x48,0x18,0xb5,0x75,0x5e,0x78,0x6b,0x3d,0x88,0x44,0xc2,0xba,0xf8,0x2e,
+0x39,0xb9,0xf8,0xaf,0x5f,0xfc,0x12,0xeb,0xd7,0xaf,0x47,0xbf,0x7e,0xfd,0x74,
+0xf1,0x3c,0xcf,0x8f,0x2c,0x28,0x2c,0xd8,0x59,0x5a,0x36,0x6d,0x79,0xdf,0xbe,
+0x7d,0x0a,0x0c,0xaa,0x21,0x50,0x16,0x60,0xf5,0xcb,0xda,0x47,0x05,0xed,0xfe,
+0x4d,0x0e,0x85,0x82,0xf0,0xf8,0x6a,0x50,0x57,0xef,0x47,0xe2,0x24,0x3d,0x21,
+0x04,0x03,0xfa,0x0f,0xc4,0xba,0xb5,0x1b,0xf0,0x9b,0xdf,0xfc,0x06,0x92,0x24,
+0x25,0xc6,0x13,0x8b,0xc5,0xf2,0xed,0x41,0x83,0x4b,0x5e,0x9b,0x32,0x75,0xf2,
+0x4f,0x9c,0x4e,0xa7,0xd1,0xdc,0xa2,0xda,0x3e,0x1a,0x4d,0x6d,0x5d,0x16,0x38,
+0x2f,0xaa,0x88,0x52,0x8a,0xa6,0xe6,0x00,0x6a,0xbc,0xd5,0x08,0x34,0x35,0xea,
+0xe2,0x79,0x9e,0xc7,0x94,0xab,0xa7,0x61,0xd7,0xce,0x72,0xdc,0x7a,0xeb,0xad,
+0xba,0x78,0x42,0x88,0x64,0xb7,0xdb,0xef,0x9f,0x38,0x69,0xfc,0xfe,0x71,0xe3,
+0xc7,0x5c,0x67,0x52,0x95,0x0d,0x40,0xef,0xa8,0x7d,0x14,0xdb,0xef,0x09,0x2e,
+0x1e,0x9c,0x57,0x5b,0x22,0xcb,0x11,0xd4,0x37,0xd4,0xc1,0xeb,0xab,0x41,0x30,
+0xa8,0xb7,0x8f,0x36,0x9b,0x84,0xef,0xdf,0x7a,0x3b,0x9e,0x79,0x66,0x07,0x26,
+0x8c,0x1f,0xaf,0x6f,0x1c,0xc7,0xf5,0xca,0xcd,0xcd,0x7d,0x6c,0xc6,0xcc,0xd2,
+0xed,0x43,0x87,0x0d,0x19,0x6c,0x52,0x95,0x0b,0x8a,0x5a,0xbd,0xec,0xec,0xe3,
+0x05,0x79,0xd8,0x50,0x38,0x84,0xda,0x3a,0x1f,0x6a,0xfd,0x5e,0x44,0x64,0xfd,
+0xfa,0xa8,0xfc,0xbc,0xee,0x78,0xe8,0xa1,0x87,0xb1,0x6a,0xf5,0x6a,0x14,0x16,
+0xf6,0xd0,0xc5,0x0b,0x82,0x30,0xbe,0xa8,0xa8,0xd7,0x0b,0xd3,0x4b,0xa7,0xfe,
+0xb6,0x47,0x8f,0xc2,0x5c,0x83,0x6a,0xd4,0xf6,0xd1,0xc8,0x75,0x77,0xc9,0xe1,
+0x82,0x7d,0x5b,0x29,0xa5,0x68,0x09,0xb6,0xc0,0xeb,0xab,0x41,0x7d,0x43,0x1d,
+0xd3,0x3e,0x0e,0x1b,0x32,0x1c,0x9b,0x9e,0xda,0x8c,0x05,0x0f,0x3c,0x00,0x51,
+0x14,0x13,0xe3,0x79,0xab,0xd5,0xfa,0xdd,0x11,0x23,0x87,0xbf,0x3e,0xf9,0xea,
+0x89,0xb7,0x99,0xb8,0xe5,0x04,0x00,0x05,0x84,0x90,0xbe,0x97,0x83,0x7d,0xbc,
+0xe0,0xea,0x46,0x96,0x65,0x04,0x9a,0x1a,0xe1,0xf1,0x55,0xa3,0xa9,0x39,0xa0,
+0x8b,0x17,0x04,0x01,0xd7,0x5e,0x73,0x1d,0xca,0x77,0xed,0xc6,0x8d,0x37,0xdd,
+0xa8,0x8b,0x27,0x84,0xb8,0x9d,0x4e,0xe7,0xaf,0xa7,0x4d,0x9f,0xf2,0xd2,0x55,
+0x63,0xae,0x9c,0x62,0x52,0x95,0x15,0x8a,0x7d,0xec,0x79,0x29,0xdb,0xc7,0x0e,
+0xb3,0x17,0x91,0x48,0x04,0x75,0xf5,0x7e,0x78,0x7d,0x35,0x08,0x31,0xdc,0x72,
+0x0e,0x87,0x13,0x3f,0xb9,0xeb,0x1e,0x6c,0xd9,0xb2,0x15,0x23,0x47,0x8e,0xd0,
+0xc5,0x73,0x1c,0x57,0x9c,0x97,0xd7,0x6d,0x53,0xd9,0x8c,0xe9,0x1b,0x4a,0x4a,
+0x06,0xf6,0x35,0xa9,0xca,0x89,0x4b,0xd8,0x3e,0x76,0xf8,0x03,0x85,0xc2,0x21,
+0xf8,0x6a,0x3d,0xf0,0xd7,0xd5,0x42,0x96,0xf5,0x6e,0xb9,0x9e,0x3d,0x7a,0x61,
+0xe9,0x92,0x15,0x58,0xbc,0x78,0x09,0x72,0x73,0xf5,0x7b,0x70,0x44,0x51,0x2c,
+0xeb,0xd7,0xbf,0xef,0xef,0xa7,0x4d,0x9f,0xf2,0x8b,0x6e,0xdd,0xba,0x39,0x0d,
+0xaa,0x89,0xd9,0xc7,0xfe,0x97,0x9a,0x7d,0xec,0x70,0x02,0x81,0xd6,0x59,0x0e,
+0x8f,0xaf,0x1a,0x8d,0x81,0x7a,0x5d,0x3c,0xc7,0x71,0xb8,0x72,0xf4,0x55,0xd8,
+0xb6,0x6d,0x3b,0xee,0xbe,0xfb,0x6e,0x96,0x5b,0x4e,0xb4,0xd9,0x6c,0x77,0x5c,
+0x79,0xd5,0xe8,0xd7,0x26,0x4e,0x9a,0xf0,0x1d,0x9e,0xe7,0x8d,0x9e,0x8b,0x47,
+0xab,0x7d,0xb4,0xb7,0xff,0x93,0x5c,0x78,0x74,0x0a,0x02,0x63,0x90,0x65,0x19,
+0x0d,0x8d,0x0d,0x51,0xb7,0x5c,0xb3,0x2e,0xde,0x22,0x5a,0x30,0xe7,0x86,0x9b,
+0x50,0x5e,0xfe,0x1c,0xae,0xf9,0x86,0x7e,0xd5,0x06,0xc7,0x91,0x3c,0xb7,0xdb,
+0xb5,0xb0,0xb4,0x6c,0xda,0x9e,0x2b,0xae,0x18,0xa9,0x5f,0x2e,0xd0,0x0a,0x2b,
+0x80,0xa2,0x4b,0xc1,0x3e,0x76,0x2a,0x02,0x63,0x50,0xdc,0x72,0x3e,0xf8,0x6a,
+0x3d,0x08,0x33,0xdc,0x72,0x39,0xee,0x1c,0xfc,0xe7,0x82,0xff,0xc2,0x86,0x0d,
+0x1b,0x51,0x5c,0x5c,0xac,0x8b,0xe7,0x79,0x7e,0x78,0x41,0x61,0xc1,0xb3,0xa5,
+0x65,0xd3,0x57,0xf6,0xeb,0xd7,0x57,0x3f,0x2e,0x69,0x45,0xcc,0x3e,0xe6,0x5f,
+0xac,0xf6,0xb1,0x53,0x37,0x3a,0x18,0x0a,0xc2,0xeb,0xf3,0x30,0xdd,0x72,0x00,
+0xd0,0xbf,0xdf,0x00,0x3c,0xbe,0x66,0x2d,0x1e,0xfc,0xed,0x83,0x70,0x38,0xf4,
+0x1a,0xd1,0x62,0x11,0x67,0x97,0x0c,0x1a,0xb8,0x7f,0xca,0xd4,0xab,0xef,0x75,
+0xb9,0x5d,0x46,0x53,0x52,0xb1,0xed,0xe5,0x17,0xa5,0x7d,0xec,0xd4,0x04,0x02,
+0x00,0xa5,0x32,0x9a,0x9a,0x03,0xf0,0x18,0xb8,0xe5,0x38,0x8e,0xc7,0xe4,0x89,
+0x53,0xf0,0xec,0xb3,0xe5,0xb8,0xfd,0xf6,0xdb,0x75,0xf1,0x8a,0x5b,0x4e,0xfa,
+0xe9,0x84,0x09,0xe3,0xf6,0x8f,0x9f,0x30,0xf6,0x7a,0x93,0xaa,0x2e,0x4a,0xfb,
+0x48,0x04,0x41,0xd0,0xec,0x4e,0x9a,0x31,0xb3,0xf4,0x58,0xec,0xda,0x66,0xb3,
+0x61,0xdf,0xde,0x97,0xe2,0x71,0xb2,0x2c,0xa3,0xda,0x53,0x79,0x01,0x9b,0xa7,
+0x87,0x28,0x88,0x70,0x38,0x5c,0xb0,0x5a,0xd8,0x7e,0x6e,0x8f,0xb7,0x06,0x6b,
+0x1e,0x5f,0x83,0xf7,0xde,0x7d,0x97,0x19,0x1f,0x09,0x47,0x0e,0x57,0x56,0x56,
+0x2e,0x3c,0x72,0xe4,0xd8,0xe7,0x49,0xaa,0x6a,0x8c,0x44,0x22,0xd5,0x94,0xd2,
+0x60,0x1b,0x9b,0x7c,0x5e,0x41,0x6c,0x36,0x9b,0x86,0xc0,0x69,0xd3,0xa7,0x74,
+0x6a,0x02,0x01,0x80,0x80,0xc0,0x62,0xb1,0xc2,0xe5,0x74,0x83,0xe7,0xf5,0x0e,
+0x19,0x4a,0x29,0x8e,0x9f,0x38,0x8a,0x25,0x4b,0x97,0xe0,0xcc,0xe9,0x33,0xac,
+0x78,0x39,0x14,0x0a,0xed,0xf9,0xea,0xcb,0x7f,0xac,0x3e,0x77,0xae,0xd2,0x63,
+0x52,0x15,0x05,0x50,0xdb,0xd2,0xd2,0xe2,0xa1,0x94,0xb1,0xf4,0xa0,0x13,0x80,
+0xb8,0x5c,0x2e,0x0d,0x81,0x93,0x26,0x4f,0xe8,0xf4,0x04,0xc6,0xc0,0x71,0x1c,
+0x6c,0x56,0x09,0x4e,0x87,0x4b,0x37,0xb4,0x00,0x94,0xce,0xd0,0xc1,0x83,0x6f,
+0x62,0xf5,0xea,0xd5,0x08,0x06,0xf5,0x82,0x44,0x29,0xad,0x6f,0x6a,0x6a,0x5e,
+0xfb,0xf9,0x67,0x47,0xb6,0x07,0x83,0x41,0x7d,0x6f,0xa9,0x15,0x11,0x00,0x9e,
+0xfa,0xfa,0xfa,0xda,0xf6,0x6b,0x7d,0xfb,0x80,0xe4,0xe6,0xe6,0x6a,0x08,0x1c,
+0x37,0x7e,0xcc,0x45,0x43,0x60,0x0c,0x3c,0xcf,0xc3,0x21,0xb9,0x74,0xf3,0x8b,
+0x31,0x04,0x02,0x8d,0x78,0xe6,0xd9,0x67,0xf0,0xbb,0x3d,0x7b,0x98,0xf1,0xb2,
+0x2c,0xff,0xa3,0xbe,0xbe,0xe1,0x91,0x63,0x47,0x8f,0x1f,0x4c,0x52,0x55,0x90,
+0x52,0x5a,0x55,0x5b,0x5b,0xab,0xf7,0x01,0x76,0x10,0x48,0x7e,0x7e,0xbe,0x86,
+0xc0,0x2b,0xaf,0xba,0xe2,0xa2,0x23,0x30,0x06,0x51,0x10,0xe1,0x72,0xba,0x21,
+0x8a,0xec,0xed,0x19,0xe7,0x2a,0xcf,0x62,0xe5,0xaa,0x95,0xf8,0xe8,0xc3,0x0f,
+0x99,0xf1,0x91,0x48,0xe4,0xcf,0x35,0x35,0x9e,0x47,0xbe,0x3e,0x73,0xf6,0x2b,
+0x56,0xbc,0xaa,0x27,0xdc,0x48,0x29,0xad,0xae,0xa9,0xa9,0xe9,0x70,0xfb,0x48,
+0x7a,0xf6,0xec,0xa9,0x21,0x70,0xc4,0xc8,0x61,0x17,0x2d,0x81,0x80,0x32,0xab,
+0x61,0xb5,0xd8,0xe0,0x72,0xba,0xc1,0x71,0xfa,0x4e,0x36,0xa5,0x14,0x1f,0x7f,
+0xf2,0x11,0x96,0x2e,0x5d,0x82,0x9a,0x9a,0x1a,0x56,0x7c,0x38,0x1c,0x0e,0x3f,
+0x73,0xe6,0xf4,0xd7,0x8f,0xd7,0xd7,0x37,0xe8,0xdd,0x42,0xaa,0xa4,0x00,0xfc,
+0xa2,0x28,0x7a,0x2a,0x2a,0x2a,0x3a,0xec,0x20,0x24,0xd2,0xa7,0x4f,0x1f,0x0d,
+0x81,0x43,0x86,0x0e,0xca,0x80,0x40,0x02,0xa2,0xfc,0xd7,0x69,0xc0,0x11,0x0e,
+0x36,0x9b,0x1d,0x4e,0x07,0xdb,0x3d,0x1a,0x0a,0x05,0xf1,0xda,0xeb,0xaf,0x62,
+0xdd,0xba,0x75,0x88,0x44,0xf4,0xef,0x9f,0x52,0xea,0x6d,0x69,0x69,0x59,0x5d,
+0xf1,0x8f,0x53,0xcf,0xc9,0xac,0xb5,0x93,0xad,0x88,0x50,0x4a,0x3d,0xa7,0x4f,
+0x9f,0xf6,0x77,0xc4,0x41,0x0f,0xa4,0xb8,0xb8,0x58,0x43,0x60,0xf1,0xc0,0xfe,
+0xa6,0x04,0xd6,0x78,0xab,0xda,0xa3,0xda,0x76,0x28,0x23,0x06,0xf3,0x77,0x26,
+0xf0,0x02,0x1c,0x76,0x27,0xac,0x56,0xf6,0x38,0xbe,0xbe,0xbe,0x0e,0x9b,0x36,
+0x3f,0x89,0xfd,0xfb,0x5f,0x65,0xc6,0xcb,0xb2,0x7c,0x24,0x10,0x68,0x5a,0x78,
+0xee,0x6c,0xe5,0xa1,0x24,0x0d,0x09,0x12,0x42,0xaa,0x4f,0x9e,0x3c,0xa9,0x1f,
+0xac,0x9e,0x47,0x90,0xc1,0x83,0x07,0x6b,0x08,0xec,0xdb,0xaf,0x77,0x9a,0x04,
+0x12,0xd5,0x5f,0x5d,0x70,0xc7,0x42,0xc5,0xad,0x28,0x8a,0x70,0x3a,0xdc,0xba,
+0xfd,0x1b,0x31,0x9c,0xfa,0x67,0x05,0x96,0x2f,0x5f,0x8a,0x63,0xc7,0x8e,0x33,
+0xe3,0x23,0x91,0xc8,0xab,0x75,0xfe,0xfa,0x25,0x7e,0x7f,0xdd,0xd7,0x49,0x6a,
+0x6d,0x94,0x65,0xb9,0xfa,0xc4,0x89,0x13,0x17,0xc4,0x3e,0x92,0x11,0x23,0x46,
+0x68,0x08,0xec,0xd9,0xab,0xb0,0x95,0x40,0xc9,0x86,0x7d,0x2f,0x68,0x09,0xf4,
+0xf8,0xaa,0x33,0xad,0x2a,0xa3,0xd4,0xe9,0xeb,0x24,0xe3,0x1c,0x84,0x10,0x58,
+0x2c,0x36,0xb8,0x0c,0x86,0x1d,0xb2,0x2c,0xe3,0xd0,0x07,0x7f,0xc5,0xb2,0xa5,
+0xcb,0x50,0x5f,0x5f,0xa7,0x2f,0x99,0xd2,0xe6,0x48,0x24,0xb2,0xd9,0xeb,0xad,
+0x7d,0x22,0x14,0x0c,0xe9,0x37,0x89,0x20,0xde,0xd1,0xa1,0x94,0x52,0x3f,0xa5,
+0xd4,0x73,0xe4,0xc8,0x91,0xf3,0x6a,0x1f,0xc9,0xe8,0xd1,0xa3,0x35,0x04,0x76,
+0x2f,0xc8,0x4b,0x83,0xc0,0x84,0x69,0x1d,0x66,0x0d,0xed,0xd2,0xce,0xf4,0xc1,
+0xe0,0x31,0x16,0xc4,0x73,0x8a,0x7d,0xb4,0x4b,0x6c,0x8f,0x59,0x4b,0xb0,0x05,
+0xfb,0xf6,0xbd,0x80,0x4d,0x9b,0x36,0xb1,0x8b,0xa6,0xf4,0x5c,0x38,0x14,0x5e,
+0xee,0xf5,0xd6,0xbe,0xc4,0x4c,0xd0,0x8a,0x08,0x21,0xc4,0xcb,0xf3,0x7c,0xed,
+0xe1,0xc3,0x87,0xcf,0x8b,0x7d,0xe4,0x04,0x41,0x80,0xfa,0x63,0x0a,0xa2,0x74,
+0x57,0x08,0x08,0x08,0x21,0x20,0x04,0x9a,0x0f,0x74,0x1f,0x66,0xa0,0xee,0x93,
+0xee,0xbf,0x54,0xca,0x54,0x1a,0xc5,0x08,0x22,0x80,0x4c,0x65,0x04,0x9a,0x1a,
+0x50,0xeb,0xf7,0x31,0x07,0xf8,0x56,0x8b,0x15,0xb7,0xfc,0xeb,0x5c,0xec,0xda,
+0x55,0xce,0x3c,0xe4,0x81,0x10,0x52,0x28,0x5a,0xc4,0xe5,0xdd,0x0b,0xf2,0x76,
+0x75,0xe9,0xe2,0x1e,0x91,0xf8,0x0e,0x55,0x1f,0x9e,0xe7,0xf9,0x7c,0x00,0x7d,
+0xc7,0x8c,0x19,0x63,0xb4,0x07,0xa4,0x4d,0x20,0x93,0x26,0x4d,0xd2,0x48,0xa0,
+0xcb,0xed,0x88,0x4b,0xa0,0x24,0xd9,0xb0,0x57,0x2d,0x81,0x54,0x86,0xd7,0x17,
+0xeb,0x7a,0xeb,0x45,0x2b,0xa9,0xb0,0x5d,0x28,0x69,0x34,0xf9,0xae,0xb3,0xa2,
+0x2c,0xa2,0x08,0x87,0xdd,0x65,0xe8,0x96,0xfb,0xe2,0xcb,0x93,0x58,0xb2,0x74,
+0x31,0x4e,0x55,0x9c,0x62,0xc5,0x53,0x4a,0xe9,0xf3,0x2d,0x2d,0xc1,0x95,0xa1,
+0x60,0x58,0x3f,0x2e,0xd1,0x22,0xc0,0x71,0x5c,0xf5,0x3b,0xef,0xbc,0xd3,0x6e,
+0x07,0xe9,0x92,0xa9,0x53,0xa7,0x6a,0x08,0x94,0xec,0x56,0x53,0x02,0x7d,0x3e,
+0x86,0xeb,0xb0,0x8d,0xba,0x33,0x53,0x5e,0xd3,0xd3,0x49,0x26,0x3a,0x15,0xd1,
+0xf1,0xa3,0xd5,0x06,0xbb,0xe4,0x60,0xda,0xc7,0x48,0x24,0x82,0xb7,0xdf,0x7d,
+0x0b,0xab,0x56,0xae,0x44,0x53,0x93,0xde,0xfc,0x51,0x4a,0x1b,0x29,0xa5,0xeb,
+0x5a,0x9a,0x43,0x4f,0x53,0x4a,0xf5,0x8b,0x7c,0x54,0x20,0x84,0xf8,0x79,0x9e,
+0xaf,0x79,0xf3,0xcd,0x37,0xdb,0x6c,0x1f,0xc9,0x8c,0x19,0x33,0x34,0x04,0x0a,
+0x22,0xa7,0x22,0x50,0xc2,0xde,0x17,0x5e,0x8c,0xc7,0xc9,0x54,0x86,0xaf,0x36,
+0x46,0x20,0xfb,0xb5,0xa7,0x4c,0x46,0xbb,0x74,0x5b,0x29,0xf3,0x32,0x8d,0x5c,
+0xba,0x18,0x9e,0xe3,0x61,0xb3,0xda,0x75,0xa7,0x71,0xc4,0xd0,0xd4,0xdc,0x84,
+0xf2,0xf2,0x9d,0xd8,0xb9,0x73,0x27,0xbb,0x04,0x4a,0x2b,0x28,0xc5,0xe2,0x48,
+0x58,0xfe,0xa3,0x69,0x1b,0x14,0xe7,0xb8,0x27,0x3f,0x3f,0xbf,0x76,0xf7,0xee,
+0xdd,0x19,0xdb,0x47,0x72,0xed,0xb5,0xd7,0x0e,0xd2,0x86,0xc8,0x86,0x04,0x52,
+0x2a,0xc3,0x5b,0xeb,0x35,0x7e,0xd5,0x44,0x77,0x61,0x5e,0x79,0x1a,0x0d,0x4d,
+0x86,0xb4,0xa5,0x31,0x89,0x9a,0x15,0x05,0x11,0x92,0xcd,0xae,0x5b,0x9f,0x1a,
+0x43,0x75,0x4d,0x15,0x56,0x3f,0xba,0x0a,0x87,0x0f,0x1d,0x66,0x97,0x41,0xf1,
+0x36,0x80,0x45,0xa0,0xe4,0x64,0x92,0xc6,0x84,0x28,0xa5,0xd5,0x07,0x0e,0x1c,
+0xc8,0xe8,0xa0,0x40,0x32,0x7b,0xf6,0x6c,0x0d,0x81,0xa1,0x70,0x8b,0x29,0x81,
+0xbe,0x5a,0x2f,0xcc,0xdc,0x2e,0x19,0x2b,0xce,0x76,0xd1,0xa3,0xa9,0xd3,0x68,
+0x26,0x85,0xf1,0x48,0x42,0x60,0x11,0x2d,0xb0,0x4b,0x0e,0x43,0xb7,0xdc,0xe7,
+0x47,0x3f,0xc3,0xe2,0x45,0x8b,0x50,0x55,0xc5,0x74,0x70,0x44,0x00,0xec,0xe0,
+0x08,0xbf,0x86,0x10,0x4e,0x3f,0x2e,0xd1,0x22,0x40,0x29,0xad,0xde,0xbf,0x7f,
+0x7f,0x5a,0xf6,0x91,0xcc,0x99,0x33,0x47,0x43,0x60,0x53,0x73,0xa3,0x39,0x81,
+0x7e,0x9f,0x92,0xd1,0xb8,0xc8,0x94,0xc9,0x68,0xef,0x3e,0x4d,0xca,0xf4,0x51,
+0xf3,0xd4,0x89,0x31,0x1c,0xe1,0x60,0xb5,0x5a,0x20,0xd9,0xd8,0x1d,0xc9,0x70,
+0x38,0x8c,0x37,0xfe,0x78,0x00,0x8f,0x3d,0xf6,0x18,0xc2,0x61,0xe6,0xac,0x54,
+0x2d,0x21,0x64,0xb5,0x45,0xb4,0xed,0x26,0x84,0x24,0xb3,0x7b,0x7e,0x9e,0xe7,
+0x6b,0x9e,0x7f,0xfe,0xf9,0x94,0xec,0x23,0xb9,0xf9,0xe6,0x9b,0x35,0x04,0xd6,
+0x37,0xf8,0x4d,0x08,0xa4,0xa8,0xf5,0x7b,0x63,0x59,0x0d,0x19,0x30,0x27,0xa6,
+0x1d,0xd8,0x4d,0x8f,0xa9,0xf4,0x62,0x4c,0xc8,0xe5,0x78,0x1e,0x92,0x55,0x82,
+0xc5,0x60,0x35,0x40,0x63,0x63,0x03,0xb6,0x3c,0xbd,0x05,0x2f,0xbd,0xf8,0x22,
+0x33,0x1e,0xc0,0x71,0x9e,0x17,0x1e,0x96,0x6c,0x76,0xb3,0xb3,0x57,0x41,0x29,
+0x95,0xa3,0xe3,0x47,0x5f,0x32,0xfb,0xc8,0x89,0xa2,0x08,0xf5,0x27,0x29,0xe2,
+0x03,0x3f,0xe3,0x11,0x1d,0x73,0xf0,0xa5,0xca,0x67,0x18,0xc5,0x4e,0xc6,0x1c,
+0x5e,0x9a,0x7d,0x4c,0x13,0xea,0xc6,0x9e,0xac,0xa1,0x2b,0x3b,0x9f,0x1c,0x89,
+0xa0,0x31,0xd0,0x80,0xfa,0x86,0x3a,0xe6,0x6a,0x39,0x87,0xc3,0x89,0x7b,0xef,
+0xfe,0x29,0xb6,0x6c,0xde,0x8a,0x61,0xc3,0x87,0xb1,0xde,0xde,0xa0,0x48,0x24,
+0xbc,0xad,0x31,0x50,0xbf,0x26,0x1c,0x09,0x15,0x25,0xbe,0xfb,0xd8,0xc7,0x62,
+0xb1,0x70,0xa2,0x28,0xe6,0x71,0x1c,0xd7,0x6f,0xee,0xdc,0xb9,0x46,0x8b,0x95,
+0x15,0x3a,0x6e,0xbd,0xf5,0x56,0x8d,0x04,0x56,0x55,0x9f,0x33,0x95,0x40,0x7f,
+0x9d,0x2f,0x96,0x55,0x55,0x0a,0xa3,0x60,0x76,0x75,0x66,0x6d,0x39,0xcf,0xd0,
+0x7f,0x91,0x75,0x21,0x26,0xf6,0x54,0x7d,0x47,0xa9,0x0c,0x59,0x96,0x21,0x8a,
+0x56,0xb8,0x9d,0x6e,0x43,0xb7,0xdc,0x87,0x1f,0xfd,0x1d,0x8b,0x17,0x2f,0x82,
+0xdf,0xef,0x67,0x35,0x28,0xc8,0x71,0xdc,0x66,0xb7,0x2b,0x67,0x83,0x28,0x5a,
+0x98,0x6e,0xb9,0x18,0x08,0x21,0x4d,0xb2,0x2c,0x57,0xed,0xd8,0xb1,0x43,0x67,
+0x1f,0xc9,0x0f,0x7e,0xf0,0x03,0x0d,0x81,0x5f,0x9f,0x3d,0x6d,0x4e,0x60,0xc2,
+0xaa,0x02,0x62,0x72,0x97,0x2c,0xaa,0x6d,0xaa,0xd6,0x5c,0x8f,0x32,0x63,0xcd,
+0xf5,0xa6,0xfe,0x8e,0x52,0x44,0xe4,0x08,0x22,0x91,0xe8,0x47,0x96,0x21,0x47,
+0xc2,0xa0,0xd1,0x8e,0x0e,0x05,0x20,0x08,0x3c,0xba,0x76,0xc9,0x83,0x5d,0x62,
+0xdb,0xc7,0x50,0x28,0x88,0x97,0x7f,0xff,0x32,0x36,0x6e,0xdc,0xc0,0x5c,0x1a,
+0x09,0xa0,0x4a,0x14,0xc4,0xe5,0xdd,0xba,0xe5,0xbf,0x48,0x08,0x49,0x66,0x1c,
+0xfc,0x84,0x10,0xcf,0x96,0x2d,0x5b,0xe2,0xe2,0x4f,0xee,0xbc,0xf3,0x4e,0x0d,
+0x81,0x15,0xa7,0xbe,0x32,0x25,0xb0,0x2e,0x4e,0x60,0x72,0x46,0x88,0x51,0x44,
+0x87,0x82,0xea,0xaf,0xa8,0xb2,0x19,0x35,0x22,0x47,0x20,0x47,0x22,0x08,0xcb,
+0x32,0x64,0x39,0x02,0x4a,0xe5,0x78,0x22,0x4d,0x2e,0x4d,0x98,0xf2,0xd7,0x66,
+0x91,0x90,0x9b,0xdb,0x0d,0x16,0x83,0xd5,0x00,0x75,0x75,0x7e,0x6c,0x78,0x62,
+0x3d,0xde,0xf8,0xc3,0x1b,0xcc,0x78,0x42,0xc8,0x47,0x92,0x64,0x7f,0x38,0xaf,
+0x5b,0xfe,0xc7,0xcc,0x56,0xb7,0x92,0x2f,0x13,0x42,0xbc,0x45,0x45,0x45,0xbe,
+0x07,0x1f,0x7c,0x90,0xa6,0xe7,0x0b,0x55,0xaa,0x42,0xa2,0x01,0x6c,0xb5,0x5b,
+0x46,0x3e,0x4b,0x7d,0x76,0xb6,0x0d,0x24,0x6d,0xfc,0x18,0xd9,0xc2,0xd6,0xea,
+0x65,0x99,0x22,0x1c,0x0e,0x23,0x18,0x0c,0xa2,0xb9,0xb9,0x09,0x8d,0x81,0x46,
+0x34,0x34,0xd6,0x23,0xd0,0x14,0x40,0x4b,0x4b,0x33,0x42,0xe1,0x10,0xe4,0xe8,
+0x26,0x54,0x42,0xb8,0xd4,0xea,0x05,0x41,0x4b,0xb0,0x19,0x67,0x2b,0xcf,0xc0,
+0xeb,0xab,0x61,0x6e,0x62,0x75,0x47,0x57,0x93,0x6f,0xdc,0xf8,0x04,0xfa,0x0f,
+0xe8,0xcf,0x22,0xe8,0x8a,0x40,0xa0,0x71,0xf7,0xe9,0x33,0xa7,0x96,0x34,0x06,
+0x1a,0xf2,0x13,0x79,0x51,0xd9,0x48,0x4e,0x10,0x84,0xbc,0xca,0xca,0xca,0x02,
+0x00,0x20,0xf7,0xdd,0x77,0x9f,0x46,0x02,0x8f,0x1e,0xfb,0xdc,0x5c,0x02,0x1b,
+0xfc,0xc9,0x25,0x8b,0x24,0xc6,0x5e,0x58,0x09,0x94,0x65,0x59,0xb1,0x53,0x51,
+0x5b,0x25,0xcb,0x14,0x54,0x96,0x55,0x87,0x12,0xa9,0x65,0x47,0x7f,0xa1,0xbd,
+0x4d,0x0c,0x4b,0xb8,0x57,0xa9,0xd3,0xd8,0x3d,0x47,0x38,0xe4,0xb8,0x73,0x0d,
+0x57,0xcb,0xc9,0xb2,0x8c,0xbf,0xbc,0xff,0x1e,0x96,0x2e,0x5b,0x82,0xa6,0x00,
+0xd3,0xfc,0x05,0x44,0x51,0xdc,0xd0,0xab,0x67,0xef,0xcd,0x16,0x8b,0xc5,0xd0,
+0x2d,0x47,0x08,0xa9,0x11,0x52,0x93,0x3a,0x55,0x26,0x03,0xd5,0x99,0x11,0x59,
+0xf1,0x7c,0xa9,0xe7,0xa1,0x94,0x82,0x52,0x0a,0x99,0xca,0xa0,0x32,0x8d,0x13,
+0x45,0x65,0xaa,0x3b,0x35,0x8a,0x26,0xe8,0xbf,0xd6,0x97,0x49,0xa0,0xd1,0x83,
+0xf1,0xea,0x8d,0xc2,0x91,0x62,0x18,0x05,0x28,0x01,0xa5,0x14,0x3e,0xbf,0x17,
+0x0d,0x8d,0x75,0xc8,0xcd,0xe9,0x06,0x9b,0x4d,0xbb,0x5a,0x8e,0xe3,0x38,0x4c,
+0x9e,0x74,0x35,0xca,0x77,0x3e,0x87,0x3d,0xbf,0xdb,0x8d,0x6d,0xdb,0xb6,0x25,
+0x3e,0xa6,0x3d,0x14,0x0a,0xfd,0xfc,0xd4,0x3f,0x2b,0x86,0x0f,0x1d,0x32,0xec,
+0x3e,0x93,0xd7,0x21,0x09,0x29,0x0d,0x1d,0x12,0x91,0xce,0x8b,0x27,0x06,0xa4,
+0xeb,0x40,0x41,0x69,0x2b,0x41,0x14,0xb4,0xf5,0xda,0x80,0x20,0x5d,0x55,0x89,
+0xdb,0xce,0xa0,0xbc,0x4c,0x63,0x67,0x7b,0x1b,0xa7,0xe8,0x12,0x09,0x8d,0xde,
+0xc7,0x82,0xc3,0xe1,0x30,0xaa,0x3d,0x95,0x70,0x38,0x5c,0xe8,0xda,0xa5,0x9b,
+0x2e,0xbb,0xd5,0x6a,0xc5,0xbf,0x7f,0xef,0xfb,0x28,0x2d,0x2d,0xc3,0x9d,0xf3,
+0x7e,0x8c,0x48,0x58,0xab,0x7a,0x65,0x39,0x52,0x1a,0x0e,0x87,0x2d,0x36,0x9b,
+0x8d,0x39,0xbb,0x4f,0x29,0xe5,0xd2,0x97,0x40,0xa2,0xbc,0x14,0x4a,0x10,0x57,
+0x27,0xb1,0x97,0xaf,0x7d,0x27,0x54,0x33,0x26,0x8e,0x11,0x02,0x0d,0x41,0xd1,
+0x32,0x52,0x14,0xc0,0xcc,0x0e,0x30,0x34,0x21,0x8a,0x25,0x51,0xba,0x70,0x02,
+0x0a,0x0a,0xa2,0x0a,0x33,0xe0,0x2d,0xa1,0x0c,0x0a,0x10,0x02,0x97,0x33,0x07,
+0x2e,0x27,0xfb,0x4c,0x22,0x4a,0x29,0x8e,0x1e,0x3b,0x82,0x47,0x1e,0x59,0xa8,
+0x23,0x8f,0x10,0x80,0xe3,0xb8,0x8f,0xec,0x76,0x7b,0x98,0x35,0xcd,0x15,0x85,
+0x9c,0x36,0x81,0xca,0x06,0xcc,0x56,0x23,0x97,0x28,0x5d,0xac,0x97,0x4c,0x0c,
+0xbd,0x36,0xa4,0x35,0xfd,0xf9,0x30,0x93,0xca,0x3b,0x04,0x35,0x24,0x91,0x15,
+0x9e,0xa2,0x64,0x26,0x91,0x3e,0xc9,0x66,0x87,0xdb,0xd5,0xc5,0xb0,0x63,0xe8,
+0xf1,0xd4,0x60,0xf5,0xa3,0xab,0x70,0xe8,0x90,0xb2,0x56,0x2a,0xf1,0xbd,0x71,
+0x1c,0xff,0x76,0xef,0xa2,0xde,0xbf,0xb4,0x5a,0xad,0x46,0x6a,0x27,0x1c,0x0e,
+0x87,0x2b,0x75,0x2a,0x54,0x5d,0x10,0xf3,0x1b,0x4f,0x48,0x52,0xd2,0xf4,0xf9,
+0x8c,0x96,0x1d,0x32,0x14,0xb1,0xa1,0xba,0x33,0x83,0xc1,0x5c,0x9f,0xae,0x60,
+0xed,0xf4,0x13,0x21,0x06,0x83,0xf9,0x64,0xb6,0x2f,0x51,0x1a,0x55,0xf7,0x82,
+0x20,0x22,0xc7,0xd5,0xc5,0x70,0xf3,0x4d,0x4b,0x4b,0x33,0x76,0x3f,0x57,0x8e,
+0x67,0x9f,0x7d,0x56,0x69,0x95,0xfe,0xdd,0x55,0xb8,0x5d,0xee,0xc5,0x23,0x46,
+0x8c,0x8a,0x4f,0x47,0x31,0xc6,0x8f,0x32,0x80,0xb3,0x0f,0x3d,0xf4,0x50,0x58,
+0x27,0x81,0xc9,0x08,0x8c,0x91,0xa7,0x8d,0x53,0xba,0xf0,0xba,0x54,0x9a,0xce,
+0x81,0xee,0x56,0x1f,0x6e,0x10,0x9f,0x1c,0xb1,0x74,0xc9,0x24,0x47,0x4b,0x22,
+0x8d,0xb7,0xb4,0xb5,0xe3,0x42,0x13,0x95,0x45,0x02,0x79,0x51,0xcd,0xa8,0x8b,
+0x27,0x84,0x83,0xcb,0xe9,0x82,0x64,0xb3,0x1b,0xf6,0x3c,0xdf,0xfb,0xcb,0xbb,
+0x58,0xb9,0x72,0x05,0x9a,0x9a,0x9a,0x58,0x69,0x1a,0x24,0x49,0x5a,0x3f,0x62,
+0xf8,0xa8,0xa7,0x25,0x49,0x32,0x9b,0x10,0xae,0x13,0x04,0xa1,0xfa,0x81,0x07,
+0x1e,0x88,0x00,0x40,0xda,0x12,0x68,0x14,0xaf,0x57,0x93,0x7a,0x12,0xf5,0x92,
+0x66,0xd2,0x15,0xca,0xd8,0xde,0x21,0xb9,0x5d,0x35,0xb2,0x7d,0x8c,0x74,0x3a,
+0x42,0xd5,0xd1,0xca,0xef,0x0f,0xc3,0x2e,0x39,0xe0,0xb0,0x3b,0x0d,0xa7,0x9c,
+0x2a,0x4e,0xfd,0x03,0x4b,0x97,0x2e,0x41,0x45,0x45,0x85,0xd2,0x4a,0xed,0xb3,
+0xc9,0xa2,0x28,0xbe,0x30,0xa0,0x7f,0xf1,0xca,0x9e,0x3d,0x7b,0x99,0x2d,0xc9,
+0x68,0x21,0x84,0x54,0x2d,0x58,0xb0,0x40,0x33,0xee,0x60,0x48,0x20,0xfb,0x3a,
+0x1e,0xa6,0x21,0xca,0x80,0x24,0xa2,0xba,0x56,0xdd,0x6b,0x92,0x26,0x54,0x90,
+0xd8,0x7f,0x64,0x04,0xa6,0x06,0x1a,0x2b,0xb7,0x55,0xd2,0xcc,0xee,0xb4,0xf9,
+0x52,0x29,0xbb,0xf5,0xd6,0x22,0x5a,0x4c,0xd7,0x9a,0xd6,0xd5,0xd7,0x61,0xe3,
+0xc6,0xf5,0x38,0x78,0xf0,0xa0,0x52,0xb3,0xde,0xce,0xfd,0xad,0xa0,0xa0,0xe0,
+0xe1,0x11,0xc3,0x47,0x7e,0x66,0x52,0xab,0x4c,0x29,0xf5,0xf8,0xfd,0xfe,0xda,
+0x07,0x1f,0x7c,0x50,0xd7,0x70,0xfd,0x30,0x22,0x39,0x83,0xd0,0xaa,0x4c,0x73,
+0xd2,0x5a,0xef,0x59,0x64,0x11,0x03,0xae,0x12,0xea,0x4d,0x95,0x48,0xa3,0x31,
+0x9d,0x61,0x1a,0x93,0xb4,0x0c,0xbb,0x17,0x93,0x46,0x9e,0xe3,0x61,0xb7,0x3b,
+0x0d,0xed,0x5c,0x28,0x14,0xc2,0x2b,0xfb,0x5f,0xc6,0x53,0x4f,0x3d,0xa9,0x94,
+0x9e,0xf8,0x38,0x84,0x9c,0x73,0xbb,0x73,0x96,0x4d,0x9a,0x78,0xf5,0xcb,0x49,
+0x9e,0xa8,0x5e,0x14,0xc5,0xea,0x79,0xf3,0xe6,0x19,0x6e,0x7d,0xd3,0x4b,0xa0,
+0xe6,0xf5,0x9a,0xa9,0x50,0x06,0x71,0x06,0xa4,0x19,0x13,0xa6,0x65,0xcf,0x48,
+0x1e,0x8d,0x82,0x34,0x48,0x95,0x18,0x56,0x78,0x42,0x0f,0x52,0x7b,0xdf,0xca,
+0x1c,0x21,0x04,0x92,0x4d,0x82,0xcd,0x2a,0x31,0xcd,0x0b,0xa5,0x14,0x1f,0x7d,
+0xfc,0x21,0x96,0x2d,0x5f,0x8a,0xba,0xba,0x3a,0x1d,0x73,0x04,0x68,0x96,0x24,
+0xfb,0xa6,0xab,0xae,0x1c,0xfb,0x64,0x6e,0x6e,0xae,0xd9,0x0c,0x44,0x50,0x96,
+0xe5,0xaa,0xf9,0xf3,0xe7,0x27,0xdd,0xc6,0x96,0x76,0x27,0x26,0x55,0xe2,0x12,
+0x49,0x4b,0x24,0x4c,0xa7,0x50,0x59,0x61,0xfa,0xaa,0x33,0x80,0xb6,0x93,0xa2,
+0x2b,0x23,0x99,0xea,0x8c,0xc6,0x5b,0x2c,0x56,0x48,0x36,0x3b,0xd3,0xce,0x01,
+0xc0,0xb9,0x73,0x67,0xb1,0x72,0xd5,0x0a,0x1c,0x3d,0x7a,0x34,0x4e,0xb6,0x1a,
+0xa2,0x28,0xee,0x2f,0x19,0x38,0x68,0xe9,0xa0,0x92,0xc1,0x66,0x4b,0xf3,0xe5,
+0xe8,0x46,0x19,0xa6,0xba,0x64,0x21,0x83,0x4e,0x0c,0x60,0x48,0x16,0x31,0x92,
+0xbe,0x74,0x48,0xcc,0x88,0xa5,0xcc,0x24,0xd4,0x24,0x2c,0x16,0xc5,0xf3,0x02,
+0x24,0xc9,0x0e,0x81,0x67,0xdb,0xb9,0xa6,0xa6,0x00,0xb6,0x6d,0x7f,0x1a,0xaf,
+0xbc,0xf2,0x8a,0xd2,0x0c,0x9d,0x9d,0xe3,0x8e,0x14,0x16,0xf6,0x58,0x38,0x79,
+0xd2,0xd5,0xa6,0x9b,0x63,0x28,0xa5,0xf5,0x00,0xaa,0x6f,0xbb,0xed,0x36,0xb3,
+0x9d,0xc2,0x3a,0xb4,0x93,0x04,0xaa,0xa8,0x30,0x23,0x8e,0x49,0xa2,0x99,0x9a,
+0x66,0x41,0x9f,0x83,0x31,0x41,0xa4,0xcb,0x93,0x6c,0x88,0x91,0x38,0x9e,0x23,
+0x84,0xc0,0x66,0x95,0x0c,0xa7,0x87,0x22,0x91,0x08,0xfe,0x74,0xf0,0x4d,0xac,
+0x5b,0xb7,0x16,0x91,0x48,0x84,0x35,0x9e,0xf3,0xe6,0xb8,0x73,0x56,0xcd,0x98,
+0x71,0xcd,0x1e,0x51,0x14,0xcd,0x7c,0x80,0x41,0x42,0x48,0xd5,0xdc,0xb9,0x73,
+0x33,0xda,0xf5,0x9b,0xc1,0x38,0x10,0x06,0x52,0x67,0x42,0x56,0x02,0x51,0xc9,
+0x06,0xfe,0x66,0x9e,0x9b,0xd6,0xbf,0xda,0x50,0x9a,0x70,0xa5,0x01,0x43,0xd2,
+0x8c,0xc6,0x73,0x80,0xa2,0x2e,0x2d,0xa2,0xd5,0xd0,0xce,0x9d,0x38,0x79,0x1c,
+0xcb,0x96,0x2d,0x8d,0x6f,0x10,0x4d,0x48,0x17,0x96,0x24,0xfb,0xf6,0x09,0xe3,
+0x27,0xac,0xed,0xd5,0xab,0x48,0xb7,0x41,0x54,0x3d,0xaf,0x07,0xc0,0xeb,0xf3,
+0xf9,0x7c,0xf3,0xe6,0xcd,0xcb,0xd8,0x29,0xcb,0x50,0xa1,0xec,0x6b,0x75,0x60,
+0x32,0xf2,0x62,0x6a,0xb6,0xb5,0x8c,0xd8,0xb5,0x11,0x89,0xc9,0x1c,0x01,0xaa,
+0x32,0x0c,0x1e,0x24,0x29,0x89,0x26,0x52,0x18,0x1b,0xcf,0x09,0xbc,0x00,0x8b,
+0xc5,0x6a,0x68,0xe7,0x7c,0x3e,0x2f,0x1e,0x5f,0xbb,0x06,0x7f,0xff,0xfb,0xdf,
+0xa2,0xcf,0xa0,0x8d,0x17,0x45,0xf1,0x60,0x49,0xc9,0xe0,0x45,0x63,0xc7,0x8c,
+0xfb,0xca,0xa0,0x99,0x31,0x34,0x10,0x42,0xaa,0xe6,0xcc,0x99,0x93,0x96,0xba,
+0x64,0x21,0x03,0x15,0x1a,0x8f,0xd4,0x4b,0x98,0x91,0xd4,0xa9,0xae,0x8d,0x07,
+0xff,0xa9,0x79,0x73,0xb4,0x57,0x86,0x8d,0x83,0x59,0xc7,0x45,0x23,0x7d,0x14,
+0xe0,0x78,0x0e,0x16,0xd1,0xca,0xdc,0x1b,0x01,0x00,0xc1,0x60,0x10,0xbf,0x7b,
+0x7e,0x0f,0xf6,0xec,0xd9,0xad,0x7b,0x06,0x00,0xe0,0x38,0xee,0xab,0x82,0x82,
+0xc2,0x45,0xdf,0xbc,0xee,0xfa,0x83,0x49,0x1a,0x16,0x24,0x84,0x54,0xcf,0x9e,
+0x3d,0xbb,0xdd,0x36,0x81,0xa6,0x3d,0x0e,0xd4,0xaa,0x50,0x35,0x69,0x6c,0xf2,
+0x92,0x4b,0xa0,0xf1,0x98,0x52,0x7b,0x99,0x9c,0x40,0xad,0x8c,0xb5,0xde,0x25,
+0x4e,0xd9,0x41,0x45,0x9e,0x68,0xb1,0x80,0xe7,0x79,0x43,0xf7,0xd7,0xa1,0xc3,
+0x7f,0xc5,0xa3,0x8f,0xad,0x56,0x7e,0x13,0x43,0x9f,0xa6,0xbe,0x4b,0x4e,0x97,
+0xb5,0xd7,0xcf,0x9a,0xbd,0xdd,0xe9,0x74,0x19,0x4a,0x13,0x21,0x84,0xca,0xb2,
+0xec,0xa1,0x94,0xfa,0x66,0xcd,0x9a,0xd5,0xc6,0x39,0x2c,0x2d,0x32,0x97,0x40,
+0x40,0x27,0x71,0x2a,0x25,0x1a,0x8f,0xd7,0x93,0xd7,0x4a,0x18,0x51,0xe5,0x53,
+0x13,0xa5,0xbb,0x6e,0x6d,0x50,0x6b,0xb1,0xa9,0xc0,0x70,0x30,0x4e,0xc1,0xf3,
+0x22,0x04,0x5e,0x30,0xb4,0x73,0xa7,0xcf,0xfc,0x13,0xcb,0x57,0x2c,0xc3,0x99,
+0x33,0x67,0x12,0xda,0x0f,0x00,0x90,0x25,0x49,0xda,0x33,0x71,0xc2,0xa4,0x55,
+0x43,0x06,0x0f,0xf5,0xea,0x0a,0xd0,0xa2,0x81,0xe7,0xf9,0xea,0xd2,0xd2,0x52,
+0xd3,0x0d,0x2f,0x99,0x22,0xc3,0xd9,0x08,0x40,0xf3,0x66,0xb4,0x9a,0x50,0x15,
+0xcc,0x92,0x3c,0x55,0x9c,0x21,0x79,0xe6,0x63,0xca,0x84,0x6a,0xd8,0xd0,0x91,
+0xa7,0xe8,0x4d,0x8e,0x70,0x10,0x04,0x1e,0x46,0x87,0x13,0x36,0x34,0x36,0xe0,
+0xa9,0xa7,0x9e,0xc0,0x3b,0xef,0xbc,0xa3,0x79,0x86,0x18,0x04,0x51,0x3c,0x34,
+0xa8,0x64,0xd0,0xc2,0x99,0x33,0xae,0x39,0xa2,0xab,0x52,0x3b,0x6b,0x10,0x92,
+0x65,0xb9,0xaa,0xac,0xac,0xec,0xbc,0xee,0x99,0x4f,0xdb,0x13,0xa3,0x07,0x61,
+0xdf,0xb1,0xb8,0x57,0x2b,0x5b,0x9d,0x90,0x26,0x90,0x97,0x30,0x34,0x49,0x24,
+0x51,0xaf,0x50,0x0d,0x3a,0x28,0x40,0x7c,0x78,0xc0,0xf3,0x82,0x61,0x07,0x25,
+0x1c,0x0e,0xe3,0xd5,0xd7,0x5e,0xc5,0xb6,0x6d,0x5b,0x95,0x52,0xf5,0x76,0xee,
+0xeb,0x82,0x82,0x82,0xa5,0xff,0x76,0xcb,0x77,0xf7,0x33,0x0b,0xd0,0x56,0xe9,
+0x0d,0x06,0x83,0xde,0xb2,0xb2,0xb2,0x76,0x55,0x97,0x2c,0xb4,0x4d,0x85,0x6a,
+0x73,0x9a,0xdc,0x69,0x03,0xf5,0x12,0xc5,0x90,0x3c,0x24,0x92,0xa7,0x26,0x2e,
+0xe1,0x3a,0xfe,0xbf,0xb6,0xe3,0x12,0x23,0x8f,0xe3,0x09,0x62,0x2b,0xcc,0x12,
+0x41,0x29,0xc5,0xa7,0x9f,0x7d,0x8a,0xd5,0xab,0x57,0xa0,0xa1,0xa1,0x81,0x61,
+0xe6,0x48,0x53,0x4e,0x4e,0xce,0x93,0xdf,0xfe,0xd6,0x0d,0x9b,0x0a,0x0a,0x0a,
+0xf5,0xa7,0xd0,0x6a,0xd1,0xc8,0x71,0x5c,0xd5,0xd8,0xb1,0x63,0xcf,0x8b,0xba,
+0x64,0x21,0xfd,0x61,0x84,0x21,0x52,0x9d,0xa3,0x49,0x01,0x06,0x4e,0x74,0x76,
+0x27,0x29,0x21,0x6d,0x9c,0x3c,0x0a,0x0e,0x1c,0x08,0x47,0x0c,0xbf,0x88,0x55,
+0xd5,0x55,0x78,0xf4,0xd1,0x55,0xf8,0xe2,0x8b,0x93,0xcc,0xb2,0x6c,0x36,0xe9,
+0xe5,0x49,0x13,0x27,0x2d,0x1b,0x3f,0x7e,0xe2,0xb9,0x24,0x2d,0x0e,0x11,0x42,
+0xaa,0x47,0x8f,0x1e,0x9d,0xd1,0x16,0xb1,0xb6,0x20,0x7d,0x09,0xa4,0x14,0x94,
+0x10,0x90,0x38,0x61,0xda,0x49,0xb3,0x78,0x68,0xe2,0x40,0x59,0x15,0x69,0xd8,
+0x2b,0x8c,0x27,0x60,0x64,0x4e,0xe9,0xfb,0x41,0x14,0x91,0xa3,0xca,0x8e,0x22,
+0x23,0xe2,0x5a,0x5a,0x9a,0xb1,0x63,0xc7,0x76,0x1c,0xf8,0xc3,0x01,0xe6,0x73,
+0x0a,0x82,0xf0,0xd9,0xc0,0x81,0x25,0x0f,0xff,0xcb,0x4d,0xdf,0xf9,0x5b,0x92,
+0x0a,0x29,0x00,0x5f,0x43,0x43,0x83,0x67,0xd2,0xa4,0x49,0xe7,0x5d,0x5d,0xb2,
+0x90,0x7e,0x27,0xc6,0x00,0x89,0x9e,0x7c,0x4d,0x5c,0x74,0xa0,0x4c,0x41,0x41,
+0x34,0xa4,0xb7,0x7e,0x09,0x28,0x88,0xf2,0xee,0x49,0x42,0x76,0xd5,0x17,0x86,
+0x52,0x02,0x12,0x4d,0x44,0x41,0x41,0xa2,0x5c,0x27,0xb6,0x9f,0x70,0xec,0x76,
+0xcb,0xb2,0x8c,0xb7,0xde,0xfa,0x33,0x36,0x3e,0xb9,0x01,0x88,0xb6,0x29,0x21,
+0x6f,0x4d,0x41,0x41,0xc1,0xca,0xdb,0x6f,0xfb,0xd1,0x0b,0x26,0x6b,0x51,0x62,
+0x68,0xa4,0x94,0x56,0x0f,0x1d,0x3a,0xb4,0x43,0xcf,0x4b,0xcb,0xcc,0x06,0xc6,
+0x5e,0xaa,0x5a,0x1a,0x55,0x84,0xc4,0x88,0xa2,0x8c,0x97,0x14,0x13,0x2e,0x65,
+0xa5,0x17,0x01,0x25,0xca,0xff,0x20,0x31,0x12,0x55,0x65,0x2b,0x8d,0xd0,0xd4,
+0x13,0x27,0x4c,0x65,0xf2,0x62,0x6d,0x8d,0x7d,0xf4,0xcd,0xa5,0xf8,0xf2,0xcb,
+0x2f,0xb0,0x72,0xf5,0x4a,0xf8,0x7c,0xde,0x58,0x06,0x75,0x92,0x90,0xdb,0xed,
+0x7e,0x7a,0xce,0x0d,0x37,0xae,0x2f,0x19,0x38,0x28,0x99,0x1a,0x0c,0x53,0x4a,
+0xab,0x4a,0x4a,0x4a,0x2e,0xb8,0xba,0x64,0x21,0xed,0x81,0xbc,0x4e,0xc0,0x54,
+0x63,0xab,0x28,0x6d,0x5a,0x32,0x63,0xd2,0x17,0x27,0x33,0x26,0x49,0x5a,0x12,
+0x11,0x95,0xae,0x56,0x12,0x01,0xa8,0x08,0xd5,0x30,0x47,0x68,0x4c,0x53,0x82,
+0x10,0x02,0x8e,0x33,0x56,0x97,0xb5,0xfe,0x5a,0x6c,0xd8,0xb0,0x0e,0x9f,0x7c,
+0xfa,0x49,0xf4,0x91,0x12,0xec,0x9c,0xd5,0xf6,0xc7,0xf1,0xe3,0x27,0x2c,0xfe,
+0xe6,0x75,0xb3,0x2a,0x92,0xbc,0x2b,0x4a,0x08,0xf1,0x59,0xad,0x56,0x6f,0x41,
+0x41,0x41,0xa7,0x39,0xfc,0xd5,0x54,0x02,0x99,0x30,0x90,0x3e,0x85,0x33,0xad,
+0xba,0x03,0xd1,0x4a,0x62,0x6c,0x9c,0x14,0xe3,0x23,0xa6,0x56,0xe3,0xe4,0x45,
+0x97,0xb2,0xd0,0xe8,0x1f,0x82,0xd8,0xfa,0x53,0x95,0xc0,0xc5,0xee,0x09,0x01,
+0xc7,0xf1,0x86,0xc3,0x82,0x50,0x28,0x84,0xbd,0x7b,0x9f,0xc7,0xbe,0x17,0xf7,
+0x22,0x96,0x4d,0xfd,0x85,0xe4,0x79,0xfe,0x8b,0xe2,0xe2,0x81,0x8f,0xdc,0xf1,
+0xc3,0x1f,0xbf,0x9d,0xc2,0x7b,0x0a,0x70,0x1c,0x57,0xd5,0xa3,0x47,0x8f,0x0e,
+0x3f,0x5e,0x32,0x11,0xe6,0x2a,0x94,0xd1,0x6b,0x50,0xba,0xe6,0x49,0x48,0x84,
+0xca,0x56,0x69,0x48,0x54,0x4a,0xd5,0x12,0xaa,0x26,0x2f,0x26,0x8d,0x6a,0x22,
+0x19,0x8d,0x8e,0x8e,0xe7,0x8c,0xdc,0x5f,0x1f,0x7c,0x70,0x08,0xeb,0x37,0xac,
+0x43,0x28,0x14,0x62,0xd9,0xb9,0xba,0xee,0xf9,0xdd,0xd7,0xcc,0x9f,0x7f,0xcf,
+0x0e,0xb7,0xdb,0x6d,0xb8,0x8d,0x39,0xfa,0x65,0x0b,0x03,0xa8,0x2e,0x28,0x28,
+0x30,0x3b,0x76,0xb2,0x43,0xa1,0xef,0xc4,0xc4,0xff,0x18,0x0d,0x23,0x8c,0x6c,
+0x55,0xb4,0x03,0x98,0x28,0x81,0x9a,0x0e,0x87,0xc2,0x08,0x4b,0x1a,0xe3,0x95,
+0x53,0xcd,0x85,0x06,0xbc,0x20,0x24,0x71,0x7f,0x9d,0xc6,0x63,0x8f,0xad,0x46,
+0x65,0xe5,0xb9,0x68,0xd9,0x9a,0x74,0x11,0x97,0xcb,0xb5,0xfb,0x86,0x1b,0x6e,
+0x7c,0x74,0xdc,0xd8,0xf1,0x3e,0x5d,0x01,0x89,0x0f,0x09,0xd4,0x46,0x22,0x11,
+0x4f,0x7e,0x7e,0x7e,0xa7,0x51,0x97,0x2c,0x98,0xab,0x50,0xe6,0x8b,0x82,0xa9,
+0xad,0x8a,0x49,0xa0,0xda,0x4e,0xa9,0xc5,0x49,0x4d,0x98,0x96,0xc8,0xd6,0x6b,
+0xc4,0xf3,0x28,0x97,0x3c,0xc7,0x43,0x14,0x45,0x43,0x75,0xd9,0xd0,0xd0,0x80,
+0x2d,0x5b,0x37,0xe1,0xf0,0x61,0xf6,0x2a,0x67,0xab,0xd5,0xfa,0xfe,0xd8,0x31,
+0xe3,0x16,0xce,0x9d,0xfb,0xbd,0x63,0xac,0xfc,0x09,0xcf,0x1f,0x20,0x84,0x54,
+0x39,0x9d,0xce,0x4e,0xa7,0x2e,0x59,0x30,0x1f,0x46,0x30,0x07,0x5e,0xd1,0x4e,
+0x48,0xdc,0x3e,0xc5,0xae,0xd9,0xd2,0x08,0x24,0x27,0x52,0xdf,0xa3,0x8c,0x7d,
+0x51,0x38,0x58,0x2d,0x16,0xf0,0x06,0xcb,0x19,0xc2,0xe1,0x30,0x5e,0x7b,0xfd,
+0x55,0xec,0x7e,0xae,0x5c,0xd7,0x76,0x00,0xe0,0x79,0xfe,0x4c,0xbf,0x7e,0xfd,
+0x97,0x3c,0xb0,0xe0,0x17,0xaf,0xa5,0xf0,0x2e,0xc2,0x84,0x90,0x6a,0x9b,0xcd,
+0xd6,0x69,0xd5,0x25,0x0b,0x69,0x0f,0x23,0x28,0xa5,0xda,0x8e,0x46,0x92,0x9e,
+0x63,0x94,0x2e,0x86,0x44,0xaa,0xea,0x54,0xdf,0x46,0x6f,0xac,0x16,0x2b,0x04,
+0x41,0x34,0x76,0x7f,0x7d,0xfa,0x09,0xd6,0x6d,0x58,0xcb,0x5c,0xe5,0x4c,0x08,
+0x69,0xca,0xcb,0xcb,0xdb,0x78,0xf7,0xfc,0x7b,0x36,0x17,0x15,0xf5,0x4e,0xe5,
+0xdc,0x15,0x9f,0x28,0x8a,0x1e,0x28,0xb3,0xe4,0x17,0x15,0x92,0x10,0xc8,0xce,
+0x94,0x49,0xcf,0x51,0x21,0x4f,0x4d,0x64,0x62,0x22,0x05,0x16,0xd1,0x02,0xab,
+0xc5,0x66,0x48,0x5c,0x55,0x55,0x25,0xd6,0x6d,0x58,0x8b,0x53,0xa7,0x2a,0xa0,
+0x74,0x80,0xb4,0x83,0x1a,0xa7,0xd3,0xf9,0xd2,0x0d,0xdf,0x9e,0xb3,0xec,0x1b,
+0xd7,0x5c,0x9b,0xca,0xd1,0xc2,0x4d,0x00,0xaa,0x00,0xb4,0xdb,0xe1,0x73,0x17,
+0x1a,0x7a,0xdd,0xa4,0x72,0x28,0x1b,0xbd,0xc4,0x68,0xb2,0xa8,0x0a,0x6c,0x75,
+0x5f,0x21,0x7a,0x1b,0x27,0x32,0x56,0x9e,0x4a,0xb5,0x6a,0xfa,0x26,0x2a,0x62,
+0x05,0x9e,0x87,0xcd,0x26,0x19,0xce,0x8a,0x07,0x9a,0x02,0x28,0x2f,0x7f,0x16,
+0x6f,0xbd,0xfd,0x16,0xb3,0x6d,0x16,0x8b,0xe5,0xe3,0xd1,0xa3,0xaf,0x5c,0x38,
+0x7f,0xde,0xdd,0xec,0x23,0xe9,0xb5,0x88,0x00,0xa8,0x06,0x90,0xec,0xf4,0xa4,
+0x4e,0x0f,0x1d,0x81,0xc9,0x3b,0x31,0x46,0xbd,0xc8,0x56,0x89,0x6c,0xcd,0x8f,
+0x04,0x62,0xf5,0x1d,0x4d,0x8e,0xe3,0xa2,0x67,0x92,0x19,0xaf,0xfe,0xfa,0xf3,
+0x5b,0x07,0xb1,0x63,0xc7,0xf6,0x68,0x6f,0x56,0xdb,0x26,0x8e,0xe3,0xaa,0x7b,
+0xf7,0xee,0xb3,0xe2,0x97,0xff,0xfd,0xeb,0xbd,0xa2,0x20,0xa6,0xe2,0x8f,0xac,
+0x05,0x50,0x83,0x8b,0x50,0x5d,0xb2,0xc0,0x20,0x90,0x7d,0xad,0x06,0xab,0xe7,
+0xa8,0xe9,0x5d,0x02,0x5a,0x35,0xca,0x90,0x3c,0x50,0x65,0x0f,0x9d,0xcd,0x6a,
+0xac,0x2e,0x4f,0x9c,0x38,0x8e,0x0d,0x1b,0xd7,0x29,0xab,0x9c,0xa1,0xeb,0x54,
+0x05,0xbb,0x76,0xed,0xba,0xf5,0x8e,0x1f,0xdd,0xb9,0x7e,0xf0,0xe0,0x21,0xa9,
+0x2c,0xc9,0x6b,0x06,0x50,0x89,0x8b,0x58,0x5d,0xb2,0x60,0x2a,0x81,0xa9,0xa9,
+0xd0,0xc4,0x21,0x80,0x5a,0xa5,0xb2,0xc7,0x73,0x56,0x8b,0xcd,0xf0,0x00,0x39,
+0x40,0xd9,0xfc,0xb8,0x79,0xcb,0x53,0x38,0x7e,0xfc,0x38,0xb3,0x1d,0x92,0x64,
+0xff,0xc3,0xcc,0x19,0x33,0x17,0xcf,0x99,0x73,0xd3,0x3f,0x93,0x3c,0x1f,0xa0,
+0xa8,0xcb,0x1a,0x00,0xcc,0xd3,0x76,0x2e,0x76,0x64,0x46,0xa0,0x4e,0xc4,0xd4,
+0xf9,0xd9,0x92,0x08,0x28,0x47,0x38,0x3a,0x1d,0x4e,0x08,0x02,0x7b,0x5f,0x7e,
+0x73,0x4b,0x33,0xf6,0xed,0xdb,0x8b,0x37,0xde,0x30,0x9c,0xe6,0x39,0x31,0x74,
+0xe8,0xb0,0x85,0x3f,0xbd,0xf7,0x67,0xef,0xa5,0xf8,0x7c,0x7e,0x28,0xe4,0x75,
+0xd8,0x0f,0x73,0x9c,0x6f,0xa4,0x4f,0xa0,0x7a,0x5c,0x07,0xf6,0x10,0x00,0x09,
+0xf7,0x1c,0xc7,0xc1,0xe9,0x70,0xc1,0x66,0x65,0xff,0xb6,0x51,0x44,0x8e,0xe0,
+0xd0,0xa1,0xf7,0xf1,0xf4,0xb6,0xad,0xca,0x8f,0x70,0x24,0x54,0x4b,0x08,0xf1,
+0xf7,0x2c,0xec,0xf9,0xe8,0x82,0x05,0xbf,0xd8,0xe5,0x74,0x3a,0x53,0x21,0xa3,
+0x19,0x4a,0xef,0x32,0xd9,0x0c,0xfa,0x45,0x0f,0x3d,0x81,0x48,0x4d,0x85,0x46,
+0x13,0x6b,0x98,0x54,0x13,0x1b,0x8b,0x73,0xd8,0x9d,0x70,0xd8,0x9d,0x86,0x65,
+0x55,0x54,0x7c,0x85,0x27,0x9e,0xda,0x08,0x8f,0xc7,0xc3,0xaa,0x33,0x92,0xe3,
+0xce,0xd9,0x79,0xcb,0x2d,0x73,0x1f,0x1b,0x3b,0x66,0x5c,0x2a,0x2a,0xf0,0x92,
+0x56,0x97,0x2c,0x98,0x4b,0x20,0xcb,0x13,0xa3,0x73,0x95,0xb1,0xed,0x9c,0x64,
+0x95,0xa2,0xbf,0xef,0xc7,0xf6,0xa2,0xf8,0xfd,0xb5,0xd8,0xbe,0x63,0x1b,0x3e,
+0x35,0x98,0xe6,0xb1,0x5a,0xad,0xef,0x4e,0x9a,0x38,0xf9,0x91,0xb9,0xff,0xf6,
+0xbd,0x13,0x29,0x3e,0xcb,0x25,0xaf,0x2e,0x59,0x68,0x83,0x0d,0x54,0x67,0x52,
+0x8d,0xe7,0x04,0x01,0x39,0x6e,0xe3,0x4d,0xfe,0xc1,0x60,0x0b,0x5e,0x3b,0xf0,
+0x2a,0x5e,0x79,0xe5,0xf7,0xcc,0x3a,0x78,0x9e,0x3f,0x35,0xa0,0xff,0x80,0x25,
+0x3f,0xff,0x8f,0xff,0xfc,0x43,0x8a,0xcf,0xd0,0x02,0xa5,0x77,0x79,0xc9,0xab,
+0x4b,0x16,0x18,0x03,0xf9,0x56,0xc9,0x33,0xb2,0x81,0x46,0xe3,0x39,0xb7,0xab,
+0x8b,0xe1,0xa9,0xef,0xb2,0x2c,0xe3,0xa3,0x8f,0x3f,0xc4,0xd3,0xdb,0xb6,0x20,
+0x18,0x0c,0xb2,0xdc,0x5f,0x81,0xbc,0xbc,0xbc,0xf5,0x3f,0xb9,0xeb,0x9e,0xad,
+0x85,0x85,0x29,0xcd,0xbb,0xc9,0x50,0x24,0xae,0xd3,0xfd,0x28,0xe3,0x85,0x44,
+0x92,0x81,0xbc,0x3e,0x03,0xcb,0x06,0xba,0x1c,0x2e,0xb8,0x5d,0x5d,0x0c,0x37,
+0xf9,0x7f,0xfd,0xf5,0x69,0x6c,0xd9,0xba,0x19,0x67,0xcf,0x9e,0x8d,0x66,0xd3,
+0xb9,0xbf,0xf6,0x5e,0x3f,0x6b,0xf6,0x8a,0xe9,0xd3,0xcb,0x52,0xfd,0x5d,0x9f,
+0x3a,0x28,0x9e,0x94,0xcb,0x4a,0x5d,0xb2,0x90,0x81,0x0a,0x45,0xdc,0xdf,0x69,
+0xb3,0x48,0xc8,0xcd,0xe9,0x66,0x78,0xd2,0x6f,0x7d,0x43,0x3d,0xf6,0xec,0x29,
+0xc7,0x07,0x1f,0x1c,0x8e,0x96,0x17,0x2f,0x19,0x00,0x20,0x8a,0x96,0x0f,0x47,
+0x8f,0x1e,0xfd,0xf0,0xed,0xb7,0xfd,0xf0,0x93,0x14,0xdb,0xdb,0x02,0xa5,0x77,
+0x69,0x7a,0x40,0xea,0xe5,0x84,0x8c,0x6c,0xa0,0x20,0x88,0xe8,0xda,0xa5,0x1b,
+0x24,0x83,0xdf,0x1e,0x0a,0x85,0x82,0x38,0xf8,0xd6,0x9f,0xb0,0x77,0xef,0x0b,
+0xb1,0x82,0x34,0xf1,0x1c,0xc7,0x55,0x16,0x15,0xf5,0x5e,0xfe,0xf3,0xfb,0x1f,
+0x78,0x49,0x10,0x84,0x54,0xdc,0x5f,0x59,0x75,0x69,0x80,0xb4,0x09,0xcc,0xcd,
+0xe9,0x0a,0xb7,0x2b,0xc7,0xd0,0xce,0x1d,0x3d,0xfa,0x39,0x9e,0xde,0xbe,0x15,
+0x81,0x40,0x80,0x95,0xa6,0x25,0x37,0xb7,0xeb,0xe6,0xdb,0x6f,0xfb,0xe1,0xc6,
+0xe2,0x01,0xc5,0xa9,0x4a,0x51,0x1d,0x14,0xf2,0xda,0xbc,0x97,0xee,0x52,0x44,
+0x5a,0x04,0x12,0x42,0x90,0xe3,0xee,0xc2,0x2c,0xa8,0xb2,0xea,0x1c,0x9e,0xd9,
+0xb1,0xcd,0xe8,0x30,0x1b,0x48,0x92,0xf4,0x5a,0x59,0xe9,0x8c,0x25,0xdf,0xbc,
+0xee,0x7a,0xfd,0xef,0x82,0xb3,0x91,0x55,0x97,0x29,0x20,0xed,0x4e,0x4c,0x22,
+0x02,0x81,0x46,0xbc,0xf8,0xf2,0x3e,0xbc,0xf7,0xde,0xbb,0xfa,0xfc,0x00,0x04,
+0x41,0x38,0x36,0x64,0xc8,0xd0,0x87,0xef,0xbc,0xe3,0xae,0xbf,0xa6,0xd8,0x26,
+0x19,0x80,0x07,0x8a,0xba,0x4c,0x45,0xbd,0x5e,0xd6,0x60,0x78,0x62,0xd8,0xd7,
+0x89,0x08,0x87,0xc3,0xf8,0xcb,0x5f,0xdf,0xc3,0xf3,0xcf,0xef,0x81,0x2c,0xcb,
+0x2c,0x69,0xf5,0x15,0x16,0xf6,0x78,0xf4,0xde,0xbb,0xef,0xdb,0xed,0x70,0x38,
+0x52,0xed,0x2d,0xd6,0x43,0xe9,0x5d,0x66,0xd5,0x65,0x8a,0x48,0xdb,0x13,0x43,
+0x29,0xc5,0xc9,0x2f,0x4f,0x60,0xc7,0x8e,0xed,0xf0,0xfb,0x6b,0x75,0x79,0x00,
+0x44,0xdc,0xee,0x9c,0x1d,0xdf,0xb9,0xf9,0x5f,0xd7,0x8c,0x1c,0x31,0x2a,0xd5,
+0x09,0xd3,0x20,0x14,0x75,0xd9,0x69,0x7e,0x9f,0xfd,0x62,0x01,0x73,0x46,0x9e,
+0x79,0x0d,0xc0,0xe3,0xad,0x46,0x79,0xf9,0x2e,0x9c,0x3c,0xa9,0x78,0xb7,0x34,
+0x04,0x13,0xc0,0x6a,0xb5,0xbe,0x3d,0x61,0xfc,0xc4,0x47,0x6e,0x9c,0x73,0xf3,
+0x17,0x29,0xd6,0x2f,0x03,0xf0,0x02,0xf0,0x21,0xab,0x2e,0x33,0x42,0x4a,0x9d,
+0x98,0xa6,0xe6,0x26,0xbc,0x7e,0xe0,0x55,0x1c,0x3c,0xf8,0x27,0x10,0xe8,0xed,
+0x1c,0xcf,0xf3,0x15,0xfd,0xfb,0x0f,0x58,0xf4,0x93,0xf9,0xf7,0xbe,0x99,0x46,
+0xdd,0x59,0x75,0xd9,0x0e,0x30,0x25,0x90,0x52,0x8a,0x43,0x1f,0xbc,0x8f,0x3d,
+0x7b,0x9e,0x43,0x38,0x1c,0x66,0xd9,0xb9,0x86,0xbc,0xbc,0xbc,0x75,0x3f,0xfe,
+0xd1,0xbc,0x6d,0x79,0x79,0xf9,0xa9,0x6e,0x6a,0xcc,0xaa,0xcb,0x76,0x84,0x29,
+0x81,0x91,0x48,0x04,0xe5,0xe5,0xbb,0x74,0xe1,0x00,0x64,0x87,0xc3,0xf9,0xc2,
+0xac,0xeb,0x66,0xad,0x9c,0x38,0x71,0x72,0xb2,0x9f,0x1d,0x8d,0x81,0x42,0xe9,
+0x5d,0x66,0xd5,0x65,0x3b,0xc2,0x7c,0x18,0xc1,0x80,0x28,0x5a,0xfe,0x36,0x6a,
+0xd4,0x15,0x0f,0xcf,0xbd,0xe5,0xbb,0x66,0x67,0x5c,0x26,0xa2,0x01,0x8a,0xba,
+0xbc,0x60,0x5b,0x8f,0x2f,0x17,0xa4,0x4c,0x20,0xc7,0x71,0x67,0x8b,0x7a,0x15,
+0x2d,0xbf,0xf7,0x9e,0x9f,0x25,0x3b,0xe3,0x52,0x8d,0x10,0x14,0x75,0x79,0x5e,
+0x4f,0x6a,0xb8,0x9c,0xa1,0x23,0x90,0xe7,0xb9,0xaf,0x65,0x59,0xee,0xa9,0x0a,
+0x6a,0xce,0xcd,0xcd,0xdd,0xf4,0xbd,0xb9,0xdf,0x7f,0xb2,0x4f,0x9f,0xbe,0xa9,
+0x7a,0x45,0x28,0x94,0xde,0xa5,0x17,0x59,0x75,0x79,0x5e,0xa1,0x23,0xb0,0xb0,
+0xa0,0x70,0xfd,0xd9,0x73,0x67,0x7f,0x0d,0xc0,0x26,0x49,0xd2,0xfe,0x69,0x53,
+0x4b,0x97,0x96,0x95,0xce,0x34,0x3b,0xe3,0x32,0x11,0x8d,0x50,0xa4,0x2e,0xab,
+0x2e,0x2f,0x00,0x08,0xa5,0x74,0x50,0x62,0xe0,0x99,0x33,0xa7,0x6d,0x27,0xbf,
+0x38,0x91,0x3b,0x7d,0x5a,0xd9,0xd9,0x34,0xca,0xca,0xaa,0xcb,0x0e,0x00,0x93,
+0xc0,0x34,0x91,0x55,0x97,0x1d,0x88,0xf4,0x7e,0xb6,0x45,0x8f,0xac,0xba,0xec,
+0x60,0x64,0x4a,0x60,0x18,0x0a,0x71,0x9d,0xe2,0xa4,0x86,0xcb,0x19,0xe9,0x12,
+0x48,0xa1,0x0c,0xc4,0x3d,0xc8,0xaa,0xcb,0x4e,0x01,0x01,0xca,0xc4,0x29,0x7b,
+0x0d,0xa0,0x16,0x01,0x28,0x52,0x77,0x51,0x6c,0x3d,0xbe,0x5c,0x20,0x40,0x59,
+0x10,0xdb,0xdd,0x24,0x4d,0x18,0x8a,0x17,0xe5,0xa2,0xda,0x7a,0x7c,0xb9,0x40,
+0x80,0x42,0x4c,0x57,0xe8,0xd5,0x29,0x85,0x32,0x2b,0x7e,0x51,0x6e,0x3d,0xbe,
+0x5c,0x40,0x68,0x7c,0x9b,0x2d,0x72,0x00,0xe4,0x42,0x91,0xb8,0x26,0x28,0x8b,
+0x89,0xb2,0xea,0xb2,0x93,0xe3,0xff,0x01,0xb0,0xa7,0x7e,0xbb,0x8d,0xcf,0x0a,
+0x8d,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,
+};
+
diff --git a/attic/table/table.c b/attic/table/table.c
new file mode 100644
index 0000000..69f7d16
--- /dev/null
+++ b/attic/table/table.c
@@ -0,0 +1,446 @@
+#include <clutter/clutter.h>
+#include <clutter/clutter-event.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <glib/gstdio.h>
+#include <gst/gst.h>
+#include <unistd.h>
+#include "clutter-dominatrix.h"
+#include "clutter-video-player.h"
+
+#define SIZE_X 80
+#define MARG 4
+
+ClutterDominatrix *ActiveDMX = NULL;
+
+/* rand() is not that random, and tends to generate clustered values;
+ * this function attempts to ensure that the images we load are spread more
+ * evenly around the stage
+ *
+ * We divide the stage into n x m squares with size corresponsing to the
+ * thumb width, and maintain a bit matrix indicating if an image has been
+ * placed at a position in each square; then, for first n*m/2 number of thumbs,
+ * we do not allow two thumbs in the same square.
+ */
+static void
+get_xy_coords (ClutterActor * stage, gint * x, gint * y)
+{
+ static unsigned char * map = NULL;
+ static gint count = 0;
+ static gint size = 0;
+ static gint sw, sh;
+ static gint xdim, ydim;
+
+ if (!map)
+ {
+ gint w, h;
+
+ sw = clutter_actor_get_width (stage) - SIZE_X;
+ sh = clutter_actor_get_height (stage) - SIZE_X;
+
+ w = sw + 2 * SIZE_X - 1;
+ h = sh + 2 * SIZE_X - 1;
+
+ xdim = w / (SIZE_X);
+ ydim = h / (SIZE_X);
+
+ size = xdim * ydim;
+
+ map = g_malloc0 (size / 8);
+ }
+
+ *x = rand () % sw;
+ *y = rand () % sh;
+
+ if (count >= size / 2)
+ return;
+
+ do {
+ gint off;
+ gint indx;
+ unsigned char mask;
+
+ off = *y/(SIZE_X) * xdim + *x/(SIZE_X);
+ indx = off / 8;
+ mask = 1 << (off % 8);
+
+ if (!(map[indx] & mask))
+ {
+ map[indx] |= mask;
+ count++;
+ return;
+ }
+
+ *x = rand () % sw;
+ *y = rand () % sh;
+ }
+ while (count < size / 2);
+}
+
+struct notify_data
+{
+ ClutterActor * bckg;
+ ClutterActor * shdw;
+};
+
+static void
+notify_cb (GObject *object,
+ GParamSpec *param_spec,
+ gpointer data)
+{
+ ClutterVideoPlayer * player;
+ struct notify_data * d = data;
+
+ if (!CLUTTER_IS_VIDEO_PLAYER (object))
+ return;
+
+ player = CLUTTER_VIDEO_PLAYER (object);
+
+ gint w = clutter_actor_get_width (CLUTTER_ACTOR (player)) + MARG;
+ gint h = clutter_actor_get_height (CLUTTER_ACTOR (player)) + MARG;
+
+ if (w == clutter_actor_get_width (d->bckg) &&
+ h == clutter_actor_get_width (d->bckg))
+ return;
+
+ clutter_actor_set_size (d->bckg, w, h);
+ clutter_actor_set_size (d->shdw, w, h);
+}
+
+static ClutterDominatrix *
+make_item (ClutterActor * stage, ClutterActor *actor)
+{
+ ClutterActor * rect, * group, * shaddow;
+ ClutterDominatrix * dmx;
+ ClutterColor bckg_clr = { 0xff, 0xff, 0xff, 0xff };
+ ClutterColor shdw_clr = { 0x44, 0x44, 0x44, 0x44 };
+ gdouble scale;
+ gint w, h, sw, sh, x, y;
+ ClutterFixed zang;
+ struct notify_data * ndata = g_malloc0(sizeof (struct notify_data));
+
+ scale = (double) SIZE_X / (double) clutter_actor_get_width (actor);
+ w = SIZE_X;
+ h = (gint)(scale * (double) clutter_actor_get_height (actor));
+
+ sw = clutter_actor_get_width (stage) - w;
+ sh = clutter_actor_get_height (stage) - h;
+
+ get_xy_coords (stage, &x, &y);
+
+ group = clutter_group_new ();
+ clutter_actor_set_position (group, x, y);
+ clutter_actor_set_size (group, w + MARG, h + MARG);
+ clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
+ clutter_actor_show (group);
+
+ rect = clutter_rectangle_new ();
+ clutter_actor_set_position (rect, 0, 0);
+ clutter_actor_set_size (rect, w + MARG, h + MARG);
+
+ clutter_rectangle_set_color (CLUTTER_RECTANGLE (rect),
+ &bckg_clr);
+ clutter_actor_show (rect);
+ ndata->bckg = rect;
+
+ shaddow = clutter_rectangle_new ();
+ clutter_actor_set_position (shaddow, 2, 2);
+ clutter_actor_set_size (shaddow, w + MARG, h + MARG);
+ clutter_rectangle_set_color (CLUTTER_RECTANGLE (shaddow), &shdw_clr);
+ clutter_actor_show (shaddow);
+ ndata->shdw = shaddow;
+
+ clutter_actor_set_position (actor, 2, 2);
+ clutter_actor_set_size (actor, w, h);
+ clutter_actor_show (actor);
+
+ if (CLUTTER_IS_VIDEO_PLAYER (actor))
+ {
+ g_signal_connect (actor, "notify::width", G_CALLBACK(notify_cb), ndata);
+ g_signal_connect (actor, "notify::height", G_CALLBACK(notify_cb), ndata);
+ }
+
+ clutter_container_add (CLUTTER_CONTAINER (group),
+ shaddow, rect, actor, NULL);
+
+ zang = CLUTTER_INT_TO_FIXED (rand()%360);
+ clutter_actor_set_rotationx (group,
+ CLUTTER_Z_AXIS,
+ zang,
+ 0,
+ 0,
+ 0);
+
+ dmx = clutter_dominatrix_new (group);
+
+ return dmx;
+}
+
+static ClutterDominatrix *
+make_img_item (ClutterActor * stage, const gchar * name)
+{
+ ClutterActor * img;
+ GdkPixbuf * pixbuf;
+
+ pixbuf = gdk_pixbuf_new_from_file_at_size (name, 400, 400, NULL);
+
+ if (!pixbuf)
+ return NULL;
+
+ img = clutter_texture_new_from_pixbuf (pixbuf);
+ clutter_actor_show (img);
+
+ return make_item (stage, img);
+}
+
+static ClutterDominatrix *
+make_vid_item (ClutterActor * stage, const gchar * name)
+{
+ ClutterActor * vid;
+
+ vid = clutter_video_player_new (name);
+ return make_item (stage, vid);
+}
+
+static gboolean
+is_supported_img (const gchar * name)
+{
+ GdkPixbufFormat * fmt = gdk_pixbuf_get_file_info (name, NULL, NULL);
+
+ if (fmt)
+ return (gdk_pixbuf_format_is_disabled (fmt) != TRUE);
+
+ return FALSE;
+}
+
+static void
+process_directory (const gchar * name,
+ ClutterActor * stage, ClutterActor * notice)
+{
+ GDir * dir;
+ const gchar * fname;
+ struct stat sbuf;
+
+ dir = g_dir_open (name, 0, NULL);
+
+ if (!dir)
+ return;
+
+ g_chdir (name);
+
+ while ((fname = g_dir_read_name (dir)))
+ {
+ while (g_main_context_pending (NULL))
+ g_main_context_iteration (NULL, FALSE);
+
+ if (is_supported_img (fname))
+ {
+ make_img_item (stage, fname);
+ clutter_actor_raise_top (notice);
+ }
+ else if (g_str_has_suffix (fname, ".flv")
+ || g_str_has_suffix (fname, ".avi")
+ || g_str_has_suffix (fname, ".mpg")
+ || g_str_has_suffix (fname, ".mp4")
+ || g_str_has_suffix (fname, ".mov")
+ || g_str_has_suffix (fname, ".ogg"))
+ {
+ make_vid_item (stage, fname);
+ clutter_actor_raise_top (notice);
+ }
+
+ if (g_stat (fname, &sbuf) > -1 && S_ISDIR (sbuf.st_mode))
+ process_directory (fname, stage, notice);
+ }
+
+ g_chdir ("..");
+
+ g_dir_close (dir);
+}
+
+static ClutterActor *
+make_busy_notice (ClutterActor * stage)
+{
+ ClutterActor * label;
+ ClutterActor * rect;
+ ClutterActor * group;
+ ClutterColor text_clr = { 0xff, 0xff, 0xff, 0xff };
+ ClutterColor bckg_clr = { 0x5c, 0x54, 0x57, 0x9f };
+
+ label = clutter_label_new_with_text ("Sans 54",
+ "Please wait, loading images ...");
+
+ clutter_label_set_color (CLUTTER_LABEL (label), &text_clr);
+ clutter_actor_set_position (label, 10, 10);
+ clutter_actor_show (label);
+
+ group = clutter_group_new ();
+ clutter_actor_show (group);
+
+ rect = clutter_rectangle_new ();
+ clutter_actor_set_position (rect, 0, 0);
+ clutter_actor_set_size (rect,
+ clutter_actor_get_width (label) + 20,
+ clutter_actor_get_height (label) + 20);
+
+ clutter_rectangle_set_color (CLUTTER_RECTANGLE (rect),
+ &bckg_clr);
+ clutter_actor_show (rect);
+
+ clutter_container_add (CLUTTER_CONTAINER (group), rect, label, NULL);
+
+ return group;
+}
+
+struct timeout_cb_data
+{
+ ClutterActor * stage;
+ ClutterActor * notice;
+ const gchar * name;
+};
+
+static void
+tmln_completed_cb (ClutterActor *actor, gpointer data)
+{
+ ClutterGroup * stage = data;
+
+ clutter_group_remove (stage, actor);
+}
+
+static gboolean
+timeout_cb (gpointer data)
+{
+ ClutterTimeline * tmln;
+ ClutterEffectTemplate * tmpl;
+
+ struct timeout_cb_data * d = data;
+
+ process_directory (d->name, d->stage, d->notice);
+
+ tmpl = clutter_effect_template_new (clutter_timeline_new (60, 60),
+ CLUTTER_ALPHA_SINE_DEC);
+
+ clutter_actor_set_opacity (d->notice, 0);
+ tmln = clutter_effect_fade (tmpl, d->notice, 0xff, tmln_completed_cb,
+ d->stage);
+
+ g_object_unref (tmpl);
+
+ clutter_actor_show_all (d->stage);
+ clutter_actor_queue_redraw (d->stage);
+
+ return FALSE;
+}
+
+static void
+on_event (ClutterStage *stage,
+ ClutterEvent *event,
+ gpointer data)
+{
+ gint x,y;
+ ClutterActor *actor;
+ ClutterDominatrix *dmx;
+
+ switch (event->type)
+ {
+ case CLUTTER_KEY_PRESS:
+ {
+ guint sym = clutter_key_event_symbol ((ClutterKeyEvent*)event);
+
+ switch (sym)
+ {
+ case CLUTTER_Escape:
+ case CLUTTER_q:
+ case CLUTTER_Q:
+ clutter_main_quit ();
+ break;
+
+ default:
+ break;
+ }
+ }
+ break;
+ case CLUTTER_BUTTON_PRESS:
+ clutter_event_get_coords (event, &x, &y);
+
+ actor = clutter_stage_get_actor_at_pos (stage, x, y);
+
+ while (actor &&
+ clutter_actor_get_parent (actor) != CLUTTER_ACTOR(stage) &&
+ (actor = clutter_actor_get_parent (actor)));
+
+ if (!actor)
+ return;
+
+ dmx = g_object_get_data (G_OBJECT (actor), "dominatrix");
+
+ if (!dmx)
+ return;
+
+ ActiveDMX = g_object_ref (dmx);
+ break;
+ case CLUTTER_BUTTON_RELEASE:
+ if (ActiveDMX)
+ {
+ clutter_dominatrix_handle_event (ActiveDMX, event);
+ g_object_unref (ActiveDMX);
+ ActiveDMX = NULL;
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (ActiveDMX)
+ clutter_dominatrix_handle_event (ActiveDMX, event);
+
+ return;
+}
+
+int
+main (int argc, char *argv[])
+{
+ ClutterActor * stage, * notice;
+ ClutterColor stage_clr = { 0xed, 0xe8, 0xe1, 0xff };
+ struct timeout_cb_data tcbd;
+
+ if (argc != 2)
+ {
+ g_print ("\n usage: %s image_directory\n\n", argv[0]);
+ exit (1);
+ }
+
+ srand (time(NULL) + getpid());
+
+ clutter_init (&argc, &argv);
+ gst_init (&argc, &argv);
+
+ stage = clutter_stage_get_default ();
+
+ clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_clr);
+
+ g_object_set (stage, "fullscreen", TRUE, NULL);
+
+ notice = make_busy_notice (stage);
+ clutter_actor_set_position (notice,
+ (clutter_actor_get_width (stage) -
+ clutter_actor_get_width (notice))/2,
+ (clutter_actor_get_height (stage) -
+ clutter_actor_get_height (notice))/2);
+
+ clutter_group_add (CLUTTER_GROUP(stage), notice);
+ clutter_actor_show_all (stage);
+
+ tcbd.stage = stage;
+ tcbd.notice = notice;
+ tcbd.name = argv[1];
+
+ g_timeout_add (100, timeout_cb, &tcbd);
+
+ g_signal_connect (stage, "event", G_CALLBACK (on_event), NULL);
+
+ clutter_main();
+
+ return EXIT_SUCCESS;
+}