From a4e97e61f982d3039d9d594de9477a5104491c52 Mon Sep 17 00:00:00 2001 From: Manish Singh Date: Sun, 4 Jan 1998 00:43:51 +0000 Subject: [PATCH] Lots o' changes for 0.99.17. See ChangeLog for details. -Yosh --- ChangeLog | 25 + NOTES | 9 +- README | 4 +- TODO | 3 - app/colormaps.c | 25 +- app/fileops.c | 5 +- app/fuzzy_select.c | 2 +- app/text_tool.c | 9 +- app/tools/fuzzy_select.c | 2 +- app/tools/gimpfuzzyselecttool.c | 2 +- app/tools/gimpregionselecttool.c | 2 +- app/tools/gimptexttool.c | 9 +- app/tools/text_tool.c | 9 +- configure.in | 18 +- docs/Wilber.xcf.gz | Bin 0 -> 7326 bytes docs/Wilber.xcf.gz.README | 15 + docs/pdb.texi | 287 +- libgimp/gimplayer.c | 1 + libgimp/gimplayer_pdb.c | 1 + plug-ins/AlienMap/AlienMap.c | 6 +- plug-ins/AlienMap/INSTALL | 53 +- plug-ins/AlienMap/README | 53 +- plug-ins/AlienMap/alienmap.c | 539 +++- plug-ins/AlienMap/logo.h | 786 +++++- plug-ins/Anamorphose/Anamorphose.c | 11 +- plug-ins/Anamorphose/INSTALL | 8 +- plug-ins/Anamorphose/README | 8 +- plug-ins/Anamorphose/logo.h | 786 +++++- .../CentralReflection/CentralReflection.c | 13 +- plug-ins/CentralReflection/INSTALL | 8 +- plug-ins/CentralReflection/README | 8 +- plug-ins/CentralReflection/logo.h | 786 +++++- plug-ins/Curtain/Curtain.c | 28 +- plug-ins/Curtain/INSTALL | 8 +- plug-ins/Curtain/README | 8 +- plug-ins/Curtain/logo.h | 786 +++++- plug-ins/DigitalSignature/.cvsignore | 5 + plug-ins/DigitalSignature/DigitalSignature.c | 1010 ++++++++ .../doc/doc => DigitalSignature/INSTALL} | 19 +- plug-ins/DigitalSignature/Makefile.am | 43 + plug-ins/DigitalSignature/README | 70 + plug-ins/DigitalSignature/logo.h | 788 ++++++ plug-ins/Encript_Decript/logo.h | 14 - .../.cvsignore | 2 +- .../Encrypt_Decrypt.c} | 524 +++- .../INSTALL | 10 +- .../Makefile.am | 8 +- .../README | 10 +- plug-ins/Encrypt_Decrypt/logo.h | 788 ++++++ plug-ins/FractalExplorer/.cvsignore | 5 + plug-ins/FractalExplorer/Callbacks.h | 362 +++ plug-ins/FractalExplorer/Dialogs.h | 2300 +++++++++++++++++ plug-ins/FractalExplorer/Events.h | 304 +++ plug-ins/FractalExplorer/FractalExplorer.c | 2209 ++++++++++++++++ plug-ins/FractalExplorer/FractalExplorer.h | 357 +++ plug-ins/FractalExplorer/INSTALL | 89 + plug-ins/FractalExplorer/Languages.h | 566 ++++ plug-ins/FractalExplorer/Makefile.am | 50 + plug-ins/FractalExplorer/README | 89 + .../FractalExplorer/examples/Asteroid Field | 26 + .../FractalExplorer/examples/Bar Code Label | 26 + .../FractalExplorer/examples/Beauty of Nature | 26 + .../FractalExplorer/examples/Blue Curtain | 26 + plug-ins/FractalExplorer/examples/Car Track | 26 + .../examples/Energetic Diamond | 26 + plug-ins/FractalExplorer/examples/Explosive | 26 + plug-ins/FractalExplorer/examples/Flower | 26 + plug-ins/FractalExplorer/examples/Fragments | 26 + plug-ins/FractalExplorer/examples/Hemp | 26 + .../FractalExplorer/examples/High Voltage | 26 + plug-ins/FractalExplorer/examples/Hoops | 26 + plug-ins/FractalExplorer/examples/Ice Crystal | 26 + plug-ins/FractalExplorer/examples/Leaves | 26 + plug-ins/FractalExplorer/examples/Lightning | 26 + plug-ins/FractalExplorer/examples/Mandelbrot | 26 + plug-ins/FractalExplorer/examples/Marble | 26 + plug-ins/FractalExplorer/examples/Marble2 | 26 + plug-ins/FractalExplorer/examples/Medusa | 26 + plug-ins/FractalExplorer/examples/Nautilus | 26 + plug-ins/FractalExplorer/examples/Nebula | 26 + plug-ins/FractalExplorer/examples/Plant | 26 + plug-ins/FractalExplorer/examples/Rose | 26 + plug-ins/FractalExplorer/examples/Saturn | 26 + .../FractalExplorer/examples/Snow Crystal | 26 + plug-ins/FractalExplorer/examples/Soma | 26 + plug-ins/FractalExplorer/examples/Spark | 26 + plug-ins/FractalExplorer/examples/Suns | 26 + plug-ins/FractalExplorer/examples/Tentacles | 26 + .../FractalExplorer/examples/The Green Place | 26 + plug-ins/FractalExplorer/examples/Wave | 26 + plug-ins/FractalExplorer/examples/Wood | 26 + .../FractalExplorer/examples/Zooming Circle | 26 + .../fractalexplorer-examples/Asteroid Field | 26 + .../fractalexplorer-examples/Bar Code Label | 26 + .../fractalexplorer-examples/Beauty of Nature | 26 + .../fractalexplorer-examples/Blue Curtain | 26 + .../fractalexplorer-examples/Car Track | 26 + .../Energetic Diamond | 26 + .../fractalexplorer-examples/Explosive | 26 + .../fractalexplorer-examples/Flower | 26 + .../fractalexplorer-examples/Fragments | 26 + .../fractalexplorer-examples/Hemp | 26 + .../fractalexplorer-examples/High Voltage | 26 + .../fractalexplorer-examples/Hoops | 26 + .../fractalexplorer-examples/Ice Crystal | 26 + .../fractalexplorer-examples/Leaves | 26 + .../fractalexplorer-examples/Lightning | 26 + .../fractalexplorer-examples/Mandelbrot | 26 + .../fractalexplorer-examples/Marble | 26 + .../fractalexplorer-examples/Marble2 | 26 + .../fractalexplorer-examples/Medusa | 26 + .../fractalexplorer-examples/Nautilus | 26 + .../fractalexplorer-examples/Nebula | 26 + .../fractalexplorer-examples/Plant | 26 + .../fractalexplorer-examples/Rose | 26 + .../fractalexplorer-examples/Saturn | 26 + .../fractalexplorer-examples/Snow Crystal | 26 + .../fractalexplorer-examples/Soma | 26 + .../fractalexplorer-examples/Spark | 26 + .../fractalexplorer-examples/Suns | 26 + .../fractalexplorer-examples/Tentacles | 26 + .../fractalexplorer-examples/The Green Place | 26 + .../fractalexplorer-examples/Wave | 26 + .../fractalexplorer-examples/Wood | 26 + .../fractalexplorer-examples/Zooming Circle | 26 + plug-ins/FractalExplorer/logo.h | 788 ++++++ plug-ins/FractalExplorer/pix_data.h | 154 ++ plug-ins/Julia/Julia.c | 2 +- plug-ins/Julia/julia.c | 1411 ---------- plug-ins/Julia/logo.h | 786 +++++- plug-ins/Makefile.am | 4 +- plug-ins/Mandelbrot/Mandelbrot.c | 2 +- plug-ins/Mandelbrot/logo.h | 786 +++++- plug-ins/Mandelbrot/mandelbrot.c | 1413 ---------- plug-ins/fs/.cvsignore | 6 + plug-ins/fs/Makefile.am | 38 + plug-ins/fs/Makefile.classic | 15 + plug-ins/fs/TODO | 21 + plug-ins/fs/doc/facesaver.txt | 50 + plug-ins/fs/fs.c | 370 +++ plug-ins/fs/fs2pgm.c | 91 + plug-ins/gfig/README | 298 ++- plug-ins/gfig/doc/doc | 298 ++- plug-ins/gfig/pix_data.h | 379 +++ plug-ins/refract/CHANGES | 12 + plug-ins/refract/FILES | 12 + plug-ins/refract/INSTALL | 28 + plug-ins/refract/Makefile.am | 13 +- plug-ins/refract/README | 48 + plug-ins/refract/refguts.c | 542 ++++ plug-ins/refract/refmain.c | 527 ++++ plug-ins/refract/refract.c | 1016 -------- plug-ins/refract/refract.h | 82 + plug-ins/script-fu/scripts/Makefile.am | 1 + plug-ins/script-fu/scripts/color-cycling.scm | 249 ++ plug-ins/stegano/.cvsignore | 5 + plug-ins/stegano/INSTALL | 70 + plug-ins/stegano/Makefile.am | 43 + plug-ins/stegano/README | 70 + plug-ins/stegano/logo.h | 788 ++++++ plug-ins/stegano/stegano.c | 1273 +++++++++ 161 files changed, 22867 insertions(+), 4485 deletions(-) create mode 100644 docs/Wilber.xcf.gz create mode 100644 docs/Wilber.xcf.gz.README create mode 100644 plug-ins/DigitalSignature/.cvsignore create mode 100644 plug-ins/DigitalSignature/DigitalSignature.c rename plug-ins/{Encript_Decript/doc/doc => DigitalSignature/INSTALL} (79%) create mode 100644 plug-ins/DigitalSignature/Makefile.am create mode 100644 plug-ins/DigitalSignature/README create mode 100644 plug-ins/DigitalSignature/logo.h delete mode 100644 plug-ins/Encript_Decript/logo.h rename plug-ins/{Encript_Decript => Encrypt_Decrypt}/.cvsignore (67%) rename plug-ins/{Encript_Decript/Encript_Decript.c => Encrypt_Decrypt/Encrypt_Decrypt.c} (55%) rename plug-ins/{Encript_Decript => Encrypt_Decrypt}/INSTALL (89%) rename plug-ins/{Encript_Decript => Encrypt_Decrypt}/Makefile.am (83%) rename plug-ins/{Encript_Decript => Encrypt_Decrypt}/README (89%) create mode 100644 plug-ins/Encrypt_Decrypt/logo.h create mode 100644 plug-ins/FractalExplorer/.cvsignore create mode 100644 plug-ins/FractalExplorer/Callbacks.h create mode 100644 plug-ins/FractalExplorer/Dialogs.h create mode 100644 plug-ins/FractalExplorer/Events.h create mode 100644 plug-ins/FractalExplorer/FractalExplorer.c create mode 100644 plug-ins/FractalExplorer/FractalExplorer.h create mode 100644 plug-ins/FractalExplorer/INSTALL create mode 100644 plug-ins/FractalExplorer/Languages.h create mode 100644 plug-ins/FractalExplorer/Makefile.am create mode 100644 plug-ins/FractalExplorer/README create mode 100644 plug-ins/FractalExplorer/examples/Asteroid Field create mode 100644 plug-ins/FractalExplorer/examples/Bar Code Label create mode 100644 plug-ins/FractalExplorer/examples/Beauty of Nature create mode 100644 plug-ins/FractalExplorer/examples/Blue Curtain create mode 100644 plug-ins/FractalExplorer/examples/Car Track create mode 100644 plug-ins/FractalExplorer/examples/Energetic Diamond create mode 100644 plug-ins/FractalExplorer/examples/Explosive create mode 100644 plug-ins/FractalExplorer/examples/Flower create mode 100644 plug-ins/FractalExplorer/examples/Fragments create mode 100644 plug-ins/FractalExplorer/examples/Hemp create mode 100644 plug-ins/FractalExplorer/examples/High Voltage create mode 100644 plug-ins/FractalExplorer/examples/Hoops create mode 100644 plug-ins/FractalExplorer/examples/Ice Crystal create mode 100644 plug-ins/FractalExplorer/examples/Leaves create mode 100644 plug-ins/FractalExplorer/examples/Lightning create mode 100644 plug-ins/FractalExplorer/examples/Mandelbrot create mode 100644 plug-ins/FractalExplorer/examples/Marble create mode 100644 plug-ins/FractalExplorer/examples/Marble2 create mode 100644 plug-ins/FractalExplorer/examples/Medusa create mode 100644 plug-ins/FractalExplorer/examples/Nautilus create mode 100644 plug-ins/FractalExplorer/examples/Nebula create mode 100644 plug-ins/FractalExplorer/examples/Plant create mode 100644 plug-ins/FractalExplorer/examples/Rose create mode 100644 plug-ins/FractalExplorer/examples/Saturn create mode 100644 plug-ins/FractalExplorer/examples/Snow Crystal create mode 100644 plug-ins/FractalExplorer/examples/Soma create mode 100644 plug-ins/FractalExplorer/examples/Spark create mode 100644 plug-ins/FractalExplorer/examples/Suns create mode 100644 plug-ins/FractalExplorer/examples/Tentacles create mode 100644 plug-ins/FractalExplorer/examples/The Green Place create mode 100644 plug-ins/FractalExplorer/examples/Wave create mode 100644 plug-ins/FractalExplorer/examples/Wood create mode 100644 plug-ins/FractalExplorer/examples/Zooming Circle create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Asteroid Field create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Bar Code Label create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Beauty of Nature create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Blue Curtain create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Car Track create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Energetic Diamond create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Explosive create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Flower create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Fragments create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Hemp create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/High Voltage create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Hoops create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Ice Crystal create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Leaves create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Lightning create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Mandelbrot create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Marble create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Marble2 create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Medusa create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Nautilus create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Nebula create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Plant create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Rose create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Saturn create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Snow Crystal create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Soma create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Spark create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Suns create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Tentacles create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/The Green Place create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Wave create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Wood create mode 100644 plug-ins/FractalExplorer/fractalexplorer-examples/Zooming Circle create mode 100644 plug-ins/FractalExplorer/logo.h create mode 100644 plug-ins/FractalExplorer/pix_data.h delete mode 100644 plug-ins/Julia/julia.c delete mode 100644 plug-ins/Mandelbrot/mandelbrot.c create mode 100644 plug-ins/fs/.cvsignore create mode 100644 plug-ins/fs/Makefile.am create mode 100644 plug-ins/fs/Makefile.classic create mode 100644 plug-ins/fs/TODO create mode 100644 plug-ins/fs/doc/facesaver.txt create mode 100644 plug-ins/fs/fs.c create mode 100644 plug-ins/fs/fs2pgm.c create mode 100644 plug-ins/refract/CHANGES create mode 100644 plug-ins/refract/FILES create mode 100644 plug-ins/refract/INSTALL create mode 100644 plug-ins/refract/README create mode 100644 plug-ins/refract/refguts.c create mode 100644 plug-ins/refract/refmain.c delete mode 100644 plug-ins/refract/refract.c create mode 100644 plug-ins/refract/refract.h create mode 100644 plug-ins/script-fu/scripts/color-cycling.scm create mode 100644 plug-ins/stegano/.cvsignore create mode 100644 plug-ins/stegano/INSTALL create mode 100644 plug-ins/stegano/Makefile.am create mode 100644 plug-ins/stegano/README create mode 100644 plug-ins/stegano/logo.h create mode 100644 plug-ins/stegano/stegano.c diff --git a/ChangeLog b/ChangeLog index 0a308db9c8..8d381eaa68 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +Sat Jan 3 16:48:02 PST 1998 Manish Singh + + * app/colormaps.c: check for NULL pointer access when not enough + colormaps for standard colormaps (gimp-joke-971219-0) + + * app/fileops.c: fix for saving files in the wrong place + + * app/fuzzy_select.c: now less aggressive (doesn't grab the whole + image with diagonal 1-pixel wide line) Too conservative now? + + * app/text_tool.c: negative border-value disables autocropping + of text + + * libgimp/gimplayer.c: gimp_layer_copy pdb called with correct args + + * docs/Wilber.xcf.gz: added logo to docs dir :) + + * Added DigitalSignature, FractalExplorer (not made by default), + facesaver (not made by default), and Stegano plugins + + * Updated Encrypt_Decrypt, changing the dir name (no more + Encript_Decript) + + * Updated plugins with their new registry versions + Thu Dec 25 23:04:00 PST 1997 Manish Singh * Updates from the plugin registry: Compose, Film, FITS, ps, diff --git a/NOTES b/NOTES index c1c45ce1ef..27152840f4 100644 --- a/NOTES +++ b/NOTES @@ -1,8 +1,8 @@ -Some notes on GIMP-0.99.16: +Some notes on GIMP-0.99.17: -* The AA, MathMap, GimpTcl, GAG, user_filter, rcm, and Gfig plugins are -included but not yet integrated into the build cause of instability or -other unresolved issues. +* The AA, MathMap, GimpTcl, GAG, user_filter, rcm, FractalExplorer, and Gfig +plugins are included but not yet integrated into the build cause of instability +or other unresolved issues. Please read the file TODO-DIST to find more information about things that were not included or that are (possibly) broken in this distribution. @@ -11,3 +11,4 @@ that were not included or that are (possibly) broken in this distribution. -- Federico Mena -- Christoph Hoegl +-- Manish Singh diff --git a/README b/README index 60e1df0f6c..e85360b5ff 100644 --- a/README +++ b/README @@ -1,12 +1,12 @@ The GIMP: the GNU Image Manipulation Program -------------------------------------------- -This is version 0.99.16 of the GIMP. For the most part it contains all +This is version 0.99.17 of the GIMP. For the most part it contains all of the features that will be in version 1.0 of the GIMP. It does, however, lack a) documentation, b) robustness and c) some of the plug-ins found in the 0.54 version. -The main difference between v0.99.16 and much earlier versions is the +The main difference between v0.99.17 and much earlier versions is the use of a tile based memory management for images. This allows the GIMP to work with images much larger than physical memory in a usable fashion. Before such memory management, the GIMP was nearly unusable diff --git a/TODO b/TODO index c572269a42..c3bd551a2e 100644 --- a/TODO +++ b/TODO @@ -3,9 +3,6 @@ discovered. * Fix srand/srandom and rand/random confusion in plugins -* Fix megawidget link ordering in deinterlace, emboss, hot, nlfilt, - sinus, and waves plugins - * configure: SunOS 4 SEEK_* and RAND_MAX defines * configure: check for regex library presence diff --git a/app/colormaps.c b/app/colormaps.c index b5d6164f10..0927438020 100644 --- a/app/colormaps.c +++ b/app/colormaps.c @@ -19,11 +19,17 @@ #include #include "appenv.h" #include "app_procs.h" +#include "brushes.h" #include "colormaps.h" #include "errors.h" #include "general.h" #include "gimprc.h" -#include "colormaps.h" +#include "gradient.h" +#include "palette.h" +#include "patterns.h" +#include "plug_in.h" +#include "temp_buf.h" +#include "tile_swap.h" GdkVisual *g_visual = NULL; @@ -194,8 +200,23 @@ get_standard_colormaps () gtk_widget_set_default_colormap (gtk_preview_get_cmap ()); info = gtk_preview_get_info (); - g_visual = info->visual; + + if (g_visual->depth == 8 && info->reserved_pixels == NULL) { + g_print("GIMP cannot get enough colormaps to boot.\n"); + g_print("Try exiting other color intensive applications.\n"); + swapping_free (); + brushes_free (); + patterns_free (); + palettes_free (); + gradients_free (); + palette_free (); + procedural_db_free (); + plug_in_kill (); + tile_swap_exit (); + gtk_exit(0); + } + g_cmap = info->cmap; color_pixel_vals = info->color_pixels; gray_pixel_vals = info->gray_pixels; diff --git a/app/fileops.c b/app/fileops.c index c866147d7f..7c5f07adf5 100644 --- a/app/fileops.c +++ b/app/fileops.c @@ -543,7 +543,8 @@ file_save_callback (GtkWidget *w, file_save_as_callback (w, client_data); } else - file_save (gdisplay->gimage->ID, gimage_filename (gdisplay->gimage), gimage_filename(gdisplay->gimage)); + file_save (gdisplay->gimage->ID, gimage_filename (gdisplay->gimage), + prune_filename (gimage_filename(gdisplay->gimage))); } } @@ -788,7 +789,7 @@ file_save (int image_ID, gimage_clean_all (gimage); /* set the image title */ - gimage_set_filename (gimage, prune_filename (filename)); + gimage_set_filename (gimage, filename); } g_free (return_vals); diff --git a/app/fuzzy_select.c b/app/fuzzy_select.c index 6723aaf59f..2a86f16721 100644 --- a/app/fuzzy_select.c +++ b/app/fuzzy_select.c @@ -227,7 +227,7 @@ find_contiguous_region_helper (PixelRegion *mask, PixelRegion *src, antialias, threshold, x, &start, &end)) return; - for (i = start; i < end; i++) + for (i = start + 1; i < end; i++) { find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y - 1, col); find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y + 1, col); diff --git a/app/text_tool.c b/app/text_tool.c index 4e2ac78f6a..4b662ee985 100644 --- a/app/text_tool.c +++ b/app/text_tool.c @@ -1511,6 +1511,7 @@ text_render (GImage *gimage, unsigned char color[MAX_CHANNELS]; char *str; int nstrs; + int crop; int line_width, line_height; int pixmap_width, pixmap_height; int text_width, text_height; @@ -1530,6 +1531,10 @@ text_render (GImage *gimage, else antialias = 1; + /* Dont crop the text if border is negative */ + crop = (border >= 0); + if (!crop) border = 0; + /* load the font in */ font = gdk_font_load (fontname); if (!font) @@ -1627,7 +1632,7 @@ text_render (GImage *gimage, } /* Crop the mask buffer */ - newmask = crop_buffer (mask, border); + newmask = crop ? crop_buffer (mask, border) : mask; if (newmask != mask) tile_manager_destroy (mask); @@ -2000,7 +2005,7 @@ text_tool_invoker (Argument *args) if (success) { int_value = args[5].value.pdb_int; - if (int_value >= 0) + if (int_value >= -1) border = int_value; else success = FALSE; diff --git a/app/tools/fuzzy_select.c b/app/tools/fuzzy_select.c index 6723aaf59f..2a86f16721 100644 --- a/app/tools/fuzzy_select.c +++ b/app/tools/fuzzy_select.c @@ -227,7 +227,7 @@ find_contiguous_region_helper (PixelRegion *mask, PixelRegion *src, antialias, threshold, x, &start, &end)) return; - for (i = start; i < end; i++) + for (i = start + 1; i < end; i++) { find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y - 1, col); find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y + 1, col); diff --git a/app/tools/gimpfuzzyselecttool.c b/app/tools/gimpfuzzyselecttool.c index 6723aaf59f..2a86f16721 100644 --- a/app/tools/gimpfuzzyselecttool.c +++ b/app/tools/gimpfuzzyselecttool.c @@ -227,7 +227,7 @@ find_contiguous_region_helper (PixelRegion *mask, PixelRegion *src, antialias, threshold, x, &start, &end)) return; - for (i = start; i < end; i++) + for (i = start + 1; i < end; i++) { find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y - 1, col); find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y + 1, col); diff --git a/app/tools/gimpregionselecttool.c b/app/tools/gimpregionselecttool.c index 6723aaf59f..2a86f16721 100644 --- a/app/tools/gimpregionselecttool.c +++ b/app/tools/gimpregionselecttool.c @@ -227,7 +227,7 @@ find_contiguous_region_helper (PixelRegion *mask, PixelRegion *src, antialias, threshold, x, &start, &end)) return; - for (i = start; i < end; i++) + for (i = start + 1; i < end; i++) { find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y - 1, col); find_contiguous_region_helper (mask, src, has_alpha, antialias, threshold, i, y + 1, col); diff --git a/app/tools/gimptexttool.c b/app/tools/gimptexttool.c index 4e2ac78f6a..4b662ee985 100644 --- a/app/tools/gimptexttool.c +++ b/app/tools/gimptexttool.c @@ -1511,6 +1511,7 @@ text_render (GImage *gimage, unsigned char color[MAX_CHANNELS]; char *str; int nstrs; + int crop; int line_width, line_height; int pixmap_width, pixmap_height; int text_width, text_height; @@ -1530,6 +1531,10 @@ text_render (GImage *gimage, else antialias = 1; + /* Dont crop the text if border is negative */ + crop = (border >= 0); + if (!crop) border = 0; + /* load the font in */ font = gdk_font_load (fontname); if (!font) @@ -1627,7 +1632,7 @@ text_render (GImage *gimage, } /* Crop the mask buffer */ - newmask = crop_buffer (mask, border); + newmask = crop ? crop_buffer (mask, border) : mask; if (newmask != mask) tile_manager_destroy (mask); @@ -2000,7 +2005,7 @@ text_tool_invoker (Argument *args) if (success) { int_value = args[5].value.pdb_int; - if (int_value >= 0) + if (int_value >= -1) border = int_value; else success = FALSE; diff --git a/app/tools/text_tool.c b/app/tools/text_tool.c index 4e2ac78f6a..4b662ee985 100644 --- a/app/tools/text_tool.c +++ b/app/tools/text_tool.c @@ -1511,6 +1511,7 @@ text_render (GImage *gimage, unsigned char color[MAX_CHANNELS]; char *str; int nstrs; + int crop; int line_width, line_height; int pixmap_width, pixmap_height; int text_width, text_height; @@ -1530,6 +1531,10 @@ text_render (GImage *gimage, else antialias = 1; + /* Dont crop the text if border is negative */ + crop = (border >= 0); + if (!crop) border = 0; + /* load the font in */ font = gdk_font_load (fontname); if (!font) @@ -1627,7 +1632,7 @@ text_render (GImage *gimage, } /* Crop the mask buffer */ - newmask = crop_buffer (mask, border); + newmask = crop ? crop_buffer (mask, border) : mask; if (newmask != mask) tile_manager_destroy (mask); @@ -2000,7 +2005,7 @@ text_tool_invoker (Argument *args) if (success) { int_value = args[5].value.pdb_int; - if (int_value >= 0) + if (int_value >= -1) border = int_value; else success = FALSE; diff --git a/configure.in b/configure.in index 45648bdb64..2648b69183 100644 --- a/configure.in +++ b/configure.in @@ -7,10 +7,10 @@ GIMP_MAJOR_VERSION_NUMBER=0 dnl $Format: "GIMP_MINOR_VERSION_NUMBER=$ReleaseMinorVersion$" $ GIMP_MINOR_VERSION_NUMBER=99 dnl $Format: "GIMP_MICRO_VERSION_NUMBER=$ReleaseMicroVersion$" $ -GIMP_MICRO_VERSION_NUMBER=16 +GIMP_MICRO_VERSION_NUMBER=17 dnl $Format: "AM_INIT_AUTOMAKE(gimp, $ReleaseVersion$)" $ -AM_INIT_AUTOMAKE(gimp, 0.99.16) +AM_INIT_AUTOMAKE(gimp, 0.99.17) dnl Specify a header configuration file AM_CONFIG_HEADER(config.h) @@ -68,10 +68,10 @@ AC_DEFUN(AC_GIMP_CHECK, LDFLAGS="$saved_ldflags $X_LDFLAGS $X_LIBS" dnl Dont cache this as it depends on CFLAGS, LDFLAGS, etc - AC_MSG_CHECKING([for glib and gtk]) + AC_MSG_CHECKING([for glib and gtk >= 0.99.1]) AC_TRY_COMPILE( [#include ], -[gtk_button_new ();], +[gtk_pixmap_unref ();], gtk_found=yes, gtk_found=no) AC_MSG_RESULT($gtk_found) @@ -344,7 +344,7 @@ plug-ins/gag-0.3/Makefile plug-ins/Anamorphose/Makefile plug-ins/CentralReflection/Makefile plug-ins/Curtain/Makefile -plug-ins/Encript_Decript/Makefile +plug-ins/Encrypt_Decrypt/Makefile plug-ins/Julia/Makefile plug-ins/Mandelbrot/Makefile plug-ins/MapObject/Makefile @@ -353,11 +353,8 @@ plug-ins/libgck/Makefile plug-ins/libgck/gck/Makefile plug-ins/blur/Makefile plug-ins/gfig/Makefile -plug-ins/gfig/gfig-examples/Makefile plug-ins/flame/Makefile plug-ins/gimptcl/Makefile -plug-ins/gimptcl/frags/Makefile -plug-ins/gimptcl/misc/Makefile plug-ins/gimptcl/scripts/Makefile plug-ins/fuse/Makefile plug-ins/mathmap/Makefile @@ -366,7 +363,6 @@ plug-ins/refract/Makefile plug-ins/struc/Makefile plug-ins/twist/Makefile plug-ins/user_filter/Makefile -plug-ins/user_filter/doc/Makefile plug-ins/warp/Makefile plug-ins/zealouscrop/Makefile plug-ins/xwd/Makefile @@ -421,6 +417,10 @@ plug-ins/colorify/Makefile plug-ins/papertile/Makefile plug-ins/illusion/Makefile plug-ins/fractaltrace/Makefile +plug-ins/DigitalSignature/Makefile +plug-ins/FractalExplorer/Makefile +plug-ins/stegano/Makefile +plug-ins/fs/Makefile app/Makefile docs/Makefile ) diff --git a/docs/Wilber.xcf.gz b/docs/Wilber.xcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..f0c016e017176ee9f24a4bd7f958c9c67096c297 GIT binary patch literal 7326 zcmV;P9AV=hiwFq*@~t!g17~S%a9?y~ZE!9#I50FZG%k2!W&p*Sd3aODwZQMaTD)7{ z@B&`J*ciMUFS2CGt0b?IEZMRoOV(z2kuC4W*aib;PsqZOg(i^D@JiC8X;RXpG+SSr zkTeZRUkI;BlcoWZ5Wsi?uUg)jE6EnTf8Kvj{^s-CGw00AoqO*2%^9hst+P9JNNrbD4Zu|x56){&~0 zvyMLAZgn5Gy02T^&#lgI_T~C`xV5=HUq3KC)II}K@4a7+`(xPJ7cgw&x6syv8pbF} z%=Q^h#dEP`{L@cx0w)N3E3AR#laK#I!6|TsXTs$&aq%zjP;FF-jY8N6+=gRmAYCLV ze}4bMD>Ms@>Jq1d_#Q!_zWw{(oS=i)N+HE5*gYJivD;NK2Y0qZH>Ca+7<7`L(C8lL zo_q44UBhOV!DeV!LKYs+&prS2V|zyj+KXH>-Rv5q`-M|S5APc4Gpk%p{+QLU4GRO~ zJEX=hPCxzV{vAVo-R%NcAlwIA?%Xysh=pS|oUovA=jo?T9zC*mbZB64U|WB?j)Quk zVT($wsehoa*VYTVI6gskw&T=OM<3cZwqs;;$Ih|w#qqI$zV428yd5`LJG(k89j10H z0(Cr#w4Xfvi{pVjg4;WHn+F6wk@``wlo`zpo`-_5R~h)_L)mh zAA9uh!B@VzYrp&7FYnnoI@Hr?GR_+fI;}>nY9uu+#I)5ySeC9oarCjT>=gTiW%2KO zMu&RM?aexkO0JOANwHuICt&*Uhu^(wonM?^Sh9X{{9pDP_QjdWnfZmgpX}J)+u5dX zQpoBhB4HI4fX(Bcej&mB9t1v%KQS}6ICtgG-&rQ#v;S;gnw-9S@9xah&2!tjJB>P( zTv8*f;M@4%)}P~yEu0c&(%K-u@iX?R<+oo;%eZL0X0^@E%>Q`#i|=oJ|NcNvXS1%c zPF!8iFDV9-S-&*xf&Hz5)R@G+r>EwoY|=Anc-rlm#h(@@m#&;_+1&c~uRrfMx9gka zb=8$+#YG%=mUDPS_2U=+^sq87aVD{H_;2@YVF?}>yCXluV-M4!AHKFnx2~1j@%wuhgW@auB*)e zBZ(?XiVHXeV042LB|Px*+2NY(^c;?0=+KA%?kU=Tc!Q9k|Iul4Ov|!!ny5xh8qjBa=E;k#y$J@9eC*Qp~D9+{`}LwpNXeTP}aZnjJeII zQPkH|@Josc*yygNh@cFyRv}>Jarwe}#o$iM&fVktukAmu|G>Nd`ufW08u5!~dfU;8 z*9t3m#YF{N7Fc~v1SPWgWd*E4fvBNL-!?EbvSZiyUhu24umAP(XKy@VZg0^y)-BWt zE6RCAT#l8)g=N1Tv_375T~I8jm22BfI#c(+$j)7sU1K{(Z;lQP_V;ylf>l!$ueL@| zT2jd2a%>#1`XV4cC7WGbAy#PHx;s?*wyuHg!#hT{gGEnwXM0KkPB(mH8<#pby9^g>DN;7|pJT!Apm3MN6=G)_eIced&pgjKxq%Bq_A8d0rS z#LM0kI~lt%jaecw^loqEa<~P#49te1SQ7*W&H@b~rh^7Qr%43FNJnp0FMQ5)MVZTcdP zg_DJDg5p%CQhp#J!h#rnz5yYT8@FU}cw)JsrPUxR%8K>`2vVJTGzxT$-|-0x->@+& zzZm+{H_J<6!+}e5P$9^!2!e_S!F33j5CnxnA?Uat<_XsX?oH5eZ_Ec@19czJ^MZOP z76kvj@U<8N^awl-^TqQp8a{?S<-pi~0><(%>-+EFG&~z{_TD?^2?Q_)zyA2cn9Ls1QtWZ#Z~?#@<232OGmY{qVDx0yuIG^ugy zu|s=?`+LkC=4ErUGT#BM`8s8DM<>D%QnZ5N6qPn`{E>sZ0dM_%{e#%)isX}{%y)?WvD+Kt-A25GIhrqWu;hZu0vMJ)_JGVO%c z#2@TGtwQUCE(p8IdPxmLLlQu4%o=`bg<0RbG3#Aem?mXiZ3Vxq7?{AoeqLc#Lg%BC zPGsGhUYu}4RtEmE$5kTm$u^)t%pzop+T7Q|GyXgk4wiaz;U2P@5xPWbCGasau z`0%$5YVG^NL9I!WTL00iQ_Cfyic)R?)5^?y5L^7--G2gX?b|#4^5jpe*m|^CtCR_= z`6XO-K52COK58`#?-<>=XE(lkVeA73wx$4ECylx$rBoy+D=sX^v*s~LGk0#u%mahl zM|KiBf86y)C$*k4fsIU3RSxUNX65IC&BT4w(&)`y14Fi<(d(llL))JF?Z=ld{qFG= zJ*7RL!RDzQOH7+Xe^vySq9jJ6fCd8dU?YxJpo5$YJH>Tl1M< zG_eY;*6wz>8mQH0=^NCHK`C!QZq}0 zm0UJVj+vkI0JH`w$}5GEx`rm5rb)e|2L3ci=cI!5DaA6al+Cm;^Oy6PTiu}5H@ats zoL|N(uNH~xl!^w~G;H=H;+piBWRApWRZVe+SJQ^MXw?e9I?`+|);od#T z7u&@w3$bA><2J+3$IH{h%QrAAYD01sM<7z_j22@Pn`L2T_yddxQXi3Jf(Tm!i1T3t zuicQ8#VW0lX$%VnO%*F6a+O+0ksztHCM+&KlL@Y-(CF(5qeCGk(nw0-qzY|?T3$db z2IfH$%aibcyucfXMZu|r7fG*BED-*C;p;GefRGQK4{c-E(+*m_fE8fYGtUFFa)4FO zoqmdd51s{GS)M(40_9n_Gxu5~PCjw;&;zL#@QZTn$e{t0lR0xN#IL&$fR8^sKB`;I z$WlOza*0PC8XxHsyReqxg22P$Bfag4Res?(f*oz&_-J37zILUTWEYP1j1HI$>beK@ zcLQnKGzw{^Qy+0{3NDiPN%){3Qdl3KA%Oe#aKGZgCJ4uGBsrB8a}tP%EnI*nRZ2d*u`MYfu1Yjq8_ z7SZen;`>Sa#Jk)2AdmXR=QAk5YBoU30N~VEYbwi^%LRNMsKO-fkc9eXpr`LM2ca&u zK)8f}R9V3*T`nyyDs~ZyfcNBUC!qe=_vLC<^%spwCJ|M^4jT5|1+4q|G4GD%HkSrLbslbxAyAE4qJhi*Fo_4BlQ zPW72wBCZth3gO+&N>67G-4P!FjQznGh!vo$R};X~3;ojQSbYG8uU7wPP3p6(uQKS*0e2PHRHk)KYS(cQzs{MT98L$kNlr&#>lO}*q zrrx2QhH`dZPHrBHTf{A$fYh_Ns4y>XZB$~8pt0S=Oix{gsRd%8*gO%bmWwLN3i6in za`SRo>;*QrfRnQ+I$|;+Iw38OFKg~-glChI>yflW?IE6#R~7U~pt?a%OHJ zUsTsnl@}g_c>qHYZ|IN}g^_g%P9qSXsK6U^V&?^XBJglvPaynXOR~q6DSZX(SqC{* zHfF^mAxsk}Bsn8?I%r#a>d*-w3BojlqDXrbfv|^IlmbI6e|R;DLZwo1isRgkiZAur zug1{m1l>lXE+Z;nNidX+VxO~Ljq~sXMAIRea?m0X^eqJC*Y;)mwRmqI+-K3t6QxL~ zEdeHv6ILqAj@zfNB{2g0{d~O16G3zy2MXv;(ODk-Bhav3*9G4V4unk9%L8?e`H;~a z3n7!sWh%{M5aRHxF(Q0TFl-b&>5f4>$aI22bLuTo>0Z9qkmC86=(VB24AdJHtp^SD zg0eDF6J>=S-u@@-RQvQL_WI~`kOPA%nmUDIqtcdW9$wylZmNtFJKa8eI4M4MT_~i> zkX(CM!7t`vJ-mJW%l?Y3L428qnRxgFgg%Xw|4Y3kAvQ8BB#7bf=ZpI;`uQ^gwSTqS z><-;IqzikU=pXGK_Io#8=qub16B!Ycs5DQ=-_)4#}xydz3@4hy;HBu*cYgv3rzFo5THK6}*0DkF^J4 zcm1kPzyHp!cg4~@RrWZ00JiMY^!b8y(P~+ETWGMaw=*ycQTx4(YO^kUXWxJ>15Yj4 z=(c#MS|h%K+D23p{%E7w672q%g(A7&7ORl+U{$GCSja{10TpZ^JDZ0ZLzrOh3JSipD%rAs@ej3(nVd1B5zqt6;e~>L` zQw3|cZX@UH4@>qi``psR)qnoihkrQt1lc@AdO|>WTq>));p|s4_CWjW((KPyzrAwl z&u^Z4av!OL6St{!Z$@ZzQg*RO-8p>djmtOgE`UGWSzegFbN%XfUw`@8#dltR;l#c^ z&?oR8$>#<8*tC3}RBIkN_|)0g-~0HpFTeWcTjJZvZ~pn!e_#ImlMmiG|I(?)cK2vu zJ#hRd$2>x#64Tj&I&H`B!4toH<;{2g{L!bjPcKbe`t)y~eEi{mzVp^=FP=VraHK;m z1S8itf#ETmG7I<;Rome1M^2u3@zpop`oo2Z3x9a)_vc@GhcrRs z(7pYFBVspYYxZ9`{l`+!*76g6+`Lwrx zaCpqdRLDEUN~0Naj`0JBh(nVH_K)ux8HCNDT*NQfx_LcmfD<>V$Ra2#a{Z?CTrOYK z(5N%EcXkn7lje>#qfXUOTUpB9n!GVO3=1R;ZXpA|fRKpj4M}O)>>^%8O|7(^sGqEZ z)TfeH%+Af&vN0wigyBp^ZlW&>JbnBELn0#M5|Yz0bC|%f!ihq(Cu8PhrEN)A9~BW2 z;OC8@gDlukPQYz@di(eXhJ>w)irug=F=1$3?G>9Hn+n*TdPE@a*fKsY=*&mgT3aCR=uuCB_?O&nmq%X z9UAQGhThQmZ8qEkPTpt$cDKK$%hYDnH#I6CKUpz=hAy+I6@8DPXedN^kz-{7vE{aA zqd~KzfgO*OLM4Sk*gc&_+ti5i-~@^z^9#Z(3MEP`gyoMj0CJl zK{AR;G$g1oK;hVxLdD|%pXnEg-PJ;|#nvwHlSUeB4OY`s@HMH~ z1l}We_rMTrUfM|>en{NK;B1fx)BH-DXouvsR^SkX52t;j6QSR^(O&omvUI?+nu4RvgPQRHM93TD{_kz{A!S zgI2AS%cK%E1?`at5ZZK2^XT*j_Q}E($68Rz!O^6WT1)K)auo^ExvY?z+9b8hwGweD z_!m0iAgU=sTP5jCaKX1#R#~db16;mVSW?O_FJ+LAor<=J1 zsE{{Qx`nz>Y=H+EP@S}#6e2Zv(|GcRdI`M1W$s=H9wh`#38eeX73E;?Nd*W+HPtrP z6Lxr+Qc+(A=}x7!l1D|apvxtuYru)55)tG&l@)wmX$JH_A$`Rrtj4Pss{}lLNg?^%gRteQ%5nj3iC0=& z8bwgaIAkf|m6h5`ODrWtx$x}K8I}!w@5Wt*T&MsizedR?3at5lxCgAo!d6I=*tx#Y zum)SqNYBdIit3@*Qbt-vnm1I#u;t{`6i?g>c|&q~Fgl|1K*1+11ywy!H6_X+jle7! zeyFk*vn4o0Pzy&jI_VOq#5&zzJ-9&m11=H28i4jf>44@K3}qhZ@uM>xCgE^JD>$x& z@<=|pz7&`*5-d?-?6Q?_ZqSS2kkTHt%jwH>noAx8Q3;(gu^|^x!WNta6NppFpi^P88VV4*#FIK zj9C}L@b++uE#CgGg7og^TjHa_0(?BEmeZ0_&Ake(D50lmMiVW0ZELnGnmC&z^cy2)W5J3Z24sOK}2W5WZz9od{8Mzc@N zJhi*8xsI2+CDt(;E7?G`Pu@NI_}>0zX=(PRD40E+;%uSVZ_mAc>gaf%PF$3gur|n- zyjQd*w%?k6@0HV!?dnoju~X5sTsb3dpIE$f;pJx^9&VNKa+0D^caDKj+pVh~UwHAU z{e2oCCp{keBPWf{^6krCT>SkDkMC@km4VS3a&`_t+_X=9@t4=1J8*@BjMvuJ*c;tqJQw{9xKv3S!a3;y?d(;p~yYrmFm8bfX@QG&B&qJ$dDW*Pq$b zE-lJ{!5w}9;b!97&)z+Ebi1Z9Z*!Dmx+q}Xx$@!p(+9d_#TjsWiFX7m1Z&MWuZVP-2 zt|PEnt&p3(Ap&MdA+PU>3NtsZ3vzV07Q0uNl^6+YgL+$s-OEgjT0=fxbTzjz(z(!B zBsRY`#NSbm!WM%39IFtGEjm{z23vBZ{IQtT@nqsKhcB?_5~t>C*>3-*td0w$SIHlXqU2a9UrCW$8i E0IY#}-~a#s literal 0 HcmV?d00001 diff --git a/docs/Wilber.xcf.gz.README b/docs/Wilber.xcf.gz.README new file mode 100644 index 0000000000..fad28f4841 --- /dev/null +++ b/docs/Wilber.xcf.gz.README @@ -0,0 +1,15 @@ +Wilber.xcf.gz.README +----------------------------------------------------------------------------- + +This is Wilber, the Gimp Mascot. + +Gimp is a image manipulation program for unix computers, see +http://www.gimp.org for more detais. + +The use of Wilber.xcf.gz is free, though it would be kind of you to mention +the original author (Tuomas Kuosmanen ) somewhere. + +Enjoy. + +Tuomas / tigert + diff --git a/docs/pdb.texi b/docs/pdb.texi index 6f6ea66080..1bdaf14bf0 100644 --- a/docs/pdb.texi +++ b/docs/pdb.texi @@ -460,6 +460,38 @@ HRZ saving handles all image types except those with alpha channels.--@strong{GI @end defun @emph{Albert Cahalan} +@defun file_icon_load run_mode, filename, raw_filename +Loads files of Windows ICO file format--@strong{GIMP Plug-In} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{filename} (PDB_STRING)--The name of the file to load +@item @emph{raw_filename} (PDB_STRING)--The name entered +@end itemize + + +@strong{Outputs} +@itemize @bullet +@item @emph{image} (PDB_IMAGE)--Output image +@end itemize +@end defun +@emph{Lance Dillon} + +@defun file_icon_save run_mode, image, drawable, filename, raw_filename +Saves files in Windows ICO file format--@strong{GIMP Plug-In} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{image} (PDB_IMAGE)--Input image +@item @emph{drawable} (PDB_DRAWABLE)--Drawable to save +@item @emph{filename} (PDB_STRING)--The name of the file to save the image in +@item @emph{raw_filename} (PDB_STRING)--The name entered +@end itemize +@end defun +@emph{Lance Dillon} + @defun file_jpeg_load run_mode, filename, raw_filename FIXME: write help for jpeg_load--@strong{GIMP Plug-In} @@ -495,24 +527,6 @@ FIXME: write help for jpeg_save--@strong{GIMP Plug-In} @end defun @emph{Spencer Kimball & Peter Mattis} -@defun file_mpeg_load run_mode, filename, raw_filename -FIXME: write help for mpeg_load--@strong{GIMP Plug-In} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{filename} (PDB_STRING)--The name of the file to load -@item @emph{raw_filename} (PDB_STRING)--The name entered -@end itemize - - -@strong{Outputs} -@itemize @bullet -@item @emph{image} (PDB_IMAGE)--Output image -@end itemize -@end defun -@emph{Adam D. Moss} - @defun file_pat_load run_mode, filename, raw_filename FIXME: write help--@strong{GIMP Plug-In} @@ -714,7 +728,7 @@ load file of PostScript/PDF file format--@strong{GIMP Plug-In} @item @emph{image} (PDB_IMAGE)--Output image @end itemize @end defun -@emph{Peter Kirchgessner} +@emph{Peter Kirchgessner } @defun file_ps_load_setargs resolution, width, height, check_bbox, pages, coloring, TextAlphaBits, GraphicsAlphaBits set additional parameters for procedure file_ps_load--@strong{GIMP Plug-In} @@ -731,9 +745,9 @@ set additional parameters for procedure file_ps_load--@strong{GIMP Plug-In} @item @emph{GraphicsAlphaBits} (PDB_INT32)--1, 2, or 4 @end itemize @end defun -@emph{Peter Kirchgessner} +@emph{Peter Kirchgessner } -@defun file_ps_save run_mode, image, drawable, filename, raw_filename, width, height, x_offset, y_offset, unit, keep_ratio, rotation +@defun file_ps_save run_mode, image, drawable, filename, raw_filename, width, height, x_offset, y_offset, unit, keep_ratio, rotation, eps_flag, preview PostScript saving handles all image types except those with alpha channels.--@strong{GIMP Plug-In} @strong{Inputs} @@ -747,12 +761,14 @@ PostScript saving handles all image types except those with alpha channels.--@st @item @emph{height} (PDB_FLOAT)--Height of image in PostScript file @item @emph{x_offset} (PDB_FLOAT)--X-offset to image from lower left corner @item @emph{y_offset} (PDB_FLOAT)--Y-offset to image from lower left corner -@item @emph{unit} (PDB_INT32)--0: inches, 1: millimeters +@item @emph{unit} (PDB_INT32)--Unit for width/height/offset. 0: inches, 1: millimeters @item @emph{keep_ratio} (PDB_INT32)--0: use width/height, 1: keep aspect ratio @item @emph{rotation} (PDB_INT32)--0, 90, 180, 270 +@item @emph{eps_flag} (PDB_INT32)--0: PostScript, 1: Encapsulated PostScript +@item @emph{preview} (PDB_INT32)--0: no preview, >0: max. size of preview @end itemize @end defun -@emph{Peter Kirchgessner} +@emph{Peter Kirchgessner } @defun file_psd_load run_mode, filename, raw_filename FIXME: write help for psd_load--@strong{GIMP Plug-In} @@ -941,38 +957,6 @@ You need to have GNU Wget installed.--@strong{GIMP Plug-In} @end defun @emph{Spencer Kimball & Peter Mattis} -@defun file_xd_load run_mode, filename, raw_filename ---@strong{GIMP Plug-In} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{filename} (PDB_STRING)--The name of the file to load -@item @emph{raw_filename} (PDB_STRING)--The name entered -@end itemize - - -@strong{Outputs} -@itemize @bullet -@item @emph{image} (PDB_IMAGE)--Output image -@end itemize -@end defun -@emph{Josh MacDonald} - -@defun file_xd_save run_mode, image, drawable, filename, raw_filename ---@strong{GIMP Plug-In} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{image} (PDB_IMAGE)--Input image -@item @emph{drawable} (PDB_DRAWABLE)--Drawable to save -@item @emph{filename} (PDB_STRING)--The name of the file to save the image in -@item @emph{raw_filename} (PDB_STRING)--The name of the file to save the image in -@end itemize -@end defun -@emph{Josh MacDonald} - @defun file_xpm_load run_mode, filename, raw_filename FIXME: write help for xpm_load--@strong{GIMP Plug-In} @@ -991,7 +975,7 @@ FIXME: write help for xpm_load--@strong{GIMP Plug-In} @end defun @emph{Spencer Kimball & Peter Mattis & Ray Lehtiniemi} -@defun file_xpm_save run_mode, image, drawable, filename, raw_filename +@defun file_xpm_save run_mode, image, drawable, filename, raw_filename, alpha_threshold FIXME: write help for xpm--@strong{GIMP Plug-In} @strong{Inputs} @@ -1001,6 +985,7 @@ FIXME: write help for xpm--@strong{GIMP Plug-In} @item @emph{drawable} (PDB_DRAWABLE)--Drawable to save @item @emph{filename} (PDB_STRING)--The name of the file to save the image in @item @emph{raw_filename} (PDB_STRING)--The name of the file to save the image in +@item @emph{alpha_threshold} (PDB_FLOAT)--Alpha cutoff threshold @end itemize @end defun @emph{Spencer Kimball & Peter Mattis & Ray Lehtiniemi} @@ -4547,7 +4532,7 @@ Emboss or Bumpmap the given drawable, specifying the angle and elevation for the @end defun @emph{Eric L. Hernes, John Schlag} -@defun plug_in_encript run_mode, image, drawable, password, warning +@defun plug_in_encrypt run_mode, image, drawable, password, warning, compatibility, remember --@strong{GIMP Plug-In} @strong{Inputs} @@ -4555,8 +4540,10 @@ Emboss or Bumpmap the given drawable, specifying the angle and elevation for the @item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive @item @emph{image} (PDB_IMAGE)--Input image (unused) @item @emph{drawable} (PDB_DRAWABLE)--Input drawable -@item @emph{password} (PDB_INT8)--Numeric password (used to encript and decript) +@item @emph{password} (PDB_STRING)--Password (used to encrypt and decrypt) @item @emph{warning} (PDB_INT8)--Disable warning message toggle (only in RUN_INTERACTIVE) +@item @emph{compatibility} (PDB_INT8)--Use version 1.0x compatibility mode +@item @emph{remember} (PDB_INT8)--Remember the password after execution @end itemize @end defun @emph{Daniel Cotting (cotting@@mygale.org, http://www.mygale.org/~cotting)} @@ -4619,7 +4606,7 @@ Compose several images to a roll film--@strong{GIMP Plug-In} @item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive @item @emph{image} (PDB_IMAGE)--Input image (only used as default image in interactive mode) @item @emph{drawable} (PDB_DRAWABLE)--Input drawable (not used) -@item @emph{film_height} (PDB_INT32)--Height of film +@item @emph{film_height} (PDB_INT32)--Height of film (0: fit to images) @item @emph{film_color} (PDB_COLOR)--Color of the film @item @emph{number_start} (PDB_INT32)--Start index for numbering @item @emph{number_fontf} (PDB_STRING)--Font family for drawing numbers @@ -4681,6 +4668,36 @@ transform image with the Mandelbrot Fractal--@strong{GIMP Plug-In} @end defun @emph{Hirotsuna Mizuno } +@defun plug_in_fractalexplorer run_mode, image, drawable, fractaltype, xmin, xmax, ymin, ymax, iter, cx, cy, colormode, redstretch, greenstretch, bluestretch, redmode, greenmode, bluemode, redinvert, greeninvert, blueinvert +No help yet.--@strong{GIMP Plug-In} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{image} (PDB_IMAGE)--Input image +@item @emph{drawable} (PDB_DRAWABLE)--Input drawable +@item @emph{fractaltype} (PDB_INT8)--0: Mandelbrot; 1: Julia; 2: Barnsley 1; 3: Barnsley 2; 4: Barnsley 3; 5: Spider; 6: ManOWar; 7: Lambda; 8: Sierpinski +@item @emph{xmin} (PDB_FLOAT)--Xmin fractal image delimiter +@item @emph{xmax} (PDB_FLOAT)--Xmax fractal image delimiter +@item @emph{ymin} (PDB_FLOAT)--Ymin fractal image delimiter +@item @emph{ymax} (PDB_FLOAT)--Ymax fractal image delimiter +@item @emph{iter} (PDB_FLOAT)--Iteration value +@item @emph{cx} (PDB_FLOAT)--Cx value ( only Julia) +@item @emph{cy} (PDB_FLOAT)--Cy value ( only Julia) +@item @emph{colormode} (PDB_INT8)--0: Apply colormap as specified by the parameters below; 1: Apply active gradient to final image +@item @emph{redstretch} (PDB_FLOAT)--Red stretching factor +@item @emph{greenstretch} (PDB_FLOAT)--Green stretching factor +@item @emph{bluestretch} (PDB_FLOAT)--Blue stretching factor +@item @emph{redmode} (PDB_INT8)--Red application mode (0:SIN;1:COS;2:NONE) +@item @emph{greenmode} (PDB_INT8)--Green application mode (0:SIN;1:COS;2:NONE) +@item @emph{bluemode} (PDB_INT8)--Blue application mode (0:SIN;1:COS;2:NONE) +@item @emph{redinvert} (PDB_INT8)--Red inversion mode (1: enabled; 0: disabled) +@item @emph{greeninvert} (PDB_INT8)--Green inversion mode (1: enabled; 0: disabled) +@item @emph{blueinvert} (PDB_INT8)--Green inversion mode (1: enabled; 0: disabled) +@end itemize +@end defun +@emph{Daniel Cotting (cotting@@mygale.org, www.mygale.org/~cotting)} + @defun plug_in_fuse run_mode, image, drawable uhm, image dissociation--@strong{GIMP Plug-In} @@ -4723,6 +4740,19 @@ Applies a gaussian blur to the drawable, with specified radius of affect. The s @end defun @emph{Spencer Kimball & Peter Mattis} +@defun plug_in_gfig run_mode, image, drawable, dummy +More here later--@strong{GIMP Plug-In} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{image} (PDB_IMAGE)--Input image (unused) +@item @emph{drawable} (PDB_DRAWABLE)--Input drawable +@item @emph{dummy} (PDB_INT32)--Dummy +@end itemize +@end defun +@emph{Andy Thomas} + @defun plug_in_gflare run_mode, image, drawable, gflare_name, xcenter, ycenter, radius, rotation, hue, vangle, vlength, use_asupsample, asupsample_max_depth, asupsample_threshold This plug-in produces a lense flare effect using custom gradients. In interactive call, the user can edit his/her own favorite lense flare (GFlare) and render it. Edited gflare is saved automatically to the directory in gflare-path, if it is defined in gimprc. In non-interactive call, the user can only render one of GFlare which has been stored in gflare-path already.--@strong{GIMP Plug-In} @@ -5286,7 +5316,7 @@ This function randomly ``blurs'' the specified drawable, using either a 3x3 blur @end defun @emph{Miles O'Neal http://www.rru.com/~meo/} -@defun plug_in_refract run_mode, image, drawable, lensmap, depth, dist, na, nb, wrap, newl, xofs, yofs +@defun plug_in_refract run_mode, image, drawable, lensmap, thick, dist, na, nb, edge, newl, xofs, yofs Distorts the image by refracting it through a height field 'lens' with a specified index of refraction.--@strong{GIMP Plug-In} @strong{Inputs} @@ -5295,11 +5325,11 @@ Distorts the image by refracting it through a height field 'lens' with a specifi @item @emph{image} (PDB_IMAGE)--Input image @item @emph{drawable} (PDB_DRAWABLE)--Input drawable @item @emph{lensmap} (PDB_DRAWABLE)--Lens map drawable -@item @emph{depth} (PDB_INT32)--Lens depth +@item @emph{thick} (PDB_INT32)--Lens thickness @item @emph{dist} (PDB_INT32)--Lens distance from image @item @emph{na} (PDB_FLOAT)--Index of Refraction A @item @emph{nb} (PDB_FLOAT)--Index of Refraction B -@item @emph{wrap} (PDB_INT32)--Wrap (0), Background (1) +@item @emph{edge} (PDB_INT32)--Background (0), Outside (1), Wrap (2) @item @emph{newl} (PDB_INT32)--New layer? @item @emph{xofs} (PDB_INT32)--X offset @item @emph{yofs} (PDB_INT32)--Y offset @@ -5383,6 +5413,25 @@ Shifts the pixels of the specified drawable. Each row will be displaced a random @end defun @emph{Spencer Kimball and Peter Mattis, ported by Brian Degenhardt and Federico Mena Quintero} +@defun plug_in_signature run_mode, image, drawable, signature[50], e-mail[30], homepage[50], date[20], mode, licence, contents +--@strong{GIMP Plug-In} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{image} (PDB_IMAGE)--Input image (unused) +@item @emph{drawable} (PDB_DRAWABLE)--Input drawable +@item @emph{signature[50]} (PDB_STRING)--Signature (Name of author, company etc.) +@item @emph{e-mail[30]} (PDB_STRING)--E-mail address +@item @emph{homepage[50]} (PDB_STRING)--Address of the homepage +@item @emph{date[20]} (PDB_STRING)--Date of creation +@item @emph{mode} (PDB_INT8)--FALSE: Write signature; TRUE: Read signature +@item @emph{licence} (PDB_INT8)--FALSE: Freely distributable; TRUE: Restricted distribution +@item @emph{contents} (PDB_INT8)--TRUE: Adult only contents +@end itemize +@end defun +@emph{Daniel Cotting (cotting@@mygale.org, http://www.mygale.org/~cotting)} + @defun plug_in_sinus run_mode, image, drawable, xscale, yscale, complex, seed, tiling, perturb, colors, alpha1, alpha2, blend, blend_power FIX ME: sinus help--@strong{GIMP Plug-In} @@ -5482,6 +5531,20 @@ Spreads the pixels of the specified drawable. Pixels are randomly moved to anot @end defun @emph{Spencer Kimball and Peter Mattis, ported by Brian Degenhardt and Federico Mena Quintero} +@defun plug_in_stegano run_mode, image, drawable, mode, filename[128] +--@strong{GIMP Plug-In} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{image} (PDB_IMAGE)--Input image (unused) +@item @emph{drawable} (PDB_DRAWABLE)--Input drawable +@item @emph{mode} (PDB_INT8)--FALSE: Hide file in image; TRUE: Get hidden file +@item @emph{filename[128]} (PDB_STRING)--Name of the file to hide in an image (only of importance if mode=FALSE +@end itemize +@end defun +@emph{Daniel Cotting (cotting@@mygale.org, http://www.mygale.org/~cotting)} + @defun plug_in_stereogram run_mode, image, heightmap, type, pat Based on the Stereogram FAQ--@strong{GIMP Plug-In} @@ -6066,21 +6129,6 @@ Chalk scribbled logos--@strong{Temporary Procedure} @end defun @emph{Manish Singh } -@defun script-fu-chalk-test-logo run_mode, value, value, value, color, color -Chalk scribbled logos--@strong{Temporary Procedure} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{value} (PDB_STRING)--Text String -@item @emph{value} (PDB_STRING)--Font Size (in pixels) -@item @emph{value} (PDB_STRING)--Font -@item @emph{color} (PDB_COLOR)--Background Color -@item @emph{color} (PDB_COLOR)--Chalk Color -@end itemize -@end defun -@emph{Manish Singh } - @defun script-fu-chrome-logo run_mode, value, value, value, color Somewhat simplistic, but cool chromed logos--@strong{Temporary Procedure} @@ -6148,6 +6196,46 @@ Render the specified text along the perimeter of a circle--@strong{Temporary Pro @end defun @emph{Tim Newsome } +@defun script-fu-colorcycling-anim run_mode, image, drawable, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value, value +Creates an animation with the help of the alienmap plug-in--@strong{Temporary Procedure} + +@strong{Inputs} +@itemize @bullet +@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive +@item @emph{image} (PDB_IMAGE)--Image +@item @emph{drawable} (PDB_DRAWABLE)--Drawable +@item @emph{value} (PDB_STRING)--Number of frames +@item @emph{value} (PDB_STRING)--Start: red intensity factor (max. 128) +@item @emph{value} (PDB_STRING)--Start: green intensity factor (max. 128) +@item @emph{value} (PDB_STRING)--Start: blue intensity factor (max. 128) +@item @emph{value} (PDB_STRING)--End: red intensity factor (max. 128) +@item @emph{value} (PDB_STRING)--End: green intensity factor (max. 128) +@item @emph{value} (PDB_STRING)--End: blue intensity factor (max. 128) +@item @emph{value} (PDB_STRING)--Red color mode (sin:0/cos:1/none:2) +@item @emph{value} (PDB_STRING)--Green color mode (sin:0/cos:1/none:2) +@item @emph{value} (PDB_STRING)--Blue color mode (sin:0/cos:1/none:2) +@item @emph{value} (PDB_STRING)--Red inversion before transformation +@item @emph{value} (PDB_STRING)--Green inversion before transformation +@item @emph{value} (PDB_STRING)--Blue inversion before transformation +@item @emph{value} (PDB_STRING)--Start: red phase displacement (RAD) +@item @emph{value} (PDB_STRING)--Start: green phase displacement (RAD) +@item @emph{value} (PDB_STRING)--Start: blue phase displacement (RAD) +@item @emph{value} (PDB_STRING)--End: red phase displacement (RAD) +@item @emph{value} (PDB_STRING)--End: green phase displacement (RAD) +@item @emph{value} (PDB_STRING)--End: blue phase displacement (RAD) +@item @emph{value} (PDB_STRING)--Start: red frequency (> 0) +@item @emph{value} (PDB_STRING)--Start: green frequency (> 0) +@item @emph{value} (PDB_STRING)--Start: blue frequency (> 0) +@item @emph{value} (PDB_STRING)--End: red frequency (> 0) +@item @emph{value} (PDB_STRING)--End: green frequency (> 0) +@item @emph{value} (PDB_STRING)--End: blue frequency (> 0) +@item @emph{value} (PDB_STRING)--Red inversion after transformation +@item @emph{value} (PDB_STRING)--Green inversion after transformation +@item @emph{value} (PDB_STRING)--Blue inversion after transformation +@end itemize +@end defun +@emph{Daniel Cotting (cotting@@mygale.org)} + @defun script-fu-cool-metal-logo run_mode, value, value, value, color, toggle Metallic logos with reflections and perspective shadows--@strong{Temporary Procedure} @@ -6327,38 +6415,6 @@ Draph the graph of H/S/V values on the drawable--@strong{Temporary Procedure} @end defun @emph{Shuji Narazaki (narazaki@@InetQ.or.jp)} -@defun script-fu-kanji-circle run_mode, value, value, value, value, value, value, toggle -Kanji Circle (version 0.3)--@strong{Temporary Procedure} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{value} (PDB_STRING)--Kanji Text -@item @emph{value} (PDB_STRING)--Radius -@item @emph{value} (PDB_STRING)--Start-angle -@item @emph{value} (PDB_STRING)--Fill-angle -@item @emph{value} (PDB_STRING)--Font name -@item @emph{value} (PDB_STRING)--Font Size -@item @emph{toggle} (PDB_INT32)--Antialias -@end itemize -@end defun -@emph{Shuji Narazaki } - -@defun script-fu-kanji-neon run_mode, color, value, value, value, value -Kanji Neon Text Cyan (0.3)--@strong{Temporary Procedure} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{color} (PDB_COLOR)--Glow Color -@item @emph{value} (PDB_STRING)--Tube Hue -@item @emph{value} (PDB_STRING)--Text (ill-displayed) -@item @emph{value} (PDB_STRING)--Font Size (in pixels) -@item @emph{value} (PDB_STRING)--Font (string) -@end itemize -@end defun -@emph{Shuji Narazaki } - @defun script-fu-labels-gimp-org run_mode, value, value, value, value, value, value, color, color, color, toggle, toggle, value, value, value, value, value Tube Button Label Header for gimp.org--@strong{Temporary Procedure} @@ -6532,19 +6588,6 @@ Add a perspective shadow--@strong{Temporary Procedure} @end defun @emph{Sven Neumann (neumanns@@uni-duesseldorf.de)} -@defun script-fu-pie-chart run_mode, value, value, value -Pie chart--@strong{Temporary Procedure} - -@strong{Inputs} -@itemize @bullet -@item @emph{run_mode} (PDB_INT32)--Interactive, non-interactive -@item @emph{value} (PDB_STRING)--Width -@item @emph{value} (PDB_STRING)--Value/color list -@item @emph{value} (PDB_STRING)--Start angle -@end itemize -@end defun -@emph{Federico Mena Quintero} - @defun script-fu-predator run_mode, image, drawable, value, toggle, value, toggle, toggle Fills the current selection with test--@strong{Temporary Procedure} diff --git a/libgimp/gimplayer.c b/libgimp/gimplayer.c index c6c68b1440..1aa640ad1a 100644 --- a/libgimp/gimplayer.c +++ b/libgimp/gimplayer.c @@ -43,6 +43,7 @@ gimp_layer_copy (gint32 layer_ID) return_vals = gimp_run_procedure ("gimp_layer_copy", &nreturn_vals, PARAM_LAYER, layer_ID, + PARAM_INT32, 0, PARAM_END); layer_ID = -1; diff --git a/libgimp/gimplayer_pdb.c b/libgimp/gimplayer_pdb.c index c6c68b1440..1aa640ad1a 100644 --- a/libgimp/gimplayer_pdb.c +++ b/libgimp/gimplayer_pdb.c @@ -43,6 +43,7 @@ gimp_layer_copy (gint32 layer_ID) return_vals = gimp_run_procedure ("gimp_layer_copy", &nreturn_vals, PARAM_LAYER, layer_ID, + PARAM_INT32, 0, PARAM_END); layer_ID = -1; diff --git a/plug-ins/AlienMap/AlienMap.c b/plug-ins/AlienMap/AlienMap.c index b2ee904fee..84cf9dbbe5 100644 --- a/plug-ins/AlienMap/AlienMap.c +++ b/plug-ins/AlienMap/AlienMap.c @@ -1156,8 +1156,8 @@ alienmap_logo_dialog() GtkWidget *xvbox; GtkWidget *xhbox; char *text; - gchar *temp,*temp2; - char *datapointer; + guchar *temp,*temp2; + guchar *datapointer; gint y,x; xdlg = logodlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(xdlg), "About"); @@ -1199,7 +1199,7 @@ alienmap_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { diff --git a/plug-ins/AlienMap/INSTALL b/plug-ins/AlienMap/INSTALL index 5e53dcbbc9..f4fc223940 100644 --- a/plug-ins/AlienMap/INSTALL +++ b/plug-ins/AlienMap/INSTALL @@ -16,25 +16,44 @@ ------------------------------------------- INSTALLATION ------------------------------------------- - To install it, you have to edit the - Makefile (change install-path). - Afterwards run make. This will compile - and install the plug-in in the right - directory. Once the new code is installed, - you can run the GIMP and enjoy the new - functions and effects it provides. + To install it, you have to edit the Make- + file (change install-path). Afterwards run + 'make'. This will compile and install the + plug-in in the right directory. Once the + new code is installed, you can run the GIMP + and enjoy the new functions and effects it + provides. +------------------------------------------- + + +------------------------------------------- + COLOR-CYCLING SCRIPT +------------------------------------------- + This version of the alienmap plug-in inclu- + des a script for color cycling animations. + It is recommended to start the alienmap + plug-in, to fiddle about with the parame- + ters until you have found optimal start va- + lues. Then put these values in the appro- + priate edit fields in the animation dialog. + Now you can change the values in the alien- + map plug-in to find interesting end values. + After you have inserted these new values in + the corresponding fields of the animation + script, you can start the calculation of + the animation. The script will create a new + picture with a layer for each animation + frame. With each new frame the start values + will gradually turn into the specified end + values, creating an amazing effect of color + cycling. ------------------------------------------- ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of - the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. - If you find that the plug-in is still + If you find that the plug-in binary is too big, you can compress the executables with the gzexe program (if it is avaiable on your system). To do so, change to the @@ -53,7 +72,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ @@ -61,9 +80,9 @@ FEEDBACK ------------------------------------------ I'm interested in any feedback, comments, - bug-reports, suggestions etc. If you - have anything you would like to tell - me, you can write to cotting@mygale.org. + bug-reports, suggestions etc. If you have + anything you would like to tell me, you + can write to cotting@mygale.org. Also have a look at the GIMP-section of my homepage at www.mygale.org/~cotting. ------------------------------------------ diff --git a/plug-ins/AlienMap/README b/plug-ins/AlienMap/README index 5e53dcbbc9..f4fc223940 100644 --- a/plug-ins/AlienMap/README +++ b/plug-ins/AlienMap/README @@ -16,25 +16,44 @@ ------------------------------------------- INSTALLATION ------------------------------------------- - To install it, you have to edit the - Makefile (change install-path). - Afterwards run make. This will compile - and install the plug-in in the right - directory. Once the new code is installed, - you can run the GIMP and enjoy the new - functions and effects it provides. + To install it, you have to edit the Make- + file (change install-path). Afterwards run + 'make'. This will compile and install the + plug-in in the right directory. Once the + new code is installed, you can run the GIMP + and enjoy the new functions and effects it + provides. +------------------------------------------- + + +------------------------------------------- + COLOR-CYCLING SCRIPT +------------------------------------------- + This version of the alienmap plug-in inclu- + des a script for color cycling animations. + It is recommended to start the alienmap + plug-in, to fiddle about with the parame- + ters until you have found optimal start va- + lues. Then put these values in the appro- + priate edit fields in the animation dialog. + Now you can change the values in the alien- + map plug-in to find interesting end values. + After you have inserted these new values in + the corresponding fields of the animation + script, you can start the calculation of + the animation. The script will create a new + picture with a layer for each animation + frame. With each new frame the start values + will gradually turn into the specified end + values, creating an amazing effect of color + cycling. ------------------------------------------- ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of - the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. - If you find that the plug-in is still + If you find that the plug-in binary is too big, you can compress the executables with the gzexe program (if it is avaiable on your system). To do so, change to the @@ -53,7 +72,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ @@ -61,9 +80,9 @@ FEEDBACK ------------------------------------------ I'm interested in any feedback, comments, - bug-reports, suggestions etc. If you - have anything you would like to tell - me, you can write to cotting@mygale.org. + bug-reports, suggestions etc. If you have + anything you would like to tell me, you + can write to cotting@mygale.org. Also have a look at the GIMP-section of my homepage at www.mygale.org/~cotting. ------------------------------------------ diff --git a/plug-ins/AlienMap/alienmap.c b/plug-ins/AlienMap/alienmap.c index 075e981247..c7e90414a0 100644 --- a/plug-ins/AlienMap/alienmap.c +++ b/plug-ins/AlienMap/alienmap.c @@ -1,14 +1,10 @@ /********************************************************************** - * AlienMap (Co-)sine color transformation plug-in (Version 1.00) + * AlienMap (Co-)sine color transformation plug-in (Version 1.03) * Daniel Cotting (cotting@mygale.org) ********************************************************************** - * Official Homepage: http://www.mygale.org/~cotting - ********************************************************************** - * Homepages under construction: http://www.chez.com/cotting - * http://www.cyberbrain.com/cotting - * You won't be able to see anything yet, as I don't really have the - * time to build up these two sites :-( - * Have a look at www.mygale.org/~cotting instead! + * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net + * http://village.cyberbrain.com/cotting ********************************************************************** */ @@ -47,7 +43,7 @@ #define PREVIEW_SIZE 128 #define SCALE_WIDTH 200 -#define ENTRY_WIDTH 60 +#define ENTRY_WIDTH 45 #define SINUS 0 #define COSINUS 1 @@ -61,6 +57,19 @@ typedef struct { gint redmode; gint greenmode; gint bluemode; + gint redinvert; + gint greeninvert; + gint blueinvert; + gdouble redphase; + gdouble greenphase; + gdouble bluephase; + gdouble redfrequency; + gdouble greenfrequency; + gdouble bluefrequency; + gint redinvert2; + gint greeninvert2; + gint blueinvert2; + } alienmap_vals_t; typedef struct { @@ -86,9 +95,9 @@ static void alienmap_render_row (const guchar *src_row, guchar *dest_row, gint row, gint row_width, - gint bytes, double, double, double); + gint bytes, double, double, double , double, double, double, double, double, double); static void alienmap_get_pixel(int x, int y, guchar *pixel); -void transform (short int *, short int *, short int *,double, double, double); +void transform (short int *, short int *, short int *,double, double, double ,double, double, double,double, double, double); static void build_preview_source_image(void); @@ -96,15 +105,16 @@ static void build_preview_source_image(void); static gint alienmap_dialog(void); static void dialog_update_preview(void); static void dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, - int left, int right); + int left, int right, const char *desc); static void dialog_scale_update(GtkAdjustment *adjustment, gdouble *value); static void dialog_entry_update(GtkWidget *widget, gdouble *value); static void dialog_close_callback(GtkWidget *widget, gpointer data); static void dialog_ok_callback(GtkWidget *widget, gpointer data); +static void dialog_animation_callback(GtkWidget *widget, gpointer data); static void dialog_cancel_callback(GtkWidget *widget, gpointer data); static void alienmap_toggle_update (GtkWidget *widget, gpointer data); -GtkWidget * alienmap_logo_dialog(void); +GtkWidget * alienmap_logo_dialog(void); @@ -114,6 +124,14 @@ GtkWidget * alienmap_logo_dialog(void); GtkWidget *maindlg; GtkWidget *logodlg; +GtkTooltips *tips; +GdkColor tips_fg,tips_bg; +int ready=0; +static GParam *ExternalParam=NULL; +static int ExternalInt; +gint32 image_ID; + + GPlugInInfo PLUG_IN_INFO = { @@ -131,7 +149,7 @@ static alienmap_interface_t wint = { }; /* wint */ static alienmap_vals_t wvals = { - 128,128,128,COSINUS,SINUS,SINUS, + 128,128,128,COSINUS,SINUS,SINUS,0,0,0,0,0,0,1,1,1,0,0,0, }; /* wvals */ static GDrawable *drawable; @@ -155,25 +173,46 @@ gint do_greennone; gint do_bluesinus; gint do_bluecosinus; gint do_bluenone; + +gint do_redinvert; +gint do_greeninvert; +gint do_blueinvert; + +gint do_redinvert2; +gint do_greeninvert2; +gint do_blueinvert2; + /***** Functions *****/ -MAIN (); +MAIN () static void query () { static GParamDef args[] = { - { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, - { PARAM_IMAGE, "image", "Input image" }, - { PARAM_DRAWABLE, "drawable", "Input drawable" }, - { PARAM_INT8, "redstretch", "Red component stretching factor (0-128)" }, - { PARAM_INT8, "greenstretch", "Green component stretching factor (0-128)" }, - { PARAM_INT8, "bluestretch", "Blue component stretching factor (0-128)" }, + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_IMAGE, "image", "Input image" }, + { PARAM_DRAWABLE, "drawable", "Input drawable" }, + { PARAM_FLOAT, "redstretch", "Red component stretching factor (0-128)" }, + { PARAM_FLOAT, "greenstretch", "Green component stretching factor (0-128)" }, + { PARAM_FLOAT, "bluestretch", "Blue component stretching factor (0-128)" }, { PARAM_INT8, "redmode", "Red application mode (0:SIN;1:COS;2:NONE)" }, { PARAM_INT8, "greenmode", "Green application mode (0:SIN;1:COS;2:NONE)" }, { PARAM_INT8, "bluemode", "Blue application mode (0:SIN;1:COS;2:NONE)" }, + { PARAM_INT8, "redinvert", "Red inversion before transformation (true or false)" }, + { PARAM_INT8, "greeninvert", "Green inversion before transformation (true or false)" }, + { PARAM_INT8, "blueinvert", "Blue inversion before transformation (true or false)" }, + { PARAM_FLOAT, "redphase", "Red component phase displacement [-PI;PI]" }, + { PARAM_FLOAT, "greenphase", "Green component phase displacement [-PI;PI]" }, + { PARAM_FLOAT, "bluephase", "Blue component phase displacement [-PI;PI]" }, + { PARAM_FLOAT, "redfrequency", "Red component frequency" }, + { PARAM_FLOAT, "greenfrequency", "Green component frequency" }, + { PARAM_FLOAT, "bluefrequency", "Blue component frequency" }, + { PARAM_INT8, "redinvert2", "Red inversion after transformation (true or false)" }, + { PARAM_INT8, "greeninvert2", "Green inversion after transformation (true or false)" }, + { PARAM_INT8, "blueinvert2", "Blue inversion after transformation (true or false)" }, }; static GParamDef *return_vals = NULL; static int nargs = sizeof (args) / sizeof (args[0]); @@ -184,7 +223,7 @@ query () "No help yet. Just try it and you'll see!", "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", - "1th May 1997", + "December 1997", "/Filters/Image/Alien-Map", "RGB*", PROC_PLUG_IN, @@ -197,20 +236,37 @@ query () void transform (short int *r, short int *g, - short int *b, double redstretch, double greenstretch, double bluestretch) + short int *b, double redstretch, double greenstretch, double bluestretch, + double redphase, double greenphase, double bluephase, + double redfrequency, double greenfrequency, double bluefrequency + ) { int red, green, blue; - float pi=3.1415926; + double pi=atan(1)*4; red = *r; green = *g; blue = *b; + + if (wvals.redinvert) { + red = 255-red; + } + if (wvals.greeninvert) { + green = 255-green; + } + if (wvals.blueinvert) { + blue = 255-blue; + } + switch (wvals.redmode) { case SINUS: - red = (int) redstretch*(1.0+sin((red/128.0-1)*pi)); + red = (int) redstretch*(1.0+sin((red/128.0-1)*pi*redfrequency+redphase)); break; case COSINUS: - red = (int) redstretch*(1.0+cos((red/128.0-1)*pi)); + red = (int) redstretch*(1.0+cos((red/128.0-1)*pi*redfrequency+redphase)); + break; + case NONE: + red = (int) (redstretch *(red / 128.0)); break; default: break; @@ -219,10 +275,13 @@ transform (short int *r, switch (wvals.greenmode) { case SINUS: - green = (int) greenstretch*(1.0+sin((green/128.0-1)*pi)); + green = (int) greenstretch*(1.0+sin((green/128.0-1)*pi*greenfrequency+greenphase)); break; case COSINUS: - green = (int) greenstretch*(1.0+cos((green/128.0-1)*pi)); + green = (int) greenstretch*(1.0+cos((green/128.0-1)*pi*greenfrequency+greenphase)); + break; + case NONE: + green = (int) (greenstretch *(green / 128.0)); break; default: break; @@ -231,14 +290,36 @@ transform (short int *r, switch (wvals.bluemode) { case SINUS: - blue = (int) bluestretch*(1.0+sin((blue/128.0-1)*pi)); + blue = (int) bluestretch*(1.0+sin((blue/128.0-1)*pi*bluefrequency+bluephase)); break; case COSINUS: - blue = (int) bluestretch*(1.0+cos((blue/128.0-1)*pi)); + blue = (int) bluestretch*(1.0+cos((blue/128.0-1)*pi*bluefrequency+bluephase)); + break; + case NONE: + blue = (int) (bluestretch *(blue / 128.0)); break; default: break; } + + if (red== 256) { + red= 255;} + if (green== 256) { + green= 255;} + if (blue== 256) + {blue= 255;} + + if (wvals.redinvert2) { + red = 255-red; + } + if (wvals.greeninvert2) { + green = 255-green; + } + if (wvals.blueinvert2) { + blue = 255-blue; + } + + *r = red; *g = green; *b = blue; @@ -253,8 +334,6 @@ run (char *name, GParam **return_vals) { static GParam values[1]; - /* GDrawable *drawable; */ - /* gint32 image_ID; */ GRunModeType run_mode; double xhsiz, yhsiz; int pwidth, pheight; @@ -273,7 +352,7 @@ run (char *name, /* Get the specified drawable */ drawable = gimp_drawable_get (param[2].data.d_drawable); - /* image_ID = param[1].data.d_image; */ + image_ID = param[1].data.d_image; tile_width = gimp_tile_width(); tile_height = gimp_tile_height(); @@ -332,17 +411,29 @@ run (char *name, case RUN_NONINTERACTIVE: /* Make sure all the arguments are present */ - if (nparams != 9) + if (nparams != 21) status = STATUS_CALLING_ERROR; if (status == STATUS_SUCCESS) - wvals.redstretch = param[3].data.d_int8; - wvals.greenstretch = param[4].data.d_int8; - wvals.bluestretch = param[5].data.d_int8; + wvals.redstretch = param[3].data.d_float; + wvals.greenstretch = param[4].data.d_float; + wvals.bluestretch = param[5].data.d_float; wvals.redmode = param[6].data.d_int8; wvals.greenmode = param[7].data.d_int8; wvals.bluemode = param[8].data.d_int8; + wvals.redinvert = param[9].data.d_int8; + wvals.greeninvert = param[10].data.d_int8; + wvals.blueinvert = param[11].data.d_int8; + wvals.redphase = param[12].data.d_float; + wvals.greenphase = param[13].data.d_float; + wvals.bluephase = param[14].data.d_float; + wvals.redfrequency = param[15].data.d_float; + wvals.greenfrequency= param[16].data.d_float; + wvals.bluefrequency = param[17].data.d_float; + wvals.redinvert2 = param[18].data.d_int8; + wvals.greeninvert2 = param[19].data.d_int8; + wvals.blueinvert2 = param[20].data.d_int8; break; @@ -386,7 +477,6 @@ run (char *name, } else { - /* gimp_message("This filter only applies on RGB-images"); */ status = STATUS_EXECUTION_ERROR; } } @@ -446,7 +536,10 @@ alienmap_render_row (const guchar *src_row, guchar *dest_row, gint row, gint row_width, - gint bytes, double redstretch, double greenstretch, double bluestretch) + gint bytes, double redstretch, double greenstretch, double bluestretch, + double redphase, double greenphase, double bluephase, + double redfrequency, double greenfrequency, double bluefrequency + ) @@ -462,7 +555,8 @@ alienmap_render_row (const guchar *src_row, v2 = (short int)src_row[col*bytes +1]; v3 = (short int)src_row[col*bytes +2]; - transform(&v1, &v2, &v3, redstretch, greenstretch, bluestretch); + transform(&v1, &v2, &v3, redstretch, greenstretch, bluestretch,redphase, greenphase,bluephase, + redfrequency, greenfrequency, bluefrequency); dest_row[col*bytes] = (int)v1; dest_row[col*bytes +1] = (int)v2; @@ -491,6 +585,8 @@ alienmap (GDrawable *drawable) gint row; gint x1, y1, x2, y2; double redstretch,greenstretch,bluestretch; + double redphase, greenphase, bluephase; + double redfrequency, greenfrequency,bluefrequency; /* Get the input area. This is the bounding box of the selection in * the image (or the entire image if there is no selection). Only @@ -520,6 +616,12 @@ alienmap (GDrawable *drawable) redstretch = wvals.redstretch; greenstretch = wvals.greenstretch; bluestretch = wvals.bluestretch; + redphase = wvals.redphase; + greenphase = wvals.greenphase; + bluephase = wvals.bluephase; + redfrequency = wvals.redfrequency; + greenfrequency = wvals.greenfrequency; + bluefrequency = wvals.bluefrequency; for (row = y1; row < y2; row++) @@ -531,7 +633,9 @@ alienmap (GDrawable *drawable) row, (x2 - x1), bytes, - redstretch, greenstretch, bluestretch); + redstretch, greenstretch, bluestretch, + redphase, greenphase, bluephase, + redfrequency, greenfrequency, bluefrequency); /* store the dest */ gimp_pixel_rgn_set_row (&destPR, dest_row, x1, row, (x2 - x1)); @@ -606,6 +710,79 @@ alienmap_close_callback(GtkWidget *widget, gpointer data) gtk_main_quit(); } +static void +dialog_animation_callback(GtkWidget *widget, gpointer data) +{ + char r_stretch[20], g_stretch[20], b_stretch[20]; + char r_mode[10], g_mode[10], b_mode[10]; + char r_invert[10], g_invert[10], b_invert[10]; + char r_invert2[10], g_invert2[10], b_invert2[10]; + char r_phase[20], g_phase[20], b_phase[20]; + char r_freq[20], g_freq[20], b_freq[20]; + + sprintf(r_stretch,"%f", wvals.redstretch); + sprintf(g_stretch,"%f", wvals.greenstretch); + sprintf(b_stretch,"%f", wvals.bluestretch); + + sprintf(r_mode,"%i", wvals.redmode); + sprintf(g_mode,"%i", wvals.greenmode); + sprintf(b_mode,"%i", wvals.bluemode); + + sprintf(r_invert,"%s", (wvals.redinvert) ? "TRUE" : "FALSE"); + sprintf(g_invert,"%s", (wvals.greeninvert) ? "TRUE" : "FALSE"); + sprintf(b_invert,"%s", (wvals.blueinvert) ? "TRUE" : "FALSE"); + + sprintf(r_phase,"%f", wvals.redphase); + sprintf(g_phase,"%f", wvals.greenphase); + sprintf(b_phase,"%f", wvals.bluephase); + + sprintf(r_freq,"%f", wvals.redfrequency); + sprintf(g_freq,"%f", wvals.greenfrequency); + sprintf(b_freq,"%f", wvals.bluefrequency); + + + sprintf(r_invert2,"%s", (wvals.redinvert2) ? "TRUE" : "FALSE"); + sprintf(g_invert2,"%s", (wvals.greeninvert2) ? "TRUE" : "FALSE"); + sprintf(b_invert2,"%s", (wvals.blueinvert2) ? "TRUE" : "FALSE"); + + gtk_main_quit(); + + ExternalParam = gimp_run_procedure("script-fu-colorcycling-anim",&ExternalInt, + PARAM_INT32, 0, + PARAM_IMAGE, image_ID, + PARAM_DRAWABLE, drawable->id, + PARAM_STRING, "10", + PARAM_STRING, r_stretch, + PARAM_STRING, g_stretch, + PARAM_STRING, b_stretch, + PARAM_STRING, r_stretch, + PARAM_STRING, g_stretch, + PARAM_STRING, b_stretch, + PARAM_STRING, r_mode, + PARAM_STRING, g_mode, + PARAM_STRING, b_mode, + PARAM_STRING, r_invert, + PARAM_STRING, g_invert, + PARAM_STRING, b_invert, + PARAM_STRING, r_phase, + PARAM_STRING, g_phase, + PARAM_STRING, b_phase, + PARAM_STRING, r_phase, + PARAM_STRING, g_phase, + PARAM_STRING, b_phase, + PARAM_STRING, r_freq, + PARAM_STRING, g_freq, + PARAM_STRING, b_freq, + PARAM_STRING, r_freq, + PARAM_STRING, g_freq, + PARAM_STRING, b_freq, + PARAM_STRING, r_invert2, + PARAM_STRING, g_invert2, + PARAM_STRING, b_invert2, + PARAM_END); + gtk_main_quit(); +} + static void @@ -615,6 +792,14 @@ alienmap_about_callback(GtkWidget *widget, gpointer data) alienmap_logo_dialog(); } +static void +set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc) +{ + if (desc && desc[0]) + gtk_tooltips_set_tips (tooltips, widget, (char *) desc); +} + + /*****/ static gint @@ -628,6 +813,7 @@ alienmap_dialog(void) GtkWidget *table, *table2, *table3; GtkWidget *button; gint argc; + double pi=atan(1)*4.0; gchar **argv; guchar *color_cube; GSList *redmode_group = NULL; @@ -642,12 +828,17 @@ alienmap_dialog(void) do_bluesinus = (wvals.bluemode == SINUS); do_bluecosinus = (wvals.bluemode == COSINUS); do_bluenone = (wvals.bluemode == NONE); - /* - printf("Waiting... (pid %d)\n", getpid()); - kill(getpid(), SIGSTOP); - */ - argc = 1; + do_redinvert = (wvals.redinvert != 0); + do_greeninvert = (wvals.greeninvert != 0); + do_blueinvert = (wvals.blueinvert != 0); + + + do_redinvert2 = (wvals.redinvert2 != 0); + do_greeninvert2 = (wvals.greeninvert2 != 0); + do_blueinvert2 = (wvals.blueinvert2 != 0); + + argc = 1; argv = g_new(gchar *, 1); argv[0] = g_strdup("alienmap"); @@ -670,55 +861,147 @@ alienmap_dialog(void) (GtkSignalFunc) dialog_close_callback, NULL); - top_table = gtk_table_new(4, 4, FALSE); + top_table = gtk_table_new(10, 10, FALSE); gtk_container_border_width(GTK_CONTAINER(top_table), 6); gtk_table_set_row_spacings(GTK_TABLE(top_table), 4); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), top_table, FALSE, FALSE, 0); gtk_widget_show(top_table); + /* use black as foreground: */ + tips = gtk_tooltips_new (); + tips_fg.red = 0; + tips_fg.green = 0; + tips_fg.blue = 0; + /* postit yellow (khaki) as background: */ + gdk_color_alloc (gtk_widget_get_colormap (top_table), &tips_fg); + tips_bg.red = 61669; + tips_bg.green = 59113; + tips_bg.blue = 35979; + gdk_color_alloc (gtk_widget_get_colormap (top_table), &tips_bg); + gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg); + /* Preview */ frame = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); - gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 0, 1, 0, 0, 0, 0); + gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 0, 1, 0, 0, 5, 0); gtk_widget_show(frame); wint.preview = gtk_preview_new(GTK_PREVIEW_COLOR); gtk_preview_size(GTK_PREVIEW(wint.preview), preview_width, preview_height); gtk_container_add(GTK_CONTAINER(frame), wint.preview); gtk_widget_show(wint.preview); - + /* Controls */ + frame = gtk_frame_new ("Color intensity"); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 0); + gtk_table_attach (GTK_TABLE (top_table), frame, 0, 4, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0); + toggle_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); + gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); + table = gtk_table_new(1, 3, FALSE); gtk_container_border_width(GTK_CONTAINER(table), 0); - gtk_table_attach(GTK_TABLE(top_table), table, 0, 4, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table, FALSE, FALSE, 0); gtk_widget_show(table); - dialog_create_value("R", GTK_TABLE(table), 0, &wvals.redstretch,0,128); + dialog_create_value("R", GTK_TABLE(table), 0, &wvals.redstretch,0,128.00000000000, "Change intensity of the red channel"); table2 = gtk_table_new(1, 3, FALSE); gtk_container_border_width(GTK_CONTAINER(table2), 0); - gtk_table_attach(GTK_TABLE(top_table), table2, 0, 4, 2, 3, GTK_EXPAND | GTK_FILL, 0, 0, 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table2, FALSE, FALSE, 0); gtk_widget_show(table2); - dialog_create_value("G", GTK_TABLE(table2), 0, &wvals.greenstretch,0,128); + dialog_create_value("G", GTK_TABLE(table2), 0, &wvals.greenstretch,0,128.0000000000000, "Change intensity of the green channel"); table3 = gtk_table_new(1, 3, FALSE); gtk_container_border_width(GTK_CONTAINER(table3), 0); - gtk_table_attach(GTK_TABLE(top_table), table3, 0, 4, 3, 4, GTK_EXPAND | GTK_FILL, 0, 0, 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table3, FALSE, FALSE, 0); gtk_widget_show(table3); - dialog_create_value("B", GTK_TABLE(table3), 0, &wvals.bluestretch,0,128); + dialog_create_value("B", GTK_TABLE(table3), 0, &wvals.bluestretch,0,128.00000000000000, "Change intensity of the blue channel"); + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + frame = gtk_frame_new ("Phase displacement"); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 0); + gtk_table_attach (GTK_TABLE (top_table), frame, 0, 4, 4, 5, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0); + toggle_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); + gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); + + table = gtk_table_new(1, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table), 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table, FALSE, FALSE, 0); + gtk_widget_show(table); + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + + + dialog_create_value("R", GTK_TABLE(table), 0, &wvals.redphase,-pi,pi, "Change phase displacement of function for red channel"); + + + table2 = gtk_table_new(1, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table2), 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table2, FALSE, FALSE, 0); + gtk_widget_show(table2); + + dialog_create_value("G", GTK_TABLE(table2), 0, &wvals.greenphase,-pi,pi, "Change phase displacement of function for green channel"); + + + table3 = gtk_table_new(1, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table3), 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table3, FALSE, FALSE, 0); + gtk_widget_show(table3); + + dialog_create_value("B", GTK_TABLE(table3), 0, &wvals.bluephase,-pi,pi, "Change phase displacement of function for blue channel"); + + + frame = gtk_frame_new ("Frequency"); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 0); + gtk_table_attach (GTK_TABLE (top_table), frame, 0, 4, 7, 8, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0); + toggle_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); + gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); + + table = gtk_table_new(1, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table), 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table, FALSE, FALSE, 0); + gtk_widget_show(table); + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + + dialog_create_value("R", GTK_TABLE(table), 0, &wvals.redfrequency,0,10, "Change frequency of function for red channel"); + + + table2 = gtk_table_new(1, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table2), 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table2, FALSE, FALSE, 0); + gtk_widget_show(table2); + + dialog_create_value("G", GTK_TABLE(table2), 0, &wvals.greenfrequency,0,10, "Change frequency of function for green channel"); + + + table3 = gtk_table_new(1, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table3), 0); + gtk_box_pack_start (GTK_BOX (toggle_vbox), table3, FALSE, FALSE, 0); + + gtk_widget_show(table3); + + dialog_create_value("B", GTK_TABLE(table3), 0, &wvals.bluefrequency,0,10, "Change frequency of function for blue channel"); + /* Redmode toggle box */ - frame = gtk_frame_new ("Red:"); + frame = gtk_frame_new ("Red"); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); - toggle_vbox = gtk_vbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 5); + gtk_table_attach (GTK_TABLE (top_table), frame, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0); + toggle_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); toggle = gtk_radio_button_new_with_label (redmode_group, "Sine"); @@ -729,6 +1012,8 @@ alienmap_dialog(void) &do_redsinus); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_redsinus); gtk_widget_show (toggle); + + set_tooltip(tips,toggle,"Use sine-function for red component"); toggle = gtk_radio_button_new_with_label (redmode_group, "Cosine"); redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); @@ -738,6 +1023,7 @@ alienmap_dialog(void) &do_redcosinus); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_redcosinus); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Use cosine-function for red component"); toggle = gtk_radio_button_new_with_label (redmode_group, "None"); redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); @@ -747,17 +1033,36 @@ alienmap_dialog(void) &do_rednone); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_rednone); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Red channel: use linear mapping instead of any trigonometrical function"); + + toggle = gtk_check_button_new_with_label("Inversion 1"); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) alienmap_toggle_update, + &wvals.redinvert); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.redinvert); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "If you enable this option, higher color values will be swapped with lower ones (and vice versa) before color transformation is applied."); + + toggle = gtk_check_button_new_with_label("Inversion 2"); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) alienmap_toggle_update, + &wvals.redinvert2); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.redinvert2); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "If you enable this option, higher color values will be swapped with lower ones (and vice versa) after color transformation is applied."); gtk_widget_show (toggle_vbox); gtk_widget_show (frame); /* Greenmode toggle box */ - frame = gtk_frame_new ("Green:"); + frame = gtk_frame_new ("Green"); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame, 2, 3, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); - toggle_vbox = gtk_vbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 5); + gtk_table_attach (GTK_TABLE (top_table), frame, 2, 3, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0); + toggle_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); toggle = gtk_radio_button_new_with_label (greenmode_group, "Sine"); @@ -768,6 +1073,7 @@ alienmap_dialog(void) &do_greensinus); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greensinus); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Use sine-function for green component"); toggle = gtk_radio_button_new_with_label (greenmode_group, "Cosine"); greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); @@ -777,6 +1083,7 @@ alienmap_dialog(void) &do_greencosinus); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greencosinus); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Use cosine-function for green component"); toggle = gtk_radio_button_new_with_label (greenmode_group, "None"); greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); @@ -786,17 +1093,37 @@ alienmap_dialog(void) &do_greennone); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greennone); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Green channel: use linear mapping instead of any trigonometrical function"); + toggle = gtk_check_button_new_with_label("Inversion 1"); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) alienmap_toggle_update, + &wvals.greeninvert); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.greeninvert); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "If you enable this option higher color values will be swapped with lower ones (and vice versa) before color transformation is applied."); + + toggle = gtk_check_button_new_with_label("Inversion 2"); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) alienmap_toggle_update, + &wvals.greeninvert2); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.greeninvert2); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "If you enable this option higher color values will be swapped with lower ones (and vice versa) after color transformation is applied."); + + gtk_widget_show (toggle_vbox); gtk_widget_show (frame); /* Bluemode toggle box */ - frame = gtk_frame_new ("Blue:"); + frame = gtk_frame_new ("Blue"); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame, 3, 4, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5); - toggle_vbox = gtk_vbox_new (FALSE, 5); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 5); + gtk_table_attach (GTK_TABLE (top_table), frame, 3, 4, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 0); + toggle_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); toggle = gtk_radio_button_new_with_label (bluemode_group, "Sine"); @@ -807,6 +1134,7 @@ alienmap_dialog(void) &do_bluesinus); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluesinus); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Use sine-function for blue component"); toggle = gtk_radio_button_new_with_label (bluemode_group, "Cosine"); bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); @@ -816,6 +1144,7 @@ alienmap_dialog(void) &do_bluecosinus); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluecosinus); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Use cosine-function for blue component"); toggle = gtk_radio_button_new_with_label (bluemode_group, "None"); bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); @@ -825,10 +1154,28 @@ alienmap_dialog(void) &do_bluenone); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluenone); gtk_widget_show (toggle); + set_tooltip(tips,toggle,"Blue channel: use linear mapping instead of any trigonometrical function"); + + toggle = gtk_check_button_new_with_label("Inversion 1"); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) alienmap_toggle_update, + &wvals.blueinvert); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.blueinvert); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "If you enable this option higher color values will be swapped with lower ones (and vice versa) before color transformation is applied."); + + toggle = gtk_check_button_new_with_label("Inversion 2"); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) alienmap_toggle_update, + &wvals.blueinvert2); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.blueinvert2); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "If you enable this option higher color values will be swapped with lower ones (and vice versa) after color transformation is applied."); gtk_widget_show (toggle_vbox); gtk_widget_show (frame); - /* gtk_widget_show (table); */ /* Buttons */ @@ -844,7 +1191,18 @@ gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 6); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); gtk_widget_grab_default(button); gtk_widget_show(button); + set_tooltip(tips,button,"Accept settings and apply filter on image"); + button = gtk_button_new_with_label("Animation"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_animation_callback, + dialog); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips,button,"Create an animation with the color-cycling script and then exit this dialog box."); + + button = gtk_button_new_with_label("Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button), "clicked", @@ -852,6 +1210,7 @@ gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 6); dialog); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); gtk_widget_show(button); + set_tooltip(tips,button,"Reject any changes and close plug-in"); button = gtk_button_new_with_label("About..."); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); @@ -860,10 +1219,13 @@ gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 6); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); gtk_widget_show(button); + set_tooltip(tips,button,"Show information about this plug-in and the author"); + /* Done */ gtk_widget_show(dialog); + ready=1; dialog_update_preview(); gtk_main(); @@ -890,10 +1252,12 @@ dialog_update_preview(void) int px, py; int x, y; double redstretch, greenstretch, bluestretch; + double redphase, greenphase, bluephase; + double redfrequency, greenfrequency, bluefrequency; short int r,g,b; double scale_x, scale_y; guchar *p_ul, *i, *p; - + if (ready==0) return; left = sel_x1; right = sel_x2 - 1; bottom = sel_y2 - 1; @@ -904,6 +1268,14 @@ dialog_update_preview(void) redstretch = wvals.redstretch; greenstretch = wvals.greenstretch; bluestretch = wvals.bluestretch; + + redphase = wvals.redphase; + greenphase = wvals.greenphase; + bluephase = wvals.bluephase; + + redfrequency = wvals.redfrequency; + greenfrequency = wvals.greenfrequency; + bluefrequency = wvals.bluefrequency; scale_x = (double) (preview_width - 1) / (right - left); scale_y = (double) (preview_height - 1) / (bottom - top); @@ -920,14 +1292,16 @@ dialog_update_preview(void) r = *i++; g = *i++; b = *i; - transform(&r,&g,&b,redstretch, greenstretch, bluestretch); + transform(&r,&g,&b,redstretch, greenstretch, bluestretch + , redphase, greenphase, bluephase, + redfrequency, greenfrequency, bluefrequency); p_ul[0] = r; p_ul[1] = g; p_ul[2] = b; p_ul += 3; - px += 1; /*dx; */ + px += 1; } /* for */ - py +=1; /* dy; */ + py +=1; } /* for */ p = wint.wimage; @@ -945,7 +1319,7 @@ dialog_update_preview(void) static void dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, - int left, int right) + int left, int right, const char *desc) { GtkWidget *label; GtkWidget *scale; @@ -960,8 +1334,8 @@ dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, scale_data = gtk_adjustment_new(*value, left, right, - (right - left) / 128, - (right - left) / 128, + (right - left) / 1000, + (right - left) / 1000, 0); gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", @@ -975,6 +1349,7 @@ dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, gtk_scale_set_digits(GTK_SCALE(scale), 3); gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); gtk_widget_show(scale); + set_tooltip(tips,scale,desc); entry = gtk_entry_new(); gtk_object_set_user_data(GTK_OBJECT(entry), scale_data); @@ -987,6 +1362,8 @@ dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, value); gtk_table_attach(GTK_TABLE(table), entry, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, 4, 0); gtk_widget_show(entry); + set_tooltip(tips,entry,desc); + } /* dialog_create_value */ /*****/ @@ -1095,6 +1472,7 @@ alienmap_toggle_update (GtkWidget *widget, wvals.bluemode = COSINUS; else if (do_bluenone) wvals.bluemode = NONE; + dialog_update_preview(); } @@ -1111,8 +1489,8 @@ alienmap_logo_dialog() GtkWidget *xvbox; GtkWidget *xhbox; char *text; - gchar *temp,*temp2; - char *datapointer; + guchar *temp,*temp2; + unsigned char *datapointer; gint y,x; xdlg = logodlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(xdlg), "About"); @@ -1130,6 +1508,7 @@ alienmap_logo_dialog() xbutton, TRUE, TRUE, 0); gtk_widget_grab_default(xbutton); gtk_widget_show(xbutton); + set_tooltip(tips,xbutton,"This closes the information box"); xframe = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN); @@ -1153,7 +1532,7 @@ alienmap_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { @@ -1176,8 +1555,8 @@ alienmap_logo_dialog() "CH-3066 Stettlen (Switzerland)\n\n" "cotting@mygale.org\n" "http://www.mygale.org/~cotting\n\n" - "AlienMap Plug-In for the GIMP\n" - "Version 1.00\n"; + "AlienMap Plug-In for the GIMP\n" + "Version 1.03\n"; xlabel = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); gtk_widget_show(xlabel); diff --git a/plug-ins/AlienMap/logo.h b/plug-ins/AlienMap/logo.h index 871a318a06..cb94ec445f 100644 --- a/plug-ins/AlienMap/logo.h +++ b/plug-ins/AlienMap/logo.h @@ -1,4 +1,4 @@ -/* GIMP header image file format (RGB-only): //logo.h */ +/* GIMP header image file format (Indexed): //logo.h */ static unsigned int logo_width = 200; static unsigned int logo_height = 72; @@ -6,9 +6,783 @@ static unsigned int logo_height = 72; /* Call this macro repeatedly. After each use, the pixel data can be extracted */ #define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/Anamorphose/Anamorphose.c b/plug-ins/Anamorphose/Anamorphose.c index 9435abb700..516fada55f 100644 --- a/plug-ins/Anamorphose/Anamorphose.c +++ b/plug-ins/Anamorphose/Anamorphose.c @@ -1,8 +1,9 @@ /********************************************************************** - * Conical Anamorphose Distortion Plug-In (Version 1.02) + * Conical Anamorphose Distortion Plug-In (Version 1.03) * Daniel Cotting (cotting@mygale.org) ********************************************************************** * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net * http://village.cyberbrain.com/cotting ********************************************************************** */ @@ -641,8 +642,8 @@ anamorphose_logo_dialog() GtkWidget *xvbox; GtkWidget *xhbox; char *text; - gchar *temp,*temp2; - char *datapointer; + guchar *temp,*temp2; + guchar *datapointer; gint y,x; xdlg = logodlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(xdlg), "About"); @@ -684,7 +685,7 @@ anamorphose_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { @@ -708,7 +709,7 @@ anamorphose_logo_dialog() "cotting@mygale.org\n" "http://www.mygale.org/~cotting\n\n" "Conical Anamorphose\nPlug-In for the GIMP\n" - "Version 1.02\n"; + "Version 1.03\n"; xlabel = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); gtk_widget_show(xlabel); diff --git a/plug-ins/Anamorphose/INSTALL b/plug-ins/Anamorphose/INSTALL index 5e53dcbbc9..d6f045b270 100644 --- a/plug-ins/Anamorphose/INSTALL +++ b/plug-ins/Anamorphose/INSTALL @@ -29,11 +29,9 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 1.03 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables with the gzexe program (if it is avaiable @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/Anamorphose/README b/plug-ins/Anamorphose/README index 5e53dcbbc9..d6f045b270 100644 --- a/plug-ins/Anamorphose/README +++ b/plug-ins/Anamorphose/README @@ -29,11 +29,9 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 1.03 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables with the gzexe program (if it is avaiable @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/Anamorphose/logo.h b/plug-ins/Anamorphose/logo.h index 871a318a06..cb94ec445f 100644 --- a/plug-ins/Anamorphose/logo.h +++ b/plug-ins/Anamorphose/logo.h @@ -1,4 +1,4 @@ -/* GIMP header image file format (RGB-only): //logo.h */ +/* GIMP header image file format (Indexed): //logo.h */ static unsigned int logo_width = 200; static unsigned int logo_height = 72; @@ -6,9 +6,783 @@ static unsigned int logo_height = 72; /* Call this macro repeatedly. After each use, the pixel data can be extracted */ #define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/CentralReflection/CentralReflection.c b/plug-ins/CentralReflection/CentralReflection.c index 39833af201..b0427b15d1 100644 --- a/plug-ins/CentralReflection/CentralReflection.c +++ b/plug-ins/CentralReflection/CentralReflection.c @@ -1,8 +1,9 @@ /********************************************************************** - * CentralReflection Distortion Plug-In (Version 1.02) + * CentralReflection Distortion Plug-In (Version 1.04) * Daniel Cotting (cotting@mygale.org) ********************************************************************** * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net * http://village.cyberbrain.com/cotting ********************************************************************** */ @@ -237,7 +238,7 @@ drawCentralReflection(GDrawable *drawable) dx = (gfloat)col - a; for(row = 0; row < regionheight; row++) { pixelpos = (col+row*regionwidth)*bytes; - dy = -((gfloat)row - b); + dy = -((gfloat)row - b); abstand=(sqrt(dx*dx+dy*dy)); succeeded=1; verhaltniss=radius/abstand; @@ -587,8 +588,8 @@ CentralReflection_logo_dialog() GtkWidget *xvbox; GtkWidget *xhbox; char *text; - gchar *temp,*temp2; - char *datapointer; + guchar *temp,*temp2; + guchar *datapointer; gint y,x; xdlg = logodlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(xdlg), "About"); @@ -630,7 +631,7 @@ CentralReflection_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { @@ -654,7 +655,7 @@ CentralReflection_logo_dialog() "cotting@mygale.org\n" "http://www.mygale.org/~cotting\n\n" "Central-Reflection\n Plug-In for the GIMP\n" - "Version 1.02\n"; + "Version 1.04\n"; xlabel = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); gtk_widget_show(xlabel); diff --git a/plug-ins/CentralReflection/INSTALL b/plug-ins/CentralReflection/INSTALL index 5e53dcbbc9..f5ab6b112a 100644 --- a/plug-ins/CentralReflection/INSTALL +++ b/plug-ins/CentralReflection/INSTALL @@ -29,11 +29,9 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 1.04 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables with the gzexe program (if it is avaiable @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/CentralReflection/README b/plug-ins/CentralReflection/README index 5e53dcbbc9..f5ab6b112a 100644 --- a/plug-ins/CentralReflection/README +++ b/plug-ins/CentralReflection/README @@ -29,11 +29,9 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 1.04 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables with the gzexe program (if it is avaiable @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/CentralReflection/logo.h b/plug-ins/CentralReflection/logo.h index 871a318a06..cb94ec445f 100644 --- a/plug-ins/CentralReflection/logo.h +++ b/plug-ins/CentralReflection/logo.h @@ -1,4 +1,4 @@ -/* GIMP header image file format (RGB-only): //logo.h */ +/* GIMP header image file format (Indexed): //logo.h */ static unsigned int logo_width = 200; static unsigned int logo_height = 72; @@ -6,9 +6,783 @@ static unsigned int logo_height = 72; /* Call this macro repeatedly. After each use, the pixel data can be extracted */ #define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/Curtain/Curtain.c b/plug-ins/Curtain/Curtain.c index d52b853b95..1c2bbf99fb 100644 --- a/plug-ins/Curtain/Curtain.c +++ b/plug-ins/Curtain/Curtain.c @@ -1,14 +1,10 @@ /********************************************************************** - * Curtain Plug-In (Version 1.01) + * Curtain Plug-In (Version 1.03) * Daniel Cotting (cotting@mygale.org) ********************************************************************** - * Official Homepage: http://www.mygale.org/~cotting - ********************************************************************** - * Homepages under construction: http://www.chez.com/cotting - * http://www.cyberbrain.com/cotting - * You won't be able to see anything yet, as I don't really have the - * time to build up these two sites :-( - * Have a look at www.mygale.org/~cotting instead! + * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net + * http://village.cyberbrain.com/cotting ********************************************************************** */ @@ -228,9 +224,11 @@ drawCurtain(GDrawable *drawable) ix=(int)x; iy=(int)y; -/* Flags horiz and vert inversed by mistake! */ -/* Corrected this with a small hack in the next lines. */ -/* (one more inversion) */ + /* + Flags horiz and vert inversed by mistake! + Corrected this with a small hack in the next lines. + (one more inversion) + */ if ((((int)((float)ix/2.0))*2==ix) && (wvals.vert)) { pos = ((gint)(regionheight-1-iy)*regionwidth) * bytes; @@ -424,8 +422,8 @@ curtain_logo_dialog() GtkWidget *xvbox; GtkWidget *xhbox; char *text; - gchar *temp,*temp2; - char *datapointer; + guchar *temp,*temp2; + guchar *datapointer; gint y,x; xdlg = logodlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(xdlg), "About"); @@ -467,7 +465,7 @@ curtain_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_height*logo_width-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { @@ -491,7 +489,7 @@ curtain_logo_dialog() "cotting@mygale.org\n" "http://www.mygale.org/~cotting\n\n" "Curtain Plug-In for the GIMP\n" - "Version 1.01\n"; + "Version 1.03\n"; xlabel = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); gtk_widget_show(xlabel); diff --git a/plug-ins/Curtain/INSTALL b/plug-ins/Curtain/INSTALL index 5e53dcbbc9..d6f045b270 100644 --- a/plug-ins/Curtain/INSTALL +++ b/plug-ins/Curtain/INSTALL @@ -29,11 +29,9 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 1.03 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables with the gzexe program (if it is avaiable @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/Curtain/README b/plug-ins/Curtain/README index 5e53dcbbc9..d6f045b270 100644 --- a/plug-ins/Curtain/README +++ b/plug-ins/Curtain/README @@ -29,11 +29,9 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 1.03 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables with the gzexe program (if it is avaiable @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/Curtain/logo.h b/plug-ins/Curtain/logo.h index 871a318a06..cb94ec445f 100644 --- a/plug-ins/Curtain/logo.h +++ b/plug-ins/Curtain/logo.h @@ -1,4 +1,4 @@ -/* GIMP header image file format (RGB-only): //logo.h */ +/* GIMP header image file format (Indexed): //logo.h */ static unsigned int logo_width = 200; static unsigned int logo_height = 72; @@ -6,9 +6,783 @@ static unsigned int logo_height = 72; /* Call this macro repeatedly. After each use, the pixel data can be extracted */ #define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/DigitalSignature/.cvsignore b/plug-ins/DigitalSignature/.cvsignore new file mode 100644 index 0000000000..147fc23536 --- /dev/null +++ b/plug-ins/DigitalSignature/.cvsignore @@ -0,0 +1,5 @@ +Makefile.in +Makefile +.deps +_libs +DigitalSignature diff --git a/plug-ins/DigitalSignature/DigitalSignature.c b/plug-ins/DigitalSignature/DigitalSignature.c new file mode 100644 index 0000000000..e221b4f896 --- /dev/null +++ b/plug-ins/DigitalSignature/DigitalSignature.c @@ -0,0 +1,1010 @@ +/********************************************************************** + * Digital Signature Plug-In (Version 1.00) + * Daniel Cotting (cotting@mygale.org) + ********************************************************************** + * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net + * http://village.cyberbrain.com/cotting + ********************************************************************** + */ + + +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include + +#include "libgimp/gimp.h" +#include "gtk/gtk.h" +#include "logo.h" + +#define ENTRY_WIDTH 200 + +typedef struct { + gint mode; + gint licence; + gint contents; + char signature[50]; + char email[30]; + char homepage[50]; + char date[20]; + gint warningmessage; +} signatureValues; + +typedef struct { + gint run; +} signatureInterface; + + +/* Declare local functions. + */ +static void query(void); +static void run(char *name, int nparams, + GParam *param, + int *nreturn_vals, + GParam **return_vals); +static void drawsignature(GDrawable *drawable); +static void readsignature(GDrawable *drawable); +static gint signature_dialog(void); +static gint signature_warning_dialog(void); +static gint message_dialog(char *, char *, char *); +GtkWidget * signature_logo_dialog(void); + + + + +GtkWidget *maindlg; +GtkWidget *logodlg; +GtkTooltips *tips; +GdkColor tips_fg,tips_bg; + +GPlugInInfo PLUG_IN_INFO = +{ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ +}; + +static signatureValues wvals = { + 1,0,0,"","","","",1 +}; /* wvals */ + +static signatureInterface bint = +{ + FALSE /* run */ +}; + + +MAIN() + +static void +query(void) +{ + static GParamDef args[] = + { + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_IMAGE, "image", "Input image (unused)" }, + { PARAM_DRAWABLE, "drawable", "Input drawable" }, + { PARAM_STRING, "signature[50]", "Signature (Name of author, company etc.)" }, + { PARAM_STRING, "e-mail[30]", "e-mail address" }, + { PARAM_STRING, "homepage[50]", "Address of the homepage" }, + { PARAM_STRING, "date[20]", "Date of creation" }, + { PARAM_INT8, "mode", "FALSE: Write signature; TRUE: Read signature" }, + { PARAM_INT8, "licence", "FALSE: Freely distributable; TRUE: Restricted distribution" }, + { PARAM_INT8, "contents", "TRUE: Adult only contents" }, + }; + + static GParamDef *return_vals = NULL; + static int nargs = sizeof(args)/ sizeof(args[0]); + static int nreturn_vals = 0; + + gimp_install_procedure("plug_in_signature", + "Puts a hidden signature on your images.", + "", + "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", + "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", + "December, 1997", + "/Filters/Image/Digital Signature", + "RGB*, GRAY*, INDEXED*", + PROC_PLUG_IN, + nargs, nreturn_vals, + args, return_vals); +} + +static void +run(char *name, + int nparams, + GParam *param, + int *nreturn_vals, + GParam **return_vals) +{ + static GParam values[1]; + GDrawable *drawable; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + gchar **argv; + gint argc; + gint ending=FALSE; + + run_mode = param[0].data.d_int32; + + values[0].type = PARAM_STATUS; + values[0].data.d_status = status; + + *nreturn_vals = 1; + *return_vals = values; + + drawable = gimp_drawable_get(param[2].data.d_drawable); + + switch(run_mode) { + case RUN_INTERACTIVE: + /* Possibly retrieve data */ + gimp_get_data("plug_in_signature", &wvals); + /* Get information from the dialog */ + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_signature"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + + ending=signature_dialog(); + + if (ending==FALSE) return; + if ((wvals.warningmessage) && (ending!=100)) + if (!signature_warning_dialog()) + return; + + if (ending==100) {wvals.mode=1;} else {wvals.mode=0;} + break; + + case RUN_NONINTERACTIVE: + /* Make sure all the arguments are present */ + if (nparams != 10) + status = STATUS_CALLING_ERROR; + if (status == STATUS_SUCCESS) + wvals.mode = param[3].data.d_int8; + strncpy (wvals.signature,param[4].data.d_string, 50); + strncpy (wvals.email,param[5].data.d_string, 30); + strncpy (wvals.homepage,param[6].data.d_string, 50); + strncpy (wvals.date,param[7].data.d_string, 20); + wvals.signature[49]='\0'; + wvals.email[29]='\0'; + wvals.homepage[49]='\0'; + wvals.date[19]='\0'; + + wvals.licence = param[8].data.d_int8; + wvals.contents = param[9].data.d_int8; + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_signature"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + tips = gtk_tooltips_new (); + + break; + case RUN_WITH_LAST_VALS: + /* Possibly retrieve data */ + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_signature"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + tips = gtk_tooltips_new (); + gimp_get_data("plug_in_signature", &wvals); + + break; + default: + break; + } + if (status == STATUS_SUCCESS) { + if (!wvals.mode) { + gimp_tile_cache_ntiles(2 *(drawable->width / gimp_tile_width() + 1)); + gimp_progress_init("Writing signature. Please wait..."); + drawsignature(drawable); + if(run_mode != RUN_NONINTERACTIVE) + gimp_displays_flush(); + if(run_mode == RUN_INTERACTIVE) + gimp_set_data("plug_in_signature", &wvals, sizeof(signatureValues)); + values[0].data.d_status = status; + gimp_drawable_detach(drawable); + } else { + readsignature(drawable); + if(run_mode == RUN_INTERACTIVE) + gimp_set_data("plug_in_signature", &wvals, sizeof(signatureValues)); + values[0].data.d_status = status; + gimp_drawable_detach(drawable); + } + } +} + +static void +drawsignature(GDrawable *drawable) +{ + GPixelRgn srcPR, destPR; + gint width, height; + gint bytes; + gint row; + gint x1, y1, x2, y2, ix, iy; + guchar *src, *dest; + gint i, col; + gint value; + long count=1,smallcount=0; + gfloat regionwidth, regionheight, dx, dy; + gfloat a, b, x, y; + glong pixelpos, pos; + guchar bgr_red, bgr_blue, bgr_green; + char *point; + char *point2; + int finished_atleast_once=0; + + + typedef struct { + char header[3]; + char signature[50]; + char email[30]; + char homepage[50]; + char date[20]; + char flags[1]; + char reserved[45]; + } _wholedata; + + _wholedata wholedata; + wvals.signature[49]='\0'; + wvals.email[29]='\0'; + wvals.homepage[49]='\0'; + wvals.date[19]='\0'; + point2=(char*) &wholedata; + for (i=0;i<200; i++) + { + point2[i]='\0'; + } + strncpy(wholedata.header,"SIG",3); + strncpy(wholedata.signature,wvals.signature,50); + strncpy(wholedata.email,wvals.email,30); + strncpy(wholedata.homepage,wvals.homepage,50); + strncpy(wholedata.date,wvals.date,20); + if (wvals.contents) wholedata.flags[1]|=1; + if (wvals.licence) wholedata.flags[1]|=2; + + gimp_palette_get_background(&bgr_red, &bgr_green, &bgr_blue); + + gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2); + + + regionwidth = x2-x1; + a = regionwidth/2; + regionheight = y2-y1; + b = regionheight/2; + + width = drawable->width; + height = drawable->height; + bytes = drawable->bpp; + + gimp_pixel_rgn_init(&srcPR, drawable, 0, 0, width, height, FALSE, FALSE); + gimp_pixel_rgn_init(&destPR, drawable, 0, 0, width, height, TRUE, TRUE); + + src = g_malloc((x2-x1)*(y2-y1)*bytes); + dest = g_malloc((x2-x1)*(y2-y1)*bytes); + gimp_pixel_rgn_get_rect(&srcPR, src, x1, y1, regionwidth, regionheight); + + point=(char *)&wholedata; + + + for(col = 0; col < regionwidth; col++) { + dx = (gfloat)col - a; + for(row = 0; row < regionheight; row++) { + pixelpos = (col+row*regionwidth)*bytes; + dy = -((gfloat)row - b); + x = dx+a; + y = -dy+b; + ix=(int)x; + iy=(int)y; + smallcount++; + if (smallcount==9) { + count++; + point++; + smallcount=1; + } + if ((count % 200)==0) { point=(char *)&wholedata; finished_atleast_once=1;} + pos = ((gint)(iy)*regionwidth + (gint)(ix)) * bytes; + for(i = 0; i < bytes; i++) { + value = src[pos+i]; + if (point[0]&(1<<(smallcount-1))){ + if (((int)((float)value/2.0))*2==value){ + value+=1; + if (value==257) { value=255; } + } + } else { + if (!(((int)((float)value/2.0))*2==value)){ + value+=1; + if (value==256) { value=254; } + } + } + dest[pixelpos+i] = value; } } + if(((gint)(regionwidth-col) % 5) == 0) + gimp_progress_update((gdouble)col/(gdouble)regionwidth); + } + + gimp_pixel_rgn_set_rect(&destPR, dest, x1, y1, regionwidth, regionheight); + g_free(src); + g_free(dest); + + if (!finished_atleast_once) { + message_dialog("Error", "Could not write signature", "The picture you wanted to process is to small\n" + "to contain the whole signature information.\n" + "Use an image with larger dimensions."); + } else { + message_dialog("Signature written successfully", NULL, "\nYour signature has been written\n" + "successfully! Start the Digital\n" + "Signature plug-in once again and\n" + "select 'read' to view the hidden\n" + "information included in the image.\n"); + } + gimp_drawable_flush(drawable); + gimp_drawable_merge_shadow(drawable->id, TRUE); + gimp_drawable_update(drawable->id, x1, y1,(x2 - x1),(y2 - y1)); +} + +static void +readsignature(GDrawable *drawable) +{ + GPixelRgn srcPR; + gint width, height; + gint bytes; + gint row, value; + gint x1, y1, x2, y2, ix, iy, i; + guchar *src; + gint col, finished_atleast_once=FALSE; + gfloat regionwidth, regionheight, dx, dy; + gfloat a, b, x, y; + glong pixelpos, pos; + guchar bgr_red, bgr_blue, bgr_green; + long count=1,smallcount=0; + char displaystring[500]; + char * point; + char *point2; + typedef struct { + char header[3]; + char signature[50]; + char email[30]; + char homepage[50]; + char date[20]; + char flags[1]; + char reserved[45]; + } _wholedata; + + _wholedata wholedata; + point2=(char*) &wholedata; + for (i=0;i<200; i++) + { + point2[i]='\0'; + } + + gimp_palette_get_background(&bgr_red, &bgr_green, &bgr_blue); + + gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2); + regionwidth = x2-x1; + a = regionwidth/2; + regionheight = y2-y1; + b = regionheight/2; + + width = drawable->width; + height = drawable->height; + bytes = drawable->bpp; + + gimp_pixel_rgn_init(&srcPR, drawable, 0, 0, width, height, FALSE, FALSE); + + src = g_malloc((x2-x1)*(y2-y1)*bytes); + gimp_pixel_rgn_get_rect(&srcPR, src, x1, y1, regionwidth, regionheight); + + point=(char *)&wholedata; + + for(col = 0; col < regionwidth; col++) { + dx = (gfloat)col - a; + for(row = 0; row < regionheight; row++) { + pixelpos = (col+row*regionwidth)*bytes; + dy = -((gfloat)row - b); + x = dx+a; + y = -dy+b; + ix=(int)x; + iy=(int)y; + pos = ((gint)(iy)*regionwidth + (gint)(ix)) * bytes; + + smallcount++; + if (smallcount==9) { + count++; + point++; + smallcount=1; + } + if ((count % 200)==0) {finished_atleast_once=1; goto fin;} + + + value = src[pos]; + if (!(((int)((float)value/2.0))*2==value)){ + point[0]|=(1<<(smallcount-1)); + } + } + } +fin: + g_free(src); + + if (!finished_atleast_once) { + message_dialog("Error", "Could not read signature", "The picture you wanted to process is to small\n" + "to contain the whole signature information.\n" + "Use an image with larger dimensions."); + return; + } + if (strncmp("SIG",wholedata.header,3)) { + message_dialog("Error", "No signature", "The picture you wanted to process contains\n" + "no signature or the signature has been destroyed\n" + "with some image manipulation."); + return; + } + sprintf(displaystring, "----------------------------------\nImage creator:\n%s\n\n" + "E-mail address:\n%s\n\n" + "Internet homepage:\n%s\n\n" + "Date of creation:\n%s\n\n" + "Freely distributable:\n%s\n\n" + "Adult contents:\n%s\n----------------------------------" + , wholedata.signature + , wholedata.email + , wholedata.homepage + , wholedata.date + , (wholedata.flags[1] & 2) ? "Yes" : "No" + , (wholedata.flags[1] & 1) ? "Yes" : "No" + ); + + message_dialog("Signature read successfully", "Image information", displaystring ); +} + +void +signature_close_callback(GtkWidget *widget, gpointer data) +{ + gtk_widget_destroy(maindlg); + gtk_main_quit(); +} + + +void +signature_logo_close_callback(GtkWidget *widget, gpointer data) +{ + gtk_main_quit(); +} + +void +signature_ok_callback(GtkWidget *widget, gpointer data) +{ + bint.run = TRUE; + gtk_widget_destroy(GTK_WIDGET(data)); +} + +void +signature_ok2_callback(GtkWidget *widget, gpointer data) +{ + bint.run = 100; + gtk_widget_destroy(GTK_WIDGET(data)); +} + +void +signature_logo_ok_callback(GtkWidget *widget, gpointer data) +{ + gtk_widget_set_sensitive (maindlg, TRUE); + gtk_widget_destroy(logodlg); +} + +void +signature_about_callback(GtkWidget *widget, gpointer data) +{ + gtk_widget_set_sensitive (maindlg, FALSE); + signature_logo_dialog(); +} + +static void +toggle_update (GtkWidget *widget, + gpointer data) +{ + int *toggle_val; + + toggle_val = (int *) data; + + if (GTK_TOGGLE_BUTTON (widget)->active) + *toggle_val = TRUE; + else + *toggle_val = FALSE; +} + +static void +signature_entry1_callback (GtkWidget * widget, gpointer data) +{ + strncpy (wvals.signature, gtk_entry_get_text (GTK_ENTRY (widget)), 50); +} + +static void +signature_entry2_callback (GtkWidget * widget, gpointer data) +{ + strncpy (wvals.email, gtk_entry_get_text (GTK_ENTRY (widget)), 30); +} +static void +signature_entry3_callback (GtkWidget * widget, gpointer data) +{ + strncpy (wvals.homepage, gtk_entry_get_text (GTK_ENTRY (widget)), 50); +} +static void +signature_entry4_callback (GtkWidget * widget, gpointer data) +{ + strncpy (wvals.date, gtk_entry_get_text (GTK_ENTRY (widget)), 20); +} + +static void +set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc) +{ + if (desc && desc[0]) + gtk_tooltips_set_tips (tooltips, widget, (char *) desc); +} + +static gint +signature_dialog() +{ + GtkWidget *dlg; + GtkWidget *label; + GtkWidget *entry; + GtkWidget *button; + GtkWidget *toggle; + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *hbox; + gchar buffer[100]; + + + bint.run=FALSE; + + dlg = maindlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(dlg), "Digital Signature "); + gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); + gtk_signal_connect(GTK_OBJECT(dlg), "destroy", + (GtkSignalFunc)signature_close_callback, + NULL); + + + + frame = gtk_frame_new("Settings"); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(vbox), 10); + gtk_container_add(GTK_CONTAINER(frame), vbox); + + tips = gtk_tooltips_new (); + /* use black as foreground: */ + tips_fg.red = 0; + tips_fg.green = 0; + tips_fg.blue = 0; + /* postit yellow (khaki) as background: */ + gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_fg); + tips_bg.red = 61669; + tips_bg.green = 59113; + tips_bg.blue = 35979; + gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_bg); + gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + + label = gtk_label_new("Signature: "); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); + gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); + sprintf(buffer, "%s", wvals.signature); + gtk_entry_set_text(GTK_ENTRY(entry), buffer); + + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc)signature_entry1_callback, + NULL); + gtk_widget_show(entry); + set_tooltip(tips,entry,"Here you can specify your signature (name of author, company etc.)"); + + gtk_widget_show(hbox); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + label = gtk_label_new("E-mail: "); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); + gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); + sprintf(buffer, "%s", wvals.email); + gtk_entry_set_text(GTK_ENTRY(entry), buffer); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc)signature_entry2_callback, + NULL); + gtk_widget_show(entry); + set_tooltip(tips,entry,"Here you can specify an e-mail address, where the author/company can be contacted."); + + gtk_widget_show(hbox); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + label = gtk_label_new("Internet address: "); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); + gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); + sprintf(buffer, "%s", wvals.homepage); + gtk_entry_set_text(GTK_ENTRY(entry), buffer); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc)signature_entry3_callback, + NULL); + gtk_widget_show(entry); + set_tooltip(tips,entry,"Here you can specify an internet address, where the homepage of the author/company can be found."); + + gtk_widget_show(hbox); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); + + label = gtk_label_new("Date of creation: "); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); + gtk_widget_show(label); + + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); + gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); + sprintf(buffer, "%s", wvals.date); + gtk_entry_set_text(GTK_ENTRY(entry), buffer); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc)signature_entry4_callback, + NULL); + gtk_widget_show(entry); + set_tooltip(tips,entry,"Here you can specify the date, when the image was created."); + + gtk_widget_show(hbox); + + toggle = gtk_check_button_new_with_label ("Restricted image distribution"); + gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + (GtkSignalFunc) toggle_update, + &wvals.licence); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.licence); + gtk_widget_show (toggle); + set_tooltip(tips,toggle,"If this option is enabled, a flag will be set, that the image is not freely distributable."); + + toggle = gtk_check_button_new_with_label ("Adult contents"); + gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + (GtkSignalFunc) toggle_update, + &wvals.contents); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.contents); + gtk_widget_show (toggle); + set_tooltip(tips,toggle,"If this option is enabled, a flag will be set, that the contents of the image should only be accessible to adults."); + + gtk_widget_show(vbox); + gtk_widget_show(frame); + + button = gtk_button_new_with_label("Write"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)signature_ok_callback, + dlg); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_grab_default(button); + gtk_widget_show(button); + + set_tooltip(tips,button,"Close the dialog box and write signature."); + + button = gtk_button_new_with_label("Read"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)signature_ok2_callback, + dlg); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + + set_tooltip(tips,button,"Close the dialog box and read signature."); + + button = gtk_button_new_with_label("Cancel"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect_object(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)gtk_widget_destroy, + GTK_OBJECT(dlg)); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips,button,"Close the dialog box without reading or writing a signature."); + + button = gtk_button_new_with_label("About..."); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)signature_about_callback,button); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips,button,"Show information about the author and the plug-in."); + + gtk_widget_show(dlg); + + gtk_main(); + gdk_flush(); + + return bint.run; +} + +static gint +message_dialog(char * title, char *title2, char * text) +{ + GtkWidget *dlg; + GtkWidget *label; + GtkWidget *button; + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *hbox; + bint.run=FALSE; + + dlg = gtk_dialog_new(); + /* use black as foreground: */ + tips_fg.red = 0; + tips_fg.green = 0; + tips_fg.blue = 0; + /* postit yellow (khaki) as background: */ + gdk_color_alloc (gtk_widget_get_colormap (dlg), &tips_fg); + tips_bg.red = 61669; + tips_bg.green = 59113; + tips_bg.blue = 35979; + gdk_color_alloc (gtk_widget_get_colormap (dlg), &tips_bg); + gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg); + + gtk_window_set_title(GTK_WINDOW(dlg), title); + gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); + gtk_signal_connect(GTK_OBJECT(dlg), "destroy", + (GtkSignalFunc)signature_close_callback, + NULL); + + + button = gtk_button_new_with_label("OK"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect_object(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)gtk_widget_destroy, + GTK_OBJECT(dlg)); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips,button,"Close this message box and continue"); + + frame = gtk_frame_new(title2); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(vbox), 10); + gtk_container_add(GTK_CONTAINER(frame), vbox); + + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + label = gtk_label_new(text); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); + gtk_widget_show(label); + + gtk_widget_show(hbox); + + gtk_widget_show(vbox); + gtk_widget_show(frame); + gtk_widget_show(dlg); + + gtk_main(); + gdk_flush(); + return 0; +} + + + +static gint +signature_warning_dialog() +{ + GtkWidget *dlg; + GtkWidget *label; + GtkWidget *button; + GtkWidget *toggle; + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *hbox; + bint.run=FALSE; + + dlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(dlg), "Warning"); + gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); + gtk_signal_connect(GTK_OBJECT(dlg), "destroy", + (GtkSignalFunc)signature_close_callback, + NULL); + + button = gtk_button_new_with_label("OK"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)signature_ok_callback, + dlg); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_grab_default(button); + gtk_widget_show(button); + set_tooltip(tips,button,"Proceed with writing the signature."); + + button = gtk_button_new_with_label("Cancel"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect_object(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)gtk_widget_destroy, + GTK_OBJECT(dlg)); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips,button,"Cancel the writing of signature."); + + frame = gtk_frame_new("Please note:"); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), frame, TRUE, TRUE, 0); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(vbox), 10); + gtk_container_add(GTK_CONTAINER(frame), vbox); + + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + label = gtk_label_new("Sensitive Signature Warning:\n\n" + "Remember to save your image in a non-destructive format!\n" + "For indexed images GIF could be a good choice, for RGB\n" + "use BMP/TIFF/TGA etc. Never use a JPEG-compression!\n\n" + "You shouldn't apply any filter to the image after the\n" + "signature has been written. No blur/constrast etc.\n\n" + "This restriction will hopefully be removed in a future\n" + "version of the plug-in (available at cotting.citeweb.net)\n"); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); + gtk_widget_show(label); + + toggle = gtk_check_button_new_with_label ("Show warning message every time"); + gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + (GtkSignalFunc) toggle_update, + &wvals.warningmessage); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.warningmessage); + gtk_widget_show (toggle); + set_tooltip(tips,toggle,"If you want this message to be displayed every time you write a signature, then check this box."); + + gtk_widget_show(hbox); + + gtk_widget_show(vbox); + gtk_widget_show(frame); + gtk_widget_show(dlg); + + gtk_main(); + gdk_flush(); + + return bint.run; +} + +GtkWidget * +signature_logo_dialog() +{ + GtkWidget *xdlg; + GtkWidget *xlabel; + GtkWidget *xbutton; + GtkWidget *xlogo_box; + GtkWidget *xpreview; + GtkWidget *xframe,*xframe2; + GtkWidget *xvbox; + GtkWidget *xhbox; + char *text; + guchar *temp,*temp2; + guchar *datapointer; + gint y,x; + xdlg = logodlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(xdlg), "About"); + gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_MOUSE); + + gtk_signal_connect(GTK_OBJECT(xdlg), "destroy", + (GtkSignalFunc)signature_logo_close_callback, + NULL); + + xbutton = gtk_button_new_with_label("OK"); + GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(xbutton), "clicked", + (GtkSignalFunc)signature_logo_ok_callback, + xdlg); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area), + xbutton, TRUE, TRUE, 0); + gtk_widget_grab_default(xbutton); + gtk_widget_show(xbutton); + set_tooltip(tips,xbutton,"Click here to close the information box."); + + xframe = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(xframe), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0); + xvbox = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(xvbox), 10); + gtk_container_add(GTK_CONTAINER(xframe), xvbox); + + /* The logo frame & drawing area */ + xhbox = gtk_hbox_new (FALSE, 5); + gtk_box_pack_start (GTK_BOX (xvbox), xhbox, FALSE, TRUE, 0); + + xlogo_box = gtk_vbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (xhbox), xlogo_box, FALSE, FALSE, 0); + + xframe2 = gtk_frame_new (NULL); + gtk_frame_set_shadow_type (GTK_FRAME (xframe2), GTK_SHADOW_IN); + gtk_box_pack_start (GTK_BOX (xlogo_box), xframe2, FALSE, FALSE, 0); + + xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); + gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); + temp = g_malloc((logo_width+10)*3); + datapointer=header_data+logo_width*logo_height-1; + for (y = 0; y < logo_height; y++){ + temp2=temp; + for (x = 0; x< logo_width; x++) { + HEADER_PIXEL(datapointer,temp2); temp2+=3;} + gtk_preview_draw_row (GTK_PREVIEW (xpreview), + temp, + 0, y, logo_width); + } + g_free(temp); + gtk_container_add (GTK_CONTAINER (xframe2), xpreview); + gtk_widget_show (xpreview); + gtk_widget_show (xframe2); + gtk_widget_show (xlogo_box); + gtk_widget_show (xhbox); + + xhbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0); + text = "\nCotting Software Productions\n" + "Bahnhofstrasse 31\n" + "CH-3066 Stettlen (Switzerland)\n\n" + "cotting@mygale.org\n" + "http://www.mygale.org/~cotting\n\n" + "Digital Signature\n Plug-In for the GIMP\n" + "Version 1.00\n"; + xlabel = gtk_label_new(text); + gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); + gtk_widget_show(xlabel); + + gtk_widget_show(xhbox); + + gtk_widget_show(xvbox); + gtk_widget_show(xframe); + gtk_widget_show(xdlg); + + gtk_main(); + gdk_flush(); + return xdlg; +} diff --git a/plug-ins/Encript_Decript/doc/doc b/plug-ins/DigitalSignature/INSTALL similarity index 79% rename from plug-ins/Encript_Decript/doc/doc rename to plug-ins/DigitalSignature/INSTALL index 5e53dcbbc9..bebbb6e1dd 100644 --- a/plug-ins/Encript_Decript/doc/doc +++ b/plug-ins/DigitalSignature/INSTALL @@ -1,5 +1,5 @@ ------------------------------------------- - GIMP-Plug-In + GIMP-Plug-In (Digital Signature) ------------------------------------------- Written by Daniel Cotting Bahnhofstrasse 31 @@ -29,16 +29,11 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of - the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. - If you find that the plug-in is still - too big, you can compress the executables - with the gzexe program (if it is avaiable - on your system). To do so, change to the - plug-in directory of the GIMP... + If you find that the plug-in is too big, + you can compress the executables with the + gzexe program (if it is avaiable on your + system). To do so, change to the plug-in + directory of the GIMP... cd /usr/local/lib/gimp/VERSION/plug-ins @@ -53,7 +48,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/DigitalSignature/Makefile.am b/plug-ins/DigitalSignature/Makefile.am new file mode 100644 index 0000000000..4181bdb845 --- /dev/null +++ b/plug-ins/DigitalSignature/Makefile.am @@ -0,0 +1,43 @@ +## Process this file with automake to produce Makefile.in + +pluginlibdir = $(gimpplugindir)/plug-ins + +pluginlib_PROGRAMS = DigitalSignature + +DigitalSignature_SOURCES = \ + DigitalSignature.c logo.h + +INCLUDES = \ + $(X_CFLAGS) \ + -I$(top_srcdir) \ + -I$(includedir) + +LDADD = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la \ + $(X_LIBS) \ + -lc + +DEPS = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la + +DigitalSignature_DEPENDENCIES = $(DEPS) + +.PHONY: files + +files: + @files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \ + echo $$p; \ + done + @for subdir in $(SUBDIRS); do \ + files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \ + for file in $$files; do \ + echo $$subdir/$$file; \ + done; \ + done + + + + + diff --git a/plug-ins/DigitalSignature/README b/plug-ins/DigitalSignature/README new file mode 100644 index 0000000000..bebbb6e1dd --- /dev/null +++ b/plug-ins/DigitalSignature/README @@ -0,0 +1,70 @@ +------------------------------------------- + GIMP-Plug-In (Digital Signature) +------------------------------------------- + Written by Daniel Cotting + Bahnhofstrasse 31 + CH-3066 Stettlen (Switzerland) + + cotting@mygale.org + www.mygale.org/~cotting +------------------------------------------- + Some code is taken out of other plug-ins + written by other authors. +------------------------------------------- + + +------------------------------------------- + INSTALLATION +------------------------------------------- + To install it, you have to edit the + Makefile (change install-path). + Afterwards run make. This will compile + and install the plug-in in the right + directory. Once the new code is installed, + you can run the GIMP and enjoy the new + functions and effects it provides. +------------------------------------------- + + +------------------------------------------- + REDUCE CODE SIZE +------------------------------------------- + If you find that the plug-in is too big, + you can compress the executables with the + gzexe program (if it is avaiable on your + system). To do so, change to the plug-in + directory of the GIMP... + + cd /usr/local/lib/gimp/VERSION/plug-ins + + ...and execute the command... + + gzexe PLUGIN_NAME + + ...and remember to remove the uncompres- + sed binary, which has been renamed to + PLUGIN_NAME~, by running the command: + + rm PLUGIN_NAME~ + + This will result in a code size of about + 20 kB, which isn't too much IMHO. +------------------------------------------ + + +------------------------------------------ + FEEDBACK +------------------------------------------ + I'm interested in any feedback, comments, + bug-reports, suggestions etc. If you + have anything you would like to tell + me, you can write to cotting@mygale.org. + Also have a look at the GIMP-section of + my homepage at www.mygale.org/~cotting. +------------------------------------------ + + Thank you and happy GIMPing! + Daniel Cotting + +------------------------------------------ + \ No newline at end of file diff --git a/plug-ins/DigitalSignature/logo.h b/plug-ins/DigitalSignature/logo.h new file mode 100644 index 0000000000..cb94ec445f --- /dev/null +++ b/plug-ins/DigitalSignature/logo.h @@ -0,0 +1,788 @@ +/* GIMP header image file format (Indexed): //logo.h */ + +static unsigned int logo_width = 200; +static unsigned int logo_height = 72; + +/* Call this macro repeatedly. After each use, the pixel data can be extracted */ + +#define HEADER_PIXEL(data,pixel) \ + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; + +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/Encript_Decript/logo.h b/plug-ins/Encript_Decript/logo.h deleted file mode 100644 index 871a318a06..0000000000 --- a/plug-ins/Encript_Decript/logo.h +++ /dev/null @@ -1,14 +0,0 @@ -/* GIMP header image file format (RGB-only): //logo.h */ - -static unsigned int logo_width = 200; -static unsigned int logo_height = 72; - -/* Call this macro repeatedly. After each use, the pixel data can be extracted */ - -#define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; - -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; diff --git a/plug-ins/Encript_Decript/.cvsignore b/plug-ins/Encrypt_Decrypt/.cvsignore similarity index 67% rename from plug-ins/Encript_Decript/.cvsignore rename to plug-ins/Encrypt_Decrypt/.cvsignore index 655408a73c..8677f04b37 100644 --- a/plug-ins/Encript_Decript/.cvsignore +++ b/plug-ins/Encrypt_Decrypt/.cvsignore @@ -2,4 +2,4 @@ Makefile.in Makefile .deps _libs -Encript_Decript +Encrypt_Decrypt diff --git a/plug-ins/Encript_Decript/Encript_Decript.c b/plug-ins/Encrypt_Decrypt/Encrypt_Decrypt.c similarity index 55% rename from plug-ins/Encript_Decript/Encript_Decript.c rename to plug-ins/Encrypt_Decrypt/Encrypt_Decrypt.c index 5b0b7cff53..410d69dc8c 100644 --- a/plug-ins/Encript_Decript/Encript_Decript.c +++ b/plug-ins/Encrypt_Decrypt/Encrypt_Decrypt.c @@ -1,16 +1,19 @@ /********************************************************************** - * Encript_Decript Plug-In (Version 1.01, first public release) + ATTENTION: Plug-In Arguments Have Been Changed!!!!! + This version will not be fully backwards compatible + with the version 1.0x. Nevertheless it can encrypt and + decrypt version 1.0x images. +**********************************************************************/ + + +/********************************************************************** + * Encrypt_Decrypt Plug-In (Version 2.02) * Daniel Cotting (cotting@mygale.org) ********************************************************************** - * Official Homepage: http://www.mygale.org/~cotting - ********************************************************************** - * Homepages under construction: http://www.chez.com/cotting - * http://www.cyberbrain.com/cotting - * You won't be able to see anything yet, as I don't really have the - * time to build up these two sites :-( - * Have a look at www.mygale.org/~cotting instead! - ********************************************************************** - */ + * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net + * http://village.cyberbrain.com/cotting + *********************************************************************/ /* The GIMP -- an image manipulation program @@ -31,6 +34,11 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/********************************************************************** + * Include files + *********************************************************************/ + #include #include #include @@ -39,39 +47,49 @@ #include "gtk/gtk.h" #include "logo.h" -#define ENTRY_WIDTH 100 +/********************************************************************** + * Define constants + *********************************************************************/ -typedef struct { - gint password; - gint warningmessage; -} EncriptValues; +#define ENTRY_WIDTH 260 +/* Large Prime */ +#define MULT 1103515245l -typedef struct { - gint run; -} EncriptInterface; - - -/* Declare local functions. - */ +/********************************************************************** + * Declare some of the local functions + *********************************************************************/ + static void query(void); static void run(char *name, int nparams, GParam *param, int *nreturn_vals, GParam **return_vals); -static void drawEncript(GDrawable *drawable); -static gint encript_dialog(void); -static gint encript_warning_dialog(void); -static gint encript_enter_dialog(void); -static gint encript_no_last_val_dialog(void); -GtkWidget * encript_logo_dialog(void); +static void drawEncrypt(GDrawable *drawable); +static gint encrypt_dialog(void); +static gint encrypt_warning_dialog(void); +static gint encrypt_enter_dialog(void); +static gint encrypt_no_last_val_dialog(void); +GtkWidget * encrypt_logo_dialog(void); +/********************************************************************** + * Define types of structures + *********************************************************************/ +typedef struct { + char password[128]; + gint warningmessage; + gint compatibility; + gint remember; +} EncryptValues; -GtkWidget *maindlg; -GtkWidget *logodlg; -GtkTooltips *tips; -GdkColor tips_fg,tips_bg; +typedef struct { + gint run; +} EncryptInterface; + +/********************************************************************** + * Define structure and set their values + *********************************************************************/ GPlugInInfo PLUG_IN_INFO = { @@ -81,18 +99,44 @@ GPlugInInfo PLUG_IN_INFO = run, /* run_proc */ }; -static EncriptValues wvals = { - 0,1, +static EncryptValues wvals = { + "Enter password here.",1,0,0, }; /* wvals */ -static EncriptInterface bint = +static EncryptInterface bint = { FALSE /* run */ }; +/********************************************************************** + * Declare global variables + *********************************************************************/ + +GtkWidget *maindlg; +GtkWidget *logodlg; +GtkTooltips *tips; +GdkColor tips_fg,tips_bg; +/* This is initialized with the password or a part of the password. It is + used as the seed value in StandardRandom */ +long Seed; +/* Table for R250 number generator */ +long Table[250]; +/* Increment table - speeds R250 up, but not really needed in this case */ +unsigned char IncrementTable[250]; +/* Two Index values into R250 table */ +unsigned char Index1, Index2; + + +/********************************************************************** + * call MAIN() + *********************************************************************/ MAIN() +/********************************************************************** + * FUNCTION query + *********************************************************************/ + static void query(void) { @@ -101,27 +145,33 @@ query(void) { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, { PARAM_IMAGE, "image", "Input image (unused)" }, { PARAM_DRAWABLE, "drawable", "Input drawable" }, - { PARAM_INT8, "password", "Numeric password (used to encript and decript)" }, + { PARAM_STRING, "password", "Password (used to encrypt and decrypt)" }, { PARAM_INT8, "warning", "Disable warning message toggle (only in RUN_INTERACTIVE)" }, + { PARAM_INT8, "compatibility", "Use version 1.0x compatibility mode" }, + { PARAM_INT8, "remember", "Remember the password after execution" }, }; static GParamDef *return_vals = NULL; static int nargs = sizeof(args)/ sizeof(args[0]); static int nreturn_vals = 0; - gimp_install_procedure("plug_in_encript", - "Encript the image using a code, second call with same code decripts image.", + gimp_install_procedure("plug_in_encrypt", + "Encrypt the image using a code, second call with same code decrypts image.", "", "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", "October, 1997", - "/Filters/Image/Encript & Decript", + "/Filters/Image/Encrypt & Decrypt", "RGB*, GRAY*, INDEXED*", PROC_PLUG_IN, nargs, nreturn_vals, args, return_vals); } +/********************************************************************** + * FUNCTION run + *********************************************************************/ + static void run(char *name, int nparams, @@ -136,6 +186,7 @@ run(char *name, GStatusType status = STATUS_SUCCESS; gchar **argv; gint argc; + int iaa, expression; run_mode = param[0].data.d_int32; @@ -150,60 +201,149 @@ run(char *name, switch(run_mode) { case RUN_INTERACTIVE: /* Possibly retrieve data */ - gimp_get_data("plug_in_encript", &wvals); + gimp_get_data("plug_in_encrypt", &wvals); /* Get information from the dialog */ argc = 1; argv = g_new(gchar *, 1); - argv[0] = g_strdup("apply_encript"); + argv[0] = g_strdup("apply_encrypt"); gtk_init(&argc, &argv); gtk_rc_parse(gimp_gtkrc()); do { - if (!encript_dialog()) + if (!encrypt_dialog()) return; - } while ((wvals.password==0) && (succeeded=encript_enter_dialog())); + expression=((!strcmp(wvals.password,"Enter password here.") || + (wvals.compatibility&&(atoi(wvals.password)==0))) + && (succeeded=encrypt_enter_dialog())); + } while (expression); + if (!succeeded) return; if (wvals.warningmessage) - if (!encript_warning_dialog()) + if (!encrypt_warning_dialog()) return; break; case RUN_NONINTERACTIVE: /* Make sure all the arguments are present */ - if (nparams != 5) + if (nparams != 7) status = STATUS_CALLING_ERROR; - if (status == STATUS_SUCCESS) - wvals.password = param[3].data.d_int8; + if (status == STATUS_SUCCESS) { + strcpy(wvals.password,param[3].data.d_string); wvals.warningmessage = param[4].data.d_int8; + wvals.compatibility = param[5].data.d_int8; + wvals.remember = param[6].data.d_int8; + } break; case RUN_WITH_LAST_VALS: /* Possibly retrieve data */ - gimp_get_data("plug_in_encript", &wvals); - encript_no_last_val_dialog(); - return; + gimp_get_data("plug_in_encrypt", &wvals); + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_encrypt"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + if (!wvals.remember) { + encrypt_no_last_val_dialog(); + return; + } break; default: break; } if (status == STATUS_SUCCESS) { gimp_tile_cache_ntiles(2 *(drawable->width / gimp_tile_width() + 1)); - gimp_progress_init("Encripting Image. Please wait..."); - drawEncript(drawable); -/* Delete active Password */ - wvals.password=0; + gimp_progress_init("Encrypting image. Please wait..."); + drawEncrypt(drawable); + if (!wvals.remember){ + /* Delete active Password */ + for (iaa=0; iaa<128; iaa++) wvals.password[iaa] = 0; + } if(run_mode != RUN_NONINTERACTIVE) gimp_displays_flush(); if(run_mode == RUN_INTERACTIVE) - gimp_set_data("plug_in_encript", &wvals, sizeof(EncriptValues)); + gimp_set_data("plug_in_encrypt", &wvals, sizeof(EncryptValues)); values[0].data.d_status = status; gimp_drawable_detach(drawable); } } + + +/********************************************************************** + * FUNCTIONS for the random number generator + *********************************************************************/ + +/* Code provided by Pascal Schuppli, Worb (Switzerland) + Fast high security encryption based on two 'random' number generators + Sets up the increment table and the two index pointers */ +void InitGenerator() { + int i; + for (i=0; i<249; i++) IncrementTable[i] = i+1; + IncrementTable[249] = 0; + Index1 = 0; + Index2 = 103; +} + +/* StandardRandom is used to initialize the R250 random number table. It is + neither fast nor very good. */ +long StandardRandom() { + + unsigned long lo, hi, ll, lh, hh, hl; + + lo = Seed & 0xFFFF; + hi = Seed >> 16; + Seed = Seed * MULT + 12345; + ll = lo*(MULT & 0xFFFF); + lh = lo*(MULT >> 16); + hl = hi*(MULT & 0xFFFF); + hh = hi*(MULT >> 16); + return ((ll + 12345) >> 16) + lh + hl + (hh << 16); +} + +/* Fill R250 table. Use two seeds (64 bit encoding) + This is where most of the processing power goes when trying to break an + encrypted file. Because StandardRandom is not very fast, and because it is + called 500 times, this takes the CPU a couple thousand cycles. The table + needed to decrypt a file thus can't be constructed without serious delays, + which is the whole point of high security encryption. */ +void FillTable(long FirstSeed, long SecondSeed) { + int i; + /* Construct table with first seed */ + Seed = FirstSeed; + for (i=0; i<250; i++) + Table[i] = StandardRandom(); + + /* Xor second seed into table. Not sure whether this makes the random numbers + better or worse, but it takes time */ + Seed = SecondSeed; + for (i=0; i<250; i++) + Table[i] ^= StandardRandom(); + +} + +/* Returns a four-byte random number generated by 'xoring' two table entries */ +unsigned long R250Random() { + unsigned long ret; + ret = (Table[Index1] ^= Table[Index2]); + + Index1 = IncrementTable[Index1]; + Index2 = IncrementTable[Index2]; + return ret; +} + +/********************************************************************** + * FUNCTION drawEncrypt + *********************************************************************/ + static void -drawEncript(GDrawable *drawable) +drawEncrypt(GDrawable *drawable) { + char Password[128]; + + /* Take some primes to start with */ + long s1 = 17, s2 = 23; + GPixelRgn srcPR, destPR; gint width, height; gint bytes; @@ -216,7 +356,33 @@ drawEncript(GDrawable *drawable) gfloat a, b, x, y; glong pixelpos, pos; guchar bgr_red, bgr_blue, bgr_green; + + if (!wvals.compatibility){ + for (i=0; i<128; i++) Password[i] = 1; + strcpy(Password, wvals.password); + InitGenerator(); + + /* The hash algorithm should make sure that the hash codes it generates + differ so that code breakers cannot concentrate on a certain range of + seeds to speed up the process of breaking the code. + + Hash up keyword, -> create two four-byte seeds */ + + for (i=0; i=0; i--) { + s2 ^= *(long *)&Password[i]; + s2 <<= 3; + } + + /* Generate table with hash value */ + FillTable(s1, s2); + } + + gimp_palette_get_background(&bgr_red, &bgr_green, &bgr_blue); gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2); @@ -235,9 +401,10 @@ drawEncript(GDrawable *drawable) src = g_malloc((x2-x1)*(y2-y1)*bytes); dest = g_malloc((x2-x1)*(y2-y1)*bytes); gimp_pixel_rgn_get_rect(&srcPR, src, x1, y1, regionwidth, regionheight); - - password=wvals.password; - srand(password); + if (wvals.compatibility) { + password=atoi(wvals.password); + srand(password); + } for(col = 0; col < regionwidth; col++) { dx = (gfloat)col - a; for(row = 0; row < regionheight; row++) { @@ -249,7 +416,12 @@ drawEncript(GDrawable *drawable) iy=(int)y; pos = ((gint)(iy)*regionwidth + (gint)(ix)) * bytes; for(i = 0; i < bytes; i++) { - dest[pixelpos+i] = src[pos+i] ^(int)(rand()*255)^(int)(rand()*255); } + if (!wvals.compatibility) { + dest[pixelpos+i] = src[pos+i]^R250Random(); + } else { + dest[pixelpos+i] = src[pos+i] ^(int)(rand()*255)^(int)(rand()*255); + } + } } if(((gint)(regionwidth-col) % 5) == 0) gimp_progress_update((gdouble)col/(gdouble)regionwidth); @@ -264,32 +436,42 @@ drawEncript(GDrawable *drawable) gimp_drawable_update(drawable->id, x1, y1,(x2 - x1),(y2 - y1)); } +/********************************************************************** + * FUNCTIONS: callbacks + *********************************************************************/ + static void -encript_close_callback(GtkWidget *widget, gpointer data) +encrypt_close_callback(GtkWidget *widget, gpointer data) { gtk_main_quit(); } static void -encript_ok_callback(GtkWidget *widget, gpointer data) +encrypt_ok_callback(GtkWidget *widget, gpointer data) { bint.run = TRUE; gtk_widget_destroy(GTK_WIDGET (data)); } static void -encript_logo_ok_callback(GtkWidget *widget, gpointer data) +encrypt_logo_ok_callback(GtkWidget *widget, gpointer data) { gtk_widget_set_sensitive (maindlg, TRUE); gtk_widget_destroy(logodlg); } static void -encript_about_callback(GtkWidget *widget, gpointer data) +encrypt_about_callback(GtkWidget *widget, gpointer data) { gtk_widget_set_sensitive (maindlg, FALSE); - encript_logo_dialog(); + encrypt_logo_dialog(); +} + +static void +encrypt_entry_callback(GtkWidget *widget, gpointer data) +{ + strcpy(wvals.password,gtk_entry_get_text(GTK_ENTRY(widget))); } static void @@ -306,11 +488,9 @@ toggle_update (GtkWidget *widget, *toggle_val = FALSE; } -static void -encript_entry_callback(GtkWidget *widget, gpointer data) -{ - wvals.password = atof(gtk_entry_get_text(GTK_ENTRY(widget))); -} +/********************************************************************** + * FUNCTION set_tooltip + *********************************************************************/ static void set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc) @@ -319,8 +499,12 @@ set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc) gtk_tooltips_set_tips (tooltips, widget, (char *) desc); } +/********************************************************************** + * FUNCTIONS: encrypt_dialog + *********************************************************************/ + static gint -encript_dialog() +encrypt_dialog() { GtkWidget *dlg; GtkWidget *label; @@ -330,17 +514,18 @@ encript_dialog() GtkWidget *frame; GtkWidget *vbox; GtkWidget *hbox; - gchar buffer[12]; + gchar buffer[128]; bint.run=FALSE; + + dlg = maindlg = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(dlg), "Encript&Decript (cotting@mygale.org)"); + gtk_window_set_title(GTK_WINDOW(dlg), "Encrypt & Decrypt "); gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT(dlg), "destroy", - (GtkSignalFunc)encript_close_callback, + (GtkSignalFunc)encrypt_close_callback, NULL); - frame = gtk_frame_new("Parameter Settings"); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); gtk_container_border_width(GTK_CONTAINER(frame), 10); @@ -349,19 +534,38 @@ encript_dialog() gtk_container_border_width(GTK_CONTAINER(vbox), 10); gtk_container_add(GTK_CONTAINER(frame), vbox); - /* use black as foreground: */ - tips = gtk_tooltips_new (); - tips_fg.red = 0; - tips_fg.green = 0; - tips_fg.blue = 0; - /* postit yellow (khaki) as background: */ - gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_fg); - tips_bg.red = 61669; - tips_bg.green = 59113; - tips_bg.blue = 35979; - gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_bg); - gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg); + /* use black as foreground: */ + tips = gtk_tooltips_new (); + tips_fg.red = 0; + tips_fg.green = 0; + tips_fg.blue = 0; + /* postit yellow (khaki) as background: */ + gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_fg); + tips_bg.red = 61669; + tips_bg.green = 59113; + tips_bg.blue = 35979; + gdk_color_alloc (gtk_widget_get_colormap (frame), &tips_bg); + gtk_tooltips_set_colors (tips,&tips_bg,&tips_fg); + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + label = gtk_label_new("Password: "); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); + gtk_widget_show(label); + + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, FALSE, 0); + gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); + sprintf(buffer, "%s", wvals.password); + gtk_entry_set_text(GTK_ENTRY(entry), buffer); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc)encrypt_entry_callback, + NULL); + gtk_widget_show(entry); + set_tooltip(tips,entry,"Here, you can specify your password. To decrypt your image, just enter the value you used for the encryption. Unless you use version 1.0x compatibility (numeric passwords), the password can contain any characters."); + + gtk_widget_show(hbox); toggle = gtk_check_button_new_with_label ("Show warning message"); gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); @@ -370,27 +574,25 @@ encript_dialog() &wvals.warningmessage); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.warningmessage); gtk_widget_show (toggle); - set_tooltip(tips,toggle,"If this option is enabled, a warning message will be displayed every time you encript/decript an image. Make sure to read these warnings at least once."); + set_tooltip(tips,toggle,"If this option is enabled, a warning message will be displayed every time you encrypt/decrypt an image. Make sure to read these warnings at least once."); - hbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + toggle = gtk_check_button_new_with_label ("Enable version 1.0x compatibility"); + gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + (GtkSignalFunc) toggle_update, + &wvals.compatibility); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.compatibility); + gtk_widget_show (toggle); + set_tooltip(tips,toggle,"If this option is enabled, the encryption/decryption will be compatible with the version 1.0x plug-in."); - label = gtk_label_new("Numeric password (Integer): "); - gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); - gtk_widget_show(label); - - entry = gtk_entry_new(); - gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); - gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); - sprintf(buffer, "%i", wvals.password); - gtk_entry_set_text(GTK_ENTRY(entry), buffer); - gtk_signal_connect(GTK_OBJECT(entry), "changed", - (GtkSignalFunc)encript_entry_callback, - NULL); - gtk_widget_show(entry); - set_tooltip(tips,entry,"Here, you can specify your numeric password. To decript your image, just enter the value you used for the encription."); - - gtk_widget_show(hbox); + toggle = gtk_check_button_new_with_label ("Remember password"); + gtk_box_pack_start(GTK_BOX(vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (toggle), "toggled", + (GtkSignalFunc) toggle_update, + &wvals.remember); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.remember); + gtk_widget_show (toggle); + set_tooltip(tips,toggle,"If this option is enabled, the password will be remembered for a further encryption/decryption."); gtk_widget_show(vbox); gtk_widget_show(frame); @@ -398,14 +600,14 @@ encript_dialog() button = gtk_button_new_with_label("OK"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)encript_ok_callback, + (GtkSignalFunc)encrypt_ok_callback, dlg); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); gtk_widget_grab_default(button); gtk_widget_show(button); - set_tooltip(tips,button,"Close the dialog box and encript/decript your image with the specified password."); + set_tooltip(tips,button,"Close the dialog box and encrypt/decrypt your image with the specified password."); button = gtk_button_new_with_label("Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); @@ -420,7 +622,7 @@ encript_dialog() button = gtk_button_new_with_label("About..."); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)encript_about_callback,button); + (GtkSignalFunc)encrypt_about_callback,button); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); gtk_widget_show(button); @@ -434,8 +636,12 @@ encript_dialog() return bint.run; } +/********************************************************************** + * FUNCTION encrypt_warning_dialog + *********************************************************************/ + static gint -encript_warning_dialog() +encrypt_warning_dialog() { GtkWidget *dlg; GtkWidget *label; @@ -450,19 +656,19 @@ encript_warning_dialog() gtk_window_set_title(GTK_WINDOW(dlg), "Warning"); gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT(dlg), "destroy", - (GtkSignalFunc)encript_close_callback, + (GtkSignalFunc)encrypt_close_callback, NULL); button = gtk_button_new_with_label("OK"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)encript_ok_callback, + (GtkSignalFunc)encrypt_ok_callback, dlg); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); gtk_widget_grab_default(button); gtk_widget_show(button); - set_tooltip(tips,button,"Proceed with the encription/decription."); + set_tooltip(tips,button,"Proceed with the encryption/decryption."); button = gtk_button_new_with_label("Cancel"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); @@ -472,7 +678,7 @@ encript_warning_dialog() gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); gtk_widget_show(button); - set_tooltip(tips,button,"Cancel the encription/decription."); + set_tooltip(tips,button,"Cancel the encryption/decryption."); frame = gtk_frame_new("Please note:"); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); @@ -485,21 +691,35 @@ encript_warning_dialog() hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); - - label = gtk_label_new("This plug-in uses a numeric password to encript your image.\n\n" + + if (wvals.compatibility) { + label = gtk_label_new("Version 1.0x compatibility mode:\n\n" + "This plug-in uses a numeric password to encrypt your image.\n\n" "Although it has been tested thoroughly, the author cannot be\n" "sure that it will work properly in all circumstances. Therefore\n" "the author doesn't want to take any responsibility in case of\n" - "data loss or any other damage, this plug-in could occasion.\n\n" + "data loss or any other damage this plug-in could cause.\n\n" "*******USE IT AT YOUR OWN RISK (AND ENJOY IT)!*******\n\n" "The plug-in could fail in the following situations, because of\n" "a possibly different implementation of the random number\n" - "generator: - Encript a picture and decript it on a different\n" - "plattform. OR - Decript a picture that was encripted on a\n" + "generator: - Encrypt a picture and decrypt it on a different\n" + "plattform. OR - Decrypt a picture that was encrypted on a\n" "computer with a different OS-version or a different math-lib.\n\n" "Remember to save your image in a non-destructive format!\n" "For indexed images GIF could be a good choice, for RGB\n" - "use BMP/TIFF/TGA etc. Never use a JPEG-compression!\n\n"); + "use BMP/TIFF/TGA etc. Never use a JPEG-compression!\n"); + } else { + label = gtk_label_new("This plug-in uses a password to encrypt your image.\n\n" + "Although it has been tested thoroughly, the author cannot be\n" + "sure that it will work properly in all circumstances. Therefore\n" + "the author doesn't want to take any responsibility in case of\n" + "data loss or any other damage this plug-in could cause.\n\n" + "*******USE IT AT YOUR OWN RISK (AND ENJOY IT)!*******\n\n" + "Remember to save your image in a non-destructive format!\n" + "For indexed images GIF could be a good choice, for RGB\n" + "use BMP/TIFF/TGA etc. Never use a JPEG-compression!\n"); + + } gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); gtk_widget_show(label); @@ -510,7 +730,7 @@ encript_warning_dialog() &wvals.warningmessage); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), wvals.warningmessage); gtk_widget_show (toggle); - set_tooltip(tips,toggle,"If you want this message to be displayed every time you encript/decript an image, then check this box."); + set_tooltip(tips,toggle,"If you want this message to be displayed every time you encrypt/decrypt an image, then check this box."); gtk_widget_show(hbox); @@ -524,8 +744,13 @@ encript_warning_dialog() return bint.run; } + +/********************************************************************** + * FUNCTION encrypt_enter_dialog + *********************************************************************/ + static gint -encript_enter_dialog() +encrypt_enter_dialog() { GtkWidget *dlg; GtkWidget *label; @@ -538,13 +763,13 @@ encript_enter_dialog() gtk_window_set_title(GTK_WINDOW(dlg), "Warning"); gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT(dlg), "destroy", - (GtkSignalFunc)encript_close_callback, + (GtkSignalFunc)encrypt_close_callback, NULL); button = gtk_button_new_with_label("OK"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)encript_ok_callback, + (GtkSignalFunc)encrypt_ok_callback, dlg); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); @@ -560,7 +785,7 @@ encript_enter_dialog() gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); gtk_widget_show(button); - set_tooltip(tips,button,"Cancel process of encription/decription."); + set_tooltip(tips,button,"Cancel process of encryption/decryption."); frame = gtk_frame_new("Password needed:"); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); @@ -574,9 +799,12 @@ encript_enter_dialog() hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); - label = gtk_label_new("You have not entered a valid non-zero password.\n\n" + label = gtk_label_new("You have not entered a valid, personalized password.\n" + "If you want to use the version 1.0x compatibility\n" + "mode, make sure that the password consists only of\n" + "numerical characters (0-9).\n\n" "Choose OK to repeat your password selection.\n" - "Choose CANCEL to abort the encription.\n"); + "Choose CANCEL to abort the encryption.\n"); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); gtk_widget_show(label); @@ -592,8 +820,13 @@ encript_enter_dialog() return bint.run; } + +/********************************************************************** + * FUNCTION encrypt_no_last_val_dialog + *********************************************************************/ + static gint -encript_no_last_val_dialog() +encrypt_no_last_val_dialog() { GtkWidget *dlg; GtkWidget *label; @@ -606,13 +839,13 @@ encript_no_last_val_dialog() gtk_window_set_title(GTK_WINDOW(dlg), "Error"); gtk_window_position(GTK_WINDOW(dlg), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT(dlg), "destroy", - (GtkSignalFunc)encript_close_callback, + (GtkSignalFunc)encrypt_close_callback, NULL); button = gtk_button_new_with_label("OK"); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)encript_ok_callback, + (GtkSignalFunc)encrypt_ok_callback, dlg); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), button, TRUE, TRUE, 0); @@ -631,9 +864,11 @@ encript_no_last_val_dialog() hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); - label = gtk_label_new("For security reasons, the password is not saved\n" - "for later use. That's why this plug-in cannot be\n" - "executed with the last values.\n"); + label = gtk_label_new("For security reasons, the last password has not\n" + "been saved for further use. Thus the plug-in cannot\n" + "be executed in non-interactive mode. If you want to\n" + "be able to do this, enable the option 'remember password'\n" + "in the dialog box of the plug-in.\n"); gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, FALSE, 0); gtk_widget_show(label); @@ -649,11 +884,12 @@ encript_no_last_val_dialog() return bint.run; } - - +/********************************************************************** + * FUNCTION encrypt_logo_dialog + *********************************************************************/ GtkWidget * -encript_logo_dialog() +encrypt_logo_dialog() { GtkWidget *xdlg; GtkWidget *xlabel; @@ -664,20 +900,20 @@ encript_logo_dialog() GtkWidget *xvbox; GtkWidget *xhbox; char *text; - gchar *temp,*temp2; - char *datapointer; + guchar *temp,*temp2; + guchar *datapointer; gint y,x; xdlg = logodlg = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(xdlg), "About"); gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT(xdlg), "destroy", - (GtkSignalFunc)encript_close_callback, + (GtkSignalFunc)encrypt_close_callback, NULL); xbutton = gtk_button_new_with_label("OK"); GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT(xbutton), "clicked", - (GtkSignalFunc)encript_logo_ok_callback, + (GtkSignalFunc)encrypt_logo_ok_callback, xdlg); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area), xbutton, TRUE, TRUE, 0); @@ -707,7 +943,7 @@ encript_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { @@ -730,8 +966,8 @@ encript_logo_dialog() "CH-3066 Stettlen (Switzerland)\n\n" "cotting@mygale.org\n" "http://www.mygale.org/~cotting\n\n" - "Encript & Decript\n Plug-In for the GIMP\n" - "Version 1.01\n"; + "Encrypt & Decrypt\n Plug-In for the GIMP\n" + "Version 2.02\n"; xlabel = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); gtk_widget_show(xlabel); @@ -746,3 +982,5 @@ encript_logo_dialog() gdk_flush(); return xdlg; } + + diff --git a/plug-ins/Encript_Decript/INSTALL b/plug-ins/Encrypt_Decrypt/INSTALL similarity index 89% rename from plug-ins/Encript_Decript/INSTALL rename to plug-ins/Encrypt_Decrypt/INSTALL index 5e53dcbbc9..ab99ad8988 100644 --- a/plug-ins/Encript_Decript/INSTALL +++ b/plug-ins/Encrypt_Decrypt/INSTALL @@ -29,14 +29,12 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 2.02 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables - with the gzexe program (if it is avaiable + with the gzexe program (if it is available on your system). To do so, change to the plug-in directory of the GIMP... @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/Encript_Decript/Makefile.am b/plug-ins/Encrypt_Decrypt/Makefile.am similarity index 83% rename from plug-ins/Encript_Decript/Makefile.am rename to plug-ins/Encrypt_Decrypt/Makefile.am index b498a63e0a..e1daf85a17 100644 --- a/plug-ins/Encript_Decript/Makefile.am +++ b/plug-ins/Encrypt_Decrypt/Makefile.am @@ -2,10 +2,10 @@ pluginlibdir = $(gimpplugindir)/plug-ins -pluginlib_PROGRAMS = Encript_Decript +pluginlib_PROGRAMS = Encrypt_Decrypt -Encript_Decript_SOURCES = \ - Encript_Decript.c logo.h +Encrypt_Decrypt_SOURCES = \ + Encrypt_Decrypt.c logo.h INCLUDES = \ $(X_CFLAGS) \ @@ -22,7 +22,7 @@ DEPS = \ $(top_builddir)/libgimp/libgimpui.la \ $(top_builddir)/libgimp/libgimp.la -Encript_Decript_DEPENDENCIES = $(DEPS) +Encrypt_Decrypt_DEPENDENCIES = $(DEPS) .PHONY: files diff --git a/plug-ins/Encript_Decript/README b/plug-ins/Encrypt_Decrypt/README similarity index 89% rename from plug-ins/Encript_Decript/README rename to plug-ins/Encrypt_Decrypt/README index 5e53dcbbc9..ab99ad8988 100644 --- a/plug-ins/Encript_Decript/README +++ b/plug-ins/Encrypt_Decrypt/README @@ -29,14 +29,12 @@ ------------------------------------------- REDUCE CODE SIZE ------------------------------------------- - With this new release 1.01 the size of + With this new release 2.02 the size of the logo in the about box has been reduced - in order to make smaller binaries. In - general the compiled plug-in will be - about 25-30% of the size of version 1.00. + in order to make smaller binaries. If you find that the plug-in is still too big, you can compress the executables - with the gzexe program (if it is avaiable + with the gzexe program (if it is available on your system). To do so, change to the plug-in directory of the GIMP... @@ -53,7 +51,7 @@ rm PLUGIN_NAME~ This will result in a code size of about - 35 to 40 kB, which isn't too much IMHO. + 20 kB, which isn't too much IMHO. ------------------------------------------ diff --git a/plug-ins/Encrypt_Decrypt/logo.h b/plug-ins/Encrypt_Decrypt/logo.h new file mode 100644 index 0000000000..cb94ec445f --- /dev/null +++ b/plug-ins/Encrypt_Decrypt/logo.h @@ -0,0 +1,788 @@ +/* GIMP header image file format (Indexed): //logo.h */ + +static unsigned int logo_width = 200; +static unsigned int logo_height = 72; + +/* Call this macro repeatedly. After each use, the pixel data can be extracted */ + +#define HEADER_PIXEL(data,pixel) \ + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; + +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/FractalExplorer/.cvsignore b/plug-ins/FractalExplorer/.cvsignore new file mode 100644 index 0000000000..d3267e4231 --- /dev/null +++ b/plug-ins/FractalExplorer/.cvsignore @@ -0,0 +1,5 @@ +Makefile.in +Makefile +.deps +_libs +FractalExplorer diff --git a/plug-ins/FractalExplorer/Callbacks.h b/plug-ins/FractalExplorer/Callbacks.h new file mode 100644 index 0000000000..f0f25790f2 --- /dev/null +++ b/plug-ins/FractalExplorer/Callbacks.h @@ -0,0 +1,362 @@ +/********************************************************************** + FUNCTION: dialog_close_callback + *********************************************************************/ + +void +dialog_close_callback(GtkWidget * widget, gpointer data) +{ + gtk_main_quit(); +} /* dialog_close_callback */ + +/********************************************************************** + FUNCTION: dialog_save_callback + *********************************************************************/ + +void +dialog_save_callback(GtkWidget * widget, gpointer data) +{ + create_file_selection(); +} /* dialog_save_callback */ + +/********************************************************************** + FUNCTION: dialog_savelanguage_callback + *********************************************************************/ + +void +dialog_savelanguage_callback(GtkWidget * widget, gpointer data) +{ + FILE * fp; + char * filname=NULL; + filname =g_malloc(100); + sprintf (filname, "%s%s", getenv("HOME"), "/.fractalexplorerrc"); + lng=wvals.language; + fp = fopen (filname, "w"); + if (fp) { + if (lng==0) fputs("FX-LANG:En\n",fp); + if (lng==1) fputs("FX-LANG:Fr\n",fp); + if (lng==2) fputs("FX-LANG:De\n",fp); + fclose(fp); + } + +} /* dialog_savelanguage_callback */ + + +/********************************************************************** + FUNCTION: load_button_press + *********************************************************************/ + +void +load_button_press(GtkWidget * widget, + gpointer data) +{ + create_load_file_selection(); +} + + +/********************************************************************** + FUNCTION: dialog_ok_callback + *********************************************************************/ + +void +dialog_ok_callback(GtkWidget * widget, gpointer data) +{ + wint.run = TRUE; + gtk_widget_destroy(GTK_WIDGET(data)); +} /* dialog_ok_callback */ + +/********************************************************************** + FUNCTION: dialog_reset_callback + *********************************************************************/ + +void +dialog_reset_callback(GtkWidget * widget, gpointer data) +{ + wvals.xmin = standardvals.xmin; + wvals.xmax = standardvals.xmax; + wvals.ymin = standardvals.ymin; + wvals.ymax = standardvals.ymax; + wvals.iter = standardvals.iter; + wvals.cx = standardvals.cx; + wvals.cy = standardvals.cy; + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); +} + +/********************************************************************** + FUNCTION: dialog_redraw_callback + *********************************************************************/ + +void +dialog_redraw_callback(GtkWidget * widget, gpointer data) +{ + int alwaysprev = wvals.alwayspreview; + wvals.alwayspreview = TRUE; + set_cmap_preview(); + dialog_update_preview(); + wvals.alwayspreview = alwaysprev; +} + +/********************************************************************** + FUNCTION: dialog_cancel_callback + *********************************************************************/ + +void +dialog_cancel_callback(GtkWidget * widget, gpointer data) +{ + gtk_widget_destroy(GTK_WIDGET(data)); +} /* dialog_cancel_callback */ + +/********************************************************************** + FUNCTION: dialog_undo_zoom_callback + *********************************************************************/ + +void +dialog_undo_zoom_callback(GtkWidget * widget, gpointer data) +{ + if (zoomindex > 1) { + zooms[zoomindex] = wvals; + zoomindex--; + wvals = zooms[zoomindex]; + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); + } +} /* dialog_undo_zoom_callback */ + +/********************************************************************** + FUNCTION: dialog_redo_zoom_callback + *********************************************************************/ + +void +dialog_redo_zoom_callback(GtkWidget * widget, gpointer data) +{ + if (zoomindex < zoommax) { + zoomindex++; + wvals = zooms[zoomindex]; + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); + } +} /* dialog_redo_zoom_callback */ + +/********************************************************************** + FUNCTION: dialog_step_in_callback + *********************************************************************/ + +void +dialog_step_in_callback(GtkWidget * widget, gpointer data) +{ + double xdifferenz; + double ydifferenz; + if (zoomindex < zoommax) { + zooms[zoomindex]=wvals; + zoomindex++; + } + xdifferenz=wvals.xmax-wvals.xmin; + ydifferenz=wvals.ymax-wvals.ymin; + wvals.xmin+=1.0/6.0*xdifferenz; + wvals.ymin+=1.0/6.0*ydifferenz; + wvals.xmax-=1.0/6.0*xdifferenz; + wvals.ymax-=1.0/6.0*ydifferenz; + zooms[zoomindex]=wvals; + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); +} /* dialog_step_in_callback */ + +/********************************************************************** + FUNCTION: dialog_step_out_callback + *********************************************************************/ + +void +dialog_step_out_callback(GtkWidget * widget, gpointer data) +{ + double xdifferenz; + double ydifferenz; + if (zoomindex < zoommax) { + zooms[zoomindex]=wvals; + zoomindex++; + } + xdifferenz=wvals.xmax-wvals.xmin; + ydifferenz=wvals.ymax-wvals.ymin; + wvals.xmin-=1.0/4.0*xdifferenz; + wvals.ymin-=1.0/4.0*ydifferenz; + wvals.xmax+=1.0/4.0*xdifferenz; + wvals.ymax+=1.0/4.0*ydifferenz; + zooms[zoomindex]=wvals; + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); +} /* dialog_step_out_callback */ + +/********************************************************************** + FUNCTION: explorer_logo_ok_callback + *********************************************************************/ + +void +explorer_logo_ok_callback(GtkWidget * widget, gpointer data) +{ + gtk_widget_set_sensitive(maindlg, TRUE); + gtk_widget_destroy(logodlg); +} + +/********************************************************************** + FUNCTION: explorer_about_callback + *********************************************************************/ + +void +explorer_about_callback(GtkWidget * widget, gpointer data) +{ + gtk_widget_set_sensitive(maindlg, FALSE); + explorer_logo_dialog(); +} + +/********************************************************************** + FUNCTION: explorer_toggle_update + *********************************************************************/ + +void +explorer_toggle_update(GtkWidget * widget, + gpointer data) +{ + int *toggle_val; + + toggle_val = (int *) data; + + if (GTK_TOGGLE_BUTTON(widget)->active) + *toggle_val = TRUE; + else + *toggle_val = FALSE; + + if (do_redsinus) + wvals.redmode = SINUS; + else if (do_redcosinus) + wvals.redmode = COSINUS; + else if (do_rednone) + wvals.redmode = NONE; + + if (do_greensinus) + wvals.greenmode = SINUS; + else if (do_greencosinus) + wvals.greenmode = COSINUS; + else if (do_greennone) + wvals.greenmode = NONE; + + if (do_bluesinus) + wvals.bluemode = SINUS; + else if (do_bluecosinus) + wvals.bluemode = COSINUS; + else if (do_bluenone) + wvals.bluemode = NONE; + + if (do_colormode1) + wvals.colormode = 0; + else if (do_colormode2) + wvals.colormode = 1; + + if (do_english) + wvals.language = 0; + else if (do_french) + wvals.language = 1; + else if (do_german) + wvals.language = 2; + + + if (do_type0) + wvals.fractaltype = 0; + else if (do_type1) + wvals.fractaltype = 1; + else if (do_type2) + wvals.fractaltype = 2; + else if (do_type3) + wvals.fractaltype = 3; + else if (do_type4) + wvals.fractaltype = 4; + else if (do_type5) + wvals.fractaltype = 5; + else if (do_type6) + wvals.fractaltype = 6; + else if (do_type7) + wvals.fractaltype = 7; + else if (do_type8) + wvals.fractaltype = 8; + + set_cmap_preview(); + dialog_update_preview(); +} + +/********************************************************************** + FUNCTION: dialog_scale_update + *********************************************************************/ + +void +dialog_scale_update(GtkAdjustment * adjustment, gdouble * value) +{ + GtkWidget *entry; + char buf[256]; + + if (*value != adjustment->value) { + *value = adjustment->value; + + entry = gtk_object_get_user_data(GTK_OBJECT(adjustment)); + sprintf(buf, "%0.15f", *value); + + gtk_signal_handler_block_by_data(GTK_OBJECT(entry), value); + gtk_entry_set_text(GTK_ENTRY(entry), buf); + gtk_signal_handler_unblock_by_data(GTK_OBJECT(entry), value); + + dialog_update_preview(); + } +} /* dialog_scale_update */ + +/********************************************************************** + FUNCTION: dialog_scale_int_update + *********************************************************************/ + +void +dialog_scale_int_update(GtkAdjustment * adjustment, gdouble * value) +{ + GtkWidget *entry; + char buf[256]; + + if (*value != adjustment->value) { + *value = adjustment->value; + + entry = gtk_object_get_user_data(GTK_OBJECT(adjustment)); + sprintf(buf, "%i", (int) *value); + + gtk_signal_handler_block_by_data(GTK_OBJECT(entry), value); + gtk_entry_set_text(GTK_ENTRY(entry), buf); + gtk_signal_handler_unblock_by_data(GTK_OBJECT(entry), value); + set_cmap_preview(); + dialog_update_preview(); + } +} /* dialog_scale_int_update */ + +/********************************************************************** + FUNCTION: dialog_entry_update + *********************************************************************/ + +void +dialog_entry_update(GtkWidget * widget, gdouble * value) +{ + GtkAdjustment *adjustment; + gdouble new_value; + + new_value = atof(gtk_entry_get_text(GTK_ENTRY(widget))); + + if (*value != new_value) { + adjustment = gtk_object_get_user_data(GTK_OBJECT(widget)); + + if ((new_value >= adjustment->lower) && + (new_value <= adjustment->upper)) { + *value = new_value; + adjustment->value = new_value; + + gtk_signal_emit_by_name(GTK_OBJECT(adjustment), "value_changed"); + + dialog_update_preview(); + } + } +} /* dialog_entry_update */ diff --git a/plug-ins/FractalExplorer/Dialogs.h b/plug-ins/FractalExplorer/Dialogs.h new file mode 100644 index 0000000000..c7bf0b66cc --- /dev/null +++ b/plug-ins/FractalExplorer/Dialogs.h @@ -0,0 +1,2300 @@ +/********************************************************************** + FUNCTION: explorer_dialog + *********************************************************************/ + +gint +explorer_dialog(void) +{ + GtkWidget *dialog, + *top_table, + *text, + *top_table2, + *frame, + *frame2, + *frame3, + *toggle, + *toggle_vbox, + *toggle_vbox2, + *toggle_vbox3, + *notebook, + *hbox, + *table, + *table6, + *button; + gint argc; + gchar **argv; + guchar *color_cube; + GSList *redmode_group = NULL, + *greenmode_group = NULL, + *bluemode_group = NULL, + *language_group = NULL, + *colormode_group = NULL, + *type_group = NULL; + + do_redsinus = (wvals.redmode == SINUS); + do_redcosinus = (wvals.redmode == COSINUS); + do_rednone = (wvals.redmode == NONE); + do_greensinus = (wvals.greenmode == SINUS); + do_greencosinus = (wvals.greenmode == COSINUS); + do_greennone = (wvals.greenmode == NONE); + do_bluesinus = (wvals.bluemode == SINUS); + do_bluecosinus = (wvals.bluemode == COSINUS); + do_bluenone = (wvals.bluemode == NONE); + do_redinvert = (wvals.redinvert != FALSE); + do_greeninvert = (wvals.greeninvert != FALSE); + do_blueinvert = (wvals.blueinvert != FALSE); + do_colormode1 = (wvals.colormode == 0); + do_colormode2 = (wvals.colormode == 1); + do_type0 = (wvals.fractaltype == 0); + do_type1 = (wvals.fractaltype == 1); + do_type2 = (wvals.fractaltype == 2); + do_type3 = (wvals.fractaltype == 3); + do_type4 = (wvals.fractaltype == 4); + do_type5 = (wvals.fractaltype == 5); + do_type6 = (wvals.fractaltype == 6); + do_type7 = (wvals.fractaltype == 7); + do_type8 = (wvals.fractaltype == 8); + + do_english = (wvals.language == 0); + do_french = (wvals.language == 1); + do_german = (wvals.language == 2); + + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("fractalexplorer"); + + gtk_init(&argc, &argv); + + plug_in_parse_fractalexplorer_path(); + + gtk_preview_set_gamma(gimp_gamma()); + gtk_preview_set_install_cmap(gimp_install_cmap()); + color_cube = gimp_color_cube(); + gtk_preview_set_color_cube(color_cube[0], color_cube[1], color_cube[2], color_cube[3]); + + gtk_widget_set_default_visual(gtk_preview_get_visual()); + gtk_widget_set_default_colormap(gtk_preview_get_cmap()); + + wint.wimage = g_malloc(preview_width * preview_height * 3 * sizeof(guchar)); + elements = g_malloc(sizeof(DialogElements)); + + explorer_load_dialog(); + + dialog = maindlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(dialog), "Fractal Explorer "); + gtk_window_position(GTK_WINDOW(dialog), GTK_WIN_POS_NONE); + gtk_container_border_width(GTK_CONTAINER(dialog), 0); + gtk_signal_connect(GTK_OBJECT(dialog), "destroy", + (GtkSignalFunc) dialog_close_callback, + NULL); + + top_table = gtk_table_new(4, 5, FALSE); + gtk_container_border_width(GTK_CONTAINER(top_table), 4); + gtk_table_set_row_spacings(GTK_TABLE(top_table), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), top_table, FALSE, FALSE, 0); + gtk_widget_show(top_table); + + /* Tool-Tips */ + + /* use black as foreground: */ + tips = gtk_tooltips_new(); + tips_fg.red = 0; + tips_fg.green = 0; + tips_fg.blue = 0; + /* postit yellow (khaki) as background: */ + gdk_color_alloc(gtk_widget_get_colormap(top_table), &tips_fg); + tips_bg.red = 61669; + tips_bg.green = 59113; + tips_bg.blue = 35979; + gdk_color_alloc(gtk_widget_get_colormap(top_table), &tips_bg); + gtk_tooltips_set_colors(tips, &tips_bg, &tips_fg); + + /* Preview */ + + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); + gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 0, 1, 0, 0, 0, 0); + gtk_widget_show(frame); + + wint.preview = gtk_preview_new(GTK_PREVIEW_COLOR); + gtk_preview_size(GTK_PREVIEW(wint.preview), preview_width, preview_height); + gtk_container_add(GTK_CONTAINER(frame), wint.preview); + gtk_signal_connect(GTK_OBJECT(wint.preview), "button_press_event", + (GtkSignalFunc) preview_button_press_event, NULL); + gtk_signal_connect(GTK_OBJECT(wint.preview), "button_release_event", + (GtkSignalFunc) preview_button_release_event, NULL); + gtk_signal_connect(GTK_OBJECT(wint.preview), "motion_notify_event", + (GtkSignalFunc) preview_motion_notify_event, NULL); + gtk_signal_connect(GTK_OBJECT(wint.preview), "leave_notify_event", + (GtkSignalFunc) preview_leave_notify_event, NULL); + gtk_signal_connect(GTK_OBJECT(wint.preview), "enter_notify_event", + (GtkSignalFunc) preview_enter_notify_event, NULL); + gtk_widget_set_events(wint.preview, GDK_BUTTON_PRESS_MASK + | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK + | GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK); + gtk_widget_show(wint.preview); + + /* Create notebook */ + notebook = gtk_notebook_new (); + gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP); + gtk_table_attach(GTK_TABLE(top_table), notebook, 4, 5, 0, 4, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show (notebook); + + + /* Controls */ + frame2 = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width (GTK_CONTAINER (frame2), 10); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame2, + gtk_label_new (msg[lng][MSG_FRACTALOPTIONS])); + gtk_widget_show (frame2); + + toggle_vbox2 = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox2), 0); + gtk_container_add(GTK_CONTAINER(frame2), toggle_vbox2); + gtk_widget_show(toggle_vbox2); + + top_table2 = gtk_table_new(5, 5, FALSE); + gtk_container_border_width(GTK_CONTAINER(top_table2), 10); + gtk_table_set_row_spacings(GTK_TABLE(top_table2), 0); + gtk_box_pack_start(GTK_BOX(toggle_vbox2), top_table2, FALSE, FALSE, 0); + gtk_widget_show(top_table2); + + frame = gtk_frame_new(msg[lng][MSG_PARAMETERS]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width (GTK_CONTAINER (frame), 0); + gtk_table_attach(GTK_TABLE(top_table2), frame, 0, 4, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 0); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + + table = gtk_table_new(9, 5, FALSE); + gtk_container_border_width(GTK_CONTAINER(table), 5); + gtk_table_set_row_spacings(GTK_TABLE(table), 0); + gtk_box_pack_start(GTK_BOX(toggle_vbox), table, FALSE, FALSE, 0); + gtk_widget_show(table); + dialog_create_value("XMIN", GTK_TABLE(table), 0, &wvals.xmin, -3, 3, msg[lng][MSG_XMIN], &(elements->xmin)); + dialog_create_value("XMAX", GTK_TABLE(table), 1, &wvals.xmax, -3, 3, msg[lng][MSG_XMAX], &(elements->xmax)); + dialog_create_value("YMIN", GTK_TABLE(table), 2, &wvals.ymin, -3, 3, msg[lng][MSG_YMIN], &(elements->ymin)); + dialog_create_value("YMAX", GTK_TABLE(table), 3, &wvals.ymax, -3, 3, msg[lng][MSG_YMAX], &(elements->ymax)); + dialog_create_value("ITER", GTK_TABLE(table), 4, &wvals.iter, 0, 1000, msg[lng][MSG_ITER], &(elements->iter)); + dialog_create_value("CX", GTK_TABLE(table), 5, &wvals.cx, -2.5, 2.5, msg[lng][MSG_CX], &(elements->cx)); + dialog_create_value("CY", GTK_TABLE(table), 6, &wvals.cy, -2.5, 2.5, msg[lng][MSG_CY], &(elements->cy)); + + + button = gtk_button_new(); + gtk_table_attach(GTK_TABLE(table), button, 1, 2, 7, 8, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + text = gtk_label_new(msg[lng][MSG_RESET]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_reset_callback, + dialog); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_RESET_PARAM_COMMENT]); + + button = gtk_button_new(); + text = gtk_label_new(msg[lng][MSG_LOAD]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_table_attach(GTK_TABLE(table), button, 0, 1, 7, 8, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) load_button_press, + dialog); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_LOADCOMMENT]); + + button = gtk_button_new(); + gtk_table_attach(GTK_TABLE(table), button, 2, 3, 7, 8, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + text = gtk_label_new(msg[lng][MSG_SAVE]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_save_callback, + dialog); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_SAVECOMMENT]); + + + gtk_widget_show(table); + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + +/* Fractal type toggle box */ + frame = gtk_frame_new(msg[lng][MSG_FRACTALTYPE]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(top_table2), frame, 0, 4, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + + hbox = gtk_hbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(hbox), 0); + gtk_container_add(GTK_CONTAINER(frame), hbox); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), toggle_vbox, FALSE, FALSE, 0); + + toggle = elements->type_mandelbrot = gtk_radio_button_new_with_label(type_group, "Mandelbrot"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type0); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type0); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Mandelbrot"); + + toggle = elements->type_julia = gtk_radio_button_new_with_label(type_group, "Julia"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type1); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type1); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Julia"); + + toggle = elements->type_barnsley1 = gtk_radio_button_new_with_label(type_group, "Barnsley 1"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type2); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type2); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Barnsley"); + + gtk_widget_show(toggle_vbox); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), toggle_vbox, FALSE, FALSE, 0); + + toggle = elements->type_barnsley2 = gtk_radio_button_new_with_label(type_group, "Barnsley 2"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type3); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type3); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Barnsley 2"); + + toggle = elements->type_barnsley3 = gtk_radio_button_new_with_label(type_group, "Barnsley 3"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type4); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type4); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Barnsley 3"); + + toggle = elements->type_spider = gtk_radio_button_new_with_label(type_group, "Spider"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type5); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type5); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Spider"); + + gtk_widget_show(toggle_vbox); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), toggle_vbox, FALSE, FALSE, 0); + + toggle = elements->type_manowar = gtk_radio_button_new_with_label(type_group, "Man'o'war"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type6); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type6); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Man'o'war"); + + toggle = elements->type_lambda = gtk_radio_button_new_with_label(type_group, "Lambda"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type7); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type7); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Lambda"); + + toggle = elements->type_sierpinski = gtk_radio_button_new_with_label(type_group, "Sierpinski"); + type_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_type8); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_type8); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Sierpinski"); + + gtk_widget_show(toggle_vbox); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 5); + + gtk_box_pack_start(GTK_BOX(hbox), toggle_vbox, TRUE, TRUE, 0); + + + gtk_widget_show(toggle_vbox); + gtk_widget_show(hbox); + gtk_widget_show(frame); + + frame = gtk_frame_new(msg[lng][MSG_PREVIEW]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 5); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + + toggle = gtk_check_button_new_with_label(msg[lng][MSG_REALTIMEPREVIEW]); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &wvals.alwayspreview); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.alwayspreview); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_REDRAWCOMMENT]); + + button = gtk_button_new(); + text = gtk_label_new(msg[lng][MSG_REDRAW]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_redraw_callback, + dialog); + gtk_box_pack_start(GTK_BOX(toggle_vbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_REDRAWPREVIEW]); + + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + + frame = gtk_frame_new(msg[lng][MSG_ZOOMOPTS]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 3, 4, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 5); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + + button = gtk_button_new(); + text = gtk_label_new(msg[lng][MSG_UNDOZOOM]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_undo_zoom_callback, + dialog); + gtk_box_pack_start(GTK_BOX(toggle_vbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + set_tooltip(tips, button,msg[lng][MSG_UNDOCOMMENT]); + + button = gtk_button_new(); + text = gtk_label_new(msg[lng][MSG_REDOZOOM]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_redo_zoom_callback, + dialog); + gtk_box_pack_start(GTK_BOX(toggle_vbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_REDOCOMMENT]); + + button = gtk_button_new(); + text = gtk_label_new(msg[lng][MSG_STEPIN]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_step_in_callback, + dialog); + gtk_box_pack_start(GTK_BOX(toggle_vbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_STEPIN]); + + button = gtk_button_new(); + text = gtk_label_new(msg[lng][MSG_STEPOUT]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_step_out_callback, + dialog); + gtk_box_pack_start(GTK_BOX(toggle_vbox), button, FALSE, FALSE, 0); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_STEPOUT]); + + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + + frame2 = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width (GTK_CONTAINER (frame2), 10); + gtk_widget_show(frame2); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame2, + gtk_label_new (msg[lng][MSG_COLOROPTS])); + + toggle_vbox2 = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox2), 0); + gtk_container_add(GTK_CONTAINER(frame2), toggle_vbox2); + gtk_widget_show(toggle_vbox2); + + top_table2 = gtk_table_new(5, 5, FALSE); + gtk_container_border_width(GTK_CONTAINER(top_table2), 10); + gtk_table_set_row_spacings(GTK_TABLE(top_table2), 0); + gtk_box_pack_start(GTK_BOX(toggle_vbox2), top_table2, FALSE, FALSE, 0); + gtk_widget_show(top_table2); + + frame = gtk_frame_new(msg[lng][MSG_COLORDENSITY]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(top_table2), frame, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show(frame); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 0); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + gtk_widget_show(toggle_vbox); + + table6 = gtk_table_new(3, 3, FALSE); + gtk_container_border_width(GTK_CONTAINER(table6), 0); + gtk_table_set_row_spacings(GTK_TABLE(table6), 0); + gtk_box_pack_start(GTK_BOX(toggle_vbox), table6, FALSE, FALSE, 0); + gtk_widget_show(table6); + dialog_create_int_value(msg[lng][MSG_RED], GTK_TABLE(table6), 0, &wvals.redstretch, 0, 128, msg[lng][MSG_REDINTENSITY], &(elements->red)); + dialog_create_int_value(msg[lng][MSG_GREEN], GTK_TABLE(table6), 1, &wvals.greenstretch, 0, 128, msg[lng][MSG_GREENINTENSITY], &(elements->green)); + dialog_create_int_value(msg[lng][MSG_BLUE], GTK_TABLE(table6), 2, &wvals.bluestretch, 0, 128, msg[lng][MSG_BLUEINTENSITY], &(elements->blue)); + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + + frame3 = gtk_frame_new(msg[lng][MSG_COLORFUNCTION]); + gtk_frame_set_shadow_type(GTK_FRAME(frame3), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(top_table2), frame3, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show(frame3); + + toggle_vbox3 = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox3), 0); + gtk_container_add(GTK_CONTAINER(frame3), toggle_vbox3); + gtk_widget_show(toggle_vbox3); + + table6 = gtk_table_new(4, 4, FALSE); + gtk_container_border_width(GTK_CONTAINER(table6), 0); + gtk_table_set_row_spacings(GTK_TABLE(table6), 0); + gtk_box_pack_start(GTK_BOX(toggle_vbox3), table6, FALSE, FALSE, 0); + gtk_widget_show(table6); + + frame = gtk_frame_new(msg[lng][MSG_RED]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(table6), frame, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show(frame); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 0); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + gtk_widget_show(toggle_vbox); + + toggle = elements->redmodesin = gtk_radio_button_new_with_label(redmode_group, msg[lng][MSG_SINE]); + redmode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_redsinus); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_redsinus); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_SINECOMMENT]); + + toggle = elements->redmodecos = gtk_radio_button_new_with_label(redmode_group, msg[lng][MSG_COSINE]); + redmode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_redcosinus); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_redcosinus); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_COSINECOMMENT]); + + toggle = elements->redmodenone = gtk_radio_button_new_with_label(redmode_group, msg[lng][MSG_NONE]); + redmode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_rednone); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_rednone); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_NONECOMMENT]); + + elements->redinvert = toggle = gtk_check_button_new_with_label(msg[lng][MSG_INVERSION]); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &wvals.redinvert); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.redinvert); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_INVERSIONCOMMENT]); + + + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + +/* Greenmode toggle box */ + frame = gtk_frame_new(msg[lng][MSG_GREEN]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(table6), frame, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show(frame); + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 0); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + gtk_widget_show(toggle_vbox); + + toggle = elements->greenmodesin = gtk_radio_button_new_with_label(greenmode_group, msg[lng][MSG_SINE]); + greenmode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_greensinus); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_greensinus); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_SINECOMMENT]); + + toggle = elements->greenmodecos = gtk_radio_button_new_with_label(greenmode_group, msg[lng][MSG_COSINE]); + greenmode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_greencosinus); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_greencosinus); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_COSINECOMMENT]); + + toggle = elements->greenmodenone = gtk_radio_button_new_with_label(greenmode_group, msg[lng][MSG_NONE]); + greenmode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_greennone); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_greennone); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_NONECOMMENT]); + + elements->greeninvert = toggle = gtk_check_button_new_with_label(msg[lng][MSG_INVERSION]); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &wvals.greeninvert); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.greeninvert); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_INVERSIONCOMMENT]); + + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + +/* Bluemode toggle box */ + frame = gtk_frame_new(msg[lng][MSG_BLUE]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(table6), frame, 2, 3, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + gtk_widget_show(frame); + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 0); + gtk_container_add(GTK_CONTAINER(frame), toggle_vbox); + gtk_widget_show(toggle_vbox); + + toggle = elements->bluemodesin = gtk_radio_button_new_with_label(bluemode_group, msg[lng][MSG_SINE]); + bluemode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_bluesinus); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_bluesinus); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_SINECOMMENT]); + + toggle = elements->bluemodecos = gtk_radio_button_new_with_label(bluemode_group, msg[lng][MSG_COSINE]); + bluemode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_bluecosinus); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_bluecosinus); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_COSINECOMMENT]); + + toggle = elements->bluemodenone = gtk_radio_button_new_with_label(bluemode_group, msg[lng][MSG_NONE]); + bluemode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_bluenone); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_bluenone); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_NONECOMMENT]); + + + elements->blueinvert = toggle = gtk_check_button_new_with_label(msg[lng][MSG_INVERSION]); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &wvals.blueinvert); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), wvals.blueinvert); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_INVERSIONCOMMENT]); + + gtk_widget_show(toggle_vbox); + gtk_widget_show(frame); + gtk_widget_show(toggle_vbox3); + gtk_widget_show(frame3); + +/* Colormode toggle box */ + + frame = gtk_frame_new(msg[lng][MSG_COLORMODE]); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_table_attach(GTK_TABLE(top_table2), frame, 0, 1, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); + hbox = gtk_hbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(hbox), 0); + gtk_container_add(GTK_CONTAINER(frame), hbox); + toggle_vbox = gtk_vbox_new(FALSE, 0); + + gtk_box_pack_start(GTK_BOX(hbox), toggle_vbox, FALSE, FALSE, 10); + toggle = elements->colormode0 = gtk_radio_button_new_with_label(colormode_group, msg[lng][MSG_ASSPECIFIED]); + colormode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_colormode1); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_colormode1); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_ASSPECIFIEDCOMMENT]); + + + toggle = elements->colormode1 = gtk_radio_button_new_with_label(colormode_group, msg[lng][MSG_APPLYGRADIENT]); + colormode_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_colormode2); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_colormode2); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, msg[lng][MSG_APPLYGRADIENTCOMMENT]); + gtk_widget_show(toggle_vbox); + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), toggle_vbox, TRUE, TRUE, 10); + cmap_preview = gtk_preview_new(GTK_PREVIEW_COLOR); + gtk_preview_size(GTK_PREVIEW(cmap_preview), 32, 32); + gtk_box_pack_start(GTK_BOX(toggle_vbox), cmap_preview, FALSE, FALSE, 10); + gtk_widget_show(cmap_preview); + gtk_widget_show(toggle_vbox); + gtk_widget_show(hbox); + gtk_widget_show(frame); + + frame= add_objects_list (); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width (GTK_CONTAINER (frame), 10); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, + gtk_label_new (msg[lng][MSG_FRACTALPRESETS])); + gtk_widget_show (frame); + + frame= add_gradients_list (); + gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width (GTK_CONTAINER (frame), 10); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, + gtk_label_new (msg[lng][MSG_GRADIENTPRESETS])); + gtk_widget_show (frame); + + frame2 = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width (GTK_CONTAINER (frame2), 10); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame2, + gtk_label_new (msg[lng][MSG_GENERALOPTIONS])); + + toggle_vbox2 = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox2), 10); + gtk_container_add(GTK_CONTAINER(frame2), toggle_vbox2); + gtk_widget_show(toggle_vbox2); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 10); + gtk_box_pack_start(GTK_BOX(toggle_vbox2), toggle_vbox, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 0); + gtk_widget_show(toggle_vbox); + + toggle = gtk_radio_button_new_with_label(language_group, "English"); + language_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_english); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_english); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "This sets the default language to English. Note that you will have to restart the plug-in!"); + + toggle = gtk_radio_button_new_with_label(language_group, "Français"); + language_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_french); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_french); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Cette option active les messages en français. Il vous faudra redémarrer le programme pour que les changements prennent effet."); + + toggle = gtk_radio_button_new_with_label(language_group, "Deutsch"); + language_group = gtk_radio_button_group(GTK_RADIO_BUTTON(toggle)); + gtk_box_pack_start(GTK_BOX(toggle_vbox), toggle, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(toggle), "toggled", + (GtkSignalFunc) explorer_toggle_update, + &do_german); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(toggle), do_german); + gtk_widget_show(toggle); + set_tooltip(tips, toggle, "Diese Option stellt die deutschen Texte ein. Damit diese jedoch angezeigt werden, ist ein Neustart des Programms noetig."); + gtk_widget_show(toggle_vbox); + + toggle_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(toggle_vbox), 10); + gtk_box_pack_start(GTK_BOX(toggle_vbox2), toggle_vbox, FALSE, FALSE, 0); + gtk_widget_show(toggle_vbox); + + button = gtk_button_new(); + gtk_box_pack_start(GTK_BOX(toggle_vbox), button, FALSE, FALSE, 0); + text = gtk_label_new(msg[lng][MSG_SAVELANGUAGE]); + gtk_misc_set_alignment(GTK_MISC(text), 0.5, 0.5); + gtk_container_add(GTK_CONTAINER(button), text); + gtk_widget_show(text); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_savelanguage_callback, + dialog); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_SAVELANGUAGE_COMMENT]); + + gtk_widget_show(toggle_vbox); + + + gtk_widget_show (frame2); + + /* Buttons */ + + gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5); + + button = gtk_button_new_with_label(msg[lng][MSG_OK]); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_ok_callback, + dialog); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); + gtk_widget_grab_default(button); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_STARTCALC]); + + button = gtk_button_new_with_label(msg[lng][MSG_CANCEL]); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) dialog_cancel_callback, + dialog); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_MAINDLGCANCEL]); + + button = gtk_button_new_with_label(msg[lng][MSG_ABOUT]); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) explorer_about_callback, button); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + set_tooltip(tips, button, msg[lng][MSG_ABOUTCOMMENT]); + + /* Done */ + + /* Popup for list area: Not yet fully implemented + + fractalexplorer_op_menu_create(maindlg); + + */ + gtk_widget_destroy(loaddlg); + + gtk_widget_show(dialog); + ready_now = TRUE; + + set_cmap_preview(); + + dialog_update_preview(); + gtk_window_position(GTK_WINDOW(dialog), GTK_WIN_POS_NONE); + gtk_main(); + gdk_flush(); + if (the_tile != NULL) { + gimp_tile_unref(the_tile, FALSE); + the_tile = NULL; + } + g_free(wint.wimage); + + return wint.run; +} /* explorer_dialog */ + +/********************************************************************** + FUNCTION: dialog_update_preview + *********************************************************************/ + +void +dialog_update_preview() +{ + double left, + right, + bottom, + top; + double dx, + dy, + cx, + cy; + int px, + py; + int xcoord, + ycoord; + int iteration; + guchar *p_ul, + *p; + double a, + b, + x, + y, + oldx, + oldy, + foldxinitx, + foldxinity, + tempsqrx, + tempsqry, + tmpx=0, + tmpy=0, + foldyinitx, + foldyinity, + xx=0; + int zaehler, + color; + + if (NULL == wint.preview) + return; + + if ((ready_now) && (wvals.alwayspreview)) { +/* gtk_widget_set_sensitive(maindlg, FALSE); */ + left = sel_x1; + right = sel_x2 - 1; + bottom = sel_y2 - 1; + top = sel_y1; + dx = (right - left) / (preview_width - 1); + dy = (bottom - top) / (preview_height - 1); + + xmin = wvals.xmin; + xmax = wvals.xmax; + ymin = wvals.ymin; + ymax = wvals.ymax; + cx = wvals.cx; + cy = wvals.cy; + xbild = preview_width; + ybild = preview_height; + xdiff = (xmax - xmin) / xbild; + ydiff = (ymax - ymin) / ybild; + + py = 0; + + p_ul = wint.wimage; + iteration = (int) wvals.iter; + for (ycoord = 0; ycoord < preview_height; ycoord++) { + px = 0; + + for (xcoord = 0; xcoord < preview_width; xcoord++) { + a = (double) xmin + (double) xcoord *xdiff; + b = (double) ymin + (double) ycoord *ydiff; + + if (wvals.fractaltype!=0) { + tmpx=x = a; + tmpy=y = b; + } else { + x = 0; + y = 0; + } + for (zaehler = 0; (zaehler < iteration) && ((x * x + y * y) < 4); zaehler++) { + oldx=x; oldy=y; + if (wvals.fractaltype==1) { + /* Julia */ + xx = x * x - y * y + cx; + y = 2.0 * x * y + cy; + } else if (wvals.fractaltype==0) { + /*Mandelbrot*/ + xx = x * x - y * y + a; + y = 2.0 * x * y + b; + } else if (wvals.fractaltype==2) { +/* Barnsley M1 */ + foldxinitx = oldx * cx; + foldyinity = oldy * cy; + foldxinity = oldx * cy; + foldyinitx = oldy * cx; + /* orbit calculation */ + if(oldx >= 0) + { + xx = (foldxinitx - cx - foldyinity); + y = (foldyinitx - cy + foldxinity); + } + else + { + xx = (foldxinitx + cx - foldyinity); + y = (foldyinitx + cy + foldxinity); + } + } else if (wvals.fractaltype==3) { +/* Barnsley Unnamed */ + + foldxinitx = oldx * cx; + foldyinity = oldy * cy; + foldxinity = oldx * cy; + foldyinitx = oldy * cx; + /* orbit calculation */ + if(foldxinity + foldyinitx >= 0) + { + xx = foldxinitx - cx - foldyinity; + y = foldyinitx - cy + foldxinity; + } + else + { + xx = foldxinitx + cx - foldyinity; + y = foldyinitx + cy + foldxinity; + } + } else if (wvals.fractaltype==4) { + /*Barnsley 1*/ + foldxinitx = oldx * oldx; + foldyinity = oldy * oldy; + foldxinity = oldx * oldy; + /* orbit calculation */ + if(oldx > 0) + { + xx = foldxinitx - foldyinity - 1.0; + y = foldxinity * 2; + } + else + { + xx = foldxinitx - foldyinity -1.0 + cx * oldx; + y = foldxinity * 2; + y += cy * oldx; + } + } else if (wvals.fractaltype==5) { + /* Spider(XAXIS) { c=z=pixel: z=z*z+c; c=c/2+z, |z|<=4 } */ + xx = x*x - y*y + tmpx + cx; + y = 2 * oldx * oldy + tmpy +cy; + tmpx = tmpx/2 + xx; + tmpy = tmpy/2 + y; + } else if (wvals.fractaltype==6) { +/* ManOWarfpFractal() */ + xx = x*x - y*y + tmpx + cx; + y = 2.0 * x * y + tmpy + cy; + tmpx = oldx; + tmpy = oldy; + } else if (wvals.fractaltype==7) { +/* Lambda */ + tempsqrx=x*x; + tempsqry=y*y; + tempsqrx = oldx - tempsqrx + tempsqry; + tempsqry = -(oldy * oldx); + tempsqry += tempsqry + oldy; + xx = cx * tempsqrx - cy * tempsqry; + y = cx * tempsqry + cy * tempsqrx; + } else if (wvals.fractaltype==8) { +/* Sierpinski */ + xx = oldx + oldx; + y = oldy + oldy; + if(oldy > .5) + y = y - 1; + else if (oldx > .5) + xx = xx - 1; + } + x = xx; + } + color = (int) (255.0 * zaehler / iteration); + p_ul[0] = colormap[color][0]; + p_ul[1] = colormap[color][1]; + p_ul[2] = colormap[color][2]; + p_ul += 3; + px += 1; + } /* for */ + py += 1; + } /* for */ + p = wint.wimage; + + for (y = 0; y < preview_height; y++) { + gtk_preview_draw_row(GTK_PREVIEW(wint.preview), p, 0, y, preview_width); + p += preview_width * 3; + } /* for */ + gtk_widget_draw(wint.preview, NULL); + gdk_flush(); +/* gtk_widget_set_sensitive(maindlg, TRUE); */ + } +} /* dialog_update_preview */ + +/********************************************************************** + FUNCTION: dialog_create_value + *********************************************************************/ + +void +dialog_create_value(char *title, GtkTable * table, int row, gdouble * value, + int left, int right, const char *desc, scaledata * scalevalues) +{ + GtkWidget *label; + GtkWidget *scale; + GtkWidget *entry; + GtkObject *scale_data; + char buf[256]; + scaledata *pppp; + + pppp = scalevalues; + + label = gtk_label_new(title); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); + gtk_table_attach(table, label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 4, 0); + gtk_widget_show(label); + + scale_data = gtk_adjustment_new(*value, left, right, + (right - left) / 1000, + (right - left) / 1000, + 0); + pppp->data = GTK_ADJUSTMENT(scale_data); + gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", + (GtkSignalFunc) dialog_scale_update, + value); + + scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data)); + gtk_widget_set_usize(scale, SCALE_WIDTH, 0); + gtk_table_attach(table, scale, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE); + gtk_scale_set_digits(GTK_SCALE(scale), 3); + gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); + gtk_widget_show(scale); + set_tooltip(tips, scale, desc); + + entry = gtk_entry_new(); + pppp->text = entry; + gtk_object_set_user_data(GTK_OBJECT(entry), scale_data); + gtk_object_set_user_data(scale_data, entry); + gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); + sprintf(buf, "%0.15f", *value); + gtk_entry_set_text(GTK_ENTRY(entry), buf); + gtk_entry_set_position (GTK_ENTRY (entry), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (entry)); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc) dialog_entry_update, + value); + gtk_table_attach(GTK_TABLE(table), entry, 2, 3, row, row + 1, 0, 0, 4, 0); + gtk_widget_show(entry); + set_tooltip(tips, entry, desc); + +} /* dialog_create_value */ + +/********************************************************************** + FUNCTION: dialog_create_int_value + *********************************************************************/ + +void +dialog_create_int_value(char *title, GtkTable * table, int row, gdouble * value, + int left, int right, const char *desc, scaledata * scalevalues) +{ + GtkWidget *label; + GtkWidget *scale; + GtkWidget *entry; + GtkObject *scale_data; + char buf[256]; + scaledata *pppp; + + pppp = scalevalues; + + label = gtk_label_new(title); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); + gtk_table_attach(table, label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 4, 0); + gtk_widget_show(label); + + scale_data = gtk_adjustment_new(*value, left, right, + (right - left) / 200, + (right - left) / 200, + 0); + pppp->data = GTK_ADJUSTMENT(scale_data); + gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", + (GtkSignalFunc) dialog_scale_int_update, + value); + + scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data)); + gtk_widget_set_usize(scale, SCALE_WIDTH, 0); + gtk_table_attach(table, scale, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE); + gtk_scale_set_digits(GTK_SCALE(scale), 3); + gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); + gtk_widget_show(scale); + set_tooltip(tips, scale, desc); + + entry = gtk_entry_new(); + pppp->text = entry; + gtk_object_set_user_data(GTK_OBJECT(entry), scale_data); + gtk_object_set_user_data(scale_data, entry); + gtk_widget_set_usize(entry, ENTRY_WIDTH - 20, 0); + sprintf(buf, "%i", (int) *value); + gtk_entry_set_text(GTK_ENTRY(entry), buf); + gtk_signal_connect(GTK_OBJECT(entry), "changed", + (GtkSignalFunc) dialog_entry_update, + value); + gtk_table_attach(GTK_TABLE(table), entry, 2, 3, row, row + 1, 0, 0, 4, 0); + gtk_widget_show(entry); + set_tooltip(tips, entry, desc); + +} /* dialog_create_int_value */ + +/********************************************************************** + FUNCTION: set_cmap_preview() + *********************************************************************/ + +void +set_cmap_preview() +{ + int i, + x, + y, + j; + guchar b[96]; + guchar c[GR_WIDTH*3]; + + if (NULL == cmap_preview) + return; + + if (NULL == cmap_preview_long) + return; + + if (NULL == cmap_preview_long2) + return; + + make_color_map(); + + for (y = 0; y < 32; y += 4) { + for (x = 0; x < 32; x++) { + i = x + (y / 4) * 32; + for (j = 0; j < 3; j++) + b[x * 3 + j] = colormap[i][j]; + } + gtk_preview_draw_row(GTK_PREVIEW(cmap_preview), b, 0, y, 32); + gtk_preview_draw_row(GTK_PREVIEW(cmap_preview), b, 0, y + 1, 32); + gtk_preview_draw_row(GTK_PREVIEW(cmap_preview), b, 0, y + 2, 32); + gtk_preview_draw_row(GTK_PREVIEW(cmap_preview), b, 0, y + 3, 32); + } + + for (x = 0; x < GR_WIDTH; x++) { + for (j = 0; j < 3; j++) + c[x * 3 + j] = colormap[(int)((float)x/(float)GR_WIDTH*256.0)][j]; + } + for (i=0; i<32; i++) + { + gtk_preview_draw_row(GTK_PREVIEW(cmap_preview_long), c, 0, i, GR_WIDTH); + } + for (i=0; i<32; i++) + { + gtk_preview_draw_row(GTK_PREVIEW(cmap_preview_long2), c, 0, i, GR_WIDTH); + } + gtk_widget_draw(cmap_preview, NULL); + gtk_widget_draw(cmap_preview_long, NULL); + gtk_widget_draw(cmap_preview_long2, NULL); +} + +/********************************************************************** + FUNCTION: make_color_map() + *********************************************************************/ + +void +make_color_map() +{ + int i, + j; + int r, + gr, + bl; + double *g = NULL; + double redstretch, + greenstretch, + bluestretch, + pi = atan(1) * 4; + + if (wvals.colormode) { + g = gimp_gradients_sample_uniform(256); + } + redstretch = wvals.redstretch; + greenstretch = wvals.greenstretch; + bluestretch = wvals.bluestretch; + for (i = 0; i < 256; i++) + if (wvals.colormode) { + for (j = 0; j < 3; j++) + colormap[i][j] = (int) (g[i * 4 + j] * 255.0); + } else { + r = gr = bl = i; + + switch (wvals.redmode) { + case SINUS: + r = (int) redstretch *(1.0 + sin((r / 128.0 - 1) * pi)); + break; + case COSINUS: + r = (int) redstretch *(1.0 + cos((r / 128.0 - 1) * pi)); + break; + case NONE: + r = (int)(redstretch *(r / 128.0)); + break; + default: + break; + } + + switch (wvals.greenmode) { + case SINUS: + gr = (int) greenstretch *(1.0 + sin((gr / 128.0 - 1) * pi)); + break; + case COSINUS: + gr = (int) greenstretch *(1.0 + cos((gr / 128.0 - 1) * pi)); + break; + case NONE: + gr = (int)(greenstretch *(gr / 128.0)); + break; + default: + break; + } + switch (wvals.bluemode) { + case SINUS: + bl = (int) bluestretch *(1.0 + sin((bl / 128.0 - 1) * pi)); + break; + case COSINUS: + bl = (int) bluestretch *(1.0 + cos((bl / 128.0 - 1) * pi)); + break; + case NONE: + bl = (int)(bluestretch *(bl / 128.0)); + break; + default: + break; + } + if (r == 256) { + r = 255; + } + if (gr == 256) { + gr = 255; + } + if (bl == 256) { + bl = 255; + } + if (wvals.redinvert) { + r = 255-r; + } + if (wvals.greeninvert) { + gr = 255-gr; + } + if (wvals.blueinvert) { + bl = 255-bl; + } + colormap[i][0] = r; + colormap[i][1] = gr; + colormap[i][2] = bl; + } + free(g); +} + +/********************************************************************** + FUNCTION: explorer_logo_dialog + *********************************************************************/ + +GtkWidget * +explorer_logo_dialog() +{ + GtkWidget *xdlg; + GtkWidget *xbutton; + GtkWidget *xlabel=NULL; + GtkWidget *xlogo_box; + GtkWidget *xpreview; + GtkWidget *xframe, + *xframe2, + *xframe3; + GtkWidget *xvbox; + GtkWidget *xhbox; + GtkWidget *vpaned; + #if 0 + GtkWidget *table; + GtkWidget *text; + GtkWidget *hscrollbar; + GtkWidget *vscrollbar; + #endif + guchar *temp, + *temp2; + unsigned char *datapointer; + gint y, + x; + + xdlg = logodlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(xdlg), msg[lng][MSG_ABOUT]); + gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_NONE); + gtk_signal_connect(GTK_OBJECT(xdlg), "destroy", + (GtkSignalFunc) dialog_close_callback, + NULL); + + xbutton = gtk_button_new_with_label(msg[lng][MSG_OK]); + GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT); + gtk_signal_connect(GTK_OBJECT(xbutton), "clicked", + (GtkSignalFunc) explorer_logo_ok_callback, + xdlg); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area), + xbutton, TRUE, TRUE, 0); + gtk_widget_grab_default(xbutton); + gtk_widget_show(xbutton); + set_tooltip(tips, xbutton, msg[lng][MSG_ABOUTBOXOKCOMMENT]); + + xframe = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(xframe), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0); + xvbox = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(xvbox), 10); + gtk_container_add(GTK_CONTAINER(xframe), xvbox); + + /* The logo frame & drawing area */ + xhbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(xvbox), xhbox, FALSE, TRUE, 0); + + xlogo_box = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(xhbox), xlogo_box, FALSE, FALSE, 0); + + xframe2 = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(xframe2), GTK_SHADOW_IN); + gtk_box_pack_start(GTK_BOX(xlogo_box), xframe2, FALSE, FALSE, 0); + + xpreview = gtk_preview_new(GTK_PREVIEW_COLOR); + gtk_preview_size(GTK_PREVIEW(xpreview), logo_width, logo_height); + temp = g_malloc((logo_width + 10) * 3); + datapointer = header_data+logo_width*logo_height-1; + for (y = 0; y < logo_height; y++) { + temp2 = temp; + for (x = 0; x < logo_width; x++) { + HEADER_PIXEL(datapointer, temp2); + temp2 += 3; + } + gtk_preview_draw_row(GTK_PREVIEW(xpreview), + temp, + 0, y, logo_width); + } + g_free(temp); + gtk_container_add(GTK_CONTAINER(xframe2), xpreview); + gtk_widget_show(xpreview); + gtk_widget_show(xframe2); + gtk_widget_show(xlogo_box); + gtk_widget_show(xhbox); + + xhbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0); + + vpaned = gtk_vpaned_new (); + gtk_box_pack_start(GTK_BOX(xhbox), vpaned, TRUE, TRUE, 0); + gtk_container_border_width (GTK_CONTAINER(vpaned), 0); + gtk_widget_show (vpaned); + + xframe3 = gtk_frame_new (NULL); +/* gtk_frame_set_shadow_type (GTK_FRAME(xframe3), GTK_SHADOW_IN); */ +/* gtk_widget_set_usize (xframe3, 20, 20); */ + gtk_paned_add1 (GTK_PANED (vpaned), xframe3); + gtk_widget_show (xframe3); +#if 0 + table = gtk_table_new (2, 2, FALSE); + gtk_table_set_row_spacing (GTK_TABLE (table), 0, 0); + gtk_table_set_col_spacing (GTK_TABLE (table), 0, 0); + gtk_container_add(GTK_CONTAINER(xframe3), table); + gtk_widget_show (table); + + text = gtk_text_new (NULL, NULL); + gtk_table_attach (GTK_TABLE (table), text, 0, 1, 0, 1, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); + gtk_widget_show (text); + + hscrollbar = gtk_hscrollbar_new (GTK_TEXT (text)->hadj); + gtk_table_attach (GTK_TABLE (table), hscrollbar, 0, 1, 1, 2, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_EXPAND| GTK_FILL | GTK_SHRINK, 0, 0); + gtk_widget_show (hscrollbar); + + vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj); + gtk_table_attach (GTK_TABLE (table), vscrollbar, 1, 2, 0, 1, + GTK_EXPAND| GTK_FILL | GTK_SHRINK, GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0); + gtk_widget_show (vscrollbar); + + gtk_text_freeze (GTK_TEXT (text)); + + gtk_widget_realize (text); + + gtk_text_insert (GTK_TEXT (text), NULL, &text->style->black, NULL, + "\nCotting Software Productions\n" + "Bahnhofstrasse 31\n" + "CH-3066 Stettlen (Switzerland)\n\n" + "cotting@mygale.org\n" + "http://www.mygale.org/~cotting\n\n" + "Fractal Chaos Explorer\nPlug-In for the GIMP\n" + "Version 2.00 Beta (Multilingual)\n" + , -1); + + gtk_text_thaw (GTK_TEXT (text)); +#endif + + xlabel = gtk_label_new("\nCotting Software Productions\n" + "Bahnhofstrasse 31\n" + "CH-3066 Stettlen (Switzerland)\n\n" + "cotting@mygale.org\n" + "http://www.mygale.org/~cotting\n\n" + "Fractal Chaos Explorer\nPlug-In for the GIMP\n" + "Version 2.00 Beta (Multilingual)\n"); + gtk_container_add(GTK_CONTAINER(xframe3), xlabel); + gtk_widget_show(xlabel); + + xframe3 = gtk_frame_new (NULL); +/* gtk_frame_set_shadow_type (GTK_FRAME(xframe3), GTK_SHADOW_IN); */ +/* gtk_widget_set_usize (xframe3, 20, 20); */ + gtk_paned_add2 (GTK_PANED (vpaned), xframe3); + gtk_widget_show (xframe3); + +#if 0 + table = gtk_table_new (2, 2, FALSE); + gtk_table_set_row_spacing (GTK_TABLE (table), 0, 0); + gtk_table_set_col_spacing (GTK_TABLE (table), 0, 0); + gtk_container_add(GTK_CONTAINER(xframe3), table); + gtk_widget_show (table); + + text = gtk_text_new (NULL, NULL); + gtk_table_attach (GTK_TABLE (table), text, 0, 1, 0, 1, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); + gtk_widget_show (text); + + hscrollbar = gtk_hscrollbar_new (GTK_TEXT (text)->hadj); + gtk_table_attach (GTK_TABLE (table), hscrollbar, 0, 1, 1, 2, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK | GTK_EXPAND, 0, 0); + gtk_widget_show (hscrollbar); + + vscrollbar = gtk_vscrollbar_new (GTK_TEXT (text)->vadj); + gtk_table_attach (GTK_TABLE (table), vscrollbar, 1, 2, 0, 1, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, GTK_EXPAND | GTK_FILL | GTK_SHRINK, 0, 0); + gtk_widget_show (vscrollbar); + + gtk_text_freeze (GTK_TEXT (text)); + + gtk_widget_realize (text); + + gtk_text_insert (GTK_TEXT (text), NULL, &text->style->black, NULL, + "\nContains code from:\n\n" + "Daniel Cotting\n\n" + "Peter Kirchgessner\n\n" + "Scott Draves\n\n" + "Andy Thomas\n\n" + "and the GIMP distribution.\n" + , -1); + + gtk_text_thaw (GTK_TEXT (text)); +#endif + + xlabel = gtk_label_new("\nContains code from:\n\n" + "Daniel Cotting\n\n" + "Peter Kirchgessner\n\n" + "Scott Draves\n\n" + "Andy Thomas\n\n" + "and the GIMP distribution.\n"); + gtk_container_add(GTK_CONTAINER(xframe3), xlabel); + gtk_widget_show(xlabel); + + gtk_widget_show(xhbox); + + gtk_widget_show(xvbox); + gtk_widget_show(xframe); + gtk_widget_show(xdlg); + + gtk_main(); + gdk_flush(); + return xdlg; +} + +/********************************************************************** + FUNCTION: explorer_load_dialog + *********************************************************************/ + +GtkWidget * +explorer_load_dialog() +{ + GtkWidget *xdlg; + + GtkWidget *xlabel; + GtkWidget *xlogo_box; + GtkWidget *xpreview; + GtkWidget *xframe, + *xframe2; + GtkWidget *xvbox; + GtkWidget *xhbox; + guchar *temp, + *temp2; + unsigned char *datapointer; + gint y, + x; + + xdlg = loaddlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(xdlg), "Loading..."); + gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_NONE); + gtk_signal_connect(GTK_OBJECT(xdlg), "destroy", + (GtkSignalFunc) dialog_close_callback, + NULL); + + xframe = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(xframe), 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0); + xvbox = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(xvbox), 10); + gtk_container_add(GTK_CONTAINER(xframe), xvbox); + + /* The logo frame & drawing area */ + xhbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(xvbox), xhbox, FALSE, TRUE, 0); + + xlogo_box = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(xhbox), xlogo_box, FALSE, FALSE, 0); + + xframe2 = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(xframe2), GTK_SHADOW_IN); + gtk_box_pack_start(GTK_BOX(xlogo_box), xframe2, FALSE, FALSE, 0); + + xpreview = gtk_preview_new(GTK_PREVIEW_COLOR); + gtk_preview_size(GTK_PREVIEW(xpreview), logo_width, logo_height); + temp = g_malloc((logo_width + 10) * 3); + datapointer = header_data+logo_width*logo_height-1; + for (y = 0; y < logo_height; y++) { + temp2 = temp; + for (x = 0; x < logo_width; x++) { + HEADER_PIXEL(datapointer, temp2); + temp2 += 3; + } + gtk_preview_draw_row(GTK_PREVIEW(xpreview), + temp, + 0, y, logo_width); + } + g_free(temp); + gtk_container_add(GTK_CONTAINER(xframe2), xpreview); + gtk_widget_show(xpreview); + gtk_widget_show(xframe2); + gtk_widget_show(xlogo_box); + gtk_widget_show(xhbox); + + xhbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0); + xlabel = gtk_label_new("... Loading FractalExplorer ...\n" + "... Lade FractalExplorer ...\n" + "... Chargement de FractalExplorer ..."); + gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); + gtk_widget_show(xlabel); + + gtk_widget_show(xhbox); + + gtk_widget_show(xvbox); + gtk_widget_show(xframe); + gtk_widget_show(xdlg); + gtk_widget_realize(xdlg); + gdk_flush(); + return xdlg; +} + +/********************************************************************** + FUNCTION: set_tooltip + *********************************************************************/ + +void +set_tooltip(GtkTooltips * tooltips, GtkWidget * widget, const char *desc) +{ + if (desc && desc[0]) + gtk_tooltips_set_tips(tooltips, widget, (char *) desc); +} + +/********************************************************************** + FUNCTION: dialog_change_scale + *********************************************************************/ + +void +dialog_change_scale() +{ + char text[256]; + ready_now = FALSE; + + do_redsinus = (wvals.redmode == SINUS); + do_redcosinus = (wvals.redmode == COSINUS); + do_rednone = (wvals.redmode == NONE); + do_greensinus = (wvals.greenmode == SINUS); + do_greencosinus = (wvals.greenmode == COSINUS); + do_greennone = (wvals.greenmode == NONE); + do_bluesinus = (wvals.bluemode == SINUS); + do_bluecosinus = (wvals.bluemode == COSINUS); + do_bluenone = (wvals.bluemode == NONE); + do_redinvert = (wvals.redinvert != FALSE); + do_greeninvert = (wvals.greeninvert != FALSE); + do_blueinvert = (wvals.blueinvert != FALSE); + do_colormode1 = (wvals.colormode == 0); + do_colormode2 = (wvals.colormode == 1); + do_type0 = (wvals.fractaltype == 0); + do_type1 = (wvals.fractaltype == 1); + do_type2 = (wvals.fractaltype == 2); + do_type3 = (wvals.fractaltype == 3); + do_type4 = (wvals.fractaltype == 4); + do_type5 = (wvals.fractaltype == 5); + do_type6 = (wvals.fractaltype == 6); + do_type7 = (wvals.fractaltype == 7); + do_type8 = (wvals.fractaltype == 8); + + do_english = (wvals.language == 0); + do_german = (wvals.language == 2); + do_french = (wvals.language == 1); + + elements->xmin.data->value = wvals.xmin; + gtk_signal_emit_by_name(GTK_OBJECT(elements->xmin.data), "value_changed"); + elements->xmax.data->value = wvals.xmax; + gtk_signal_emit_by_name(GTK_OBJECT(elements->xmax.data), "value_changed"); + elements->ymin.data->value = wvals.ymin; + gtk_signal_emit_by_name(GTK_OBJECT(elements->ymin.data), "value_changed"); + elements->ymax.data->value = wvals.ymax; + gtk_signal_emit_by_name(GTK_OBJECT(elements->ymax.data), "value_changed"); + elements->iter.data->value = wvals.iter; + gtk_signal_emit_by_name(GTK_OBJECT(elements->iter.data), "value_changed"); + elements->cx.data->value = wvals.cx; + gtk_signal_emit_by_name(GTK_OBJECT(elements->cx.data), "value_changed"); + elements->cy.data->value = wvals.cy; + gtk_signal_emit_by_name(GTK_OBJECT(elements->cy.data), "value_changed"); + + sprintf(text, "%0.15f", wvals.xmin); + gtk_entry_set_text(GTK_ENTRY(elements->xmin.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->xmin.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->xmin.text)); + sprintf(text, "%0.15f", wvals.xmax); + gtk_entry_set_text(GTK_ENTRY(elements->xmax.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->xmax.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->xmax.text)); + sprintf(text, "%0.15f", wvals.ymin); + gtk_entry_set_text(GTK_ENTRY(elements->ymin.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->ymin.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->ymin.text)); + sprintf(text, "%0.15f", wvals.ymax); + gtk_entry_set_text(GTK_ENTRY(elements->ymax.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->ymax.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->ymax.text)); + sprintf(text, "%0.15f", wvals.iter); + gtk_entry_set_text(GTK_ENTRY(elements->iter.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->iter.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->iter.text)); + sprintf(text, "%0.15f", wvals.cx); + gtk_entry_set_text(GTK_ENTRY(elements->cx.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->cx.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->cx.text)); + sprintf(text, "%0.15f", wvals.cy); + gtk_entry_set_text(GTK_ENTRY(elements->cy.text), text); + gtk_entry_set_position (GTK_ENTRY (elements->cy.text), 0); + gtk_entry_adjust_scroll (GTK_ENTRY (elements->cy.text)); + + elements->red.data->value = wvals.redstretch; + gtk_signal_emit_by_name(GTK_OBJECT(elements->red.data), "value_changed"); + sprintf(text, "%0.0f", wvals.redstretch); + gtk_entry_set_text(GTK_ENTRY(elements->red.text), text); + elements->green.data->value = wvals.greenstretch; + gtk_signal_emit_by_name(GTK_OBJECT(elements->green.data), "value_changed"); + sprintf(text, "%0.0f", wvals.greenstretch); + gtk_entry_set_text(GTK_ENTRY(elements->green.text), text); + elements->blue.data->value = wvals.bluestretch; + gtk_signal_emit_by_name(GTK_OBJECT(elements->blue.data), "value_changed"); + sprintf(text, "%0.0f", wvals.bluestretch); + gtk_entry_set_text(GTK_ENTRY(elements->blue.text), text); + + + if (wvals.fractaltype==0) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_mandelbrot), wvals.fractaltype == 0); + if (wvals.fractaltype==1) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_julia), wvals.fractaltype == 1); + if (wvals.fractaltype==2) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_barnsley1), wvals.fractaltype == 2); + if (wvals.fractaltype==3) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_barnsley2), wvals.fractaltype == 3); + if (wvals.fractaltype==4) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_barnsley3), wvals.fractaltype == 4); + if (wvals.fractaltype==5) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_spider), wvals.fractaltype == 5); + if (wvals.fractaltype==6) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_manowar), wvals.fractaltype == 6); + if (wvals.fractaltype==7) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_lambda), wvals.fractaltype == 7); + if (wvals.fractaltype==8) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->type_sierpinski), wvals.fractaltype == 8); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->redmodesin), wvals.redmode == SINUS); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->redmodecos), wvals.redmode == COSINUS); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->redmodenone), wvals.redmode == NONE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->greenmodesin), wvals.greenmode == SINUS); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->greenmodecos), wvals.greenmode == COSINUS); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->greenmodenone), wvals.greenmode == NONE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->bluemodesin), wvals.bluemode == SINUS); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->bluemodecos), wvals.bluemode == COSINUS); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->bluemodenone), wvals.bluemode == NONE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->redinvert), wvals.redinvert != FALSE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->greeninvert), wvals.greeninvert != FALSE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->blueinvert), wvals.blueinvert != FALSE); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->colormode0), wvals.colormode == 0); + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(elements->colormode1), wvals.colormode == 1); + ready_now = TRUE; +} + +/********************************************************************** + FUNCTION: ok_warn_window + *********************************************************************/ + +/* From testgtk */ +static void +ok_warn_window(GtkWidget * widget, + gpointer data) +{ + gtk_widget_destroy(GTK_WIDGET(data)); +} + +/********************************************************************** + FUNCTION: create_warn_dialog + *********************************************************************/ + +void +create_warn_dialog(gchar * msg) +{ + GtkWidget *window = NULL; + GtkWidget *label; + GtkWidget *button; + + window = gtk_dialog_new(); + + gtk_window_set_title(GTK_WINDOW(window), "Warning"); + gtk_container_border_width(GTK_CONTAINER(window), 0); + + button = gtk_button_new_with_label("OK"); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + (GtkSignalFunc) ok_warn_window, + window); + + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->action_area), button, TRUE, TRUE, 0); + gtk_widget_grab_default(button); + gtk_widget_show(button); + label = gtk_label_new(msg); + gtk_misc_set_padding(GTK_MISC(label), 10, 10); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(window)->vbox), label, TRUE, TRUE, 0); + gtk_widget_show(label); + gtk_widget_show(window); + gtk_main(); + gdk_flush(); + +} + +/********************************************************************** + FUNCTION: save_options + *********************************************************************/ + +void +save_options(FILE * fp) +{ + /* Save options */ + + fprintf(fp, "fractaltype: %i\n", wvals.fractaltype); + fprintf(fp, "xmin: %0.15f\n", wvals.xmin); + fprintf(fp, "xmax: %0.15f\n", wvals.xmax); + fprintf(fp, "ymin: %0.15f\n", wvals.ymin); + fprintf(fp, "ymax: %0.15f\n", wvals.ymax); + fprintf(fp, "iter: %0.15f\n", wvals.iter); + fprintf(fp, "cx: %0.15f\n", wvals.cx); + fprintf(fp, "cy: %0.15f\n", wvals.cy); + fprintf(fp, "redstretch: %0.15f\n", wvals.redstretch); + fprintf(fp, "greenstretch: %0.15f\n", wvals.greenstretch); + fprintf(fp, "bluestretch: %0.15f\n", wvals.bluestretch); + fprintf(fp, "redmode: %i\n", wvals.redmode); + fprintf(fp, "greenmode: %i\n", wvals.greenmode); + fprintf(fp, "bluemode: %i\n", wvals.bluemode); + fprintf(fp, "redinvert: %i\n", wvals.redinvert); + fprintf(fp, "greeninvert: %i\n", wvals.greeninvert); + fprintf(fp, "blueinvert: %i\n", wvals.blueinvert); + fprintf(fp, "colormode: %i\n", wvals.colormode); + fputs("#**********************************************************************\n", fp); + fprintf(fp, "\n"); + fputs("#**********************************************************************\n", fp); +} + +/********************************************************************** + FUNCTION: save_callback + *********************************************************************/ + +void +save_callback() +{ + FILE *fp; + gchar *savename; + + savename = filename; + + fp = fopen(savename, "w+"); + + if (!fp) { + gchar errbuf[256]; + + sprintf(errbuf, msg[lng][MSG_SAVEERROR], savename); + create_warn_dialog(errbuf); + g_warning(errbuf); + return; + } + /* Write header out */ + fputs(FRACTAL_HEADER, fp); + fputs("#**********************************************************************\n", fp); + fputs("# This is a data file for the Fractal Explorer plug-in for the GIMP *\n", fp); + fputs("# Get the plug-in at http://www.mygale.org/~cotting *\n", fp); + fputs("#**********************************************************************\n", fp); + + save_options(fp); + + if (ferror(fp)) + create_warn_dialog(msg[lng][MSG_WRITEFAILURE]); + fclose(fp); +} + +/********************************************************************** + FUNCTION: file_selection_ok + *********************************************************************/ + +void +file_selection_ok(GtkWidget * w, + GtkFileSelection * fs, + gpointer data) +{ + gchar *filenamebuf; + struct stat filestat; + gint err; + filenamebuf = gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs)); + + /* Get the name */ + if (strlen(filenamebuf) == 0) { + create_warn_dialog(msg[lng][MSG_NOFILENAME]); + return; + } + /* Check if directory exists */ + err = stat(filenamebuf, &filestat); + + if (!err && S_ISDIR(filestat.st_mode)) { + /* Can't save to directory */ + create_warn_dialog(msg[lng][MSG_NOSAVETODIR]); + return; + } + filename = g_strdup(filenamebuf); + save_callback(); + gtk_widget_destroy(GTK_WIDGET(fs)); +} + +/********************************************************************** + FUNCTION: destroy_window + *********************************************************************/ + +void +destroy_window(GtkWidget * widget, + GtkWidget ** window) +{ + *window = NULL; +} + +/********************************************************************** + FUNCTION: load_file_selection_ok +**********************************************************************/ + +void +load_file_selection_ok(GtkWidget * w, + GtkFileSelection * fs, + gpointer data) +{ + struct stat filestat; + gint err; + + filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs))); + + err = stat(filename, &filestat); + + if (!err && S_ISREG(filestat.st_mode)) { + explorer_load(); + } + gtk_widget_destroy(GTK_WIDGET(fs)); + gtk_widget_show(maindlg); + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); +} + + +/********************************************************************** + FUNCTION: create_load_file_selection + *********************************************************************/ + + +void +create_load_file_selection() +{ + GtkWidget *window = NULL; + + /* Load a single object */ + window = gtk_file_selection_new(msg[lng][MSG_LOADWINTITLE]); + gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_NONE); + + gtk_signal_connect(GTK_OBJECT(window), "destroy", + (GtkSignalFunc) destroy_window, + &window); + + gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(window)->ok_button), + "clicked", (GtkSignalFunc) load_file_selection_ok, + (gpointer) window); + set_tooltip(tips, GTK_FILE_SELECTION(window)->ok_button, msg[lng][MSG_LOADBUTTONCOMMENT]); + + gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(window)->cancel_button), + "clicked", (GtkSignalFunc) gtk_widget_destroy, + GTK_OBJECT(window)); + set_tooltip(tips, GTK_FILE_SELECTION(window)->cancel_button, msg[lng][MSG_CANCELLOAD]); + if (!GTK_WIDGET_VISIBLE(window)) + gtk_widget_show(window); +} + + +/********************************************************************** + FUNCTION: create_file_selection + *********************************************************************/ + +void +create_file_selection() +{ + GtkWidget *window = NULL; + + if (!window) { + window = gtk_file_selection_new(msg[lng][MSG_SAVEWINTITLE]); + gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_NONE); + + gtk_signal_connect(GTK_OBJECT(window), "destroy", + (GtkSignalFunc) destroy_window, + &window); + + gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(window)->ok_button), + "clicked", (GtkSignalFunc) file_selection_ok, + (gpointer) window); + set_tooltip(tips, GTK_FILE_SELECTION(window)->ok_button, msg[lng][MSG_SAVEBUTTONCOMMENT]); + + gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(window)->cancel_button), + "clicked", (GtkSignalFunc) gtk_widget_destroy, + GTK_OBJECT(window)); + set_tooltip(tips, GTK_FILE_SELECTION(window)->cancel_button, msg[lng][MSG_CANCELSAVE]); + } + if(tpath) + { + gtk_file_selection_set_filename(GTK_FILE_SELECTION (window),tpath); + } + else + /* Last path is where usually saved to */ + if(fractalexplorer_path_list) + { + gtk_file_selection_set_filename(GTK_FILE_SELECTION (window), + g_list_nth(fractalexplorer_path_list, + g_list_length(fractalexplorer_path_list)-1)->data); + } + else + gtk_file_selection_set_filename(GTK_FILE_SELECTION (window),"/tmp"); + + if (!GTK_WIDGET_VISIBLE(window)) + gtk_widget_show(window); + +} + +/********************************************************************** + FUNCTION: get_line + *********************************************************************/ + +char * +get_line(gchar * buf, gint s, FILE * from, gint init) +{ + gint slen; + char *ret; + + if (init) + line_no = 1; + else + line_no++; + + do { + ret = fgets(buf, s, from); + } + while (!ferror(from) && buf[0] == '#'); + + slen = strlen(buf); + + /* The last newline is a pain */ + if (slen > 0) + buf[slen - 1] = '\0'; + + if (ferror(from)) { + g_warning("Error reading file"); + return (0); + } + return (ret); +} + +/********************************************************************** + FUNCTION: load_options + *********************************************************************/ + +gint +load_options(fractalexplorerOBJ * xxx, FILE * fp) +{ + gchar load_buf[MAX_LOAD_LINE]; + gchar str_buf[MAX_LOAD_LINE]; + gchar opt_buf[MAX_LOAD_LINE]; + + xxx->opts.fractaltype=0; + xxx->opts.xmin=-2.0; + xxx->opts.xmax=2.0; + xxx->opts.ymin=-1.5; + xxx->opts.ymax=1.5; + xxx->opts.iter=50.0; + xxx->opts.cx=-0.75; + xxx->opts.cy=-0.2; + xxx->opts.colormode=0; + xxx->opts.redstretch=128.0; + xxx->opts.greenstretch=128.0; + xxx->opts.bluestretch=128.0; + xxx->opts.redmode=1; + xxx->opts.greenmode=1; + xxx->opts.bluemode=1; + xxx->opts.redinvert=0; + xxx->opts.greeninvert=0; + xxx->opts.blueinvert=0; + xxx->opts.alwayspreview=1; + + get_line(load_buf, MAX_LOAD_LINE, fp, 0); + + while (strcmp(load_buf, "")) { + /* Get option name */ + + sscanf(load_buf, "%s %s", str_buf, opt_buf); + + if (!strcmp(str_buf, "fractaltype:")) { + /* Value is decimal */ + int sp = 0; + + sp = atoi(opt_buf); + if (sp < 0) + return (-1); + xxx->opts.fractaltype = sp; + } else if (!strcmp(str_buf, "xmin:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.xmin = sp; + } else if (!strcmp(str_buf, "xmax:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.xmax = sp; + } else if (!strcmp(str_buf, "ymin:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.ymin = sp; + } else if (!strcmp(str_buf, "ymax:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.ymax = sp; + } else if (!strcmp(str_buf, "redstretch:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.redstretch = sp; + } else if (!strcmp(str_buf, "greenstretch:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.greenstretch = sp; + } else if (!strcmp(str_buf, "bluestretch:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.bluestretch = sp; + } else if (!strcmp(str_buf, "iter:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.iter = sp; + } else if (!strcmp(str_buf, "cx:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.cx = sp; + } else if (!strcmp(str_buf, "cy:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + xxx->opts.cy = sp; + } else if (!strcmp(str_buf, "redmode:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.redmode = sp; + } else if (!strcmp(str_buf, "greenmode:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.greenmode = sp; + } else if (!strcmp(str_buf, "bluemode:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.bluemode = sp; + } else if (!strcmp(str_buf, "redinvert:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.redinvert = sp; + } else if (!strcmp(str_buf, "greeninvert:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.greeninvert = sp; + } else if (!strcmp(str_buf, "blueinvert:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.blueinvert = sp; + } else if (!strcmp(str_buf, "colormode:")) { + int sp = 0; + + sp = atoi(opt_buf); + xxx->opts.colormode = sp; + } + get_line(load_buf, MAX_LOAD_LINE, fp, 0); + } + return (0); +} + + +/********************************************************************** + FUNCTION: gradient_load_options + *********************************************************************/ + +gint +gradient_load_options(gradientOBJ * xxx, FILE * fp) +{ + gchar load_buf[MAX_LOAD_LINE]; + gchar str_buf[MAX_LOAD_LINE]; + gchar opt_buf[MAX_LOAD_LINE]; + + get_line(load_buf, MAX_LOAD_LINE, fp, 0); + + while (strcmp(load_buf, "")) { + /* Get option name */ + + sscanf(load_buf, "%s %s", str_buf, opt_buf); + + if (!strcmp(str_buf, "redstretch:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + wvals.redstretch = sp; + } else if (!strcmp(str_buf, "greenstretch:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + wvals.greenstretch = sp; + } else if (!strcmp(str_buf, "bluestretch:")) { + /* Value is double */ + double sp = 0; + + sp = atof(opt_buf); + wvals.bluestretch = sp; + } else if (!strcmp(str_buf, "redmode:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.redmode = sp; + } else if (!strcmp(str_buf, "greenmode:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.greenmode = sp; + } else if (!strcmp(str_buf, "bluemode:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.bluemode = sp; + } else if (!strcmp(str_buf, "redinvert:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.redinvert = sp; + } else if (!strcmp(str_buf, "greeninvert:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.greeninvert = sp; + } else if (!strcmp(str_buf, "blueinvert:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.blueinvert = sp; + } else if (!strcmp(str_buf, "colormode:")) { + int sp = 0; + + sp = atoi(opt_buf); + wvals.colormode = sp; + } + get_line(load_buf, MAX_LOAD_LINE, fp, 0); + } + return (0); +} + +/********************************************************************** + FUNCTION: explorer_load + *********************************************************************/ + +void +explorer_load() +{ + FILE *fp; + gchar load_buf[MAX_LOAD_LINE]; + + g_assert(filename != NULL); + fp = fopen(filename, "r"); + if (!fp) { + g_warning(msg[lng][MSG_OPENERROR], filename); + return; + } + get_line(load_buf, MAX_LOAD_LINE, fp, 1); + + if (strncmp(FRACTAL_HEADER, load_buf, strlen(load_buf))) { + gchar err[256]; + + sprintf(err, msg[lng][MSG_WRONGFILETYPE], filename); + create_warn_dialog(err); + return; + } + if (load_options(current_obj,fp)) { + /* waste some mem */ + gchar err[256]; + + sprintf(err, + msg[lng][MSG_CORRUPTFILE], + filename, + line_no); + create_warn_dialog(err); + return; + } + wvals=current_obj->opts; + fclose(fp); +} diff --git a/plug-ins/FractalExplorer/Events.h b/plug-ins/FractalExplorer/Events.h new file mode 100644 index 0000000000..d40011c2ee --- /dev/null +++ b/plug-ins/FractalExplorer/Events.h @@ -0,0 +1,304 @@ + +/********************************************************************** + FUNCTION: preview_button_press_event + *********************************************************************/ + +gint +preview_button_press_event(GtkWidget * widget, GdkEventButton * event) +{ + double left, + right, + bottom, + top, + dx, + dy; + int px, + py, + x, + y; + unsigned short r, + g, + b; + guchar *p_ul, + *i, + *p; + + if (event->button == 1) { + x_press = event->x; + y_press = event->y; + left = sel_x1; + right = sel_x2 - 1; + bottom = sel_y2 - 1; + top = sel_y1; + dx = (right - left) / (preview_width - 1); + dy = (bottom - top) / (preview_height - 1); + xbild = preview_width; + ybild = preview_height; + xdiff = (xmax - xmin) / xbild; + ydiff = (ymax - ymin) / ybild; + + py = y_press; + px = 0; + p_ul = wint.wimage + 3 * (preview_width * py + 0); + + for (x = 0; x < preview_width; x++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3; + px += 1; + } + py = 0; + p_ul = wint.wimage + 3 * (preview_width * 0 + (int) x_press); + px = x_press; + for (y = 0; y < preview_height; y++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3 * (preview_width); + py += 1; + } /* for */ + + p = wint.wimage; + + for (y = 0; y < preview_height; y++) { + gtk_preview_draw_row(GTK_PREVIEW(wint.preview), p, 0, y, preview_width); + p += preview_width * 3; + } /* for */ + gtk_widget_draw(wint.preview, NULL); + gdk_flush(); + + } + return (TRUE); +} + +/********************************************************************** + FUNCTION: preview_motion_notify_event + *********************************************************************/ + +gint +preview_motion_notify_event(GtkWidget * widget, GdkEventButton * event) +{ + int px, + py, + x, + y; + unsigned short r, + g, + b; + guchar *p_ul, + *i, + *p; + + ypos = oldypos; + xpos = oldxpos; + if (oldypos != -1) { + py = ypos; + px = 0; + p_ul = wint.wimage + 3 * (preview_width * py + 0); + + for (x = 0; x < preview_width; x++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3; + px += 1; + } + py = 0; + p_ul = wint.wimage + 3 * (preview_width * 0 + (int) xpos); + px = xpos; + for (y = 0; y < preview_height; y++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3 * (preview_width); + py += 1; + } /* for */ + } + oldxpos = xpos = event->x; + oldypos = ypos = event->y; + + if ((xpos >= 0.0) && (ypos >= 0.0) + && (xpos < preview_width) && (ypos < preview_height)) { + + py = ypos; + px = 0; + p_ul = wint.wimage + 3 * (preview_width * py + 0); + + for (x = 0; x < preview_width; x++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3; + px += 1; + } + py = 0; + p_ul = wint.wimage + 3 * (preview_width * 0 + (int) xpos); + px = xpos; + for (y = 0; y < preview_height; y++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3 * (preview_width); + py += 1; + } /* for */ + } else { + oldypos = -1; + oldxpos = -1; + } + + p = wint.wimage; + + for (y = 0; y < preview_height; y++) { + gtk_preview_draw_row(GTK_PREVIEW(wint.preview), p, 0, y, preview_width); + p += preview_width * 3; + } /* for */ + gtk_widget_draw(wint.preview, NULL); + gdk_flush(); + + return (TRUE); +} + +/********************************************************************** + FUNCTION: preview_leave_notify_event + *********************************************************************/ + +gint +preview_leave_notify_event(GtkWidget * widget, GdkEventButton * event) +{ + int px, + py, + x, + y; + unsigned short r, + g, + b; + guchar *p_ul, + *i, + *p; + + ypos = oldypos; + xpos = oldxpos; + if (oldypos != -1) { + py = ypos; + px = 0; + p_ul = wint.wimage + 3 * (preview_width * py + 0); + + for (x = 0; x < preview_width; x++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3; + px += 1; + } + py = 0; + p_ul = wint.wimage + 3 * (preview_width * 0 + (int) xpos); + px = xpos; + for (y = 0; y < preview_height; y++) { + i = wint.wimage + 3 * (preview_width * py + px); + r = (*i++) ^ 254; + g = (*i++) ^ 254; + b = (*i) ^ 254; + p_ul[0] = r; + p_ul[1] = g; + p_ul[2] = b; + p_ul += 3 * (preview_width); + py += 1; + } /* for */ + } + oldxpos = -1; + oldypos = -1; + + p = wint.wimage; + + for (y = 0; y < preview_height; y++) { + gtk_preview_draw_row(GTK_PREVIEW(wint.preview), p, 0, y, preview_width); + p += preview_width * 3; + } /* for */ + gtk_widget_draw(wint.preview, NULL); + gdk_flush(); + MyCursor = gdk_cursor_new(GDK_TOP_LEFT_ARROW); + gdk_window_set_cursor(maindlg->window, MyCursor); + + return (TRUE); +} + +/********************************************************************** + FUNCTION: preview_enter_notify_event + *********************************************************************/ + +gint +preview_enter_notify_event(GtkWidget * widget, GdkEventButton * event) +{ + MyCursor = gdk_cursor_new(GDK_TCROSS); + gdk_window_set_cursor(maindlg->window, MyCursor); + return (TRUE); +} + +/********************************************************************** + FUNCTION: preview_button_release_event + *********************************************************************/ + +gint +preview_button_release_event(GtkWidget * widget, GdkEventButton * event) +{ + double l_xmin, + l_xmax, + l_ymin, + l_ymax; + if (event->button == 1) { + x_release = event->x; + y_release = event->y; + + if ((x_press >= 0.0) && (y_press >= 0.0) + && (x_release >= 0.0) && (y_release >= 0.0) + && (x_press < preview_width) && (y_press < preview_height) + && (x_release < preview_width) && (y_release < preview_height)) { + l_xmin = wvals.xmin + (wvals.xmax - wvals.xmin) * (x_press / preview_width); + l_xmax = wvals.xmin + (wvals.xmax - wvals.xmin) * (x_release / preview_width); + l_ymin = wvals.ymin + (wvals.ymax - wvals.ymin) * (y_press / preview_height); + l_ymax = wvals.ymin + (wvals.ymax - wvals.ymin) * (y_release / preview_height); + zooms[zoomindex] = wvals; + zoomindex++; + if (zoomindex > 99) + zoomindex = 99; + zoommax = zoomindex; + wvals.xmin = l_xmin; + wvals.xmax = l_xmax; + wvals.ymin = l_ymin; + wvals.ymax = l_ymax; + dialog_change_scale(); + dialog_update_preview(); + oldypos = oldxpos = -1; + } + } + return (TRUE); +} diff --git a/plug-ins/FractalExplorer/FractalExplorer.c b/plug-ins/FractalExplorer/FractalExplorer.c new file mode 100644 index 0000000000..6675eb5b80 --- /dev/null +++ b/plug-ins/FractalExplorer/FractalExplorer.c @@ -0,0 +1,2209 @@ +/********************************************************************** + Fractal Explorer Plug-in (Version 2.00 Beta) + Daniel Cotting (cotting@mygale.org) + ********************************************************************** + ********************************************************************** + Official homepages: http://www.mygale.org/~cotting + http://cotting.citeweb.net + http://village.cyberbrain.com/cotting + *********************************************************************/ + +/********************************************************************** + The GIMP -- an image manipulation program + Copyright (C) 1995 Spencer Kimball and Peter Mattis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + *********************************************************************/ + +/********************************************************************** + Some code has been 'stolen' from: + - Peter Kirchgessner (Pkirchg@aol.com) + - Scott Draves (spot@cs.cmu.edu) + - Andy Thomas (alt@picnic.demon.co.uk) + . + . + . + ********************************************************************** + "If you steal from one author it's plagiarism; if you steal from + many it's research." --Wilson Mizner + *********************************************************************/ + +/********************************************************************** + Include necessary files + *********************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "gtk/gtk.h" +#include "libgimp/gimp.h" + +#include "logo.h" +#include "pix_data.h" + +#include "Languages.h" +#include "FractalExplorer.h" +#include "Events.h" +#include "Callbacks.h" +#include "Dialogs.h" + +/********************************************************************** + MAIN() + *********************************************************************/ + +MAIN() + +/********************************************************************** + FUNCTION: query + *********************************************************************/ + +static void +query() +{ + static GParamDef args[] = + { + {PARAM_INT32, "run_mode", "Interactive, non-interactive"}, + {PARAM_IMAGE, "image", "Input image"}, + {PARAM_DRAWABLE, "drawable", "Input drawable"}, + {PARAM_INT8, "fractaltype", "0: Mandelbrot; 1: Julia; 2: Barnsley 1; 3: Barnsley 2; 4: Barnsley 3; 5: Spider; 6: ManOWar; 7: Lambda; 8: Sierpinski"}, + {PARAM_FLOAT, "xmin", "xmin fractal image delimiter"}, + {PARAM_FLOAT, "xmax", "xmax fractal image delimiter"}, + {PARAM_FLOAT, "ymin", "ymin fractal image delimiter"}, + {PARAM_FLOAT, "ymax", "ymax fractal image delimiter"}, + {PARAM_FLOAT, "iter", "Iteration value"}, + {PARAM_FLOAT, "cx", "cx value ( only Julia)"}, + {PARAM_FLOAT, "cy", "cy value ( only Julia)"}, + {PARAM_INT8, "colormode", "0: Apply colormap as specified by the parameters below; 1: Apply active gradient to final image"}, + {PARAM_FLOAT, "redstretch", "Red stretching factor"}, + {PARAM_FLOAT, "greenstretch", "Green stretching factor"}, + {PARAM_FLOAT, "bluestretch", "Blue stretching factor"}, + {PARAM_INT8, "redmode", "Red application mode (0:SIN;1:COS;2:NONE)"}, + {PARAM_INT8, "greenmode", "Green application mode (0:SIN;1:COS;2:NONE)"}, + {PARAM_INT8, "bluemode", "Blue application mode (0:SIN;1:COS;2:NONE)"}, + {PARAM_INT8, "redinvert", "Red inversion mode (1: enabled; 0: disabled)"}, + {PARAM_INT8, "greeninvert", "Green inversion mode (1: enabled; 0: disabled)"}, + {PARAM_INT8, "blueinvert", "Green inversion mode (1: enabled; 0: disabled)"}, + }; + static GParamDef *return_vals = NULL; + static int nargs = sizeof(args) / sizeof(args[0]); + static int nreturn_vals = 0; + + gimp_install_procedure("plug_in_fractalexplorer", + "Chaos Fractal Explorer Plug-In", + "No help yet.", + "Daniel Cotting (cotting@mygale.org, www.mygale.org/~cotting)", + "Daniel Cotting (cotting@mygale.org, www.mygale.org/~cotting)", + "October 1997", + "/Filters/Render/Fractal Explorer", + "RGB*", + PROC_PLUG_IN, + nargs, nreturn_vals, + args, return_vals); +} + +/********************************************************************** + FUNCTION: run + *********************************************************************/ + +static void +run(char *name, + int nparams, + GParam * param, + int *nreturn_vals, + GParam ** return_vals) +{ + GParam *values; + gint32 image_ID; + GRunModeType run_mode; + double xhsiz, + yhsiz; + int pwidth, + pheight; + GStatusType status = STATUS_SUCCESS; + FILE * fp; + gchar * filname=NULL; + gchar load_buf[MAX_LOAD_LINE]; + + values = g_new(GParam, 1); + + run_mode = param[0].data.d_int32; + + values[0].type = PARAM_STATUS; + values[0].data.d_status = status; + + *nreturn_vals = 1; + *return_vals = values; + + /* Get the specified drawable */ + drawable = gimp_drawable_get(param[2].data.d_drawable); + image_ID = param[1].data.d_image; + tile_width = gimp_tile_width(); + tile_height = gimp_tile_height(); + + img_width = gimp_drawable_width(drawable->id); + img_height = gimp_drawable_height(drawable->id); + img_bpp = gimp_drawable_bpp(drawable->id); + + gimp_drawable_mask_bounds(drawable->id, &sel_x1, &sel_y1, &sel_x2, &sel_y2); + + sel_width = sel_x2 - sel_x1; + sel_height = sel_y2 - sel_y1; + + cen_x = (double) (sel_x2 - 1 + sel_x1) / 2.0; + cen_y = (double) (sel_y2 - 1 + sel_y1) / 2.0; + + xhsiz = (double) (sel_width - 1) / 2.0; + yhsiz = (double) (sel_height - 1) / 2.0; + + /* Calculate preview size */ + if (sel_width > sel_height) { + pwidth = MIN(sel_width, PREVIEW_SIZE); + pheight = sel_height * pwidth / sel_width; + } else { + pheight = MIN(sel_height, PREVIEW_SIZE); + pwidth = sel_width * pheight / sel_height; + } /* else */ + + preview_width = MAX(pwidth, 2); /* Min size is 2 */ + preview_height = MAX(pheight, 2); + + /* See how we will run */ + switch (run_mode) { + case RUN_INTERACTIVE: + /* Possibly retrieve data */ + + gimp_get_data("plug_in_fractalexplorer", &wvals); + + lng=0; + filname = g_malloc (100); + sprintf (filname, "%s%s", getenv("HOME"), "/.fractalexplorerrc"); + fp = fopen (filname, "r"); + if (!fp) + { + fp = fopen (filname, "w"); + if (fp) fputs("FX-LANG:En\n",fp); + } + else + { + fgets(load_buf, MAX_LOAD_LINE, fp); + if (strlen(load_buf) > 0) load_buf[strlen(load_buf) - 1] = '\0'; + if(strncmp("FX-LANG:En",load_buf,strlen(load_buf))==0) + { lng=0; } + if(strncmp("FX-LANG:Fr",load_buf,strlen(load_buf))==0) + { lng=1; } + if(strncmp("FX-LANG:De",load_buf,strlen(load_buf))==0) + { lng=2; } + } + fclose(fp); + + wvals.language=lng; + do_english = (wvals.language == 0); + do_french = (wvals.language == 1); + do_german = (wvals.language == 2); + + /* Get information from the dialog */ + + if (!explorer_dialog()) + return; + + break; + + case RUN_NONINTERACTIVE: + /* Make sure all the arguments are present */ + + if (nparams != 21) + status = STATUS_CALLING_ERROR; + + if (status == STATUS_SUCCESS) { + wvals.fractaltype = param[3].data.d_int8; + wvals.xmin = param[4].data.d_float; + wvals.xmax = param[5].data.d_float; + wvals.ymin = param[6].data.d_float; + wvals.ymax = param[7].data.d_float; + wvals.iter = param[8].data.d_float; + wvals.cx = param[9].data.d_float; + wvals.cy = param[10].data.d_float; + wvals.colormode = param[11].data.d_int8; + wvals.redstretch = param[12].data.d_float; + wvals.greenstretch = param[13].data.d_float; + wvals.bluestretch = param[14].data.d_float; + wvals.redmode = param[15].data.d_int8; + wvals.greenmode = param[16].data.d_int8; + wvals.bluemode = param[17].data.d_int8; + wvals.redinvert = param[18].data.d_int8; + wvals.greeninvert = param[19].data.d_int8; + wvals.blueinvert = param[20].data.d_int8; + } + make_color_map(); + break; + + case RUN_WITH_LAST_VALS: + /* Possibly retrieve data */ + + gimp_get_data("plug_in_fractalexplorer", &wvals); + make_color_map(); + break; + + default: + break; + } /* switch */ + + xmin = wvals.xmin; + xmax = wvals.xmax; + ymin = wvals.ymin; + ymax = wvals.ymax; + cx = wvals.cx; + cy = wvals.cy; + + if (status == STATUS_SUCCESS) { + /* Make sure that the drawable is indexed or RGB color */ + if (gimp_drawable_color(drawable->id)) { + gimp_progress_init("Rendering fractal..."); + + /* Set the tile cache size */ + gimp_tile_cache_ntiles(2 * (drawable->width / gimp_tile_width() + 1)); + /* Run! */ + + explorer(drawable); + if (run_mode != RUN_NONINTERACTIVE) + gimp_displays_flush(); + + /* Store data */ + + if (run_mode == RUN_INTERACTIVE) + gimp_set_data("plug_in_fractalexplorer", &wvals, sizeof(explorer_vals_t)); + } else { + status = STATUS_EXECUTION_ERROR; + } + } + values[0].data.d_status = status; + + gimp_drawable_detach(drawable); +} + +/********************************************************************** + FUNCTION: explorer + *********************************************************************/ + +void +explorer(GDrawable * drawable) +{ + GPixelRgn srcPR, + destPR; + gint width, + height, + bytes, + row, + x1, + y1, + x2, + y2; + guchar *src_row, + *dest_row; + + /* Get the input area. This is the bounding box of the selection in + * the image (or the entire image if there is no selection). Only + * operating on the input area is simply an optimization. It doesn't + * need to be done for correct operation. (It simply makes it go + * faster, since fewer pixels need to be operated on). + */ + gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2); + + /* Get the size of the input image. (This will/must be the same + * as the size of the output image. + */ + width = drawable->width; + height = drawable->height; + bytes = drawable->bpp; + + /* allocate row buffers */ + src_row = (guchar *) malloc((x2 - x1) * bytes); + dest_row = (guchar *) malloc((x2 - x1) * bytes); + + /* initialize the pixel regions */ + gimp_pixel_rgn_init(&srcPR, drawable, 0, 0, width, height, FALSE, FALSE); + gimp_pixel_rgn_init(&destPR, drawable, 0, 0, width, height, TRUE, TRUE); + + xbild = width; + ybild = height; + xdiff = (xmax - xmin) / xbild; + ydiff = (ymax - ymin) / ybild; + + for (row = y1; row < y2; row++) { + gimp_pixel_rgn_get_row(&srcPR, src_row, x1, row, (x2 - x1)); + + explorer_render_row(src_row, + dest_row, + row, + (x2 - x1), + bytes); + + /* store the dest */ + gimp_pixel_rgn_set_row(&destPR, dest_row, x1, row, (x2 - x1)); + + if ((row % 10) == 0) + gimp_progress_update((double) row / (double) (y2 - y1)); + } + + /* update the processed region */ + gimp_drawable_flush(drawable); + gimp_drawable_merge_shadow(drawable->id, TRUE); + gimp_drawable_update(drawable->id, x1, y1, (x2 - x1), (y2 - y1)); + + free(src_row); + free(dest_row); +} + +/********************************************************************** + FUNCTION: explorer_render_row + *********************************************************************/ + +void +explorer_render_row(const guchar * src_row, + guchar * dest_row, + gint row, + gint row_width, + gint bytes) +{ + gint col, + bytenum; + double a, + b, + x, + y, + oldx, + oldy, + tempsqrx, + tempsqry, + tmpx=0, + tmpy=0, + foldxinitx, + foldxinity, + foldyinitx, + foldyinity, + xx=0, + cx, + cy; + int zaehler, + color, + iteration; + cx = wvals.cx; + cy = wvals.cy; + iteration = wvals.iter; + for (col = 0; col < row_width; col++) { + a = xmin + (double) col *xdiff; + b = ymin + (double) row *ydiff; + if (wvals.fractaltype!=0) { + tmpx = x = a; + tmpy = y = b; + } else { + x = 0; + y = 0; + } + for (zaehler = 0; (zaehler < iteration) && ((x * x + y * y) < 4); zaehler++) { + oldx=x; oldy=y; + if (wvals.fractaltype==1) { + /* Julia */ + xx = x * x - y * y + cx; + y = 2.0 * x * y + cy; + } else if (wvals.fractaltype==0) { + /*Mandelbrot*/ + xx = x * x - y * y + a; + y = 2.0 * x * y + b; + } else if (wvals.fractaltype==2) { +/* Some code taken from X-Fractint */ +/* Barnsley M1 */ + foldxinitx = oldx * cx; + foldyinity = oldy * cy; + foldxinity = oldx * cy; + foldyinitx = oldy * cx; + /* orbit calculation */ + if(oldx >= 0) + { + xx = (foldxinitx - cx - foldyinity); + y = (foldyinitx - cy + foldxinity); + } + else + { + xx = (foldxinitx + cx - foldyinity); + y = (foldyinitx + cy + foldxinity); + } + } else if (wvals.fractaltype==3) { +/* Barnsley Unnamed */ + + foldxinitx = oldx * cx; + foldyinity = oldy * cy; + foldxinity = oldx * cy; + foldyinitx = oldy * cx; + /* orbit calculation */ + if(foldxinity + foldyinitx >= 0) + { + xx = foldxinitx - cx - foldyinity; + y = foldyinitx - cy + foldxinity; + } + else + { + xx = foldxinitx + cx - foldyinity; + y = foldyinitx + cy + foldxinity; + } + } else if (wvals.fractaltype==4) { + /*Barnsley 1*/ + foldxinitx = oldx * oldx; + foldyinity = oldy * oldy; + foldxinity = oldx * oldy; + /* orbit calculation */ + if(oldx > 0) + { + xx = foldxinitx - foldyinity - 1.0; + y = foldxinity * 2; + } + else + { + xx = foldxinitx - foldyinity -1.0 + cx * oldx; + y = foldxinity * 2; + y += cy * oldx; + } + } else if (wvals.fractaltype==5) { + /* Spider(XAXIS) { c=z=pixel: z=z*z+c; c=c/2+z, |z|<=4 } */ + xx = x*x - y*y + tmpx + cx; + y = 2 * oldx * oldy + tmpy +cy; + tmpx = tmpx/2 + xx; + tmpy = tmpy/2 + y; + } else if (wvals.fractaltype==6) { +/* ManOWarfpFractal() */ + xx = x*x - y*y + tmpx + cx; + y = 2.0 * x * y + tmpy + cy; + tmpx = oldx; + tmpy = oldy; + } else if (wvals.fractaltype==7) { +/* Lambda */ + tempsqrx=x*x; + tempsqry=y*y; + tempsqrx = oldx - tempsqrx + tempsqry; + tempsqry = -(oldy * oldx); + tempsqry += tempsqry + oldy; + xx = cx * tempsqrx - cy * tempsqry; + y = cx * tempsqry + cy * tempsqrx; + } else if (wvals.fractaltype==8) { +/* Sierpinski */ + xx = oldx + oldx; + y = oldy + oldy; + if(oldy > .5) + y = y - 1; + else if (oldx > .5) + xx = xx - 1; + } + x = xx; + } + color = (int) (zaehler * 255.0 / iteration); + dest_row[col * bytes] = colormap[color][0]; + dest_row[col * bytes + 1] = colormap[color][1]; + dest_row[col * bytes + 2] = colormap[color][2]; + + if (bytes > 3) + for (bytenum = 3; bytenum < bytes; bytenum++) { + dest_row[col * bytes + bytenum] = src_row[col * bytes + bytenum]; + } + } +} + + +/* + +static gint +rename_button_press(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + GtkWidget *list = (GtkWidget *)data; + GList * sellist; + fractalexplorerOBJ * sel_obj; + + sellist = GTK_LIST(list)->selection; + + sel_obj = (fractalexplorerOBJ *)gtk_object_get_user_data(GTK_OBJECT((GtkWidget *)(sellist->data))); + + fractalexplorer_dialog_edit_list(widget,(gpointer) sel_obj,FALSE); + return(FALSE); +} +*/ + +static gint +delete_button_press_cancel(GtkWidget *widget, + gpointer data) +{ + gtk_widget_destroy(delete_dialog); + gtk_widget_set_sensitive(delete_frame_to_freeze,TRUE); + delete_dialog = NULL; + + return(FALSE); +} + +static gint +fractalexplorer_delete_fractalexplorer_callback(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + GtkWidget *vbox; + GtkWidget *label; + GtkWidget *button; + char *str; + GtkWidget *list = (GtkWidget *)data; + GList * sellist; + fractalexplorerOBJ * sel_obj; + + + sellist = GTK_LIST(list)->selection; + + sel_obj = (fractalexplorerOBJ *)gtk_object_get_user_data(GTK_OBJECT((GtkWidget *)(sellist->data))); + if(delete_dialog) + return(FALSE); + + delete_dialog = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(delete_dialog), msg[lng][MSG_DELFRAC]); + gtk_window_position(GTK_WINDOW(delete_dialog), GTK_WIN_POS_MOUSE); + gtk_container_border_width(GTK_CONTAINER(delete_dialog), 0); + + vbox = gtk_vbox_new(FALSE, 0); + gtk_container_border_width(GTK_CONTAINER(vbox), 8); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(delete_dialog)->vbox), vbox, + FALSE, FALSE, 0); + gtk_widget_show(vbox); + + /* Question */ + + label = gtk_label_new(msg[lng][MSG_DELSURE]); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + str = g_malloc((strlen(sel_obj->draw_name) + 32 * sizeof(char))); + + sprintf(str, msg[lng][MSG_DELSURE2], sel_obj->draw_name); + + label = gtk_label_new(str); + gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + g_free(str); + + /* Buttons */ + button = gtk_button_new_with_label (msg[lng][MSG_DEL]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc) delete_button_press_ok, + data); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (delete_dialog)->action_area), button, TRUE, TRUE, 0); + gtk_widget_grab_default (button); + gtk_object_set_user_data(GTK_OBJECT(button),widget); + gtk_widget_show (button); + + button = gtk_button_new_with_label (msg[lng][MSG_CANCEL]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc) delete_button_press_cancel, + data); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (delete_dialog)->action_area), button, TRUE, TRUE, 0); + gtk_widget_grab_default (button); + gtk_object_set_user_data(GTK_OBJECT(button),widget); + gtk_widget_show (button); + + /* Show! */ + + gtk_widget_set_sensitive(GTK_WIDGET(delete_frame_to_freeze), FALSE); + gtk_widget_show(delete_dialog); + + return(FALSE); +} + + +void +fractalexplorer_save(void) +{ + /* Save the current object */ + if(!current_obj->filename) + { + create_file_selection(current_obj,NULL); + return; + } + save_callback(); +} + + +static gint +gradient_list_button_press(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + + gradientOBJ * sel_obj; + FILE * fp; + gchar * filename; + gchar load_buf[MAX_LOAD_LINE]; + + switch (event->type) + { + case GDK_BUTTON_PRESS: + if(event->button == 3) + { + } + break; + case GDK_2BUTTON_PRESS: + sel_obj = (gradientOBJ *)data; + if(sel_obj) { + if (sel_obj->obj_status && gradient_GRADIENTEDITOR) + { + wvals.colormode=1; + gimp_gradients_set_active(sel_obj->name); + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); + } + else + { + filename=sel_obj->filename; + g_assert (filename != NULL); + fp = fopen (filename, "r"); + if (!fp) + { + g_warning (msg[lng][MSG_OPENERROR], filename); + return 0; + } + get_line(load_buf,MAX_LOAD_LINE,fp,1); + if(strncmp(fractalexplorer_HEADER,load_buf,strlen(load_buf))) + { + gchar err[256]; + sprintf(err,msg[lng][MSG_WRONGFILETYPE],sel_obj->filename); + create_warn_dialog(err); + return(0); + } + + if(gradient_load_options(sel_obj,fp)) + { + gchar err[256]; + sprintf(err,msg[lng][MSG_CORRUPTFILE], + filename, + line_no); + create_warn_dialog(err); + return(0); + } + fclose(fp); + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); + } + } + else + g_warning(msg[lng][MSG_NULLLIST]); + break; + default: + printf(msg[lng][MSG_UNKNOWN_EVENT]); + break; + } + + return(FALSE); +} + + +static void +fractalexplorer_list_ok_callback (GtkWidget *w, + gpointer client_data) +{ + fractalexplorerListOptions *options; + GtkWidget *list; + gint pos; + + options = (fractalexplorerListOptions *) client_data; + list = options->list_entry; + + /* Set the new layer name */ + if (options->obj->draw_name) + { + g_free(options->obj->draw_name); + } + options->obj->draw_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (options->name_entry))); + + /* Need to reorder the list */ + /* gtk_label_set (GTK_LABEL (options->layer_widget->label), layer->name);*/ + + pos = gtk_list_child_position(GTK_LIST(fractalexplorer_gtk_list),list); + + gtk_list_clear_items(GTK_LIST (fractalexplorer_gtk_list),pos,pos+1); + + /* remove/Add again */ + fractalexplorer_list = g_list_remove(fractalexplorer_list,options->obj); + fractalexplorer_list_add(options->obj); + + options->obj->obj_status |= fractalexplorer_MODIFIED; + + gtk_widget_destroy (options->query_box); + g_free (options); + +} + +static void +fractalexplorer_list_cancel_callback (GtkWidget *w, + gpointer client_data) +{ + fractalexplorerListOptions *options; + + options = (fractalexplorerListOptions *) client_data; + if(options->created) + { + /* We are creating an entry so if cancelled must del the list item as well */ + delete_button_press_ok(w,fractalexplorer_gtk_list); + } + + gtk_widget_destroy (options->query_box); + g_free (options); +} + + +static void +fractalexplorer_dialog_edit_list (GtkWidget *lwidget,fractalexplorerOBJ *obj,gint created) +{ + fractalexplorerListOptions *options; + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *button; + GtkWidget *label; + + /* the new options structure */ + options = (fractalexplorerListOptions *) g_malloc (sizeof (fractalexplorerListOptions)); + options->list_entry = lwidget; + options->obj = obj; + options->created = created; + + /* the dialog */ + options->query_box = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (options->query_box),msg[lng][MSG_EDIT_FRACNAME]); + gtk_window_position (GTK_WINDOW (options->query_box), GTK_WIN_POS_MOUSE); + + /* the main vbox */ + vbox = gtk_vbox_new (FALSE, 1); + gtk_container_border_width (GTK_CONTAINER (vbox), 2); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (options->query_box)->vbox), vbox, TRUE, TRUE, 0); + + /* the name entry hbox, label and entry */ + hbox = gtk_hbox_new (FALSE, 1); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + label = gtk_label_new (msg[lng][MSG_FRACNAME]); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_widget_show (label); + options->name_entry = gtk_entry_new (); + gtk_box_pack_start (GTK_BOX (hbox), options->name_entry, TRUE, TRUE, 0); + gtk_entry_set_text (GTK_ENTRY (options->name_entry),obj->draw_name); + + gtk_widget_show (options->name_entry); + gtk_widget_show (hbox); + + button = gtk_button_new_with_label (msg[lng][MSG_OK]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc)fractalexplorer_list_ok_callback, + options); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (options->query_box)->action_area), button, TRUE, TRUE, 0); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + button = gtk_button_new_with_label (msg[lng][MSG_CANCEL]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc)fractalexplorer_list_cancel_callback, + options); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (options->query_box)->action_area), button, TRUE, TRUE, 0); + gtk_widget_show (button); + + gtk_widget_show (vbox); + gtk_widget_show (options->query_box); +} + + +static GtkWidget * +new_fractalexplorer_obj(gchar * name) +{ + fractalexplorerOBJ * fractalexplorer; + GtkWidget * new_list_item; + /* Create a new entry */ + + fractalexplorer = fractalexplorer_new(); + + if(!name) + name = msg[lng][MSG_NEWFRAC]; + + fractalexplorer->draw_name = g_strdup(name); + + /* Leave options as before */ + pic_obj = current_obj = fractalexplorer; + + new_list_item = fractalexplorer_list_add(fractalexplorer); + +/* obj_creating = tmp_line = NULL; */ + + /* Redraw areas */ + /* update_draw_area(fractalexplorer_preview,NULL); */ + list_button_update(fractalexplorer); + return(new_list_item); +} + + +static gint +new_button_press(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + GtkWidget * new_list_item; + + new_list_item = new_fractalexplorer_obj((gchar*)data); + fractalexplorer_dialog_edit_list(new_list_item,current_obj,TRUE); + + return(FALSE); +} + +static void +fractalexplorer_rescan_cancel_callback (GtkWidget *w, + gpointer client_data) +{ + gtk_widget_destroy (GTK_WIDGET (client_data)); +} + +void +clear_list_items(GtkList *list) +{ + gtk_list_clear_items(list,0,-1); +} + +/* + * Load all fractalexplorer, which are founded in fractalexplorer-path-list, into fractalexplorer_list. + * fractalexplorer-path-list must be initialized first. (plug_in_parse_fractalexplorer_path ()) + * based on code from Gflare. + */ + +gint +fractalexplorer_list_pos(fractalexplorerOBJ *fractalexplorer) +{ + fractalexplorerOBJ *g; + int n; + GList *tmp; + + n = 0; + + tmp = fractalexplorer_list; + + while (tmp) + { + g = tmp->data; + + if (strcmp (fractalexplorer->draw_name, g->draw_name) <= 0) + break; + n++; + tmp = tmp->next; + } + + return(n); +} + +gint +gradient_list_pos(gradientOBJ *gradi) +{ + gradientOBJ *g; + int n; + GList *tmp; + + n = 0; + + tmp = gradient_list; + + while (tmp) + { + g = tmp->data; + + if (strcmp (gradi->draw_name, g->draw_name) <= 0) + break; + n++; + tmp = tmp->next; + } + + return(n); +} + + +gint +fractalexplorer_list_insert (fractalexplorerOBJ *fractalexplorer) +{ + int n; + + /* + * Insert fractalexplorers in alphabetical order + */ + + n = fractalexplorer_list_pos(fractalexplorer); + + fractalexplorer_list = g_list_insert (fractalexplorer_list, fractalexplorer, n); + + return n; +} + +gint +gradient_list_insert (gradientOBJ *gradi) +{ + int n; + + /* + * Insert gradis in alphabetical order + */ + + n = gradient_list_pos(gradi); + + gradient_list = g_list_insert (gradient_list, gradi, n); + + return n; +} + +GtkWidget* +fractalexplorer_list_item_new_with_label_and_pixmap (fractalexplorerOBJ *obj, gchar *label, GtkWidget *pix_widget) +{ + GtkWidget *list_item; + GtkWidget *label_widget; + GtkWidget *alignment; + GtkWidget *hbox; + + hbox = gtk_hbox_new(FALSE,1); + gtk_widget_show(hbox); + + list_item = gtk_list_item_new (); + label_widget = gtk_label_new (label); + gtk_misc_set_alignment (GTK_MISC (label_widget), 0.0, 0.5); + + alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + gtk_container_border_width (GTK_CONTAINER (alignment), 0); + gtk_widget_show(alignment); + + gtk_box_pack_start(GTK_BOX(hbox),pix_widget,FALSE,FALSE,0); + gtk_container_add (GTK_CONTAINER (hbox), label_widget); + gtk_container_add (GTK_CONTAINER (list_item), hbox); + + gtk_widget_show (obj->label_widget = label_widget); + gtk_widget_show (obj->pixmap_widget = pix_widget); + gtk_widget_show (obj->list_item = list_item); + + return list_item; +} + +GtkWidget* +gradient_list_item_new_with_label_and_pixmap (gradientOBJ *obj, gchar *label, GtkWidget *pix_widget) +{ + GtkWidget *list_item; + GtkWidget *label_widget; + GtkWidget *alignment; + GtkWidget *hbox; + + hbox = gtk_hbox_new(FALSE,1); + gtk_widget_show(hbox); + + list_item = gtk_list_item_new (); + label_widget = gtk_label_new (label); + gtk_misc_set_alignment (GTK_MISC (label_widget), 0.0, 0.5); + + alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + gtk_container_border_width (GTK_CONTAINER (alignment), 0); + gtk_widget_show(alignment); + + gtk_box_pack_start(GTK_BOX(hbox),pix_widget,FALSE,FALSE,0); + gtk_container_add (GTK_CONTAINER (hbox), label_widget); + gtk_container_add (GTK_CONTAINER (list_item), hbox); + + gtk_widget_show (obj->label_widget = label_widget); + gtk_widget_show (obj->pixmap_widget = pix_widget); + gtk_widget_show (obj->list_item = list_item); + + return list_item; +} + + +GtkWidget* +fractalexplorer_new_pixmap(GtkWidget *list, char **pixdata) +{ + GtkWidget *pixmap_widget; + GdkPixmap *pixmap; + GdkColor transparent; + GdkBitmap *mask; + + pixmap = gdk_pixmap_create_from_xpm_d(list->window,&mask,&transparent,pixdata); + pixmap_widget = gtk_pixmap_new(pixmap,mask); + gtk_widget_show(pixmap_widget); + return(pixmap_widget); +} + + +static GtkWidget * +fractalexplorer_list_add(fractalexplorerOBJ *obj) +{ + GList *list; + gint pos; + GtkWidget *list_item; + GtkWidget *list_pix; + + list_pix = fractalexplorer_new_pixmap(fractalexplorer_gtk_list,Floppy6_xpm); + list_item = fractalexplorer_list_item_new_with_label_and_pixmap(obj,obj->draw_name,list_pix); + + gtk_object_set_user_data (GTK_OBJECT (list_item), (gpointer)obj); + + pos = fractalexplorer_list_insert(obj); + + list = g_list_append(NULL, list_item); + gtk_list_insert_items(GTK_LIST(fractalexplorer_gtk_list), list, pos); + gtk_widget_show (list_item); + gtk_list_select_item(GTK_LIST(fractalexplorer_gtk_list), pos); + + gtk_signal_connect(GTK_OBJECT(list_item), "button_press_event", + (GtkSignalFunc) list_button_press, + (gpointer)obj); + + return(list_item); +} + + + + +void +list_button_update(fractalexplorerOBJ *obj) +{ + g_return_if_fail (obj != NULL); + pic_obj = (fractalexplorerOBJ *)obj; + /* Draw xxxxxxxxxxxxxxxxxxxx */ +} + + + + + + +fractalexplorerOBJ * +fractalexplorer_new(void) +{ + fractalexplorerOBJ * new; + + new = g_new0(fractalexplorerOBJ,1); + return(new); +} + +gradientOBJ * +gradient_new(void) +{ + gradientOBJ * new; + + new = g_new0(gradientOBJ,1); + return(new); +} + +void +build_list_items(GtkWidget *list) +{ + GList *tmp = fractalexplorer_list; + GtkWidget *list_item; + GtkWidget *list_pix; + fractalexplorerOBJ *g; + + while(tmp) + { + g = tmp->data; + + if(g->obj_status & fractalexplorer_READONLY) + list_pix = fractalexplorer_new_pixmap(list,mini_cross_xpm); + else + list_pix = fractalexplorer_new_pixmap(list,bluedot_xpm); + + list_item = fractalexplorer_list_item_new_with_label_and_pixmap(g,g->draw_name,list_pix); + gtk_object_set_user_data (GTK_OBJECT (list_item), (gpointer)g); + gtk_list_append_items (GTK_LIST (list), g_list_append(NULL,list_item)); + + gtk_signal_connect(GTK_OBJECT(list_item), "button_press_event", + (GtkSignalFunc) list_button_press, + (gpointer)g); + gtk_widget_show (list_item); + + tmp = tmp->next; + } +} + +void +gradient_build_list_items(GtkWidget *list) +{ + GList *tmp = gradient_list; + GtkWidget *list_item; + GtkWidget *list_pix; + gradientOBJ *g; + + while(tmp) + { + g = tmp->data; + + if(g->obj_status & gradient_GRADIENTEDITOR) + list_pix = fractalexplorer_new_pixmap(list,greendot_xpm); + else + list_pix = fractalexplorer_new_pixmap(list,bluedot_xpm); + + list_item = gradient_list_item_new_with_label_and_pixmap(g,g->draw_name,list_pix); + gtk_object_set_user_data (GTK_OBJECT (list_item), (gpointer)g); + gtk_list_append_items (GTK_LIST (list), g_list_append(NULL,list_item)); + + gtk_signal_connect(GTK_OBJECT(list_item), "button_press_event", + (GtkSignalFunc) gradient_list_button_press, + (gpointer)g); + gtk_widget_show (list_item); + + tmp = tmp->next; + } +} + +/* + +static void +fractalexplorer_save_menu_callback(GtkWidget *widget, gpointer data) +{ + fractalexplorerOBJ * real_current = current_obj; + + current_obj = fractalexplorer_obj_for_menu; + + fractalexplorer_save(); + + current_obj = real_current; +} + +static void +fractalexplorer_load_menu_callback(GtkWidget *widget, gpointer data) +{ + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); +} + +static void +fractalexplorer_rename_menu_callback(GtkWidget *widget, gpointer data) +{ + create_file_selection(fractalexplorer_obj_for_menu,fractalexplorer_obj_for_menu->filename); +} + +static void +fractalexplorer_copy_menu_callback(GtkWidget *widget, gpointer data) +{ + gchar *new_name = g_malloc(strlen(fractalexplorer_obj_for_menu->draw_name) + 6); + + sprintf(new_name,msg[lng][MSG_COPYNAME],fractalexplorer_obj_for_menu->draw_name); + new_fractalexplorer_obj(new_name); + g_free(new_name); + + current_obj->opts = fractalexplorer_obj_for_menu->opts; + + update_draw_area(fractalexplorer_preview,NULL); + list_button_update(current_obj); +} + +*/ + + +/* + +static void +fractalexplorer_op_menu_create(GtkWidget *window) +{ + GtkWidget *menu_item; + GtkAcceleratorTable *accelerator_table; + + fractalexplorer_op_menu = gtk_menu_new(); + + accelerator_table = gtk_accelerator_table_new(); + gtk_menu_set_accelerator_table(GTK_MENU(fractalexplorer_op_menu), + accelerator_table); + gtk_window_add_accelerator_table(GTK_WINDOW(window),accelerator_table); + + save_menu_item = menu_item = gtk_menu_item_new_with_label(msg[lng][MSG_SAVE]); + gtk_menu_append(GTK_MENU(fractalexplorer_op_menu),menu_item); + gtk_widget_show(menu_item); + + gtk_signal_connect(GTK_OBJECT(menu_item),"activate", + (GtkSignalFunc)fractalexplorer_save_menu_callback, + NULL); + + gtk_widget_install_accelerator(menu_item, + accelerator_table, + "activate",'S',0); + + menu_item = gtk_menu_item_new_with_label(msg[lng][MSG_SAVEAS]); + gtk_menu_append(GTK_MENU(fractalexplorer_op_menu),menu_item); + gtk_widget_show(menu_item); + gtk_signal_connect(GTK_OBJECT(menu_item),"activate", + (GtkSignalFunc)fractalexplorer_rename_menu_callback, + NULL); + gtk_widget_install_accelerator(menu_item, + accelerator_table, + "activate",'A',0); + + menu_item = gtk_menu_item_new_with_label(msg[lng][MSG_COPY]); + gtk_menu_append(GTK_MENU(fractalexplorer_op_menu),menu_item); + gtk_widget_show(menu_item); + gtk_signal_connect(GTK_OBJECT(menu_item),"activate", + (GtkSignalFunc)fractalexplorer_copy_menu_callback, + NULL); + gtk_widget_install_accelerator(menu_item, + accelerator_table, + "activate",'C',0); + + menu_item = gtk_menu_item_new_with_label(msg[lng][MSG_LOAD]); + gtk_menu_append(GTK_MENU(fractalexplorer_op_menu),menu_item); + gtk_widget_show(menu_item); + gtk_signal_connect(GTK_OBJECT(menu_item),"activate", + (GtkSignalFunc)fractalexplorer_load_menu_callback, + NULL); + gtk_widget_install_accelerator(menu_item, + accelerator_table, + "activate",'L',0); + +} + + +static void +fractalexplorer_op_menu_popup(gint button, guint32 activate_time,fractalexplorerOBJ *obj) +{ + fractalexplorer_obj_for_menu = obj; + + if(obj->obj_status & fractalexplorer_READONLY) + { + gtk_widget_set_sensitive(save_menu_item,FALSE); + } + else + { + gtk_widget_set_sensitive(save_menu_item,TRUE); + } + + gtk_menu_popup(GTK_MENU(fractalexplorer_op_menu),NULL,NULL,NULL,NULL,button,activate_time); +} + +*/ + +static gint +list_button_press(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + + fractalexplorerOBJ * sel_obj; + + switch (event->type) + { + case GDK_BUTTON_PRESS: + /* + if(event->button == 3) + { + fractalexplorer_op_menu_popup(event->button,event->time,(fractalexplorerOBJ *)data); + return(FALSE); + } +*/ + list_button_update((fractalexplorerOBJ *)data); + break; + case GDK_2BUTTON_PRESS: + + sel_obj = (fractalexplorerOBJ *)data; + + if(sel_obj) { + current_obj=sel_obj; + wvals=current_obj->opts; + dialog_change_scale(); + set_cmap_preview(); + dialog_update_preview(); } +/* new_obj_2edit(sel_obj); */ + else + g_warning(msg[lng][MSG_NULLLIST]); + + break; + default: + printf(msg[lng][MSG_UNKNOWN_EVENT]); + break; + } + + return(FALSE); +} + + + +/* + * Query gimprc for fractalexplorer-path, and parse it. + * This code is based on script_fu_find_scripts () + * and the Gflare plugin. + */ + +void +plug_in_parse_fractalexplorer_path() +{ + GParam *return_vals; + gint nreturn_vals; + gchar *path_string; + gchar *home; + gchar *path; + gchar *token; + struct stat filestat; + gint err; + gchar buf[256]; + + if(fractalexplorer_path_list) + g_list_free(fractalexplorer_path_list); + + fractalexplorer_path_list = NULL; + + return_vals = gimp_run_procedure ("gimp_gimprc_query", + &nreturn_vals, + PARAM_STRING, "fractalexplorer-path", + PARAM_END); + + if (return_vals[0].data.d_status != STATUS_SUCCESS || return_vals[1].data.d_string == NULL) + { + g_warning(msg[lng][MSG_MISSING_GIMPRC]); + create_warn_dialog(msg[lng][MSG_MISSING_GIMPRC]); + + gimp_destroy_params (return_vals, nreturn_vals); + return; + } + + path_string = g_strdup (return_vals[1].data.d_string); + gimp_destroy_params (return_vals, nreturn_vals); + + /* Set local path to contain temp_path, where (supposedly) + * there may be working files. + */ + home = getenv ("HOME"); + + /* Search through all directories in the path */ + + token = strtok (path_string, ":"); + + while (token) + { + if (*token == '\0') + { + token = strtok (NULL, ":"); + continue; + } + + if (*token == '~') + { + path = g_malloc (strlen (home) + strlen (token) + 2); + sprintf (path, "%s%s", home, token + 1); + } + else + { + path = g_malloc (strlen (token) + 2); + strcpy (path, token); + } /* else */ + + /* Check if directory exists */ + err = stat (path, &filestat); + + if (!err && S_ISDIR (filestat.st_mode)) + { + if (path[strlen (path) - 1] != '/') + strcat (path, "/"); + + fractalexplorer_path_list = g_list_append (fractalexplorer_path_list, path); + } + else + { + sprintf(buf,msg[lng][MSG_WRONGPATH], path); + g_warning(buf); + create_warn_dialog(buf); + g_free (path); + } + token = strtok (NULL, ":"); + } + g_free (path_string); +} + + +void +fractalexplorer_free(fractalexplorerOBJ * fractalexplorer) +{ + g_assert (fractalexplorer != NULL); + + if(fractalexplorer->name) + g_free(fractalexplorer->name); + if(fractalexplorer->filename) + g_free(fractalexplorer->filename); + if(fractalexplorer->draw_name) + g_free(fractalexplorer->draw_name); + g_free (fractalexplorer); +} + +void +gradient_free(gradientOBJ * gradi) +{ + g_assert (gradi != NULL); + + if(gradi->name) + g_free(gradi->name); + if(gradi->filename) + g_free(gradi->filename); + if(gradi->draw_name) + g_free(gradi->draw_name); + g_free (gradi); +} + +void +fractalexplorer_free_everything(fractalexplorerOBJ * fractalexplorer) +{ + g_assert (fractalexplorer != NULL); + + if(fractalexplorer->filename) + { + remove(fractalexplorer->filename); + } + fractalexplorer_free(fractalexplorer); +} + +void +gradient_free_everything(gradientOBJ * gradi) +{ + g_assert (gradi != NULL); + + if(gradi->filename) + { + remove(gradi->filename); + } + gradient_free(gradi); +} + +void +fractalexplorer_list_free_all () +{ + GList * list; + fractalexplorerOBJ * fractalexplorer; + + list = fractalexplorer_list; + while (list) + { + fractalexplorer = (fractalexplorerOBJ *) list->data; + fractalexplorer_free (fractalexplorer); + list = list->next; + } + + g_list_free (fractalexplorer_list); + fractalexplorer_list = NULL; +} + +void +gradient_list_free_all () +{ + GList * list; + gradientOBJ * gradi; + + list = gradient_list; + while (list) + { + gradi = (gradientOBJ *) list->data; + gradient_free (gradi); + list = list->next; + } + + g_list_free (gradient_list); + gradient_list = NULL; +} + +fractalexplorerOBJ * +fractalexplorer_load (gchar *filename, gchar *name) +{ + fractalexplorerOBJ * fractalexplorer; + FILE * fp; + gchar load_buf[MAX_LOAD_LINE]; + + g_assert (filename != NULL); + fp = fopen (filename, "r"); + if (!fp) + { + g_warning (msg[lng][MSG_OPENERROR], filename); + return NULL; + } + + fractalexplorer = fractalexplorer_new(); + + fractalexplorer->name = g_strdup(name); + fractalexplorer->draw_name = g_strdup(name); + fractalexplorer->filename = g_strdup(filename); + + + /* HEADER + * draw_name + * version + * obj_list + */ + + get_line(load_buf,MAX_LOAD_LINE,fp,1); + + if(strncmp(fractalexplorer_HEADER,load_buf,strlen(load_buf))) + { + gchar err[256]; + sprintf(err,msg[lng][MSG_WRONGFILETYPE],fractalexplorer->filename); + create_warn_dialog(err); + fclose(fp); + return(NULL); + } + + if(load_options(fractalexplorer,fp)) + { + /* waste some mem */ + gchar err[256]; + sprintf(err, + msg[lng][MSG_CORRUPTFILE], + filename, + line_no); + create_warn_dialog(err); + fclose(fp); + return(NULL); + } + + fclose(fp); + + if(!pic_obj) + pic_obj = fractalexplorer; + + fractalexplorer->obj_status = fractalexplorer_OK; + + return(fractalexplorer); +} + + +gradientOBJ * +gradient_load (gchar *filename, gchar *name) +{ + gradientOBJ * gradi; + FILE * fp; + gchar load_buf[MAX_LOAD_LINE]; + + g_assert (filename != NULL); + + fp = fopen (filename, "r"); + if (!fp) + { + g_warning (msg[lng][MSG_OPENERROR], filename); + return NULL; + } + + gradi = gradient_new(); + + gradi->name = g_strdup(name); + gradi->draw_name = g_strdup(name); + gradi->filename = g_strdup(filename); + + + /* HEADER + * draw_name + * version + * obj_list + */ + + get_line(load_buf,MAX_LOAD_LINE,fp,1); + + if(strncmp(fractalexplorer_HEADER,load_buf,strlen(load_buf))) + { + gchar err[256]; + sprintf(err,msg[lng][MSG_WRONGFILETYPE],gradi->filename); + create_warn_dialog(err); + return(NULL); + } + +/* + if(gradient_load_options(gradient,fp)) + { + gchar err[256]; + sprintf(err, + msg[lng][MSG_CORRUPTFILE], + filename, + line_no); + create_warn_dialog(err); + return(NULL); + } +*/ + fclose(fp); + /* + if(!pic_obj) + pic_obj = fractalexplorer; + + fractalexplorer->obj_status = fractalexplorer_OK; +*/ + return(gradi); +} + +static void +fractalexplorer_rescan_file_selection_ok(GtkWidget *w, + GtkFileSelection *fs, + gpointer data) +{ + GtkWidget *list_item; + GtkWidget *lw = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(fs)); + gchar * filenamebuf; + struct stat filestat; + gint err; + + filenamebuf = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); + + err = stat(filenamebuf, &filestat); + + if (!S_ISDIR(filestat.st_mode)) + { + g_warning(msg[lng][MSG_NOTDIR],filenamebuf); + } + else + { + + list_item = gtk_list_item_new_with_label(filenamebuf); + gtk_widget_show(list_item); + + gtk_list_prepend_items(GTK_LIST(lw),g_list_append(NULL, list_item)); + + rescan_list = g_list_prepend(rescan_list,g_strdup(filenamebuf)); + } + + gtk_widget_destroy(GTK_WIDGET(fs)); +} + +void +fractalexplorer_list_load_all(GList *plist) +{ + fractalexplorerOBJ * fractalexplorer; + GList * list; + gchar * path; + gchar * filename; + DIR * dir; + struct dirent *dir_ent; + struct stat filestat; + gint err; + /* Make sure to clear any existing fractalexplorers */ + current_obj = pic_obj = NULL; + fractalexplorer_list_free_all (); + list = plist; + while (list) + { + path = list->data; + list = list->next; + + /* Open directory */ + dir = opendir (path); + + if (!dir) + g_warning(msg[lng][MSG_DIRREADERROR], path); + else + { + while ((dir_ent = readdir (dir))) + { + filename = g_malloc (strlen(path) + strlen (dir_ent->d_name) + 1); + + sprintf (filename, "%s%s", path, dir_ent->d_name); + + /* Check the file and see that it is not a sub-directory */ + err = stat (filename, &filestat); + + if (!err && S_ISREG (filestat.st_mode)) + { + + fractalexplorer = fractalexplorer_load (filename, dir_ent->d_name); + + if (fractalexplorer) + { + /* Read only ?*/ + if(access(filename,W_OK)) + fractalexplorer->obj_status |= fractalexplorer_READONLY; + + fractalexplorer_list_insert (fractalexplorer); + } + } + + g_free (filename); + } /* while */ + closedir (dir); + } /* else */ + } + + if(!fractalexplorer_list) + { + /* lets have at least one! */ + fractalexplorer = fractalexplorer_new(); + fractalexplorer->draw_name = g_strdup(msg[lng][MSG_FIRSTFRACTAL]); + fractalexplorer_list_insert(fractalexplorer); + } + pic_obj = current_obj = fractalexplorer_list->data; /* set to first entry */ + +} + +void +gradient_list_load_all(GList *plist) +{ + gradientOBJ * gradi; + GList * list; + gchar * path; + gchar * filename; + char **gradients=NULL; + DIR * dir; + struct dirent *dir_ent; + struct stat filestat; + gint err; + gint gradnumber=200,i; + /* Make sure to clear any existing gradients */ + gradient_list_free_all (); + list = plist; + while (list) + { + path = list->data; + list = list->next; + + /* Open directory */ + dir = opendir (path); + + if (!dir) + g_warning(msg[lng][MSG_DIRREADERROR], path); + else + { + while ((dir_ent = readdir (dir))) + { + filename = g_malloc (strlen(path) + strlen (dir_ent->d_name) + 1); + + sprintf (filename, "%s%s", path, dir_ent->d_name); + + /* Check the file and see that it is not a sub-directory */ + err = stat (filename, &filestat); + + if (!err && S_ISREG (filestat.st_mode)) + { + + gradi = gradient_load (filename, dir_ent->d_name); + + if (gradi) + { + gradient_list_insert (gradi); + } + } + + g_free (filename); + } /* while */ + closedir (dir); + } /* else */ + } + + gradients=gimp_gradients_get_list(&gradnumber); + for (i=0; i< gradnumber; i++) + { + gradi = gradient_new(); + gradi->name = gradi->draw_name = gradi->filename=gradients[i]; + if (gradi) + { + gradi->obj_status=gradient_GRADIENTEDITOR; + gradient_list_insert (gradi); + } + } + + if(!gradient_list) + { + /* lets have at least one! */ + gradi = gradient_new(); + gradi->draw_name = g_strdup("Gradient"); + gradient_list_insert(gradi); + } +/* pic_obj = current_obj = gradient_list->data; set to first entry */ +} + + +static GtkWidget * +add_objects_list () +{ + GtkWidget *table; + GtkWidget *frame; + GtkWidget *list_frame; + GtkWidget *scrolled_win; + GtkWidget *list; + GtkWidget *button; + + frame = gtk_frame_new(msg[lng][MSG_CHOOSE_FRACTAL]); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 10); + gtk_widget_show(frame); + + table = gtk_table_new (6, 4, FALSE); + gtk_container_border_width(GTK_CONTAINER(table), 10); + gtk_table_set_row_spacings(GTK_TABLE(table), 10); +/* gtk_table_set_col_spacings(GTK_TABLE(table), 10); */ + gtk_widget_show(table); + + delete_frame_to_freeze = list_frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type (GTK_FRAME (list_frame), GTK_SHADOW_ETCHED_IN); + gtk_widget_show(list_frame); + + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_container_add (GTK_CONTAINER (list_frame), scrolled_win); + gtk_widget_show (scrolled_win); + + fractalexplorer_gtk_list = list = gtk_list_new (); + /* gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_MULTIPLE); */ + gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_BROWSE); + gtk_container_add (GTK_CONTAINER (scrolled_win), list); + gtk_widget_show (list); + /* Load saved objects */ + fractalexplorer_list_load_all(fractalexplorer_path_list); + /* Put list in */ + build_list_items(list); + + /* Put buttons in */ + button = gtk_button_new_with_label (msg[lng][MSG_RESCAN]); + gtk_widget_show(button); + gtk_signal_connect (GTK_OBJECT (button), "button_press_event", + (GtkSignalFunc) rescan_button_press, + NULL); + gtk_tooltips_set_tips(tips,button,msg[lng][MSG_RESCAN_COMMENT]); + gtk_table_attach(GTK_TABLE(table), button, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0); + +/* + button = gtk_button_new_with_label (msg[lng][MSG_NEW]); + gtk_signal_connect (GTK_OBJECT (button), "button_press_event", + (GtkSignalFunc) new_button_press, + "My New Fractal"); + gtk_widget_show(button); + gtk_tooltips_set_tips(tips,button,msg[lng][MSG_NEW_COMMENT]); + gtk_table_attach(GTK_TABLE(table), button, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); + + button = gtk_button_new_with_label (msg[lng][MSG_RENAME]); + gtk_widget_show(button); + gtk_signal_connect (GTK_OBJECT (button), "button_press_event", + (GtkSignalFunc) rename_button_press, + (gpointer) list); + gtk_tooltips_set_tips(tips,button,msg[lng][MSG_RENAME_COMMENT]); + gtk_table_attach(GTK_TABLE(table), button, 2, 3, 2, 3, GTK_FILL, GTK_FILL, 0, 0); +*/ + + button = gtk_button_new_with_label (msg[lng][MSG_DEL]); + gtk_signal_connect (GTK_OBJECT (button), "button_press_event", + (GtkSignalFunc) fractalexplorer_delete_fractalexplorer_callback, + (gpointer)list); + gtk_widget_show(button); + gtk_tooltips_set_tips(tips,button,msg[lng][MSG_DELETE_COMMENT]); + gtk_table_attach(GTK_TABLE(table), button, 1, 2, 3, 4, GTK_FILL, GTK_FILL, 0, 0); + + /* Attach the frame for the list Show the widgets */ + + gtk_table_attach(GTK_TABLE(table), list_frame, 0, 2, 0, 3, GTK_FILL|GTK_EXPAND , GTK_FILL|GTK_EXPAND, 0, 0); + + cmap_preview_long = gtk_preview_new(GTK_PREVIEW_COLOR); + gtk_preview_size(GTK_PREVIEW(cmap_preview_long), GR_WIDTH, 32); + gtk_table_attach(GTK_TABLE(table), cmap_preview_long, 0, 2, 4, 5, GTK_FILL|GTK_EXPAND , GTK_FILL|GTK_EXPAND, 0, 0); + gtk_widget_show(cmap_preview_long); + + gtk_container_add (GTK_CONTAINER (frame), table); + return (frame); +} + + + +static GtkWidget * +add_gradients_list () +{ + GtkWidget *table; + GtkWidget *frame; + GtkWidget *list_frame; + GtkWidget *scrolled_win; + GtkWidget *list; + + frame = gtk_frame_new(msg[lng][MSG_CHOOSE_GRADIENT]); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); + gtk_container_border_width(GTK_CONTAINER(frame), 10); + gtk_widget_show(frame); + + table = gtk_table_new (6, 4, FALSE); + + gtk_container_border_width(GTK_CONTAINER(table), 10); + gtk_table_set_row_spacings(GTK_TABLE(table), 10); +/* gtk_table_set_col_spacings(GTK_TABLE(table), 10); */ + gtk_widget_show(table); + + list_frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type (GTK_FRAME (list_frame), GTK_SHADOW_ETCHED_IN); + gtk_widget_show(list_frame); + + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_container_add (GTK_CONTAINER (list_frame), scrolled_win); + gtk_widget_show (scrolled_win); + + list = gtk_list_new (); + gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_BROWSE); + gtk_container_add (GTK_CONTAINER (scrolled_win), list); + gtk_widget_show (list); + /* Load saved objects */ + + gradient_list_load_all(fractalexplorer_path_list); + /* Put list in */ + gradient_build_list_items(list); + + /* Put buttons in + button = gtk_button_new_with_label (msg[lng][MSG_RESCAN]); + gtk_widget_show(button); + gtk_signal_connect (GTK_OBJECT (button), "button_press_event", + (GtkSignalFunc) rescan_button_press, + NULL); + gtk_tooltips_set_tips(tips,button,msg[lng][MSG_RESCAN_COMMENT]); + gtk_table_attach(GTK_TABLE(table), button, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + */ + + /* Attach the frame for the list Show the widgets */ + + gtk_table_attach(GTK_TABLE(table), list_frame, 0, 3, 0, 4, GTK_FILL|GTK_EXPAND , GTK_FILL|GTK_EXPAND, 1, 1); + + cmap_preview_long2 = gtk_preview_new(GTK_PREVIEW_COLOR); + gtk_preview_size(GTK_PREVIEW(cmap_preview_long2), GR_WIDTH, 32); + gtk_table_attach(GTK_TABLE(table), cmap_preview_long2, 0, 3, 4, 5, GTK_FILL|GTK_EXPAND , GTK_FILL|GTK_EXPAND, 1, 1); + gtk_widget_show(cmap_preview_long2); + + gtk_container_add (GTK_CONTAINER (frame), table); + return (frame); +} + + + +static void +fractalexplorer_rescan_ok_callback (GtkWidget *w, + gpointer client_data) +{ + GList *list; + + list = rescan_list; + while (list) + { + list = list->next; + } + list = fractalexplorer_path_list; + while (list) + { + rescan_list = g_list_append(rescan_list,g_strdup(list->data)); + list = list->next; + } + clear_list_items(GTK_LIST(fractalexplorer_gtk_list)); + fractalexplorer_list_load_all(rescan_list); + build_list_items(fractalexplorer_gtk_list); + list_button_update(current_obj); + gtk_widget_destroy (GTK_WIDGET (client_data)); +} + + +static void +fractalexplorer_rescan_add_entry_callback (GtkWidget *w, + gpointer client_data) +{ + static GtkWidget *window = NULL; + + /* Call up the file sel dialouge */ + window = gtk_file_selection_new (msg[lng][MSG_ADDPATH]); + gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE); + gtk_object_set_user_data(GTK_OBJECT(window),(gpointer)client_data); + + + gtk_signal_connect (GTK_OBJECT (window), "destroy", + (GtkSignalFunc) destroy_window, + &window); + + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (window)->ok_button), + "clicked", (GtkSignalFunc) fractalexplorer_rescan_file_selection_ok, + (gpointer)window); + + gtk_signal_connect_object(GTK_OBJECT (GTK_FILE_SELECTION (window)->cancel_button), + "clicked", (GtkSignalFunc) gtk_widget_destroy, + GTK_OBJECT(window)); + gtk_widget_show(window); +} + + +static void +fractalexplorer_rescan_list (void) +{ + GtkWidget *vbox; + GtkWidget *button; + GtkWidget *dlg; + GtkWidget *list_frame; + GtkWidget *scrolled_win; + GtkWidget *list_widget; + GList *list; + + /* the dialog */ + dlg = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (dlg), msg[lng][MSG_RESCANTITLE1]); + gtk_window_position (GTK_WINDOW (dlg), GTK_WIN_POS_MOUSE); + + /* the main vbox */ + vbox = gtk_vbox_new (FALSE, 1); + gtk_container_border_width (GTK_CONTAINER (vbox), 2); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), vbox, TRUE, TRUE, 0); + + /* path list */ + list_frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type (GTK_FRAME (list_frame), GTK_SHADOW_ETCHED_IN); + gtk_widget_show(list_frame); + + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_container_add (GTK_CONTAINER (list_frame), scrolled_win); + gtk_widget_show (scrolled_win); + + list_widget = gtk_list_new (); + gtk_list_set_selection_mode (GTK_LIST (list_widget), GTK_SELECTION_BROWSE); + gtk_container_add (GTK_CONTAINER (scrolled_win), list_widget); + gtk_widget_show (list_widget); + gtk_box_pack_start (GTK_BOX (vbox), list_frame, TRUE, TRUE, 0); + + list = fractalexplorer_path_list; + while (list) + { + GtkWidget *list_item; + list_item = gtk_list_item_new_with_label(list->data); + gtk_widget_show(list_item); + gtk_container_add (GTK_CONTAINER (list_widget), list_item); + list = list->next; + } + + button = gtk_button_new_with_label (msg[lng][MSG_OK]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc)fractalexplorer_rescan_ok_callback, + (gpointer)dlg); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), button, TRUE, TRUE, 0); + gtk_widget_grab_default (button); + gtk_widget_show (button); + + /* Clear the old list out */ + if((list = rescan_list)) + { + while (list) + { + g_free(list->data); + list = list->next; + } + + g_list_free(rescan_list); + rescan_list = NULL; + } + + button = gtk_button_new_with_label (msg[lng][MSG_ADDDIR]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc)fractalexplorer_rescan_add_entry_callback, + (gpointer)list_widget); + + gtk_object_set_user_data(GTK_OBJECT(dlg),(gpointer)list_widget); + + + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), button, TRUE, TRUE, 0); + gtk_widget_show (button); + + button = gtk_button_new_with_label (msg[lng][MSG_CANCEL]); + gtk_signal_connect (GTK_OBJECT (button), "clicked", + (GtkSignalFunc)fractalexplorer_rescan_cancel_callback, + (gpointer)dlg); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), button, TRUE, TRUE, 0); + gtk_widget_show (button); + + gtk_widget_show (vbox); + gtk_widget_show (dlg); +} + + +static gint +rescan_button_press(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + fractalexplorer_rescan_list(); + return(FALSE); +} + + +static gint +delete_button_press_ok(GtkWidget *widget, + gpointer data) +{ + gint pos; + GList * sellist; + fractalexplorerOBJ * sel_obj; + GtkWidget *list = (GtkWidget *)data; + + /* Must update which object we are editing */ + /* Get the list and which item is selected */ + /* Only allow single selections */ + + sellist = GTK_LIST(list)->selection; + + sel_obj = (fractalexplorerOBJ *)gtk_object_get_user_data(GTK_OBJECT((GtkWidget *)(sellist->data))); + + pos = gtk_list_child_position(GTK_LIST(fractalexplorer_gtk_list),sellist->data); + + /* Delete the current item + asssociated file */ + gtk_list_clear_items(GTK_LIST (fractalexplorer_gtk_list),pos,pos+1); + /* Shadow copy for ordering info */ + fractalexplorer_list = g_list_remove(fractalexplorer_list,sel_obj); +/* + if(sel_obj == current_obj) + { + clear_undo(); + } +*/ + /* Free current obj */ + fractalexplorer_free_everything(sel_obj); + + + /* Select previous one */ + pos--; + + if(pos < 0 && g_list_length(fractalexplorer_list) == 0) + { + /* Warning - we have a problem here + * since we are not really "creating an entry" + * why call fractalexplorer_new? + */ + new_button_press(NULL,NULL,NULL); + pos = 0; + } + + gtk_widget_destroy(delete_dialog); + gtk_widget_set_sensitive(delete_frame_to_freeze,TRUE); + + delete_dialog = NULL; + + gtk_list_select_item(GTK_LIST(fractalexplorer_gtk_list), pos); + + current_obj = g_list_nth(fractalexplorer_list,pos)->data; + + /* + draw xxxxxxxxxxxxxxxx + update_draw_area(fractalexplorer_preview,NULL); + */ + + list_button_update(current_obj); + + + return(FALSE); +} diff --git a/plug-ins/FractalExplorer/FractalExplorer.h b/plug-ins/FractalExplorer/FractalExplorer.h new file mode 100644 index 0000000000..35be64715f --- /dev/null +++ b/plug-ins/FractalExplorer/FractalExplorer.h @@ -0,0 +1,357 @@ +/********************************************************************** + Magic numbers + *********************************************************************/ + +#define PREVIEW_SIZE 128 +#define SCALE_WIDTH 200 +#define ENTRY_WIDTH 60 +#define MAX_LOAD_LINE 256 +#define GR_WIDTH 325 + +#define SINUS 0 +#define COSINUS 1 +#define NONE 2 + +#define FRACTAL_HEADER "Fractal Explorer Plug-In Version 2 - (c) 1997 \n" +#define fractalexplorer_HEADER "Fractal Explorer Plug-In Version 2 - (c) 1997 \n" + +/********************************************************************** + Types + *********************************************************************/ + +typedef struct { + gint fractaltype; + gdouble xmin; + gdouble xmax; + gdouble ymin; + gdouble ymax; + gdouble iter; + gdouble cx; + gdouble cy; + gint colormode; + gdouble redstretch; + gdouble greenstretch; + gdouble bluestretch; + gint redmode; + gint greenmode; + gint bluemode; + gint redinvert; + gint greeninvert; + gint blueinvert; + gint alwayspreview; + gint language; + +} explorer_vals_t; + +typedef struct { + GtkWidget *preview; + guchar *wimage; + gint run; +} explorer_interface_t; + +typedef int clrmap[256][3]; + +typedef struct { + GtkWidget *text; + GtkAdjustment *data; +} scaledata; + +typedef struct _DialogElements DialogElements; + + +struct _DialogElements { + GtkWidget *type_mandelbrot; + GtkWidget *type_julia; + GtkWidget *type_barnsley1; + GtkWidget *type_barnsley2; + GtkWidget *type_barnsley3; + GtkWidget *type_spider; + GtkWidget *type_manowar; + GtkWidget *type_lambda; + GtkWidget *type_sierpinski; + scaledata xmin; + scaledata xmax; + scaledata ymin; + scaledata ymax; + scaledata iter; + scaledata cx; + scaledata cy; + scaledata red; + scaledata green; + scaledata blue; + GtkWidget *redmodecos; + GtkWidget *redmodesin; + GtkWidget *redmodenone; + GtkWidget *greenmodecos; + GtkWidget *greenmodesin; + GtkWidget *greenmodenone; + GtkWidget *bluemodecos; + GtkWidget *bluemodesin; + GtkWidget *bluemodenone; + GtkWidget *redinvert; + GtkWidget *greeninvert; + GtkWidget *blueinvert; + GtkWidget *colormode0; + GtkWidget *colormode1; +}; + + +typedef struct DFigObj { + gchar * name; /* Trailing name of file */ + gchar * filename; /* Filename itself */ + gchar * draw_name;/* Name of the drawing */ + explorer_vals_t opts; /* Options enforced when fig saved */ + GtkWidget *list_item; + GtkWidget *label_widget; + GtkWidget *pixmap_widget; + gint obj_status; +} fractalexplorerOBJ; + + +typedef struct GigObj { + gchar * name; /* Trailing name of file */ + gchar * filename; /* Filename itself */ + gchar * draw_name;/* Name of the drawing */ + gint typus; + GtkWidget *list_item; + GtkWidget *label_widget; + GtkWidget *pixmap_widget; + gint obj_status; +} gradientOBJ; + +typedef struct _fractalexplorerListOptions { + GtkWidget *query_box; + GtkWidget *name_entry; + GtkWidget *list_entry; + fractalexplorerOBJ * obj; + gint created; +} fractalexplorerListOptions; + +/* States of the object */ +#define fractalexplorer_OK 0x0 +#define fractalexplorer_MODIFIED 0x1 +#define fractalexplorer_READONLY 0x2 + +#define gradient_GRADIENTEDITOR 0x2 + +static fractalexplorerOBJ *current_obj; +static fractalexplorerOBJ *pic_obj; +static GtkWidget *delete_dialog = NULL; + + + +/********************************************************************** + Declare local functions + *********************************************************************/ + +/* Gimp interface functions */ +static void query(void); +static void run(char *name, int nparams, GParam * param, int *nreturn_vals, + GParam ** return_vals); + +/* Dialog and fractal functions */ +void explorer(GDrawable * drawable); +void explorer_render_row(const guchar * src_row, guchar * dest_row, gint row, + gint row_width, gint bytes); +void transform(short int *, short int *, short int *, double, double, double); +gint explorer_dialog(void); +void dialog_update_preview(void); + +/* Functions for dialog widgets */ +void dialog_create_value(char *title, GtkTable * table, int row, gdouble * value, + int left, int right, const char *desc, scaledata * scalevalues); +void dialog_scale_update(GtkAdjustment * adjustment, gdouble * value); +void dialog_create_int_value(char *title, GtkTable * table, int row, gdouble * value, + int left, int right, const char *desc, scaledata * scalevalues); +void dialog_scale_int_update(GtkAdjustment * adjustment, gdouble * value); +void dialog_entry_update(GtkWidget * widget, gdouble * value); +void dialog_close_callback(GtkWidget * widget, gpointer data); +void dialog_ok_callback(GtkWidget * widget, gpointer data); +void dialog_cancel_callback(GtkWidget * widget, gpointer data); +void dialog_step_out_callback(GtkWidget * widget, gpointer data); +void dialog_step_in_callback(GtkWidget * widget, gpointer data); +void dialog_undo_zoom_callback(GtkWidget * widget, gpointer data); +void dialog_redo_zoom_callback(GtkWidget * widget, gpointer data); +void dialog_redraw_callback(GtkWidget * widget, gpointer data); +void dialog_reset_callback(GtkWidget * widget, gpointer data); +GtkWidget *explorer_logo_dialog(); +GtkWidget *explorer_load_dialog(); +void explorer_toggle_update(GtkWidget * widget, gpointer data); +void set_tooltip(GtkTooltips * tooltips, GtkWidget * widget, const char *desc); +void dialog_change_scale(void); +void set_cmap_preview(void); +void make_color_map(void); +void create_file_selection(); +void create_load_file_selection(); +void explorer_load(); +void load_button_press(GtkWidget * widget, gpointer data); + +/* Preview events */ +gint preview_button_press_event(GtkWidget * widget, GdkEventButton * event); +gint preview_button_release_event(GtkWidget * widget, GdkEventButton * event); +gint preview_motion_notify_event(GtkWidget * widget, GdkEventButton * event); +gint preview_leave_notify_event(GtkWidget * widget, GdkEventButton * event); +gint preview_enter_notify_event(GtkWidget * widget, GdkEventButton * event); + + + +static gint list_button_press(GtkWidget *widget,GdkEventButton *event,gpointer data); +static gint new_button_press(GtkWidget *widget,GdkEventButton *bevent,gpointer data); +static gint fractalexplorer_delete_fractalexplorer_callback(GtkWidget *widget,GdkEventButton *bevent,gpointer data); +static gint delete_button_press_ok(GtkWidget *widget,gpointer data); +static gint rescan_button_press(GtkWidget *widget,GdkEventButton *bevent,gpointer data); +static void fractalexplorer_list_ok_callback (GtkWidget *w, gpointer client_data); +static void fractalexplorer_list_cancel_callback (GtkWidget *w, gpointer client_data); +static void fractalexplorer_dialog_edit_list (GtkWidget *lwidget,fractalexplorerOBJ *obj,gint created); +static GtkWidget *new_fractalexplorer_obj(gchar * name); +static void fractalexplorer_rescan_cancel_callback (GtkWidget *w, gpointer client_data); +void clear_list_items(GtkList *list); +gint fractalexplorer_list_pos(fractalexplorerOBJ *fractalexplorer); +gint fractalexplorer_list_insert (fractalexplorerOBJ *fractalexplorer); +GtkWidget* fractalexplorer_list_item_new_with_label_and_pixmap (fractalexplorerOBJ *obj, gchar *label, GtkWidget *pix_widget); +GtkWidget* fractalexplorer_new_pixmap(GtkWidget *list, char **pixdata); +static GtkWidget *fractalexplorer_list_add(fractalexplorerOBJ *obj); +void list_button_update(fractalexplorerOBJ *obj); +fractalexplorerOBJ *fractalexplorer_new(void); +void build_list_items(GtkWidget *list); +/* +static void fractalexplorer_op_menu_popup(gint button, guint32 activate_time,fractalexplorerOBJ *obj); +*/ +void plug_in_parse_fractalexplorer_path(); +void fractalexplorer_free(fractalexplorerOBJ * fractalexplorer); +void fractalexplorer_free_everything(fractalexplorerOBJ * fractalexplorer); +void fractalexplorer_list_free_all (); +fractalexplorerOBJ *fractalexplorer_load (gchar *filename, gchar *name); +static void fractalexplorer_rescan_file_selection_ok(GtkWidget *w, GtkFileSelection *fs, gpointer data); +void fractalexplorer_list_load_all(GList *plist); +static GtkWidget *add_objects_list (); +static GtkWidget *add_gradients_list (); +static void fractalexplorer_rescan_ok_callback (GtkWidget *w, gpointer client_data); +static void fractalexplorer_rescan_add_entry_callback (GtkWidget *w, gpointer client_data); +static void fractalexplorer_rescan_list (void); +/* +static void fractalexplorer_op_menu_create(GtkWidget *window); +*/ + + +/********************************************************************** + Global variables + *********************************************************************/ + +double xmin = -2, + xmax = 1, + ymin = -1.5, + ymax = 1.5; +double xbild, + ybild, + xdiff, + ydiff; +double x_press = -1.0, + y_press = -1.0; +double x_release = -1.0, + y_release = -1.0; +float cx = -0.75; +float cy = -0.2; +GDrawable *drawable; +gint tile_width, + tile_height; +gint img_width, + img_height, + img_bpp; +gint sel_x1, + sel_y1, + sel_x2, + sel_y2; +gint sel_width, + sel_height; +gint preview_width, + preview_height; +GTile *the_tile = NULL; +double cen_x, + cen_y; +double xpos, + ypos, + oldxpos = -1, + oldypos = -1; +gint do_redsinus, + do_redcosinus, + do_rednone; +gint do_greensinus, + do_greencosinus, + do_greennone; +gint do_bluesinus, + do_bluecosinus, + do_bluenone; +gint do_redinvert, + do_greeninvert, + do_blueinvert; +gint do_colormode1 = FALSE, + do_colormode2 = FALSE; +gint do_type0 = FALSE, + do_type1 = FALSE, + do_type2 = FALSE, + do_type3 = FALSE, + do_type4 = FALSE, + do_type5 = FALSE, + do_type6 = FALSE, + do_type7 = FALSE, + do_type8 = FALSE, + do_english = TRUE, + do_french = FALSE, + do_german = FALSE; +GtkWidget *maindlg; +GtkWidget *logodlg; +GtkWidget *loaddlg; +GtkWidget *cmap_preview; +GtkWidget *cmap_preview_long; +GtkWidget *cmap_preview_long2; +GtkWidget *delete_frame_to_freeze; +GtkWidget *fractalexplorer_gtk_list; +GtkWidget *save_menu_item; +GtkWidget *fractalexplorer_op_menu; +GtkTooltips *tips; +GdkColor tips_fg, + tips_bg; +GdkCursor *MyCursor; +int ready_now = FALSE; +explorer_vals_t zooms[100]; +DialogElements *elements = NULL; +int zoomindex = 1; +int zoommax = 1; +gdouble *gg; +int line_no; +gchar *filename; +clrmap colormap; +GList *fractalexplorer_path_list = NULL; +GList *fractalexplorer_list = NULL; +GList *gradient_list = NULL; +gchar *tpath = NULL; +fractalexplorerOBJ *fractalexplorer_obj_for_menu; +static GList *rescan_list = NULL; +int lng=LNG_GERMAN; + + +GPlugInInfo PLUG_IN_INFO = +{ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ +}; + +explorer_interface_t wint = +{ + NULL, /* preview */ + NULL, /* wimage */ + FALSE /* run */ +}; /* wint */ + +static explorer_vals_t wvals = +{ + 0, -2.0, 2.0, -1.5, 1.5, 50.0, -0.75, -0.2, 0, 128.0, 128.0, 128.0, 1, 1, 0, 0, 0, 0, 1, 0, +}; /* wvals */ + +static explorer_vals_t standardvals = +{ + 0, -2.0, 2.0, -1.5, 1.5, 50.0, -0.75, -0.2, 0, 128.0, 128.0, 128.0, 1, 1, 0, 0, 0, 0, 1, 0, +}; /* standardvals */ diff --git a/plug-ins/FractalExplorer/INSTALL b/plug-ins/FractalExplorer/INSTALL new file mode 100644 index 0000000000..a55f1675a5 --- /dev/null +++ b/plug-ins/FractalExplorer/INSTALL @@ -0,0 +1,89 @@ +------------------------------------------- + GIMP-Plug-In +------------------------------------------- + Written by Daniel Cotting + Bahnhofstrasse 31 + CH-3066 Stettlen (Switzerland) + + cotting@mygale.org + www.mygale.org/~cotting +------------------------------------------- + Some code is taken out of other plug-ins + written by other authors. +------------------------------------------- + + +------------------------------------------- + INSTALLATION +------------------------------------------- + To install it, you have to edit the + Makefile (change install-path). + Afterwards run make. This will compile + and install the plug-in in the right + directory. Once the new code is installed, + you can run the GIMP and enjoy the new + functions and effects it provides. + + Note that this plug-in has some sample + files which must be installed in one of + the following directories: + + ~/.gimp/fractalexplorer + /usr/local/share/gimp/0.99.XX/fractalexplorer + + You can find the sample files in the + subdirectory fractalexplorer-examples + of this distribution. + + You will have to add the following lines + to your gimprc file (usually + /usr/local/ share/gimp/0.99.XX/gimprc): + + # fractalexplorer directory + (fractalexplorer-path "${gimp_data_dir}/fractalexplorer:${gimp_dir}/fractalexplorer") + +------------------------------------------- + + +------------------------------------------- + REDUCE CODE SIZE +------------------------------------------- + If you find that the plug-in is too big, + you can compress the executables with the + gzexe program (if it is avaiable on your + system). To do so, change to the plug-in + directory of the GIMP... + + cd /usr/local/lib/gimp/VERSION/plug-ins + + ...and execute the command... + + gzexe PLUGIN_NAME + + ...and remember to remove the uncompres- + sed binary, which has been renamed to + PLUGIN_NAME~, by running the command: + + rm PLUGIN_NAME~ + + This will result in a code size of about + 50 kB, which isn't too much IMHO. +------------------------------------------ + + +------------------------------------------ + FEEDBACK +------------------------------------------ + I'm interested in any feedback, comments, + bug-reports, suggestions etc. If you + have anything you would like to tell + me, you can write to cotting@mygale.org. + Also have a look at the GIMP-section of + my homepage at www.mygale.org/~cotting. +------------------------------------------ + + Thank you and happy GIMPing! + Daniel Cotting + +------------------------------------------ + \ No newline at end of file diff --git a/plug-ins/FractalExplorer/Languages.h b/plug-ins/FractalExplorer/Languages.h new file mode 100644 index 0000000000..fc6a758bd3 --- /dev/null +++ b/plug-ins/FractalExplorer/Languages.h @@ -0,0 +1,566 @@ +static char * msg[4][104] = +{ + +/* English messages */ +{ + "OK", + "Cancel", + "Delete fractal", + "Are you sure you want to delete", + "\"%s\" from the list and from disk?", + "Delete", + "Error opening: %s", + "File '%s' Not a FractalExplorer file", + "File '%s' corrupt file - Line %d Option section incorrect", + "Internal error - list item has null object!", + "Unknown event\n", + "Edit fractal name", + "Fractal name:", + "New fractal", + "%s [copy]", + "Save", + "Save as...", + "Copy", + "Load", + "No fractalexplorer-path in gimprc:\n" + "You need to add an entry like\n" + "(fractalexplorer-path \"${gimp_dir}/fractalexplorer:${gimp_data_dir}/fractalexplorer\n" + "to your ~/.gimprc/gimprc file\n", + "fractalexplorer-path miss-configured - \nPath `%.100s' not found\n", + "Entry %.100s is not a directory\n", + "error reading fractalexplorer directory \"%s\"", + "My first fractal", + "Choose fractal by double-clicking on it", + "Rescan", + "Select directory and rescan collection", + "New", + "Create a new fractal for editing", + "Rename", + "Rename fractal in list", + "Delete currently selected fractal", + "Choose gradient by double-clicking on it", + "Add FractalExplorer path", + "Rescan for fractals", + "Add dir", + "Parameters", + "Parameters", + "Change the first (minimal) x-coordinate delimitation", + "Change the second (maximal) x-coordinate delimitation", + "Change the first (minimal) y-coordinate delimitation", + "Change the second (maximal) y-coordinate delimitation", + "Change the iteration value. The higher it is, the more details will be calculated, which will take more time.", + "Change the CX value (changes aspect of fractal, active with every fractal but Mandelbrot and Sierpinski)", + "Change the CY value (changes aspect of fractal, active with every fractal but Mandelbrot and Sierpinski)", + "Reset parameters to default values", + "Load a fractal from file", + "Save active fractal to file", + "Fractal type", + "Options", + "Reset to default values", + "Preview options", + "Realtime preview", + "If you enable this option the preview will be redrawn automatically.", + "Redraw", + "Redraw preview", + "Zoom options", + "Undo zoom", + "Undo last zoom", + "Redo zoom", + "Redo last zoom", + "Step in", + "Step out", + "Colors", + "Color density", + "Red", + "Green", + "Blue", + "Change the intensity of the red channel", + "Change the intensity of the green channel", + "Change the intensity of the blue channel", + "Color function", + "Sine", + "Cosine", + "None", + "Use sine-function for this color component", + "Use cosine-function for this color component", + "Use linear mapping instead of any trigonometrical function for this color channel", + "Inversion", + "If you enable this option higher color values will be swapped with lower ones and vice versa.", + "Color mode", + "As specified above", + "Create a color-map with the options you specified above (color density/function). The result is visible in the preview image", + "Apply active gradient to final image", + "Create a color-map using a gradient from the gradient editor.", + "Gradients", + "Fractals", + "Accept settings and start the calculation of the fractal", + "Discard any changes and close dialog box", + "About", + "Show information about the plug-in and the author", + "This will close the information box", + "Error opening '%.100s' could not save", + "Failed to write file\n", + "Save: No filename given", + "Save: Can't save to a directory", + "Load fractal parameters", + "Click here to load your file.", + "Click here to cancel load procedure.", + "Save fractal parameters", + "Click here to save your file.", + "Click here to cancel save procedure.", + "Save settings", + "This saves the currently selected language to the configuration file", +}, + + +/* Messages en français */ +{ + "Accepter", + "Annuler", + "Effacer fractal", + "Etes-vous sur de vouloir effacer le fichier", + "\"%s\" de la liste est du disque?", + "Effacer", + "Erreur lors de l'ouverture du fichier: %s", + "Le fichier '%s' ne correspond pas au format FractalExplorer!", + "Le fichier '%s' est corrompu - Ligne %d incorrecte.", + "Erreur interne - l'élément de la liste contient un objet NULL!", + "Evénement inconnu.\n", + "Changer le nom du fractal", + "Nom du fractal:", + "Nouveau fractal", + "%s [copie]", + "Enregistrer", + "Enregistrer sous...", + "Copier", + "Charger", + "Aucun répertoire FractalExplorer inscrit dans gimprc:\n" + "Vous devez aujouter une ligne telle que\n" + "(fractalexplorer-path \"${gimp_dir}/fractalexplorer:${gimp_data_dir}/fractalexplorer\n" + "dans votre fichier ~/.gimprc/gimprc\n", + "fractalexplorer-path n'est pas configuré correctement - \nDossier `%.100s' introuvable.\n", + "L'entrée %.100s n'est pas un répertoire.\n", + "Erreur lors de la lecture du répertoire \"%s\".", + "Mon premier fractal", + "Choisissez un fractal en double-cliquant sur celui-ci", + "Rafraîchir", + "Choix du répertoire et rechargement de la collection.", + "Nouveau", + "Créer nouveau fractal.", + "Renommer", + "Renommer le fractal contenu dans la liste.", + "Efface le fractal actuellement selectioné dans la liste.", + "Choisissez un dégradé de couleurs avec un double-click", + "Ajouter un dossier FractalExplorer.", + "Rechargement de nouveaux fractals.", + "Ajout de répertoires", + "Paramètres", + "Paramètres", + "Change la première delimitation de l'axe x (delimitation minimale de x).", + "Change la deuxième delimitation de l'axe x (delimitation maximale de x).", + "Change la première delimitation de l'axe y (delimitation minimale de y).", + "Change la deuxième delimitation de l'axe y (delimitation maximale de y).", + "Change la valeur d'iteration. Une valeur plus haute rend l'image plus detailée, mais utilise plus de temps de calcul.", + "Change la valeur CX (cela change l'aspect du fractal; l'option n'est pas active pour les types de fractal Mandelbrot and Sierpinski).", + "Change la valeur CY (cela change l'aspect du fractal; l'option n'est pas active pour les types de fractal Mandelbrot and Sierpinski).", + "Remets tous les paramètres à leur valeur par défaut.", + "Charge un fractal à partir d'un fichier.", + "Enregistre un fractal dans un fichier.", + "Type de fractal", + "Configuration", + "Valeurs par défaut", + "Prévisualisation", + "En temps réel", + "Si vous activez cette option, la fenêtre de prévisualisation sera automatiquement rafraîchie après chaque changement d'option.", + "Actualiser", + "Actualise et redessine la prévisualisation.", + "Options de zoom", + "Annuler zoom", + "Ceci annule le dernier zoom.", + "Refaire zoom", + "Ceci annule la dernière annulation du zoom.", + "Se rapprocher", + "S'éloigner", + "Couleurs", + "Densité des valeurs RVB d'une couleur", + "Rouge", + "Vert", + "Bleu", + "Change l'intensité du canal rouge.", + "Change l'intensité du canal vert.", + "Change l'intensité du canal bleu.", + "Fonctions appliqués aux canaux RVB", + "Sinus", + "Cosinus", + "Aucun", + "Utilise la fonction trigonométrique 'sinus' pour le calcul de cette composante de couleur.", + "Utilise la fonction trigonométrique 'cosinus' pour le calcul de cette composante de couleur.", + "Utilise une fonction linéaire au lieu d'une fonction trigonométrique pour ce canal.", + "Inversion", + "En activant cette option, vous assignez de grandes valeurs de couleurs aux couleurs ayant reçu des valeurs petites et vice versa.", + "Mode de couleur", + "Comme specifié ci-dessus", + "Crée une palette de couleur en utilisant les options que vous avez choisies ci-dessus (densité/fonction). Le résultat est visible dans l'image de prévisualisation.", + "Applique le dégradé de couleur actif", + "Crée une palette en utilisant le dégradé de couleur du 'Gradient Editor'.", + "Dégradés", + "Fractals", + "Accepte les options et démarre la calculation du fractal.", + "Rejette tout changement et ferme la boîte de dialogue.", + "Info...", + "Affiche des informations concernant l'auteur et le plug-in.", + "Ceci fermera la boîte de dialogue d'info.", + "Erreur lors de l'ouverture de '%.100s'. Sauvegarde echouée.", + "Ecriture du fichier impossible.\n", + "Enregistrement: Aucun fichier specifié.", + "Enregistrement: Impossible de sauvegarder dans un répertoire.", + "Chargement des paramètres d'un fractal", + "Cliquez ici afin de charger un fichier FractalExplorer.", + "Cliquez ici pour interrompre la procédure de chargement.", + "Enregistrement des paramètres d'un fractal", + "Cliquez ici pour charger votre fichier.", + "Cliquez ici pour imterropre la procédure d'enregistrement.", + "Enregistrer langue", + "Ceci enregistre la langue actuelle dans le fichier de configuration.", +}, + +/* Deutsche Mitteilungen */ +{ + "Weiter", + "Abbrechen", + "Fraktal löschen", + "Sind sie sicher, dass sie die Datei", + "\"%s\" aus der Liste und von der Festplatte entfernen möchten?", + "Löschen", + "Fehler beim Öffnen der Datei: %s", + "Die Datei '%s' scheint nicht im FractalExplorer-Format zu sein!", + "Die Datei '%s' ist beschädigt - Zeile %d inkorrekt.", + "Interner Fehler - das Listenelement besitzt ein NULL Objekt!", + "Unbekanntes Ereignis.\n", + "Ändere Fraktalnamen", + "Fraktal-Name:", + "Neues Fraktal", + "%s [Kopie]", + "Speichern", + "Speichern als...", + "Kopie", + "Laden", + "Kein fractalexplorer-path in gimprc:\n" + "Sie müssen einen Eintrag wie der folgende in ihre ~/.gimprc/gimprc Datei einfügen:\n" + "(fractalexplorer-path \"${gimp_dir}/fractalexplorer:${gimp_data_dir}/fractalexplorer\n", + "fractalexplorer-path falsch konfiguriert - \nPfad `%.100s' nicht gefunden\n", + "Eintrag %.100s ist kein Verzeichnis.\n", + "Fehler beim Lesen des FractalExplorer-Verzeichnisses \"%s\".", + "Mein erstes Fraktal", + "Wählen Sie ein Fraktal durch Doppelklick aus", + "Aktualisieren", + "Wahl eines Verzeichnisses und Wiedereinlese der Dateisammlung.", + "Neu", + "Erstellt ein neues Fraktal.", + "Umbenennen", + "Benennt das Fraktal in der Liste um.", + "Löscht das gerade gewählte Fraktal der Liste.", + "Wählen Sie einen Farbverlauf durch Doppelklick aus", + "Füge FractalExplorer-Pfad hinzu", + "Nach neuen Fraktalen suchen", + "Neues Verzeichis hinzufügen.", + "Fraktal-Optionen", + "Parameter", + "Ändert die erste (minimale) Begrenzung der x-Koordinate.", + "Ändert die zweite (maximale) Begrenzung der x-Koordinate.", + "Ändert die erste (minimale) Begrenzung der y-Koordinate.", + "Ändert die zweite (maximale) Begrenzung der y-Koordinate.", + "Ändert die Iterations-Variable. Je höher sie ist, um so genauer und detailierter wird das Bild sein. Eine grössere Berechenzeit ist allerdings in Kauf zu nehmen.", + "Ändert den CX-Wert (Dies wirkt sich auf alle Fraktale aus, ausser Mandelbrot und Sierpinski).", + "Ändert den CY-Wert (Dies wirkt sich auf alle Fraktale aus, ausser Mandelbrot und Sierpinski).", + "Setze Parameter auf die Standardwerte zurueck.", + "Lade ein Fraktal aus einer Datei", + "Speichere das aktive Fraktal in eine Datei", + "Fraktal-Typ", + "Diverse Optionen", + "Zurücksetzen", + "Vorschau-Optionen", + "Echtzeit-Vorschau", + "Falls Sie diese Option aktivieren, wird das Vorschaufenster stets automatisch aktualisiert.", + "Neu zeichnen", + "Zeichnet die Vorschau neu", + "Zoom-Optionen", + "Rueckgängig", + "Macht den letzten Zoom-Vorgang wieder rückgängig.", + "Wiederherstellen", + "Stellt den letzten Zoom-Vorgang wieder her.", + "Hinein", + "Hinaus", + "Farb-Optionen", + "Farbintensität", + "Rot", + "Gruen", + "Blau", + "Ändert die Intensität des roten Kanals.", + "Ändert die Intensität des gruenen Kanals.", + "Ändert die Intensität des blauen Kanals.", + "Farb-Funktion", + "Sinus", + "Cosinus", + "Keine", + "Verwende Sinus-Funktion für diese Farbkomponente.", + "Verwende Cosinus-Funktion für diese Farbkomponente.", + "Verwende lineare Farbabstufung statt einer trigonometrischen Funktion.", + "Inversion", + "Falls Sie diese Option aktivieren, werden tiefere Farbwerte durch höhere ausgetauscht und umgekehrt.", + "Farb-Modus", + "Wie oben stehend angegeben", + "Berechne Farbpalette mit den oben angegebenen Optionen (Farb-Intensität/-Funktion). Das Resultat ist in der Vorschau sichtbar.", + "Wende aktiven Farbverlauf an", + "Berechne Farbpalette mit den Angaben eines Verlaufes aus dem Gradient-Editor.", + "Farbverläufe", + "Fraktale", + "Akzeptiere Einstellungen und starte die Berechnung des Fraktals.", + "Verwerfe jegliche Änderungen und schliesse das Fenster.", + "Über...", + "Zeige Informationen über den Autor und das Plug-In.", + "Info-Box schliessen", + "Fehler beim Öffnen von '%.100s'. Konnte nicht speichern", + "Speichern der Datei fehlgeschlagen\n", + "Speichern: Keine Datei angegeben", + "Speichern: Kann nicht in ein Verzeichnis speichern", + "Lade Parameter eines Fraktals", + "Klicken Sie hier, um das Fraktal zu laden.", + "Klicken Sie hier, um den Ladevorgang abzubrechen.", + "Speichere Fraktalparameter", + "Klicken Sie hier, um das Fraktal in eine Datei zu speichern.", + "Klicken Sie hier, um den Speicherungsvorgang abzubrechen.", + "Sprache abspeichern", + "Klicken Sie hier, um die gewaehlte Sprache als Standard zu definieren und in die Konfigurationsdatei abzuspeichern.", +}, + +/* Schwedische Mitteilungen + ======================== + Hier koenntest Du die schwedischen Texte einfuegen, d.h. die deutschen ueberschreiben. +*/ + +{ + "Weiter", + "Abbrechen", + "Fraktal löschen", + "Sind sie sicher, dass sie die Datei", + "\"%s\" aus der Liste und von der Festplatte entfernen möchten?", + "Löschen", + "Fehler beim Öffnen der Datei: %s", + "Die Datei '%s' scheint nicht im FractalExplorer-Format zu sein!", + "Die Datei '%s' ist beschädigt - Zeile %d inkorrekt.", + "Interner Fehler - das Listenelement besitzt ein NULL Objekt!", + "Unbekanntes Ereignis.\n", + "Ändere Fraktalnamen", + "Fraktal-Name:", + "Neues Fraktal", + "%s [Kopie]", + "Speichern", + "Speichern als...", + "Kopie", + "Laden", + "Kein fractalexplorer-path in gimprc:\n" + "Sie müssen einen Eintrag wie der folgende in ihre ~/.gimprc/gimprc Datei einfügen:\n" + "(fractalexplorer-path \"${gimp_dir}/fractalexplorer:${gimp_data_dir}/fractalexplorer\n", + "fractalexplorer-path falsch konfiguriert - \nPfad `%.100s' nicht gefunden\n", + "Eintrag %.100s ist kein Verzeichnis.\n", + "Fehler beim Lesen des FractalExplorer-Verzeichnisses \"%s\".", + "Mein erstes Fraktal", + "Wählen Sie ein Fraktal durch Doppelklick aus", + "Aktualisieren", + "Wahl eines Verzeichnisses und Wiedereinlese der Dateisammlung.", + "Neu", + "Erstellt ein neues Fraktal.", + "Umbenennen", + "Benennt das Fraktal in der Liste um.", + "Löscht das gerade gewählte Fraktal der Liste.", + "Wählen Sie einen Farbverlauf durch Doppelklick aus", + "Füge FractalExplorer-Pfad hinzu", + "Nach neuen Fraktalen suchen", + "Neues Verzeichis hinzufügen.", + "Fraktal-Optionen", + "Parameter", + "Ändert die erste (minimale) Begrenzung der x-Koordinate.", + "Ändert die zweite (maximale) Begrenzung der x-Koordinate.", + "Ändert die erste (minimale) Begrenzung der y-Koordinate.", + "Ändert die zweite (maximale) Begrenzung der y-Koordinate.", + "Ändert die Iterations-Variable. Je höher sie ist, um so genauer und detailierter wird das Bild sein. Eine grössere Berechenzeit ist allerdings in Kauf zu nehmen.", + "Ändert den CX-Wert (Dies wirkt sich auf alle Fraktale aus, ausser Mandelbrot und Sierpinski).", + "Ändert den CY-Wert (Dies wirkt sich auf alle Fraktale aus, ausser Mandelbrot und Sierpinski).", + "Setze Parameter auf die Standardwerte zurueck.", + "Lade ein Fraktal aus einer Datei", + "Speichere das aktive Fraktal in eine Datei", + "Fraktal-Typ", + "Diverse Optionen", + "Zurücksetzen", + "Vorschau-Optionen", + "Echtzeit-Vorschau", + "Falls Sie diese Option aktivieren, wird das Vorschaufenster stets automatisch aktualisiert.", + "Neu zeichnen", + "Zeichnet die Vorschau neu", + "Zoom-Optionen", + "Rueckgängig", + "Macht den letzten Zoom-Vorgang wieder rückgängig.", + "Wiederherstellen", + "Stellt den letzten Zoom-Vorgang wieder her.", + "Hinein", + "Hinaus", + "Farb-Optionen", + "Farbintensität", + "Rot", + "Gruen", + "Blau", + "Ändert die Intensität des roten Kanals.", + "Ändert die Intensität des gruenen Kanals.", + "Ändert die Intensität des blauen Kanals.", + "Farb-Funktion", + "Sinus", + "Cosinus", + "Keine", + "Verwende Sinus-Funktion für diese Farbkomponente.", + "Verwende Cosinus-Funktion für diese Farbkomponente.", + "Verwende lineare Farbabstufung statt einer trigonometrischen Funktion.", + "Inversion", + "Falls Sie diese Option aktivieren, werden tiefere Farbwerte durch höhere ausgetauscht und umgekehrt.", + "Farb-Modus", + "Wie oben stehend angegeben", + "Berechne Farbpalette mit den oben angegebenen Optionen (Farb-Intensität/-Funktion). Das Resultat ist in der Vorschau sichtbar.", + "Wende aktiven Farbverlauf an", + "Berechne Farbpalette mit den Angaben eines Verlaufes aus dem Gradient-Editor.", + "Farbverläufe", + "Fraktale", + "Akzeptiere Einstellungen und starte die Berechnung des Fraktals.", + "Verwerfe jegliche Änderungen und schliesse das Fenster.", + "Über...", + "Zeige Informationen über den Autor und das Plug-In.", + "Info-Box schliessen", + "Fehler beim Öffnen von '%.100s'. Konnte nicht speichern", + "Speichern der Datei fehlgeschlagen\n", + "Speichern: Keine Datei angegeben", + "Speichern: Kann nicht in ein Verzeichnis speichern", + "Lade Parameter eines Fraktals", + "Klicken Sie hier, um das Fraktal zu laden.", + "Klicken Sie hier, um den Ladevorgang abzubrechen.", + "Speichere Fraktalparameter", + "Klicken Sie hier, um das Fraktal in eine Datei zu speichern.", + "Klicken Sie hier, um den Speicherungsvorgang abzubrechen.", + "Sprache abspeichern", + "Klicken Sie hier, um die gewaehlte Sprache als Standard zu definieren und in die Konfigurationsdatei abzuspeichern.", +}, + +}; + +enum { + MSG_OK, + MSG_CANCEL, + MSG_DELFRAC, + MSG_DELSURE, + MSG_DELSURE2, + MSG_DEL, + MSG_OPENERROR, + MSG_WRONGFILETYPE, + MSG_CORRUPTFILE, + MSG_NULLLIST, + MSG_UNKNOWN_EVENT, + MSG_EDIT_FRACNAME, + MSG_FRACNAME, + MSG_NEWFRAC, + MSG_COPYNAME, + MSG_SAVE, + MSG_SAVEAS, + MSG_COPY, + MSG_LOAD, + MSG_MISSING_GIMPRC, + MSG_WRONGPATH, + MSG_NOTDIR, + MSG_DIRREADERROR, + MSG_FIRSTFRACTAL, + MSG_CHOOSE_FRACTAL, + MSG_RESCAN, + MSG_RESCAN_COMMENT, + MSG_NEW, + MSG_NEW_COMMENT, + MSG_RENAME, + MSG_RENAME_COMMENT, + MSG_DELETE_COMMENT, + MSG_CHOOSE_GRADIENT, + MSG_ADDPATH, + MSG_RESCANTITLE1, + MSG_ADDDIR, + MSG_FRACTALOPTIONS, + MSG_PARAMETERS, + MSG_XMIN, + MSG_XMAX, + MSG_YMIN, + MSG_YMAX, + MSG_ITER, + MSG_CX, + MSG_CY, + MSG_RESET_PARAM_COMMENT, + MSG_LOADCOMMENT, + MSG_SAVECOMMENT, + MSG_FRACTALTYPE, + MSG_GENERALOPTIONS, + MSG_RESET, + MSG_PREVIEW, + MSG_REALTIMEPREVIEW, + MSG_REDRAWCOMMENT, + MSG_REDRAW, + MSG_REDRAWPREVIEW, + MSG_ZOOMOPTS, + MSG_UNDOZOOM, + MSG_UNDOCOMMENT, + MSG_REDOZOOM, + MSG_REDOCOMMENT, + MSG_STEPIN, + MSG_STEPOUT, + MSG_COLOROPTS, + MSG_COLORDENSITY, + MSG_RED, + MSG_GREEN, + MSG_BLUE, + MSG_REDINTENSITY, + MSG_GREENINTENSITY, + MSG_BLUEINTENSITY, + MSG_COLORFUNCTION, + MSG_SINE, + MSG_COSINE, + MSG_NONE, + MSG_SINECOMMENT, + MSG_COSINECOMMENT, + MSG_NONECOMMENT, + MSG_INVERSION, + MSG_INVERSIONCOMMENT, + MSG_COLORMODE, + MSG_ASSPECIFIED, + MSG_ASSPECIFIEDCOMMENT, + MSG_APPLYGRADIENT, + MSG_APPLYGRADIENTCOMMENT, + MSG_GRADIENTPRESETS, + MSG_FRACTALPRESETS, + MSG_STARTCALC, + MSG_MAINDLGCANCEL, + MSG_ABOUT, + MSG_ABOUTCOMMENT, + MSG_ABOUTBOXOKCOMMENT, + MSG_SAVEERROR, + MSG_WRITEFAILURE, + MSG_NOFILENAME, + MSG_NOSAVETODIR, + MSG_LOADWINTITLE, + MSG_LOADBUTTONCOMMENT, + MSG_CANCELLOAD, + MSG_SAVEWINTITLE, + MSG_SAVEBUTTONCOMMENT, + MSG_CANCELSAVE, + MSG_SAVELANGUAGE, + MSG_SAVELANGUAGE_COMMENT +}; + +enum { + LNG_ENGLISH, + LNG_FRENCH, + LNG_GERMAN, + LNG_ITALIAN, + LNG_SPANISH +}; diff --git a/plug-ins/FractalExplorer/Makefile.am b/plug-ins/FractalExplorer/Makefile.am new file mode 100644 index 0000000000..dea5b15f92 --- /dev/null +++ b/plug-ins/FractalExplorer/Makefile.am @@ -0,0 +1,50 @@ +## Process this file with automake to produce Makefile.in + +pluginlibdir = $(gimpplugindir)/plug-ins + +pluginlib_PROGRAMS = FractalExplorer + +FractalExplorer_SOURCES = \ + FractalExplorer.c \ + Dialogs.h \ + Callbacks.h \ + Events.h \ + FractalExplorer.h \ + Languages.h \ + logo.h \ + pix_data.h + +INCLUDES = \ + $(X_CFLAGS) \ + -I$(top_srcdir) \ + -I$(includedir) + +LDADD = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la \ + $(X_LIBS) \ + -lc + +DEPS = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la + +FractalExplorer_DEPENDENCIES = $(DEPS) + +.PHONY: files + +files: + @files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \ + echo $$p; \ + done + @for subdir in $(SUBDIRS); do \ + files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \ + for file in $$files; do \ + echo $$subdir/$$file; \ + done; \ + done + + + + + diff --git a/plug-ins/FractalExplorer/README b/plug-ins/FractalExplorer/README new file mode 100644 index 0000000000..a55f1675a5 --- /dev/null +++ b/plug-ins/FractalExplorer/README @@ -0,0 +1,89 @@ +------------------------------------------- + GIMP-Plug-In +------------------------------------------- + Written by Daniel Cotting + Bahnhofstrasse 31 + CH-3066 Stettlen (Switzerland) + + cotting@mygale.org + www.mygale.org/~cotting +------------------------------------------- + Some code is taken out of other plug-ins + written by other authors. +------------------------------------------- + + +------------------------------------------- + INSTALLATION +------------------------------------------- + To install it, you have to edit the + Makefile (change install-path). + Afterwards run make. This will compile + and install the plug-in in the right + directory. Once the new code is installed, + you can run the GIMP and enjoy the new + functions and effects it provides. + + Note that this plug-in has some sample + files which must be installed in one of + the following directories: + + ~/.gimp/fractalexplorer + /usr/local/share/gimp/0.99.XX/fractalexplorer + + You can find the sample files in the + subdirectory fractalexplorer-examples + of this distribution. + + You will have to add the following lines + to your gimprc file (usually + /usr/local/ share/gimp/0.99.XX/gimprc): + + # fractalexplorer directory + (fractalexplorer-path "${gimp_data_dir}/fractalexplorer:${gimp_dir}/fractalexplorer") + +------------------------------------------- + + +------------------------------------------- + REDUCE CODE SIZE +------------------------------------------- + If you find that the plug-in is too big, + you can compress the executables with the + gzexe program (if it is avaiable on your + system). To do so, change to the plug-in + directory of the GIMP... + + cd /usr/local/lib/gimp/VERSION/plug-ins + + ...and execute the command... + + gzexe PLUGIN_NAME + + ...and remember to remove the uncompres- + sed binary, which has been renamed to + PLUGIN_NAME~, by running the command: + + rm PLUGIN_NAME~ + + This will result in a code size of about + 50 kB, which isn't too much IMHO. +------------------------------------------ + + +------------------------------------------ + FEEDBACK +------------------------------------------ + I'm interested in any feedback, comments, + bug-reports, suggestions etc. If you + have anything you would like to tell + me, you can write to cotting@mygale.org. + Also have a look at the GIMP-section of + my homepage at www.mygale.org/~cotting. +------------------------------------------ + + Thank you and happy GIMPing! + Daniel Cotting + +------------------------------------------ + \ No newline at end of file diff --git a/plug-ins/FractalExplorer/examples/Asteroid Field b/plug-ins/FractalExplorer/examples/Asteroid Field new file mode 100644 index 0000000000..887acc362d --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Asteroid Field @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 5 +xmin: -0.664136886596680 +xmax: -0.663678705692291 +ymin: -0.378479450941086 +ymax: -0.378030359745026 +iter: 214.723999023437500 +cx: 0.184000000357628 +cy: -0.200000002980232 +redstretch: 89.130996704101562 +greenstretch: 70.365997314453125 +bluestretch: 58.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Bar Code Label b/plug-ins/FractalExplorer/examples/Bar Code Label new file mode 100644 index 0000000000..9a967bfc81 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Bar Code Label @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.443357914686203 +xmax: -0.443357914686203 +ymin: 0.085399866104126 +ymax: 0.085484646260738 +iter: 50.000000000000000 +cx: -0.847000002861023 +cy: -0.184000000357628 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Beauty of Nature b/plug-ins/FractalExplorer/examples/Beauty of Nature new file mode 100644 index 0000000000..2b56507209 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Beauty of Nature @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.125070333480835 +xmax: -0.120749041438103 +ymin: -0.537724196910858 +ymax: -0.532733201980591 +iter: 49.080001831054688 +cx: 0.453999996185303 +cy: 0.000000000000000 +redstretch: 123.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 78.000000000000000 +redmode: 1 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Blue Curtain b/plug-ins/FractalExplorer/examples/Blue Curtain new file mode 100644 index 0000000000..272fe7ac58 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Blue Curtain @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: 0.257157027721405 +xmax: 0.257280886173248 +ymin: 0.153874531388283 +ymax: 0.154003381729126 +iter: 49.080001831054688 +cx: -0.750000000000000 +cy: -0.356000006198883 +redstretch: 123.978996276855469 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Car Track b/plug-ins/FractalExplorer/examples/Car Track new file mode 100644 index 0000000000..5d37c6c6e4 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Car Track @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.104991987347603 +xmax: -0.104991905391216 +ymin: 0.250050097703934 +ymax: 0.250050216913223 +iter: 202.453994750976562 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Energetic Diamond b/plug-ins/FractalExplorer/examples/Energetic Diamond new file mode 100644 index 0000000000..f8e79ca83b --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Energetic Diamond @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -1.255496978759766 +xmax: -1.249950170516968 +ymin: -0.347052335739136 +ymax: -0.338468551635742 +iter: 50.000000000000000 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 2 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Explosive b/plug-ins/FractalExplorer/examples/Explosive new file mode 100644 index 0000000000..57327691a8 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Explosive @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: 0.353848785161972 +xmax: 0.356627285480499 +ymin: 0.458385974168777 +ymax: 0.460633248090744 +iter: 147.238998413085938 +cx: 0.000000000000000 +cy: 0.000000000000000 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 1 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Flower b/plug-ins/FractalExplorer/examples/Flower new file mode 100644 index 0000000000..f1712a9b04 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Flower @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.125281319022179 +xmax: -0.116631627082825 +ymin: 0.375891804695129 +ymax: 0.384632647037506 +iter: 67.485000610351562 +cx: 0.405000001192093 +cy: -0.200000002980232 +redstretch: 124.000000000000000 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 0 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Fragments b/plug-ins/FractalExplorer/examples/Fragments new file mode 100644 index 0000000000..37fa127301 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Fragments @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 2 +xmin: -0.508517742156982 +xmax: -0.475813776254654 +ymin: -0.025438375771046 +ymax: 0.025984741747379 +iter: 177.914001464843750 +cx: -1.018000006675720 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 1 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Hemp b/plug-ins/FractalExplorer/examples/Hemp new file mode 100644 index 0000000000..6d941acfa5 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Hemp @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.968750000000000 +xmax: 0.437500000000000 +ymin: -0.703125000000000 +ymax: 0.843750000000000 +iter: 50.000000000000000 +cx: -0.012000000104308 +cy: 0.000000000000000 +redstretch: 87.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 0.000000000000000 +redmode: 0 +greenmode: 2 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/High Voltage b/plug-ins/FractalExplorer/examples/High Voltage new file mode 100644 index 0000000000..788cfa8010 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/High Voltage @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 1 +xmin: -0.476808547973633 +xmax: -0.223514556884766 +ymin: -0.017941474914551 +ymax: 0.114898681640625 +iter: 50.000000000000000 +cx: -1.337000012397766 +cy: 0.086000002920628 +redstretch: 127.330001831054688 +greenstretch: 90.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 2 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Hoops b/plug-ins/FractalExplorer/examples/Hoops new file mode 100644 index 0000000000..83f09aeb7f --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Hoops @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.345402956008911 +xmax: -0.252956151962280 +ymin: -0.274888515472412 +ymax: -0.204696178436279 +iter: 30.674999237060547 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 67.000000000000000 +bluestretch: 98.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Ice Crystal b/plug-ins/FractalExplorer/examples/Ice Crystal new file mode 100644 index 0000000000..db6a396a55 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Ice Crystal @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 1 +xmin: 0.068130433559418 +xmax: 0.116958513855934 +ymin: 0.512302279472351 +ymax: 0.534968316555023 +iter: 202.453994750976562 +cx: 0.356000006198883 +cy: 0.428999990224838 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Leaves b/plug-ins/FractalExplorer/examples/Leaves new file mode 100644 index 0000000000..43706e8969 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Leaves @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.350769042968750 +xmax: -0.080402374267578 +ymin: -0.264384269714355 +ymax: -0.041095733642578 +iter: 50.000000000000000 +cx: -0.184000000357628 +cy: 0.000000000000000 +redstretch: 29.000000000000000 +greenstretch: 80.000000000000000 +bluestretch: 7.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Lightning b/plug-ins/FractalExplorer/examples/Lightning new file mode 100644 index 0000000000..bb23dc5453 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Lightning @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -1.285429239273071 +xmax: -1.283814907073975 +ymin: 0.428520709276199 +ymax: 0.432528734207153 +iter: 50.000000000000000 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 89.130996704101562 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Mandelbrot b/plug-ins/FractalExplorer/examples/Mandelbrot new file mode 100644 index 0000000000..5a604e51d6 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Mandelbrot @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -0.078803382813931 +xmax: -0.077717751264572 +ymin: -0.880311131477356 +ymax: -0.879459798336029 +iter: 503.066986083984375 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 120.627998352050781 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 2 +bluemode: 0 +redinvert: 1 +greeninvert: 0 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Marble b/plug-ins/FractalExplorer/examples/Marble new file mode 100644 index 0000000000..ea3f71a2a2 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Marble @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.235851287841797 +xmax: -0.060367584228516 +ymin: 0.091303825378418 +ymax: 0.220178604125977 +iter: 55.215000152587891 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 127.330001831054688 +redmode: 1 +greenmode: 2 +bluemode: 2 +redinvert: 0 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Marble2 b/plug-ins/FractalExplorer/examples/Marble2 new file mode 100644 index 0000000000..a0f26cb354 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Marble2 @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.146484375000000 +xmax: 0.064453125000000 +ymin: 0.154907226562500 +ymax: 0.358154296875000 +iter: 50.000000000000000 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Medusa b/plug-ins/FractalExplorer/examples/Medusa new file mode 100644 index 0000000000..5b74743545 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Medusa @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -1.408687233924866 +xmax: -1.408686757087708 +ymin: -0.135643482208252 +ymax: -0.135642752051353 +iter: 104.293998718261719 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 0 +bluemode: 1 +redinvert: 1 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Nautilus b/plug-ins/FractalExplorer/examples/Nautilus new file mode 100644 index 0000000000..0c7da432df --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Nautilus @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.078369140625000 +xmax: 0.158203125000000 +ymin: -0.485778808593750 +ymax: -0.197387695312500 +iter: 134.968994140625000 +cx: 0.109999999403954 +cy: 0.037000000476837 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Nebula b/plug-ins/FractalExplorer/examples/Nebula new file mode 100644 index 0000000000..1246289a17 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Nebula @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.935546875000000 +xmax: 0.226562500000000 +ymin: 0.034790039062500 +ymax: 0.995361328125000 +iter: 67.485000610351562 +cx: 0.428999990224838 +cy: 0.232999995350838 +redstretch: 128.000000000000000 +greenstretch: 120.627998352050781 +bluestretch: 93.000000000000000 +redmode: 2 +greenmode: 2 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Plant b/plug-ins/FractalExplorer/examples/Plant new file mode 100644 index 0000000000..29731eca3d --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Plant @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.251464843750000 +xmax: -0.097656250000000 +ymin: -0.626953125000000 +ymax: -0.503356933593750 +iter: 55.215000152587891 +cx: 0.503000020980835 +cy: -0.012000000104308 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 1 +bluemode: 0 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Rose b/plug-ins/FractalExplorer/examples/Rose new file mode 100644 index 0000000000..8c88d8e321 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Rose @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 7 +xmin: 0.011789147742093 +xmax: 0.012022980488837 +ymin: 0.040065050125122 +ymax: 0.040298193693161 +iter: 92.025001525878906 +cx: -1.092000007629395 +cy: 0.232999995350838 +redstretch: 124.000000000000000 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 1 +greenmode: 0 +bluemode: 0 +redinvert: 1 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Saturn b/plug-ins/FractalExplorer/examples/Saturn new file mode 100644 index 0000000000..ec0542be09 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Saturn @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.720550119876862 +xmax: -0.736553728580475 +ymin: 0.128735020756721 +ymax: 0.068184189498425 +iter: 49.080001831054688 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 119.958000183105469 +greenstretch: 85.779998779296875 +bluestretch: 6.031000137329102 +redmode: 0 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Snow Crystal b/plug-ins/FractalExplorer/examples/Snow Crystal new file mode 100644 index 0000000000..02f2928d05 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Snow Crystal @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -0.562806546688080 +xmax: -0.561547160148621 +ymin: -0.643333077430725 +ymax: -0.642277657985687 +iter: 122.698997497558594 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Soma b/plug-ins/FractalExplorer/examples/Soma new file mode 100644 index 0000000000..9d9b44666f --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Soma @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.038584709167480 +xmax: 0.094075202941895 +ymin: -0.689266920089722 +ymax: -0.584711074829102 +iter: 98.160003662109375 +cx: 0.405000001192093 +cy: 0.037000000476837 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 2 +redinvert: 0 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Spark b/plug-ins/FractalExplorer/examples/Spark new file mode 100644 index 0000000000..f4b2ec6993 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Spark @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 7 +xmin: -0.014160156250000 +xmax: 1.014160156250000 +ymin: -0.261108398437500 +ymax: 0.252685546875000 +iter: 42.944999694824219 +cx: -1.386999964714050 +cy: -0.257999986410141 +redstretch: 124.000000000000000 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 0 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 1 +colormode: 1 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Suns b/plug-ins/FractalExplorer/examples/Suns new file mode 100644 index 0000000000..683a147c05 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Suns @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 1 +xmin: -0.573436737060547 +xmax: -0.399868011474609 +ymin: -0.177640914916992 +ymax: -0.024647712707520 +iter: 607.361999511718750 +cx: -0.723999977111816 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 0 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Tentacles b/plug-ins/FractalExplorer/examples/Tentacles new file mode 100644 index 0000000000..19402f4dc3 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Tentacles @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.430790066719055 +xmax: -0.421469658613205 +ymin: 0.017559077590704 +ymax: 0.025114785879850 +iter: 67.485000610351562 +cx: -0.086000002920628 +cy: -0.012000000104308 +redstretch: 128.000000000000000 +greenstretch: 37.000000000000000 +bluestretch: 93.000000000000000 +redmode: 2 +greenmode: 2 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/The Green Place b/plug-ins/FractalExplorer/examples/The Green Place new file mode 100644 index 0000000000..8504364f4b --- /dev/null +++ b/plug-ins/FractalExplorer/examples/The Green Place @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 2 +xmin: 0.064453125000000 +xmax: 0.950683593750000 +ymin: -0.389648437500000 +ymax: 0.476440429687500 +iter: 50.000000000000000 +cx: -1.067000031471252 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 110.000000000000000 +bluestretch: 2.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 1 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Wave b/plug-ins/FractalExplorer/examples/Wave new file mode 100644 index 0000000000..e9deae072d --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Wave @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 2 +xmin: -0.937500000000000 +xmax: 1.125000000000000 +ymin: -0.609375000000000 +ymax: 0.609375000000000 +iter: 50.000000000000000 +cx: -1.042999982833862 +cy: -0.037000000476837 +redstretch: 128.000000000000000 +greenstretch: 22.000000000000000 +bluestretch: 101.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Wood b/plug-ins/FractalExplorer/examples/Wood new file mode 100644 index 0000000000..ffdd12078f --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Wood @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -1.287102937698364 +xmax: -1.287102580070496 +ymin: 0.099825143814087 +ymax: 0.099862203001976 +iter: 50.000000000000000 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 109.905998229980469 +bluestretch: 2.009999990463257 +redmode: 1 +greenmode: 0 +bluemode: 0 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/examples/Zooming Circle b/plug-ins/FractalExplorer/examples/Zooming Circle new file mode 100644 index 0000000000..75a704daf3 --- /dev/null +++ b/plug-ins/FractalExplorer/examples/Zooming Circle @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 3 +xmin: 0.187500000000000 +xmax: 0.984375000000000 +ymin: 0.843750000000000 +ymax: 1.734375000000000 +iter: 50.000000000000000 +cx: 0.773000001907349 +cy: -0.723999977111816 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 0 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Asteroid Field b/plug-ins/FractalExplorer/fractalexplorer-examples/Asteroid Field new file mode 100644 index 0000000000..887acc362d --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Asteroid Field @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 5 +xmin: -0.664136886596680 +xmax: -0.663678705692291 +ymin: -0.378479450941086 +ymax: -0.378030359745026 +iter: 214.723999023437500 +cx: 0.184000000357628 +cy: -0.200000002980232 +redstretch: 89.130996704101562 +greenstretch: 70.365997314453125 +bluestretch: 58.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Bar Code Label b/plug-ins/FractalExplorer/fractalexplorer-examples/Bar Code Label new file mode 100644 index 0000000000..9a967bfc81 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Bar Code Label @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.443357914686203 +xmax: -0.443357914686203 +ymin: 0.085399866104126 +ymax: 0.085484646260738 +iter: 50.000000000000000 +cx: -0.847000002861023 +cy: -0.184000000357628 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Beauty of Nature b/plug-ins/FractalExplorer/fractalexplorer-examples/Beauty of Nature new file mode 100644 index 0000000000..2b56507209 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Beauty of Nature @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.125070333480835 +xmax: -0.120749041438103 +ymin: -0.537724196910858 +ymax: -0.532733201980591 +iter: 49.080001831054688 +cx: 0.453999996185303 +cy: 0.000000000000000 +redstretch: 123.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 78.000000000000000 +redmode: 1 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Blue Curtain b/plug-ins/FractalExplorer/fractalexplorer-examples/Blue Curtain new file mode 100644 index 0000000000..272fe7ac58 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Blue Curtain @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: 0.257157027721405 +xmax: 0.257280886173248 +ymin: 0.153874531388283 +ymax: 0.154003381729126 +iter: 49.080001831054688 +cx: -0.750000000000000 +cy: -0.356000006198883 +redstretch: 123.978996276855469 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Car Track b/plug-ins/FractalExplorer/fractalexplorer-examples/Car Track new file mode 100644 index 0000000000..5d37c6c6e4 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Car Track @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.104991987347603 +xmax: -0.104991905391216 +ymin: 0.250050097703934 +ymax: 0.250050216913223 +iter: 202.453994750976562 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Energetic Diamond b/plug-ins/FractalExplorer/fractalexplorer-examples/Energetic Diamond new file mode 100644 index 0000000000..f8e79ca83b --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Energetic Diamond @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -1.255496978759766 +xmax: -1.249950170516968 +ymin: -0.347052335739136 +ymax: -0.338468551635742 +iter: 50.000000000000000 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 2 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Explosive b/plug-ins/FractalExplorer/fractalexplorer-examples/Explosive new file mode 100644 index 0000000000..57327691a8 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Explosive @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: 0.353848785161972 +xmax: 0.356627285480499 +ymin: 0.458385974168777 +ymax: 0.460633248090744 +iter: 147.238998413085938 +cx: 0.000000000000000 +cy: 0.000000000000000 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 1 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Flower b/plug-ins/FractalExplorer/fractalexplorer-examples/Flower new file mode 100644 index 0000000000..f1712a9b04 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Flower @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.125281319022179 +xmax: -0.116631627082825 +ymin: 0.375891804695129 +ymax: 0.384632647037506 +iter: 67.485000610351562 +cx: 0.405000001192093 +cy: -0.200000002980232 +redstretch: 124.000000000000000 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 0 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Fragments b/plug-ins/FractalExplorer/fractalexplorer-examples/Fragments new file mode 100644 index 0000000000..37fa127301 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Fragments @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 2 +xmin: -0.508517742156982 +xmax: -0.475813776254654 +ymin: -0.025438375771046 +ymax: 0.025984741747379 +iter: 177.914001464843750 +cx: -1.018000006675720 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 1 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Hemp b/plug-ins/FractalExplorer/fractalexplorer-examples/Hemp new file mode 100644 index 0000000000..6d941acfa5 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Hemp @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.968750000000000 +xmax: 0.437500000000000 +ymin: -0.703125000000000 +ymax: 0.843750000000000 +iter: 50.000000000000000 +cx: -0.012000000104308 +cy: 0.000000000000000 +redstretch: 87.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 0.000000000000000 +redmode: 0 +greenmode: 2 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/High Voltage b/plug-ins/FractalExplorer/fractalexplorer-examples/High Voltage new file mode 100644 index 0000000000..788cfa8010 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/High Voltage @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 1 +xmin: -0.476808547973633 +xmax: -0.223514556884766 +ymin: -0.017941474914551 +ymax: 0.114898681640625 +iter: 50.000000000000000 +cx: -1.337000012397766 +cy: 0.086000002920628 +redstretch: 127.330001831054688 +greenstretch: 90.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 2 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Hoops b/plug-ins/FractalExplorer/fractalexplorer-examples/Hoops new file mode 100644 index 0000000000..83f09aeb7f --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Hoops @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.345402956008911 +xmax: -0.252956151962280 +ymin: -0.274888515472412 +ymax: -0.204696178436279 +iter: 30.674999237060547 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 67.000000000000000 +bluestretch: 98.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Ice Crystal b/plug-ins/FractalExplorer/fractalexplorer-examples/Ice Crystal new file mode 100644 index 0000000000..db6a396a55 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Ice Crystal @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 1 +xmin: 0.068130433559418 +xmax: 0.116958513855934 +ymin: 0.512302279472351 +ymax: 0.534968316555023 +iter: 202.453994750976562 +cx: 0.356000006198883 +cy: 0.428999990224838 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Leaves b/plug-ins/FractalExplorer/fractalexplorer-examples/Leaves new file mode 100644 index 0000000000..43706e8969 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Leaves @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.350769042968750 +xmax: -0.080402374267578 +ymin: -0.264384269714355 +ymax: -0.041095733642578 +iter: 50.000000000000000 +cx: -0.184000000357628 +cy: 0.000000000000000 +redstretch: 29.000000000000000 +greenstretch: 80.000000000000000 +bluestretch: 7.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Lightning b/plug-ins/FractalExplorer/fractalexplorer-examples/Lightning new file mode 100644 index 0000000000..bb23dc5453 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Lightning @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -1.285429239273071 +xmax: -1.283814907073975 +ymin: 0.428520709276199 +ymax: 0.432528734207153 +iter: 50.000000000000000 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 89.130996704101562 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Mandelbrot b/plug-ins/FractalExplorer/fractalexplorer-examples/Mandelbrot new file mode 100644 index 0000000000..5a604e51d6 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Mandelbrot @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -0.078803382813931 +xmax: -0.077717751264572 +ymin: -0.880311131477356 +ymax: -0.879459798336029 +iter: 503.066986083984375 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 120.627998352050781 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 2 +bluemode: 0 +redinvert: 1 +greeninvert: 0 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Marble b/plug-ins/FractalExplorer/fractalexplorer-examples/Marble new file mode 100644 index 0000000000..ea3f71a2a2 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Marble @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.235851287841797 +xmax: -0.060367584228516 +ymin: 0.091303825378418 +ymax: 0.220178604125977 +iter: 55.215000152587891 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 127.330001831054688 +redmode: 1 +greenmode: 2 +bluemode: 2 +redinvert: 0 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Marble2 b/plug-ins/FractalExplorer/fractalexplorer-examples/Marble2 new file mode 100644 index 0000000000..a0f26cb354 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Marble2 @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.146484375000000 +xmax: 0.064453125000000 +ymin: 0.154907226562500 +ymax: 0.358154296875000 +iter: 50.000000000000000 +cx: 0.356000006198883 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Medusa b/plug-ins/FractalExplorer/fractalexplorer-examples/Medusa new file mode 100644 index 0000000000..5b74743545 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Medusa @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -1.408687233924866 +xmax: -1.408686757087708 +ymin: -0.135643482208252 +ymax: -0.135642752051353 +iter: 104.293998718261719 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 0 +bluemode: 1 +redinvert: 1 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Nautilus b/plug-ins/FractalExplorer/fractalexplorer-examples/Nautilus new file mode 100644 index 0000000000..0c7da432df --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Nautilus @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.078369140625000 +xmax: 0.158203125000000 +ymin: -0.485778808593750 +ymax: -0.197387695312500 +iter: 134.968994140625000 +cx: 0.109999999403954 +cy: 0.037000000476837 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 1 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Nebula b/plug-ins/FractalExplorer/fractalexplorer-examples/Nebula new file mode 100644 index 0000000000..1246289a17 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Nebula @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.935546875000000 +xmax: 0.226562500000000 +ymin: 0.034790039062500 +ymax: 0.995361328125000 +iter: 67.485000610351562 +cx: 0.428999990224838 +cy: 0.232999995350838 +redstretch: 128.000000000000000 +greenstretch: 120.627998352050781 +bluestretch: 93.000000000000000 +redmode: 2 +greenmode: 2 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Plant b/plug-ins/FractalExplorer/fractalexplorer-examples/Plant new file mode 100644 index 0000000000..29731eca3d --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Plant @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.251464843750000 +xmax: -0.097656250000000 +ymin: -0.626953125000000 +ymax: -0.503356933593750 +iter: 55.215000152587891 +cx: 0.503000020980835 +cy: -0.012000000104308 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 1 +bluemode: 0 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Rose b/plug-ins/FractalExplorer/fractalexplorer-examples/Rose new file mode 100644 index 0000000000..8c88d8e321 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Rose @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 7 +xmin: 0.011789147742093 +xmax: 0.012022980488837 +ymin: 0.040065050125122 +ymax: 0.040298193693161 +iter: 92.025001525878906 +cx: -1.092000007629395 +cy: 0.232999995350838 +redstretch: 124.000000000000000 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 1 +greenmode: 0 +bluemode: 0 +redinvert: 1 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Saturn b/plug-ins/FractalExplorer/fractalexplorer-examples/Saturn new file mode 100644 index 0000000000..ec0542be09 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Saturn @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -0.720550119876862 +xmax: -0.736553728580475 +ymin: 0.128735020756721 +ymax: 0.068184189498425 +iter: 49.080001831054688 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 119.958000183105469 +greenstretch: 85.779998779296875 +bluestretch: 6.031000137329102 +redmode: 0 +greenmode: 0 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Snow Crystal b/plug-ins/FractalExplorer/fractalexplorer-examples/Snow Crystal new file mode 100644 index 0000000000..02f2928d05 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Snow Crystal @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 0 +xmin: -0.562806546688080 +xmax: -0.561547160148621 +ymin: -0.643333077430725 +ymax: -0.642277657985687 +iter: 122.698997497558594 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 113.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 0 +bluemode: 2 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Soma b/plug-ins/FractalExplorer/fractalexplorer-examples/Soma new file mode 100644 index 0000000000..9d9b44666f --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Soma @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.038584709167480 +xmax: 0.094075202941895 +ymin: -0.689266920089722 +ymax: -0.584711074829102 +iter: 98.160003662109375 +cx: 0.405000001192093 +cy: 0.037000000476837 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 2 +redinvert: 0 +greeninvert: 1 +blueinvert: 1 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Spark b/plug-ins/FractalExplorer/fractalexplorer-examples/Spark new file mode 100644 index 0000000000..f4b2ec6993 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Spark @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 7 +xmin: -0.014160156250000 +xmax: 1.014160156250000 +ymin: -0.261108398437500 +ymax: 0.252685546875000 +iter: 42.944999694824219 +cx: -1.386999964714050 +cy: -0.257999986410141 +redstretch: 124.000000000000000 +greenstretch: 112.000000000000000 +bluestretch: 60.000000000000000 +redmode: 0 +greenmode: 2 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 1 +colormode: 1 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Suns b/plug-ins/FractalExplorer/fractalexplorer-examples/Suns new file mode 100644 index 0000000000..683a147c05 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Suns @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 1 +xmin: -0.573436737060547 +xmax: -0.399868011474609 +ymin: -0.177640914916992 +ymax: -0.024647712707520 +iter: 607.361999511718750 +cx: -0.723999977111816 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 0 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Tentacles b/plug-ins/FractalExplorer/fractalexplorer-examples/Tentacles new file mode 100644 index 0000000000..19402f4dc3 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Tentacles @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 6 +xmin: -0.430790066719055 +xmax: -0.421469658613205 +ymin: 0.017559077590704 +ymax: 0.025114785879850 +iter: 67.485000610351562 +cx: -0.086000002920628 +cy: -0.012000000104308 +redstretch: 128.000000000000000 +greenstretch: 37.000000000000000 +bluestretch: 93.000000000000000 +redmode: 2 +greenmode: 2 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/The Green Place b/plug-ins/FractalExplorer/fractalexplorer-examples/The Green Place new file mode 100644 index 0000000000..8504364f4b --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/The Green Place @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 2 +xmin: 0.064453125000000 +xmax: 0.950683593750000 +ymin: -0.389648437500000 +ymax: 0.476440429687500 +iter: 50.000000000000000 +cx: -1.067000031471252 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 110.000000000000000 +bluestretch: 2.000000000000000 +redmode: 0 +greenmode: 1 +bluemode: 1 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Wave b/plug-ins/FractalExplorer/fractalexplorer-examples/Wave new file mode 100644 index 0000000000..e9deae072d --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Wave @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 2 +xmin: -0.937500000000000 +xmax: 1.125000000000000 +ymin: -0.609375000000000 +ymax: 0.609375000000000 +iter: 50.000000000000000 +cx: -1.042999982833862 +cy: -0.037000000476837 +redstretch: 128.000000000000000 +greenstretch: 22.000000000000000 +bluestretch: 101.000000000000000 +redmode: 1 +greenmode: 1 +bluemode: 0 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Wood b/plug-ins/FractalExplorer/fractalexplorer-examples/Wood new file mode 100644 index 0000000000..ffdd12078f --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Wood @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 4 +xmin: -1.287102937698364 +xmax: -1.287102580070496 +ymin: 0.099825143814087 +ymax: 0.099862203001976 +iter: 50.000000000000000 +cx: -0.750000000000000 +cy: -0.200000002980232 +redstretch: 128.000000000000000 +greenstretch: 109.905998229980469 +bluestretch: 2.009999990463257 +redmode: 1 +greenmode: 0 +bluemode: 0 +redinvert: 1 +greeninvert: 1 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/fractalexplorer-examples/Zooming Circle b/plug-ins/FractalExplorer/fractalexplorer-examples/Zooming Circle new file mode 100644 index 0000000000..75a704daf3 --- /dev/null +++ b/plug-ins/FractalExplorer/fractalexplorer-examples/Zooming Circle @@ -0,0 +1,26 @@ +Fractal Explorer Plug-In Version 2 - (c) 1997 +#********************************************************************** +# This is a data file for the Fractal Explorer plug-in for the GIMP * +# Get the plug-in at http://www.mygale.org/~cotting * +#********************************************************************** +fractaltype: 3 +xmin: 0.187500000000000 +xmax: 0.984375000000000 +ymin: 0.843750000000000 +ymax: 1.734375000000000 +iter: 50.000000000000000 +cx: 0.773000001907349 +cy: -0.723999977111816 +redstretch: 128.000000000000000 +greenstretch: 128.000000000000000 +bluestretch: 128.000000000000000 +redmode: 2 +greenmode: 0 +bluemode: 1 +redinvert: 0 +greeninvert: 0 +blueinvert: 0 +colormode: 0 +#********************************************************************** + +#********************************************************************** diff --git a/plug-ins/FractalExplorer/logo.h b/plug-ins/FractalExplorer/logo.h new file mode 100644 index 0000000000..cb94ec445f --- /dev/null +++ b/plug-ins/FractalExplorer/logo.h @@ -0,0 +1,788 @@ +/* GIMP header image file format (Indexed): //logo.h */ + +static unsigned int logo_width = 200; +static unsigned int logo_height = 72; + +/* Call this macro repeatedly. After each use, the pixel data can be extracted */ + +#define HEADER_PIXEL(data,pixel) \ + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; + +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/FractalExplorer/pix_data.h b/plug-ins/FractalExplorer/pix_data.h new file mode 100644 index 0000000000..4b459e0fa0 --- /dev/null +++ b/plug-ins/FractalExplorer/pix_data.h @@ -0,0 +1,154 @@ +/* XPM */ +static char * mini_cross_xpm[] = { +"16 14 4 1", +" c None s None", +". c red", +"X c gray50", +"o c black", +" ", +" . ", +" ..X ... ", +" ..X ..... ", +" .......oo ", +" .....o ", +" ....o ", +" ...... ", +" ..o ... ", +" ..o ... ", +" .o ..X ", +" .o .o ", +" o o ", +" "}; + +/* XPM */ +static char * greendot_xpm[] = { +"18 18 21 1", +" c None", +". c #FFFFFBEEFFFF", +"X c #F7DEF7DEF7DE", +"o c #F7DEF3CEF7DE", +"O c #E79DE79DEFBE", +"+ c #D75CDB6CDF7D", +"@ c #CF3CD75CDF7D", +"# c #D75CDF7DE79D", +"$ c #B6DAC30BC71B", +"% c #9E79AEBAB6DA", +"& c #8E38A289AEBA", +"* c #EFBEF3CEF7DE", +"= c #F7DEFBEEFFFF", +"- c #86179658A699", +"; c #514479E78E38", +": c #492471C68617", +"> c #DF7DE38DE79D", +", c #9658AAAAB6DA", +"< c #30C25D7571C6", +"1 c #2081596569A6", +"2 c #1861555569A6", +" ", +" ", +" ", +" ", +" .XXX. ", +" .oO+@+Oo. ", +" .o#$%&%$#*. ", +" =O$-;:;-$>= ", +" X+,;<1<;,+X ", +" o@&:121:&@o ", +" X+,;<1<;,+X ", +" =O$-;:;-$>= ", +" .*#$,&,$#*. ", +" .oO+@+Oo. ", +" .=XoX=. ", +" ", +" ", +" "}; + + +/* XPM */ +static char * bluedot_xpm[] = { +"18 18 20 1", +" c None", +". c #FFFFFBEEFFFF", +"X c #F7DEF7DEF7DE", +"o c #F7DEF3CEF7DE", +"O c #E79DE38DEFBE", +"+ c #D75CD75CDF7D", +"@ c #D75CCF3CDF7D", +"# c #DF7DD75CE79D", +"$ c #BEFBB6DACF3C", +"% c #A6999A69B6DA", +"& c #96588E38AEBA", +"* c #F7DEEFBEF7DE", +"= c #F7DEF7DEFFFF", +"- c #8E388207A699", +"; c #618559658E38", +": c #596549248617", +"> c #E79DE38DE79D", +", c #410330C271C6", +"< c #38E3249271C6", +"1 c #30C2186169A6", +" ", +" ", +" ", +" ", +" .XoX. ", +" .oO+@+Oo. ", +" .o#$%&%$#*. ", +" =O$-;:;-$>= ", +" o+%;,<,;%+o ", +" o@&:<1<:&@o ", +" o+%;,<,;%+o ", +" =O$-;:;-$>= ", +" .*#$%&%$#*. ", +" .oO+@+Oo. ", +" .=ooo=. ", +" ", +" ", +" "}; + + +/* XPM */ +static char * Floppy6_xpm[] = { +"18 18 24 1", +" c None", +". c #861782078617", +"X c #5965596571C6", +"o c #618565955965", +"O c #596559659E79", +"+ c #0000000079E7", +"@ c #0820082071C6", +"# c #9E799E790000", +"$ c #FFFFFFFF0000", +"% c #186118614103", +"& c #965896589E79", +"* c #9E799E795965", +"= c #000000006185", +"- c #9E799E799E79", +"; c #FFFFFFFFFFFF", +": c #000000000000", +"> c #71C675D69658", +", c #BEFBBEFBBEFB", +"< c #B6DAB2CABEFB", +"1 c #1040145171C6", +"2 c #28A228A28617", +"3 c #79E77DF78E38", +"4 c #A699A289A699", +"5 c #38E33CF379E7", +" ", +" .XXoooooooooXO ", +" +@#$$$$$$$$$%+O ", +" &++*$$$$$$$$$%+O ", +" &+=-;;;;;;;;;%+O ", +" &==-;::;:;:;;%+O ", +" &++-;;;;;;;;;%+O ", +" &++-;:;:::;:;%+O ", +" &++-;;;;;;;;;%+O ", +" &+=>,,<,,,,,,1+O ", +" &++==========++O ", +" &+++22222222+++O ", +" &++;11>-333.+++O ", +" &++;++>43333+++O ", +" &++5++>4...3=++O ", +" 31+++======+++O ", +" &&&&&&&&&&&& ", +" "}; diff --git a/plug-ins/Julia/Julia.c b/plug-ins/Julia/Julia.c index 92ebfa3305..98de36b69e 100644 --- a/plug-ins/Julia/Julia.c +++ b/plug-ins/Julia/Julia.c @@ -1493,7 +1493,7 @@ Julia_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { diff --git a/plug-ins/Julia/julia.c b/plug-ins/Julia/julia.c deleted file mode 100644 index 9d5e80a368..0000000000 --- a/plug-ins/Julia/julia.c +++ /dev/null @@ -1,1411 +0,0 @@ -/********************************************************************** - * Julia Chaos Fractal Explorer Plug-in (Version 1.00) - * Daniel Cotting (cotting@mygale.org) - ********************************************************************** - * Official Homepage: http://www.mygale.org/~cotting - ********************************************************************** - * Homepages under construction: http://www.chez.com/cotting - * http://www.cyberbrain.com/cotting - * You won't be able to see anything yet, as I don't really have the - * time to build up these two sites :-( - * Have a look at www.mygale.org/~cotting instead! - ********************************************************************** - */ - -/* The GIMP -- an image manipulation program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include -#include "gtk/gtk.h" -#include "libgimp/gimp.h" -#include "../include/logo.h" - -/***** Macros *****/ - -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) -#define MAX(a, b) (((a) > (b)) ? (a) : (b)) - - -/***** Magic numbers *****/ - -#define PREVIEW_SIZE 128 -#define SCALE_WIDTH 200 -#define ENTRY_WIDTH 60 - -#define SINUS 0 -#define COSINUS 1 -#define NONE 2 - -/***** Types *****/ -typedef struct { - gdouble xmin; - gdouble xmax; - gdouble ymin; - gdouble ymax; - gdouble iter; - gdouble cx; - gdouble cy; - gint colormode; - gdouble redstretch; - gdouble greenstretch; - gdouble bluestretch; - gint redmode; - gint greenmode; - gint bluemode; -} Julia_vals_t; - -typedef struct { - GtkWidget *preview; - guchar *image; - guchar *wimage; - gint run; -} Julia_interface_t; - - - -/* Declare local functions. */ - -static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); - -static void Julia (GDrawable *drawable); -static void Julia_render_row (const guchar *src_row, - guchar *dest_row, - gint row, - gint row_width,gint bytes); -static void Julia_get_pixel(int x, int y, guchar *pixel); -void transform (short int *, short int *, short int *,double, double, double); - - -static void build_preview_source_image(void); - -static gint Julia_dialog(void); -static void dialog_update_preview(void); -static void dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, - int left, int right); -static void dialog_scale_update(GtkAdjustment *adjustment, gdouble *value); -static void dialog_entry_update(GtkWidget *widget, gdouble *value); -static void dialog_close_callback(GtkWidget *widget, gpointer data); -static void dialog_ok_callback(GtkWidget *widget, gpointer data); -/* static void dialog_reset_callback(GtkWidget *widget, gpointer data); */ -static void dialog_cancel_callback(GtkWidget *widget, gpointer data); -static void Julia_toggle_update (GtkWidget *widget, - gpointer data); -static float xmin=-2.0; -static float xmax=2.0; - -static float ymin=-2.0; -static float ymax=2.0; -static float cx=-1.0; -static float cy=-0.2; -static float xbild; -static float ybild; -static float xdiff; -static float ydiff; - -/***** Variables *****/ - -GPlugInInfo PLUG_IN_INFO = -{ - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ -}; - -static Julia_interface_t wint = { - NULL, /* preview */ - NULL, /* image */ - NULL, /* wimage */ - FALSE /* run */ -}; /* wint */ - -static Julia_vals_t wvals = { - -2.0,2.0,-2.0,2.0,50.0,-1.0,-0.2,0,128,128,128,1,1,0, -}; /* wvals */ - -static GDrawable *drawable; -static gint tile_width, tile_height; -static gint img_width, img_height, img_bpp; -static gint sel_x1, sel_y1, sel_x2, sel_y2; -static gint sel_width, sel_height; -static gint preview_width, preview_height; -static GTile *the_tile = NULL; -static double cen_x, cen_y; -static double scale_x, scale_y; - -gint do_redsinus; -gint do_redcosinus; -gint do_rednone; - -gint do_greensinus; -gint do_greencosinus; -gint do_greennone; - -gint do_bluesinus; -gint do_bluecosinus; -gint do_bluenone; - -gint do_colormode1; -gint do_colormode2; - -static GParam *ExternalParam=NULL; -static int ExternalInt; - - - -GtkWidget * Julia_logo_dialog(void); - -GtkWidget *maindlg; -GtkWidget *logodlg; - - - - -MAIN (); - -static void -query () -{ - static GParamDef args[] = - { - { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, - { PARAM_IMAGE, "image", "Input image" }, - { PARAM_DRAWABLE, "drawable", "Input drawable" }, - { PARAM_FLOAT, "xmin", "xmin fractal image delimiter" }, - { PARAM_FLOAT, "xmax", "xmax fractal image delimiter" }, - { PARAM_FLOAT, "ymin", "ymin fractal image delimiter" }, - { PARAM_FLOAT, "ymax", "ymax fractal image delimiter" }, - { PARAM_FLOAT, "iter", "Iteration value" }, - { PARAM_FLOAT, "cx", "cx value" }, - { PARAM_FLOAT, "cy", "cy value" }, - { PARAM_INT8, "colormode", "0: Apply colormap as specified by the parameters below; 1: Apply active gradient to final image"}, - { PARAM_FLOAT, "redstretch", "Red stretching factor" }, - { PARAM_FLOAT, "greenstretch","Green stretching factor" }, - { PARAM_FLOAT, "bluestretch", "Blue stretching factor" }, - { PARAM_INT8, "redmode", "Red application mode (0:SIN;1:COS;2:NONE)" }, - { PARAM_INT8, "greenmode", "Green application mode (0:SIN;1:COS;2:NONE)" }, - { PARAM_INT8, "bluemode", "Blue application mode (0:SIN;1:COS;2:NONE)" }, - }; - static GParamDef *return_vals = NULL; - static int nargs = sizeof (args) / sizeof (args[0]); - static int nreturn_vals = 0; - - gimp_install_procedure ("plug_in_julia", - "Julia Chaos Fractal Explorer Plug-In", - "Fills the active painting area with a Julia fractal.", - "Daniel Cotting (cotting@mygale.org, www.mygale.org/~cotting)", - "Daniel Cotting (cotting@mygale.org, www.mygale.org/~cotting)", - "1th May 1997", - "/Filters/Render/Julia Fractal", - "RGB*", - PROC_PLUG_IN, - nargs, nreturn_vals, - args, return_vals); -} - - -static void -run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals) -{ - static GParam values[1]; - /* GDrawable *drawable; */ - gint32 image_ID; - GRunModeType run_mode; - double xhsiz, yhsiz; - int pwidth, pheight; - GStatusType status = STATUS_SUCCESS; - - - run_mode = param[0].data.d_int32; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = status; - - *nreturn_vals = 1; - *return_vals = values; - - - - /* Get the specified drawable */ - drawable = gimp_drawable_get (param[2].data.d_drawable); - image_ID = param[1].data.d_image; - tile_width = gimp_tile_width(); - tile_height = gimp_tile_height(); - - img_width = gimp_drawable_width(drawable->id); - img_height = gimp_drawable_height(drawable->id); - img_bpp = gimp_drawable_bpp(drawable->id); - - gimp_drawable_mask_bounds(drawable->id, &sel_x1, &sel_y1, &sel_x2, &sel_y2); - - sel_width = sel_x2 - sel_x1; - sel_height = sel_y2 - sel_y1; - - cen_x = (double) (sel_x2 - 1 + sel_x1) / 2.0; - cen_y = (double) (sel_y2 - 1 + sel_y1) / 2.0; - - xhsiz = (double) (sel_width - 1) / 2.0; - yhsiz = (double) (sel_height - 1) / 2.0; - - if (xhsiz < yhsiz) { - scale_x = yhsiz / xhsiz; - scale_y = 1.0; - } else if (xhsiz > yhsiz) { - scale_x = 1.0; - scale_y = xhsiz / yhsiz; - } else { - scale_x = 1.0; - scale_y = 1.0; - } /* else */ - - /* Calculate preview size */ - if (sel_width > sel_height) { - pwidth = MIN(sel_width, PREVIEW_SIZE); - pheight = sel_height * pwidth / sel_width; - } else { - pheight = MIN(sel_height, PREVIEW_SIZE); - pwidth = sel_width * pheight / sel_height; - } /* else */ - - preview_width = MAX(pwidth, 2); /* Min size is 2 */ - preview_height = MAX(pheight, 2); - - /* See how we will run */ - switch (run_mode) { - case RUN_INTERACTIVE: - /* Possibly retrieve data */ - - gimp_get_data("plug_in_julia", &wvals); - - /* Get information from the dialog */ - - if (!Julia_dialog()) - return; - - break; - - case RUN_NONINTERACTIVE: - /* Make sure all the arguments are present */ - - if (nparams != 17) - status = STATUS_CALLING_ERROR; - - if (status == STATUS_SUCCESS) - - wvals.xmin = param[3].data.d_float; - wvals.xmax = param[4].data.d_float; - wvals.ymin = param[5].data.d_float; - wvals.ymax = param[6].data.d_float; - wvals.iter = param[7].data.d_float; - wvals.cx = param[8].data.d_float; - wvals.cy = param[9].data.d_float; - wvals.colormode = param[10].data.d_int8; - wvals.redstretch = param[11].data.d_float; - wvals.greenstretch = param[12].data.d_float; - wvals.bluestretch = param[13].data.d_float; - wvals.redmode = param[14].data.d_int8; - wvals.greenmode = param[15].data.d_int8; - wvals.bluemode = param[16].data.d_int8; - - break; - - case RUN_WITH_LAST_VALS: - /* Possibly retrieve data */ - - gimp_get_data("plug_in_julia", &wvals); - break; - - default: - break; - } /* switch */ - - - if (status == STATUS_SUCCESS) - { - /* Make sure that the drawable is indexed or RGB color */ - if (gimp_drawable_color (drawable->id)) - { - gimp_progress_init ("Rendering Julia Fractal..."); - - /* Set the tile cache size */ - - gimp_tile_cache_ntiles(2*(drawable->width / gimp_tile_width()+1)); - - /* Run! */ - - -/* gimp_tile_cache_ntiles (2 * (drawable->width / gimp_tile_width () - + 1));*/ - Julia (drawable); - if (wvals.colormode==1) ExternalParam = gimp_run_procedure("plug_in_gradmap",&ExternalInt, - PARAM_INT32, run_mode, - PARAM_IMAGE, image_ID, - PARAM_DRAWABLE, drawable->id, - PARAM_END); - - if (run_mode != RUN_NONINTERACTIVE) - gimp_displays_flush(); - - /* Store data */ - - if (run_mode == RUN_INTERACTIVE) - gimp_set_data("plug_in_julia", &wvals, sizeof(Julia_vals_t)); - } - else - { - /* gimp_message("This filter only applies on RGB-images"); */ - status = STATUS_EXECUTION_ERROR; - } - } - - values[0].data.d_status = status; - - gimp_drawable_detach (drawable); -} - -/*****/ - -static void -Julia_get_pixel(int x, int y, guchar *pixel) -{ - static gint row = -1; - static gint col = -1; - - gint newcol, newrow; - gint newcoloff, newrowoff; - guchar *p; - int i; - - if ((x < 0) || (x >= img_width) || (y < 0) || (y >= img_height)) { - pixel[0] = 0; - pixel[1] = 0; - pixel[2] = 0; - pixel[3] = 0; - - return; - } /* if */ - - newcol = x / tile_width; /* The compiler should optimize this */ - newcoloff = x % tile_width; - newrow = y / tile_height; - newrowoff = y % tile_height; - - if ((col != newcol) || (row != newrow) || (the_tile == NULL)) { - - if (the_tile != NULL) - gimp_tile_unref(the_tile, FALSE); - - the_tile = gimp_drawable_get_tile(drawable, FALSE, newrow, newcol); - gimp_tile_ref(the_tile); - col = newcol; - row = newrow; - } /* if */ - p = the_tile->data + the_tile->bpp * (the_tile->ewidth * newrowoff + newcoloff); - for (i = img_bpp; i; i--) - *pixel++ = *p++; - -} /* Julia_get_pixel */ - - - -static void -Julia_render_row (const guchar *src_row, - guchar *dest_row, - gint row, - gint row_width, - gint bytes) -{ - gint col, bytenum; - double redstretch, greenstretch, bluestretch; - for (col = 0; col < row_width ; col++) - { - float a,tb,x,y,xx; - int zaehler,color,r,g,b; - float pi=3.1415926; - cx=wvals.cx; - cy=wvals.cy; - redstretch = wvals.redstretch; - greenstretch = wvals.greenstretch; - bluestretch = wvals.bluestretch; - a=xmin+col*xdiff; - tb=ymin+row*ydiff; - x=a; - y=tb; - zaehler=0; - for (zaehler=0; (zaehler <= wvals.iter) && ((x*x+y*y)<4); zaehler++) - { - xx=x*x-y*y+cx; - y=2*x*y+cy; - x=xx; - } - color=zaehler*256/wvals.iter; - r=g=b=color; - switch (wvals.redmode) - { - case SINUS: - r = (int) redstretch*(1.0+sin((r/128.0-1)*pi)); - break; - case COSINUS: - r = (int) redstretch*(1.0+cos((r/128.0-1)*pi)); - break; - default: - break; - } - - switch (wvals.greenmode) - { - case SINUS: - g = (int) greenstretch*(1.0+sin((g/128.0-1)*pi)); - break; - case COSINUS: - g = (int) greenstretch*(1.0+cos((g/128.0-1)*pi)); - break; - default: - break; - } - switch (wvals.bluemode) - { - case SINUS: - b = (int) bluestretch*(1.0+sin((b/128.0-1)*pi)); - break; - case COSINUS: - b = (int) bluestretch*(1.0+cos((b/128.0-1)*pi)); - break; - default: - break; - } - - dest_row[col*bytes] = (int)r; - dest_row[col*bytes +1] = (int)g; - dest_row[col*bytes +2] = (int)b; - - if (bytes>3) - for (bytenum = 3; bytenumid, &x1, &y1, &x2, &y2); - - /* Get the size of the input image. (This will/must be the same - * as the size of the output image. - */ - width = drawable->width; - height = drawable->height; - bytes = drawable->bpp; - - /* allocate row buffers */ - src_row = (guchar *) malloc ((x2 - x1) * bytes); - dest_row = (guchar *) malloc ((x2 - x1) * bytes); - - - /* initialize the pixel regions */ - gimp_pixel_rgn_init (&srcPR, drawable, 0, 0, width, height, FALSE, FALSE); - gimp_pixel_rgn_init (&destPR, drawable, 0, 0, width, height, TRUE, TRUE); - - xbild=width; - ybild=height; - xdiff=(xmax-xmin)/xbild; - ydiff=(ymax-ymin)/ybild; - - for (row = y1; row < y2; row++) - - { - gimp_pixel_rgn_get_row (&srcPR, src_row, x1, row, (x2 - x1)); - - Julia_render_row (src_row, - dest_row, - row, - (x2 - x1), - bytes); - - /* store the dest */ - gimp_pixel_rgn_set_row (&destPR, dest_row, x1, row, (x2 - x1)); - - if ((row % 10) == 0) - gimp_progress_update ((double) row / (double) (y2 - y1)); - } - - /* update the processed region */ - gimp_drawable_flush (drawable); - gimp_drawable_merge_shadow (drawable->id, TRUE); - gimp_drawable_update (drawable->id, x1, y1, (x2 - x1), (y2 - y1)); - - free (src_row); - free (dest_row); -} - -/*****/ - -static void -build_preview_source_image(void) -{ - double left, right, bottom, top; - double px, py; - double dx, dy; - int x, y; - guchar *p; - guchar pixel[4]; - - wint.image = g_malloc(preview_width * preview_height * 3 * sizeof(guchar)); - wint.wimage = g_malloc(preview_width * preview_height * 3 * sizeof(guchar)); - - left = sel_x1; - right = sel_x2 - 1; - bottom = sel_y2 - 1; - top = sel_y1; - - dx = (right - left) / (preview_width - 1); - dy = (bottom - top) / (preview_height - 1); - - py = top; - - p = wint.image; - - for (y = 0; y < preview_height; y++) { - px = left; - for (x = 0; x < preview_width; x++) { - Julia_get_pixel((int) px, (int) py, pixel); - - *p++ = pixel[0]; - *p++ = pixel[1]; - *p++ = pixel[2]; - - px += dx; - } /* for */ - - py += dy; - } /* for */ -} /* build_preview_source_image */ - - -/*****/ - -static gint -Julia_dialog(void) -{ - GtkWidget *dialog; - GtkWidget *top_table; - GtkWidget *top_table2; - GtkWidget *frame; - GtkWidget *frame2; - GtkWidget *frame3; - GtkWidget *toggle; - GtkWidget *toggle_vbox; - GtkWidget *toggle_vbox2; - GtkWidget *toggle_vbox3; - GtkWidget *table, *table6; - GtkWidget *button; - gint argc; - gchar **argv; - guchar *color_cube; - GSList *redmode_group = NULL; - GSList *greenmode_group = NULL; - GSList *bluemode_group = NULL; - GSList *colormode_group = NULL; - - do_redsinus = (wvals.redmode == SINUS); - do_redcosinus = (wvals.redmode == COSINUS); - do_rednone = (wvals.redmode == NONE); - do_greensinus = (wvals.greenmode == SINUS); - do_greencosinus = (wvals.greenmode == COSINUS); - do_greennone = (wvals.greenmode == NONE); - do_bluesinus = (wvals.bluemode == SINUS); - do_bluecosinus = (wvals.bluemode == COSINUS); - do_bluenone = (wvals.bluemode == NONE); - do_colormode1 = (wvals.colormode == 0); - do_colormode2 = (wvals.colormode == 1); - - - - argc = 1; - argv = g_new(gchar *, 1); - argv[0] = g_strdup("Julia"); - - gtk_init(&argc, &argv); - - gtk_preview_set_gamma(gimp_gamma()); - gtk_preview_set_install_cmap(gimp_install_cmap()); - color_cube = gimp_color_cube(); - gtk_preview_set_color_cube(color_cube[0], color_cube[1], color_cube[2], color_cube[3]); - - gtk_widget_set_default_visual(gtk_preview_get_visual()); - gtk_widget_set_default_colormap(gtk_preview_get_cmap()); - - build_preview_source_image(); - dialog = maindlg = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(dialog), "Julia Fractal Explorer (cotting@mygale.org)"); - gtk_window_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); - gtk_container_border_width(GTK_CONTAINER(dialog), 0); - gtk_signal_connect(GTK_OBJECT(dialog), "destroy", - (GtkSignalFunc) dialog_close_callback, - NULL); - - top_table = gtk_table_new(4, 4, FALSE); - gtk_container_border_width(GTK_CONTAINER(top_table), 0); - gtk_table_set_row_spacings(GTK_TABLE(top_table), 0); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), top_table, FALSE, FALSE, 0); - gtk_widget_show(top_table); - - /* Preview */ - - frame = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); - gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 0, 1,0, 0, 0, 0); - gtk_widget_show(frame); - - wint.preview = gtk_preview_new(GTK_PREVIEW_COLOR); - gtk_preview_size(GTK_PREVIEW(wint.preview), preview_width, preview_height); - gtk_container_add(GTK_CONTAINER(frame), wint.preview); - gtk_widget_show(wint.preview); - - /* Controls */ - - frame = gtk_frame_new ("Fractal options:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame, 1, 4, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show(frame); - - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - - table = gtk_table_new(7, 7, FALSE); - gtk_container_border_width(GTK_CONTAINER(table), 5); - gtk_table_set_row_spacings(GTK_TABLE(table), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox),table, FALSE, FALSE, 0); - gtk_widget_show(table); - dialog_create_value("XMIN", GTK_TABLE(table), 0, &wvals.xmin,-10,10); - dialog_create_value("XMAX", GTK_TABLE(table), 1, &wvals.xmax,-10,10); - dialog_create_value("YMIN", GTK_TABLE(table), 2, &wvals.ymin,-10,10); - dialog_create_value("YMAX", GTK_TABLE(table), 3, &wvals.ymax,-10,10); - dialog_create_value("ITER", GTK_TABLE(table), 4, &wvals.iter,0,1000); - dialog_create_value("CX", GTK_TABLE(table), 5, &wvals.cx,-5,5); - dialog_create_value("CY", GTK_TABLE(table), 6, &wvals.cy,-5,5); - gtk_widget_show(table); - gtk_widget_show(toggle_vbox); - gtk_widget_show(frame); - - - frame2 = gtk_frame_new ("Color options:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame2, 0, 4, 1, 3, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show(frame2); - - toggle_vbox2 = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox2), 0); - gtk_container_add (GTK_CONTAINER (frame2), toggle_vbox2); - gtk_widget_show(toggle_vbox2); - - top_table2 = gtk_table_new(5, 5, FALSE); - gtk_container_border_width(GTK_CONTAINER(top_table2), 10); - gtk_table_set_row_spacings(GTK_TABLE(top_table2), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox2), top_table2, FALSE, FALSE, 0); - gtk_widget_show(top_table2); - - - frame = gtk_frame_new ("Color density:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table2), frame, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show(frame); - - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show(toggle_vbox); - - table6 = gtk_table_new(3, 3, FALSE); - gtk_container_border_width(GTK_CONTAINER(table6), 0); - gtk_table_set_row_spacings(GTK_TABLE(table6), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox), table6, FALSE, FALSE, 0); - gtk_widget_show(table6); - dialog_create_value("Red", GTK_TABLE(table6), 0, &wvals.redstretch,0,128); - dialog_create_value("Green", GTK_TABLE(table6), 1, &wvals.greenstretch,0,128); - dialog_create_value("Blue", GTK_TABLE(table6), 2, &wvals.bluestretch,0,128); - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - - frame3 = gtk_frame_new ("Color function:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame3), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table2), frame3, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame3); - - toggle_vbox3 = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox3), 0); - gtk_container_add (GTK_CONTAINER (frame3), toggle_vbox3); - gtk_widget_show (toggle_vbox3); - - table6 = gtk_table_new(4, 4, FALSE); - gtk_container_border_width(GTK_CONTAINER(table6), 0); - gtk_table_set_row_spacings(GTK_TABLE(table6), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox3), table6, FALSE, FALSE, 0); - gtk_widget_show(table6); - - frame = gtk_frame_new ("Red:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (table6), frame, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame); - - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show (toggle_vbox); - /* <------------------------------- */ - toggle = gtk_radio_button_new_with_label (redmode_group, "Sine"); - redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_redsinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_redsinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (redmode_group, "Cosine"); - redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_redcosinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_redcosinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (redmode_group, "None"); - redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_rednone); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_rednone); - gtk_widget_show (toggle); - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - - -/* Greenmode toggle box */ - frame = gtk_frame_new ("Green:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (table6), frame, 1, 2, 0,1 , GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame); - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show (toggle_vbox); - - /* <----- */ - toggle = gtk_radio_button_new_with_label (greenmode_group, "Sine"); - greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_greensinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greensinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (greenmode_group, "Cosine"); - greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_greencosinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greencosinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (greenmode_group, "None"); - greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_greennone); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greennone); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - - -/* Bluemode toggle box */ - frame = gtk_frame_new ("Blue:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (table6), frame, 2, 3,0,1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame); - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show (toggle_vbox); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "Sine"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_bluesinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluesinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "Cosine"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_bluecosinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluecosinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "None"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_bluenone); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluenone); - gtk_widget_show (toggle); - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - gtk_widget_show (toggle_vbox3); - gtk_widget_show (frame3); - -/* Colormode toggle box */ - frame = gtk_frame_new ("Color Mode:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table2), frame, 0, 1, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - - toggle = gtk_radio_button_new_with_label (colormode_group, "As specified above"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_colormode1); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_colormode1); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "Apply active gradient to final image"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) Julia_toggle_update, - &do_colormode2); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_colormode2); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - /* gtk_widget_show (table); */ - - - /* Buttons */ - - -gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5); - - button = gtk_button_new_with_label("OK"); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc) dialog_ok_callback, - dialog); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_grab_default(button); - gtk_widget_show(button); - - button = gtk_button_new_with_label("Cancel"); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc) dialog_cancel_callback, - dialog); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_show(button); - - button = gtk_button_new_with_label("About..."); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)Julia_about_callback,button); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), - button, TRUE, TRUE, 0); - gtk_widget_show(button); - -/* - button = gtk_button_new_with_label("Reset"); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc) dialog_reset_callback, - dialog); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_show(button); -*/ - /* Done */ - - gtk_widget_show(dialog); - dialog_update_preview(); - - gtk_main(); - gdk_flush(); - if (the_tile != NULL) { - gimp_tile_unref(the_tile, FALSE); - the_tile = NULL; - } /* if */ - - g_free(wint.image); - g_free(wint.wimage); - - return wint.run; -} /* Julia_dialog */ - - -/*****/ - -static void -dialog_update_preview(void) -{ - double left, right, bottom, top; - double dx, dy; - int px, py; - int x, y; - double redstretch, greenstretch, bluestretch; - int r,g,b; - double scale_x, scale_y; - guchar *p_ul, *i, *p; - float ta,tb,tx,ty,txx; - int zaehler,color; - float pi=3.1415926; - - left = sel_x1; - right = sel_x2 - 1; - bottom = sel_y2 - 1; - top = sel_y1; - dx = (right - left) / (preview_width - 1); - dy = (bottom - top) / (preview_height - 1); - - xmin = wvals.xmin; - xmax = wvals.xmax; - ymin = wvals.ymin; - ymax = wvals.ymax; - cx=wvals.cx; - cy=wvals.cy; - - redstretch = wvals.redstretch; - greenstretch = wvals.greenstretch; - bluestretch = wvals.bluestretch; - xbild=preview_width; - ybild=preview_height; - xdiff=(xmax-xmin)/xbild; - ydiff=(ymax-ymin)/ybild; - - scale_x = (double) (preview_width - 1) / (right - left); - scale_y = (double) (preview_height - 1) / (bottom - top); - - py = 0; - - p_ul = wint.wimage; - - - - for (y = 0; y < preview_height; y++) { - px = 0; - - for (x = 0; x < preview_width; x++) { - i = wint.image + 3 * (preview_width * py + px); - r = *i++; - g = *i++; - b = *i; - ta=(float)xmin+(float)x*xdiff; - tb=(float)ymin+(float)y*ydiff; - tx=ta; - ty=tb; - zaehler=0; - for (zaehler=0; (zaehler <= wvals.iter) && ((tx*tx+ty*ty)<4); zaehler++) - { - txx=tx*tx-ty*ty+cx; - ty=2.0*tx*ty+cy; - tx=txx; - } - r=g=b=color=zaehler*256/wvals.iter; - switch (wvals.redmode) - { - case SINUS: - r = (int) redstretch*(1.0+sin((r/128.0-1)*pi)); - break; - case COSINUS: - r = (int) redstretch*(1.0+cos((r/128.0-1)*pi)); - break; - default: - break; - } - - switch (wvals.greenmode) - { - case SINUS: - g = (int) greenstretch*(1.0+sin((g/128.0-1)*pi)); - break; - case COSINUS: - g = (int) greenstretch*(1.0+cos((g/128.0-1)*pi)); - break; - default: - break; - } - switch (wvals.bluemode) - { - case SINUS: - b = (int) bluestretch*(1.0+sin((b/128.0-1)*pi)); - break; - case COSINUS: - b = (int) bluestretch*(1.0+cos((b/128.0-1)*pi)); - break; - default: - break; - } - - - p_ul[0] = r; - p_ul[1] = g; - p_ul[2] = b; - p_ul += 3; - px += 1; /* dx; */ - } /* for */ - py +=1; /* dy; */ - } /* for */ - - p = wint.wimage; - - for (y = 0; y < preview_height; y++) { - gtk_preview_draw_row(GTK_PREVIEW(wint.preview), p, 0, y, preview_width); - p += preview_width * 3; - } /* for */ - gtk_widget_draw(wint.preview, NULL); - gdk_flush(); -} /* dialog_update_preview */ - - -/*****/ - -static void -dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, - int left, int right) -{ - GtkWidget *label; - GtkWidget *scale; - GtkWidget *entry; - GtkObject *scale_data; - char buf[256]; - - label = gtk_label_new(title); - gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); - gtk_table_attach(table, label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 4, 0); - gtk_widget_show(label); - - - scale_data = gtk_adjustment_new(*value, left, right, - (right - left) / 20, - (right - left) / 20, - 0); - - gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", - (GtkSignalFunc) dialog_scale_update, - value); - - scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data)); - gtk_widget_set_usize(scale, SCALE_WIDTH, 0); - gtk_table_attach(table, scale, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE); - gtk_scale_set_digits(GTK_SCALE(scale), 3); - gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); - gtk_widget_show(scale); - - entry = gtk_entry_new(); - gtk_object_set_user_data(GTK_OBJECT(entry), scale_data); - gtk_object_set_user_data(scale_data, entry); - gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); - sprintf(buf, "%0.2f", *value); - gtk_entry_set_text(GTK_ENTRY(entry), buf); - gtk_signal_connect(GTK_OBJECT(entry), "changed", - (GtkSignalFunc) dialog_entry_update, - value); - gtk_table_attach(GTK_TABLE(table), entry, 2, 3, row, row + 1, 0,0,4, 0); - gtk_widget_show(entry); -} /* dialog_create_value */ - -/*****/ - -static void -dialog_scale_update(GtkAdjustment *adjustment, gdouble *value) -{ - GtkWidget *entry; - char buf[256]; - - if (*value != adjustment->value) { - *value = adjustment->value; - - entry = gtk_object_get_user_data(GTK_OBJECT(adjustment)); - sprintf(buf, "%0.2f", *value); - - gtk_signal_handler_block_by_data(GTK_OBJECT(entry), value); - gtk_entry_set_text(GTK_ENTRY(entry), buf); - gtk_signal_handler_unblock_by_data(GTK_OBJECT(entry), value); - - dialog_update_preview(); - } /* if */ -} /* dialog_scale_update */ -/*****/ - -static void -dialog_entry_update(GtkWidget *widget, gdouble *value) -{ - GtkAdjustment *adjustment; - gdouble new_value; - - new_value = atof(gtk_entry_get_text(GTK_ENTRY(widget))); - - if (*value != new_value) { - adjustment = gtk_object_get_user_data(GTK_OBJECT(widget)); - - if ((new_value >= adjustment->lower) && - (new_value <= adjustment->upper)) { - *value = new_value; - adjustment->value = new_value; - - gtk_signal_emit_by_name(GTK_OBJECT(adjustment), "value_changed"); - - dialog_update_preview(); - } /* if */ - } /* if */ -} /* dialog_entry_update */ - - -static void -dialog_close_callback(GtkWidget *widget, gpointer data) -{ - gtk_main_quit(); -} /* dialog_close_callback */ - - -/*****/ - -static void -dialog_ok_callback(GtkWidget *widget, gpointer data) -{ - wint.run = TRUE; - gtk_widget_destroy(GTK_WIDGET(data)); -} /* dialog_ok_callback */ - - -/*****/ -/* -static void -dialog_reset_callback(GtkWidget *widget, gpointer data) -{ -static Julia_vals_t wvals = { - -2,1,-1.5,1.5,100,0,128,128,128,0,0,0, -}; - gtk_widget_destroy(GTK_WIDGET(data)); - Julia_dialog(); -} -*/ - -/*****/ - -static void -dialog_cancel_callback(GtkWidget *widget, gpointer data) -{ - gtk_widget_destroy(GTK_WIDGET(data)); -} /* dialog_cancel_callback */ - - -static void -Julia_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; - if (do_redsinus) - wvals.redmode = SINUS; - else if (do_redcosinus) - wvals.redmode = COSINUS; - else if (do_rednone) - wvals.redmode = NONE; - - if (do_greensinus) - wvals.greenmode = SINUS; - else if (do_greencosinus) - wvals.greenmode = COSINUS; - else if (do_greennone) - wvals.greenmode = NONE; - - if (do_bluesinus) - wvals.bluemode = SINUS; - else if (do_bluecosinus) - wvals.bluemode = COSINUS; - else if (do_bluenone) - wvals.bluemode = NONE; - dialog_update_preview(); - - if (do_colormode1) - wvals.colormode = 0; - else if (do_colormode2) - wvals.colormode = 1; - dialog_update_preview(); - -} - -GtkWidget * -Julia_logo_dialog() -{ - GtkWidget *xdlg; - GtkWidget *xlabel; - GtkWidget *xbutton; - GtkWidget *xlogo_box; - GtkWidget *xpreview; - GtkWidget *xframe,*xframe2; - GtkWidget *xvbox; - GtkWidget *xhbox; - char *text; - gchar *temp,*temp2; - char *datapointer; - gint y,x; - xdlg = logodlg = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(xdlg), "About"); - gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_MOUSE); - gtk_signal_connect(GTK_OBJECT(xdlg), "destroy", - (GtkSignalFunc)dialog_close_callback, - NULL); - - xbutton = gtk_button_new_with_label("OK"); - GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(xbutton), "clicked", - (GtkSignalFunc)Julia_logo_ok_callback, - xdlg); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area), - xbutton, TRUE, TRUE, 0); - gtk_widget_grab_default(xbutton); - gtk_widget_show(xbutton); - - xframe = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN); - gtk_container_border_width(GTK_CONTAINER(xframe), 10); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0); - xvbox = gtk_vbox_new(FALSE, 5); - gtk_container_border_width(GTK_CONTAINER(xvbox), 10); - gtk_container_add(GTK_CONTAINER(xframe), xvbox); - - /* The logo frame & drawing area */ - xhbox = gtk_hbox_new (FALSE, 5); - gtk_box_pack_start (GTK_BOX (xvbox), xhbox, FALSE, TRUE, 0); - - xlogo_box = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (xhbox), xlogo_box, FALSE, FALSE, 0); - - xframe2 = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (xframe2), GTK_SHADOW_IN); - gtk_box_pack_start (GTK_BOX (xlogo_box), xframe2, FALSE, FALSE, 0); - - xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); - gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); - temp = g_malloc((logo_width+10)*3); - datapointer=header_data; - for (y = 0; y < logo_height; y++){ - temp2=temp; - for (x = 0; x< logo_width; x++) { - HEADER_PIXEL(datapointer,temp2); temp2+=3;} - gtk_preview_draw_row (GTK_PREVIEW (xpreview), - temp, - 0, y, logo_width); - } - g_free(temp); - gtk_container_add (GTK_CONTAINER (xframe2), xpreview); - gtk_widget_show (xpreview); - gtk_widget_show (xframe2); - gtk_widget_show (xlogo_box); - gtk_widget_show (xhbox); - - xhbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0); - text = "\nCotting Software Productions\n" - "Bahnhofstrasse 31\n" - "CH-3066 Stettlen (Switzerland)\n\n" - "cotting@mygale.org\n" - "http://www.mygale.org/~cotting\n\n" - "Julia Fractal Chaos Explorer Plug-In for the GIMP\n" - "Version 1.00\n"; - xlabel = gtk_label_new(text); - gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); - gtk_widget_show(xlabel); - - gtk_widget_show(xhbox); - - gtk_widget_show(xvbox); - gtk_widget_show(xframe); - gtk_widget_show(xdlg); - - gtk_main(); - gdk_flush(); - return xdlg; -} diff --git a/plug-ins/Julia/logo.h b/plug-ins/Julia/logo.h index 871a318a06..cb94ec445f 100644 --- a/plug-ins/Julia/logo.h +++ b/plug-ins/Julia/logo.h @@ -1,4 +1,4 @@ -/* GIMP header image file format (RGB-only): //logo.h */ +/* GIMP header image file format (Indexed): //logo.h */ static unsigned int logo_width = 200; static unsigned int logo_height = 72; @@ -6,9 +6,783 @@ static unsigned int logo_height = 72; /* Call this macro repeatedly. After each use, the pixel data can be extracted */ #define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/Makefile.am b/plug-ins/Makefile.am index cb7bdadfa3..c917e28c7d 100644 --- a/plug-ins/Makefile.am +++ b/plug-ins/Makefile.am @@ -8,9 +8,10 @@ SUBDIRS = \ Anamorphose \ CentralReflection \ Curtain \ - Encript_Decript \ + Encrypt_Decrypt \ Julia \ Mandelbrot \ + DigitalSignature \ dbbrowser \ fuse \ gflare \ @@ -121,6 +122,7 @@ SUBDIRS = \ sobel \ sparkle \ spread \ + stegano \ stereogram \ sunras \ tga \ diff --git a/plug-ins/Mandelbrot/Mandelbrot.c b/plug-ins/Mandelbrot/Mandelbrot.c index cab87087a8..d143fb5194 100644 --- a/plug-ins/Mandelbrot/Mandelbrot.c +++ b/plug-ins/Mandelbrot/Mandelbrot.c @@ -1497,7 +1497,7 @@ mandelbrot_logo_dialog() xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); temp = g_malloc((logo_width+10)*3); - datapointer=header_data; + datapointer=header_data+logo_width*logo_height-1; for (y = 0; y < logo_height; y++){ temp2=temp; for (x = 0; x< logo_width; x++) { diff --git a/plug-ins/Mandelbrot/logo.h b/plug-ins/Mandelbrot/logo.h index 871a318a06..cb94ec445f 100644 --- a/plug-ins/Mandelbrot/logo.h +++ b/plug-ins/Mandelbrot/logo.h @@ -1,4 +1,4 @@ -/* GIMP header image file format (RGB-only): //logo.h */ +/* GIMP header image file format (Indexed): //logo.h */ static unsigned int logo_width = 200; static unsigned int logo_height = 72; @@ -6,9 +6,783 @@ static unsigned int logo_height = 72; /* Call this macro repeatedly. After each use, the pixel data can be extracted */ #define HEADER_PIXEL(data,pixel) \ - pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \ - pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \ - pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \ - data += 4; + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; -static char *header_data = ")1!X)1!X)A!Y)Q!\\)Q!\\)A!Z)A!Z)Q!])A!Z)A!Z)1!X)Q!\\*!!^)Q!])Q!]*1\"!*1\"!*1\"\"*1\"!*1\"!*1\"!*1\"!*Q\"%*!!_*!!_*!!_*1\"\"*!!^*A\"$+!\"(*!!_*Q\"%*1\"\"*A\"$*Q\"%*A\"#*A\"#*1\"\"*!!_*!!_*A\"$*Q\"&+A\",*Q\"%*A\"$*A\"$*Q\"$+!!\\*A\"#+1\"+*A\"$*Q\"%+1\"++!\")+Q\".+A\",+Q\".+1\"+*Q\"%*A\"$*A\"$*A\"$+!\"(*1!`*A\"$+A\"-+A\"-+A\",,!\"1,!\"1+A\",,!\"2+1\"++Q\"'+A\",+A\"-+A\",*A\"$*A\"$*A\"$+!\"(+!\"(+!\"(+1\"+*Q\"'+!\"(+!\"(+A\",,!\"),1\"2+A\",,!\"2+Q\"0,!\"1,!\"1,!\"1+A\"-+A\",,!\"1+A\"-,1\"2,!\"2+A\",+A\".+1\"++A\"-+Q\".+Q\"0+A\"-+Q\".+Q\".,!\"1,!\")+A\"+*Q\"'+A\"-+A\"-+A\",,!\"1,Q\"*+Q\".+A\".+A\"-+Q\".+Q\".+1\"++1\"+*Q\"%+!\"(*A\"$*A\"$*A\"$*A\"$*A\"$*A\"$+Q\".+A\",+Q\".,1\"4+Q\".+1\"++1\"*+1\")*Q\"&*!!_*A\"$*1\"!*A\"$*A\"$,!\"(+Q\".+1\"++!\"(*Q\"'*Q\"'*A\"$*1\"\"*1!`*!!_*A\"$*A\"$*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*A\"#*Q\"%)A!Z*A\"#*!!_*1\"!*Q\"%*Q\"%*1\"!+!\"(*!!_*1\"\")Q!]*A\"#)Q!\\*!!^*!!^*!!_)Q!]*!!^*1\"!*!!^)Q!\\)Q!\\*!!^*!!^*!!^)Q!])A!Z*!!^)1!X)A!Y)A!Z)1!W)1!X*!!^*!!^)Q!\\)Q!\\*1!`)Q!\\*1\"\")Q!]*1\"\"*A\"#*!!^*1\"\"*1\"!*1!`)Q!])Q!]*!!^*!!_*Q\"&*A\"\"*A\"\"*Q\"%*1\"\"*Q\"&*1!`*A\"#*A\"#*A\"$+!\"'*Q\"%*Q\"%*A\"#*A\"$*Q\"%*A\"#*A\"#*A\"#*Q\"&*Q\"'+1\")+Q\".+!\"(+1\"+*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"'+!\")+1\"++Q\".,!\"1+A\"-,1\"0+!\"(,!\"&+!\"$*A\"$*Q\"&*Q\"&+!\")+A\"-+A\",+Q\".+Q\"0,1\"3,!\"2+1\"+,!\"1+A\"+,!\".,A\"/+A\"++A\"-+Q\".+Q\"0+Q\".*Q\"'+1\")+1\"*+A\".+A\"-,!\"2,A\"3+Q\"-,1\"3,A\"1+A\"-,1\"3,1\"2,1\"0,!\"2,!\"2+Q\".,!\"1+A\".+A\"-,!\"1+A\"-+A\"-,!\"1+A\"-,!\"1+Q\"0,!\"0+Q\".+A\",+Q\"/+Q\"0+A\",,A\"0+A\"++A\"-+1\"+,!\"1,!\"1+A\"-,1\"4+1\"+,!\"1,!\"1,A\"1,!\"1,1\"4,1\"/,!\"1+A\",+Q\"/+A\"-*Q\"'*Q\"'*Q\"',1\"%,!\"1,!\"-,A\"*,!\"/,!\"1+Q\".+Q\".,!\"1+1\"*+1\"**Q\"'*A\"#*A\"$*Q\"%+1\"$+!\"(+1\"++A\"-+Q\".+A\"-+A\",+!\"(*A\"$*A\"$*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"+*Q\"&+!\"(*Q\"%+!\"(*!!_*A\"$*A\"#*1!`*Q\"%*A\"\"*!!`*A\"\"*A\"#*A\"#*!!^*Q\"$*1\"!*A\"\"*A\"$*!!^*A\"$*1\"!*A\"\")Q!]*1\"!*!!^*!!_*!!^)Q!]*1!`)Q!\\)Q!\\)Q!]*!!`)1!X*!!^*!!^)A!Z*1\"!*A\"\"*!!^*1\"!)Q!]*1!`*Q\"%*!!^*A\"\"*!!^*1\"\"+!\"'*1\"\"*A\"#*1\"!*A\"$*A\"$*Q\"%*1!`*Q\"%*A\"#*A\"#*1\"\"*A\"$+A\"-+!\"(+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%+1\"**Q\"%+A\"-+Q\"/,A\"/+Q\"++A\",*Q\"&*A\"$*A\"$*A\"$+!\")+Q\"/,1\"4+A\"-,!\"1,!\"1+A\".,!\"1,!\"&+1\"++A\",+!\"(+A\"-+A\",,1\"3,1\"4,1\"4-A\"1-A\"5-!\"5,1\"4+Q\"/+Q\"/+A\"-,1\"1,A\",+A\"-+A\"-+Q\"0+Q\"0,!\"1,1\"4.1\"5,A\"4,1\"4,1\"4.1\"5.1\"5-1\"5.Q\"6-Q\"5-A\"5-A\"5.1\"5,Q\"5-Q\"5,1\"4,1\"4.!\"0,1\"4,1\"4,Q\"3-1\"2,1\"4,1\"4,!\"1.!\"4,!\"2-1\".,1\"3-1\"1,Q\"4+Q\"0,!\"2,1\"3,!\"0,!\"1+A\"-,!\"2+A\",+A\",,!\"2+A\",,!\"1,!\"1,!\"1.!\"5.1\"5,A\"5.A\"6-Q\"5.1\"5-A\"1,A\"4,1\"4,!\"0+Q\".+1\"++Q\"$,!\"&+!\"(+A\"-+A\",,1\"4,1\"4,1\"4,1\"4,1\"4+Q\"/+Q\"/+!\")*Q\"&+!\"'+!\"(+!\"(+A\",+Q\".+Q\"0,!\"2+A\",+A\"-+1\"+*A\"$*A\"$*Q\"%*Q\"%*Q\"%+1\"*+A\",+A\",+A\"-+!\"'+!\"'*Q\"%+1\")*Q\"%*Q\"%*Q\"%+1\")*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*1\"!*A\"$*Q\"%*!!^+!\"'*1\"!*1!`*1!`+!\"'*A\"#*1\"!*1!`*Q\"$)Q!\\)Q!\\)Q!]*!!^*1!`*1\"!*1\"!*A\"$*1!`*A\"$*1\"!*A\"\"*!!`*A\"$*1!`*A\"$*Q\"%*A\"$*A\"$*A\"\"*A\"\"*Q\"'*A\"$*A\"$*A\"$*Q\"%*A\"$*Q\"%*Q\"%*A\"#*Q\"&*Q\"&+!\"(+1\"*+A\"-+!\"'*Q\"%*Q\"%*Q\"%*Q\"%+Q\"/+!\"(,1\"3+A\",,!\"2+A\"-+Q\".+1\"**Q\"&*Q\"&,!\"1,!\"2+Q\"/,A\"3-!\"5-A\"5-!\"4+A\"-+A\".+1\"*+A\",+A\",+Q\"/,!\"1-!\"1,1\"3.Q\"6.Q\"6.!\"6-!\"6,A\"5,1\"2+Q\"0+Q\"/,!\"1,!\"1,!\"2,1\"4,!\".-!\"4-A\"6-A\"8.Q\"8/1\"9-A\"8.Q\"7.Q\"7.A\"7.!\"7-1\"5.A\"6-1\"7-A\"8-Q\"6,A\"5-1\"5,Q\"5.!\"5-Q\"5,1\"4.1\"8-1\"5.Q\"6-Q\"9.Q\"6-1\"5/1\"8-A\"6.!\"6-A\"6.A\"7-Q\"7-1\"8.Q\"7/1\"9/A\"8-Q\"6-A\"6-!\"4-!\"4.!\"5-1\"6-!\"4,1\"4,1\"3,1\"4+Q\".,1\"4,1\"4,Q\"5,A\"4-A\"9-A\"8.1\"8-Q\"9-Q\"5.1\"7.Q\"8.A\"5,1\"3,A\"3+Q\".,1\"3,A\"&+1\"*-!\",,1\"3,1\"4.Q\"1/!\"8-1\"4-1\"5,1\"4,!\"0+Q\"/+!\"(+!\"(+A\",+1\")+A\"-+Q\".,1\"3+Q\"0,1\"3+1\"*+Q\"/+!\"(*Q\"%*Q\"&+!\"'+A\",+A\",+Q\"0+A\"++A\"-*Q\"%+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'+!\"'*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*A\"$*Q\"%*Q\"%*1\"!*A\"#*A\"$*A\"#*!!`*A\"#*!!`*Q\"%*A\"$*1\"\"*Q\"%*!!`*A\"#*A\"#*1!`*A\"#*1\"!*A\"#*Q\"&*1\"!*A\"$*Q\"%*Q\"&*A\"$*Q\"%*Q\"%+!\"(*Q\"%*Q\"%*Q\"%*Q\"%*A\"$*Q\"%*Q\"%*Q\"%*Q\"%+Q\".+!\"'+Q\".+A\",+1\"++!\"'+!\"(+1\"++1\"*+Q\"/+Q\"/+Q\".,!\"1,A\"5,1\"3+A\",,1\"2+!\"(+1\"*+A\"-+Q\"-,1\"2,Q\"4/Q\"7-1\"5-1\"5,1\"4,1\"3+A\"-,!\"+,A\".+Q\"/,!\"0,A\"5.A\"6.A\":.!\"<.!\";.1\"8.Q\"7.!\"7,1\"4,!\"0,!\"0,!\"1,!\"1.A\"6.A\"/-1\"8.A\"<.Q\".!\";.Q\"?.Q\"?.Q\"?/!\"7/!\"7,Q\"6-A\"7.1\"9-Q\"5.!\"8-1\"8/A\":.Q\":-Q\"8/A\"8-1\"8.1\"8/1\"9.1\":.!\":.1\"9.A\":.Q\":.1\"8.A\"=.A\";.A\":/A\">.A\">-Q\":.Q\"?.1\"=.Q\"?/1\">/Q\"=/A\">.Q\"<.Q\"<0!\"=/1\">.1\"9.A\"6.A\"6-Q\"6/A\"6.!\"5-!\"5.A\"6-Q\"5-Q\"5.!\"5.A\"6.1\"8.A\"9/!\"=.Q\"?.!\"<.!\"<.A\"6.A\"6,A\"5,!\"1,!\"1+A\",+A\"-,1\"4-!\"7-!\"7.1\"8.A\"7.1\"6.A\"6,A\"5,1\"2+A\",+A\"-+A\",+!\"(,1\"4,Q\"5.1\"5,A\"5,!\"1,!\"1,!\"1+1\"*+A\",+!\"',A\"(,A\"(+Q\"/+Q\"/,1\"2+Q\"/+A\",+1\"**Q\"%*Q\"%+!\"(+!\"(+A\"-+A\",+!\")+A\"+*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"%*Q\"'*A\"#*Q\"'*1\"!*Q\"%*A\"$*Q\"%*Q\"%*A\"$*A\"#*1\"!*1\"!*A\"$*A\"$*A\"%*A\"$*A\"$*A\"$*Q\"&+1\")*A\"$+1\"**A\"$*Q\"%+!\"(*Q\"&+1\"++A\"-+!\"'+A\"-+A\"-+!\"'+Q\"/+1\"++A\"-+Q\"0+Q\"/,!\"1,!\"1+A\"-,!\"2+Q\".,1\".+Q\"*+Q\"0+A\"-,A\"5,A\"5.A\"6,A\"5+A\",,Q\"*+1\"*+Q\"/+Q\"0+Q\"/.A\"6.A\":.1\":.1\"8-Q\"6-A\"5,!\"2+A\",,!\"1,1\"4-Q\"5.!\"7.A\":/Q\"=.Q\"?.Q\"?.Q\";-Q\"7.!\"5,1\"4,1\"4,1\"4,Q\"5/1\"6.1\"9.A\":.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.!\"9-1\"5.Q\"9.Q\":.!\"7.A\"=/A\":.1\"=/A\":/!\":.1\";.!\";.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/A\"C.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?-A\"9/A\":-A\"9-A\"9,Q\"6.!\"7,Q\"5,1\"4-1\"5-Q\"8.1\"8.Q\"?.Q\"?.Q\"?.Q\"?/Q\"=-A\"8-Q\"5,A\"5,1\"3+Q\"0,1\"4-Q\"5-A\"5.1\":.1\"=.A\":.A\":.1\"8-1\"5,1\"4+Q\"/-!\"0+A\",,1\"3.!\"5-A\"5-A\"5.A\"6-Q\"4+Q\"0+A\"-+Q\".,!\"0,!\"0+Q\"0,!\"1,!\"1-!\".,1\"3+A\"-+Q\"0+Q\"/+!\"'+Q\".+Q\"0+A\"-,!\"1,A\"(+A\",+1\")+Q\"/+!\")+!\"'+1\"*+!\"(*Q\"%+!\")+!\"(+!\"'*Q\"%*Q\"%*Q\"%*Q\"&+!\"(*Q\"%+!\"'+!\"(*A\"$*A\"$*A\"$*Q\"%*Q\"&+!\"'+1\"*+1\"++Q\".+1\"++Q\".+Q\".+A\"-,!\",,!\"(+Q\".+A\"-+A\"-+Q\".+A\",+A\",+1\")+Q\".,!\"2+Q\".,!\"1,!\"1+Q\".+A\"-+1\"),A\"3,!\"-,Q\"5-Q\"5.!\"6.Q\"6,A\"5,A\"5,!\"+,Q\"0,!\"1-!\"4.1\"6/Q\"9.1\"=.Q\"?/1\"9-Q\"8,A\"5,1\"4,1\"3,Q\"4.!\"5-A\"8/!\">.A\">.Q\"?.Q\"?.Q\"?/!\">,Q\"5,Q\"5.!\"5-Q\"6.!\"7.1\"=.A\"?/1\"@/A\"D/Q\"E0!\"G/1\"C/A\"D.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/!\"?.Q\"=/!\">/1\">/1\"@/!\"@/1\"B/1\"B/1\"C/Q\"F/A\"D/Q\"E/Q\"E/Q\"E01\"I01\"I0A\"K/Q\"F/1\"C/Q\"F/1\"B/1\"B/1\"B/Q\"F/1\"B/1\"A/!\"A/!\"@/1\"B/1\"B/!\"@.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B/Q\"E/1\"B/A\"D01\"I0A\"J01\"I/Q\"E/Q\"E/!\"A.Q\"@/1\"?/1\"8/!\"8-1\"7-A\"8.A\"9.1\"=.A\">.Q\"?.Q\"?/A\"D/1\"B/A\"@.1\"=/1\"9.1\"6-A\"5-!\"5,A\"4.Q\"7.!\":.Q\"?.Q\"?.Q\"?.A\"=.A\"7-!\"5,Q\"2,1\"3+A\"-,1\"4-1\"7/!\"8.Q\"<.1\"9.1\"6.A\"5,!\"1,!\"1,!\"1+1\"+,!\"2,A\"5,Q\"5,Q\"5,Q\"3+Q\"0,!\"1+!\")+A\"-+Q\"-,!\"0+Q\"/+A\",,!\"1+A\",+Q\".+!\"(,1\"+,1\".+!\")+A\",+1\")+A\",+!\"(+A\"*+A\",+!\"'+!\"(*Q\"%*Q\"%*Q\"%*Q\"%+1\"*+1\"++!\")+A\",+A\"-,Q\"++1\"++A\",,A\"(+A\"-+1\"*+1\"++A\"-+A\"-,!\"1+A\",+A\"-+A\"-+Q\"0+1\"*,!\"2,1\"3,A\"5,A\"5.1\"6,1\"5,1\"3,A\"+,!\".,!\"0,A\"5,Q\"5.1\"8.!\"6/!\"9-1\"5-!\"5,A\"5,A\"5,1\"4.1\"6/!\":.1\"=.Q\"?.Q\"?.1\"=-A\":.!\"5,Q\"5.1\"6-A\"5/Q\":.1\"=/Q\"F0!\"G/A\"D.Q\"?.Q\"?.1\"=.Q\"9/A\"6.1\"9-Q\";.!\".A\">.Q\"?.Q\"?/A\"D0!\"G0!\"G0A\"J1!\"N0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"I0Q\"M0Q\"M/Q\"F01\"I0Q\"M01\"J0Q\"M0Q\"M0Q\"M0Q\"M0Q\"M01\"J0Q\"M0Q\"L0A\"K01\"J0Q\"M0Q\"M0Q\"L0!\"G0!\"G0!\"G/A\"C/A\"D/A\"D/1\"B/1\"A/1\"C0!\"G/Q\"F0!\"G/Q\"F/Q\"F0Q\"M0Q\"M1!\"N0Q\"M0!\"G0!\"G/1\"B.Q\"?.1\"-Q\";-Q\":.Q\"?/!\"@/A\"C01\"J0A\"K0!\"G/Q\"F.1\"=/1\";-Q\";.Q\"8-!\"6.1\"8/Q\"<.Q\"?.Q\"?.Q\"?.Q\"?/A\"<-!\"7.1\"6,1\"4,1\"4.!\"5-1\"8.Q\"9/!\"@.1\"=-Q\";.Q\"8,!\"2,!\"2,!\"0,!\"0.1\"6-1\"5.1\"9/1\"6,Q\"5,A\"5-!\".+Q\"/,A\"-,!\".,!\"0,!\"2+A\"-,!\"0,!\"0+1\"+,!\"2+A\",+A\",+A\"-+A\",,!\"*+Q\"(+Q\"%,!\"+,A\"/+!\"'+A\",+!\")*Q\"&+1\"**Q\"'+A\",+A\",+A\",+A\",+A\"++A\"-+Q\"/+A\",+Q\".+A\",,1\"2,!\"1+Q\".,!\"1,!\"0,!\"1+A\"-+A\"-,1\"4,1\"/-1\"5/Q\"6-Q\"5,A\"5,A\"5,1\"4,A\"3,1\"4.A\"6.A\"9/1\">.Q\"?.A\">-Q\"9-Q\"5-1\"5-1\"5-Q\"6.A\"9/!\"?/!\"A/Q\"F.Q\"?.Q\"?.!\"7.!\"7.1\"8.Q\":.1\"/Q\"F0A\"K1!\"N0Q\"M0A\"K/1\"A.Q\"?.Q\"?.Q\"?/!\"@/Q\"F01\"J1!\"N2A\"X2!\"V1!\"O11\"P0!\"H01\"I0!\"G/1\"B/Q\"F01\"J0A\"L1!\"N1Q\"S2Q\"U3Q\"T2!\"V3A\"R31\"X2A\"T1Q\"T11\"P1!\"N0Q\"M0Q\"M0!\"H0Q\"L0Q\"L1!\"L1!\"K0A\"I/1\"8.1\"-/A\"811\">11\">11\"=11\">11\">11\">11\">11\">1A\"=1A\"A11\"A1A\"B0Q\"A0A\"E1A\"I1A\"P11\"P2!\"T2A\"Y3A\"U2A\"Z2Q\"Z3!\"U2Q\"Y2!\"V1A\"R0Q\"M0Q\"L0Q\"L01\"I0A\"J0Q\"L11\"Q1A\"R21\"W2Q\"U2A\"W1A\"R1!\"M0A\"J/Q\"F/!\"@/!\"@.Q\"?/1\"C0!\"G0Q\"M1A\"R1!\"O1!\"N01\"J/1\"C.A\">/!\">.Q\"<.Q\"?/!\"@0!\"H0A\"J0Q\"M01\"I/1\"C/1\">.!\":.Q\"6-A\"9-Q\":/!\"@/!\"@/!\"@.A\">/!\"?0!\":-Q\"6-Q\"5.Q\"7-Q\"6-!\"7.1\"=.Q\";.!\"<-!\"7,1\"2,A\"4,A\"5.Q\"6,Q\"5/!\"6-!\"5,A\"5,1\"3,1\"3,Q\"2,!\"1,!\"1,!\"1+A\"++Q\"0+Q\".,!\"1+A\",+A\"-+Q\"0+A\"%+A\"-+A\"-+Q\".,!\"1,!\"1,!\"1+Q\"/,1\"4-A\"5,Q\"5.!\"5,1\"4-Q\"0,A\"5.1\"/,A\"5.!\"5.1\"6-A\"5.1\"6-!\"8/1\";.Q\"=.A\"8.Q\"9,A\"5-A\"5.1\"9/Q\"=.A\">.1\"=/!\"@/!\"@/!\"@-!\"7.Q\"8/1\";.A\">/!\"@0!\"G0Q\"M01\"J01\"I/1\"C.Q\"?.Q\"?.Q\"?/!\"@/Q\"F1A\"R11\"P1Q\"T1!\"O0A\"J/1\"B/1\"B.Q\"?/!\"@/Q\"F1A\"R21\"P2A\"Z3A\"V3Q\"U1Q\"S0Q\"M01\"J01\"J0A\"J0!\"H0Q\"M2!\"Q2!\"R21\"W4!\"Z4!\"Z2Q\"Z2A\"Z2A\"Z2A\"Y1Q\"U1!\"N0Q\"M0Q\"M1!\"K0A\"F11\"D1!\"B/!\"4/!\"0/Q\"*/Q!`.1!^-1!X-A!Z/!\"!/Q\"+/A\",/1\")/A\"*/Q\"+/1\"*/1\"*01\"*0A\").Q\".1Q\")0Q\".1Q\"/1Q\"11Q\"11Q\"20Q\":1!\":1!\">11\"D11\"H2A\"O1Q\"U3A\"U3!\"Y2A\"Z2A\"Z2A\"Z2!\"S2!\"Q11\"Q1Q\"M01\"J1A\"R1A\"R2A\"U3Q\"U2A\"Z3!\"Y3!\"X1Q\"S1A\"S01\"J/Q\"F0!\"G/A\"C/Q\"F0Q\"M1Q\"T3!\"U2Q\"V2!\"R1!\"O/Q\"E.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K0Q\"M0Q\"M/Q\"F/!\"@.Q\"?.Q\":/1\"8/!\"@/!\"@/A\"D0A\"K/1\"B/1\"C.A\">-A\"9.!\"5-A\"9/1\";/!\"@/!\"@/!\"@/!\"?.A\"8/!\"6-1\"5-A\"5-A\"5.1\"8/!\"60!\"9.!\"5.!\"5,A\"5,A\"5.!\"5,A\"5.1\"6,A\"5,1\"2,!\"1,!\"1,!\"1+A\"-,!\"2+A\",,1\"3,1\"3,1\"3,1\"4,1\"4-!\"3.A\"/-A\"5,Q\"5-1\"6-!\"5.!\"7-Q\"8-!\"7.!\"9-1\"6.!\"6.!\"9-1\"9-A\":/1\"?.Q\"?.1\":.!\"9/A\":/1\"/!\"A/A\"E/A\"D/Q\"E/!\"@/!\"@/Q\";.A\">/1\"@01\"I0A\"K0Q\"M0Q\"M01\"I/1\"C/!\"A.Q\"?/1\"A/Q\"F1!\"N2A\"W21\"S21\"W1!\"O0Q\"L/Q\"F/A\"C/1\"B0Q\"L11\"O2A\"W3Q\"W2Q\"Y2A\"Z3!\"Y2!\"S1A\"S0Q\"M0Q\"L0Q\"L1Q\"R2!\"R31\"X31\"\\41#!3Q\"`41#\"3A\"^3!\"Y3A\"V1Q\"T1!\"O1!\"K0Q\"J11\"G0A\"<0Q\"60A\"+.A\"\".!!^-1!\\-A!Z-1!X+Q!X-1!X-1!X-A!Z.A\"!.1!].Q!_.1!`.A!^.A!].Q\"!.Q\"!.Q\"!.Q\"!.Q\"\".Q\"\".A\"\"/!\"#/!\"$/!\"&1!\"&1!\"(11\"(1Q\".1Q\"01Q\"41A\"71Q\"91!\"B1A\"J3!\"P31\"S31\"[4!#!3A\"^3!\"\\2Q\"Y1Q\"T11\"P1!\"O1Q\"S2!\"V3Q\"\\4!\"^3A\"_4!#!4!\"X31\"V2!\"S0A\"K0!\"G01\"H0!\"H0Q\"M2!\"S3!\"Y3!\"Y3A\"V1Q\"S1!\"O/1\"B/1\"B/!\"A/Q\"F01\"I11\"Q1A\"R1Q\"R1!\"M/Q\"F/1\"A/1\"?/!\"@/!\"@/!\"@0A\"K0A\"J0!\"H/1\"B/!\"A/!\">/A\";.!\";.1\"=/!\"@/!\"@/!\"@.Q\"?.1\".A\">/!\"@/!\"@.Q\";.1\"<.!\";/!\"@/!\"A0!\"G0Q\"L01\"J.Q\"?/!\"@/!\"@/!\"@/!\"@01\"J1!\"N1A\"Q1!\"N01\"H/A\"E.Q\"?.Q\"?/1\"B0A\"K1Q\"N3A\"T3!\"X31\"W1A\"R0A\"J/Q\"F0A\"K0Q\"M1A\"R2Q\"U4!\"]4A\"_4A#$3!\"]3A\"V3!\"V0Q\"M0Q\"M0Q\"M2!\"U21\"V4A\"_41#(4Q#(4Q#*4Q#%3A\"_2Q\"[3A\"V2Q\"U1A\"R0Q\"M1!\"C1!\"=01\"5/Q\"*.A\"!-Q!\\-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!X-1!U-1!X-1!X-A![/A!\\0!\"\"1A\"'0Q\"'2Q\"+3!\"+3A\",3A\"-3A\"-21\".21\"-2A\"%0A\"$01\"$/A\"$/A\"$/!\"#/Q\"$/Q\"$0A\"$1A\"%1Q\")1Q\"-1Q\"-1A\"91A\"?21\"A21\"Q3!\"V4A\"[3Q\"`4!#!2Q\"[21\"W2A\"S2A\"T3A\"V31\"W3A\"_4Q#%4Q#%4A##4!#!4!\"Y2!\"U11\"Q0A\"K0Q\"M0Q\"M3!\"Y2Q\"Y3Q\"[3!\"[21\"W1A\"R0Q\"M0!\"G/!\"@/A\"C0Q\"M1A\"R2Q\"V2A\"Y11\"P0A\"K/1\"B/!\"@/!\"@/!\"@/A\"E01\"H1!\"N01\"J/Q\"E/!\"@/!\"@/!\"@-Q\";.1\"=/!\"@/!\"A/A\"D.1\"=.1\"=.Q\";-A\"7.Q\";/A\"9.!\";/Q\"=.!\"<-Q\";.1\"7,Q\"6.Q\"9.!\"6.Q\"9.A\"9-A\"5-A\"5-1\"5,A\"5,A\"5,A\"5-Q\"5-1\"5-A\"5.!\"8.Q\"6-Q\":/!\"8/1\";.1\":.1\"=.!\";.1\"<.!\"<.A\"=.1\"=/!\"?/!\"@/!\"@/!\"@.Q\"?/!\"@/!\"@.Q\"?.Q\"?.Q\"?0!\"H0Q\"M0Q\"M/Q\"F0!\"G.Q\"?/!\"@/1\"B0!\"G0Q\"M1Q\"Q2A\"V21\"R1A\"Q0A\"J0!\"H0!\"G0Q\"M1A\"S3A\"V3A\"^31\"]3!\"Y3A\"U11\"Q0A\"J0Q\"M11\"P3!\"W4!\"X4Q#%4Q#%4Q#%3Q\"`2Q\"[2Q\"U11\"Q2!\"V3!\"X41\"Z41#%5A#*5Q#06A#-6!#)4Q#&3A\"^3Q\"\\31\"U21\"Q1!\"K01\"?01\"4.!\"+.!!`-A!Y-A!Y-1!X-1!X-1!X-1!W,A!W-1!W-A!U/!!`11\"&2!\"+41\"17Q\"79Q\"?:1\"A;Q\"H;A\"B9A\">:A\"?:!\"781\";:A\"<:Q\"?:Q\"?;Q\"C0!\"<-Q\":/1\"9-!\"7-A\"7.1\":.A\"6.!\":01\"8.1\"8.1\"8.A\"9.A\":-1\"5-Q\"9.1\"9/!\"8.!\"<-Q\";.1\"=.Q\"?/A\">/!\"<.Q\"?.A\">.1\"=/!\"@/!\"A/A\"E/1\"A.Q\"?/!\"@/!\"@/!\"@/!\"A/Q\"F1!\"N1!\"N1!\"N0Q\"L0A\"K/!\"@/Q\"F0!\"G1!\"N2!\"S2Q\"Y3Q\"U2!\"R11\"P0A\"J0Q\"M0Q\"L21\"V3Q\"W3Q\"`4Q#%3A\"_3!\"X1A\"Q1!\"N11\"O2A\"V31\"W4Q##5!#+51#-51#'41#\"3!\"Z3A\"V31\"X3A\"T41\"\\5!#$5Q#-6!#061#06A#05!#)4Q#&4!\"Z4!\"T2!\"R1A\"F11\">.!\"7.1\"&-Q\"!-A![-1!X-1!X-1!X-1!X,A!V*Q!W.1!V.Q\"!3A\"+7A\";:1\"A=1\"?:Q\";9!\"68Q\"67Q\"-5A\")5A\"%4Q\")51\"&51\"(5Q\"(51\"+5Q\"25A\"16!\"*5!\"+4Q\"*4!\"(51\"+5A\".81\"08Q\"6;Q\"A>1\"F>1\"O;A\"L9Q\"E61\";2A\",0Q\")1!\"&0!\"'.Q\")01\"*0A\".1A\"70Q\":11\"@2!\"L31\"X3Q\"_4A##4A#!41\"^2Q\"[3A\"V4Q\"`4Q#%5Q#*6A#.61#-5Q#*4Q#\"3!\"Y3!\"V1A\"Q3!\"V31\"W4A#\"4Q#%4Q#%4A##41\"\\21\"U1!\"O1!\"N0!\"G0Q\"M3A\"U2Q\"Z3Q\"`3!\"X1Q\"R0Q\"L0!\"G01\"I0A\"K1!\"N11\"Q2Q\"Q1Q\"T0Q\"M/Q\"E/!\"A/!\"@/!\"A01\"I0A\"L01\"I0!\"H/Q\"F.Q\"?.A\">/!\"@/!\"@/!\"@.A\">/!\"@/!\"@/!\"@.A\">-Q\";/A\".A\">.Q\"?.Q\"?.Q\"?.Q\"?/!\"@.1\"=.Q\"?/!\"@/1\"B0!\"G01\"J0A\"K/1\"B/!\"@/!\"@/1\"C0Q\"L1A\"Q0Q\"M1A\"R1!\"N0!\"G0A\"K01\"I1!\"N1Q\"T3A\"U3Q\"U2A\"[31\"W1Q\"T1!\"N01\"I11\"P31\"V41\"]4Q#&4Q#'41#\"3A\"\\3Q\"U1A\"R2!\"V41\"W41\"`51#.6A#06Q#)5A#,4Q#$4Q\"[3Q\"W2A\"Z4A\"\\4Q#(51#+5A#+4Q#+5Q#05Q#04Q#+41##4!\"[2Q\"R01\"G01\"<.A\"5.1\")-Q!\\-1!X-1!X-1!X-1!X-1!W,!!U,1!R/A!V3Q\"/:!\"7.A\">-A\":.1\"=.A\"=.Q\"?.Q\"?.Q\"?.A\">.A\">.Q\"?.Q\"?.Q\"?.Q\"?/Q\"E.Q\"?/!\"@/!\"@/A\"D0A\"J0Q\"L0Q\"L1!\"N0!\"G0A\"K/1\"B01\"I0Q\"M11\"P1A\"R1Q\"U1A\"S1!\"N0A\"K0A\"J1!\"O1Q\"Q31\"W4!\"`3A\"_2Q\"Z2A\"V1!\"N1!\"N2!\"V3A\"U4A#!5!#(5!#(4Q#&41\"^3A\"W3A\"V31\"W3Q\"[5!#)61#/6A#06Q#061#/5!#&3Q\"`3A\"\\3A\"_4A#'5Q#.51#-5!#&4Q#&51#,6!#05!#)41\"`3A\"U11\"N1!\"C/Q\"7/1\"%-Q!`-Q![-A![-A![-Q!\\,Q!X+Q!U,A!W0!!`8!\"71!\"K21\"W4!\"]4Q#&4Q#)4Q#%4Q#&4Q#'6!#/5Q#05!#.5A#*6!#/51#+3A\"_3!\"Z2Q\"Z4!\"^4Q#&5A#*6A#061#/5A#&3A\"[2Q\"W1A\"O21\"S3A\"V41##5!#&4Q#%4Q\"`31\"X1A\"N1!\"N1!\"N11\"P3!\"R3!\"Y2Q\"Z1Q\"U1Q\"T01\"I01\"I01\"I0Q\"M1!\"N1!\"N1!\"O01\"I0A\"L/A\"C/!\"@/Q\"E/1\"B/Q\"E01\"I/1\"C/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?-Q\";.Q\"?-Q\";.!\";.1\"=.1\"=.!\"<.1\"=.1\"=.Q\"?.Q\"?.Q\"?/1\"B/1\"C.Q\"?/Q\"F0!\"H0A\"L0A\"L1!\"N1!\"N01\"I0A\"K0A\"L0A\"L0Q\"L1A\"R21\"S4!\"T2A\"Y11\"P1!\"N1!\"N1!\"N2Q\"U31\"Z4!#!4!#!3Q\"`3!\"Y21\"U1A\"R31\"Q4!\"\\41##4Q#$51#&5!#)4Q#%2A\"Z31\"W31\"W4!#\"5Q#*6!#.5A#*5Q#-6A#/51#'41##4A#$4Q#%6!#-51#,51#(4Q#%4Q#%4Q#-6!#051#.4!#!3Q\"S1A\"L0Q\";.1\"1.Q\"$,Q![-1!X-A![-1!Y-!!R+!!H,1!R1A\"#7A\"99Q\"8:!\"+7Q\"+3Q\"%51\"-51\"22Q\"0/Q\"#-Q!X+!!U-Q![2!\"%7A\"8BQ\"7CQ\"2AA\"1BQ\"1B1\"2B1\"2D!\"6BQ\"9B!\";A1\"A@Q\"H;A\"C6A\"92!\"'.!!Z-1!V-A!T/A!^1Q\"$3A\"&1!\"%11\"%41\"/;Q\"DBQ\"]C1#!=!\"S41\"811\"(.1\"\".1\"$0!\"'/Q\"21!\"70A\";1!\"C1Q\"N2Q\"Z4A#$4Q#%4Q#%4Q#%51#*6!#05A#)4Q#%4!#$5!#(6!#-4A##4!#!3Q\"Z4!#!5A#)6Q#05Q#061#+51#+4!\"`3Q\"U2Q\"Z4!\"T3A\"_5!#&5!#&5!#*41##3A\"S21\"S1!\"N1A\"S31\"T2Q\"Z3A\"_2Q\"[21\"W1A\"R1!\"N0A\"J1!\"N11\"P11\"Q1Q\"T1Q\"T1!\"N0Q\"L0!\"H/Q\"E01\"I0!\"H0!\"G0!\"H/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@/!\"@.Q\"?.Q\"?/1\"B/1\"A/1\"A/A\"E0!\"G0!\"H0A\"K/Q\"E0A\"J/Q\"F01\"I1!\"N1!\"O11\"Q1!\"N1!\"N0A\"K0A\"J1!\"O1Q\"S3Q\"U2Q\"Z2Q\"[31\"T1A\"S11\"P11\"P2A\"Y4A\"[4A#$3!\"[41#\"31\"]4!\"T2A\"R3!\"X3Q#!4!#!,AR6)QB!3Q\"_4Q#%3Q\"`3A\"_3Q\"`4Q#(5!#+1Q\"P1!\"O4A#$61#05A#.4Q#%4Q#%51#)5A#.5!#+4Q#,5A#)51#)4Q#(5Q#051#.4Q\"]3A\"Q11\"E/1\"6.!\"'.1\"\".!!_.1\"\"/1\"#-Q!\\+!!Q+!!O0Q\"(71\"5;1\"2:Q\".6A\"*61\"-6Q\"55!\"31Q\"(-Q!W.1!X2Q\"'7Q\"0?Q\"FC1\"@B1\"*@!!W<1!L6Q!?4Q!;21!91!!;/Q!5.Q!:-1!7.Q!8.Q!:.Q!:1!!>4!!<61!>81!D=A!M@1!VCQ\"-BA\"7?!\"?9A\":2Q\"*-A!^+1!W.Q!\\2Q\"$21\"'11!_2A\"'9Q\"?C1\"[DQ#&Q\">B!\"7?Q\"!;A!I5!!?0A!7.!!6*Q!7*1!6(1!8)1!9'!!6&A!8'1!5&Q!6&Q!;(1!9(1!=)!!=(!!<*!!:*1!9,!!=/1!<2Q!;6Q!<&A!='A!9'A!9'Q!=+A!<,1!90!!<5!!;01\"H1Q\"T41#$5A#/5Q#05Q#04Q#-3Q#-/1#3.1#3/1#241#,6!#/51#(6!#&61#.5Q#-.Q#+.A#*/1#\"3Q#.51#(41#\"3A\"_5!#&61#'5A#/6Q#16!#,41##3Q\"]3!\"Y3!\"]4A\"]41##4A#$4A#$31\"^3A\"V2Q\"U1Q\"T1Q\"T31\"W31\"W31\"X3!\"Y2A\"U1!\"N1!\"N11\"Q11\"P11\"P1!\"N1!\"N1!\"N01\"I01\"I0A\"K0A\"K0!\"G01\"I01\"H01\"I/Q\"F1!\"N0Q\"M1!\"N1!\"N1!\"N1!\"N1!\"N1!\"N11\"P1Q\"T2A\"V3Q\"U3!\"X21\"X1Q\"S1Q\"T2Q\"W3!\"W3A\"]4Q#$3Q\"`3Q\"^3A\"_3A\"V2Q\"Z4!\"`4A##.A\"?$2!;#A!=/!\"=4Q#$3Q\"`5!#$0!2J$!!;!!Q)!!Q'#A!821\"U61#(5!#)61#--QR:#R!6#\"!<(A\"\"1Q\"X4Q#'5Q#061#05Q#,4Q#)5A#,5Q#061#061#04Q#*4Q#'5!#.61#-4Q\"\\21\"H0A\"2.A\"&/Q\"%/A\"$0Q\"%0A\"#,!!S*Q!L2!\"(61\")81\"&7!\".6A\"+8A\"?3A\"-,1!Q0!!]:1\";CQ\"AC!\"!81!G/1!:*1!3(Q!3&Q!8&!!2&A!:)1!E/A!Y4A\"+;Q\"6@1\"9F1B6HA21J1R)KQR%L1\"%M!B%MA2%LQB%JQB3F!29AQ\";>!\"87!\"50A\"#+!!M'Q!C'1!>(Q!;)Q!?,Q!=2!!;91!=A1!SF!\"C/1\"\"+Q!Y1!\"%5A\"011\"'0A!`:Q\"=G1#!?A\"Y41\"0.Q\"\".A\"!0!\"%01\"2.Q\"50!\":/Q\">/Q\"D1A\"R4!#!5A#*5A#051#/4Q#*2A#1/A#3/A#3/1#22Q#26A#,5Q#/5Q#06!#00!#&.A#-.Q#%.A##2Q#)5!#'4Q#%5!#&5A#+51#+5A#/6Q#06!#,5!#&3Q\"`3A\"W3Q\"_41#\"5!#&5!#'4Q#%3Q\"^2Q\"Z2A\"S2Q\"R3A\"V3!\"Y31\"[3!\"X3A\"V2!\"V11\"Q11\"P1!\"N1A\"S11\"Q1A\"R1!\"N1!\"N1!\"N0A\"J0A\"K0A\"K0Q\"L0!\"H1!\"N0!\"H1!\"N1!\"N1!\"N1!\"N1!\"O1A\"R1!\"N1!\"N21\"Q2A\"S3A\"S3!\"Y3Q\"U2Q\"P2!\"R3!\"U3A\"V3A\"_4A##5!#&4A#$3Q\"`2Q\"[31\"]31\"^4Q#%0!\"H%!QA!!!(\"2A-/1\"D4A#$4A#$0!\"L#1!@!\"A&!\"1'!!!(&AQK4Q#%5A#+6!#/-QR4!2!*%1Q?'1!Z-!\"64A#$5A#,61#05A#-5!#,5Q#/6!#05!#,5A#05A#/4Q#'4Q#'5Q#-4Q\"^2!\"J1!\"9.Q\"+01\"$0!\"$1A\"&1Q\",-1!T+Q!P4A\"08Q\",91\"$4A\"&4Q\"*8!\"801\"#,Q!T4A\"0B1\"LFQ\"0<1!L0Q!9*A!6'Q!3&1!3%Q!2&A!=.!!U81\":B!\"@HA23J1ARMQA?M\"A/HRQ&HC1!G#!!E31!ESA!G31!H#A!I3Q!J3Q!K3!)O3!4Q\"!CO!AOL12,DQ\"C;A\"@11\"\"(1!I)1!='A!>)Q!D-Q!?11!6=!!4Q\"0I1\"FNA!PG\"Q$BSA!A#A!:B!#1!!4.Q!E-1!M.1!I0!!@4115;\"!-?R!,BSA.E#A.D3A2BS!1B\"A6.!#.01#021#+/!#).A#\",!\"5,1\"4-!\"7.!\"L.!#\"0Q#\"/1#&.1#\"-Q\"C(1!S)1!Z/!\"<5Q#*5Q#+5!#)5!#)51#*+Q\"/+A\",/A\"E4A##4!#\"4A\"]3!\"]41#\"3A\"V1Q\"S1Q\"O3!\"Z31\"^31\"W2Q\"[2Q\"[2Q\"[31\"X3Q\"U3!\"Y21\"R2!\"R1Q\"T11\"Q11\"P1A\"R2!\"T21\"T21\"R31\"T1Q\"S1A\"R21\"X21\"V1A\"Q0!\"G01\"J0Q\"K2Q\"V31\"]3A\"^3Q\"`0A\"I+!\"(*Q\"%*Q\"%0!\"G5!#&5!#&5!#&11\"O'!!O$A!K&Q!P(Q!W!\"A&!!!(!!!)!B1)%AQD'1!P&Q!N'Q!Q\"\"1+!!A'!2Q(!1A*$1Q@&A!L'A!Q'1!](1\"&21\"Z5!#'6!#-6!#06!#/2A\"W.A\"<.1\":/Q\"G3A\"^41\"_3Q\"S3Q\"Z5!\"Y21\"F1Q\"/2A\",3!\")1A\"%5A\"8-!!U'Q!A01!`7Q\"&61\"%2A\"#8A\">4!\".(Q!G41\",I1\"WCA!Y2Q!9)Q!1&A!0%A!0(1!H9!\"5PQ\"8L!Q4E3A\"E#Q!?C!%2Q!5.A!G.!!J1A!>8BQ*E#1%ME1\"Q6A!P6Q!M6!!MF!!N&1!PF1!R'1!SW1!VW1!TFA\"R51$HSA'>RA>4!!Q0!!T+!!E)1!>*QA/5R!$D#Q!T$1$TAQWG1\"O/A!]'Q!<)1!E+A!L.!!A91!EGQ\"*BA\"P/1!_+1!P41\"411\"\"/1!Z?A\"OM1#961\"=,!!V-A!W.A\"$1!\"3.1\"=-Q\";.A\"=-A\"9/1\"80A\"N5A#.51#03Q#1/1#3.1\">+!\")+Q\"/,Q\"B.1#,.A#1.A#1.Q#*,A\":,1\"4*Q\"%,1\"1-Q\"Q-!#!-!#!-Q#!.A\"I'!AI$A1;(1!T1!\"M5Q#,61#)6Q#'41#%,A\"(+1\"*+1\"+0A\"J4Q#\"41##4A##4A##21\"U1!\"N1!\"M11\"P3!\"]3!\"Z3Q\"]3Q\"U3Q\"]31\"W3!\"X31\"X2Q\"X2Q\"Y2!\"R2!\"U2!\"U2A\"S2Q\"U2A\"T21\"S01\"J0Q\"M1!\"O1!\"O0A\"K/Q\"E0A\"L0!\"H/Q\"F2Q\"U3!\"\\4!#!0!\"H+1\")*Q\"%+1\"+*Q\"%.Q\"@5!#&5A#$5A#!(!QY\"Q!4#!1@'A!S'A!S!!A'!!A)!\"A'%!!B'1!O%!!J&1!M'A!Q\"\"Q*!\"A&!!!(!RA+'!!P'A!S'A!S&!!`)!\"#51#+51#.6!#061#031#!/Q\"@-Q\"8.Q\"\"Q&1QQ8-A!M.A1@6RQ,FTQ\"R'!!OV1!H%1!>T!!8C1!2\"A$/!1%/11%0B1&32A#8B1\">TA!I5Q!R'Q!W81!WG1!LD1(>QA<51!U,A!P*!!?*1!5/1!&A4!!T4Q%WRQSE1\"W/A!]&1!8)A!I-1!N/Q!;=1!LJQ\"@:Q\"D+A!T11\"#6A\":.!!W41\"/HQ\"]C1#(/Q\"#+Q!R-A!]0!\"1/Q\":-Q\";/1\";.Q\"+A!8+Q!4-QQ)21Q(?$1\"MF!!YHA!ZG!!L3!,:QQS0!![*!!D)1!9-!Q*@3!!U$Q!XQ!]EA\"R,!!N'Q!>+A!N-A!J1!!BE1!VGA\"P31\")*!!M5A\"721\"+.A!W.A\"8.A\"9.!\"9.Q\"8.1\"7/1\";/1\"C31\"O21\"F21\"761\"96!\"5/1\"#9!\"B+A!S)!!B6A\"0:1!^3Q!`51\"':Q\"I,Q!S+1!OBQ\"OJQ\"34Q!D*Q!1'1!0$Q!0(1!AAA\"GUA!`E!Q$DTA!F$!!1Q!7*Q!B-A!BC$1\"VWA!Q'!!:C1!.1A#*!!0*1!2-1!>-Q!81A!421A14AQ*52A'42!+2!14/!Q:-!!A*Q!=,1A23\"1(F5Q!UGQ![(A!OD1)>!!I01![*1!B)Q!60QA&ED!!Z31%TQR191\"A)!!>(A!<-1!R.1!C9A!JJ1\"6>!\"J)1!O.A!`5Q\"4.1!T41\"+L!#'C!#!,1!R*A!Q-A!]1A\"6/1\">/!\">.!\":.1\"9/!\"7.1\";/!\"D31#+1!#2.1#++A\"60A\"O3!\"_+Q\"+,1\"1.1\"U.A#,-Q\"@,!\"2)!!X01\"K*!!_+A\",-A\">-1\"_.Q\"I'1!U%11<+Q\"*(!!O(Q!T-Q\"32Q\"Q/Q\"H+!\"(-!\",-1\"6,1\"1+A\",/Q\"F2A\"V31\"V11\"P1!\"O1Q\"T1Q\"T0A\"K0A\"K3!\"R31\"Z4!\"W3!\"Z31\"]31\"\\3!\"[3Q\"]31\"W3A\"V3A\"V/Q\"E/1\"B0!\"G/Q\"F/1\"C/Q\"E0A\"K0!\"G0!\"I-!\"5,1\"-+!\"#+!\"!,1\"&+Q\"&+!\"'+!\"'-1\"90Q\"E+!\"$*!!^+!\"&+Q\"#&A!K#114*12$3!\"`,A\"1&Q!P'A!T%1A>&QAK%!!K+!\"&4!#$1Q\"S'Q!V'Q!Q\"Q1<$1!F'Q!Q,Q\"64Q#.6!#01!\"O,!\"20!\"L5Q#06Q#061#02Q\"V/Q\"B-!\"7/!\";.1\"7-A\":/A\";.Q\"9.A\">31\"O21\"F3Q\"78Q\"B4A\"3.1!`6A\"=)Q!G+Q!O7!\"/8!!\\1!!Y7!\"07Q\"?)1!G.Q!XI1\"RE1!_/Q!9)A!1&1!0\"QA-.!!SNQ\"MOAQ7B2Q!J51!=R1%,A!C,1!D7B1,UH1!WXA!=$1!-!Q$+!!)*A!9,1!>1!10821&BT1!LVQ!PWA!Q7A!PG1!L6A!C$!!82!&0!!4-!!B+Q!90AQ'ETA!Y8A!ZX1!P$!);!\"$-Q!U(A!B*Q1052Q$Q51![\"A?K1\"W,Q!W&A!7+Q!S-A!H2A!AFQ\"$FQ\"Q-A!Y-A!V6Q\"@.1\"!/!!_F!\"\\IA#/11\"))Q!C,!!R11\"40!\"C/A\">-A\"6-1\"5-1\"5/!\"6-!\"7.Q\"T0!#3/Q#0-Q\"G1A\"R6!#02Q\"]*!!\\-1\"9.1\"[,1\"9,!\"2+1\".4Q#.2A\"X)!!X,!\"1-Q\"F-Q\";(Q!Z%AAF3!\"U0Q\"L(!!S+!\"'-1\"7-A\"0,!\"*,A\",2A\"S3!\"U-!\".-A\";0Q\"L11\"P1A\"S11\"P2Q\"U21\"U1Q\"T11\"P11\"Q2Q\"U21\"Y2A\"T3!\"W3!\"X3A\"\\3!\"Z31\"^2Q\"[2Q\"[/1\"C0!\"H01\"I0!\"G0!\"H01\"J0!\"H0A\"K.Q\"@/Q\"A0A\"F,1\"1*A\"$*Q\"$*Q\"%*Q\"%-!\"33Q#\"5A#..A\"<(1!Q*A!]'A!O\"115%11J5Q#*6!#/0A\"I&Q!R'1!P'Q!Q&A!L'Q!R2A\"X5!#&3A\"^(A!W'!!O'1!P&A!M*1\"!31#\"51#051#02!\"X-Q\";1A\"U5Q#06Q#05A#04!##/!\"A/!\"6.1\"<0!\"<.A\"9-Q\":.1\"9.!\":3A\"L1Q\"84Q\"9:A\"M4!\".0Q\"!41\"7'Q!?*Q!P5!\"#6!\"!0!![:1\"85Q\"9)1!B2A\",KQ\"MAA!O,A!5(Q!1$Q!/&1!851\".U1\";IAA*A#1!K5Q!4Q1/+A!@/A1=F$!![91!N'A!2\"Q#+1!&*Q!0,A!@1AQ1;#!!L7!!W(!!O71!GV!!F%A!N'Q!VYA!XYQ!QG1!ADA!2!Q0+1!?)Q!:3!A)M&!![)Q!Z'Q!G!A<6!\"')Q!G)A!:+Q!)H51!\\$A)UQ\"D7A\"6&Q!;+1!J/1!P-Q!D>Q!ZJQ\"H3!\"*)1!K5Q\"84A\")-1!P@!\"FLQ#/5A\"7(Q!G+Q!T/Q\"+1!\"B.Q\"?/Q\"9-Q\"7.A\"6,Q\"5.Q\"<-Q\"@.1#$.A#3.A\"L2!\"T6!#06!#00!\"F+Q\"/,A\"5,!\"1,!\"1-A\"86Q#(5A#-.Q\"A)!!\\+1\"+,A\"5)1!`)!!Z3Q\"`4Q#%/1\"E(A!X,A\"(,1\"*+A\",,Q\"36!#,5Q#02A\"[+A\",/1\"C1A\"R1A\"Q1!\"N4!#\"4Q#%2Q\"V1!\"N0!\"H1!\"N01\"H01\"I11\"P31\"X3A\"\\3Q\"]31\"W3Q\"]31\"X0A\"K0Q\"K2A\"O1Q\"P0Q\"M0!\"H0Q\"L0Q\"M2Q\"P4!\"]4!\"^1Q\"L+A\"+*Q\"%*Q\"%,1\"22A\"W6!#.6Q#12A\"Y&!!F&Q!N%Q!?#Q!;01\"E7!#15A#/2Q\"Y$QAP'Q!Q&Q!M&A!K-A\"64Q#%5!#&4Q#$*!\"\"'1!O'!!O'Q!Q.1\"@51#/6!#/5A#03A##1A\"S3Q\"_6A#06Q#06A#05A#+/1\"B.!\"8/1\"8.A\"=-Q\"7/1\"9-A\"5.Q\"=3A\"L2!\"961\"<+1!O8!\"*8Q!_0A!\\;!\"@5Q\"9'A!B3Q\"-MA\"M?Q!R,1!5(Q!0$Q!0$A177!\"2VQ\"3I11%A31!KE!!3AA4*A!A01A=KEQ!ZYQ!IV1!1AA\"-!!'*A!3,A!?1A1'?$!!RXQ!OW1!6\"A\"-Q!%,A1,1\"A%@$!!W)A!Z)!!Q'!!?#!\"/1!2)Q!=,1A2@TA!Y81![I!!Q#!/;A\")+!!N)!!<*!!/ACA!Z%!#ZQR&>A\"H(1!C*1!J0A!Z-A!?;!!VJA\"<5A\"6)!!E31\"35A\"9-1!S=A\";MA#)8A\"E(Q!F*!!M/Q\"*2Q\"C.Q\"A.!\":-!\"5,1\"4,1\"4-1\"5-1\"7.!\"B.A#+.Q\"L3!\"Y61#05Q#041#)+1\"-,A\"5+A\",+1\"*/A\"F5A#+5A#)4Q##)A\"#,A\"0+1\"*(1!T+1\"'4A#$4Q#%3Q\"_*A\"$,1\"'+Q\"),Q\"*/!\"@61#16!#16A#101\"B,1\"00!\"G01\"I2A\"O5!#*51#-5!#&2Q\"Y11\"Q1!\"N0!\"H1Q\"R31\"T31\"Z41#!3Q\"^31\"^31\"]31\"]3Q\"U31\"Y3Q\"Z4!\"Z2Q\"[21\"R2Q\"W3Q\"[4Q#%5!#&5!#'41#$.!\"<+Q\"%+1\")1!\"N5Q#,6A#+6Q#161#1'Q!P%11;!!A1*Q\"%6!#,7!#16Q#/5!#&(1![&Q!N&A!O'Q!T3Q\"`5!#&5!#&5!#'+!\"''Q!Q&Q!N(A!Z5!#15Q#/6!#+5Q#04A#)41#'5Q#/6Q#06A#06!#05A#,11\"E-Q\"5.Q\"<.1\"9/1\";,Q\"6-Q\"5.!\"84A\"I2Q\">8!\"B?Q\"Y4Q\".2!\"+6!\":'Q!<)A!G5A\"!91!^41\"&81\"75!\"6(Q!A1!\"(L!\"MAQ!P,Q!2(Q!0$11/&1!55!\")V1\"8K1!'B#1!LEA!6!1.,A!J0!1;GU!![:!!MW!!3B1!,A1&*A!2-A!:/A1,6B1!B4A!BEQ!4B!!+AA&)Q!0)1!0+Q1(HFQ!Z)!!WYQ!J&!!4!Q**Q!B,115/1\"_-A\"A4Q#(6A#051#06!#00A\"O+A\"-,1\"4*1\"\"1A\"V5Q#-6A#&5Q#,01\"E(A!T+Q\".&AQK.Q\"A41#\"4A##4!#!0A\"H*A\"#+A\"-+A\",2Q\"U7!#17!#17!#15!#%-!\"6,A\"3.1\"=3!\"Z5A#.61#'5!#+4A#%31\"U1A\"Q1A\"S3Q\"Z5!#$5!#&41#\"4Q#%31\"]3A\"\\3!\"X31\"\\3!\"]31\"^4A#!4A#$3Q\"_3A\"]5!#$5!#&5!#&5!#'6A#$3!\"Z0!\"A11\"I5Q#+6Q#-6!#16A#17!#1-Q\"?#AA;%!AE31\"[7!#17!#16Q#/5!#$+A\"0&1!O%A!I.A\"=4Q#%5!#&5!#&5!#).1\"?'1!P'!!P.Q\"B6Q#+61#)4Q#.61#06!#05Q#06Q#06Q#06A#06!#05!#0/!\"E.1\"8.A\"<.A\"<.Q\"9,1\"4-!\"5-A\"731\"I2Q\";8!\"GAQ#&71\"81!\"&8Q\"H)1!H)!!E61\");A!]6Q\"-6!\",9!\"@(Q!J.Q!ZGA\"TCQ!V0A!7)1!0%!!/$Q!3/!!]OA\"GOAQ0BCA!K%A!;RQ$,A!?-A!C<31(WY1!VIA!>DQ!1AA\",!!*+1!7-1!;-111111&2B1$/1A&*A!.*1!3)Q!0-QA'J61!Z)!!XY1!M6A!4RA,+!!>,A11>#A!U8Q!XH!!P41*>!\"',1!U(A!=)A!4.!!S:A\"7LQ#&9Q\"G'A!E(A!M/1\"&2Q\"I/A\"D.!\"6-Q\"5,Q\"0,Q\"2,Q\"5-1\"5-Q\"6/!\"N+Q\"35Q#05A#051#06A#-4!#)+!\"&+!\"((A!W4!#.61#+51#(5!#,5!#+)!!X(!!S&Q1E1Q\"R4Q#%3Q\"`41#\"3Q\"_,A\"-,!\"--A\"251#$7!#17!#17!#16Q#02Q\"Z,A\"30Q\"B41#(7!#(51#*6!#*6A#%5!#&3!\"\\31\"^4Q#%5!#&5!#&4!#!3A\"^3Q\"`3A\"^2Q\"[31\"]31\"^41#\"41\"^3A\"_41##5!#&5!#&5!#&5!#&5!#'5!#)5!#&3Q\"_4A#(5Q#.6!#+6!#-61#07!#141\"`,!\"./!\"E61#.7!#17!#16Q#141##01\"I&!!H(1!\\31\"Z41#\"3Q\"`5!#&51#(1Q\"S&!!N)A!^3!#!4Q#06!#*5A#)51#06A#06Q#06Q#06Q#05Q#06!#051#0/Q\"H-A\"5.A\";.Q\"<-Q\"5,1\"4-A\"5-1\"511\"<3!\"=7A\"AAA##:1\"@0Q!]8A\"G+!!R'A!<3A\"!91![71\"!4A\"(9A\"D*A!P+!!NA1\"SHA\"-61!>*Q!1&1!/$A!/)A!FDA\"JTAQKEBQ!I%Q!DD!\"0Q16,!!A01Q8JF!!YIQ!T8Q!>4!!1!!\".QA$,!!1+1!8,!!7,1!7+1!3+!!3*A!5+Q!)9CA!TH!![*!!V81!F5A!01!1)Q!=.!12A3A!UX1!Z8Q!O#Q:5Q\"7+Q!U>!\"ELQ#,6A\"<(Q!E*1!K/Q\"*2Q\"I/A\"D-A\"6-Q\"5,Q\"*.1\">-Q\"<-1\"5.Q\"9,!\"1,A\"25Q#051#051#06A#+6!#0/A\"F)1!X*A\"\"51#/6!#)5!#&5!#&5!#*/!\">$A1='A!Q31\"\\41##3!\"\\3!\"\\3A\"_1Q\"Q-!\"301\"L61#.7!#16!#17!#17!#16!#+3!\"S4!\"^6!#/5Q#15A#-5Q#)5!#*5!#(5!#&5!#&5!#&5!#&5!#&3Q\"`4A##3Q\"`4A#$31\"]3Q\"`3!\"]3A\"_4A#$4A#$5!#&5!#&5!#&5!#&5!#&6!#)6!#+61#(6!#&6A#(6A#+6A#061#-7!#17!#16A#141#'61#-7!#17!#17!#16Q#14A#(3!\"\\.!\":1!\"P5!#&5!#&4A#$41##5!#(5Q#+.1\":0A\"M4Q#06A#&4Q#'5Q#'5A#/6!#06Q#06Q#06A#05A#06Q#+4Q#021\"T-A\"5.!\"8-Q\"5-Q\"5,A\"3-!\"/-1\"50Q\"@4A\">5Q\"BAA#!?!\"R1!\"#6!\"411\"'&1!7.Q![8A\"$8!!^1A!W9Q\"C0A\"#'Q!B8Q\"7KQ\"I@Q!T-Q!5(1!0$A!/%A!31Q\"\"O!\"=PQQ5D3A!I%1!>#A%.!A>+Q!C11A4BDA#R81!U9!!I6A!;D1!6C!!0!Q$.1A*.!A*.!A*0!Q)7SQ!FF1!T(!![*!!WI!!FEQ!2Q!.*A!=+1!88B1%OF!!UXQ!UFA!DQ!T4A\"&(Q!C'Q!7+QQ(J$Q!\\31+U1\"U61\"7'1!<01!_41\"$.Q!G?1!`J1\"L/!\"\")A!I31\"311\"$,A!RB!\"KL1#/21\"/)A!A)Q!P0A\"01A\"H1!\"G,Q\"6,1\"4.1\"93Q\"U3!\"V-Q\":-Q\"5,!\"1/Q\"G6!#05Q#04Q#*51#.5!#05!#--!\"20A\"L61#-51#)5!#&5!#&5!#&4!#'-!\"2/A\"B4A#$4!#!5!#'5!#)4A##4!#!2Q\"Z6!#,7!#17!#16!#17!#17!#16Q#15Q#15A#16A#(51#.6A#&5!#+7!#%5A#)5!#*5!#&5!#&5!#&5!#&5!#&4A#$3Q\"`3!\"]3!\"\\3A\"_4!#!4!#!4A#$4Q#%4!#!5!#&5!#&5!#&5!#&5!#'51#)61#(5Q#+5!#/61#-5Q#,5A#,6Q#06Q#17!#16A#16Q#17!#17!#17!#17!#16!#,4A#%3A\"_4A#$4Q#$31\"^3A\"^31\"^5!#&5Q#(41#&4Q#*5!#-4Q#'4Q#%51#'51#+5A#06Q#06Q#05Q#051#05Q#,6A#'3Q#$-!\"5-1\"8-A\"7-1\"4,!\",-A\"),A\"3.Q\"93!\"A5A\"B>Q\"`CA#\"7Q\"62Q\"061\"?(!!B*!!N61\"$9!!\\5Q![6Q\",81\"B)1!L.A!XCA\"UJA\"061!G+A!1&!!0%A!1(1!<:Q\"8RA\"1JQA(F3A!IU!!.1A3821&NV1!U7!!S6A!JRA<@!\"4.!!Z'Q!9'Q!0/A1(F$!![C!/TQ2J7A\"=(1!9-Q!S6Q\".0!!K9!!XFA\"K71\":(A!G0A\"'31\"2-Q!S81\"=O1#911\"&1!\"\"EQ\"PI1#.1A\"&)1!C+Q!T-Q\"&1A\"D2!\"S/A\"E,A\"5-1\".3Q#\"4Q#'4Q#&4Q#(11\"J1A\"Q6!#-5!#-4Q#&4!#!4Q#%5!#,6!#06!#051#05A#+4A#$3Q\"`3!\"]4!#!4A#&4Q#&5!#&3Q#!5!#+6Q#17!#17!#15A#061#07!#16Q#15Q#16A#16!#17!#16Q#161#16!#-6A#+51#-51#)6!#)6Q#'6A#'5!#*5!#&5!#&5!#\"5!\"`5!#&4!#!4Q#%3A\"_4!#!31\"]3Q\"`4A##3Q\"`4!#\"4Q#%5!#&5!#&5!#&5!#&5!#&5Q#(5A#+51#'51#.61#,5A#*6!#+6!#-5A#.6Q#16Q#16A#16Q#17!#15Q#16Q#16Q#15!#*4A#$4!#\"4A##4Q#(6A#15A#.41##5!#&5Q#,5Q#.4Q#%41##3A\"^3A\"_4Q#'4Q#06!#06!#051#04Q#)4!#!4Q#%4Q#'21\"[,Q\"7,1\"4,1\"2/Q\"F4A\"`1!\"N-!\"8.1\"61!\"75!\"@#1&9\"A)1A1+.!14.119-A1:.11:.A15/!A/4!1);\"Q&@#Q$HU1!O&A!O%!!NU1\"I\"Q3C!\"!7A\".,A!L'Q!;'1!3-Q!)@3Q!TCA)WQB-FA\"Y.!![)!!D2Q\"%4A\"$1A!H=Q\"#EA\"I2A\"*(Q!G3A\".3Q\"3-A!X9Q\";N!#-<1\"M,!!W*Q!H,1!\\0!\"/11\"K2!\"T.!\"<,Q\"2/A\"@4Q#%4Q#%4Q#)5!#/4!\"Z4Q#&5Q#05A#-4A#$41##4!#!5!#&51#-51#05A#,51#(4!#!4A#'41#$41##4A#&4Q#&41#\"3Q#!5Q#.6Q#16Q#17!#17!#17!#17!#16Q#161#16!#16A#17!#16!#17!#161#06A#06Q#(5Q#+5Q#)5!#)5!#)5!#&5!#&5!#&5!#&5!#&4!#!4!#!41#\"3Q\"`3A\"^3A\"_41#\"3A\"_41#\"5!#&4!#!5!#&5!#&5!#&5!#&5!#&5Q#(5Q#&61#*6A#,51#(5Q#+61#'6Q#)6!#.61#16Q#15Q#161#17!#161#16!#16!#15Q#/3A\"`3A\"_3!\"\\6!#-7!#17!#14A#*4A#$5!#&5A#*4Q#%4A##3Q\"`4A#%4Q#%4Q#,51#05Q#04Q#04Q#'41##3Q\"`4Q#$41#%.Q\"?,Q\"2,Q\"11Q\"P4Q#%3A\"^0A\"J.1\"80!\"62Q\"77!\"G@1#$EQ#*?Q\"R4!\"*8!\"?/A\"%(1!<-Q!Z6!\"!8A\"!6!!^5Q\".7Q\">.A!T)Q!J5A\"2E1\"LEQ\"\"71!;,Q!-(1!0&Q!0%A!1'Q!@1Q\"\">A\"@FA\"+I!QII210J#!!KD!!I$!!GT1!G4A!E4A!E$1!ET!!GDQ!JUQ!L%A!M%!!L%Q!KD1!IC!/G2!D@!\"\"7!\".-Q!V(A!?'1!4)!!02B!&ECA!UC!3TQRKBA\"Y+Q!O)A!F21\")4!\"'/Q!M;!![E1\"A71\"6)A!I.Q!`6Q\"@-Q!\\1!\"!F1#\"F!#(0!\"!*A!L,1!V.1\")0!\"=4!\"T11\"M-!\"8,Q\"72A\"W4Q#%4!#!4Q#%5A#,4Q#,51#05Q#/4Q#)41##4!#!41#'5!#'6Q#*5Q#,5Q#)4A##4Q#%5Q#14A#'4!#!4A##4A#$5!#&51#(7!#15Q#15Q#17!#17!#17!#17!#16!#15A#16A#.5A#-6A#16A#16!#.6A#)5Q#.5!#,5Q#)5Q#)6A#(6A#&5!#*5!#&5!#&5!#&5!#&5!#&41#\"3Q\"`3Q\"`3!\"]3!\"\\31\"]4!#!4!#!41##4!#!5!#&5!#&4Q#$5!#&5!#&51#'51#*51#(7!#(5A#-6!#*61#)5Q#+5Q#,6Q#16Q#16Q#16!#15Q#16!#161#16Q#16A#14Q#)4A##3Q#!6A#16A#16A#15Q#-4Q#%5!#&5!#'4Q#%3Q#!4Q#,5!#.4!##4Q#&5Q#051#04Q#,4Q#%3A\"_41#\"41#\"4Q#'1Q\"S,Q\"3,A\"51A\"S4Q#%41#\"2A\"W/!\"@/A\"81A\"731\":9A\"QCA#*FA#)!!D2A!3+1!0'Q!0&1!0&Q!4(1!:.1!Q61\"(=1\"0BQR&D11ZDAADF!15HRA1HBA.GRQ.HC1.H3!.H3!.F\"A1C1!>BQAT?Q!]9!\"'2Q!`-!!N)!!>'!!8(Q10.11,9B!\"LCQ&QQALNA\"L;Q\"C,A!R*Q!M4!\"-51\"&0Q!R71!WB1\"98A\"8*A!K.A!W7A\"<0A\"!/1![@!\"JH!#%71\";,!!V,!!S-1!^0A\"22Q\"O3Q\"W0Q\"K-A\"0.Q\"A4A#$41##3Q\"`4Q#%51#-6!#051#05!#-4Q#%4A#%4!#\"4!#\"4A#%51#+51#-4Q#)3A\"_5!#+7!#15Q#-3Q\"`4A#$41##3A\"_5A#-7!#15Q#161#17!#17!#17!#16A#15A#15Q#15Q#.5A#-71#+61#-5Q#.5Q#+51#)6A#%51#)51#)5!#(5!#'5!#&5!#&5!#&5!##5!#&5!##3Q\"`4!#!3A\"_4!#!3A\"_5!\"^3Q\"`3Q\"`3Q\"_5!#&5!\"^5!#&41#\"5!#&5!#&5!#&5!#(61#(5!#.51#'5!#*5!#(7!#&5!#+6A#16Q#16A#161#17!#151#151#161#16Q#161#15!#&5!#'6A#17!#17!#16A#141#(3Q\"_4Q#(4Q#%4A#$5A#-6Q#05A#-4A#$51#*5Q#.4Q#(4A#(3Q\"`4Q#(41#$4Q#%4A#&0!\"G-Q\"<3!\"[4Q#%31\"]3Q\"`2!\"L.A\"=/1\"61A\"73Q\"==!\"WCA#)FQ#*:!\";41\"+61\"<+Q!T(1!A-Q!R4!!_51!Y51!Y6A\"&:A\">3A\"/*1!I+Q!P7A\"7CA\"=G!\"!<1!=3A!0.1!0(A!0&A!0%A!5'!!2(!!@+!!K/A!^4Q\"*6!\",8!\"151\"0+Q!M,!!T3Q\"50A\"&/!!X=1\"HHA#/:!\"F.Q![*Q!U-A!Y.!\"01Q\"E41\"Z3!\"[/A\"=-!\"82Q\"Y4!#\"4Q#%4!#\"4Q#%61#)5Q#,5Q#/5!#&41#\"51#,51#-4!#\"51#)6!#)61#'4Q#%4A#&6Q#17!#15Q#/4!#$3Q#!3Q\"`41#%6A#061#15Q#15A#17!#17!#17!#161#16!#16!#15A#.61#-61#17!#)6!#.5Q#+51#+51#+51#'5!#&5!#'5!#'5!#&5!#&5!#&5!\"_4!#\"4A\"]3Q\"`41#\"4A#$3!\"]3Q\"`31\"\\4!#\"4Q#%3A\"^5!#&4Q#$4A#$5!#&5!#&5!#&5!#&5!#'5A#(6!#)6A#'6A#'5A#+51#,5Q#*5A#/6!#061#161#161#16!#15!#16!#15Q#16Q#15Q#06A#07!#16Q#15Q#15Q#161#/4Q#&4Q#%4Q#%4Q#%61#.6Q#06A#041#'4A##5!#'5A#+4Q#&41##5A#05Q#/4A#%4Q#%3Q\"`1Q\"S4!##4Q#%41##4Q#%2Q\"Y01\"F01\"8/A\"51Q\"571\"F<1\"UC1#)EQ#'=1\"F5!\"06A\";.A!`(!!E)A!L2Q\"\"5!!\\51!X5Q!]7Q\"581\"71A\"%+Q!J.1![7!\"4C1\"AF1\"0AQ!O9Q!D3Q!7.!!6+!!3'A!2'!!1'!!2'A!5&A!4&1!6&A!;'1!<&A!<'1!;&1!6'1!6'!!7(!!4)Q!7,!!1.Q!,4A1&?\"!%H\"13N!ARKABBC!\"R3!\",+A!M,1!T21\",71\"231!X2Q!S;!\"&Q\"KH!#'<1\"H0A\"#-1!T-1!Z.A\".0Q\"C3A\"U41#\"11\"Q-A\"90A\"L4Q#$4Q#'51#-41##41#\"5!#.5!#/6Q#$4A#$5!#,6A#05Q#041#\"4A#$4Q#&4Q#%3Q#\"5Q#06Q#17!#16A#141#'4!#\"4A#$6!#06A#16!#15A#16A#161#17!#16A#16A#161#161#*6!#+5A#'61#/5Q#/6!#/6!#*61#+5!#&5!#&5!#'5!#&5!#&5!#&5!#&4A#$4!#!4Q#%3A\"_3Q\"`3A\"^4!#\"3!\"]3!\"\\3!\"\\4!\"[3Q\"_4A#\"41#\"41##4A#$5!#&5!#&5!#&5!#&5!#'5!#)5!#'5!#)6A#&5A#+51#*5A#(5Q#/61#061#16A#15Q#16!#16Q#(51#15Q#16Q#16Q#16Q#17!#16A#16!#16A#16A#15A#+3Q#!4!#!4!#!61#.6Q#06Q#06A#04A#$4Q#&4Q#+4Q#&41##5A#06Q#051#-4!#\"4Q#%4A#)4Q#+4Q#%41##5Q#*4Q#)2A\"X/1\"D.A\"70Q\"02A\"971\"FA\"CD1\"CCQ\")A!!T=!!E8Q!;4!!41Q!5-Q!4,Q!1+!!1+1!0*Q!/*!!0*Q!0+1!1-!1+2!A'41A,8QQ*@1A'E114K!!UJAR0FQ\"E=A\"B3!\"),A!N,A!T2!\"*61\"25!\"$1Q!X81!];Q\"-81\"7/A![+1!M2!\"+7!\"@0Q\"&0!\"!E!1EC!ADF11DGAQKGQ!SFQ\"$H!\"5E1\"C@!\"C8A\"9A\"K?A\"^C!#&DA\"\\=A\"I81\"97A\"=5!\"6,Q!X*A!C*A!L.A!X3!!Y4A!Z4!!W4A\"\"5Q\"$8!\"07Q\"93A\",01\"!.1!_-1!]/Q!Z1!!`1A\"%6A\"-8!\"49Q\"39A\"49A\"5<1\";:A\"::A\"9:!\";61\".2Q\"(0Q\"!-A!Z-!!V.A!\\01\"!41\"+7A\"75A\"&4A!]3Q!Y5Q!^8A\".9!\"821\"(-Q!S-1!U01\"%21\",01\"!/Q!_8!\"8BA\"V?!\"R7!\"7.Q!`-A!Y,Q!]-1\"-.Q\":21\"P4A#\"4Q#.4Q#'3Q\"`4!#\"4A#%5Q#/6Q#06Q#061#/4!##4Q#%4Q#&3Q\"`5Q#/6Q#06!#06A#05Q#04A##3Q#!4A#%6!#.5Q#06A#06!#16A#16Q#16A#16Q#/6A#15Q#15A#.6!#-5A#15Q#16Q#15A#15Q#16!#15A#)61#)6A#$5Q#&51#,5A#*61#&51#)5!#&41#$4A#$4Q#$4A#$5!#&5!#&4Q#\"3Q\"`4Q#$3Q\"^3Q#!3A\"_31\"^3A\"_2Q\"[3!\"Y3!\"Z4!\"[31\"]3A\"_3!\"]3Q\"`3Q\"`41#\"2Q\"[4A#$3Q\"`5!#&4!#!5!#&5A#*51#)5!#(5!#&5!#*5!#&5A#)5A#-6!#,5Q#.6!#(5!#)51#(6Q#(5A#16A#15Q#16!#16!#161#15Q#.5Q#/51#16Q#15A#04Q#*61#06A#05Q#06A#06!#061#041#%4Q#%4!#!51#,6A#061#061#061#04A#'4A#$4Q#%4A#$4A#*6Q#06Q#06A#05!#-3!\"Z/1\"C.Q\"7-A\"11A\"44A\"791\"D=1\"VB!##D!#\"B1\"X:Q\"D71\"771\"@2Q\"1+Q!Q)!!G*!!G-Q!Z3A!`5A\"!4Q!\\5A!Y6!\"\"7A\"'7Q\",71\"271\"341\",2!\")1!\"\".!!]-!!U-!!Q,1!O,A!P,1!V,1!V,1!X.1!^11!_11\"(4!\"15A\"/71\"561\"261\")3Q!`3Q!\\6!!]7Q\"&8A\"25Q\"/1Q\"&,Q!Q+Q!W2A\")3A\"31!\"%/1!_41\".>!\"J@A\"W;A\"A21\"*.1!]-A!Y-Q!^-!\"+/Q\"92!\"L41#%4Q#/4Q#(4Q#%4Q#%4!#$5Q#-6Q#06Q#06Q#05A#,4Q#%41#\"4A#$51#(6A#05Q#061#06Q#05Q#03A\"_4!#\"5A#.6A#06A#06!#05Q#16A#17!#17!#17!#15A#151#17!#'6!#/5Q#161#16A#16!#16!#16A#&5!#*5!#(5!#*6!#)51#'5A#*5!#*5!#&5!#&5!#&4Q#%3Q\"`4Q#%4!#!4A##4A\"]3!\"]4A#\"4!\"^4A\"[3!\"\\31\"^2Q\"\\3!\"\\31\"]3!\"\\2Q\"[3!\"]3A\"_2Q\"[3A\"_3Q\"`41#\"3A\"_3A\"_3!\"\\4A#$4Q#%4A##4A#$4Q#%5!#&4A#$41##5!#&51#'61#&5Q#-5A#,51#*7!#'5!#,5!#*5Q#*5Q#16A#161#16A#16!#161#+5A#,61#-5A#16A#06Q#06Q#061#061#06!#061#061#061#03Q##3Q\"`4Q#*61#06A#05Q#06A#06Q#051#*4A#$41#\"4A#$5Q#06Q#061#06A#05A#031\"`0Q\"M/Q\"7.A\"70!\"62!\"461\"@:!\"I=Q\"WAQ#\"E!\"_AA\"W;A\"@8!\"971\";2!\".-Q!^+Q!J(Q!I+A!O.Q!]2A!`5A\"$51\"\"5A!^4Q!X5!!X4A!\\4A!`5!\"!61\",71\"-6Q\"081\"48A\".61\"+71\"07A\",5Q\"+5A\"+61\"*4Q\"!3A!\\6A!\\5Q!_7Q\"'9!\"+7!\"-51\".0A!`,!!R+1!M-Q![2A\"*4A\"71A\"+0A\"%61\"1=Q\"M@A\"T;!\"I4!\"2.1!`-A!Z,Q![-!\"#.1\"10Q\"C1Q\"T41#%5Q#051#-4A#$4A#$4A#&6!#061#06!#06!#06Q#041#*3A\"_41#\"51#*6A#05Q#05A#06A#06Q#05Q#04Q#)5A#.61#061#06!#061#.5A#17!#16Q#16A#16A#16A#/61#(5!#+6!#-5!#*61#15Q#16!#151#15A#,51#'5!#&5A#'6!#)51#(51#'5!#&5!#&4A##3A\"_41##41#\"3Q\"`4A#$4!#\"3Q\"`3Q\"`3!\"\\3!\"\\3Q\"`2Q\"[3Q\"\\4A\"^31\"]31\"]41\"`3A\"^41\"Z4!#!3A\"]4!#!3Q\"_4A#$31\"]4Q#%41##3Q\"`4A#$41##4A#&3Q#\"5!#&4A#$41##4!#!5!#'5!#&6Q##5A#.6A#$51#)61#'6!#(6!#(5Q#,6!#16Q#15Q#16!#16!#.51#-5A#)6!#06!#06Q#06Q#06Q#061#06!#06!#061#061#06!#04A#'4Q#*61#06A#05A#061#05A#06!#05A#)41#$3Q\"`5A#06Q#061#06!#06Q#05Q#/41#$2A\"Q/A\"C/A\";/1\"02!\"44A\"98!\"@;1\"L@1\"_C!#%CA#!BA\"U=A\"I81\"95A\"53Q\"11!\"$-A!W+1!Q*Q!L*A!S.Q!Y/Q!^1Q!_2!!_31!_3Q!]2Q!]1Q!S1Q!S01!R/A!Q0!!Q/1!P11!M3A!V4A!X41!^51\"#6!\"!6!\",61\"-51\"+0A!_.Q!],1!V-1!V-A!X01\"(1A\"*0A\")0!\"%2Q\")8!\";?1\"NAA\"V=Q\"K7A\"60!!`.!![-!!Y,Q!\\.!\"&-Q\"70Q\"D1A\"R41#%5Q#/51#04Q#'4A##4Q#'5A#.61#06!#05Q#06Q#06!#041#&4A#%5A#*61#06A#06!#06!#06!#06Q#05Q#061#06A#05A#06!#.5A#-5Q#/6!#15Q#16A#16A#15Q#051#+5!#*6A#%5A#)5A#/5Q#061#06!#.51#)5!#&5!#&5!#&5!#(5!#'5!#*4Q#%4Q#%4Q#%41##4!#!5!#&5!#&4Q#$4A##3Q\"_4!#\"3Q\"`4!\"^41\"]3!\"\\3!\"\\3!\"Y4!\"]2Q\"Z3!\"X3Q\"V31\"]2Q\"[31\"W3Q\"\\3!\"Z31\"]31\"]3A\"_3Q\"`3Q\"`3Q\"`3!\"]3Q##41#\"41#\"5!#&5!#&5!#&4A#$4A#$5!#&5!#)61#&5!#/61#'5!#+5!#(5!#(5!#+5Q#/51#16!#161#15!#+61#$5!#(5Q#,5Q#061#06Q#06A#05Q#06A#05A#/5Q#/5Q#06!#061#05Q#06A#06Q#06Q#06A#06!#06!#06Q#051#/4Q#'4Q#-61#061#06!#051#061#06Q#051#.3Q##2Q\"R01\"J/!\"@/Q\"41A\"73Q\"86Q\"B;1\"N?A\"[AQ#%E!#'D!\"`AQ\"V=!\"H8Q\">61\"85!\"13!\"03!\"'-Q!],Q!R+1!O+!!J)1!J+1!S+A!S+!!N*Q!M*A!K+A!K,!!N,Q!P-Q![/A!_/1!T-Q!R-A!^,A!S+A!O*1!E*1!R.!!T01!`11\"*2!\".1Q\",2Q\"+1A\"'6!\"61\"W@A\"T:A\"I4A\"10Q!`-A!Z,A!X,Q!Y+A\"$-Q\"1.A\"=0A\"K2!\"U41#%5Q#06A#04A#*3Q\"`4Q#(6Q#05Q#06!#06!#061#06Q#05Q#04Q#.5A#/61#06!#05Q#06!#06!#06Q#06Q#06Q#06A#06A#05A#.6A#&51#-7!#*61#17!#161#161#15A#,5Q#)6!#(5!#+61#'5Q#/51#(6!#+5!#&4Q#&5!#&5!#&5!#&5!#&5!#)5!#&4Q#%41##4!#!3Q\"`5!#&5!#&5!#&4!#!3Q\"`31\"^2Q\"[31\"]2Q\"[2Q\"[3A\"[4!\"^31\"]3!\"]3Q\"Y2Q\"[31\"Z3A\"]3Q\"_3!\"[3Q\"`31\"Z3A\"_3!\"\\4!#!31\"^3A\"^3A\"_41#\"4!#\"41##4A#$41#\"41##5!#&4Q#%3A\"_4A#$5!#'51#+5A#'51#'5!#&5!#&5!#&5!#&5!#'61#-6!#,6Q#+6!#/5A#,61#(5A#&5Q#,6!#061#06Q#05Q#051#06!#.5!#)5Q#,6!#/6!#06A#06Q#06Q#06!#05Q#05Q#061#06Q#061#06A#05Q#06Q#06Q#06A#061#06!#06A#06Q#061#051#-4A#!21\"T0Q\"N1A\">11\"921\"831\":71\"A9A\"J3!\"'/!\"\"-Q!Y-!!X,A!Z,1\"\",1\"/-!\"6/A\"B1!\"O3!\"Y41#$5!#06Q#06!#051#,61#/6!#05A#05Q#051#05Q#061#06Q#06Q#06A#06A#06!#05A#05Q#+6Q#+61#-6Q#06Q#06!#061#05A#/5A#-5A#)51#,6!#/6Q#16!#151#151#/5Q#'5!#'5!#*6A#$51#)5Q#'6!#.5Q#*4Q#%41#\"41##4A#$4A#$4Q#%5!#&5!#&4!#!3Q\"_4!#\"3Q\"`3A\"_4Q#%3Q\"_3A\"_3Q\"`3Q\"^3A\"]3A\"]3!\"\\2Q\"[4!\"]3A\"^3A\"X3A\"Z31\"]3Q\"X31\"Y3!\"X31\"Y3A\"Z41\"^4A\"[31\"^4!\"^3Q\"[2Q\"[31\"]2Q\"[4!\"^4!\"\\4!#!3Q\"`5!#&4!#!41##3A\"_4!#!4A##4!#!5!#&6!#)7!#%5!#)5!#&5!#&5!#&5!#&5Q#*5!#+6A#(5Q#/51#*5!#+6!#)4Q#'51#,51#06Q#05Q#06!#05A#.7!#%4Q#+5!#-6!#051#06A#06Q#06!#05Q#06A#06!#05Q#06A#06!#06Q#06Q#06Q#06Q#06!#06!#05A#05Q#06!#06Q#06!#05!#-4!#%3!\"Z2!\"L0Q\"B1A\"91Q\"72A\"941\">6Q\"C:Q\"O=Q\"W@!\"_CQ#(CQ#)EA#'EQ#%AQ\"V?Q\"NQ\"O?!\"[A1\"X@!\"Z>A\"R9Q\"?4!\"00!\"#.1!]-A!Y-1!X,!!X+A\"!+A\",-Q\"5.Q\"<0Q\"L1!\"O1Q\"T4Q\"`5Q#+6A#06Q#06Q#06Q#06Q#05Q#06A#06!#05Q#061#06Q#06Q#06Q#05Q#05Q#051#-5!#*7!#&51#06A#061#06Q#05Q#051#051#)5A#)51#*5A#-6!#05A#16!#15Q#-61#)6!##5!#&5!#&5!#*51#+6!#'51#(5!#&4Q#$31\"]4Q#%5!#&4A##4Q#%5!#&5!#&4!#!31\"^3A\"_4!#!31\"]3Q\"`4!#!4!#!31\"]3A\"\\31\"\\3!\"X3!\"[3Q\"`31\"X3Q\"^31\"W3A\"Z31\"]3!\"Y4!\"]3Q\"Y41\"]3A\"V2A\"[2A\"Z31\"W2Q\"Z3A\"_31\"]4!#!31\"^3Q\"X31\"]3!\"\\4!#!5!#&41##3A\"_41##3!\"\\3A\"_4!#!4A#$41##4Q#*5!#(5!#&41##4A#$41#\"5!#%6A#&4Q#,5A#)5Q#-61#$5!#%4Q#%4Q#%5Q#+5Q#06!#06A#05Q#,5A#061#$51#%4Q#*6A#05A#05Q#06Q#06!#051#.5Q#-4Q#)51#-6A#06!#06A#06Q#06Q#06Q#06!#05Q#.3Q\"[2A\"Z4A#&6A#.7!#07!#16!#16!#15!#'4!#!2A\"W3!\"C2!\"@1Q\"81Q\"73Q\"861\"B7A\"D:A\"L<1\"S?1\"^A!#$BA#$DA#)E1#%E1#\"E!#\"D1\"YB1\"_AQ\"Z@A\"Y@!\"Y?A\"Q>1\"N>A\"O?A\"XA1\"W@A\"YAQ\"]CA##CQ#&BQ#$A!\"`=1\"R:!\"F7!\"<3A\".0Q\"$-Q!\\-1!X,A!X,Q!X+Q!X,1!]+!\"\"+Q\"0,A\"6-1\"90!\"H1!\"N11\"P2Q\"[3A#!6!#06Q#06Q#06Q#06Q#06!#06!#06!#05Q#-6A#+5Q#06Q#06Q#06Q#06!#05Q#05Q#-4Q#)6A#'4Q#16!#06Q#06!#06!#05Q#06!#$6A#%51#(6!#&6Q#+51#06!#.51#+5!#*5!#&5!#&5!#&5!#)6A#%51#(6!#%5!#'5!#&3Q\"`4A#$4!#!41#\"5!#&4!#!5!#&3Q\"`41#\"31\"^31\"^4!#!3!\"\\31\"^2Q\"[2Q\"\\3A\"Y3A\"_3A\"_2Q\"[4!\"\\31\"]31\"X3A\"[3Q\"\\4!\"X3A\"Y3!\"Y2Q\"Y3A\"X31\"X3Q\"^31\"]4!\"X2Q\"[3Q\"^3A\"_2Q\"[3A\"_31\"^31\"]31\"]3!\"\\2Q\"\\3A\"_41##41#\"4Q#%3A\"_3A\"_3Q\"`4!#!4A#$5!#&5!#'5!#*4A#$3A\"_3A\"_4Q#%5!#'6A#\"51#-5A#)51#'5!#&4Q#%4Q#%5!#&51#(5Q#.61#/5Q#.5Q#*5A#*4Q#*4Q#%5!#/5Q#06!#061#061#06!#06Q#(5!#.6A#&51#05!#05A#06Q#06Q#06Q#06!#06!#04Q#*1Q\"R11\"O2A\"Y3A\"^5!#-6A#06A#06Q#06Q#061#.5!#'3A\"]31\"Q3Q\"L2!\"C21\";1Q\";31\";31\";3Q\"<7!\"@8!\"@8Q\"B:!\"M!\"X>Q\"Y?A\"Z?A\"Z@Q\"Z?Q\"Z@!\"Z@1\"\\?Q\"Z?1\"W=!\"X51\"421\".0A\"'/1!`.A!]-A!\\-1!Y,Q!Y+Q!X*1!W)Q!Y*Q!`*A\"#*Q\"',!\"1-A\"9/!\"A0A\"J0Q\"M1!\"O2!\"V4A#&5Q#06Q#06Q#06Q#061#061#05!#/51#.6A#*61#05Q#06A#05Q#061#06A#05A#05Q#-5!#'51#)5A#-5A#,6Q#06Q#061#05Q#.4Q#+5A#)4Q#(5!#*5Q#+6!#,6!#+5Q#)6A##51#$4Q#%5!#&5!#&5!#&51#'51#(5!#&41##4!#!3A\"^4!#!41#\"41##4Q#%4A##31\"^41#\"3Q\"`2Q\"[4!#!31\"^3!\"\\3A\"_41#!3Q\"X31\"Z3!\"[3!\"[3A\"]3A\"[4A\"Z3!\"[31\"\\3!\"Z3!\"Z31\"Z3!\"Y3!\"X31\"X31\"^31\"W3Q\"\\31\"Y3Q\"Z3A\"Y3Q\"Y3Q\"`3!\"]31\"]31\"^2Q\"[3Q\"`31\"\\41\"]3Q\"`4A#$3A\"_4!#!41##31\"]3Q\"`4A##3Q#!5!#&5!#&5!#&41#\"4!#!41##3Q#!4A#'5!#&5Q#,6!#(5!#*4Q#%4Q#%4Q#%4Q#%5A#&5Q#)5Q#.5Q#.6!#%51#(4Q#%4Q#%5!#*5Q#051#06!#06!#06!#051#.4Q#-4Q#)5A#05Q#05Q#05Q#05Q#06Q#061#051#05!#(1Q\"R01\"I0Q\"M11\"P31\"]4Q#'5Q#06!#06A#06!#06!#05!#&4!#!3Q\"[3A\"T3!\"O3!\"E1A\"D1A\"=0A\";01\"<1Q\"81Q\"62A\"231\"131\"12Q\".2A\".1!\"00Q\"10A\",/1\"$/1\"$.1\"\".1\"\",Q!`.!!^-1\"#-A\"\"-Q!_.!!^,1\"!,!!_*A!Z*1!X(Q!W(1!Z(1![*A\"$+A\",,!\"2,1\"4-A\"9/A\"C0!\"H0Q\"M11\"P31\"^4Q#+5Q#05Q#06A#06!#051#04Q#.4!#%41#$4Q#,6!#+5Q#/5A#061#06Q#061#05Q#051#-5Q#%5Q#)6!#+61#*6!#05A#05A#04Q#.6!#&4A##41#\"4Q#&5A#+5A#*61#)5Q#)5A#%5!#&4A#$4A#$41#\"5!#&5!#(61#(5!#'4A##3Q#!3Q\"`41##3Q\"`3Q\"`4A#$3Q\"`4!#!31\"^2Q\"[41\"[31\"]3!\"\\4A##41\"^4!\"]31\"X31\"^2Q\"[3Q\"\\3!\"Y3Q\"U3Q\"\\3Q\"U3Q\"\\31\"Y3Q\"Z31\"W31\"W3!\"Y3!\"X21\"V3Q\"U3Q\"U3!\"\\2Q\"[3A\"]3Q\"W31\"\\31\"X31\"X3Q\"Y3!\"\\3Q\"`3Q\"X2Q\"[3!\"[4!#!3!\"]4!#\"31\"]3Q\"`2Q\"[2Q\"[31\"^3A\"_41#\"4A##5!#&3Q\"`4!#!31\"]4!#\"3!\"\\5!#&5!#'61#&51#*4Q#%4Q#%3A\"_41#\"4Q#%4Q#&51#)6!#.5A#/5!#(4Q#'4Q#%4Q#&4Q#'4Q#(5Q#-5Q#*5A#/5Q#06A#(5Q#'5!#+5!#-5!#/51#06!#05Q#06!#05Q#05A#05!#.1Q\"S0Q\"M0A\"K0Q\"L0Q\"K3!\"W3!\"Y4!#'5Q#(4Q#*4Q#)31\"]3!\"Y2!\"V1Q\"R0Q\"J01\"I/Q\"E/A\"E.Q\"@.A\"<.A\";.A\";/1\"6/!\"501\"501\"4/Q\"0/Q\"./A\"0/1\")/1\"(/1\"%.1\"$,1\"(,1\"\"+1!`*!!Z(A!W'A!W'1!R&Q!N&1!O&A!Q'Q!W(1!Y)1!_*1\"!*1\"\"*A\"\"+Q\"/.1\"=01\"H0Q\"M11\"P3Q#\"51#.61#061#06!#04Q#*4!#&2!\"W0A\"L2A\"X5!#+5!#.5!#/5A#06!#061#05Q#05!#04Q#,4Q#&5!#(51#*5Q#,61#-5Q#,5Q#,6Q#$4Q#)4!#\"4Q#%4Q#%51#(5!#(5Q#*5Q#+5!#,4!#\"41#\"31\"^3!\"]41#\"4A#$5!#&4A#%3A\"_4!#!3!\"]3A\"^31\"^4!#\"41##4!#!41#\"31\"^4!#!3A\"\\31\"[3!\"\\3Q\"]31\"Y2Q\"[3Q\"^3Q\"\\4!\"W3Q\"^3A\"V4!\"]3!\"[3!\"[3!\"[3!\"Z31\"[3A\"W31\"X31\"X3Q\"V3A\"V2Q\"Z2Q\"Y3!\"Y2A\"Y3A\"]31\"W3Q\"]4A\"V2Q\"[2Q\"Z3Q\"Y3A\"Y3A\"Y3A\"Y4!\"^3!\"]3!\"\\3!\"\\4!#!31\"]3Q\"`4!#!31\"]3A\"_31\"]31\"^3A\"^4!#!4A#$31\"^3Q\"`31\"^3Q\"`4!#!4Q#&41#&4Q#'4Q#(4Q#%41#\"3A\"^4A#$4Q#%4Q#%6A##51#-5Q#&6!#)5!#&4Q#%4Q#%4Q#%4Q#%6!#-5Q#-71#*5Q#05Q#,6!#&5A#$4Q#'4Q#+6A#'5A#05Q#05Q#05A#051#04Q#,21\"Y0A\"L0Q\"N/Q\"F0Q\"M0Q\"M1A\"Q2!\"P2!\"W21\"W2A\"Y1Q\"P1Q\"T0Q\"L/Q\"F.Q\"@-1\"9+A\",*Q\"%*1\"!*1\"!*!!`*!!`)!!\\)A!](1!Y(1!Y(!!X&1!S%A!S%A!S%A!S$A!R%A!O%1!M$A!J$1!J$A!J%1!K$!!I$A!J&!!N%!!K&A!L'!!N'1!O'1!O)!!V*!!^-A\"6/Q\"F0Q\"M21\"W3Q#%51#05Q#/6!#/4!#!2A\"Y1!\"O0A\"L0A\"K1A\"T4A#)6!#,6!#-5A#-5A#.4Q#.51#*4Q#)4Q#)4Q#&4Q#%5!#*5A#)5Q#.6!#,51#,5!#'4Q#&41#\"41##41##4Q#%5Q#(61#(5Q#)4!##4!#!4!#!41#\"3Q#!3Q#!5!#&5!#&4Q#%4A##3A\"_31\"]31\"^31\"^3Q\"`31\"]3Q\"`31\"^31\"^31\"]31\"]3Q\"]3!\"Z3Q\"`2Q\"[2Q\"[2Q\"[2Q\"Z3!\"Y3!\"Y3Q\"]31\"]3A\"Z3Q\"Y3A\"Y41\"]2A\"V3Q\"U2Q\"[31\"X31\"X21\"X3!\"U2Q\"S3!\"X3Q\"U2Q\"U3!\"Y31\"W2Q\"Z2Q\"[4A\"^4!\"Y3!\"]3A\"\\3A\"\\3!\"\\3A\"Y31\"^3Q\"X3!\"\\3A\"V3!\"\\4A\"]3!\"X3!\"X31\"]3A\"_2Q\"[3Q\"`4A##3Q\"`4!#!3A\"_3A\"_2Q\"[3!\"]4!#!41#\"4Q#$4A#$4Q#%41##41#\"31\"^31\"]4!#!4Q#$5A#)5!#,6!#%5A#,4Q#%4A##4A#$3!\"]4Q#%4Q#*5Q#*51#+51#+6!#+4Q#(4Q#%4A#$2A\"Y2!\"T3A\"]5A#)5Q#,5A#+5Q#,5Q#,4Q#\"11\"Q0A\"J/Q\"E0A\"K0!\"G0!\"G/1\"C01\"J0Q\"M0A\"K0Q\"M1!\"O11\"P11\"O01\"I.Q\"@-!\"5+!\"&(!!T%!!K%A!D$1!A#1A>#1A>$1Q=#1Q>#1A>$!A=$!A=#AQ?#QAA$AA:#AAB$AA:#AQ?#A!<#A!;$A!4#1!9#A!6#A16#113#Q19&A!G)A!\\-!\"30A\"J0Q\"M1!\"N11\"P3A\"]31\"`31\"`11\"P0A\"K01\"J/Q\"E0A\"J0A\"K2!\"U4Q#&6Q#(6!#06Q#(5A#.6Q#'4Q#(4Q#*4Q#%4Q#%4Q#%4Q#(6A#'5A#+5Q#&6A#*51#$41##4A#$31\"^4!#!4Q#%4Q#'4Q#'4A#&4A#$4A#$31\"]3A\"_3Q\"`41#\"5!#&5!#&41#\"3Q\"`3!\"\\3Q\"`3Q\"`3!\"]3!\"]31\"]3A\"_3A\"_3A\"_3!\"]2Q\"Y3Q\"]3A\"V31\"]31\"W3!\"[3Q\"`31\"X4!\"\\31\"^3A\"W3A\"V3!\"X3Q\"[3!\"X31\"X3A\"V3!\"X2Q\"X21\"X31\"U3!\"T1A\"S2Q\"W2Q\"Z2!\"U3!\"W21\"U31\"T31\"W3A\"W31\"X31\"X2Q\"Z3Q\"Y31\"Z4!\"W3!\"]31\"[4!\"[31\"Y41\"]31\"]41\"Y3A\"_3!\"\\2Q\"[4!\"Y2Q\"[3A\"]3A\"_31\"^3A\"_3A\"_4!#!4!#!31\"]41\"`31\"]3Q\"`41##4Q#%4Q#%41##3A\"`41#\"4!#!31\"]3A\"_41#\"4A#&51#*4Q#(4Q#&4Q#$3Q\"`4A##4!#!4Q#$51#'5!#&5!#+5A#*5Q#*4Q#)4Q#(3Q\"_/Q\"F/Q\"E1!\"M21\"V41#!5Q#(5Q#,5Q#,4A#&2A\"Y1!\"N0!\"H0!\"H/1\"B+Q\"**A!`*Q\"\"+!\"%-!\"5.Q\"?/A\"D/A\"D/A\"D/A\"D/Q\"F/!\"?+Q\"+*1!Y(1!R&!AK&1Q@$AQ;#AA8#!!:#Q!9\"A!:\"A!9#1Q8\"!!1\"!11\"1A5\"112#!!2#Q!2\"A!1\"!!1#!14#AQ4#1!;'!!O*A\"#-Q\"8/Q\"F0Q\"M0Q\"M0Q\"M0Q\"M01\"I1!\"N0A\"K01\"I0!\"H/Q\"E01\"I0A\"K11\"O3A\"^4Q#+5!#*6!#+5Q#-4Q#(4Q#'4Q#'4Q#%4Q#%4Q#%4Q#%4Q#%4Q#(51#&51#'51#&4!#!3A\"_3Q\"`41#\"41#\"4!#!4Q#%4Q#&4Q#&4A##41##3A\"^3A\"^4!#!3A\"_4A#$4!#!41##4!#!3Q\"`31\"Z3A\"Z3A\"^3!\"]31\"^31\"^4!#!3A\"^41\"Y3Q\"^3!\"[3!\"[31\"X3A\"[41\"`31\"Z3A\"Y31\"Z31\"Y4!\"[31\"[41\"X31\"X3A\"Y2Q\"Y2Q\"W21\"W2Q\"Z2Q\"Y1Q\"T3!\"S3!\"S1Q\"T2!\"U2Q\"T2A\"X3!\"U3!\"Y3Q\"U2Q\"[31\"W2Q\"[3Q\"U3!\"Y31\"]3Q\"Z3Q\"Y3Q\"`3Q\"X31\"^3!\"]3Q\"Y2Q\"[31\"^2Q\"[31\"]3A\"_3Q\"`3!\"[3Q\"[3!\"]4A\"\\3Q\"`3Q\"_3Q\"`3A\"_3A\"^3Q\"Z3Q\"`2Q\"[4!#!4!#\"4A#$3Q#!41#%4A#$3Q\"`3A\"^3A\"^3Q\"_3Q\"`3Q\"`4Q#'4Q#'4Q#%4Q#%4!#\"4A##3Q\"`3Q\"`4Q#%4Q#%4Q#)5Q#)6!#\"4Q#)5A#)41#!11\"P/1\"C/Q\"E0!\"G1!\"M2Q\"Y41\"\\51#*4Q#*2A\"X1!\"O0Q\"M01\"J01\"J,1\"-*!!\\)!!V)!!V(!!S'A!P'A!P'A!P(!!V(Q![)A!Y(A!S'A!P'A!P'!!K%A!C#Q1;#!A3#1Q1\"!17#115#1A1\"!11\"1A6\"Q15#1A.!QQ4\"112\"Q!1\"1!0$A1E%Q!J)!!Y-!\"3/!\"@0Q\"M01\"I0Q\"M0Q\"M0Q\"M0A\"K0A\"L0!\"G/Q\"E0!\"G0!\"G0!\"G0!\"G/Q\"E1A\"Q3Q##4Q#)4Q#%5A#+61#'5!#)4Q#%41#\"3Q\"_4A##4Q#!4!\"_4Q#%4Q#%4Q#,61#\"4Q#)3Q\"_3Q\"`3Q\"`41#\"31\"^3Q\"`4Q#%4Q#%4A##41##3Q\"`3!\"\\3A\"^3!\"]3!\"]3Q#!4!#!4!#\"4!#\"31\"]31\"]2Q\"[4!\"Z3!\"]3!\"]3Q\"_3!\"]3!\"]31\"^3A\"]31\"X3Q\"]3Q\"[3!\"]3!\"[3Q\"[3A\"W3A\"^4!\"Z31\"W2Q\"[3!\"Y3!\"Y3A\"W3A\"W2Q\"T21\"X3!\"T3!\"Y21\"T2Q\"U2A\"X1Q\"S2!\"V2!\"Q2Q\"S2!\"S21\"R1Q\"R2Q\"X2A\"U2A\"W3Q\"U3!\"X3A\"V31\"W2Q\"Z2Q\"Z3Q\"X3!\"[3A\"W3A\"[3!\"Y4!\"\\3Q\"[41\"`3Q\"W2Q\"[3A\"W2Q\"[3Q\"Y2Q\"Z2Q\"Z2Q\"[3!\"]3!\"]31\"]3Q\"`3!\"\\3!\"\\3!\"\\2Q\"\\2Q\"[31\"^3Q\"_4!#\"4!#!3A\"^3Q#!3Q\"`3!\"\\3!\"]31\"]4A##4Q#%4Q#%4Q#%41##4Q#%41##3A\"^4!#!41#\"4!#!5!#&41#%4Q#)4Q#%4Q#%4A##1A\"R/Q\"F/!\"@/!\"A/1\"A/!\"A0!\"G0!\"H0Q\"L1!\"N0Q\"M0A\"K0A\"J0!\"G/A\"D-!\"2*A\"!)1!X&Q!K&1!?#Q14\"AA/$111#1Q2#1Q1\"QA/\"QA/#1A/\"1A0#AA5\"AA4\"1Q5#!A.\"!11\"!!.#114\"1!2$!A6$!A@$1A;%11C(Q!T)Q!]+A\"*/1\"D/A\"D/Q\"F0Q\"L0!\"H0A\"K/Q\"E/1\"B.1\";-Q\"7-Q\"7/A\"D/Q\"F/!\"@/Q\"F/Q\"F0Q\"M3A\"_4Q#'4Q#(4Q#&4Q#%4!#!3A\"]11\"P01\"I2A\"Y4A#$4Q#%4!#!4Q#%4Q#%4Q#%4A#%4!#\"3Q#!3Q\"`4!#!31\"^41##4A##4A##41#\"41#\"3Q#!3Q\"`3!\"]3Q\"`3!\"\\3Q\"`3A\"_3Q\"`4!#!3Q\"_3!\"\\3A\"Z31\"^31\"\\3Q\"]3!\"\\3A\"Z3Q\"`3A\"[4!\"Y3!\"\\31\"Y31\"W3!\"[3A\"Y31\"X3A\"Z3A\"W31\"[4A\"X3!\"Y3A\"W3Q\"U4!\"]31\"X3!\"Y3!\"Y3!\"X31\"U1Q\"S31\"R2A\"V31\"U1Q\"T1A\"S11\"Q21\"Q2!\"V31\"T2Q\"W2!\"S2A\"W21\"T2A\"V2Q\"Y31\"X2A\"Z2Q\"Z3!\"X31\"W3A\"Y41\"]31\"W4!\"X3!\"Y3A\"V4!\"X3!\"Y2Q\"Z3A\"_31\"]4!\"X3Q\"_3Q\"W3A\"^31\"]3A\"_41\"\\3Q\"_31\"\\41\"]31\"Z4A\"\\31\"\\41#!3A\"_4!#!3A\"_41#\"4Q#%3!\"]3!\"\\3Q\"`31\"]31\"]3Q\"`3A\"_4Q#%4Q#%4A##4!#!41##41#\"31\"^31\"^3A\"^41##4!#!4Q#%4Q#%4Q#%4Q#%4A#$2A\"W/Q\"E0!\"G/1\"B0!\"H0!\"H/1\"C0!\"G/A\"D/A\"D0Q\"L0Q\"M0A\"J0A\"K0!\"G/Q\"F.!\"9+Q\"))A!Z'A!P&11G\"QA6$1A4\"1!7\"AA4\"QQ1\"1A0\"!14\"1!1\"AA1\"!Q5#!A.!Q!5$1Q?%1!B&Q1K'!1O(A!T)!!V)!!V)1!X+!\"&-!\"6-1\"9,Q\"3+A\"'+1\"&+A\"'+A\"'+!\"#*A\"!)A![)1!X*Q\"#.1\"<0!\"H01\"I01\"I1A\"R41#\"4Q#%4Q#$4A#%4!\"X11\"P0Q\"M/1\"B/!\"@1A\"R31\"]3Q\"`4Q#%4Q#%4Q#%4!#\"4A#$3Q\"`3A\"_3!\"]3!\"\\3A\"_3A\"_4!#!4Q#%41##4!#\"4!#!3!\"\\2Q\"[3Q\"Y3!\"[3!\"]3!\"\\41#\"31\"]2Q\"[31\"\\41\"]4A\"\\31\"W3A\"[3!\"Y3!\"\\4!\"]3!\"\\31\"Y2Q\"[3Q\"X3A\"Z31\"^3Q\"W31\"Z4!\"\\3Q\"[4!\"Z3!\"Y3!\"Y3!\"Y31\"W3Q\"U31\"X4!\"T2Q\"X3!\"Y2Q\"X1Q\"T1Q\"T2A\"V31\"S1Q\"T2!\"V11\"P1Q\"T11\"P1Q\"T1Q\"T1Q\"T21\"Q21\"X1Q\"T2!\"W1A\"R3A\"W2A\"R2Q\"T3A\"V3A\"W2Q\"[3A\"W2Q\"[31\"W3A\"W2Q\"[2Q\"Z3Q\"[3Q\"Y3Q\"Y3Q\"\\3!\"X31\"W3!\"Y3!\"X3Q\"Y3A\"Y2Q\"[3!\"\\3Q\"Y3!\"\\3!\"[31\"W3!\"Y3Q\"T3!\"\\3!\"\\3Q#!3Q\"`3Q\"_3Q#!3Q\"`31\"]3A\"Y3!\"]31\"^3A\"^31\"]3!\"]4A#$4A#$4A#$3Q#!4!#\"41#\"3!\"]3!\"[31\"X4!#!4!#\"41#\"4Q#%4Q#%4Q#%4Q#%11\"O/A\"C/Q\"F/1\"B/1\"B/1\"B/1\"B/1\"C/Q\"F/1\"B0!\"G0A\"K0!\"G01\"I01\"I/A\"C/A\"D-1\"4+Q\")*!!](A!T'!!E%11>$A1=#117#110\"QQ3\"112\"!!1\"!13#A1.#Q15%!!>&A!D%A1C&QAH&Q1K'1!K'A!M'A!M'Q!R&Q!N'Q!R)!!V)!!V(A!T(Q!U)!!V)A!Z+1\"'-1\"4/Q\"F0!\"G/Q\"E0!\"H2!\"V3!\"[2Q\"X1Q\"S01\"J/!\"@/A\"D.Q\"?.Q\"?/A\"C2A\"W4A#$4Q#%4Q#%4Q#%4A#$3Q#!3Q\"`3!\"\\3Q\"`2Q\"[3A\"_3Q\"_31\"^3A\"_4Q#%4!#!31\"]3A\"^2A\"Z31\"^31\"^2A\"Z3Q\"^41\"_3Q\"_3!\"\\3Q#!3!\"]3Q\"Y2Q\"Z2Q\"[2Q\"[3A\"\\3!\"Y2Q\"[2Q\"[3Q\"[31\"Z4!\"X3A\"[4!\"W31\"]3!\"\\3Q\"Y2Q\"[3A\"W31\"W2A\"U3!\"Y3A\"W3A\"W2Q\"[2!\"U21\"X21\"R2A\"W1Q\"S1Q\"T1Q\"T1Q\"T1Q\"U11\"P1!\"O1Q\"T11\"P11\"P1!\"O1Q\"T1Q\"T1Q\"P1A\"Q2A\"Q21\"U1Q\"T2!\"S3!\"V2!\"U2A\"X2Q\"Z3A\"V3A\"V2Q\"[2Q\"Y3!\"Y31\"X31\"W3A\"V3Q\"V3!\"Z2Q\"[3!\"Z3A\"]31\"\\4A\"_3Q\"W3A\"Y4!\"[31\"[2Q\"Z3!\"\\2Q\"\\2Q\"[2Q\"[3!\"]31\"Y3A\"Z3!\"Z3!\"\\4!#!4!#!31\"^3A\"_31\"\\2A\"Z3A\"]3A\"]2Q\"[3A\"_2Q\"\\3Q\"`41##4A#$31\"^4!#\"3Q\"`3A\"_21\"V/Q\"F0Q\"K2A\"X3!\"[3A\"^4Q#%4A#$41##3A\"]01\"I/1\"C/!\"@.Q\"?/Q\"E.1\"=+A\"+*Q\"&,1\"1-A\"7.1\";.!\":-Q\"7.1\"<.1\"<.1\"=/A\"E.1\"<,Q\"2)A!Y(Q!V)!!V(!!Q(!!P'!!M%Q1J%A1?#QQ?#Q!9\"1!5\"1A/\"1A/\"AA2\"!11\"!12\"QA1\"AA0#A11$!17&1!>&A!M(1!T(!!S)1!X*1!_,1\"-.!\":/A\"D/1\"C/Q\"F/A\"D/Q\"F/1\"B/A\"D/A\"D0!\"G0!\"G/1\"C.Q\"?/!\"@/!\"A2!\"U3!\"[4Q#%4!#!41#\"41##3A\"_3Q\"`3!\"\\3!\"Z4!\"]41\"]3A\"^4!#!4!#!41#\"3Q\"`3!\"\\31\"^3!\"]31\"[41\"Z3Q\"W3!\"]31\"^31\"]31\"\\3!\"\\2Q\"[3!\"[4!\"]3A\"W4!\"\\3A\"X4!\"[31\"[31\"Y4!\"\\3!\"Y3A\"[2Q\"Z3!\"Y3!\"X3!\"Y3A\"X3Q\"V31\"Y2Q\"[3!\"Y31\"W2A\"W2Q\"Y2!\"V1Q\"S31\"V2A\"W31\"T1Q\"T1Q\"S1Q\"Q1Q\"T1Q\"P1Q\"T1Q\"U1A\"S2Q\"Q11\"Q11\"Q1A\"R1A\"Q1!\"O11\"P2A\"V1Q\"R1Q\"T11\"P1Q\"T3!\"V2A\"R3!\"U21\"S2A\"V2!\"V1Q\"U2Q\"S3!\"X3Q\"U2!\"V31\"X2!\"W2Q\"X4!\"T41\"V3Q\"W3!\"X3!\"Y3A\"V2Q\"[31\"X31\"W3A\"[3Q\"]3Q\"X2Q\"\\2Q\"[31\"Z4Q\"Y3!\"X3Q\"[41\"W3Q\"^2A\"Z3A\"_31\"^31\"^31\"]2A\"Z3Q\"]3A\"]4!\"[3A\"^3A\"_31\"]2Q\"[3A\"_4Q#%4!#!3Q\"`3Q\"`2A\"Z0Q\"M.Q\"?/A\"E/Q\"E0Q\"L11\"O21\"V3!\"]4Q#$3Q\"`1Q\"T/Q\"E/A\"E.Q\"?.Q\"?-1\"4*1\"\"(!!R(!!R)!!V)!!V)!!V)!!V)A![)A!`*A\"#*A\"#)Q!\\)1!X)!!V)!!V)!!V(A!T(Q!U(1!S'Q!R)!!V'1!P&!!J$!!>#!!3\"!15#A14!QA2\"Q16%A1A%Q1E'A!N(Q!U(A!T*!!]+Q\",-1\"7/A\"E/1\"B/Q\"E/A\"E/A\"E/A\"C.Q\"?/!\"A/1\"B.Q\"?.Q\"?/1\"B/1\"B/1\"C.Q\"?/A\"C2Q\"Y3!\"\\3Q\"`4!#!4!#!3A\"_3!\"]3!\"]3A\"_4!\"Y3!\"X3A\"^2A\"Z3Q\"`3!\"]3!\"]3A\"^3Q\"`2Q\"[4!\"Y3Q\"Z3A\"W31\"]2Q\"[3A\"_31\"^2A\"Z2A\"Z4!#!4!\"Y3A\"[2Q\"Z31\"X3A\"_31\"X2Q\"[2Q\"\\3A\"Y3!\"]4!\"X41\"W3A\"V3A\"V31\"X2Q\"[2Q\"[2Q\"Y3Q\"U3!\"X3A\"V2!\"W31\"T31\"T2Q\"U2Q\"W2A\"Q1Q\"R11\"Q21\"Q2!\"R2A\"T1A\"P2Q\"U11\"Q1A\"R1!\"N11\"Q11\"Q1Q\"T1!\"O1A\"R11\"Q1Q\"S11\"Q1A\"R1Q\"T3!\"R21\"Q11\"Q1Q\"U1Q\"T1A\"Q21\"Q1Q\"T21\"X21\"X2A\"W21\"T2A\"V2!\"R31\"W2A\"Y2A\"X2Q\"Z2Q\"Z31\"W31\"\\3!\"Y3Q\"U3Q\"U2Q\"Z3Q\"T31\"X3Q\"Z4!\"W3Q\"\\2Q\"[31\"\\3!\"\\3A\"]3!\"X4!\"X4!\"Y3A\"\\3!\"Z3!\"]3Q\"`3Q\"_3!\"\\2Q\"[2Q\"Z3Q\"W3A\"Z4!\"\\3!\"]2A\"Z3!\"]4!#!3A\"_3!\"\\4!#\"31\"]1Q\"U01\"I/1\"B/!\"@.Q\"?/!\"@/Q\"F/1\"B0Q\"M11\"Q0A\"L/A\"C/A\"E.Q\"?.Q\"?.Q\"?.!\";+A\"))1!Z)!!V(!!R(A!T(A!T(A!T(!!R(!!R(!!Q&A!I'!!K&11H%11C'!!H&A!D%1!B$A!7\"!Q.%Q!8$Q1<%11=$QA;&A!B'Q!Q(Q!U(!!R(!!R)!!X)A!^+A\"(.Q\">/!\"A/1\"C/!\"@/!\"@/1\"B/!\"@/!\"@/1\"C.Q\"?.Q\"@.A\">.Q\"?/1\"C/1\"B.Q\"?/!\"@/1\"C1Q\"U3A\"^41#\"41#\"4!#!31\"]3A\"^3A\"Z2A\"U3!\"V3A\"V2Q\"[3!\"\\3!\"\\31\"]4!#!31\"^3Q\"`4!\"\\31\"]4!\"\\31\"]3!\"\\3!\"\\3A\"Z4!\"\\31\"Y4Q\"[4!\"^41\"[4!\"T3!\"Y31\"W4A\"Z31\"X3A\"V4!\"\\31\"^3Q\"V3Q\"]3A\"V2Q\"Z21\"X31\"X2Q\"Z3A\"V3A\"V21\"X31\"U2A\"Y21\"X21\"V2A\"T21\"V2!\"V1Q\"T21\"X1Q\"T2!\"U2Q\"P1Q\"T1Q\"T1Q\"T1Q\"U11\"O2Q\"Q1A\"Q2Q\"R11\"Q1Q\"S0Q\"L1A\"R1!\"N1A\"S1Q\"U11\"Q1A\"R11\"P1A\"S21\"S2!\"V1A\"Q1Q\"S1Q\"T21\"T11\"P2!\"V1A\"P21\"V2!\"S3Q\"U2A\"X2!\"V2A\"X1Q\"T2A\"S3!\"Y2!\"V4!\"V3!\"Y2Q\"Y3Q\"U31\"W2Q\"Y2Q\"Z3!\"Y3!\"Y3!\"X2Q\"[4!\"X3A\"Y3A\"[31\"Y4!\"]4!\"T4!\"W3!\"Y3Q\"X4!\"]3Q\"[3!\"[2Q\"\\2A\"Z31\"Z4Q\"[3!\"Y4!\"X3A\"]3Q\"W2Q\"Z3A\"_2Q\"[31\"^3A\"^31\"^21\"X0A\"L/1\"B.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/1\"B0!\"H/!\"@/1\"C/A\"D/Q\"E/!\"@/Q\"E.Q\"?.!\":-1\"4+!\"$)A!Z)!!W'Q!R(A!T(A!T&1!K%A!@#Q18\"AA2\"AA0#11<$A!@'A!K&Q!H'A!K'A!N(1!S)!!V(Q!U(1!S'1!P(A!T(1!S(1!S)Q!],!\"2.!\":.1\";/!\"A.1\";,1\"1+!\"$+!\"$*A\"\"*A\"!*Q\"$)A!^*A\"#.!\":.Q\"?.Q\"?/!\"A/1\"B11\"Q2!\"V4!#!4!#\"3Q\"`2Q\"Z2Q\"Z1!\"N0!\"G0!\"D01\"J2A\"Y3Q\"^3!\"[3Q\"_31\"]31\"^2Q\"[3!\"Z3Q\"Y3A\"Z4A\"[3!\"Y4!\"X3Q\"Y3A\"Y3Q\"W2Q\"[2Q\"[31\"[2Q\"Y3A\"W2Q\"Z3A\"V2Q\"[31\"Y3Q\"^31\"]3A\"Y2Q\"Z2Q\"Y3!\"Y3!\"S21\"W21\"X31\"W31\"W31\"X3Q\"T3!\"U2A\"X1Q\"S1A\"S1Q\"R21\"T2!\"U1A\"Q21\"Q2!\"Q11\"P11\"P1Q\"T11\"P1!\"O11\"P1A\"Q1A\"R11\"Q11\"Q1A\"Q1A\"S11\"Q11\"P1!\"O11\"Q11\"P11\"P11\"P11\"P1Q\"T1A\"R1A\"Q1!\"N1A\"R11\"Q1Q\"S1Q\"T1Q\"T11\"P2Q\"U21\"V1A\"R21\"X2A\"Q1Q\"T2!\"R21\"R21\"X1Q\"T2Q\"T3!\"Y3Q\"U31\"W31\"W31\"X3!\"X3Q\"U2Q\"[3A\"V3Q\"U41\"Z31\"^31\"W3!\"[41\"X2Q\"Z2A\"Z3!\"Y3A\"V31\"X3!\"X3Q\"\\41\"W31\"[2A\"Z31\"^2A\"Z3Q\"\\3!\"X31\"X3!\"\\3Q\"Y3!\"]3Q\"_31\"X2A\"Z31\"^3Q\"\\3A\"\\21\"W0!\"I.A\"=.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F/!\"A.Q\"?.Q\"?/A\"D/1\"B/Q\"F/1\"C.Q\"?.Q\"?.A\"=,1\".+1\"()A!['Q!Q(A!U(Q!U)!!V'1!M&Q!A%Q1D&!!E%A!C%Q1D&A!N'Q!Q'A!Q'A!Q(!!S(1!S)!!V(1!S)!!V(Q!U(A!U'A!Q(Q!U)!!V(1!S(1!S(1!S(1!S)!!V'Q!R'A!Q)1!Z,1\"-.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F1Q\"T2Q\"Z21\"V0Q\"M0Q\"M/Q\"F.Q\"?/A\"D0!\"H/!\"A0Q\"M3!\"\\2A\"Z4!\"Z3A\"]31\"X2A\"Z4!\"[3Q\"`3!\"[3Q\"[3A\"X2A\"Z3Q\"\\3Q\"]3Q\"[3!\"[3Q\"Y3Q\"\\3!\"Z3Q\"[2Q\"Z31\"W3!\"X3!\"X31\"X4A\"[41\"W3Q\"U3Q\"U3Q\"U3!\"X2A\"T31\"W2Q\"R1Q\"T2A\"Z31\"W2Q\"[2A\"Z1Q\"T1Q\"T3!\"T1Q\"T1Q\"T1Q\"T1A\"R1A\"R1Q\"T1Q\"T1Q\"T1Q\"T11\"P1Q\"T11\"P11\"Q1A\"R1!\"N1A\"R2!\"M0Q\"M1!\"N0Q\"M1!\"N1!\"N1A\"Q1!\"N1!\"N11\"P1!\"N1!\"N1!\"O1!\"O1Q\"T1!\"O1A\"R11\"Q1!\"N2A\"T2A\"U1A\"R1A\"R1!\"O1A\"R2Q\"V2A\"Q21\"X1A\"R2A\"R2A\"U21\"W2A\"X2A\"X31\"X31\"X2Q\"Z3!\"Y2Q\"Z21\"T2!\"U31\"U31\"W41\"U31\"Y31\"[3Q\"\\31\"]4!\"Y2Q\"Z31\"X31\"W31\"X3!\"X3!\"Y4!\"]3A\"V4!\"]31\"X31\"]31\"\\3A\"]3Q\"]3A\"Z41\"[4!\"U2Q\"Z31\"[4!\"Y3!\"[3!\"[3!\"\\2A\"Z3!\"S/Q\"F/!\"A/A\"D0!\"H0A\"J1!\"O1!\"O0A\"L/A\"C.Q\"?.Q\"?.1\"<.!\":.!\":.1\"=/A\"F.Q\"?.Q\"?-Q\"9,Q\"3*A!W(A!T(1!S(Q!U)!!V'Q!Q(A!T(!!P(!!P(!!S'A!Q'A!Q&A!I&!!>%Q!B&A!I&A!M'A!P(A!R)!!V)1!V(1!T)1!X)1!X)!!X(Q!V)!!W)A!]+!\"&.Q\"?.A\".1\"=.!\";,A\"5,A\"3-!\"+*A\"#*!!^)1!W(A!T)!!V)!!V)!!V(Q!U(Q!U(A!T(Q!U(Q!U)!!V*Q!X)!!Y*!!^*!!_)Q!^)Q\"\"*!\"%,!\")+1\")+Q\"),!\"-+!\"'*A\"#*A\"#,Q\"0-!\"2.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?.Q\"?/Q\"F0A\"K2!\"M2!\"O3Q\"R4!\"T3!\"X2A\"T1!\"O1Q\"T2A\"Z2A\"Z2A\"Z3A\"_3A\"_3!\"Y3!\"Y4A\"V3A\"[3!\"Y3!\"Y3!\"Y3!\"X3!\"\\4!\"Y4!\"Y2A\"Z3Q\"Y3!\"Z2A\"Z3A\"V2Q\"Y3!\"U3A\"V31\"X31\"X2Q\"Z31\"W3A\"V2A\"S3A\"V2!\"V1A\"R1A\"R1Q\"T1A\"R21\"W2A\"T21\"R2A\"S2!\"U2!\"V11\"P1A\"R1Q\"T2Q\"U1A\"S1A\"R11\"Q11\"Q1!\"O11\"P1Q\"T1!\"O1!\"O1!\"O1!\"O1A\"R11\"P1!\"O11\"Q0Q\"L1!\"N1!\"N1!\"N"; +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/Mandelbrot/mandelbrot.c b/plug-ins/Mandelbrot/mandelbrot.c deleted file mode 100644 index 57e708897a..0000000000 --- a/plug-ins/Mandelbrot/mandelbrot.c +++ /dev/null @@ -1,1413 +0,0 @@ -/********************************************************************** - * Mandelbrot Chaos Fractal Explorer Plug-in (Version 1.00) - * Daniel Cotting (cotting@mygale.org) - ********************************************************************** - * Official Homepage: http://www.mygale.org/~cotting - ********************************************************************** - * Homepages under construction: http://www.chez.com/cotting - * http://www.cyberbrain.com/cotting - * You won't be able to see anything yet, as I don't really have the - * time to build up these two sites :-( - * Have a look at www.mygale.org/~cotting instead! - ********************************************************************** - */ - -/* The GIMP -- an image manipulation program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include -#include "gtk/gtk.h" -#include "libgimp/gimp.h" -#include "../include/logo.h" - -/***** Macros *****/ - -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) -#define MAX(a, b) (((a) > (b)) ? (a) : (b)) - - -/***** Magic numbers *****/ - -#define PREVIEW_SIZE 128 -#define SCALE_WIDTH 200 -#define ENTRY_WIDTH 60 - -#define SINUS 0 -#define COSINUS 1 -#define NONE 2 - -/***** Types *****/ -typedef struct { - gdouble xmin; - gdouble xmax; - gdouble ymin; - gdouble ymax; - gdouble iter; - gint colormode; - gdouble redstretch; - gdouble greenstretch; - gdouble bluestretch; - gint redmode; - gint greenmode; - gint bluemode; -} mandelbrot_vals_t; - -typedef struct { - GtkWidget *preview; - guchar *image; - guchar *wimage; - gint run; -} mandelbrot_interface_t; - - - -/* Declare local functions. */ - -static void query (void); -static void run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals); - -static void mandelbrot (GDrawable *drawable); -static void mandelbrot_render_row (const guchar *src_row, - guchar *dest_row, - gint row, - gint row_width, - gint bytes); -static void mandelbrot_get_pixel(int x, int y, guchar *pixel); -void transform (short int *, short int *, short int *,double, double, double); - - -static void build_preview_source_image(void); - -static gint mandelbrot_dialog(void); -static void dialog_update_preview(void); -static void dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, - int left, int right); -static void dialog_scale_update(GtkAdjustment *adjustment, gdouble *value); -static void dialog_entry_update(GtkWidget *widget, gdouble *value); -static void dialog_close_callback(GtkWidget *widget, gpointer data); -static void dialog_ok_callback(GtkWidget *widget, gpointer data); -/* static void dialog_reset_callback(GtkWidget *widget, gpointer data); */ -static void dialog_cancel_callback(GtkWidget *widget, gpointer data); -static void mandelbrot_toggle_update (GtkWidget *widget, - gpointer data); -static float xmin=-2; -static float xmax=1; - -static float ymin=-1.5; -static float ymax=1.5; -static float xbild; -static float ybild; -static float xdiff; -static float ydiff; - -/***** Variables *****/ - -GPlugInInfo PLUG_IN_INFO = -{ - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ -}; - -static mandelbrot_interface_t wint = { - NULL, /* preview */ - NULL, /* image */ - NULL, /* wimage */ - FALSE /* run */ -}; /* wint */ - -static mandelbrot_vals_t wvals = { - -2.0,1.0,-1.5,1.5,50.0,0,128,128,128,1,1,0, -}; /* wvals */ - -static GDrawable *drawable; -static gint tile_width, tile_height; -static gint img_width, img_height, img_bpp; -static gint sel_x1, sel_y1, sel_x2, sel_y2; -static gint sel_width, sel_height; -static gint preview_width, preview_height; -static GTile *the_tile = NULL; -static double cen_x, cen_y; -static double scale_x, scale_y; - -gint do_redsinus; -gint do_redcosinus; -gint do_rednone; - -gint do_greensinus; -gint do_greencosinus; -gint do_greennone; - -gint do_bluesinus; -gint do_bluecosinus; -gint do_bluenone; - -gint do_colormode1; -gint do_colormode2; - -static GParam *ExternalParam=NULL; -static int ExternalInt; -/***** Functions *****/ - - -GtkWidget * mandelbrot_logo_dialog(void); - - -GtkWidget *maindlg; -GtkWidget *logodlg; - - - -MAIN (); - -static void -query () -{ - static GParamDef args[] = - { - { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, - { PARAM_IMAGE, "image", "Input image" }, - { PARAM_DRAWABLE, "drawable", "Input drawable" }, - { PARAM_FLOAT, "xmin", "xmin fractal image delimiter" }, - { PARAM_FLOAT, "xmax", "xmax fractal image delimiter" }, - { PARAM_FLOAT, "ymin", "ymin fractal image delimiter" }, - { PARAM_FLOAT, "ymax", "ymax fractal image delimiter" }, - { PARAM_FLOAT, "iter", "Iteration value" }, - { PARAM_INT8, "colormode", "0: Apply colormap as specified by the parameters below; 1: Apply active gradient to final image"}, - { PARAM_FLOAT, "redstretch", "Red stretching factor" }, - { PARAM_FLOAT, "greenstretch","Green stretching factor" }, - { PARAM_FLOAT, "bluestretch", "Blue stretching factor" }, - { PARAM_INT8, "redmode", "Red application mode (0:SIN;1:COS;2:NONE)" }, - { PARAM_INT8, "greenmode", "Green application mode (0:SIN;1:COS;2:NONE)" }, - { PARAM_INT8, "bluemode", "Blue application mode (0:SIN;1:COS;2:NONE)" }, - }; - static GParamDef *return_vals = NULL; - static int nargs = sizeof (args) / sizeof (args[0]); - static int nreturn_vals = 0; - - gimp_install_procedure ("plug_in_mandelbrot", - "Mandelbrot Chaos Fractal Explorer Plug-In", - "Fills the active painting area with a Mandelbrot fractal.", - "Daniel Cotting (cotting@mygale.org, www.mygale.org/~cotting)", - "Daniel Cotting (cotting@mygale.org, www.mygale.org/~cotting)", - "1th May 1997", - "/Filters/Render/Mandelbrot Fractal", - "RGB*", - PROC_PLUG_IN, - nargs, nreturn_vals, - args, return_vals); -} - - -static void -run (char *name, - int nparams, - GParam *param, - int *nreturn_vals, - GParam **return_vals) -{ - static GParam values[1]; - /* GDrawable *drawable; */ - gint32 image_ID; - GRunModeType run_mode; - double xhsiz, yhsiz; - int pwidth, pheight; - GStatusType status = STATUS_SUCCESS; - - - run_mode = param[0].data.d_int32; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = status; - - *nreturn_vals = 1; - *return_vals = values; - - - - /* Get the specified drawable */ - drawable = gimp_drawable_get (param[2].data.d_drawable); - image_ID = param[1].data.d_image; - tile_width = gimp_tile_width(); - tile_height = gimp_tile_height(); - - img_width = gimp_drawable_width(drawable->id); - img_height = gimp_drawable_height(drawable->id); - img_bpp = gimp_drawable_bpp(drawable->id); - - gimp_drawable_mask_bounds(drawable->id, &sel_x1, &sel_y1, &sel_x2, &sel_y2); - - sel_width = sel_x2 - sel_x1; - sel_height = sel_y2 - sel_y1; - - cen_x = (double) (sel_x2 - 1 + sel_x1) / 2.0; - cen_y = (double) (sel_y2 - 1 + sel_y1) / 2.0; - - xhsiz = (double) (sel_width - 1) / 2.0; - yhsiz = (double) (sel_height - 1) / 2.0; - - if (xhsiz < yhsiz) { - scale_x = yhsiz / xhsiz; - scale_y = 1.0; - } else if (xhsiz > yhsiz) { - scale_x = 1.0; - scale_y = xhsiz / yhsiz; - } else { - scale_x = 1.0; - scale_y = 1.0; - } /* else */ - - /* Calculate preview size */ - if (sel_width > sel_height) { - pwidth = MIN(sel_width, PREVIEW_SIZE); - pheight = sel_height * pwidth / sel_width; - } else { - pheight = MIN(sel_height, PREVIEW_SIZE); - pwidth = sel_width * pheight / sel_height; - } /* else */ - - preview_width = MAX(pwidth, 2); /* Min size is 2 */ - preview_height = MAX(pheight, 2); - - /* See how we will run */ - switch (run_mode) { - case RUN_INTERACTIVE: - /* Possibly retrieve data */ - - gimp_get_data("plug_in_mandelbrot", &wvals); - - /* Get information from the dialog */ - - if (!mandelbrot_dialog()) - return; - - break; - - case RUN_NONINTERACTIVE: - /* Make sure all the arguments are present */ - - if (nparams != 15) - status = STATUS_CALLING_ERROR; - - if (status == STATUS_SUCCESS) - - wvals.xmin = param[3].data.d_float; - wvals.xmax = param[4].data.d_float; - wvals.ymin = param[5].data.d_float; - wvals.ymax = param[6].data.d_float; - wvals.iter = param[7].data.d_float; - wvals.colormode = param[8].data.d_int8; - wvals.redstretch = param[9].data.d_float; - wvals.greenstretch = param[10].data.d_float; - wvals.bluestretch = param[11].data.d_float; - wvals.redmode = param[12].data.d_int8; - wvals.greenmode = param[13].data.d_int8; - wvals.bluemode = param[14].data.d_int8; - - break; - - case RUN_WITH_LAST_VALS: - /* Possibly retrieve data */ - - gimp_get_data("plug_in_mandelbrot", &wvals); - break; - - default: - break; - } /* switch */ - - - if (status == STATUS_SUCCESS) - { - /* Make sure that the drawable is indexed or RGB color */ - if (gimp_drawable_color (drawable->id)) - { - gimp_progress_init ("Rendering mandelbrot fractal..."); - - /* Set the tile cache size */ - - gimp_tile_cache_ntiles(2*(drawable->width / gimp_tile_width()+1)); - - /* Run! */ - - -/* gimp_tile_cache_ntiles (2 * (drawable->width / gimp_tile_width () - + 1));*/ - mandelbrot (drawable); - if (wvals.colormode==1) ExternalParam = gimp_run_procedure("plug_in_gradmap",&ExternalInt, - PARAM_INT32, run_mode, - PARAM_IMAGE, image_ID, - PARAM_DRAWABLE, drawable->id, - PARAM_END); - - if (run_mode != RUN_NONINTERACTIVE) - gimp_displays_flush(); - - /* Store data */ - - if (run_mode == RUN_INTERACTIVE) - gimp_set_data("plug_in_mandelbrot", &wvals, sizeof(mandelbrot_vals_t)); - } - else - { - /* gimp_message("This filter only applies on RGB-images"); */ - status = STATUS_EXECUTION_ERROR; - } - } - - values[0].data.d_status = status; - - gimp_drawable_detach (drawable); -} - -/*****/ - -static void -mandelbrot_get_pixel(int x, int y, guchar *pixel) -{ - static gint row = -1; - static gint col = -1; - - gint newcol, newrow; - gint newcoloff, newrowoff; - guchar *p; - int i; - - if ((x < 0) || (x >= img_width) || (y < 0) || (y >= img_height)) { - pixel[0] = 0; - pixel[1] = 0; - pixel[2] = 0; - pixel[3] = 0; - - return; - } /* if */ - - newcol = x / tile_width; /* The compiler should optimize this */ - newcoloff = x % tile_width; - newrow = y / tile_height; - newrowoff = y % tile_height; - - if ((col != newcol) || (row != newrow) || (the_tile == NULL)) { - - if (the_tile != NULL) - gimp_tile_unref(the_tile, FALSE); - - the_tile = gimp_drawable_get_tile(drawable, FALSE, newrow, newcol); - gimp_tile_ref(the_tile); - col = newcol; - row = newrow; - } /* if */ - p = the_tile->data + the_tile->bpp * (the_tile->ewidth * newrowoff + newcoloff); - for (i = img_bpp; i; i--) - *pixel++ = *p++; - -} /* mandelbrot_get_pixel */ - - - -static void -mandelbrot_render_row (const guchar *src_row, - guchar *dest_row, - gint row, - gint row_width, - gint bytes) - - - - -{ - gint col, bytenum; - double redstretch,greenstretch, bluestretch; - for (col = 0; col < row_width ; col++) - { - float a,tb,x,y,xx; - int zaehler,color,r,g,b; - float pi=3.1415926; - - redstretch = wvals.redstretch; - greenstretch = wvals.greenstretch; - bluestretch = wvals.bluestretch; - /* v1 = (short int)src_row[col*bytes]; */ - /* v2 = (short int)src_row[col*bytes +1]; */ - /* v3 = (short int)src_row[col*bytes +2]; */ - - /* transform(&v1, &v2, &v3, redstretch, greenstretch, bluestretch); */ - a=xmin+col*xdiff; - tb=ymin+row*ydiff; - x=0; - y=0; - zaehler=0; - for (zaehler=0; (zaehler <= wvals.iter) && ((x*x+y*y)<4); zaehler++) - { - xx=x*x-y*y+a; - y=2*x*y+tb; - x=xx; - } - color=zaehler*256/wvals.iter; - r=g=b=color; - switch (wvals.redmode) - { - case SINUS: - r = (int) redstretch*(1.0+sin((r/128.0-1)*pi)); - break; - case COSINUS: - r = (int) redstretch*(1.0+cos((r/128.0-1)*pi)); - break; - default: - break; - } - - switch (wvals.greenmode) - { - case SINUS: - g = (int) greenstretch*(1.0+sin((g/128.0-1)*pi)); - break; - case COSINUS: - g = (int) greenstretch*(1.0+cos((g/128.0-1)*pi)); - break; - default: - break; - } - switch (wvals.bluemode) - { - case SINUS: - b = (int) bluestretch*(1.0+sin((b/128.0-1)*pi)); - break; - case COSINUS: - b = (int) bluestretch*(1.0+cos((b/128.0-1)*pi)); - break; - default: - break; - } - - dest_row[col*bytes] = (int)r; - dest_row[col*bytes +1] = (int)g; - dest_row[col*bytes +2] = (int)b; - - if (bytes>3) - for (bytenum = 3; bytenumid, &x1, &y1, &x2, &y2); - - /* Get the size of the input image. (This will/must be the same - * as the size of the output image. - */ - width = drawable->width; - height = drawable->height; - bytes = drawable->bpp; - - /* allocate row buffers */ - src_row = (guchar *) malloc ((x2 - x1) * bytes); - dest_row = (guchar *) malloc ((x2 - x1) * bytes); - - - /* initialize the pixel regions */ - gimp_pixel_rgn_init (&srcPR, drawable, 0, 0, width, height, FALSE, FALSE); - gimp_pixel_rgn_init (&destPR, drawable, 0, 0, width, height, TRUE, TRUE); - -/* - redstretch = wvals.redstretch; - greenstretch = wvals.greenstretch; - bluestretch = wvals.bluestretch; -*/ - xbild=width; - ybild=height; - xdiff=(xmax-xmin)/xbild; - ydiff=(ymax-ymin)/ybild; - - for (row = y1; row < y2; row++) - - { - gimp_pixel_rgn_get_row (&srcPR, src_row, x1, row, (x2 - x1)); - - mandelbrot_render_row (src_row, - dest_row, - row, - (x2 - x1), - bytes); - - /* store the dest */ - gimp_pixel_rgn_set_row (&destPR, dest_row, x1, row, (x2 - x1)); - - if ((row % 10) == 0) - gimp_progress_update ((double) row / (double) (y2 - y1)); - } - - /* update the processed region */ - gimp_drawable_flush (drawable); - gimp_drawable_merge_shadow (drawable->id, TRUE); - gimp_drawable_update (drawable->id, x1, y1, (x2 - x1), (y2 - y1)); - - free (src_row); - free (dest_row); -} - -/*****/ - -static void -build_preview_source_image(void) -{ - double left, right, bottom, top; - double px, py; - double dx, dy; - int x, y; - guchar *p; - guchar pixel[4]; - - wint.image = g_malloc(preview_width * preview_height * 3 * sizeof(guchar)); - wint.wimage = g_malloc(preview_width * preview_height * 3 * sizeof(guchar)); - - left = sel_x1; - right = sel_x2 - 1; - bottom = sel_y2 - 1; - top = sel_y1; - - dx = (right - left) / (preview_width - 1); - dy = (bottom - top) / (preview_height - 1); - - py = top; - - p = wint.image; - - for (y = 0; y < preview_height; y++) { - px = left; - for (x = 0; x < preview_width; x++) { - mandelbrot_get_pixel((int) px, (int) py, pixel); - - *p++ = pixel[0]; - *p++ = pixel[1]; - *p++ = pixel[2]; - - px += dx; - } /* for */ - - py += dy; - } /* for */ -} /* build_preview_source_image */ - - -/*****/ - -static gint -mandelbrot_dialog(void) -{ - GtkWidget *dialog; - GtkWidget *top_table; - GtkWidget *top_table2; - GtkWidget *frame; - GtkWidget *frame2; - GtkWidget *frame3; - GtkWidget *toggle; - GtkWidget *toggle_vbox; - GtkWidget *toggle_vbox2; - GtkWidget *toggle_vbox3; - GtkWidget *table, *table6; - GtkWidget *button; - gint argc; - gchar **argv; - guchar *color_cube; - GSList *redmode_group = NULL; - GSList *greenmode_group = NULL; - GSList *bluemode_group = NULL; - GSList *colormode_group = NULL; - - do_redsinus = (wvals.redmode == SINUS); - do_redcosinus = (wvals.redmode == COSINUS); - do_rednone = (wvals.redmode == NONE); - do_greensinus = (wvals.greenmode == SINUS); - do_greencosinus = (wvals.greenmode == COSINUS); - do_greennone = (wvals.greenmode == NONE); - do_bluesinus = (wvals.bluemode == SINUS); - do_bluecosinus = (wvals.bluemode == COSINUS); - do_bluenone = (wvals.bluemode == NONE); - do_colormode1 = (wvals.colormode == 0); - do_colormode2 = (wvals.colormode == 1); - - - argc = 1; - argv = g_new(gchar *, 1); - argv[0] = g_strdup("mandelbrot"); - - gtk_init(&argc, &argv); - - gtk_preview_set_gamma(gimp_gamma()); - gtk_preview_set_install_cmap(gimp_install_cmap()); - color_cube = gimp_color_cube(); - gtk_preview_set_color_cube(color_cube[0], color_cube[1], color_cube[2], color_cube[3]); - - gtk_widget_set_default_visual(gtk_preview_get_visual()); - gtk_widget_set_default_colormap(gtk_preview_get_cmap()); - - build_preview_source_image(); - dialog = maindlg = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(dialog), "Mandelbrot Fractal Explorer (cotting@mygale.org)"); - gtk_window_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); - gtk_container_border_width(GTK_CONTAINER(dialog), 0); - gtk_signal_connect(GTK_OBJECT(dialog), "destroy", - (GtkSignalFunc) dialog_close_callback, - NULL); - - top_table = gtk_table_new(4, 4, FALSE); - gtk_container_border_width(GTK_CONTAINER(top_table), 0); - gtk_table_set_row_spacings(GTK_TABLE(top_table), 0); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), top_table, FALSE, FALSE, 0); - gtk_widget_show(top_table); - - /* Preview */ - - frame = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); - gtk_table_attach(GTK_TABLE(top_table), frame, 0, 1, 0, 1,0,0, 0, 0); - gtk_widget_show(frame); - - wint.preview = gtk_preview_new(GTK_PREVIEW_COLOR); - gtk_preview_size(GTK_PREVIEW(wint.preview), preview_width, preview_height); - gtk_container_add(GTK_CONTAINER(frame), wint.preview); - gtk_widget_show(wint.preview); - - /* Controls */ - - frame = gtk_frame_new ("Fractal options:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame, 1, 4, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show(frame); - - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - - table = gtk_table_new(5, 5, FALSE); - gtk_container_border_width(GTK_CONTAINER(table), 5); - gtk_table_set_row_spacings(GTK_TABLE(table), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox),table, FALSE, FALSE, 0); - gtk_widget_show(table); - dialog_create_value("XMIN", GTK_TABLE(table), 0, &wvals.xmin,-10,10); - dialog_create_value("XMAX", GTK_TABLE(table), 1, &wvals.xmax,-10,10); - dialog_create_value("YMIN", GTK_TABLE(table), 2, &wvals.ymin,-10,10); - dialog_create_value("YMAX", GTK_TABLE(table), 3, &wvals.ymax,-10,10); - dialog_create_value("ITER", GTK_TABLE(table), 4, &wvals.iter,0,1000); - gtk_widget_show(table); - gtk_widget_show(toggle_vbox); - gtk_widget_show(frame); - - - frame2 = gtk_frame_new ("Color options:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table), frame2, 0, 4, 1, 3, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show(frame2); - - toggle_vbox2 = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox2), 0); - gtk_container_add (GTK_CONTAINER (frame2), toggle_vbox2); - gtk_widget_show(toggle_vbox2); - - top_table2 = gtk_table_new(5, 5, FALSE); - gtk_container_border_width(GTK_CONTAINER(top_table2), 10); - gtk_table_set_row_spacings(GTK_TABLE(top_table2), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox2), top_table2, FALSE, FALSE, 0); - gtk_widget_show(top_table2); - - - frame = gtk_frame_new ("Color density:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table2), frame, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show(frame); - - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show(toggle_vbox); - - table6 = gtk_table_new(3, 3, FALSE); - gtk_container_border_width(GTK_CONTAINER(table6), 0); - gtk_table_set_row_spacings(GTK_TABLE(table6), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox), table6, FALSE, FALSE, 0); - gtk_widget_show(table6); - dialog_create_value("Red", GTK_TABLE(table6), 0, &wvals.redstretch,0,128); - dialog_create_value("Green", GTK_TABLE(table6), 1, &wvals.greenstretch,0,128); - dialog_create_value("Blue", GTK_TABLE(table6), 2, &wvals.bluestretch,0,128); - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - - frame3 = gtk_frame_new ("Color function:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame3), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table2), frame3, 0, 1, 1, 2, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame3); - - toggle_vbox3 = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox3), 0); - gtk_container_add (GTK_CONTAINER (frame3), toggle_vbox3); - gtk_widget_show (toggle_vbox3); - - table6 = gtk_table_new(4, 4, FALSE); - gtk_container_border_width(GTK_CONTAINER(table6), 0); - gtk_table_set_row_spacings(GTK_TABLE(table6), 0); - gtk_box_pack_start(GTK_BOX(toggle_vbox3), table6, FALSE, FALSE, 0); - gtk_widget_show(table6); - - frame = gtk_frame_new ("Red:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (table6), frame, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame); - - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show (toggle_vbox); - /* <------------------------------- */ - toggle = gtk_radio_button_new_with_label (redmode_group, "Sine"); - redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_redsinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_redsinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (redmode_group, "Cosine"); - redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_redcosinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_redcosinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (redmode_group, "None"); - redmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_rednone); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_rednone); - gtk_widget_show (toggle); - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - - -/* Greenmode toggle box */ - frame = gtk_frame_new ("Green:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (table6), frame, 1, 2, 0,1 , GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame); - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show (toggle_vbox); - - /* <----- */ - toggle = gtk_radio_button_new_with_label (greenmode_group, "Sine"); - greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_greensinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greensinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (greenmode_group, "Cosine"); - greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_greencosinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greencosinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (greenmode_group, "None"); - greenmode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_greennone); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_greennone); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - - -/* Bluemode toggle box */ - frame = gtk_frame_new ("Blue:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (table6), frame, 2, 3,0,1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - gtk_widget_show (frame); - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - gtk_widget_show (toggle_vbox); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "Sine"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_bluesinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluesinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "Cosine"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_bluecosinus); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluecosinus); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "None"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_bluenone); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_bluenone); - gtk_widget_show (toggle); - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - gtk_widget_show (toggle_vbox3); - gtk_widget_show (frame3); - -/* Colormode toggle box */ - frame = gtk_frame_new ("Color Mode:"); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); - gtk_table_attach (GTK_TABLE (top_table2), frame, 0, 1, 2, 3, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 3, 3); - toggle_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_border_width (GTK_CONTAINER (toggle_vbox), 0); - gtk_container_add (GTK_CONTAINER (frame), toggle_vbox); - - toggle = gtk_radio_button_new_with_label (colormode_group, "As specified above"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_colormode1); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_colormode1); - gtk_widget_show (toggle); - - toggle = gtk_radio_button_new_with_label (bluemode_group, "Apply active gradient to final image"); - bluemode_group = gtk_radio_button_group (GTK_RADIO_BUTTON (toggle)); - gtk_box_pack_start (GTK_BOX (toggle_vbox), toggle, FALSE, FALSE, 0); - gtk_signal_connect (GTK_OBJECT (toggle), "toggled", - (GtkSignalFunc) mandelbrot_toggle_update, - &do_colormode2); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), do_colormode2); - gtk_widget_show (toggle); - - gtk_widget_show (toggle_vbox); - gtk_widget_show (frame); - /* gtk_widget_show (table); */ - - - /* Buttons */ - - -gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5); - - button = gtk_button_new_with_label("OK"); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc) dialog_ok_callback, - dialog); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_grab_default(button); - gtk_widget_show(button); - - button = gtk_button_new_with_label("Cancel"); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc) dialog_cancel_callback, - dialog); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_show(button); - - button = gtk_button_new_with_label("About..."); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc)mandelbrot_about_callback,button); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), - button, TRUE, TRUE, 0); - gtk_widget_show(button); - - -/* - button = gtk_button_new_with_label("Reset"); - GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(button), "clicked", - (GtkSignalFunc) dialog_reset_callback, - dialog); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, TRUE, 0); - gtk_widget_show(button); -*/ - /* Done */ - - gtk_widget_show(dialog); - dialog_update_preview(); - - gtk_main(); - gdk_flush(); - if (the_tile != NULL) { - gimp_tile_unref(the_tile, FALSE); - the_tile = NULL; - } /* if */ - - g_free(wint.image); - g_free(wint.wimage); - - return wint.run; -} /* mandelbrot_dialog */ - - -/*****/ - -static void -dialog_update_preview(void) -{ - double left, right, bottom, top; - double dx, dy; - int px, py; - int x, y; - double redstretch, greenstretch, bluestretch; - int r,g,b; - double scale_x, scale_y; - guchar *p_ul, *i, *p; - float ta,tb,tx,ty,txx; - int zaehler,color; - float pi=3.1415926; - - left = sel_x1; - right = sel_x2 - 1; - bottom = sel_y2 - 1; - top = sel_y1; - dx = (right - left) / (preview_width - 1); - dy = (bottom - top) / (preview_height - 1); - - xmin = wvals.xmin; - xmax = wvals.xmax; - ymin = wvals.ymin; - ymax = wvals.ymax; - redstretch = wvals.redstretch; - greenstretch = wvals.greenstretch; - bluestretch = wvals.bluestretch; - xbild=preview_width; - ybild=preview_height; - xdiff=(xmax-xmin)/xbild; - ydiff=(ymax-ymin)/ybild; - - scale_x = (double) (preview_width - 1) / (right - left); - scale_y = (double) (preview_height - 1) / (bottom - top); - - py = 0; - - p_ul = wint.wimage; - - - - for (y = 0; y < preview_height; y++) { - px = 0; - - for (x = 0; x < preview_width; x++) { - i = wint.image + 3 * (preview_width * py + px); - r = *i++; - g = *i++; - b = *i; - ta=(float)xmin+(float)x*xdiff; - tb=(float)ymin+(float)y*ydiff; - tx=0; - ty=0; - zaehler=0; - for (zaehler=0; (zaehler <= wvals.iter) && ((tx*tx+ty*ty)<4); zaehler++) - { - txx=tx*tx-ty*ty+ta; - ty=2.0*tx*ty+tb; - tx=txx; - } - r=g=b=color=zaehler*256/wvals.iter; - switch (wvals.redmode) - { - case SINUS: - r = (int) redstretch*(1.0+sin((r/128.0-1)*pi)); - break; - case COSINUS: - r = (int) redstretch*(1.0+cos((r/128.0-1)*pi)); - break; - default: - break; - } - - switch (wvals.greenmode) - { - case SINUS: - g = (int) greenstretch*(1.0+sin((g/128.0-1)*pi)); - break; - case COSINUS: - g = (int) greenstretch*(1.0+cos((g/128.0-1)*pi)); - break; - default: - break; - } - switch (wvals.bluemode) - { - case SINUS: - b = (int) bluestretch*(1.0+sin((b/128.0-1)*pi)); - break; - case COSINUS: - b = (int) bluestretch*(1.0+cos((b/128.0-1)*pi)); - break; - default: - break; - } - - - p_ul[0] = r; - p_ul[1] = g; - p_ul[2] = b; - p_ul += 3; - px += 1; /* dx; */ - } /* for */ - py +=1; /* dy; */ - } /* for */ - - p = wint.wimage; - - for (y = 0; y < preview_height; y++) { - gtk_preview_draw_row(GTK_PREVIEW(wint.preview), p, 0, y, preview_width); - p += preview_width * 3; - } /* for */ - gtk_widget_draw(wint.preview, NULL); - gdk_flush(); -} /* dialog_update_preview */ - - -/*****/ - -static void -dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, - int left, int right) -{ - GtkWidget *label; - GtkWidget *scale; - GtkWidget *entry; - GtkObject *scale_data; - char buf[256]; - - label = gtk_label_new(title); - gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); - gtk_table_attach(table, label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 4, 0); - gtk_widget_show(label); - - - scale_data = gtk_adjustment_new(*value, left, right, - (right - left) / 20, - (right - left) / 20, - 0); - - gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed", - (GtkSignalFunc) dialog_scale_update, - value); - - scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data)); - gtk_widget_set_usize(scale, SCALE_WIDTH, 0); - gtk_table_attach(table, scale, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE); - gtk_scale_set_digits(GTK_SCALE(scale), 3); - gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS); - gtk_widget_show(scale); - - entry = gtk_entry_new(); - gtk_object_set_user_data(GTK_OBJECT(entry), scale_data); - gtk_object_set_user_data(scale_data, entry); - gtk_widget_set_usize(entry, ENTRY_WIDTH, 0); - sprintf(buf, "%0.2f", *value); - gtk_entry_set_text(GTK_ENTRY(entry), buf); - gtk_signal_connect(GTK_OBJECT(entry), "changed", - (GtkSignalFunc) dialog_entry_update, - value); - gtk_table_attach(GTK_TABLE(table), entry, 2, 3, row, row + 1, 0,0,4, 0); - gtk_widget_show(entry); -} /* dialog_create_value */ - -/*****/ - -static void -dialog_scale_update(GtkAdjustment *adjustment, gdouble *value) -{ - GtkWidget *entry; - char buf[256]; - - if (*value != adjustment->value) { - *value = adjustment->value; - - entry = gtk_object_get_user_data(GTK_OBJECT(adjustment)); - sprintf(buf, "%0.2f", *value); - - gtk_signal_handler_block_by_data(GTK_OBJECT(entry), value); - gtk_entry_set_text(GTK_ENTRY(entry), buf); - gtk_signal_handler_unblock_by_data(GTK_OBJECT(entry), value); - - dialog_update_preview(); - } /* if */ -} /* dialog_scale_update */ -/*****/ - -static void -dialog_entry_update(GtkWidget *widget, gdouble *value) -{ - GtkAdjustment *adjustment; - gdouble new_value; - - new_value = atof(gtk_entry_get_text(GTK_ENTRY(widget))); - - if (*value != new_value) { - adjustment = gtk_object_get_user_data(GTK_OBJECT(widget)); - - if ((new_value >= adjustment->lower) && - (new_value <= adjustment->upper)) { - *value = new_value; - adjustment->value = new_value; - - gtk_signal_emit_by_name(GTK_OBJECT(adjustment), "value_changed"); - - dialog_update_preview(); - } /* if */ - } /* if */ -} /* dialog_entry_update */ - - -static void -dialog_close_callback(GtkWidget *widget, gpointer data) -{ - gtk_main_quit(); -} /* dialog_close_callback */ - - -/*****/ - -static void -dialog_ok_callback(GtkWidget *widget, gpointer data) -{ - wint.run = TRUE; - gtk_widget_destroy(GTK_WIDGET(data)); -} /* dialog_ok_callback */ - - -/*****/ -/* -static void -dialog_reset_callback(GtkWidget *widget, gpointer data) -{ -static mandelbrot_vals_t wvals = { - -2,1,-1.5,1.5,100,0,128,128,128,0,0,0, -}; - gtk_widget_destroy(GTK_WIDGET(data)); - mandelbrot_dialog(); -} -*/ - -/*****/ - -static void -dialog_cancel_callback(GtkWidget *widget, gpointer data) -{ - gtk_widget_destroy(GTK_WIDGET(data)); -} /* dialog_cancel_callback */ - - -static void -mandelbrot_toggle_update (GtkWidget *widget, - gpointer data) -{ - int *toggle_val; - - toggle_val = (int *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - *toggle_val = TRUE; - else - *toggle_val = FALSE; - if (do_redsinus) - wvals.redmode = SINUS; - else if (do_redcosinus) - wvals.redmode = COSINUS; - else if (do_rednone) - wvals.redmode = NONE; - - if (do_greensinus) - wvals.greenmode = SINUS; - else if (do_greencosinus) - wvals.greenmode = COSINUS; - else if (do_greennone) - wvals.greenmode = NONE; - - if (do_bluesinus) - wvals.bluemode = SINUS; - else if (do_bluecosinus) - wvals.bluemode = COSINUS; - else if (do_bluenone) - wvals.bluemode = NONE; - dialog_update_preview(); - - if (do_colormode1) - wvals.colormode = 0; - else if (do_colormode2) - wvals.colormode = 1; - dialog_update_preview(); - -} - -GtkWidget * -mandelbrot_logo_dialog() -{ - GtkWidget *xdlg; - GtkWidget *xlabel; - GtkWidget *xbutton; - GtkWidget *xlogo_box; - GtkWidget *xpreview; - GtkWidget *xframe,*xframe2; - GtkWidget *xvbox; - GtkWidget *xhbox; - char *text; - gchar *temp,*temp2; - char *datapointer; - gint y,x; - xdlg = logodlg = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(xdlg), "About"); - gtk_window_position(GTK_WINDOW(xdlg), GTK_WIN_POS_MOUSE); - gtk_signal_connect(GTK_OBJECT(xdlg), "destroy", - (GtkSignalFunc)dialog_close_callback, - NULL); - - xbutton = gtk_button_new_with_label("OK"); - GTK_WIDGET_SET_FLAGS(xbutton, GTK_CAN_DEFAULT); - gtk_signal_connect(GTK_OBJECT(xbutton), "clicked", - (GtkSignalFunc)mandelbrot_logo_ok_callback, - xdlg); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->action_area), - xbutton, TRUE, TRUE, 0); - gtk_widget_grab_default(xbutton); - gtk_widget_show(xbutton); - - xframe = gtk_frame_new(NULL); - gtk_frame_set_shadow_type(GTK_FRAME(xframe), GTK_SHADOW_ETCHED_IN); - gtk_container_border_width(GTK_CONTAINER(xframe), 10); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(xdlg)->vbox), xframe, TRUE, TRUE, 0); - xvbox = gtk_vbox_new(FALSE, 5); - gtk_container_border_width(GTK_CONTAINER(xvbox), 10); - gtk_container_add(GTK_CONTAINER(xframe), xvbox); - - /* The logo frame & drawing area */ - xhbox = gtk_hbox_new (FALSE, 5); - gtk_box_pack_start (GTK_BOX (xvbox), xhbox, FALSE, TRUE, 0); - - xlogo_box = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (xhbox), xlogo_box, FALSE, FALSE, 0); - - xframe2 = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (xframe2), GTK_SHADOW_IN); - gtk_box_pack_start (GTK_BOX (xlogo_box), xframe2, FALSE, FALSE, 0); - - xpreview = gtk_preview_new (GTK_PREVIEW_COLOR); - gtk_preview_size (GTK_PREVIEW (xpreview), logo_width, logo_height); - temp = g_malloc((logo_width+10)*3); - datapointer=header_data; - for (y = 0; y < logo_height; y++){ - temp2=temp; - for (x = 0; x< logo_width; x++) { - HEADER_PIXEL(datapointer,temp2); temp2+=3;} - gtk_preview_draw_row (GTK_PREVIEW (xpreview), - temp, - 0, y, logo_width); - } - g_free(temp); - gtk_container_add (GTK_CONTAINER (xframe2), xpreview); - gtk_widget_show (xpreview); - gtk_widget_show (xframe2); - gtk_widget_show (xlogo_box); - gtk_widget_show (xhbox); - - xhbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(xvbox), xhbox, TRUE, TRUE, 0); - text = "\nCotting Software Productions\n" - "Bahnhofstrasse 31\n" - "CH-3066 Stettlen (Switzerland)\n\n" - "cotting@mygale.org\n" - "http://www.mygale.org/~cotting\n\n" - "Mandelbrot Fractal Chaos Explorer Plug-In for the GIMP\n" - "Version 1.00\n"; - xlabel = gtk_label_new(text); - gtk_box_pack_start(GTK_BOX(xhbox), xlabel, TRUE, FALSE, 0); - gtk_widget_show(xlabel); - - gtk_widget_show(xhbox); - - gtk_widget_show(xvbox); - gtk_widget_show(xframe); - gtk_widget_show(xdlg); - - gtk_main(); - gdk_flush(); - return xdlg; -} diff --git a/plug-ins/fs/.cvsignore b/plug-ins/fs/.cvsignore new file mode 100644 index 0000000000..1582a79801 --- /dev/null +++ b/plug-ins/fs/.cvsignore @@ -0,0 +1,6 @@ +Makefile.in +Makefile +.deps +_libs +fs +fs2pgm diff --git a/plug-ins/fs/Makefile.am b/plug-ins/fs/Makefile.am new file mode 100644 index 0000000000..d8816ecfc9 --- /dev/null +++ b/plug-ins/fs/Makefile.am @@ -0,0 +1,38 @@ +## Process this file with automake to produce Makefile.in + +pluginlibdir = $(gimpplugindir)/plug-ins + +pluginlib_PROGRAMS = #STD# + +#STD#_SOURCES = \ + #STD#.c + +INCLUDES = \ + $(X_CFLAGS) \ + -I$(top_srcdir) \ + -I$(includedir) + +LDADD = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la \ + $(X_LIBS) \ + -lc + +DEPS = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la + +#STD#_DEPENDENCIES = $(DEPS) + +.PHONY: files + +files: + @files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \ + echo $$p; \ + done + @for subdir in $(SUBDIRS); do \ + files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \ + for file in $$files; do \ + echo $$subdir/$$file; \ + done; \ + done diff --git a/plug-ins/fs/Makefile.classic b/plug-ins/fs/Makefile.classic new file mode 100644 index 0000000000..046467ae07 --- /dev/null +++ b/plug-ins/fs/Makefile.classic @@ -0,0 +1,15 @@ +CC = gcc +CFLAGS = -g -O2 -Wall +LDFLAGS = -g +LDLIBS = -L/usr/X11R6/lib -lgimp -lgtk -lgdk -lglib -lXext -lX11 -lm + +fs: fs.o + +install: fs + cp fs $(HOME)/.gimp/plug-ins/fs + +clean: + $(RM) *.o core *~ + +fs2pgm: fs2pgm.o + $(CC) -g -o $@ $< \ No newline at end of file diff --git a/plug-ins/fs/TODO b/plug-ins/fs/TODO new file mode 100644 index 0000000000..6618ef3d52 --- /dev/null +++ b/plug-ins/fs/TODO @@ -0,0 +1,21 @@ + +Add all the autoconfig/automake stuff, so that the standard build +procedures and such can be used. + +Figure out why the fs executable is as large as it is, and fix it, +unless the automake fix cures this as well. + +Handle non-square pixels properly. If px!=ix or py!=iy, there should +be an option to correct the display. I'm not sure whether this +correction should be on or off by default. Turning it on loses +information; leaving it off distorts the image display. Sigh, +decisions, decisions... + +Save header lines on input so that they can be restored on output. +The "Image:" line will have to be special cased, depending on what +gets done about non-square pixels. All other lines can just be cached +on input and restored on output. + +Write some help information. + + diff --git a/plug-ins/fs/doc/facesaver.txt b/plug-ins/fs/doc/facesaver.txt new file mode 100644 index 0000000000..106e5eb06f --- /dev/null +++ b/plug-ins/fs/doc/facesaver.txt @@ -0,0 +1,50 @@ +From: lou@usenix.UUCP (Lou Katz) +Newsgroups: comp.graphics +Subject: FaceSaver format Revealed +Message-ID: <312@usenix.UUCP> +Date: 16 Jan 90 08:02:52 GMT +Reply-To: lou@usenix.UUCP (Lou Katz) +Organization: USENIX Association, Berkeley, CA +Lines: 41 + +Format of pictures is: + +An ASCII file containing some or all of the following lines: + FirstName: + LastName: + E-mail: + Telephone: + Company: + Address1: + Address2: + CityStateZip: + Date: + PicData: Actual data: width - height - bits/pixel + Image: Should be transformed to: width - height - bits/pixel + (A REQUIRED Blank line) + + Hexified picture in scanline order, in the form suitable for +printing in postscript. It is unpadded scanlines, I believe left to right. +If it is bottom to top it is due to funny transforms in going from the real +scanned image, which came from a video camera turned on its side! (to get a +portrait aspect ratio). +All the images are 8 bits per pixel, and have been intensity levelled to +use up the full dynamic range (each pixel multiplied by 256/(max - min) and +shifted so that min becomes zero). +I'm sorry about that, I should have put out untransformed data. +The original frame grabbing was off a Targa M8, and the gamma varied due +to a number of real world factors. Most pictures had a dynamic range in +the 128 - 196 vicinity. + +The line labeled Image: can be used to correct for non-square pixels. +In most cases, there are 108 (non-square) pixels across in the data, but they +would have been 96 pixels across if they were square. Therefore, +Image: says 96, PicData says 108. + +Lou Katz +Saver of Lost Faces + +lou@usenix.org +(415) 530-8870 + + diff --git a/plug-ins/fs/fs.c b/plug-ins/fs/fs.c new file mode 100644 index 0000000000..b2fca34301 --- /dev/null +++ b/plug-ins/fs/fs.c @@ -0,0 +1,370 @@ +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * Face saver reading and writing code Copyright 1998 by John Kodis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* + * fs.c -- a facesaver/faceserver plugin for the gimp. Developed by + * John Kodis, Dec 1997. Bug reports are welcomed at kodis@jagunet.com + * + * Based on HRZ code by Albert Cahalan , + * which was in turn based on PNM code by Erik Nygren (nygren@mit.edu). + */ + +#include + +#include "gtk/gtk.h" +#include "libgimp/gimp.h" + +static int save_okay = FALSE; + +static void query() +{ + static GParamDef load_args[] = + { + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_STRING, "filename", "The name of the file to load" }, + { PARAM_STRING, "raw_filename", "The name of the file to load" }, + }; + static int nload_args = sizeof (load_args) / sizeof (load_args[0]); + + static GParamDef load_return_vals[] = + { + { PARAM_IMAGE, "image", "Output image" }, + }; + static int nload_return_vals = + sizeof(load_return_vals) / sizeof(*load_return_vals); + + static GParamDef save_args[] = + { + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_IMAGE, "image", "Input image" }, + { PARAM_DRAWABLE, "drawable", "Drawable to save" }, + { PARAM_STRING, "filename", "Name of the file to save the image in" }, + { PARAM_STRING, "raw_filename", "Name of the file to save the image in" } + }; + static int nsave_args = sizeof (save_args) / sizeof (save_args[0]); + + gimp_install_procedure( + "file_fs_load", + "loads files in face saver file format", + "FIXME: write help for file_fs_load", + "John Kodis", "John Kodis", "1997", + "/FS", + NULL, PROC_PLUG_IN, + nload_args, nload_return_vals, + load_args, load_return_vals); + + gimp_install_procedure( + "file_fs_save", + "saves files in face saver file format", + "saves a grayscale image in facesaver format", + "John Kodis", "John Kodis", "1997", + "/FS", + "GRAY*", PROC_PLUG_IN, + nsave_args, 0, + save_args, NULL); + + gimp_register_magic_load_handler( + "file_fs_load", "fs", "", ""); + gimp_register_save_handler( + "file_fs_save", "fs", ""); +} + +typedef struct +{ + int ix, iy, iz; + int px, py, pz; + char *emsg; + unsigned char *pixmap; +} +Fs_info; + +static Fs_info *fs_alloc(void) +{ + Fs_info *fs = g_malloc(sizeof(*fs)); + fs->emsg = g_malloc(FILENAME_MAX + 100); + *fs->emsg = '\0'; + fs->pixmap = NULL; + fs->ix = fs->iy = fs->iz = fs->px = fs->py = fs->pz = 0; + return fs; +} + +static void fs_free(Fs_info *fs) +{ + if (fs) + { + if (fs->emsg) g_free(fs->emsg); + if (fs->pixmap) g_free(fs->pixmap); + g_free(fs); + } +} + +static int fs_ingest(char *fn, Fs_info *fs) +{ + FILE *ifd = fopen(fn, "r"); + if (ifd == NULL) + sprintf(fs->emsg, "can't open file \"%s\"", fn); + else + { + int body = FALSE; + char buf[1000]; + + while (!body && fgets(buf, sizeof(buf), ifd)) + if (strncasecmp(buf, "picdata:", 8) == 0) + sscanf(buf+8, "%d %d %d", &fs->px, &fs->py, &fs->pz); + else if (strncasecmp(buf, "image:", 6) == 0) + sscanf(buf+6, "%d %d %d", &fs->ix, &fs->iy, &fs->iz); + else if (buf[strspn(buf, " \t\n")] == '\0') + body = TRUE; + + if (!body) + sprintf(fs->emsg, "%s: missing body", fn); + else if (!fs->pz) + sprintf(fs->emsg, "%s: bad or missing picdata line", fn); + #ifdef REQUIRE_IMAGE_LINE + else if (!fs->iz) + sprintf(fs->emsg, "%s: bad or missing image line", fn); + #endif + else + { + char *pix_x0; + int x, y, pixval, pixno = 0, pixcnt = fs->px * fs->py; + fs->pixmap = g_malloc(pixcnt + 1); + pix_x0 = fs->pixmap + pixcnt; + for (y=0; ypy; y++) + { + char *pix = (pix_x0 -= fs->px); + for (x=0; xpx; x++) + if (pixno++ < pixcnt && fscanf(ifd, "%2x", &pixval) == 1) + *pix++ = pixval & 0xff; + else + { + sprintf(fs->emsg, "%s: eof at %d of %d (%dx%d) pixels", + fn, pixno, pixcnt, fs->px, fs->py); + return FALSE; + } + } + } + } + return !*fs->emsg; +} + +static gint32 load_image(char *filename) +{ + char *loading; + gint32 image_id, layer_id; + GDrawable *drawable; + GPixelRgn pixel_rgn; + Fs_info *fs = fs_alloc(); + + loading = g_malloc(strlen(filename) + 11); + sprintf(loading, "Loading %s:", filename); + gimp_progress_init(loading); + g_free(loading); + + gimp_progress_update(0.25); + if (!fs_ingest(filename, fs)) + { + fprintf(stderr, "fs_load: %s\n", fs->emsg); + fs_free(fs); + return -1; + } + + /* Create new image of proper size and associate filename; create + and add a new layer to the image, and get a drawable; finally, + initialize the drawing region. */ + gimp_progress_update(0.50); + image_id = gimp_image_new(fs->px, fs->py, GRAY); + gimp_image_set_filename(image_id, filename); + layer_id = gimp_layer_new(image_id, "Background", + fs->px, fs->py, GRAY_IMAGE, 100, NORMAL_MODE); + gimp_image_add_layer(image_id, layer_id, 0); + drawable = gimp_drawable_get(layer_id); + gimp_pixel_rgn_init(&pixel_rgn, drawable, 0, 0, + drawable->width, drawable->height, TRUE, FALSE); + + /* Transfer the pixel buffer into the image layer. */ + gimp_progress_update(0.75); + gimp_pixel_rgn_set_rect(&pixel_rgn, fs->pixmap, 0,0, fs->px, fs->py); + + /* Lastly, display the image and return. */ + gimp_progress_update(1.00); + gimp_drawable_flush(drawable); + return image_id; +} + +static void save_close_callback(GtkWidget *widget, gpointer data) +{ + gtk_main_quit(); +} + +static void save_ok_callback(GtkWidget *widget, gpointer data) +{ + gtk_widget_destroy(GTK_WIDGET(data)); + save_okay = TRUE; +} + +static gint save_image(char *filename, gint32 image_id, gint32 drawable_id) +{ + GPixelRgn pixel_rgn; + GDrawable *drawable; + FILE *fd; + int x, y, w, h; + char *saving, *pixbuf, *pix_x0; + + drawable = gimp_drawable_get(drawable_id); + w = drawable->width; + h = drawable->height; + gimp_pixel_rgn_init(&pixel_rgn, drawable, 0, 0, w, h, FALSE, FALSE); + + if (gimp_drawable_has_alpha(drawable_id)) + { + fprintf(stderr, "fs: can't save images with alpha channels."); + return FALSE; + } + if (gimp_drawable_type(drawable_id) != GRAY_IMAGE) + { + fprintf(stderr, "fs: image must be grayscale for facesaver format\n"); + return FALSE; + } + if ((fd = fopen(filename, "w")) == NULL) + { + fprintf(stderr, "fs: can't open \"%s\"\n", filename); + return FALSE; + } + + saving = g_malloc(strlen(filename) + 11); + sprintf(saving, "Saving %s:", filename); + gimp_progress_init(saving); + g_free(saving); + fprintf(fd, "Picdata: %d %d %d\n", w, h, drawable->bpp * 8); + fprintf(fd, "Image: %d %d %d\n", w, h, drawable->bpp * 8); + + gimp_progress_update(0.25); + pixbuf = g_malloc(w * h); + gimp_pixel_rgn_get_rect(&pixel_rgn, pixbuf, 0, 0, w, h); + gimp_progress_update(0.50); + + pix_x0 = pixbuf + w*h; + for (y=0; yaction_area), + button, TRUE, TRUE, 0); + gtk_widget_grab_default(button); + gtk_widget_show(button); + + button = gtk_button_new_with_label("Cancel"); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_signal_connect_object(GTK_OBJECT(button), "clicked", + (GtkSignalFunc)gtk_widget_destroy, GTK_OBJECT(dlg)); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), + button, TRUE, TRUE, 0); + gtk_widget_show(button); + + gtk_widget_show(dlg); + gtk_main(); + gdk_flush(); + + return save_okay; /* Initially false; true after clicking on "Okay" */ +} + +static void +run(char *name, int params, GParam *param, int *rvals, GParam **rval) +{ + static GParam values[2]; + values[0].type = PARAM_STATUS; + values[0].data.d_status = STATUS_SUCCESS; + + *rvals = 1; + *rval = values; + + if (strcmp(name, "file_fs_load") == 0) + { + gint32 image_id = load_image(param[1].data.d_string); + if (image_id == -1) + values[0].data.d_status = STATUS_EXECUTION_ERROR; + else + { + *rvals = 2; + values[1].type = PARAM_IMAGE; + values[1].data.d_image = image_id; + } + } + else if (strcmp(name, "file_fs_save") == 0) + { + GRunModeType mode = param[0].data.d_int32; + if (mode == RUN_NONINTERACTIVE && params != 4) + values[0].data.d_status = STATUS_CALLING_ERROR; + else if ((mode == RUN_WITH_LAST_VALS) || + (mode == RUN_INTERACTIVE && save_dialog()) ) + { + char *filename = param[3].data.d_string; + gint32 image_id = param[1].data.d_int32; + gint32 drawable_id = param[2].data.d_int32; + if (!save_image(filename, image_id, drawable_id)) + values[0].data.d_status = STATUS_EXECUTION_ERROR; + } + } + else + values[0].data.d_status = STATUS_CALLING_ERROR; +} + +GPlugInInfo PLUG_IN_INFO = +{ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ +}; + +MAIN() diff --git a/plug-ins/fs/fs2pgm.c b/plug-ins/fs/fs2pgm.c new file mode 100644 index 0000000000..603a1a9068 --- /dev/null +++ b/plug-ins/fs/fs2pgm.c @@ -0,0 +1,91 @@ +/* + * fs2pgm.c -- converts a face-saver image to a portable graymap image. + */ + +#include +#include +#include +#include + +static int errors; +static char *progname; +static void error(char *fmt, ...) +{ + va_list ap; + fprintf(stderr, "%s: ", progname); + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + errors++; +} + +int main(int argc, char **argv) +{ + int arg; + + progname = strrchr(argv[0], '/') ? strrchr(argv[0], '/')+1 : argv[0]; + for (arg=1; arg strrchr(ofn, '/')) + *strrchr(ofn, '.') = '\0'; + strcat(ofn, ".pgm"); + + if ((ofd=fopen(ofn, "w")) == NULL) + error("%s: can't open output file \"%s\"\n", + argv[arg], ofn); + else + { + int x, y; + fprintf(ofd, "P5\n%d %d\n%d\n", px, py, 255); + for (y=0; y=3 ) +* Simple Bezier curves (see below) + +2) Refined control:- + +When "snap to grid" is active then using the third mouse button will cause +the point to be constrained to horz/vert (rect grid) or radius/radial +(polar gird). + +3) Proper brush preview. + +4) All brush types can be used including "painting with a pattern". + +5) Painting methods now include selections. + +6) Objects can now be filled with a pattern/colour (using selections+fill). + +7) Can "reload" background image while Gfig is running + +8) Possible to show X/Y pos. + +9) Can limit display to single object in the collection. (see below for more +details). + +10) Bug in GDK/GIMP interaction work around. Should now work on SGIs/Suns +with multiple screen depths. + +This is the second public release of GFig plug-in for the GIMP. With this plug-in you can created vector graphics and "render" them using the GIMPs painting functions. The vector graphics stuff is some what akin to those @@ -21,6 +55,7 @@ already present in the GIMP itself. Patch file ++++++++++ +ONLY required for GIMP <= 0.99.14 All released up to and including 0.99.14 contain a bug in the paintbrush.c code. I have submitted a patch to correct this fault. If you have NOT applied @@ -33,6 +68,9 @@ The patch is included at the end of this README. This define will be removed when the patch is integrated into the GIMP release. +The current version of the GIMP (release 0.99.15 at time of writing) does +NOT require this patch. + Objects +++++++ @@ -41,18 +79,20 @@ The plug-in allows you to draw the following shapes:- Lines Circles Ellipses -n sided polygons (n >=3) -Curves +n sided regular polygons (n >=3) +Curves (arcs) +Spirals +N pointed stars +Simple Beizer curves An object is constructed as a number of control points and these are used to select the object on the drawing area once it has been created. The drawing area preview is currently set to - MIN(256 x 256,img_width x img_height). -You can change this altering the PREVIEW_SIZE item in the source code. -Try and keep to multiples of 256 & remember the small preview scale is -related to this. + MIN(650 x 650,img_width x img_height). + +You can change this altering the PREVIEW_SIZE item in the source code. Operations ++++++++++ @@ -63,25 +103,42 @@ The objects can either be moved independently around the drawing area or all together. Each control point can be moved. + Objects can be copied. + Objects can be deleted. -N sided Polygons can be split into N line segments. + +N sided Polygons can be split into N line segments. This also works for N +pointed stars. + The drawing area can be scaled. + Control points can be hidden. To aid alignment of objects a "grid" can be placed on the drawing area. This can be either a normal rectangular grid or a polar type grid centered in the drawing area. -The spacings of the grid can be changed as well as the colours used to draw the +The spacings of the grid can be changed as well as the colours used to draw the grid lines. When "Snap to grid" is checked then all operations will be constrained to fall on a grid intersection. (Fun when using the polar grid). +Additionally the third mouse button will constrain the point movement to be +on a horiz/vert (for rect grid) or radial/radius (for polar) only when +"Snap to grid" is set. -The image that was selected when Gfig was started can also be shown (scaled) in +The image that was selected when Gfig was started can also be shown (scaled) in the drawing area. (Options tag). -Painting -++++++++ +Painting tab +++++++++++++ +There are three possible mode when painting. + +1) Brush +2) Selection +3) Selection+fill + +Brush +~~~~~ When the paint button is pressed each object will be rendered/drawn onto the image using the currently selected ink colour. The objects can be drawn onto the original layer or onto a new layer (either a single layer or @@ -94,11 +151,11 @@ White. Copy. The last option means that the layer is duplicated from the previous layer -berfore the draw operation is performed (re good for animations). +before the draw operation is performed (re good for animations). -Lines can be drawn in reverse order. This means that polygons/curves/lines that -are normally constructed of lines can be drawn starting at either "end". This -is only noticeable when the current brush has fading turned on. +Lines can be drawn in reverse order. This means that reg polygons/curves/lines +that are normally constructed of lines can be drawn starting at either "end". +This is only noticeable when the current brush has fading turned on. The "Approx Circles/Ellipses" toggle allows the same effects when drawing these types of objects. @@ -106,20 +163,90 @@ Note that in the current version any selections present in the image are first de-selected when Gfig starts up. This is because selections are used to draw circles and ellipses (unless the Approx. Circles & Ellipses toggle is set). -Brush -+++++ +Selection +~~~~~~~~~ +With this method closed selections are made of the objects. See selection +tab for more details. -I am not really happy with these contols. You can select a brush by name -but I would really like to have a preview of the bush as well. - just -copying the GIMP code begs code bloat question. Maybe I'll add a small -preview window that just contains the selected brush. +Selections can only be made on the current layer. +Selection+Fill +~~~~~~~~~~~~~~ +This method first selects the objects and then fills the selection area. The +selection tab gives more details on how the selections are filled. + + +Brush Tab ++++++++++ + +This tab now contains a preview of the selected brush in black ink. If the +brush is too large to fit in the preview use the mouse button to "move" it +around (as with the brush dialog in the main GIMP - until that brush +patch went in!). + +Four types of brush can be used:- + +Normal brush +~~~~~~~~~~~~ +Simply paints with the current brush - honors fading if any The Fade option allows the "brush fading" to be selected. I am sure that some nifty anims can be created with this option. -Presently I suggest that you also have the "Brush" dialog open when doing the -painting since the brush spacing/opacity/selection/mode is honoured in -the rendering. +Pencil brush +~~~~~~~~~~~~ +Same as the GIMPS pencil. + +Airbrush +~~~~~~~~ +As GIMPS airbrush. The "pressure" can be specified and this is reflected in the +preview window. + +Pattern +~~~~~~~ +The lines are drawn with the currently selected pattern. The preview will +show this pattern. + +Note a patch to enable a couple of "hidden" paintbrush features was recently +posted to the GIMP developers list. The patch only allowed these features +to be called via the UI and not the PDB so they cannot be used by Gfig. If they were exported via the PDB then they would have probably broken a number of +scripts and Gfig itself (number of args changes on the PDB call). + +Select tab +++++++++++ + +This is enabled when using either Selection or Selection+fill types when +painting objects. + +The anti aliasing and feather toggles apply to the selection made when +"painting" the objects. The feather radius can be changed. + +The default selection mode is to add to the current selection so each object +add to the overall selection. The other selection modes are also possible +but you must bear in mind the following:- + +Subtraction/Intersection will not produce any selection if no selection is +elect the area in the target window (AFTER starting Gfig up) and then paint +using this method. + +Replace will leave only the last object selection. + +When the paint type is selection+fill then the objects will be selected +and then filled. The opacity of the fill can be chosen. By default a fill +is performed after each section. If filling onto a single layer +then the fill will accumulate on the first objects painted. This will be +noticeable when opacity != 100. To get around this then use replace mode +OR use a new layer for each selection/fill. (Paint tab). Additionally you can +set the fill to be performed after ALL objects have been selected (useful +for intersection type selections). + +Selection of non-closed objects +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +For objects that are not closed the first & last points will be joined +together to form the closed selection. For arcs you can either fill +as segments or sectors. Note straight lines will not cause any selection to be +made. This can be a little confusing when filling since the whole canvas will +be filled if any straight lines are present on it. + Scaling +++++++ @@ -135,10 +262,20 @@ To reposition the objects on the drawing area use SHIFT + MOVE_OBJ operation. Other ops +++++++++ -Double click on polygon object selection to get dialog with slider to +Double click on reg polygon object selection to get dialog with slider to selected the number of sides to draw. -SHIFT + MOVE_PNT will break a polygon into a number of connected lines. +Double click on star object selection to get dialog with slider to +selected the number of points the star will have. + +Double click on spiral object selection to get dialog with slider to +selected the number of turns the spiral will have and it direction. + +Double click on bezier object selection to get dialog which allows you to +control how the curve is displayed and if it is closed. + +SHIFT + MOVE_PNT will break a reg polygon or star into a number of +connected lines. When drawing lines if the SHIFT modifier is used then connected lines can be drawn. @@ -146,13 +283,25 @@ can be drawn. SHIFT + MOVE_OBJ will move all objects. Note if "snap to grid" is selected then the new point will be constrained to fall on a grid intersection. +Mouse button 3 + "snap to grid" will constrain the point to fall on one of the +two gridlines it was originally on. + +The ">" and "<" buttons allow you to selective move through each of the +objects in the collection. The "==" returns the display to normal. If the +"paint" button is pressed then only the single object displayed will be +drawn into the target window. Also when in this mode pressing the shift button +will temporarily show all the objects in the collection. + +The the options tab there is now a toggle that allows you to turn the +position display on and off. + Gfig objects ++++++++++++ The upper right part of gfig contains a scroll region when different collection of objects can be found. When button 1 is pressed on an entry the small preview window will be updated with the objects contained in -the selected figure. Thes objects can then be loaded into the main window +the selected figure. These objects can then be loaded into the main window by using the "Edit" button or the "Merge" button. In the former case the objects area will first be cleared before the new objects are added. In the latter case the objects will be merged into the drawing area. @@ -207,14 +356,14 @@ modify the nme of an entry (similar to other list areas in the GIMP). Installation ++++++++++++ -Simply build(?) the Gfig object and install it in your plug-in directory. +Simply build(see INSTALL) the Gfig object and install it in your +plug-in directory. The program can be found under the following option. The program is distributed as a single "C" source files - hopefully makes building easier. /Filter/Render/Gfig. - In common with a number of other plug-ins Gfig uses an entry in the gimprc file to specify a directory to search for groups of objects. If this entry is absent or unreadable a warning dialog will appear. To remove this warning create the @@ -230,6 +379,35 @@ I have only managed to test this on Linux (8bit + 16bit displays). It should port to other platforms. (I am a little concerned over the rint() function - not sure which other systems have this). +INSTALL ++++++++ + +A number of people had problems compiling Gfig. I have released it a a single "C" +file in the hopes it makes building it easier. I use the following +simple shell script to compile/install Gfig. + +Invoke the script as + + ccgimp gfig + +--- Shell script ccgimp start ---- +: + +LD_LIBRARY_PATH=/usr/local/lib + +export LD_LIBRARY_PATH + +# Compile a gimp program. + +cc -o $* $*.c -lgimp -lglib -lgdk -lgtk -lgimpui -L/usr/X11/lib -lXmu -lX11 -lm + +if [ $? -ne 0 ]; then +exit 1 +fi + +cp $* ~/.gimp/plug-ins/ + +--- Shell script end ---- Problems? +++++++++ @@ -238,28 +416,60 @@ If you have any problems with this plug-in please mail me (alt@picnic.demon.co.uk) and I will try to help. - -TODO +TODO ++++ Some random ideas your thoughts welcome (no order implied & I might never get around to doing them!):- -1) Allow objects to be drawn with different brushes. +1) Allow objects to be drawn with different brushes. (0.95 - Can be done +by selecting each object one at a time and changing the brush). 2) Rotate objects (but you can do this in the GIMP?). -3) More object types (sprial, helix, .....). -4) Scale individual objects. -5) Some type of "Tab" through selection of objects. -6) Preview window for brush selection. +3) More object types (spiral, helix, .....).(0.95 - Added spiral/bezier/star) +4) Scale individual objects. (Still on todo). +5) Some type of "Tab" through selection of objects. (0.95 - Done) +6) Preview window for brush selection.(0.95 - Done) 7) Expand the drawing area (add scroll bars?) -8) Pointer locationa (x,y) indicator +8) Pointer locations (x,y) indicator.(0.95 - Done) Let me know if you find this plug-in useful. +Bezier +~~~~~~ -PATCH -+++++ +OK my maths is a little rusty. The bezier stuff is only very simple. However... +I have tried to abstract as much as possible the bezier calculations from +the drawing of the control points / painting on the screen and in the target +window. + +The bezier function is defined as:- + +void +DrawBezier (gdouble (*points)[2], gint np, gdouble mid, gint depth) +{ +... +} + +Points an array of pairs of doubles that define the control points +np is the number of points. Mid is always starts as 0.5 - and depth +defines how deep the recursion should go when calculating the line points. + +The function should call fp_pnt_add() when a point on the curve has been +calculated. + +If anyone would like to produce a better/faster function then you +should be able to replace the DrawBezier function. (Only the first two args +are really needed). + +The algorithm the current code is based on was obtained by looking +at the many many examples out on the web. +(Bezier drawing seems to be topic of the year for computer degrees +and people learning java!!!) + + +PATCH ONLY REQUIRED FOR GIMP <= 00.99.14 +++++++++++++++++++++++++++++++++++++++++ Apply to paintbrush.c in gimp*/app directory. Long ago this was a bug in another form! (See my web page on the script-fu script I wrote.) @@ -274,3 +484,5 @@ another form! (See my web page on the script-fu script I wrote.) if (num_strokes == 1) paintbrush_non_gui_paint_func (&non_gui_paint_core, drawable_id, 0); + + diff --git a/plug-ins/gfig/doc/doc b/plug-ins/gfig/doc/doc index c9cf945a3d..90825a8983 100644 --- a/plug-ins/gfig/doc/doc +++ b/plug-ins/gfig/doc/doc @@ -4,12 +4,46 @@ GFig Andy Thomas (alt@picnic.demon.co.uk). http://www.picnic.demon.co.uk. -(This README could do with expanding). +(This README could still do with expanding). -Release 0.9. -~~~~~~~~~~~~ +Release 0.95 14.11.97 +~~~~~~~~~~~~~~~~~~~~~ -This is the first release of GFig plug-in for the GIMP. +Change summary from 0.9 +~~~~~~~~~~~~~~~~~~~~~~~ +See below for details. + +1) More object types:- + +* Spiral +* N pointed star (N >=3 ) +* Simple Bezier curves (see below) + +2) Refined control:- + +When "snap to grid" is active then using the third mouse button will cause +the point to be constrained to horz/vert (rect grid) or radius/radial +(polar gird). + +3) Proper brush preview. + +4) All brush types can be used including "painting with a pattern". + +5) Painting methods now include selections. + +6) Objects can now be filled with a pattern/colour (using selections+fill). + +7) Can "reload" background image while Gfig is running + +8) Possible to show X/Y pos. + +9) Can limit display to single object in the collection. (see below for more +details). + +10) Bug in GDK/GIMP interaction work around. Should now work on SGIs/Suns +with multiple screen depths. + +This is the second public release of GFig plug-in for the GIMP. With this plug-in you can created vector graphics and "render" them using the GIMPs painting functions. The vector graphics stuff is some what akin to those @@ -21,6 +55,7 @@ already present in the GIMP itself. Patch file ++++++++++ +ONLY required for GIMP <= 0.99.14 All released up to and including 0.99.14 contain a bug in the paintbrush.c code. I have submitted a patch to correct this fault. If you have NOT applied @@ -33,6 +68,9 @@ The patch is included at the end of this README. This define will be removed when the patch is integrated into the GIMP release. +The current version of the GIMP (release 0.99.15 at time of writing) does +NOT require this patch. + Objects +++++++ @@ -41,18 +79,20 @@ The plug-in allows you to draw the following shapes:- Lines Circles Ellipses -n sided polygons (n >=3) -Curves +n sided regular polygons (n >=3) +Curves (arcs) +Spirals +N pointed stars +Simple Beizer curves An object is constructed as a number of control points and these are used to select the object on the drawing area once it has been created. The drawing area preview is currently set to - MIN(256 x 256,img_width x img_height). -You can change this altering the PREVIEW_SIZE item in the source code. -Try and keep to multiples of 256 & remember the small preview scale is -related to this. + MIN(650 x 650,img_width x img_height). + +You can change this altering the PREVIEW_SIZE item in the source code. Operations ++++++++++ @@ -63,25 +103,42 @@ The objects can either be moved independently around the drawing area or all together. Each control point can be moved. + Objects can be copied. + Objects can be deleted. -N sided Polygons can be split into N line segments. + +N sided Polygons can be split into N line segments. This also works for N +pointed stars. + The drawing area can be scaled. + Control points can be hidden. To aid alignment of objects a "grid" can be placed on the drawing area. This can be either a normal rectangular grid or a polar type grid centered in the drawing area. -The spacings of the grid can be changed as well as the colours used to draw the +The spacings of the grid can be changed as well as the colours used to draw the grid lines. When "Snap to grid" is checked then all operations will be constrained to fall on a grid intersection. (Fun when using the polar grid). +Additionally the third mouse button will constrain the point movement to be +on a horiz/vert (for rect grid) or radial/radius (for polar) only when +"Snap to grid" is set. -The image that was selected when Gfig was started can also be shown (scaled) in +The image that was selected when Gfig was started can also be shown (scaled) in the drawing area. (Options tag). -Painting -++++++++ +Painting tab +++++++++++++ +There are three possible mode when painting. + +1) Brush +2) Selection +3) Selection+fill + +Brush +~~~~~ When the paint button is pressed each object will be rendered/drawn onto the image using the currently selected ink colour. The objects can be drawn onto the original layer or onto a new layer (either a single layer or @@ -94,11 +151,11 @@ White. Copy. The last option means that the layer is duplicated from the previous layer -berfore the draw operation is performed (re good for animations). +before the draw operation is performed (re good for animations). -Lines can be drawn in reverse order. This means that polygons/curves/lines that -are normally constructed of lines can be drawn starting at either "end". This -is only noticeable when the current brush has fading turned on. +Lines can be drawn in reverse order. This means that reg polygons/curves/lines +that are normally constructed of lines can be drawn starting at either "end". +This is only noticeable when the current brush has fading turned on. The "Approx Circles/Ellipses" toggle allows the same effects when drawing these types of objects. @@ -106,20 +163,90 @@ Note that in the current version any selections present in the image are first de-selected when Gfig starts up. This is because selections are used to draw circles and ellipses (unless the Approx. Circles & Ellipses toggle is set). -Brush -+++++ +Selection +~~~~~~~~~ +With this method closed selections are made of the objects. See selection +tab for more details. -I am not really happy with these contols. You can select a brush by name -but I would really like to have a preview of the bush as well. - just -copying the GIMP code begs code bloat question. Maybe I'll add a small -preview window that just contains the selected brush. +Selections can only be made on the current layer. +Selection+Fill +~~~~~~~~~~~~~~ +This method first selects the objects and then fills the selection area. The +selection tab gives more details on how the selections are filled. + + +Brush Tab ++++++++++ + +This tab now contains a preview of the selected brush in black ink. If the +brush is too large to fit in the preview use the mouse button to "move" it +around (as with the brush dialog in the main GIMP - until that brush +patch went in!). + +Four types of brush can be used:- + +Normal brush +~~~~~~~~~~~~ +Simply paints with the current brush - honors fading if any The Fade option allows the "brush fading" to be selected. I am sure that some nifty anims can be created with this option. -Presently I suggest that you also have the "Brush" dialog open when doing the -painting since the brush spacing/opacity/selection/mode is honoured in -the rendering. +Pencil brush +~~~~~~~~~~~~ +Same as the GIMPS pencil. + +Airbrush +~~~~~~~~ +As GIMPS airbrush. The "pressure" can be specified and this is reflected in the +preview window. + +Pattern +~~~~~~~ +The lines are drawn with the currently selected pattern. The preview will +show this pattern. + +Note a patch to enable a couple of "hidden" paintbrush features was recently +posted to the GIMP developers list. The patch only allowed these features +to be called via the UI and not the PDB so they cannot be used by Gfig. If they were exported via the PDB then they would have probably broken a number of +scripts and Gfig itself (number of args changes on the PDB call). + +Select tab +++++++++++ + +This is enabled when using either Selection or Selection+fill types when +painting objects. + +The anti aliasing and feather toggles apply to the selection made when +"painting" the objects. The feather radius can be changed. + +The default selection mode is to add to the current selection so each object +add to the overall selection. The other selection modes are also possible +but you must bear in mind the following:- + +Subtraction/Intersection will not produce any selection if no selection is +elect the area in the target window (AFTER starting Gfig up) and then paint +using this method. + +Replace will leave only the last object selection. + +When the paint type is selection+fill then the objects will be selected +and then filled. The opacity of the fill can be chosen. By default a fill +is performed after each section. If filling onto a single layer +then the fill will accumulate on the first objects painted. This will be +noticeable when opacity != 100. To get around this then use replace mode +OR use a new layer for each selection/fill. (Paint tab). Additionally you can +set the fill to be performed after ALL objects have been selected (useful +for intersection type selections). + +Selection of non-closed objects +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +For objects that are not closed the first & last points will be joined +together to form the closed selection. For arcs you can either fill +as segments or sectors. Note straight lines will not cause any selection to be +made. This can be a little confusing when filling since the whole canvas will +be filled if any straight lines are present on it. + Scaling +++++++ @@ -135,10 +262,20 @@ To reposition the objects on the drawing area use SHIFT + MOVE_OBJ operation. Other ops +++++++++ -Double click on polygon object selection to get dialog with slider to +Double click on reg polygon object selection to get dialog with slider to selected the number of sides to draw. -SHIFT + MOVE_PNT will break a polygon into a number of connected lines. +Double click on star object selection to get dialog with slider to +selected the number of points the star will have. + +Double click on spiral object selection to get dialog with slider to +selected the number of turns the spiral will have and it direction. + +Double click on bezier object selection to get dialog which allows you to +control how the curve is displayed and if it is closed. + +SHIFT + MOVE_PNT will break a reg polygon or star into a number of +connected lines. When drawing lines if the SHIFT modifier is used then connected lines can be drawn. @@ -146,13 +283,25 @@ can be drawn. SHIFT + MOVE_OBJ will move all objects. Note if "snap to grid" is selected then the new point will be constrained to fall on a grid intersection. +Mouse button 3 + "snap to grid" will constrain the point to fall on one of the +two gridlines it was originally on. + +The ">" and "<" buttons allow you to selective move through each of the +objects in the collection. The "==" returns the display to normal. If the +"paint" button is pressed then only the single object displayed will be +drawn into the target window. Also when in this mode pressing the shift button +will temporarily show all the objects in the collection. + +The the options tab there is now a toggle that allows you to turn the +position display on and off. + Gfig objects ++++++++++++ The upper right part of gfig contains a scroll region when different collection of objects can be found. When button 1 is pressed on an entry the small preview window will be updated with the objects contained in -the selected figure. Thes objects can then be loaded into the main window +the selected figure. These objects can then be loaded into the main window by using the "Edit" button or the "Merge" button. In the former case the objects area will first be cleared before the new objects are added. In the latter case the objects will be merged into the drawing area. @@ -207,14 +356,14 @@ modify the nme of an entry (similar to other list areas in the GIMP). Installation ++++++++++++ -Simply build(?) the Gfig object and install it in your plug-in directory. +Simply build(see INSTALL) the Gfig object and install it in your +plug-in directory. The program can be found under the following option. The program is distributed as a single "C" source files - hopefully makes building easier. /Filter/Render/Gfig. - In common with a number of other plug-ins Gfig uses an entry in the gimprc file to specify a directory to search for groups of objects. If this entry is absent or unreadable a warning dialog will appear. To remove this warning create the @@ -230,6 +379,35 @@ I have only managed to test this on Linux (8bit + 16bit displays). It should port to other platforms. (I am a little concerned over the rint() function - not sure which other systems have this). +INSTALL ++++++++ + +A number of people had problems compiling Gfig. I have released it a a single "C" +file in the hopes it makes building it easier. I use the following +simple shell script to compile/install Gfig. + +Invoke the script as + + ccgimp gfig + +--- Shell script ccgimp start ---- +: + +LD_LIBRARY_PATH=/usr/local/lib + +export LD_LIBRARY_PATH + +# Compile a gimp program. + +cc -o $* $*.c -lgimp -lglib -lgdk -lgtk -lgimpui -L/usr/X11/lib -lXmu -lX11 -lm + +if [ $? -ne 0 ]; then +exit 1 +fi + +cp $* ~/.gimp/plug-ins/ + +--- Shell script end ---- Problems? +++++++++ @@ -238,28 +416,60 @@ If you have any problems with this plug-in please mail me (alt@picnic.demon.co.uk) and I will try to help. - -TODO +TODO ++++ Some random ideas your thoughts welcome (no order implied & I might never get around to doing them!):- -1) Allow objects to be drawn with different brushes. +1) Allow objects to be drawn with different brushes. (0.95 - Can be done +by selecting each object one at a time and changing the brush). 2) Rotate objects (but you can do this in the GIMP?). -3) More object types (sprial, helix, .....). -4) Scale individual objects. -5) Some type of "Tab" through selection of objects. -6) Preview window for brush selection. +3) More object types (spiral, helix, .....).(0.95 - Added spiral/bezier/star) +4) Scale individual objects. (Still on todo). +5) Some type of "Tab" through selection of objects. (0.95 - Done) +6) Preview window for brush selection.(0.95 - Done) 7) Expand the drawing area (add scroll bars?) -8) Pointer locationa (x,y) indicator +8) Pointer locations (x,y) indicator.(0.95 - Done) Let me know if you find this plug-in useful. +Bezier +~~~~~~ -PATCH -+++++ +OK my maths is a little rusty. The bezier stuff is only very simple. However... +I have tried to abstract as much as possible the bezier calculations from +the drawing of the control points / painting on the screen and in the target +window. + +The bezier function is defined as:- + +void +DrawBezier (gdouble (*points)[2], gint np, gdouble mid, gint depth) +{ +... +} + +Points an array of pairs of doubles that define the control points +np is the number of points. Mid is always starts as 0.5 - and depth +defines how deep the recursion should go when calculating the line points. + +The function should call fp_pnt_add() when a point on the curve has been +calculated. + +If anyone would like to produce a better/faster function then you +should be able to replace the DrawBezier function. (Only the first two args +are really needed). + +The algorithm the current code is based on was obtained by looking +at the many many examples out on the web. +(Bezier drawing seems to be topic of the year for computer degrees +and people learning java!!!) + + +PATCH ONLY REQUIRED FOR GIMP <= 00.99.14 +++++++++++++++++++++++++++++++++++++++++ Apply to paintbrush.c in gimp*/app directory. Long ago this was a bug in another form! (See my web page on the script-fu script I wrote.) @@ -274,3 +484,5 @@ another form! (See my web page on the script-fu script I wrote.) if (num_strokes == 1) paintbrush_non_gui_paint_func (&non_gui_paint_core, drawable_id, 0); + + diff --git a/plug-ins/gfig/pix_data.h b/plug-ins/gfig/pix_data.h index 41eee37943..40d153d695 100644 --- a/plug-ins/gfig/pix_data.h +++ b/plug-ins/gfig/pix_data.h @@ -376,3 +376,382 @@ static char * delete_xpm[] = { "o o o o o o o ", "o o o o o o o ", "ooo ooo ooooooo o ooo"}; + +/* XPM */ +static char * star_xpm[] = { +"24 24 4 1", +" s None c None", +". c black", +"X c red", +"o c white", +" . ", +" ... ", +" . . ", +" . . ", +" . . ", +" .. .. XXX ", +" ........ ......XoX ", +" .. XXX .XXX ", +" .. XXX XoX.. ", +" .. XoX XXX ", +" .. XXX .. ", +" . . ", +" . . . ", +" .. .... . ", +" . .. .. . ", +" ... ... ", +" .. .. ", +" . . ", +" ... ..... . ... ", +" . . ... . . ", +" .. . . . . . ", +" .. . ... .. ", +" . . . . . . ", +" ... . . . . . "}; + +/* XPM */ +static char * spiral_xpm[] = { +"24 24 4 1", +" s None c None", +". c red", +"X c white", +"o c black", +" ", +" ... ", +" .X.ooooooooooooooo ", +" ... o ", +" o ", +" oooooooooooo o ", +" o o o ", +" o ... o o ", +" o ooo.X. o o ", +" o o ... o o ", +" o o o o ", +" o ooooooooo o ", +" o o ", +" o o ", +" ooooooooooooooo ", +" ", +" ", +"ooo ooo o ooo o o ", +"o o o o o o ooo o ", +"oo o o o o o o o o ", +" oo ooo o oo ooo o ", +" o o o o o o o o ", +"ooo o o o o o o ooo", +" "}; + +/* XPM */ +static char * bezier_xpm[] = { +"24 24 4 1", +" s None c None", +". c red", +"X c white", +"o c black", +" ", +" ... ... ", +" .X. .X. ", +" ... o... ", +" o ", +" ooooo o ", +" o oo o ", +" o ooo ", +" o ", +" o ... ", +" o .X. ", +" ... ... ", +" .X. ", +" ... ", +" ", +" ", +" ", +" oooXooo ooo o ooo oo ", +" o oXo o o o o o ", +" oooXooo o o ooo o o ", +" o oXo o o o oo ", +" o oXo o o o o o ", +" oooXooo ooo o ooo o o ", +" "}; + + +/* XPM */ +static char * rulers_comp_xpm[] = { +"74 85 192 2", +" c None", +". c #965875D65144", +"X c #9E797DF75965", +"o c #861769A64103", +"O c #69A6555530C2", +"+ c #8E3871C64924", +"@ c #BEFB965869A6", +"# c #AEBA8A286185", +"$ c #79E765954103", +"% c #965879E75144", +"& c #C71B9E7971C6", +"* c #CF3CA28971C6", +"= c #A69982075965", +"- c #A69986175965", +"; c #8E386DB64924", +": c #AEBA86175965", +"> c #D75CA69979E7", +", c #8E3869A64103", +"< c #9E7982075965", +"1 c #861765954103", +"2 c #9E797DF75144", +"3 c #79E75D7538E3", +"4 c #9E7979E75144", +"5 c #C71B9A6971C6", +"6 c #71C6596538E3", +"7 c #965871C64924", +"8 c #79E761854103", +"9 c #492434D32081", +"0 c #38E328A21861", +"q c #208118610820", +"w c #28A220811040", +"e c #5965492428A2", +"r c #79E7618538E3", +"t c #28A21C711040", +"y c #28A218610820", +"u c #30C224921040", +"i c #410334D32081", +"p c #492438E32081", +"a c #5144410328A2", +"s c #5965451428A2", +"d c #B6DA8E386185", +"f c #38E32CB21861", +"g c #082008200000", +"h c #B6DA924869A6", +"j c #6185492428A2", +"k c #69A64D3430C2", +"l c #FFFFEBADCF3C", +"z c #49243CF32081", +"x c #410330C21861", +"c c #000000000000", +"v c #BEFB9A6969A6", +"b c #86176DB64924", +"n c #FFFFE79DC71B", +"m c #F7DED75C9E79", +"M c #FFFFE38DBEFB", +"N c #104008200000", +"B c #FFFFC71B6185", +"V c #FFFFAAAA0820", +"C c #FFFFA6990000", +"Z c #FFFFBAEA4103", +"A c #F7DEE38DBEFB", +"S c #28A224921040", +"D c #6185514430C2", +"F c #FFFFB2CA28A2", +"G c #FFFFA2890000", +"H c #FFFFAEBA1861", +"J c #61854D3430C2", +"K c #F7DED34C9658", +"L c #FFFFCB2B71C6", +"P c #71C6555530C2", +"I c #FFFFC30B5144", +"U c #FFFFBEFB4924", +"Y c #30C228A21861", +"T c #FFFFD75C9658", +"R c #186114510820", +"E c #F7DECF3C8617", +"W c #BEFB924869A6", +"Q c #CF3CA69971C6", +"! c #F7DEA2890000", +"~ c #79E76DB630C2", +"^ c #9E7979E72081", +"/ c #CF3C79E71040", +"( c #C71B7DF74103", +") c #30C220811040", +"_ c #51443CF32081", +"` c #69A6514430C2", +"' c #41032CB21861", +"] c #F7DE9E790000", +"[ c #BEFB82074103", +"{ c #CF3C8E381040", +"} c #EFBE92480820", +"| c #C71B924879E7", +" . c #20811C711040", +".. c #000004100000", +"X. c #30C251444924", +"o. c #E79D92480820", +"O. c #A699514428A2", +"+. c #FFFFFBEED75C", +"@. c #FFFFFFFFE79D", +"#. c #71C65D7538E3", +"$. c #10400C300000", +"%. c #E79D9A690820", +"&. c #C71B82074103", +"*. c #FFFFF7DEDF7D", +"=. c #DF7DD75CD75C", +"-. c #E79DE38DCF3C", +";. c #FFFF9E790000", +":. c #EFBE96580820", +">. c #BEFB75D638E3", +",. c #F7DEF7DEE79D", +"<. c #F7DEEFBECF3C", +"1. c #C71BC71BC71B", +"2. c #D75CD34CC71B", +"3. c #F7DEF3CECF3C", +"4. c #DF7D8A280820", +"5. c #A699555528A2", +"6. c #DF7DDB6CC71B", +"7. c #BEFBBEFBBEFB", +"8. c #C71BC30BBEFB", +"9. c #AEBA8E386185", +"0. c #CF3C8A284924", +"q. c #9E79A699A699", +"w. c #71C686178617", +"e. c #B6DAB6DAB6DA", +"r. c #E79DE79DC71B", +"t. c #8E3875D65144", +"y. c #EFBEEBADCF3C", +"u. c #A699AAAAAEBA", +"i. c #CF3CCB2BC71B", +"p. c #514438E32081", +"a. c #492465956185", +"s. c #8E3896589658", +"d. c #BEFBBAEABEFB", +"f. c #861786178617", +"g. c #69A669A669A6", +"h. c #69A66DB669A6", +"j. c #D75C92480820", +"k. c #30C234D330C2", +"l. c #BEFB75D61861", +"z. c #BEFB71C638E3", +"x. c #208114510820", +"c. c #E79D8A280820", +"v. c #AEBAAAAAAEBA", +"b. c #861782078617", +"n. c #596559655965", +"m. c #49244D344924", +"M. c #C71B79E730C2", +"N. c #AEBAB2CAAEBA", +"B. c #AEBAAEBAAEBA", +"V. c #A699A699A699", +"C. c #C71BA28971C6", +"Z. c #082004100000", +"A. c #CF3C861730C2", +"S. c #8E389A699E79", +"D. c #9E79A289A699", +"F. c #EFBEE79DC71B", +"G. c #9E799A699E79", +"H. c #FFFFF7DECF3C", +"J. c #79E78A288E38", +"K. c #208120812081", +"L. c #618565956185", +"P. c #F7DE9A690820", +"I. c #41035D755965", +"U. c #104014511040", +"Y. c #D75C7DF71040", +"T. c #B6DA69A630C2", +"R. c #38E338E338E3", +"E. c #965875D628A2", +"W. c #EFBE9E7928A2", +"Q. c #B6DA86171861", +"!. c #CF3C8E384924", +"~. c #C71B965879E7", +"^. c #618575D671C6", +"/. c #79E779E779E7", +"(. c #71C675D671C6", +"). c #AEBA5D7528A2", +"_. c #B6DA92486185", +"`. c #8E388E388E38", +"'. c #BEFB6DB628A2", +"]. c #DF7D86171040", +"[. c #CF3C92481040", +"{. c #861771C628A2", +"}. c #514451445144", +"|. c #BEFB861769A6", +" X c #8E3871C628A2", +".X c #C71B7DF730C2", +"XX c #71C671C671C6", +"oX c #B6DABAEABEFB", +"OX c #104010401040", +"+X c #69A6596538E3", +"@X c #9E799E799E79", +"#X c #79E77DF779E7", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . X ", +" o O O X ", +" + + @ # $ ", +" $ % & * # $ = ", +" - ; : * > : , X ", +" < o = & * : 1 2 ", +" = + # & & X 3 4 ", +" = . # 5 @ 3 6 # ; 3 , ", +" 7 % 4 7 6 8 6 9 0 q w 9 e ; ", +" = $ $ r 3 t y u 9 i p a u s 6 = ", +" d # O f g i + d h 3 j k 3 l l ", +" z g x = c - v b q s n m m M ", +" = t N p c c c X 3 t O M B V C Z A ", +" 2 S p % c ; ; c O D - x a n B F G C H B M ", +" 7 w J h c o $ c a s q 9 n K V C C C G C L M ", +" 0 s # c O P c . j p f , A I H C C C G C G H U M ", +" x Y = J c c c c 6 6 c J P . L F G C G C C C G G H L T ", +" z R $ r = c o o c r # - + 2 - n E G G C G C C G G C C C C C F ", +" ; 0 0 = = c 4 W h x = Q h # 2 + X @ M I F C C d C G ! ~ ^ C C G G / ( ", +" 7 ) _ . r c . d & _ ; & * * @ 2 ` ` K F G C 4 ' J C ] [ c { ] G } ( | ", +" , .q w .c ; o D J _ a . : W * 5 @ < $ 6 4 C 4 x ..R $ C C c X.{ o.O. +.@. ", +" 7 8 0 q 0 #.4 . 3 1 . + ; . # v & * : 7 o r p $.q #.C G G %.c ( &. *.=.-.@. ", +" h % J O - & @ 8 1 & h . #.#.- & * * h ; O f f G C C C ;.:.>.| ,.<.1.2.3. ", +" 7 % v Q d 4 v * W . o 1 o 2 5 * 5 h 7 O 8 - C G 4.5. +.6.7.7.7.8.<.@. ", +" . # * @ ; + v & 9.. . 8 j . @ 5 * & @ : 1 7 2 0. ,.6.q.w.e.7.7.2.r.@. ", +" 2 4 & Q W j 2 h o #.. < _ 0 ; t.@ & Q * = 1 r + . *.y.7.c c u.e.7.7.i.*. ", +" o X * & 3 o = 6 o o p.g $.6 ; ; 7 9.* * @ : o $ 3 # @ =.1.7.e.c a.w.7.7.7.8.1.i.1. ", +" 2 6 W * # $ + ; o . ` R s c c % ; ; # & * & d # ; k ` = s.d.7.e.c s.7.7.7.7.f.g.h. ", +" # ` 2 & & , 1 o a ` + e 8 G j.c h < ; 7 : v * * v - . r r . 7.7.7.7.7.7.7.d.k.c c ", +" 4 o # & = 3 a q q e ; 3 t.G c l.z. 7 , . W Q * & - 3 6 4 7.7.7.7.7.7.7.k.c c ", +" E r , * 5 4 p x.a r 6 D 3 ;.c.0.| - 6 D 1 # h * * * d % 2 ; 7.7.7.v.b.n.m.m. ", +" n E G ; J d Q @ r s = C . 6 d } O. +.# o D O # * Q * v h 4 r . : b... ", +" n I F C G . ` & & 2 r C G C C / M. *.=.i.d.. 4 ` # d 5 * * 5 4 r 6 n. ", +" K H G G C #.9 @ Q 5 . o C ;.} ( | *.y.N.B.7.7.V.= + b 2 d v * & C.: ` a ; ", +" A L C C C W O Z.$.b 5 Q X 6 C c.O. +.6.e.c c 7.7.7.7.7.# + b . d & * & P f p o ", +" n I F G G G 6 R c ' ` # * h + 4 A. *.=.i.7.S.D.7.7.7.7.7.7.7.% + o o # - 6 O j O . ", +" n K H C C C G #.t x % . X v & d 2 # ,.F.e.e.7.7.7.7.7.7.7.7.7.7.B.G.< ; o r p s 1 + . . ", +" A B V G C C G C G ; = C # ; 4 5 & # - H.=.e.c J.7.7.7.7.7.7.7.7.7.7.n.K. = s q Y #.9.h % % ", +" n B F C G G C G C C G G C C 4 1 - * d . - ,.6.i.e.w.c J.e.7.7.7.7.7.7.B.L.h. - P O ` 7 h @ , + ", +" M m C C C C C C C G G C C G G P.o . & & # o : y.e.d.7.7.J.I.B.7.7.7.7.7.e.G.U. 6 3 ; % p.o 2 ", +" H H G G C C C C C C G G C G Y.T. 1 = * h 6 X N.c S.7.7.e.B.d.7.7.7.7.d.m.R. 5 d E.J i ' t ; ", +" W.4.G C C C :.Q.P.G C C ;.c.!.~. #.t.* * 2 r N.^.V.7.7.7.7.7.7.7.7.v./.L.(. # d - 3 r ", +" | ).P.G G C c X.{ G G G :.5. 4 1 _.* * 3 + 7.7.7.7.7.7.7.7.7.d.`... ", +" '.].C C %.[.~ {.C / >. ; ; @ & 8 , 7.7.7.7.7.7.7.7.d.}.}. ", +" |.A.} G G C Xc } &.| ,.. + h * @ + 7 7.7.7.7.7.7.v.`.m.h. ", +" 5.:.C G C c.O. *.-.7.. . @ > W $ 1 7.7.7.d.7./... ", +" M.Y.G / &. +.=.q.c = o - * & + 6 7.7.7.e.}.L. ", +" |..X:.>.~. ,.y.8.s.a.B.; X & * d b , 7.B.G.R.XX ", +" 5. +.6.8.7.d.e.7.7.; # * * X _ @ L.U. ", +" *.=.c w.e.7.7.7.7.= = C.Q @ ` 4 h. ", +" ,.<.7.w.c u.oX7.7.7.# . # * & = 6 : ", +" =.8.7.e.c a.w.7.7.7.7.2 o # & h ` . ", +" i.XXG.e.w.s.7.7.7.7.7.6 7 * 5 4 , ", +" OXg.e.d.7.7.7.7.7.d.. , d W 7 O J ", +" h.k.B.7.7.7.7.d.}.m.b +X+ s q w 7 ", +" }./.@X7.7.B.b.n.h.. a $ $ e t 1 ", +" K.}.d.d.f... 1 _ 9 #.r #.+ ", +" #Xk.k.n. #.u o h ; $ W ", +" c c m. 8 1 d 9.1 % ", +" c c m. + + # 3 r d ", +" . 6 _ _ . ", +" < $ J 1 ", +" 4 $ # ", +" h ; d ", +" h ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; + diff --git a/plug-ins/refract/CHANGES b/plug-ins/refract/CHANGES new file mode 100644 index 0000000000..1a03e886b1 --- /dev/null +++ b/plug-ins/refract/CHANGES @@ -0,0 +1,12 @@ +1/2/98: refract-Beta + +Refract is back, and better than ever! That's right... The New Layer +checkbox now works properly from layers with and without alpha. + +Fixed so small or goofily placed lenses don't crash. Lo and behold, +lens offsets also seem to be working. How that happened is beyond me. + +Fixed some bad GParam values thing in run(). + +Changed the name of the parameter that determines the lens thickness +to "thick" instead of "depth". diff --git a/plug-ins/refract/FILES b/plug-ins/refract/FILES new file mode 100644 index 0000000000..72300ceedd --- /dev/null +++ b/plug-ins/refract/FILES @@ -0,0 +1,12 @@ +Files that should be in refract distributions: +FILES - this file +INSTALL - Installation instructions (if not part of GIMP distrib) +Makefile +README +TODO +refguts.c - source file containing the actual distort refract code +refmain.c - source file containing query, run, and dialog things +refract.h - common header file, contains configurable settings + +Additional file included in refract-bin distributions: +refract - the compiled plug-in executable for linux-ELF-i386 \ No newline at end of file diff --git a/plug-ins/refract/INSTALL b/plug-ins/refract/INSTALL new file mode 100644 index 0000000000..5de6dad538 --- /dev/null +++ b/plug-ins/refract/INSTALL @@ -0,0 +1,28 @@ +If this file came as part of a GIMP distribution, no special +installation instructions are required. Refract will get built and +installed when all the other plug-ins do. + +However, if you wish to install this plug-in seperately, perhaps +because it's a newer version than the one in your distribution... + +First, try typing + +make install + +If that worked, stop reading and go play with GIMP. If it didn't, +read on... + +At this point in time, refract needs the files megawidget.h and +megawidget.o to compile. Since I've found megawidgets don't fully +suffice my needs, this will probably change in the near future. But +for now, stick those files (or links to them) somewhere where your +compiler can find them when compiling refract... They should be +included somewhere in the plug-ins directory of your GIMP source +distribution. + +You may also wish to dink with the compiler options in the Makefile. +At the moment, as refract is still Not Quite There Yet, it comes +shipped with all sorts of debugging flags turned on and optimizations +turned OFF. If you don't care why refract crashes if and when it +does, go ahead and comment out the debug flags and uncomment the +optimizations. Hopefully it will pick up some speed that way. diff --git a/plug-ins/refract/Makefile.am b/plug-ins/refract/Makefile.am index 81662dbc02..4a853cc3f9 100644 --- a/plug-ins/refract/Makefile.am +++ b/plug-ins/refract/Makefile.am @@ -5,7 +5,10 @@ pluginlibdir = $(gimpplugindir)/plug-ins pluginlib_PROGRAMS = refract refract_SOURCES = \ - refract.c + refmain.c \ + refguts.c \ + refract.h \ + $(top_srcdir)/plug-ins/megawidget/megawidget.h INCLUDES = \ $(X_CFLAGS) \ @@ -13,7 +16,7 @@ INCLUDES = \ -I$(includedir) LDADD = \ - $(top_builddir)/plug-ins/megawidget/megawidget.o \ + $(top_builddir)/plug-ins/megawidget/libmegawidget.a \ $(top_builddir)/libgimp/libgimpui.la \ $(top_builddir)/libgimp/libgimp.la \ $(X_LIBS) \ @@ -21,6 +24,7 @@ LDADD = \ DEPS = \ $(top_builddir)/libgimp/libgimpui.la \ + $(top_srcdir)/plug-ins/megawidget/libmegawidget.a \ $(top_builddir)/libgimp/libgimp.la refract_DEPENDENCIES = $(DEPS) @@ -37,8 +41,3 @@ files: echo $$subdir/$$file; \ done; \ done - - - - - diff --git a/plug-ins/refract/README b/plug-ins/refract/README new file mode 100644 index 0000000000..71fa681ea1 --- /dev/null +++ b/plug-ins/refract/README @@ -0,0 +1,48 @@ +refract: A plug-in for the GIMP 0.99 +by Kevin Turner +http://www.poboxes.com/kevint/gimp/refract.html + +Refract distorts an image by passing it through the lens. The side of +the lens towards the image is flat, the shape the other side is +determined by a height map; a grayscale image where white pixels are +high, black pixels are low, and anything between is somewhere +inbetween. (Refract will accept an RGB image as a lens map, but will +only use the first channel.) + + The thickness of the lens is determined by the "Thickness" +paramater. The "Distance" parameter is the distance between the +bottom of the lens and the image. (The distance between the observer +and the image is fixed at somewhere around infinity minus one. +Fortunately, there are no perspective effects.) + + The two indicies of refraction describe what substances you're +looking through. Index A is for the substance between you and the +lens, index B is that of the material the lens is crafted from. So +when looking from air in to water, index A would be about 1 and index +B is 1.333. These indicies are physical constants and can be obtained +by looking in your copy of the CRC, or using the samples provided. + + The X and Y offsets move the position of the lens. Sorry, +a preview image is on the TO DO list, but it ain't here yet. The +resulting image can be placed on a new layer by checking the "New +layer" checkbox. + + Read the code and the aformentioned web page for more +information. Questions, comments, reservations, and bug reports are +always welcome. + + * * * + +I'm not a very expirenced C programmer, so questions, comments, and +reservations on code and style are more than welcome. This plug-in +was developed on Linux and I will be the first to admit that I'm +rather inexpirenced (okay, ignorant) with other operating systems. +If I do wrong, educate me. + +Credits: +Pixel fetcher routines are from Quartic's whirlpinch plug-in. Thanks, +Quartic[1]! + +1: Quartic, AKA Federico Mena-Quintero + federico@nuclecu.unam.mx + http://www.nuclecu.unam.mx/~federico diff --git a/plug-ins/refract/refguts.c b/plug-ins/refract/refguts.c new file mode 100644 index 0000000000..e26ac1514a --- /dev/null +++ b/plug-ins/refract/refguts.c @@ -0,0 +1,542 @@ +/* refguts.c, 1/2/98 - this file contains the icky stuff. + * refract: a plug-in for the GIMP 0.99 + * By Kevin Turner + * http://www.poboxes.com/kevint/gimp/refract.html + */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +/* Refresher course in optics: + Incident ray is the light ray hitting the surface. + Angles are measured from the perpendicular to the surface. + Angle of reflection is equal to angle of incidence. + Angle of refraction is determined by + + Snell's law: index[a] * sin(a) = index[b] * sin(b) + + If second index is smaller than first, light is bent toward normal. + Otherwise, away. + */ + +#include "refract.h" +#include "libgimp/gimp.h" + +typedef struct { /* Quartic's pixelfetcher thing */ + gint col, row; + gint img_width, img_height, img_bpp, img_has_alpha; + gint tile_width, tile_height; + guchar bg_color[4]; + GDrawable *drawable; + GTile *tile; +} pixel_fetcher_t; + +extern RefractValues refractvals; + +void go_refract(GDrawable *drawable, + gint32 image_id); +static void do_refract(GPixelRgn *dest_rgn, + GPixelRgn *lens_rgn, + pixel_fetcher_t *pf); +static gint delta (gdouble *offset, gdouble slope, gint height); +#ifndef OLD_SLOPE_MACROS +static gdouble slope(gint h, /* FIXME: I should probably be inlined. */ + HEIGHT_TYPE p1, + HEIGHT_TYPE p2, + HEIGHT_TYPE p3, + HEIGHT_TYPE p4); +#endif + +/* More pixelfetcher things */ +static pixel_fetcher_t *pixel_fetcher_new(GDrawable *drawable); +static void pixel_fetcher_set_bg_color(pixel_fetcher_t *pf, guchar r, guchar g, guchar b, guchar a); +static void pixel_fetcher_get_pixel(pixel_fetcher_t *pf, int x, int y, guchar *pixel); +static void pixel_fetcher_destroy(pixel_fetcher_t *pf); + +/* This bilinear interpolation function also borrowed. */ +static guchar bilinear_new (double x, + double y, + guchar v[4][4], + guint8 i); + +static gint sel_x1=-1,sel_x2=-1,sel_y1=-1,sel_y2=-1; +static gint sel_w, sel_h; +static guchar fg_color[4]; + +void +go_refract( GDrawable * drawable, gint32 image_id) +{ + /* For Initialize pixel fetcher. */ + pixel_fetcher_t *pf; + guchar bg_color[4]; + + /* For Initialize lens region. */ + GDrawable *lensmap; + GPixelRgn lens_rgn; + gint lxoff, lyoff; +#if 0 + gint use_x1,use_x2,use_y1,use_y2, use_w, use_h; +#endif + + /* For Initialize dest region. */ + GPixelRgn dest_rgn; + GDrawable *output_drawable; + gint32 new_layer_id; + char buf[256]; + + /*****************************/ + /* Initialize pixel fetcher. */ + + gimp_drawable_mask_bounds (drawable->id, &sel_x1, &sel_y1, &sel_x2, &sel_y2); + sel_w=sel_x2-sel_x1; sel_h=sel_y2-sel_y1; + pf = pixel_fetcher_new(drawable); + gimp_palette_get_background(&bg_color[0], &bg_color[1], &bg_color[2]); + pixel_fetcher_set_bg_color(pf, + bg_color[0], + bg_color[1], + bg_color[2], + 0); + + /***************************/ + /* Initialize lens region: */ + + lensmap = gimp_drawable_get (refractvals.lensmap); + + /* Fortunately, this isn't really run repeatedly, so it's OK if + it's not all that compact, right? */ + +#ifdef __PSYCHIC_COMPILER__ /* If your compiler can read my mind better than I can. */ + + /* Crap. We need a smegging lens-wrap toggle. */ + + if (lens wrap) { + + if (no lens offsets) { + /* no problems. */ + lens_rgn = foo(sel_x1, sel_x2, sel_w, sel_h); + /* To conserve resources, we might want to change that + to take less if the lens stops before the image + does. */ + } else { /* offsets. Uhoh. */ + if (lens_size >= drawable_size) { /* Do this for each dimension. */ + /* Oh, it'll be okay. We'll just add offset and take absmod. */ + if (split) { + lens_rgn = wholething; /* Oh well, we'll take the whole thing. */ + } else { /* not split */ + lens_rgn = foo(sel_x1-xoff, sel_y1-yoff, sel_w, sel_h); + } /* endif not split */ + } else { /* lens is smaller */ + if (split) { g_warning("refract: refguts.c: Go to hell.\n"); } + else { lens_rgn= foo(sel_x1-xoff, sel_y1-yoff, sel_w, sel_h); } + } /* lens is smaller */ + } /* endif offsets */ + + } else { /* no lens wrap */ + /* If there's no lens wrapping, I have no problem. It's yo + own dang fault if your lens doesn't land on your drawable + any more. */ + + /* Let's rub it in... */ + if (((xoff > 0) ? (xoff >= sel_w) : (-xoff <= lens_w)) || + ((yoff > 0) ? (yoff >= sel_h) : (-yoff <= lens_h))) { + g_warning("refract: refguts.c: loose nut detected between chair and keyboard.\n"); + g_error("refract: refguts.c: Offsets move lens off image.\n"); + } else { + lens_rgn = foo(sel_x1-xoff, sel_y1-yoff, sel_w, sel_h); + /* To conserve resources, we might want to change that + to take less if the lens stops before the image + does. */ + } + + } /* endif no lens wrap */ + +#else /* Compiler requires actual code. */ + + gimp_drawable_offsets(lensmap->id,&lxoff, &lyoff); + +#ifdef REFRACT_DEBUG + + g_print("x: %d\ty: %d\tw: %d\th: %d\n", + lxoff, lyoff, + lensmap->width,lensmap->height); + +#endif /* REFRACT_DEBUG */ + +#if 0 /* If we *didn't* wrap the lens... */ + if( (sel_x1 > (lxoff + lensmap->width)) || + (lxoff > sel_x2) || + (sel_y1 > (lyoff + lensmap->height)) || + (lyoff > sel_y2)) { + g_error("refract:refguts.c:Selection and lens don't overlap. You lose.\n"); + } else { + use_x1=MAX(sel_x1,lxoff); + use_x2=MIN(sel_x2,lxoff + lensmap->width); + use_y1=MAX(sel_y1,lyoff); + use_y2=MIN(sel_y2,lyoff + lensmap->height); + use_w=use_x2-use_x1; + use_h=use_y2-use_y1; + } +#endif /* if we didn't wrap lenses */ + + gimp_pixel_rgn_init (&lens_rgn, lensmap, + lxoff, lyoff, lensmap->width, lensmap->height, + FALSE, FALSE); + +#endif /* Compiler requires actual code. */ + + /**********************************/ + /* Initialize destination region: */ + + sprintf(buf,"Refracted %s",gimp_drawable_name(drawable->id)); + + if (refractvals.newl) { /* New layer? Yes... */ + new_layer_id=gimp_layer_new(image_id, buf, sel_w, sel_h, + gimp_drawable_gray(drawable->id) + ? GRAYA_IMAGE : RGBA_IMAGE, + 100.0, NORMAL_MODE); + /* For layer position (currently 0), how would I say + "one above current layer"? */ + gimp_image_add_layer(image_id,new_layer_id,0); + gimp_layer_set_offsets(new_layer_id, sel_x1, sel_y1); + output_drawable=gimp_drawable_get(new_layer_id); + } else { /* New layer No. */ + output_drawable=drawable; + } /* New layer No. */ + + gimp_pixel_rgn_init (&dest_rgn, output_drawable, + sel_x1, sel_y1, sel_w, sel_h, + TRUE, TRUE); + +#ifdef REFRACT_DEBUG + g_print("drawable-id: %d\toutput-id: %d:\tlens_rgn-id: %d\n", + drawable->id,output_drawable->id,lens_rgn.drawable->id); +#endif + + /********/ + /* Misc */ + + gimp_palette_get_foreground(&fg_color[0], &fg_color[1], &fg_color[2]); + fg_color[3] = 255; + + /**********/ + /* Do it! */ + + do_refract(&dest_rgn,&lens_rgn,pf); + + /*************/ + /* Clean up. */ + + /* FIXME: If we are cancelled, make sure there's none of that + unsightly new layer residue. */ + + pixel_fetcher_destroy(pf); + + /* I hope this works... */ + + gimp_drawable_flush(output_drawable); + gimp_drawable_merge_shadow(output_drawable->id,!refractvals.newl); + gimp_drawable_update(output_drawable->id,sel_x1,sel_y1,sel_w,sel_h); + gimp_drawable_detach(drawable); + if (drawable != output_drawable) gimp_drawable_detach(output_drawable); + gimp_drawable_detach(lensmap); + + /* return (refractvals.newl ? new_layer_id : NULL); */ + +} /* go_refract */ + +#define ABSMOD(A,B) ( ((A) < 0) ? (((B) + (A)) % (B)) : ((A) % (B)) ) + +#define X(F) ( ABSMOD((F)+refractvals.xofs,lens_rgn->w) ) +#define Y(F) ( ABSMOD((F)+refractvals.yofs,lens_rgn->h) ) + +#define ROWM2 (lm_rowm2[ X(x) * lens_rgn->bpp ]) +#define ROWM1 (lm_rowm1[ X(x) * lens_rgn->bpp ]) +#define ROW0(F) (lm_row0[ X(x+(F)) * lens_rgn->bpp ]) +#define ROWP1 (lm_rowp1[ X(x) * lens_rgn->bpp ]) +#define ROWP2 (lm_rowp2[ X(x) * lens_rgn->bpp ]) + +#ifdef OLD_SLOPE_MACROS +#define SLOPE_X ((gdouble) 1.0 / (12 * h) * ( ROW0(-2*h) - 8 * ROW0(-1*h) + 8 * ROW0(1*h) - ROW0(2*h) ) * depths ) +#define SLOPE_Y ((gdouble) 1.0 / (12 * h) * ( ROWM2 - 8 * ROWM1 + 8 * ROWP1 - ROWP2 ) * depths ) +#else /* Macros calling the slope function. Functionally equivillant. */ +#define SLOPE_X (slope(h,ROW0(-2*h), ROW0(-1*h), ROW0(1*h), ROW0(2*h))) +#define SLOPE_Y (slope(h,ROWM2, ROWM1, ROWP1, ROWP2)) +#endif /* OLD_SLOPE_MACROS */ + +static void +do_refract(GPixelRgn *dest_rgn, GPixelRgn *lens_rgn, + pixel_fetcher_t *pf) +{ + HEIGHT_TYPE *lm_rowm2, *lm_rowm1, *lm_row0, *lm_rowp1, *lm_rowp2; + HEIGHT_TYPE *lm_rowfoo; + + guchar pixel[4][4]; + guint8 i, j; + gint8 diff_bpp; + guchar *dest, *dest_row; + gdouble dx, dy; + gint x, y, xf, yf; + + gdouble depths=(gdouble) refractvals.thick/ (gdouble) 256.0; /* Depth scalar */ + const gint h=1; /* The delta value for the slope interpolation equation. */ + /* FIXME: Give option of changing h? */ + + /* See if dest_rgn and pf have different bpp */ + diff_bpp = dest_rgn->bpp - pf->img_bpp; + + /***************/ + /* Allocations */ + + lm_rowm2 = g_malloc(lens_rgn->w * lens_rgn->bpp * sizeof(HEIGHT_TYPE)); + lm_rowm1 = g_malloc(lens_rgn->w * lens_rgn->bpp * sizeof(HEIGHT_TYPE)); + lm_row0 = g_malloc(lens_rgn->w * lens_rgn->bpp * sizeof(HEIGHT_TYPE)); + lm_rowp1 = g_malloc(lens_rgn->w * lens_rgn->bpp * sizeof(HEIGHT_TYPE)); + lm_rowp2 = g_malloc(lens_rgn->w * lens_rgn->bpp * sizeof(HEIGHT_TYPE)); + + dest_row = g_malloc(dest_rgn->w * dest_rgn->bpp * sizeof(guchar)); + + /************************/ + /* Grab some lens rows. */ + + gimp_pixel_rgn_get_row(lens_rgn, lm_rowm2, 0, Y(sel_y1 - 2*h), lens_rgn->w); + gimp_pixel_rgn_get_row(lens_rgn, lm_rowm1, 0, Y(sel_y1 - 1*h), lens_rgn->w); + gimp_pixel_rgn_get_row(lens_rgn, lm_row0, 0, Y(sel_y1), lens_rgn->w); + gimp_pixel_rgn_get_row(lens_rgn, lm_rowp1, 0, Y(sel_y1 + 1*h), lens_rgn->w); + gimp_pixel_rgn_get_row(lens_rgn, lm_rowp2, 0, Y(sel_y1 + 2*h), lens_rgn->w); + + /***********************/ + /* Let's begin work... */ + for (y=sel_y1; y < sel_y2; y++) { + + gimp_pixel_rgn_get_row(dest_rgn, dest_row, sel_x1, y, sel_w); + dest = dest_row; + + for (x=sel_x1; x < sel_x2; x++) { + + /* If offsets in both X and Y direction exist... */ + /* (meaning no internal refraction) */ + if (delta(&dx, SLOPE_X, ROW0(0) * depths) && + delta(&dy, SLOPE_Y, ROW0(0) * depths)) { + + switch (refractvals.edge) { + case WRAP: + xf = ABSMOD(x + (gint) dx, dest_rgn->drawable->width); + yf = ABSMOD(y + (gint) dy, dest_rgn->drawable->height); + break; + case BACKGROUND: + case OUTSIDE: + xf = x + (gint) dx; + yf = y + (gint) dy; + break; + default: + g_error("refract: refract.c: Unanticipated value for edge in do_refract\n"); + } /* switch refractvals.edge */ + + pixel_fetcher_get_pixel(pf, xf, yf, pixel[0]); + pixel_fetcher_get_pixel(pf, xf + 1, yf, pixel[1]); + pixel_fetcher_get_pixel(pf, xf, yf + 1, pixel[2]); + pixel_fetcher_get_pixel(pf, xf + 1, yf + 1, pixel[3]); + + for (i = 0; i < pf->img_bpp; i++) { + *dest++ = bilinear_new(dx, dy, pixel, i); + } /* next i */ + /* If dest_rgn has more bpp than pf's source, + then fill in the rest with 255's... This helps + when making a new layer from a non-alpha layer. */ + for (j = 0; j < diff_bpp; j++) { + *dest++ = 255; + } + + } else { /* if a delta() call returns false. */ + for (i = 0; i < dest_rgn->bpp; i++) { + *dest++ = fg_color[i]; + } /* next i */ + } /* endif delta() */ + } /* next x */ + + gimp_pixel_rgn_set_row(dest_rgn, dest_row, sel_x1, y, sel_w); + + if (!(y % PROGRESS_ROWS)) + gimp_progress_update((double) (y-sel_y1) / (double) (sel_y2-sel_y1)); + + /* move lensmap pointers */ + + lm_rowfoo=lm_rowm2; + lm_rowm2=lm_rowm1; + lm_rowm1=lm_row0; + lm_row0= lm_rowp1; + lm_rowp1=lm_rowp2; + lm_rowp2=lm_rowfoo; + + /* get new lensmap row */ + + gimp_pixel_rgn_get_row(lens_rgn, lm_rowp2, 0, Y(y+3*h), lens_rgn->w); + + } /* next y */ +} /* do_refract */ + +#ifndef OLD_SLOPE_MACROS +static gdouble /* FIXME: I should probably be inlined. */ +slope(gint h, HEIGHT_TYPE p1, HEIGHT_TYPE p2, HEIGHT_TYPE p3, HEIGHT_TYPE p4) +{ + /* p1 = f(x-2h), p2 = f(x-1h), p3 = f(x+1h), p4=f(x+2h) */ + return 1.0 / (12 * h) * ( p1 - 8 * p2 + 8 * p3 - p4 ); +} +#endif /* OLD_SLOPE_MACROS */ + +static gint +delta(gdouble *offset, gdouble slope, gint height) +{ + gdouble alpha, beta; + + alpha = atan(slope); + + if( alpha > asin( refractvals.nb / refractvals.na )) { +#ifdef REFRACT_DEBUG + puts("!"); +#endif + return FALSE; /* Total Internal Refraction. Aiee! */ + } + + beta = asin(refractvals.na * sin(alpha)/refractvals.nb); + *offset = -(refractvals.dist + height) * tan(beta - alpha); + + return TRUE; +} + +/* A "borrowed" bilinear interpolation function, modified to select from a + two dimensional array instead of a linear one. */ +static guchar +bilinear_new(double x, double y, guchar values[4][4], guint8 i) +{ + double m0, m1; + + x = fmod(x, 1.0); + y = fmod(y, 1.0); + + if (x < 0.0) + x += 1.0; + + if (y < 0.0) + y += 1.0; + + m0 = (double) values[0][i] + x * ((double) values[1][i] - values[0][i]); + m1 = (double) values[2][i] + x * ((double) values[3][i] - values[2][i]); + + return (guchar) (m0 + y * (m1 - m0)); +} /* bilinear_new */ + +/************************************************************************ + * + * Fun pixel fetching stuff... Quartic's code from whirlpinch.c + * Uses the globals sel_x1,sel_x2,sel_y1,sel_y2. + */ + +static pixel_fetcher_t * +pixel_fetcher_new(GDrawable *drawable) +{ + pixel_fetcher_t *pf; + + pf = g_malloc(sizeof(pixel_fetcher_t)); + + pf->col = -1; + pf->row = -1; + pf->img_width = drawable->width; + pf->img_height = drawable->height; + pf->img_bpp = drawable->bpp; + pf->img_has_alpha = gimp_drawable_has_alpha(drawable->id); + pf->tile_width = gimp_tile_width(); + pf->tile_height = gimp_tile_height(); + pf->bg_color[0] = 0; + pf->bg_color[1] = 0; + pf->bg_color[2] = 0; + pf->bg_color[3] = 0; + + pf->drawable = drawable; + pf->tile = NULL; + + return pf; +} /* pixel_fetcher_new */ + + +/*****/ + +static void +pixel_fetcher_set_bg_color(pixel_fetcher_t *pf, guchar r, guchar g, guchar b, guchar a) +{ + pf->bg_color[0] = r; + pf->bg_color[1] = g; + pf->bg_color[2] = b; + + if (pf->img_has_alpha) + pf->bg_color[pf->img_bpp - 1] = a; +} /* pixel_fetcher_set_bg_color */ + + +/*****/ + +static void +pixel_fetcher_get_pixel(pixel_fetcher_t *pf, int x, int y, guchar *pixel) +{ + gint col, row; + gint coloff, rowoff; + guchar *p; + int i; + + if ((x < sel_x1) || (x >= sel_x2) || + (y < sel_y1) || (y >= sel_y2)) { + for (i = 0; i < pf->img_bpp; i++) + pixel[i] = pf->bg_color[i]; + + return; + } /* if */ + + col = x / pf->tile_width; + coloff = x % pf->tile_width; + row = y / pf->tile_height; + rowoff = y % pf->tile_height; + + if ((col != pf->col) || + (row != pf->row) || + (pf->tile == NULL)) { + if (pf->tile != NULL) + gimp_tile_unref(pf->tile, FALSE); + + pf->tile = gimp_drawable_get_tile(pf->drawable, FALSE, row, col); + gimp_tile_ref(pf->tile); + + pf->col = col; + pf->row = row; + } /* if */ + + p = pf->tile->data + pf->img_bpp * (pf->tile->ewidth * rowoff + coloff); + + for (i = pf->img_bpp; i; i--) + *pixel++ = *p++; +} /* pixel_fetcher_get_pixel */ + + +/*****/ + +static void +pixel_fetcher_destroy(pixel_fetcher_t *pf) +{ + if (pf->tile != NULL) + gimp_tile_unref(pf->tile, FALSE); + + g_free(pf); +} /* pixel_fetcher_destroy */ diff --git a/plug-ins/refract/refmain.c b/plug-ins/refract/refmain.c new file mode 100644 index 0000000000..144d8eed08 --- /dev/null +++ b/plug-ins/refract/refmain.c @@ -0,0 +1,527 @@ +/* refmain.c, 1/2/98 - this file contains startup routine and dialogs. + * refract: A plug-in for the GIMP 0.99. + * Uses a height field as a lens of specified refraction index. + * + * by Kevin Turner + * http://www.poboxes.com/kevint/gimp/refract.html + */ + +/* I require megawidgets to compile! A copy was probably compiled in + the plug-ins directory of your GIMP source distribution, it will + work nicely. Just move me or it somewhere I can see it... */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + + +#ifdef REFRACT_DEBUG +#include +#include +#include +#endif /* DEBUG */ + +#include +#include /* It's not clear to me if this needs be here or no... */ +#include "refract.h" +#include "libgimp/gimp.h" +#include "libgimp/gimpui.h" + +/* megawidget.h could be in any of several places relative to us... */ +/* should this be an autoconf thing? */ +#ifdef HAVE_CONFIG_H /* We're part of the GIMP distribution. */ +#include "../megawidget/megawidget.h" +#else +#include "megawidget.h" +/* #include */ +#endif + +typedef struct { + gint run; +} RefractInterface; + +/* go_refract is in refguts.c */ +extern void go_refract(GDrawable *drawable, + gint32 image_id); +static void query (void); +static void run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals); + +static gint refract_dialog(); +static gint map_constrain(gint32 image_id, + gint32 drawable_id, + gpointer data); +static void newl_toggle_callback (GtkWidget *widget, + gpointer data); +static void tooltips_toggle_callback (GtkWidget *widget, + gpointer data); +static void refract_close_callback(GtkWidget *widget, + gpointer data); +static void refract_ok_callback(GtkWidget *widget, + gpointer data); +static void map_menu_callback (gint32 id, + gpointer data); +static GtkWidget* ior_menu_new(GtkWidget *tieto); +static void ior_menu_callback (GtkWidget *widget, + gfloat *data); + + +GPlugInInfo PLUG_IN_INFO = +{ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ +}; + +/* refractvals defined in refract.h */ +/* not static, used in refguts.c */ +RefractValues refractvals = +{ + -1, /* Lens map ID */ + 32, /* lens thickness */ + 0, /* distance */ + 1.0003, /* index a */ + 1.333, /* index b */ + WRAP, /* wrap behaviour */ + FALSE, /* new layer? */ + 0, /* offset x */ + 0, /* offset y */ +}; + +static RefractInterface refractint = +{ + FALSE /* run */ +}; + +MAIN () + +static void +query () +{ + static GParamDef args[] = + { + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_IMAGE, "image", "Input image" }, + { PARAM_DRAWABLE, "drawable", "Input drawable" }, + /* If we did have parameters, these be them: */ + { PARAM_DRAWABLE, "lensmap", "Lens map drawable" }, + { PARAM_INT32, "thick", "Lens thickness" }, + { PARAM_INT32, "dist", "Lens distance from image" }, + { PARAM_FLOAT, "na", "Index of Refraction A" }, + { PARAM_FLOAT, "nb", "Index of Refraction B" }, + { PARAM_INT32, "edge", "Background (0), Outside (1), Wrap (2)" }, + { PARAM_INT32, "newl", "New layer?" }, + { PARAM_INT32, "xofs", "X offset" }, + { PARAM_INT32, "yofs", "Y offset" } + }; + static GParamDef *return_vals = NULL; + static int nargs = sizeof (args) / sizeof (args[0]); + static int nreturn_vals = 0; + + gimp_install_procedure ("plug_in_refract", + "Uses a height field as a lens.", + "Distorts the image by refracting it through a height field 'lens' with a specified index of refraction.", + "Kevin Turner ", + "Kevin Turner", + "1997", + "/Filters/Distorts/Refract&Reflect...", + "RGB*, GRAY*, INDEXED*", + PROC_PLUG_IN, + nargs, nreturn_vals, + args, return_vals); +} /* query */ + +static void +run (gchar *name, + gint nparams, + GParam *param, + gint *nreturn_vals, + GParam **return_vals) +{ + static GParam values[1]; + GDrawable *drawable; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + +#ifdef REFRACT_DEBUG + printf("refract: pid %d\n", getpid()); +#endif + + run_mode = param[0].data.d_int32; + + *nreturn_vals = 1; + *return_vals = values; + + values[0].type = PARAM_STATUS; + values[0].data.d_status = status; + + drawable = gimp_drawable_get (param[2].data.d_drawable); + + switch (run_mode) { + case RUN_INTERACTIVE: + /* Possibly retrieve data */ + gimp_get_data ("plug_in_refract", &refractvals); + + /* Acquire info with a dialog */ + if (! refract_dialog ()) { + gimp_drawable_detach (drawable); + return; + } + break; + + case RUN_NONINTERACTIVE: + if (status == STATUS_SUCCESS) { + refractvals.lensmap = param[3].data.d_drawable; + refractvals.thick = param[4].data.d_int32; + refractvals.dist = param[5].data.d_int32; + refractvals.na = param[6].data.d_float; + refractvals.nb = param[7].data.d_float; + refractvals.edge = param[8].data.d_int32; + refractvals.newl = param[9].data.d_int32; + refractvals.xofs = param[10].data.d_int32; + refractvals.yofs = param[11].data.d_int32; + } /* if */ + + break; + + case RUN_WITH_LAST_VALS: + /* Possibly retrieve data */ + gimp_get_data ("plug_in_refract", &refractvals); + break; + + default: + break; + } /* switch run_mode */ + + if (gimp_drawable_color (drawable->id) || gimp_drawable_gray (drawable->id)) { + gimp_progress_init ("Doing optics homework..."); + + /* What's this do? */ + gimp_tile_cache_ntiles(2 * (drawable->width + gimp_tile_width() - 1) + / gimp_tile_width()); + + go_refract (drawable, param[1].data.d_image); + + if (run_mode != RUN_NONINTERACTIVE) + gimp_displays_flush (); + + if (run_mode == RUN_INTERACTIVE /*|| run_mode == RUN_WITH_LAST_VALS*/) + gimp_set_data ("plug_in_refract", &refractvals, sizeof (RefractValues)); + } else { + status = STATUS_EXECUTION_ERROR; + } + + values[0].data.d_status = status; + +} /* run */ + +static gint +refract_dialog() +{ + gint argc; + gchar **argv; + + GtkTooltips *tooltips; + GtkWidget *menu, *option_menu, *ior_a_menu, *ior_b_menu; + GtkWidget *ok_button, *cancel_button; + GtkWidget *layercheck, *toolcheck; + GtkWidget *dlg; + GtkWidget *table; + GtkWidget *label; + +#ifdef REFRACT_DEBUG +#if 0 + printf("refract: waiting... (pid %d)\n", getpid()); + kill(getpid(), SIGSTOP); +#endif +#endif + + /* Standard GTK startup sequence */ + argc = 1; + argv = g_new (gchar *, 1); + argv[0] = g_strdup ("refract"); + + gtk_init (&argc, &argv); + + gdk_set_use_xshm(gimp_use_xshm()); + + /* FIXME: Can we use the GIMP colormap when in 8-bit to reduce flashing? */ + /* end standard GTK startup */ + + /* I guess we need a window... */ + dlg = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(dlg), REFRACT_TITLE); + gtk_signal_connect(GTK_OBJECT(dlg), "destroy", + (GtkSignalFunc) refract_close_callback, + NULL); + + tooltips = gtk_tooltips_new (); + + /* Action area: */ + + /* OK */ + ok_button = gtk_button_new_with_label ("OK"); + GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT); + gtk_signal_connect (GTK_OBJECT (ok_button), "clicked", + (GtkSignalFunc) refract_ok_callback, dlg); + gtk_widget_grab_default (ok_button); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), ok_button, + TRUE, TRUE, 0); + gtk_widget_show (ok_button); + + /* Cancel */ + cancel_button = gtk_button_new_with_label ("Cancel"); + GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT); + gtk_signal_connect_object (GTK_OBJECT (cancel_button), "clicked", + (GtkSignalFunc) refract_close_callback, + NULL); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), cancel_button, + TRUE, TRUE, 0); + gtk_widget_show (cancel_button); + + /* Paramater settings: */ + table = gtk_table_new(7, 3, FALSE); + gtk_container_add(GTK_CONTAINER (GTK_DIALOG (dlg)->vbox),table); + gtk_widget_show (table); + + /* FIXME: add preview box */ + + /* drop box for lens map */ + label = gtk_label_new("Lens map"); + + option_menu = gtk_option_menu_new(); + + menu = gimp_drawable_menu_new(map_constrain, map_menu_callback, + NULL, refractvals.lensmap); + gtk_option_menu_set_menu(GTK_OPTION_MENU(option_menu),menu); + gtk_tooltips_set_tips (tooltips, option_menu, + "The drawable to use as the lens."); + + gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,0,1); + gtk_table_attach_defaults(GTK_TABLE(table),option_menu,1,3,0,1); + gtk_widget_show(label); + gtk_widget_show(option_menu); + + /* TODO? Add "Invert lens map" Not anytime soon... */ + /* Would require adding all sorts of conditional subtracting stuff + in the main loop... Let them invert it first! :) */ + + /* Eek. Megawidgets don't return a value I can tie tooltips to. + Maybe I should look in to libgck. */ + + /* entry/scale for lens thickness */ + + mw_iscale_entry_new(table, "Thickness", + 0, 256, + 1, 10, 0, + 0, 2, 1, 2, + &refractvals.thick); + + /* entry/scale pair for distance */ + mw_iscale_entry_new(table, "Distance", + 0, 1000, + 1, 10, 0/*what's this do?*/, + 0, 2, 2, 3, + &refractvals.dist); + + /* a entry/scale/drop-menu for each index */ + mw_fscale_entry_new(table, "Index A", + INDEX_SCALE_MIN, INDEX_SCALE_MAX, + 1.0, 0.1, 0, + 0,1, 3, 4, + &refractvals.na); + + ior_a_menu = ior_menu_new(NULL/*FIXME*/); + gtk_table_attach_defaults(GTK_TABLE(table),ior_a_menu,2,3,3,4); + gtk_widget_show (ior_a_menu); + + gtk_tooltips_set_tips (tooltips, ior_a_menu, + "FIXME (No, it doesn't work.)"); + + mw_fscale_entry_new(table, "Index B", + INDEX_SCALE_MIN, INDEX_SCALE_MAX, + 1.0, 0.1, 0, + 0, 1, 4, 5, + &refractvals.nb); + + ior_b_menu = ior_menu_new(NULL/*FIXME*/); + gtk_table_attach_defaults(GTK_TABLE(table),ior_b_menu,2,3,4,5); + gtk_widget_show (ior_b_menu); + + gtk_tooltips_set_tips (tooltips, ior_b_menu, + "FIXME (No, it doesn't work.)"); + + /* entry/scale pairs for x and y offsets */ + + mw_iscale_entry_new(table, "X Offset", + -1000, 1000, + 1, 20, 0, + 0,2, 5, 6, + &refractvals.xofs); + + mw_iscale_entry_new(table, "Y Offset", + -1000, 1000, + 1, 20, 0, + 0,2, 6, 7, + &refractvals.yofs); + + /* radio buttons for wrap/transparent (or bg, if image isn't layered) */ + + /* button = gtk_check_button_new_with_label ("Wrap?"); + toggle_button_callback (button, gpointer data); + gtk_toggle_button_set_state (GtkToggleButton button, refractvals.edge); */ + + /* Make new layer(s) or dirty the old? */ + layercheck = gtk_check_button_new_with_label ("New layer?"); + gtk_container_add(GTK_CONTAINER (GTK_DIALOG (dlg)->vbox),layercheck); + gtk_signal_connect (GTK_OBJECT (layercheck), "clicked", + GTK_SIGNAL_FUNC (newl_toggle_callback), NULL); + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (layercheck), refractvals.newl); + gtk_tooltips_set_tips (tooltips, layercheck, + "Put the refracted image on a new layer or dirty this one?"); + + gtk_widget_show (layercheck); + + toolcheck = gtk_check_button_new_with_label ("Tooltips?"); + gtk_container_add(GTK_CONTAINER (GTK_DIALOG (dlg)->vbox),toolcheck); + gtk_signal_connect (GTK_OBJECT (toolcheck), "clicked", + GTK_SIGNAL_FUNC (tooltips_toggle_callback), (gpointer) tooltips); + gtk_tooltips_set_tips (tooltips, toolcheck, + "Turn off these dumb tooltips."); + gtk_widget_show (toolcheck); + + /* Tooltips OFF by default. */ + gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toolcheck), FALSE); + gtk_tooltips_disable (tooltips); + + gtk_widget_show (dlg); + + gtk_main (); + gdk_flush (); + + return refractint.run; +} /* refract_dialog */ + +static GtkWidget* +ior_menu_new(GtkWidget *tieto) +{ + GtkWidget *chooser; + GtkWidget *menu, *menuitem; + guint i; + + struct foo + { + const gfloat index; + const gchar *name; + }; + +/* If you change stuff, don't forget to change this. */ +#define NUMSTUFF 9 + static const struct foo material[NUMSTUFF] = + { + /* Common indicies of refraction (for yellow sodium light, 589 nm) */ + /* From my Sears, Zemansky, Young physics book. */ + /* For more, check your copy of the CRC or your favorite pov-ray + include file. */ + + { 1.0003, "Air" }, + { 1.309, "Ice" }, + { 1.333, "Water"}, + { 1.36, "Alcohol"}, + { 1.473, "Glycerine"}, + { 1.52, "Glass"}, + { 1.544, "Quartz"}, + { 1.923, "Zircon"}, + { 2.417, "Diamond"}, + }; + + chooser = gtk_option_menu_new(); + + menu = gtk_menu_new(); + + for (i=0; i < NUMSTUFF; i++) { + menuitem = gtk_menu_item_new_with_label(material[i].name); + gtk_menu_append(GTK_MENU(menu), menuitem); + gtk_signal_connect(GTK_OBJECT(menuitem), "activate", + (GtkSignalFunc)ior_menu_callback,(gfloat *)&material[i].index); + gtk_widget_show(menuitem); + }; /* next i */ + + gtk_option_menu_set_menu(GTK_OPTION_MENU(chooser), menu); + + return chooser; +} + +static void +ior_menu_callback (GtkWidget *widget, gfloat *data) +{ +#ifdef REFRACT_DEBUG + printf("%f\n",*data); +#endif +} + +static gint +map_constrain(gint32 image_id, gint32 drawable_id, gpointer data) +{ + if (drawable_id == -1) + return TRUE; + + return (gimp_drawable_color(drawable_id) || gimp_drawable_gray(drawable_id)); +} /* map_constrain */ + +/* Callbacks */ +static void +newl_toggle_callback (GtkWidget *widget, gpointer data) +{ + refractvals.newl = GTK_TOGGLE_BUTTON (widget)->active; +} + +static void +tooltips_toggle_callback (GtkWidget *widget, gpointer data) +{ + GtkTooltips *tooltips; + tooltips= (GtkTooltips *) data; + + if (GTK_TOGGLE_BUTTON (widget)->active) + gtk_tooltips_enable (tooltips); + else + gtk_tooltips_disable (tooltips); + +} + +static void +refract_close_callback (GtkWidget *widget, + gpointer data) +{ + gtk_main_quit (); +} + +static void +refract_ok_callback (GtkWidget *widget, gpointer data) +{ + refractint.run = TRUE; + gtk_widget_destroy (GTK_WIDGET (data)); +} + +static void +map_menu_callback (gint32 id, gpointer data) +{ + refractvals.lensmap = id; +} diff --git a/plug-ins/refract/refract.c b/plug-ins/refract/refract.c deleted file mode 100644 index 7319141a38..0000000000 --- a/plug-ins/refract/refract.c +++ /dev/null @@ -1,1016 +0,0 @@ -/* refract.c, version 0.1.1-alpha, 23 October 1997 - * A plug-in for the GIMP 0.99. - * Uses a height field as a lens of specified refraction index. - * - * by Kevin Turner - * http://www.poboxes.com/kevint/gimp/refract.html - * - * Check that web page for a more complete description of what the - * plug-in does and does _not_ do. */ - -/* I require megawidgets to compile! A copy was probably compiled in - the plug-ins directory of your GIMP source distribution, it will - work nicely. Just move me or it somewhere I can see it... */ - -/* THIS IS AN ALPHA RELEASE. - - The code is ugly, and the plug-in is NOT full featured and I know I - still have work left to do before it is. Hopefully I'll have much - done by the end of October (well, that's what I thought)... But I - thought I'd go with "release early, release often" in case anyone - cares to improve an alogrythm (or my spelling) or something... - - But it's fun enough that I thought I'd let people play with it... - So enjoy, and keep on hackin'. */ - - -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -/* I'm not a very expirenced C programmer, so questions, comments, and - * reservations on code and style are more than welcome. This plug-in - * was developed on Linux and I will be the first to admit that I'm - * rather inexpirenced (okay, ignorant) with other operating systems. - * If I do wrong, educate me. */ - -/* Pixel fetcher routines are from Quartic's whirlpinch plug-in. - Thanks, Quartic[1]! */ - -/* 1: Quartic, AKA Federico Mena-Quintero - federico@nuclecu.unam.mx - http://www.nuclecu.unam.mx/~federico */ - -/* TO DO: - * UI: - * megawidgets are insufficient. (No way to integrate entry_scale - * with tooltips or option_menu). Replace them. - * necessities: - * Make the "new layer" option work correctly. - * necessary luxuries: - * Make offsets work. Add radio buttons for wrapping options. - * excess luxuries: - * Variable IOR information in some [alpha?] channel. - * for version 1.1: - * THIS PLUGIN NEEDS A PREVIEW THING! - * Reflections - * for version > 1.1: - * Diffraction or whatever that thing that makes rainbows is called. - * Lighting */ - -/* Refresher course in optics: - Incident ray is the light ray hitting the surface. - Angles are measured from the perpendicular to the surface. - Angle of reflection is equal to angle of incidence. - Angle of refraction is determined by - - Snell's law: index[a] * sin(a) = index[b] * sin(b) - - If second index is smaller than first, light is bent toward normal. - Otherwise, away. - */ - -/* Comment out the #define REFRACT_DEBUG for distribution releases, or - * if you get unwanted diagnostic noise from refract on stdout or - * stderr... */ - -#define REFRACT_DEBUG - -#ifdef REFRACT_DEBUG -#include -#include -#endif /* DEBUG */ - -#include -#include /* It's not clear to me if this needs be here or no... */ -#include "gtk/gtk.h" -#include "libgimp/gimp.h" -#include "libgimp/gimpui.h" - -#include "../megawidget/megawidget.h" /* For entry/scale pairs. */ -/* PONDER: How does libgck compare to megawidget? */ -/* I need radio buttons and drop-down menus too... */ - -#ifndef REFRACT_DEBUG -#define REFRACT_TITLE "Refract 12/24/97-Alpha" -#else -#define REFRACT_TITLE "Refract 12/24/97 (debug)" -#endif - -/* Update the progress bar every this-many rows... */ -#define PROGRESS_ROWS 8 - -typedef struct { - gint32 lensmap; /* lens map id */ - gint32 depth; /* lens depth */ - gint32 dist; /* distance */ - gdouble na; /* index a */ - gdouble nb; /* index b */ - gint wrap; /* wrap/transparent */ - gint newl; /* new layer? */ - gint xofs; /* offset x */ - gint yofs; /* offset y */ -} RefractValues; - -typedef struct { - gint x; - gint y; -} EksWhy; - -typedef struct { - gint run; -} RefractInterface; - -typedef struct { /* Quartic's pixelfetcher thing */ - gint col, row; - gint img_width, img_height, img_bpp, img_has_alpha; - gint tile_width, tile_height; - guchar bg_color[4]; - GDrawable *drawable; - GTile *tile; -} pixel_fetcher_t; - - -static void query (void); -static void run (gchar *name, - gint nparams, - GParam *param, - gint *nreturn_vals, - GParam **return_vals); - -static void refract (GDrawable * drawable, - gint32 image_id); -static gint delta (gdouble *offset, gdouble slope, gint height); -static gint refract_dialog(); -static gint map_constrain(gint32 image_id, - gint32 drawable_id, - gpointer data); -static void newl_toggle_callback (GtkWidget *widget, - gpointer data); -static void tooltips_toggle_callback (GtkWidget *widget, - gpointer data); -static void refract_close_callback(GtkWidget *widget, - gpointer data); -static void refract_ok_callback(GtkWidget *widget, - gpointer data); -static void map_menu_callback (gint32 id, - gpointer data); -static GtkWidget* ior_menu_new(GtkWidget *tieto); -static void ior_menu_callback (GtkWidget *widget, - gfloat *data); - -/* More pixelfetcher things */ -static pixel_fetcher_t *pixel_fetcher_new(GDrawable *drawable); -static void pixel_fetcher_set_bg_color(pixel_fetcher_t *pf, guchar r, guchar g, guchar b, guchar a); -static void pixel_fetcher_get_pixel(pixel_fetcher_t *pf, int x, int y, guchar *pixel); -static void pixel_fetcher_destroy(pixel_fetcher_t *pf); - -/* This bilinear interpolation function also borrowed. */ -static guchar bilinear (gdouble x, - gdouble y, - guchar * v); - -GPlugInInfo PLUG_IN_INFO = -{ - NULL, /* init_proc */ - NULL, /* quit_proc */ - query, /* query_proc */ - run, /* run_proc */ -}; - -static RefractValues refractvals = -{ - -1, /* Lens map ID */ - 32, /* lens depth */ - 0, /* distance */ - 1.0003, /* index a */ - 1.333, /* index b */ - 1, /* 0 = wrap, 1 = transparent */ - FALSE, /* new layer? */ - 0, /* offset x */ - 0, /* offset y */ -}; - -static RefractInterface refractint = -{ - FALSE /* run */ -}; - -gint sel_x1=-1,sel_x2=-1,sel_y1=-1,sel_y2=-1; -/* pixel_fetcher uses these as globals and I'm too lazy to make it do otherwise. */ - -MAIN () - -static void -query () -{ - static GParamDef args[] = - { - { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, - { PARAM_IMAGE, "image", "Input image" }, - { PARAM_DRAWABLE, "drawable", "Input drawable" }, - /* If we did have parameters, these be them: */ - { PARAM_DRAWABLE, "lensmap", "Lens map drawable" }, - { PARAM_INT32, "depth", "Lens depth" }, - { PARAM_INT32, "dist", "Lens distance from image" }, - { PARAM_FLOAT, "na", "Index of Refraction A" }, - { PARAM_FLOAT, "nb", "Index of Refraction B" }, - { PARAM_INT32, "wrap", "Wrap (0), Background (1)" }, - { PARAM_INT32, "newl", "New layer?" }, - { PARAM_INT32, "xofs", "X offset" }, - { PARAM_INT32, "yofs", "Y offset" } - }; - static GParamDef *return_vals = NULL; - static int nargs = sizeof (args) / sizeof (args[0]); - static int nreturn_vals = 0; - - gimp_install_procedure ("plug_in_refract", - "Uses a height field as a lens.", - "Distorts the image by refracting it through a height field 'lens' with a specified index of refraction.", - "Kevin Turner ", - "Kevin Turner", - "1997", - "/Filters/Distorts/Refract&Reflect...", - "RGB*, GRAY*, INDEXED*", - PROC_PLUG_IN, - nargs, nreturn_vals, - args, return_vals); -} /* query */ - -static void -run (gchar *name, - gint nparams, - GParam *param, - gint *nreturn_vals, - GParam **return_vals) -{ - static GParam values[1]; - GDrawable *drawable; - GRunModeType run_mode; - GStatusType status = STATUS_SUCCESS; - -#ifdef REFRACT_DEBUG - printf("refract: pid %d\n", getpid()); -#endif - - run_mode = param[0].data.d_int32; - - *nreturn_vals = 1; - *return_vals = values; - - values[0].type = PARAM_STATUS; - values[0].data.d_status = status; - - drawable = gimp_drawable_get (param[2].data.d_drawable); - - switch (run_mode) { - case RUN_INTERACTIVE: - /* Possibly retrieve data */ - gimp_get_data ("plug_in_refract", &refractvals); - - /* Acquire info with a dialog */ - if (! refract_dialog ()) { - gimp_drawable_detach (drawable); - return; - } - break; - - case RUN_NONINTERACTIVE: - if (status == STATUS_SUCCESS) { - refractvals.lensmap = param[3].data.d_drawable; - refractvals.depth = param[4].data.d_int32; - refractvals.dist = param[5].data.d_int32; - refractvals.na = param[6].data.d_float; - refractvals.nb = param[7].data.d_float; - refractvals.wrap = param[8].data.d_int32; - refractvals.newl = param[9].data.d_int32; - refractvals.xofs = param[10].data.d_int32; - refractvals.yofs = param[11].data.d_int32; - } /* if */ - - break; - - case RUN_WITH_LAST_VALS: - /* Possibly retrieve data */ - gimp_get_data ("plug_in_refract", &refractvals); - break; - - default: - break; - } /* switch run_mode */ - - if (gimp_drawable_color (drawable->id) || gimp_drawable_gray (drawable->id)) { - gimp_progress_init ("Doing optics homework..."); - - /* What's this do? */ - gimp_tile_cache_ntiles(2 * (drawable->width + gimp_tile_width() - 1) - / gimp_tile_width()); - - refract (drawable, param[1].data.d_image); - - if (run_mode != RUN_NONINTERACTIVE) - gimp_displays_flush (); - - if (run_mode == RUN_INTERACTIVE /*|| run_mode == RUN_WITH_LAST_VALS*/) - gimp_set_data ("plug_in_refract", &refractvals, sizeof (RefractValues)); - } else { - status = STATUS_EXECUTION_ERROR; - } - - values[0].data.d_status = status; - - gimp_drawable_detach (drawable); -} /* run */ - - -static void -refract( GDrawable * drawable, gint32 image_id) -{ - - GPixelRgn src_rgn, dest_rgn; - GPixelRgn lens_rgn; - GDrawable * output_drawable; - gint32 new_layer_id; - - guchar *lm_rowm2, *lm_rowm1, *lm_row0; - guchar *lm_rowp1, *lm_rowp2, *lm_rowfoo; - guchar *dest, *dest_row; - - GDrawable *lensmap; - gint lm_width, lm_row_width, lm_height; /* Lensmap stuff */ - gint lm_bpp, lm_has_alpha; - - gint x1, y1, x2, y2; /* Bounds of the selection */ - gint x, y, i; - - gdouble depths; /* Depth scalar */ - gdouble dx, dy; - gint xf, yf; - - const gint h=1; /* The delta value for the slope interpolation equation. */ - /* FIXME: Give option of changing h for large maps? */ - - gint img_width, img_height, img_has_alpha, img_bpp; - pixel_fetcher_t *pf; - guchar bg_color[4], fg_color[4]; - guchar pixel[4][4], values[4]; - - gimp_drawable_mask_bounds (drawable->id, &x1, &y1, &x2, &y2); - - sel_x1=x1,sel_y1=y1,sel_x2=x2,sel_y2=y2; - - /* Source region: */ - gimp_pixel_rgn_init (&src_rgn, drawable, x1, y1, (x2-x1), (y2-y1), FALSE, FALSE); - - img_width = gimp_drawable_width(drawable->id); - img_height = gimp_drawable_height(drawable->id); - - /* Destination region: */ - if (refractvals.newl) { - /* FIXME(somewhere): New layer doesn't work right! */ - /* FIXME: Make new layer no bigger than the selection. */ - new_layer_id=gimp_layer_new(image_id,"Refracted",img_width,img_height, - RGBA_IMAGE, /* Should this ever be RGB_IMAGE? */ - 100.0, NORMAL_MODE); /* or could be GRAY */ - gimp_image_add_layer(image_id,new_layer_id,0); - output_drawable=gimp_drawable_get(new_layer_id); - } else - output_drawable=drawable; - - gimp_pixel_rgn_init (&dest_rgn, output_drawable, x1, y1, (x2-x1), (y2-y1), - TRUE, TRUE); - - /* Set up pixel fetcher... */ - pf = pixel_fetcher_new(drawable); - - gimp_palette_get_background(&bg_color[0], &bg_color[1], &bg_color[2]); - gimp_palette_get_foreground(&fg_color[0], &fg_color[1], &fg_color[2]); - fg_color[3] = 255; - - /* Which needs drawable and which needs output_drawable - is somewhat confused. */ - - img_has_alpha = gimp_drawable_has_alpha(output_drawable->id); - img_bpp = gimp_drawable_bpp(output_drawable->id); - - pixel_fetcher_set_bg_color(pf, - bg_color[0], - bg_color[1], - bg_color[2], - (img_has_alpha ? 0 : 255)); - - /* Get the lens map... */ - lensmap = gimp_drawable_get (refractvals.lensmap); - - lm_width = gimp_drawable_width(refractvals.lensmap); - lm_height = gimp_drawable_height(refractvals.lensmap); - lm_bpp = gimp_drawable_bpp(refractvals.lensmap); - lm_has_alpha = gimp_drawable_has_alpha(refractvals.lensmap); - - gimp_pixel_rgn_init (&lens_rgn, lensmap, x1, y1, lm_width, lm_height, FALSE, FALSE); - - dest_row = g_malloc((x2-x1) * img_bpp * sizeof(guchar)); - - if ((x2-x1) >= lm_width) { /* If we need the entire lens map... */ - lm_row_width = lm_width; - } else if (refractvals.xofs == 0) { - /* Image is smaller than lens map, and doesn't */ - /* require wrapping over the edge... */ - lm_row_width = x2-x1; - } else { - /* FIXME */ - g_warning("refract: X offset breaks oversized lensmaps.\n"); - } - - /* lm_rows could (should?) be handled by array, but isn't. */ - - /* FIXME: Increase robustness for lensmaps with rather small heights. */ - - /* FIXME: X offset not used. - That'll take a bit of tweaking... */ - - if (lm_row_width > 0) { - lm_rowm2 = g_malloc(lm_row_width * lm_bpp * sizeof(guchar)); - lm_rowm1 = g_malloc(lm_row_width * lm_bpp * sizeof(guchar)); - lm_row0 = g_malloc(lm_row_width * lm_bpp * sizeof(guchar)); - lm_rowp1 = g_malloc(lm_row_width * lm_bpp * sizeof(guchar)); - lm_rowp2 = g_malloc(lm_row_width * lm_bpp * sizeof(guchar)); - - /* FIXME: Provide an alternative to wrapping - for the top and bottom of the lens map... */ -#define ABSMOD(A,B) ( ((A) < 0) ? (B) + (A) % (B) : (A) % (B) ) - -#define Y(O) ( ABSMOD((O)+refractvals.yofs,lm_height) ) - - gimp_pixel_rgn_get_row(&lens_rgn, lm_rowm2, 0, Y(y1 - 2), lm_row_width); - gimp_pixel_rgn_get_row(&lens_rgn, lm_rowm1, 0, Y(y1 - 1), lm_row_width); - - gimp_pixel_rgn_get_row(&lens_rgn, lm_row0, 0, Y(y1), lm_row_width); - - gimp_pixel_rgn_get_row(&lens_rgn, lm_rowp1, 0, Y(y1 + 1), lm_row_width); - gimp_pixel_rgn_get_row(&lens_rgn, lm_rowp2, 0, Y(y1 + 2), lm_row_width); - - } else { - /* FIXME */ - g_warning("refract: Row buffers not initalized.\n"); - } - - - depths = (gdouble) refractvals.depth/ (gdouble) 256.0; - - for (y=y1; y < y2; y++) { - - gimp_pixel_rgn_get_row(&dest_rgn, dest_row, x1, y, (x2-x1)); - dest = dest_row; - - for (x=x1; x < x2; x++) { - - /* So on a scale of 1 to 100, how far below zero does this - rank for coding style? */ - - /* FIXME: This may not produce the desired behaviour with - lm_row_width < lm_width and xofs != 0 */ - -#define X(O) ( ABSMOD((O)+refractvals.xofs,lm_row_width) ) - -#define ROWM2 (lm_rowm2[ X(x) * lm_bpp ]) -#define ROWM1 (lm_rowm1[ X(x) * lm_bpp ]) -#define ROW0(O) (lm_row0[ X(x+0) * lm_bpp ]) -#define ROWP1 (lm_rowp1[ X(x) * lm_bpp ]) -#define ROWP2 (lm_rowp2[ X(x) * lm_bpp ]) - -#define SLOPE_X ((gdouble) 1.0 / (12 * h) * ( ROW0(-2) - 8 * ROW0(-1) + 8 * ROW0(1) - ROW0(2) ) * depths ) -#define SLOPE_Y ((gdouble) 1.0 / (12 * h) * ( ROWM2 - 8 * ROWM1 + 8 * ROWP1 - ROWP2 ) * depths ) - - if (delta(&dx, SLOPE_X, ROW0(0) * depths) && - delta(&dy, SLOPE_Y, ROW0(0) * depths)) { - - if (refractvals.wrap) { - xf = ABSMOD(x + (gint) dx, img_width); - yf = ABSMOD(y + (gint) dy, img_height); - } else { - xf = x + (gint) dx; - yf = y + (gint) dy; - } - - pixel_fetcher_get_pixel(pf, xf, yf, pixel[0]); - pixel_fetcher_get_pixel(pf, xf + 1, yf, pixel[1]); - pixel_fetcher_get_pixel(pf, xf, yf + 1, pixel[2]); - pixel_fetcher_get_pixel(pf, xf + 1, yf + 1, pixel[3]); - - for (i = 0; i < img_bpp; i++) { - values[0] = pixel[0][i]; - values[1] = pixel[1][i]; - values[2] = pixel[2][i]; - values[3] = pixel[3][i]; - - *dest++ = bilinear(dx, dy, values); - } /* for */ - - } else { /* if a delta() call returns FALSE */ - for (i = 0; i < img_bpp; i++) { - *dest++ = fg_color[i]; - } /* for */ - }/* if */ - - } /* next x */ - - gimp_pixel_rgn_set_row(&dest_rgn, dest_row, x1, y, (x2-x1)); - - /* On the theory that a % takes less time than an update, - we only need them done occasionally... */ - if (!(y % PROGRESS_ROWS)) - gimp_progress_update((double) (y-y1) / (double) (y2-y1)); - - lm_rowfoo=lm_rowm2; lm_rowm2=lm_rowm1; lm_rowm1=lm_row0; lm_row0= lm_rowp1; - lm_rowp1=lm_rowp2; lm_rowp2=lm_rowfoo; - - gimp_pixel_rgn_get_row(&lens_rgn, lm_rowp2, x1, Y(y+3), lm_row_width); - - } /* next y */ - - /* Cleanup */ - - /* FIXME: Make *certain* that anything we created (e.g. new layers) is cleaned - up when plug-in is cancelled! */ - - pixel_fetcher_destroy(pf); - - g_free(dest_row); - - g_free(lm_rowm2);g_free(lm_rowm1); - g_free(lm_row0); - g_free(lm_rowp1);g_free(lm_rowp2); - - gimp_drawable_flush(output_drawable); - gimp_drawable_merge_shadow(output_drawable->id, TRUE); - gimp_drawable_update(output_drawable->id, x1, y1, (x2-x1), (y2-y1)); - - gimp_drawable_detach (output_drawable); - - if(refractvals.newl) { - gimp_drawable_flush(drawable); - gimp_drawable_detach(drawable); - } - -} /* refract */ - -static gint -delta(gdouble *offset, gdouble slope, gint height) -{ - gdouble alpha, beta; - - alpha = atan(slope); - - if( alpha > asin( refractvals.nb / refractvals.na )) { -#ifdef REFRACT_DEBUG - puts("!"); -#endif - return FALSE; /* Total Internal Refraction. Aiee! */ - } - - beta = asin(refractvals.na * sin(alpha)/refractvals.nb); - *offset = -(refractvals.dist + height) * tan(beta - alpha); - - return TRUE; -} - -/* Realistically, this number should be 1.0. An index of refraction - of less than 1 means the speed of light in that substance is - *faster* than in a vacuum! But hey, it's GIMP, when was the last - time we payed any attention to reality? Go ahead... Add - "subspace" to the list of materials... */ -#define INDEX_SCALE_MIN 0.0 - -static gint -refract_dialog() -{ - gint argc; - gchar **argv; - - GtkTooltips *tooltips; - GtkWidget *menu, *option_menu, *ior_a_menu, *ior_b_menu; - GtkWidget *ok_button, *cancel_button; - GtkWidget *layercheck, *toolcheck; - GtkWidget *dlg; - GtkWidget *table; - GtkWidget *label; - -#ifdef REFRACT_DEBUG -#if 0 - printf("refract: waiting... (pid %d)\n", getpid()); - kill(getpid(), SIGSTOP); -#endif -#endif - - /* Standard GTK startup sequence */ - argc = 1; - argv = g_new (gchar *, 1); - argv[0] = g_strdup ("refract"); - - gtk_init (&argc, &argv); - - gdk_set_use_xshm(gimp_use_xshm()); - - /* FIXME: Can we use the GIMP colormap when in 8-bit to reduce flashing? */ - /* end standard GTK startup */ - - /* I guess we need a window... */ - dlg = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(dlg), REFRACT_TITLE); - gtk_signal_connect(GTK_OBJECT(dlg), "destroy", - (GtkSignalFunc) refract_close_callback, - NULL); - - tooltips = gtk_tooltips_new (); - - /* Action area: */ - - /* OK */ - ok_button = gtk_button_new_with_label ("OK"); - GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT); - gtk_signal_connect (GTK_OBJECT (ok_button), "clicked", - (GtkSignalFunc) refract_ok_callback, dlg); - gtk_widget_grab_default (ok_button); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), ok_button, - TRUE, TRUE, 0); - gtk_widget_show (ok_button); - - /* Cancel */ - cancel_button = gtk_button_new_with_label ("Cancel"); - GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT); - gtk_signal_connect_object (GTK_OBJECT (cancel_button), "clicked", - (GtkSignalFunc) refract_close_callback, - NULL); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), cancel_button, - TRUE, TRUE, 0); - gtk_widget_show (cancel_button); - - /* Paramater settings: */ - table = gtk_table_new(7, 3, FALSE); - gtk_container_add(GTK_CONTAINER (GTK_DIALOG (dlg)->vbox),table); - gtk_widget_show (table); - - /* FIXME: add preview box */ - - /* drop box for lens map */ - label = gtk_label_new("Lens map"); - - option_menu = gtk_option_menu_new(); - - menu = gimp_drawable_menu_new(map_constrain, map_menu_callback, - NULL, refractvals.lensmap); - gtk_option_menu_set_menu(GTK_OPTION_MENU(option_menu),menu); - gtk_tooltips_set_tips (tooltips, option_menu, - "The drawable to use as the lens."); - - gtk_table_attach_defaults(GTK_TABLE(table),label,0,1,0,1); - gtk_table_attach_defaults(GTK_TABLE(table),option_menu,1,3,0,1); - gtk_widget_show(label); - gtk_widget_show(option_menu); - - /* TODO? Add "Invert lens map" Not anytime soon... */ - /* Would require adding all sorts of conditional subtracting stuff - in the main loop... Let them invert it first! :) */ - - /* Eek. Megawidgets don't return a value I can tie tooltips to. - Maybe I should look in to libgck. */ - - /* entry/scale for depth of lens */ - - mw_iscale_entry_new(table, "Depth", - 0, 256, - 1, 10, 0, - 0, 2, 1, 2, - &refractvals.depth); - - /* entry/scale pair for distance */ - mw_iscale_entry_new(table, "Distance", - 0, 1000, - 1, 10, 0/*what's this do?*/, - 0, 2, 2, 3, - &refractvals.dist); - - /* a entry/scale/drop-menu for each index */ - mw_fscale_entry_new(table, "Index A", - INDEX_SCALE_MIN, 5.0, - 1.0, 0.1, 0, - 0,1, 3, 4, - &refractvals.na); - - ior_a_menu = ior_menu_new(NULL/*FIXME*/); - gtk_table_attach_defaults(GTK_TABLE(table),ior_a_menu,2,3,3,4); - gtk_widget_show (ior_a_menu); - - gtk_tooltips_set_tips (tooltips, ior_a_menu, - "FIXME (No, it doesn't work.)"); - - mw_fscale_entry_new(table, "Index B", - INDEX_SCALE_MIN, 5.0, - 1.0, 0.1, 0, - 0, 1, 4, 5, - &refractvals.nb); - - ior_b_menu = ior_menu_new(NULL/*FIXME*/); - gtk_table_attach_defaults(GTK_TABLE(table),ior_b_menu,2,3,4,5); - gtk_widget_show (ior_b_menu); - - gtk_tooltips_set_tips (tooltips, ior_b_menu, - "FIXME (No, it doesn't work.)"); - - /* entry/scale pairs for x and y offsets */ - - mw_iscale_entry_new(table, "X Offset", - -1000, 1000, - 1, 20, 0, - 0,2, 5, 6, - &refractvals.xofs); - - mw_iscale_entry_new(table, "Y Offset", - -1000, 1000, - 1, 20, 0, - 0,2, 6, 7, - &refractvals.yofs); - - /* radio buttons for wrap/transparent (or bg, if image isn't layered) */ - - /* button = gtk_check_button_new_with_label ("Wrap?"); - toggle_button_callback (button, gpointer data); - gtk_toggle_button_set_state (GtkToggleButton button, refractvals.wrap); */ - - /* Make new layer(s) or dirty the old? */ - layercheck = gtk_check_button_new_with_label ("New layer?"); - gtk_container_add(GTK_CONTAINER (GTK_DIALOG (dlg)->vbox),layercheck); - gtk_signal_connect (GTK_OBJECT (layercheck), "clicked", - GTK_SIGNAL_FUNC (newl_toggle_callback), NULL); - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (layercheck), refractvals.newl); - gtk_tooltips_set_tips (tooltips, layercheck, - "Put the refracted image on a new layer or dirty this one?"); - - gtk_widget_show (layercheck); - - toolcheck = gtk_check_button_new_with_label ("Tooltips?"); - gtk_container_add(GTK_CONTAINER (GTK_DIALOG (dlg)->vbox),toolcheck); - gtk_signal_connect (GTK_OBJECT (toolcheck), "clicked", - GTK_SIGNAL_FUNC (tooltips_toggle_callback), (gpointer) tooltips); - gtk_tooltips_set_tips (tooltips, toolcheck, - "Turn off these dumb tooltips."); - gtk_widget_show (toolcheck); - - /* Tooltips OFF by default. */ - gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toolcheck), FALSE); - gtk_tooltips_disable (tooltips); - - gtk_widget_show (dlg); - - gtk_main (); - gdk_flush (); - - return refractint.run; -} /* refract_dialog */ - -static GtkWidget* -ior_menu_new(GtkWidget *tieto) -{ - GtkWidget *chooser; - GtkWidget *menu, *menuitem; - guint i; - - struct foo - { - const gfloat index; - const gchar *name; - }; - -/* If you change stuff, don't forget to change this. */ -#define NUMSTUFF 9 - static const struct foo material[NUMSTUFF] = - { - /* Common indicies of refraction (for yellow sodium light, 589 nm) */ - /* From my Sears, Zemansky, Young physics book. */ - /* For more, check your copy of the CRC or your favorite pov-ray - include file. */ - - { 1.0003, "Air" }, - { 1.309, "Ice" }, - { 1.333, "Water"}, - { 1.36, "Alcohol"}, - { 1.473, "Glycerine"}, - { 1.52, "Glass"}, - { 1.544, "Quartz"}, - { 1.923, "Zircon"}, - { 2.417, "Diamond"}, - }; - - chooser = gtk_option_menu_new(); - - menu = gtk_menu_new(); - - for (i=0; i < NUMSTUFF; i++) { - menuitem = gtk_menu_item_new_with_label(material[i].name); - gtk_menu_append(GTK_MENU(menu), menuitem); - gtk_signal_connect(GTK_OBJECT(menuitem), "activate", - (GtkSignalFunc)ior_menu_callback,(gfloat *)&material[i].index); - gtk_widget_show(menuitem); - }; /* next i */ - - gtk_option_menu_set_menu(GTK_OPTION_MENU(chooser), menu); - - return chooser; -} - -static void -ior_menu_callback (GtkWidget *widget, gfloat *data) -{ -#ifdef REFRACT_DEBUG - printf("%f\n",*data); -#endif -} - -static gint -map_constrain(gint32 image_id, gint32 drawable_id, gpointer data) -{ - if (drawable_id == -1) - return TRUE; - - return (gimp_drawable_color(drawable_id) || gimp_drawable_gray(drawable_id)); -} /* map_constrain */ - -/* Callbacks */ -static void -newl_toggle_callback (GtkWidget *widget, gpointer data) -{ - refractvals.newl = GTK_TOGGLE_BUTTON (widget)->active; -} - -static void -tooltips_toggle_callback (GtkWidget *widget, gpointer data) -{ - GtkTooltips *tooltips; - tooltips= (GtkTooltips *) data; - - if (GTK_TOGGLE_BUTTON (widget)->active) - gtk_tooltips_enable (tooltips); - else - gtk_tooltips_disable (tooltips); - -} - -static void -refract_close_callback (GtkWidget *widget, - gpointer data) -{ - gtk_main_quit (); -} - -static void -refract_ok_callback (GtkWidget *widget, gpointer data) -{ - refractint.run = TRUE; - gtk_widget_destroy (GTK_WIDGET (data)); -} - -static void -map_menu_callback (gint32 id, gpointer data) -{ - refractvals.lensmap = id; -} - -/********************************************** - * A borrowed bilinear interpolation function. - */ - -static guchar -bilinear(double x, double y, guchar *values) -{ - double m0, m1; - - x = fmod(x, 1.0); - y = fmod(y, 1.0); - - if (x < 0.0) - x += 1.0; - - if (y < 0.0) - y += 1.0; - - m0 = (double) values[0] + x * ((double) values[1] - values[0]); - m1 = (double) values[2] + x * ((double) values[3] - values[2]); - - return (guchar) (m0 + y * (m1 - m0)); -} /* bilinear */ - - -/************************************************************************ - * - * Fun pixel fetching stuff... Quartic's code from whirlpinch.c - * Uses the globals sel_x1,sel_x2,sel_y1,sel_y2. - */ - -static pixel_fetcher_t * -pixel_fetcher_new(GDrawable *drawable) -{ - pixel_fetcher_t *pf; - - pf = g_malloc(sizeof(pixel_fetcher_t)); - - pf->col = -1; - pf->row = -1; - pf->img_width = gimp_drawable_width(drawable->id); - pf->img_height = gimp_drawable_height(drawable->id); - pf->img_bpp = gimp_drawable_bpp(drawable->id); - pf->img_has_alpha = gimp_drawable_has_alpha(drawable->id); - pf->tile_width = gimp_tile_width(); - pf->tile_height = gimp_tile_height(); - pf->bg_color[0] = 0; - pf->bg_color[1] = 0; - pf->bg_color[2] = 0; - pf->bg_color[3] = 0; - - pf->drawable = drawable; - pf->tile = NULL; - - return pf; -} /* pixel_fetcher_new */ - - -/*****/ - -static void -pixel_fetcher_set_bg_color(pixel_fetcher_t *pf, guchar r, guchar g, guchar b, guchar a) -{ - pf->bg_color[0] = r; - pf->bg_color[1] = g; - pf->bg_color[2] = b; - - if (pf->img_has_alpha) - pf->bg_color[pf->img_bpp - 1] = a; -} /* pixel_fetcher_set_bg_color */ - - -/*****/ - -static void -pixel_fetcher_get_pixel(pixel_fetcher_t *pf, int x, int y, guchar *pixel) -{ - gint col, row; - gint coloff, rowoff; - guchar *p; - int i; - - if ((x < sel_x1) || (x >= sel_x2) || - (y < sel_y1) || (y >= sel_y2)) { - for (i = 0; i < pf->img_bpp; i++) - pixel[i] = pf->bg_color[i]; - - return; - } /* if */ - - col = x / pf->tile_width; - coloff = x % pf->tile_width; - row = y / pf->tile_height; - rowoff = y % pf->tile_height; - - if ((col != pf->col) || - (row != pf->row) || - (pf->tile == NULL)) { - if (pf->tile != NULL) - gimp_tile_unref(pf->tile, FALSE); - - pf->tile = gimp_drawable_get_tile(pf->drawable, FALSE, row, col); - gimp_tile_ref(pf->tile); - - pf->col = col; - pf->row = row; - } /* if */ - - p = pf->tile->data + pf->img_bpp * (pf->tile->ewidth * rowoff + coloff); - - for (i = pf->img_bpp; i; i--) - *pixel++ = *p++; -} /* pixel_fetcher_get_pixel */ - - -/*****/ - -static void -pixel_fetcher_destroy(pixel_fetcher_t *pf) -{ - if (pf->tile != NULL) - gimp_tile_unref(pf->tile, FALSE); - - g_free(pf); -} /* pixel_fetcher_destroy */ diff --git a/plug-ins/refract/refract.h b/plug-ins/refract/refract.h new file mode 100644 index 0000000000..4337ecafd0 --- /dev/null +++ b/plug-ins/refract/refract.h @@ -0,0 +1,82 @@ +/* refract.h, 1/2/98 + * refract: a plug-in for the GIMP 0.99 + * By Kevin Turner + * http://www.poboxes.com/kevint/gimp/refract.html + */ + +#ifndef REFRACT_DEBUG +#warning "REFRACT_DEBUG flag is Off." +#define REFRACT_TITLE "Refract 1/2/98-Beta" +#else +#warning "REFRACT_DEBUG flag is On." +#define REFRACT_TITLE "Refract 1/2/98 (debug)" +#endif + +/* Update the progress bar every this-many rows... */ +#ifndef PROGRESS_ROWS +#define PROGRESS_ROWS 8 +#endif + +/* Realistically, this number should be 1.0. An index of refraction + of less than 1 means the speed of light in that substance is + *faster* than in a vacuum! But hey, it's GIMP, when was the last + time we payed any attention to reality? Go ahead... Add + "subspace" to the list of materials... */ +#ifndef INDEX_SCALE_MIN +#define INDEX_SCALE_MIN 0.0 +#endif + +/* This can be whatever is convient. However, I don't know of any + substances (even artifically generated ones) that have an index of + refraction higher than 4.7 or so...*/ + +#ifndef INDEX_SCALE_MAX +#define INDEX_SCALE_MAX 5.0 +#endif + +/* For now, our height maps only have one byte per pixel, so guchar + should be sufficient. May need to change in future versions of + GIMP when it supports greater pixel depth. */ +#ifndef HEIGHT_TYPE +#define HEIGHT_TYPE guchar +#endif + +/* Should we rely more on macros or functions? */ +/* #define OLD_SLOPE_MACROS */ + +#include "gtk/gtk.h" + +typedef struct { + gint32 lensmap; /* lens map id */ + gint32 thick; /* lens thickness */ + gint32 dist; /* distance */ + gdouble na; /* index a */ + gdouble nb; /* index b */ + gint edge; /* wrap/transparent */ + gint newl; /* new layer? */ + gint xofs; /* offset x */ + gint yofs; /* offset y */ +} RefractValues; + +/* for refractvals.edge */ +/* If a point is outside the selection, then */ +#define BACKGROUND 0 /* use background color (or leave transparent, if alpha) */ +#define OUTSIDE 1 /* look outside the selection for the point. If the point is + beyond the edge of the layer, use background or alpha. + Only makes sense if the drawable is a selection of only part + of the layer. */ +#define WRAP 2 /* like OUTSIDE, but if the point is over the edge of the layer, + get the point by wrapping around. Probably most useful on + images which are tileable. */ + +/* TO DO: provide a "smear" option? Would take whatever pixel was on + the edge of the selection or layer (depending if IN_ONLY or + OUTSIDE) where we went over. Then BACKGROUND/SMEAR would be a + choice independant of IN_ONLY/OUTSIDE/WRAP. BACKGROUND/SMEAR would + be ignored in the case of WRAP. */ + +/* One can also imagine a WRAP_WITHIN_SELECTION option, but I don't + think I would use it too often. Would you? Well, if you're + enthusiastic enough, either write a patch to implement it or + convince me to. For now, take the selection and float it, make it + a new layer, merge it back when you're done, or whatever. */ diff --git a/plug-ins/script-fu/scripts/Makefile.am b/plug-ins/script-fu/scripts/Makefile.am index d2fe7049e7..45dc93a45f 100644 --- a/plug-ins/script-fu/scripts/Makefile.am +++ b/plug-ins/script-fu/scripts/Makefile.am @@ -30,6 +30,7 @@ scriptdata_DATA = \ circle-logo.scm \ circuit.scm \ clothify.scm \ + color-cycling.scm \ coolmetal-logo.scm \ copy-visible.scm \ crystal-logo.scm \ diff --git a/plug-ins/script-fu/scripts/color-cycling.scm b/plug-ins/script-fu/scripts/color-cycling.scm new file mode 100644 index 0000000000..0ac88b6e37 --- /dev/null +++ b/plug-ins/script-fu/scripts/color-cycling.scm @@ -0,0 +1,249 @@ +; ********************************************************************** +; * Color cycling animation script +; * Daniel Cotting (cotting@mygale.org) +; ********************************************************************** +; * Official homepages: http://www.mygale.org/~cotting +; * http://cotting.citeweb.net +; * http://village.cyberbrain.com/cotting +; ********************************************************************** +; Makes a copy of your image and creates an animation of the active layer +; with the help of the alienmap plug-in. The animation may be saved with +; the gif-plug-in. +; ********************************************************************** +; It is recommended to start the alienmap plug-in, to fiddle about with +; the parameters until you have found optimal start va lues. Then put +; these values in the appropriate edit fields in the animation dialog. +; Now you can change the values in the alienmap plug-in to find interes- +; ting end values. After you have inserted these new values in the cor- +; responding fields of the animation script, you can start the calcula- +; tion of the animation. The script will create a new picture with a la- +; yer for each animation frame. With each new frame the start values +; will gradually turn into the specified end values, creating an amazing +; effect of color cycling. +; ********************************************************************** + + +; The GIMP -- an image manipulation program +; Copyright (C) 1995 Spencer Kimball and Peter Mattis +; +; This program is free software; you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation; either version 2 of the License, or +; (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program; if not, write to the Free Software +; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +; +; +; ********************************************************************** +; Original file: +; waves-anim.scm version 1.00 09/04/97 +; Copyright (C) 1997 Sven Neumann (neumanns@uni-duesseldorf.de) +; ********************************************************************** +; +; + +(define (script-fu-colorcycling-anim img + drawable + num-frames + startredstretch + startgreenstretch + startbluestretch + endredstretch + endgreenstretch + endbluestretch + redmode + greenmode + bluemode + redinvert + greeninvert + blueinvert + startredphase + startgreenphase + startbluephase + endredphase + endgreenphase + endbluephase + startredfrequency + startgreenfrequency + startbluefrequency + endredfrequency + endgreenfrequency + endbluefrequency + redinvert2 + greeninvert2 + blueinvert2) + (let* ((startredstretch (max 0 startredstretch)) + (startgreenstretch (max 0 startgreenstretch)) + (startbluestretch (max 0 startbluestretch)) + (startredstretch (min 128 startredstretch)) + (startgreenstretch (min 128 startgreenstretch)) + (startbluestretch (min 128 startbluestretch)) + (endredstretch (max 0 endredstretch)) + (endgreenstretch (max 0 endgreenstretch)) + (endbluestretch (max 0 endbluestretch)) + (endredstretch (min 128 endredstretch)) + (endgreenstretch (min 128 endgreenstretch)) + (endbluestretch (min 128 endbluestretch)) + + (redmode (max 0 redmode)) + (redmode (min 2 redmode)) + (greenmode (max 0 greenmode)) + (greenmode (min 2 greenmode)) + (bluemode (max 0 bluemode)) + (bluemode (min 2 bluemode)) + + (startredfrequency (max 0 startredfrequency)) + (startgreenfrequency (max 0 startgreenfrequency)) + (startbluefrequency (max 0 startbluefrequency)) + + (endredfrequency (max 0 endredfrequency)) + (endgreenfrequency (max 0 endgreenfrequency)) + (endbluefrequency (max 0 endbluefrequency)) + + (num-frames (max 1 num-frames)) + (remaining-frames num-frames) + + (redstretch startredstretch) + (greenstretch startgreenstretch) + (bluestretch startbluestretch) + (redphase startredphase) + (greenphase startgreenphase) + (bluephase startbluephase) + (redfrequency startredfrequency) + (greenfrequency startgreenfrequency) + (bluefrequency startbluefrequency) + + (redstretchshift (/ (- endredstretch startredstretch) num-frames)) + (greenstretchshift (/ (- endgreenstretch startgreenstretch) num-frames)) + (bluestretchshift (/ (- endbluestretch startbluestretch) num-frames)) + (redphaseshift (/ (- endredphase startredphase) num-frames)) + (greenphaseshift (/ (- endgreenphase startgreenphase) num-frames)) + (bluephaseshift (/ (- endbluephase startbluephase) num-frames)) + (redfrequencyshift (/ (- endredfrequency startredfrequency) num-frames)) + (greenfrequencyshift (/ (- endgreenfrequency startgreenfrequency) num-frames)) + (bluefrequencyshift (/ (- endbluefrequency startbluefrequency) num-frames)) + (image (car (gimp-channel-ops-duplicate img)))) + + (gimp-image-disable-undo image) + +; (if (= invert TRUE) +; (set! phaseshift (- 0 phaseshift))) + + (set! source-layer (car (gimp-image-get-active-layer image))) + + (while (> remaining-frames 1) + (set! alienmap-layer (car (gimp-layer-copy source-layer TRUE))) + (gimp-layer-set-preserve-trans alienmap-layer FALSE) + (gimp-image-add-layer image alienmap-layer -1) + (set! layer-name (string-append "Frame " + (number->string + (- (+ num-frames 2) + remaining-frames) 10))) + (gimp-layer-set-name alienmap-layer layer-name) + + (plug-in-alienmap 1 + image + alienmap-layer + redstretch + greenstretch + bluestretch + redmode + greenmode + bluemode + redinvert + greeninvert + blueinvert + redphase + greenphase + bluephase + redfrequency + greenfrequency + bluefrequency + redinvert2 + greeninvert2 + blueinvert2) + + (set! remaining-frames (- remaining-frames 1)) + (set! redphase (+ redphase redphaseshift)) + (set! greenphase (+ greenphase greenphaseshift)) + (set! bluephase (+ bluephase bluephaseshift)) + (set! redfrequency (+ redfrequency redfrequencyshift)) + (set! greenfrequency (+ greenfrequency greenfrequencyshift)) + (set! bluefrequency (+ bluefrequency bluefrequencyshift)) + (set! redstretch (+ redstretch redstretchshift)) + (set! greenstretch (+ greenstretch greenstretchshift)) + (set! bluestretch (+ bluestretch bluestretchshift)) + + ) + + (gimp-layer-set-name source-layer "Frame 1") + (plug-in-alienmap 1 + image + source-layer + redstretch + greenstretch + bluestretch + redmode + greenmode + bluemode + redinvert + greeninvert + blueinvert + redphase + greenphase + bluephase + redfrequency + greenfrequency + bluefrequency + redinvert2 + greeninvert2 + blueinvert2) + + (gimp-image-enable-undo image) + (gimp-display-new image))) + +(script-fu-register "script-fu-colorcycling-anim" + "/Script-Fu/Animators/Color Cycling" + "Creates an animation with the help of the alienmap plug-in" + "Daniel Cotting (cotting@mygale.org)" + "Daniel Cotting" + "December 1997" + "RGB RGBA" + SF-IMAGE "Image" 0 + SF-DRAWABLE "Drawable" 0 + SF-VALUE "Number of frames" "10" + SF-VALUE "Start: red intensity factor (max. 128)" "128" + SF-VALUE "Start: green intensity factor (max. 128)" "128" + SF-VALUE "Start: blue intensity factor (max. 128)" "128" + SF-VALUE "End: red intensity factor (max. 128)" "128" + SF-VALUE "End: green intensity factor (max. 128)" "128" + SF-VALUE "End: blue intensity factor (max. 128)" "128" + SF-VALUE "Red color mode (sin:0/cos:1/none:2)" "0" + SF-VALUE "Green color mode (sin:0/cos:1/none:2)" "0" + SF-VALUE "Blue color mode (sin:0/cos:1/none:2)" "0" + SF-VALUE "Red inversion before transformation" "FALSE" + SF-VALUE "Green inversion before transformation" "FALSE" + SF-VALUE "Blue inversion before transformation" "FALSE" + SF-VALUE "Start: red phase displacement (RAD)" "0" + SF-VALUE "Start: green phase displacement (RAD)" "0" + SF-VALUE "Start: blue phase displacement (RAD)" "0" + SF-VALUE "End: red phase displacement (RAD)" "0" + SF-VALUE "End: green phase displacement (RAD)" "0" + SF-VALUE "End: blue phase displacement (RAD)" "0" + SF-VALUE "Start: red frequency (> 0)" "1" + SF-VALUE "Start: green frequency (> 0)" "1" + SF-VALUE "Start: blue frequency (> 0)" "1" + SF-VALUE "End: red frequency (> 0)" "1" + SF-VALUE "End: green frequency (> 0)" "1" + SF-VALUE "End: blue frequency (> 0)" "1" + SF-VALUE "Red inversion after transformation" "FALSE" + SF-VALUE "Green inversion after transformation" "FALSE" + SF-VALUE "Blue inversion after transformation" "FALSE") + diff --git a/plug-ins/stegano/.cvsignore b/plug-ins/stegano/.cvsignore new file mode 100644 index 0000000000..60ce1025ec --- /dev/null +++ b/plug-ins/stegano/.cvsignore @@ -0,0 +1,5 @@ +Makefile.in +Makefile +.deps +_libs +stegano diff --git a/plug-ins/stegano/INSTALL b/plug-ins/stegano/INSTALL new file mode 100644 index 0000000000..ed84228336 --- /dev/null +++ b/plug-ins/stegano/INSTALL @@ -0,0 +1,70 @@ +------------------------------------------- + GIMP-Plug-In (Stegano) +------------------------------------------- + Written by Daniel Cotting + Bahnhofstrasse 31 + CH-3066 Stettlen (Switzerland) + + cotting@mygale.org + www.mygale.org/~cotting +------------------------------------------- + Some code is taken out of other plug-ins + written by other authors. +------------------------------------------- + + +------------------------------------------- + INSTALLATION +------------------------------------------- + To install it, you have to edit the + Makefile (change install-path). + Afterwards run make. This will compile + and install the plug-in in the right + directory. Once the new code is installed, + you can run the GIMP and enjoy the new + functions and effects it provides. +------------------------------------------- + + +------------------------------------------- + REDUCE CODE SIZE +------------------------------------------- + If you find that the plug-in is too big, + you can compress the executables with the + gzexe program (if it is avaiable on your + system). To do so, change to the plug-in + directory of the GIMP... + + cd /usr/local/lib/gimp/VERSION/plug-ins + + ...and execute the command... + + gzexe PLUGIN_NAME + + ...and remember to remove the uncompres- + sed binary, which has been renamed to + PLUGIN_NAME~, by running the command: + + rm PLUGIN_NAME~ + + This will result in a code size of about + 20 kB, which isn't too much IMHO. +------------------------------------------ + + +------------------------------------------ + FEEDBACK +------------------------------------------ + I'm interested in any feedback, comments, + bug-reports, suggestions etc. If you + have anything you would like to tell + me, you can write to cotting@mygale.org. + Also have a look at the GIMP-section of + my homepage at www.mygale.org/~cotting. +------------------------------------------ + + Thank you and happy GIMPing! + Daniel Cotting + +------------------------------------------ + \ No newline at end of file diff --git a/plug-ins/stegano/Makefile.am b/plug-ins/stegano/Makefile.am new file mode 100644 index 0000000000..218ce4b1b0 --- /dev/null +++ b/plug-ins/stegano/Makefile.am @@ -0,0 +1,43 @@ +## Process this file with automake to produce Makefile.in + +pluginlibdir = $(gimpplugindir)/plug-ins + +pluginlib_PROGRAMS = stegano + +stegano_SOURCES = \ + stegano.c logo.h + +INCLUDES = \ + $(X_CFLAGS) \ + -I$(top_srcdir) \ + -I$(includedir) + +LDADD = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la \ + $(X_LIBS) \ + -lc + +DEPS = \ + $(top_builddir)/libgimp/libgimpui.la \ + $(top_builddir)/libgimp/libgimp.la + +stegano_DEPENDENCIES = $(DEPS) + +.PHONY: files + +files: + @files=`ls $(DISTFILES) 2> /dev/null`; for p in $$files; do \ + echo $$p; \ + done + @for subdir in $(SUBDIRS); do \ + files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \ + for file in $$files; do \ + echo $$subdir/$$file; \ + done; \ + done + + + + + diff --git a/plug-ins/stegano/README b/plug-ins/stegano/README new file mode 100644 index 0000000000..ed84228336 --- /dev/null +++ b/plug-ins/stegano/README @@ -0,0 +1,70 @@ +------------------------------------------- + GIMP-Plug-In (Stegano) +------------------------------------------- + Written by Daniel Cotting + Bahnhofstrasse 31 + CH-3066 Stettlen (Switzerland) + + cotting@mygale.org + www.mygale.org/~cotting +------------------------------------------- + Some code is taken out of other plug-ins + written by other authors. +------------------------------------------- + + +------------------------------------------- + INSTALLATION +------------------------------------------- + To install it, you have to edit the + Makefile (change install-path). + Afterwards run make. This will compile + and install the plug-in in the right + directory. Once the new code is installed, + you can run the GIMP and enjoy the new + functions and effects it provides. +------------------------------------------- + + +------------------------------------------- + REDUCE CODE SIZE +------------------------------------------- + If you find that the plug-in is too big, + you can compress the executables with the + gzexe program (if it is avaiable on your + system). To do so, change to the plug-in + directory of the GIMP... + + cd /usr/local/lib/gimp/VERSION/plug-ins + + ...and execute the command... + + gzexe PLUGIN_NAME + + ...and remember to remove the uncompres- + sed binary, which has been renamed to + PLUGIN_NAME~, by running the command: + + rm PLUGIN_NAME~ + + This will result in a code size of about + 20 kB, which isn't too much IMHO. +------------------------------------------ + + +------------------------------------------ + FEEDBACK +------------------------------------------ + I'm interested in any feedback, comments, + bug-reports, suggestions etc. If you + have anything you would like to tell + me, you can write to cotting@mygale.org. + Also have a look at the GIMP-section of + my homepage at www.mygale.org/~cotting. +------------------------------------------ + + Thank you and happy GIMPing! + Daniel Cotting + +------------------------------------------ + \ No newline at end of file diff --git a/plug-ins/stegano/logo.h b/plug-ins/stegano/logo.h new file mode 100644 index 0000000000..cb94ec445f --- /dev/null +++ b/plug-ins/stegano/logo.h @@ -0,0 +1,788 @@ +/* GIMP header image file format (Indexed): //logo.h */ + +static unsigned int logo_width = 200; +static unsigned int logo_height = 72; + +/* Call this macro repeatedly. After each use, the pixel data can be extracted */ + +#define HEADER_PIXEL(data,pixel) \ + pixel[0] = palette_data[data[0]*3+2]; \ + pixel[1] = palette_data[data[0]*3+1]; \ + pixel[2] = palette_data[data[0]*3+0]; \ + data--; + +static unsigned char +palette_data[] = { 4,2,2,4,110,178,32,4,122,4,36, +86,15,3,66,4,58,127,36,8,186,4,34,122,17,2, +34,4,19,66,12,4,162,90,2,69,88,2,48,7,20, +2,25,2,103,8,14,48,4,58,186,90,3,154,82,2, +129,55,2,34,17,2,18,17,34,191,94,2,101,57,2, +70,7,32,154,12,22,157,17,3,50,4,88,150,96,3, +186,86,2,138,87,2,86,212,214,210,4,19,98,52,2, +154,15,11,2,4,132,216,7,18,125,12,6,82,37,12, +18,4,88,189,86,14,48,128,2,157,32,4,138,4,60, +155,4,48,126,60,2,218,7,10,52,13,12,66,129,2, +50,56,2,52,52,14,98,4,47,157,6,20,87,48,2, +24,58,2,101,120,2,141,52,5,170,4,113,215,127,2, +73,4,90,210,4,52,112,36,18,194,59,2,85,42,2, +10,107,2,173,95,2,114,31,3,52,4,79,160,84,3, +189,14,10,40,30,2,69,96,2,58,113,2,126,9,37, +231,17,33,170,28,14,2,4,30,146,68,10,37,132,2, +82,23,4,7,4,10,122,4,36,108,32,2,37,7,27, +2,4,98,175,84,10,146,4,101,191,4,14,146,8,29, +86,4,2,170,8,60,230,84,10,162,72,2,39,102,2, +142,4,142,221,4,49,143,68,12,170,4,124,213,15,4, +74,114,2,69,112,2,158,32,3,23,8,50,190,111,2, +104,6,40,154,96,2,210,6,28,104,60,2,138,61,2, +25,68,2,114,58,2,125,39,2,114,73,2,69,16,4, +58,4,88,177,56,14,26,138,2,173,4,68,176,71,2, +55,76,2,210,4,78,130,17,3,42,6,27,69,112,2, +49,12,26,178,47,13,159,18,11,10,13,11,74,141,2, +58,52,18,234,4,82,186,4,126,198,4,103,213,4,62, +206,4,72,226,12,46,210,72,12,222,12,26,146,20,34, +210,4,113,197,4,131,229,4,48,170,4,76,170,7,43, +95,52,30,218,15,11,170,52,14,202,12,14,86,4,40, +174,108,14,202,156,2,186,60,12,130,5,40,129,73,13, +189,12,42,138,44,14,202,4,59,143,4,124,229,4,69, +191,4,69,157,4,60,114,4,43,110,14,14,58,20,26, +157,28,26,210,4,87,162,4,91,202,4,110,226,4,98, +226,4,101,202,17,14,186,28,18,18,60,2,234,28,10, +114,4,30,114,8,10,162,12,54,186,20,26,130,100,10, +170,40,18,154,4,22,114,28,26,234,4,22,58,4,66, +226,4,54,202,12,42,202,4,38,98,4,145,234,4,76, +146,4,94,148,4,138,213,4,94,186,4,54,126,4,54, +154,4,118,211,4,106,178,4,106,188,4,54,142,4,94, +170,4,70,202,4,118,197,4,54,173,4,82,178,72,4, +172,36,10,138,76,14,162,4,98,210,4,118,226,112,2, +114,24,19,8,30,2,85,84,6,226,141,2,73,28,30, +10,28,46,186,112,4,206,36,10,90,36,2,174,108,2, +58,41,3,130,44,10,194,9,33,130,92,2,162,51,2, +42,12,32,162,81,3,146,44,11,26,28,6,146,44,2, +178,30,12,10,60,10,178,64,2,146,28,10,178,92,10, +210,5,41,146,40,2,102,96,2,125,100,2,88,74,2, +157,142,2,159,26,10,55,143,2,50,73,2,102,134,2, +142,73,2,84,127,2,126,142,2,82,156,2,178,28,10, +158,28,26,114,84,14,202,12,4,10,5,20,74,17,2, +26,92,2,194,7,19,106}; + +static unsigned char header_data[] = { 71,99,218,218,99,11,71,218,71,71, +218,99,99,99,71,99,218,99,99,99,99,218,71,218,99,218,218,99,99,218, +218,99,99,218,99,218,99,58,218,99,99,99,58,218,99,99,99,58,99,58, +99,58,11,58,99,58,58,11,99,58,99,58,99,99,99,218,99,218,99,58, +99,71,99,218,71,12,12,12,12,12,12,12,12,12,92,19,19,19,92,92, +92,92,19,108,19,19,19,19,19,19,53,53,53,53,101,19,19,53,53,19, +19,19,12,92,92,12,12,12,71,71,218,99,218,218,71,71,12,12,218,99, +58,58,58,99,99,99,58,99,99,99,11,58,11,58,58,99,58,99,99,99, +58,99,99,99,99,58,99,99,99,99,99,218,99,99,11,99,99,99,11,99, +99,218,218,218,99,218,99,99,218,218,99,99,218,99,218,218,99,99,218,11, +218,71,99,218,99,218,218,99,71,8,218,99,218,218,99,99,99,99,99,99, +218,218,99,99,218,99,218,99,218,71,99,99,99,218,99,99,218,99,99,99, +218,218,99,99,99,99,58,99,58,30,99,99,99,99,99,99,58,99,99,58, +99,58,99,58,99,99,58,58,58,99,58,58,99,218,218,71,99,99,71,71, +71,123,12,118,71,71,12,71,123,12,12,19,19,19,53,19,19,53,53,19, +19,53,101,63,20,63,20,63,53,53,53,101,53,53,53,19,53,53,53,19, +92,12,12,12,71,12,12,12,12,12,92,71,218,218,71,218,71,71,71,71, +99,218,58,58,58,99,99,99,99,58,58,58,99,58,99,58,58,99,58,58, +99,99,58,99,99,99,99,58,99,58,30,99,99,99,218,99,58,99,99,58, +11,99,99,218,99,218,218,99,99,218,71,99,218,99,99,218,99,99,218,99, +11,218,99,218,99,11,218,99,99,8,71,71,71,99,218,71,218,99,71,218, +11,99,218,218,99,218,99,218,99,99,99,99,218,99,99,99,99,99,218,99, +99,99,99,99,99,11,99,99,99,99,99,99,58,99,58,99,58,99,58,58, +99,11,58,58,99,58,99,99,58,58,218,99,123,71,71,71,123,71,71,218, +99,99,218,71,12,12,12,12,92,19,19,53,19,53,53,53,53,19,53,53, +53,53,19,53,19,53,53,53,53,53,63,63,101,63,63,20,53,19,53,53, +53,19,92,92,12,12,12,71,71,71,71,12,12,71,71,12,12,12,12,12, +12,218,218,99,58,58,99,58,99,58,99,58,99,99,58,218,58,99,58,99, +99,99,99,11,58,99,99,58,99,99,58,58,99,99,99,99,99,99,99,99, +99,58,218,99,218,99,99,99,218,99,99,218,99,11,218,99,218,218,99,99, +218,99,218,11,99,71,99,218,71,8,99,99,218,99,99,99,218,99,99,218, +218,99,11,99,99,218,99,218,99,218,218,99,58,99,99,99,58,11,99,99, +58,99,99,58,58,58,58,99,99,99,99,218,58,99,99,99,58,58,99,99, +58,58,99,58,99,58,99,99,58,58,99,218,71,71,218,218,218,58,58,58, +218,99,71,123,12,12,12,19,19,108,108,108,92,92,92,12,71,12,12,92, +19,53,53,53,101,53,53,19,53,101,53,20,53,79,79,0,34,79,20,63, +53,53,53,19,19,19,12,12,12,71,71,71,71,71,71,123,71,12,12,12, +12,12,71,71,218,58,99,58,218,58,218,99,58,99,58,99,99,218,58,58, +58,99,58,58,99,99,58,99,58,99,99,218,58,58,99,99,99,99,99,99, +58,11,99,99,218,218,218,99,218,99,99,218,218,99,218,99,99,218,218,99, +218,99,71,218,99,218,99,99,99,8,218,218,99,218,99,218,99,218,218,99, +11,218,218,218,218,99,71,99,218,99,99,99,218,58,99,99,99,99,218,30, +58,99,58,99,58,11,58,99,58,99,58,58,58,99,58,58,99,99,58,58, +58,99,58,99,58,58,99,58,218,99,99,218,58,99,58,58,58,58,58,218, +71,12,12,71,71,12,12,12,12,71,71,118,71,71,118,71,71,12,223,19, +19,53,53,53,53,63,229,20,79,20,34,0,20,101,101,63,20,101,101,53, +108,53,53,53,53,53,101,19,92,12,12,12,12,71,71,218,218,218,71,71, +118,12,71,71,218,218,58,58,58,58,58,58,218,58,58,58,99,99,218,99, +58,58,99,99,58,99,58,99,58,58,58,99,99,99,58,99,99,99,58,58, +99,58,58,99,99,99,99,99,99,99,218,99,99,218,99,218,218,99,99,218, +99,58,99,99,218,99,218,218,218,8,99,218,99,218,99,218,11,99,218,99, +99,99,99,99,218,99,58,99,99,99,58,99,218,99,99,99,99,99,58,99, +58,218,99,99,99,58,218,58,58,58,99,99,58,99,218,58,99,99,58,218, +58,99,58,99,99,99,58,99,58,58,58,58,99,58,58,58,58,218,218,12, +71,71,71,12,12,71,71,12,71,12,71,71,71,71,12,92,19,53,53,53, +101,63,79,34,251,0,0,63,20,53,19,53,53,53,53,19,19,53,19,19, +19,108,19,19,19,19,19,19,53,53,108,12,12,12,71,71,218,58,58,58, +99,218,71,71,71,12,218,99,99,58,58,58,58,218,58,58,58,58,58,99, +99,58,58,99,58,218,58,99,99,99,99,58,99,128,99,58,99,99,11,99, +99,58,11,58,99,99,99,218,58,11,99,58,99,218,99,99,218,99,99,99, +218,71,99,99,218,99,11,99,218,8,218,99,218,99,218,99,99,218,99,218, +58,218,58,218,99,99,218,99,58,99,99,99,99,78,11,58,99,58,99,99, +99,58,58,99,58,11,58,58,218,99,99,58,58,58,99,58,58,58,99,99, +58,58,58,58,58,58,99,58,99,99,99,58,58,58,58,58,218,71,118,12, +71,71,71,71,71,12,71,71,71,71,71,12,92,19,19,53,53,63,20,251, +0,79,79,0,79,34,34,79,0,63,229,20,63,101,53,101,19,53,19,92, +12,71,12,92,12,12,12,12,12,92,19,92,92,71,12,118,71,218,99,58, +58,58,58,58,218,123,71,218,58,58,58,99,58,58,58,218,58,218,58,58, +218,58,99,58,58,58,99,99,58,99,58,99,218,99,99,99,58,58,58,11, +58,58,99,58,99,99,30,99,99,99,58,218,218,30,99,218,99,99,99,218, +99,99,218,218,99,99,218,71,99,8,99,99,71,99,218,218,99,218,99,218, +99,218,99,58,11,58,99,99,11,58,99,58,99,99,99,99,58,58,99,99, +58,99,99,99,99,58,99,78,58,58,99,99,218,78,58,218,58,99,212,58, +99,58,58,58,218,58,58,58,58,58,58,58,58,58,218,71,12,12,71,71, +123,218,218,58,99,71,123,71,71,12,19,19,19,53,53,19,19,53,63,53, +101,101,101,63,101,101,20,20,79,0,0,79,79,34,251,79,79,251,101,53, +19,92,12,71,71,71,218,12,218,12,71,71,71,71,71,12,71,71,123,71, +58,58,58,58,58,58,58,99,99,58,58,58,99,58,58,58,99,58,99,58, +99,58,58,99,58,58,58,58,99,58,99,58,99,58,99,58,99,99,58,58, +99,99,99,58,99,58,58,58,99,99,99,30,128,58,99,99,99,99,99,58, +218,99,99,218,218,99,99,218,71,8,71,218,99,99,99,99,218,99,99,99, +99,30,58,11,58,58,99,58,58,58,58,30,58,58,99,99,99,58,99,58, +99,58,99,58,58,58,218,99,58,99,58,58,58,218,99,58,58,58,58,58, +58,99,99,99,58,99,99,58,58,212,99,58,58,218,71,71,218,218,99,58, +58,58,58,218,123,71,71,12,108,19,19,108,19,19,223,92,19,92,12,12, +19,19,19,19,53,53,63,63,229,0,34,34,79,0,79,0,75,34,0,34, +79,20,53,19,92,12,71,71,71,218,71,123,71,123,71,71,71,71,71,71, +71,218,58,58,58,58,58,58,58,99,58,58,58,58,58,58,58,58,99,58, +58,99,99,58,99,58,58,58,58,58,58,99,58,99,58,99,58,58,99,99, +58,58,99,99,58,58,218,58,58,99,58,99,11,58,58,99,58,218,99,99, +99,99,218,99,99,218,99,99,99,8,99,218,99,218,99,99,99,99,58,58, +11,58,99,58,58,30,58,11,58,11,58,99,99,58,99,58,58,58,99,58, +58,99,58,99,99,58,58,99,58,99,58,99,58,99,212,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,212,58,218,218,218,99,58,58,58,58, +58,99,71,71,71,12,71,71,12,12,12,71,71,123,71,218,71,71,71,92, +19,108,63,79,229,126,0,79,0,0,34,34,34,126,34,251,79,0,126,34, +79,0,79,20,63,19,19,12,71,71,71,218,71,99,71,71,71,71,71,71, +71,71,218,58,58,58,212,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,99,58,58,99,58,58,99,99,128,218,58,58,99,58,99,58,58,99, +218,58,58,218,99,99,99,99,99,99,58,99,99,58,30,218,99,99,99,99, +99,99,218,99,99,99,218,218,99,8,218,99,99,99,58,99,99,99,99,99, +58,58,218,99,99,99,58,99,58,58,58,99,58,99,58,99,99,99,58,58, +99,99,58,58,58,58,58,58,99,99,58,99,99,58,58,58,58,99,58,58, +99,58,99,58,78,212,99,212,99,58,58,99,58,58,78,78,246,99,212,58, +99,71,123,71,71,71,71,71,218,218,71,123,218,218,218,118,12,19,63,63, +0,0,0,34,34,0,34,79,79,79,0,34,79,79,20,101,53,101,53,19, +53,53,101,101,53,53,19,19,19,92,218,218,218,218,218,212,78,58,218,218, +71,71,71,11,58,246,58,78,246,58,58,58,99,99,58,58,99,58,212,58, +99,58,99,58,58,99,58,58,58,58,58,212,218,58,58,99,58,58,99,58, +99,99,99,58,58,99,99,99,58,99,58,58,99,99,99,58,58,99,99,99, +99,99,99,11,58,99,99,99,218,8,99,99,218,99,99,218,99,218,58,58, +11,78,58,99,58,99,58,99,58,11,58,99,58,99,58,58,58,99,99,58, +99,99,99,58,58,58,58,58,58,58,58,58,58,58,58,212,99,58,212,99, +58,58,78,58,78,58,58,58,58,58,58,58,58,58,246,58,246,58,58,71, +218,71,71,71,218,71,71,71,71,218,218,71,71,92,92,53,63,126,79,0, +0,79,0,79,34,79,0,126,79,79,79,79,79,229,229,101,53,108,92,71, +71,71,71,71,71,12,12,19,108,19,92,71,71,71,71,218,212,246,78,58, +58,218,218,71,71,58,58,212,212,78,212,78,78,58,58,58,58,58,99,58, +78,58,58,99,58,58,58,58,58,58,58,58,99,58,99,58,58,212,99,58, +58,99,58,99,58,99,99,58,58,99,99,58,58,58,58,11,78,99,99,99, +99,58,99,58,71,99,99,99,99,8,99,99,99,218,99,58,99,30,58,11, +58,11,58,58,99,58,58,99,58,99,58,99,99,58,99,58,99,58,58,99, +58,58,58,58,58,78,58,99,58,99,58,58,58,58,99,58,212,99,58,58, +58,78,78,78,58,58,58,58,58,212,58,78,58,78,78,78,58,99,218,218, +71,218,218,71,58,99,58,99,71,71,71,12,19,20,79,251,0,251,79,251, +79,63,126,79,79,79,79,229,79,79,79,126,126,79,79,63,20,53,53,92, +12,12,218,71,71,218,218,218,71,218,71,71,71,218,71,218,218,58,246,246, +78,212,78,58,218,218,58,58,58,246,78,212,78,212,58,58,58,58,58,212, +78,78,78,58,58,99,58,58,58,58,58,58,58,58,58,218,99,99,58,99, +58,58,218,99,58,58,99,58,99,99,58,99,99,99,58,99,99,58,58,58, +218,99,11,58,99,99,99,218,99,8,99,30,218,58,11,99,99,58,99,58, +99,58,58,99,218,99,218,58,99,99,58,58,58,58,99,58,99,99,58,99, +58,58,58,78,78,58,58,58,58,58,99,246,78,78,58,58,58,58,58,78, +78,212,78,246,246,58,58,58,212,58,212,246,78,246,58,212,218,218,218,218, +218,58,246,58,246,58,218,218,123,12,19,19,53,53,101,53,63,101,63,63, +63,63,63,63,63,101,63,53,63,53,53,53,53,108,19,19,19,19,108,19, +92,92,12,12,71,71,218,99,99,218,218,218,218,218,71,71,71,218,218,246, +78,78,246,78,78,78,58,58,58,78,78,78,78,246,58,58,58,58,58,78, +212,78,78,58,58,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58, +58,99,58,58,99,58,58,58,58,58,58,99,58,58,58,58,58,99,99,99, +58,99,58,99,99,58,99,99,99,8,99,99,30,58,58,58,58,58,58,99, +58,11,99,58,99,58,58,58,58,58,58,99,58,58,58,58,58,58,99,58, +99,58,78,58,58,58,99,58,58,78,246,78,58,78,58,58,58,58,78,212, +246,78,246,78,78,99,212,246,78,246,58,246,246,78,246,218,218,218,58,58, +246,78,78,246,58,218,218,71,12,12,108,92,108,19,108,53,63,63,63,53, +53,53,19,223,92,92,49,118,118,118,118,118,118,118,71,118,118,12,12,12, +92,71,71,123,218,99,11,58,58,58,58,78,58,99,99,123,71,218,218,218, +246,246,78,212,78,212,78,246,78,78,58,78,246,78,246,78,58,58,58,58, +99,78,246,78,246,99,58,58,58,58,58,78,78,78,78,99,58,99,58,99, +78,58,58,99,58,218,218,58,58,99,58,58,58,218,99,58,58,58,58,11, +58,99,99,99,58,99,99,218,58,8,99,99,58,99,58,11,58,11,58,58, +99,58,99,58,99,58,99,58,58,218,58,58,58,99,58,99,58,58,58,99, +78,58,58,58,99,58,58,78,78,58,246,78,246,99,58,58,58,212,78,78, +246,58,246,58,78,78,78,58,246,78,78,58,246,58,58,58,212,58,246,78, +212,246,58,58,71,71,71,71,12,92,92,92,108,53,53,53,19,19,223,223, +49,223,92,49,49,223,92,49,118,118,118,71,118,112,118,11,11,112,71,112, +71,71,11,11,11,99,99,58,58,78,78,78,246,78,246,58,99,71,218,71, +218,78,78,246,78,246,58,246,78,246,212,58,246,58,246,78,212,78,246,58, +58,58,78,246,246,78,78,99,58,58,58,212,78,58,78,58,58,58,58,58, +78,58,78,99,58,58,99,58,58,58,58,99,58,58,99,218,58,99,58,58, +58,58,99,58,99,99,58,99,99,8,99,99,58,58,58,99,58,99,99,58, +99,58,58,58,58,58,58,218,99,58,99,58,58,58,58,58,99,58,58,78, +58,78,78,78,78,58,78,58,78,78,78,212,78,58,78,58,78,212,78,246, +78,246,78,78,212,246,246,78,246,212,246,246,78,246,58,246,78,246,58,246, +246,58,99,218,218,218,71,12,92,19,19,19,19,19,223,223,49,223,49,118, +49,112,30,30,237,103,208,208,245,208,245,208,245,245,245,103,208,103,22,237, +30,30,11,11,11,11,71,71,11,99,58,78,78,246,58,246,246,246,58,99, +99,218,212,78,246,78,246,78,246,58,78,58,246,78,58,246,78,212,78,246, +58,212,58,78,78,212,78,78,58,58,99,78,78,78,78,78,58,58,99,58, +58,78,78,78,58,58,99,58,99,58,58,99,58,218,58,58,99,58,58,218, +99,58,99,99,58,99,30,99,99,8,58,99,58,99,58,58,58,99,58,99, +58,218,218,58,99,58,99,58,58,58,78,99,78,58,99,58,58,78,58,78, +78,58,78,78,58,78,78,246,246,212,78,78,78,58,78,246,78,246,58,246, +212,78,58,78,78,58,246,78,78,78,58,246,78,246,78,58,246,78,78,78, +58,218,99,11,71,12,92,92,92,223,223,223,223,223,49,118,112,22,237,208, +72,245,55,243,245,72,72,72,65,208,236,208,208,245,72,55,243,55,55,243, +245,245,245,103,237,237,30,11,11,112,71,11,99,58,78,246,246,246,246,78, +58,218,58,58,246,78,212,78,246,78,246,78,212,78,78,212,78,246,78,78, +58,78,78,78,78,78,246,246,246,58,58,78,58,246,78,212,78,78,99,58, +58,78,58,58,58,58,58,99,58,58,58,58,78,58,58,99,99,58,58,58, +99,218,58,99,99,99,58,99,58,8,99,99,99,58,11,58,58,58,99,58, +58,58,58,58,58,58,58,99,99,78,78,58,58,78,58,58,99,78,78,78, +78,78,78,78,78,78,212,246,246,246,246,78,78,246,246,58,246,78,246,78, +78,78,212,246,246,246,78,78,212,246,246,246,58,246,246,78,246,246,78,58, +218,99,71,12,12,92,92,82,223,49,223,118,112,22,208,72,72,208,65,22, +22,112,11,112,112,112,112,112,118,118,118,112,112,112,30,244,244,30,237,65, +236,72,55,55,243,243,208,208,237,237,11,71,11,11,71,11,99,58,246,246, +246,78,78,246,58,246,78,246,58,246,58,246,58,246,246,78,78,78,212,78, +212,246,212,78,246,246,58,78,78,246,99,246,246,58,246,58,78,78,78,58, +78,78,78,78,78,78,58,58,58,99,58,58,78,99,58,58,58,218,99,99, +58,58,99,58,99,58,58,99,99,8,58,58,99,58,99,218,99,58,99,99, +99,58,99,58,99,58,58,58,58,78,58,58,58,58,58,58,58,78,212,78, +78,58,246,78,58,246,246,246,246,246,246,246,78,58,246,78,246,58,246,58, +246,78,78,78,58,246,212,78,78,78,58,246,78,212,246,58,78,212,58,99, +218,71,12,92,19,223,49,49,118,62,30,22,208,208,103,30,244,112,244,118, +112,23,49,49,49,49,49,49,49,49,82,82,223,82,49,118,23,118,118,112, +11,30,237,22,65,245,55,243,245,245,103,237,237,11,71,11,71,71,218,58, +246,246,78,246,78,212,78,246,246,78,246,246,78,78,212,78,212,78,246,78, +78,58,246,78,58,246,78,212,78,246,78,78,78,78,78,212,246,246,246,78, +58,78,78,78,58,78,78,58,58,58,58,58,99,58,58,58,58,58,99,58, +58,58,58,58,58,99,99,58,58,8,99,99,58,58,58,99,99,99,99,58, +58,99,78,58,78,99,58,58,99,78,78,78,58,78,58,58,78,246,78,212, +78,78,58,78,246,246,246,246,246,246,58,78,78,246,58,246,78,246,78,246, +78,212,78,212,212,246,78,78,246,246,78,212,58,99,212,246,246,58,99,218, +118,12,92,223,223,49,49,11,237,208,208,103,244,23,118,112,118,112,49,49, +19,82,82,82,223,49,66,49,49,82,223,223,101,19,223,82,223,82,223,82, +82,49,23,112,11,244,30,65,72,55,55,245,208,22,237,112,11,118,71,218, +218,58,58,78,246,78,212,78,78,212,99,78,212,246,78,246,78,246,78,212, +246,246,78,246,246,78,246,78,246,58,246,78,58,78,246,246,246,246,212,246, +78,78,78,78,78,58,78,78,99,58,78,78,78,99,58,58,99,58,99,99, +58,99,99,99,99,58,99,58,99,8,99,99,99,58,58,99,58,58,99,58, +58,58,78,78,58,58,58,58,58,58,78,78,78,78,78,58,246,246,246,246, +246,78,78,212,246,246,246,246,246,246,78,212,78,246,78,212,78,246,58,246, +78,246,78,58,58,212,246,58,78,246,246,58,58,58,58,246,58,218,71,12, +223,223,49,49,49,30,65,72,72,30,112,118,118,112,118,49,223,223,223,49, +244,244,244,244,23,23,23,23,70,66,49,70,49,70,70,118,23,23,23,23, +49,223,19,82,223,223,23,11,244,237,208,72,55,55,208,103,30,11,11,49, +71,71,99,58,246,78,246,246,58,246,58,58,246,212,78,246,58,246,78,58, +58,212,78,78,212,78,212,78,78,78,212,78,78,78,246,212,246,246,246,212, +246,58,78,78,78,78,58,78,78,99,58,58,78,58,58,58,99,58,58,58, +58,58,58,58,99,58,99,58,99,8,99,58,58,218,58,58,58,99,58,58, +58,99,58,58,99,58,78,78,78,78,78,78,78,58,246,246,246,212,246,246, +212,246,78,246,246,246,246,246,212,246,246,78,246,58,212,246,78,78,78,246, +58,246,212,99,58,246,78,246,246,58,58,58,58,78,246,58,99,118,12,92, +223,223,223,11,22,72,208,244,49,112,112,118,49,82,223,49,244,244,242,62, +23,62,23,23,244,244,244,244,244,244,62,30,244,244,244,244,23,112,210,23, +62,244,244,23,223,82,53,82,49,112,30,30,65,72,55,245,208,237,30,112, +71,49,118,71,99,78,78,78,246,246,58,99,58,246,212,78,246,58,246,212, +99,58,212,246,78,246,78,246,212,246,78,246,246,212,246,246,246,212,246,246, +246,246,78,78,246,246,78,78,78,78,58,58,78,58,58,58,58,58,99,99, +99,78,99,58,99,99,58,99,58,8,58,99,58,99,99,58,58,99,58,58, +58,58,58,58,78,58,78,78,58,78,58,246,78,78,78,212,246,246,212,246, +246,246,246,246,246,246,246,246,246,246,246,58,246,58,99,212,246,212,78,78, +78,99,58,58,78,246,58,78,246,58,58,58,58,212,58,218,71,12,49,49, +49,112,22,72,65,112,49,112,112,112,223,19,118,62,244,62,62,23,23,244, +244,244,244,112,23,49,49,223,19,223,82,223,223,49,223,23,118,112,244,30, +62,62,62,62,23,62,23,223,82,8,82,71,30,244,22,72,55,245,103,237, +11,71,12,12,71,99,78,78,78,58,212,58,58,58,58,212,78,58,246,78, +58,58,58,212,78,246,58,78,78,212,212,246,246,246,212,246,246,246,246,246, +246,246,58,78,78,58,246,212,78,78,58,78,58,78,78,78,58,78,58,58, +218,58,58,99,58,99,99,99,58,8,218,99,58,58,58,99,58,58,99,78, +78,58,99,58,58,78,58,78,246,78,78,58,78,212,246,246,246,246,246,246, +246,246,246,212,246,212,246,246,246,212,78,246,58,58,58,246,78,78,212,246, +58,58,58,58,212,78,246,212,58,58,58,58,58,58,71,12,49,223,223,49, +30,208,72,30,49,49,112,49,223,223,23,22,244,62,23,23,62,22,112,118, +49,49,223,118,23,244,30,242,22,242,242,62,242,244,244,112,23,49,49,223, +23,112,30,244,62,112,210,23,23,49,82,8,223,244,237,30,208,55,243,245, +22,30,71,118,12,71,99,78,78,246,212,58,58,58,58,246,246,246,78,246, +58,58,58,78,212,78,246,246,246,58,58,212,246,246,246,246,246,246,246,246, +246,78,246,58,246,246,246,78,212,78,78,78,58,78,58,78,58,58,99,58, +58,58,99,58,58,58,58,58,58,8,58,99,58,58,58,58,99,58,78,78, +58,58,78,58,58,78,78,58,78,78,78,78,78,246,212,246,246,246,246,246, +246,246,246,246,246,246,212,246,246,246,78,58,58,58,58,246,78,78,246,99, +212,58,212,58,212,78,78,58,58,218,58,212,58,99,71,49,223,49,49,30, +55,72,112,49,244,11,49,82,112,242,242,62,23,62,244,112,118,223,82,118, +30,236,29,225,231,33,248,42,42,42,219,2,42,219,110,107,231,29,65,244, +112,223,223,49,112,30,30,23,23,23,23,49,82,101,49,30,30,242,72,243, +208,103,30,71,118,12,71,99,78,78,78,58,58,58,58,58,78,58,246,78, +58,58,99,58,246,58,246,58,246,58,99,58,212,246,246,212,246,246,246,246, +246,246,246,246,212,246,246,246,246,78,58,78,78,78,78,78,58,78,78,78, +58,78,99,99,99,58,58,99,99,8,99,58,99,99,58,58,58,58,78,78, +78,78,58,58,58,78,78,78,78,78,246,246,58,246,246,246,246,246,246,246, +246,246,212,246,99,58,246,246,246,246,212,58,58,58,99,212,78,212,212,58, +78,58,58,58,246,246,78,58,71,218,58,58,11,71,118,223,49,23,103,243, +22,49,118,30,118,82,49,30,242,62,70,62,244,118,223,82,112,65,93,205, +217,42,80,147,98,4,26,8,8,8,8,121,8,8,26,4,98,210,111,219, +29,29,65,112,223,82,23,30,244,62,62,62,62,49,82,82,112,30,30,65, +243,245,103,30,71,118,12,71,218,212,246,58,58,212,212,58,58,246,212,78, +58,58,212,58,58,246,78,246,58,58,58,58,246,212,246,246,246,246,246,246, +246,212,246,246,246,246,212,246,246,212,78,246,212,78,58,78,78,78,58,78, +78,78,58,58,58,58,99,58,58,8,58,58,58,58,58,58,58,58,237,78, +58,78,78,58,78,78,212,78,246,78,78,246,246,246,246,246,246,246,246,246, +246,246,246,58,58,58,246,246,246,246,58,58,99,58,58,246,246,78,99,78, +246,78,58,58,58,58,58,218,12,99,58,99,71,92,49,223,118,22,41,65, +223,23,30,118,19,23,22,242,23,23,30,112,223,19,112,29,222,232,87,80, +98,26,121,8,20,253,20,20,20,20,101,20,20,20,253,253,20,8,121,26, +4,14,2,231,29,30,49,82,112,30,244,62,23,210,118,82,101,223,30,244, +65,55,243,103,237,71,118,71,71,99,58,58,58,58,218,58,58,58,246,212, +58,58,212,78,99,58,246,246,78,58,58,58,58,246,246,246,246,246,246,246, +246,246,246,212,246,246,246,246,246,246,246,78,78,78,78,78,58,78,58,78, +78,58,58,58,78,99,58,58,99,8,99,58,58,99,99,58,58,58,58,237, +78,78,58,78,78,246,78,246,78,246,78,246,246,246,246,246,246,246,246,246, +246,246,58,58,58,58,246,246,246,58,99,78,246,212,99,246,212,58,78,246, +58,246,58,58,58,212,218,12,118,58,58,71,12,49,19,49,237,41,65,49, +118,112,223,82,244,236,62,66,62,30,82,8,112,93,68,6,137,88,162,253, +253,20,253,19,223,23,244,244,54,242,54,242,244,62,112,49,223,20,20,20, +20,253,26,98,14,33,29,244,82,101,112,22,62,62,62,23,49,53,82,30, +112,22,243,243,208,11,71,118,12,218,99,58,58,58,12,71,58,58,58,58, +99,58,58,246,246,58,58,246,246,58,58,58,99,58,246,246,246,246,78,58, +246,212,246,246,246,246,246,212,246,246,78,78,78,78,58,78,78,78,78,58, +78,58,78,237,78,58,99,99,78,8,58,99,58,58,78,78,78,78,78,78, +58,78,78,58,78,246,78,212,246,246,246,246,246,246,246,246,246,103,246,246, +246,246,58,58,58,99,212,246,246,58,212,78,246,58,58,58,58,58,212,78, +78,78,58,58,58,58,123,49,218,99,11,118,223,223,82,237,41,208,23,118, +237,223,82,244,18,210,23,23,112,19,223,103,64,6,148,147,26,253,20,8, +66,23,54,111,219,219,137,24,76,24,163,25,137,42,204,42,151,109,244,223, +20,20,20,20,8,4,111,231,236,23,82,12,237,62,62,23,62,223,253,223, +237,244,22,41,245,103,11,112,118,71,218,58,58,99,92,92,128,58,58,58, +58,58,58,212,78,58,58,212,58,58,58,78,78,58,212,246,246,246,58,58, +212,246,212,246,246,246,246,246,246,212,246,78,246,246,78,78,78,78,78,58, +78,58,58,78,99,58,58,58,99,8,99,58,58,58,58,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,246,246,246,246,103,246,246,246,246,246, +246,78,58,58,58,58,58,212,58,58,78,212,78,78,99,58,58,212,78,246, +212,212,58,58,58,218,92,12,218,99,71,12,223,82,118,243,55,23,223,30, +223,19,244,93,54,49,23,112,82,82,245,153,138,234,162,8,253,101,49,30, +111,125,24,201,142,16,159,142,43,95,197,156,193,193,51,141,224,25,248,231, +65,118,20,20,20,20,121,210,231,55,244,82,49,30,244,62,62,244,223,20, +118,237,112,208,243,245,237,71,118,49,71,58,58,218,92,92,12,58,58,99, +58,58,212,78,212,212,58,58,58,58,58,212,78,58,58,246,246,246,99,58, +99,246,246,246,246,246,246,246,246,246,212,246,58,78,78,78,78,78,58,78, +78,58,78,78,58,78,58,99,58,8,99,99,58,58,58,78,78,58,78,58, +78,78,78,246,78,78,78,246,246,246,246,246,246,246,246,103,246,246,246,246, +246,58,58,58,58,58,58,58,58,58,78,78,246,78,58,58,58,212,78,58, +58,78,58,58,58,12,92,12,99,218,118,19,82,223,22,116,237,49,112,112, +101,112,93,109,70,112,118,82,223,55,136,185,44,26,253,253,82,62,107,163, +117,16,114,159,161,106,98,46,26,26,26,26,26,4,32,81,44,142,43,234, +10,56,236,23,20,20,20,8,4,219,225,237,19,82,11,244,62,54,62,223, +20,112,30,244,72,239,103,237,71,12,12,71,58,71,92,92,12,128,58,58, +58,58,246,78,246,58,58,58,99,58,58,246,78,78,58,246,246,58,58,58, +58,212,246,212,246,246,246,246,246,246,78,78,246,58,246,58,78,246,78,58, +78,58,78,78,58,58,58,58,58,8,58,58,58,58,78,237,58,78,78,78, +78,78,78,58,246,246,212,246,246,246,246,246,246,246,246,246,246,246,246,246, +78,58,58,58,58,58,99,58,58,246,246,246,58,246,58,58,58,78,246,218, +11,58,58,58,58,12,92,71,218,11,49,223,101,23,239,93,23,118,244,223, +223,65,29,70,70,112,82,82,72,233,135,152,121,253,20,49,242,179,176,39, +198,156,32,47,26,26,69,113,26,47,9,47,162,113,26,121,113,252,152,159, +43,234,217,238,30,253,20,251,8,4,107,17,30,82,223,22,62,62,54,244, +82,19,237,112,244,41,245,30,112,71,92,71,99,71,12,92,92,71,78,58, +58,246,246,58,78,212,58,58,58,58,58,78,246,58,99,58,212,58,58,58, +58,78,246,246,246,246,246,246,246,246,246,246,78,78,78,78,246,58,78,78, +58,58,58,99,58,99,58,58,58,8,58,99,99,58,58,78,78,58,78,58, +78,58,78,78,78,78,78,246,246,246,246,246,246,246,246,246,78,246,246,246, +58,58,78,58,78,58,58,99,58,78,58,246,246,58,58,58,212,58,58,12, +71,58,58,58,99,92,92,71,218,71,223,8,19,22,150,30,49,11,23,101, +30,93,54,49,112,49,20,30,254,181,95,26,253,253,49,65,163,166,206,202, +52,26,8,121,4,161,43,114,139,131,57,200,195,188,192,88,26,26,121,98, +197,67,234,145,230,22,82,20,20,8,98,107,100,112,253,112,103,244,54,62, +49,20,49,237,118,208,243,103,11,11,12,92,92,92,92,12,49,12,58,58, +78,58,246,78,246,78,212,99,58,58,78,246,58,78,58,58,58,99,58,58, +58,99,246,246,246,246,246,246,246,246,246,246,246,78,246,78,246,78,58,78, +78,58,78,78,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,78,78,78,78,246,246,246,246,246,246,246,246,246,246,246,58,212,58,246, +99,212,58,99,78,99,58,58,78,246,58,58,58,78,78,58,78,78,99,71, +12,71,58,58,12,12,12,71,11,12,223,101,49,243,100,118,223,112,82,19, +93,225,113,23,244,101,223,41,129,199,52,253,20,223,242,124,39,57,117,122, +121,121,47,44,195,35,94,196,165,189,189,189,27,84,200,139,67,186,26,121, +240,106,159,234,175,68,242,20,20,20,8,210,238,93,223,19,237,244,23,54, +62,19,101,244,112,30,243,208,237,11,12,92,49,223,12,12,92,12,58,78, +246,78,58,246,78,212,78,78,58,58,212,58,58,58,78,99,58,58,99,58, +58,58,246,246,246,246,246,246,246,246,246,246,78,246,58,78,58,78,78,78, +78,78,237,78,58,58,58,58,58,8,99,58,99,58,78,78,78,58,78,78, +78,78,78,78,78,58,246,246,246,246,103,246,246,246,246,218,58,58,78,78, +58,99,71,12,58,78,58,78,58,78,123,12,78,78,58,212,78,78,123,92, +12,12,99,99,12,92,92,71,11,118,82,101,112,116,236,82,112,112,82,118, +100,110,66,23,49,101,244,215,73,43,69,253,101,23,219,59,97,202,52,8, +8,4,120,97,187,139,27,143,46,113,26,26,46,88,60,27,131,200,192,47, +82,66,81,159,234,170,68,118,20,251,20,26,2,64,244,101,118,22,23,62, +62,49,20,118,244,23,208,245,30,11,71,12,92,12,12,49,12,12,71,58, +246,246,78,246,78,246,58,78,58,78,212,218,12,246,78,99,58,78,78,11, +12,58,58,246,246,103,246,246,58,246,246,246,246,78,246,78,78,78,58,78, +78,58,58,58,78,58,58,99,58,8,99,58,58,58,99,78,58,78,78,78, +78,212,78,246,246,78,99,58,246,246,246,246,246,246,71,12,99,58,58,99, +58,58,53,251,71,78,78,78,78,246,19,19,71,246,246,78,212,246,12,92, +12,12,12,12,92,12,12,71,218,118,19,101,244,239,65,223,244,11,53,112, +222,235,66,112,223,20,72,45,90,221,8,253,19,242,214,97,57,152,26,8, +26,188,57,187,139,186,8,8,8,8,121,121,8,8,26,4,44,131,94,67, +162,82,113,44,159,76,220,29,82,0,20,8,98,238,245,82,82,237,23,62, +54,112,20,223,237,49,22,245,237,11,71,49,12,92,12,12,12,12,71,78, +246,58,246,58,246,78,246,58,246,212,58,19,101,218,78,78,99,58,58,53, +101,71,58,246,246,246,78,71,92,58,246,246,212,246,78,58,58,78,78,58, +78,78,78,78,58,58,58,58,58,8,99,99,58,99,58,78,78,58,99,58, +78,78,58,246,78,58,71,92,218,246,246,246,103,246,12,92,92,58,58,58, +58,218,63,53,19,246,246,78,78,212,53,92,92,212,246,78,78,58,92,218, +12,12,92,92,92,12,12,71,11,118,101,101,22,116,242,223,237,11,8,30, +17,62,70,112,8,53,72,172,134,143,8,20,223,109,102,57,97,81,121,82, +252,114,35,157,165,26,253,8,8,46,182,4,26,26,8,8,113,160,190,35, +186,66,121,106,117,152,232,68,49,79,20,8,26,42,17,223,53,22,112,244, +54,244,8,82,30,118,30,245,30,11,99,12,12,92,123,12,12,12,71,78, +246,78,246,78,58,246,246,58,246,58,12,53,53,12,78,78,78,99,12,63, +63,92,78,78,246,246,78,229,229,12,246,246,246,212,78,71,71,58,78,78, +58,78,78,58,58,58,212,58,58,8,99,58,58,58,58,78,78,58,99,218, +99,58,246,78,78,58,12,92,12,78,246,246,246,218,92,92,19,71,58,58, +58,12,38,92,53,71,246,58,246,218,108,92,92,218,246,212,78,58,12,218, +12,12,12,92,12,92,12,71,71,118,82,8,103,116,242,82,244,11,82,30, +222,210,223,23,8,101,55,172,183,186,8,253,223,110,102,157,97,161,8,8, +127,67,190,140,189,26,8,8,69,127,120,5,52,26,26,8,121,9,84,187, +43,113,82,98,142,152,89,119,244,20,0,253,121,219,64,23,101,30,30,23, +54,244,82,101,30,112,112,72,237,71,30,12,12,92,118,12,12,12,71,58, +246,246,58,246,58,212,78,246,58,246,108,63,53,19,78,78,78,58,53,101, +53,108,78,246,246,246,108,79,20,53,246,246,246,78,99,92,92,12,99,78, +78,58,58,218,218,218,99,58,58,8,99,99,58,58,58,99,99,218,71,11, +99,99,78,246,212,71,218,71,92,71,246,246,246,71,92,92,19,19,58,58, +58,92,53,92,92,108,58,246,246,71,92,92,92,92,212,246,246,58,123,48, +12,12,12,92,92,12,12,12,99,118,19,101,237,116,65,49,30,112,82,244, +222,235,26,118,82,101,65,136,183,7,8,8,82,242,21,157,57,192,69,8, +26,7,191,157,190,60,9,8,26,52,84,131,60,4,121,8,26,113,67,94, +142,113,82,98,43,152,10,119,244,251,0,253,121,111,64,23,101,244,22,49, +62,62,82,101,112,23,112,103,30,71,11,12,12,118,12,12,118,12,71,78, +78,246,78,58,218,58,78,246,246,12,53,101,53,19,58,78,58,12,63,63, +53,63,218,246,246,71,79,20,63,101,218,246,246,218,12,19,108,12,99,58, +99,71,218,71,71,218,71,218,71,8,99,58,99,99,58,58,11,218,71,218, +71,71,218,58,58,99,218,99,71,92,218,78,246,92,92,12,223,53,71,58, +58,19,19,92,92,19,12,78,78,12,92,92,92,92,71,78,78,218,123,241, +48,12,12,92,49,12,118,12,71,49,223,101,11,116,65,66,112,11,82,112, +100,54,66,66,223,20,244,105,90,159,8,8,8,244,10,167,187,202,98,8, +121,47,192,169,190,35,195,188,188,195,57,84,106,47,8,8,8,122,195,140, +95,66,82,98,142,221,175,119,244,251,251,20,8,219,64,112,101,30,242,118, +23,62,19,20,11,118,112,22,11,11,99,12,12,12,12,71,12,118,71,58, +246,58,246,99,12,99,212,78,58,19,53,53,101,53,58,78,218,53,101,53, +53,63,218,246,246,63,0,101,19,53,12,78,58,12,108,92,19,108,92,71, +71,12,71,71,123,71,71,123,71,8,99,99,58,58,58,11,58,11,99,218, +99,11,99,99,218,99,218,99,71,12,12,99,99,92,92,92,12,19,53,71, +99,38,53,12,12,92,19,218,212,92,92,92,48,12,108,128,246,218,123,48, +128,123,12,12,12,12,12,118,71,71,223,8,112,41,55,49,49,244,223,49, +93,231,70,82,223,20,82,116,181,158,252,8,20,223,242,214,57,157,156,46, +8,66,26,147,44,198,86,196,86,198,44,52,4,8,8,8,46,60,97,194, +52,82,82,180,159,177,232,64,66,79,20,8,26,231,100,49,8,237,62,23, +62,244,82,82,30,223,11,237,112,11,11,12,12,71,12,12,118,12,71,218, +246,78,58,218,92,99,246,212,92,53,79,79,53,53,218,58,19,63,38,126, +53,101,92,58,19,251,63,223,19,19,92,71,12,223,92,223,223,92,19,92, +12,71,123,71,71,71,71,71,71,8,11,58,11,58,99,58,99,58,99,58, +58,218,218,218,99,218,11,99,99,71,92,92,12,49,92,71,99,12,53,53, +92,20,53,123,48,12,92,19,218,19,92,12,241,48,92,92,58,218,92,241, +128,212,71,12,118,12,12,71,71,112,223,19,82,55,116,112,49,244,223,19, +208,238,235,66,223,253,82,22,250,73,95,113,8,82,49,111,102,207,132,188, +252,69,8,121,162,4,47,52,127,4,4,26,26,8,8,46,186,86,169,95, +66,8,4,95,192,87,45,236,101,251,253,8,70,222,236,223,223,237,244,23, +54,244,82,82,237,118,11,244,71,11,99,71,118,12,12,12,12,12,12,58, +78,78,246,123,108,12,212,12,53,63,13,83,63,53,12,92,53,226,13,13, +53,53,53,226,75,63,12,71,92,19,19,92,92,92,19,12,12,12,92,12, +71,71,71,71,71,12,71,71,71,8,99,99,58,99,99,58,58,99,58,58, +11,218,71,71,11,218,99,99,58,218,12,19,92,92,92,99,78,58,92,101, +75,251,53,12,123,48,92,108,101,63,92,12,241,241,92,92,108,92,108,128, +212,246,58,12,12,12,49,12,12,118,12,49,19,237,116,22,49,118,244,82, +112,17,231,70,223,82,20,82,93,45,133,7,46,8,8,49,50,224,168,207, +142,60,127,46,8,26,8,8,8,8,8,8,121,26,47,192,166,169,7,113, +66,113,7,156,36,217,28,23,251,251,20,26,111,222,30,8,49,22,112,62, +242,112,101,112,30,49,244,11,112,11,99,71,12,12,118,12,12,12,71,246, +246,78,212,92,108,92,218,53,38,13,0,0,63,101,20,63,101,75,83,83, +63,101,229,79,126,92,58,78,12,19,92,92,19,92,12,71,71,118,71,71, +218,12,71,71,71,71,71,218,99,8,218,99,218,58,58,218,99,99,58,99, +58,58,99,99,218,99,218,99,58,58,99,92,92,92,19,58,78,78,99,108, +0,34,38,123,123,48,123,92,53,108,92,12,241,241,241,123,92,19,19,123, +241,212,246,99,12,71,12,71,12,71,118,223,82,118,245,100,112,49,30,118, +223,237,238,111,113,223,19,20,49,93,144,184,44,113,8,253,19,210,173,141, +168,57,196,142,60,52,122,182,113,113,122,3,60,159,130,86,43,122,26,223, +47,106,95,76,89,68,244,20,251,20,8,210,238,72,223,19,30,112,23,62, +244,223,20,118,112,112,244,118,11,99,99,218,71,218,71,12,12,71,58,58, +78,246,246,92,63,53,53,101,83,0,83,83,53,63,63,53,20,83,0,0, +53,53,79,0,226,78,58,78,12,108,92,19,92,71,58,58,99,71,71,123, +71,218,218,71,218,218,99,218,99,8,99,99,218,218,99,99,99,99,58,99, +99,58,99,11,71,99,99,58,58,58,58,71,92,92,19,78,78,58,78,218, +53,63,101,123,123,48,48,123,92,19,92,92,241,241,241,241,92,92,92,12, +241,212,78,78,123,118,12,12,12,12,112,92,49,223,30,247,65,49,23,112, +82,23,72,231,14,26,82,19,101,49,17,146,102,154,147,69,8,82,49,23, +249,104,158,39,206,169,86,130,202,142,202,114,39,117,76,88,4,66,66,113, +7,95,234,175,68,22,101,20,251,8,4,107,100,112,101,112,30,23,112,62, +49,101,49,244,118,112,112,118,11,78,99,99,99,58,71,12,92,99,246,78, +246,58,218,108,108,53,63,229,0,83,34,13,53,53,101,38,13,0,0,13, +53,101,63,101,99,78,58,78,71,19,19,92,71,58,99,58,11,218,218,71, +99,99,99,99,218,58,99,218,218,8,71,218,99,99,218,58,99,99,99,99, +99,58,99,58,99,218,11,58,58,99,58,58,71,92,92,58,78,78,78,78, +118,19,53,123,48,128,128,48,123,12,92,92,48,128,212,48,241,12,12,92, +241,128,246,246,246,71,12,12,12,71,71,118,49,223,49,208,116,22,49,23, +11,223,223,72,225,235,113,82,82,101,49,65,68,164,201,7,162,26,8,121, +66,223,23,216,14,36,177,152,154,152,80,255,98,66,66,223,66,4,32,152, +152,163,228,222,112,251,20,20,8,113,219,222,22,82,23,22,62,112,54,244, +101,82,112,112,23,118,112,11,11,78,58,58,246,99,71,71,99,58,246,212, +58,58,123,108,108,53,20,13,101,19,34,13,53,53,53,0,75,38,0,34, +63,53,53,71,58,78,58,78,11,92,92,71,58,58,58,58,99,218,11,99, +11,58,218,218,99,99,218,99,99,8,99,71,99,99,99,99,99,218,58,99, +218,58,99,99,99,58,58,78,58,99,58,58,58,71,12,78,78,78,78,78, +58,12,19,12,48,218,246,218,48,12,92,92,241,48,58,212,48,241,12,92, +48,241,212,58,212,212,123,118,12,71,118,118,12,223,49,118,55,239,244,223, +112,112,82,118,236,225,14,4,26,82,101,19,112,93,153,21,224,174,88,162, +26,26,121,82,66,66,66,66,66,66,26,82,66,26,113,127,32,44,51,87, +248,222,236,223,20,20,20,8,70,111,17,237,223,49,237,30,62,54,30,118, +253,49,112,118,23,118,118,11,99,58,58,58,212,99,71,218,246,78,78,58, +58,58,108,108,63,38,13,92,58,12,13,251,53,63,251,79,12,71,34,34, +251,53,19,58,78,78,78,58,58,71,71,58,99,99,58,99,58,11,58,99, +99,99,99,218,218,99,218,218,99,8,71,99,218,218,218,99,218,99,99,99, +99,71,58,99,99,99,99,58,58,99,58,58,78,58,99,78,58,78,58,78, +78,78,99,218,128,58,58,78,128,48,12,92,123,241,78,246,58,48,241,218, +12,128,212,212,58,58,212,218,71,12,71,12,118,12,223,49,11,243,55,244, +49,112,244,223,49,236,17,111,4,121,82,82,8,223,244,29,153,61,148,234, +152,32,147,52,4,4,113,26,113,26,98,98,147,255,7,193,24,163,217,238, +110,112,101,20,20,253,8,70,107,222,22,223,223,244,244,244,244,242,112,82, +223,118,23,23,49,118,71,11,58,58,58,246,246,58,99,78,58,212,212,78, +58,99,53,53,38,83,19,58,246,19,34,79,251,34,34,71,58,71,79,13, +83,63,218,58,58,99,58,78,58,99,78,58,99,99,99,58,58,99,99,58, +218,11,218,99,11,218,11,99,71,8,71,218,218,11,71,99,218,99,99,99, +99,218,11,99,58,58,58,58,11,58,99,218,58,58,78,78,78,78,58,58, +78,78,78,78,58,78,78,78,58,58,48,123,48,48,128,78,246,78,128,241, +241,241,128,212,58,58,58,58,218,12,118,71,71,112,118,223,49,11,245,55, +30,49,112,244,223,19,30,93,107,111,4,26,101,101,8,101,112,242,93,203, +6,170,21,74,51,51,104,24,234,76,24,104,76,124,232,56,225,18,30,223, +20,20,20,20,8,66,235,231,236,112,223,118,30,112,112,54,244,112,82,49, +112,23,118,118,12,11,99,99,246,58,58,58,78,58,246,246,78,78,212,78, +58,12,53,229,34,40,78,78,58,38,0,13,13,79,71,58,58,71,13,0, +38,71,58,99,58,99,58,99,78,58,58,99,99,99,71,99,58,99,218,99, +71,99,218,99,99,71,218,99,71,8,71,71,71,123,218,218,11,218,218,218, +218,99,218,218,99,99,99,99,58,99,99,99,99,99,58,78,78,58,58,99, +99,78,78,246,78,212,78,78,58,78,128,48,48,241,48,246,78,58,246,128, +128,128,128,128,212,78,212,78,58,218,71,71,12,12,118,118,49,49,112,208, +41,22,49,112,244,23,19,49,22,93,219,14,4,8,82,101,20,101,223,49, +30,65,18,29,17,203,228,230,56,96,91,225,225,236,242,112,49,82,20,20, +20,20,82,113,210,107,29,22,118,223,112,30,244,244,62,112,23,82,223,49, +118,118,49,49,118,71,99,246,58,58,212,246,246,78,212,58,246,246,78,58, +218,53,209,126,40,78,78,78,218,0,34,34,79,71,78,99,58,71,251,229, +12,58,99,99,99,58,58,58,58,99,99,99,99,218,99,58,99,99,99,218, +99,218,11,218,218,11,218,71,71,8,71,123,71,71,218,123,71,99,11,99, +218,11,99,71,218,99,58,99,99,58,218,218,99,99,58,58,58,58,99,58, +58,99,58,246,246,246,78,58,58,58,78,58,48,48,241,78,246,78,78,58, +58,241,241,241,212,58,246,78,246,58,218,71,71,71,118,118,118,49,49,112, +103,243,236,112,49,244,112,49,223,118,65,93,107,14,98,113,82,8,101,253, +101,20,101,82,82,223,118,118,49,49,49,82,82,101,101,20,20,253,253,121, +26,70,235,110,29,103,118,223,223,11,244,244,54,242,244,49,19,223,49,118, +118,49,12,71,11,99,212,246,78,78,78,78,212,246,78,58,78,212,78,58, +12,38,213,71,78,58,58,78,40,83,79,20,99,58,99,58,99,12,92,71, +78,58,99,99,99,99,99,99,99,99,218,218,99,218,218,99,218,218,11,218, +11,218,218,71,218,218,71,123,71,8,71,71,12,71,71,218,218,218,71,71, +218,218,218,218,71,218,218,99,99,218,99,99,99,99,99,99,58,99,58,99, +99,99,99,58,78,78,78,78,58,99,58,58,58,128,48,128,78,78,58,78, +212,212,212,241,128,58,246,246,58,246,58,218,218,118,71,71,118,12,118,49, +23,237,245,55,208,23,118,23,112,223,223,118,244,236,18,110,14,210,4,66, +121,8,82,20,82,101,101,251,20,20,20,101,8,20,8,8,26,26,210,235, +109,110,65,30,118,223,49,244,244,244,244,242,65,30,223,82,49,118,118,49, +92,49,118,71,11,78,246,78,58,246,212,246,78,78,246,78,246,78,212,218, +53,92,99,78,58,58,58,246,53,0,53,99,99,58,99,58,99,71,218,58, +99,58,99,218,58,99,58,78,99,99,11,99,71,99,99,218,99,99,218,71, +123,218,71,218,12,71,71,71,71,8,71,71,71,71,71,118,71,71,218,99, +71,71,71,123,71,71,218,99,99,218,218,71,11,218,99,99,58,99,58,99, +99,99,218,58,58,78,78,78,58,99,99,58,58,58,58,128,246,78,58,58, +58,58,246,128,128,58,212,246,78,78,78,58,58,218,71,71,11,118,118,49, +12,23,11,103,243,72,237,23,23,112,23,223,19,223,112,22,109,18,29,111, +111,210,210,70,4,26,26,26,26,26,26,4,4,70,98,235,2,18,29,65, +54,23,223,49,23,244,244,112,244,54,22,244,118,82,223,223,118,92,49,49, +223,71,11,99,99,78,246,58,246,78,58,212,78,78,58,58,246,78,58,218, +71,78,58,58,99,58,58,99,19,77,58,58,58,218,99,58,58,58,58,58, +218,99,11,218,58,99,218,58,218,218,71,218,218,71,99,71,218,71,71,218, +71,123,71,71,71,71,71,71,12,8,118,118,71,71,118,71,71,71,118,12, +71,123,71,71,71,71,71,71,218,99,99,99,218,218,71,218,99,99,58,99, +99,218,99,218,58,58,246,78,78,99,99,99,99,58,246,78,58,246,58,58, +58,58,58,78,78,58,58,58,246,212,99,58,58,58,218,99,71,118,11,118, +49,49,49,23,11,208,55,245,22,112,23,23,23,23,49,49,49,223,112,30, +22,236,18,18,18,29,18,18,18,18,107,236,29,236,236,22,30,23,223,223, +223,118,118,112,244,112,244,242,242,30,23,223,82,223,49,49,49,223,49,12, +71,71,99,58,246,212,58,58,58,78,78,78,58,58,58,58,78,212,246,78, +78,58,58,11,99,58,78,78,99,58,58,99,218,99,58,99,58,58,58,218, +99,71,218,99,218,58,99,218,218,71,218,123,71,99,71,218,71,71,71,12, +71,71,12,12,12,12,12,12,12,8,12,12,12,12,12,12,118,118,71,71, +71,218,71,123,71,71,71,71,123,71,218,11,218,71,218,123,218,99,218,58, +99,99,11,218,71,99,99,58,78,58,99,99,71,99,58,78,246,246,246,58, +58,218,58,99,78,78,246,78,78,246,58,58,58,212,58,58,99,71,71,118, +71,118,118,23,49,112,112,103,72,72,65,244,112,23,118,118,70,223,223,223, +223,49,118,23,118,112,112,244,112,112,23,23,23,49,49,223,223,49,23,118, +244,244,112,62,244,109,22,30,49,223,223,82,49,223,49,223,223,118,118,71, +99,99,99,78,78,246,58,58,78,78,58,58,58,99,78,246,78,78,78,78, +99,99,99,58,99,58,78,78,58,99,99,11,218,99,99,58,58,11,99,218, +218,218,71,99,218,218,11,218,123,71,218,71,71,218,71,71,123,71,118,12, +71,12,12,12,12,12,12,12,12,8,12,12,12,12,12,12,71,71,71,118, +71,118,71,71,118,12,71,71,71,71,99,218,123,71,218,71,218,71,99,99, +99,218,218,71,218,218,99,58,58,58,58,218,99,218,218,99,58,99,78,58, +58,99,99,99,58,58,78,246,246,78,78,78,58,99,58,58,99,58,99,71, +11,71,12,23,118,118,118,23,112,30,103,208,208,65,242,112,118,23,23,118, +118,118,49,112,23,112,11,112,112,112,118,49,49,49,49,112,23,23,112,244, +244,22,22,22,242,112,49,223,223,66,223,49,223,49,223,49,12,71,71,99, +99,58,212,212,246,58,78,78,58,58,99,99,99,58,78,78,78,78,58,58, +99,99,99,58,58,58,58,58,99,218,71,218,99,99,218,58,99,99,71,218, +71,71,218,99,71,99,123,71,118,118,123,71,71,123,71,71,12,12,118,12, +12,12,12,12,12,12,71,12,71,8,12,92,12,92,71,12,118,118,12,12, +118,71,71,12,71,71,118,12,12,71,118,218,71,71,71,12,71,12,218,218, +99,99,218,218,71,71,71,218,99,99,99,99,71,71,218,71,99,58,58,58, +58,58,99,11,99,99,99,58,246,78,246,78,58,99,99,99,58,58,99,99, +99,11,71,112,112,118,118,92,118,23,118,112,30,237,103,65,65,22,30,54, +244,244,23,112,244,112,244,112,244,23,244,23,112,62,244,244,30,242,22,242, +22,30,23,49,49,19,82,223,223,49,49,49,223,49,12,11,11,218,99,58, +58,78,78,78,246,78,78,99,99,58,99,58,58,78,78,78,58,99,218,218, +71,99,99,99,58,99,58,99,71,123,71,218,99,99,218,99,218,71,12,71, +71,218,71,71,218,71,71,71,71,71,12,71,71,71,118,12,12,12,71,71, +12,12,12,12,118,12,12,92,12,8,12,12,71,12,12,12,12,12,71,12, +118,12,12,12,118,12,71,12,12,71,71,71,71,123,71,12,12,71,71,218, +218,218,11,71,123,71,71,218,71,99,99,58,99,99,71,218,218,99,218,58, +58,58,58,99,218,71,99,218,58,58,58,246,212,58,58,99,99,58,99,58, +58,58,58,218,71,71,112,71,118,118,49,23,118,118,49,112,112,30,237,22, +22,22,103,22,22,22,22,22,30,242,22,22,22,103,22,22,30,112,112,23, +49,49,49,82,223,66,49,49,49,49,223,12,118,71,218,99,99,58,99,58, +78,246,78,246,58,58,99,99,218,218,99,99,99,58,58,58,99,218,71,218, +99,99,58,58,58,99,218,123,71,71,218,218,99,99,99,123,71,71,71,92, +71,71,218,218,71,12,12,12,118,71,12,118,71,71,71,12,12,12,12,12, +12,12,118,118,12,12,12,12,12,8,92,92,92,12,12,12,12,12,12,12, +92,12,12,12,71,12,118,12,12,12,12,12,71,71,71,12,12,71,118,71, +71,123,71,71,71,118,71,71,71,123,71,218,218,99,218,71,12,71,71,218, +218,58,58,99,58,71,71,218,218,218,99,58,58,58,58,58,99,99,99,218, +218,99,58,58,99,99,99,11,11,11,23,112,118,112,49,118,118,118,23,118, +49,118,23,112,112,112,112,244,112,112,118,112,118,49,49,223,49,223,223,49, +223,223,49,49,223,49,223,223,118,118,71,11,218,99,218,99,218,78,58,58, +58,58,58,218,218,218,218,218,58,99,58,58,58,58,218,99,71,71,123,71, +218,99,58,99,99,71,71,12,12,71,71,71,218,218,218,71,118,71,71,12, +123,71,12,71,71,12,12,12,118,71,12,12,12,118,118,12,71,118,12,118, +12,12,12,12,12,92,12,12,92,8,92,92,12,12,92,12,92,12,12,12, +12,12,118,12,12,12,12,12,12,12,118,12,12,71,118,71,12,12,71,118, +71,71,71,123,218,118,12,71,71,71,71,99,99,218,218,71,71,71,71,71, +99,218,99,58,99,218,218,71,71,71,218,71,58,99,58,58,99,58,218,99, +99,218,99,99,58,58,58,99,58,99,218,11,71,112,11,112,118,23,118,23, +49,118,118,92,49,92,49,92,49,92,49,223,223,49,223,49,49,49,49,82, +49,49,49,223,118,118,71,71,11,71,99,218,218,99,58,58,58,58,58,58, +58,218,218,218,71,218,218,99,99,99,99,58,218,218,71,123,71,71,218,11, +99,99,218,218,71,71,12,71,12,218,218,218,71,218,118,12,71,118,71,71, +71,71,71,71,118,71,12,12,12,71,12,12,12,12,12,12,12,49,12,12, +12,92,12,49,12,92,12,12,92,8,92,92,92,92,92,12,92,12,12,92, +12,92,12,92,12,71,71,12,12,12,12,71,12,118,71,118,71,118,12,12, +12,12,71,71,218,71,71,118,118,12,12,118,71,218,71,218,123,12,12,12, +12,71,71,99,99,99,218,71,71,71,71,123,71,218,218,58,99,99,58,218, +99,218,218,11,99,218,99,218,218,58,58,58,99,218,71,11,71,71,118,11, +112,71,112,118,112,12,118,118,118,118,118,118,118,118,118,118,223,223,49,49, +118,118,118,71,71,71,218,71,218,71,99,99,99,218,58,58,58,218,218,218, +218,71,71,218,123,71,218,99,58,218,218,99,71,118,12,71,71,71,218,218, +218,99,71,118,12,12,12,71,71,123,71,71,71,12,118,12,92,71,118,71, +12,12,71,12,12,92,12,12,12,118,12,12,12,12,12,92,12,12,12,92, +71,92,12,92,92,92,92,92,12,8,92,92,92,92,92,92,92,92,92,12, +92,12,92,12,92,92,12,118,92,12,12,92,92,12,12,12,12,12,12,12, +12,12,71,118,12,118,71,71,12,12,12,12,118,71,218,71,218,71,118,12, +12,71,12,71,218,71,99,218,123,71,71,12,71,118,71,71,99,218,218,99, +218,99,218,218,218,71,123,71,218,218,218,218,99,99,99,58,99,99,99,218, +99,71,71,71,11,71,11,11,11,11,11,11,11,11,71,118,12,118,218,218, +71,218,71,71,218,71,99,71,99,99,99,58,218,99,218,218,71,71,71,71, +71,71,123,71,11,99,99,99,218,218,71,71,12,12,12,71,123,218,71,218, +71,118,71,12,118,12,12,71,71,218,118,12,12,12,92,12,71,118,71,71, +12,71,92,12,92,12,12,12,118,12,12,92,92,12,92,12,92,92,92,92, +92,92,92,92,12,92,92,92,92,8,92,92,92,12,92,92,92,92,92,92, +92,92,92,12,92,92,12,12,92,92,92,12,92,92,12,12,118,12,12,92, +92,12,12,12,71,71,71,118,12,118,12,12,12,71,12,71,71,71,71,12, +12,12,118,12,12,118,218,71,71,71,12,71,71,71,12,12,71,71,71,11, +218,99,218,218,218,218,71,71,71,71,71,71,71,71,218,218,218,218,99,218, +218,218,99,218,99,218,218,218,218,218,218,218,218,99,218,11,218,71,71,71, +71,123,71,123,71,218,99,218,218,11,218,99,71,71,71,71,71,71,71,92, +71,71,71,123,71,218,71,71,71,118,12,12,12,12,71,71,71,218,71,71, +12,12,12,12,12,12,12,71,71,71,12,12,12,12,12,12,12,12,118,12, +12,92,92,92,12,92,12,71,12,92,92,12,92,92,92,92,92,12,92,92, +92,92,92,92,92,92,92,92,92,8,92,19,92,92,92,92,92,223,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,12,118,12,12, +12,92,92,12,92,12,12,12,71,12,49,12,92,92,12,12,71,12,12,12, +12,71,12,12,12,12,71,12,71,71,218,218,71,118,12,12,12,71,12,12, +71,123,71,71,99,71,71,123,71,123,71,123,71,71,71,71,71,71,71,71, +71,218,218,218,71,71,218,71,218,71,218,71,71,123,71,123,71,123,71,123, +218,71,218,218,218,218,71,71,71,71,71,12,12,12,12,12,12,12,71,71, +71,123,218,218,71,71,12,12,12,71,12,12,12,12,71,71,71,12,118,12, +12,92,12,12,12,12,12,12,71,12,92,12,92,12,12,118,12,12,12,92, +92,92,92,92,92,12,92,92,12,92,92,92,92,19,12,92,92,92,92,92, +12,92,92,92,92,92,92,92,92,8,19,108,19,108,12,19,92,92,92,92, +92,92,92,92,92,19,92,92,92,92,92,92,92,92,92,92,92,92,12,92, +92,92,92,92,92,92,12,12,12,12,71,12,92,92,92,92,12,92,118,12, +12,12,12,12,92,12,12,12,71,12,71,71,71,12,12,12,12,12,12,92, +112,118,71,12,71,71,71,218,71,71,71,71,71,71,12,12,12,12,12,12, +12,118,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,118,71,12,71,12,12,12,12,12,71,71,123, +71,71,71,92,12,12,12,12,92,92,71,12,12,12,12,71,12,12,92,12, +92,92,12,118,12,12,118,12,12,92,92,92,92,12,12,12,12,92,92,92, +92,12,92,12,92,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,19,19,108,92,8,92,92,19,92,108,92,19,92,92,92, +92,108,92,92,92,12,92,92,12,92,92,92,92,92,92,92,92,92,92,12, +12,92,92,92,92,223,12,92,12,12,12,12,12,92,92,12,92,12,12,12, +12,12,12,12,49,12,92,92,92,92,12,12,71,12,12,12,12,12,12,12, +92,92,118,92,12,12,118,12,12,12,12,12,12,71,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,118,118,12,118,12,12,12,12,12,12,12,12,12,12,12,12,71,12, +12,12,71,92,12,92,92,49,12,12,12,12,118,12,12,118,92,12,92,92, +12,12,12,12,123,12,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,92,92,19,92,92,108, +92,19,92,108,108,92,108,92,108,8,19,108,19,92,19,108,108,108,92,19, +92,92,19,92,108,108,92,108,108,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,12,92,12,92,92,92,92,92, +92,12,12,12,12,12,12,92,92,92,92,92,92,12,12,12,12,12,118,12, +12,12,12,92,12,12,12,12,71,12,12,12,12,71,71,12,12,71,118,118, +12,12,12,12,12,118,12,12,12,92,12,12,12,12,12,71,12,12,118,12, +12,71,12,12,12,12,12,92,118,118,12,12,12,12,71,12,12,12,49,12, +92,12,92,92,92,12,92,12,12,12,12,12,92,92,92,92,92,92,92,92, +12,12,71,92,92,92,12,92,223,92,92,92,12,92,92,92,92,92,12,19, +92,92,92,92,92,92,108,92,108,19,92,108,108,108,92,92,19,108,92,108, +19,92,19,92,108,92,108,19,19,8,19,108,19,108,108,19,92,19,108,19, +19,108,108,19,19,92,108,92,92,108,19,12,108,108,92,19,108,108,92,19, +92,92,92,92,92,92,108,19,92,92,92,92,12,92,92,92,92,92,92,92, +92,92,92,12,12,118,123,92,12,12,92,92,92,92,92,92,12,12,12,12, +12,92,12,12,92,12,92,92,92,92,92,92,12,12,12,12,12,12,12,71, +71,12,12,12,12,12,12,12,71,12,12,12,12,12,12,92,12,12,92,12, +92,12,12,49,12,92,12,12,12,12,12,71,12,12,12,12,92,12,92,12, +92,92,92,92,92,12,12,12,12,92,12,12,92,92,92,92,92,92,12,12, +12,92,92,92,92,19,108,92,92,92,92,92,92,92,92,19,92,108,108,92, +92,92,92,19,108,92,19,108,92,108,108,92,19,92,108,19,108,92,108,92, +19,108,108,92,108,108,19,92,108,8,19,19,19,19,19,108,19,19,108,92, +19,19,108,92,19,19,108,19,108,92,108,19,92,19,92,92,92,19,92,92, +92,92,92,92,92,92,19,108,92,19,19,92,92,92,92,92,92,92,223,92, +223,92,92,92,92,92,92,92,92,92,92,92,92,223,92,92,92,12,92,12, +12,12,12,12,92,12,12,92,12,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,92,49,92,12,92,92,12,12,92,12,92,12,92,12,12,92,12, +12,12,12,12,12,12,12,92,92,92,12,92,92,92,92,92,92,92,92,92, +92,92,12,12,12,12,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,12,19,92,92,108,12,92,92,92,12,19,92,92,108,92,19,19,92, +92,92,92,92,108,19,92,19,19,92,92,108,108,92,108,92,19,19,19,108, +19,19,19,19,19,19,108,19,19,8,19,53,19,53,19,53,19,53,19,108, +19,108,19,108,108,108,19,108,19,108,19,108,108,108,108,19,108,19,108,19, +19,92,108,19,19,12,108,92,108,92,108,19,108,92,92,92,92,92,92,19, +92,19,108,92,19,92,92,92,92,92,92,92,92,92,92,92,108,108,19,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,12,92,92,92,12,92,19,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,108,19,92,92,223,92,92,92,92,92,92, +19,108,108,108,108,19,92,92,92,92,108,108,108,108,108,92,108,92,108,19, +92,19,108,108,19,108,108,108,108,108,19,19,19,19,19,19,108,108,53,19, +108,19,108,53,19,53,19,53,19,8,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,108,19,108,19, +19,19,19,19,108,19,108,19,108,19,108,19,19,19,19,108,19,92,92,92, +19,19,108,19,108,19,19,92,92,92,92,92,92,92,92,19,19,108,19,108, +19,92,19,92,92,92,92,92,92,92,92,92,92,92,92,19,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,19,19,19,92,19,19,92,19,19,108,92,92,92,19,92,92,92, +92,92,92,92,92,19,19,19,19,108,19,108,92,92,92,92,92,92,19,19, +92,19,223,19,108,19,108,92,19,19,19,19,19,19,108,19,108,19,108,19, +19,19,19,19,19,19,19,19,19,108,19,108,19,108,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,8}; diff --git a/plug-ins/stegano/stegano.c b/plug-ins/stegano/stegano.c new file mode 100644 index 0000000000..850d66ce1e --- /dev/null +++ b/plug-ins/stegano/stegano.c @@ -0,0 +1,1273 @@ +/********************************************************************** + * Stegano Plug-In (Version 1.00) + * Daniel Cotting (cotting@mygale.org) + ********************************************************************** + * Official homepages: http://www.mygale.org/~cotting + * http://cotting.citeweb.net + * http://village.cyberbrain.com/cotting + ********************************************************************** + */ + + +/* The GIMP -- an image manipulation program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include + +#include "libgimp/gimp.h" +#include "gtk/gtk.h" +#include "logo.h" + +#define ENTRY_WIDTH 200 + +typedef struct { + gint mode; + char filename[128]; + gint warningmessage; +} steganoValues; + +typedef struct { + gint run; +} steganoInterface; + + +/* Declare local functions. + */ +static void query(void); +static void run(char *name, int nparams, + GParam *param, + int *nreturn_vals, + GParam **return_vals); +static void drawstegano(GDrawable *drawable); +static void readstegano(GDrawable *drawable); +static gint stegano_dialog(void); +static gint stegano_save_dialog(void); +static gint stegano_warning_dialog(void); +static gint message_dialog(char *, char *, char *); +GtkWidget * stegano_logo_dialog(void); + + + + +GtkWidget *maindlg; +GtkWidget *globalentry; +GtkWidget *saveglobalentry; +GtkWidget *logodlg; +GtkWidget *warningdlg; +GtkWidget *messagedlg; +GtkWidget *savedlg; + +GtkTooltips *tips; +GdkColor tips_fg,tips_bg; +gchar filename[128]; +gint saverun; + static GParam values[1]; + GDrawable *drawable; + GRunModeType run_mode; + GStatusType status = STATUS_SUCCESS; + + + +GPlugInInfo PLUG_IN_INFO = +{ + NULL, /* init_proc */ + NULL, /* quit_proc */ + query, /* query_proc */ + run, /* run_proc */ +}; + +static steganoValues wvals = { + 1,"",1 +}; /* wvals */ + +static steganoInterface bint = +{ + FALSE /* run */ +}; + + +MAIN() + +static void +query(void) +{ + static GParamDef args[] = + { + { PARAM_INT32, "run_mode", "Interactive, non-interactive" }, + { PARAM_IMAGE, "image", "Input image (unused)" }, + { PARAM_DRAWABLE, "drawable", "Input drawable" }, + { PARAM_INT8, "mode", "FALSE: Hide file in image; TRUE: Get hidden file" }, + { PARAM_STRING, "filename[128]", "Name of the file to hide in an image (only of importance if mode=FALSE" }, + }; + + static GParamDef *return_vals = NULL; + static int nargs = sizeof(args)/ sizeof(args[0]); + static int nreturn_vals = 0; + + gimp_install_procedure("plug_in_stegano", + "Hides a file in an image.", + "", + "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", + "Daniel Cotting (cotting@mygale.org, http://www.mygale.org/~cotting)", + "December, 1997", + "/Filters/Image/Stegano", + "RGB*, GRAY*, INDEXED*", + PROC_PLUG_IN, + nargs, nreturn_vals, + args, return_vals); +} + +static void +run(char *name, + int nparams, + GParam *param, + int *nreturn_vals, + GParam **return_vals) +{ + gchar **argv; + gint argc; + + run_mode = param[0].data.d_int32; + + values[0].type = PARAM_STATUS; + values[0].data.d_status = status; + + *nreturn_vals = 1; + *return_vals = values; + + drawable = gimp_drawable_get(param[2].data.d_drawable); + + + switch(run_mode) { + case RUN_INTERACTIVE: + /* Possibly retrieve data */ + gimp_get_data("plug_in_stegano", &wvals); + /* Get information from the dialog */ + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_stegano"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + + stegano_dialog(); + return; + + case RUN_NONINTERACTIVE: + /* Make sure all the arguments are present */ + if (nparams != 5) + status = STATUS_CALLING_ERROR; + if (status == STATUS_SUCCESS) + wvals.mode = param[3].data.d_int8; + strncpy (wvals.filename,param[4].data.d_string, 128); + wvals.filename[127]='\0'; + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_stegano"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + tips = gtk_tooltips_new (); + gtk_tooltips_set_delay(tips, 2500); + + break; + case RUN_WITH_LAST_VALS: + /* Possibly retrieve data */ + argc = 1; + argv = g_new(gchar *, 1); + argv[0] = g_strdup("apply_stegano"); + gtk_init(&argc, &argv); + gtk_rc_parse(gimp_gtkrc()); + tips = gtk_tooltips_new (); + gtk_tooltips_set_delay(tips, 2500); + + gimp_get_data("plug_in_stegano", &wvals); + + break; + default: + break; + } + if (status == STATUS_SUCCESS) { + if (!wvals.mode) { + gimp_tile_cache_ntiles(2 *(drawable->width / gimp_tile_width() + 1)); +/* gimp_progress_init("Stegano plug-in is working. Please wait..."); */ + drawstegano(drawable); + if(run_mode != RUN_NONINTERACTIVE) + gimp_displays_flush(); + } else { + readstegano(drawable); + } + } + if(run_mode == RUN_INTERACTIVE) + gimp_set_data("plug_in_stegano", &wvals, sizeof(steganoValues)); + values[0].data.d_status = status; + gimp_drawable_detach(drawable); + +} + + +static void +set_tooltip (GtkTooltips *tooltips, GtkWidget *widget, const char *desc) +{ + if (desc && desc[0]) + gtk_tooltips_set_tips (tooltips, widget, (char *) desc); +} + + +static void +drawstegano(GDrawable *drawable) +{ + + FILE *In; + + GPixelRgn srcPR, destPR; + gint width, height; + gint bytes; + gint row; + gint x1, y1, x2, y2, ix, iy; + guchar *src, *dest; + gint i, col; + gint value; + long count=1,smallcount=0; + gfloat regionwidth, regionheight, dx, dy; + gfloat a, b, x, y; + glong pixelpos, pos; + guchar bgr_red, bgr_blue, bgr_green; + + char actualchar[1]; + gint made_it_once=FALSE; + glong backup; + gchar * point; + + typedef struct { + gchar identity[4]; + gchar filename[128]; + gdouble len; + } _header; + _header header; + + point=(char*) &header; + for (i=0;iid, &x1, &y1, &x2, &y2); + + + regionwidth = x2-x1; + a = regionwidth/2; + regionheight = y2-y1; + b = regionheight/2; + + width = drawable->width; + height = drawable->height; + bytes = drawable->bpp; + + gimp_pixel_rgn_init(&srcPR, drawable, 0, 0, width, height, FALSE, FALSE); + gimp_pixel_rgn_init(&destPR, drawable, 0, 0, width, height, TRUE, TRUE); + + src = g_malloc((x2-x1)*(y2-y1)*bytes); + dest = g_malloc((x2-x1)*(y2-y1)*bytes); + + gimp_pixel_rgn_get_rect(&srcPR, src, x1, y1, regionwidth, regionheight); + + backup = ftell(In); + fseek(In, 0, SEEK_END); + header.len = ftell(In)-backup; + fseek(In, backup, SEEK_SET); + + point = (char *) &header; + actualchar[0]=point[0]; + + for(col = 0; col < regionwidth; col++) { + dx = (gfloat)col - a; + for(row = 0; row < regionheight; row++) { + pixelpos = (col+row*regionwidth)*bytes; + dy = -((gfloat)row - b); + x = dx+a; + y = -dy+b; + ix=(int)x; + iy=(int)y; + pos = ((gint)(iy)*regionwidth + (gint)(ix)) * bytes; + for(i = 0; i < bytes; i++) { + smallcount++; + if (smallcount==9) { + if (count