Merge continued

git-svn-id: svn://ultimatepp.org/upp/trunk@10263 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2016-10-04 08:34:39 +00:00
parent adf46bd64e
commit 2e4b276e07
3860 changed files with 1161787 additions and 438 deletions

View file

@ -34,6 +34,7 @@ CONSOLE_APP_MAIN
p.Create(1, 2);
ASSERT(p.Top().x == 1);
ASSERT(p.Top().y == 2);
p.Create();
}
{
@ -41,6 +42,7 @@ CONSOLE_APP_MAIN
p.Create<Point>(1, 2);
ASSERT(p.Top().x == 1);
ASSERT(p.Top().y == 2);
p.Create<Point>();
}
{

29
autotest/Skip/Skip.cpp Normal file
View file

@ -0,0 +1,29 @@
#include <Core/Core.h>
using namespace Upp;
CONSOLE_APP_MAIN
{
StdLogSetup(LOG_COUT|LOG_FILE);
String fn = GetHomeDirFile("test.txt");
{
FileOut out(fn);
for(int i = 0; i < 10000; i++)
out.Put('0');
out.Put("test");
}
{
FileIn in(fn);
ASSERT(in.Skip(10000) == 10000);
ASSERT(in.Get(1000) == "test");
ASSERT(in.Skip(10) == 0);
}
{
FileIn in(fn);
ASSERT(in.Skip(20000) == 10004);
}
FileDelete(fn);
LOG("============= OK");
}

9
autotest/Skip/Skip.upp Normal file
View file

@ -0,0 +1,9 @@
uses
Core;
file
Skip.cpp;
mainconfig
"" = "";

4
autotest/Skip/init Normal file
View file

@ -0,0 +1,4 @@
#ifndef _Skip_icpp_init_stub
#define _Skip_icpp_init_stub
#include "Core/init"
#endif

View file

@ -1,4 +1,4 @@
description "Animated Hello world example";
description "Animated Hello world example\377";
uses
CtrlLib;

View file

@ -1,4 +1,4 @@
description "Rudimentary HelloWorld application with menu and status bar";
description "Rudimentary HelloWorld application with menu and status bar\377";
uses
CtrlLib;

4
tutorial/Gui07/init Normal file
View file

@ -0,0 +1,4 @@
#ifndef _Gui07_icpp_init_stub
#define _Gui07_icpp_init_stub
#include "CtrlLib/init"
#endif

View file

@ -11,11 +11,11 @@ struct MyAppWindow : TopWindow {
}
void SubMenu(Bar& bar) {
bar.Add("Exit", THISBACK(Exit));
bar.Add("Exit", [=] { Exit(); });
}
void MainMenu(Bar& bar) {
bar.Add("Menu", THISBACK(SubMenu));
bar.Sub("Menu", [=](Bar& bar) { SubMenu(bar); });
}
typedef MyAppWindow CLASSNAME;
@ -23,7 +23,7 @@ struct MyAppWindow : TopWindow {
MyAppWindow() {
Title("My application with menu").Sizeable();
AddFrame(menu);
menu.Set(THISBACK(MainMenu));
menu.Set([=](Bar& bar) { MainMenu(bar); });
}
};

View file

@ -0,0 +1,11 @@
description "Menu - as single lambda\377";
uses
CtrlLib;
file
main.cpp;
mainconfig
"" = "GUI";

4
tutorial/Gui07a/init Normal file
View file

@ -0,0 +1,4 @@
#ifndef _Gui07a_icpp_init_stub
#define _Gui07a_icpp_init_stub
#include "CtrlLib/init"
#endif

32
tutorial/Gui07a/main.cpp Normal file
View file

@ -0,0 +1,32 @@
#include <CtrlLib/CtrlLib.h>
using namespace Upp;
struct MyAppWindow : TopWindow {
MenuBar menu;
MyAppWindow() {
Title("My application with menu").Sizeable();
AddFrame(menu);
menu.Set(
[=](Bar& bar) {
bar.Sub("Menu",
[=](Bar& bar) {
bar.Add("Exit",
[=] {
if(PromptOKCancel("Exit MyApp?"))
Break();
}
);
}
);
}
);
}
};
GUI_APP_MAIN
{
MyAppWindow app;
app.Run();
}

4
tutorial/Gui08/init Normal file
View file

@ -0,0 +1,4 @@
#ifndef _Gui08_icpp_init_stub
#define _Gui08_icpp_init_stub
#include "CtrlLib/init"
#endif

View file

@ -8,16 +8,14 @@ struct MyAppWindow : TopWindow {
Break();
}
void LocalMenu(Bar& bar) {
bar.Add("Exit", THISBACK(Exit));
}
void RightDown(Point, dword) {
MenuBar::Execute(THISBACK(LocalMenu));
MenuBar::Execute(
[=](Bar& bar) {
bar.Add("Exit", [=] { Exit(); });
}
);
}
typedef MyAppWindow CLASSNAME;
MyAppWindow() {
Title("My application with local menu").Sizeable();
}

4
tutorial/Gui09/init Normal file
View file

@ -0,0 +1,4 @@
#ifndef _Gui09_icpp_init_stub
#define _Gui09_icpp_init_stub
#include "CtrlLib/init"
#endif

View file

@ -9,19 +9,17 @@ struct MyAppWindow : TopWindow {
}
void RightDown(Point, dword) {
CallbackArgTarget<int> result;
int result = Null;
MenuBar menu;
for(int i = 0; i < 10; i++)
menu.Add(AsString(i), result[i]);
menu.Add(AsString(i), [=, &result] { result = i; });
menu.Separator();
menu.Add("Exit", THISBACK(Exit));
menu.Add("Exit", [=] { Exit(); });
menu.Execute();
if(!IsNull(result))
PromptOK("You have selected " + AsString((int)result));
}
typedef MyAppWindow CLASSNAME;
MyAppWindow() {
Title("My application with context menu").Sizeable();
}

4
tutorial/Gui10/init Normal file
View file

@ -0,0 +1,4 @@
#ifndef _Gui10_icpp_init_stub
#define _Gui10_icpp_init_stub
#include "CtrlLib/init"
#endif

View file

@ -15,19 +15,15 @@ struct MyAppWindow : TopWindow {
}
void SubMenu(Bar& bar) {
bar.Add("Exit", TutorialImg::Exit(), THISBACK(Exit));
bar.Add("Exit", TutorialImg::Exit(), [=] { Exit(); });
}
void MainMenu(Bar& bar) {
bar.Add("Menu", THISBACK(SubMenu));
}
typedef MyAppWindow CLASSNAME;
MyAppWindow() {
Title("My application with menu and images").Sizeable();
AddFrame(menu);
menu.Set(THISBACK(MainMenu));
menu.Set([=](Bar& bar) {
bar.Sub("Menu", [=](Bar& bar) { SubMenu(bar); });
});
}
};

File diff suppressed because one or more lines are too long

View file

@ -1,82 +1,81 @@
TITLE("")
COMPRESSED
120,156,236,188,199,111,187,225,150,30,246,175,12,16,103,86,9,112,199,184,65,48,54,12,120,145,108,189,49,178,26,24,129,23,182,17,192,94,217,94,25,6,40,82,236,98,239,98,239,93,20,123,39,69,177,247,222,155,216,123,255,216,91,168,159,230,14,236,153,123,199,215,73,102,86,33,4,8,224,123,206,243,158,242,156,243,150,15,252,254,226,79,254,193,63,248,205,255,244,155,255,225,55,255,141,207,63,250,223,254,213,191,254,151,255,241,223,254,135,127,241,23,255,233,255,252,207,255,227,255,254,207,254,231,255,227,159,255,201,95,252,251,223,252,227,63,249,211,127,241,253,239,159,252,201,63,253,167,255,215,191,251,151,255,230,95,253,163,63,251,243,63,255,237,159,254,217,111,127,251,231,96,8,238,73,240,4,250,221,231,16,100,205,234,232,101,174,23,228,127,172,72,50,223,76,58,52,10,94,20,56,129,16,140,24,134,47,160,47,226,33,20,13,131,145,252,231,143,231,79,47,152,76,200,60,207,188,147,73,105,210,176,168,141,234,221,104,81,223,22,2,88,103,46,23,172,
104,11,9,251,94,225,113,218,102,26,172,54,178,244,206,51,166,176,107,253,129,247,167,209,148,141,219,181,112,199,203,164,250,198,149,208,49,227,156,235,174,120,111,94,36,250,179,78,109,87,133,195,238,166,213,117,222,137,148,104,207,151,238,221,192,10,140,38,208,91,111,11,214,46,121,6,235,48,149,131,38,101,227,156,105,190,99,26,249,91,185,246,171,110,79,87,251,218,26,75,87,48,134,209,56,165,77,61,252,168,176,107,126,91,254,153,96,90,145,149,227,100,222,156,65,186,67,56,49,63,4,253,8,118,193,150,215,114,166,2,140,85,203,104,27,236,40,188,18,163,52,3,83,143,122,173,233,197,175,70,224,158,93,125,178,165,176,58,165,190,245,152,197,43,156,8,168,175,151,197,244,94,105,71,221,114,198,43,193,45,239,6,51,42,174,173,148,49,127,216,44,23,57,155,0,78,186,249,86,9,124,21,85,42,90,55,192,37,80,102,72,50,12,79,222,214,3,19,169,160,152,9,164,39,9,241,171,193,104,139,147,199,169,66,199,3,221,223,20,243,197,110,55,158,154,197,
4,85,148,126,195,11,43,226,18,173,13,14,41,5,104,212,214,169,24,99,95,7,178,19,154,238,251,156,228,243,244,61,41,130,77,89,174,100,206,151,234,240,65,39,184,157,126,93,255,82,151,13,137,90,5,150,150,219,34,58,1,201,158,76,120,243,28,171,46,150,227,42,10,213,105,171,160,220,99,183,127,60,111,203,23,3,77,49,69,143,91,41,54,23,101,70,50,108,98,60,20,5,53,221,80,64,186,153,76,231,159,40,79,226,175,232,83,216,179,149,194,22,46,147,203,50,47,121,42,56,40,198,184,96,154,131,46,194,219,165,89,195,188,149,223,207,134,113,94,122,145,229,169,57,115,208,204,245,203,136,173,145,82,187,143,119,132,34,173,171,32,214,208,153,102,46,82,142,97,40,39,213,156,197,167,35,31,24,111,240,181,190,141,44,50,198,216,167,80,208,220,5,34,19,27,170,96,212,163,49,70,207,188,208,144,16,200,10,72,90,240,73,142,228,245,185,22,9,149,143,48,49,126,204,122,95,180,88,205,53,242,120,124,188,191,10,57,88,138,162,117,232,29,153,4,165,
98,235,77,83,27,140,48,202,124,106,159,181,253,207,184,116,17,170,150,236,72,224,101,12,209,209,134,105,214,32,47,126,166,110,7,50,158,61,34,201,75,9,18,114,171,0,73,235,204,145,30,57,146,11,91,22,200,126,73,245,108,189,211,52,47,32,155,47,66,166,201,40,86,95,237,195,169,42,145,39,199,190,66,4,90,203,153,214,160,46,193,80,160,42,48,213,106,118,17,81,201,195,75,81,23,20,214,166,151,101,8,207,32,228,98,20,167,196,110,24,209,246,129,103,167,182,84,63,95,200,117,213,197,164,5,233,32,189,81,78,182,6,222,189,178,160,36,118,148,112,78,201,26,23,79,61,143,139,206,76,244,82,41,20,12,136,35,89,150,119,135,251,1,44,124,62,188,159,43,149,20,118,252,181,160,174,63,2,204,203,196,252,182,111,234,146,238,254,94,146,178,141,97,41,157,113,26,145,143,81,154,11,181,221,185,104,183,249,98,222,121,150,121,128,8,245,45,226,31,11,220,161,15,26,123,187,29,170,2,142,23,53,141,58,101,27,220,32,87,65,23,84,68,250,139,7,
235,131,212,194,78,206,122,150,4,168,161,207,9,231,94,27,208,173,148,69,49,195,150,83,141,233,155,244,51,115,92,210,154,227,235,26,190,112,110,133,86,161,251,206,235,180,52,87,163,219,162,190,186,226,196,217,126,62,181,15,174,213,195,155,177,101,31,123,35,77,5,114,86,163,214,114,5,66,233,34,188,207,222,85,205,237,234,10,94,173,53,212,4,210,192,125,97,38,84,146,123,94,94,48,173,245,105,155,90,49,11,101,71,153,28,71,111,156,101,85,166,250,192,62,202,14,142,57,81,240,112,219,100,217,29,199,125,148,208,137,211,31,229,227,75,102,199,80,154,206,147,70,213,123,205,118,206,183,27,224,89,45,246,174,245,62,8,120,237,85,174,69,61,51,187,226,173,69,14,217,72,27,175,179,250,65,169,164,120,247,133,103,179,6,57,157,202,55,77,157,217,122,233,143,189,2,164,219,245,180,118,48,196,4,165,103,239,27,111,238,24,28,165,137,40,169,96,195,214,56,219,182,143,56,228,249,104,64,65,80,182,56,119,205,26,94,216,245,235,75,208,199,252,8,228,96,
39,50,83,225,200,163,124,138,11,102,128,34,200,247,123,231,253,146,192,45,102,135,4,23,187,59,155,13,215,43,199,123,80,26,249,246,177,228,179,74,131,45,148,47,160,233,27,102,218,16,153,3,47,197,196,184,110,172,115,205,83,5,76,23,62,135,223,24,124,33,16,135,240,69,109,99,11,167,5,99,82,205,132,22,53,107,22,51,199,80,157,237,118,220,130,228,113,199,169,9,225,197,246,201,167,57,15,237,155,104,103,179,106,169,9,50,178,182,245,105,18,79,24,180,23,136,219,149,29,102,234,128,104,28,97,242,209,82,183,254,74,174,214,85,111,7,18,107,21,47,12,241,26,41,234,200,38,31,192,132,146,156,85,254,136,246,116,103,138,19,65,0,151,60,66,10,29,212,85,100,169,37,168,153,92,219,59,44,234,142,221,28,71,91,41,199,118,83,36,202,161,175,147,62,58,51,51,170,236,145,90,67,151,237,174,133,209,183,131,158,81,123,43,20,226,31,132,181,82,123,217,117,191,224,82,49,129,198,155,124,142,27,125,10,93,238,43,133,231,13,127,35,31,210,128,198,
151,54,75,249,81,7,219,77,103,83,84,237,94,4,115,80,119,102,178,11,251,221,243,183,251,54,60,65,162,38,109,113,229,18,214,69,253,162,102,175,107,38,68,165,206,205,44,196,200,139,71,240,46,249,77,125,54,51,202,12,173,226,69,230,120,98,40,19,27,94,41,185,13,141,241,85,236,73,145,238,170,231,6,98,123,37,44,126,220,116,1,171,194,64,85,46,235,19,141,119,175,162,113,23,181,6,163,98,202,169,178,147,162,98,164,205,80,154,53,124,230,148,142,30,15,205,137,95,188,160,212,79,83,190,145,22,232,108,183,124,177,185,132,140,39,210,140,155,81,61,198,230,191,140,204,96,44,182,29,230,47,98,149,173,103,63,197,228,161,194,214,14,186,180,18,124,77,196,171,40,235,66,104,165,6,221,44,11,155,247,245,121,61,78,37,94,239,95,59,197,135,26,221,233,98,159,182,197,70,219,93,26,213,38,229,65,53,106,208,140,93,163,203,205,15,239,112,153,167,155,170,96,25,175,141,163,189,182,36,70,238,144,73,245,50,136,145,228,103,233,61,33,80,210,137,183,
238,222,96,152,148,116,80,22,213,89,28,115,41,125,91,212,104,112,62,42,16,22,229,116,8,146,243,58,121,189,17,176,84,123,135,193,122,201,62,25,249,236,40,164,74,109,133,188,94,179,250,101,246,228,174,184,172,41,35,63,148,90,165,121,23,128,199,186,196,162,109,45,124,222,96,157,107,121,111,143,252,18,121,197,140,22,65,105,170,216,238,27,167,124,230,75,105,75,139,148,72,215,245,198,160,202,119,157,225,66,95,21,235,250,79,198,253,142,174,205,184,184,149,253,121,163,120,10,189,143,29,29,109,221,73,172,238,63,163,104,72,83,133,169,247,92,6,67,167,124,216,237,199,169,157,216,163,238,1,43,189,50,181,125,78,45,136,90,143,95,8,233,61,11,171,209,0,167,244,46,95,155,139,28,161,208,224,22,250,233,45,146,246,181,182,255,72,168,98,37,204,122,132,103,147,180,138,185,17,155,23,229,32,197,171,43,247,222,242,241,108,164,17,33,235,100,177,108,61,151,239,101,156,183,225,98,194,53,11,103,14,202,198,136,167,242,196,15,167,227,141,218,174,243,209,106,
46,148,108,239,86,237,67,23,248,186,74,71,169,52,40,158,90,129,49,201,213,145,110,219,114,4,15,126,70,59,65,152,242,237,133,130,91,45,53,175,171,229,169,37,118,171,79,102,134,216,106,105,117,118,250,105,158,18,198,232,10,3,231,43,90,75,41,201,58,249,183,136,69,220,233,133,201,25,97,170,64,104,183,0,19,181,214,229,207,4,110,40,104,168,26,132,169,8,180,230,3,184,76,102,225,175,172,11,227,81,163,33,230,124,221,23,49,30,79,169,122,98,219,218,106,139,144,170,66,145,192,209,48,123,141,133,181,27,22,202,201,230,251,45,96,40,128,233,205,172,223,31,137,25,186,42,149,128,201,81,228,218,131,97,215,187,151,207,175,197,58,79,205,69,225,188,102,240,141,24,218,198,196,81,121,205,255,94,0,135,152,80,229,35,254,121,46,237,171,101,213,221,129,40,42,49,185,76,52,184,169,109,147,158,102,150,155,75,170,39,177,242,49,250,207,201,76,51,215,56,29,5,229,216,207,69,39,236,155,47,210,75,210,117,47,167,24,26,49,116,17,17,200,27,107,138,
155,197,85,102,240,152,26,108,218,0,25,162,187,94,156,108,43,202,242,158,175,89,93,208,251,244,192,169,36,112,122,31,73,57,243,96,29,73,187,35,37,69,56,69,65,234,172,100,242,155,36,129,122,143,181,57,233,218,209,63,81,232,71,130,34,215,117,177,187,202,10,155,213,99,179,30,61,24,49,127,155,253,12,76,208,213,66,124,172,177,90,75,170,251,65,92,207,205,204,44,10,253,122,114,122,38,176,75,159,232,105,165,75,72,65,33,91,129,247,248,124,167,9,82,237,117,185,148,18,161,174,121,231,20,21,4,49,223,14,17,12,148,133,129,158,74,164,229,136,143,245,39,53,26,88,242,45,176,142,145,60,81,80,128,30,109,202,142,159,17,209,236,118,80,71,169,61,125,177,95,125,83,106,182,69,234,161,232,37,31,38,131,231,177,134,136,201,37,48,111,111,88,161,154,197,106,184,92,51,241,136,174,197,200,36,121,118,235,200,221,210,94,172,137,101,143,55,144,144,67,25,25,229,138,103,215,144,134,18,197,73,69,231,161,147,115,172,228,143,43,97,169,185,123,148,85,
204,211,149,18,99,96,110,80,59,158,35,10,201,235,16,73,25,241,231,122,56,46,223,223,205,251,110,182,236,187,115,84,199,79,194,88,121,29,68,53,235,60,237,72,181,80,140,26,187,64,124,98,18,221,99,135,187,29,211,240,166,151,15,140,23,252,182,73,2,73,21,16,47,48,129,0,237,165,137,43,232,5,218,140,147,168,61,234,230,176,221,11,101,124,201,3,82,155,117,100,46,111,114,109,85,237,12,5,3,171,75,254,249,68,41,22,149,31,118,105,195,189,91,181,27,35,239,46,225,116,44,155,14,237,153,106,198,54,205,203,79,23,116,77,43,106,88,251,0,216,168,197,108,130,11,238,93,211,186,77,224,92,186,83,52,189,135,203,240,55,39,246,122,207,115,143,157,136,211,163,36,189,72,53,204,140,80,152,59,58,130,42,66,204,75,83,105,117,133,106,96,87,246,99,75,8,93,148,218,99,166,76,57,63,231,94,7,117,51,109,220,238,43,16,116,57,78,104,222,109,191,145,184,182,147,50,227,44,185,204,71,90,193,102,71,227,218,207,140,136,245,140,130,59,179,55,
199,180,44,208,115,185,227,117,127,161,177,116,160,171,104,242,124,203,164,6,22,41,246,214,34,130,7,93,141,105,87,51,75,174,124,245,149,121,63,196,140,169,130,75,95,24,119,128,225,48,105,245,219,26,29,163,5,186,217,126,132,56,108,181,101,204,96,6,237,49,158,218,209,164,61,89,104,19,173,190,62,239,112,27,153,243,42,192,189,164,32,148,46,2,184,9,34,115,99,87,178,63,79,245,89,29,38,127,236,58,80,225,52,233,22,192,246,112,147,43,129,61,225,86,43,207,151,140,19,60,236,1,106,55,121,120,85,42,172,29,255,166,120,89,191,12,206,205,20,75,55,126,174,196,133,243,220,69,127,170,225,62,215,184,23,10,55,10,109,127,110,87,214,96,134,200,205,67,179,189,115,224,94,182,175,133,39,149,53,79,82,96,103,170,174,230,237,178,238,6,54,123,138,55,166,228,26,154,186,187,164,128,61,233,109,107,141,113,148,59,116,179,177,77,109,38,230,20,115,39,9,30,193,67,171,151,252,217,187,207,16,97,187,68,27,19,179,55,34,60,19,231,7,61,46,168,
73,204,37,119,42,2,151,109,82,37,125,54,202,37,78,57,9,190,178,47,44,46,108,246,158,112,201,127,234,73,162,102,170,237,169,219,104,172,57,65,17,225,36,225,213,117,40,124,1,114,136,103,18,11,179,214,245,122,184,73,93,159,74,44,174,185,110,2,134,177,68,160,214,32,37,209,65,149,15,10,137,25,43,175,182,19,104,101,58,211,121,167,180,71,82,41,32,149,95,5,26,202,159,74,79,41,176,22,236,225,65,219,208,15,180,124,230,143,212,51,167,252,174,191,214,104,117,42,239,40,2,227,220,145,160,46,100,1,4,34,242,156,73,27,31,71,17,8,10,200,207,50,21,164,246,128,66,107,138,143,193,81,249,137,115,87,90,144,212,173,98,91,221,245,137,123,36,3,148,102,241,59,249,204,240,5,123,18,112,181,107,77,126,161,97,62,245,243,19,41,103,74,3,122,122,208,122,129,51,107,81,78,204,179,152,65,212,130,191,40,83,171,138,152,236,224,215,253,196,23,78,74,192,115,39,111,107,105,212,135,10,113,81,114,159,98,53,30,219,181,165,179,3,51,112,102,
98,171,232,105,93,6,89,119,82,167,118,61,162,196,115,238,153,249,92,27,33,103,179,122,201,131,237,226,34,228,93,89,220,255,224,40,28,24,240,26,166,5,231,121,208,106,137,93,0,242,38,170,22,140,119,35,64,20,144,26,175,4,85,56,75,92,158,115,63,189,236,17,157,99,4,125,201,69,38,42,34,14,220,235,202,55,188,194,18,165,109,231,68,70,4,197,241,169,226,209,195,152,54,84,131,151,41,3,25,72,201,163,92,248,80,132,28,94,249,236,213,140,182,247,205,53,20,190,23,206,195,143,224,193,204,27,76,222,215,207,51,191,10,133,198,18,148,48,246,12,175,244,53,27,231,186,188,213,228,226,12,115,29,197,41,40,132,232,195,150,42,64,82,6,184,176,67,73,124,219,70,185,78,38,208,158,167,149,133,38,201,73,175,29,93,88,161,32,57,164,43,183,175,208,187,134,11,221,123,73,154,227,83,73,236,186,59,207,88,191,198,119,137,76,113,120,162,178,27,11,180,41,135,61,53,101,20,21,237,79,192,170,149,73,10,235,32,156,113,233,117,104,178,78,218,134,
92,227,186,142,146,125,85,41,199,105,35,115,199,82,109,191,175,14,26,161,230,214,131,106,197,245,18,181,182,56,218,94,76,14,66,184,36,238,189,233,70,47,249,29,214,39,245,150,130,37,113,131,205,187,149,234,247,184,230,54,32,223,29,107,183,6,175,188,117,201,112,173,46,161,41,198,146,129,184,147,104,14,30,88,253,254,106,143,220,159,201,179,78,229,38,84,37,112,68,70,235,140,11,72,18,186,233,160,102,162,23,235,115,110,133,87,104,46,81,3,230,211,138,226,70,216,209,179,142,165,22,219,53,137,159,117,93,77,160,148,150,202,26,102,113,139,164,172,35,212,152,170,30,19,59,97,224,146,255,86,55,205,191,116,245,236,172,71,54,231,30,121,203,20,117,138,66,127,45,125,79,110,9,74,120,244,237,179,248,80,240,82,3,70,133,134,187,182,169,206,110,149,109,74,204,36,75,79,86,85,184,133,87,30,94,197,202,54,197,82,181,31,86,154,125,59,239,187,78,191,86,230,151,115,201,199,98,74,27,31,189,209,160,242,229,155,165,24,81,91,29,65,89,211,177,112,
40,66,231,96,249,80,13,190,169,240,34,122,76,87,28,33,40,66,185,71,245,245,76,105,251,31,27,65,101,230,0,45,105,137,175,190,26,170,161,197,228,71,62,37,170,245,254,32,132,96,218,49,234,211,116,35,58,87,210,158,116,143,47,192,159,170,95,12,225,63,98,245,205,144,71,255,252,102,8,111,93,88,70,222,252,145,158,192,153,182,154,28,23,247,146,160,60,136,73,90,212,225,204,109,86,224,103,123,0,113,222,12,25,74,78,43,59,106,16,23,253,27,152,231,108,36,142,15,71,14,226,142,54,242,145,28,156,63,252,10,189,112,49,93,56,231,231,42,29,73,166,172,97,51,149,110,55,197,238,164,89,149,133,11,123,247,140,222,18,210,110,113,168,99,74,172,110,50,46,91,63,175,47,25,166,47,49,208,233,50,78,254,66,123,238,61,50,7,14,21,5,112,168,137,33,4,193,29,133,250,213,66,106,162,163,185,144,216,106,242,155,247,199,92,147,163,96,222,239,39,157,87,94,216,23,162,5,125,192,210,212,152,139,46,177,3,65,161,57,136,225,18,67,184,154,206,
189,170,19,81,105,217,71,97,94,36,198,142,112,80,214,4,179,86,87,207,205,207,148,146,117,154,210,105,245,159,174,16,177,212,215,234,199,235,57,246,108,235,85,237,182,166,203,221,251,46,22,6,154,178,159,185,134,13,26,96,187,51,163,35,130,125,218,190,119,12,225,209,58,233,175,214,45,154,164,212,237,253,220,65,222,86,99,159,42,138,135,59,24,101,45,240,201,254,206,74,225,5,243,43,43,211,14,92,60,170,206,232,12,58,227,241,53,146,115,89,144,201,210,102,7,24,225,69,202,159,4,181,126,196,69,212,111,241,71,14,227,223,73,124,228,144,247,157,196,135,8,234,59,137,255,69,158,31,50,46,33,102,33,208,143,206,223,133,238,101,170,26,156,212,30,102,211,56,49,137,29,198,127,172,88,94,0,86,205,50,159,240,51,223,13,160,13,93,210,24,112,81,97,68,112,247,18,216,253,70,19,183,168,22,231,48,243,84,209,127,143,182,84,11,86,194,210,118,157,35,202,89,11,184,61,11,239,120,169,121,119,92,118,225,222,199,92,58,134,178,170,35,125,2,101,133,
191,143,248,106,38,118,109,231,57,250,18,189,62,152,252,178,120,84,199,124,96,136,38,205,132,207,227,39,6,78,32,49,73,202,46,189,61,162,228,133,208,210,118,37,85,100,33,82,59,130,194,116,180,103,170,210,75,44,196,26,57,172,90,123,73,78,136,58,202,131,30,48,111,183,124,27,228,96,128,13,45,194,24,43,240,180,177,122,76,5,168,127,52,195,81,188,94,143,10,47,129,216,146,228,136,106,221,190,136,38,55,255,223,228,245,251,79,216,96,209,159,176,201,37,63,97,123,236,208,31,97,19,23,75,207,79,171,135,131,45,102,64,185,233,158,87,230,93,195,232,188,153,139,141,211,49,175,185,239,174,139,58,238,254,97,158,83,149,106,238,26,127,152,163,183,31,79,42,100,251,58,196,177,9,203,11,59,192,89,90,54,224,186,171,112,235,159,86,176,235,253,54,242,215,47,237,250,213,223,193,161,76,77,77,200,219,182,107,182,133,39,173,196,112,26,167,145,20,157,68,94,130,178,47,11,36,195,93,138,110,253,139,124,241,190,6,243,75,248,15,14,177,121,21,107,177,
8,163,71,133,187,177,91,16,142,198,27,34,147,194,254,200,229,149,50,152,72,15,87,69,255,206,107,215,253,183,135,28,81,27,164,78,192,37,110,26,241,11,15,105,49,102,241,74,89,138,154,172,225,46,162,2,200,248,172,59,184,192,194,187,72,70,81,130,30,253,253,119,235,221,188,57,120,156,186,71,79,32,226,231,99,49,124,172,133,148,239,197,240,49,38,123,12,250,80,32,234,19,226,103,193,8,84,190,120,41,80,5,175,215,190,202,219,70,116,233,113,152,233,255,151,227,169,71,207,3,25,62,84,162,95,40,41,48,229,27,5,94,90,169,158,237,160,233,3,59,51,252,203,133,22,252,51,49,229,91,249,161,251,179,26,241,10,145,111,229,135,110,238,71,138,247,35,229,67,65,127,73,169,241,31,191,164,64,6,226,199,223,110,231,95,183,3,170,253,153,80,129,254,175,39,36,23,126,38,252,107,235,191,15,245,35,165,6,253,152,5,202,27,240,200,252,163,111,61,236,10,141,31,16,224,31,115,148,188,31,115,62,194,63,230,164,80,224,191,156,232,3,173,43,136,89,
158,103,44,175,74,120,64,200,126,204,249,27,254,123,77,90,197,35,47,58,212,203,143,94,238,199,141,191,90,159,127,167,71,252,165,247,41,82,21,226,1,153,20,65,9,131,166,129,191,45,78,244,135,46,34,48,54,176,31,171,125,254,111,137,47,232,151,158,174,64,214,51,145,143,173,80,240,175,251,241,123,237,121,132,66,68,186,19,24,31,84,225,31,138,31,248,161,52,237,108,95,183,143,249,123,2,237,88,125,164,49,30,19,76,137,222,223,159,183,213,183,213,165,128,66,249,62,196,127,155,172,18,220,9,86,109,11,129,223,181,161,60,251,31,142,179,227,3,109,210,182,121,169,0,168,44,177,23,126,197,91,249,183,197,27,242,136,183,74,82,0,205,116,209,110,247,140,9,64,101,117,31,234,195,244,7,253,248,29,15,104,165,0,74,88,122,234,126,50,27,115,200,239,225,135,248,39,172,165,241,79,88,161,224,161,42,240,176,163,44,199,252,126,188,175,111,189,37,42,47,179,70,193,138,34,212,44,53,218,241,123,56,232,133,131,23,219,46,110,82,7,187,237,127,122,7,
26,103,96,29,192,44,238,253,68,140,79,11,196,36,230,54,212,3,15,197,138,226,56,55,113,218,44,108,142,233,123,86,147,28,125,185,82,254,235,177,123,115,42,139,118,13,76,218,4,63,85,20,3,199,57,1,49,124,146,118,19,57,166,118,61,187,206,93,249,54,208,117,55,24,66,238,139,127,124,8,234,215,160,221,168,184,55,67,201,179,117,30,23,156,115,40,138,155,67,117,182,221,165,238,253,172,87,158,205,214,89,205,226,233,188,185,203,184,153,251,2,152,6,11,111,74,200,33,84,144,223,15,7,67,96,219,220,51,207,34,199,178,149,117,7,219,219,121,167,29,210,129,186,234,55,24,68,233,73,117,47,110,149,27,20,221,255,238,217,197,95,127,134,241,15,255,215,255,229,183,127,250,15,255,236,55,191,65,64,164,96,209,127,253,12,131,141,4,114,61,189,231,29,46,67,95,19,199,243,93,173,118,155,4,120,191,95,61,187,190,84,80,230,15,140,25,156,198,35,192,25,74,26,37,80,0,133,232,249,90,81,72,237,219,125,201,188,24,14,22,215,73,134,195,53,204,
194,114,148,130,90,161,229,90,168,106,26,255,162,196,199,241,179,93,56,166,43,179,48,209,219,190,31,159,247,223,244,181,152,110,159,184,59,54,137,13,107,16,43,50,172,86,189,117,211,196,133,207,49,118,76,82,175,213,225,45,134,105,21,66,3,241,207,164,223,254,34,149,206,167,171,128,113,48,47,96,6,193,70,242,194,7,57,216,235,120,73,79,117,119,143,171,143,77,79,27,178,108,122,26,90,208,249,62,124,225,223,18,232,90,59,77,63,8,175,203,10,238,28,147,39,45,236,87,234,208,213,153,184,132,195,183,157,134,81,24,88,145,169,137,44,65,167,65,206,129,53,218,203,209,71,125,189,218,216,107,199,189,217,226,180,105,28,49,169,82,3,13,211,29,96,215,53,205,19,166,165,221,239,136,236,251,178,24,246,214,11,98,247,196,182,73,123,207,97,28,147,115,61,27,40,17,202,59,221,112,164,171,121,166,254,181,5,179,214,244,199,97,143,181,224,216,37,217,161,207,131,218,189,35,252,145,64,205,144,68,1,193,236,186,245,9,248,124,115,88,131,66,244,191,51,78,
217,75,87,7,17,181,227,122,123,103,97,78,144,71,199,134,240,138,242,193,194,106,52,129,160,101,125,80,72,142,220,41,157,54,121,57,215,16,149,222,68,65,11,104,29,77,226,208,9,62,9,230,41,45,116,122,91,236,98,143,37,255,28,158,213,112,78,253,243,216,169,223,97,202,244,24,225,244,134,139,248,65,30,152,122,198,222,69,165,251,16,126,48,56,195,235,215,130,152,60,240,203,173,146,20,135,128,14,214,78,136,15,150,44,108,36,164,37,16,120,13,0,161,61,25,107,97,93,160,101,109,13,32,68,76,240,209,238,29,221,100,233,149,62,15,78,60,84,205,81,50,29,175,238,185,203,41,8,215,182,211,178,142,87,232,80,130,219,128,188,148,161,206,191,142,245,132,138,144,120,171,111,98,229,54,163,150,254,164,177,71,76,167,251,13,57,222,220,62,54,179,208,51,44,36,10,142,159,101,74,76,160,232,151,48,222,90,47,66,65,187,117,38,9,78,222,137,192,251,134,252,196,57,21,34,195,13,121,187,91,155,239,177,162,112,35,67,2,5,76,235,101,62,110,225,51,
168,100,142,138,234,196,65,253,51,164,228,91,37,206,190,77,9,143,14,172,36,142,201,133,158,247,13,10,111,28,53,187,174,205,102,59,152,120,229,250,138,214,224,94,39,47,165,40,220,223,70,16,86,219,180,65,236,153,187,78,47,220,172,121,168,197,135,53,183,69,17,84,6,96,31,219,229,198,116,146,248,22,239,40,97,69,120,161,245,215,28,253,224,54,125,114,116,212,113,32,70,250,250,236,168,8,202,144,153,166,141,155,167,250,24,191,36,16,80,81,125,45,154,176,197,247,3,106,203,218,86,6,134,60,189,68,64,91,127,37,63,221,53,252,221,98,140,185,69,57,51,101,216,94,24,7,199,187,107,237,218,143,245,207,219,82,49,65,46,36,172,229,215,101,33,156,23,75,115,170,218,50,215,47,75,13,173,169,170,9,52,41,210,109,215,43,212,117,238,173,156,117,46,38,176,59,119,43,81,97,107,144,211,218,119,111,103,20,231,157,227,240,220,19,100,221,225,28,53,252,198,43,46,147,43,109,142,58,36,21,215,183,44,247,180,65,72,190,66,239,233,39,248,61,189,156,
142,133,152,251,177,62,149,135,206,66,220,221,113,105,154,51,75,13,13,62,111,220,200,167,188,209,83,213,232,176,13,151,251,176,57,222,159,170,253,3,45,177,220,169,111,132,189,167,156,255,234,145,76,205,67,76,121,205,38,214,80,247,16,185,79,164,53,76,235,113,12,103,115,188,141,247,183,132,179,241,14,128,125,67,58,177,76,88,105,179,155,120,221,178,104,93,32,184,224,140,184,65,34,94,233,251,146,21,191,145,172,152,12,102,101,174,55,234,44,253,15,224,115,175,153,94,230,230,253,138,146,244,223,14,129,251,85,184,247,113,28,44,245,101,17,231,55,53,1,108,195,152,2,164,0,38,58,1,223,143,249,229,182,236,184,171,105,71,106,63,182,191,117,35,113,199,61,27,145,114,150,151,240,168,249,32,131,80,176,209,94,239,226,96,240,176,133,224,182,239,131,91,72,18,10,40,238,52,209,157,189,201,237,79,149,8,45,23,92,223,0,230,166,223,80,15,188,177,167,35,23,89,211,154,119,207,129,177,49,48,120,229,35,130,203,178,167,39,48,99,148,28,108,201,117,219,
119,159,170,222,240,94,133,172,31,235,75,136,187,15,191,153,52,203,120,116,122,143,235,175,104,136,244,72,77,26,27,75,122,117,185,171,83,6,133,109,210,42,190,156,14,20,173,148,211,247,13,12,201,232,203,240,50,104,94,211,22,2,195,102,119,12,58,54,184,175,19,187,224,159,222,163,123,31,160,90,180,56,239,141,0,126,29,146,122,23,89,158,64,128,253,196,49,92,16,84,182,50,152,149,152,236,15,53,45,47,115,159,206,215,142,155,200,246,143,154,239,137,210,186,89,117,124,196,245,23,244,46,234,44,214,135,206,147,189,102,83,38,84,204,253,213,86,106,92,250,138,74,80,71,84,148,165,51,43,174,123,86,38,88,29,95,115,144,91,115,134,44,51,55,131,72,152,11,175,140,242,107,105,238,128,199,125,181,196,101,50,31,58,142,185,194,196,112,116,151,238,26,235,118,166,179,72,250,228,253,169,225,25,164,0,115,227,160,114,86,28,154,213,253,204,33,168,19,190,139,32,219,239,127,13,15,104,26,57,48,175,190,30,105,95,210,54,61,120,217,224,43,251,213,219,186,
113,45,99,101,137,25,43,27,187,247,140,180,43,111,172,131,145,204,100,137,63,200,209,140,16,67,132,120,0,232,221,234,211,110,127,166,214,251,208,102,41,195,47,196,88,251,145,114,80,115,220,28,133,212,238,115,146,71,143,4,66,199,98,187,145,249,151,139,125,112,223,173,231,217,86,35,156,181,194,85,47,119,50,95,64,213,48,77,233,149,218,241,206,5,38,254,128,114,188,87,169,95,110,131,139,94,99,108,76,36,7,205,107,109,183,63,202,175,126,107,151,121,168,48,58,202,193,237,229,30,29,29,242,3,86,60,77,98,47,230,174,161,43,20,124,73,196,230,139,131,83,35,211,156,123,222,209,156,161,147,142,75,170,55,54,252,197,122,207,133,29,119,206,141,68,127,151,58,156,197,60,51,66,9,82,175,3,130,202,222,185,13,178,151,197,197,231,123,108,162,94,217,35,184,95,234,58,4,193,95,154,55,227,103,130,86,39,148,108,85,181,42,246,72,251,142,146,148,2,165,202,40,88,188,83,177,74,206,170,174,214,100,221,231,54,163,105,114,11,54,94,182,92,168,95,8,
11,67,40,34,72,1,248,171,174,160,112,241,2,122,38,76,141,136,22,118,33,238,105,96,119,244,80,210,230,88,79,13,10,176,110,133,97,112,41,151,122,244,139,75,240,85,91,191,50,185,219,16,180,160,150,167,145,238,85,128,105,49,185,207,173,192,198,241,113,102,17,38,40,37,26,13,116,22,42,218,163,49,235,44,247,176,127,64,110,142,205,136,236,81,221,165,189,227,9,171,175,215,160,93,155,5,247,79,47,186,154,193,40,183,76,57,43,106,218,216,172,81,44,51,14,250,78,45,187,152,26,107,249,160,241,216,29,122,220,106,223,56,197,234,192,162,147,163,112,234,155,145,101,58,203,6,157,64,165,213,119,166,9,112,123,231,126,104,249,130,185,1,192,38,5,6,105,38,220,218,74,31,211,214,236,124,129,42,25,233,87,185,106,226,130,126,181,58,157,89,160,230,110,174,115,246,0,249,198,244,58,153,82,170,83,153,79,56,140,99,92,136,152,46,179,9,104,33,141,118,11,158,42,132,254,133,56,186,159,178,172,227,73,147,178,19,93,182,106,173,117,69,154,49,145,216,
245,200,9,182,47,36,13,157,34,169,94,152,24,103,19,208,245,196,165,77,228,62,58,225,7,220,19,119,15,63,212,42,199,102,84,221,238,92,48,238,42,105,214,64,127,221,175,107,174,121,190,217,33,23,124,23,121,161,199,93,53,224,205,13,18,4,35,18,54,253,250,189,24,120,194,17,216,71,41,25,58,231,48,28,179,249,118,57,216,128,205,137,237,92,227,140,29,72,233,137,67,163,67,119,152,231,235,160,169,234,92,244,216,93,143,194,25,41,157,138,221,128,168,173,222,13,59,241,146,203,25,251,6,177,228,225,140,221,249,8,137,97,13,142,67,97,47,75,147,119,142,155,48,157,251,129,179,178,87,118,213,241,171,246,189,224,147,86,116,77,81,160,213,245,115,81,122,179,22,102,34,72,29,50,171,173,35,71,175,154,102,171,138,54,75,160,149,56,186,166,220,187,154,217,107,1,148,240,178,58,157,133,148,94,59,222,26,92,85,202,102,236,139,229,158,56,133,19,163,226,194,166,228,189,233,150,187,150,37,212,136,82,42,247,86,131,80,190,26,194,252,160,177,52,84,6,
212,123,215,34,245,13,78,199,123,80,132,64,32,160,221,178,35,25,61,117,124,185,138,253,12,94,212,97,163,39,110,2,91,115,216,164,135,172,238,67,237,165,29,23,138,184,37,147,65,146,217,52,203,84,85,189,19,133,23,113,48,87,138,187,219,103,104,208,209,184,172,139,152,97,76,165,48,9,54,177,93,39,52,13,250,6,178,117,178,187,68,9,109,61,103,218,186,168,28,166,169,86,209,224,194,48,154,7,96,99,63,246,114,238,53,49,105,115,18,45,93,196,217,63,6,174,198,227,74,57,64,113,37,46,244,149,77,43,142,105,131,120,239,115,229,60,251,70,213,187,234,146,209,136,204,49,40,178,153,123,83,113,175,178,21,72,127,95,192,220,232,172,113,1,207,35,152,236,115,246,170,235,25,87,207,64,237,44,139,119,238,149,169,179,23,243,177,28,52,115,39,109,46,211,56,1,62,189,88,155,188,93,57,123,233,128,114,94,56,124,93,201,178,30,85,221,51,140,171,90,86,182,148,57,214,212,235,26,151,224,48,89,171,217,233,99,212,106,200,225,179,190,101,145,42,70,
110,180,53,129,189,25,191,204,89,150,82,203,55,96,222,59,41,95,176,102,16,144,168,20,191,86,176,169,211,188,83,218,45,125,93,21,216,42,103,246,74,135,11,212,96,184,237,212,12,232,41,232,9,221,72,224,110,102,43,231,112,211,240,249,29,56,212,22,213,73,94,167,229,158,210,238,99,48,231,233,219,135,202,128,3,84,194,200,86,121,117,186,191,224,182,182,141,22,184,45,210,214,146,14,192,46,194,198,217,2,41,78,7,176,167,85,227,212,25,194,2,199,236,139,47,151,132,100,167,66,73,126,60,234,140,123,253,228,174,126,215,222,141,146,232,197,156,28,42,225,137,246,6,140,150,66,163,154,217,121,95,25,6,112,45,207,8,126,210,188,14,156,155,233,189,121,133,116,53,204,180,213,60,100,8,74,85,26,123,21,234,36,124,210,179,216,81,102,41,160,234,228,101,211,148,174,243,103,255,10,235,84,174,6,108,104,91,225,190,206,123,29,168,170,217,208,227,118,48,247,148,244,116,34,124,109,59,80,62,67,136,33,40,146,96,141,226,243,120,238,217,37,181,102,153,181,
7,244,60,77,28,93,191,55,165,142,184,23,187,60,124,168,204,51,101,230,206,194,203,96,178,204,240,18,53,95,218,86,231,58,203,68,77,252,76,92,237,106,238,107,172,174,11,17,231,136,188,163,93,231,78,111,226,58,230,203,134,231,47,102,208,231,179,107,12,216,161,68,170,242,203,36,231,188,2,141,85,57,47,183,220,247,118,230,237,206,36,148,105,247,54,26,28,45,114,153,150,121,123,121,173,112,97,131,59,79,163,178,103,221,125,247,93,121,177,75,110,213,241,2,163,120,23,8,79,2,187,30,215,170,187,134,49,52,189,169,81,111,93,239,187,24,116,214,84,213,185,58,108,137,225,171,21,12,175,110,127,208,218,89,8,23,101,211,61,152,61,119,163,205,59,229,182,91,112,142,221,32,66,95,196,214,215,60,220,116,116,93,51,143,212,250,156,70,189,186,178,46,23,178,117,196,85,206,182,175,117,61,153,85,40,5,210,54,32,55,122,180,203,251,65,174,65,244,36,133,9,37,121,15,33,178,145,141,123,70,215,185,87,187,131,84,113,118,201,147,135,137,196,43,117,189,
21,239,194,74,156,221,127,28,94,242,171,107,79,141,168,161,244,93,164,87,63,193,8,247,237,47,64,85,130,251,185,124,85,210,5,121,53,76,52,222,141,85,75,90,52,172,131,247,87,134,180,48,173,31,37,195,196,196,62,9,44,140,23,180,244,144,160,113,38,238,249,250,107,80,201,66,208,146,231,183,28,139,203,217,171,74,141,230,173,130,74,249,155,219,25,123,19,194,102,225,110,240,229,146,18,98,104,198,54,61,109,117,78,47,72,211,48,25,157,24,57,163,29,161,99,14,213,211,4,175,70,113,29,121,186,185,5,50,137,56,214,98,141,172,48,81,87,222,197,195,85,168,7,15,92,135,206,136,23,123,249,40,221,98,169,142,144,26,128,171,103,53,226,109,148,81,59,53,90,147,218,202,187,100,196,216,170,223,248,146,139,31,90,158,218,220,212,203,165,247,56,100,150,32,213,16,46,202,170,177,17,122,47,159,40,107,170,239,216,26,120,220,210,69,170,182,47,169,243,105,235,167,124,207,96,106,153,149,157,234,152,13,182,207,145,42,253,248,121,206,246,199,8,58,102,61,
10,139,168,180,62,210,118,204,118,28,3,46,128,233,125,147,188,79,203,229,234,43,216,99,103,182,88,228,73,206,141,244,212,223,115,91,204,251,235,93,161,64,62,41,93,92,150,253,242,102,56,203,82,47,222,178,191,149,88,94,238,27,71,130,227,186,118,249,26,17,219,44,146,218,218,95,47,65,159,244,177,197,181,121,155,149,110,32,200,233,79,66,195,23,251,106,129,184,84,109,254,52,38,132,233,150,89,202,245,177,233,222,26,235,149,65,4,254,246,197,96,7,111,248,174,26,200,63,239,95,53,234,120,240,45,116,198,73,4,130,87,152,36,134,163,79,247,11,206,46,95,207,98,101,87,214,237,147,19,189,9,221,138,105,119,108,149,230,38,52,74,46,41,151,51,134,155,246,172,124,88,168,116,171,6,35,120,148,112,149,115,251,193,176,136,20,227,142,1,70,229,186,14,11,131,123,235,120,163,227,176,4,246,40,30,216,251,96,64,55,58,129,7,131,170,93,240,166,235,251,226,173,179,15,120,89,84,185,83,22,251,60,23,85,247,234,51,173,154,215,229,14,206,213,108,107,
90,61,168,100,26,211,131,44,171,7,197,122,126,236,165,61,62,117,48,62,199,106,108,247,73,7,151,40,45,79,195,119,204,224,122,206,30,59,41,115,221,48,207,62,54,78,51,219,178,20,167,177,105,155,50,180,19,213,88,42,235,42,180,217,216,53,138,252,106,146,225,156,173,77,69,51,119,21,50,113,93,183,145,158,4,83,49,71,139,99,43,147,70,166,37,140,43,207,104,227,40,165,175,49,8,251,232,208,159,218,97,26,114,100,85,123,7,37,105,125,53,157,187,209,219,188,126,74,209,8,93,43,221,171,64,144,221,74,46,236,89,122,193,180,117,170,230,251,245,66,106,222,214,78,141,202,49,122,16,154,124,185,90,145,215,230,97,46,210,104,88,181,247,83,254,57,173,161,222,47,231,49,201,181,142,148,145,205,198,6,146,86,234,131,184,210,245,243,221,56,10,226,142,171,82,50,18,11,7,161,230,121,5,88,150,28,121,64,17,31,206,66,217,142,16,246,28,224,241,147,209,228,73,100,142,206,72,216,71,30,117,129,53,179,151,38,82,33,189,227,189,199,32,176,183,86,
158,153,2,56,216,95,229,3,101,134,190,45,80,26,247,171,33,88,116,47,234,105,225,170,69,51,109,91,215,132,148,111,19,215,23,247,119,249,224,174,221,58,174,6,207,59,116,197,241,99,64,140,29,182,76,116,203,74,95,13,179,253,139,75,160,239,247,213,47,236,32,118,246,190,108,4,195,108,20,124,117,46,74,164,251,130,198,169,246,173,142,94,61,197,146,79,86,49,212,116,100,165,12,98,131,238,227,44,103,166,75,215,82,101,219,18,224,84,68,78,58,158,141,172,223,249,175,243,53,44,73,142,123,163,137,166,3,0,123,59,250,166,109,107,23,25,62,11,227,11,205,156,150,108,170,238,139,232,174,183,78,16,131,182,80,0,107,148,156,24,63,127,245,148,25,29,97,231,8,116,197,79,221,63,195,78,142,81,57,152,61,154,104,68,220,6,54,177,36,38,217,44,111,226,132,73,251,197,66,65,2,97,6,91,206,124,25,250,128,125,48,150,140,244,56,40,88,255,68,85,182,181,4,25,247,93,102,246,50,222,135,192,234,73,228,198,194,164,231,250,68,152,188,150,183,67,
98,73,166,131,71,78,169,132,207,231,171,152,129,88,173,199,56,67,89,3,192,235,131,19,176,132,58,117,200,19,180,173,9,145,13,129,160,235,211,72,172,64,208,143,9,204,16,4,194,74,26,242,186,130,246,175,17,43,93,175,199,37,234,247,203,133,93,39,213,177,8,129,109,20,2,96,39,171,96,129,231,155,32,190,185,11,14,2,123,61,67,223,226,211,158,14,148,114,102,196,162,57,232,123,179,77,200,66,207,229,237,236,130,89,63,29,28,24,4,157,235,1,132,116,230,26,141,53,17,23,108,107,65,37,200,157,16,170,91,106,76,252,75,1,9,121,114,126,222,221,238,204,228,234,176,178,172,146,2,112,220,145,222,217,190,92,225,161,105,22,116,2,32,100,122,244,190,88,204,103,24,116,250,50,28,163,2,157,109,61,20,120,101,122,49,24,62,110,254,180,65,181,136,147,231,66,158,66,122,232,4,190,149,244,54,184,11,207,86,93,135,144,98,175,11,66,242,241,194,44,60,147,41,217,109,78,239,187,48,40,125,221,50,33,91,195,102,112,18,64,230,34,57,135,228,184,
149,220,213,242,148,251,208,236,80,238,188,151,50,231,10,56,28,212,181,75,184,118,157,62,218,8,195,254,8,154,106,13,153,249,106,181,85,143,41,65,81,59,174,22,84,11,61,18,251,204,38,206,175,25,45,46,170,93,49,231,153,109,87,203,191,123,32,17,231,85,24,228,92,134,1,86,63,4,248,80,215,160,205,245,209,122,91,170,183,203,172,229,177,137,176,89,223,36,107,208,151,105,118,178,155,211,158,65,219,208,12,27,153,109,193,112,9,218,140,238,195,248,230,146,196,88,213,103,205,80,84,19,175,249,219,234,151,10,151,238,18,210,234,206,199,232,235,9,85,10,5,131,138,128,152,40,71,147,164,107,144,105,94,187,217,135,67,81,149,219,71,204,99,22,238,92,101,160,149,54,244,196,57,108,196,182,82,231,171,53,126,172,9,161,106,229,57,8,225,58,187,15,123,26,64,125,74,202,46,136,159,185,49,139,247,245,30,121,65,227,89,194,13,32,106,15,253,162,7,220,244,224,173,122,134,162,251,11,57,60,225,4,129,74,76,1,25,31,12,162,102,168,177,40,242,34,
15,148,122,23,254,64,249,2,50,174,179,38,177,124,7,232,167,86,236,137,104,119,183,142,142,15,195,216,140,37,28,194,21,222,125,20,0,82,161,60,220,32,151,112,119,121,201,229,115,225,140,52,174,11,222,57,56,187,118,154,7,86,255,64,192,166,15,132,115,120,122,129,193,194,120,171,192,185,144,3,70,70,212,6,151,9,206,79,160,6,183,6,56,194,91,17,19,221,126,248,146,77,196,154,46,157,149,202,79,159,51,219,71,124,202,239,27,193,60,54,194,226,220,4,208,16,192,165,158,160,116,130,53,176,6,238,221,115,201,111,9,165,27,72,168,226,65,216,117,223,47,128,32,251,55,116,99,125,230,150,201,227,165,28,180,122,104,191,15,238,177,107,231,97,66,102,87,149,100,217,140,138,42,202,117,36,60,35,44,94,152,52,87,89,231,200,202,77,136,236,181,81,72,10,208,218,60,95,148,139,253,82,31,8,73,14,37,105,24,20,29,161,128,25,57,125,181,240,204,207,210,139,130,97,176,198,228,0,183,81,218,239,112,131,175,245,244,102,214,151,221,216,36,104,148,240,
75,163,232,19,162,150,193,226,233,88,237,155,76,178,214,11,99,79,6,212,243,238,224,228,14,128,7,73,99,177,53,238,141,187,61,120,186,247,238,81,127,103,113,179,8,172,93,31,121,82,168,235,252,23,216,167,139,148,114,49,144,239,46,46,158,155,207,161,138,102,125,212,76,228,109,108,106,147,155,62,229,206,61,147,3,203,148,26,106,114,243,50,194,20,121,122,25,143,81,40,41,236,86,187,251,53,148,254,81,251,85,147,5,164,28,28,130,99,140,70,155,113,145,77,113,116,55,17,37,150,45,225,146,50,210,140,252,90,117,148,164,203,13,23,22,63,35,67,68,28,34,16,232,5,222,234,76,253,69,94,132,253,146,68,178,108,46,41,198,96,163,112,47,192,107,69,6,155,200,172,86,83,39,232,118,250,180,253,211,86,115,227,46,61,227,125,243,46,175,134,105,238,203,114,193,124,51,187,179,149,215,228,123,206,246,51,145,239,71,189,186,53,77,63,128,183,203,36,76,194,96,182,112,236,180,23,175,105,111,146,116,24,122,174,123,193,121,135,100,179,113,97,20,209,219,136,
184,191,91,92,82,2,251,234,135,35,234,216,114,72,35,138,220,194,235,59,222,198,166,168,83,195,144,27,43,14,157,27,94,51,43,59,20,85,166,184,103,1,60,187,184,165,77,54,228,148,84,180,109,78,204,104,124,40,186,108,203,146,51,209,218,67,149,177,137,213,1,11,60,149,23,162,87,235,90,106,222,240,13,174,3,24,157,22,60,116,76,114,203,144,60,23,166,217,132,39,29,50,241,97,230,38,103,67,30,216,70,151,178,187,208,87,71,143,215,183,93,231,92,163,144,52,96,209,159,92,205,140,215,121,9,4,109,73,53,228,163,229,36,71,110,153,87,228,188,36,111,41,30,7,147,200,145,41,119,143,108,125,166,167,54,116,203,43,230,75,87,114,145,149,106,153,152,213,119,69,38,220,139,179,20,36,200,34,112,169,15,40,124,200,211,104,10,226,216,78,14,151,215,21,159,231,129,67,206,13,173,95,0,133,255,32,11,185,53,16,44,54,30,145,55,52,18,59,181,77,100,163,110,123,92,58,93,222,202,177,64,6,11,78,203,19,159,122,28,86,74,169,34,17,137,149,
172,15,76,177,28,60,244,192,203,205,22,32,29,18,187,5,101,84,24,120,58,93,101,134,21,91,158,219,202,26,145,179,252,72,64,122,108,175,117,122,89,59,21,31,118,171,107,49,48,64,38,248,142,9,151,221,69,51,130,159,3,38,85,24,5,78,218,186,27,74,99,119,41,83,67,193,56,44,113,61,253,10,173,132,107,218,104,235,148,42,41,82,153,73,98,199,122,141,242,31,190,96,41,159,199,63,168,194,114,56,202,100,12,181,171,56,62,105,243,218,105,0,156,0,117,218,197,121,41,31,172,71,119,239,11,73,54,197,89,26,189,118,34,68,0,43,178,141,31,180,178,179,245,132,48,229,154,36,245,110,225,51,224,11,152,120,152,55,191,116,97,221,163,9,232,172,35,184,132,79,151,29,80,105,102,196,99,218,90,198,34,254,146,122,221,225,156,190,224,120,133,192,202,96,36,197,218,57,229,158,17,216,246,97,72,101,227,130,36,71,73,116,228,203,94,178,36,169,226,173,147,0,166,105,135,201,86,216,151,37,213,164,71,205,22,16,173,88,88,194,109,119,70,137,243,130,
41,186,104,59,79,4,186,131,147,227,61,58,170,188,149,54,88,184,45,0,14,81,222,62,30,141,58,155,123,73,72,112,202,237,133,123,198,226,163,195,174,228,139,102,163,177,67,12,251,142,52,142,64,202,177,96,193,96,13,1,128,32,9,18,144,150,47,142,250,33,43,223,32,149,201,146,99,19,104,60,26,0,211,48,131,9,148,113,78,18,48,179,32,116,223,179,210,34,106,58,73,179,167,41,250,157,145,59,95,17,226,61,87,98,159,175,59,30,109,191,42,131,166,181,193,106,124,8,136,95,109,42,67,51,98,21,145,52,84,29,235,120,58,198,29,195,214,53,83,132,233,189,32,103,160,205,131,12,167,251,42,220,163,69,12,75,201,178,244,2,136,29,115,247,136,157,33,9,58,56,29,33,173,13,223,50,81,96,80,67,99,195,18,187,243,85,57,25,113,135,100,1,189,28,144,182,28,82,74,8,169,4,196,71,144,236,134,76,107,31,140,35,177,214,71,219,166,18,51,190,30,113,137,72,79,174,57,17,217,2,79,121,88,130,213,104,195,97,152,31,80,195,133,108,135,15,
46,84,176,241,221,77,0,252,4,246,7,111,215,30,223,198,220,201,24,236,46,100,54,152,124,62,139,229,26,226,104,77,69,17,88,110,194,141,183,169,115,28,131,184,16,93,48,206,230,86,37,45,111,32,189,35,76,102,69,207,57,116,127,218,22,99,56,164,195,91,48,230,188,136,49,86,247,73,75,161,180,222,86,206,202,112,236,228,45,61,197,121,61,99,8,61,55,107,221,75,22,47,64,134,15,65,99,215,187,188,226,189,105,131,56,232,176,123,21,38,41,61,90,146,17,240,177,99,228,51,240,193,193,2,31,57,121,97,29,107,80,119,252,111,50,92,17,88,149,12,74,82,60,184,128,125,144,225,132,103,167,62,81,82,73,126,118,91,93,95,65,105,45,124,40,35,39,27,13,29,123,254,233,11,221,58,74,50,243,10,78,40,76,139,107,178,68,83,55,23,189,251,48,71,252,142,98,58,205,165,67,221,61,219,187,228,169,187,164,62,86,197,163,150,65,104,1,83,77,233,67,132,179,254,18,88,113,29,143,186,145,54,28,14,181,101,192,253,34,43,76,164,177,205,189,140,
125,90,198,225,227,179,129,119,130,201,95,190,39,220,202,146,13,55,129,23,77,174,55,137,232,228,29,113,125,228,76,122,121,71,188,220,30,5,188,130,242,215,182,29,158,189,13,159,9,209,137,9,3,22,136,236,209,161,136,181,23,9,142,189,56,37,34,196,14,33,165,206,24,8,16,216,50,41,207,198,35,39,2,88,169,23,61,154,215,60,19,4,214,249,230,27,168,36,168,36,157,226,11,202,105,235,27,215,171,110,10,2,54,124,156,137,212,225,130,216,107,68,225,5,166,14,190,109,76,10,154,99,246,234,125,45,5,245,159,230,75,252,147,171,103,139,242,215,67,70,10,80,153,149,148,89,96,128,23,116,136,223,78,223,44,228,25,89,176,39,41,210,233,0,82,32,116,249,224,100,159,64,67,26,63,177,23,7,60,251,59,162,75,142,60,139,144,145,124,65,209,202,146,121,2,177,31,173,16,229,5,64,31,210,224,163,246,240,108,80,10,246,208,179,248,224,32,9,0,30,202,176,233,39,226,67,230,91,132,254,144,121,80,146,11,57,140,16,143,97,192,254,9,197,93,84,
0,171,20,6,88,144,33,8,132,72,224,217,126,190,13,196,231,61,192,31,53,29,1,13,159,211,105,150,224,3,2,178,121,30,84,240,63,100,190,69,16,15,153,111,145,204,67,230,91,228,249,33,243,45,162,250,69,23,80,194,247,3,195,195,255,192,128,196,63,48,144,46,200,214,106,0,7,50,111,20,228,125,35,188,188,249,164,159,250,190,21,153,94,161,190,1,74,158,31,128,255,175,237,24,146,230,129,193,70,64,250,114,126,123,253,73,105,13,89,191,60,22,252,192,240,159,127,96,86,242,31,152,52,248,7,6,160,254,192,224,5,63,48,164,208,143,59,67,226,143,59,160,119,219,143,193,132,31,24,219,231,15,12,130,252,3,195,34,124,195,60,60,6,5,18,60,27,246,3,192,127,199,31,145,16,63,252,197,255,93,250,43,32,205,253,131,92,56,1,17,144,126,121,140,254,140,39,25,18,27,246,235,227,155,37,8,108,250,23,75,144,2,207,47,150,0,224,240,47,150,128,216,207,188,31,34,97,165,63,68,194,164,126,136,20,3,253,16,73,244,244,67,164,229,15,76,
123,248,3,35,252,250,129,25,138,126,96,150,116,141,237,18,49,8,241,134,159,97,203,251,207,176,140,248,107,152,103,243,252,208,21,33,252,161,43,18,242,67,87,128,244,67,87,16,242,135,174,32,214,199,143,33,175,63,48,62,250,15,12,54,252,3,131,250,250,5,115,248,16,36,127,242,35,78,4,7,42,2,155,18,121,212,226,127,79,158,158,126,210,77,70,255,164,155,77,248,129,243,137,126,210,253,140,252,129,249,27,249,74,243,30,196,130,39,25,207,59,208,31,197,255,175,159,116,254,157,243,238,255,169,63,127,87,117,255,255,251,253,99,176,239,27,230,209,243,226,25,61,108,104,129,253,177,245,244,71,247,119,203,15,204,31,168,187,165,11,107,35,29,201,35,233,223,67,191,35,178,31,75,229,223,59,159,202,191,96,208,233,160,28,120,41,39,0,22,26,252,119,203,3,223,15,76,75,20,249,222,64,99,61,127,63,121,252,171,254,201,18,226,18,229,199,190,195,243,255,54,143,224,159,240,181,119,233,166,235,202,102,104,94,154,205,197,68,96,3,197,121,10,108,114,228,
11,158,202,62,16,50,187,219,165,169,7,7,17,13,245,157,111,56,223,248,179,85,17,124,189,71,232,136,41,97,127,186,82,26,139,65,252,26,215,106,37,73,179,157,137,126,76,175,176,184,8,143,179,225,128,0,17,185,2,82,167,211,106,52,198,222,2,124,185,252,21,247,84,220,51,71,211,23,115,193,240,108,131,39,148,48,65,88,85,206,231,27,254,175,135,87,249,199,137,26,135,192,234,67,79,68,175,131,23,144,138,197,218,61,25,56,193,2,216,132,97,53,54,195,135,131,196,246,171,254,8,72,206,191,90,91,227,155,130,120,16,202,125,111,190,186,32,228,92,152,106,12,32,129,148,43,100,15,250,139,202,34,149,69,66,25,205,211,242,83,209,255,11,217,253,125,88,127,32,219,80,240,137,26,206,205,144,127,221,230,152,102,243,147,253,151,197,190,95,167,217,129,118,248,146,242,89,110,87,27,233,57,77,136,250,70,162,101,70,10,31,118,2,198,223,205,91,176,98,134,22,52,139,71,252,190,133,65,209,209,4,185,5,65,65,121,180,74,26,29,98,104,121,153,191,147,
163,254,165,156,70,187,233,145,158,38,244,175,114,48,232,152,225,221,41,64,248,72,139,14,43,255,14,110,185,11,98,34,217,154,102,145,111,168,6,253,44,118,227,73,97,29,234,96,161,146,210,87,123,160,248,86,86,76,120,104,137,46,64,121,159,164,253,212,213,18,59,130,4,6,170,64,98,65,50,18,174,179,121,77,175,168,33,235,135,171,57,95,77,27,242,64,40,119,169,51,199,44,246,195,178,91,157,248,246,224,11,101,117,9,37,132,182,68,27,139,159,210,177,71,187,73,126,145,79,17,27,16,248,201,9,123,36,237,219,84,115,46,176,250,54,149,253,176,181,82,97,183,95,121,190,101,200,76,174,104,225,129,91,133,208,108,178,202,69,179,30,109,38,74,64,160,202,119,136,12,223,89,205,229,200,22,74,242,229,114,67,53,10,202,248,166,109,77,189,124,37,28,28,194,132,74,131,184,171,191,2,126,251,117,59,162,71,128,158,136,73,164,174,118,196,21,223,48,151,9,4,244,146,98,252,186,232,163,9,17,88,18,226,105,204,153,99,103,165,149,102,197,124,177,222,174,
74,238,37,249,126,186,238,155,145,245,177,135,115,95,170,253,56,119,97,48,5,30,14,23,101,47,15,135,9,108,152,54,138,76,220,126,250,79,194,15,175,107,190,47,55,109,140,235,18,192,19,8,122,242,48,196,251,185,0,69,35,232,250,239,171,81,103,63,38,248,190,26,21,146,134,191,70,222,126,221,154,34,177,142,239,91,211,152,144,244,140,154,110,10,215,74,54,124,92,109,253,39,179,202,92,114,37,228,241,42,121,90,173,218,7,36,109,153,211,238,108,92,74,248,64,218,184,127,162,183,196,96,129,102,27,124,8,245,186,117,87,122,5,124,185,25,83,83,190,4,59,119,246,171,121,207,73,138,122,208,65,139,47,222,215,239,213,81,207,179,176,190,47,142,41,58,0,68,168,23,144,155,238,12,103,63,235,23,121,136,104,241,129,4,250,189,85,176,207,74,206,200,52,214,210,197,251,229,246,205,134,113,159,43,98,251,224,53,74,158,229,61,90,187,199,125,185,88,193,46,90,38,124,238,66,79,33,29,240,225,172,161,176,150,122,224,56,200,162,32,80,146,239,182,119,213,
213,38,150,253,181,65,217,95,240,125,118,76,227,131,215,188,3,204,48,151,187,77,25,106,195,244,126,187,126,206,221,59,197,162,225,100,207,100,234,120,91,207,20,228,109,199,36,60,237,185,68,4,223,120,182,12,1,163,223,75,61,52,104,27,20,156,68,179,29,149,74,103,178,107,11,236,253,37,109,33,176,181,133,35,87,24,121,79,137,108,95,156,235,220,47,21,10,157,66,136,80,205,155,46,22,179,34,54,40,104,185,19,233,40,161,51,113,150,116,248,38,64,199,225,29,73,144,145,126,70,98,45,240,243,42,61,154,76,70,166,50,64,112,214,187,174,53,232,109,238,48,26,229,13,122,24,249,60,65,235,109,225,4,154,164,65,248,197,105,240,211,126,169,183,173,35,212,133,46,221,241,220,140,147,115,53,108,189,245,139,211,241,12,19,100,122,9,182,47,140,41,61,26,171,117,254,79,198,166,166,214,227,94,174,126,114,52,181,112,126,207,194,76,19,170,36,171,150,91,149,217,52,248,181,35,62,102,200,130,197,228,165,162,86,99,140,24,12,127,201,179,209,209,2,146,195,
11,16,216,6,71,73,0,153,183,26,115,32,118,172,5,210,80,54,153,22,247,114,95,52,1,73,13,124,28,215,227,220,64,191,15,131,149,222,217,93,205,219,80,116,113,240,201,120,246,195,111,9,123,238,15,178,146,51,114,215,31,114,13,235,116,71,66,180,217,102,235,202,178,87,34,41,169,94,17,167,162,2,64,36,214,50,218,110,41,130,64,8,67,16,248,252,56,151,43,229,69,69,116,159,23,100,137,146,148,160,206,8,74,69,35,49,72,182,216,240,250,37,204,183,21,125,224,117,240,28,143,107,153,118,123,11,127,208,182,90,159,68,77,119,51,162,138,154,9,151,141,249,42,208,202,220,193,97,85,120,5,34,196,102,35,79,117,184,182,198,48,185,249,57,19,219,190,76,28,8,34,225,230,234,42,106,97,39,49,48,161,68,111,34,110,178,65,95,75,140,76,141,68,99,54,55,56,26,92,225,12,110,56,34,78,1,132,46,246,157,224,181,14,40,29,30,198,154,204,208,208,96,68,222,219,190,246,74,134,41,124,210,34,153,55,179,166,146,106,42,91,225,207,245,249,125,
134,55,153,10,197,224,235,229,102,19,64,134,161,202,55,63,94,18,201,128,231,249,100,50,5,198,60,97,227,94,135,166,61,50,21,255,17,149,185,127,255,29,21,64,244,89,190,41,230,165,20,30,101,127,158,92,140,118,36,246,185,141,76,63,153,87,26,170,173,190,57,90,120,211,56,2,234,245,188,46,102,220,65,61,45,15,159,93,121,4,182,95,124,196,64,254,216,43,140,133,183,80,222,39,85,153,1,165,178,88,250,196,167,89,245,60,133,82,197,64,12,165,25,179,177,209,14,135,60,91,91,140,123,3,146,65,161,45,107,30,120,31,165,213,116,110,210,65,99,190,106,87,238,167,234,178,62,142,100,165,11,218,99,158,210,233,217,247,211,203,86,173,55,251,250,230,224,245,248,148,132,63,42,156,195,46,52,227,18,255,94,205,181,157,38,157,164,203,210,239,156,251,56,242,190,218,23,238,205,179,211,98,235,70,53,156,135,145,48,202,49,93,36,70,49,113,95,79,98,16,136,71,194,186,163,166,34,177,184,172,143,47,171,205,98,21,171,20,42,120,84,135,197,228,156,74,
217,104,212,226,84,83,157,251,250,47,73,149,244,181,145,199,171,199,70,44,188,82,17,206,102,50,12,123,246,248,75,220,43,229,114,159,76,101,186,102,39,129,80,46,116,214,27,248,58,233,161,3,255,86,130,19,8,190,71,31,251,126,114,3,138,233,109,66,41,158,141,247,249,128,98,178,76,65,114,180,74,196,175,190,245,241,123,251,22,240,235,105,15,4,129,63,209,127,117,46,81,37,251,171,115,53,204,170,95,157,75,91,37,255,234,92,74,109,185,221,217,58,53,120,36,145,237,203,121,181,155,250,113,98,106,174,14,151,38,122,34,180,189,221,23,179,53,207,92,147,77,84,215,48,254,49,3,167,136,146,150,219,84,151,203,11,52,146,144,58,84,148,45,125,53,93,183,218,39,60,253,228,208,244,246,46,251,38,25,167,28,111,69,172,149,161,83,43,100,38,152,229,232,18,133,0,188,40,141,243,251,212,88,52,191,48,159,41,45,254,190,43,232,181,19,23,81,123,139,91,96,201,68,59,183,123,51,154,119,207,68,222,42,237,241,57,85,242,11,178,164,31,149,153,213,74,
179,89,202,152,146,95,154,206,201,149,158,79,213,165,236,20,54,204,175,175,229,153,251,206,125,79,205,163,193,239,166,165,142,135,173,123,177,231,225,238,41,33,187,219,87,110,147,89,232,216,149,163,131,1,109,11,253,10,78,184,70,151,215,100,205,79,119,29,149,196,118,116,1,175,221,43,89,168,119,106,212,234,120,20,163,93,174,31,190,25,191,157,139,32,79,139,120,160,239,190,87,106,247,116,90,226,154,205,212,136,137,203,104,50,213,129,139,205,86,217,184,8,140,96,147,214,63,168,94,119,160,1,135,237,234,189,18,150,232,138,53,173,185,137,110,225,82,161,160,114,169,239,234,128,228,173,145,34,127,189,217,30,218,245,254,215,70,232,228,36,97,251,136,184,65,127,180,180,115,28,135,189,87,64,4,227,37,149,200,41,111,121,139,119,44,60,84,171,217,221,243,233,164,125,11,31,111,137,229,163,138,138,215,220,221,178,22,6,128,52,65,146,61,129,204,150,243,172,192,28,214,201,123,113,131,72,199,62,79,30,137,31,83,145,107,193,109,14,153,192,220,183,146,172,255,1,
168,40,164,217,250,216,109,232,203,165,76,70,102,2,23,232,46,91,91,183,16,188,250,96,246,33,204,12,86,206,163,29,175,140,21,150,73,108,136,146,40,178,64,158,146,139,192,221,240,242,166,232,127,76,201,122,219,44,34,46,100,167,51,213,124,126,216,156,181,238,166,6,45,70,99,173,220,11,174,13,137,247,136,207,92,116,97,155,85,119,238,184,104,120,47,230,83,95,132,199,7,45,169,232,117,94,208,184,237,156,169,152,254,169,44,235,87,200,81,103,119,202,234,97,152,166,136,209,95,112,176,235,171,203,238,106,27,210,191,75,220,100,169,239,170,170,114,184,11,101,158,137,232,29,12,236,82,60,18,102,240,11,210,97,107,77,100,246,14,75,53,232,144,199,17,188,62,178,128,91,152,97,119,139,41,83,99,105,162,129,57,195,228,39,250,39,163,157,201,232,191,251,15,253,46,110,17,200,16,131,82,143,197,130,73,188,149,232,142,158,124,17,85,219,236,156,240,21,233,223,94,61,77,206,3,151,227,23,176,100,220,131,26,114,241,77,248,90,120,191,42,167,79,73,73,41,
247,28,14,28,28,183,240,252,73,29,167,177,55,46,174,122,8,147,218,209,187,104,77,87,246,244,93,190,73,234,250,180,16,63,56,72,23,164,19,57,119,149,196,189,212,155,224,213,193,240,122,142,23,25,170,104,230,202,225,178,48,152,45,110,164,65,162,178,126,169,28,31,38,75,77,8,140,73,107,86,183,194,145,89,18,181,167,60,213,227,171,38,127,44,116,221,217,105,207,202,215,126,0,225,222,84,88,135,173,162,225,28,158,148,139,78,199,55,159,13,78,67,128,229,147,105,182,22,205,150,160,113,191,145,192,67,94,155,32,147,218,199,247,91,248,222,212,48,79,62,150,204,133,193,152,248,90,35,206,221,141,130,190,173,45,54,87,162,166,160,101,107,206,230,251,135,143,223,46,250,184,181,30,197,100,130,117,242,102,62,213,96,50,89,164,54,227,35,67,103,152,43,121,223,245,15,205,205,231,119,87,29,252,85,125,196,100,210,241,185,120,132,222,9,8,77,35,165,81,13,219,232,71,223,181,26,71,1,79,92,101,58,186,152,161,60,170,231,58,76,120,251,124,113,30,119,
105,158,145,175,105,134,23,192,223,181,95,234,170,190,149,10,102,236,93,67,163,132,186,198,231,216,51,105,17,253,178,115,175,181,170,209,57,63,37,11,175,206,170,15,193,232,81,152,197,124,90,237,58,7,3,197,230,9,166,252,169,255,84,26,119,53,50,169,245,164,249,114,200,156,163,11,206,101,15,107,250,80,254,142,214,19,229,60,122,234,90,76,188,52,37,141,211,185,164,215,188,149,93,71,23,196,95,55,29,175,51,38,179,81,189,226,138,154,72,227,20,250,171,58,133,93,170,112,255,136,157,116,185,231,148,185,147,19,142,162,62,17,171,218,50,235,189,143,107,35,164,217,236,7,156,95,154,159,134,246,62,60,20,189,6,133,213,194,25,78,48,38,179,145,8,24,140,59,131,125,228,27,12,152,217,202,220,228,30,161,177,18,236,238,192,242,2,184,183,71,140,22,130,159,7,228,127,236,254,208,247,221,103,245,54,142,218,107,70,206,47,87,157,154,27,75,134,162,94,198,121,108,181,96,17,136,146,208,45,176,184,15,118,105,223,6,119,13,47,53,131,185,133,106,232,177,
118,65,162,195,190,21,58,181,84,18,179,224,28,223,214,55,159,73,239,182,43,117,121,59,37,24,232,219,67,80,61,187,233,159,203,138,184,196,130,179,176,160,169,145,74,18,175,196,197,6,24,155,190,121,171,32,18,102,15,199,144,32,16,8,245,205,254,14,73,22,219,159,127,232,135,25,191,123,185,212,111,191,95,46,197,255,35,94,46,5,1,35,134,72,215,199,59,214,209,21,63,127,125,34,120,120,36,159,247,132,66,104,192,59,190,113,171,218,238,89,133,74,225,108,216,35,78,202,78,176,161,24,151,103,165,137,148,109,207,23,26,108,19,13,78,239,133,248,102,57,179,107,182,223,142,8,129,12,138,178,222,155,230,102,127,26,158,87,203,164,169,174,188,112,159,235,119,179,59,60,229,148,167,115,211,247,219,165,44,86,235,57,83,14,127,45,223,233,1,172,114,184,189,58,196,70,240,35,203,122,195,33,229,67,38,21,168,137,97,190,171,230,61,233,173,105,81,103,230,243,145,113,157,101,80,84,123,118,104,228,77,89,33,100,4,65,66,132,194,23,197,104,83,84,229,154,
87,231,193,224,245,44,253,126,225,219,240,46,222,27,140,70,182,24,171,232,43,209,194,171,107,96,189,53,116,86,160,76,109,139,152,60,128,209,214,1,199,125,32,111,133,246,251,198,50,254,127,23,114,222,75,9,116,93,186,191,149,115,99,231,94,8,34,25,9,54,72,70,16,132,38,217,32,32,89,148,140,128,164,38,55,218,228,32,57,199,1,157,83,245,125,51,243,206,249,183,123,237,94,207,126,214,170,189,54,69,213,175,91,129,241,98,158,171,82,28,63,86,19,56,233,34,177,30,248,193,61,244,188,123,124,35,107,132,178,156,203,227,204,118,240,63,181,79,221,146,115,106,230,128,167,218,94,37,215,166,197,106,122,90,246,71,151,186,205,195,190,62,57,106,153,119,226,90,117,78,166,31,133,166,163,125,182,130,16,135,185,194,40,38,47,114,120,7,89,244,57,54,185,50,92,49,51,126,238,173,178,157,203,137,44,201,212,105,241,68,38,36,180,160,255,201,10,136,239,79,59,129,198,87,90,96,45,102,199,146,210,140,31,156,57,75,186,1,136,19,218,46,133,167,139,143,
212,242,138,2,111,59,188,172,119,17,61,203,216,103,100,240,43,218,146,210,51,173,251,70,81,150,151,125,187,119,122,48,0,199,188,136,201,240,139,230,207,225,86,35,247,188,75,64,60,136,139,34,33,46,7,223,75,208,144,245,126,63,142,67,174,94,226,70,111,25,149,109,68,69,205,112,172,85,232,186,148,198,35,72,21,239,107,22,138,178,249,195,250,9,105,32,127,1,25,196,119,213,12,168,187,161,231,82,171,62,28,15,201,65,156,2,222,194,128,129,165,75,7,174,181,216,13,50,233,250,7,150,16,166,33,207,150,29,15,139,159,77,255,166,228,15,10,100,171,126,220,216,99,69,241,44,185,250,45,90,84,100,81,142,119,74,233,235,3,139,169,113,245,226,190,208,165,102,165,83,73,33,97,112,25,189,94,108,106,149,195,211,38,81,33,114,155,56,71,96,18,88,41,6,132,27,33,194,178,77,150,236,186,38,75,105,24,82,114,244,14,140,77,244,189,232,109,42,127,59,0,19,114,110,252,109,224,208,142,71,213,43,53,160,230,140,17,57,39,85,32,207,78,134,230,9,
119,39,131,173,119,189,215,136,18,189,238,37,1,92,142,209,54,188,81,90,50,103,113,246,208,190,237,107,30,186,97,83,45,200,8,225,176,140,147,114,7,63,191,5,137,55,52,62,200,79,100,125,125,83,44,197,57,142,226,5,14,125,151,11,36,237,129,232,136,41,208,58,63,25,65,66,234,157,104,190,114,54,163,94,201,232,254,52,88,96,123,154,251,99,85,97,25,20,141,63,17,206,93,136,28,77,139,7,186,209,169,19,98,192,198,28,113,117,251,109,27,104,24,3,151,175,239,29,110,79,250,217,161,208,111,147,227,128,153,128,85,1,249,104,51,179,183,4,56,125,30,77,163,63,159,248,213,247,133,60,127,111,202,130,48,239,224,99,92,247,116,198,16,106,249,65,187,246,167,241,72,198,32,64,16,219,158,78,141,76,28,139,65,239,120,82,128,187,135,39,143,245,21,190,78,31,103,226,102,99,12,35,153,188,74,144,53,5,165,164,88,232,189,182,60,174,34,82,215,42,123,186,97,28,247,216,37,241,228,205,46,191,172,214,221,209,106,67,156,208,66,114,90,220,59,225,
235,33,120,75,57,104,228,47,179,64,45,102,101,191,182,132,7,106,206,124,104,102,250,188,38,99,7,117,162,178,159,113,163,209,178,108,140,228,49,170,180,9,197,25,80,9,194,128,42,240,3,85,50,206,184,188,124,48,208,133,199,210,163,188,24,220,236,146,43,110,234,152,209,136,227,114,236,116,90,92,7,76,176,126,5,187,78,182,221,99,104,185,223,143,58,245,218,112,221,24,82,151,196,165,213,61,46,91,250,7,225,123,77,205,114,187,123,135,146,227,51,63,130,175,134,186,78,209,227,208,61,53,201,39,238,38,78,7,50,61,110,114,111,92,0,237,136,154,92,184,35,203,97,233,169,63,0,116,126,127,43,31,96,60,103,120,181,248,78,54,47,133,140,126,157,104,183,222,52,19,199,60,31,88,190,74,127,48,221,140,160,19,132,65,180,165,17,105,87,159,98,173,95,133,84,103,139,177,211,235,177,29,246,78,103,105,88,75,111,227,11,250,189,17,38,140,88,106,210,176,134,76,203,178,238,215,44,245,53,67,33,251,119,193,237,180,79,9,215,163,64,110,17,83,57,127,
236,173,43,90,218,130,44,216,148,220,149,219,207,164,188,158,148,140,220,120,181,51,49,66,195,222,90,249,237,150,103,165,163,67,35,96,40,22,89,46,61,162,123,178,23,188,223,247,200,233,167,210,202,153,5,67,173,138,218,148,238,39,55,124,213,20,167,104,102,138,72,197,177,225,243,21,27,23,186,240,73,27,180,65,191,37,222,239,228,119,179,60,249,145,201,0,162,25,150,57,107,117,230,89,1,188,154,4,208,210,148,18,86,102,106,146,114,49,27,23,93,18,109,150,211,166,189,132,30,77,167,194,51,207,144,147,159,74,246,137,60,27,215,26,76,60,151,77,239,220,135,77,90,62,162,91,82,129,153,153,253,233,143,234,164,28,143,102,253,189,89,39,153,128,232,222,98,166,36,179,251,170,174,97,148,27,123,15,178,252,171,33,34,210,190,142,226,111,240,5,47,37,246,142,178,87,158,116,147,187,138,120,135,146,83,220,250,61,3,251,114,101,41,188,141,100,34,15,181,110,160,97,163,94,240,82,149,48,255,23,47,213,51,232,23,252,98,17,146,129,116,47,150,175,101,124,
239,100,191,120,169,94,153,1,178,26,250,46,101,204,190,224,165,134,173,105,16,84,11,180,159,171,106,238,126,7,199,108,111,43,3,99,88,30,230,51,26,251,52,248,156,13,48,121,54,160,154,205,186,200,72,126,218,45,199,12,173,195,178,68,85,64,142,242,150,153,215,249,85,143,143,29,154,0,94,4,122,242,241,2,114,102,170,219,103,64,168,101,108,40,18,202,142,146,67,174,101,249,90,97,166,149,203,162,92,134,46,45,232,191,173,96,66,216,187,57,108,226,227,125,59,16,91,154,94,245,79,177,58,3,187,224,33,51,212,219,173,204,216,201,142,141,87,203,174,51,235,246,129,26,242,218,126,246,195,142,46,219,232,165,71,90,5,196,254,97,143,74,197,206,77,82,91,146,27,63,229,180,118,180,183,141,80,147,159,241,16,48,41,90,150,81,119,158,212,61,151,36,177,3,73,107,45,238,103,100,144,213,115,231,235,208,186,220,237,180,163,228,79,49,224,19,107,203,98,171,158,67,188,30,150,162,183,213,147,101,58,149,85,6,111,178,134,252,117,226,238,188,78,238,84,202,
250,246,166,242,178,180,107,137,145,152,26,128,203,102,164,202,248,48,248,63,122,133,193,187,1,234,129,128,165,101,157,162,157,34,56,94,246,57,63,133,98,132,82,91,130,219,59,75,201,147,147,148,78,155,28,230,1,41,110,32,181,1,137,16,127,156,205,12,190,166,227,82,16,143,235,165,30,144,118,150,211,175,101,83,143,150,169,245,22,236,155,162,100,95,179,94,230,50,10,3,141,164,232,106,52,20,88,130,226,52,107,218,95,76,81,179,80,199,247,76,249,218,9,177,241,17,229,49,114,119,142,34,196,226,105,167,134,2,33,102,193,173,171,161,141,48,65,155,128,118,150,39,247,30,73,221,151,19,126,13,162,23,238,194,170,228,102,60,19,222,129,92,38,4,31,88,24,44,43,14,239,228,38,29,221,86,109,121,155,173,99,76,31,11,168,112,194,114,172,100,5,130,194,70,46,163,54,236,183,223,94,232,115,10,221,179,169,66,124,64,177,167,134,68,74,215,113,61,162,30,227,47,193,238,48,44,200,168,95,118,139,128,155,150,219,220,223,4,235,74,110,180,64,181,104,210,
145,130,221,4,40,231,212,220,93,225,174,110,167,43,138,97,123,88,61,194,202,222,237,108,37,231,13,213,10,106,149,220,244,174,48,127,143,193,202,150,222,6,248,99,150,205,98,251,21,95,220,47,82,98,239,181,149,43,146,150,150,166,138,183,83,184,47,170,219,222,211,134,207,42,96,200,232,17,56,255,204,13,165,216,16,101,180,6,19,105,178,148,69,175,42,133,142,69,13,111,221,131,113,132,81,221,70,92,57,20,2,116,19,158,15,148,95,51,205,160,120,208,184,7,164,188,111,187,233,107,57,207,128,23,190,84,229,102,224,72,13,211,49,101,139,224,139,207,240,66,110,235,26,174,85,225,5,184,121,206,83,189,121,83,251,244,129,55,123,119,123,117,243,189,121,203,117,107,103,212,135,173,101,209,44,132,11,0,161,105,253,202,163,215,178,42,216,86,101,149,246,160,248,122,212,191,173,104,56,83,171,232,86,247,35,200,224,206,206,242,181,186,94,146,233,0,75,44,233,188,159,15,120,3,111,133,35,212,246,215,187,42,224,60,53,252,70,79,116,191,89,153,178,150,25,173,
212,107,89,7,106,154,211,32,149,128,146,82,105,104,215,232,81,20,218,11,235,188,165,5,25,195,240,87,162,75,52,242,167,62,97,236,58,128,42,73,47,133,248,232,220,152,75,126,153,54,96,159,178,232,67,174,225,221,126,104,252,222,219,235,33,73,100,44,224,197,241,66,229,51,118,85,76,105,125,226,122,150,64,161,134,27,189,60,152,142,36,13,133,38,153,197,109,95,247,19,64,25,71,111,198,168,130,124,173,111,132,193,185,81,63,207,199,199,180,108,85,168,22,192,19,83,171,55,94,52,62,189,209,137,62,22,34,253,204,95,33,61,37,126,210,209,189,227,48,86,75,116,203,108,247,201,96,55,66,52,178,34,0,41,231,235,219,83,133,234,83,146,145,115,126,60,247,58,75,142,65,168,236,177,201,192,97,73,238,255,164,74,249,48,230,161,203,145,234,88,220,247,155,76,98,235,221,40,132,98,238,199,62,100,50,138,36,26,111,218,54,5,107,232,6,59,10,248,234,148,165,86,16,125,220,196,130,150,93,44,120,117,46,252,228,229,187,240,133,240,143,199,226,198,211,197,
35,107,34,110,209,159,192,15,240,4,204,203,225,68,252,213,57,132,210,110,202,32,187,176,217,14,75,9,229,70,15,172,140,76,176,148,79,7,100,33,200,77,113,181,102,189,133,240,113,40,30,120,6,35,29,117,21,47,73,157,163,212,250,64,69,85,131,242,122,242,35,151,77,70,58,81,217,246,101,158,31,9,188,161,247,88,94,99,237,239,75,158,4,89,124,149,50,171,218,161,202,183,169,26,110,83,36,184,221,58,32,83,84,153,12,57,3,81,207,220,39,99,105,251,139,185,52,151,156,147,8,119,13,187,245,5,91,141,41,15,253,107,134,76,140,218,136,54,207,106,249,157,194,91,188,66,143,119,162,137,37,42,102,168,57,75,242,68,230,157,183,103,119,62,138,204,237,88,239,169,173,98,236,172,167,175,65,251,81,180,41,111,181,137,245,247,52,35,113,75,159,231,27,50,190,230,126,121,24,21,169,122,119,61,79,239,238,250,181,224,94,42,153,209,128,36,131,5,108,133,246,82,38,81,135,24,43,231,208,119,12,59,191,214,55,48,109,145,255,248,81,136,153,236,173,125,
21,192,32,142,159,65,146,183,43,16,179,7,23,118,242,40,157,171,236,184,150,88,74,74,211,237,93,250,97,184,211,85,234,185,185,200,115,131,54,174,164,213,212,123,81,113,106,132,120,155,164,213,42,205,158,42,216,185,201,113,188,85,43,79,70,176,24,216,213,24,123,19,109,57,234,112,197,26,215,253,82,93,6,156,39,154,200,246,52,85,72,250,185,16,251,229,243,152,168,36,88,217,242,194,135,192,91,137,165,81,221,36,96,119,30,137,0,239,87,22,216,148,247,108,166,238,250,102,55,109,229,25,31,37,89,241,164,13,29,104,66,241,70,58,143,158,127,82,117,151,118,43,154,68,251,61,87,230,138,137,189,230,110,153,38,185,32,112,36,123,30,102,189,102,151,203,186,122,51,152,25,161,147,33,209,149,115,73,182,161,25,225,170,164,20,215,199,195,167,155,89,244,71,42,10,120,182,140,20,8,235,93,243,49,6,56,176,173,70,13,153,132,30,152,230,173,74,150,155,50,211,170,11,97,202,104,155,232,143,150,241,254,176,201,87,196,18,79,179,211,109,126,209,9,101,36,
14,48,52,240,59,230,179,13,211,79,33,29,159,168,135,156,4,253,119,77,9,99,76,56,46,132,251,186,66,9,185,87,146,159,130,97,145,194,0,70,49,215,195,189,26,55,161,53,240,118,180,62,208,188,35,15,101,7,102,236,74,198,121,176,194,11,114,180,41,208,34,87,88,82,1,251,89,169,47,220,142,182,14,205,60,24,142,235,91,112,5,81,248,87,29,187,209,49,26,25,121,19,201,29,54,44,48,33,48,97,1,171,31,183,207,124,237,40,189,120,225,223,117,106,11,79,108,17,153,142,16,170,108,215,161,111,115,243,174,63,126,75,186,2,48,143,141,58,112,194,9,136,158,209,245,114,119,37,152,76,38,134,228,188,200,47,96,237,138,27,104,68,241,150,108,226,65,149,46,9,162,238,52,20,75,111,103,8,166,248,104,241,66,211,14,16,35,46,45,101,183,164,67,238,87,203,23,196,20,195,51,120,52,247,132,216,205,244,25,164,132,249,151,141,61,157,181,150,124,229,32,217,79,121,29,94,160,8,180,87,29,230,206,231,252,128,119,199,62,36,187,118,46,1,174,93,
19,42,216,3,82,66,52,220,244,81,117,50,42,132,62,88,190,73,192,252,66,97,89,94,67,56,131,159,194,226,103,101,240,39,161,0,21,217,2,20,24,91,92,150,225,72,71,223,214,122,95,84,73,231,70,156,245,20,24,138,208,75,16,244,230,190,152,16,250,194,128,142,209,253,143,133,215,91,106,15,155,240,1,73,105,37,40,225,153,236,239,61,231,32,116,222,35,229,208,68,222,187,47,198,140,195,45,215,221,91,230,40,145,58,176,92,220,217,223,252,220,130,38,163,235,28,185,134,237,245,50,89,214,177,165,181,19,114,144,231,209,236,81,105,37,146,129,244,135,234,7,162,216,169,106,85,41,93,175,110,237,79,53,205,35,11,36,70,147,67,102,50,181,121,206,53,89,136,119,178,88,221,30,1,57,10,172,191,202,171,246,9,157,132,106,135,88,129,138,198,158,44,77,239,247,37,141,92,12,225,162,145,106,250,78,171,72,7,71,117,192,251,116,156,49,14,82,20,120,57,85,133,181,67,242,180,110,188,158,144,123,56,172,165,31,160,105,194,56,88,5,145,15,55,106,91,
179,227,185,56,58,100,207,12,121,113,104,126,144,145,37,254,76,236,201,123,252,32,228,121,27,246,42,151,87,30,192,59,63,197,209,169,209,168,52,141,255,163,90,145,214,66,117,211,138,237,169,60,4,70,70,23,218,156,28,235,121,45,121,8,12,174,206,118,42,223,91,176,98,201,150,188,251,116,14,186,179,29,146,52,237,139,53,91,219,16,211,40,0,221,237,74,57,29,51,141,12,150,144,209,22,65,228,189,197,66,189,184,147,13,87,19,166,66,160,246,179,61,232,80,238,67,111,118,123,249,142,2,5,124,222,178,243,104,92,237,219,185,245,225,11,178,209,150,155,194,90,24,170,189,54,235,221,199,159,181,31,140,155,251,72,115,178,107,7,226,233,117,132,169,237,244,80,212,119,79,163,227,153,5,31,239,130,223,185,61,63,187,240,162,152,116,148,80,37,1,10,189,198,247,219,9,254,11,108,108,62,161,139,115,221,115,23,124,49,81,109,71,94,183,104,145,107,129,133,90,128,182,230,127,234,19,224,194,54,114,52,50,44,157,11,225,136,155,239,194,122,219,175,147,197,28,
207,117,96,230,240,220,222,108,70,121,214,178,157,74,167,97,151,36,57,67,107,179,143,157,111,235,170,180,225,115,218,88,9,5,164,215,210,21,150,154,219,58,130,163,100,15,61,176,43,45,148,160,107,8,180,188,103,49,222,157,234,114,171,174,228,29,179,99,32,39,18,225,207,174,53,62,157,30,213,254,213,40,62,147,118,203,157,137,136,44,201,60,146,206,245,35,124,243,241,111,66,93,10,47,113,106,19,136,136,28,168,91,123,141,148,40,95,222,205,92,90,219,77,238,116,147,148,12,58,147,219,92,66,101,118,207,215,211,59,137,109,7,183,47,18,94,28,245,230,205,218,78,167,158,93,215,161,134,114,135,156,232,84,34,58,230,136,62,15,70,23,246,254,32,135,54,33,95,232,3,165,216,101,239,104,224,35,5,154,39,51,151,209,89,67,82,187,229,129,239,111,81,28,15,122,216,176,43,202,119,149,116,125,104,48,248,111,42,93,174,212,95,23,138,36,82,67,43,168,113,111,60,7,190,65,40,159,79,50,10,148,32,34,63,52,91,129,167,21,147,242,87,6,250,235,185,
12,149,122,179,115,31,251,185,235,158,123,170,235,240,39,60,54,10,135,53,130,182,151,138,12,238,255,168,81,18,195,47,211,11,206,124,254,193,147,222,40,142,95,218,215,127,173,235,248,175,174,118,135,130,96,148,119,15,50,211,185,109,124,58,68,242,254,153,191,86,109,249,226,64,159,74,153,141,11,26,240,197,62,249,120,87,246,68,231,117,236,47,175,169,113,19,214,165,143,49,29,44,66,218,200,184,128,80,119,28,235,188,205,212,206,58,114,8,38,39,94,14,168,123,23,29,178,58,145,61,25,62,37,134,3,226,228,43,194,56,167,210,164,249,218,60,231,109,126,237,0,3,173,175,81,194,188,68,93,59,90,232,224,38,3,231,65,19,127,61,140,204,165,102,169,243,78,216,188,233,175,30,109,42,16,14,155,252,160,34,232,146,162,185,152,150,44,217,186,138,151,6,68,112,5,136,127,231,77,175,213,211,250,242,73,33,236,28,138,109,160,227,127,155,28,218,156,68,156,85,226,60,11,103,29,156,9,223,191,209,77,31,85,30,152,246,78,199,23,238,169,115,113,90,115,91,
104,110,194,185,247,61,229,215,137,207,11,97,234,236,196,235,47,18,173,74,122,254,101,170,201,168,172,203,97,247,47,126,102,13,238,32,133,228,211,237,100,132,190,110,192,25,157,2,149,66,126,188,173,205,145,93,247,114,100,245,87,222,213,9,95,115,12,203,186,231,176,15,117,246,140,23,90,20,105,145,186,215,175,95,119,14,154,74,196,250,34,45,87,133,205,70,216,239,47,15,27,141,146,183,162,46,22,60,214,141,23,60,186,229,196,54,121,228,41,16,253,130,208,231,64,171,132,195,66,254,3,10,204,189,202,22,235,136,234,1,111,174,134,63,196,168,232,59,198,254,17,222,175,2,14,25,44,184,130,60,207,68,70,111,89,35,178,20,108,10,208,93,91,64,56,57,217,29,179,31,167,128,131,82,129,31,60,59,148,161,135,229,231,56,166,246,33,206,78,67,236,190,74,6,7,83,247,231,211,110,202,17,149,176,217,168,236,64,120,11,14,195,32,140,145,225,168,127,115,239,240,74,66,218,230,244,209,55,199,188,222,195,24,218,5,222,116,135,45,96,175,158,112,191,1,32,
225,111,48,94,224,77,138,241,167,58,139,81,132,11,113,54,68,40,5,116,152,134,233,223,223,95,224,78,193,243,112,57,207,150,171,223,175,60,189,125,227,10,147,43,39,230,227,2,175,250,199,239,254,247,117,56,223,159,188,87,240,111,44,3,152,223,168,224,5,10,245,59,185,238,127,163,32,220,231,111,20,233,2,239,185,68,41,48,191,81,255,111,190,97,11,36,236,95,194,236,95,20,6,199,250,75,40,195,252,37,36,235,254,51,33,238,223,239,1,152,63,89,193,11,172,136,198,100,228,148,120,11,165,128,13,119,128,127,151,3,71,255,228,96,153,127,114,190,72,191,114,76,176,146,32,242,49,100,25,214,235,159,156,255,230,171,227,28,101,128,162,143,204,243,29,132,118,126,162,254,207,109,16,254,182,193,252,175,235,190,158,222,94,96,58,172,142,62,158,95,127,4,255,209,167,215,63,97,164,238,121,198,66,56,102,234,255,231,239,203,89,171,185,71,6,34,24,90,232,95,247,241,79,122,76,103,47,240,39,22,95,254,122,173,248,159,252,3,254,252,171,168,235,11,193,57,
255,247,80,14,245,142,82,62,153,125,86,253,254,191,212,173,124,185,52,156,239,12,219,179,230,183,19,203,142,243,12,73,23,190,20,214,252,63,251,220,249,93,110,128,204,168,236,19,195,87,105,31,224,139,223,138,127,244,123,251,231,183,116,26,61,183,45,119,28,177,173,122,250,148,243,2,235,58,155,249,191,236,251,146,125,76,7,66,150,39,124,248,217,85,185,254,167,250,252,107,95,179,10,116,249,165,174,130,255,197,199,8,83,13,183,117,84,53,130,52,107,217,150,15,153,139,49,233,215,219,222,212,123,98,220,228,248,84,70,82,234,222,135,249,54,79,242,192,183,19,93,5,115,80,224,34,17,165,50,243,216,5,88,31,96,233,77,168,63,121,58,223,13,148,59,236,238,109,209,102,237,98,11,157,203,43,40,121,42,4,188,37,209,217,37,4,248,231,183,11,95,42,85,57,236,182,141,174,101,6,55,188,69,133,148,230,14,246,214,23,190,212,160,155,207,19,60,229,230,66,35,189,113,129,198,109,114,246,132,72,19,167,161,183,252,126,62,144,149,181,106,13,55,74,170,165,
219,246,177,59,15,5,13,218,37,126,29,62,28,39,169,195,115,112,113,225,75,209,93,227,111,111,168,190,32,12,235,168,9,211,208,45,83,224,137,24,216,88,177,129,191,191,46,254,207,255,253,15,251,107,142,126,
120,156,236,186,121,175,237,94,144,21,246,85,144,146,32,34,39,242,60,17,33,97,31,207,243,241,241,140,80,228,121,158,103,71,249,238,241,251,209,208,77,11,210,116,8,144,68,185,255,188,173,251,182,183,107,87,173,90,181,214,57,247,95,253,147,255,254,191,135,254,39,232,191,131,254,129,159,127,206,229,69,188,119,219,191,254,87,255,219,255,250,191,255,15,188,241,63,187,191,127,242,175,86,232,127,249,39,255,244,95,255,249,231,95,252,147,127,249,47,235,62,46,243,127,14,211,52,246,79,97,12,163,255,25,131,81,172,92,242,204,191,251,145,234,148,204,32,45,21,156,110,76,185,139,191,43,158,204,107,120,44,207,185,185,213,79,45,86,74,33,179,101,174,87,218,47,148,21,217,101,248,179,213,63,2,203,243,164,107,44,4,220,44,166,138,192,75,17,77,36,232,249,215,72,208,158,225,196,107,22,153,38,154,207,135,51,109,218,137,93,119,107,236,110,147,40,199,33,127,109,143,215,132,192,4,19,18,52,144,200,202,82,136,184,123,10,201,193,32,1,81,240,236,87,116,191,
247,251,81,110,7,44,204,224,64,38,117,215,78,159,57,55,246,18,137,124,21,162,194,255,172,197,167,220,204,234,235,201,129,53,139,35,146,28,97,178,253,36,120,245,217,108,135,165,36,218,206,84,239,98,248,254,238,203,62,163,227,87,24,51,219,89,188,74,225,17,234,183,205,15,236,163,110,57,200,13,225,87,183,236,49,184,172,98,98,215,253,144,126,92,41,254,168,203,229,140,219,117,13,54,118,127,196,237,124,38,123,132,51,195,186,206,9,25,170,13,205,178,148,71,167,128,183,50,1,189,83,161,176,51,114,87,139,237,11,131,182,56,225,122,241,91,20,138,112,155,140,217,151,138,154,35,254,243,144,64,101,254,146,235,38,214,57,12,112,72,158,143,95,75,212,134,108,202,79,102,174,195,216,101,34,228,111,230,100,207,208,222,34,110,188,113,126,136,121,104,81,79,123,2,70,51,169,165,93,27,63,90,81,49,13,50,123,161,112,106,178,122,203,90,125,248,115,60,18,49,78,84,68,175,219,31,2,246,60,81,177,212,166,251,96,96,100,151,139,213,48,61,203,131,151,163,
245,111,182,199,152,19,103,174,42,220,236,219,136,211,144,186,124,76,178,200,131,165,135,133,180,183,146,93,23,49,176,38,185,242,153,215,81,6,155,207,31,100,169,32,22,41,234,177,143,246,218,255,86,223,25,41,198,9,114,61,218,130,191,188,199,196,94,121,83,29,155,253,82,49,121,48,96,55,241,240,204,70,171,113,130,67,124,50,201,154,113,42,128,111,67,235,58,210,16,39,111,2,207,241,77,51,106,147,105,113,217,74,21,199,235,69,67,72,51,113,60,224,205,254,251,76,90,212,113,107,136,249,145,120,90,197,175,213,55,210,202,226,94,1,85,233,243,217,100,210,74,218,80,91,37,158,81,133,23,95,107,28,143,37,183,40,231,163,223,204,192,98,253,109,39,111,133,157,138,63,23,85,196,96,161,9,52,116,215,122,52,80,236,153,56,168,88,198,9,179,139,23,44,10,218,132,143,247,249,132,69,63,152,6,165,62,150,26,120,164,254,108,209,227,54,182,208,196,58,40,46,205,187,67,42,91,50,252,174,98,35,24,39,74,242,87,71,158,130,243,125,232,197,156,155,200,
232,111,178,85,152,111,49,18,235,194,69,254,226,5,158,31,12,183,188,109,244,13,84,173,227,81,254,67,107,66,181,228,121,56,79,12,123,247,79,39,173,45,17,169,221,44,106,150,176,21,159,175,75,88,87,176,182,105,147,72,207,121,43,76,212,186,167,119,252,98,210,48,7,244,26,191,244,234,85,25,168,216,217,98,221,200,234,200,92,228,119,174,42,201,231,151,168,164,105,125,112,233,88,172,128,5,190,194,190,4,86,166,105,160,49,249,155,92,225,221,167,241,238,60,17,155,177,216,99,235,136,145,237,99,18,251,199,167,86,78,20,193,103,89,142,162,208,87,224,69,87,242,221,251,89,132,52,109,253,205,221,92,207,52,21,238,22,165,23,158,231,145,48,57,243,18,244,155,34,245,202,231,218,162,42,102,40,2,56,86,47,209,250,64,65,183,159,153,193,81,128,215,40,146,218,78,253,186,197,240,117,37,62,61,157,188,178,134,254,205,171,57,8,63,131,168,245,30,76,171,217,108,199,48,244,43,62,208,49,156,29,77,211,84,89,28,86,225,55,227,67,131,163,105,85,26,
233,130,187,138,210,199,10,111,52,130,175,59,146,209,128,138,193,88,178,189,181,2,230,79,14,167,194,118,249,124,86,81,35,10,110,154,64,195,105,129,124,210,31,224,59,101,15,13,216,99,46,159,4,132,127,157,159,46,150,109,206,200,156,120,198,228,110,223,92,39,3,71,211,146,44,34,143,9,7,59,87,209,51,12,220,204,44,124,30,144,72,223,130,187,108,4,132,215,79,140,119,36,7,142,28,1,81,39,68,55,160,56,156,43,65,83,32,29,10,233,251,28,137,68,214,27,153,144,6,230,131,110,237,17,112,225,195,25,240,217,151,19,45,124,86,75,143,143,127,78,20,77,221,27,217,245,241,106,214,117,2,0,84,115,70,138,205,47,223,212,153,41,20,48,26,220,151,17,245,22,9,81,154,177,101,155,164,201,222,137,200,151,187,192,181,14,250,81,146,103,127,168,227,146,68,136,19,61,38,34,58,117,166,188,112,225,213,225,25,62,147,56,101,104,74,131,58,97,145,0,138,61,35,137,0,100,14,189,101,225,0,117,135,71,103,155,191,219,30,176,61,176,112,226,185,115,
254,149,43,92,170,195,20,62,7,78,144,109,192,61,87,139,162,228,4,22,201,177,1,57,161,217,134,141,87,113,36,255,129,4,208,92,191,211,22,208,26,126,11,72,102,145,151,212,153,75,115,196,160,172,56,219,242,93,50,143,117,226,0,120,210,149,82,129,8,34,167,59,239,15,195,208,36,170,124,40,0,130,149,44,83,237,249,158,118,77,121,168,167,136,236,100,249,144,88,139,95,215,227,215,223,229,206,213,60,130,49,102,18,194,217,190,162,31,226,222,249,229,210,181,172,132,223,159,233,137,12,51,187,120,20,178,73,238,102,207,141,45,111,213,54,108,197,187,162,171,3,194,118,63,32,188,68,227,246,219,126,55,121,119,79,190,238,206,45,67,251,158,107,86,170,117,137,255,184,140,173,146,2,149,237,78,89,17,190,221,221,236,114,246,83,223,69,245,116,9,141,18,172,65,14,187,245,81,74,79,45,169,27,131,134,42,2,60,137,182,36,244,1,203,111,65,251,13,185,19,122,95,6,26,254,229,187,26,35,106,231,15,151,242,163,220,54,0,130,214,160,214,193,10,172,237,
199,246,93,28,102,109,247,33,182,13,239,162,62,17,231,134,59,89,49,222,76,234,102,173,204,109,230,86,216,77,117,19,218,37,39,160,118,16,27,15,98,129,117,141,103,131,141,23,202,128,151,19,204,215,238,2,143,128,29,226,109,251,173,46,176,207,68,34,252,58,15,76,221,97,178,127,96,135,5,148,223,37,184,151,1,251,13,11,80,212,100,133,91,109,112,173,56,46,105,139,142,191,17,35,233,97,90,32,61,252,3,19,130,71,45,220,210,153,232,162,171,94,4,155,24,75,133,41,241,14,26,125,246,19,69,158,9,74,67,225,182,9,64,141,164,246,229,251,76,75,73,207,11,179,132,71,195,149,18,236,193,100,125,32,93,26,211,195,240,146,196,17,47,248,4,90,184,128,225,64,146,15,216,234,245,211,109,228,3,186,122,181,146,141,157,165,21,172,52,117,193,6,5,169,109,55,114,151,37,96,23,1,117,143,97,51,166,73,123,103,213,7,79,127,167,183,215,250,249,163,213,11,105,150,147,44,26,158,254,120,144,143,120,24,14,106,167,228,248,149,148,238,28,130,39,242,
23,210,81,45,124,182,3,30,1,211,99,96,217,99,47,55,102,169,76,101,41,71,63,234,245,155,237,146,117,164,112,106,116,29,63,198,77,222,29,246,157,5,97,31,194,228,71,76,124,201,15,238,174,116,138,192,132,94,129,209,30,105,215,47,250,213,94,193,12,211,83,125,185,11,81,32,199,241,204,165,36,175,230,212,232,25,66,183,219,134,254,176,149,11,238,211,64,19,12,218,68,35,2,172,100,134,172,176,59,99,180,75,29,115,113,45,159,135,20,245,58,83,183,41,1,183,241,169,77,148,186,242,164,154,44,24,106,179,49,84,75,232,77,209,89,237,9,253,234,196,250,8,181,17,71,76,198,147,226,76,142,184,55,9,63,14,70,97,119,53,37,126,212,70,167,245,116,122,96,111,2,119,127,58,177,249,68,3,61,247,192,80,168,77,84,51,227,117,203,245,77,195,87,33,181,199,31,158,28,30,39,42,240,4,47,189,35,248,157,183,144,77,185,144,93,190,232,111,238,123,113,130,50,123,233,162,20,237,194,194,69,43,111,175,1,153,67,28,164,19,216,69,80,43,70,84,
140,93,60,244,13,100,5,30,79,8,161,219,219,83,90,28,119,207,255,84,13,28,227,170,226,27,221,29,57,63,25,14,237,176,151,32,99,138,90,57,71,234,227,21,92,154,152,41,93,89,107,11,106,83,49,2,43,161,161,27,103,140,104,37,153,121,23,63,195,64,49,125,209,32,168,232,68,8,24,122,157,159,18,8,184,34,61,36,41,26,225,237,109,19,20,23,13,33,254,244,2,40,92,238,164,111,226,111,149,171,61,159,59,167,142,16,155,203,136,110,7,179,188,212,34,64,109,32,19,45,38,69,206,220,179,251,209,151,160,27,225,231,102,247,69,123,235,231,217,84,16,58,237,93,160,142,86,247,7,69,16,148,245,118,172,77,10,202,73,129,207,119,106,250,138,115,172,15,65,188,125,75,66,20,60,111,194,112,30,166,9,90,101,163,83,64,65,119,95,49,246,5,146,26,235,217,195,188,227,58,139,153,86,191,40,147,172,104,201,64,63,36,48,58,110,9,102,35,40,19,15,170,35,87,99,187,201,252,184,65,166,186,134,251,89,39,243,162,43,179,109,136,197,87,30,52,
246,10,195,226,163,8,124,88,210,14,164,78,32,136,101,26,187,180,56,142,147,244,227,153,216,83,145,48,83,222,80,98,9,134,40,101,169,233,205,119,252,249,216,189,114,5,193,186,11,124,8,29,88,63,44,138,133,141,177,132,194,39,133,133,188,82,145,187,196,65,118,191,26,29,8,97,224,163,149,112,47,228,51,228,144,186,116,230,99,191,50,9,109,80,225,104,208,175,48,128,89,133,165,249,233,139,63,149,135,125,213,187,47,102,175,62,190,207,135,76,230,138,169,52,8,125,161,89,163,44,62,123,194,242,219,15,58,203,125,192,200,93,64,220,6,86,156,15,46,179,77,46,198,118,110,70,82,73,192,128,163,71,39,81,227,13,85,141,60,44,232,11,58,74,117,51,224,186,209,76,123,65,47,199,46,128,190,131,119,43,62,235,211,194,120,120,108,113,232,190,238,25,51,22,237,22,210,57,115,79,218,190,210,13,27,141,249,24,216,170,159,31,219,240,147,222,157,131,50,18,221,0,26,104,214,186,244,192,23,247,131,159,147,52,171,40,170,45,160,226,9,96,239,11,142,123,
236,132,218,229,147,10,198,203,13,134,237,93,146,214,195,188,35,235,147,82,224,219,29,15,228,216,7,116,85,185,30,96,212,51,46,194,239,176,213,107,237,49,145,30,111,143,232,60,104,34,103,156,72,138,199,19,213,21,149,118,33,179,4,202,251,218,132,144,229,203,201,237,67,176,208,23,182,225,211,9,38,230,33,113,197,161,73,164,48,146,197,134,114,159,163,116,95,137,74,165,52,21,127,214,47,250,216,0,80,20,128,4,16,88,90,244,28,188,22,84,23,177,4,70,23,5,232,13,104,215,252,86,126,105,177,123,88,174,181,25,97,27,63,248,124,125,120,61,208,52,254,246,214,4,241,83,223,244,229,74,235,122,55,129,180,200,29,6,48,99,68,251,135,29,73,121,173,41,96,73,115,9,14,197,163,52,56,140,68,29,57,13,207,78,196,202,147,85,121,177,163,135,106,6,187,90,61,176,99,153,79,52,46,102,49,160,90,159,16,20,134,97,129,230,188,122,4,218,184,65,57,113,0,139,212,79,116,83,8,221,157,232,116,32,91,97,111,96,174,159,176,215,96,143,183,79,
13,45,86,150,153,186,4,186,191,147,160,48,224,83,47,243,197,105,230,62,218,36,243,102,182,195,160,2,38,105,150,53,49,50,178,215,11,247,56,174,107,162,41,72,9,218,143,100,3,114,59,194,184,154,160,57,112,63,235,8,123,121,254,165,234,141,119,138,53,52,163,16,164,91,27,93,36,250,136,11,65,165,153,190,234,50,141,122,181,44,180,204,205,32,80,112,70,165,227,51,160,52,147,174,251,204,35,179,177,195,214,249,228,219,243,161,70,64,23,108,90,195,90,13,78,157,78,114,43,208,99,61,171,203,161,36,218,65,181,1,230,27,111,239,217,76,226,171,93,208,231,198,245,232,161,175,64,159,47,10,10,30,13,244,70,146,208,159,229,214,128,238,197,179,227,60,146,177,41,17,25,192,210,220,127,62,140,166,21,76,149,184,95,232,87,33,192,36,233,9,158,183,118,165,40,187,126,210,210,66,145,251,52,197,114,67,91,69,55,135,89,189,96,157,171,33,182,239,58,138,226,189,239,161,186,208,14,166,78,89,119,127,31,133,22,221,240,219,38,126,54,48,135,101,240,157,
191,94,105,189,201,85,142,141,20,1,113,104,128,99,85,23,174,4,95,214,251,65,196,28,215,90,12,244,63,164,120,135,25,43,247,129,196,233,190,37,134,190,181,38,189,21,102,88,235,149,234,37,44,12,59,150,94,201,66,140,122,49,51,35,132,165,199,124,136,65,248,189,163,40,223,2,36,157,129,75,175,31,142,248,198,121,129,181,76,36,91,208,181,206,147,167,197,23,209,238,114,205,186,204,229,68,254,68,30,162,218,8,6,49,42,218,92,140,249,76,214,74,247,250,65,186,72,122,254,200,21,49,252,164,178,111,120,80,95,235,249,172,22,107,32,31,94,12,36,101,30,121,4,145,173,29,232,116,235,201,222,13,153,95,117,131,24,149,210,254,214,175,82,118,254,189,242,45,216,180,150,210,135,50,48,180,54,83,16,168,58,220,212,75,52,44,53,93,159,229,138,251,87,116,74,43,197,229,57,237,14,130,6,28,74,196,104,237,112,36,194,77,68,129,97,33,8,154,211,215,84,231,112,134,232,188,137,203,148,75,119,175,12,107,63,185,37,67,31,170,140,255,186,59,2,215,
217,107,118,16,97,225,63,45,7,200,194,151,217,248,207,202,248,195,199,130,35,18,204,203,91,198,192,78,173,193,199,141,137,243,215,156,74,135,91,250,59,13,25,117,245,229,214,120,147,119,240,234,42,242,127,150,254,193,127,54,209,29,141,240,252,29,124,61,73,46,175,238,252,2,116,112,129,26,244,109,209,126,14,84,140,13,214,37,14,172,39,53,218,219,194,204,26,87,241,75,181,67,223,153,122,165,195,176,79,97,6,20,205,227,236,66,2,213,222,90,135,127,188,14,127,111,226,128,69,161,18,144,240,141,3,52,109,42,59,20,111,126,64,34,97,32,245,0,87,27,22,193,150,75,22,141,194,130,3,2,77,153,206,130,9,161,146,144,224,81,108,194,66,57,212,175,63,45,190,222,90,71,143,106,33,72,125,87,243,91,152,60,160,212,23,126,206,109,100,220,227,157,223,231,60,92,60,123,58,227,46,142,161,67,17,98,157,56,82,80,45,235,179,237,40,120,1,170,121,128,187,43,172,191,32,20,182,231,0,156,89,183,20,73,241,213,160,211,250,94,247,130,216,188,62,69,
120,193,101,23,84,72,233,27,40,248,196,32,128,163,20,69,189,112,125,243,211,118,114,126,173,43,113,60,58,40,58,9,244,219,192,58,197,251,232,202,176,129,236,76,184,65,14,162,113,74,224,215,251,18,201,221,137,185,246,215,16,104,81,16,248,175,126,170,89,159,146,151,161,199,132,171,11,107,178,6,208,102,23,46,36,192,181,207,235,174,82,149,200,66,255,7,36,222,139,117,170,157,253,71,125,116,37,65,196,178,107,132,32,73,118,76,211,50,8,112,221,141,254,138,235,155,205,181,158,124,124,80,7,7,117,109,21,43,52,173,203,21,33,80,56,225,213,201,26,78,223,251,124,145,139,182,172,237,166,89,190,214,174,63,159,255,170,104,217,205,136,234,237,194,74,166,63,26,197,182,128,7,125,246,218,176,139,68,244,111,162,208,36,131,251,221,16,234,246,6,41,157,182,191,221,70,77,181,201,98,238,109,177,15,255,233,176,202,27,239,150,93,196,143,135,149,158,76,116,236,98,50,94,184,122,114,92,49,75,46,123,161,254,58,163,139,153,242,53,68,189,56,253,169,152,243,
145,133,228,172,195,199,127,32,187,134,107,184,188,128,70,125,127,247,118,3,91,41,156,47,11,203,197,44,118,167,114,190,206,47,151,60,219,240,231,205,21,63,238,87,186,116,86,198,227,70,243,80,214,197,47,249,199,119,214,112,34,37,24,140,43,112,39,63,214,241,196,108,187,12,155,49,5,149,114,224,7,86,30,30,110,230,246,27,203,199,107,214,116,97,30,240,96,174,223,248,140,0,125,88,57,73,250,120,253,230,73,21,147,248,188,179,18,71,38,90,95,119,133,58,207,188,221,157,58,107,9,77,77,148,165,5,59,195,202,0,80,161,94,215,96,70,164,124,187,13,82,173,197,209,117,76,126,149,93,90,191,57,65,196,88,151,44,33,202,10,167,116,106,234,112,111,213,197,183,37,67,1,207,46,164,121,1,65,116,190,207,187,243,225,245,240,117,42,198,80,178,8,142,217,165,254,64,161,93,187,176,255,25,87,210,154,43,80,169,203,174,239,226,121,246,198,254,230,53,157,68,116,77,148,44,25,94,189,169,117,235,107,101,159,111,67,202,109,247,142,65,96,186,147,145,36,
163,108,37,247,13,0,44,236,79,207,174,81,141,7,219,177,87,121,7,254,136,158,58,166,54,57,86,108,55,161,59,31,238,135,10,178,253,3,90,211,3,114,217,168,239,169,63,241,139,242,145,44,165,139,244,226,155,253,169,151,236,197,250,196,196,239,221,178,53,36,130,9,65,160,80,180,155,183,230,132,50,12,215,33,124,138,34,4,237,233,237,131,23,4,229,213,86,203,63,10,15,127,123,126,254,202,53,172,105,124,160,38,138,245,37,161,143,250,37,158,92,218,56,148,109,102,186,73,73,132,75,223,34,202,23,52,24,39,70,206,210,239,47,174,50,181,83,192,91,73,17,162,119,100,123,38,119,100,143,70,150,43,9,110,138,8,142,207,159,156,98,189,184,14,58,129,97,13,73,222,59,90,101,22,198,143,40,53,24,104,132,83,226,87,250,211,55,122,213,46,200,101,125,50,161,159,47,63,42,3,232,37,162,6,38,27,125,163,107,219,187,27,51,127,121,30,31,54,125,71,219,84,195,191,37,34,181,215,234,168,192,55,12,39,207,147,49,47,164,11,113,134,48,125,48,177,
63,113,41,219,98,148,186,195,94,147,165,181,151,249,158,242,123,158,40,2,60,40,220,37,158,58,135,1,135,154,227,14,33,252,21,51,248,249,206,159,42,13,166,230,10,184,19,18,215,150,49,137,231,178,213,69,82,168,73,220,0,59,126,74,193,215,132,159,56,190,253,90,11,62,39,254,196,245,171,6,239,178,81,255,77,239,191,115,172,153,93,113,197,88,239,53,103,213,252,167,38,83,150,133,76,32,202,130,115,85,226,125,60,184,180,93,6,24,194,199,59,129,96,152,36,224,31,13,210,7,122,160,5,200,108,0,230,171,55,122,183,86,179,215,168,199,44,76,87,23,126,105,73,5,75,73,110,156,167,92,253,65,29,220,7,247,132,168,6,24,44,246,65,64,125,37,3,211,160,105,176,169,88,168,138,195,150,245,128,75,241,82,22,135,32,198,215,153,213,241,228,203,1,149,96,125,116,192,149,118,249,160,231,129,224,93,110,229,247,203,98,63,20,69,46,110,44,225,111,124,90,82,46,114,195,12,114,55,107,40,175,185,164,196,42,88,38,176,162,213,61,1,195,14,22,138,
74,43,10,71,146,132,126,255,248,236,59,219,28,185,127,85,186,242,58,224,239,76,52,95,97,187,45,80,181,95,163,229,222,185,134,125,100,148,106,133,223,202,80,204,252,183,186,0,32,135,21,212,40,226,43,50,223,249,100,98,89,8,153,140,121,117,170,90,178,254,159,113,249,82,250,200,248,127,52,129,246,242,5,35,44,229,40,48,140,63,125,174,190,238,234,45,220,66,38,173,250,191,14,28,255,28,8,125,213,147,253,235,152,191,6,173,248,34,142,145,190,204,242,215,49,146,47,241,188,137,113,235,127,218,187,254,200,152,191,14,252,127,213,94,94,238,188,246,17,213,247,222,114,252,215,230,248,111,117,199,159,116,252,181,249,63,160,209,30,197,87,236,135,229,106,46,225,127,255,192,94,50,190,212,250,79,109,101,253,63,61,118,246,243,242,130,113,205,229,240,231,232,132,143,255,94,125,188,191,30,253,251,181,172,245,104,54,180,87,63,25,254,127,242,61,244,107,87,222,55,174,54,241,143,203,27,143,2,182,232,126,124,25,254,15,225,231,239,196,215,95,77,102,191,56,158,
216,110,92,164,25,176,243,232,79,58,18,222,252,7,238,132,134,215,60,159,4,251,249,243,172,39,15,128,189,59,82,245,145,162,154,253,125,200,127,240,110,111,222,177,153,253,50,70,223,155,112,152,158,95,172,156,223,153,251,127,142,147,29,89,127,227,170,116,111,66,218,163,197,165,253,173,65,245,103,158,48,70,109,252,199,223,69,253,45,118,16,61,86,101,186,100,35,246,120,137,215,248,247,254,239,63,30,243,71,248,75,91,254,193,82,8,255,3,53,152,206,122,115,241,223,169,206,30,230,162,91,178,127,179,51,103,56,246,211,237,199,13,242,136,1,227,171,198,189,126,144,78,215,216,72,80,186,127,106,62,184,214,119,24,3,26,203,82,149,238,221,158,241,28,203,67,146,35,149,8,250,225,32,67,121,116,28,157,231,54,96,253,142,96,193,194,1,197,84,214,239,115,42,167,48,110,227,53,132,184,91,3,149,96,50,7,126,19,157,38,173,117,245,205,128,61,66,124,212,15,53,178,72,236,21,104,21,57,91,186,249,150,125,17,222,124,96,212,98,109,224,59,163,81,50,247,
94,87,166,57,11,2,176,0,8,140,18,172,129,36,104,75,222,76,44,12,216,200,106,1,98,185,102,139,116,145,39,0,241,163,82,83,4,47,68,129,201,222,170,245,242,21,68,63,76,44,41,233,27,89,39,184,112,180,150,157,255,226,95,252,143,255,246,171,205,191,255,21,39,66,226,216,63,69,96,8,250,103,204,157,126,38,230,239,125,197,25,65,74,38,56,221,153,48,146,42,31,180,115,108,160,22,35,224,54,43,130,253,131,55,240,123,197,6,197,24,219,169,216,60,163,252,132,140,87,229,87,154,254,192,141,70,230,121,160,139,44,220,0,112,140,64,116,129,38,172,216,76,100,250,212,179,239,87,133,91,119,219,251,204,189,180,10,187,209,107,167,235,91,107,252,64,18,197,91,120,215,22,43,117,56,13,125,150,231,121,14,51,197,169,59,218,147,246,217,3,171,120,5,190,62,184,103,31,120,144,132,69,61,146,166,13,244,184,154,101,59,171,62,1,228,154,186,49,28,193,177,129,83,89,254,128,55,99,177,240,237,100,229,99,1,14,158,166,236,19,165,37,150,34,254,209,
65,249,25,203,119,5,174,152,22,118,98,8,168,6,77,49,32,233,168,131,101,42,144,79,112,100,67,60,88,163,13,225,209,123,175,24,203,216,69,213,177,80,56,45,145,42,15,110,88,44,45,242,158,249,251,172,214,210,34,65,162,35,50,1,111,34,186,68,32,205,194,25,10,206,6,230,72,104,86,161,96,42,20,202,23,134,186,3,88,9,10,150,184,59,164,146,225,64,201,77,31,189,149,173,161,220,174,75,99,79,232,48,12,113,29,29,70,60,186,142,97,78,156,248,21,22,245,16,202,182,251,106,66,205,182,50,61,115,168,94,248,100,188,189,87,29,230,241,171,27,229,157,65,225,154,204,133,45,242,152,136,117,24,151,51,1,25,214,20,225,40,254,98,72,227,109,241,250,178,190,115,24,54,225,38,17,39,13,168,44,76,181,90,101,177,182,86,121,175,215,218,167,77,138,85,64,199,63,95,153,234,154,73,147,191,28,77,155,7,122,226,6,121,178,18,142,68,86,32,150,145,86,237,240,35,106,62,148,101,237,62,220,10,55,68,224,254,94,48,236,58,179,16,230,164,251,
14,19,175,217,244,69,124,217,115,188,29,215,118,191,166,132,190,140,85,67,60,14,15,138,223,193,38,145,233,245,239,153,121,237,184,106,100,23,131,240,60,234,47,27,35,249,140,175,148,5,96,192,17,43,74,96,94,209,90,115,62,134,7,240,53,119,161,91,37,123,238,193,166,198,74,230,114,24,58,146,171,175,89,230,131,193,111,19,203,1,118,98,48,128,83,50,182,223,107,250,39,62,155,217,79,109,92,93,33,40,83,187,55,31,189,14,123,137,108,209,133,139,223,160,151,178,181,142,223,216,26,18,161,20,228,80,172,250,19,140,68,253,226,60,54,176,151,68,177,136,251,125,86,208,253,236,150,193,188,226,159,129,236,203,57,14,62,165,75,205,30,248,254,16,55,202,115,237,1,158,223,46,204,160,11,162,173,134,115,97,186,47,247,163,185,150,197,231,119,233,242,101,153,47,60,219,248,4,44,185,188,90,17,54,81,66,19,191,11,138,31,240,201,70,52,207,193,148,244,94,163,142,14,93,30,27,191,182,40,252,80,115,29,200,128,68,187,26,205,133,33,135,53,62,225,125,
218,42,85,163,107,138,160,137,102,232,242,79,174,133,113,233,245,240,128,121,49,18,23,167,186,253,194,30,71,205,236,229,67,43,31,72,5,3,246,131,109,233,13,78,198,15,37,68,237,48,242,12,47,80,21,160,129,249,169,36,47,112,42,199,127,154,33,74,141,72,129,99,119,240,132,235,132,205,40,154,30,103,213,4,26,10,112,127,192,121,179,209,119,11,196,156,110,159,108,49,11,65,224,167,54,203,11,53,254,250,34,198,228,196,28,233,100,63,182,68,149,70,26,250,10,157,102,203,221,236,16,72,100,69,24,193,126,151,210,32,130,234,137,10,247,16,24,51,16,42,184,85,198,96,16,240,208,117,14,214,134,3,41,170,48,192,31,165,82,65,5,224,185,96,45,222,150,74,201,114,146,185,213,128,24,133,246,44,2,36,88,71,145,167,86,16,118,70,73,17,236,187,142,209,209,216,163,30,142,115,168,194,1,212,202,179,137,135,72,14,56,49,33,249,9,99,167,214,146,185,110,253,62,151,89,134,126,36,92,122,102,60,78,82,29,88,113,115,28,149,255,82,172,151,197,169,
65,77,155,125,166,131,79,250,236,117,94,164,127,155,98,4,125,135,244,72,164,103,167,65,209,115,168,0,200,37,144,30,209,140,151,150,115,43,76,208,24,61,234,224,54,2,118,165,239,64,235,219,82,30,52,238,5,92,100,89,212,214,129,189,239,88,5,16,241,139,113,24,150,58,225,228,9,234,67,241,7,99,50,161,61,96,64,117,54,85,96,111,34,97,93,204,128,223,39,18,213,1,8,20,9,200,96,43,35,252,55,43,176,165,1,52,187,61,209,70,14,95,234,102,243,136,82,116,167,64,170,87,166,108,126,30,143,223,74,74,141,161,147,155,212,80,47,194,180,6,28,197,255,152,107,48,93,63,25,140,7,197,7,196,203,12,48,106,250,188,145,7,124,28,131,126,61,22,46,180,20,28,12,108,242,166,55,235,252,204,127,158,190,43,172,5,235,226,52,143,90,103,216,120,64,39,164,103,8,80,212,230,237,150,216,201,103,8,207,130,15,169,135,106,25,225,133,184,13,45,38,93,233,6,41,182,150,34,43,0,232,200,31,185,230,86,53,58,70,83,117,225,105,64,216,61,
59,63,72,0,59,52,145,131,112,115,92,154,16,103,192,249,116,213,141,144,15,243,36,6,85,67,59,13,195,232,120,20,75,186,215,135,185,40,27,186,119,77,14,154,241,140,44,234,111,238,218,33,73,134,22,32,14,83,18,13,30,167,157,123,216,203,116,163,85,249,89,10,95,172,250,216,23,9,170,130,80,222,25,158,133,220,75,10,240,162,101,147,122,208,183,0,156,206,145,219,84,163,62,67,151,252,155,103,223,204,32,177,133,67,227,227,3,130,249,133,217,75,74,190,74,204,234,241,157,27,1,37,119,237,29,79,196,97,40,39,64,14,47,244,122,252,33,187,180,67,201,139,16,27,157,29,73,93,234,233,182,168,160,71,115,190,121,50,119,149,214,147,164,189,151,9,185,236,112,244,7,46,175,75,166,193,213,199,203,160,64,12,185,130,171,11,37,226,109,8,180,147,130,55,14,57,247,195,35,98,185,57,68,26,78,33,239,76,192,76,162,17,199,147,146,254,221,250,92,8,248,128,221,135,175,133,105,71,160,130,223,14,142,131,8,42,16,103,100,66,181,239,3,224,232,253,
104,52,190,76,67,125,244,221,133,2,113,71,95,127,242,99,140,17,70,108,67,49,208,26,81,84,94,116,61,54,143,163,71,210,144,227,79,207,245,103,125,246,228,129,14,85,5,73,60,181,118,241,29,104,241,86,175,82,152,235,123,0,186,191,128,202,193,201,12,215,79,74,123,180,159,220,147,39,21,175,150,209,180,173,41,54,139,34,209,139,191,76,205,21,39,120,98,33,119,200,245,252,131,169,192,110,184,68,16,216,66,104,110,251,234,24,136,23,129,161,55,129,78,136,244,157,4,227,177,57,227,228,133,198,168,115,128,71,45,102,20,50,30,22,55,196,125,163,19,150,79,200,174,124,225,110,149,230,223,26,62,30,238,149,209,162,22,54,26,220,214,5,208,231,228,97,186,3,138,204,143,208,166,181,69,204,16,142,94,145,175,84,212,81,43,37,106,201,201,128,6,114,229,133,27,244,109,65,202,141,19,147,3,73,204,77,158,87,236,165,173,191,171,51,182,107,33,2,172,2,240,206,33,167,1,127,110,48,116,2,245,26,104,11,215,242,95,192,179,194,21,42,139,100,210,250,
39,26,102,125,237,78,88,77,170,117,56,120,127,243,232,84,72,170,109,56,0,223,79,176,68,123,6,76,131,68,242,224,76,139,134,113,194,49,80,136,164,127,158,212,193,15,241,238,115,169,156,206,140,165,178,50,241,101,145,163,1,17,129,183,105,103,160,21,84,196,97,62,169,94,208,3,30,143,187,0,126,212,141,27,22,113,191,198,36,89,134,185,209,36,110,148,162,160,230,238,84,236,22,171,73,139,68,238,191,18,210,180,52,111,110,160,250,135,216,144,253,33,244,160,131,10,2,153,94,96,43,26,152,119,102,154,23,243,97,94,50,96,110,91,138,133,45,218,164,139,14,22,157,132,29,183,179,92,165,231,131,119,194,57,104,145,137,126,231,75,150,10,34,237,23,191,64,98,0,115,41,16,38,28,165,246,237,221,107,88,240,234,144,25,89,130,40,122,75,79,182,211,99,119,200,9,225,146,24,72,107,231,203,83,165,249,169,117,140,208,81,245,188,70,209,226,35,24,159,78,111,31,170,158,74,124,242,140,64,253,179,81,36,172,145,168,14,176,150,77,220,212,93,3,102,2,
160,104,177,152,6,165,99,36,210,217,228,164,62,200,76,79,234,133,160,20,68,207,110,33,245,19,143,83,143,149,159,56,114,41,146,73,48,169,85,143,36,149,106,201,222,32,107,98,5,197,128,12,249,130,171,168,81,36,172,111,127,138,120,237,104,49,204,109,65,194,198,103,13,99,132,143,115,74,213,166,70,13,143,11,125,242,85,64,80,179,38,86,75,131,187,14,76,210,44,45,125,155,147,4,2,184,173,46,92,225,10,71,161,21,165,174,114,224,192,197,202,119,88,29,206,172,243,2,27,115,232,212,189,164,84,193,195,162,216,78,78,240,176,198,243,179,156,122,167,123,55,128,237,254,41,120,224,24,64,251,126,135,45,227,181,126,114,89,63,116,225,97,97,36,115,76,59,170,190,103,7,10,51,81,110,28,0,195,188,255,240,30,224,83,179,227,52,47,173,127,51,129,172,214,197,2,126,50,120,119,54,109,27,22,162,145,149,155,83,133,165,5,77,94,233,175,10,169,83,234,66,48,168,146,108,51,31,211,21,108,223,164,19,81,130,218,123,182,96,164,193,86,48,249,53,250,
12,196,104,75,39,113,239,11,82,147,102,237,147,140,225,114,67,94,254,68,27,69,119,205,64,174,78,11,161,129,17,20,120,87,49,56,185,247,161,18,148,39,188,227,189,240,243,155,180,66,175,190,67,225,125,238,2,140,171,171,228,172,163,90,0,13,34,131,3,14,235,68,10,54,167,240,125,56,253,58,16,42,109,70,136,130,113,242,38,211,102,111,170,123,178,6,202,250,96,104,227,170,23,178,69,59,144,156,190,139,1,64,0,202,54,191,125,170,175,43,72,171,81,241,74,109,83,232,115,51,99,98,142,194,114,17,127,46,210,229,166,48,35,166,10,128,48,146,102,131,223,65,4,47,142,158,120,124,246,65,168,170,247,206,9,136,24,188,13,159,208,88,153,254,229,136,117,250,202,142,239,149,1,80,1,95,240,4,209,46,136,132,44,33,111,44,57,17,1,20,62,66,190,135,70,196,23,41,130,208,177,100,228,151,238,83,245,225,171,24,68,211,137,233,46,38,245,139,68,128,4,190,159,19,106,208,223,122,31,238,82,56,8,24,106,75,189,87,153,88,244,0,238,115,10,212,
188,29,69,250,128,162,100,146,200,13,82,158,239,214,88,173,137,195,241,142,251,96,150,35,223,137,71,244,67,67,236,145,69,119,48,184,190,236,244,3,79,244,1,202,229,217,181,135,41,215,129,141,193,45,7,179,56,214,147,234,204,123,41,175,169,248,40,172,181,128,65,186,188,169,4,114,90,148,120,61,49,114,189,152,76,171,198,86,11,114,114,174,104,96,252,205,1,175,7,189,51,15,128,188,171,89,144,5,191,32,33,156,103,16,244,131,166,138,175,2,93,44,164,90,192,149,63,5,2,147,188,134,141,249,72,198,249,249,193,228,67,109,53,50,114,246,30,53,192,40,67,127,207,168,210,198,7,164,139,137,124,140,47,134,99,239,221,81,50,62,126,131,242,25,171,185,249,17,252,138,130,166,138,31,133,154,212,253,38,244,175,80,216,144,248,216,19,146,106,151,71,93,229,21,200,17,107,177,142,206,243,147,31,47,66,175,171,224,246,99,19,235,126,34,46,65,253,36,222,92,238,230,162,161,148,103,2,48,254,202,58,16,151,34,1,4,235,207,169,5,195,181,99,73,175,157,
72,5,136,56,248,39,65,155,115,0,33,8,222,43,169,28,100,66,236,128,161,171,114,3,212,42,169,3,82,118,236,149,254,185,234,227,29,229,192,42,37,58,233,1,107,96,83,55,87,117,124,96,196,144,184,128,146,153,27,135,140,128,81,65,21,78,14,56,90,128,7,0,189,3,57,144,255,228,149,78,205,32,80,75,210,28,104,170,218,112,97,199,130,238,64,128,151,188,20,172,232,45,228,88,137,180,131,45,247,158,151,113,215,160,217,241,216,53,224,176,57,6,100,60,78,252,46,165,95,55,216,56,247,2,110,34,167,130,84,17,14,234,176,3,115,10,98,211,170,15,71,77,6,32,189,24,146,31,126,47,55,184,138,220,221,106,225,86,113,185,227,244,119,252,201,128,86,210,159,39,172,40,191,90,116,0,40,175,17,90,40,227,217,29,209,121,37,211,176,42,115,164,208,81,150,199,201,171,31,118,242,218,41,24,100,246,1,96,243,156,32,233,61,221,185,24,194,116,77,25,127,187,196,2,121,70,92,33,122,144,113,189,113,66,0,250,89,74,213,166,139,229,96,97,93,95,
249,132,2,195,110,108,211,129,87,80,238,198,135,218,150,45,194,39,62,55,209,159,129,218,109,12,204,133,223,177,145,241,83,94,139,138,7,250,147,143,20,158,189,183,234,8,189,234,88,40,161,9,13,230,154,225,97,124,137,212,195,91,247,237,49,221,72,91,1,136,76,221,172,24,64,52,167,45,65,67,238,124,202,135,27,193,54,114,93,72,147,38,234,96,67,180,234,76,183,39,2,176,85,120,135,209,181,62,17,59,184,133,213,193,177,60,7,21,132,254,6,82,17,194,158,136,159,245,128,138,137,152,248,71,188,230,158,85,3,212,148,136,210,240,129,128,104,174,149,218,160,214,182,21,166,172,175,147,197,9,159,55,73,224,207,248,211,95,113,31,7,176,0,95,213,240,106,102,19,244,90,18,125,20,112,233,7,64,76,10,124,1,231,178,103,85,18,43,6,110,221,13,107,31,33,249,225,46,95,48,41,235,2,41,8,203,143,3,109,199,31,149,25,196,119,48,119,165,180,161,223,235,89,244,198,220,192,56,226,163,87,167,37,50,193,220,100,154,3,178,255,44,2,20,162,114,
227,181,233,140,42,56,74,2,112,144,77,195,61,230,187,104,195,82,81,113,237,226,185,60,125,205,199,146,34,251,109,173,150,82,171,53,59,71,122,131,87,107,134,147,8,156,193,78,51,215,105,177,170,249,13,18,205,188,63,45,241,134,235,41,185,231,233,212,52,71,221,19,246,104,148,155,192,154,102,88,100,131,125,47,1,4,153,107,246,113,119,57,21,97,200,106,13,232,24,129,96,149,23,88,216,92,98,70,164,176,248,71,91,227,175,151,96,161,76,202,218,2,88,251,132,119,138,141,207,152,235,64,112,42,149,138,99,87,140,3,5,174,34,129,29,205,205,45,97,163,147,228,154,30,12,33,166,70,146,180,142,149,100,27,7,79,129,181,95,179,67,142,216,177,15,96,211,64,100,152,90,203,200,249,25,157,211,22,30,62,89,102,136,164,99,167,217,182,31,92,248,188,11,138,238,133,144,90,95,177,173,37,108,6,230,217,70,84,8,69,69,135,143,222,30,153,23,105,90,35,18,74,78,43,110,138,11,123,28,185,47,253,220,112,176,197,2,41,13,103,206,85,124,209,203,11,
198,15,206,168,111,59,87,136,164,223,112,186,28,130,64,88,201,241,128,225,196,90,187,31,0,80,142,28,203,179,226,188,25,207,146,76,58,122,196,74,12,16,164,65,214,2,168,5,57,22,238,153,226,27,112,11,11,193,63,25,141,145,243,239,88,240,243,204,55,159,135,126,128,15,90,199,220,146,228,125,143,93,17,28,38,231,198,135,212,192,21,125,46,12,124,157,52,78,121,141,117,183,157,84,37,217,238,31,118,104,9,30,52,175,232,120,11,86,51,158,49,127,189,34,240,7,209,196,196,21,91,123,18,100,234,3,119,58,29,157,107,203,126,9,118,32,110,183,246,80,248,165,113,5,208,161,192,37,192,122,91,13,190,218,109,1,226,77,207,130,3,1,109,25,148,170,238,73,96,208,197,6,217,153,59,180,0,206,57,207,222,249,224,209,134,46,158,85,193,231,205,247,19,101,37,30,181,115,19,98,6,129,238,200,199,238,173,2,69,16,198,124,172,87,221,75,175,92,209,95,117,225,160,135,175,188,172,139,147,9,190,244,20,234,125,82,213,63,174,71,124,38,51,242,6,71,
76,145,124,14,81,81,45,238,25,80,49,187,34,99,69,41,191,67,56,100,224,45,236,84,153,88,29,15,115,207,70,81,52,163,112,24,253,182,180,179,183,27,175,204,160,146,162,208,239,213,197,224,217,130,164,142,19,72,86,191,134,69,12,186,218,176,99,233,42,51,101,170,134,77,173,10,177,130,94,42,58,34,2,158,129,162,54,19,84,85,114,13,122,116,202,112,104,48,162,112,97,193,198,19,19,194,78,121,173,241,212,99,207,152,73,133,228,240,180,138,127,103,17,63,102,95,69,84,91,101,169,115,214,50,110,125,143,163,66,190,181,206,120,0,104,120,145,161,119,70,229,175,158,85,235,251,62,150,175,211,190,214,146,43,32,199,120,58,177,216,211,8,180,57,155,73,109,62,67,124,226,195,212,225,138,181,230,88,203,61,103,42,92,45,215,120,123,215,37,86,203,102,100,141,242,71,169,159,250,75,188,191,14,245,199,180,158,13,6,11,22,205,90,26,49,107,110,153,126,210,87,4,154,238,104,63,60,194,80,246,206,98,159,207,73,73,163,173,171,36,148,70,33,172,101,71,
128,20,253,23,54,10,146,212,11,89,10,73,121,143,236,11,72,161,113,183,48,70,238,105,216,32,115,126,164,165,112,17,25,196,2,236,159,0,97,1,187,234,94,217,114,165,3,127,14,18,252,17,32,66,237,78,219,195,135,131,103,149,158,217,130,237,255,205,25,34,35,15,118,236,211,71,210,35,70,253,10,197,120,92,68,12,12,50,187,26,147,243,132,140,49,39,88,10,155,42,190,223,124,47,114,29,201,181,93,111,45,6,131,211,137,234,250,100,139,133,142,37,92,180,140,220,86,188,106,57,208,166,133,230,51,210,223,219,144,148,107,129,251,211,132,82,32,35,198,209,218,85,155,112,44,137,12,45,122,88,37,234,61,195,180,64,89,126,245,197,0,67,22,155,220,199,108,221,86,203,213,31,205,65,129,144,185,12,67,219,211,66,130,137,42,144,38,81,51,52,239,240,163,151,44,128,11,222,65,79,190,26,104,189,122,4,255,101,249,239,26,83,145,187,23,148,30,169,140,34,244,56,197,219,10,250,12,168,100,54,56,131,5,159,141,46,88,103,151,72,218,108,218,125,26,84,
198,232,97,194,124,10,251,204,85,8,133,90,184,7,148,145,98,216,39,126,109,51,133,62,86,227,180,27,0,212,45,170,122,247,24,4,229,194,128,54,206,74,54,6,113,19,198,136,170,207,103,146,186,134,29,63,247,206,132,254,57,15,79,77,160,25,39,99,47,240,30,215,77,133,222,53,206,9,41,188,50,129,247,252,48,227,72,208,233,140,252,167,11,75,124,144,54,102,210,248,159,56,59,28,34,89,203,33,113,229,3,179,119,25,106,172,218,200,107,42,163,6,52,137,202,56,73,127,206,190,176,63,184,80,44,64,23,244,62,191,80,39,118,212,153,203,181,111,139,66,77,78,18,156,10,64,57,23,228,142,56,152,81,153,9,50,176,80,248,185,90,191,16,88,79,150,111,86,16,43,58,198,48,103,180,153,4,12,169,89,144,112,35,8,18,92,201,80,219,94,2,227,190,208,149,227,149,158,57,121,115,228,5,160,52,246,231,79,68,142,218,230,54,222,206,161,225,157,229,177,216,114,237,43,93,169,137,254,243,39,22,101,62,142,195,206,4,21,157,102,220,165,76,236,235,99,
183,230,233,117,82,15,30,226,54,163,196,206,97,5,254,147,207,85,210,107,114,189,166,102,1,236,210,172,32,14,254,8,34,203,227,246,160,64,184,117,132,87,210,200,208,183,23,230,197,180,156,67,17,198,81,87,162,131,208,210,99,47,144,200,158,41,153,189,254,58,71,44,116,48,183,176,193,76,126,62,145,56,82,52,196,139,242,210,244,42,76,220,196,89,27,188,166,57,53,93,109,186,160,235,43,90,92,142,39,78,255,227,129,218,150,69,132,233,28,234,238,216,183,141,87,193,15,173,237,17,27,181,148,159,192,51,218,184,65,87,139,111,225,91,5,210,0,89,73,13,24,186,210,45,216,172,244,228,180,238,240,59,55,34,16,100,179,101,75,83,255,213,61,181,232,205,195,240,42,107,69,216,17,209,3,127,161,188,163,63,119,115,129,240,91,161,22,68,126,79,113,221,5,132,213,230,74,141,236,60,163,153,252,141,62,199,100,124,173,170,63,173,10,248,74,176,231,122,100,250,220,79,250,147,181,121,51,26,32,36,21,154,37,222,188,27,27,55,194,38,25,213,92,162,50,254,
52,215,111,166,217,1,7,237,24,240,240,161,191,130,79,37,42,23,97,213,92,160,221,52,104,40,220,132,31,240,171,23,148,147,176,230,60,130,236,206,163,134,182,135,178,46,63,74,124,19,24,189,29,42,5,138,210,120,15,236,245,1,141,84,204,19,186,168,133,58,53,27,98,224,156,47,49,160,15,36,110,227,27,108,141,155,73,212,92,36,200,235,121,66,208,49,13,80,186,52,211,52,13,170,105,31,88,224,115,38,248,138,30,180,21,139,43,117,154,67,15,6,88,21,14,220,8,76,39,4,153,219,142,36,58,11,45,199,179,180,47,127,208,223,212,36,117,56,93,3,172,135,210,129,12,82,253,227,57,103,79,145,152,161,174,7,64,4,5,104,114,196,192,219,168,192,98,77,214,108,131,60,233,11,112,7,26,200,179,136,247,82,244,120,115,84,119,91,71,254,125,210,148,80,237,56,145,41,126,220,172,3,236,120,196,44,91,199,35,151,39,159,14,141,248,56,20,237,181,61,240,12,221,167,235,77,103,224,95,123,39,69,36,241,139,169,58,69,41,66,132,172,82,214,220,88,
115,200,87,58,239,102,233,146,179,97,183,95,241,126,209,206,24,20,184,17,234,231,99,86,117,134,203,110,108,153,110,105,30,232,46,61,126,211,226,119,88,58,120,1,173,22,101,175,57,241,16,16,23,58,144,251,170,183,95,191,227,161,154,243,243,199,163,213,60,90,167,3,233,9,145,146,210,152,3,38,228,120,218,63,138,13,17,46,125,119,109,186,118,9,16,32,114,102,236,76,185,129,24,129,69,234,82,35,94,219,106,133,83,117,15,217,247,216,134,227,211,23,63,230,129,212,54,192,102,189,62,74,236,165,170,116,156,52,34,38,187,93,254,13,1,137,114,244,75,226,129,111,102,130,106,50,27,63,125,223,222,105,234,212,67,176,202,76,95,235,155,137,103,222,202,1,38,11,246,86,106,170,210,12,62,3,149,144,4,101,66,210,67,29,60,114,0,46,153,173,59,166,47,203,128,93,77,53,230,24,118,156,65,136,206,61,5,206,240,198,249,218,58,224,205,195,59,112,144,60,17,106,67,203,172,37,179,78,55,24,242,175,103,8,49,76,8,117,113,122,115,128,48,116,177,79,
217,119,225,95,123,166,229,206,33,105,247,231,141,61,20,56,254,116,189,193,63,95,105,147,111,115,229,236,235,235,41,11,48,55,242,140,143,125,210,252,89,175,97,73,255,204,181,168,54,29,245,88,135,27,68,155,223,240,123,135,233,50,115,213,135,148,18,211,254,69,1,221,2,193,139,137,13,186,184,184,108,126,184,160,0,32,250,185,68,13,34,47,137,69,174,51,196,184,247,16,198,192,26,49,34,33,248,43,30,177,101,185,182,148,134,165,57,51,177,51,55,232,42,161,187,220,236,202,40,84,136,117,225,38,165,72,109,53,203,151,211,18,243,142,65,47,15,11,47,158,182,4,69,226,40,57,99,36,27,43,25,111,90,2,220,31,88,227,123,12,185,1,186,62,130,217,182,88,220,29,13,90,49,242,215,124,104,101,129,5,63,110,6,113,134,191,96,18,150,47,243,157,36,11,109,211,100,51,113,26,97,218,101,71,142,129,148,150,17,61,25,243,61,90,145,243,122,198,221,173,160,76,85,153,113,178,78,142,123,50,247,238,158,58,62,44,68,50,68,116,126,185,138,221,54,118,
150,151,39,194,45,227,186,57,81,255,241,243,109,23,86,100,109,165,127,159,189,231,144,197,183,236,134,23,19,201,161,53,103,30,189,100,241,118,183,91,24,132,244,235,250,102,94,3,104,198,21,197,60,132,234,193,243,97,48,14,177,161,221,46,21,117,202,100,174,94,45,75,160,89,51,172,96,245,176,25,125,29,24,138,247,185,67,36,192,193,147,157,177,55,173,117,227,175,95,64,254,126,168,147,214,216,123,212,178,211,42,176,77,3,80,186,114,215,137,10,32,82,202,229,42,42,250,235,242,239,103,252,100,226,53,97,159,119,104,42,248,126,88,177,195,121,248,171,231,85,252,215,30,252,4,213,103,54,188,125,112,7,132,88,41,111,123,73,50,142,80,182,156,54,82,196,182,20,20,127,24,247,117,103,3,220,201,206,130,204,108,159,189,29,185,17,148,202,43,191,254,104,15,217,255,76,124,122,224,124,73,209,72,126,152,133,81,211,33,156,248,4,174,210,62,212,62,31,217,104,178,238,240,107,240,187,76,7,139,25,205,40,2,17,217,142,176,35,192,252,4,87,182,254,44,145,
123,215,214,131,146,54,41,211,220,247,107,134,158,9,87,32,93,113,25,251,147,8,153,157,117,117,136,79,144,184,108,44,24,113,11,106,156,203,15,28,188,19,109,5,213,115,212,97,164,17,135,190,159,215,122,182,79,46,252,13,198,138,23,99,47,81,255,45,198,142,241,43,121,140,58,221,145,151,4,228,213,151,156,189,134,197,56,243,116,142,54,106,150,180,138,92,236,250,34,176,7,237,204,35,146,160,176,229,171,104,65,34,1,24,11,223,55,247,186,5,121,252,171,88,232,110,95,152,158,9,24,255,143,134,0,18,209,14,3,103,93,224,138,225,158,190,14,79,208,118,35,138,178,235,2,159,104,140,210,146,102,24,0,198,53,94,156,237,13,120,58,92,51,255,130,150,55,84,70,156,191,207,223,196,240,78,80,92,44,111,80,123,158,117,91,116,249,223,212,30,212,62,114,81,3,253,142,242,194,159,252,243,44,10,223,197,161,197,79,104,148,181,220,222,64,217,14,214,75,41,251,219,250,233,220,52,251,235,21,144,9,178,43,62,83,110,134,24,89,199,124,227,224,106,160,219,
3,94,148,155,6,217,109,51,95,63,43,16,10,175,108,84,11,13,24,222,233,16,220,50,209,234,80,242,113,84,171,57,80,85,109,13,136,252,240,4,49,89,210,6,61,9,136,170,67,105,134,108,170,124,216,163,247,137,27,84,70,209,123,231,9,151,123,164,155,12,252,75,101,127,184,79,2,49,76,80,190,245,43,162,102,40,227,149,113,214,1,155,201,93,185,6,156,184,228,51,242,98,178,252,157,191,192,193,76,239,28,30,91,232,229,2,167,249,49,223,79,38,115,179,250,69,191,239,50,127,249,64,254,74,95,238,251,137,213,198,228,191,18,35,253,62,196,167,52,161,47,207,12,63,134,168,223,248,152,119,137,202,171,41,129,205,244,249,107,143,243,169,190,32,181,88,223,244,23,124,211,18,40,153,146,199,190,82,234,86,102,249,41,121,232,223,240,14,99,190,75,143,79,199,82,103,204,86,128,4,185,24,25,153,53,223,220,190,57,30,153,145,53,222,177,39,202,92,201,189,203,247,78,170,204,49,220,196,254,133,69,230,195,56,21,147,93,63,158,96,84,198,121,13,199,85,
51,24,67,188,75,215,190,107,230,100,8,204,195,33,64,177,39,251,205,255,159,61,90,251,27,206,198,232,223,161,112,125,230,127,220,89,223,224,235,86,255,215,239,177,219,123,246,140,147,78,191,222,136,201,116,213,35,216,75,201,216,155,251,175,240,238,255,64,14,151,42,120,237,190,83,51,4,215,178,127,213,47,144,43,83,121,243,194,255,35,115,252,159,23,155,181,219,254,75,237,238,11,163,7,230,217,147,133,206,21,182,250,95,248,239,226,170,101,178,230,223,37,196,244,245,248,84,127,237,41,247,114,124,117,55,203,40,80,105,142,19,151,49,239,242,197,50,246,198,202,24,204,31,172,99,127,229,89,214,70,149,33,237,127,20,166,3,230,48,135,71,221,62,250,127,18,238,255,239,143,175,192,78,30,252,183,249,49,109,32,93,249,8,242,108,61,157,254,203,227,226,63,92,247,164,141,165,151,227,17,230,191,42,54,254,243,122,255,255,127,247,255,119,223,253,135,199,161,198,20,9,174,20,255,203,247,227,63,200,23,128,57,89,175,2,106,135,255,170,57,220,133,215,35,132,63,
233,151,150,255,207,169,113,205,127,104,113,162,229,43,114,134,55,176,253,191,209,220,119,39,168,169,191,68,243,158,253,223,4,19,127,7,143,131,12,154,190,237,241,23,244,95,32,231,190,98,163,36,78,15,81,127,4,48,120,16,175,118,124,207,152,255,124,46,99,235,89,116,49,31,5,2,19,164,27,74,138,31,87,225,178,8,203,54,151,15,150,77,229,202,143,225,199,60,109,224,64,188,96,7,135,39,133,174,53,78,172,141,220,181,63,49,205,77,9,76,23,159,69,56,207,41,124,60,28,9,130,111,142,187,219,179,56,169,246,108,193,104,154,196,254,169,27,207,143,223,203,194,84,177,72,89,132,206,243,50,92,248,147,75,207,254,183,159,239,148,44,223,234,165,61,231,221,148,8,104,38,205,162,61,226,166,97,142,40,139,52,195,115,120,217,159,60,123,122,112,153,41,252,188,118,121,184,217,55,95,247,240,231,51,211,6,50,200,129,161,146,239,79,59,164,43,203,23,239,186,157,186,241,209,68,24,2,59,120,107,33,184,233,64,155,114,179,88,50,243,157,165,152,64,164,1,
150,113,109,142,238,146,139,182,124,249,123,247,33,121,221,229,127,88,113,32,68,245,194,236,71,217,147,34,200,195,27,75,115,45,127,39,150,16,29,77,121,77,71,241,115,254,202,91,21,153,125,50,153,210,171,91,254,234,240,146,219,68,137,19,225,191,52,139,123,21,60,222,228,37,86,95,103,185,22,86,215,158,210,34,10,157,100,63,215,214,106,52,36,63,47,166,57,213,124,144,238,181,192,127,238,213,103,26,13,6,178,227,72,151,125,103,104,41,206,4,39,139,183,81,47,127,222,15,235,206,191,121,63,127,28,140,16,240,225,40,181,186,173,53,114,137,8,243,216,154,140,90,91,24,170,199,80,192,251,166,203,0,40,130,95,228,103,120,159,119,168,32,90,211,193,127,99,62,200,76,251,11,223,222,27,30,214,152,43,94,115,19,19,114,71,79,26,243,64,145,76,245,148,140,202,90,30,121,224,127,221,131,115,175,227,223,222,227,46,145,109,204,194,154,227,83,189,70,5,97,150,236,1,143,219,140,46,124,47,71,87,108,69,249,242,195,32,127,7,35,176,241,117,5,151,210,
65,139,80,131,250,48,40,68,197,221,215,235,91,44,102,199,120,28,28,244,246,239,227,2,251,131,11,74,209,187,11,135,9,194,0,197,149,99,4,38,250,243,185,187,254,204,77,45,99,175,60,21,230,100,36,55,196,226,143,52,188,241,183,102,139,132,222,39,112,160,104,0,45,55,254,165,64,208,56,250,39,7,160,109,141,21,174,252,140,141,105,60,125,37,102,122,186,43,206,128,253,77,175,224,2,75,35,14,26,18,178,57,117,116,198,50,54,159,152,238,63,234,251,137,119,155,92,107,253,163,223,13,127,78,43,5,71,180,223,89,120,26,4,66,222,228,43,162,145,166,154,190,176,20,182,100,7,82,103,205,186,26,3,77,96,126,77,61,122,128,159,15,234,255,236,43,39,112,232,211,232,164,210,78,40,12,93,134,179,45,116,71,93,128,1,74,78,129,74,43,208,70,223,160,26,99,15,13,10,48,193,93,225,216,29,238,0,236,234,181,112,179,95,200,159,240,72,7,231,220,96,234,102,101,236,237,239,90,39,251,154,134,205,30,192,122,211,20,191,223,235,215,147,20,222,129,
201,188,232,52,136,106,157,8,123,223,68,98,15,244,161,246,80,6,160,117,32,35,217,35,126,146,195,88,222,173,54,77,35,230,121,225,212,165,249,242,3,142,90,27,180,25,205,26,163,83,128,22,44,147,61,42,205,179,244,195,53,121,227,122,18,185,246,137,189,130,32,78,159,61,137,204,59,152,31,17,188,105,46,92,175,215,94,123,193,96,177,180,196,130,252,4,157,28,156,154,155,108,175,104,62,156,118,42,132,109,182,252,96,163,209,62,39,178,63,130,63,20,25,181,179,124,246,210,20,62,80,243,233,126,190,4,198,146,187,29,231,205,72,34,205,72,64,101,34,210,71,18,146,210,216,139,160,179,137,54,134,236,180,207,169,95,90,169,173,86,187,172,82,169,200,183,60,88,133,30,118,236,111,11,145,36,17,239,160,89,164,145,119,41,18,212,150,184,19,90,213,10,43,238,154,254,44,202,7,55,143,154,119,59,232,43,161,41,167,19,105,59,29,235,38,52,103,128,193,0,189,41,123,64,246,48,50,109,77,154,38,39,46,148,141,147,216,68,62,110,118,42,71,41,125,111,
58,246,208,87,100,107,174,8,40,220,82,75,61,205,219,45,217,94,3,189,142,251,196,221,135,14,207,253,175,9,30,240,138,181,31,98,52,95,164,74,213,15,33,170,170,99,233,6,196,219,16,229,191,220,79,254,153,221,250,131,163,124,98,87,111,193,159,212,44,184,15,213,163,178,130,199,29,106,92,123,210,87,99,20,234,230,247,88,246,186,45,184,219,125,231,87,107,238,76,79,182,129,52,232,111,51,241,158,124,244,85,214,107,103,75,129,129,19,252,142,104,154,163,80,99,71,25,152,23,168,230,201,91,85,178,115,146,117,174,205,107,38,39,202,72,250,173,147,7,29,168,23,43,78,91,135,117,96,119,210,116,59,83,249,105,142,244,230,250,191,137,173,207,216,153,255,51,15,68,114,39,91,169,188,66,95,250,180,187,243,16,81,216,162,16,70,244,248,92,175,113,9,18,198,222,20,129,173,182,27,233,117,203,13,100,137,239,6,144,182,41,206,82,74,47,123,58,11,80,232,53,210,132,20,57,24,227,184,43,10,109,5,83,117,27,209,126,40,53,240,94,148,56,26,58,33,
153,13,87,173,88,229,122,213,123,177,118,53,165,33,41,132,64,37,183,89,66,70,56,212,151,169,93,179,140,250,2,53,253,180,38,61,144,142,90,66,119,248,164,199,182,241,92,136,192,91,38,21,22,70,140,163,49,254,133,235,236,214,157,149,102,43,107,68,140,54,153,101,24,7,131,111,96,127,127,103,245,119,115,72,171,206,7,172,167,29,49,152,111,61,58,75,161,249,47,158,240,250,147,241,172,129,242,135,185,161,79,158,148,101,34,151,194,73,241,113,2,160,3,154,137,211,29,172,64,205,144,189,71,252,77,45,205,177,1,219,134,87,136,19,165,63,251,130,232,234,215,141,174,12,142,188,164,249,154,144,47,162,57,245,72,227,203,55,132,18,82,123,198,131,210,8,155,104,68,153,213,20,228,52,69,75,210,230,5,201,12,102,235,146,245,143,19,93,182,183,8,184,103,7,221,142,102,239,72,241,183,141,178,123,131,42,232,255,163,154,51,217,114,22,187,178,240,171,212,156,1,125,55,20,162,239,69,15,107,121,64,43,250,30,4,60,125,161,200,63,211,233,85,118,218,30,
214,48,34,4,130,123,207,217,103,111,133,248,242,148,18,165,74,238,196,18,46,174,56,226,233,19,41,242,109,173,47,146,192,162,125,239,216,195,66,17,32,65,87,4,38,18,208,5,131,25,198,8,91,87,197,254,236,86,219,183,105,24,209,111,61,139,110,25,110,208,115,52,72,244,58,129,128,191,72,144,215,252,54,124,85,157,145,118,7,73,184,208,170,110,42,180,182,123,150,213,225,173,143,247,152,21,238,125,230,20,248,30,165,69,236,79,230,154,188,160,44,9,161,140,116,201,24,201,250,174,149,227,36,41,166,106,32,186,218,204,176,23,26,153,104,16,34,247,229,182,34,115,112,150,230,110,191,52,246,115,25,149,214,115,12,204,89,162,21,92,112,227,245,53,55,223,190,167,146,182,232,49,220,181,83,177,157,243,175,245,185,36,132,199,127,168,193,168,79,223,45,98,139,174,227,190,46,49,3,252,5,65,65,17,11,62,251,60,144,183,130,1,232,57,168,89,58,25,43,109,71,236,32,41,82,94,77,69,20,142,33,176,239,78,238,124,244,140,137,157,16,227,41,0,108,175,
39,20,10,148,138,120,168,185,155,166,19,5,56,216,166,120,151,40,171,82,189,17,195,236,0,153,43,33,142,231,204,195,125,173,245,123,247,147,14,154,13,205,235,44,202,32,155,13,84,13,156,190,187,233,221,208,51,120,17,57,217,0,184,244,134,220,251,128,248,28,65,253,125,197,89,147,248,240,92,32,186,130,92,200,115,7,102,220,74,186,115,69,140,83,136,249,224,44,178,14,44,112,224,227,26,164,138,206,72,150,220,162,122,22,105,251,186,251,167,18,135,1,36,247,195,188,98,116,55,163,200,70,138,158,199,188,247,129,108,197,154,16,200,230,121,75,214,25,139,177,119,64,198,204,77,97,107,215,110,3,183,126,35,250,18,176,103,225,118,47,226,249,172,196,101,146,243,5,21,240,153,6,145,245,178,160,56,6,200,28,89,227,11,131,215,58,202,50,118,32,144,221,184,135,85,95,180,64,132,169,204,140,68,7,150,153,157,27,115,175,53,54,60,97,7,39,75,70,244,196,159,85,98,157,211,184,155,87,242,213,62,49,34,241,161,21,205,163,75,186,160,220,193,18,84,206,
176,176,122,89,51,128,81,6,72,15,15,46,241,94,206,106,207,224,234,99,196,164,99,62,188,58,116,63,18,139,141,203,121,128,127,214,57,17,60,20,117,55,83,169,143,221,177,26,207,36,222,108,138,1,8,148,16,58,228,210,103,144,11,18,198,197,216,219,144,202,88,78,39,25,32,7,67,216,81,50,84,140,228,161,50,190,147,20,42,142,179,102,132,232,170,173,168,145,223,177,24,17,214,242,46,44,47,193,64,42,65,63,247,237,150,111,86,97,206,65,174,39,201,127,58,74,85,204,38,9,37,224,250,196,38,124,97,22,158,213,215,179,10,124,8,56,214,164,35,49,10,221,110,123,13,168,99,184,25,70,68,153,225,96,234,120,164,112,21,157,192,16,1,215,5,181,203,52,225,150,252,251,194,171,23,86,241,195,122,14,45,9,100,51,252,186,36,49,250,62,184,222,114,123,147,200,87,91,71,11,162,167,158,191,51,112,118,27,58,122,219,170,144,2,155,183,94,215,25,189,46,203,233,191,248,14,92,236,234,19,63,247,106,250,246,3,47,173,188,188,101,159,230,3,212,97,
32,5,183,119,81,226,115,232,9,22,1,4,144,124,35,208,250,73,79,42,217,58,39,225,185,109,29,233,58,132,173,2,196,162,237,101,38,80,98,91,68,198,24,234,91,119,218,42,220,13,119,36,161,141,48,112,82,46,194,150,7,93,177,16,167,187,190,56,191,234,239,149,200,159,40,117,8,75,169,189,178,110,138,202,165,161,168,190,167,122,33,87,47,224,204,137,245,251,101,164,244,194,10,226,17,247,219,103,71,236,75,142,62,121,12,88,119,143,61,124,170,133,92,145,147,90,222,128,85,58,225,192,43,67,49,245,200,89,139,188,188,60,154,185,213,238,75,32,173,67,20,174,9,74,126,174,58,63,18,173,204,63,83,164,122,64,200,122,194,165,157,206,171,131,230,222,35,131,239,101,2,39,233,194,65,49,227,153,67,144,173,187,118,204,249,141,81,219,58,236,125,95,205,201,61,134,45,1,95,129,173,134,68,206,30,102,242,189,211,150,176,239,4,113,231,53,166,106,236,119,79,236,52,112,22,96,161,130,51,39,42,21,192,190,160,114,73,92,243,54,94,42,127,192,151,217,
102,69,234,81,21,230,140,5,233,19,63,235,61,140,231,32,194,87,203,59,33,82,174,62,42,89,33,180,206,97,111,212,193,189,207,30,105,222,46,41,235,34,44,160,84,70,232,192,21,167,122,84,118,133,31,237,82,158,197,4,192,25,94,70,130,52,211,228,107,38,142,234,9,153,140,48,119,240,209,240,250,204,38,248,190,212,222,115,243,129,92,88,209,59,84,109,78,130,237,79,107,182,4,247,246,17,170,248,158,179,237,194,50,214,222,128,23,20,180,149,114,249,132,1,224,230,126,94,75,81,120,71,178,38,48,113,209,113,108,102,59,39,248,174,215,193,153,231,38,56,121,80,81,128,162,195,12,36,216,45,138,175,151,251,162,105,61,90,238,64,85,80,128,46,147,54,112,143,35,44,41,142,199,200,47,41,255,199,220,40,120,160,67,247,57,92,78,96,67,18,18,127,80,65,182,238,61,157,68,123,238,131,200,109,37,233,28,104,234,191,107,200,144,80,62,21,140,189,75,1,38,66,110,102,132,203,231,103,124,166,222,241,129,32,29,140,187,70,94,201,130,207,84,232,190,47,
41,179,116,135,141,197,50,120,145,246,100,88,248,16,99,200,45,61,30,180,178,30,178,178,235,24,33,121,226,194,227,182,110,157,90,79,177,65,247,37,155,73,192,70,159,30,243,239,231,197,191,246,243,206,237,3,251,69,67,171,28,167,64,71,41,28,13,148,108,74,139,136,185,193,234,251,60,136,10,84,6,75,99,219,153,18,37,137,15,133,126,66,88,56,231,26,70,144,82,103,100,224,26,213,129,254,212,73,156,196,213,94,5,244,218,0,141,115,57,225,40,16,173,45,38,207,135,159,161,144,183,77,122,106,222,203,191,111,143,197,63,27,224,165,96,160,22,97,208,133,162,100,92,105,24,218,215,150,193,89,156,133,22,5,248,128,192,0,91,164,127,253,104,231,239,244,90,236,55,122,237,235,191,161,215,190,101,179,121,124,76,195,110,75,129,121,62,239,128,40,217,15,166,122,87,79,122,18,224,44,190,3,170,158,196,222,190,65,244,93,38,33,149,229,202,45,222,190,176,245,189,179,123,95,126,4,143,165,33,110,115,168,18,173,141,78,174,120,165,40,67,25,78,56,74,22,
5,190,93,50,185,222,34,163,170,81,66,130,25,120,229,224,153,159,57,41,96,200,153,54,32,122,53,120,78,171,209,233,63,62,2,23,26,19,80,195,251,211,135,223,115,48,12,170,131,221,209,92,190,206,113,94,5,18,241,97,143,161,157,104,15,162,213,131,253,57,19,213,215,228,3,62,127,86,196,140,140,188,109,225,188,194,219,66,227,24,167,130,244,168,167,122,238,109,162,97,75,19,63,37,167,98,239,121,136,3,158,245,146,39,136,216,219,243,185,51,91,112,150,62,234,147,236,188,59,74,43,176,25,12,153,34,216,79,62,143,102,48,249,113,252,62,125,224,72,96,234,71,68,233,168,241,46,105,248,234,75,78,217,207,67,55,183,254,25,55,137,116,103,220,125,117,134,59,116,23,208,243,227,128,128,231,181,9,91,200,149,50,67,35,50,212,54,91,105,168,51,203,132,28,120,11,63,87,238,0,199,28,50,43,186,255,158,211,226,36,193,195,69,117,114,131,179,114,183,79,57,106,65,232,109,207,150,154,218,24,119,119,62,199,151,78,239,101,110,170,167,180,69,39,79,185,
76,137,121,170,31,72,107,65,101,1,46,227,199,155,225,183,227,94,217,48,182,87,129,144,94,38,55,173,133,26,19,210,4,51,135,238,202,83,78,223,100,70,27,98,77,218,17,183,19,24,238,188,209,12,121,110,211,153,11,203,23,83,230,126,38,142,52,75,215,209,238,37,147,30,102,155,20,144,59,197,10,208,79,3,171,188,101,5,29,99,231,141,140,6,171,227,84,33,178,250,146,92,19,75,32,48,9,47,104,73,3,91,209,210,105,109,159,163,89,142,22,98,139,69,85,5,109,18,137,171,69,242,156,175,227,203,21,220,203,59,157,102,237,5,22,65,39,186,69,40,211,251,246,31,94,233,110,141,125,240,101,181,48,128,71,30,135,240,129,143,15,219,12,237,66,140,98,176,230,249,30,31,90,28,75,98,54,207,200,100,157,111,205,26,26,89,241,99,221,197,74,243,172,182,109,61,138,91,104,200,138,94,225,211,141,215,25,244,43,35,175,199,104,34,150,253,212,43,217,143,194,180,22,85,228,108,142,224,56,138,188,38,37,63,65,71,1,77,131,208,158,178,151,18,61,73,
107,40,171,201,70,185,149,88,70,203,195,173,101,106,176,202,73,213,197,152,214,79,130,189,134,54,190,127,212,49,231,75,160,75,65,106,3,63,74,40,241,49,210,113,172,44,231,146,64,44,192,211,11,241,126,110,110,179,168,238,81,122,58,125,171,116,77,156,190,79,148,138,196,247,32,24,197,233,145,186,166,10,12,70,105,157,213,27,158,198,207,203,157,161,138,142,214,17,198,208,225,212,51,183,52,80,200,99,152,13,248,105,88,239,128,101,46,141,219,144,224,251,205,245,18,4,46,248,97,119,101,177,66,245,154,159,123,226,118,78,199,229,178,59,194,203,44,208,32,33,145,254,12,187,98,134,219,104,242,108,140,68,189,152,29,192,9,240,68,47,208,95,239,108,132,120,26,230,119,188,151,41,145,167,83,135,101,206,60,118,142,106,178,79,168,171,195,67,155,159,222,115,244,121,16,102,152,109,90,102,40,171,244,92,30,183,132,249,144,196,131,95,18,193,54,60,217,90,70,3,158,43,132,88,148,153,148,217,7,176,54,15,1,218,241,171,247,131,198,107,113,199,35,226,24,230,
226,226,201,237,226,7,166,239,225,209,124,241,181,110,141,145,0,40,137,72,73,130,46,189,61,145,117,95,144,149,38,200,165,240,115,58,22,72,120,72,182,233,61,210,147,173,96,41,20,168,235,168,62,240,114,167,225,68,167,113,79,191,175,21,39,23,191,84,6,3,110,34,33,132,129,24,144,195,202,189,61,41,234,76,211,232,183,118,196,147,14,239,24,20,82,33,40,178,117,183,140,142,119,63,89,251,106,102,120,98,125,41,182,142,173,48,233,126,255,206,145,253,185,40,252,93,45,200,145,42,16,208,188,6,140,6,183,220,112,54,122,200,144,181,134,63,62,176,210,29,100,22,19,35,208,241,142,198,219,202,4,240,224,108,179,80,71,123,117,126,162,176,7,219,190,211,249,204,156,248,6,164,232,40,232,79,251,46,184,71,83,121,35,8,198,200,185,88,154,213,193,144,107,184,71,81,56,197,246,206,184,124,183,148,51,205,193,186,117,122,50,232,162,0,17,17,232,17,123,90,76,240,241,132,117,225,40,42,251,171,143,87,110,92,239,166,45,30,164,73,18,40,232,44,36,178,
145,5,180,207,48,27,11,187,247,14,246,233,81,110,1,141,159,62,210,190,83,152,127,127,63,94,11,189,55,189,145,237,89,118,32,239,5,158,42,111,8,30,13,182,6,213,30,220,12,179,87,178,40,247,108,24,80,14,113,47,53,183,179,110,138,237,14,220,165,25,203,174,8,208,180,101,147,145,111,9,212,108,159,159,45,171,192,48,230,65,50,187,58,216,49,98,133,136,85,220,2,41,42,234,58,106,144,234,200,51,243,128,157,241,206,234,234,93,144,225,79,116,7,94,97,237,250,226,32,135,177,14,42,59,125,213,99,160,52,137,238,234,243,26,52,161,54,84,140,171,185,195,192,12,172,218,86,124,160,182,155,138,48,100,14,23,64,134,104,113,126,130,244,251,222,120,183,186,109,63,62,180,150,174,16,196,217,94,233,186,129,151,180,84,123,174,138,177,218,6,218,229,106,150,162,202,148,99,238,101,153,23,165,217,48,110,169,39,134,114,193,22,53,11,246,62,76,244,52,242,217,67,109,154,116,130,88,253,179,38,164,190,108,235,142,128,110,169,226,118,20,20,242,142,16,121,
1,193,37,69,140,243,48,121,113,222,180,206,105,91,5,145,191,208,234,76,233,20,128,37,33,14,198,18,177,93,117,130,225,206,235,163,197,30,116,243,195,69,211,135,36,37,142,134,109,99,122,249,24,54,53,190,189,18,193,211,78,99,61,120,9,248,121,76,195,32,76,251,11,205,252,50,167,19,245,206,55,27,219,225,73,178,230,227,22,200,194,202,59,60,127,165,94,144,89,238,29,10,130,116,107,19,251,196,105,122,29,84,137,20,8,96,100,130,89,123,117,35,80,105,93,27,193,135,63,126,104,135,35,93,26,38,120,107,155,217,189,83,196,126,83,188,12,19,36,190,8,41,98,171,6,110,242,85,93,137,9,72,70,189,229,13,2,1,140,59,1,211,91,233,142,44,203,115,181,17,205,120,20,126,16,108,10,24,123,215,213,44,20,202,195,160,155,235,38,6,134,187,104,94,197,10,10,213,2,27,95,188,58,80,47,150,186,114,27,29,19,15,218,156,232,161,154,79,73,139,160,121,202,151,222,132,56,84,228,3,62,162,155,137,246,176,122,228,61,217,0,136,65,202,159,235,
74,158,216,59,132,221,67,13,202,36,246,235,254,92,31,25,159,114,153,2,111,136,26,25,98,217,225,49,175,195,224,26,200,231,32,28,207,193,176,171,151,41,14,47,83,8,199,201,171,89,250,131,209,115,55,151,212,50,240,89,148,104,52,97,56,10,201,93,194,28,190,78,226,32,170,201,91,157,228,196,186,50,154,246,59,179,2,112,136,164,157,66,79,51,209,169,94,188,143,120,12,162,189,247,80,172,8,72,132,97,110,73,153,76,246,214,253,232,133,250,152,243,189,62,177,16,10,6,122,87,223,116,231,222,161,242,14,176,109,194,80,239,158,137,124,61,105,7,124,81,44,50,218,5,167,121,135,110,93,160,102,107,56,178,162,225,219,210,57,88,52,161,156,136,107,151,82,175,126,104,172,205,193,197,251,57,223,213,108,95,30,134,186,25,46,64,152,54,213,141,101,174,119,126,142,249,196,105,236,49,152,80,242,124,38,38,16,48,87,167,12,126,163,242,126,17,62,24,206,69,253,252,148,150,218,201,178,59,90,183,197,93,163,54,228,119,239,117,87,253,57,246,172,114,245,92,
226,189,21,230,92,46,25,123,46,177,96,63,49,147,151,192,83,181,142,147,42,246,114,127,130,184,110,117,237,118,202,179,163,136,43,108,37,136,6,7,157,105,117,90,203,47,99,184,198,173,125,122,111,92,155,60,168,130,253,208,103,42,188,182,245,200,86,123,41,249,112,239,207,213,217,114,170,86,202,49,23,1,239,134,136,104,177,39,29,183,106,146,123,22,183,125,9,182,239,43,240,75,58,19,64,102,142,253,158,161,99,109,61,193,88,175,74,196,79,193,2,108,162,230,158,139,97,143,121,220,185,28,80,164,28,207,142,198,166,86,145,123,156,211,131,216,39,104,15,96,215,254,51,161,183,17,1,154,134,130,29,193,83,69,46,248,196,131,208,176,218,36,230,199,237,89,190,4,219,238,12,69,199,153,254,76,176,109,85,21,127,7,140,19,24,172,128,196,2,220,130,153,215,123,248,202,231,170,73,167,39,72,157,172,118,129,36,40,120,108,20,189,252,221,222,212,81,28,96,58,15,238,123,117,121,220,137,222,240,39,126,7,246,216,143,171,141,91,35,36,36,192,226,42,150,121,
174,227,199,157,229,209,121,79,247,158,200,221,66,220,54,220,152,198,184,71,173,217,163,92,208,242,106,64,243,51,46,4,26,239,138,220,203,82,40,160,48,91,116,105,95,48,5,143,19,62,71,139,242,56,183,254,32,166,126,29,99,35,238,86,172,83,14,208,48,130,108,14,242,148,143,222,215,214,136,243,113,103,38,104,17,44,95,186,43,229,150,42,252,238,131,62,73,88,225,180,65,216,170,60,223,6,243,230,28,45,217,22,200,161,74,103,184,202,46,175,76,93,110,225,32,123,101,250,92,119,203,215,46,69,198,45,168,173,106,170,109,221,62,45,193,47,183,221,224,189,237,89,167,139,218,221,145,244,94,179,137,86,168,149,230,11,157,229,173,76,32,170,24,158,229,46,238,89,24,215,89,133,138,81,245,192,202,245,197,10,235,115,65,193,89,165,63,167,196,205,204,5,161,146,75,11,113,218,136,77,218,121,183,54,51,49,205,135,65,194,154,245,45,184,171,48,15,244,168,109,99,62,124,225,254,116,182,173,171,155,141,193,29,19,190,207,250,46,92,20,177,16,69,18,59,122,
143,0,60,210,64,45,63,213,227,51,238,180,130,82,213,88,228,33,191,91,174,88,87,213,22,159,85,129,159,84,66,218,84,200,181,227,167,216,4,62,12,117,34,186,135,41,190,111,29,139,238,119,238,200,215,195,171,44,127,106,211,202,91,72,253,99,16,135,59,35,10,201,219,168,14,194,72,63,76,102,27,228,123,243,188,155,4,242,223,214,37,208,207,249,184,136,221,77,190,15,189,153,221,181,207,143,253,139,169,37,19,90,196,138,112,233,72,126,197,210,28,169,82,159,90,68,126,67,67,211,1,24,171,216,118,148,196,222,78,207,210,101,158,103,57,27,67,96,86,128,81,131,142,155,77,107,75,75,0,243,112,104,205,212,30,228,206,159,53,14,125,44,110,142,81,15,234,225,0,170,36,63,140,216,14,121,120,176,58,22,232,204,84,207,12,155,83,81,191,72,4,203,56,118,77,128,196,4,133,241,164,200,84,3,188,203,57,242,116,65,247,105,75,238,236,164,234,61,49,51,253,248,198,201,117,99,23,156,200,83,32,91,230,171,175,75,106,53,242,254,114,32,32,236,216,128,
124,55,36,221,169,179,131,6,181,223,146,49,13,10,226,65,94,181,28,152,245,232,17,194,213,199,46,68,28,117,159,146,201,34,2,6,194,96,53,28,106,116,122,173,195,129,188,184,125,70,173,23,155,111,27,188,180,224,30,150,176,69,239,38,215,139,232,171,51,94,82,214,99,165,205,38,253,8,250,36,57,243,71,237,89,31,160,70,212,166,148,65,235,69,119,53,136,56,34,144,2,136,62,210,110,241,225,161,101,158,1,94,169,65,149,24,35,171,88,139,66,85,52,186,163,7,126,106,168,161,136,7,255,8,192,154,57,209,197,148,234,152,14,196,102,46,95,69,123,25,77,102,37,89,202,251,192,72,192,56,143,226,222,140,6,104,211,120,159,203,243,151,54,5,242,64,173,243,98,63,241,53,53,252,138,141,192,115,21,65,107,201,128,136,134,236,254,60,227,34,198,215,77,53,99,96,160,220,143,253,122,91,9,209,176,82,37,52,174,188,79,206,69,108,193,200,133,206,83,157,53,195,34,72,131,136,21,191,82,211,235,206,46,157,136,77,148,204,63,233,134,111,185,211,214,125,
10,76,100,95,242,200,200,46,212,54,153,152,72,7,243,212,205,155,198,156,58,137,15,206,134,151,88,64,131,109,149,204,14,176,14,62,160,120,95,239,1,229,251,22,12,113,238,234,140,183,230,78,228,223,78,84,123,64,66,225,179,105,190,116,97,190,46,201,182,134,25,213,122,239,199,249,165,181,134,15,171,98,210,135,244,197,97,113,63,56,44,19,82,189,100,186,227,205,60,143,25,121,239,97,43,72,237,54,152,176,202,60,31,206,200,70,126,229,206,237,237,29,242,82,42,195,135,199,164,33,234,19,17,113,85,16,241,218,114,217,158,104,82,80,58,255,141,207,215,184,39,39,120,220,5,196,156,204,112,122,67,0,195,211,187,7,202,102,38,97,21,222,152,118,8,80,31,56,81,79,78,104,76,149,204,125,184,243,23,20,167,142,222,74,247,181,40,89,19,30,30,40,12,41,144,124,34,36,63,198,131,10,184,205,65,237,200,127,8,248,240,1,142,106,6,227,245,64,23,52,194,5,108,134,109,205,93,9,10,198,30,136,157,195,75,161,14,109,186,137,217,186,208,125,87,201,
4,140,134,159,23,217,212,53,185,44,192,148,60,110,59,172,63,102,73,72,191,184,46,62,253,66,66,63,217,42,124,137,97,228,151,244,117,175,202,252,120,132,31,103,245,115,144,156,53,251,41,208,163,235,111,113,47,250,154,91,48,233,44,225,174,176,12,143,237,8,171,23,92,49,30,244,7,89,178,34,127,200,181,18,159,188,126,35,84,142,85,91,60,224,221,192,239,190,71,9,20,25,84,177,123,155,98,102,127,169,179,226,166,133,211,14,60,94,139,175,96,236,204,43,160,129,192,45,48,35,96,209,74,160,71,90,10,162,240,171,212,115,113,109,31,225,110,77,183,254,85,30,9,82,136,187,236,100,25,223,254,63,241,170,165,243,232,222,13,141,84,229,124,165,119,84,163,4,248,126,18,232,133,78,102,70,45,64,154,164,135,54,171,138,202,191,59,176,249,50,210,215,37,28,240,39,81,198,208,166,103,249,220,124,166,56,183,166,33,83,174,131,53,161,162,129,224,60,200,205,219,133,209,135,5,12,157,226,229,6,147,100,32,88,81,238,173,65,183,166,135,205,246,89,125,31,
252,121,95,91,201,150,123,90,5,158,20,42,167,46,144,136,230,237,23,11,212,59,84,132,163,143,129,248,122,31,3,130,185,97,129,95,130,164,253,220,244,37,80,141,25,184,208,163,57,105,108,46,48,110,65,245,112,195,108,234,36,131,3,117,232,65,106,114,75,219,62,38,74,106,76,86,224,205,158,121,240,233,209,130,246,82,182,174,46,88,233,158,73,218,145,5,12,40,98,164,122,171,59,153,90,62,176,155,130,218,166,190,25,76,88,191,181,249,231,237,173,143,246,133,68,62,61,74,249,11,18,22,99,94,251,3,199,91,35,112,109,5,177,179,90,154,188,221,185,172,237,26,47,197,11,243,167,47,119,165,117,186,239,68,156,174,100,177,131,148,56,125,205,43,200,0,89,194,49,110,136,93,251,57,231,128,72,222,14,47,100,81,209,40,168,7,24,232,63,190,4,91,28,49,223,201,65,131,15,12,233,250,36,168,185,105,214,103,116,243,142,28,40,116,119,47,101,238,185,15,225,38,51,195,235,212,223,112,201,240,200,47,202,38,80,254,65,162,13,194,95,20,83,229,161,254,
78,73,206,68,65,135,253,254,174,45,254,253,61,135,212,105,240,68,99,241,151,16,169,5,95,242,232,95,213,224,221,240,243,216,184,196,135,10,74,35,139,92,243,158,22,246,50,112,11,17,30,193,101,204,132,203,2,116,192,21,73,15,101,178,191,51,184,73,33,106,113,153,43,147,207,87,138,223,235,54,112,123,124,239,165,208,131,57,83,193,30,97,109,180,73,108,42,205,117,81,85,198,87,35,76,27,212,223,210,14,249,141,191,115,64,216,24,239,173,114,73,9,50,26,196,41,100,96,226,44,148,164,208,139,200,246,129,138,62,178,56,229,146,228,37,18,147,11,236,171,220,22,232,165,229,19,133,231,189,212,243,33,50,55,144,117,5,8,186,81,211,149,154,119,8,51,251,237,26,40,203,242,174,218,160,105,177,60,59,134,36,225,31,22,26,163,26,157,222,214,96,133,179,247,158,57,241,81,169,237,34,59,93,157,218,241,249,170,11,71,56,123,31,39,96,175,194,19,158,57,168,143,178,217,12,27,46,193,237,133,245,35,37,63,251,70,147,22,0,38,244,87,15,182,233,181,
122,19,73,14,253,154,222,189,177,205,141,109,162,70,227,247,144,157,244,12,86,168,91,34,236,65,3,128,86,183,9,168,115,184,231,109,54,173,179,137,252,132,215,196,244,31,247,209,59,234,40,175,213,196,42,199,159,186,109,44,99,175,115,165,1,168,35,175,191,47,120,253,65,174,85,23,91,105,178,215,93,91,207,63,104,171,91,249,139,72,204,113,193,239,52,91,226,15,90,182,151,221,137,30,151,48,119,31,182,158,254,238,181,124,107,18,90,146,47,248,19,118,121,217,101,196,103,83,82,148,9,39,167,194,211,244,96,71,255,91,103,149,141,177,183,49,133,170,197,237,73,245,54,88,57,14,147,31,95,39,201,230,74,160,232,150,62,66,145,14,111,232,141,205,144,104,128,154,183,38,175,169,167,151,128,78,71,46,84,206,202,236,119,18,101,82,164,208,169,243,233,95,196,180,120,93,40,208,6,189,73,84,142,93,98,17,54,222,50,92,200,229,178,187,70,207,45,178,213,44,224,42,43,243,76,81,185,77,190,72,205,105,128,194,34,92,3,117,194,154,220,212,191,181,254,84,
209,182,58,4,235,13,186,125,121,134,104,252,145,240,117,64,252,220,35,52,231,73,229,169,115,45,136,133,140,90,146,2,239,231,50,232,243,108,42,253,88,227,62,43,33,172,255,228,212,76,134,198,150,47,91,192,173,61,80,26,195,151,149,253,34,211,238,195,107,250,132,246,143,84,35,18,111,27,227,43,62,223,79,146,175,126,219,168,63,237,67,141,10,207,161,252,94,15,31,19,215,114,239,52,143,234,117,64,153,119,6,233,247,241,71,123,139,28,204,64,138,69,201,49,153,85,71,122,229,10,169,210,33,179,216,177,68,199,220,154,115,44,105,12,159,180,201,31,82,182,103,33,96,173,51,113,215,23,16,187,65,134,173,48,109,229,166,121,142,192,110,75,98,149,3,128,255,40,184,110,101,151,233,188,221,182,188,53,97,25,64,251,233,117,96,39,173,124,66,123,1,136,170,79,68,102,31,108,43,21,102,193,27,21,235,51,42,7,172,82,106,196,45,32,54,246,29,84,199,0,211,237,217,119,64,145,244,238,208,113,36,147,130,62,109,0,64,20,67,205,66,110,113,176,151,66,
88,186,59,115,118,76,220,213,211,10,229,234,187,96,58,234,241,35,115,148,65,132,238,248,142,75,74,27,62,190,115,237,209,125,109,65,240,120,234,100,191,208,42,64,63,152,135,228,133,143,250,139,195,100,190,67,146,251,60,254,169,143,208,63,238,243,253,144,168,50,188,67,201,129,52,254,242,16,94,231,207,185,180,239,188,21,190,120,204,159,211,88,127,154,181,95,170,166,198,41,207,95,4,91,237,75,176,21,190,164,79,231,75,213,148,127,14,251,124,15,27,190,135,185,191,29,246,125,195,247,247,172,255,191,94,203,73,184,247,190,252,223,8,182,255,110,77,190,164,209,223,247,130,149,253,242,55,130,173,243,165,142,254,229,107,21,226,56,171,204,127,176,223,118,251,79,175,157,121,26,124,168,195,191,8,182,206,151,96,251,151,123,253,61,148,17,42,205,250,69,176,253,207,239,227,246,97,95,130,173,246,37,216,254,55,235,246,0,127,8,182,194,151,96,251,151,181,232,253,65,176,45,165,89,156,192,18,248,33,216,58,95,130,237,95,222,147,129,29,213,4,98,191,17,108,173,
207,254,37,216,146,219,47,130,237,245,111,239,237,94,247,31,130,173,220,117,202,47,130,237,240,37,216,254,101,157,84,219,146,78,133,125,215,124,36,39,159,179,40,166,217,19,200,255,102,15,82,9,242,44,242,193,158,172,77,161,143,248,31,254,246,125,187,127,181,86,141,87,233,210,221,243,90,57,253,253,30,254,105,77,158,47,133,79,122,245,177,13,193,22,20,176,17,49,104,9,61,160,230,233,18,187,10,214,3,120,15,129,197,232,73,148,58,153,6,221,119,36,218,194,148,242,85,45,222,165,183,40,158,207,203,100,92,68,214,227,162,6,246,99,121,64,180,169,248,12,0,169,48,142,139,36,29,127,168,253,24,227,253,237,178,107,74,14,255,135,96,187,89,227,154,37,141,9,255,16,108,133,63,17,108,131,210,33,19,60,110,138,250,58,167,25,156,175,69,39,10,167,7,55,132,50,46,100,243,219,128,166,158,36,5,12,34,56,3,68,97,137,214,47,130,109,81,144,7,148,252,35,193,214,66,244,63,8,182,42,47,76,224,167,224,129,36,225,127,253,123,243,127,254,246,183,
255,5,18,135,102,209,

View file

@ -53,6 +53,7 @@ file
forum.txt,
spam.txt,
2008.txt,
NewCoreDone.txt,
www.t,
forum-header.txt;

View file

@ -30,10 +30,6 @@ TOPIC("LearnCpp$en-us")
#include "LearnCpp$en-us.tppi"
END_TOPIC
TOPIC("LearnCppFirstApp$en-us")
#include "LearnCppFirstApp$en-us.tppi"
END_TOPIC
TOPIC("Roadmap$en-us")
#include "Roadmap$en-us.tppi"
END_TOPIC
@ -50,10 +46,6 @@ TOPIC("apps$de-de")
#include "apps$de-de.tppi"
END_TOPIC
TOPIC("apps$en-us")
#include "apps$en-us.tppi"
END_TOPIC
TOPIC("bazaar$de-de")
#include "bazaar$de-de.tppi"
END_TOPIC
@ -90,10 +82,6 @@ TOPIC("chss$de-de")
#include "chss$de-de.tppi"
END_TOPIC
TOPIC("chss$en-us")
#include "chss$en-us.tppi"
END_TOPIC
TOPIC("codestyle$en-us")
#include "codestyle$en-us.tppi"
END_TOPIC
@ -254,10 +242,6 @@ TOPIC("ss$en-us")
#include "ss$en-us.tppi"
END_TOPIC
TOPIC("svnInstall$en-us")
#include "svnInstall$en-us.tppi"
END_TOPIC
TOPIC("tutoring$en-us")
#include "tutoring$en-us.tppi"
END_TOPIC

View file

@ -0,0 +1,562 @@
topic "template <class T, class V, class HashFn> class AIndex";
[ $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9; $$1,0#37138531426314131252341829483380:class]
[l288;2 $$2,0#27521748481378242620020725143825:desc]
[0 $$3,0#96390100711032703541132217272105:end]
[H6;0 $$4,0#05600065144404261032431302351956:begin]
[i448;a25;kKO9;2 $$5,0#37138531426314131252341829483370:item]
[l288;a17;*@5;1 $$6,6#70004532496200323422659154056402:requirement]
[l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param]
[{_}%EN-US
[s5;%- [*@(64) template_<][*@(0.0.255) class][*@(64) _][*@4 T][*@(64) , ][*@(0.0.255) class][*@(64) _
][*@4 V][*@(64) , ][*@(0.0.255) class][*@(64) _][*@4 HashFn][*@(64) >__][*@(0.0.255) class][*@(64) _
][* AIndex]&]
[s0;:`:`:AbortExc`:`:`:`:AbortExc`(`): [t class ][*t AIndex]&]
[s0; &]
[s0; [*C@4 T]-|Type of [^topic`:`/`/CoreTopics`/src`/AIndex`$en`-us^ elements]
to store. T must satisfy requirements for container flavor identified
by parameter V and must have [*C operator`=`=] defined.&]
[s0; [*C@4 V]-|Basic random access container.&]
[s0; [*C@4 HashFn]-|Hashing class. Must have defined [*C unsigned operator()(const
T`& x)] method returning hash value for elements.&]
[s0; This template class adds associative capabilities to basic random
access containers, forming flavors of Index. It is used as base
class for concrete index flavors, [* Index] and [* ArrayIndex].&]
[s0; It allows adding elements at the end of sequence in constant
amortized time like basic random container. Additionally, it
also allows fast retrieval of a position of the element with
specified value. Hashing is used for this operation. AIndex stores
hash`-values of elements, so it has no sense to cache them externally.&]
[s0; Building of internal hash maps of AIndex is always deferred
till search operation. This effectively avoids unneeded remapping
if large number of elements is added.&]
[s0; Removing elements from an AIndex causes an interesting problem.
While it is possible to simply remove (or insert) an element
at a specified position, such operation has to move a lot of
elements and also scratches internal hash maps. Thus removing
elements this way is slow, especially when combined with searching.&]
[s0; The solution for this problem is [*/ unlinking] of elements. Unlinked
elements are not removed from index, but they are [*/ ignored][/
]by search operations. Unlinking is a simple, constant time,
fast operation. Further, it is possible to place an element at
the first available unlinked position (rather than to the end
of sequence) using the [* Put] method, reusing unlinked position
in short constant time.&]
[s0; The only problem of unlinking is that it breaks the so`-called
[* multi`-key ordering]. This term means that if there are more
elements with the same value in the index and they are iterated
through using the FindNext method, their positions (got as the
result of Find and subsequent FindNext methods) are in ascending
order. The problem is that it is impossible to implement placing
elements at unlinked positions in short time while preserving
this ordering. On the other hand, usage scenarios for indexes
show that need for unlinking elements and multi`-key ordering
is almost always disjunct. For the rest of the cases, it is always
possible to restore ordering by the [* Reindex] or the [* Sweep]
method.&]
[s0; Like any other NTL container, AIndex is [*/^topic`:`/`/Core`/srcdoc`/Moveable`$en`-us^ m
oveable][*/ ]type with [*/^topic`:`/`/Core`/srcdoc`/Moveable`$en`-us^ pick
and optional deep copy] transfer semantics, although these features
are more important in derived concrete index flavors.&]
[s0; Members&]
[s0; &]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Add`(const T`&`,unsigned`):%- [@(0.0.255) void]_[* Add]([@(0.0.255) cons
t]_[*@4 T]`&_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash])&]
[s2; Adds a new element with a precomputed hash value.The precomputed
hash value must be the same as the hash value that would be the
result of HashFn. The benefit of this variant is that sometimes
you can compute hash`-value as the part of an other process,
like fetching strings from an input stream.&]
[s6; Requires T to have deep copy constructor.&]
[s6; Invalidates iterators to AIndex.&]
[s6; Invalidates references to Index.&]
[s7; [*C@3 x]-|Element to add.&]
[s7; [*C@3 `_hash]-|Precomputed hash value.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Add`(const T`&`):%- [@(0.0.255) void]_[* Add]([@(0.0.255) const]_[*@4 T]`&
_[*@3 x])&]
[s2; Adds a new element to AIndex.&]
[s6; Requires T to have deep copy constructor.&]
[s6; Invalidates iterators to AIndex.&]
[s6; Invalidates references to Index.&]
[s7; [*C@3 x]-|Element to add.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Find`(const T`&`,unsigned`)const:%- [@(0.0.255) int]_[* Find]([@(0.0.255) c
onst]_[*@4 T]`&_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash])_[@(0.0.255) const]&]
[s2; Retrieves the position of the first element with the specified
value in AIndex, using a precomputed hash value. The precomputed
hash value must be the same as the hash value that would be result
of HashFn. If multi`-key ordering is not broken and more than
one element with the same value exists in AIndex, the lowest
position is retrieved. If the specified value does not exist
in AIndex, a negative number is returned. Unlinked elements are
ignored.&]
[s7; [*C@3 x]-|Element to find.&]
[s7; [*C@3 `_hash]-|Precomputed hash value.&]
[s7; [*/ Return value]-|Position of the element or negative value if
value is not in AIndex.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Find`(const T`&`)const:%- [@(0.0.255) int]_[* Find]([@(0.0.255) const]_[*@4 T
]`&_[*@3 x])_[@(0.0.255) const]&]
[s2; Retrieves the position of the first element with the specified
value in AIndex. If multi`-key ordering is not broken and more
than one element with the same value exists in AIndex, lowest
position is retrieved. If the specified value does not exist
in AIndex, a negative number is returned. Unlinked elements are
ignored.&]
[s7; [*C@3 x]-|Element to find.&]
[s7; [*/ Return value]-|Position of the element or negative value if
value is not in AIndex.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:FindNext`(int`)const:%- [@(0.0.255) int]_[* FindNext]([@(0.0.255) int]_[*@3 i
])_[@(0.0.255) const]&]
[s2; Retrieves the position of the next element with the same value
as the element at specified position. If multi`-key ordering
is not broken and more than one element with that value exists
in AIndex, the lowest position greater than specified one is
retrieved, so positions returned by subsequent calls to FindNext
are in ascending order. When there are no more elements with
the required value, a negative number is returned. Unlinked elements
are ignored.&]
[s7; [*C@3 i]-|Position of the element.&]
[s7; [*/ Return value]-|Position of the next element with same value.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:FindLast`(const T`&`,unsigned`)const:%- [@(0.0.255) int]_[* FindLast](
[@(0.0.255) const]_[*@4 T]`&_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash])_[@(0.0.255) const]&]
[s2; Retrieves the position of the last element with specified value
in AIndex, using a precomputed hash value. The precomputed hash
value must be the same as the hash value that would be the result
of HashFn. If multi`-key ordering is not broken and more than
one element with the same value exists in AIndex, the greatest
position is retrieved. If the specified value does not exist
in AIndex, a negative number is returned. Unlinked elements are
ignored.&]
[s7; [*C@3 x]-|Element to find.&]
[s7; [*C@3 `_hash]-|Precomputed hash value.&]
[s7; [*/ Return value]-|Position of the element or negative number if
value is not in AIndex.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:FindLast`(const T`&`)const:%- [@(0.0.255) int]_[* FindLast]([@(0.0.255) c
onst]_[*@4 T]`&_[*@3 x])_[@(0.0.255) const]&]
[s2; Retrieves the position of the last element with specified value
in AIndex. If multi`-key ordering is not broken and more than
one element with the same value exists in AIndex, the greatest
position is retrieved. If element does not exist in AIndex, a
negative number is returned. Unlinked elements are ignored.&]
[s7; [*C@3 x]-|Element to find.&]
[s7; [*C@3 `_hash]-|Precomputed hash value.&]
[s7; [*/ Return value]-|Position of the element or negative number if
value is not in AIndex.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:FindPrev`(int`)const:%- [@(0.0.255) int]_[* FindPrev]([@(0.0.255) int]_[*@3 i
])_[@(0.0.255) const]&]
[s2; Retrieves the position of the previous element with the same
value as the element at the specified position. If multi`-key
ordering is not broken and more than one element with that value
exists in AIndex, the greatest position lower than specified
one is retrieved (so that positions got by subsequent calls to
FindNext are in descending order). When there are no more elements
with required value, negative number is returned. Unlinked elements
are ignored.&]
[s7; [*C@3 i]-|Position of the element.&]
[s7; [*/ Return value]-|Position of the previous element with same value.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:FindAdd`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* FindAdd]([@(0.0.255) c
onst]_[*@4 T]`&_[*@3 key], [@(0.0.255) unsigned]_[*@3 `_hash])&]
[s2; Retrieves position of first element with specified value in
AIndex, using a precomputed hash value. Precomputed hash value
must be same as hash value that would be result of HashFn. If
multi`-key ordering is not broken and more than one element with
the same value exists in AIndex, the lowest position is retrieved.
If element does not exist in AIndex, it is added to AIndex and
position of this newly added element is returned. Unlinked elements
are ignored.&]
[s7; [*C@3 key]-|Element to find or add.&]
[s7; [*C@3 `_hash]-|Precomputed hash value.&]
[s7; [*/ Return value]-|Position of the found or added element.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:FindAdd`(const T`&`):%- [@(0.0.255) int]_[* FindAdd]([@(0.0.255) const]_
[*@4 T]`&_[*@3 key])&]
[s2; Retrieves position of first element with specified value in
AIndex. If multi`-key ordering is not broken and more than one
element with the same value exists in AIndex, lowest position
is retrieved. If element does not exist in AIndex, it is added
to AIndex and position of this newly added element is returned.
Unlinked elements are ignored.&]
[s7; [*C@3 key]-|Element to find or add.&]
[s7; [*/ Return value]-|Position of the found or added element.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:operator`<`<`(const T`&`):%- [_^`:`:AIndex^ AIndex]`&_[* operator<<]([@(0.0.255) c
onst]_[*@4 T]`&_[*@3 x])&]
[s2; Operator replacement of [* void Add(const T`& x)]. By returning
reference to AIndex it allows adding multiple elements in a single
expression, thus e.g. allowing to construct a temporary Index
as part of an expression like Foo((Index<int>() << 1 << 2)).&]
[s6; Requires T to have deep copy constructor.&]
[s6; Invalidates iterators to AIndex.&]
[s6; Invalidates references to Index.&]
[s7; [*C@3 newt]-|Element to be added.&]
[s7; [*/ Return value]-|Reference to AIndex.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Unlink`(int`):%- [@(0.0.255) void]_[* Unlink]([@(0.0.255) int]_[*@3 i])&]
[s2; Unlinks the element at the specified position. The unlinked
item stays in AIndex but is ignored by any Find operation.&]
[s7; [*C@3 i]-|Position of item to unlink.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Put`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* Put]([@(0.0.255) const
]_[*@4 T]`&_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash])&]
[s2; If there are any unlinked elements in AIndex, one of them is
replaced by specified value. If there are no unlinked elements,
the element with the specified value is appended to the end of
AIndex using [* Add]. The precomputed hash should be same as the
result of HashFn. The position of the placed element is returned.&]
[s6; Invalidates multi`-key ordering.&]
[s6; Requires T to have deep copy constructor.&]
[s6; Invalidates iterators to AIndex.&]
[s6; Invalidates references to Index.&]
[s7; [*C@3 x]-|Element to put into AIndex.&]
[s7; [*C@3 `_hash]-|Precomputed hash value.&]
[s7; [*/ Return value]-|Position where the element was placed.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Put`(const T`&`):%- [@(0.0.255) int]_[* Put]([@(0.0.255) const]_[*@4 T]`&_
[*@3 x])&]
[s2; If there are any unlinked elements in AIndex, one of them is
replaced by specified value. If there are no unlinked elements,
the element with the specified value is appended to the end of
AIndex using [* Add]. The position of the placed element is returned.&]
[s6; Invalidates multi`-key ordering.&]
[s6; Requires T to have deep copy constructor.&]
[s6; Invalidates iterators to AIndex.&]
[s7; [*C@3 x]-|Element to put into AIndex.&]
[s7; [*/ Return value]-|Position where element is placed.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:FindPut`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* FindPut]([@(0.0.255) c
onst]_[*@4 T]`&_[*@3 key], [@(0.0.255) unsigned]_[*@3 `_hash])&]
[s2; Retrieves the position of the first element with the specified
value in AIndex, using a precomputed hash value. The precomputed
hash value must be the same as the hash value that would be the
result of HashFn. If the specified value does not exist in the
AIndex, it is placed to it using [* Put(const T`& x, unsigned `_hash).]
The position of the found or placed element is returned.&]
[s6;~~~.992; Invalidates multi`-key ordering.&]
[s6; Requires T to have deep copy constructor.&]
[s6; Invalidates iterators to AIndex.&]
[s6; Invalidates references to Index.&]
[s7; [*C@3 key]-|Element to find or put.&]
[s7; [*C@3 `_hash]-|Precomputed hash value.&]
[s7; [*/ Return value]-|Position of the found or placed element.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:FindPut`(const T`&`):%- [@(0.0.255) int]_[* FindPut]([@(0.0.255) const]_
[*@4 T]`&_[*@3 key])&]
[s2; Retrieves the position of the first element with the specified
value in AIndex. If the element does not exist in the AIndex,
it is placed to it using [* Put(const T`& x).] The position of
the found or placed element is returned.&]
[s6; Invalidates multi`-key ordering.&]
[s6; Requires T to have deep copy constructor.&]
[s6; Invalidates iterators to AIndex.&]
[s6; Invalidates references to Index.&]
[s7; [*C@3 key]-|Element to find or put.&]
[s7; [*C@3 `_hash]-|Precomputed hash value.&]
[s7; [*/ Return value]-|Position of the found or placed element.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Set`(int`,const T`&`,unsigned`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) i
nt]_[*@3 i], [@(0.0.255) const]_[*@4 T]`&_[*@3 x], [@(0.0.255) unsigned]_[*@3 `_hash])&]
[s2; Replaces the element at the specified position with a new element
with the specified value, using a precomputed hash`-value. Speed
of this operation depends on the total number of elements with
the same value as the specified one.&]
[s6; Requires T to have deep copy constructor.&]
[s6; Invalidates iterators to AIndex.&]
[s6; Invalidates references to Index.&]
[s7; [*C@3 i]-|Position of the element.&]
[s7; [*C@3 x]-|Value to set.&]
[s7; [*C@3 `_hash]-|Precomputed hash value.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Set`(int`,const T`&`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) int]_[*@3 i
], [@(0.0.255) const]_[*@4 T]`&_[*@3 x])&]
[s2; Replaces the element at the specified position with a new element
with the specified value. Speed of this operation depends on
total number of elements with the same value as specified the
specified one.&]
[s6; Requires T to have deep copy constructor.&]
[s6; Invalidates iterators to AIndex.&]
[s6; Invalidates references to Index.&]
[s7; [*C@3 i]-|Position of the element.&]
[s7; [*C@3 x]-|Value to set.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:operator`[`]`(int`)const:%- [@(0.0.255) const]_[*@4 T]`&_[* operator`[`]
]([@(0.0.255) int]_[*@3 i])_[@(0.0.255) const]&]
[s2; Returns the element at the specified position.&]
[s7; [*C@3 i]-|Position of the element.&]
[s7; [*/ Return value]-|Constant reference to element.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:GetCount`(`)const:%- [@(0.0.255) int]_[* GetCount]()_[@(0.0.255) const]&]
[s2; Returns number of elements in AIndex.&]
[s7; [*/ Return value]-|Actual number of elements.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:IsEmpty`(`)const:%- [@(0.0.255) bool]_[* IsEmpty]()_[@(0.0.255) const]&]
[s2; Tests whether AIndex is empty. Same as GetCount() `=`= 0.&]
[s7; [*/ Return value]-|true if AIndex is empty, false otherwise.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Clear`(`):%- [@(0.0.255) void]_[* Clear]()&]
[s2; Removes all elements from AIndex.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:ClearIndex`(`):%- [@(0.0.255) void]_[* ClearIndex]()&]
[s2; Restores multi`-key ordering.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:UnlinkKey`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* UnlinkKey]([@(0.0.255) c
onst]_[*@4 T]`&_[*@3 k], [@(0.0.255) unsigned]_[*@3 h])&]
[s2; Unlinks all elements with specified value using precomputed
hash`-value. Unlinked elements stay in AIndex but are ignored
by any Find operations. Precomputed hash value must be same as
hash value that would be result of HashFn. &]
[s7; [*C@3 k]-|Value of elements to unlink.&]
[s7; [*C@3 h]-|Precomputed hash value.&]
[s7; [*/ Return value]-|Number of elements unlinked.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:UnlinkKey`(const T`&`):%- [@(0.0.255) int]_[* UnlinkKey]([@(0.0.255) con
st]_[*@4 T]`&_[*@3 k])&]
[s2; Unlinks all elements with specified value. Unlinked elements
remain in the AIndex but are ignored by any Find operations.&]
[s7; [*C@3 k]-|Value of elements to unlink.&]
[s7; [*/ Return value]-|Number of elements unlinked.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:IsUnlinked`(int`)const:%- [@(0.0.255) bool]_[* IsUnlinked]([@(0.0.255) i
nt]_[*@3 i])_[@(0.0.255) const]&]
[s2; Tests whether the element at the specified position is unlinked.&]
[s7; [*C@3 i]-|Position.&]
[s7; [*/ Return value]-|true if element is unlinked.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Sweep`(`):%- [@(0.0.255) void]_[* Sweep]()&]
[s2; Removes all unlinked elements from AIndex. Complexity of the
operation depends on the number of elements in AIndex, not on
the number of unlinked elements. Also restores multi`-key ordering.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Insert`(int`,const T`&`,unsigned`):%- [@(0.0.255) void]_[* Insert]([@(0.0.255) i
nt]_[*@3 i], [@(0.0.255) const]_[*@4 T]`&_[*@3 k], [@(0.0.255) unsigned]_[*@3 h])&]
[s2; Inserts an element with the specified value at the specified
position, using a precomputed hash value. The precomputed hash
value must be the same as the hash value that would be the result
of HashFn. This is a slow operation, especially when combined
with any search operations.&]
[s6; Requires T to have deep copy constructor.&]
[s6; Invalidates iterators to AIndex.&]
[s6; Invalidates references to Index.&]
[s7; [*C@3 i]-|Insert position.&]
[s7; [*C@3 k]-|Element to insert.&]
[s7; [*C@3 h]-|Precomputed hash value.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Insert`(int`,const T`&`):%- [@(0.0.255) void]_[* Insert]([@(0.0.255) int
]_[*@3 i], [@(0.0.255) const]_[*@4 T]`&_[*@3 k])&]
[s2; Inserts an element with the specified value at the specified
position. This is a slow operation, especially when combined
with any search operations.&]
[s6; Requires T to have deep copy constructor.&]
[s6; Invalidates iterators to AIndex.&]
[s6; Invalidates references to Index.&]
[s7; [*C@3 i]-|Insert position.&]
[s7; [*C@3 k]-|Element to insert.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Remove`(int`):%- [@(0.0.255) void]_[* Remove]([@(0.0.255) int]_[*@3 i])&]
[s2; Removes the element at the specified position. This is a slow
operation, especially when combined with any search operations.&]
[s6; Invalidates iterators to AIndex.&]
[s6; Invalidates references to Index.&]
[s7; [*C@3 i]-|Position of the element to remove.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Remove`(const int`*`,int`):%- [@(0.0.255) void]_[* Remove]([@(0.0.255) c
onst]_[@(0.0.255) int]_`*[*@3 sorted`_list], [@(0.0.255) int]_[*@3 count])&]
[s2; Removes multiple elements from AIndex. Time of operation only
slightly depends on the number of removed elements. This is a
slow operation, especially when combined with any search operations.&]
[s6; Invalidates iterators to AIndex.&]
[s6; Invalidates references to Index.&]
[s7; [*C@3 sorted`_list]-|Pointer to array of positions to remove, in
ascending order.&]
[s7; [*C@3 count]-|Number of elements to remove.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Remove`(const`:`:Vector`<int`>`&`):%- [@(0.0.255) void]_[* Remove]([@(0.0.255) c
onst]_[_^`:`:Vector^ Vector]<int>`&_[*@3 sorted`_list])&]
[s2; Removes multiple elements from AIndex. Same as Remove(sorted`_list,
sorted`_list.GetCount()).&]
[s6; Invalidates iterators to AIndex.&]
[s6; Invalidates references to Index.&]
[s7; [*C@3 sorted`_list]-|Sorted Vector of positions to remove.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:RemoveKey`(const T`&`,unsigned`):%- [@(0.0.255) int]_[* RemoveKey]([@(0.0.255) c
onst]_[*@4 T]`&_[*@3 k], [@(0.0.255) unsigned]_[*@3 h])&]
[s2; Removes all elements with the specified value using a precomputed
hash`-value. The precomputed hash value must be the same as the
hash value that would be the result of HashFn. This is a slow
operation, especially when combined with any search operations.&]
[s7; [*C@3 k]-|Value of the elements to remove.&]
[s7; [*C@3 h]-|Precomputed hash value.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:RemoveKey`(const T`&`):%- [@(0.0.255) int]_[* RemoveKey]([@(0.0.255) con
st]_[*@4 T]`&_[*@3 k])&]
[s2; Removes all elements with the specified value. This is a slow
operation, especially when combined with any search operations.&]
[s7; [*C@3 k]-|Value of the elements to remove.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Trim`(int`):%- [@(0.0.255) void]_[* Trim]([@(0.0.255) int]_[*@3 n])&]
[s2; Reduces the number of elements in AIndex to the specified number.
Requested number must be less than or equal to actual number
of elements in AIndex.&]
[s7; [*C@3 n]-|Requested number of elements.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Drop`(int`):%- [@(0.0.255) void]_[* Drop]([@(0.0.255) int]_[*@3 n]_`=_[@3 1])
&]
[s2; Drops the specified number of elements from the end of the AIndex
(same as Trim(GetCount() `- n)).&]
[s7; [*C@3 n]-|Number of elements.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Top`(`)const:%- [@(0.0.255) const]_[*@4 T]`&_[* Top]()_[@(0.0.255) const]&]
[s2; Returns a reference to the last element in the AIndex.&]
[s7; [*/ Return value]-|Reference of thr last element in the AIndex.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Reserve`(int`):%- [@(0.0.255) void]_[* Reserve]([@(0.0.255) int]_[*@3 n])&]
[s2; Reserves capacity. If the requested capacity is greater than
current capacity, capacity is increased to the requested value.&]
[s7; [*C@3 n]-|Requested capacity.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Shrink`(`):%- [@(0.0.255) void]_[* Shrink]()&]
[s2; Minimizes the memory consumption of AIndex by decreasing the
capacity to the number of elements.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:GetAlloc`(`)const:%- [@(0.0.255) int]_[* GetAlloc]()_[@(0.0.255) const]&]
[s2; Returns the current capacity of AIndex.&]
[s7; [*/ Return value]-|Capacity of AIndex.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Serialize`(`:`:Stream`&`):%- [@(0.0.255) void]_[* Serialize]([_^`:`:Stream^ S
tream]`&_[*@3 s])&]
[s2; Serializes content of AIndex to/from Stream. Works only if NTL
is used as part of UPP.&]
[s6; Requires T to have serialization operator defined.&]
[s7; [*C@3 s]-|Target/source stream.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:PickKeys`(`)pick`_:%- [*@4 V]_[* PickKeys]()_pick`_&]
[s2; Returns a basic random access container of elements. Destroys
AIndex by picking.&]
[s7; [*/ Return value]-|Basic random access container of elements in
AIndex.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:GetKeys`(`)const:%- [@(0.0.255) const]_[*@4 V]`&_[* GetKeys]()_[@(0.0.255) c
onst]&]
[s2; Returns a constant reference to basic random access container
of elements.&]
[s7; [*/ Return value]-|Constant reference to a basic random access
container of elements.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:operator`=`(pick`_ V`&`):%- [_^`:`:AIndex^ AIndex]`&_[* operator`=](pi
ck`__[*@4 V]`&_[*@3 s])&]
[s2; Assigns basic random access container to AIndex. Transfers the
source container in short constant time, but destroys it by picking.&]
[s7; [*C@3 s]-|Source container.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:operator`<`<`=`(const V`&`):%- [_^`:`:AIndex^ AIndex]`&_[* operator<<`=
]([@(0.0.255) const]_[*@4 V]`&_[*@3 s])&]
[s2; Assigns the basic random access container to AIndex, while preserving
the value of the source container.&]
[s6; Requires T to have deep copy constructor or optional deep copy.&]
[s7; [*C@3 s]-|Source container.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:AIndex`(pick`_ V`&`):%- [* AIndex](pick`__[*@4 V]`&_[*@3 s])&]
[s2; Pick`-constructs AIndex from a basic random access container.
Transfers the source container in short constant time, but destroys
it by picking.&]
[s7; [*C@3 s]-|Source basic random access container.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:AIndex`(const V`&`,int`):%- [* AIndex]([@(0.0.255) const]_[*@4 V]`&_[*@3 s
], [@(0.0.255) int])&]
[s2; Deep`-copy constructs AIndex from basic random access container.&]
[s6; Requires T to have deep copy constructor or optional deep copy
constructor.&]
[s7; [*C@3 s]-|Source AIndex.&]
[s5;K%- typedef_T_ValueType&]
[s2; Typedef of T for use in templated algorithms.&]
[s5;K%- typedef_typename_[^V`:`:ConstIterator^ V`::ConstIterator]_ConstIterator&]
[s2; Constant iterator type.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:Begin`(`)const:%- [_^`:`:AIndex`:`:ConstIterator^ ConstIterator]_[* Be
gin]()_[@(0.0.255) const]&]
[s2; Returns a constant iterator to the first element in AIndex.&]
[s7; [*/ Return value]-|Iterator.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:End`(`)const:%- [_^`:`:AIndex`:`:ConstIterator^ ConstIterator]_[* End](
)_[@(0.0.255) const]&]
[s2; Returns a constant iterator to the position just beyond the
last element in AIndex.&]
[s7; [*/ Return value]-|Iterator.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:GetIter`(int`)const:%- [_^`:`:AIndex`:`:ConstIterator^ ConstIterator
]_[* GetIter]([@(0.0.255) int]_[*@3 pos])_[@(0.0.255) const]&]
[s2; Returns a constant iterator to the element at specified position.
Same as [* Begin() `+ i]. The benefit of this method is that [* pos]
is range checked in debug mode.&]
[s7; [*C@3 pos]-|Required position.&]
[s7; [*/ Return value]-|Iterator.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:AIndex`(`):%- [* AIndex]()&]
[s2; Constructor. Constructs an empty AIndex.&]
[s3;%- &]
[s4;%- &]
[s5;:`:`:AIndex`:`:AIndex`(const`:`:AIndex`&`,int`):%- [* AIndex]([@(0.0.255) const]_[* AIn
dex]`&_[*@3 s], [@(0.0.255) int])&]
[s2; Optional deep copy constructor.&]
[s6; Requires T to have deep copy constructor or optional deep copy
constructor.&]
[s7; [*C s]-|Source AIndex.&]
[s0; ]

123
uppdev/$.tpp/Test$en-us.tpp Normal file
View file

@ -0,0 +1,123 @@
topic "Heap implementation";
[ $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9;2 $$1,0#37138531426314131252341829483370:item]
[{_}%EN-US
[s0;2%- &]
[ {{10000F(128)G(128)@1 [s0; [* Constructor Detail]]}}&]
[s0; &]
[s1;K:`:`:Size`_`:`:`:`:Size`_`(`):%- &]
[ {{10000F(128)G(128)@1 [s0; [* Public Field Detail]]}}&]
[s0; &]
[s1;K:`:`:Size`_`:`:cx:* &]
[ {{10000F(128)G(128)@1 [s0; [* Method Detail]]}}&]
[s0; &]
[s0; Heap implementation&]
[s0; U`+`+ heap is divided into 3 categories based on the block size
`- small, medium and big.&]
[s0; &]
[s0; Small blocks&]
[s0; Blocks <`= 256 bytes. Such blocks are 16 bytes rounded, so there
is 16 possible sizes there. According to our research, blocks
<`= 256 represent the majority of blocks used in C`+`+/U`+`+
applications (>98% of all blocks).&]
[s0; &]
[s0; Small blocks are allocated in 4KB pages. U`+`+ always expects
to get any memory from the system 4KB aligned (this is provided
by platform specific SysAllocRaw and SysFreeRaw functions).&]
[s0; &]
[s0; Each 4KB pages is dedicated to single block size. Therefore
there is no need to store any per`-block information; instead
informations about the whole block is stored in the 32 bytes
header at the beginning of 4KB page. This header stores pointer
to the list of free blocks in the page, double`-link pointers
for the block so that it can be stored in allocator structures,
total number of blocks in the 4KB page and number of free blocks
in 4KB page.&]
[s0; &]
[s0; Allocator keeps the list of 4KB page is that are completely
used (no free blocks) in 16 element (one element per block size)
sFull array of lists, using double`-linked pointers. It stores
partially used pages in sWork 16 elements array of litst and
unused pages in sFree list.&]
[s0; &]
[s0; Allocator also uses per`-thread cache of small blocks. In this
cache, up to 32 blocks for each of 16 block sizes is cached (linked)
without being really deallocated (deallocation requires costly
serialization using critical section). If there is no block available
in the cache for allocation, 16 blocks are allocated and put
into the cache at once (means that serialization is only used
once per 16 allocations in the worst case). If block is deallocated
and there is already 32 blocks in the cache, 16 blocks from the
cache are deallocated within single serialization event (means
that serialization is only used once per 16 deallocations in
the worst case).&]
[s0; &]
[s0; Now the critical implementation detail is how, given the pointer
to the block in the Free, the header of 4KB page and that way
the size of block is decided. More specifically, how is small
block determined, because if we know we have small block, we
can look at the start of 4KB page. The trick is that larger than
256 bytes block are always placed at the address that ends with
8 in hex (is 8 bytes aligned and 16 bytes misaligned), while
small blocks are always 16 bytes aligned. That makes test simple
`- blocks whose address `& 8 is nonzero are >256, if `&8 is zero
we have small block and can look at the beginning of 4KB page
to get more info.&]
[s0; &]
[s0; If allocation/deallocation runs out of cache, the real work
has to be done:&]
[s0; &]
[s0; When allocating small block, first sWork list is checked for
the block. If no available, sFree list is checked to get free
block, if even that is empty, new block is obtained from the
system (using SysAllocRaw). Note that allocator keeps the number
of free blocks in the header. Implementation detail: there are
two possibilities how free blocks can be recorded in the block
header. First, there is a single`-linked list of free blocks.
Second, for blocks that are initially free (got from sFree or
system), portion of free blocks in the 4KB page is left out of
free list and managed by `'free`' member `- the offset of last
such free block in page. If this offset is >32, free block is
obtained using it (subtracting the block size). This is used
to avoid the need to link all free blocks in the page when getting
new free page.&]
[s0; &]
[s0; When freeing, number of free blocks in 4KB page is incremented.
If it is now 1, it means block has to be moved from sFull to
sWork. If it now equals the total number of blocks in page, 4KB
page moves to sFree.&]
[s0; &]
[s0; &]
[s0; Medium blocks &]
[s0; Blocks >256 and < 65504 bytes. Approximate best`-fit allocator
is used for these blocks. Memory is organized in 64KB chunks
(obtained using SysAllocRaw). Each allocated block has header
with its size and the size of previous block.&]
[s0; &]
[s0; Allocator keeps an array of lists of free blocks of particular
sizes. Size distribution is mostly exponential, blocks lower
than 2048 are rounded up to 32 bytes, between 2048 and about
35000, rounding exponentially grows up to 2048 and then stays
at this value. Each such size has its index in the array of free
blocks.&]
[s0; &]
[s0; When allocating, index is decided based on the size and array
is searched starting with that index to obtain the smallest free
block (best`-fit) greater than required size. Bigger blocks are
divided.&]
[s0; &]
[s0; When freeing, allocator merges the freed block with previous
or next free block if any.&]
[s0; &]
[s0; Note that master header of 64KB blocks and all operations are
designed so that resulting pointers are NOT 16 byte aligned (see
description of small blocks).&]
[s0; &]
[s0; &]
[s0; Big blocks&]
[s0; For blocks bigger than 65504 bytes, allocator simply uses SysAllocRaw
to directly obtain virtual memory. It stores information about
the block in the header at the beginning of block, also makeing
block 16`-bytes unaligned in the process. Free then returns virtual
memory back to the system.&]
[s0; ]

View file

@ -0,0 +1,4 @@
TITLE("This is test template!")
COMPRESSED
120,156,139,86,80,81,49,208,49,80,54,32,0,172,92,82,211,18,75,115,74,98,163,171,227,107,85,93,253,116,67,131,21,162,139,13,172,21,66,50,50,139,21,128,168,36,181,184,4,72,228,22,228,36,150,164,42,198,2,0,142,132,23,245,

12
uppdev/AAA/AAA.upp Normal file
View file

@ -0,0 +1,12 @@
uses
CtrlLib;
file
test.iml,
srcdoc.tpp,
Upscale.cpp,
main.cpp;
mainconfig
"" = "GUI SSE2";

405
uppdev/AAA/Upscale.cpp Normal file
View file

@ -0,0 +1,405 @@
#include <Draw/Draw.h>
using namespace Upp;
int sqr(int x)
{
return x * x;
}
RGBA Blend(RGBA a, RGBA b)
{
RGBA r;
r.a = ((int)a.a + b.a) >> 1;
r.r = ((int)a.r + b.r) >> 1;
r.g = ((int)a.g + b.g) >> 1;
r.b = ((int)a.b + b.b) >> 1;
return r;
}
RGBA Get(const Image& img, int x, int y)
{
return Rect(img.GetSize()).Contains(x, y) ? img[y][x] : White();
}
int SqrDistance(RGBA a, RGBA b)
{
return sqr(77 * ((int)a.r - b.r)) + sqr(151 * ((int)a.g - b.g)) + sqr(28 * ((int)a.b - b.b));
}
bool IsSimilar(RGBA a, RGBA b, int max)
{
return SqrDistance(a, b) <= sqr(max);
}
int GetColorIndex(Vector<RGBA>& colors, Color c, int max_distance)
{
for(int i = 0; i < colors.GetCount(); i++)
if(IsSimilar(colors[i], c, max_distance))
return i;
colors.Add(c);
return colors.GetCount() - 1;
}
struct Colors : Vector<RGBA> {
const Image& m;
int x, y;
int DX(int r) {
r &= 7;
return findarg(r, 0, 7, 6) >= 0 ? -1 : findarg(r, 2, 3, 4) >= 0 ? 1 : 0;
}
int DY(int r) {
r &= 7;
return findarg(r, 0, 1, 2) >= 0 ? -1 : findarg(r, 4, 5, 6) >= 0 ? 1 : 0;
}
RGBA Get(int dx, int dy) {
return ::Get(m, x + dx, y + dy);
}
RGBA Get(int r) {
return ::Get(m, x + DX(r), y + DY(r));
}
int GetCI(Color c)
{
return GetColorIndex(*this, c, 500);
}
int GetCI(int r) {
return GetCI(Get(r));
}
int GetCI(int dx, int dy) {
return GetColorIndex(*this, Get(dx, dy), 500);
}
Colors(const Image& m, int x, int y) : m(m), x(x), y(y) {}
};
Image Upscale(const Image& simg)
{
Size isz = simg.GetSize();
Image lan = RescaleFilter(simg, 2 * isz, FILTER_BILINEAR);
ImageBuffer ib(2 * isz);
Fill(~ib, RGBAZero(), ib.GetLength());
for(int x = 0; x < isz.cx; x++)
for(int y = 0; y < isz.cy; y++) {
DLOG("---------- " << x << ", " << y);
RGBA c = simg[y][x];
int p[16];
// 0 1 2
// 7 c 3
// 6 5 4
Colors colors(simg, x, y);
for(int i = 0; i < 8; i++) {
p[i] = p[i + 8] = colors.GetCI(i);
DLOG(i << ": " << p[i]);
}
int ci = colors.GetCI(c);
DDUMP(colors);
// 0 1
// 3 2
int *pp = p;
/* Index<int> in;
in.FindAdd(p[1]);
in.FindAdd(p[3]);
in.FindAdd(p[5]);
in.FindAdd(p[7]);
DDUMP(in.GetCount()); */
bool cq = (x ^ y) & 1;
for(int r = 0; r < 4; r++) {
int ix = 2 * x + (r == 1 || r == 2);
int iy = 2 * y + (r >= 2);
RGBA& t = ib[iy][ix];
t = c;
bool mrule = ci == pp[4] && ci == pp[3] && ci == pp[5] && ci != pp[0];
if(pp[1] == pp[7] && pp[0] == pp[1] &&
(!mrule || (Grayscale(colors.Get(2 * r + 0)) > Grayscale(c)))
// && pp[1] != pp[3] && pp[1] != pp[4] && pp[1] != pp[5]
// && !(pp[0] == pp[7] && pp[0] == pp[6] && pp[0] == pp[1] && pp[0] == pp[2]) // Box rule
// && ((cq/* && (r == 0 || r == 2)*/) || (pp[1] != pp[0]))
) {
t = Blend(colors.Get(2 * r + 7), colors.Get(2 * r + 1));
}
pp += 2;
}
}
return ib;
}
bool TryAA(int m, int d, RGBA a, RGBA b, RGBA c)
{
DDUMP(m);
DDUMP(d);
DDUMP(abs(m * (c.r - a.r) / d + a.r - b.r));
DDUMP(abs(m * (c.g - a.g) / d + a.g - b.g));
DDUMP(abs(m * (c.b - a.b) / d + a.b - b.b));
if(abs(m) > abs(d) || m * d < 0 || abs(m) < 10)
return false;
return (abs(m * (b.r - a.r) / d + a.r - b.r) < 4 &&
abs(m * (c.g - a.g) / d + a.g - b.g) < 4 &&
abs(m * (c.b - a.b) / d + a.b - b.b) < 4);
}
int AADetected(RGBA a, RGBA b, RGBA c)
{
DLOG("AADetect " << a << ", " << b << ", " << c);
if(IsSimilar(a, c, 500) || IsSimilar(b, c, 500) || IsSimilar(a, b, 500))
return false;
return TryAA(b.g - a.g, c.g - a.g, a, b, c) ||
TryAA(b.r - a.r, c.r - a.r, a, b, c) ||
TryAA(b.g - a.g, c.g - a.g, a, b, c);
}
Image UpscaleA(const Image& simg)
{
Size isz = simg.GetSize();
ImageBuffer ib(2 * isz);
Fill(~ib, RGBAZero(), ib.GetLength());
for(int x = 0; x < isz.cx; x++)
for(int y = 0; y < isz.cy; y++) {
DLOG("---------- " << x << ", " << y);
RGBA c = simg[y][x];
int p[16];
// 0 1 2
// 7 c 3
// 6 5 4
Colors m(simg, x, y);
for(int i = 0; i < 8; i++) {
p[i] = p[i + 8] = m.GetCI(i);
DLOG(i << ": " << p[i]);
}
int ci = m.GetCI(c);
RGBA t[4];
t[0] = t[1] = t[2] = t[3] = c;
bool hl = p[0] == p[1] && p[1] == p[2] ||
p[6] == p[5] && p[5] == p[4];
bool vl = p[0] == p[7] && p[7] == p[6] ||
p[2] == p[3] && p[3] == p[4];
bool dia = !hl && !vl;
dia = true;
int horz = AADetected(m.Get(7), c, m.Get(3)) * 1;
int vert = AADetected(m.Get(1), c, m.Get(5)) * 1;
int dia1 = AADetected(m.Get(0), c, m.Get(4)) * 1 * dia;
int dia2 = AADetected(m.Get(2), c, m.Get(6)) * 1 * dia;
const int *pp = p;
if(horz || vert || dia1 || dia2) {
if(horz && !vert)
t[1] = t[3] = m.Get(3);
else
if(vert && !horz)
t[2] = t[3] = m.Get(5);
else
const int *pp = p;
for(int i = 0; i < 4; i++) {
if(pp[0] == pp[1] && pp[1] == pp[7])
t[decode(i, 2, 3, 3, 2, i)] = m.Get(i * 2);
pp += 2;
}
}
ib[2 * y + 0][2 * x + 0] = t[0];
ib[2 * y + 0][2 * x + 1] = t[1];
ib[2 * y + 1][2 * x + 0] = t[2];
ib[2 * y + 1][2 * x + 1] = t[3];
}
return ib;
}
Image UpscaleA2(const Image& simg)
{
Size isz = simg.GetSize();
ImageBuffer ib(2 * isz);
Fill(~ib, RGBAZero(), ib.GetLength());
for(int y = 0; y < isz.cy; y++)
for(int x = 0; x < isz.cx; x++) {
DLOG("---------- " << x << ", " << y);
RGBA c = simg[y][x];
int p[16];
// 0 1 2
// 7 c 3
// 6 5 4
Colors m(simg, x, y);
for(int i = 0; i < 8; i++) {
p[i] = p[i + 8] = m.GetCI(i);
DLOG(i << ": " << p[i]);
}
int ci = m.GetCI(c);
RGBA t[4];
t[0] = t[1] = t[2] = t[3] = c;
bool h = AADetected(m.Get(7), c, m.Get(3));
bool v = AADetected(m.Get(1), c, m.Get(5));
if(h && v) {
const int *pp = p;
for(int i = 0; i < 4; i++) {
if(pp[0] == pp[1] && pp[1] == pp[7])
t[decode(i, 2, 3, 3, 2, i)] = m.Get(i * 2);
pp += 2;
}
}
else
if(h)
t[1] = t[3] = m.Get(3);
else
if(v)
t[2] = t[3] = m.Get(5);
ib[2 * y + 0][2 * x + 0] = t[0];
ib[2 * y + 0][2 * x + 1] = t[1];
ib[2 * y + 1][2 * x + 0] = t[2];
ib[2 * y + 1][2 * x + 1] = t[3];
}
return ib;
}
/* int best = max(horz, vert, dia1, dia2);
if(best == horz) t[1] = t[3] = m.Get(3);
else
if(best == vert) t[2] = t[3] = m.Get(5);
else
if(best == dia1) t[3] = m.Get(4);
else
if(best == dia2) t[2] = m.Get(6);*/
static inline int GetResult(uint32 A, uint32 B, uint32 C, uint32 D)
{
int x = 0;
int y = 0;
int r = 0;
if (A == C) x++; else if (B == C) y++;
if (A == D) x++; else if (B == D) y++;
if (x <= 1) r++;
if (y <= 1) r--;
return r;
}
RGBA Blend(RGBA a, RGBA b, RGBA c, RGBA d)
{
return Blend(Blend(a, b), Blend(c, d));
}
Image Upscale2(const Image& simg) // Super SAI
{
Size isz = simg.GetSize();
ImageBuffer ib(2 * isz);
Fill(~ib, RGBAZero(), ib.GetLength());
for(int x = 0; x < isz.cx; x++)
for(int y = 0; y < isz.cy; y++) {
DLOG("---------- " << x << ", " << y);
Colors m(simg, x, y);
int colorB0 = m.GetCI(-1, -1);
int colorB1 = m.GetCI(0, -1);
int colorB2 = m.GetCI(1, -1);
int colorB3 = m.GetCI(2, -1);
int color4 = m.GetCI(-1, 0);
int color5 = m.GetCI(0, 0);
int color6 = m.GetCI(1, 0);
int colorS2 = m.GetCI(2, 0);
int color1 = m.GetCI(-1, 1);
int color2 = m.GetCI(0, 1);
int color3 = m.GetCI(1, 1);
int colorS1 = m.GetCI(2, 1);
int colorA0 = m.GetCI(-1, 2);
int colorA1 = m.GetCI(0, 2);
int colorA2 = m.GetCI(1, 2);
int colorA3 = m.GetCI(2, 2);
RGBA product1a, product1b, product2a, product2b;
RGBA c2 = m.Get(0, 1);
RGBA c3 = m.Get(1, 1);
RGBA c5 = m.Get(0, 0);
RGBA c6 = m.Get(1, 0);
if(color2 == color6 && color5 != color3)
product2b = product1b = c2;
else
if(color5 == color3 && color2 != color6)
product2b = product1b = c5;
else
if(color5 == color3 && color2 == color6) {
int r = 0;
r += GetResult (color6, color5, color1, colorA1);
r += GetResult (color6, color5, color4, colorB1);
r += GetResult (color6, color5, colorA2, colorS1);
r += GetResult (color6, color5, colorB2, colorS2);
if(r > 0)
product2b = product1b = c6;
else
if(r < 0)
product2b = product1b = c5;
else
product2b = product1b = Blend(c5, c6);
}
else {
if(color6 == color3 && color3 == colorA1 && color2 != colorA2 && color3 != colorA0)
product2b = Blend(c3, c3, c3, c2);
else
if(color5 == color2 && color2 == colorA2 && colorA1 != color3 && color2 != colorA3)
product2b = Blend(c2, c2, c2, c3);
else
product2b = Blend(c2, c3);
if(color6 == color3 && color6 == colorB1 && color5 != colorB2 && color6 != colorB0)
product1b = Blend(c6, c6, c6, c5);
else
if(color5 == color2 && color5 == colorB2 && colorB1 != color6 && color5 != colorB3)
product1b = Blend(c6, c5, c5, c5);
else
product1b = Blend(c5, c6);
}
if (color5 == color3 && color2 != color6 && color4 == color5 && color5 != colorA2)
product2a = Blend(c2, c5);
else
if (color5 == color1 && color6 == color5 && color4 != color2 && color5 != colorA0)
product2a = Blend(c2, c5);
else
product2a = c2;
if (color2 == color6 && color5 != color3 && color1 == color2 && color2 != colorB2)
product1a = Blend(c2, c5);
else
if (color4 == color2 && color3 == color2 && color1 != color5 && color2 != colorB0)
product1a = Blend(c2, c5);
else
product1a = c5;
ib[2 * y][2 * x] = product1a;
ib[2 * y][2 * x + 1] = product1b;
ib[2 * y + 1][2 * x] = product2a;
ib[2 * y + 1][2 * x + 1] = product2b;
}
return ib;
}

4
uppdev/AAA/init Normal file
View file

@ -0,0 +1,4 @@
#ifndef _AAA_icpp_init_stub
#define _AAA_icpp_init_stub
#include "CtrlLib/init"
#endif

85
uppdev/AAA/main.cpp Normal file
View file

@ -0,0 +1,85 @@
#include <CtrlLib/CtrlLib.h>
using namespace Upp;
#define IMAGECLASS TestImg
#define IMAGEFILE <AAA/test.iml>
#include <Draw/iml_header.h>
#define IMAGECLASS TestImg
#define IMAGEFILE <AAA/test.iml>
#include <Draw/iml_source.h>
Image Upscale(const Image& simg);
Image Upscale2(const Image& simg);
Image UpscaleA(const Image& simg);
Image UpscaleA2(const Image& simg);
struct Test : TopWindow {
virtual void Paint(Draw& w);
EditIntSpin passes, amount;
void DoRefresh() { Refresh(); }
void PutImage(Draw& w, int& y, const Image& m)
{
w.DrawImage(20, y, m);
y += m.GetSize().cy + 10;
}
typedef Test CLASSNAME;
Test();
};
void Test::Paint(Draw& w)
{
w.DrawRect(GetSize(), SColorFace());
Image simg = TestImg::test2();
int y = 10;
PutImage(w, y, simg);
Size isz = simg.GetSize();
w.DrawImage(10, 150 + 12 * isz.cy, Magnify(simg, 8, 8));
simg = Unmultiply(simg);
Image r = Upscale(simg);
w.DrawImage(10, 100, r);
w.DrawImage(10, 150 + 2 * isz.cy, Magnify(r, 4, 4));
#if 0
for(int i = FILTER_NEAREST; i <= FILTER_LANCZOS5; i++) {
Image img = RescaleFilter(simg, 2 * simg.GetSize(), i);
w.DrawImage(10, y, img);
img = Unmultiply(img);
for(int j = 0; j < (int)~passes; j++)
img = Sharpen(img, ~amount);
w.DrawImage(300, y, Premultiply(img));
w.DrawText(600, y + 10, AsString(i));
y += img.GetSize().cy + 20;
}
#endif
}
Test::Test()
{
amount <<= 50;
passes <<= 2;
Add(amount.BottomPos(2, 20).LeftPos(2, 50));
Add(passes.BottomPos(2, 20).LeftPos(60, 50));
// amount <<= THISBACK(Amount);
// passes <<= THISBACK(Passes);
Zoomable().Sizeable();
}
using namespace std;
GUI_APP_MAIN
{
Test().Run();
}

View file

@ -0,0 +1,29 @@
topic "TheIDE";
[ $$0,0#00000000000000000000000000000000:Default]
[{_}%EN-US
[s0; Ahoj Jášo,&]
[s0; &]
[s0; Posílám pozdravy ze Suchdola.&]
[s0; &]
[s0; Moc jsi nás pobavil že si necháváš dopisy psát za sebe.
Papírové (nebo Papyrové ?) zlaťáky vypadají dobře, díky
za ukázku.&]
[s0; &]
[s0; Doma se máme dobře. Maminka s Ellou byly většinu času na
chatě, pořád dokola (a na kole) jezdím do práce a programuje.&]
[s0; &]
[s0; Maminka Elle sehnala (koupila od Aniny) domeček na zahradu,
tak ho dneska budeme asi stavět. Snad se to bude líbit.&]
[s0; &]
[s0; K narozeninám jsem ti definitivně koupil Arduino `- a sám
sobě jsem hned koupil takovou jednodušší víc hard`-core
verzi. se těším to přijde, vypadá to jak dost šikovná
věcička. Ten tvůj nápad na zařízení které zahraje zvuk
když někdo vejde se s tím úplně přesně udělat.&]
[s0; &]
[s0; Přeju příjemnou poslední třetinu tábora, uvidíme se cca
za týden.&]
[s0; &]
[s0; Ahoj,&]
[s0; &]
[s0; Táta]]

View file

@ -0,0 +1,29 @@
topic "Ahoj Klárko,";
[ $$0,0#00000000000000000000000000000000:Default]
[{_}%EN-US
[s0; Ahoj Klárko,&]
[s0; &]
[s0; &]
[s0; Posílám pozdravy ze Suchdola.&]
[s0; &]
[s0; Doma se máme dobře. Maminka s Ellou byly většinu času na
chatě, pořád dokola (a na kole) jezdím do práce a programuju.
Trochu ješte také uklízíme sklep. Snad zase budu mít
dílnu...&]
[s0; &]
[s0; Maminka Elle sehnala (koupila od Aniny) domeček na zahradu,
tak ho dneska budeme asi stavět. Snad se to bude líbit.&]
[s0; &]
[s0; Elle v poslední době zažila několik večerních akcí `-
s maminkou byla na večirku u Aniny a včera byla s námi v hospodě.
Začalo se to líbit chodit spát v devět večer...&]
[s0; &]
[s0; Rybu jsem poctivě krmil, vypadá fit.&]
[s0; &]
[s0; Přeju příjemnou poslední třetinu tábora, uvidíme se cca
za týden.&]
[s0; &]
[s0; &]
[s0; Ahoj,&]
[s0; &]
[s0; Táta]]

452
uppdev/AAA/test.iml Normal file
View file

@ -0,0 +1,452 @@
PREMULTIPLIED
IMAGE_ID(test)
IMAGE_ID(test1)
IMAGE_ID(t)
IMAGE_ID(test3)
IMAGE_ID(test2)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,157,9,84,20,87,22,134,27,212,49,57,232,57,153,100,36,78,22,199,153,152,196,144,68,147,81,140,30,53)
IMAGE_DATA(81,81,92,136,38,140,98,196,40,110,113,67,209,16,137,130,168,20,42,202,166,128,162,2,34,130,40,72,43,173,70,84)
IMAGE_DATA(80,217,26,68,16,100,223,87,217,65,246,29,90,224,159,122,21,219,211,52,221,77,3,182,168,169,255,156,123,124,85,117)
IMAGE_DATA(235,213,19,222,119,239,125,175,23,56,28,165,209,28,5,73,121,250,151,28,234,188,9,39,193,217,144,243,128,62,30,42)
IMAGE_DATA(238,160,164,196,121,151,92,63,245,43,39,106,200,96,206,167,253,121,216,112,14,71,135,226,112,32,203,136,79,127,158,49)
IMAGE_DATA(97,194,6,244,214,250,243,60,86,172,94,81,13,209,156,192,177,14,243,152,87,36,168,12,70,148,207,247,229,59,55,125)
IMAGE_DATA(25,62,83,255,72,200,58,143,180,42,98,164,189,99,195,56,126,220,85,221,202,36,127,253,42,199,173,156,168,65,202,156)
IMAGE_DATA(15,123,243,16,81,230,185,180,149,211,6,41,86,254,212,135,234,71,44,32,60,167,166,166,50,150,158,158,142,204,204,76)
IMAGE_DATA(198,114,115,115,145,159,159,143,194,194,194,103,86,94,94,222,43,254,33,69,189,29,35,43,86,3,45,245,79,56,166,124)
IMAGE_DATA(143,5,197,109,101,55,16,203,91,82,227,239,50,177,193,50,188,18,142,209,229,56,19,95,202,24,105,31,229,231,34,216)
IMAGE_DATA(117,92,83,14,127,103,83,12,111,245,227,147,91,56,15,233,219,135,200,243,12,194,111,79,204,247,20,11,122,27,3,228)
IMAGE_DATA(225,159,112,95,90,90,218,39,254,57,34,97,64,216,238,205,248,88,177,234,143,168,75,143,33,201,246,248,148,97,215,249)
IMAGE_DATA(18,252,234,94,128,45,167,11,176,246,84,62,116,237,115,240,63,155,12,204,183,72,199,183,84,42,212,119,37,62,155,171)
IMAGE_DATA(52,255,123,227,253,244,171,162,185,75,106,130,220,38,63,57,118,191,0,62,9,37,240,226,63,194,73,94,10,142,93,74)
IMAGE_DATA(129,123,96,46,188,226,138,224,22,26,140,36,222,156,142,218,28,175,118,239,125,31,100,12,25,36,123,29,32,204,249,132)
IMAGE_DATA(223,228,62,176,47,180,100,145,122,64,222,56,64,120,38,220,11,217,207,206,206,238,150,251,9,251,44,255,172,94,69,17)
IMAGE_DATA(214,111,197,55,136,88,61,174,199,214,225,106,116,45,46,71,213,224,98,68,53,60,249,85,112,11,169,128,243,157,199,112)
IMAGE_DATA(188,85,6,59,191,18,88,93,45,194,71,219,30,62,155,171,195,222,224,76,63,189,253,111,25,55,236,212,154,172,131,115)
IMAGE_DATA(225,29,85,0,94,112,30,178,11,235,80,89,215,128,138,186,70,100,20,212,193,243,118,54,220,194,242,224,115,205,22,247)
IMAGE_DATA(92,39,182,218,252,242,70,172,44,254,251,147,243,159,71,45,64,120,22,230,124,33,251,162,53,191,40,251,21,21,21,44)
IMAGE_DATA(255,172,94,41,9,249,247,137,168,129,87,120,13,206,241,171,225,22,92,9,167,187,21,56,238,79,215,235,126,101,176,188)
IMAGE_DATA(90,2,243,203,133,48,245,46,128,145,231,35,108,115,203,5,197,45,192,123,107,163,186,204,213,255,140,83,183,217,229,155)
IMAGE_DATA(4,151,240,60,112,233,92,79,84,93,91,139,204,226,82,180,208,109,98,13,157,128,147,95,54,78,134,100,97,31,151,143)
IMAGE_DATA(15,62,87,183,144,57,190,231,204,190,104,12,32,125,247,244,243,33,60,19,238,9,223,196,164,177,79,172,150,254,191,202)
IMAGE_DATA(226,95,156,109,121,248,103,227,1,43,69,138,240,127,35,174,30,213,141,237,56,75,115,95,213,240,4,141,173,29,104,108)
IMAGE_DATA(233,64,67,75,59,162,178,26,233,24,80,138,204,146,22,28,240,45,68,106,81,51,189,22,200,194,78,207,60,140,212,13)
IMAGE_DATA(239,50,55,39,44,53,10,249,253,114,18,156,110,101,32,149,206,251,77,79,58,209,208,212,132,19,110,103,81,78,179,81)
IMAGE_DATA(223,218,10,223,128,32,240,51,107,113,152,155,8,226,75,238,145,54,54,97,238,127,222,236,11,141,244,109,166,163,131,225)
IMAGE_DATA(195,135,75,173,3,8,207,36,231,139,179,47,92,247,139,154,44,254,37,237,237,201,203,63,27,3,88,41,74,38,222,37)
IMAGE_DATA(76,173,223,68,51,239,116,251,49,195,190,237,245,82,230,152,226,22,162,184,186,13,126,15,171,153,227,163,215,139,209,220)
IMAGE_DATA(214,129,159,236,210,97,224,150,3,213,69,33,93,230,229,60,83,239,42,67,175,88,88,93,72,64,121,179,0,213,244,61)
IMAGE_DATA(109,244,220,53,161,204,113,158,119,13,187,204,204,113,59,34,10,73,181,2,252,118,50,10,196,151,220,35,105,92,66,246)
IMAGE_DATA(37,174,247,105,102,193,229,254,249,111,79,156,203,240,37,125,59,142,24,193,196,0,105,63,31,194,179,248,62,191,104,206)
IMAGE_DATA(39,53,63,225,190,190,190,158,49,73,252,247,144,219,229,201,255,108,12,96,165,16,109,115,47,192,197,251,213,104,239,160)
IMAGE_DATA(115,53,157,243,91,5,157,76,173,223,72,231,126,82,235,23,86,182,161,162,94,192,196,133,67,188,66,60,174,19,96,161)
IMAGE_DATA(85,10,54,56,103,98,132,70,96,151,57,57,203,200,173,106,131,107,20,168,179,113,40,104,16,208,49,160,3,133,181,245)
IMAGE_DATA(56,104,123,132,97,159,31,151,136,138,39,64,76,165,0,6,246,247,65,124,201,61,146,198,69,73,171,251,133,60,19,245)
IMAGE_DATA(20,3,228,240,237,105,29,64,120,150,197,62,49,194,125,99,99,35,99,226,252,11,249,229,136,112,46,42,142,4,254,37)
IMAGE_DATA(249,112,216,24,192,74,1,34,251,250,30,161,149,76,173,127,208,183,24,245,205,237,216,117,62,159,57,222,124,58,7,143)
IMAGE_DATA(42,90,17,148,84,139,216,220,6,152,249,60,162,235,120,1,102,31,72,132,158,99,6,222,153,118,171,203,124,28,171,185)
IMAGE_DATA(38,100,153,93,48,204,61,31,34,52,171,22,244,146,1,133,116,236,184,25,114,15,185,85,117,40,107,7,242,154,128,43)
IMAGE_DATA(201,53,248,205,57,18,196,151,220,35,105,92,148,52,166,133,60,11,37,45,6,136,178,47,234,43,161,79,242,44,138,162)
IMAGE_DATA(36,174,3,132,252,23,23,23,119,217,231,19,103,191,185,185,153,49,81,254,69,217,149,101,226,156,247,228,219,175,95,56)
IMAGE_DATA(43,86,34,90,124,52,139,217,215,39,220,155,120,229,163,174,169,29,91,206,228,48,199,122,142,153,200,45,111,129,182,109)
IMAGE_DATA(42,110,39,212,208,113,33,23,45,130,14,228,148,181,64,215,46,13,111,171,223,236,50,23,223,250,112,44,181,128,186,138)
IMAGE_DATA(237,167,35,96,201,205,64,69,39,80,45,0,234,59,104,163,219,53,52,255,21,116,123,183,103,6,182,58,243,65,124,201)
IMAGE_DATA(61,226,99,146,185,238,151,198,181,104,12,144,199,71,124,31,64,95,31,102,102,102,221,216,34,60,139,239,243,137,214,252)
IMAGE_DATA(66,246,91,91,91,25,99,243,63,171,87,73,26,7,83,97,127,163,244,217,190,254,70,151,108,172,62,145,133,229,14,25)
IMAGE_DATA(88,124,36,141,169,245,231,89,36,65,195,60,17,223,238,139,199,20,211,56,168,155,196,98,201,145,20,188,61,193,175,203)
IMAGE_DATA(124,84,30,252,183,137,99,191,223,148,162,185,247,58,12,105,190,173,184,233,136,203,171,65,67,179,0,13,77,2,36,208)
IMAGE_DATA(109,11,239,52,108,117,12,2,241,33,190,228,30,241,49,81,210,106,255,158,248,86,83,251,211,122,193,190,112,13,96,70)
IMAGE_DATA(223,71,106,0,241,177,136,243,79,216,175,174,174,150,155,127,34,81,182,165,157,151,199,167,79,191,96,86,172,100,136,188)
IMAGE_DATA(135,231,240,149,34,152,95,42,132,233,197,124,102,95,223,208,35,23,6,103,178,177,201,57,11,235,78,101,50,181,254,207)
IMAGE_DATA(14,105,248,137,206,249,132,251,197,182,127,154,56,255,68,111,188,165,186,113,245,158,19,77,179,141,175,64,207,246,14,12)
IMAGE_DATA(143,243,97,228,16,14,67,187,48,108,181,15,198,74,107,127,232,30,242,195,138,221,199,155,136,175,164,49,81,61,237,233)
IMAGE_DATA(73,139,1,146,36,231,62,33,37,101,13,240,188,222,255,47,194,120,151,115,28,57,248,103,217,103,165,40,145,247,240,188)
IMAGE_DATA(191,62,10,239,173,142,196,72,221,8,188,187,152,207,236,235,143,152,27,136,17,51,239,224,31,223,6,224,157,41,183,152)
IMAGE_DATA(90,159,240,46,110,226,253,13,27,54,108,102,82,82,18,110,5,220,109,159,186,197,21,234,91,189,240,205,118,30,99,164)
IMAGE_DATA(189,96,167,7,66,249,97,157,97,225,225,157,42,42,42,223,74,26,19,37,15,255,242,196,0,121,95,35,120,202,63,169)
IMAGE_DATA(255,37,173,1,158,151,250,145,255,89,177,122,233,165,164,164,52,226,220,185,115,13,89,89,89,112,118,113,169,82,81,253)
IMAGE_DATA(151,249,200,175,231,132,124,172,181,185,138,24,105,171,168,142,162,206,186,187,215,103,100,100,128,199,227,61,25,52,104,208)
IMAGE_DATA(71,226,253,80,242,242,79,140,212,251,210,68,174,201,217,15,245,2,248,23,151,60,252,179,98,245,10,105,152,145,145,81)
IMAGE_DATA(186,139,139,75,219,224,193,131,63,151,230,164,172,172,60,218,206,206,174,118,255,254,253,197,116,204,24,41,126,157,98,249)
IMAGE_DATA(103,197,106,32,164,178,240,208,156,202,129,30,4,245,154,214,255,226,98,249,103,245,50,105,149,151,78,219,150,219,171,58)
IMAGE_DATA(251,122,255,37,51,221,162,100,87,3,36,186,232,35,238,212,6,196,56,174,65,164,253,10,132,219,46,69,136,165,54,238)
IMAGE_DATA(30,212,194,45,179,57,208,155,49,58,64,86,63,212,0,237,255,245,129,255,126,177,42,109,200,34,46,111,250,219,205,122)
IMAGE_DATA(28,97,183,168,35,210,126,17,220,119,125,148,167,172,196,249,103,127,158,201,138,149,36,45,119,213,110,182,121,72,225,112)
IMAGE_DATA(212,30,108,242,95,137,181,215,150,97,133,207,98,44,245,88,136,31,156,231,98,190,195,76,204,178,156,138,169,148,58,212)
IMAGE_DATA(141,199,99,252,175,106,221,230,62,97,255,113,218,77,148,167,94,71,89,210,53,148,38,248,162,56,142,139,162,24,47,20)
IMAGE_DATA(70,121,32,63,226,12,30,133,57,131,183,243,27,153,220,80,156,129,121,253,175,151,252,67,196,20,162,140,139,63,34,253)
IMAGE_DATA(130,62,90,242,163,208,90,24,141,7,39,102,97,249,52,85,158,162,158,199,234,175,41,29,199,133,13,214,49,102,184,148)
IMAGE_DATA(126,14,222,169,110,240,76,118,193,217,196,147,112,137,59,142,19,49,71,97,255,192,10,54,247,45,112,248,158,57,246,243)
IMAGE_DATA(247,98,95,136,49,62,219,252,113,183,121,31,239,180,9,101,41,127,208,156,59,209,156,59,34,55,216,14,217,119,173,145)
IMAGE_DATA(233,111,129,116,63,51,164,94,53,65,78,208,49,204,61,16,138,57,84,16,102,237,185,131,233,70,127,180,191,249,247,15)
IMAGE_DATA(54,136,246,51,144,239,255,145,147,127,133,179,95,116,123,60,26,147,189,209,154,127,15,109,133,49,140,181,100,5,226,158)
IMAGE_DATA(237,194,14,69,61,147,213,95,83,63,218,206,173,59,20,105,138,11,41,174,240,72,114,194,153,120,71,56,197,218,227,120)
IMAGE_DATA(180,13,142,70,29,134,85,196,126,28,12,219,7,42,116,55,246,4,237,132,113,224,111,24,179,238,223,221,230,126,140,227)
IMAGE_DATA(218,158,235,113,90,179,247,5,130,159,86,131,224,148,106,120,134,20,96,220,202,147,221,62,3,64,73,227,95,65,239,255)
IMAGE_DATA(21,178,47,7,255,47,132,253,214,170,48,180,22,92,68,14,111,43,26,227,46,48,70,248,15,180,90,216,162,168,231,178)
IMAGE_DATA(250,235,234,135,163,115,155,76,131,12,177,215,223,8,139,29,22,116,74,171,249,73,222,39,236,143,214,251,176,219,252,39)
IMAGE_DATA(107,253,61,126,57,88,226,18,15,109,199,88,44,60,26,141,5,150,145,208,52,191,7,13,211,48,124,247,123,8,54,218)
IMAGE_DATA(69,99,134,73,0,238,38,85,163,180,30,168,109,6,254,187,145,219,173,47,74,218,26,64,1,159,255,17,173,253,101,125)
IMAGE_DATA(22,152,243,2,217,111,111,188,142,166,140,77,104,136,219,142,248,51,186,200,185,180,3,81,14,63,176,123,131,172,20,38)
IMAGE_DATA(45,107,141,182,85,23,117,58,245,3,244,250,180,7,24,102,163,195,172,243,51,110,238,71,218,31,123,144,194,219,133,68)
IMAGE_DATA(174,33,226,189,182,32,246,220,122,196,184,173,70,234,53,51,76,221,225,135,7,217,53,136,204,172,70,13,205,255,151,107)
IMAGE_DATA(46,116,155,215,47,250,243,191,47,67,237,223,133,253,236,213,104,76,157,13,65,245,81,148,248,173,68,134,221,84,150,125)
IMAGE_DATA(86,10,213,210,147,139,250,181,7,24,116,104,17,242,195,79,51,235,252,164,203,59,144,112,113,27,226,206,111,194,67,247)
IMAGE_DATA(117,136,118,93,137,7,206,203,144,236,187,27,147,12,174,224,94,122,21,78,223,205,71,112,114,5,198,254,236,46,113,110)
IMAGE_DATA(191,144,239,255,16,89,247,15,228,222,31,203,62,171,129,148,246,145,249,253,222,3,244,167,52,145,27,114,2,217,129,246)
IMAGE_DATA(200,188,109,139,196,107,7,113,225,152,49,172,45,45,224,230,230,134,67,251,247,32,208,117,7,190,217,120,30,22,150,54)
IMAGE_DATA(204,57,43,107,91,204,94,101,65,250,81,145,52,46,170,167,215,2,250,104,226,117,191,180,207,255,202,144,180,24,208,107)
IMAGE_DATA(86,131,237,63,101,217,103,53,160,210,58,168,209,239,61,192,165,179,191,130,142,198,56,44,158,249,5,180,103,168,97,145)
IMAGE_DATA(230,84,56,56,56,160,172,172,12,57,57,57,8,13,13,197,110,227,223,177,105,171,33,146,83,82,152,115,225,225,225,140)
IMAGE_DATA(143,170,170,170,181,164,113,41,234,251,63,197,235,254,94,178,47,148,36,54,123,85,23,4,88,125,130,250,146,32,150,125)
IMAGE_DATA(86,3,46,45,203,217,204,30,224,1,154,241,95,184,63,75,173,249,101,237,1,142,26,53,42,151,243,148,1,3,3,131)
IMAGE_DATA(206,216,164,36,232,234,234,98,254,252,249,157,235,215,175,199,177,99,199,96,98,98,2,210,214,210,210,98,174,145,24,64)
IMAGE_DATA(31,215,74,27,215,243,254,254,111,38,239,139,176,255,156,223,243,39,215,218,64,89,137,51,154,176,159,31,125,21,145,62)
IMAGE_DATA(27,89,246,89,189,20,154,127,104,102,219,143,78,115,59,149,7,43,173,235,203,253,202,202,202,211,70,142,28,25,49,102)
IMAGE_DATA(204,152,124,83,83,83,1,225,159,62,14,153,50,101,74,83,96,96,32,98,99,99,193,231,243,225,235,235,139,105,211,166)
IMAGE_DATA(181,147,107,132,127,58,38,244,248,186,22,97,150,228,237,190,254,253,15,38,231,139,173,247,251,80,247,247,36,112,228,136)
IMAGE_DATA(1,199,13,70,161,62,63,18,130,210,4,220,216,59,17,97,206,95,35,59,220,0,113,174,11,112,255,192,68,150,125,86)
IMAGE_DATA(3,37,149,241,43,212,42,250,219,201,208,161,67,55,47,95,190,188,134,240,175,166,166,22,48,125,250,116,129,166,166,38)
IMAGE_DATA(180,181,181,25,35,109,114,142,92,35,252,19,223,158,250,36,156,146,24,64,113,122,255,247,191,36,229,252,126,212,253,178)
IMAGE_DATA(36,87,254,39,252,183,21,70,163,146,187,6,101,78,51,192,223,56,2,220,213,170,240,219,249,5,203,62,171,215,65,159)
IMAGE_DATA(77,154,52,41,141,174,1,106,232,154,191,138,199,227,225,212,169,83,48,52,52,132,177,177,49,211,38,231,200,53,226,67)
IMAGE_DATA(124,123,211,57,201,219,76,46,39,223,219,195,145,252,183,63,25,230,197,242,189,130,114,190,168,228,90,255,235,206,122,27)
IMAGE_DATA(201,174,43,209,20,231,133,202,56,31,132,218,204,99,217,103,245,58,105,16,189,22,248,106,242,228,201,121,116,110,111,92)
IMAGE_DATA(183,110,93,11,189,198,111,83,81,81,209,27,50,100,136,198,170,85,171,234,201,57,114,141,248,16,223,222,116,206,212,2)
IMAGE_DATA(79,89,102,98,129,24,227,178,76,129,236,19,201,197,240,178,25,239,64,111,214,8,184,110,254,152,225,94,231,187,247,125)
IMAGE_DATA(21,56,38,86,172,94,91,9,99,193,0,50,207,138,213,43,169,255,3,147,97,245,231,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(3520, 1)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,157,121,84,20,215,158,199,59,231,205,204,63,115,78,206,59,201,152,121,39,115,230,205,228,36,153,121,47,227)
IMAGE_DATA(76,50,73,156,140,33,209,68,140,70,141,123,22,121,198,184,197,29,141,184,43,91,35,34,171,160,2,178,131,138,32,130)
IMAGE_DATA(224,74,92,144,29,68,4,105,101,7,1,5,148,69,16,145,69,1,225,126,167,126,133,229,180,77,85,119,53,221,8,230)
IMAGE_DATA(245,247,156,223,161,168,186,117,107,161,62,247,247,251,221,123,171,80,40,94,249,147,66,16,76,50,201,36,147,140,160,190)
IMAGE_DATA(190,62,4,121,219,178,211,94,163,217,113,143,143,88,87,87,215,128,50,13,13,13,160,237,49,30,31,179,210,210,82,131)
IMAGE_DATA(142,23,23,29,13,37,215,132,105,51,42,99,136,62,250,104,185,222,102,210,208,201,210,210,146,145,219,50,134,101,102,102)
IMAGE_DATA(242,102,140,186,2,2,2,180,158,183,182,227,208,54,65,111,189,245,22,27,202,235,29,42,245,244,244,32,192,115,35,203)
IMAGE_DATA(58,102,193,122,154,147,145,19,103,193,188,93,231,179,117,30,71,153,101,68,9,111,180,188,223,229,39,118,253,204,82,86)
IMAGE_DATA(152,176,129,69,185,126,204,106,106,106,244,58,142,58,243,209,156,53,82,8,35,97,141,79,203,24,210,22,16,207,197,197)
IMAGE_DATA(197,188,81,123,85,94,94,206,91,85,85,21,170,171,171,81,91,91,251,204,26,27,27,127,211,252,235,251,188,137,41,234)
IMAGE_DATA(228,69,88,238,137,99,211,221,46,179,153,30,87,48,203,45,149,205,114,77,99,83,157,211,153,237,190,227,76,116,39,53)
IMAGE_DATA(169,243,160,201,220,164,73,147,6,176,162,89,134,248,146,226,65,108,127,169,235,208,228,89,27,255,194,49,53,217,214,60)
IMAGE_DATA(31,177,50,67,121,189,198,84,200,129,93,184,28,245,23,214,221,16,15,213,169,31,217,133,96,51,230,146,209,12,159,156)
IMAGE_DATA(70,132,92,175,231,141,150,61,211,170,144,28,242,49,171,72,219,206,242,78,175,97,81,187,63,96,212,118,200,17,241,171)
IMAGE_DATA(139,121,93,109,129,190,109,128,28,254,137,251,250,250,250,65,241,175,254,124,25,35,29,147,251,252,106,219,87,219,118,125)
IMAGE_DATA(234,18,211,148,93,41,172,185,237,49,90,58,186,112,191,189,223,154,219,186,80,82,215,6,219,211,53,88,234,153,47,26)
IMAGE_DATA(55,10,18,120,16,227,77,14,15,234,229,52,121,144,242,209,218,36,212,37,197,191,54,246,5,209,190,186,248,31,138,235)
IMAGE_DATA(37,41,99,238,137,154,205,177,6,108,61,82,135,245,7,107,176,38,168,6,75,252,170,97,177,183,18,115,220,203,48,197)
IMAGE_DATA(169,20,227,148,197,24,179,53,255,89,61,65,62,59,113,227,220,6,150,27,251,35,75,12,25,203,246,103,213,224,216,141)
IMAGE_DATA(58,68,166,221,198,129,184,34,236,143,41,194,193,196,42,68,170,238,32,52,53,25,55,142,79,100,45,55,35,184,92,193)
IMAGE_DATA(76,103,30,32,248,124,226,183,112,16,236,11,86,168,22,15,200,109,7,136,103,58,63,129,253,138,138,138,1,190,159,216)
IMAGE_DATA(31,110,254,7,235,143,245,57,15,97,189,82,169,124,102,114,234,83,215,12,231,20,246,176,179,27,215,106,123,57,123,130)
IMAGE_DATA(43,183,187,145,86,209,133,174,39,125,184,86,215,139,93,191,214,96,147,91,148,36,43,196,3,61,207,98,219,228,242,32)
IMAGE_DATA(112,110,12,254,133,107,21,59,142,186,239,166,101,109,117,8,109,128,24,255,67,117,189,36,98,253,220,245,118,53,107,195)
IMAGE_DATA(153,188,135,56,153,211,138,227,217,15,16,117,185,5,225,105,247,17,154,210,132,128,132,123,240,57,215,0,175,179,117,112)
IMAGE_DATA(61,121,7,111,175,187,246,172,158,140,244,52,28,221,249,103,22,191,239,3,230,150,92,133,163,217,53,136,75,190,133,138)
IMAGE_DATA(218,135,104,126,216,142,166,135,29,40,171,121,136,240,139,21,8,77,191,133,99,167,60,144,17,252,9,11,179,31,163,149)
IMAGE_DATA(127,67,124,190,49,98,1,226,89,240,249,2,251,234,49,191,58,251,77,77,77,195,194,191,161,49,185,216,122,185,235,180)
IMAGE_DATA(157,147,152,190,217,221,207,191,138,227,95,117,167,23,87,171,123,144,81,217,141,91,141,29,160,184,160,241,65,39,38,218)
IMAGE_DATA(38,105,229,95,202,215,202,229,129,68,156,25,139,127,169,115,82,143,189,117,241,47,156,191,24,255,67,117,189,36,129,255)
IMAGE_DATA(99,151,31,32,50,227,1,14,167,181,32,52,185,25,254,151,154,224,125,158,139,215,207,54,192,229,100,29,28,142,215,194)
IMAGE_DATA(250,40,215,54,135,223,198,186,208,42,40,163,107,240,230,146,236,231,234,218,229,238,201,182,198,22,32,48,227,22,162,57)
IMAGE_DATA(95,79,106,105,109,69,249,221,122,60,230,150,201,218,185,171,243,63,91,129,3,41,55,97,23,157,134,221,158,222,90,239)
IMAGE_DATA(139,210,200,236,171,183,1,74,25,127,91,226,153,184,39,190,201,164,216,39,107,229,174,245,175,129,127,117,255,47,102,82)
IMAGE_DATA(251,63,122,244,136,231,191,181,163,27,5,156,175,47,168,239,123,26,3,244,32,161,184,19,241,133,237,104,229,242,130,201)
IMAGE_DATA(202,36,70,101,197,68,60,72,229,177,250,240,32,86,143,92,254,53,253,49,29,67,236,56,114,207,69,253,248,98,252,15)
IMAGE_DATA(213,245,146,136,255,120,85,27,151,143,245,34,140,227,254,126,251,19,116,116,245,161,227,113,31,218,31,247,34,251,102,7)
IMAGE_DATA(215,6,212,163,188,238,49,28,99,107,81,124,231,17,151,11,220,196,150,240,91,248,131,69,198,115,117,45,181,245,97,155)
IMAGE_DATA(143,23,192,255,92,25,138,57,191,223,249,132,161,189,179,19,190,161,97,104,228,216,104,227,242,186,216,11,73,72,43,111)
IMAGE_DATA(133,115,116,62,168,44,237,35,117,63,4,223,111,108,246,5,163,186,237,191,251,14,113,113,113,146,127,19,226,153,124,190)
IMAGE_DATA(38,251,66,222,175,110,195,193,191,62,236,139,61,207,218,142,41,85,150,24,79,73,73,225,77,125,89,248,93,108,95,186)
IMAGE_DATA(199,246,246,246,236,27,215,76,60,224,248,47,169,103,40,226,248,207,231,218,129,220,234,39,124,14,144,88,254,136,219,214)
IMAGE_DATA(131,175,29,51,48,127,254,124,22,21,21,165,215,189,208,135,7,49,201,229,95,91,46,175,89,78,179,46,169,88,94,253)
IMAGE_DATA(26,228,158,175,161,215,75,218,126,180,142,143,245,59,57,230,253,47,222,227,217,247,56,83,207,255,174,140,174,197,221,150)
IMAGE_DATA(110,156,189,214,194,255,238,121,230,46,30,117,247,225,7,175,82,172,13,173,196,27,51,82,158,171,107,206,206,24,102,21)
IMAGE_DATA(153,7,215,136,27,104,124,212,131,22,110,159,110,58,134,210,1,71,226,78,97,171,189,3,46,94,206,70,65,107,15,54)
IMAGE_DATA(28,200,6,149,165,125,196,206,75,96,95,52,223,231,152,5,197,238,244,83,23,231,90,202,82,221,62,163,70,241,109,128)
IMAGE_DATA(148,136,103,205,126,126,117,159,79,49,63,113,223,214,214,198,155,20,255,114,124,175,62,254,89,125,219,112,240,175,143,255)
IMAGE_DATA(79,79,79,71,96,96,32,114,115,115,49,195,61,11,247,57,254,75,27,24,74,56,43,184,219,135,27,92,30,144,197,197)
IMAGE_DATA(0,233,92,30,112,159,227,127,170,83,22,191,207,166,77,155,144,156,156,44,121,126,154,122,17,252,11,101,6,123,62,114)
IMAGE_DATA(219,129,193,214,175,47,255,235,14,214,32,42,171,5,189,125,156,175,230,124,126,87,15,227,99,253,14,206,247,83,172,95)
IMAGE_DATA(219,220,141,166,182,30,190,93,216,29,87,139,123,15,123,48,221,181,8,203,3,202,49,202,60,241,185,186,166,91,31,102)
IMAGE_DATA(203,131,179,161,12,83,161,166,189,135,107,3,250,80,219,218,134,93,30,123,120,246,211,84,249,104,122,2,228,54,247,96)
IMAGE_DATA(237,222,44,80,89,218,71,236,188,36,227,126,129,103,146,174,54,64,70,89,93,121,0,241,172,141,125,50,226,190,163,163)
IMAGE_DATA(131,55,49,254,229,198,222,218,202,232,218,54,146,253,191,163,163,35,203,207,207,231,231,126,216,218,218,202,50,42,155,145)
IMAGE_DATA(145,129,197,139,23,191,48,127,40,135,127,225,24,134,212,167,110,114,99,9,49,25,131,127,234,215,63,148,218,204,199,250)
IMAGE_DATA(187,98,239,162,237,81,47,182,30,169,230,127,95,21,84,137,219,77,93,72,42,104,69,94,85,59,236,143,221,230,226,248)
IMAGE_DATA(30,76,116,204,199,79,62,101,120,253,179,115,207,213,53,223,106,55,155,231,149,12,135,240,107,72,189,217,10,46,101,64)
IMAGE_DATA(45,215,118,252,154,146,137,170,251,15,209,208,11,220,234,4,78,20,62,192,134,128,43,160,178,180,143,216,121,41,165,152)
IMAGE_DATA(214,236,179,147,106,3,212,217,87,47,43,82,39,29,139,158,91,177,60,64,224,255,238,221,187,207,245,243,105,178,79,249)
IMAGE_DATA(42,153,38,255,250,240,168,47,187,114,247,25,110,255,79,113,127,111,111,47,200,114,114,114,158,197,74,82,118,249,242,101)
IMAGE_DATA(8,229,215,173,91,55,98,248,87,239,207,151,43,245,177,61,109,54,152,120,192,24,252,207,245,188,201,247,235,19,247,219)
IMAGE_DATA(35,171,241,176,179,23,107,66,42,249,223,127,242,41,71,85,227,99,204,246,40,198,197,27,15,184,118,161,10,143,123,250)
IMAGE_DATA(80,217,240,24,22,94,37,120,109,204,175,207,213,229,228,190,143,77,85,158,196,47,65,151,225,18,93,134,38,238,138,90)
IMAGE_DATA(122,128,182,62,206,184,229,7,28,255,77,220,242,142,240,50,88,6,164,129,202,210,62,154,231,164,53,239,151,226,90,189)
IMAGE_DATA(13,144,83,70,205,248,126,128,213,171,233,57,29,112,127,136,103,205,126,62,245,152,95,96,159,198,172,201,94,54,255,47)
IMAGE_DATA(117,92,185,235,164,164,94,214,206,206,14,221,221,221,188,197,196,196,224,214,173,91,124,59,32,102,180,45,60,60,252,89)
IMAGE_DATA(121,206,255,203,62,230,80,241,47,231,30,14,71,189,198,224,223,124,87,49,246,198,215,63,235,215,95,17,88,129,69,190)
IMAGE_DATA(55,241,151,125,101,152,187,167,132,143,245,191,118,42,128,185,67,62,198,217,93,199,88,107,21,198,108,207,195,183,123,138)
IMAGE_DATA(240,218,71,103,159,171,43,39,39,23,83,86,216,177,73,182,103,96,197,241,237,26,93,10,213,173,7,104,127,212,131,246)
IMAGE_DATA(206,30,220,224,150,157,142,150,192,210,39,9,84,134,202,210,62,154,34,127,172,181,207,95,138,239,247,222,235,55,61,216)
IMAGE_DATA(199,211,99,217,115,251,137,141,103,107,242,79,236,183,180,180,232,197,63,201,80,254,181,201,16,246,165,234,151,179,78,174)
IMAGE_DATA(255,223,177,99,7,74,74,74,120,243,243,243,227,231,82,80,94,47,102,84,198,211,211,243,89,249,241,227,199,107,189,118)
IMAGE_DATA(117,13,181,255,87,175,127,48,146,59,151,87,174,140,193,63,205,225,113,62,113,7,14,49,181,176,142,170,230,251,245,173)
IMAGE_DATA(14,85,97,109,72,5,86,6,220,196,82,191,114,62,214,159,191,175,4,63,112,62,159,184,159,235,209,111,154,252,147,130)
IMAGE_DATA(66,15,226,103,123,63,54,113,219,9,252,228,145,0,43,239,52,108,218,151,1,43,175,116,88,238,77,198,2,183,243,176)
IMAGE_DATA(216,125,22,139,108,125,25,149,21,147,82,27,251,218,218,0,49,201,236,39,164,99,138,229,0,67,61,255,95,14,255,114)
IMAGE_DATA(234,48,212,191,232,211,14,169,231,251,154,38,86,199,230,205,155,145,144,144,192,219,158,61,123,80,88,88,136,11,23,46)
IMAGE_DATA(136,90,65,65,1,245,23,60,43,255,30,181,231,50,53,210,242,127,41,233,106,7,228,204,21,80,63,23,67,248,167,57)
IMAGE_DATA(60,255,180,44,27,111,46,186,130,63,88,92,198,63,206,77,227,251,245,71,77,78,196,168,47,19,240,15,227,46,224,245)
IMAGE_DATA(177,231,248,88,159,120,215,52,77,165,166,166,242,127,195,248,115,23,153,217,154,96,140,177,140,196,39,191,196,241,70,203)
IMAGE_DATA(83,183,28,66,114,74,42,75,77,75,99,212,199,43,38,89,252,203,105,3,228,142,17,60,229,159,226,127,177,28,96,40)
IMAGE_DATA(101,12,254,133,125,13,245,43,250,180,17,114,234,18,180,126,253,122,196,199,199,243,230,235,235,11,7,7,7,222,182,111)
IMAGE_DATA(223,78,249,61,31,227,207,153,51,7,230,230,230,152,48,97,2,191,78,40,255,238,187,239,202,62,230,72,236,255,215,182)
IMAGE_DATA(93,170,29,144,219,39,104,12,254,141,169,123,247,238,225,200,145,35,236,230,205,155,8,13,11,99,14,206,238,108,230,98)
IMAGE_DATA(43,246,225,119,253,70,203,59,93,60,216,161,195,135,89,89,89,25,98,99,99,25,205,173,209,148,108,254,201,180,249,7)
IMAGE_DATA(218,38,179,30,57,252,203,141,147,245,145,177,248,87,175,99,176,241,228,96,234,150,211,222,172,90,181,138,29,61,122,148)
IMAGE_DATA(231,153,184,143,62,126,2,137,41,153,162,22,21,29,139,209,163,71,243,101,131,130,130,240,246,219,111,203,62,191,225,30)
IMAGE_DATA(255,215,244,219,114,239,189,216,60,1,57,26,105,252,183,183,183,195,217,217,153,5,6,6,50,138,241,164,68,125,60,222)
IMAGE_DATA(222,222,204,195,195,131,81,94,173,169,145,200,191,216,223,198,24,140,25,155,127,67,21,205,197,76,98,12,68,27,240,30)
IMAGE_DATA(181,139,139,11,91,189,122,53,155,55,111,30,22,251,102,225,209,227,110,52,63,236,70,19,103,141,173,93,168,187,255,24)
IMAGE_DATA(213,247,58,80,213,208,134,71,93,61,88,236,147,133,119,222,121,135,226,1,122,70,100,31,231,69,241,47,229,215,53,219)
IMAGE_DATA(5,125,142,175,217,6,200,145,177,249,167,190,172,121,123,102,25,60,47,193,80,141,180,248,95,219,223,197,208,54,96,164)
IMAGE_DATA(241,47,198,186,208,38,24,210,6,8,90,180,63,147,45,243,191,138,101,126,255,111,63,243,150,205,27,109,91,180,47,115)
IMAGE_DATA(80,207,224,139,226,95,76,98,239,233,232,19,203,107,123,7,80,74,198,230,127,81,228,15,108,213,249,5,131,230,255,148)
IMAGE_DATA(219,74,86,24,188,22,249,129,171,161,242,91,142,92,159,197,184,178,247,71,100,120,124,143,20,151,217,184,180,107,26,206)
IMAGE_DATA(217,127,5,151,13,243,117,206,249,55,152,125,65,122,244,255,137,241,47,231,57,24,138,88,155,68,227,10,151,252,102,177)
IMAGE_DATA(76,207,25,236,202,222,25,136,113,254,156,213,213,213,105,221,231,244,233,36,172,88,225,138,113,227,214,224,195,15,151,98)
IMAGE_DATA(252,120,75,172,94,237,198,197,211,169,178,142,169,111,140,111,172,118,193,24,26,46,254,133,253,196,226,127,50,57,99,251)
IMAGE_DATA(218,222,243,151,146,49,249,95,16,242,29,115,191,166,132,115,182,13,86,158,95,128,37,167,230,225,199,99,115,241,253,161)
IMAGE_DATA(233,152,25,48,25,83,246,125,137,9,46,102,48,83,142,193,152,109,239,227,253,245,3,227,110,98,255,94,201,175,104,44)
IMAGE_DATA(62,131,134,130,83,168,191,17,139,187,170,104,220,201,141,68,109,246,33,84,95,14,193,237,244,0,196,109,249,68,235,185)
IMAGE_DATA(16,139,195,49,254,167,201,191,62,207,192,80,180,1,101,81,179,80,26,177,26,143,171,179,209,85,155,131,171,190,19,176)
IMAGE_DATA(103,251,66,201,103,105,235,86,95,124,246,153,37,151,99,7,113,237,64,34,210,210,178,57,238,83,224,232,24,2,51,179)
IMAGE_DATA(53,176,177,209,253,108,244,159,63,205,135,150,195,116,52,119,107,117,199,69,47,42,174,17,203,163,135,154,127,245,125,52)
IMAGE_DATA(143,165,94,135,174,54,64,56,119,125,230,1,25,122,189,130,230,251,205,101,110,185,246,136,41,61,140,163,197,161,8,47)
IMAGE_DATA(12,68,88,254,1,4,170,188,225,155,235,137,189,87,93,225,158,229,4,231,76,7,236,76,179,133,93,202,54,252,121,213)
IMAGE_DATA(192,126,217,235,254,43,209,80,116,154,227,220,159,227,220,7,85,201,94,168,184,228,134,242,243,78,40,61,107,143,226,147)
IMAGE_DATA(219,81,153,180,31,147,29,83,241,149,50,9,19,108,18,240,249,198,147,44,56,236,200,115,245,12,231,252,159,145,226,255)
IMAGE_DATA(239,92,124,31,29,133,71,209,85,157,137,238,218,92,222,30,223,76,68,134,251,116,209,231,131,216,159,57,115,59,247,60)
IMAGE_DATA(94,5,245,173,82,31,44,189,183,116,251,246,109,208,55,150,84,170,66,126,187,173,173,246,231,163,255,26,232,222,81,251)
IMAGE_DATA(174,208,105,218,248,215,252,125,176,177,181,28,73,205,179,211,103,126,173,212,124,125,93,223,246,16,76,243,253,58,185,117)
IMAGE_DATA(9,219,228,142,251,25,235,122,5,253,176,119,38,219,125,197,26,17,69,193,56,84,224,143,144,235,62,240,207,219,11,239)
IMAGE_DATA(28,119,120,102,59,195,245,242,78,236,74,183,131,50,117,7,108,146,182,96,91,226,6,188,179,244,173,1,245,228,250,44)
IMAGE_DATA(145,117,188,137,118,156,111,42,121,128,228,162,22,132,167,212,224,211,229,65,3,206,89,50,7,24,162,249,191,2,251,47)
IMAGE_DATA(58,255,23,19,177,223,117,63,29,93,53,81,168,140,179,68,135,42,130,55,226,63,201,125,246,128,123,69,49,63,249,125)
IMAGE_DATA(117,246,137,123,178,138,91,21,207,230,46,231,231,151,242,229,206,159,23,31,119,21,174,231,233,146,44,83,42,229,241,175)
IMAGE_DATA(237,120,134,180,11,218,222,177,145,195,158,177,190,255,39,231,30,136,249,107,125,125,190,161,215,43,165,185,123,191,97,214)
IMAGE_DATA(73,86,176,61,191,9,179,189,190,102,82,49,63,249,125,98,255,95,127,250,231,1,117,80,174,111,115,182,18,223,6,94)
IMAGE_DATA(199,108,159,60,76,247,204,193,84,151,43,152,228,144,9,115,235,116,140,223,156,130,21,94,57,248,98,251,5,92,42,104)
IMAGE_DATA(65,125,27,208,250,8,248,112,197,192,88,147,152,124,81,239,255,168,199,254,82,239,2,139,253,157,135,146,253,222,142,51)
IMAGE_DATA(232,44,91,137,118,213,47,184,30,98,129,202,152,141,200,222,55,83,116,31,202,247,41,230,215,100,159,184,39,19,230,45)
IMAGE_DATA(55,55,55,195,201,233,32,214,174,221,35,121,124,99,241,255,124,93,250,107,40,238,173,73,218,53,221,237,43,182,32,114)
IMAGE_DATA(46,91,121,238,199,65,245,1,166,187,127,199,231,249,101,191,238,68,201,105,27,20,197,109,69,126,180,21,174,71,174,65)
IMAGE_DATA(222,225,101,200,13,93,132,226,83,246,48,219,120,22,87,43,30,224,74,121,11,30,112,252,255,231,226,136,1,117,189,232)
IMAGE_DATA(247,127,229,204,253,49,196,207,201,209,115,236,87,44,66,71,241,68,244,180,120,162,238,236,2,148,121,153,73,238,71,125)
IMAGE_DATA(125,148,239,19,251,197,229,197,162,236,215,223,171,231,231,45,39,38,102,195,220,252,23,201,186,70,10,255,198,216,223,36)
IMAGE_DATA(253,100,225,55,199,160,62,192,164,221,51,80,157,17,196,231,249,5,199,55,226,70,212,58,168,142,172,196,181,131,75,145)
IMAGE_DATA(19,188,0,87,3,230,161,48,118,7,254,103,237,9,100,150,222,71,208,165,106,36,23,54,225,79,243,15,138,158,207,11)
IMAGE_DATA(249,254,135,90,222,255,162,231,254,169,107,176,236,147,168,159,159,250,250,132,124,95,96,95,224,159,216,167,247,21,200,174)
IMAGE_DATA(95,47,197,167,159,174,146,172,235,101,229,223,219,123,27,11,8,120,147,133,133,41,120,163,101,90,103,208,9,252,21,137)
IMAGE_DATA(250,0,12,237,3,60,175,156,132,170,20,95,84,36,238,69,249,69,15,228,159,218,133,136,253,219,224,230,226,132,208,208)
IMAGE_DATA(80,236,222,105,131,196,224,141,248,100,197,17,56,185,184,243,235,92,221,60,48,113,161,19,63,247,64,76,146,121,128,129)
IMAGE_DATA(166,25,247,75,189,255,171,207,51,56,216,231,61,121,239,191,15,154,125,18,141,241,81,63,191,166,223,39,238,213,217,167)
IMAGE_DATA(249,89,201,201,185,58,253,63,141,231,17,215,114,108,245,106,121,125,163,250,74,159,125,232,90,15,29,250,27,166,217,54)
IMAGE_DATA(209,58,186,23,38,233,214,28,151,105,6,247,1,126,63,241,3,124,103,254,95,152,251,229,104,204,254,226,61,204,152,100)
IMAGE_DATA(134,125,251,246,241,223,114,168,172,172,228,223,13,216,177,109,51,86,90,90,161,176,168,136,95,71,223,120,160,50,118,118)
IMAGE_DATA(118,90,191,3,100,236,239,127,106,198,253,186,242,126,93,26,236,115,126,193,245,223,208,86,151,52,104,246,73,171,86,185)
IMAGE_DATA(241,99,124,212,207,47,229,247,137,253,206,206,78,236,222,125,24,191,252,226,37,89,151,212,252,63,109,38,103,252,95,223)
IMAGE_DATA(124,94,87,57,242,237,7,14,252,11,11,9,121,133,29,62,172,192,169,83,10,20,23,43,208,215,167,64,111,175,2,5)
IMAGE_DATA(5,253,235,104,27,149,161,178,166,120,64,187,102,185,77,225,251,0,29,57,198,127,142,158,47,25,243,107,235,3,28,59)
IMAGE_DATA(118,236,179,254,201,53,107,214,176,188,130,2,88,88,88,96,242,228,201,108,217,178,101,216,191,127,63,255,222,7,45,79)
IMAGE_DATA(155,54,141,223,70,109,128,182,177,15,99,127,255,155,247,251,106,236,235,154,243,175,235,185,29,76,95,21,205,129,38,246)
IMAGE_DATA(171,115,78,226,202,177,21,131,102,159,68,190,159,198,247,105,140,79,243,123,164,234,236,151,151,87,243,229,18,18,244,251)
IMAGE_DATA(63,16,116,93,52,15,215,88,249,184,174,251,37,231,56,7,15,254,221,115,254,254,246,109,5,142,31,87,224,198,141,126)
IMAGE_DATA(139,137,233,95,167,94,166,127,31,147,180,105,218,110,115,54,227,192,87,44,56,36,120,80,251,211,59,125,83,166,76,97)
IMAGE_DATA(102,102,102,204,218,218,154,231,127,230,204,153,108,220,184,113,44,49,49,17,121,121,121,92,174,154,70,239,254,224,179,207)
IMAGE_DATA(62,99,180,141,248,167,178,186,234,38,102,201,111,15,246,255,127,240,62,95,35,223,151,138,251,5,201,25,227,25,12,255)
IMAGE_DATA(222,107,255,136,182,234,43,232,169,191,129,120,219,143,145,30,240,223,168,200,88,11,85,240,84,100,57,126,44,187,30,65)
IMAGE_DATA(214,214,254,252,248,62,141,241,81,63,191,240,141,2,117,246,167,79,223,14,7,7,233,191,171,177,199,191,228,72,106,92)
IMAGE_DATA(69,155,92,92,22,178,184,56,5,138,138,250,253,61,89,86,150,2,78,78,111,192,211,83,201,124,125,247,51,91,219,15)
IMAGE_DATA(24,173,163,88,224,201,19,5,119,95,20,160,125,118,238,156,103,106,3,180,136,242,240,207,151,255,175,193,247,200,223,223)
IMAGE_DATA(31,75,150,44,225,249,167,159,196,255,164,73,147,48,123,246,108,222,104,153,214,209,54,226,159,126,234,170,147,255,134,44)
IMAGE_DATA(215,6,80,44,32,196,3,114,255,255,151,152,207,215,22,247,11,26,42,255,79,252,119,215,230,160,57,122,49,26,252,191)
IMAGE_DATA(64,218,138,81,136,94,244,6,206,110,25,45,187,14,77,209,220,30,26,223,167,49,62,234,231,167,190,62,202,247,41,230)
IMAGE_DATA(39,191,175,141,125,18,249,120,49,83,191,62,169,50,250,188,167,35,37,185,247,48,50,242,119,172,180,84,129,107,215,20)
IMAGE_DATA(156,63,233,247,247,129,129,175,192,215,215,154,209,183,90,233,91,131,190,190,19,152,16,15,228,230,42,184,220,83,129,164)
IMAGE_DATA(36,5,183,254,119,38,254,95,128,232,255,101,205,157,59,151,57,56,56,48,63,63,63,70,156,209,183,95,172,172,172,176)
IMAGE_DATA(109,219,54,126,249,233,58,190,12,149,213,167,126,242,219,188,47,167,239,246,40,196,255,247,39,207,188,134,191,151,227,243)
IMAGE_DATA(213,53,84,249,191,197,132,215,80,24,188,0,157,170,72,52,171,142,33,213,253,107,131,216,23,68,115,123,104,124,159,250)
IMAGE_DATA(248,168,159,159,126,82,190,47,39,230,31,14,255,63,24,5,5,189,202,218,219,185,246,189,81,129,202,74,5,170,170,20)
IMAGE_DATA(92,94,249,123,254,157,97,122,63,194,203,75,201,156,157,205,153,157,157,25,115,113,249,15,150,144,160,0,153,74,165,192)
IMAGE_DATA(158,61,175,154,248,127,1,162,111,55,170,84,42,62,246,95,184,112,33,229,254,108,249,242,229,44,34,34,2,148,7,208)
IMAGE_DATA(239,100,180,141,202,80,89,125,244,244,123,242,207,190,57,165,201,184,54,147,203,62,105,168,250,255,231,125,241,58,126,154)
IMAGE_DATA(48,10,193,171,222,229,185,119,179,94,58,34,159,75,205,254,192,145,240,174,143,192,255,195,135,10,46,207,81,160,186,154)
IMAGE_DATA(203,237,124,126,143,211,167,79,243,126,199,217,121,21,199,189,3,163,239,17,57,57,237,226,126,42,64,70,177,130,137,255)
IMAGE_DATA(223,158,132,182,192,88,204,155,52,178,21,24,216,207,127,107,171,2,205,205,10,52,52,40,224,230,246,3,163,239,135,82)
IMAGE_DATA(236,159,157,157,205,255,164,239,8,219,217,173,101,233,233,253,252,231,228,80,254,98,226,223,36,147,94,102,133,133,253,45)
IMAGE_DATA(235,236,84,160,173,141,203,231,67,198,50,215,200,235,44,252,68,6,138,138,138,248,111,6,70,70,70,226,224,193,131,176)
IMAGE_DATA(177,89,201,92,93,95,227,226,205,254,220,63,59,91,1,79,79,211,24,128,73,38,189,204,114,116,52,103,196,179,127,216)
IMAGE_DATA(251,216,21,89,201,78,102,53,193,230,80,37,124,35,46,113,185,224,56,158,121,79,207,87,113,226,68,127,222,79,126,159)
IMAGE_DATA(252,127,100,164,130,107,19,62,55,241,111,146,73,47,177,232,255,2,172,221,96,197,182,4,230,115,236,55,35,254,234,125)
IMAGE_DATA(132,39,53,98,161,91,30,163,57,64,66,127,31,113,79,99,128,52,23,96,231,206,63,178,144,144,253,252,88,168,73,38)
IMAGE_DATA(153,244,114,107,189,175,138,197,102,52,225,244,149,102,28,75,189,199,249,255,42,40,189,198,51,234,11,160,241,62,26,27)
IMAGE_DATA(60,115,70,1,119,247,191,231,226,1,43,118,231,206,157,225,62,101,147,76,50,201,72,90,234,156,206,130,207,215,33,34)
IMAGE_DATA(185,17,155,130,42,240,237,66,11,230,231,167,96,196,61,229,251,135,14,41,96,103,55,135,209,124,51,147,76,50,233,183)
IMAGE_DATA(165,163,199,98,49,107,71,18,251,122,75,50,83,186,250,242,57,125,66,194,5,216,218,126,193,108,108,62,101,241,241,167)
IMAGE_DATA(135,251,20,77,50,201,36,147,70,180,254,15,224,189,78,111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(5696, 1)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,93,121,84,21,71,186,239,204,139,239,143,156,153,156,156,204,75,38,207,57,243,206,228,249,222,57,51,78,222)
IMAGE_DATA(115,102,242,156,24,77,50,110,99,156,100,98,30,234,184,107,18,19,163,227,22,49,113,5,4,84,246,77,201,21,1,241)
IMAGE_DATA(2,34,168,40,184,129,26,149,125,81,68,65,65,144,29,89,148,85,64,17,23,132,250,189,174,230,180,105,154,238,123,171)
IMAGE_DATA(239,70,204,227,119,78,29,170,187,234,171,250,170,111,253,170,190,175,186,170,225,94,226,94,226,172,137,209,163,57,247,128)
IMAGE_DATA(0,174,62,34,130,35,52,208,56,189,199,34,251,220,115,220,171,145,145,92,55,192,65,26,232,61,62,109,184,90,125,158)
IMAGE_DATA(158,92,181,94,207,245,238,219,199,225,248,113,14,197,197,28,122,123,57,244,244,112,40,44,236,187,71,211,104,30,154,87)
IMAGE_DATA(170,79,120,56,247,72,90,215,205,155,28,142,28,225,112,237,90,95,56,124,184,239,158,52,15,149,161,178,19,39,114,225)
IMAGE_DATA(241,241,28,138,138,250,234,163,225,194,5,14,137,137,28,162,162,250,2,141,211,123,84,151,39,79,56,20,20,112,160,50)
IMAGE_DATA(19,38,112,49,49,49,220,147,146,18,14,87,174,112,200,203,235,171,143,214,45,111,191,168,207,229,203,28,210,210,56,36)
IMAGE_DATA(39,115,216,181,139,123,18,20,196,117,116,118,114,104,106,226,80,89,201,161,170,138,67,122,58,135,178,178,239,245,161,241)
IMAGE_DATA(140,12,14,55,110,112,56,119,174,47,228,231,115,240,240,224,58,68,249,187,119,57,180,181,113,168,169,233,211,53,55,247)
IMAGE_DATA(251,246,211,58,233,243,163,114,169,169,125,129,234,74,229,121,29,4,249,142,14,14,173,173,28,154,155,57,212,215,247,213)
IMAGE_DATA(73,219,149,153,217,39,71,245,165,122,81,61,168,60,45,223,221,157,235,224,127,143,199,93,93,28,238,221,227,208,208,208)
IMAGE_DATA(39,91,93,205,161,188,188,239,55,164,121,169,156,24,146,146,250,202,202,201,225,224,235,203,61,154,51,135,59,71,175,235)
IMAGE_DATA(234,250,218,64,203,160,207,129,214,79,229,105,26,125,94,52,80,61,104,189,180,76,254,185,99,230,76,46,141,255,9,255)
IMAGE_DATA(249,181,215,184,37,235,215,115,229,52,79,99,35,135,150,150,190,231,72,229,197,231,69,229,232,115,161,125,97,237,90,238)
IMAGE_DATA(230,240,225,220,42,94,246,5,105,191,29,57,146,115,243,242,226,218,179,178,250,202,160,101,209,103,71,127,219,147,39,133)
IMAGE_DATA(231,213,249,198,27,156,31,159,247,151,106,253,255,249,231,185,223,141,31,207,69,7,7,115,132,202,209,246,242,125,31,124)
IMAGE_DATA(63,59,50,108,24,247,7,86,14,190,240,2,55,101,250,116,46,121,246,108,46,243,167,63,229,62,82,203,151,250,34,247)
IMAGE_DATA(226,211,11,88,24,180,72,173,197,138,50,90,100,229,50,44,178,106,50,134,100,141,201,40,201,178,202,200,101,77,149,51)
IMAGE_DATA(85,79,115,158,139,57,191,131,154,172,22,152,34,195,86,238,115,191,182,26,57,134,48,132,33,124,143,222,222,94,132,6)
IMAGE_DATA(58,146,227,254,191,35,135,125,254,72,30,61,122,52,32,79,99,99,35,104,122,172,207,155,164,164,164,100,16,180,236,15)
IMAGE_DATA(165,97,97,104,168,24,130,173,16,27,30,2,251,145,28,2,29,86,147,193,214,197,28,116,119,119,35,216,111,45,201,62)
IMAGE_DATA(56,135,116,183,166,224,82,220,28,18,232,57,143,172,242,137,33,43,246,23,11,129,198,119,122,44,36,249,39,22,147,194)
IMAGE_DATA(179,246,228,128,231,155,164,182,182,118,208,116,54,102,180,25,195,202,149,43,137,86,35,79,45,100,101,101,9,193,18,101)
IMAGE_DATA(133,132,132,24,212,219,80,61,52,77,196,235,175,191,222,175,79,90,186,189,114,140,24,49,66,83,249,171,87,15,228,12)
IMAGE_DATA(235,51,84,170,223,84,136,28,166,127,89,65,249,78,101,196,240,172,243,127,111,208,118,100,29,152,75,30,55,38,34,239)
IMAGE_DATA(216,124,114,102,207,88,226,153,217,10,93,110,19,246,94,109,16,2,141,251,167,87,33,57,236,77,82,158,182,145,92,57)
IMAGE_DATA(190,156,28,112,27,69,232,216,97,107,24,226,57,235,24,32,229,131,156,115,83,166,76,25,208,151,229,121,40,191,212,250)
IMAGE_DATA(163,146,188,154,62,242,62,111,136,255,98,157,114,110,203,245,81,202,99,205,246,74,65,229,204,25,223,68,40,141,39,214)
IMAGE_DATA(192,250,9,35,4,46,187,46,156,202,196,97,57,247,7,147,255,46,135,155,21,131,227,161,70,108,216,127,27,107,34,106)
IMAGE_DATA(177,98,79,45,22,239,174,193,220,29,149,152,238,83,138,191,186,149,224,61,151,98,140,222,80,240,180,156,61,186,173,184)
IMAGE_DATA(122,202,158,228,30,153,79,206,135,141,33,129,23,106,113,232,218,109,196,164,223,68,80,124,17,2,15,23,33,34,169,10)
IMAGE_DATA(49,249,245,208,167,165,224,234,225,73,228,78,217,126,222,87,24,107,115,63,128,165,63,176,228,17,249,160,212,31,89,248)
IMAGE_DATA(32,205,39,231,131,218,60,102,8,98,89,106,252,48,196,125,17,82,238,169,241,223,26,237,85,130,18,127,167,78,101,227)
IMAGE_DATA(152,188,45,74,182,130,37,112,233,66,86,63,30,107,129,104,55,12,54,255,79,95,237,148,132,123,56,153,119,23,199,114)
IMAGE_DATA(59,112,36,167,29,7,179,219,16,149,126,7,250,212,22,132,156,107,134,238,116,35,2,18,110,195,235,88,61,70,172,190)
IMAGE_DATA(242,180,156,204,140,116,196,184,254,134,36,236,24,69,188,83,170,112,32,167,22,241,41,213,168,168,187,139,214,187,157,104)
IMAGE_DATA(185,123,31,165,181,119,17,117,182,2,250,140,106,28,58,238,139,140,61,127,34,250,45,255,99,83,254,107,153,11,140,229)
IMAGE_DATA(165,124,160,253,89,41,141,149,15,34,207,45,193,127,81,103,165,122,164,115,55,141,27,42,67,228,141,18,255,173,213,94)
IMAGE_DATA(53,152,51,135,211,177,194,154,220,167,160,115,190,169,243,184,116,236,24,108,254,31,202,110,71,76,102,59,246,165,183,65)
IMAGE_DATA(159,210,138,224,243,45,248,246,12,111,175,39,52,194,243,216,109,184,30,169,131,195,129,90,124,19,117,19,171,245,85,112)
IMAGE_DATA(137,173,197,240,197,57,253,202,218,230,237,71,54,196,21,34,52,179,26,177,252,92,79,209,214,209,129,178,91,13,120,200)
IMAGE_DATA(199,105,232,228,91,25,156,80,129,160,212,114,108,137,77,135,155,95,160,205,219,109,201,249,95,109,174,101,229,3,5,229)
IMAGE_DATA(153,165,248,175,166,147,212,246,54,198,127,81,127,37,254,91,171,189,134,96,138,13,32,142,97,90,236,5,83,32,183,227)
IMAGE_DATA(169,47,192,42,251,67,225,127,98,254,61,180,221,239,65,56,207,251,59,157,79,112,255,81,47,238,63,236,69,231,195,30)
IMAGE_DATA(228,148,223,231,199,128,6,148,221,126,136,109,113,117,40,174,127,192,251,2,229,88,31,85,141,215,230,102,246,43,107,177)
IMAGE_DATA(227,183,100,221,145,66,4,159,46,69,49,63,239,119,61,33,232,236,234,194,46,125,56,154,248,113,224,222,163,71,136,251)
IMAGE_DATA(46,25,233,101,29,240,136,45,0,205,75,101,6,163,221,134,56,197,202,55,202,7,181,126,172,133,15,74,229,176,242,95)
IMAGE_DATA(62,31,211,58,148,234,209,234,67,211,250,149,248,111,173,246,26,211,69,139,254,98,126,106,59,48,87,98,2,118,110,94)
IMAGE_DATA(37,204,253,148,199,226,26,128,120,205,130,31,2,255,55,29,184,45,216,250,93,60,231,131,207,54,11,220,247,61,217,32)
IMAGE_DATA(92,187,196,214,225,86,219,99,36,92,105,19,174,253,79,222,194,131,199,189,152,29,80,130,85,250,74,188,58,45,181,95)
IMAGE_DATA(89,118,174,177,196,62,38,15,94,209,215,208,244,160,27,109,188,204,99,90,135,139,43,246,199,31,199,6,103,87,156,205)
IMAGE_DATA(206,65,97,71,55,214,6,229,128,230,165,50,131,209,110,10,37,94,89,106,173,72,11,31,148,192,202,127,67,190,188,60)
IMAGE_DATA(159,188,44,53,91,94,218,6,86,125,205,109,175,49,80,27,158,213,22,18,211,45,185,198,175,132,117,227,255,157,208,64)
IMAGE_DATA(227,210,53,61,214,117,64,107,240,63,48,112,3,9,14,254,87,162,215,115,66,160,113,122,79,45,255,234,136,90,28,188)
IMAGE_DATA(208,134,158,94,126,174,230,231,252,71,221,68,176,245,239,243,115,63,181,245,235,90,31,163,229,94,183,48,46,184,199,215)
IMAGE_DATA(161,249,110,55,62,242,42,194,151,33,101,120,101,82,82,191,178,254,182,57,146,124,25,150,3,151,240,124,212,118,118,243)
IMAGE_DATA(99,64,47,234,58,238,97,187,175,159,192,253,244,252,2,180,60,1,46,183,118,99,213,142,11,160,121,169,140,37,218,109)
IMAGE_DATA(42,212,230,127,173,50,114,216,130,255,98,30,22,168,189,79,96,25,7,76,45,223,146,252,167,144,175,5,40,217,246,98)
IMAGE_DATA(30,75,215,45,135,252,157,159,41,235,128,106,252,151,150,195,58,150,80,52,53,53,33,34,226,159,136,124,231,49,189,119)
IMAGE_DATA(235,214,45,69,25,186,174,31,153,214,42,216,250,219,227,110,225,222,131,30,108,216,95,35,92,255,99,79,37,110,182,60)
IMAGE_DATA(66,114,97,7,242,170,58,225,124,232,38,111,199,119,99,242,182,2,44,210,149,226,231,239,156,238,87,214,188,53,110,100)
IMAGE_DATA(78,64,10,92,163,174,32,173,188,3,188,203,128,58,126,236,56,149,154,133,170,59,119,209,216,3,84,119,1,71,175,183)
IMAGE_DATA(99,109,200,69,208,188,84,134,181,125,63,4,176,218,7,90,248,160,84,22,11,255,197,58,88,192,242,94,156,213,150,80)
IMAGE_DATA(130,45,248,111,204,15,16,109,4,107,174,247,137,16,215,253,164,144,250,0,44,123,1,228,252,151,190,15,96,93,83,164)
IMAGE_DATA(115,251,174,93,255,70,194,194,56,98,236,228,4,205,67,243,74,237,129,25,254,229,194,186,62,229,253,166,152,26,220,237)
IMAGE_DATA(234,193,138,189,149,194,245,34,93,25,170,154,30,194,206,183,24,103,175,181,243,227,66,21,30,118,247,162,178,241,33,230)
IMAGE_DATA(6,220,192,203,163,79,245,211,101,187,247,14,242,129,203,49,124,181,39,27,158,177,165,104,225,107,105,235,6,238,245,242)
IMAGE_DATA(129,143,183,243,252,111,225,227,155,163,74,177,50,36,29,52,47,149,209,252,240,205,132,185,243,59,203,24,192,202,7,99)
IMAGE_DATA(115,187,26,255,165,235,249,172,48,246,94,221,28,123,192,20,254,155,226,107,169,249,1,182,90,239,163,16,121,43,231,165)
IMAGE_DATA(148,191,44,243,182,148,255,226,216,33,5,139,61,17,30,62,172,223,124,207,118,242,105,216,83,221,38,109,47,198,142,196)
IMAGE_DATA(134,167,235,250,75,67,43,240,233,174,114,204,219,89,138,25,126,55,4,91,127,170,91,33,38,185,22,224,189,45,87,241)
IMAGE_DATA(182,67,62,70,111,202,195,76,191,34,188,252,102,66,63,93,114,115,47,99,234,151,78,100,138,211,73,216,243,252,246,138)
IMAGE_DATA(45,65,126,117,59,58,31,116,163,179,171,27,215,248,184,219,129,27,88,169,75,6,205,67,243,82,25,91,195,80,159,99)
IMAGE_DATA(237,143,198,250,46,11,31,12,241,91,203,94,64,45,176,86,185,90,249,47,47,95,75,125,114,63,64,122,109,11,136,190)
IMAGE_DATA(190,18,164,156,53,182,14,40,229,191,210,120,33,93,83,80,42,203,195,99,17,81,58,185,232,230,246,42,252,252,156,137)
IMAGE_DATA(78,183,147,56,58,142,34,74,39,23,93,93,103,11,245,209,61,60,30,71,235,225,122,184,14,14,7,107,132,117,125,251)
IMAGE_DATA(200,42,172,218,91,129,101,33,229,248,124,119,153,96,235,207,223,121,3,179,249,57,159,242,126,134,111,95,144,243,159,98)
IMAGE_DATA(143,62,2,159,111,9,34,147,55,30,197,34,223,115,176,255,54,29,223,236,204,132,125,64,6,86,238,72,193,66,239,51)
IMAGE_DATA(152,235,158,128,79,28,117,132,230,29,12,168,245,113,165,251,44,99,133,82,186,49,62,24,227,157,177,249,95,90,190,41)
IMAGE_DATA(96,221,203,203,10,91,242,95,204,47,15,214,94,239,19,97,104,126,151,238,7,48,182,166,103,108,253,79,106,79,40,249)
IMAGE_DATA(19,209,209,63,33,242,147,199,161,161,207,65,167,219,76,106,106,106,120,174,23,240,241,9,68,233,228,177,78,247,19,161)
IMAGE_DATA(62,186,135,231,151,75,114,48,252,211,139,120,109,110,54,126,49,35,93,88,215,127,229,253,36,188,50,225,28,254,229,189)
IMAGE_DATA(239,240,243,183,79,11,182,62,229,187,60,200,145,150,150,198,251,28,133,72,56,245,29,25,183,34,12,163,87,198,224,173)
IMAGE_DATA(175,226,133,64,227,31,172,143,68,114,74,42,73,77,75,35,25,25,25,172,143,220,162,80,234,227,134,250,189,41,99,128)
IMAGE_DATA(181,230,127,165,58,204,129,177,113,128,101,175,0,107,123,165,48,151,255,74,190,140,45,32,114,82,109,110,151,114,214,216)
IMAGE_DATA(94,0,115,249,31,26,250,51,34,255,114,64,96,224,75,72,76,76,196,237,219,183,225,239,239,76,220,221,39,18,39,167)
IMAGE_DATA(177,196,195,99,36,145,126,57,192,215,247,103,22,247,147,154,155,155,17,21,21,69,202,203,203,177,87,175,39,46,238,222)
IMAGE_DATA(100,218,167,107,200,31,102,246,5,26,119,245,240,33,17,145,145,164,180,180,148,247,83,142,144,138,138,10,75,171,97,20)
IMAGE_DATA(90,230,127,121,154,90,121,114,88,219,255,151,230,97,129,49,159,94,109,28,96,93,19,180,149,255,47,133,184,191,79,12)
IMAGE_DATA(182,240,253,165,107,124,44,193,144,15,96,41,254,75,191,252,161,211,189,132,19,39,78,160,184,184,24,238,238,203,120,222)
IMAGE_DATA(187,144,212,212,84,108,223,190,141,72,191,252,97,13,254,119,118,118,242,117,186,211,61,98,228,250,245,235,170,249,170,171)
IMAGE_DATA(171,249,113,42,144,248,248,248,144,134,134,6,75,171,97,20,44,243,185,214,52,57,108,177,254,79,161,198,79,249,188,205)
IMAGE_DATA(170,183,210,62,1,22,216,98,253,95,10,181,231,99,205,58,89,207,249,177,238,5,48,151,255,33,33,125,252,23,191,220)
IMAGE_DATA(67,191,86,227,229,53,139,228,230,230,10,182,127,78,78,142,240,55,59,59,27,78,78,43,137,244,203,61,62,62,3,249)
IMAGE_DATA(127,255,254,125,204,246,253,248,153,122,31,103,10,140,245,105,67,233,172,156,176,213,254,31,181,121,93,62,46,104,169,95)
IMAGE_DATA(62,6,176,192,214,252,23,235,208,178,47,200,92,80,46,179,236,239,101,221,11,96,46,255,245,250,231,137,248,229,45,93)
IMAGE_DATA(216,24,226,25,157,79,162,142,102,162,168,168,136,183,243,207,33,38,38,6,17,17,17,112,112,88,74,188,188,94,238,247)
IMAGE_DATA(229,45,63,191,97,3,234,251,36,122,22,89,118,122,129,201,252,63,230,181,148,92,15,91,133,130,208,229,200,223,253,37)
IMAGE_DATA(46,235,62,195,197,29,11,144,233,59,11,169,158,118,56,191,253,67,156,118,254,11,60,236,231,253,232,199,24,91,241,95)
IMAGE_DATA(9,74,231,116,180,216,242,134,206,0,170,193,20,255,223,84,222,138,235,253,226,122,31,203,190,32,115,161,246,206,79,13)
IMAGE_DATA(44,123,1,204,229,255,214,173,19,9,229,115,112,248,40,108,139,174,32,199,46,180,192,49,178,18,187,162,207,195,217,249)
IMAGE_DATA(93,129,243,254,254,47,226,232,209,129,95,206,115,112,120,167,95,125,11,194,102,18,159,43,46,240,200,113,196,178,51,11)
IMAGE_DATA(177,248,248,28,44,56,52,3,179,34,63,194,199,33,239,227,175,59,39,96,162,231,56,140,115,25,141,209,27,71,97,212)
IMAGE_DATA(154,145,3,244,161,220,111,190,113,10,77,197,39,209,88,120,28,13,215,226,112,43,63,22,245,151,99,80,151,19,137,154)
IMAGE_DATA(236,189,184,153,17,130,248,245,111,177,60,194,103,26,131,197,127,81,78,201,254,167,129,229,221,190,161,115,254,106,176,213)
IMAGE_DATA(250,159,210,30,31,173,231,3,76,129,161,119,126,74,96,89,7,52,151,255,143,31,63,198,74,251,53,100,93,200,53,158)
IMAGE_DATA(251,173,72,188,116,7,81,201,77,88,228,117,133,168,125,249,210,213,245,87,100,239,222,64,116,117,117,61,45,103,94,208)
IMAGE_DATA(116,226,125,217,25,135,75,246,225,64,177,30,81,215,67,17,94,16,132,208,252,111,177,235,178,63,118,92,242,130,207,5)
IMAGE_DATA(55,120,100,185,98,107,186,19,182,164,110,196,111,255,241,159,3,244,185,26,188,12,141,69,39,120,158,7,243,60,215,161)
IMAGE_DATA(42,37,0,21,231,189,81,118,198,13,37,9,206,40,62,182,9,149,201,129,120,127,91,26,254,226,146,140,137,142,231,240)
IMAGE_DATA(206,218,163,36,44,124,63,243,115,53,23,44,254,189,37,108,72,37,63,218,218,252,151,202,24,122,215,96,108,12,16,117)
IMAGE_DATA(215,178,15,72,107,123,77,225,191,161,61,62,214,246,3,180,238,197,21,101,12,241,215,92,254,83,124,165,203,35,113,153)
IMAGE_DATA(45,56,113,177,21,135,210,154,249,249,191,10,206,254,239,17,249,151,107,189,189,95,32,158,158,107,72,125,125,253,128,50)
IMAGE_DATA(102,5,76,35,238,23,29,16,93,20,134,200,194,96,236,189,170,67,112,222,14,124,155,235,3,255,28,15,120,101,111,197)
IMAGE_DATA(246,140,45,112,73,219,12,199,228,245,216,152,180,22,255,241,249,235,3,202,185,172,91,204,244,92,38,111,73,66,250,141)
IMAGE_DATA(118,164,20,181,33,42,181,22,111,47,9,181,153,63,96,168,143,40,241,205,148,126,164,182,207,78,203,254,90,181,253,250)
IMAGE_DATA(198,190,237,33,6,249,187,112,214,178,196,52,214,247,126,166,182,87,43,255,89,206,244,89,203,15,144,218,242,172,80,218)
IMAGE_DATA(203,43,127,23,96,236,251,31,44,223,7,89,236,158,78,194,206,220,70,116,74,19,190,217,83,129,25,139,230,144,160,160)
IMAGE_DATA(254,95,158,118,114,178,35,121,121,121,6,245,157,30,240,33,113,72,182,135,211,153,111,240,191,254,239,19,53,155,159,206)
IMAGE_DATA(251,148,251,191,94,244,171,1,101,80,95,223,49,161,18,51,67,175,194,78,151,135,143,252,115,241,129,231,69,76,113,205)
IMAGE_DATA(194,36,135,12,252,121,93,42,150,6,228,98,252,166,239,112,190,176,13,13,247,128,142,7,192,31,151,198,50,63,87,115)
IMAGE_DATA(97,136,227,106,105,172,99,129,161,51,54,44,220,179,212,247,255,148,244,148,223,83,154,175,181,206,249,230,180,87,235,179)
IMAGE_DATA(213,106,255,176,216,32,198,160,182,31,223,216,56,96,236,157,160,161,114,169,141,33,255,166,136,161,179,0,7,14,197,225)
IMAGE_DATA(227,77,73,228,253,117,201,196,217,83,39,164,157,59,247,29,28,29,255,76,28,28,222,38,137,137,39,152,219,251,55,175)
IMAGE_DATA(201,100,65,244,116,178,244,212,124,147,198,205,12,159,191,11,126,126,233,169,173,184,113,194,17,69,241,27,80,16,107,143)
IMAGE_DATA(171,49,43,144,183,111,9,46,235,63,69,241,113,103,140,251,58,1,151,42,218,113,177,172,13,237,60,255,255,235,179,104)
IMAGE_DATA(83,170,51,9,182,152,255,135,96,89,136,239,249,89,184,108,203,247,1,63,54,204,9,178,51,107,13,48,217,125,26,106)
IMAGE_DATA(50,247,8,126,126,225,145,175,113,237,224,106,228,239,95,134,43,17,159,35,55,108,33,46,133,204,193,245,184,205,248,211)
IMAGE_DATA(170,163,200,42,185,131,61,231,107,144,114,189,5,191,153,111,187,125,192,134,250,196,80,159,249,225,193,148,51,125,74,231)
IMAGE_DATA(3,172,169,227,143,1,116,13,192,220,53,192,51,46,83,80,149,186,11,21,73,59,80,118,214,23,5,199,183,35,58,112)
IMAGE_DATA(35,188,61,221,160,215,235,225,190,213,17,73,97,95,227,173,165,251,225,230,233,35,220,243,242,246,197,228,79,220,132,189)
IMAGE_DATA(7,207,26,88,236,108,181,123,182,6,203,156,104,200,46,146,255,149,251,77,74,127,149,202,208,2,145,251,90,249,171,228)
IMAGE_DATA(7,216,226,76,240,179,12,59,143,15,204,94,3,156,53,249,247,248,251,164,255,198,140,9,111,192,110,252,72,76,155,50)
IMAGE_DATA(14,59,119,238,20,254,231,71,101,101,165,112,54,96,243,198,117,88,182,210,30,215,139,138,132,123,153,153,153,66,30,39)
IMAGE_DATA(39,167,65,255,125,140,113,195,218,247,140,233,160,6,173,190,191,90,25,198,210,164,121,228,113,165,241,64,171,14,82,72)
IMAGE_DATA(247,246,154,194,93,37,63,110,104,12,48,140,143,189,166,10,107,128,219,120,142,127,17,59,95,213,230,55,180,6,56,102)
IMAGE_DATA(204,152,167,191,219,242,229,203,73,94,97,33,230,206,157,43,172,21,45,89,178,132,238,251,197,166,77,155,64,227,31,126)
IMAGE_DATA(248,161,144,70,199,128,21,43,86,216,228,183,97,241,241,181,240,72,109,174,212,34,163,86,39,171,174,134,96,46,247,229)
IMAGE_DATA(122,40,201,88,114,254,87,242,223,181,142,29,106,101,12,249,2,198,241,129,219,68,242,209,174,201,36,108,111,152,73,242)
IMAGE_DATA(244,76,31,29,187,199,142,29,75,54,111,222,44,240,127,218,180,105,228,221,119,223,37,73,73,73,160,239,33,210,211,211)
IMAGE_DATA(17,23,23,135,113,227,198,17,154,70,249,79,243,90,184,41,102,131,133,111,150,184,54,199,63,48,151,255,90,198,7,107)
IMAGE_DATA(242,159,245,219,36,134,96,136,247,67,227,0,27,168,31,254,206,146,183,204,126,54,193,193,193,248,236,179,207,4,254,211)
IMAGE_DATA(191,148,255,188,13,0,59,59,59,33,208,56,189,71,211,40,255,233,95,75,232,111,11,24,226,180,90,92,233,218,26,186)
IMAGE_DATA(88,58,93,154,199,22,243,255,16,126,28,160,231,15,167,79,159,78,92,92,92,72,80,80,16,137,143,143,199,238,221,187)
IMAGE_DATA(97,111,111,143,141,27,55,10,113,122,143,166,209,60,52,239,96,235,108,42,88,249,111,237,186,173,145,46,205,163,133,255)
IMAGE_DATA(74,254,194,208,24,240,255,7,61,61,61,200,207,207,23,108,255,69,139,22,145,47,190,248,130,250,255,36,58,58,26,212)
IMAGE_DATA(15,160,215,52,208,52,154,135,230,29,194,16,134,48,4,107,225,255,0,80,219,106,35,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(4768, 3)

View file

@ -0,0 +1,17 @@
#ifndef _AccessKey_AccessKey_h
#define _AccessKey_AccessKey_h
#include <CtrlLib/CtrlLib.h>
#define LAYOUTFILE <AccessKey/AccessKey.lay>
#include <CtrlCore/lay.h>
class AccessKey : public WithAccessKeyLayout<TopWindow> {
public:
typedef AccessKey CLASSNAME;
AccessKey();
};
#endif

View file

@ -0,0 +1,33 @@
LAYOUT(AccessKeyLayout, 200, 308)
ITEM(EditDate, dv___0, LeftPosZ(56, 140).TopPosZ(4, 19))
ITEM(Label, dv___1, SetLabel(t_("asdfasdf\a\001[= Test")).SetFont(SansSerifZ(20)).LeftPosZ(8, 188).TopPosZ(28, 32))
ITEM(Base, ok, RightPosZ(90, 80).BottomPosZ(212, 22))
ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 80).BottomPosZ(212, 22))
ITEM(Button, dv___4, SetLabel(t_("\001[= Test&asdflkajsdf&asdflkasldfjlkajsdf")).LeftPosZ(8, 184).TopPosZ(116, 188))
END_LAYOUT
LAYOUT(asdfasdf, 400, 200)
ITEM(DataPusher, data1, LeftPosZ(4, 64).TopPosZ(20, 24))
ITEM(DataPusher, data2, LeftPosZ(4, 64).TopPosZ(48, 24))
ITEM(LineEdit, edit, LeftPosZ(232, 132).TopPosZ(68, 19))
ITEM(Label, label, SetLabel(t_("Label")).LeftPosZ(368, 28).TopPosZ(68, 16))
ITEM(LineEdit, edit, LeftPosZ(220, 132).TopPosZ(96, 19))
ITEM(Label, label, SetLabel(t_("Label")).LeftPosZ(356, 28).TopPosZ(96, 16))
ITEM(DataPusher, data1, LeftPosZ(36, 64).TopPosZ(112, 24))
ITEM(DataPusher, data2, LeftPosZ(36, 64).TopPosZ(140, 24))
END_LAYOUT
LAYOUT(TestLayout, 356, 76)
ITEM(LineEdit, edit, LeftPosZ(188, 132).TopPosZ(4, 19))
ITEM(Label, label, SetLabel(t_("Label")).LeftPosZ(324, 28).TopPosZ(4, 16))
ITEM(DataPusher, data1, LeftPosZ(4, 64).TopPosZ(20, 24))
ITEM(DataPusher, data2, LeftPosZ(4, 64).TopPosZ(48, 24))
END_LAYOUT
LAYOUT(TestLayout3, 356, 76)
ITEM(Label, label, SetLabel(t_("Label")).LeftPosZ(144, 28).TopPosZ(8, 16))
ITEM(LineEdit, edit, LeftPosZ(188, 132).TopPosZ(4, 19))
ITEM(DataPusher, data1, LeftPosZ(4, 64).TopPosZ(20, 24))
ITEM(DataPusher, data2, LeftPosZ(4, 64).TopPosZ(48, 24))
END_LAYOUT

View file

@ -0,0 +1,40 @@
uses
CtrlLib,
Web;
include
gdfgsdfg;
file
test.js highlight js,
h.iml,
bak.tpp,
bak.tpp,
AccessKey.h,
testing.icpp,
test.key,
translate.t,
main.cpp charset "UTF-8-BOM",
test.cpp,
AccessKey.lay,
[Content_Types].xml,
test.zip,
_rels readonly separator,
_rels\.rels,
docProps readonly separator,
docProps\app.xml,
docProps\core.xml,
xl readonly separator,
xl\sharedStrings.xml,
xl\styles.xml,
xl\workbook.xml,
xl\_rels readonly separator,
xl\_rels\workbook.xml.rels,
xl\theme readonly separator,
xl\theme\theme1.xml,
xl\worksheets readonly separator,
xl\worksheets\sheet1.xml;
mainconfig
"" = "GUI ST";

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/><Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/><Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/><Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/></Types>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>

9
uppdev/AccessKey/add.cpp Normal file
View file

@ -0,0 +1,9 @@
#include "AccessKey.h"
void test()
{
if(a( && b)
{
}
}

View file

@ -0,0 +1,49 @@
topic "vxcv zxcv zxcv zxv zxvc zv ho";
[ $$0,0#00000000000000000000000000000000:Default]
[{_}%ES-ES
[s0;i448;O9; asdf-|safasdf&]
[s0;i448;n`.;N1; asdfas-|asdfasdfaasdf aslkdjf alksjdfh kajsdh fkjah
sdkfjh aksjdfh kajsdh fkajsh dfkjash dkfjha skdjfh aksjdf kajsdfh
kajsdfh &]
[s0;i448;n`.;N1; vzxcvzxcv&]
[s0;i448;n`.;N1; zxcvzxcv&]
[s0;i448;n`.;N1; zxcvzxcv&]
[s0;i448;n`.;N1; &]
[s0;i448;n`.;N1; zxcvzxcvzxcv&]
[s0;i448;n`.;N1; zxcvzxcv&]
[s0;i448;n`.;N1; &]
[s0;i448;n`.;N1; zxcvzxcvzxcv&]
[s0;i448;n`.;N1; &]
[s0;i448;n`.;N1; &]
[s0;i448;n`.;N1; &]
[s0;i448;n`.;N1; &]
[s0;i448;n`.;N1; &]
[ {{5000:5000 [s0;i448;n`.;N1; asdfasdf]
:: [s0;i448;n`.;N1; asdfasdf]}}&]
[s0; asfasd [* asdfasdfasd ][*R6 asdfasdfasdf]&]
[s0; vxcv zxcv zxcv zxv zxvc zv ho&]
[s0;N! ,asnmdf asf asfhjd akhjdsf kahjds fkahjds fkahjds fkahjds
fka hdfkahd fkahjds fkahjdsf kafhd kahdsf kahjdsf ahkjh asdfkjha
sdfkjh asdfkjh asdfkjh asdflkjhas dfkjh asdf kjh asdfkjh &]
[s0; &]
[s0;i448;n`.;N1; zxcvzxcvzxcv&]
[s0; &]
[s0; los&]
[s0; de&]
[s0; han&]
[s0; se&]
[s0; datos&]
[s0; fichero&]
[s0; realizar&]
[s0; Ajustes&]
[s0; simulación&]
[s0; una&]
[s0; indicado&]
[s0; generales&]
[s0; Datos&]
[s0; Apartado&]
[s0; Localización&]
[s0; geográfica&]
[s0; &]
[s0; asdf&]
[s0; ha ]]

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,37 @@
topic "";
[ $$0,0#00000000000000000000000000000000:Default]
[{_}
[ {{588:588:588:588:588:588:588:588:588:588:588:588:588:588:588:588:592 [s0;%% [R Aa]]
:: [s0;%% [R Bb]]
:: [s0;%% [R Cc]]
:: [s0;%% [R Dd]]
:: [s0;%% [R Ee]]
:: [s0;%% [R Ff]]
:: [s0;%% [R Gg]]
:: [s0;%% [R Hh]]
:: [s0;%% [R Ii]]
:: [s0;%% [R Jj]]
:: [s0;%% [R Kk]]
:: [s0;%% [R Ll]]
:: [s0;%% [R Mm]]
:: [s0;%% [R Nn]]
:: [s0;%% [R Oo]]
:: [s0;%% [R Pp]]
:: [s0;%% [R Rr]]
:: [s0;%% [!Edwardian Script ITC! Aa]]
:: [s0;%% [!Edwardian Script ITC! Bb]]
:: [s0;%% [!Edwardian Script ITC! Cc]]
:: [s0;%% [!Edwardian Script ITC! Dd]]
:: [s0;%% [!Edwardian Script ITC! Ee]]
:: [s0;%% [!Edwardian Script ITC! Ff]]
:: [s0;%% [!Edwardian Script ITC! Gg]]
:: [s0;%% [!Edwardian Script ITC! Hh]]
:: [s0;%% [!Edwardian Script ITC! Ii]]
:: [s0;%% [!Edwardian Script ITC! Jj]]
:: [s0;%% [!Edwardian Script ITC! Kk]]
:: [s0;%% [!Edwardian Script ITC! Ll]]
:: [s0;%% [!Edwardian Script ITC! Mm]]
:: [s0;%% [!Edwardian Script ITC! Nn]]
:: [s0;%% [!Edwardian Script ITC! Oo]]
:: [s0;%% [!Edwardian Script ITC! Pp]]
:: [s0;%% [!Edwardian Script ITC! Rr]]}}]

View file

@ -0,0 +1,70 @@
topic "Morituri te Salutant";
[ $$0,0#00000000000000000000000000000000:Default]
[{_}
[s0;a83; [R6 Morituri te Salutant]&]
[s0; [R1 Cesta je prach]&]
[s0;a83; [R1 a štěrk]&]
[s0;a83; [R1 a udusaná hlína]&]
[s0; [R1 a šedé šmouhy]&]
[s0; [R1 kreslí do vlasů]&]
[s0; [R1 a z hvězdných drah]&]
[s0; [R1 šperk]&]
[s0; [R1 co kamením se spíná]&]
[s0; [R1 a pírka touhy]&]
[s0; [R1 z křídel Pegasů]&]
[s0;R1 &]
[s0; [R1 Cesta je bič]&]
[s0; [R1 Je zlá]&]
[s0; [R1 jak pouliční dáma]&]
[s0; [R1 v ruce štítky]&]
[s0; [R1 v pase staniol]&]
[s0; [R1 a z očí chtíč plá]&]
[s0; [R1 když háže do neznáma]&]
[s0; [R1 dvě křehké snítky]&]
[s0; [R1 rudých gladiol]&]
[s0;R1 &]
[s0; [R1 Seržante písek je bílý]&]
[s0; [R1 jak paže Daniely]&]
[s0; [R1 Počkejte chvíli!]&]
[s0;R1 &]
[s0; [R1 oči uviděly]&]
[s0; [R1 tu strašně dávnou]&]
[s0; [R1 vteřinu zapomnění]&]
[s0; [R1 Seržante! Mávnou]&]
[s0; [R1 a budem zasvěceni]&]
[s0; [R1 Morituri te salutant]&]
[s0; [R1 Morituri te salutant]&]
[s0;R1 &]
[s0; [R1 Tou cestou dál]&]
[s0; [R1 jsem šel]&]
[s0; [R1 kde na zemi se zmítá]&]
[s0; [R1 a písek víří]&]
[s0; [R1 křídlo holubí]&]
[s0; [R1 a marš mi hrál]&]
[s0; [R1 zvuk děl]&]
[s0; [R1 co uklidnění skýtá]&]
[s0; [R1 a zvedá chmýří]&]
[s0; [R1 které zahubí]&]
[s0;R1 &]
[s0; [R1 Cesta je tér a prach]&]
[s0; [R1 a udusaná hlína]&]
[s0; [R1 mosazná včelka]&]
[s0; [R1 od vlkodlaka]&]
[s0; [R1 rezavý kvér]&]
[s0; [R1 `- můj brach]&]
[s0; [R1 a sto let stará špína]&]
[s0; [R1 a děsně velká]&]
[s0; [R1 bílá oblaka]&]
[s0;R1 &]
[s0; [R1 Seržante]&]
[s0; [R1 písek je bílý]&]
[s0; [R1 jak paže Daniely]&]
[s0; [R1 Počkejte chvíli!]&]
[s0; [R1 oči uviděly]&]
[s0; [R1 tu strašně dávnou]&]
[s0; [R1 vteřinu zapomnění]&]
[s0; [R1 Seržante! Mávnou]&]
[s0; [R1 a budem zasvěceni]&]
[s0; [R1 Morituri te salutant]&]
[s0; [R1 Morituri te salutant ]&]
[s0;%% ]]

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><Application>Microsoft Excel</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><HeadingPairs><vt:vector size="2" baseType="variant"><vt:variant><vt:lpstr>listy</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector size="1" baseType="lpstr"><vt:lpstr>test</vt:lpstr></vt:vector></TitlesOfParts><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>14.0300</AppVersion></Properties>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:creator>cxl</dc:creator><cp:lastModifiedBy>cxl</cp:lastModifiedBy><dcterms:created xsi:type="dcterms:W3CDTF">2011-11-09T13:03:21Z</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">2011-11-09T13:03:21Z</dcterms:modified></cp:coreProperties>

2415
uppdev/AccessKey/h.iml Normal file

File diff suppressed because it is too large Load diff

BIN
uppdev/AccessKey/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 B

9
uppdev/AccessKey/init Normal file
View file

@ -0,0 +1,9 @@
#ifndef _AccessKey_icpp_init_stub
#define _AccessKey_icpp_init_stub
#include "CtrlLib/init"
#include "Web/init"
#include "SubTest/init"
#define BLITZ_INDEX__ F190185a01d70a422cd7de990bd1c48a1
#include "testing.icpp"
#undef BLITZ_INDEX__
#endif

14
uppdev/AccessKey/main.cpp Normal file
View file

@ -0,0 +1,14 @@
#include "AccessKey.h"
GUI_APP_MAIN
{
AKD_TEST
Ctrl::AddFlags(Ctrl::AKD_CONSERVATIVE);
AccessKey().Run(Accept());
String s;S
s.Cat()Add
AKD_CONS
AKD_TEST
}

View file

@ -0,0 +1,9 @@
#include "AccessKey.h"
void test()
{
if(a( && b)
{
}
1.f ssdf
}

48
uppdev/AccessKey/test.js Normal file
View file

@ -0,0 +1,48 @@
var s1 = new String("Hello !");
var s2 = new String("Hello !");
s1 == s2; // Is false, because they are two distinct objects.
s1.valueOf() == s2.valueOf(); // Is true.
//Automatic type coercion
f1(true == 2 ); // false... true → 1 !== 2 ← 2
alert2(false == 2 ); // false... false → 0 !== 2 ← 2
alert3(true == 1 ); // true.... true → 1 === 1 ← 1
alert4(false == 0 ); // true.... false → 0 === 0 ← 0
alert5(true == "2"); // false... true → 1 !== 2 ← "2"
alert6(false == "2"); // false... false → 0 !== 2 ← "2"
alert7(true == "1"); // true.... true → 1 === 1 ← "1"
alert8(false == "0"); // true.... false → 0 === 0 ← "0"
alert9(false == "" ); // true.... false → 0 === 0 ← ""
alert(false == NaN); // false... false → 0 !== NaN
//Type checked comparison (no conversion of types and values)
alert(true === 1); // false... data types do not match
//Explicit type coercion
alert(true === !!2); // true.... data types and values match
alert(true === !!0); // false... data types match but values differ
alert( 1 ? true : false); // true.... only ±0 and NaN are “falsy” numbers
alert("0" ? true : false); // true.... only the empty string is “falsy”
alert(Boolean({})); // true.... all objects are “truthy” except null
var d = new Date(2010, 2, 1, 14, 25, 30); // 2010-Mar-01 14:25:30
// Displays '2010-3-1 14:25:30':
alert(d.getFullYear() + '-' + (d.getMonth()+1) + '-' + d.getDate() + ' '
+ d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds());
// Built-in toString returns something like 'Mon Mar 01 2010 14:25:30 GMT-0500 (EST)':
alert(d);
s.length
var myRe = /(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2})/;
var results = myRe.exec("The date and time are 2009-09-08 09:37:08.");
if (results) {
alert("Matched: " + results[0]); // Entire match
var my_date = results[1]; // First group == "2009-09-08"
var my_time = results[2]; // Second group == "09:37:08"
alert("It is " + my_time + " on " + my_date);
} else alert("Did not find a valid date!");
try

View file

@ -0,0 +1,3 @@
KEY(EDITFILE, t_("Edit file"), K_CTRL_O)
KEY(SAVEFILE, "Save", K_CTRL_S)
KEY(READONLY, "Read only", 0)

View file

@ -0,0 +1,3 @@
macro "Swap":"Swap Chars" Ctrl+Shift+T {
Execute("cmd.exe");
}

BIN
uppdev/AccessKey/test.zip Normal file

Binary file not shown.

View file

@ -0,0 +1,3 @@
"\305\241\305\241\305\241\305\241 Hezky p\304\233kn\304\233 \304\215esky!"
asdfasdf
a

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/></Relationships>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="50" uniqueCount="49"><si><t>Account information</t></si><si><t>Product Information:</t></si><si><t>Performance Information</t></si><si><t>Report information</t></si><si><t>Google Client Account Information</t></si><si><t>Click Pack</t></si><si><t>Facebook Client Account Information</t></si><si><t>Admin fee</t></si><si><t>Client Name</t></si><si><t>Campaing Name</t></si><si><t>Time zone</t></si><si><t>Country</t></si><si><t>Currency</t></si><si><t>Responsible planner</t></si><si><t>REO</t></si><si><t>Default Destination URL</t></si><si><t>Default Display URL</t></si><si><t>Customer reg. ID</t></si><si><t>Order number</t></si><si><t>Users (separate with a comma)</t></si><si><t>Product</t></si><si><t>Type</t></si><si><t>Start date</t></si><si><t>Stop date</t></si><si><t>Regional targeting location</t></si><si><t>Regional targeting radius</t></si><si><t>Google Budget</t></si><si><t>Facebook Budget</t></si><si><t>Guaranteed position</t></si><si><t>Report should be emailed to (separate with a comma):</t></si><si><t>Client account number</t></si><si><t>Target margin</t></si><si><t>Guaranteed clicks</t></si><si><t>Facebook Login</t></si><si><t>Facebook Password</t></si><si><t>Facebook Campaign Name</t></si><si><t>Setup fee</t></si><si><t>Management fee</t></si><si><t>25664723_KP/GAR_AARON TRADE, spol. s r.o.</t></si><si><t>195_25664723_AARON TRADE, spol. s r.o.</t></si><si><t>Prague</t></si><si><t>CZ</t></si><si><t>CZK</t></si><si><t>Fidler Mirek</t></si><si><t>http://www.ultimatepp.org/forum</t></si><si><t>http://ultimatepp.org</t></si><si><t>Admin Fee (KP)</t></si><si><t>GAR</t></si><si><t>cxl@ntllib.org</t></si></sst>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><fileVersion appName="xl" lastEdited="5" lowestEdited="5" rupBuild="9302"/><workbookPr defaultThemeVersion="124226"/><bookViews><workbookView xWindow="360" yWindow="120" windowWidth="20115" windowHeight="10035"/></bookViews><sheets><sheet name="test" sheetId="1" r:id="rId1"/></sheets><calcPr calcId="0"/></workbook>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><dimension ref="A1:AD3"/><sheetViews><sheetView tabSelected="1" workbookViewId="0"><selection activeCell="N1" sqref="N1"/></sheetView></sheetViews><sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/><cols><col min="23" max="23" width="27.140625" customWidth="1"/><col min="24" max="24" width="14.140625" customWidth="1"/><col min="25" max="25" width="21" customWidth="1"/></cols><sheetData><row r="1" spans="1:30" x14ac:dyDescent="0.25"><c r="A1" t="s"><v>0</v></c><c r="M1" t="s"><v>1</v></c><c r="S1" t="s"><v>2</v></c><c r="V1" t="s"><v>3</v></c><c r="W1" t="s"><v>4</v></c><c r="X1" t="s"><v>5</v></c><c r="Z1" t="s"><v>6</v></c><c r="AC1" t="s"><v>7</v></c></row><row r="2" spans="1:30" x14ac:dyDescent="0.25"><c r="A2" t="s"><v>8</v></c><c r="B2" t="s"><v>9</v></c><c r="C2" t="s"><v>10</v></c><c r="D2" t="s"><v>11</v></c><c r="E2" t="s"><v>12</v></c><c r="F2" t="s"><v>13</v></c><c r="G2" t="s"><v>14</v></c><c r="H2" t="s"><v>15</v></c><c r="I2" t="s"><v>16</v></c><c r="J2" t="s"><v>17</v></c><c r="K2" t="s"><v>18</v></c><c r="L2" t="s"><v>19</v></c><c r="M2" t="s"><v>20</v></c><c r="N2" t="s"><v>21</v></c><c r="O2" t="s"><v>22</v></c><c r="P2" t="s"><v>23</v></c><c r="Q2" t="s"><v>24</v></c><c r="R2" t="s"><v>25</v></c><c r="S2" t="s"><v>26</v></c><c r="T2" t="s"><v>27</v></c><c r="U2" t="s"><v>28</v></c><c r="V2" t="s"><v>29</v></c><c r="W2" t="s"><v>30</v></c><c r="X2" t="s"><v>31</v></c><c r="Y2" t="s"><v>32</v></c><c r="Z2" t="s"><v>33</v></c><c r="AA2" t="s"><v>34</v></c><c r="AB2" t="s"><v>35</v></c><c r="AC2" t="s"><v>36</v></c><c r="AD2" t="s"><v>37</v></c></row><row r="3" spans="1:30" x14ac:dyDescent="0.25"><c r="A3" t="s"><v>38</v></c><c r="B3" t="s"><v>39</v></c><c r="C3" t="s"><v>40</v></c><c r="D3" t="s"><v>41</v></c><c r="E3" t="s"><v>42</v></c><c r="F3" t="s"><v>43</v></c><c r="G3"><v>0</v></c><c r="H3" t="s"><v>44</v></c><c r="I3" t="s"><v>45</v></c><c r="J3"><v>25664723</v></c><c r="K3"><v>195</v></c><c r="L3" t="s"><v>43</v></c><c r="M3" t="s"><v>46</v></c><c r="N3" t="s"><v>47</v></c><c r="O3" s="1"><v>40856</v></c><c r="P3" s="1"><v>40856</v></c><c r="S3"><v>0</v></c><c r="T3"><v>0</v></c><c r="V3" t="s"><v>48</v></c><c r="W3"><v>1231231234</v></c><c r="AC3"><v>12</v></c><c r="AD3"><v>12</v></c></row></sheetData><pageMargins left="0.7" right="0.7" top="0.78740157499999996" bottom="0.78740157499999996" header="0.3" footer="0.3"/></worksheet>

View file

4
uppdev/AddOn/AddOn.cpp Normal file
View file

@ -0,0 +1,4 @@
#include <AddOn/AddOn.h>
int IAddOn::GetMajorRevision() {return 0;}
int IAddOn::GetMinorRevision() {return 0;}

22
uppdev/AddOn/AddOn.h Normal file
View file

@ -0,0 +1,22 @@
#ifndef _AddOn_AddOn_h_
#define _AddOn_AddOn_h_
#include <Core/Core.h>
using namespace Upp;
#if defined PLATFORM_WIN32 || defined PLATFORM_WINCE
#define ADDONEXPORT extern "C" __declspec(dllexport)
#else
#define ADDONEXPORT
#endif
class IAddOn
{
public:
virtual String GetName() = 0;
virtual int GetMajorRevision();
virtual int GetMinorRevision();
};
#endif

8
uppdev/AddOn/AddOn.upp Normal file
View file

@ -0,0 +1,8 @@
uses
Core;
file
AddOn.h,
AddOn.cpp,
AddOnLoader.h,
AddOnLoader.cpp;

View file

155
uppdev/AddOn/AddOnLoader.h Normal file
View file

@ -0,0 +1,155 @@
#ifndef _AddOn_AddOnLoader_h_
#define _AddOn_AddOnLoader_h_
#include <Core/Core.h>
using namespace Upp;
#include <AddOn/AddOn.h>
#ifdef PLATFORM_POSIX
#include <dlfcn.h>
#endif
template <class T>
class AddOnLoader
{
public:
AddOnLoader(){};
~AddOnLoader();
int LoadFile(String name);
int LoadFolder(String name);
int GetCount();
T* At(int idx);
T* operator[](int idx) {return At(idx);}
private:
AddOnLoader(const AddOnLoader&);
bool Load(String name);
struct Item {
DLLHANDLE hmod;
T* address;
};
Array<Item> addOns;
typedef IAddOn*(*Start)();
typedef void(*Stop)();
#if defined PLATFORM_WIN32
typedef HMODULE DLLHANDLE;
#else
typedef void* DLLHANDLE;
#endif
static const String sharedLibExt;
};
#if defined PLATFORM_WIN32 || defined PLATFORM_WINCE
template <class T> const String AddOnLoader<T>::sharedLibExt = ".dll";
#elif defined PLATFORM_LINUX || defined PLATFORM_FREEBSD || defined PLATFORM_SOLARIS
template <class T> const String AddOnLoader<T>::sharedLibExt = ".so";
#elif defined PLATFORM_OSX11
template <class T> const String AddOnLoader<T>::sharedLibExt = ".dylib";
#endif
template <class T>
AddOnLoader<T>::~AddOnLoader()
{
for (int i = 0; i < addOns.GetCount(); i++) {
#if defined PLATFORM_WIN32 || defined PLATFORM_WINCE
Stop stop = (Stop)GetProcAddress(addOns[i].hmod, "Stop");
#else
Stop stop = (Stop)dlsym(addOns[i].hmod, "Stop");
#endif
if (stop) {
stop();
}
#if defined PLATFORM_WIN32 || defined PLATFORM_WINCE
FreeLibrary(addOns[i].hmod);
#else
dlclose(addOns[i].hmod);
#endif
}
addOns.Clear();
}
template <class T>
int AddOnLoader<T>::LoadFile(String name)
{
if (FileExists(name)) {
return Load(name)?1:0;
} else {
return 0;
}
}
template <class T>
int AddOnLoader<T>::LoadFolder(String name)
{
int num = 0;
for(FindFile ff(AppendFileName(name, "*.*")); ff; ff.Next()) {
if (ff.IsFolder()) {
num += LoadFolder(AppendFileName(name, ff.GetName()));
} else if (ff.IsFile() && ToLower(GetFileExt(ff.GetName()) == sharedLibExt)) {
num += Load(AppendFileName(name, ff.GetName()));
}
}
return num;
}
template <class T>
bool AddOnLoader<T>::Load(String name)
{
bool status = false;
#if defined PLATFORM_WIN32 || defined PLATFORM_WINCE
DLLHANDLE hmod = LoadLibrary(NormalizePath(name));
#else
DLLHANDLE hmod = dlopen(NormalizePath(name), RTLD_LAZY);
#endif
if (hmod) {
#if defined PLATFORM_WIN32 || defined PLATFORM_WINCE
Start start = (Start)GetProcAddress(hmod, "Start");
#else
Start start = (Start)dlsym(hmod, "Start");
#endif
T* plugin;
if (start && (plugin = dynamic_cast<T*>(start()))) {
Item& addOn = addOns.Add();
addOn.hmod = hmod;
addOn.address = plugin;
status = true;
} else {
#if defined PLATFORM_WIN32 || defined PLATFORM_WINCE
FreeLibrary(hmod);
#else
dlclose(hmod);
#endif
}
}
return status;
}
template <class T>
int AddOnLoader<T>::GetCount()
{
return addOns.GetCount();
}
template <class T>
T* AddOnLoader<T>::At(int idx)
{
if (idx < addOns.GetCount()) {
return addOns[idx].address;
} else {
return NULL;
}
}
#endif

View file

@ -0,0 +1,35 @@
#include <Core/Core.h>
using namespace Upp;
#include <AddOn/AddOn.h>
#include <AddOnHost/IAddOns.h>
class DoPlugIn : public IDoPlugin
{
public:
virtual String GetName(void) {return "My First Do Plugin";}
virtual String Do(void) {return "Do";}
virtual int GetMajorRevision() {return 0;}
virtual int GetMinorRevision() {return 1;}
};
class ComputePlugIn : public IComputePlugin
{
public:
virtual String GetName(void) {return "My First Compute Plugin";}
virtual String Compute(void) {return "Compute";}
virtual int GetMajorRevision() {return 0;}
virtual int GetMinorRevision() {return 1;}
};
#if 1
ADDONEXPORT DoPlugIn* Start() {
return &Single<DoPlugIn>();
}
#else
ADDONEXPORT ComputePlugIn* Start() {
return &Single<ComputePlugIn>();
}
#endif

View file

@ -0,0 +1,9 @@
uses
Core,
AddOn;
file
AddOnDll.cpp;
mainconfig
"" = "DLL ADDON";

View file

@ -0,0 +1 @@
PK

View file

@ -0,0 +1,21 @@
#include <Core/Core.h>
using namespace Upp;
#include <AddOn/AddOnLoader.h>
#include <AddOnHost/IAddOns.h>
#define DLLPATH "C:\\upp\\out\\MINGW.Addon.Debug_full.Dll"
CONSOLE_APP_MAIN
{
AddOnLoader<IDoPlugin> addOns;
addOns.LoadFolder(DLLPATH);
for (int i = 0; i < addOns.GetCount(); i++) {
Cout() << "Name: " << addOns[i]->GetName() <<
" v" << addOns[i]->GetMajorRevision() << "." << addOns[i]->GetMinorRevision() <<
" - Action: " << addOns[i]->Do() << "\n";
}
}

View file

@ -0,0 +1,10 @@
uses
Core,
AddOn;
file
IAddOns.h,
AddOnHost.cpp;
mainconfig
"" = "";

View file

@ -0,0 +1,18 @@
#ifndef _AddOnHost_IAddOns_h_
#define _AddOnHost_IAddOns_h_
#include <AddOn/AddOn.h>
class IDoPlugin : public IAddOn
{
public:
virtual String Do() = 0;
};
class IComputePlugin : public IAddOn
{
public:
virtual String Compute() = 0;
};
#endif

View file

@ -0,0 +1,218 @@
#include <CtrlLib/CtrlLib.h>
#include <Report/Report.h>
#define LAYOUTFILE <AddressBookXMLDOM/AddressBookXMLDOM.lay>
#include <CtrlCore/lay.h>
#define TAG_NAME "name"
#define TAG_SURNAME "surname"
#define TAG_ADDRESS "address"
#define TAG_EMAIL "email"
class AddressBook : public WithAddressBookLayout<TopWindow> {
WithModifyLayout<ParentCtrl> modify;
WithSearchLayout<ParentCtrl> search;
FileSel fs;
String filename;
void SetupSearch();
void Add();
void Change();
void Search();
void Open();
void Save();
void SaveAs();
void Print();
void Quit();
void FileMenu(Bar& bar);
void MainMenu(Bar& bar);
typedef AddressBook CLASSNAME;
public:
void Serialize(Stream& s);
AddressBook();
};
AddressBook::AddressBook()
{
CtrlLayout(*this, "Address book");
CtrlLayout(modify);
CtrlLayout(search);
tab.Add(modify, "Modify");
tab.Add(search, "Search");
ActiveFocus(search.name);
search.oname = true;
search.oname <<= search.osurname <<= search.oaddress
<<= search.oemail <<= THISBACK(SetupSearch);
array.AddColumn(TAG_NAME, "Name");
array.AddColumn(TAG_SURNAME, "Surname");
array.AddColumn(TAG_ADDRESS, "Address");
array.AddColumn(TAG_EMAIL, "Email");
modify.add <<= THISBACK(Add);
modify.change <<= THISBACK(Change);
search.search <<= THISBACK(Search);
SetupSearch();
fs.AllFilesType();
menu.Set(THISBACK(MainMenu));
}
void AddressBook::FileMenu(Bar& bar)
{
bar.Add("Open..", CtrlImg::open(), THISBACK(Open));
bar.Add("Save", CtrlImg::save(), THISBACK(Save));
bar.Add("Save as..", CtrlImg::save_as(), THISBACK(SaveAs));
bar.Separator();
bar.Add("Print", CtrlImg::print(), THISBACK(Print));
bar.Separator();
bar.Add("Quit", THISBACK(Quit));
}
void AddressBook::MainMenu(Bar& bar)
{
bar.Add("File", THISBACK(FileMenu));
}
void AddressBook::SetupSearch()
{
search.name.Enable(search.oname);
search.surname.Enable(search.osurname);
search.address.Enable(search.oaddress);
search.email.Enable(search.oemail);
}
void AddressBook::Add()
{
array.Add(~modify.name, ~modify.surname, ~modify.address, ~modify.email);
array.GoEnd();
modify.name <<= modify.surname <<= modify.address <<= modify.email <<= Null;
ActiveFocus(modify.name);
}
void AddressBook::Change()
{
if(array.IsCursor()) {
array.Set(0, ~modify.name);
array.Set(1, ~modify.surname);
array.Set(2, ~modify.address);
array.Set(3, ~modify.email);
}
}
bool Contains(const String& text, const String& substr)
{
for(const char *s = text; s <= text.End() - substr.GetLength(); s++)
if(strncmp(s, substr, substr.GetLength()) == 0)
return true;
return false;
}
void AddressBook::Search()
{
if(!array.GetCount()) return;
bool sc = true;
array.ClearSelection();
for(int i = 0; i < array.GetCount(); i++) {
if((!search.oname || Contains(array.Get(i, 0), ~search.name)) &&
(!search.osurname || Contains(array.Get(i, 1), ~search.surname)) &&
(!search.oaddress || Contains(array.Get(i, 2), ~search.address)) &&
(!search.oemail || Contains(array.Get(i, 3), ~search.email))) {
array.Select(i);
if(sc) {
array.SetCursor(i);
array.CenterCursor();
sc = false;
};
}
}
}
void AddressBook::Open()
{
if(!fs.ExecuteOpen()) return;
filename = fs;
array.Clear();
try {
String d = LoadFile(filename);
XmlNode n = ParseXML(d);
if(n.GetCount()==0 || n[0].GetTag() != "AddressBook")
throw XmlError("No AddressBook tag in ");
const XmlNode &ab = n[0];
array.SetCount(ab.GetCount());
for(int i=0; i < ab.GetCount(); i++){
const XmlNode &person = ab[i];
for(int j=0; j < person.GetCount(); j++){
const XmlNode &prop = person[j];
if(prop.IsTag(TAG_NAME)) array.Set(i, TAG_NAME, prop[0].GetText());
else if(prop.IsTag(TAG_SURNAME)) array.Set(i, TAG_SURNAME, prop[0].GetText());
else if(prop.IsTag(TAG_ADDRESS)) array.Set(i, TAG_ADDRESS, prop[0].GetText());
else if(prop.IsTag(TAG_EMAIL)) array.Set(i, TAG_EMAIL, prop[0].GetText());
}
}
}
catch(XmlError &e) {
Exclamation("Error reading the input file:&" + DeQtf(e) );
}
}
void AddressBook::Save()
{
if(IsEmpty(filename)) {
SaveAs();
return;
}
String xml;
for(int i = 0; i < array.GetCount(); i++)
xml <<
XmlTag("person") (
XmlTag(TAG_NAME).Text(array.Get(i, 0)) +
XmlTag(TAG_SURNAME).Text(array.Get(i, 1)) +
XmlTag(TAG_ADDRESS).Text(array.Get(i, 2)) +
XmlTag(TAG_EMAIL).Text(array.Get(i, 3))
);
if(!SaveFile(filename, XmlDoc("AddressBook", xml)))
Exclamation("Error saving the file!");
}
void AddressBook::SaveAs()
{
if(!fs.ExecuteSaveAs()) return;
filename = fs;
Save();
}
void AddressBook::Print()
{
String qtf;
qtf = "{{1:1:1:1 Name:: Surname:: Address:: Email";
for(int i = 0; i < array.GetCount(); i++)
for(int q = 0; q < 4; q++)
qtf << ":: " << DeQtf((String)array.Get(i, q));
Report report;
report << qtf;
Perform(report);
}
void AddressBook::Quit()
{
Break();
}
void AddressBook::Serialize(Stream& s)
{
int version = 0;
s / version;
s % search.oname % search.osurname % search.oaddress % search.oemail;
s % fs;
SetupSearch();
}
GUI_APP_MAIN
{
AddressBook ab;
LoadFromFile(ab);
ab.Run();
StoreToFile(ab);
}

View file

@ -0,0 +1,30 @@
LAYOUT(AddressBookLayout, 516, 456)
ITEM(MenuBar, menu, LeftPosZ(0, 200).TopPosZ(0, 20))
ITEM(TabCtrl, tab, LeftPosZ(8, 500).TopPosZ(32, 84))
ITEM(ArrayCtrl, array, LeftPosZ(8, 500).TopPosZ(124, 324))
END_LAYOUT
LAYOUT(ModifyLayout, 480, 52)
ITEM(Label, dv___0, SetLabel(t_("&Name")).LeftPosZ(8, 48).TopPosZ(8, 15))
ITEM(EditField, name, LeftPosZ(8, 96).TopPosZ(28, 19))
ITEM(Label, dv___2, SetLabel(t_("&Surname")).LeftPosZ(108, 48).TopPosZ(8, 15))
ITEM(EditField, surname, LeftPosZ(108, 96).TopPosZ(28, 19))
ITEM(Label, dv___4, SetLabel(t_("&Address")).LeftPosZ(208, 48).TopPosZ(8, 15))
ITEM(EditField, address, LeftPosZ(208, 96).TopPosZ(28, 19))
ITEM(Label, dv___6, SetLabel(t_("&Email")).LeftPosZ(308, 48).TopPosZ(8, 15))
ITEM(EditField, email, LeftPosZ(308, 96).TopPosZ(28, 19))
ITEM(Button, add, SetLabel(t_("Ad&d")).LeftPosZ(416, 56).TopPosZ(4, 20))
ITEM(Button, change, SetLabel(t_("&Change")).LeftPosZ(416, 56).TopPosZ(28, 20))
END_LAYOUT
LAYOUT(SearchLayout, 480, 56)
ITEM(Option, oname, SetLabel(t_("&Name")).LeftPosZ(8, 56).TopPosZ(8, 18))
ITEM(EditField, name, LeftPosZ(8, 96).TopPosZ(28, 19))
ITEM(Option, osurname, SetLabel(t_("&Surname")).LeftPosZ(108, 64).TopPosZ(8, 18))
ITEM(EditField, surname, LeftPosZ(108, 96).TopPosZ(28, 19))
ITEM(Option, oaddress, SetLabel(t_("&Address")).LeftPosZ(208, 64).TopPosZ(8, 18))
ITEM(EditField, address, LeftPosZ(208, 96).TopPosZ(28, 19))
ITEM(Option, oemail, SetLabel(t_("&Email")).LeftPosZ(308, 52).TopPosZ(8, 18))
ITEM(EditField, email, LeftPosZ(308, 96).TopPosZ(28, 19))
ITEM(Button, search, SetLabel(t_("&Search")).LeftPosZ(416, 56).TopPosZ(28, 20))
END_LAYOUT

View file

@ -0,0 +1,10 @@
uses
CtrlLib,
Report;
file
AddressBook.cpp,
AddressBookXMLDOM.lay;
mainconfig
"" = "GUI";

65
uppdev/AggCtrl/AggCtrl.h Normal file
View file

@ -0,0 +1,65 @@
#ifndef _AggCtrl_AggCtrl_h_
#define _AggCtrl_AggCtrl_h_
/*
This package implements Ctrl which allows user to use Agg software rendering engine in Upp
Autor: Jan Dolinár <dolik.rce@seznam.cz>
Usage: Just define onDraw method in your source and put in there the drawing stuff
The Ctrl has pre-initialized rendering_buffer rbuf which is rendered in Paint(...) function
You also can connect it to higher level Agg classes, or even draw other buffer
with PaintAgg(...)
Bugs: Currently only X11 is supported
Doesn't work properly when used pixelformat has different bpp then system (on my system
only 32bit pixel formats work...)
*/
#include <CtrlLib/CtrlLib.h>
//#include <Core/Core.h>
#include <agg24/agg_rendering_buffer.h>
#include <agg24/agg_basics.h>
#include <agg24/agg_color_conv_rgb8.h>
#include "PixFmts.h"
#ifdef PLATFORM_X11
#include <X11/Xlib.h>
#elif defined(PLATFORM_WIN32)
#include <windows.h>
#include <string.h>
#include <agg24/agg_win32_bmp.h>
#include <agg24/agg_color_conv_rgb16.h>
#endif
class AggCtrl:public Upp::Ctrl{
public:
typedef AggCtrl CLASSNAME;
AggCtrl(agg::pix_format_e format=agg::pix_format_bgra32);
~AggCtrl();
virtual void Paint(Upp::Draw& draw);
virtual void onDraw(Upp::Draw& dest);
virtual void onInit();
virtual void onResize(int width,int height);
void PaintAgg(Upp::Draw& dest);
void PaintAgg(const agg::rendering_buffer* src,Upp::Draw& dest);
void Resized();
void SetPixFmt(agg::pix_format_e format);
agg::rendering_buffer rbuf;
bool flip_y;
private:
unsigned bpp,sysbpp;
agg::pix_format_e pixformat,sysformat;
int cx,cy;
#ifdef PLATFORM_X11
public:
unsigned char* buf;
private:
XImage* ximg;
int byte_order;
unsigned long r_mask,g_mask,b_mask;
#elif defined(PLATFORM_WIN32)
void CreatePmap(unsigned width,unsigned height,agg::rendering_buffer* wnd);
agg::pixel_map pmap;
#endif
};
#endif

View file

@ -0,0 +1,34 @@
optimize_speed;
uses
CtrlLib,
agg24;
library((LINUX | FREEBSD) & !NOGTK) "gtk-x11-2.0 gdk-x11-2.0 atk-1.0 gdk_pixbuf-2.0 m pangocairo-1.0 fontconfig Xext Xrender Xinerama Xi Xrandr Xcursor Xfixes pango-1.0 cairo X11 gobject-2.0 gmodule-2.0 glib-2.0";
library(WIN32 !MSC8ARM) "user32 gdi32";
library(LINUX) X11;
library(LINUX) dl;
library(LINUX !XLFD) Xft;
library(FREEBSD) X11;
library(FREEBSD !XLFD) "Xft fontconfig Xrender freetype expat";
library(LINUX !XLFD !SHARED) "fontconfig Xrender freetype expat";
library(OSX11) "X11 Xft fontconfig Xrender freetype expat";
file
PixFmts.h,
AggCtrl.h,
AggCtrlWin32.cpp,
Test.cpp,
AggCtrlX11.cpp;
mainconfig
"" = "GUI";

View file

@ -0,0 +1,205 @@
#include "AggCtrl.h"
#ifdef PLATFORM_WIN32
static void ConvertPmap(agg::rendering_buffer* dst,const agg::rendering_buffer* src,agg::pix_format_e format){
switch(format){
case agg::pix_format_gray8: break;
case agg::pix_format_gray16: agg::color_conv(dst, src, agg::color_conv_gray16_to_gray8()); break;
case agg::pix_format_rgb565: agg::color_conv(dst, src, agg::color_conv_rgb565_to_rgb555());break;
case agg::pix_format_rgbAAA: agg::color_conv(dst, src, agg::color_conv_rgbAAA_to_bgr24()); break;
case agg::pix_format_bgrAAA: agg::color_conv(dst, src, agg::color_conv_bgrAAA_to_bgr24()); break;
case agg::pix_format_rgbBBA: agg::color_conv(dst, src, agg::color_conv_rgbBBA_to_bgr24()); break;
case agg::pix_format_bgrABB: agg::color_conv(dst, src, agg::color_conv_bgrABB_to_bgr24()); break;
case agg::pix_format_rgb24: agg::color_conv(dst, src, agg::color_conv_rgb24_to_bgr24()); break;
case agg::pix_format_rgb48: agg::color_conv(dst, src, agg::color_conv_rgb48_to_bgr24()); break;
case agg::pix_format_bgr48: agg::color_conv(dst, src, agg::color_conv_bgr48_to_bgr24()); break;
case agg::pix_format_abgr32: agg::color_conv(dst, src, agg::color_conv_abgr32_to_bgra32());break;
case agg::pix_format_argb32: agg::color_conv(dst, src, agg::color_conv_argb32_to_bgra32());break;
case agg::pix_format_rgba32: agg::color_conv(dst, src, agg::color_conv_rgba32_to_bgra32());break;
case agg::pix_format_bgra64: agg::color_conv(dst, src, agg::color_conv_bgra64_to_bgra32());break;
case agg::pix_format_abgr64: agg::color_conv(dst, src, agg::color_conv_abgr64_to_bgra32());break;
case agg::pix_format_argb64: agg::color_conv(dst, src, agg::color_conv_argb64_to_bgra32());break;
case agg::pix_format_rgba64: agg::color_conv(dst, src, agg::color_conv_rgba64_to_bgra32());break;
}
};
AggCtrl::AggCtrl(agg::pix_format_e format):
pixformat(format), bpp(0),
sysformat(agg::pix_format_undefined),
flip_y(false),
cx(16),cy(16)
{
// Set bpp and sysbpp from pixel format
switch(pixformat)
{
case agg::pix_format_bw:
sysformat = agg::pix_format_bw;
bpp = 1;
sysbpp = 1;
break;
case agg::pix_format_gray8:
sysformat = agg::pix_format_gray8;
bpp = 8;
sysbpp = 8;
break;
case agg::pix_format_gray16:
sysformat = agg::pix_format_gray8;
bpp = 16;
sysbpp = 8;
break;
case agg::pix_format_rgb565:
case agg::pix_format_rgb555:
sysformat = agg::pix_format_rgb555;
bpp = 16;
sysbpp = 16;
break;
case agg::pix_format_rgbAAA:
case agg::pix_format_bgrAAA:
case agg::pix_format_rgbBBA:
case agg::pix_format_bgrABB:
sysformat = agg::pix_format_bgr24;
bpp = 32;
sysbpp = 24;
break;
case agg::pix_format_rgb24:
case agg::pix_format_bgr24:
sysformat = agg::pix_format_bgr24;
bpp = 24;
sysbpp = 24;
break;
case agg::pix_format_rgb48:
case agg::pix_format_bgr48:
sysformat = agg::pix_format_bgr24;
bpp = 48;
sysbpp = 24;
break;
case agg::pix_format_bgra32:
case agg::pix_format_abgr32:
case agg::pix_format_argb32:
case agg::pix_format_rgba32:
sysformat = agg::pix_format_bgra32;
bpp = 32;
sysbpp = 32;
break;
case agg::pix_format_bgra64:
case agg::pix_format_abgr64:
case agg::pix_format_argb64:
case agg::pix_format_rgba64:
sysformat = agg::pix_format_bgra32;
bpp = 64;
sysbpp = 32;
break;
}
CreatePmap(cx,cy,&rbuf);
// User initialization code
onInit();
};
void AggCtrl::CreatePmap(unsigned width,unsigned height,agg::rendering_buffer* rb){
// Create a pixmap and attach a buffer to it
pmap.create(width,height,agg::org_e(bpp));
rb->attach(pmap.buf(),pmap.width(),pmap.height(),flip_y ?pmap.stride():-pmap.stride());
};
void AggCtrl::PaintAgg(Upp::Draw& dest){PaintAgg(&rbuf,dest);};
void AggCtrl::PaintAgg(const agg::rendering_buffer* src,Upp::Draw& dest){
if(sysformat==pixformat){
// Pixmap is in the right format, put it on display
pmap.draw(dest.GetHandle());
}else{
// Pixmap must be converted to the right pixel format first
agg::pixel_map pmap_tmp;
pmap_tmp.create(pmap.width(),pmap.height(),agg::org_e(sysbpp));
agg::rendering_buffer rbuf_tmp;
rbuf_tmp.attach(pmap_tmp.buf(),pmap_tmp.width(),pmap_tmp.height(),flip_y?pmap_tmp.stride():-pmap_tmp.stride());
ConvertPmap(&rbuf_tmp, src, pixformat);
pmap_tmp.draw(dest.GetHandle());
}
};
void AggCtrl::Resized(){
// Update the dimensions and reinitialize the pixmap with new size
cx=GetSize().cx;cy=GetSize().cy;
CreatePmap(cx,cy,&rbuf);
// User resize code
onResize(cx,cy);
};
AggCtrl::~AggCtrl() {
pmap.destroy();
};
void AggCtrl::Paint(Upp::Draw& draw) {
// Check if the control was resized
if(cx!=GetSize().cx||cy!=GetSize().cy){Resized();}
// User Drawing code
onDraw(draw);
// Draw to screen
PaintAgg(draw);
};
void AggCtrl::SetPixFmt(agg::pix_format_e format){
pixformat=format;
switch(pixformat)
{
case agg::pix_format_bw:
sysformat = agg::pix_format_bw;
bpp = 1;
sysbpp = 1;
break;
case agg::pix_format_gray8:
sysformat = agg::pix_format_gray8;
bpp = 8;
sysbpp = 8;
break;
case agg::pix_format_gray16:
sysformat = agg::pix_format_gray8;
bpp = 16;
sysbpp = 8;
break;
case agg::pix_format_rgb565:
case agg::pix_format_rgb555:
sysformat = agg::pix_format_rgb555;
bpp = 16;
sysbpp = 16;
break;
case agg::pix_format_rgbAAA:
case agg::pix_format_bgrAAA:
case agg::pix_format_rgbBBA:
case agg::pix_format_bgrABB:
sysformat = agg::pix_format_bgr24;
bpp = 32;
sysbpp = 24;
break;
case agg::pix_format_rgb24:
case agg::pix_format_bgr24:
sysformat = agg::pix_format_bgr24;
bpp = 24;
sysbpp = 24;
break;
case agg::pix_format_rgb48:
case agg::pix_format_bgr48:
sysformat = agg::pix_format_bgr24;
bpp = 48;
sysbpp = 24;
break;
case agg::pix_format_bgra32:
case agg::pix_format_abgr32:
case agg::pix_format_argb32:
case agg::pix_format_rgba32:
sysformat = agg::pix_format_bgra32;
bpp = 32;
sysbpp = 32;
break;
case agg::pix_format_bgra64:
case agg::pix_format_abgr64:
case agg::pix_format_argb64:
case agg::pix_format_rgba64:
sysformat = agg::pix_format_bgra32;
bpp = 64;
sysbpp = 32;
break;
}
Resized();
};
void AggCtrl::onDraw(Upp::Draw& dest){};
void AggCtrl::onInit(){};
void AggCtrl::onResize(int width,int height){};
#endif

View file

@ -0,0 +1,258 @@
#include "AggCtrl.h"
#ifdef PLATFORM_X11
AggCtrl::AggCtrl(agg::pix_format_e format):
pixformat(format), bpp(0),
sysformat(agg::pix_format_undefined),
byte_order(LSBFirst),
flip_y(false),
cx(16),cy(16),
r_mask(Upp::Xvisual->red_mask), g_mask(Upp::Xvisual->green_mask), b_mask(Upp::Xvisual->blue_mask)
{
ASSERT_(!(Upp::Xdepth<15||r_mask==0||g_mask==0||b_mask==0),"AGG requires at least 15-bit color depth and True- or DirectColor class.");
// Determine bpp from pixel format
switch(pixformat){
default: break;
case agg::pix_format_gray8:
bpp = 8; break;
case agg::pix_format_rgb565:
case agg::pix_format_rgb555:
bpp = 16; break;
case agg::pix_format_rgb24:
case agg::pix_format_bgr24:
bpp = 24; break;
case agg::pix_format_bgra32:
case agg::pix_format_abgr32:
case agg::pix_format_argb32:
case agg::pix_format_rgba32:
bpp = 32; break;
}
// Pre-determine the byte order
int t = 1;
int hw_byte_order = LSBFirst;
if (*(char*)&t == 0) hw_byte_order = MSBFirst;
// Perceive system pixel format by mask
switch (Upp::Xdepth) {
case 15:
sysbpp=16;
if (r_mask == 0x7C00 && g_mask == 0x3E0 && b_mask == 0x1F) {
sysformat = agg::pix_format_rgb555;
byte_order = hw_byte_order;
}
break;
case 16:
sysbpp=16;
if (r_mask==0xF800&&g_mask==0x7E0&&b_mask==0x1F) {
sysformat = agg::pix_format_rgb565;
byte_order = hw_byte_order;
}
break;
case 24:
case 32:
sysbpp=32;
if (g_mask==0xFF00){
if (r_mask==0xFF&&b_mask==0xFF0000) {
switch(pixformat) {
case agg::pix_format_rgba32:
sysformat = agg::pix_format_rgba32;
byte_order = LSBFirst;
break;
case agg::pix_format_abgr32:
sysformat = agg::pix_format_abgr32;
byte_order = MSBFirst;
break;
default:
byte_order = hw_byte_order;
sysformat = (hw_byte_order==LSBFirst)?agg::pix_format_rgba32:agg::pix_format_abgr32;
break;
}
}
if (r_mask == 0xFF0000 && b_mask == 0xFF) {
switch (pixformat) {
case agg::pix_format_argb32:
sysformat = agg::pix_format_argb32;
byte_order = MSBFirst;
break;
case agg::pix_format_bgra32:
sysformat = agg::pix_format_bgra32;
byte_order = LSBFirst;
break;
default:
byte_order = hw_byte_order;
sysformat = (hw_byte_order == MSBFirst)?agg::pix_format_argb32:agg::pix_format_bgra32;
break;
}
}
}
break;
}
ASSERT_(sysformat!=agg::pix_format_undefined,"RGB masks are not compatible with AGG pixel formats");
// Allocate buffer
buf=new unsigned char[cx*cy*(bpp/8)];
// Connect rendering buffer
rbuf.attach(buf,cx,cy,(flip_y?-1:1)*cx*(bpp/8));
// Initialize XImage for sending the data to the X server
ximg=XCreateImage(Upp::Xdisplay,Upp::Xvisual,Upp::Xdepth,ZPixmap,0,(char*)buf,cx,cy,sysbpp,cx*(sysbpp/8));
ximg->byte_order = byte_order;
// User initialization
onInit();
};
void AggCtrl::PaintAgg(Upp::Draw& dest){PaintAgg(&rbuf,dest);};
void AggCtrl::PaintAgg(const agg::rendering_buffer* src,Upp::Draw& dest){
if(ximg==0) return;
ximg->data=(char*)(flip_y?(src->row_ptr(src->height())-1):src->row_ptr(0));
if(pixformat==sysformat){
XPutImage(Upp::Xdisplay,dest.GetDrawable(),dest.GetGC(),ximg,0,0,GetRect().left,GetRect().top,cx,cy);
XFlush(Upp::Xdisplay);
XSync(Upp::Xdisplay,false);
}else{
// Conversion to pixel format compatible with current system
int row_len = cx*sysbpp/8;
unsigned char* buf_tmp = new unsigned char[row_len*cy];
agg::rendering_buffer rbuf_tmp;
rbuf_tmp.attach(buf_tmp,cx,cy,flip_y?-row_len:row_len);
switch (sysformat){
default: break;
case agg::pix_format_rgb555:
switch (pixformat) {
default: break;
case agg::pix_format_rgb555:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb555_to_rgb555());break;
case agg::pix_format_rgb565:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb565_to_rgb555());break;
case agg::pix_format_rgb24:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb24_to_rgb555());break;
case agg::pix_format_bgr24:agg::color_conv(&rbuf_tmp, src, agg::color_conv_bgr24_to_rgb555());break;
case agg::pix_format_rgba32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgba32_to_rgb555());break;
case agg::pix_format_argb32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_argb32_to_rgb555());break;
case agg::pix_format_bgra32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_bgra32_to_rgb555());break;
case agg::pix_format_abgr32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_abgr32_to_rgb555());break;
}
break;
case agg::pix_format_rgb565:
switch (pixformat) {
default: break;
case agg::pix_format_rgb555:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb555_to_rgb565());break;
case agg::pix_format_rgb565:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb565_to_rgb565());break;
case agg::pix_format_rgb24:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb24_to_rgb565());break;
case agg::pix_format_bgr24:agg::color_conv(&rbuf_tmp, src, agg::color_conv_bgr24_to_rgb565());break;
case agg::pix_format_rgba32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgba32_to_rgb565());break;
case agg::pix_format_argb32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_argb32_to_rgb565());break;
case agg::pix_format_bgra32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_bgra32_to_rgb565());break;
case agg::pix_format_abgr32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_abgr32_to_rgb565());break;
}
break;
case agg::pix_format_rgba32:
switch (pixformat) {
default: break;
case agg::pix_format_rgb555:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb555_to_rgba32());break;
case agg::pix_format_rgb565:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb565_to_rgba32());break;
case agg::pix_format_rgb24:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb24_to_rgba32());break;
case agg::pix_format_bgr24:agg::color_conv(&rbuf_tmp, src, agg::color_conv_bgr24_to_rgba32());break;
case agg::pix_format_rgba32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgba32_to_rgba32());break;
case agg::pix_format_argb32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_argb32_to_rgba32());break;
case agg::pix_format_bgra32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_bgra32_to_rgba32());break;
case agg::pix_format_abgr32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_abgr32_to_rgba32());break;
}
break;
case agg::pix_format_abgr32:
switch (pixformat) {
default: break;
case agg::pix_format_rgb555:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb555_to_abgr32());break;
case agg::pix_format_rgb565:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb565_to_abgr32());break;
case agg::pix_format_rgb24:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb24_to_abgr32());break;
case agg::pix_format_bgr24:agg::color_conv(&rbuf_tmp, src, agg::color_conv_bgr24_to_abgr32());break;
case agg::pix_format_abgr32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_abgr32_to_abgr32());break;
case agg::pix_format_rgba32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgba32_to_abgr32());break;
case agg::pix_format_argb32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_argb32_to_abgr32());break;
case agg::pix_format_bgra32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_bgra32_to_abgr32());break;
}
break;
case agg::pix_format_argb32:
switch (pixformat) {
default: break;
case agg::pix_format_rgb555:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb555_to_argb32());break;
case agg::pix_format_rgb565:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb565_to_argb32());break;
case agg::pix_format_rgb24:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb24_to_argb32());break;
case agg::pix_format_bgr24:agg::color_conv(&rbuf_tmp, src, agg::color_conv_bgr24_to_argb32());break;
case agg::pix_format_rgba32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgba32_to_argb32());break;
case agg::pix_format_argb32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_argb32_to_argb32());break;
case agg::pix_format_abgr32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_abgr32_to_argb32());break;
case agg::pix_format_bgra32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_bgra32_to_argb32());break;
}
break;
case agg::pix_format_bgra32:
switch (pixformat) {
default: break;
case agg::pix_format_rgb555:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb555_to_bgra32());break;
case agg::pix_format_rgb565:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb565_to_bgra32());break;
case agg::pix_format_rgb24:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgb24_to_bgra32());break;
case agg::pix_format_bgr24:agg::color_conv(&rbuf_tmp, src, agg::color_conv_bgr24_to_bgra32());break;
case agg::pix_format_rgba32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_rgba32_to_bgra32());break;
case agg::pix_format_argb32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_argb32_to_bgra32());break;
case agg::pix_format_abgr32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_abgr32_to_bgra32());break;
case agg::pix_format_bgra32:agg::color_conv(&rbuf_tmp, src, agg::color_conv_bgra32_to_bgra32());break;
}
break;
}
ximg->data=(char*)buf_tmp;
XPutImage(Upp::Xdisplay,dest.GetDrawable(),dest.GetGC(),ximg,0,0,GetRect().left,GetRect().top,cx,cy);
XFlush(Upp::Xdisplay);
XSync(Upp::Xdisplay,false);
delete [] buf_tmp;
}
};
void AggCtrl::Resized(){
// Update the dimensions, reallocate the buffer with new size, get a bigger XImage
cx=GetSize().cx;cy=GetSize().cy;
delete [] buf;
ximg->data = 0;
XDestroyImage(ximg);
buf=new unsigned char[cx*cy*(bpp/8)];
rbuf.attach(buf,cx,cy,(flip_y?-1:1)*cx*(bpp/8));
ximg=XCreateImage(Upp::Xdisplay,Upp::Xvisual,Upp::Xdepth,ZPixmap,0,(char*)buf,cx,cy,sysbpp,cx*(sysbpp/8));
ximg->byte_order=byte_order;
// User resize code
onResize(cx,cy);
};
AggCtrl::~AggCtrl() {
delete [] buf;
ximg->data = 0;
XDestroyImage(ximg);
};
void AggCtrl::Paint(Upp::Draw& draw) {
// Check if the control was resized
if(cx!=GetSize().cx||cy!=GetSize().cy){Resized();}
// User Drawing code
onDraw(draw);
// Draw to screen
PaintAgg(draw);
};
void AggCtrl::SetPixFmt(agg::pix_format_e format){
pixformat=format;
switch(format){
default: break;
case agg::pix_format_gray8:
bpp = 8; break;
case agg::pix_format_rgb565:
case agg::pix_format_rgb555:
bpp = 16; break;
case agg::pix_format_rgb24:
case agg::pix_format_bgr24:
bpp = 24; break;
case agg::pix_format_bgra32:
case agg::pix_format_abgr32:
case agg::pix_format_argb32:
case agg::pix_format_rgba32:
bpp = 32; break;
}
Resized();
};
void AggCtrl::onDraw(Upp::Draw& dest){};
void AggCtrl::onInit(){};
void AggCtrl::onResize(int width,int height){};
#endif

37
uppdev/AggCtrl/PixFmts.h Normal file
View file

@ -0,0 +1,37 @@
#ifndef _AggCtrl_PixFmts_h_
#define _AggCtrl_PixFmts_h_
// Using a particular pixel format doesn't obligatory mean the necessity
// of software conversion. For example, win32 API can natively display
// gray8, 15-bit RGB, 24-bit BGR, and 32-bit BGRA formats.
// This list can be (and will be!) extended in future.
namespace agg{
enum pix_format_e{
pix_format_undefined = 0, // By default. No conversions are applied
pix_format_bw, // 1 bit per color B/W
pix_format_gray8, // Simple 256 level grayscale
pix_format_gray16, // Simple 65535 level grayscale
pix_format_rgb555, // 15 bit rgb. Depends on the byte ordering!
pix_format_rgb565, // 16 bit rgb. Depends on the byte ordering!
pix_format_rgbAAA, // 30 bit rgb. Depends on the byte ordering!
pix_format_rgbBBA, // 32 bit rgb. Depends on the byte ordering!
pix_format_bgrAAA, // 30 bit bgr. Depends on the byte ordering!
pix_format_bgrABB, // 32 bit bgr. Depends on the byte ordering!
pix_format_rgb24, // R-G-B, one byte per color component
pix_format_bgr24, // B-G-R, native win32 BMP format.
pix_format_rgba32, // R-G-B-A, one byte per color component
pix_format_argb32, // A-R-G-B, native MAC format
pix_format_abgr32, // A-B-G-R, one byte per color component
pix_format_bgra32, // B-G-R-A, native win32 BMP format
pix_format_rgb48, // R-G-B, 16 bits per color component
pix_format_bgr48, // B-G-R, native win32 BMP format.
pix_format_rgba64, // R-G-B-A, 16 bits byte per color component
pix_format_argb64, // A-R-G-B, native MAC format
pix_format_abgr64, // A-B-G-R, one byte per color component
pix_format_bgra64, // B-G-R-A, native win32 BMP format
end_of_pix_formats
};
};
#endif

150
uppdev/AggCtrl/Test.cpp Normal file
View file

@ -0,0 +1,150 @@
#include "CtrlLib.h"
NAMESPACE_UPP
DropChoice::DropChoice() {
always_drop = false;
AddButton().Main() <<= THISBACK(Drop);
NoDisplay();
list.Normal();
list.WhenSelect = callback(this, &DropChoice::Select);
dropfocus = true;
EnableDrop(false);
dropwidth = 0;
}
void DropChoice::EnableDrop(bool b)
{
MainButton().Enable(b);
}
void DropChoice::PseudoPush()
{
MultiButton::PseudoPush(0);
}
void DropChoice::Drop() {
if(!owner || owner->IsReadOnly() || list.GetCount() == 0 && !WhenDrop) return;
WhenDrop();
if(dropfocus)
owner->SetWantFocus();
if(!list.FindSetCursor(owner->GetData()) && list.GetCount() > 0)
list.SetCursor(0);
list.PopUp(owner,dropwidth);
}
void DropChoice::Select() {
if(!owner || owner->IsReadOnly()) return;
WhenSelect();
}
Value DropChoice::Get() const {
if(!owner || owner->IsReadOnly()) return Value();
int c = list.GetCursor();
if(c < 0) return Value();
return list.Get(c, 0);
}
int DropChoice::GetIndex() const
{
if(!owner || owner->IsReadOnly()) return -1;
return list.GetCursor();
}
bool DropChoice::DataSelect(Ctrl& owner, DropChoice& drop, const String& appends) {
Value g = drop.Get();
if(g.IsVoid()) return false;
Value s = owner.GetData();
if(!appends.IsVoid()) {
String txt = s;
if(!txt.IsEmpty()) txt.Cat(appends);
txt.Cat((String)g);
s = txt;
}
else
s = g;
owner.SetData(s);
owner.WhenAction();
return true;
}
bool DropChoice::DoKey(dword key) {
if(owner && !owner->IsReadOnly() && list.GetCount()) {
int q = list.GetCursor();
switch(key) {
case K_ALT_DOWN:
PseudoPush();
return true;
case K_DOWN:
if(appending)
PseudoPush();
else {
list.SetCursor(q <= 0 ? list.GetCount() - 1 : q - 1);
Select();
}
return true;
case K_UP:
if(appending)
PseudoPush();
else {
list.SetCursor(q < 0 || q >= list.GetCount() - 1 ? 0 : q + 1);
Select();
}
return true;
}
}
return false;
}
void DropChoice::Add(const Value& s) {
list.Add(s);
EnableDrop(true);
}
void DropChoice::Clear() {
list.Clear();
EnableDrop(always_drop);
}
void DropChoice::Serialize(Stream& s) {
int version = 0x00;
int n = list.GetCount();
s / version / n;
Value v;
if(s.IsLoading()) {
Clear();
for(int i = 0; i < n; i++) {
s % v;
Add(v);
}
}
else
for(int i = 0; i < n; i++) {
v = list.Get(i, 0);
s % v;
}
EnableDrop(list.GetCount() || always_drop);
}
void DropChoice::AddHistory(const Value& v, int max) {
if(IsNull(v)) return;
for(int i = 0; i < list.GetCount(); i++)
if(list.Get(i, 0) == v) {
list.Remove(i);
break;
}
list.Insert(0, Vector<Value>() << v);
if(list.GetCount() > max)
list.SetCount(max);
EnableDrop(list.GetCount() || always_drop);
list.KillCursor();
}
DropChoice& DropChoice::AlwaysDrop(bool e)
{
always_drop = e;
EnableDrop(list.GetCount() || always_drop);
return *this;
}
END_UPP_NAMESPACE

5
uppdev/AggCtrl/init Normal file
View file

@ -0,0 +1,5 @@
#ifndef _AggCtrl_icpp_init_stub
#define _AggCtrl_icpp_init_stub
#include "CtrlLib/init"
#include "agg24/init"
#endif

18
uppdev/Alloc/Alloc.cpp Normal file
View file

@ -0,0 +1,18 @@
#include <Core/Core.h>
using namespace UPP;
#define ITEM_COUNT 1000000
CONSOLE_APP_MAIN {
Vector<Value> v;
getchar();
for(int i=0;i<ITEM_COUNT;i++) v.Add((int)i);
getchar();
v.Clear(); v.Shrink();
getchar();
for(int i=0;i<ITEM_COUNT;i++) v.Add((int)i);
getchar();
v.Clear(); v.Shrink();
getchar();
}

10
uppdev/Alloc/Alloc.upp Normal file
View file

@ -0,0 +1,10 @@
uses
Core;
file
Alloc.cpp;
mainconfig
"" = "",
"" = "USEMALLOC";

4
uppdev/Alloc/init Normal file
View file

@ -0,0 +1,4 @@
#ifndef _Alloc_icpp_init_stub
#define _Alloc_icpp_init_stub
#include "Core/init"
#endif

View file

@ -0,0 +1,9 @@
uses
CtrlLib;
file
main.cpp;
mainconfig
"" = "GUI";

38
uppdev/AlphaDraw/main.cpp Normal file
View file

@ -0,0 +1,38 @@
#include <CtrlLib/CtrlLib.h>
using namespace Upp;
class ImageDrawTest : public TopWindow {
public:
typedef ImageDrawTest CLASSNAME;
Image img;
ImageDrawTest() {
Sizeable();
GenerateImage();
}
void GenerateImage() {
Size sz(100, 100);
ImageDraw w(sz);
// w.Alpha().DrawRect(sz, Black());
// w.Alpha().DrawRect(30, 30, 40, 40, White());
w.DrawRect(sz, Red);
img = w;
}
virtual void Paint(Draw &w) {
w.DrawRect(GetSize(), SColorFace());
w.DrawImage(0, 0, img);
}
virtual void LeftUp(Point p, dword keyflags) {
GenerateImage();
Refresh();
}
};
GUI_APP_MAIN
{
ImageDrawTest().Run();
}

View file

@ -0,0 +1,10 @@
uses
CtrlLib,
plugin\zim;
file
main.cpp;
mainconfig
"" = "GUI";

5
uppdev/AlphaImage/init Normal file
View file

@ -0,0 +1,5 @@
#ifndef _AlphaImage_icpp_init_stub
#define _AlphaImage_icpp_init_stub
#include "CtrlLib/init"
#include "plugin\zim/init"
#endif

View file

@ -0,0 +1,49 @@
#include <CtrlLib/CtrlLib.h>
using namespace Upp;
struct App : public TopWindow {
virtual void Paint(Draw& w) {
ImageDraw iw(400, 400);
iw.Alpha().DrawRect(0, 0, 400, 400, Black());
iw.Alpha().DrawEllipse(0, 0, 200, 200, GrayColor(100));
iw.DrawRect(0, 0, 400, 400, Black);
iw.DrawEllipse(0, 0, 200, 200, LtCyan);
Image a = Rescale(iw, 200, 200);
w.DrawRect(GetSize(), White);
w.DrawImage(30, 30, a, Rect(10, 10, 50, 50));
w.DrawImage(500, 30, a, Blue);
ImageBuffer ib(50, 50);
for(int y = 0; y < 50; y++) {
RGBA *l = ib[y];
for(int x = 0; x < 50; x++) {
if(y == 0 || y == 49 || x == 0 || x == 49)
*l++ = Black();
else {
l->a = 2 * (x + y);
l->r = 4 * x;
l->g = 4 * y;
l->b = 200;
l++;
}
}
}
Premultiply(ib);
Image b = ib;
Over(a, Point(70, 70), b, b.GetSize());
w.DrawImage(20, 500, a);
}
};
GUI_APP_MAIN
{
App().Run();
}

17
uppdev/Any/Any.cpp Normal file
View file

@ -0,0 +1,17 @@
#include <Core/Core.h>
using namespace Upp;
#define TEST
CONSOLE_APP_MAIN
{
Any alpha;
alpha.Create<int>();
if(alpha.Is<int>())
RLOG("int");
Any beta = alpha;
}

16
uppdev/Any/Any.upp Normal file
View file

@ -0,0 +1,16 @@
description "\377128,128,0";
optimize_speed;
uses
Core;
file
Any.cpp,
app.tpp\test$cs-cz.tppi,
app.tpp\test$en-us.tppi,
app.tpp;
mainconfig
"" = "MT";

View file

@ -0,0 +1,3 @@
topic "asdfasdfasdfasdf";[ $$0,0#00000000000000000000000000000000:Default]
[{_}
[s0; Juest a testaJuest a test]

View file

@ -0,0 +1,3 @@
topic "asdfasdfasdf123";[ $$0,0#00000000000000000000000000000000:Default]
[{_}
[s0; Hell1]

4
uppdev/Any/init Normal file
View file

@ -0,0 +1,4 @@
#ifndef _Any_icpp_init_stub
#define _Any_icpp_init_stub
#include "Core/init"
#endif

View file

@ -0,0 +1,160 @@
#include "AnyImageDraw.h"
dword ImageAnyDraw::GetInfo() const
{
return draw->GetInfo();
}
Size ImageAnyDraw::GetPageSize() const
{
return draw->GetPageSize();
}
void ImageAnyDraw::BeginOp()
{
return draw->BeginOp();
}
void ImageAnyDraw::EndOp()
{
return draw->EndOp();
}
void ImageAnyDraw::OffsetOp(Point p)
{
return draw->OffsetOp(p);
}
bool ImageAnyDraw::ClipOp(const Rect& r)
{
return draw->ClipOp(r);
}
bool ImageAnyDraw::ClipoffOp(const Rect& r)
{
return draw->ClipoffOp(r);
}
bool ImageAnyDraw::ExcludeClipOp(const Rect& r)
{
return draw->ExcludeClipOp(r);
}
bool ImageAnyDraw::IntersectClipOp(const Rect& r)
{
return draw->IntersectClipOp(r);
}
bool ImageAnyDraw::IsPaintingOp(const Rect& r) const
{
return draw->IsPaintingOp(r);
}
Rect ImageAnyDraw::GetPaintRect() const
{
return draw->GetPaintRect();
}
void ImageAnyDraw::DrawRectOp(int x, int y, int cx, int cy, Color color)
{
draw->DrawRectOp(x, y, cx, cy, color);
}
void ImageAnyDraw::DrawImageOp(int x, int y, int cx, int cy, const Image& img, const Rect& src, Color color)
{
draw->DrawImageOp(x, y, cx, cy, img, src, color);
}
void ImageAnyDraw::DrawDataOp(int x, int y, int cx, int cy, const String& data, const char *id)
{
draw->DrawDataOp(x, y, cx, cy, data, id);
}
void ImageAnyDraw::DrawLineOp(int x1, int y1, int x2, int y2, int width, Color color)
{
draw->DrawLineOp(x1, y1, x2, y2, width, color);
}
void ImageAnyDraw::DrawPolyPolylineOp(const Point *vertices, int vertex_count,
const int *counts, int count_count, int width,
Color color, Color doxor)
{
draw->DrawPolyPolylineOp(vertices, vertex_count, counts, count_count, width, color, doxor);
}
void ImageAnyDraw::DrawPolyPolyPolygonOp(const Point *vertices, int vertex_count, const int *subpolygon_counts, int scc, const int *disjunct_polygon_counts, int dpcc, Color color, int width, Color outline, uint64 pattern, Color doxor)
{
draw->DrawPolyPolyPolygonOp(vertices, vertex_count, subpolygon_counts, scc,
disjunct_polygon_counts, dpcc, color, width, outline,
pattern, doxor);
}
void ImageAnyDraw::DrawArcOp(const Rect& rc, Point start, Point end, int width, Color color)
{
draw->DrawArcOp(rc, start, end, width, color);
}
void ImageAnyDraw::DrawEllipseOp(const Rect& r, Color color, int pen, Color pencolor)
{
draw->DrawEllipseOp(r, color, pen, pencolor);
}
void ImageAnyDraw::DrawTextOp(int x, int y, int angle, const wchar *text, Font font, Color ink,
int n, const int *dx)
{
draw->DrawTextOp(x, y, angle, text, font, ink, n, dx);
}
void ImageAnyDraw::DrawDrawingOp(const Rect& target, const Drawing& w)
{
draw->DrawDrawingOp(target, w);
}
void ImageAnyDraw::DrawPaintingOp(const Rect& target, const Painting& w)
{
draw->DrawPaintingOp(target, w);
}
Draw *(*sCreateImageDraw)(Size sz);
Image (*sExtractImageDraw)(Draw *w);
void ImageAnyDrawPainter(Draw *(*f)(Size sz), Image (*e)(Draw *w))
{
sCreateImageDraw = f;
sExtractImageDraw = e;
}
void ImageAnyDrawSystem(Draw *(*f)(Size sz), Image (*e)(Draw *w))
{
if(!sCreateImageDraw) {
sCreateImageDraw = f;
sExtractImageDraw = e;
}
}
void ImageAnyDraw::Init(Size sz)
{
ASSERT(sCreateImageDraw);
draw = (*sCreateImageDraw)(sz);
ASSERT(draw);
}
ImageAnyDraw::operator Image() const
{
return (*sExtractImageDraw)(draw);
}
ImageAnyDraw::ImageAnyDraw(Size sz)
{
Init(sz);
}
ImageAnyDraw::ImageAnyDraw(int cx, int cy)
{
Init(Size(cx, cy));
}
ImageAnyDraw::~ImageAnyDraw()
{
delete draw;
}

View file

@ -0,0 +1,67 @@
#ifndef _AnyImageDraw_AnyImageDraw_h
#define _AnyImageDraw_AnyImageDraw_h
#include <CtrlLib/CtrlLib.h>
#include <Painter/Painter.h>
using namespace Upp;
#define LAYOUTFILE <AnyImageDraw/AnyImageDraw.lay>
#include <CtrlCore/lay.h>
class ImageAnyDraw : public Draw {
Draw *draw;
void Init(Size sz);
public:
virtual dword GetInfo() const;
virtual Size GetPageSize() const;
virtual void BeginOp();
virtual void EndOp();
virtual void OffsetOp(Point p);
virtual bool ClipOp(const Rect& r);
virtual bool ClipoffOp(const Rect& r);
virtual bool ExcludeClipOp(const Rect& r);
virtual bool IntersectClipOp(const Rect& r);
virtual bool IsPaintingOp(const Rect& r) const;
virtual Rect GetPaintRect() const;
virtual void DrawRectOp(int x, int y, int cx, int cy, Color color);
virtual void DrawImageOp(int x, int y, int cx, int cy, const Image& img, const Rect& src, Color color);
virtual void DrawDataOp(int x, int y, int cx, int cy, const String& data, const char *id);
virtual void DrawLineOp(int x1, int y1, int x2, int y2, int width, Color color);
virtual void DrawPolyPolylineOp(const Point *vertices, int vertex_count,
const int *counts, int count_count,
int width, Color color, Color doxor);
virtual void DrawPolyPolyPolygonOp(const Point *vertices, int vertex_count,
const int *subpolygon_counts, int scc,
const int *disjunct_polygon_counts, int dpcc,
Color color, int width, Color outline,
uint64 pattern, Color doxor);
virtual void DrawArcOp(const Rect& rc, Point start, Point end, int width, Color color);
virtual void DrawEllipseOp(const Rect& r, Color color, int pen, Color pencolor);
virtual void DrawTextOp(int x, int y, int angle, const wchar *text, Font font,
Color ink, int n, const int *dx);
virtual void DrawDrawingOp(const Rect& target, const Drawing& w);
virtual void DrawPaintingOp(const Rect& target, const Painting& w);
public:
operator Image() const;
ImageAnyDraw(Size sz);
ImageAnyDraw(int cx, int cy);
~ImageAnyDraw();
};
class AnyImageDraw : public TopWindow {
virtual void Paint(Draw& w);
public:
typedef AnyImageDraw CLASSNAME;
AnyImageDraw();
};
#endif

View file

@ -0,0 +1,3 @@
LAYOUT(AnyImageDrawLayout, 200, 100)
END_LAYOUT

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