summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2011-01-24 17:04:22 +0000
committerMatthias Melcher <fltk@matthiasm.com>2011-01-24 17:04:22 +0000
commitfe25f19767f1cd2393c4d1796fb42d5aa82b194c (patch)
tree229437962da4fa67acf27bf171d6124f5631c34e
parentf9363c16d0e6518ba82d05f1f7f415e9224a8e35 (diff)
Adding embedded documentation to Fluid if installed odcs are not found. Falls back to the internet if that does not exist either. Also, adds JPEG and PNG images to the Shared Image list if they were loaded from memory - see example use in fluid.cxx which loads and embedded html document containing an embedded PNG image.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8306 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
-rw-r--r--FL/Fl_File_Browser.H4
-rw-r--r--FL/Fl_File_Icon.H4
-rw-r--r--FL/Fl_File_Input.H4
-rw-r--r--FL/Fl_Help_View.H13
-rw-r--r--FL/Fl_Plugin.H6
-rw-r--r--FL/Fl_Progress.H4
-rw-r--r--FL/Fl_Shared_Image.H6
-rw-r--r--FL/Fl_Spinner.H4
-rw-r--r--FL/Fl_Text_Display.H4
-rw-r--r--FL/Fl_Wizard.H4
-rw-r--r--FL/mac.H4
-rw-r--r--fluid/about_panel.cxx580
-rw-r--r--fluid/about_panel.fl9
-rw-r--r--fluid/about_panel.h1
-rw-r--r--fluid/fluid.cxx54
-rw-r--r--src/Fl_JPEG_Image.cxx14
-rw-r--r--src/Fl_PNG_Image.cxx24
-rw-r--r--src/Fl_Shared_Image.cxx23
18 files changed, 716 insertions, 46 deletions
diff --git a/FL/Fl_File_Browser.H b/FL/Fl_File_Browser.H
index a025e51f9..aa1be5a5a 100644
--- a/FL/Fl_File_Browser.H
+++ b/FL/Fl_File_Browser.H
@@ -45,8 +45,8 @@
//
/** The Fl_File_Browser widget displays a list of filenames, optionally with file-specific icons. */
-class FL_EXPORT Fl_File_Browser : public Fl_Browser
-{
+class FL_EXPORT Fl_File_Browser : public Fl_Browser {
+
int filetype_;
const char *directory_;
uchar iconsize_;
diff --git a/FL/Fl_File_Icon.H b/FL/Fl_File_Icon.H
index 0bdfc26a6..17ade0cda 100644
--- a/FL/Fl_File_Icon.H
+++ b/FL/Fl_File_Icon.H
@@ -53,8 +53,8 @@
The Fl_File_Icon class manages icon images that can be used
as labels in other widgets and as icons in the FileBrowser widget.
*/
-class FL_EXPORT Fl_File_Icon //// Icon data
-{
+class FL_EXPORT Fl_File_Icon { //// Icon data
+
static Fl_File_Icon *first_; // Pointer to first icon/filetype
Fl_File_Icon *next_; // Pointer to next icon/filetype
const char *pattern_; // Pattern string
diff --git a/FL/Fl_File_Input.H b/FL/Fl_File_Input.H
index 24ae315ca..0a367d6ea 100644
--- a/FL/Fl_File_Input.H
+++ b/FL/Fl_File_Input.H
@@ -51,8 +51,8 @@
One resulting side effect is that you should call clear_changed() early in your callback
to avoid reentrant calls if you plan to show another window or dialog box in the callback.
*/
-class FL_EXPORT Fl_File_Input : public Fl_Input
-{
+class FL_EXPORT Fl_File_Input : public Fl_Input {
+
Fl_Color errorcolor_;
char ok_entry_;
uchar down_box_;
diff --git a/FL/Fl_Help_View.H b/FL/Fl_Help_View.H
index c3a4af7e9..cf61a9d44 100644
--- a/FL/Fl_Help_View.H
+++ b/FL/Fl_Help_View.H
@@ -57,8 +57,7 @@ typedef const char *(Fl_Help_Func)(Fl_Widget *, const char *);
// Fl_Help_Block structure...
//
-struct Fl_Help_Block
-{
+struct Fl_Help_Block {
const char *start, // Start of text
*end; // End of text
uchar border; // Draw border?
@@ -74,8 +73,7 @@ struct Fl_Help_Block
// Fl_Help_Link structure...
//
/** Definition of a link for the html viewer. */
-struct Fl_Help_Link
-{
+struct Fl_Help_Link {
char filename[192], ///< Reference filename
name[32]; ///< Link target (blank if none)
int x, ///< X offset of link text
@@ -138,8 +136,7 @@ protected:
/** Fl_Help_Target structure */
-struct Fl_Help_Target
-{
+struct Fl_Help_Target {
char name[32]; ///< Target name
int y; ///< Y offset of target
};
@@ -209,8 +206,8 @@ struct Fl_Help_Target
- yen Yuml yuml
*/
-class FL_EXPORT Fl_Help_View : public Fl_Group // Help viewer widget
-{
+class FL_EXPORT Fl_Help_View : public Fl_Group { // Help viewer widget
+
enum { RIGHT = -1, CENTER, LEFT }; ///< Alignments
char title_[1024]; ///< Title string
diff --git a/FL/Fl_Plugin.H b/FL/Fl_Plugin.H
index 231a802cc..0bff10c85 100644
--- a/FL/Fl_Plugin.H
+++ b/FL/Fl_Plugin.H
@@ -67,8 +67,7 @@
}
\endcode
*/
-class FL_EXPORT Fl_Plugin
-{
+class FL_EXPORT Fl_Plugin {
Fl_Preferences::ID id;
public:
Fl_Plugin(const char *klass, const char *name);
@@ -80,8 +79,7 @@ public:
\brief Fl_Plugin_Manager manages link-time and run-time plugin binaries.
\see Fl_Plugin
*/
-class FL_EXPORT Fl_Plugin_Manager : public Fl_Preferences
-{
+class FL_EXPORT Fl_Plugin_Manager : public Fl_Preferences {
public:
Fl_Plugin_Manager(const char *klass);
~Fl_Plugin_Manager();
diff --git a/FL/Fl_Progress.H b/FL/Fl_Progress.H
index 0aaba5870..d8c96e3db 100644
--- a/FL/Fl_Progress.H
+++ b/FL/Fl_Progress.H
@@ -44,8 +44,8 @@
/**
Displays a progress bar for the user.
*/
-class FL_EXPORT Fl_Progress : public Fl_Widget
-{
+class FL_EXPORT Fl_Progress : public Fl_Widget {
+
float value_,
minimum_,
maximum_;
diff --git a/FL/Fl_Shared_Image.H b/FL/Fl_Shared_Image.H
index dd134947d..9a6134dc9 100644
--- a/FL/Fl_Shared_Image.H
+++ b/FL/Fl_Shared_Image.H
@@ -47,7 +47,11 @@ typedef Fl_Image *(*Fl_Shared_Handler)(const char *name, uchar *header,
function to support standard image formats such as BMP, GIF, JPEG, and PNG.
*/
class FL_EXPORT Fl_Shared_Image : public Fl_Image {
- protected:
+
+ friend class Fl_JPEG_Image;
+ friend class Fl_PNG_Image;
+
+protected:
static Fl_Shared_Image **images_; // Shared images
static int num_images_; // Number of shared images
diff --git a/FL/Fl_Spinner.H b/FL/Fl_Spinner.H
index b131ba67f..32de7e23f 100644
--- a/FL/Fl_Spinner.H
+++ b/FL/Fl_Spinner.H
@@ -48,8 +48,8 @@
widget and repeat buttons. The user can either type into the
input area or use the buttons to change the value.
*/
-class FL_EXPORT Fl_Spinner : public Fl_Group
-{
+class FL_EXPORT Fl_Spinner : public Fl_Group {
+
double value_; // Current value
double minimum_; // Minimum value
double maximum_; // Maximum value
diff --git a/FL/Fl_Text_Display.H b/FL/Fl_Text_Display.H
index 8d7a8d367..86a12ec92 100644
--- a/FL/Fl_Text_Display.H
+++ b/FL/Fl_Text_Display.H
@@ -47,8 +47,8 @@
in the widget is managed by the Fl_Text_Buffer class. A single Text Buffer
can be displayed by multiple Text Displays.
*/
-class FL_EXPORT Fl_Text_Display: public Fl_Group
-{
+class FL_EXPORT Fl_Text_Display: public Fl_Group {
+
public:
/**
diff --git a/FL/Fl_Wizard.H b/FL/Fl_Wizard.H
index 389b79a64..500f5775d 100644
--- a/FL/Fl_Wizard.H
+++ b/FL/Fl_Wizard.H
@@ -47,8 +47,8 @@
<P>As with Fl_Tabs, wizard panes are composed of child (usually
Fl_Group) widgets. Navigation buttons must be added separately.
*/
-class FL_EXPORT Fl_Wizard : public Fl_Group
-{
+class FL_EXPORT Fl_Wizard : public Fl_Group {
+
Fl_Widget *value_;
void draw();
diff --git a/FL/mac.H b/FL/mac.H
index 194caf7d3..98d7bb2c1 100644
--- a/FL/mac.H
+++ b/FL/mac.H
@@ -109,8 +109,8 @@ extern void *fl_default_cursor;
// This object contains all mac-specific stuff about a window:
// WARNING: this object is highly subject to change!
-class Fl_X
-{
+class Fl_X {
+
public:
Window xid; // pointer to the Cocoa window object (FLWindow*)
Fl_Offscreen other_xid; // pointer for offscreen bitmaps (overlay window)
diff --git a/fluid/about_panel.cxx b/fluid/about_panel.cxx
index 72ff59091..c2cbd04dc 100644
--- a/fluid/about_panel.cxx
+++ b/fluid/about_panel.cxx
@@ -300,6 +300,586 @@ Fl_Double_Window* make_about_panel() {
} // Fl_Double_Window* about_panel
return about_panel;
}
+/**
+ Embedded image for internal fluid.html web page.
+*/
+unsigned char fluid_org_png[12690] = /* binary data included from ../documentation/src/fluid-org.png */
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,161,0,0,1,14,8,4,0,0,0,
+19,9,6,115,0,0,0,2,98,75,71,68,0,161,11,92,176,76,0,0,0,9,112,72,89,115,0,0,0,
+72,0,0,0,72,0,70,201,107,62,0,0,0,9,118,112,65,103,0,0,2,161,0,0,1,14,0,207,76,
+41,210,0,0,49,33,73,68,65,84,120,218,237,157,77,172,36,215,117,223,127,117,235,
+187,187,223,19,41,123,17,104,32,115,97,111,236,24,65,162,49,103,200,153,208,38,
+2,4,94,37,8,101,62,76,244,1,24,178,2,231,67,128,77,115,64,100,145,149,55,54,
+16,105,8,198,128,33,24,112,44,216,16,98,189,60,210,128,225,133,224,29,19,153,
+67,102,226,241,34,176,189,81,34,129,116,72,32,11,27,226,140,230,227,117,87,213,
+205,226,158,170,254,170,126,175,170,187,186,95,247,244,249,13,166,95,117,125,
+119,191,91,255,119,206,61,231,158,235,21,40,138,162,40,203,97,46,250,6,20,69,81,
+118,23,149,80,69,81,148,165,81,9,85,20,69,89,154,224,162,111,64,81,166,201,109,
+247,231,244,189,139,254,84,202,147,138,74,168,178,81,198,2,153,45,220,199,208,
+109,144,211,128,205,234,214,138,19,166,2,171,44,143,167,17,121,101,189,152,53,
+88,149,171,241,128,201,30,44,163,66,170,172,128,74,168,178,70,140,133,98,171,
+164,201,9,250,223,18,81,136,116,26,177,71,13,42,163,74,123,212,145,87,214,196,
+246,201,231,152,130,97,37,161,209,248,142,201,173,138,168,210,14,149,80,101,45,
+108,171,128,22,158,177,240,144,28,31,8,101,109,128,33,192,185,247,42,163,74,27,
+84,66,149,206,217,86,249,28,243,0,39,159,78,72,1,2,50,247,48,108,93,207,173,
+178,221,168,132,42,29,179,221,2,106,44,220,230,30,224,227,209,3,66,18,10,201,15,
+8,52,81,90,105,137,74,168,178,87,20,158,177,31,227,99,8,240,201,8,232,1,5,33,
+33,5,69,105,139,42,74,67,180,189,40,157,98,236,246,90,160,238,254,142,185,71,
+128,71,64,72,68,138,37,45,183,73,143,104,110,53,54,175,52,69,37,84,233,144,237,
+23,208,223,230,239,128,16,143,152,144,148,92,4,212,199,128,56,244,209,42,151,
+80,246,12,149,80,101,175,248,24,15,159,0,159,161,72,165,193,195,96,240,57,5,
+177,67,21,165,41,218,94,148,206,216,126,27,244,38,31,3,33,33,33,57,112,234,214,
+19,143,247,161,64,221,120,165,57,42,161,74,71,108,191,128,254,50,15,8,128,144,
+72,130,71,0,33,150,17,5,121,149,37,170,185,161,74,115,84,66,149,78,216,126,1,
+253,2,15,241,48,4,12,201,201,240,48,196,20,64,14,213,107,161,143,132,210,10,109,
+47,202,78,80,22,43,113,163,139,156,92,183,203,64,125,4,64,68,38,217,159,22,40,
+200,177,104,217,92,101,121,84,66,149,14,88,183,13,234,4,180,240,38,101,179,141,
+128,26,251,243,140,24,18,225,51,22,76,231,200,123,213,210,228,90,69,105,134,74,
+168,114,6,205,164,113,19,2,90,202,102,121,165,118,2,250,34,48,148,119,57,190,
+200,164,193,16,19,16,17,98,136,24,143,78,210,158,80,165,41,42,161,202,153,140,
+237,191,85,207,49,62,203,180,77,89,58,231,211,107,102,143,45,197,115,94,174,199,
+245,72,207,186,203,130,17,33,67,66,156,221,233,227,17,72,36,62,32,36,196,16,98,
+208,172,80,165,29,42,161,74,3,102,69,112,122,219,89,210,53,95,112,121,177,108,
+206,203,245,244,209,243,78,124,147,114,206,198,190,64,78,46,201,243,62,224,227,
+19,17,147,226,147,50,32,33,192,151,237,218,43,170,180,67,37,84,105,65,157,200,
+45,22,208,89,145,156,221,54,125,100,157,107,94,31,60,154,20,208,241,154,69,247,
+112,29,40,48,132,64,68,46,226,25,147,16,16,211,35,196,195,224,19,18,16,104,79,
+168,210,18,149,208,189,167,253,196,28,109,250,33,221,126,133,55,150,218,210,218,
+156,220,103,153,201,65,220,49,231,31,153,65,85,11,20,124,98,34,66,18,250,244,
+233,145,18,18,147,16,98,48,20,68,104,79,168,210,6,149,208,61,103,217,153,141,
+156,140,158,103,131,142,183,206,246,110,206,187,235,245,157,4,139,108,208,249,
+251,174,63,254,42,1,166,170,10,154,144,144,210,167,71,66,72,76,42,63,157,176,26,
+117,227,149,214,168,132,42,75,225,28,233,102,2,58,29,71,159,223,239,252,115,212,
+11,232,121,150,176,177,87,221,189,226,19,18,145,144,16,145,74,133,166,132,84,
+122,67,163,137,234,245,106,131,42,237,80,9,221,107,206,147,162,122,129,107,158,
+76,84,246,88,214,197,209,207,95,179,152,73,43,244,236,207,80,218,160,229,84,
+115,17,17,9,3,250,244,232,147,144,202,136,249,68,109,80,101,41,84,66,149,198,
+204,134,127,230,101,171,62,37,105,50,228,211,44,18,95,238,127,86,32,233,236,60,
+129,105,27,180,236,255,76,73,233,209,35,149,144,82,72,76,68,140,75,168,87,27,84,
+105,143,74,168,210,128,58,177,60,95,64,199,239,218,244,127,142,183,47,18,208,
+179,239,172,60,254,42,165,13,234,202,138,244,69,64,83,82,14,72,197,149,143,36,
+82,31,168,128,42,75,161,18,186,199,52,233,81,108,147,84,63,185,111,157,144,46,
+58,99,221,53,234,2,81,117,75,231,222,19,62,134,16,31,139,79,36,225,164,144,132,
+132,30,161,216,161,129,150,184,83,150,68,37,116,207,89,78,64,183,191,46,211,216,
+6,141,93,162,18,3,122,19,78,252,128,132,144,72,34,241,16,169,128,42,75,161,18,
+170,180,102,215,4,52,36,165,79,68,74,95,220,247,1,49,145,56,241,6,125,12,148,
+229,209,32,228,222,178,108,70,232,238,80,72,178,82,68,128,79,74,159,152,148,30,
+131,42,157,62,36,81,249,84,86,66,219,207,158,178,124,249,144,93,178,65,13,145,
+244,119,150,78,188,11,41,37,244,240,9,73,128,66,157,120,101,5,212,10,85,90,177,
+75,2,234,156,248,50,141,190,47,121,160,3,66,34,124,169,203,4,129,10,168,178,2,
+42,161,123,76,123,49,220,21,1,5,191,114,226,99,233,5,141,171,222,208,88,134,
+117,70,68,213,188,241,138,178,28,234,200,239,37,79,126,63,40,19,78,124,95,220,
+248,152,30,41,129,140,137,15,48,20,106,131,42,43,162,18,170,52,102,87,108,208,
+233,72,124,74,68,42,37,238,230,35,241,42,160,202,106,168,132,238,45,109,229,112,
+219,45,215,217,241,72,16,145,16,17,209,163,79,159,67,6,19,78,124,25,137,215,233,
+142,149,213,208,190,208,61,100,219,197,112,249,207,84,10,168,1,66,250,68,132,
+244,232,145,16,147,144,144,16,75,113,101,200,48,248,158,10,168,178,26,42,161,74,
+35,218,77,56,124,17,119,119,149,0,87,46,196,136,116,186,194,202,7,244,25,144,
+210,35,174,4,86,231,72,82,186,66,29,249,189,163,139,9,229,182,9,39,159,101,101,
+250,68,4,212,69,226,93,105,17,39,168,169,88,162,177,166,211,43,29,162,109,105,
+47,105,47,160,133,103,236,54,134,147,140,133,235,110,9,72,196,133,79,73,232,
+203,72,164,62,3,6,12,136,171,226,118,144,105,58,189,210,17,42,161,74,11,182,199,
+157,47,251,115,175,3,134,98,162,15,180,79,74,64,68,74,143,3,122,50,168,51,33,38,
+194,151,6,175,2,170,116,133,74,232,158,177,108,40,41,183,171,158,161,123,94,24,
+127,42,124,98,92,12,62,198,167,199,33,61,250,34,160,105,149,202,20,19,201,20,
+115,138,210,13,42,161,123,197,42,253,160,35,134,100,12,121,204,125,30,113,159,
+123,220,227,62,247,185,199,3,30,240,136,199,228,140,24,2,5,163,165,238,238,109,
+0,94,108,121,148,203,241,116,178,152,72,31,104,79,18,153,98,122,28,74,97,187,
+144,144,128,66,155,188,210,41,218,158,148,134,100,20,100,140,24,1,150,156,140,
+130,130,12,200,1,240,229,103,196,144,120,133,235,180,61,214,137,103,8,50,242,40,
+34,166,79,159,62,7,244,56,148,249,226,19,98,92,127,169,65,139,43,43,221,161,18,
+170,44,65,198,180,55,239,99,8,200,171,145,233,0,33,35,194,37,236,209,118,110,
+118,40,210,237,10,218,197,36,210,7,154,114,64,143,1,61,66,250,36,248,64,226,242,
+70,85,62,149,14,81,9,221,35,186,73,103,242,113,217,151,142,0,35,22,224,8,159,2,
+11,100,56,155,212,39,194,159,146,196,92,44,213,179,232,203,158,245,87,166,154,
+19,30,192,96,200,1,95,82,230,83,66,122,18,139,119,2,26,147,18,137,184,6,100,
+218,15,170,116,140,74,168,210,144,98,98,57,98,40,226,25,144,0,167,4,100,20,12,
+49,20,228,248,32,175,73,229,224,151,56,9,92,44,165,253,133,91,124,145,203,124,
+234,92,6,79,250,57,67,153,39,62,37,161,199,128,67,73,111,10,117,122,15,101,109,
+168,132,238,13,171,218,160,102,234,167,79,72,72,79,132,210,39,231,148,178,31,
+179,192,80,0,30,86,94,189,9,199,191,92,94,116,35,135,213,94,179,123,120,20,120,
+242,58,62,62,32,196,35,144,121,58,83,18,98,41,47,226,222,185,100,250,201,79,160,
+40,221,161,18,170,180,32,0,78,9,73,24,18,145,18,144,225,99,24,81,48,194,50,130,
+57,171,115,26,103,71,158,197,83,13,239,165,180,64,221,217,98,2,66,124,41,104,
+231,108,207,195,42,145,169,188,119,181,65,149,174,185,32,9,93,174,200,173,62,0,
+23,137,75,96,7,136,24,17,3,150,135,28,240,136,136,140,130,156,66,246,40,106,
+142,46,38,206,83,191,71,201,39,23,110,53,51,239,220,120,120,55,193,135,71,76,72,
+72,42,113,249,84,202,221,197,85,50,189,182,31,101,29,172,69,66,199,2,89,156,
+241,56,20,13,207,54,62,2,155,213,173,173,30,45,125,68,22,179,122,40,201,200,247,
+28,146,87,113,119,35,83,188,61,130,42,246,94,200,150,105,74,249,45,230,206,58,
+203,211,213,190,101,209,144,249,179,76,19,18,136,43,159,18,144,16,200,40,249,80,
+10,43,27,21,80,101,109,116,36,161,23,49,98,229,1,165,16,151,214,136,147,110,
+125,84,22,177,138,128,250,158,251,118,35,134,248,210,183,232,19,50,34,32,35,33,
+95,50,157,126,158,195,86,123,135,248,248,88,60,82,233,19,141,8,241,73,8,49,114,
+159,26,133,87,214,71,39,18,122,17,35,167,141,237,3,247,43,59,197,96,100,232,158,
+22,209,157,167,155,63,113,1,5,153,244,135,38,34,160,67,98,113,226,141,252,207,
+113,161,158,249,75,46,10,36,77,239,249,180,108,183,213,81,211,123,140,67,83,190,
+116,10,184,241,73,190,228,8,248,248,132,50,220,115,156,198,164,109,66,89,15,43,
+75,232,197,22,158,184,15,82,92,34,192,224,50,18,13,88,125,100,186,199,247,114,
+107,48,4,64,64,198,105,149,74,63,194,121,2,153,148,50,158,110,84,89,203,235,28,
+44,220,50,223,88,51,249,189,3,149,120,186,188,128,132,162,26,15,175,109,65,89,
+31,43,73,232,69,215,237,121,95,198,191,228,19,49,222,178,111,84,109,209,49,93,
+86,8,13,200,8,40,112,66,117,10,213,183,159,19,227,87,175,99,218,14,216,236,183,
+216,55,150,107,135,98,139,134,82,242,174,32,32,115,161,38,109,5,202,90,89,65,66,
+47,86,64,11,207,216,103,248,75,169,15,25,85,15,114,84,245,140,42,93,227,250,67,
+203,168,60,50,22,190,32,233,172,31,20,218,73,40,64,92,5,153,130,234,103,166,227,
+144,148,13,177,180,132,94,180,5,106,44,188,199,15,241,49,20,156,18,227,227,19,
+51,20,27,73,37,116,29,248,30,96,93,15,100,70,34,241,245,162,170,148,132,108,
+153,167,121,67,139,207,220,219,48,156,57,175,97,40,21,235,141,236,161,17,120,
+101,115,120,109,83,139,28,23,45,160,96,236,183,241,49,24,140,132,54,34,18,66,
+124,250,24,2,121,8,245,49,90,207,68,31,101,218,90,198,116,154,82,185,28,44,88,
+127,54,174,23,244,254,194,204,209,50,45,106,90,96,221,31,76,247,90,254,214,181,
+27,71,217,20,75,91,161,23,95,187,252,30,224,114,2,51,2,162,170,255,109,56,97,
+141,40,235,165,108,62,147,50,54,185,102,25,22,59,224,166,202,57,45,166,214,142,
+175,83,138,167,10,168,178,41,150,146,208,139,159,67,199,216,175,243,119,64,68,
+136,33,35,160,7,50,90,123,180,82,181,202,39,141,245,76,54,87,74,84,110,203,72,
+61,76,75,230,242,127,192,76,131,109,117,251,184,123,82,241,84,54,203,18,18,186,
+13,2,250,27,252,0,75,196,144,136,8,72,121,136,75,184,25,2,49,67,181,65,55,66,
+199,178,165,67,35,148,157,99,71,203,140,124,12,132,60,34,32,34,38,5,92,24,227,
+20,67,196,41,125,22,13,6,84,20,69,233,142,214,18,186,13,54,232,191,225,30,46,
+149,90,70,158,240,152,144,135,18,139,7,215,91,182,163,127,29,58,101,183,230,140,
+223,149,251,84,148,49,45,117,102,27,4,244,11,252,16,15,67,44,21,203,221,20,19,
+35,210,153,2,23,154,25,168,40,202,186,233,220,215,53,214,253,115,75,77,182,214,
+237,119,22,143,120,200,99,78,121,196,136,17,25,25,67,153,8,205,73,232,8,24,178,
+179,125,20,29,178,41,27,244,134,53,182,124,85,148,253,162,149,206,156,111,131,
+142,31,218,186,204,209,186,173,237,50,76,141,253,121,70,12,137,170,210,18,174,
+46,186,27,37,31,224,129,140,147,142,214,218,23,122,195,158,80,126,22,184,99,
+223,159,217,126,141,75,222,73,37,40,207,112,69,62,97,185,110,114,251,53,46,121,
+211,103,184,198,37,111,188,239,228,241,227,111,113,23,220,222,229,179,135,79,
+236,13,218,126,74,247,189,28,115,180,245,223,139,242,36,209,66,66,155,9,232,98,
+97,156,220,90,110,107,43,160,47,130,140,78,241,201,41,112,65,92,95,106,246,192,
+207,240,93,145,211,101,13,236,230,93,21,71,213,210,45,78,102,182,189,197,75,220,
+152,216,243,88,150,110,212,108,127,139,151,102,206,240,22,47,77,236,11,128,253,
+27,46,121,227,235,126,143,187,13,62,9,236,130,208,214,241,12,71,192,71,188,211,
+226,152,163,150,251,43,74,23,116,102,168,149,238,120,189,51,55,187,181,110,175,
+210,201,63,219,29,44,56,165,96,72,14,82,175,60,32,192,231,139,252,115,94,164,
+148,83,67,182,124,94,226,185,247,224,56,246,142,189,106,9,120,139,194,43,188,
+194,43,229,178,240,10,15,142,40,170,253,156,160,29,81,120,47,121,80,200,81,47,
+121,112,236,141,247,118,91,199,251,22,222,235,92,230,211,220,177,227,235,126,
+170,171,95,219,90,113,159,105,25,174,120,199,222,177,247,43,173,142,105,187,191,
+162,116,65,99,43,244,108,235,108,90,114,102,109,203,69,91,167,151,206,191,131,
+23,200,201,197,226,244,241,9,72,248,127,220,154,218,203,21,27,89,61,43,212,221,
+209,47,242,141,198,34,144,1,39,246,153,21,175,91,199,43,222,103,236,139,252,42,
+239,86,107,146,53,92,101,57,238,216,91,124,15,184,97,221,235,77,174,120,110,173,
+99,252,231,227,13,251,46,240,58,111,240,1,240,122,101,85,127,104,79,228,147,
+189,204,155,220,156,234,180,152,228,134,45,207,231,206,244,60,175,120,0,39,246,
+14,31,0,207,243,225,212,125,157,240,1,240,99,28,45,60,163,162,172,78,67,9,61,
+207,189,45,188,179,156,248,250,173,237,164,212,216,235,184,242,186,174,152,46,
+124,171,118,191,144,152,68,70,75,175,158,164,253,251,252,126,99,119,56,0,110,
+112,196,235,188,197,149,85,47,60,195,207,122,215,109,59,39,117,83,110,252,251,
+210,5,81,190,190,204,149,137,181,84,93,24,240,46,39,140,157,243,143,248,142,172,
+255,151,149,251,125,2,114,124,29,39,213,249,222,149,229,87,128,59,85,175,169,91,
+231,26,244,29,251,149,170,171,227,109,190,106,95,84,17,85,214,68,35,99,173,203,
+94,208,217,165,177,139,95,46,213,93,203,216,171,18,113,207,41,248,83,254,100,
+174,247,177,228,83,252,136,76,128,27,78,116,13,52,255,183,232,243,157,239,220,
+255,130,200,214,37,239,37,239,82,231,143,108,157,235,222,254,115,116,207,145,
+119,12,28,87,221,14,46,152,115,52,213,165,225,56,246,92,239,241,251,20,222,109,
+222,225,101,11,112,98,223,225,215,248,27,10,239,61,110,114,214,223,244,194,59,
+170,206,52,110,35,207,113,149,247,24,95,45,163,20,208,111,86,107,255,73,213,9,
+162,40,93,179,67,153,63,1,166,178,92,46,134,179,45,187,155,92,227,23,22,30,251,
+134,125,119,194,169,221,4,206,246,223,54,190,227,1,60,231,97,93,151,203,13,142,
+184,229,1,92,241,222,183,109,107,220,159,88,248,79,226,168,31,121,101,247,193,9,
+119,185,204,31,243,71,214,199,117,122,188,223,185,95,160,40,142,6,18,186,94,27,
+20,206,119,55,141,189,10,64,193,139,132,24,254,244,130,190,172,179,239,243,26,
+47,121,71,246,249,5,91,223,229,132,99,54,203,38,162,241,238,55,120,131,27,22,
+78,192,174,242,103,226,200,59,90,226,168,113,79,103,41,147,31,0,119,27,228,44,
+40,202,234,156,43,161,235,20,80,199,100,47,232,34,39,222,217,160,62,33,134,136,
+47,208,39,225,183,106,239,230,190,212,10,93,182,31,180,222,114,107,42,70,231,
+11,200,117,62,226,67,235,28,253,59,92,230,71,26,222,215,9,151,25,217,112,166,
+143,249,172,207,177,153,154,174,71,156,112,153,79,241,17,119,57,226,249,37,206,
+48,254,62,224,196,94,163,77,39,200,51,192,29,91,138,232,29,89,251,99,192,171,
+124,77,251,63,149,13,176,82,213,250,110,30,209,177,104,45,62,91,121,155,134,136,
+62,9,134,144,95,231,41,6,60,53,227,60,119,91,161,169,217,231,187,99,239,0,183,
+201,44,19,137,221,46,53,254,163,234,167,227,22,207,241,50,55,236,37,222,228,132,
+223,20,209,41,83,235,221,222,227,212,122,247,254,67,222,5,94,110,88,184,184,188,
+115,55,6,108,221,34,122,236,157,216,79,241,95,249,2,119,39,254,128,184,207,115,
+167,250,22,220,240,129,143,112,34,9,183,129,143,184,99,175,120,55,185,197,175,
+74,180,253,67,94,229,117,9,18,205,31,239,206,252,154,189,34,223,135,59,254,170,
+253,10,87,236,139,192,155,156,0,119,248,180,61,226,109,94,231,111,236,203,184,
+179,190,91,69,239,21,165,107,206,169,90,191,232,17,108,58,206,232,60,27,244,124,
+249,44,109,80,23,107,143,8,73,233,211,231,128,167,56,36,225,144,167,57,32,226,
+167,100,255,83,151,242,180,244,3,211,108,236,207,13,123,50,177,71,57,86,105,250,
+184,121,123,214,109,123,195,30,243,63,128,235,60,199,87,189,249,51,148,185,162,
+147,199,95,231,23,166,68,96,250,250,103,125,146,245,219,161,198,30,113,236,45,
+254,70,202,79,84,174,123,139,76,134,13,124,150,55,189,15,237,171,213,64,129,203,
+60,207,191,231,146,87,127,60,220,177,55,37,122,127,157,119,170,227,255,29,127,
+34,235,158,227,22,112,196,177,247,77,123,34,107,235,190,61,69,233,142,51,37,
+116,27,138,138,140,5,20,14,8,73,73,232,115,72,159,67,14,24,240,73,14,72,73,72,
+136,137,56,232,64,66,155,124,230,105,193,40,109,200,0,120,105,202,10,117,147,2,
+151,86,116,185,237,67,123,7,184,50,225,178,186,51,148,123,143,173,208,64,142,
+190,50,227,222,110,187,132,78,126,158,64,62,107,249,45,93,163,224,207,201,8,184,
+36,253,152,255,221,254,95,82,224,71,120,158,208,91,116,188,251,230,110,203,57,
+110,51,30,248,250,191,236,7,100,60,71,206,109,224,211,60,231,149,223,63,83,71,
+43,74,247,236,140,132,246,48,244,129,30,7,28,114,192,1,3,158,226,128,67,6,196,
+68,12,72,112,179,231,108,162,100,239,13,123,194,17,77,250,62,215,113,109,55,
+192,243,252,223,205,102,68,180,78,66,21,101,95,56,67,66,183,71,64,13,62,49,208,
+39,229,128,62,125,158,98,192,39,56,100,64,143,67,34,113,242,13,209,134,106,158,
+79,151,25,217,244,183,66,195,107,239,242,40,121,69,217,13,22,74,232,118,9,104,
+72,66,72,143,152,62,135,98,133,30,210,231,41,82,250,132,196,244,36,144,164,211,
+70,76,178,91,34,186,91,119,171,40,176,19,211,173,187,185,32,67,124,124,34,82,
+122,164,68,244,232,209,39,38,36,36,156,168,87,175,40,138,178,57,22,72,232,54,
+217,160,206,73,7,159,148,30,61,18,82,6,164,244,100,75,44,179,201,171,13,58,79,
+243,34,46,138,162,44,67,109,94,232,54,9,168,95,165,50,37,68,164,244,73,73,72,73,
+137,73,165,244,114,68,164,2,170,40,202,5,176,197,142,124,128,171,204,4,16,17,
+136,128,198,244,233,49,32,33,38,17,59,52,106,57,178,90,81,20,165,27,106,36,116,
+91,108,80,64,6,116,134,18,48,234,17,139,245,217,35,33,198,39,38,192,80,16,225,
+123,106,131,214,161,174,188,162,172,147,57,71,254,226,31,182,121,39,62,18,231,
+221,37,53,165,12,8,136,170,249,147,118,170,220,148,82,195,124,73,110,208,200,
+188,178,27,108,157,35,111,100,76,137,145,105,228,32,34,150,72,124,76,95,210,155,
+18,18,66,66,18,157,232,248,92,182,223,14,173,19,75,21,80,101,55,152,49,224,54,
+83,221,103,49,198,194,213,169,162,34,174,191,179,79,143,190,56,242,135,36,244,
+240,9,137,112,179,197,171,11,175,40,202,197,176,69,62,176,147,207,114,246,205,
+68,122,65,35,82,6,68,85,12,222,57,241,174,236,157,1,21,80,69,81,46,144,25,71,
+190,240,46,202,229,51,22,174,19,16,96,68,64,145,84,166,68,210,232,19,122,12,100,
+77,25,137,15,128,124,139,93,212,237,96,247,92,121,117,227,149,93,97,65,94,232,
+230,26,113,249,96,95,7,12,69,85,88,25,250,244,100,60,82,34,17,248,129,84,100,
+114,78,188,161,216,80,81,17,69,81,148,122,102,36,116,108,209,109,210,102,121,
+161,90,42,11,138,68,34,149,61,14,233,209,35,37,230,144,30,241,132,196,162,2,218,
+152,237,156,71,73,81,118,159,57,43,116,196,144,140,33,15,121,192,35,238,115,143,
+123,220,231,7,60,224,30,143,121,200,41,57,15,112,35,215,71,157,222,138,75,81,
+114,17,246,68,226,240,135,82,220,46,225,144,1,73,85,25,52,145,27,207,173,138,
+104,115,46,62,227,119,49,147,34,255,209,42,39,82,148,141,50,39,161,25,5,25,35,
+114,192,146,201,191,188,218,238,147,139,204,13,137,59,189,21,119,214,16,72,9,
+100,244,123,79,6,116,246,24,72,58,147,155,39,94,35,241,109,217,212,68,32,93,240,
+247,118,224,30,21,197,113,70,68,190,144,97,147,134,113,212,201,199,226,38,175,
+29,85,146,55,34,236,192,30,13,241,201,113,67,57,125,98,18,82,122,28,144,86,3,
+58,93,93,122,31,40,42,107,85,81,20,229,34,89,40,161,254,68,176,222,72,197,36,
+128,88,10,203,21,24,70,248,228,248,68,248,83,146,54,60,231,162,254,196,107,121,
+5,67,14,248,18,44,74,9,197,2,237,209,99,192,33,33,125,41,173,172,149,65,21,69,
+217,22,230,36,116,186,238,102,41,158,1,17,112,74,64,38,214,34,228,68,34,161,144,
+84,107,145,119,110,143,122,124,145,203,201,238,1,48,120,82,251,51,20,155,179,
+116,225,7,132,82,149,201,57,241,202,50,108,187,43,95,246,134,110,235,253,41,74,
+29,243,99,228,39,126,6,82,226,163,71,142,207,67,124,70,140,72,197,193,47,240,0,
+139,161,0,60,44,30,179,97,223,250,167,193,163,192,147,215,241,62,1,33,30,1,161,
+20,183,115,233,244,125,73,169,119,181,233,93,245,166,85,230,137,87,20,69,233,
+142,96,209,202,83,66,18,134,68,164,98,123,26,70,100,228,216,202,82,205,23,158,
+214,89,153,205,40,45,80,183,127,76,64,136,79,76,143,148,148,132,80,102,71,10,9,
+100,60,146,10,232,114,108,187,29,170,40,187,71,141,21,90,136,37,26,49,34,6,44,
+15,57,224,17,17,25,5,57,197,194,73,54,138,169,243,176,112,63,51,243,206,77,237,
+97,240,49,120,50,153,71,42,113,249,84,170,53,197,50,110,73,195,72,79,46,133,
+103,236,168,243,209,102,250,231,86,89,39,53,18,234,4,46,36,151,0,18,50,216,18,
+30,49,206,5,45,38,182,205,51,219,163,58,191,189,238,184,144,64,92,249,148,128,
+68,58,18,102,5,84,31,137,93,101,44,142,139,254,12,63,146,245,221,205,132,101,
+192,102,117,107,199,89,38,218,158,148,21,152,145,80,223,115,205,60,98,136,47,
+161,27,95,146,150,10,18,114,70,132,116,157,84,15,200,244,114,22,143,84,250,68,
+35,66,124,18,98,144,59,81,11,116,85,54,237,202,111,223,152,168,7,148,126,79,
+233,251,184,22,175,66,170,44,199,220,36,200,185,117,25,161,25,25,167,228,140,
+200,25,49,36,199,146,81,96,40,40,200,240,65,194,73,11,79,61,245,206,214,108,47,
+215,249,226,246,187,241,73,190,100,1,248,248,132,50,220,51,34,19,1,213,166,190,
+42,155,171,128,112,209,165,19,235,239,8,238,139,124,58,9,45,180,101,41,43,48,
+231,200,251,94,110,13,134,0,8,68,70,253,202,242,44,128,172,54,6,213,102,246,162,
+160,230,232,160,114,172,74,241,68,236,207,162,18,80,109,228,187,195,246,201,231,
+152,251,32,117,22,92,171,203,112,14,191,182,48,165,61,222,124,175,147,115,108,
+50,10,10,73,146,63,5,114,113,222,103,51,58,187,194,197,227,67,177,69,93,3,87,
+249,92,7,235,207,190,220,94,249,52,22,222,199,245,236,231,82,210,6,34,74,163,65,
+219,153,210,22,175,174,227,222,57,243,133,116,250,59,25,237,190,172,200,44,113,
+21,100,10,170,156,128,12,212,205,234,156,245,138,232,246,10,104,121,119,127,41,
+1,210,8,131,15,196,68,32,1,75,109,103,74,59,188,69,177,79,103,139,186,113,242,
+101,148,52,155,8,232,20,181,174,123,243,34,248,102,102,24,104,128,97,40,21,235,
+141,236,161,118,193,122,88,167,132,110,191,128,190,135,11,145,142,123,220,7,32,
+197,190,181,124,162,210,22,239,172,244,145,50,9,101,44,163,142,114,57,152,122,
+215,60,21,197,200,222,211,130,235,186,248,221,107,41,158,90,204,110,61,172,75,
+232,182,91,64,193,216,111,227,99,36,65,46,196,200,224,13,159,62,134,64,255,104,
+43,173,105,100,54,150,59,77,138,92,185,166,168,172,198,230,24,17,91,51,147,140,
+63,62,79,41,158,218,152,215,199,122,82,155,182,89,64,1,238,1,46,3,185,39,179,
+112,57,74,159,170,125,107,86,246,155,51,37,180,20,176,220,150,145,122,152,78,
+148,95,182,193,153,153,159,243,87,85,241,220,61,182,125,232,168,177,95,231,239,
+240,37,140,148,17,208,147,45,62,167,29,87,191,85,246,133,70,86,168,138,218,147,
+198,58,38,2,217,126,1,253,13,126,0,226,190,187,210,222,35,30,99,8,24,2,49,67,
+181,65,149,214,108,209,36,200,202,166,233,82,244,182,95,64,111,242,49,78,64,35,
+50,169,122,235,1,9,25,134,136,83,250,44,26,122,172,40,139,80,9,85,246,132,7,
+128,71,136,79,68,76,66,40,149,112,135,146,222,132,204,9,171,40,109,208,22,179,
+167,116,59,90,126,251,109,208,47,240,67,60,12,49,62,110,186,154,83,2,78,73,113,
+61,242,163,198,197,25,21,101,18,149,208,189,165,187,254,208,118,2,122,94,226,
+83,121,87,238,254,220,158,171,37,75,25,251,89,30,129,76,79,19,0,94,21,72,130,2,
+139,27,29,55,212,66,54,74,107,84,66,149,173,164,91,171,246,129,136,227,35,34,32,
+36,156,72,206,51,85,65,156,132,64,251,66,149,150,168,132,238,57,103,91,144,77,
+236,203,238,109,208,210,242,44,247,91,213,6,253,167,192,80,114,144,157,29,58,34,
+146,9,21,67,34,124,66,76,149,232,164,40,109,208,22,179,199,52,233,15,61,111,48,
+232,50,2,58,118,213,231,175,52,255,110,82,64,199,107,155,94,213,216,23,164,182,
+67,204,144,62,62,144,19,18,19,226,145,18,3,1,126,53,185,182,218,160,74,59,180,
+197,40,13,48,214,216,238,122,78,231,151,22,237,177,120,125,187,187,113,149,197,
+220,88,164,128,30,49,17,17,49,33,150,88,138,141,232,195,160,44,131,90,161,74,99,
+230,173,199,246,54,232,226,0,81,125,248,104,209,82,211,43,94,199,9,168,171,198,
+228,19,16,17,224,19,19,145,210,227,80,230,234,10,137,164,66,152,14,33,81,218,
+160,18,186,215,148,174,124,187,163,74,49,91,190,23,180,174,119,243,44,217,44,
+239,176,157,35,111,236,85,198,201,242,67,250,196,4,36,68,50,181,118,56,49,35,
+151,90,160,202,114,168,132,42,75,177,125,179,34,157,133,75,103,74,129,148,136,
+148,152,132,30,3,6,82,169,41,38,81,27,84,89,10,149,208,61,103,217,236,208,194,
+219,180,13,218,54,38,239,108,80,64,202,138,132,4,196,196,244,56,32,37,38,37,33,
+32,196,39,212,124,80,101,105,84,66,247,158,38,105,238,243,71,108,78,64,39,239,
+178,185,152,58,1,13,48,34,160,9,17,1,9,169,76,176,157,146,18,17,73,213,80,64,
+109,80,101,41,84,66,149,22,180,183,4,151,57,106,241,153,218,157,205,9,104,136,
+139,197,7,18,64,74,233,211,163,79,66,79,2,73,137,62,6,202,210,104,219,81,26,48,
+111,53,54,179,4,221,177,171,219,160,139,238,99,241,149,157,19,95,224,75,125,250,
+152,148,148,158,4,146,82,82,137,194,199,4,160,83,28,42,75,163,18,170,156,73,157,
+104,53,117,226,203,189,38,247,174,59,114,214,93,111,114,204,89,76,59,241,145,72,
+101,68,143,148,136,132,148,3,98,82,34,66,220,35,160,2,170,44,139,230,114,40,103,
+176,221,245,151,206,189,123,66,128,57,39,126,64,32,229,238,98,117,226,149,21,
+209,246,163,180,100,251,11,219,141,109,80,231,196,39,244,137,39,156,248,30,33,
+177,204,226,9,5,145,90,160,202,210,168,132,42,173,216,37,1,45,157,120,151,11,
+218,23,39,126,64,72,74,34,51,121,162,19,31,43,43,161,18,170,180,96,55,4,212,225,
+156,248,72,134,114,246,137,171,72,124,76,130,175,78,188,210,9,218,134,148,39,
+142,128,16,196,137,15,69,58,123,244,170,72,124,92,165,211,23,106,131,42,43,162,
+18,170,52,102,55,108,80,55,80,51,36,34,36,165,47,110,124,68,76,202,64,106,52,
+149,233,244,42,160,202,170,168,132,42,13,217,29,1,245,9,73,128,136,132,136,136,
+30,125,250,28,50,144,209,241,147,145,248,220,170,136,42,171,160,73,77,202,19,
+132,139,176,35,118,104,89,208,174,39,253,159,9,201,132,19,159,97,240,61,21,80,
+101,53,84,66,149,70,108,123,101,166,113,32,41,148,72,124,74,92,245,127,186,84,
+166,88,44,84,215,232,181,180,136,210,5,234,200,43,13,88,109,246,162,77,220,221,
+108,42,83,74,34,197,68,14,72,56,228,80,156,248,68,35,241,74,167,168,21,170,60,
+33,140,139,138,64,84,141,71,26,144,210,39,33,34,38,22,11,85,157,120,165,59,244,
+207,177,178,211,56,11,52,128,202,73,143,232,19,18,115,40,125,160,110,96,103,15,
+35,245,154,0,29,143,164,116,134,74,168,178,179,140,229,179,12,32,185,92,208,
+128,148,1,145,212,102,74,37,50,159,136,140,22,218,11,170,116,136,74,168,210,128,
+17,97,135,181,63,87,167,12,110,93,199,224,102,71,242,129,4,8,73,233,145,208,
+147,84,166,30,3,122,164,132,36,178,175,54,121,165,75,180,61,41,173,216,158,200,
+252,11,213,82,136,155,161,51,33,151,48,210,97,149,202,52,144,16,82,68,12,58,75,
+167,210,57,42,161,74,35,30,145,49,228,148,17,15,184,199,15,185,199,61,238,243,
+49,247,121,192,35,30,243,136,17,67,92,86,230,104,201,107,188,13,192,139,45,142,
+112,3,57,93,130,82,8,164,36,244,73,101,150,206,1,135,12,170,233,61,32,34,194,
+168,124,42,157,162,18,170,52,160,168,150,114,10,10,10,70,100,140,200,39,246,9,
+229,231,144,120,165,107,181,61,186,148,207,62,134,148,136,67,18,62,65,204,129,
+204,143,212,211,241,72,202,26,81,9,85,90,144,147,147,49,36,7,60,192,199,69,194,
+3,82,114,124,168,68,53,100,68,184,148,61,218,38,216,19,202,53,83,130,42,141,
+201,57,240,174,188,242,128,132,80,114,69,11,233,7,85,1,85,186,68,37,84,105,76,
+129,19,205,136,71,0,248,248,132,100,140,136,9,24,18,96,201,241,241,241,201,241,
+137,100,254,246,146,97,163,171,244,1,166,236,91,228,106,227,87,135,193,144,227,
+19,16,226,73,238,103,42,5,237,14,25,136,152,70,12,100,111,21,80,165,123,84,66,
+149,22,248,60,166,204,192,12,137,24,145,0,48,98,68,8,20,19,210,231,98,228,254,
+196,154,68,4,48,63,243,26,253,133,215,206,171,215,241,21,12,30,33,254,196,236,
+72,238,223,33,145,212,101,26,247,130,170,128,42,221,163,18,170,52,166,28,91,
+158,17,17,208,159,232,33,77,129,17,217,204,254,5,224,97,241,152,13,227,159,165,
+100,135,178,135,157,217,203,163,192,147,87,119,134,128,140,128,16,35,18,26,146,
+18,49,144,76,208,129,148,20,113,189,160,153,102,131,42,107,65,37,84,105,128,
+169,228,50,2,60,2,18,50,2,34,32,166,71,70,78,142,153,178,66,235,112,118,228,217,
+60,213,232,142,124,185,43,103,93,198,4,50,79,103,25,141,79,197,2,141,197,78,
+214,241,72,202,122,80,9,85,26,226,250,18,115,124,98,44,22,72,185,199,136,83,114,
+114,10,38,227,246,211,20,83,103,89,188,159,227,147,11,182,155,153,119,174,168,
+157,155,100,46,32,32,36,172,98,240,110,210,57,191,18,80,45,5,161,172,11,149,80,
+165,17,70,254,251,184,180,35,139,199,41,135,146,220,84,230,130,22,213,190,245,
+20,115,231,156,231,105,138,106,75,49,181,87,81,115,132,155,9,62,4,25,196,233,
+147,98,170,56,124,105,129,106,47,168,178,46,84,66,149,70,24,10,177,67,139,74,40,
+3,98,30,99,200,200,25,145,144,47,157,84,63,201,97,139,125,19,12,133,212,104,
+74,241,136,49,50,229,71,40,35,145,116,138,99,101,189,168,132,42,13,240,189,220,
+6,100,24,2,50,41,90,108,72,41,56,165,96,36,214,225,136,28,127,65,0,105,204,
+180,158,205,239,247,180,236,97,39,246,183,19,71,151,203,254,196,248,120,67,12,
+24,66,124,18,144,146,118,104,26,147,178,118,84,66,149,22,4,100,64,204,41,125,
+114,70,228,85,223,102,134,43,243,49,221,160,178,246,151,224,96,225,181,235,40,
+93,251,132,92,18,152,98,32,169,108,102,69,89,47,218,202,148,70,248,149,49,88,
+138,214,41,62,57,17,211,121,158,211,17,249,101,134,122,246,91,236,235,51,30,33,
+85,94,173,20,114,205,3,85,54,129,74,168,210,10,103,117,150,110,178,179,50,79,
+59,189,66,27,9,133,113,169,145,64,186,23,84,62,149,77,162,18,170,52,198,247,
+114,107,68,68,51,34,220,242,144,88,228,107,8,146,196,62,61,148,179,93,35,139,
+207,56,194,204,157,185,236,15,117,41,255,110,31,69,217,28,94,177,250,57,148,61,
+35,183,80,246,115,22,140,173,209,130,136,130,76,70,13,141,91,86,211,54,230,122,
+65,239,47,200,29,53,114,174,105,121,45,38,182,187,45,190,167,181,152,148,205,
+161,18,170,180,38,159,9,163,79,202,88,81,189,22,173,237,65,215,151,185,168,91,
+192,84,201,84,179,169,250,37,42,158,202,230,81,9,85,150,36,183,78,180,186,59,
+163,171,56,186,92,110,169,74,167,114,49,168,132,42,91,195,54,205,206,164,40,205,
+208,190,119,69,81,148,165,81,43,84,81,20,101,105,212,10,85,20,69,89,26,149,80,
+101,101,158,181,198,150,175,138,178,95,168,132,42,43,115,119,226,117,18,179,180,
+168,190,102,141,252,107,126,140,219,255,53,149,113,101,163,168,132,42,43,115,
+121,226,181,27,126,106,137,179,117,121,125,69,105,138,74,168,178,54,10,111,217,
+4,165,47,121,127,70,225,253,122,171,99,110,243,43,23,253,129,149,61,68,37,84,
+89,137,111,216,103,237,93,160,124,253,186,45,215,26,251,172,125,214,158,86,142,
+245,203,246,89,107,236,95,219,103,229,103,185,254,47,236,203,178,247,43,246,89,
+251,59,178,62,246,224,222,212,149,220,62,185,45,207,244,121,217,243,53,57,227,
+47,242,206,204,125,61,107,141,253,57,251,13,117,237,149,53,162,101,70,148,149,
+248,235,169,158,208,187,60,63,177,118,186,119,244,125,238,2,63,45,239,126,186,
+26,166,249,51,242,243,46,119,129,43,11,175,52,62,163,59,211,119,201,173,239,
+125,195,222,146,237,223,2,202,226,204,223,176,95,150,181,223,225,59,96,191,164,
+233,250,202,154,80,43,84,89,137,175,122,175,2,175,82,120,112,153,71,252,150,231,
+214,22,94,225,221,196,89,147,142,219,242,243,187,20,222,239,2,206,162,124,205,
+194,117,238,82,120,255,153,203,184,233,148,235,41,188,203,184,129,156,183,121,4,
+220,197,247,224,203,192,31,80,94,205,213,184,255,61,251,101,224,102,181,246,203,
+168,37,170,172,11,149,80,101,69,198,6,222,221,9,193,156,39,244,46,3,133,247,227,
+30,252,146,7,240,24,184,197,101,222,230,31,121,240,37,239,231,206,185,210,221,
+234,76,177,231,194,71,175,89,248,3,190,40,178,93,6,148,190,14,192,219,24,251,
+172,125,27,128,239,95,244,151,164,60,177,168,132,42,43,97,236,45,224,117,25,223,
+238,44,203,69,220,157,121,215,247,220,207,178,68,200,215,188,194,251,218,25,34,
+60,27,115,191,111,1,17,80,128,23,231,174,118,87,174,217,197,180,120,138,82,135,
+74,168,178,18,151,167,94,127,180,193,190,243,239,254,79,37,187,175,217,191,104,
+236,114,223,229,192,251,73,224,247,170,35,222,158,216,122,149,194,27,255,251,77,
+237,11,85,214,132,142,145,87,86,98,100,99,46,243,54,7,192,136,130,208,3,248,134,
+253,107,224,109,238,242,42,30,240,57,62,227,125,67,122,40,63,7,252,33,183,128,
+223,229,151,188,103,237,93,46,115,157,16,248,62,127,196,103,121,211,171,63,222,
+85,114,186,204,139,124,95,2,74,199,28,121,198,194,85,254,177,236,13,151,249,
+183,20,252,50,112,153,43,244,128,239,243,62,63,202,183,85,68,149,181,160,18,170,
+172,136,177,80,120,207,218,187,19,101,234,92,138,211,152,87,249,154,87,174,187,
+137,229,117,0,46,243,103,252,21,255,122,194,193,191,204,239,240,25,175,254,120,
+248,47,246,139,83,107,47,243,30,127,197,151,171,227,47,139,136,254,25,255,129,
+255,54,213,109,240,207,248,99,149,80,101,45,104,82,147,178,50,243,227,130,254,
+21,87,36,182,238,230,125,255,156,172,235,201,178,219,242,19,4,124,198,187,109,
+127,143,239,2,240,247,41,147,143,234,142,135,207,123,255,208,126,139,71,192,231,
+248,67,224,39,129,127,224,189,103,127,151,255,141,229,11,88,254,128,128,31,199,
+240,53,239,212,190,70,36,199,127,158,207,168,128,42,107,66,173,80,101,69,156,21,
+234,94,47,250,94,20,101,211,168,132,42,138,162,44,141,58,242,202,214,160,19,127,
+40,187,135,38,53,41,138,162,44,141,74,168,162,40,202,210,168,132,42,138,162,44,
+141,74,168,162,40,202,210,168,132,42,138,162,44,141,38,53,41,23,78,253,12,73,26,
+153,87,118,1,181,66,149,11,167,78,44,85,64,149,221,64,37,84,81,20,101,105,84,66,
+21,69,81,150,70,37,84,217,2,102,221,118,117,227,149,93,65,37,84,81,20,101,105,
+84,66,21,69,81,150,70,37,84,217,10,38,93,247,143,46,250,102,20,165,49,154,23,
+170,108,9,227,236,80,237,9,85,118,7,181,66,21,69,81,150,70,37,84,81,20,101,105,
+84,66,149,45,161,116,223,213,141,87,118,9,149,80,69,81,148,165,81,9,85,20,69,
+89,26,141,200,43,91,67,110,67,70,29,159,211,215,110,129,39,152,220,174,126,142,
+89,218,182,24,149,80,101,67,140,155,123,193,162,86,103,170,61,186,193,96,200,
+106,175,226,174,164,2,187,205,52,107,49,221,42,88,251,22,163,18,170,172,13,179,
+6,27,97,53,30,48,217,119,101,170,101,149,210,237,96,23,91,140,74,168,178,22,
+140,221,182,216,186,123,60,255,150,136,66,30,4,35,214,133,81,9,221,2,118,181,
+197,168,132,42,107,96,251,30,135,242,174,224,111,41,112,150,69,132,123,28,140,
+186,245,23,206,238,182,152,224,162,111,82,121,210,216,206,135,161,228,125,126,8,
+64,40,239,3,121,32,244,65,184,56,118,187,197,104,203,81,58,100,187,31,6,112,
+125,91,16,50,36,34,199,167,192,16,97,40,48,228,86,237,208,77,179,251,45,70,37,
+84,217,43,238,1,62,33,1,35,66,34,220,195,1,134,64,69,84,169,225,188,22,163,18,
+170,116,198,246,91,20,223,230,30,6,67,72,72,64,143,17,9,206,69,211,152,192,69,
+240,36,180,24,149,80,165,35,140,221,238,135,193,216,111,114,15,8,240,72,241,73,
+177,164,228,60,198,89,20,25,16,169,29,186,65,158,140,22,163,18,170,116,194,246,
+63,14,191,205,125,124,32,193,96,241,200,201,201,201,232,147,115,10,26,82,218,
+48,79,74,139,209,86,163,236,9,31,227,225,19,240,136,136,83,98,192,199,39,96,36,
+63,221,56,23,181,65,149,146,102,45,70,37,84,233,128,237,183,40,110,242,49,16,
+98,136,72,200,176,64,202,41,33,5,57,144,73,174,95,110,85,70,55,193,147,211,98,
+84,66,149,149,217,254,199,225,151,121,64,0,24,66,10,160,32,32,226,17,80,144,17,
+147,75,112,160,64,75,151,109,130,39,169,197,168,132,42,123,192,67,60,12,1,190,
+188,55,12,9,25,49,16,139,194,61,36,58,70,73,41,105,222,98,84,66,149,21,89,213,
+162,88,119,98,139,177,159,229,33,16,145,225,46,19,48,34,7,32,167,172,107,161,
+214,231,230,216,126,27,180,77,139,209,150,163,172,196,246,11,232,207,51,226,1,
+48,100,8,242,32,248,213,118,31,31,151,231,55,30,249,220,142,27,214,88,99,47,
+166,198,144,145,107,159,216,186,45,103,31,123,98,141,53,246,134,173,95,95,183,
+165,171,123,222,118,1,109,215,98,212,10,85,46,152,245,63,80,143,49,82,202,121,
+172,10,62,17,33,209,148,179,182,124,122,253,81,163,189,62,180,183,185,198,165,
+153,207,123,199,190,207,209,146,223,129,187,238,201,82,199,62,195,81,237,145,
+207,112,180,244,57,183,93,30,155,210,166,197,168,132,42,43,48,251,200,44,178,
+124,202,189,102,231,138,31,191,119,214,104,249,190,238,65,156,222,230,222,21,
+222,217,75,198,190,200,41,229,8,103,240,196,130,136,170,71,33,192,200,240,61,
+103,131,46,215,19,122,220,232,168,219,220,224,45,94,154,89,123,139,147,134,18,
+188,232,186,39,53,223,250,249,82,118,197,59,174,61,242,138,119,188,224,156,77,
+24,255,14,22,109,159,223,86,247,187,31,175,155,109,59,147,199,143,127,207,227,
+223,251,228,81,139,219,219,162,111,171,125,139,81,9,85,150,166,169,128,46,218,
+58,219,212,23,31,63,187,101,242,209,153,21,213,73,33,125,129,156,105,39,172,28,
+170,23,18,146,16,145,16,78,212,224,233,134,59,246,132,15,128,31,227,18,239,206,
+200,107,182,228,57,219,92,253,150,44,141,175,252,134,125,23,120,157,55,248,0,
+120,125,198,18,46,93,246,155,92,233,200,134,92,36,164,139,4,116,246,55,60,187,
+174,174,101,204,254,249,157,61,170,190,189,157,119,223,237,91,140,74,168,210,49,
+147,86,68,185,52,191,237,236,35,167,153,182,46,141,45,60,39,148,211,15,106,237,
+58,198,221,253,33,125,98,34,210,137,255,225,84,41,221,110,184,99,191,194,221,
+137,247,199,83,91,215,255,192,189,95,57,225,227,43,191,203,9,240,17,239,0,240,
+17,223,153,58,162,220,255,101,174,116,122,39,103,249,20,179,140,127,247,99,153,
+157,182,63,39,127,255,243,30,199,236,153,102,207,90,183,174,118,43,109,91,140,
+74,168,178,36,117,54,232,100,163,159,109,170,133,55,14,113,140,157,174,197,71,
+214,157,119,254,113,172,123,60,203,179,94,5,17,141,22,52,118,96,23,9,195,45,238,
+242,77,62,239,193,137,253,45,185,190,179,243,62,2,94,231,91,22,224,216,43,173,
+197,239,85,219,159,231,149,14,172,192,35,239,8,56,177,55,38,214,29,123,216,19,
+224,125,62,237,189,103,175,241,178,125,115,226,74,151,185,203,123,11,45,208,213,
+3,101,99,255,96,145,19,63,253,189,78,175,155,221,99,186,237,156,181,110,81,
+123,91,220,246,174,202,177,46,161,222,199,213,104,74,136,73,233,147,16,145,138,
+176,38,34,157,90,236,78,89,146,182,2,58,107,139,174,38,160,117,142,226,244,186,
+241,227,176,89,78,236,9,199,18,30,58,242,222,148,79,61,14,206,148,146,126,60,97,
+45,142,183,191,178,214,123,251,142,7,240,156,135,29,59,170,223,195,88,248,46,
+63,190,246,48,208,249,2,58,223,255,89,223,58,206,91,87,174,47,105,39,160,6,31,
+3,34,156,9,61,122,164,4,132,68,196,196,68,114,214,76,150,52,169,73,217,0,165,
+188,173,158,0,85,247,115,209,186,224,194,155,247,177,87,90,224,133,87,120,199,
+192,177,44,195,145,231,150,142,198,219,47,32,154,237,186,28,250,23,252,61,117,
+205,178,237,205,133,138,0,34,124,124,162,202,238,236,113,72,159,20,31,67,76,143,
+128,8,157,248,67,89,154,118,54,104,147,53,179,203,227,53,139,151,234,246,43,223,
+59,139,162,224,69,98,34,66,250,12,56,164,199,1,159,96,192,33,159,160,71,159,
+132,30,1,129,139,181,118,38,96,119,170,8,251,135,246,246,146,9,75,39,150,165,83,
+157,218,112,196,243,188,202,167,120,207,46,114,228,219,200,80,189,211,239,126,
+227,139,2,73,147,203,117,54,232,244,246,197,235,234,44,215,179,236,214,122,27,
+180,192,39,150,160,81,143,152,30,125,122,98,143,134,132,248,244,136,200,38,254,
+60,171,132,42,173,105,47,160,211,161,133,179,5,116,222,73,175,75,86,26,239,83,
+23,137,191,74,105,81,196,146,205,151,18,18,146,146,50,32,229,128,152,72,122,
+187,92,98,74,87,2,122,141,235,220,226,146,189,4,192,155,156,112,205,78,198,191,
+155,61,112,119,236,13,46,243,47,108,120,230,93,125,104,111,151,251,131,133,103,
+184,226,185,60,83,184,67,153,152,116,141,75,222,29,251,17,112,98,175,1,183,129,
+143,184,99,47,225,142,126,197,251,208,222,226,43,252,154,253,137,206,34,242,142,
+73,81,91,44,160,139,250,43,103,247,172,255,227,90,47,160,139,183,159,37,160,
+211,45,38,34,36,165,79,68,76,202,1,129,172,3,166,254,228,170,132,42,107,102,156,
+241,183,202,177,211,226,90,70,223,39,133,115,188,14,74,39,222,53,120,95,226,170,
+61,82,82,66,18,2,98,177,42,202,176,64,87,165,150,47,121,191,98,63,197,171,242,
+238,250,84,2,209,51,28,113,105,238,136,231,107,206,114,11,120,249,220,107,221,
+230,198,196,254,112,196,49,46,207,212,225,182,190,197,75,220,226,29,224,6,111,
+145,113,3,120,135,255,200,141,234,232,175,122,183,236,93,190,200,103,121,179,
+139,175,128,230,150,235,217,153,192,245,219,207,107,79,203,182,183,233,22,19,72,
+139,137,233,211,163,79,64,50,211,98,74,116,18,100,165,37,219,62,2,165,180,40,32,
+172,156,248,62,125,14,121,138,62,7,28,242,52,9,135,248,12,136,170,33,122,203,11,
+232,13,123,50,39,0,39,54,32,35,224,202,220,88,164,102,60,107,225,127,158,123,
+228,135,246,14,153,60,208,25,211,86,104,0,178,237,10,151,60,183,14,174,81,240,
+231,100,4,92,226,18,119,200,228,24,103,175,126,154,231,38,108,185,163,134,3,6,
+166,191,251,250,65,17,77,34,241,237,175,213,213,200,182,250,22,211,227,19,124,
+146,84,90,76,200,211,226,196,7,80,245,131,130,90,161,74,75,118,69,64,221,8,146,
+210,137,143,72,233,147,146,144,114,64,72,132,63,145,30,189,186,253,121,195,78,
+143,80,90,173,23,243,13,123,151,183,27,236,119,201,123,169,102,237,21,239,202,
+153,235,62,93,45,141,143,158,188,223,113,106,126,123,214,43,160,117,227,208,86,
+103,81,139,113,62,75,217,98,82,66,124,201,6,157,20,80,149,80,165,21,187,33,160,
+14,151,4,93,58,241,46,151,47,101,64,34,78,188,235,13,133,46,156,248,19,102,83,
+232,87,225,93,110,242,179,23,246,61,191,191,228,248,248,122,186,22,208,110,229,
+243,236,22,83,254,233,117,45,198,159,104,49,147,168,35,175,180,96,55,36,52,32,4,
+113,201,14,72,249,4,61,158,98,48,17,137,143,38,156,120,173,15,186,78,186,117,
+226,219,140,119,106,122,198,166,45,198,57,241,243,45,70,173,80,165,49,187,34,
+160,46,44,80,186,100,169,188,198,164,12,136,38,226,170,93,70,226,149,58,234,91,
+204,242,173,168,235,246,215,164,197,196,210,98,204,130,220,13,149,80,165,33,187,
+34,160,229,160,60,136,232,75,114,180,203,0,61,36,149,184,106,220,121,36,94,153,
+231,201,104,49,241,57,45,230,162,135,111,40,74,231,132,98,85,148,169,76,174,55,
+107,64,68,64,44,133,202,220,244,97,190,167,2,170,156,223,98,226,51,90,140,90,
+161,74,35,118,197,162,40,71,56,135,146,18,29,75,40,41,165,87,57,241,227,184,170,
+178,62,158,164,22,195,25,45,70,37,84,105,192,46,61,14,33,17,208,35,38,161,39,
+227,75,14,107,93,50,101,125,236,79,139,209,182,164,52,98,219,31,137,241,227,96,
+8,39,198,35,245,72,164,76,89,76,44,143,131,171,178,163,46,252,122,217,151,22,
+163,125,161,202,185,172,123,138,184,85,239,206,216,171,4,148,229,114,35,92,120,
+32,173,50,65,123,164,244,164,2,100,64,1,42,160,107,102,159,90,140,90,161,202,
+57,108,251,227,0,238,113,152,44,17,113,72,68,143,129,140,139,119,57,125,137,60,
+20,133,246,130,174,153,253,106,49,106,133,42,231,80,55,185,194,182,48,253,56,
+184,14,255,136,62,137,140,46,73,165,96,110,76,72,130,1,10,181,26,214,206,126,
+181,24,109,79,202,142,82,62,12,206,10,240,129,3,18,160,79,68,72,79,30,133,148,
+129,244,103,197,32,227,75,86,41,42,162,236,46,235,105,49,42,161,74,35,182,199,
+57,43,237,155,235,140,157,40,151,26,157,144,211,147,42,143,7,146,152,50,32,36,
+149,202,160,110,34,91,149,207,205,176,47,45,70,37,84,57,151,81,89,104,118,139,
+156,179,23,170,37,159,114,116,179,79,204,1,41,125,6,210,159,117,40,169,42,206,
+170,48,100,68,58,30,105,3,236,83,139,81,9,85,206,165,224,17,25,67,78,121,192,41,
+63,224,62,247,184,207,15,120,192,61,30,240,136,83,134,140,24,2,5,163,13,222,87,
+200,72,156,173,16,95,98,170,110,186,176,62,125,6,12,164,190,78,57,30,169,208,72,
+252,134,216,167,22,163,18,170,156,67,110,11,220,191,17,35,50,134,140,24,49,162,
+32,195,213,249,42,39,236,130,33,241,6,239,44,146,132,20,87,255,51,145,26,143,
+125,41,104,231,10,219,245,73,166,234,60,42,235,103,191,90,140,74,168,114,46,1,
+195,170,15,41,151,193,112,62,6,15,131,71,224,254,86,3,57,238,239,124,136,115,
+229,214,107,95,132,114,31,101,209,186,62,33,125,201,234,27,112,56,49,63,146,142,
+71,218,52,251,212,98,180,101,41,231,82,80,128,52,239,114,6,242,28,131,79,64,34,
+83,184,229,128,149,137,99,33,199,39,146,229,146,225,74,247,224,79,93,29,32,32,
+43,43,126,202,232,230,114,138,143,152,67,14,164,230,120,40,46,25,26,72,218,32,
+251,212,98,84,66,149,6,24,50,168,146,65,66,30,17,82,240,152,152,144,135,24,10,
+114,44,5,9,62,57,101,195,45,223,81,189,3,38,214,180,161,60,111,94,189,135,20,
+111,98,132,115,74,32,142,88,79,28,179,144,144,144,8,131,10,232,166,217,159,22,
+163,18,170,52,196,185,65,5,33,62,33,7,184,124,186,199,128,179,55,50,192,2,22,79,
+150,192,195,226,49,27,150,93,70,203,60,10,60,121,45,207,224,38,12,115,227,156,
+93,157,199,1,129,60,14,137,20,141,0,227,6,234,169,128,110,156,253,104,49,42,
+161,202,185,56,231,39,147,101,159,136,20,215,213,62,194,144,48,164,192,48,154,
+178,32,230,113,219,252,115,175,214,4,231,10,122,184,7,34,150,244,20,23,95,29,
+208,35,32,38,162,71,153,217,167,108,150,125,106,49,42,161,74,3,10,137,164,70,64,
+90,53,251,135,36,18,8,64,220,182,172,166,241,141,103,231,50,51,239,219,96,102,
+222,21,148,54,133,71,12,50,63,124,74,74,64,68,130,207,0,170,233,194,212,6,221,
+52,251,211,98,84,66,149,115,240,189,92,102,69,7,23,20,8,1,31,159,1,143,73,201,
+170,56,170,171,123,51,75,81,173,155,126,20,218,218,134,69,205,17,33,1,30,1,33,
+49,134,132,68,172,137,80,250,187,34,50,77,101,218,56,251,213,98,84,66,149,6,
+148,142,153,123,20,18,30,242,24,159,2,31,143,83,217,103,147,41,210,80,166,201,
+20,24,2,18,220,180,13,177,36,76,199,82,72,66,235,130,94,20,251,211,98,116,18,
+100,165,1,185,45,211,162,31,51,226,49,57,35,10,78,41,200,197,146,200,200,136,40,
+168,31,209,55,14,16,76,183,206,182,227,255,188,42,232,96,196,53,27,87,29,47,199,
+155,132,24,18,138,178,14,164,10,232,133,176,63,45,70,173,80,165,17,6,35,61,87,
+33,33,143,101,156,177,179,35,10,16,183,45,155,106,80,89,135,215,175,111,168,46,
+105,27,168,108,9,100,174,111,117,224,47,154,125,105,49,106,133,42,141,200,45,50,
+64,207,189,142,40,29,177,188,138,156,78,231,225,173,31,191,138,214,134,50,76,
+48,168,102,251,214,146,118,23,205,190,180,24,181,66,149,134,248,30,182,156,10,
+214,245,39,13,49,27,46,19,49,143,155,93,49,144,123,114,225,3,141,194,111,7,251,
+209,98,212,10,85,26,147,91,40,135,221,21,242,154,49,46,198,80,212,58,98,221,253,
+149,54,51,67,254,2,2,10,121,16,138,137,135,193,247,180,160,221,118,176,15,45,70,
+37,84,105,137,123,44,138,42,243,207,165,80,151,237,168,140,107,150,116,213,190,
+202,12,193,96,106,157,203,45,44,164,223,13,84,62,183,145,39,187,197,168,132,42,
+173,200,103,66,162,133,196,57,199,89,123,227,80,65,151,140,175,82,76,173,157,68,
+165,115,27,121,210,91,140,74,168,178,2,249,150,84,37,87,241,220,21,158,188,22,
+163,18,170,40,138,178,52,90,129,65,81,20,101,105,84,66,21,69,81,150,70,37,84,81,
+20,101,105,84,66,21,69,81,150,230,255,3,208,41,110,136,142,26,22,144,0,0,0,0,
+73,69,78,68,174,66,96,130};
//
// End of "$Id$".
diff --git a/fluid/about_panel.fl b/fluid/about_panel.fl
index 99f13404f..341a7220d 100644
--- a/fluid/about_panel.fl
+++ b/fluid/about_panel.fl
@@ -34,10 +34,9 @@ comment {//
decl {void show_help(const char *name);} {public local
}
-Function {make_about_panel()} {open
-} {
+Function {make_about_panel()} {} {
Fl_Window about_panel {
- label {About FLUID} open selected
+ label {About FLUID} open
xywh {419 216 345 180} type Double color 50 selection_color 47 hotspot non_modal visible
} {
Fl_Box {} {
@@ -67,6 +66,10 @@ Bill Spitzak and others}
}
}
+data fluid_org_png {
+ comment {Embedded image for internal fluid.html web page.} public local filename {../documentation/src/fluid-org.png}
+}
+
comment {
//
// End of "$Id$".
diff --git a/fluid/about_panel.h b/fluid/about_panel.h
index eb154b091..52d7a578c 100644
--- a/fluid/about_panel.h
+++ b/fluid/about_panel.h
@@ -37,6 +37,7 @@ extern Fl_Double_Window *about_panel;
#include <FL/Fl_Button.H>
#include <FL/Fl_Return_Button.H>
Fl_Double_Window* make_about_panel();
+extern unsigned char fluid_org_png[12690];
#endif
//
diff --git a/fluid/fluid.cxx b/fluid/fluid.cxx
index 53306f8bd..32faa0736 100644
--- a/fluid/fluid.cxx
+++ b/fluid/fluid.cxx
@@ -38,6 +38,7 @@
#include <FL/fl_ask.H>
#include <FL/fl_draw.H>
#include <FL/Fl_File_Chooser.H>
+#include <FL/Fl_PNG_Image.H>
#include <FL/fl_message.H>
#include <FL/filename.H>
#include <stdio.h>
@@ -866,7 +867,56 @@ void show_help(const char *name) {
}
snprintf(helpname, sizeof(helpname), "%s/%s", docdir, name);
- help_dialog->load(helpname);
+ // make sure that we can read the file
+ FILE *f = fopen(helpname, "rb");
+ if (f) {
+ fclose(f);
+ help_dialog->load(helpname);
+ } else {
+ // if we can not read the file, we display the canned version instead
+ // or ask the native browser to open the page on www.fltk.org
+ if (strcmp(name, "fluid.html")==0) {
+ if (!Fl_Shared_Image::find("embedded:/fluid-org.png"))
+ new Fl_PNG_Image("embedded:/fluid-org.png", fluid_org_png, sizeof(fluid_org_png));
+ help_dialog->value
+ (
+ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"
+ "<html><head><title>FLTK: Programming with FLUID</title></head><body>\n"
+ "<h2>What is FLUID?</h2>\n"
+ "The Fast Light User Interface Designer, or FLUID, is a graphical editor "
+ "that is used to produce FLTK source code. FLUID edits and saves its state "
+ "in <code>.fl</code> files. These files are text, and you can (with care) "
+ "edit them in a text editor, perhaps to get some special effects.<p>\n"
+ "FLUID can \"compile\" the <code>.fl</code> file into a <code>.cxx</code> "
+ "and a <code>.h</code> file. The <code>.cxx</code> file defines all the "
+ "objects from the <code>.fl</code> file and the <code>.h</code> file "
+ "declares all the global ones. FLUID also supports localization "
+ "(Internationalization) of label strings using message files and the GNU "
+ "gettext or POSIX catgets interfaces.<p>\n"
+ "A simple program can be made by putting all your code (including a <code>"
+ "main()</code> function) into the <code>.fl</code> file and thus making the "
+ "<code>.cxx</code> file a single source file to compile. Most programs are "
+ "more complex than this, so you write other <code>.cxx</code> files that "
+ "call the FLUID functions. These <code>.cxx</code> files must <code>"
+ "#include</code> the <code>.h</code> file or they can <code>#include</code> "
+ "the <code>.cxx</code> file so it still appears to be a single source file.<p>"
+ "<img src=\"embedded:/fluid-org.png\"></p>"
+ "<p>More information is available online at <a href="
+ "\"http://www.fltk.org/doc-1.3/fluid.html\">http://www.fltk.org/</a>"
+ "</body></html>"
+ );
+ } else if (strcmp(name, "license.html")==0) {
+ fl_open_uri("http://www.fltk.org/doc-1.3/license.html");
+ return;
+ } else if (strcmp(name, "index.html")==0) {
+ fl_open_uri("http://www.fltk.org/doc-1.3/index.html");
+ return;
+ } else {
+ snprintf(helpname, sizeof(helpname), "http://www.fltk.org/%s", name);
+ fl_open_uri(helpname);
+ return;
+ }
+ }
help_dialog->show();
}
@@ -875,7 +925,7 @@ void help_cb(Fl_Widget *, void *) {
}
void manual_cb(Fl_Widget *, void *) {
- show_help("main.html");
+ show_help("index.html");
}
diff --git a/src/Fl_JPEG_Image.cxx b/src/Fl_JPEG_Image.cxx
index fa93cf441..330618013 100644
--- a/src/Fl_JPEG_Image.cxx
+++ b/src/Fl_JPEG_Image.cxx
@@ -35,6 +35,7 @@
//
#include <FL/Fl_JPEG_Image.H>
+#include <FL/Fl_Shared_Image.H>
#include <FL/fl_utf8.h>
#include <config.h>
#include <stdio.h>
@@ -268,14 +269,18 @@ static void jpeg_mem_src(j_decompress_ptr cinfo, const unsigned char *data)
/**
\brief The constructor loads the JPEG image from memory.
+ Construct an image from a block of memory inside the application. Fluid offers
+ "binary Data" chunks as a great way to add image data into the C++ source code.
+ name_png can be NULL. If a name is givem the image is added to the the list of
+ shared images (see: Fl_Shared_Image) and will be available by that name.
+
The inherited destructor frees all memory and server resources that are used
by the image.
There is no error function in this class. If the image has loaded correctly,
w(), h(), and d() should return values greater zero.
- \param name The developer should provide a unique name for this image.
- Note: currently this is not used!
+ \param name A unique name or NULL
\param data A pointer to the memory location of the JPEG image
*/
Fl_JPEG_Image::Fl_JPEG_Image(const char *name, const unsigned char *data)
@@ -363,6 +368,11 @@ Fl_JPEG_Image::Fl_JPEG_Image(const char *name, const unsigned char *data)
free(max_destroy_decompress_err);
free(max_finish_decompress_err);
+
+ if (w() && h() && name) {
+ Fl_Shared_Image *si = new Fl_Shared_Image(name, this);
+ si->add();
+ }
#endif // HAVE_LIBJPEG
}
diff --git a/src/Fl_PNG_Image.cxx b/src/Fl_PNG_Image.cxx
index 6bf39b28c..798c08854 100644
--- a/src/Fl_PNG_Image.cxx
+++ b/src/Fl_PNG_Image.cxx
@@ -37,6 +37,7 @@
#include <FL/Fl.H>
#include <FL/Fl_PNG_Image.H>
+#include <FL/Fl_Shared_Image.H>
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
@@ -89,11 +90,17 @@ Fl_PNG_Image::Fl_PNG_Image (const char *filename): Fl_RGB_Image(0,0,0)
load_png_(filename, NULL, 0);
}
-/** Constructor that reads a PNG image from memory.
+/**
+ \brief Constructor that reads a PNG image from memory.
- \param name_png A name given to this image
+ Construct an image from a block of memory inside the application. Fluid offers
+ "binary Data" chunks as a great way to add image data into the C++ source code.
+ name_png can be NULL. If a name is givem the image is added to the the list of
+ shared images (see: Fl_Shared_Image) and will be available by that name.
+
+ \param name_png A name given to this image or NULL
\param buffer Pointer to the start of the PNG image in memory
- \param maxsize Size in bytes of the memory buffer containing the PNG image
+ \param maxsize Size in bytes of the memory buffer containing the PNG image
*/
Fl_PNG_Image::Fl_PNG_Image (
const char *name_png, const unsigned char *buffer, int maxsize): Fl_RGB_Image(0,0,0)
@@ -111,7 +118,7 @@ void Fl_PNG_Image::load_png_(const char *name_png, const unsigned char *buffer_p
png_infop info; // PNG info pointers
png_bytep *rows;// PNG row pointers
fl_png_memory png_mem_data;
- int from_memory = (buffer_png != NULL); // true iff reading image from memory
+ int from_memory = (buffer_png != NULL); // true if reading image from memory
if (!from_memory) {
if ((fp = fl_fopen(name_png, "rb")) == NULL) return;
@@ -200,7 +207,14 @@ void Fl_PNG_Image::load_png_(const char *name_png, const unsigned char *buffer_p
png_read_end(pp, info);
png_destroy_read_struct(&pp, &info, NULL);
- if (!from_memory) fclose(fp);
+ if (from_memory) {
+ if (w() && h() && name_png) {
+ Fl_Shared_Image *si = new Fl_Shared_Image(name_png, this);
+ si->add();
+ }
+ } else {
+ fclose(fp);
+ }
#endif // HAVE_LIBPNG && HAVE_LIBZ
}
diff --git a/src/Fl_Shared_Image.cxx b/src/Fl_Shared_Image.cxx
index 7c08eb846..da30d6ff7 100644
--- a/src/Fl_Shared_Image.cxx
+++ b/src/Fl_Shared_Image.cxx
@@ -374,11 +374,24 @@ Fl_Shared_Image* Fl_Shared_Image::find(const char *n, int W, int H) {
/**
- Gets a shared image, if it exists already ; it will return it.
- If it does not exist or if it exist but with other size,
- then the existing image is deleted and replaced
- by a new image from the n filename of the proper dimension.
- If n is not a valid image filename, then get() will return NULL.
+ \brief Find or load an image that can be shared by multiple widgets.
+
+ Gets a shared image, if it exists already ; it will return it.
+ If it does not exist or if it exist but with other size,
+ then the existing image is deleted and replaced
+ by a new image from the n filename of the proper dimension.
+ If n is not a valid image filename, then get() will return NULL.
+
+ Shared JPEG and PNG images can also be created from memory by using their
+ named memory access constructor.
+
+ \param n name of the image
+ \param W, H desired size
+
+ \see Fl_Shared_Image::find(const char *n, int W, int H)
+ \see Fl_Shared_Image::release()
+ \see Fl_JPEG_Image::Fl_JPEG_Image(const char *name, const unsigned char *data)
+ \see Fl_PNG_Image::Fl_PNG_Image (const char *name_png, const unsigned char *buffer, int maxsize)
*/
Fl_Shared_Image* Fl_Shared_Image::get(const char *n, int W, int H) {
Fl_Shared_Image *temp; // Image