diff --git a/code/PainterEngine/Architecture/PainterEngine_Console.c b/code/PainterEngine/Architecture/PainterEngine_Console.c new file mode 100644 index 0000000000000000000000000000000000000000..1b6dd9abd34e7cf81a65fce40f4a1298fcecfd0b --- /dev/null +++ b/code/PainterEngine/Architecture/PainterEngine_Console.c @@ -0,0 +1,853 @@ +#include "PainterEngine_Console.h" + +static char const fox_console_logo[]={0x54,0x52,0x41,0x57,0x40,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x1c,0x0,0xf2,0x0,0x8b,0x0,0xf2,0x0,0x9e,0x0,0xf2,0x0,0xae,0x0,0xf2,0x0,0x40,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x4,0x0,0xff,0x0,0x68,0x0,0xff,0x0,0x7a,0x0,0xff,0x0,0x30,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x47,0x0,0xff,0x0,0xcf,0x0,0xff,0x0,0x6f,0x0,0xff,0x0,0x2b,0x0,0xff,0x0,0x7a,0x0,0xff,0x0,0xbc,0x0,0xff,0x0,0x27,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x69,0x0,0xff,0x0,0xa7,0x0,0xff,0x0,0x4f,0x0,0xff,0x0,0x9b,0x0,0xff,0x0,0x9a,0x0,0xff,0x0,0x3b,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x54,0x0,0xff,0x0,0xd6,0x0,0xff,0x0,0x29,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x76,0x0,0xff,0x0,0xa3,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x1e,0x0,0xff,0x0,0xb7,0x0,0xff,0x0,0x22,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x37,0x0,0xff,0x0,0xaa,0x0,0xff,0x0,0x87,0x0,0xff,0x0,0x2c,0x0,0xff,0x0,0x9c,0x0,0xff,0x0,0x2b,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xb0,0x0,0xff,0x0,0x34,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x79,0x0,0xff,0x0,0x5f,0x0,0xff,0x0,0x3e,0x0,0xff,0x0,0xbd,0x0,0xff,0x0,0x82,0x0,0xff,0x0,0x2a,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x57,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x6b,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x7a,0x0,0xff,0x0,0x8a,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x24,0x0,0xff,0x0,0x77,0x0,0xff,0x0,0x4b,0x0,0xff,0x0,0xd8,0x0,0xff,0x0,0x45,0x0,0xff,0x0,0x4e,0x0,0xff,0x0,0xa0,0x0,0xff,0x0,0x93,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x18,0x0,0xff,0x0,0xdb,0x0,0xff,0x0,0x72,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x29,0x0,0xff,0x0,0xa1,0x0,0xff,0x0,0x1,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x8c,0x0,0xff,0x0,0x55,0x0,0xff,0x0,0x7b,0x0,0xff,0x0,0x59,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x55,0x0,0xff,0x0,0xb5,0x0,0xff,0x0,0x11,0x0,0xff,0x0,0x6,0x0,0xff,0x0,0xed,0x0,0xff,0x0,0x83,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa3,0x0,0xff,0x0,0x31,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x16,0x0,0xff,0x0,0x9b,0x0,0xff,0x0,0x31,0x0,0xff,0x0,0x9a,0x0,0xff,0x0,0xd,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x39,0x0,0xff,0x0,0xb1,0x0,0xff,0x0,0x4,0x0,0xff,0x0,0x6,0x0,0xff,0x0,0xb1,0x0,0xff,0x0,0x8f,0x0,0xff,0x0,0x84,0x0,0xff,0x0,0x95,0x0,0xff,0x0,0x83,0x0,0xff,0x0,0x14,0x0,0xff,0x0,0x81,0x0,0xff,0x0,0x51,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x5f,0x0,0xff,0x0,0x8e,0x0,0xff,0x0,0x2e,0x0,0xff,0x0,0x99,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x7f,0x0,0xff,0x0,0xad,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x8,0x0,0xff,0x0,0x21,0x0,0xff,0x0,0x27,0x0,0xff,0x0,0x50,0x0,0xff,0x0,0x83,0x0,0xff,0x0,0xc0,0x0,0xff,0x0,0xfe,0x0,0xff,0x0,0x44,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x8c,0x0,0xff,0x0,0x72,0x0,0xff,0x0,0x45,0x0,0xff,0x0,0x9a,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x10,0x0,0xff,0x0,0x51,0x0,0xff,0x0,0x3,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x7,0x0,0xff,0x0,0x9c,0x0,0xff,0x0,0xd9,0x0,0xff,0x0,0x1b,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x8d,0x0,0xff,0x0,0x59,0x0,0xff,0x0,0x56,0x0,0xff,0x0,0x93,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x86,0x0,0xff,0x0,0xd1,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xf,0x0,0xff,0x0,0x17,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x83,0x0,0xff,0x0,0x5b,0x0,0xff,0x0,0x3f,0x0,0xff,0x0,0x9c,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa7,0x0,0xff,0x0,0x91,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x2d,0x0,0xff,0x0,0x5a,0x0,0xff,0x0,0x7f,0x0,0xff,0x0,0x7e,0x0,0xff,0x0,0xe7,0x0,0xff,0x0,0x83,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x81,0x0,0xff,0x0,0x7c,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xbb,0x0,0xff,0x0,0xf,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x12,0x0,0xff,0x0,0xc4,0x0,0xff,0x0,0x29,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xd,0x0,0xff,0x0,0x6f,0x0,0xff,0x0,0xb2,0x0,0xff,0x0,0xc5,0x0,0xff,0x0,0xb8,0x0,0xff,0x0,0xa2,0x0,0xff,0x0,0x7b,0x0,0xff,0x0,0x50,0x0,0xff,0x0,0xc4,0x0,0xff,0x0,0x2d,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x9b,0x0,0xff,0x0,0xd0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x99,0x0,0xff,0x0,0xaa,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x8a,0x0,0xff,0x0,0x9d,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x2f,0x0,0xff,0x0,0xb1,0x0,0xff,0x0,0xd5,0x0,0xff,0x0,0xc0,0x0,0xff,0x0,0x8c,0x0,0xff,0x0,0x3a,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x67,0x0,0xff,0x0,0xa2,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x18,0x0,0xff,0x0,0x86,0x0,0xff,0x0,0xb8,0x0,0xff,0x0,0x2a,0x0,0xff,0x0,0x8,0x0,0xff,0x0,0x39,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x24,0x0,0xff,0x0,0xb0,0x0,0xff,0x0,0xc,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x96,0x0,0xff,0x0,0xe5,0x0,0xff,0x0,0x99,0x0,0xff,0x0,0x23,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xb1,0x0,0xff,0x0,0x71,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x77,0x0,0xff,0x0,0x60,0x0,0xff,0x0,0x1a,0x0,0xff,0x0,0x36,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x35,0x0,0xff,0x0,0x24,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x9a,0x0,0xff,0x0,0x5b,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x20,0x0,0xff,0x0,0xe4,0x0,0xff,0x0,0xb3,0x0,0xff,0x0,0x6,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xe,0x0,0xff,0x0,0xd2,0x0,0xff,0x0,0x32,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x88,0x0,0xff,0x0,0x26,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x38,0x0,0xff,0x0,0x64,0x0,0xff,0x0,0xaf,0x0,0xff,0x0,0x65,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x6e,0x0,0xff,0x0,0x8d,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x37,0x0,0xff,0x0,0xed,0x0,0xff,0x0,0x6a,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x4c,0x0,0xff,0x0,0xe5,0x0,0xff,0x0,0x5,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x3c,0x0,0xff,0x0,0x94,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa5,0x0,0xff,0x0,0xd5,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xb9,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x2a,0x0,0xff,0x0,0xa7,0x0,0xff,0x0,0x2,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x30,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xb6,0x0,0xff,0x0,0x4b,0x0,0xff,0x0,0xc5,0x0,0xff,0x0,0x56,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x5e,0x0,0xff,0x0,0xe0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x77,0x0,0xff,0x0,0x8a,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x55,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x5d,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa5,0x0,0xff,0x0,0x5d,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x2a,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xcf,0x0,0xff,0x0,0x52,0x0,0xff,0x0,0x2e,0x0,0xff,0x0,0x5c,0x0,0xff,0x0,0xa2,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x34,0x0,0xff,0x0,0xdc,0x0,0xff,0x0,0x13,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x8c,0x0,0xff,0x0,0x68,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x25,0x0,0xff,0x0,0x33,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x48,0x0,0xff,0x0,0xcf,0x0,0xff,0x0,0x11,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x14,0x0,0xff,0x0,0xe2,0x0,0xff,0x0,0x7a,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xae,0x0,0xff,0x0,0x2e,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x87,0x0,0xff,0x0,0x98,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x9,0x0,0xff,0x0,0xe2,0x0,0xff,0x0,0x43,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x84,0x0,0xff,0x0,0x4b,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x61,0x0,0xff,0x0,0xc7,0x0,0xff,0x0,0x67,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xc4,0x0,0xff,0x0,0x86,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x78,0x0,0xff,0x0,0xab,0x0,0xff,0x0,0x89,0x0,0xff,0x0,0x83,0x0,0xff,0x0,0xce,0x0,0xff,0x0,0x94,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xc1,0x0,0xff,0x0,0x94,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x74,0x0,0xff,0x0,0x42,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x5d,0x0,0xff,0x0,0x9d,0x0,0xff,0x0,0xa2,0x0,0xff,0x0,0x2c,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x89,0x0,0xff,0x0,0xbe,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x16,0x0,0xff,0x0,0xed,0x0,0xff,0x0,0x6a,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x4,0x0,0xff,0x0,0xe4,0x0,0xff,0x0,0x57,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x27,0x0,0xff,0x0,0xf2,0x0,0xff,0x0,0xd2,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x75,0x0,0xff,0x0,0x4d,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x63,0x0,0xff,0x0,0x2c,0x0,0xff,0x0,0xa1,0x0,0xff,0x0,0x5f,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x29,0x0,0xff,0x0,0xd2,0x0,0xff,0x0,0x1d,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xd,0x0,0xff,0x0,0x4,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x58,0x0,0xff,0x0,0xc2,0x0,0xff,0x0,0x2c,0x0,0xff,0x0,0xee,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x30,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x7d,0x0,0xff,0x0,0x63,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa8,0x0,0xff,0x0,0xb0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xac,0x0,0xff,0x0,0x7f,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x87,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x66,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xf8,0x0,0xff,0x0,0xb2,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x63,0x0,0xff,0x0,0x80,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa0,0x0,0xff,0x0,0x69,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x46,0x0,0xff,0x0,0xba,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x10,0x0,0xff,0x0,0x5f,0x0,0xff,0x0,0xd,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xd,0x0,0xff,0x0,0xd4,0x0,0xff,0x0,0x47,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x23,0x0,0xff,0x0,0x9c,0x0,0xff,0x0,0x5,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x6c,0x0,0xff,0x0,0xc5,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa4,0x0,0xff,0x0,0x70,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x82,0x0,0xff,0x0,0xc7,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xaf,0x0,0xff,0x0,0x54,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x20,0x0,0xff,0x0,0x3b,0x0,0xff,0x0,0x1d,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x23,0x0,0xff,0x0,0xde,0x0,0xff,0x0,0x34,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x35,0x0,0xff,0x0,0xaf,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xe,0x0,0xff,0x0,0xd7,0x0,0xff,0x0,0x36,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x90,0x0,0xff,0x0,0x92,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x2f,0x0,0xff,0x0,0x70,0x0,0xff,0x0,0x2a,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x3,0x0,0xff,0x0,0xcd,0x0,0xff,0x0,0x67,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x96,0x0,0xff,0x0,0x84,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa6,0x0,0xff,0x0,0x88,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x5d,0x0,0xff,0x0,0xae,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xbb,0x0,0xff,0x0,0x82,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xf,0x0,0xff,0x0,0xb9,0x0,0xff,0x0,0x23,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x61,0x0,0xff,0x0,0xae,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x44,0x0,0xff,0x0,0xbf,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x23,0x0,0xff,0x0,0x39,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xb2,0x0,0xff,0x0,0x90,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x67,0x0,0xff,0x0,0xa6,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x27,0x0,0xff,0x0,0xc6,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x40,0x0,0xff,0x0,0xbc,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x94,0x0,0xff,0x0,0xb7,0x0,0xff,0x0,0x66,0x0,0xff,0x0,0x40,0x0,0xff,0x0,0x26,0x0,0xff,0x0,0x18,0x0,0xff,0x0,0x12,0x0,0xff,0x0,0x2b,0x0,0xff,0x0,0x49,0x0,0xff,0x0,0x9f,0x0,0xff,0x0,0x76,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x9e,0x0,0xff,0x0,0x60,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x8,0x0,0xff,0x0,0xde,0x0,0xff,0x0,0x1e,0x0,0xff,0x0,0x53,0x0,0xff,0x0,0xa3,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x7e,0x0,0xff,0x0,0xa2,0x0,0xff,0x0,0x8f,0x0,0xff,0x0,0xba,0x0,0xff,0x0,0xb5,0x0,0xff,0x0,0xae,0x0,0xff,0x0,0x97,0x0,0xff,0x0,0x8a,0x0,0xff,0x0,0xa2,0x0,0xff,0x0,0xbf,0x0,0xff,0x0,0x10,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x16,0x0,0xff,0x0,0xb3,0x0,0xff,0x0,0x19,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x6,0x0,0xff,0x0,0xec,0x0,0xff,0x0,0x31,0x0,0xff,0x0,0x88,0x0,0xff,0x0,0x72,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x47,0x0,0xff,0x0,0x99,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x6,0x0,0xff,0x0,0x14,0x0,0xff,0x0,0x10,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x61,0x0,0xff,0x0,0x9e,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x63,0x0,0xff,0x0,0xb1,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xb,0x0,0xff,0x0,0xc8,0x0,0xff,0x0,0x72,0x0,0xff,0x0,0xbe,0x0,0xff,0x0,0x16,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x7d,0x0,0xff,0x0,0x62,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xb2,0x0,0xff,0x0,0x70,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa3,0x0,0xff,0x0,0x90,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x9,0x0,0xff,0x0,0xd1,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x6a,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x81,0x0,0xff,0x0,0x2b,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x3b,0x0,0xff,0x0,0xb6,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xc1,0x0,0xff,0x0,0x5a,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x17,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xc1,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x19,0x0,0xff,0x0,0x80,0x0,0xff,0x0,0x5,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x8f,0x0,0xff,0x0,0x4d,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x12,0x0,0xff,0x0,0xc7,0x0,0xff,0x0,0x26,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x4b,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x21,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x39,0x0,0xff,0x0,0x8f,0x0,0xff,0x0,0x1c,0x0,0xff,0x0,0xb,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x43,0x0,0xff,0x0,0xc7,0x0,0xff,0x0,0x6c,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x3b,0x0,0xff,0x0,0xcf,0x0,0xff,0x0,0x5,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xb2,0x0,0xff,0x0,0xa1,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xc,0x0,0xff,0x0,0xd2,0x0,0xff,0x0,0xf7,0x0,0xff,0x0,0x2e,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x76,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x80,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x6c,0x0,0xff,0x0,0xcd,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x23,0x0,0xff,0x0,0xcf,0x0,0xff,0x0,0x1f,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x32,0x0,0xff,0x0,0x97,0x0,0xff,0x0,0x73,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x7d,0x0,0xff,0x0,0x8e,0x0,0xff,0x0,0x5,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x87,0x0,0xff,0x0,0xc5,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x9f,0x0,0xff,0x0,0x9d,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xf,0x0,0xff,0x0,0xa3,0x0,0xff,0x0,0x1d,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x8,0x0,0xff,0x0,0xa4,0x0,0xff,0x0,0x69,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x83,0x0,0xff,0x0,0xb0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x1e,0x0,0xff,0x0,0xd0,0x0,0xff,0x0,0x23,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x87,0x0,0xff,0x0,0xa7,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x7e,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xce,0x0,0xff,0x0,0x10,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x89,0x0,0xff,0x0,0xae,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa2,0x0,0xff,0x0,0xa3,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xca,0x0,0xff,0x0,0x87,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x9,0x0,0xff,0x0,0x86,0x0,0xff,0x0,0xa2,0x0,0xff,0x0,0xed,0x0,0xff,0x0,0x55,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x83,0x0,0xff,0x0,0xbe,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x1e,0x0,0xff,0x0,0xd2,0x0,0xff,0x0,0x25,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x18,0x0,0xff,0x0,0xb8,0x0,0xff,0x0,0x9b,0x0,0xff,0x0,0x15,0x0,0xff,0x0,0x86,0x0,0xff,0x0,0x74,0x0,0xff,0x0,0x1e,0x0,0xff,0x0,0x84,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x6d,0x0,0xff,0x0,0xd7,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa0,0x0,0xff,0x0,0xa1,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x56,0x0,0xff,0x0,0x96,0x0,0xff,0x0,0xa6,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x30,0x0,0xff,0x0,0x87,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x3d,0x0,0xff,0x0,0xe3,0x0,0xff,0x0,0xe,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x22,0x0,0xff,0x0,0xca,0x0,0xff,0x0,0x1d,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x4,0x0,0xff,0x0,0xb,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x44,0x0,0xff,0x0,0x99,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0xc,0x0,0xff,0x0,0xde,0x0,0xff,0x0,0x3b,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x9c,0x0,0xff,0x0,0x9b,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x48,0x0,0xff,0x0,0xc3,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xcd,0x0,0xff,0x0,0x71,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xe,0x0,0xff,0x0,0xcf,0x0,0xff,0x0,0x32,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x10,0x0,0xff,0x0,0x4a,0x0,0xff,0x0,0x3e,0x0,0xff,0x0,0x7,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x36,0x0,0xff,0x0,0xcc,0x0,0xff,0x0,0x9,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xab,0x0,0xff,0x0,0xb4,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x72,0x0,0xff,0x0,0xbf,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x52,0x0,0xff,0x0,0x88,0x0,0xff,0x0,0xaf,0x0,0xff,0x0,0xe6,0x0,0xff,0x0,0x82,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x27,0x0,0xff,0x0,0xd2,0x0,0xff,0x0,0x18,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x62,0x0,0xff,0x0,0xe7,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xc9,0x0,0xff,0x0,0x7c,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x3,0x0,0xff,0x0,0x5,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x38,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xc1,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x22,0x0,0xff,0x0,0xdd,0x0,0xff,0x0,0x24,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x13,0x0,0xff,0x0,0xf1,0x0,0xff,0x0,0x42,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x27,0x0,0xff,0x0,0xe5,0x0,0xff,0x0,0x24,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x13,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x94,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x49,0x0,0xff,0x0,0x67,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x18,0x0,0xff,0x0,0xde,0x0,0xff,0x0,0x2e,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xcf,0x0,0xff,0x0,0x9e,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x82,0x0,0xff,0x0,0xcc,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x82,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xb,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x6f,0x0,0xff,0x0,0xbe,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xc,0x0,0xff,0x0,0xd3,0x0,0xff,0x0,0x37,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x72,0x0,0xff,0x0,0xf4,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xbf,0x0,0xff,0x0,0x97,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x2f,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x46,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x4e,0x0,0xff,0x0,0xda,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x5,0x0,0xff,0x0,0xd0,0x0,0xff,0x0,0x3f,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x9,0x0,0xff,0x0,0xeb,0x0,0xff,0x0,0x50,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xd2,0x0,0xff,0x0,0x5a,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x7,0x0,0xff,0x0,0xfd,0x0,0xff,0x0,0x62,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x21,0x0,0xff,0x0,0xdf,0x0,0xff,0x0,0x26,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xcf,0x0,0xff,0x0,0x4f,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x97,0x0,0xff,0x0,0xc5,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x17,0x0,0xff,0x0,0xd7,0x0,0xff,0x0,0x2c,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xde,0x0,0xff,0x0,0x5e,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x2,0x0,0xff,0x0,0xd7,0x0,0xff,0x0,0x46,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xd3,0x0,0xff,0x0,0x61,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa,0x0,0xff,0x0,0xed,0x0,0xff,0x0,0x55,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x29,0x0,0xff,0x0,0xe1,0x0,0xff,0x0,0x20,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xc9,0x0,0xff,0x0,0x3e,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xc9,0x0,0xff,0x0,0x6f,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xd8,0x0,0xff,0x0,0x6f,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x71,0x0,0xff,0x0,0xdd,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x38,0x0,0xff,0x0,0xfb,0x0,0xff,0x0,0x24,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x38,0x0,0xff,0x0,0xcd,0x0,0xff,0x0,0x8,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xb8,0x0,0xff,0x0,0x90,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xe3,0x0,0xff,0x0,0x75,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xc7,0x0,0xff,0x0,0xaf,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x42,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x27,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x9b,0x0,0xff,0x0,0xbe,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x8b,0x0,0xff,0x0,0xb4,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xf4,0x0,0xff,0x0,0x80,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x9,0x0,0xff,0x0,0xf6,0x0,0xff,0x0,0x75,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x36,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x45,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x4,0x0,0xff,0x0,0xed,0x0,0xff,0x0,0x5e,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xb8,0x0,0xff,0x0,0xe4,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xa4,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x2d,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x6c,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x9,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x80,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa2,0x0,0xff,0x0,0xc9,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x49,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xd6,0x0,0xff,0x0,0x10,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xe,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xbe,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x3e,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x99,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xc8,0x0,0xff,0x0,0xf3,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xd1,0x0,0xff,0x0,0xf0,0x0,0xff,0x0,0x2f,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xd3,0x0,0xff,0x0,0x6c,0x0,0xff,0x0,0x9d,0x0,0xff,0x0,0x50,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x2c,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xcf,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x1b,0x0,0xff,0x0,0xf3,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x4e,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x3e,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x6a,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x5e,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xa5,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa2,0x0,0xff,0x0,0x7a,0x0,0xff,0x0,0x87,0x0,0xff,0x0,0x7e,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x59,0x0,0xff,0x0,0xd3,0x0,0xff,0x0,0xc6,0x0,0xff,0x0,0x2d,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x89,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xf5,0x0,0xff,0x0,0xa3,0x0,0xff,0x0,0x6c,0x0,0xff,0x0,0x4c,0x0,0xff,0x0,0x2a,0x0,0xff,0x0,0x9,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xa4,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x1b,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x7,0x0,0xff,0x0,0xf0,0x0,0xff,0x0,0xcd,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x6,0x0,0xff,0x0,0xc8,0x0,0xff,0x0,0xbe,0x0,0xff,0x0,0x94,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x7d,0x0,0xff,0x0,0xa7,0x0,0xff,0x0,0xb6,0x0,0xff,0x0,0x4b,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x9,0x0,0xff,0x0,0x6f,0x0,0xff,0x0,0xc0,0x0,0xff,0x0,0xdc,0x0,0xff,0x0,0xe8,0x0,0xff,0x0,0xf4,0x0,0xff,0x0,0xed,0x0,0xff,0x0,0xe1,0x0,0xff,0x0,0xc4,0x0,0xff,0x0,0xda,0x0,0xff,0x0,0xf4,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0x6d,0x0,0xff,0x0,0x27,0x0,0xff,0x0,0x41,0x0,0xff,0x0,0x48,0x0,0xff,0x0,0x4f,0x0,0xff,0x0,0x51,0x0,0xff,0x0,0x51,0x0,0xff,0x0,0x59,0x0,0xff,0x0,0x59,0x0,0xff,0x0,0x59,0x0,0xff,0x0,0x5f,0x0,0xff,0x0,0x5e,0x0,0xff,0x0,0x5e,0x0,0xff,0x0,0x5d,0x0,0xff,0x0,0x5d,0x0,0xff,0x0,0x5d,0x0,0xff,0x0,0x5b,0x0,0xff,0x0,0x25,0x0,0xff,0x0,0x4f,0x0,0xff,0x0,0xff,0x0,0xff,0x0,0xa9,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xc3,0x0,0xff,0x0,0xc6,0x0,0xff,0x0,0xc9,0x0,0xff,0x0,0x58,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0xb3,0x0,0xff,0x0,0x9e,0x0,0xff,0x0,0xd3,0x0,0xff,0x0,0x60,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0xff,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,0xff,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x5,0xf2,0x0,0x0,0x4,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x1,0xf2,0x0,0x1,0x1,0xf2,0x0,0x23,0x3,0xf2,0x0,0x4b,0x5,0xf2,0x0,0x70,0x4,0xf2,0x0,0x9d,0x4,0xf2,0x0,0xb0,0x3,0xf2,0x0,0xbb,0x2,0xf2,0x0,0xab,0x2,0xf2,0x0,0x91,0x1,0xf2,0x0,0xc4,0x1,0xf2,0x0,0xa2,0x2,0xf2,0x0,0x65,0x2,0xf2,0x0,0x77,0x2,0xf2,0x0,0x7e,0x1,0xf2,0x0,0x85,0x1,0xf2,0x0,0x87,0x1,0xf2,0x0,0x87,0x0,0xf2,0x0,0x8e,0x0,0xf2,0x0,0x8e,0x1,0xf2,0x0,0x8e,0x0,0xf2,0x0,0x93,0x0,0xf2,0x0,0x92,0x0,0xf2,0x0,0x92,0x0,0xf2,0x0,0x92,0x0,0xf2,0x0,0x92,0x0,0xf2,0x0,0x91,0x1,0xf2,0x0,0x8b,0x2,0xf2,0x0,0x8c,0x2,0xf2,0x0,0x66,0x1,0xf2,0x0,0x8c,0x0,0xf2,0x0,0xaa,0x4,0xf2,0x0,0x5c,0x2,0xf2,0x0,0x96,0x0,0xf2,0x0,0x55,0x0,0xf2,0x0,0x75,0x0,0xf2,0x0,0x81,0x0,0xf2,0x0,0x33,0x0,0xf2,0x0,0x8e,0x0,0xf2,0x0,0x78,0x0,0xf2,0x0,0x9b,0x0,0xf2,0x0,0x37,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0x0,0xf2,0x0,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0xff,0xff,0xff,0x0,0x0,}; + +char const PC_ScriptPreload[]="#name \"shell\"\r\n\ + #runtime stack 1024\r\n\ + host int print(string s);\r\n\ + host int printimage(string s);\r\n\ + host int printshape(string s,int color);\r\n\ + host int printanimation(string s);\r\n\ + host int printpartical(int x,int y,string texture,string script,string _init,string _create,string _update);\r\n\ + host int printroundcursor(string s,int color);\r\n\ + host int playanimation(int id,string s);\r\n\ + host int setimagemask(int id,string s);\r\n\ + host int runscriptfunction(string key,string func);\r\n\ + host int close();\r\n\ + host int loadtexture(string path,string key);\r\n\ + host int loadshape(string path,string key);\r\n\ + host int loadanimation(string path,string key);\r\n\ + host int loadscript(string path,string key);\r\n"; + + + +px_void PX_ConsoleUpdateEx(PX_Console *pc) +{ + px_int i,y=10; + PX_ConsoleColumn *pCc; + + while (pc->pObjects.size>pc->max_column) + { + pCc=(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,0)); + PX_ObjectDelete(pCc->Object); + PX_VectorErase(&pc->pObjects,0); + } + + for (i=0;ipObjects.size;i++) + { + pCc=(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,i)); + + switch(pCc->Object->Type) + { + case PX_OBJECT_TYPE_AUTOTEXT: + { + PX_ObjectSetPosition(pCc->Object,0,(px_float)y,0); + y+=PX_Object_AutoTextGetHeight(pCc->Object); + } + break; + case PX_OBJECT_TYPE_IMAGE: + { + PX_ObjectSetPosition(pCc->Object,0,(px_float)y,0); + y+=(px_int)PX_ObjectGetHeight(pCc->Object); + } + break; + case PX_OBJECT_TYPE_ANIMATION: + { + PX_ObjectSetPosition(pCc->Object,0,(px_float)y,0); + y+=(px_int)PX_ObjectGetHeight(pCc->Object); + } + break; + case PX_OBJECT_TYPE_PARTICAL: + break; + case PX_OBJECT_TYPE_SHAPE: + { + PX_ObjectSetPosition(pCc->Object,0,(px_float)y,0); + y+=(px_int)PX_ObjectGetHeight(pCc->Object); + } + break; + case PX_OBJECT_TYPE_ROUNDCURSOR: + { + PX_Object_RoundCursor *pRc=PX_Object_GetRoundCursor(pCc->Object); + PX_ObjectSetPosition(pCc->Object,(px_float)pc->runtime->width/2,(px_float)y+pRc->shape->height/2,0); + y+=(px_int)PX_ObjectGetHeight(pCc->Object); + } + break; + default: + { + PX_ObjectSetPosition(pCc->Object,0,(px_float)y,0); + y+=(px_int)PX_ObjectGetHeight(pCc->Object); + } + break; + } + } + PX_ObjectSetPosition(pc->Input,0,(px_float)y,0); +} +PX_Object * PX_ConsolePrintText(PX_Console *pc,const px_char *text) +{ + PX_ConsoleColumn obj; + PX_Object *pObject=PX_Object_AutoTextCreate(&pc->runtime->mp_ui,PX_Object_ScrollAreaGetIncludedObjects(pc->Area),0,0,pc->runtime->width-1); + + if (pObject) + { + obj.Object=pObject; + obj.id=pc->id++; + PX_Object_AutoTextSetTextColor(pObject,PX_COLOR(255,0,255,0)); + PX_Object_AutoTextSetText(pObject,text); + PX_VectorPushback(&pc->pObjects,&obj); + PX_ConsoleUpdateEx(pc); + + PX_Object_ScrollAreaMoveToBottom(pc->Area); + } + return pObject; +} + +PX_Object * PX_ConsolePrintImage(PX_Console *pc,px_char *res_image_key) +{ + PX_ConsoleColumn obj; + PX_Resource *pimageRes; + PX_Object *pObject; + if(pimageRes=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,res_image_key)) + { + if (pimageRes->Type==PX_RESOURCE_TYPE_TEXTURE) + { + pObject=PX_Object_ImageCreate(&pc->runtime->mp_ui,PX_Object_ScrollAreaGetIncludedObjects(pc->Area),0,0,&pimageRes->texture); + PX_Object_ImageSetAlign(pObject,PX_OBJECT_ALIGN_TOP|PX_OBJECT_ALIGN_LEFT); + PX_ObjectSetSize(pObject,(px_float)pimageRes->texture.width,(px_float)pimageRes->texture.height,0); + obj.Object=pObject; + obj.id=pc->id++; + PX_VectorPushback(&pc->pObjects,&obj); + PX_ConsoleUpdateEx(pc); + PX_Object_ScrollAreaMoveToBottom(pc->Area); + } + else + return PX_NULL; + } + else + { + return PX_NULL; + } + + return pObject; +} + +PX_Object * PX_ConsolePrintShape(PX_Console *pc,px_char *res_image_key,px_color color) +{ + PX_ConsoleColumn obj; + PX_Resource *pShape; + PX_Object *pObject; + if(pShape=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,res_image_key)) + { + if (pShape->Type==PX_RESOURCE_TYPE_SHAPE) + { + pObject=PX_Object_ShapeCreate(&pc->runtime->mp_ui,PX_Object_ScrollAreaGetIncludedObjects(pc->Area),0,0,&pShape->shape); + PX_Object_ShapeSetAlign(pObject,PX_OBJECT_ALIGN_TOP|PX_OBJECT_ALIGN_LEFT); + PX_Object_ShapeSetBlendColor(pObject,color); + PX_ObjectSetSize(pObject,(px_float)pShape->shape.width,(px_float)pShape->shape.height,0); + obj.Object=pObject; + obj.id=pc->id++; + PX_VectorPushback(&pc->pObjects,&obj); + PX_ConsoleUpdateEx(pc); + PX_Object_ScrollAreaMoveToBottom(pc->Area); + } + else + return PX_NULL; + } + else + { + return PX_NULL; + } + + return pObject; +} + +PX_Object * PX_ConsolePrintAnimation(PX_Console *pc,px_char *res_animation_key) +{ + PX_ConsoleColumn obj; + PX_Resource *pAnimationRes; + PX_Object *pObject; + px_rect rect; + if(pAnimationRes=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,res_animation_key)) + { + if (pAnimationRes->Type==PX_RESOURCE_TYPE_ANIMATIONLIBRARY) + { + pObject=PX_Object_AnimationCreate(&pc->runtime->mp_ui,PX_Object_ScrollAreaGetIncludedObjects(pc->Area),0,0,&pAnimationRes->animationlibrary); + PX_Object_AnimationSetAlign(pObject,PX_OBJECT_ALIGN_TOP|PX_OBJECT_ALIGN_LEFT); + rect=PX_AnimationGetSize(&PX_Object_GetAnimation(pObject)->animation); + PX_ObjectSetSize(pObject,(px_float)rect.width,(px_float)rect.height,0); + obj.Object=pObject; + obj.id=pc->id++; + PX_VectorPushback(&pc->pObjects,&obj); + PX_ConsoleUpdateEx(pc); + PX_Object_ScrollAreaMoveToBottom(pc->Area); + } + else + return PX_NULL; + } + else + { + return PX_NULL; + } + + return pObject; +} + + +PX_Object * PX_ConsolePrintPartical(PX_Console *pc,px_int x,px_int y,px_char *res_texture,px_char *script,px_char *_init,px_char *_create,px_char *_updata) +{ + PX_ConsoleColumn obj; + PX_Resource *pTextureRes,*pScriptRes; + PX_Object *pObject; + if(!(pTextureRes=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,res_texture))) + { + return PX_NULL; + } + + if (pTextureRes->Type!=PX_RESOURCE_TYPE_TEXTURE) + { + return PX_NULL; + } + + if(!(pScriptRes=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,script))) + { + return PX_NULL; + } + + if (pScriptRes->Type!=PX_RESOURCE_TYPE_SCRIPT) + { + return PX_NULL; + } + + + pObject=PX_Object_ParticalCreate(&pc->runtime->mp_ui,PX_Object_ScrollAreaGetIncludedObjects(pc->Area),x,y,0,&pTextureRes->texture,&pScriptRes->Script,_init,_create,_updata); + PX_ObjectSetSize(pObject,0,0,0); + obj.Object=pObject; + obj.id=pc->id++; + PX_VectorPushback(&pc->pObjects,&obj); + + return pObject; +} + +PX_Object * PX_ConsoleShowImage(PX_Console *pc,px_char *res_image_key) +{ + PX_ConsoleColumn obj; + PX_Resource *pimageRes; + PX_Object *pObject; + if(pimageRes=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,res_image_key)) + { + if (pimageRes->Type==PX_RESOURCE_TYPE_TEXTURE) + { + pObject=PX_Object_ImageCreate(&pc->runtime->mp_ui,PX_Object_ScrollAreaGetIncludedObjects(pc->Area),0,0,&pimageRes->texture); + PX_Object_ImageSetAlign(pObject,PX_OBJECT_ALIGN_TOP|PX_OBJECT_ALIGN_LEFT); + obj.Object=pObject; + obj.id=pc->id++; + PX_VectorPushback(&pc->pObjects,&obj); + PX_ConsoleUpdateEx(pc); + PX_Object_ScrollAreaMoveToBottom(pc->Area); + } + else + return PX_NULL; + } + else + { + return PX_NULL; + } + + return pObject; +} + +px_void PC_ConsolePlayAnimation(PX_Console *pc,px_int id,px_char *animation_name) +{ + px_int i; + PX_ConsoleColumn *pCc; + + for (i=0;ipObjects.size;i++) + { + pCc=PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,i); + if(pCc->id==id) + { + if (pCc->Object->Type==PX_OBJECT_TYPE_ANIMATION) + { + PX_AnimationSetCurrentPlayAnimationByName(&PX_Object_GetAnimation(pCc->Object)->animation,animation_name); + return; + } + } + } +} + +px_void PC_ConsoleSetImageMask(PX_Console *pc,px_int id,px_char *mask_key) +{ + px_int i; + PX_ConsoleColumn *pCc; + + for (i=0;ipObjects.size;i++) + { + pCc=PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,i); + if(pCc->id==id) + { + if (pCc->Object->Type==PX_OBJECT_TYPE_IMAGE) + { + PX_Resource *pimageRes; + if(pimageRes=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,mask_key)) + { + if (pimageRes->Type==PX_RESOURCE_TYPE_TEXTURE) + { + PX_Object_ImageSetMask(pCc->Object,&pimageRes->texture); + } + } + + } + return; + } + } +} + + + + +PX_Object * PC_ConsoleCreateRoundCursor(PX_Console *pc,px_char *shape_key,px_color clr) +{ + + PX_ConsoleColumn obj; + PX_Resource *pShape; + PX_Object *pObject; + if(pShape=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,shape_key)) + { + if (pShape->Type==PX_RESOURCE_TYPE_SHAPE) + { + pObject=PX_Object_RoundCursorCreate(&pc->runtime->mp_ui,PX_Object_ScrollAreaGetIncludedObjects(pc->Area),0,0,&pShape->shape,clr); + PX_ObjectSetSize(pObject,(px_float)pShape->shape.width,(px_float)pShape->shape.height,0); + obj.Object=pObject; + obj.id=pc->id++; + PX_VectorPushback(&pc->pObjects,&obj); + PX_ConsoleUpdateEx(pc); + PX_Object_ScrollAreaMoveToBottom(pc->Area); + } + else + return PX_NULL; + } + else + { + return PX_NULL; + } + + return pObject; +} + + + + + + + + + +px_bool PC_ConsoleVM_Print(PX_ScriptVM_Instance *Ins) +{ + PX_Console *pc=(PX_Console *)Ins->pThread[Ins->T].user_runtime_data; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + PX_ConsolePrintText(pc,PX_ScriptVM_STACK(Ins,0)._string.buffer); + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,pc->pObjects.size-1)->id)); + return PX_TRUE; +} + +px_bool PC_ConsoleVM_PrintImage(PX_ScriptVM_Instance *Ins) +{ + PX_Console *pc=(PX_Console *)Ins->pThread[Ins->T].user_runtime_data; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + PX_ConsolePrintImage(pc,PX_ScriptVM_STACK(Ins,0)._string.buffer); + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,pc->pObjects.size-1)->id)); + return PX_TRUE; +} + +px_bool PC_ConsoleVM_PrintShape(PX_ScriptVM_Instance *Ins) +{ + px_color clr; + PX_Console *pc=(PX_Console *)Ins->pThread[Ins->T].user_runtime_data; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + if (PX_ScriptVM_STACK(Ins,1).type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + clr._argb.ucolor=PX_ScriptVM_STACK(Ins,1)._uint; + PX_ConsolePrintShape(pc,PX_ScriptVM_STACK(Ins,0)._string.buffer,clr); + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,pc->pObjects.size-1)->id)); + return PX_TRUE; +} + +px_bool PC_ConsoleVM_PrintAnimation(PX_ScriptVM_Instance *Ins) +{ + PX_Console *pc=(PX_Console *)Ins->pThread[Ins->T].user_runtime_data; + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + PX_ConsolePrintAnimation(pc,PX_ScriptVM_STACK(Ins,0)._string.buffer); + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,pc->pObjects.size-1)->id)); + return PX_TRUE; +} + +px_bool PC_ConsoleVM_PlayAnimation(PX_ScriptVM_Instance *Ins) +{ + PX_Console *pc=(PX_Console *)Ins->pThread[Ins->T].user_runtime_data; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + if (PX_ScriptVM_STACK(Ins,1).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + PC_ConsolePlayAnimation(pc,PX_ScriptVM_STACK(Ins,0)._int,PX_ScriptVM_STACK(Ins,1)._string.buffer); + + return PX_TRUE; +} + +px_bool PC_ConsoleVM_SetImageMask(PX_ScriptVM_Instance *Ins) +{ + PX_Console *pc=(PX_Console *)Ins->pThread[Ins->T].user_runtime_data; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + if (PX_ScriptVM_STACK(Ins,1).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + PC_ConsoleSetImageMask(pc,PX_ScriptVM_STACK(Ins,0)._int,PX_ScriptVM_STACK(Ins,1)._string.buffer); + + return PX_TRUE; +} + +px_bool PC_ConsoleVM_Close(PX_ScriptVM_Instance *Ins) +{ + PX_Console *pc=(PX_Console *)Ins->pThread[Ins->T].user_runtime_data; + PX_ConsoleShow(pc,PX_FALSE); + return PX_TRUE; +} + + + + +px_bool PC_ConsoleVM_PrintPartical(PX_ScriptVM_Instance *Ins) +{ + PX_Console *pc=(PX_Console *)Ins->pThread[Ins->T].user_runtime_data; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + if (PX_ScriptVM_STACK(Ins,1).type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + if (PX_ScriptVM_STACK(Ins,2).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + if (PX_ScriptVM_STACK(Ins,3).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + if (PX_ScriptVM_STACK(Ins,4).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + if (PX_ScriptVM_STACK(Ins,5).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + if (PX_ScriptVM_STACK(Ins,6).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + if(PX_ConsolePrintPartical(\ + pc,\ + PX_ScriptVM_STACK(Ins,0)._int,\ + PX_ScriptVM_STACK(Ins,1)._int,\ + PX_ScriptVM_STACK(Ins,2)._string.buffer,\ + PX_ScriptVM_STACK(Ins,3)._string.buffer,\ + PX_ScriptVM_STACK(Ins,4)._string.buffer,\ + PX_ScriptVM_STACK(Ins,5)._string.buffer,\ + PX_ScriptVM_STACK(Ins,6)._string.buffer\ + )) + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,pc->pObjects.size-1)->id)); + else + PX_ConsolePrintText(pc,"Could not Create Partical Launcher"); + return PX_TRUE; +} + +px_bool PC_ConsoleVM_PrintRoundCursor(PX_ScriptVM_Instance *Ins) +{ + px_color clr; + PX_Console *pc=(PX_Console *)Ins->pThread[Ins->T].user_runtime_data; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + if (PX_ScriptVM_STACK(Ins,1).type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + clr._argb.ucolor=PX_ScriptVM_STACK(Ins,1)._uint; + PC_ConsoleCreateRoundCursor(pc,PX_ScriptVM_STACK(Ins,0)._string.buffer,clr); + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,pc->pObjects.size-1)->id)); + return PX_TRUE; +} + +px_void PC_ConsoleRunScriptFunction(PX_Console *pc,px_char *script_key,px_char *func_name) +{ + PX_Resource *pScriptRes; + if(pScriptRes=PX_ResourceLibraryGet(&pc->runtime->ResourceLibrary,script_key)) + { + if (pScriptRes->Type==PX_RESOURCE_TYPE_SCRIPT) + { + PX_ScriptVM_RegistryHostFunction(&pScriptRes->Script,"PRINT",PC_ConsoleVM_Print);//Print + PX_ScriptVM_RegistryHostFunction(&pScriptRes->Script,"PRINTIMAGE",PC_ConsoleVM_PrintImage);//Print Image + PX_ScriptVM_RegistryHostFunction(&pScriptRes->Script,"PRINTSHAPE",PC_ConsoleVM_PrintShape);//Print Shape + PX_ScriptVM_RegistryHostFunction(&pScriptRes->Script,"PRINTANIMATION",PC_ConsoleVM_PrintAnimation);//Print Animation + PX_ScriptVM_RegistryHostFunction(&pScriptRes->Script,"PRINTPARTICAL",PC_ConsoleVM_PrintPartical);//Print Partical + if(!PX_ScriptVM_InstanceRunFunction(&pScriptRes->Script,0,pc,"_BOOT",PX_NULL,0)) + { + return; + } + if(!PX_ScriptVM_InstanceRunFunction(&pScriptRes->Script,0,pc,func_name,PX_NULL,0)) + { + return ; + } + } + else + return; + } + else + { + return; + } + +} + +px_bool PC_ConsoleVM_RunScriptFunction(PX_ScriptVM_Instance *Ins) +{ + PX_Console *pc=(PX_Console *)Ins->pThread[Ins->T].user_runtime_data; + + if (PX_ScriptVM_STACK(Ins,0).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + if (PX_ScriptVM_STACK(Ins,1).type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_ScriptVM_RET(Ins,PX_ScriptVM_Variable_int(0)); + return PX_TRUE; + } + + PC_ConsoleRunScriptFunction(pc,PX_ScriptVM_STACK(Ins,0)._string.buffer,PX_ScriptVM_STACK(Ins,1)._string.buffer); + + return PX_TRUE; +} + +px_bool PX_ConsoleExecute(PX_Console *pc,char *pshellstr) +{ + px_memory bin; + px_string shell; + PX_ScriptVM_Instance Ins; + PX_SCRIPT_LIBRARY lib; + px_string asmcodeString; + px_memorypool mp_calc;//6M + + mp_calc=MP_Create(MP_Malloc(&pc->runtime->mp,PE_MEMORY_CALC_SIZE),PE_MEMORY_CALC_SIZE); + if(mp_calc.StartAddr==PX_NULL) return PX_FALSE; + PX_ConsolePrintText(pc,pshellstr); + MP_Reset(&mp_calc); + PX_MemoryInit(&mp_calc,&bin); + PX_StringInit(&mp_calc,&shell); + PX_StringCat(&shell,(char *)PC_ScriptPreload); + if(pc->script_header_append) + PX_StringCat(&shell,(char *)pc->script_header_append); + PX_StringCat(&shell,"export void main(){\r\n"); + PX_StringCat(&shell,pshellstr); + PX_StringCat(&shell,"\r\n}"); + + if(!PX_ScriptCompilerInit(&lib,&mp_calc)) + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + + if(!PX_ScriptCompilerLoad(&lib,(px_char *)shell.buffer)) + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + + PX_StringFree(&shell); + + PX_StringInit(&mp_calc,&asmcodeString); + if(PX_ScriptCompilerCompile(&lib,"shell",&asmcodeString,32)) + { + PX_ScriptAsmOptimization(&asmcodeString); + + if(!PX_ScriptAsmCompile(&mp_calc,asmcodeString.buffer,&bin)) + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + } + else + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + + PX_StringFree(&asmcodeString); + PX_ScriptCompilerFree(&lib); + + if(!PX_ScriptVM_InstanceInit(&Ins,&mp_calc,bin.buffer,bin.usedsize)) + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + PX_MemoryFree(&bin); + + PX_ScriptVM_RegistryHostFunction(&Ins,"PRINT",PC_ConsoleVM_Print);//Print + PX_ScriptVM_RegistryHostFunction(&Ins,"PRINTIMAGE",PC_ConsoleVM_PrintImage);//Print Image + PX_ScriptVM_RegistryHostFunction(&Ins,"PRINTSHAPE",PC_ConsoleVM_PrintShape);//Print Shape + PX_ScriptVM_RegistryHostFunction(&Ins,"PRINTANIMATION",PC_ConsoleVM_PrintAnimation);//Print Animation + PX_ScriptVM_RegistryHostFunction(&Ins,"PRINTPARTICAL",PC_ConsoleVM_PrintPartical);//Print Partical + PX_ScriptVM_RegistryHostFunction(&Ins,"PLAYANIMATION",PC_ConsoleVM_PlayAnimation);//play Animation + PX_ScriptVM_RegistryHostFunction(&Ins,"SETIMAGEMASK",PC_ConsoleVM_SetImageMask);//SetImage Mask + PX_ScriptVM_RegistryHostFunction(&Ins,"RUNSCRIPTFUNCTION",PC_ConsoleVM_RunScriptFunction);//Load PatricalScript + PX_ScriptVM_RegistryHostFunction(&Ins,"PRINTROUNDCURSOR",PC_ConsoleVM_PrintRoundCursor);//print roundcursor + PX_ScriptVM_RegistryHostFunction(&Ins,"CLOSE",PC_ConsoleVM_Close);//close + if (pc->registry_call) + { + pc->registry_call(&Ins); + } + if(!PX_ScriptVM_InstanceRunFunction(&Ins,0,pc,"_BOOT",PX_NULL,0)) + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + if(!PX_ScriptVM_InstanceRunFunction(&Ins,0,pc,"MAIN",PX_NULL,0)) + { + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + return PX_FALSE; + } + + + PX_ScriptVM_InstanceFree(&Ins); +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + MP_UnreleaseInfo(&mp_calc); +#endif + + MP_Free(&pc->runtime->mp,mp_calc.StartAddr); + + return PX_TRUE; + +} + +px_void PX_ConsoleOnEnter(PX_Object *Obj,PX_Object_Event e,px_void *user_ptr) +{ + PX_Console *pc=(PX_Console *)Obj->User_ptr; + + PX_Object_Edit *pEdit=PX_Object_GetEdit(pc->Input); + + if (e.Event==PX_OBJECT_EVENT_KEYDOWN) + { + if (e.Param_uint[0]=='\r') + { + if(!PX_ConsoleExecute(pc,pEdit->text.buffer)) + { + PX_Object_AutoTextSetTextColor(PX_ConsolePrintText(pc,"Invalid shell code."),PX_COLOR(255,255,0,0)); + } + PX_Object_EditSetText(pc->Input,""); + } + } + + if (e.Event==PX_OBJECT_EVENT_CURSORRDOWN) + { + PX_Object_EditSetFocus(pc->Input,PX_TRUE); + } +} + +px_void PX_ConsoleOnMouseDown(PX_Object *Obj,PX_Object_Event e,px_void *user_ptr) +{ + PX_Console *pc=(PX_Console *)Obj->User_ptr; + if (e.Event==PX_OBJECT_EVENT_CURSORDOWN) + { + PX_Object_EditSetFocus(pc->Input,PX_TRUE); + } +} + + +px_bool PC_ConsoleInit(PX_Console *pc) +{ + + pc->show=PX_FALSE; + pc->max_column=PC_CONSOLE_DEFAULT_MAX_COLUMN; + pc->column=0; + if(!(pc->Root=PX_ObjectCreate(&pc->runtime->mp_ui,0,0,0,0,0,0,0))) return PX_FALSE; + if(!(pc->Area=PX_Object_ScrollAreaCreate(&pc->runtime->mp_ui,pc->Root,0,0,pc->runtime->width,pc->runtime->height))) return PX_FALSE; + + + pc->Area->User_ptr=pc; + PX_ObjectRegisterEvent(pc->Area,PX_OBJECT_EVENT_KEYDOWN,PX_ConsoleOnEnter,PX_NULL); + PX_ObjectRegisterEvent(pc->Area,PX_OBJECT_EVENT_CURSORDOWN,PX_ConsoleOnMouseDown,PX_NULL); + PX_Object_ScrollAreaSetBorder(pc->Area,PX_FALSE); + if(!(pc->Input=PX_Object_EditCreate(&pc->runtime->mp_ui,PX_Object_ScrollAreaGetIncludedObjects(pc->Area),0,0,pc->runtime->width-1,PX_FontGetCharactorHeight()+4,PX_COLOR(255,0,255,0)))) return PX_FALSE; + PX_Object_EditSetCursorColor(pc->Input,PX_COLOR(255,0,255,0)); + PX_Object_EditSetTextColor(pc->Input,PX_COLOR(255,0,255,0)); + PX_Object_EditSetBorderColor(pc->Input,PX_COLOR(255,0,255,0)); + PX_Object_EditSetOffset(pc->Input,2,3); + PX_Object_ScrollAreaSetBkColor(pc->Area,PX_COLOR(255,0,0,0)); + pc->id=1; + + PX_VectorInit(&pc->runtime->mp_ui,&pc->pObjects,sizeof(PX_ConsoleColumn),PC_CONSOLE_DEFAULT_MAX_COLUMN); + + +////////////////////////////////////////////////////////////////////////// + //logo + + if(!PX_ResourceLibraryLoad(&pc->runtime->ResourceLibrary,PX_RESOURCE_TYPE_TEXTURE,(px_byte *)fox_console_logo,sizeof(fox_console_logo),"console_logo"))return PX_FALSE; + + PX_ConsoleShowImage(pc,"console_logo"); + PX_ConsolePrintText(pc," PainterEngine JIT Compilation Console\n StoryScript Shell For StoryVM\n Code By DBinary Build on 2019\n Refer To:www.GitHub.com/matrixcascade\n"); + + return PX_TRUE; +} + +px_bool PX_ConsoleInitialize(PX_Runtime *runtime,PX_Console *pc) +{ + //console initialize + pc->runtime=runtime; + pc->registry_call=PX_NULL; + pc->script_header_append=PX_NULL; + if(!PC_ConsoleInit(pc))return PX_FALSE; + + return PX_TRUE; +} +px_void PX_ConsolePostEvent(PX_Console *pc,PX_Object_Event e) +{ + px_int i; + if(pc->show) + { + if (e.Event==PX_OBJECT_EVENT_KEYDOWN) + { + if (e.Param_uint[0]==36) + { + PX_ConsoleShow(pc,PX_FALSE); + return; + } + } + + if (e.Event!=PX_OBJECT_EVENT_CURSORMOVE) + { + PX_ObjectPostEvent(pc->Root,e); + } + else + { + for (i=0;ipObjects.size;i++) + { + PX_ConsoleColumn *pCcObject=PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,i); + if (pCcObject->Object->Type==PX_OBJECT_TYPE_ROUNDCURSOR) + { + PX_ObjectPostEvent(pCcObject->Object,e); + } + } + } + } + else + { + if (e.Event==PX_OBJECT_EVENT_KEYDOWN) + { + if (e.Param_uint[0]==36) + { + PX_ConsoleShow(pc,PX_TRUE); + } + } + } +} +px_void PX_ConsoleUpdate(PX_Console *pc,px_dword elpased) +{ + PX_ObjectUpdate(pc->Area,elpased); +} + + +px_void PX_ConsoleShow(PX_Console *pc,px_bool b) +{ + pc->show=b; +} + +px_void PX_ConsoleRender(PX_Console *pc,px_dword elpased) +{ + if(pc->show) + { + PX_ObjectRender(&pc->runtime->RenderSurface,pc->Area,elpased); + } +} + +px_void PX_ConsoleRegistryHostCall(PX_Console *pc,console_registry_hostcall call_func) +{ + pc->registry_call=call_func; +} + +px_void PX_ConsoleRegistryScriptHeader(PX_Console *pc,const px_char *header) +{ + pc->script_header_append=header; +} + +px_void PX_ConsoleClear(PX_Console *pc) +{ + PX_ConsoleColumn *pCc; + px_int i; + for (i=0;ipObjects.size;i++) + { + pCc=(PX_VECTORAT(PX_ConsoleColumn,&pc->pObjects,i)); + PX_ObjectDelete(pCc->Object); + } + PX_VectorClear(&pc->pObjects); +} + diff --git a/code/PainterEngine/Architecture/PainterEngine_Console.h b/code/PainterEngine/Architecture/PainterEngine_Console.h new file mode 100644 index 0000000000000000000000000000000000000000..48b6f0f6461b3c66e30fda5466639777d629877e --- /dev/null +++ b/code/PainterEngine/Architecture/PainterEngine_Console.h @@ -0,0 +1,57 @@ +#ifndef PX_CONSOLE_H +#define PX_CONSOLE_H + + +#include "PainterEngine_Runtime.h" + +#define PC_CONSOLE_DEFAULT_MAX_COLUMN 48 +#define PC_RESOURCE_PATH "." + +typedef px_bool (*console_registry_hostcall)(PX_ScriptVM_Instance *Ins); +typedef struct +{ + PX_Object *Root; + PX_Object *Area; + PX_Object *Input; + px_int max_column; + px_int column; + px_bool show; + px_vector pObjects; + px_int id; + PX_Runtime *runtime; + union + { + px_void *user_ptr; + px_int user_int; + px_float user_float; + }; + + const px_char *script_header_append; + console_registry_hostcall registry_call; +}PX_Console; + +typedef struct +{ + px_int id; + PX_Object *Object; +}PX_ConsoleColumn; + + +px_bool PX_ConsoleInitialize(PX_Runtime *runtime,PX_Console *pc); +px_void PX_ConsoleRegistryScriptHeader(PX_Console *pc,const px_char *header); +px_void PX_ConsoleRegistryHostCall(PX_Console *pc,console_registry_hostcall call_func); +px_void PX_ConsoleShow(PX_Console *pc,px_bool b); +px_void PX_ConsolePostEvent(PX_Console *pc,PX_Object_Event e); +px_void PX_ConsoleUpdate(PX_Console *pc,px_dword elpased); +px_void PX_ConsoleRender(PX_Console *pc,px_dword elpased); +PX_Object * PX_ConsolePrintText(PX_Console *pc,const px_char *text); +PX_Object * PX_ConsolePrintImage(PX_Console *pc,px_char *res_image_key); +PX_Object * PX_ConsolePrintShape(PX_Console *pc,px_char *res_image_key,px_color color); +PX_Object * PX_ConsolePrintAnimation(PX_Console *pc,px_char *res_animation_key); +PX_Object * PX_ConsolePrintPartical(PX_Console *pc,px_int x,px_int y,px_char *res_texture,px_char *script,px_char *_init,px_char *_create,px_char *_updata); +PX_Object * PX_ConsoleShowImage(PX_Console *pc,px_char *res_image_key); +px_void PX_ConsoleClear(PX_Console *pc); +px_bool PX_ConsoleExecute(PX_Console *pc,char *pshellstr); + +#endif + diff --git a/code/PainterEngine/Architecture/PainterEngine_MessageBox.c b/code/PainterEngine/Architecture/PainterEngine_MessageBox.c new file mode 100644 index 0000000000000000000000000000000000000000..38e161b0a1c1607c4337d4a8799ffd34955313b7 --- /dev/null +++ b/code/PainterEngine/Architecture/PainterEngine_MessageBox.c @@ -0,0 +1,288 @@ +#include "PainterEngine_MessageBox.h" + + +px_void PX_MessageBox_BtnYesClick(PX_Object *pObject,PX_Object_Event e,px_void *user) +{ + PX_MessageBox *pm=(PX_MessageBox *)user; + pm->retVal=PX_MESSAGEBOX_RETURN_YES; + pm->mode=PX_MESSAGEBOX_MODE_CLOSE; + if (pm->function_yes) + { + pm->function_yes(pm->function_yes_ptr); + } + +} + +px_void PX_MessageBox_BtnNoClick(PX_Object *pObject,PX_Object_Event e,px_void *user) +{ + PX_MessageBox *pm=(PX_MessageBox *)user; + pm->retVal=PX_MESSAGEBOX_RETURN_NO; + pm->mode=PX_MESSAGEBOX_MODE_CLOSE; + if (pm->function_no) + { + pm->function_no(pm->function_yes_ptr); + } +} + + +px_bool PX_MessageBoxInitialize(PX_Runtime *runtime,PX_MessageBox *pm,PX_FontModule *fontmodule,px_int window_Width,px_int window_Height) +{ + + pm->schedule=0; + pm->runtime=runtime; + pm->window_Width=window_Width; + pm->window_Height=window_Height; + pm->retVal=PX_MESSAGEBOX_RETURN_NONE; + pm->function_no=PX_NULL; + pm->function_yes=PX_NULL; + + if(!(pm->root=PX_ObjectCreate(&runtime->mp_ui,PX_NULL,0,0,0,0,0,0))) return PX_FALSE; + + if(!(pm->btn_Ok=PX_Object_PushButtonCreate(&runtime->mp_ui,pm->root,window_Width/2+200,window_Height/2+150,84,28,"OK",PX_COLOR(255,0,0,0)))) return PX_FALSE; + + if(!(pm->btn_Cancel=PX_Object_PushButtonCreate(&runtime->mp_ui,pm->root,window_Width/2+300,window_Height/2+150,84,28,"CANCEL",PX_COLOR(255,0,0,0)))) return PX_FALSE; + + + pm->Message=PX_NULL; + pm->show=PX_FALSE; + pm->fontmodule=fontmodule; + + pm->PX_MESSAGEBOX_STAGE_1_HEIGHT=PX_MESSAGEBOX_DEFAULT_STAGE_1_HEIGHT; + pm->PX_MESSAGEBOX_STAGE_2_HEIGHT=PX_MESSAGEBOX_DEFAULT_STAGE_2_HEIGHT; + + PX_ObjectRegisterEvent(pm->btn_Ok,PX_OBJECT_EVENT_EXECUTE,PX_MessageBox_BtnYesClick,pm); + PX_ObjectRegisterEvent(pm->btn_Cancel,PX_OBJECT_EVENT_EXECUTE,PX_MessageBox_BtnNoClick,pm); + return PX_TRUE; +} + +px_void PX_MessageBoxPostEvent(PX_MessageBox *pm,PX_Object_Event e) +{ + if (pm->show) + { + PX_ObjectPostEvent(pm->root,e); + } +} + +px_void PX_MessageBoxUpdate(PX_MessageBox *pm,px_dword elpased) +{ + if (elpased>2000) + { + return; + } + if (pm->show) + { + PX_ObjectUpdate(pm->root,elpased); + switch(pm->mode) + { + case PX_MESSAGEBOX_MODE_EXPAND: + pm->schedule+=elpased; + if (pm->schedule>PX_MESSAGEBOX_DEFAULT_STAGE_2_TIME) + { + pm->schedule=PX_MESSAGEBOX_DEFAULT_STAGE_2_TIME; + } + break; + case PX_MESSAGEBOX_MODE_CLOSE: + default: + { + pm->schedule-=elpased; + if (pm->schedule<0) + { + pm->schedule=0; + pm->show=PX_FALSE; + } + } + break; + + } + + + } +} + +px_void PX_MessageBoxClose(PX_MessageBox *pm) +{ + pm->mode=PX_MESSAGEBOX_MODE_CLOSE; +} + +px_void PX_MessageBoxRender(px_surface *pSurface,PX_MessageBox *pm,px_dword elpased) +{ + px_color backGroundColor,frontColor; + if (elpased>2000) + { + return; + } + + if (!pm->show) + { + return; + } + + switch(pm->colormod) + { + case PX_MESSAGEBOX_COLORMOD_LIGHT: + { + backGroundColor=PX_COLOR(255,0,0,0); + frontColor=PX_COLOR(255,255,255,255); + } + break; + case PX_MESSAGEBOX_COLORMOD_NIGHT: + default: + { + backGroundColor=PX_COLOR(255,255,255,255); + frontColor=PX_COLOR(255,0,0,0); + } + break; + } + + + + if (pm->schedulewindow_Width*pm->schedule*pm->schedule/(PX_MESSAGEBOX_DEFAULT_STAGE_1_TIME*PX_MESSAGEBOX_DEFAULT_STAGE_1_TIME); + PX_GeoDrawRect(pSurface,(pm->window_Width-width)/2,(pm->window_Height-pm->PX_MESSAGEBOX_STAGE_1_HEIGHT)/2,(pm->window_Width+width)/2,(pm->window_Height+pm->PX_MESSAGEBOX_STAGE_1_HEIGHT)/2,backGroundColor); + } + else if(pm->scheduleschedule*pm->schedule/(PX_MESSAGEBOX_DEFAULT_STAGE_2_TIME*PX_MESSAGEBOX_DEFAULT_STAGE_2_TIME); + PX_GeoDrawRect(pSurface,0,(pm->window_Height-height)/2,pm->window_Width-1,(pm->window_Height+height)/2,backGroundColor); + } + else + { + PX_GeoDrawRect(pSurface,0,(pm->window_Height-pm->PX_MESSAGEBOX_STAGE_2_HEIGHT)/2,pm->window_Width-1,(pm->window_Height+pm->PX_MESSAGEBOX_STAGE_2_HEIGHT)/2,backGroundColor); + PX_GeoDrawRect(pSurface,0,(pm->window_Height-pm->PX_MESSAGEBOX_STAGE_2_HEIGHT)/2-30,pm->window_Width-1,(pm->window_Height-pm->PX_MESSAGEBOX_STAGE_2_HEIGHT)/2-10,backGroundColor); + PX_GeoDrawRect(pSurface,0,(pm->window_Height+pm->PX_MESSAGEBOX_STAGE_2_HEIGHT)/2+10,pm->window_Width-1,(pm->window_Height+pm->PX_MESSAGEBOX_STAGE_2_HEIGHT)/2+30,backGroundColor); + + if (pm->fontmodule) + { + PX_FontModuleDrawText(pSurface,pm->window_Width/2,pm->window_Height/2,(px_word *)pm->Message,frontColor,pm->fontmodule,PX_FONT_ALIGN_XCENTER); + } + else + { + PX_FontDrawText(pSurface,pm->window_Width/2,pm->window_Height/2,pm->Message,frontColor,PX_FONT_ALIGN_XCENTER); + } + + PX_ObjectRender(pSurface,pm->root,elpased); + } + + +} + +px_void PX_MessageBoxAlertOk(PX_MessageBox *pm,const px_char *message) +{ + pm->schedule=0; + pm->show=PX_TRUE; + pm->Message=message; + pm->mode=PX_MESSAGEBOX_MODE_EXPAND; + pm->btn_Cancel->Visible=PX_FALSE; + pm->btn_Ok->Visible=PX_TRUE; + + pm->function_yes=PX_NULL; + pm->function_no_ptr=PX_NULL; +} + +px_void PX_MessageBoxAlertOkEx(PX_MessageBox *pm,const px_char *message,PX_MessageBoxCallBack func_callback,px_void *ptr) +{ + pm->function_yes=func_callback; + pm->function_yes_ptr=ptr; + + pm->schedule=0; + pm->show=PX_TRUE; + pm->Message=message; + pm->mode=PX_MESSAGEBOX_MODE_EXPAND; + pm->btn_Cancel->Visible=PX_FALSE; + pm->btn_Ok->Visible=PX_TRUE;; +} + +px_void PX_MessageBoxAlert(PX_MessageBox *pm,const px_char *message) +{ + pm->schedule=0; + pm->show=PX_TRUE; + pm->Message=message; + pm->mode=PX_MESSAGEBOX_MODE_EXPAND; + pm->btn_Cancel->Visible=PX_FALSE; + pm->btn_Ok->Visible=PX_FALSE; + + pm->function_yes=PX_NULL; + pm->function_no_ptr=PX_NULL; +} + + + +px_void PX_MessageBoxAlertYesNo(PX_MessageBox *pm,const char *message) +{ + pm->schedule=0; + pm->show=PX_TRUE; + pm->Message=message; + pm->mode=PX_MESSAGEBOX_MODE_EXPAND; + pm->btn_Cancel->Visible=PX_TRUE; + pm->btn_Ok->Visible=PX_TRUE; + pm->function_yes=PX_NULL; + pm->function_no_ptr=PX_NULL; +} + + +px_void PX_MessageBoxAlertYesNoEx(PX_MessageBox *pm,const char *Message,PX_MessageBoxCallBack func_yescallback,px_void *yesptr,PX_MessageBoxCallBack func_nocallback,px_void *noptr) +{ + pm->function_yes=func_yescallback; + pm->function_no=func_nocallback; + pm->function_yes_ptr=yesptr; + pm->function_no_ptr=noptr; + + pm->schedule=0; + pm->show=PX_TRUE; + pm->Message=Message; + pm->mode=PX_MESSAGEBOX_MODE_EXPAND; + pm->btn_Cancel->Visible=PX_TRUE; + pm->btn_Ok->Visible=PX_TRUE; +} + +px_void PX_MessageBoxSetColorModule(PX_MessageBox *pm,PX_MESSAGEBOX_COLORMOD colormod) +{ + pm->colormod=colormod; + + switch(pm->colormod) + { + case PX_MESSAGEBOX_COLORMOD_LIGHT: + { + PX_Object_PushButtonSetTextColor(pm->btn_Ok,PX_COLOR(255,255,255,255)); + PX_Object_PushButtonSetBackgroundColor(pm->btn_Ok,PX_COLOR(255,0,0,0)); + PX_Object_PushButtonSetCursorColor(pm->btn_Ok,PX_COLOR(255,192,192,192)); + PX_Object_PushButtonSetPushColor(pm->btn_Ok,PX_COLOR(255,96,96,96)); + PX_Object_PushButtonSetBorderColor(pm->btn_Ok,PX_COLOR(255,128,128,128)); + PX_Object_PushButtonSetTextColor(pm->btn_Cancel,PX_COLOR(255,255,255,255)); + PX_Object_PushButtonSetBackgroundColor(pm->btn_Cancel,PX_COLOR(255,0,0,0)); + PX_Object_PushButtonSetCursorColor(pm->btn_Cancel,PX_COLOR(255,192,192,192)); + PX_Object_PushButtonSetPushColor(pm->btn_Cancel,PX_COLOR(255,96,96,96)); + PX_Object_PushButtonSetBorderColor(pm->btn_Cancel,PX_COLOR(255,128,128,128)); + } + break; + case PX_MESSAGEBOX_COLORMOD_NIGHT: + default: + { + PX_Object_PushButtonSetTextColor(pm->btn_Ok,PX_COLOR(255,0,0,0)); + PX_Object_PushButtonSetBackgroundColor(pm->btn_Ok,PX_COLOR(255,255,255,255)); + PX_Object_PushButtonSetCursorColor(pm->btn_Ok,PX_COLOR(255,192,192,192)); + PX_Object_PushButtonSetPushColor(pm->btn_Ok,PX_COLOR(255,96,96,96)); + PX_Object_PushButtonSetBorderColor(pm->btn_Ok,PX_COLOR(255,128,128,128)); + PX_Object_PushButtonSetTextColor(pm->btn_Cancel,PX_COLOR(255,0,0,0)); + PX_Object_PushButtonSetBackgroundColor(pm->btn_Cancel,PX_COLOR(255,255,255,255)); + PX_Object_PushButtonSetCursorColor(pm->btn_Cancel,PX_COLOR(255,192,192,192)); + PX_Object_PushButtonSetPushColor(pm->btn_Cancel,PX_COLOR(255,96,96,96)); + PX_Object_PushButtonSetBorderColor(pm->btn_Cancel,PX_COLOR(255,128,128,128)); + } + break; + } + +} + +px_void PX_MessageBoxSetFontModule(PX_MessageBox *pm,PX_FontModule *fm) +{ + pm->fontmodule=fm; +} + +PX_MESSAGEBOX_RETURN PX_MessageBoxGetLastReturn(PX_MessageBox *pm) +{ + PX_MESSAGEBOX_RETURN ret=pm->retVal; + pm->retVal=PX_MESSAGEBOX_RETURN_NONE; + return ret; +} diff --git a/code/PainterEngine/Architecture/PainterEngine_MessageBox.h b/code/PainterEngine/Architecture/PainterEngine_MessageBox.h new file mode 100644 index 0000000000000000000000000000000000000000..ec27e899d86e6435fbd93afed5cdf406ff668370 --- /dev/null +++ b/code/PainterEngine/Architecture/PainterEngine_MessageBox.h @@ -0,0 +1,67 @@ +#ifndef SS_MESSAGEBOX_H +#define SS_MESSAGEBOX_H + +#include "PainterEngine_Runtime.h" + +#define PX_MESSAGEBOX_DEFAULT_STAGE_1_HEIGHT 10 +#define PX_MESSAGEBOX_DEFAULT_STAGE_1_TIME 60 +#define PX_MESSAGEBOX_DEFAULT_STAGE_2_HEIGHT 200 +#define PX_MESSAGEBOX_DEFAULT_STAGE_2_TIME 240 + +typedef enum +{ + PX_MESSAGEBOX_MODE_EXPAND, + PX_MESSAGEBOX_MODE_CLOSE +}PX_MESSAGEBOX_MODE; + + +typedef enum +{ + PX_MESSAGEBOX_RETURN_NONE, + PX_MESSAGEBOX_RETURN_YES, + PX_MESSAGEBOX_RETURN_NO +}PX_MESSAGEBOX_RETURN; + +typedef enum +{ + PX_MESSAGEBOX_COLORMOD_LIGHT, + PX_MESSAGEBOX_COLORMOD_NIGHT, +}PX_MESSAGEBOX_COLORMOD; + +typedef px_void (*PX_MessageBoxCallBack)(px_void *ptr); + +typedef struct +{ + px_bool show; + px_int window_Width,window_Height; + PX_Runtime *runtime; + px_int schedule; + PX_MESSAGEBOX_RETURN retVal; + PX_MESSAGEBOX_MODE mode; + PX_MESSAGEBOX_COLORMOD colormod; + + px_int PX_MESSAGEBOX_STAGE_1_HEIGHT; + px_int PX_MESSAGEBOX_STAGE_2_HEIGHT; + + PX_MessageBoxCallBack function_yes,function_no; + px_void *function_yes_ptr,*function_no_ptr; + const px_char *Message; + PX_FontModule *fontmodule; + PX_Object *root,*btn_Ok,*btn_Cancel; +}PX_MessageBox; + + +px_bool PX_MessageBoxInitialize(PX_Runtime *runtime,PX_MessageBox *pm,PX_FontModule *fontmodule,px_int window_Width,px_int window_Height); +px_void PX_MessageBoxPostEvent(PX_MessageBox *pm,PX_Object_Event e); +px_void PX_MessageBoxUpdate(PX_MessageBox *pm,px_dword elpased); +px_void PX_MessageBoxClose(PX_MessageBox *pm); +px_void PX_MessageBoxRender(px_surface *pSurface,PX_MessageBox *pm,px_dword elpased); +px_void PX_MessageBoxAlertOk(PX_MessageBox *pm,const px_char *message); +px_void PX_MessageBoxAlertOkEx(PX_MessageBox *pm,const px_char *message,PX_MessageBoxCallBack func_callback,px_void *ptr); +px_void PX_MessageBoxAlert(PX_MessageBox *pm,const px_char *message); +px_void PX_MessageBoxAlertYesNo(PX_MessageBox *pm,const char *Message); +px_void PX_MessageBoxAlertYesNoEx(PX_MessageBox *pm,const char *Message,PX_MessageBoxCallBack func_yescallback,px_void *yesptr,PX_MessageBoxCallBack func_nocallback,px_void *noptr); +px_void PX_MessageBoxSetColorModule(PX_MessageBox *pm,PX_MESSAGEBOX_COLORMOD colormod); +px_void PX_MessageBoxSetFontModule(PX_MessageBox *pm,PX_FontModule *fm); +PX_MESSAGEBOX_RETURN SS_MessageBoxGetLastReturn(PX_MessageBox *pm); +#endif \ No newline at end of file diff --git a/code/PainterEngine/Architecture/PainterEngine_Runtime.c b/code/PainterEngine/Architecture/PainterEngine_Runtime.c new file mode 100644 index 0000000000000000000000000000000000000000..759a3edec406615a083347a815fd19735d32c856 --- /dev/null +++ b/code/PainterEngine/Architecture/PainterEngine_Runtime.c @@ -0,0 +1,72 @@ +#include "PainterEngine_Runtime.h" + + +px_void PE_MP_ErrorCall(PX_MEMORYPOOL_ERROR err) +{ + switch(err) + { + case PX_MEMORYPOOL_ERROR_INVALID_ACCESS: + PX_ERROR("Memory access error"); + break; + case PX_MEMORYPOOL_ERROR_INVALID_ADDRESS: + PX_ERROR("Memory address error"); + break; + case PX_MEMORYPOOL_ERROR_OUTOFMEMORY: + PX_ERROR("Out of memory"); + break; + } +} + + + +px_bool PX_RuntimeInitialize(PX_Runtime *pe,px_int width,px_int height,px_void *runtime_memoryPtr,px_uint size,px_uint ui_size,px_uint resource_size,px_uint game_size) +{ + pe->width=width; + pe->height=height; + + pe->mp=MP_Create(runtime_memoryPtr,size); + pe->mp_ui=MP_Create(MP_Malloc(&pe->mp,ui_size),ui_size); + pe->mp_resources=MP_Create(MP_Malloc(&pe->mp,resource_size),resource_size); + pe->mp_game=MP_Create(MP_Malloc(&pe->mp,game_size),game_size); + + + MP_ErrorCatch(&pe->mp_ui,PE_MP_ErrorCall); + MP_ErrorCatch(&pe->mp_resources,PE_MP_ErrorCall); + MP_ErrorCatch(&pe->mp_game,PE_MP_ErrorCall); + + //resources + if(!PX_ResourceLibraryInit(&pe->mp_resources,&pe->ResourceLibrary))return PX_FALSE; + //surface + if (width==0||height==0) + { + pe->RenderSurface.height=0; + pe->RenderSurface.width=0; + pe->RenderSurface.surfaceBuffer=PX_NULL; + pe->RenderSurface.MP=PX_NULL; + } + else + { + if(!PX_SurfaceCreate(&pe->mp,width,height,&pe->RenderSurface)) + { + return PX_FALSE; + } + PX_SurfaceClear(&pe->RenderSurface,0,0,pe->RenderSurface.width-1,pe->RenderSurface.height-1,PX_COLOR(255,255,255,255)); + } + + return PX_TRUE; +} + +px_memorypool PX_RuntimeCreateCalcMemoryPool(PX_Runtime *pe) +{ + return MP_Create(MP_Malloc(&pe->mp,PE_MEMORY_CALC_SIZE),PE_MEMORY_CALC_SIZE); +} + +px_void PX_RuntimeFreeCalcMemoryPool(PX_Runtime *pe,px_memorypool mp) +{ + MP_Free(&pe->mp,mp.StartAddr); +} + +px_void PX_RuntimeRenderClear(PX_Runtime *runtime,px_color color) +{ + PX_SurfaceClear(&runtime->RenderSurface,0,0,runtime->RenderSurface.width-1,runtime->RenderSurface.height-1,color); +} diff --git a/code/PainterEngine/Architecture/PainterEngine_Runtime.h b/code/PainterEngine/Architecture/PainterEngine_Runtime.h new file mode 100644 index 0000000000000000000000000000000000000000..6223c18e07f464ba7de74f2df881a23df5c89fc6 --- /dev/null +++ b/code/PainterEngine/Architecture/PainterEngine_Runtime.h @@ -0,0 +1,26 @@ +#ifndef PAINTERENGINE_RUNTIME_H +#define PAINTERENGINE_RUNTIME_H + +#include "../Kernel/PX_Kernel.h" + +#define PE_MEMORY_CALC_SIZE 1024*1024*2//2M + +typedef struct +{ + px_int width; + px_int height; + px_memorypool mp; + px_memorypool mp_ui; + px_memorypool mp_resources; + px_memorypool mp_game; + px_memorypool partical_mp,explode_mp; + PX_ResourceLibrary ResourceLibrary; + px_surface RenderSurface; +}PX_Runtime; + + +px_bool PX_RuntimeInitialize(PX_Runtime *pe,px_int surface_width,px_int surface_height,px_void *runtime_memoryPtr,px_uint size,px_uint ui_size,px_uint resource_size,px_uint game_size); +px_memorypool PX_RuntimeCreateCalcMemoryPool(PX_Runtime *pe); +px_void PX_RuntimeFreeCalcMemoryPool(PX_Runtime *pe,px_memorypool mp); +px_void PX_RuntimeRenderClear(PX_Runtime *runtime,px_color color); +#endif diff --git a/code/PainterEngine/Core/PX_3D.c b/code/PainterEngine/Core/PX_3D.c new file mode 100644 index 0000000000000000000000000000000000000000..aed5c8b7373701dd1a7b064a40b8601b7a5fe6b3 --- /dev/null +++ b/code/PainterEngine/Core/PX_3D.c @@ -0,0 +1,1153 @@ +#include "PX_3D.h" + +px_void PX_3D_RenderListTransform_LocalToGlobal(PX_3D_RenderList *list,PX_3D_World *world); +px_void PX_3D_RenderListTransform_Camera(PX_3D_RenderList *list,PX_3D_Camera *camera); +px_void PX_3D_RenderListCullRegion(PX_3D_RenderList *list,PX_3D_Camera *camera); +px_void PX_3D_RenderListCalculateNormal(PX_3D_RenderList *list); +px_void PX_3D_RenderListUpdateBackFace(PX_3D_RenderList *list,PX_3D_CULLMODE cullmode); +px_void PX_3D_RenderListTransform_Perspective(PX_3D_RenderList *list,PX_3D_Camera *camera); +px_void PX_3D_RenderListCullOutSide(PX_3D_RenderList *list,PX_3D_Camera *camera); +px_void PX_3D_RenderListTransform_Screen(PX_3D_RenderList *list,PX_3D_Camera *camera); +px_void PX_3D_CameraBuildEulerMatrix(PX_3D_Camera *camera,PX_3D_CAMERAROTMODE rotmode); +px_void PX_3D_CameraBuildUVNMatrix(PX_3D_Camera *camera); + + +px_void PX_3D_WorldInitialize(PX_3D_World *world,px_float x,px_float y,px_float z,px_float rotX,px_float rotY,px_float rotZ,px_float scale) +{ + px_matrix mrotx,mroty,mrotz,mscale,mtrans; + PX_MatrixIdentity(&world->mat); + PX_MatrixRotateX(&mrotx,rotX); + PX_MatrixRotateY(&mroty,rotY); + PX_MatrixRotateZ(&mrotz,rotZ); + PX_MatrixScale(&mscale,scale,scale,scale); + PX_MatrixTranslation(&mtrans,x,y,z); + + world->mat=PX_MatrixMultiply(world->mat,mscale); + world->mat=PX_MatrixMultiply(world->mat,mrotx); + world->mat=PX_MatrixMultiply(world->mat,mroty); + world->mat=PX_MatrixMultiply(world->mat,mrotz); + world->mat=PX_MatrixMultiply(world->mat,mtrans); + +} + +px_bool PX_3D_CameraEulerInitialize(px_memorypool *mp,PX_3D_Camera *camera,px_point4D cameraPosition,px_float rotX,px_float rotY,px_float rotZ,px_float near,px_float far,px_float fov,px_float viewPortWidth,px_float viewPortHeight) +{ + PX_memset(camera,0,sizeof(PX_3D_Camera)); + camera->mp=mp; + camera->type=PX_3D_CAMERA_TYPE_EULER; + camera->position=cameraPosition; + camera->rotDirection.x=rotX; + camera->rotDirection.y=rotY; + camera->rotDirection.z=rotZ; + + camera->near_z=near; + camera->far_z=far; + + camera->viewport_width=viewPortWidth; + camera->viewport_height=viewPortHeight; + + camera->viewport_center_x=(viewPortWidth-1)/2; + camera->viewport_center_y=(viewPortHeight-1)/2; + + camera->aspect_ratio=viewPortWidth/(px_float)viewPortHeight; + + PX_MatrixIdentity(&camera->mat_cam); + PX_MatrixIdentity(&camera->mat_per); + PX_MatrixIdentity(&camera->mat_scr); + + camera->fov=fov; + camera->viewplane_width=2.0f; + camera->viewplane_height=2.0f/camera->aspect_ratio; + + + if (fov==90) + { + camera->d=1; + } + else + { + camera->d=(0.5f)*(camera->viewplane_width)*PX_tan_angle(fov); + } + camera->zbuffer=(px_float *)MP_Malloc(mp,(px_int)(sizeof(px_float)*camera->viewport_height*camera->viewport_width)); + return camera->zbuffer!=PX_NULL; +} + +px_bool PX_3D_CameraUVNInitialize(px_memorypool *mp,PX_3D_Camera *camera,px_point4D cameraPosition,px_point4D cameraTarget,px_float near,px_float far,px_float fov,px_float viewPortWidth,px_float viewPortHeight) +{ + PX_memset(camera,0,sizeof(PX_3D_Camera)); + camera->type=PX_3D_CAMERA_TYPE_UVN; + camera->position=cameraPosition; + camera->targetDirection=cameraTarget; + camera->near_z=near; + camera->far_z=far; + camera->mp=mp; + camera->viewport_width=viewPortWidth; + camera->viewport_height=viewPortHeight; + + camera->viewport_center_x=(viewPortWidth-1)/2; + camera->viewport_center_y=(viewPortHeight-1)/2; + + camera->aspect_ratio=viewPortWidth/(px_float)viewPortHeight; + + PX_MatrixIdentity(&camera->mat_cam); + PX_MatrixIdentity(&camera->mat_per); + PX_MatrixIdentity(&camera->mat_scr); + + camera->fov=fov; + camera->viewplane_width=2.0f; + camera->viewplane_height=2.0f/camera->aspect_ratio; + + if (fov==90) + { + camera->d=1; + } + else + { + camera->d=(0.5f)*(camera->viewplane_width)*PX_tan_angle(fov); + } + camera->zbuffer=(px_float *)MP_Malloc(mp,(px_int)(sizeof(px_float)*camera->viewport_height*camera->viewport_width)); + return camera->zbuffer!=PX_NULL; +} + +px_void PX_3D_CameraSetPosition(PX_3D_Camera *camera,px_point4D cameraPosition,px_point4D cameraTarget) +{ + camera->position=cameraPosition; + camera->targetDirection=cameraTarget; +} + +px_void PX_3D_CameraBuildEulerMatrix(PX_3D_Camera *camera,PX_3D_CAMERAROTMODE rotmode) +{ + px_matrix mt_inv,mx_inv,my_inv,mz_inv,mrot,mtmp; + px_float theta_x=camera->rotDirection.x; + px_float theta_y=camera->rotDirection.y; + px_float theta_z=camera->rotDirection.z; + + PX_MatrixIdentity(&mt_inv); + mt_inv._41=-camera->position.x; + mt_inv._42=-camera->position.y; + mt_inv._43=-camera->position.z; + + + PX_MatrixRotateX(&mx_inv,-theta_x); + PX_MatrixRotateY(&my_inv,-theta_y); + PX_MatrixRotateZ(&mz_inv,-theta_z); + + + switch(rotmode) + { + case PX_3D_CAMERAROTMODE_XYZ: + { + mtmp=PX_MatrixMultiply(mx_inv,my_inv); + mrot=PX_MatrixMultiply(mtmp,mz_inv); + } + break; + case PX_3D_CAMERAROTMODE_YXZ: + { + mtmp=PX_MatrixMultiply(my_inv,mx_inv); + mrot=PX_MatrixMultiply(mtmp,mz_inv); + } + break; + case PX_3D_CAMERAROTMODE_XZY: + { + mtmp=PX_MatrixMultiply(mx_inv,mz_inv); + mrot=PX_MatrixMultiply(mtmp,my_inv); + } + break; + case PX_3D_CAMERAROTMODE_YZX: + { + mtmp=PX_MatrixMultiply(my_inv,mz_inv); + mrot=PX_MatrixMultiply(mtmp,mx_inv); + } + break; + case PX_3D_CAMERAROTMODE_ZYX: + { + mtmp=PX_MatrixMultiply(mz_inv,my_inv); + mrot=PX_MatrixMultiply(mtmp,mx_inv); + } + break; + case PX_3D_CAMERAROTMODE_ZXY: + { + mtmp=PX_MatrixMultiply(mz_inv,mx_inv); + mrot=PX_MatrixMultiply(mtmp,my_inv); + } + break; + } + camera->mat_cam=PX_MatrixMultiply(mt_inv,mrot); +} + +px_void PX_3D_CameraBuildUVNMatrix(PX_3D_Camera *camera) +{ + px_matrix mt_inv; + px_matrix mt_uvn; + px_point4D u,v,n; + + PX_MatrixIdentity(&mt_inv); + mt_inv._41=-camera->position.x; + mt_inv._42=-camera->position.y; + mt_inv._43=-camera->position.z; + + n.x=camera->targetDirection.x-camera->position.x; + n.y=camera->targetDirection.y-camera->position.y; + n.z=camera->targetDirection.z-camera->position.z; + n.w=1; + + n=PX_Point4DUnit(n); + v=PX_POINT4D(0,1,0); + u=PX_Point4DCross(v,n); + + PX_MatrixZero(&mt_uvn); + mt_uvn._11=u.x; + mt_uvn._12=v.x; + mt_uvn._13=n.x; + + mt_uvn._21=u.y; + mt_uvn._22=v.y; + mt_uvn._23=n.y; + + mt_uvn._31=u.z; + mt_uvn._32=v.z; + mt_uvn._33=n.z; + + mt_uvn._44=1; + camera->mat_cam=PX_MatrixMultiply(mt_inv,mt_uvn); +} + +px_void PX_3D_RenderListUpdateBackFace(PX_3D_RenderList *list,PX_3D_CULLMODE cullmode) +{ + px_int i,j; + PX_3D_Face *pface=PX_NULL; + px_float dot; + px_bool bBackFace; + px_vector4D v1,v2; + for (i=0;ifacestream.size;i++) + { + bBackFace=PX_TRUE; + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + v1=pface->transform_vertex[0].normal; + for (j=0;j<3;j++) + { + v2=pface->transform_vertex[j].position; + dot=PX_Point4DDot(v1,v2); + if (cullmode==PX_3D_CULLMODE_NONE) + { + bBackFace=PX_FALSE; + } + else + { + if (dot>0) + { + if (cullmode!=PX_3D_CULLMODE_CCW) + { + bBackFace=PX_FALSE; + break; + } + } + else + { + if (cullmode!=PX_3D_CULLMODE_CW) + { + bBackFace=PX_FALSE; + break; + } + } + } + } + if (bBackFace) + { + pface->state|=PX_3D_FACESTATE_BACKFACE; + } + else + { + pface->state&=~PX_3D_FACESTATE_BACKFACE; + } + } +} + +px_void PX_3D_RenderListCalculateNormal(PX_3D_RenderList *list) +{ + px_int i; + PX_3D_Face *pface=PX_NULL; + px_vector4D v1,v2; + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + v1=PX_Point4DSub(pface->transform_vertex[1].position,pface->transform_vertex[0].position); + v2=PX_Point4DSub(pface->transform_vertex[2].position,pface->transform_vertex[1].position); + pface->transform_vertex[0].normal=PX_Point4DCross(v1,v2); + pface->transform_vertex[1].normal=pface->transform_vertex[0].normal; + pface->transform_vertex[2].normal=pface->transform_vertex[0].normal; + } +} + +px_void PX_3D_RenderListTransform_Screen(PX_3D_RenderList *list,PX_3D_Camera *camera) +{ + px_int i; + PX_3D_Face *pface=PX_NULL; + px_float alpha=(0.5f*camera->viewport_width-0.5f); + px_float beta=(0.5f*camera->viewport_height-0.5f); + + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + + pface->transform_vertex[0].position.x=alpha+alpha*pface->transform_vertex[0].position.x; + pface->transform_vertex[0].position.y=beta+beta*pface->transform_vertex[0].position.y; + + pface->transform_vertex[1].position.x=alpha+alpha*pface->transform_vertex[1].position.x; + pface->transform_vertex[1].position.y=beta+beta*pface->transform_vertex[1].position.y; + + pface->transform_vertex[2].position.x=alpha+alpha*pface->transform_vertex[2].position.x; + pface->transform_vertex[2].position.y=beta+beta*pface->transform_vertex[2].position.y; + + //inv y + pface->transform_vertex[0].position.y=-pface->transform_vertex[0].position.y+camera->viewport_height; + pface->transform_vertex[1].position.y=-pface->transform_vertex[1].position.y+camera->viewport_height; + pface->transform_vertex[2].position.y=-pface->transform_vertex[2].position.y+camera->viewport_height; + } +} + + + +px_void PX_3D_RenderListPixelShader(px_surface *psurface,px_int x,px_int y,px_float z,px_float u,px_float v,px_point4D normal,px_texture *pTexture,px_color color/*px_float *zbuffer,px_int zw*/) +{ + //texture mapping + px_double SampleX,SampleY,mapX,mapY; + px_double mixa,mixr,mixg,mixb,Weight; + px_color sampleColor; + px_int resWidth; + px_int resHeight; + + + + if (pTexture) + { + resWidth=pTexture->width; + resHeight=pTexture->height; + u=PX_ABS(u); + v=PX_ABS(v); + u-=(px_int)u; + v-=(px_int)v; + + mapX=u*resWidth; + mapY=(1-v)*resHeight; + + if (mapX<-0.5||mapX>resWidth+0.5) + { + return; + } + if (mapY<-0.5||mapY>resHeight+0.5) + { + return; + } + mixa=0; + mixr=0; + mixg=0; + mixb=0; + //Sample 4 points + //lt + + SampleX=(mapX-0.5f); + SampleY=(mapY-0.5f); + + if (SampleX>0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)255?mixa=255:0; + mixr>255?mixr=255:0; + mixg>255?mixg=255:0; + mixb>255?mixb=255:0; + + PX_SurfaceDrawPixel(psurface,x,y,PX_COLOR((px_uchar)mixa,(px_uchar)mixr,(px_uchar)mixg,(px_uchar)mixb)); + + } + + if (color._argb.ucolor!=0) + { + PX_SurfaceDrawPixel(psurface,x,y,color); + + } +} + +static px_void PX_3D_RenderListRasterization(px_surface *psurface,PX_3D_RenderList *pList,PX_3D_Vertex p0,PX_3D_Vertex p1,PX_3D_Vertex p2,px_texture *ptexture,px_color color,px_float zbuffer[],px_int zw) +{ + px_int ix,iy; + px_bool k01infinite=PX_FALSE; + px_bool k02infinite=PX_FALSE; + px_bool k12infinite=PX_FALSE; + px_float k01,b01,k02,b02,k12,b12; + px_float x0; + px_float y0; + px_float z0; + px_float s0; + px_float t0; + + px_float x1; + px_float y1; + px_float z1; + px_float s1; + px_float t1; + + px_float x2; + px_float y2; + px_float z2; + px_float s2; + px_float t2; + + + px_float x, y, xleft, xright; + px_float oneoverz_left, oneoverz_right; + px_float oneoverz_top, oneoverz_bottom; + px_float oneoverz, oneoverz_step; + px_float soverz_top, soverz_bottom; + px_float toverz_top, toverz_bottom; + px_float soverz_left, soverz_right; + px_float toverz_left, toverz_right; + px_float soverz, soverz_step; + px_float toverz, toverz_step; + px_float s, t; + px_float btmy,midy; + px_float originalZ; + + + + if (p1.position.ybtmy) + { + midy=p1.position.y; + btmy=p2.position.y; + } + + do + { + px_float x01m; + + x0=p0.position.x; + y0=p0.position.y; + x1=p1.position.x; + y1=p1.position.y; + x2=p2.position.x; + y2=p2.position.y; + + + if (x0==x1) + { + x01m=x0; + } + else + { + k01=(y0-y1)/(x0-x1); + b01=y0-k01*x0; + x01m=(y2-b01)/k01; + } + + if (x01m>x2) + { + PX_3D_Vertex t; + t=p2; + p2=p1; + p1=t; + } + } while (0); + +// p0 +// p1 p2 + + x0=p0.position.x; + y0=p0.position.y; + z0=p0.position.z; + s0=p0.u; + t0=p0.v; + + x1=p1.position.x; + y1=p1.position.y; + z1=p1.position.z; + s1=p1.u; + t1=p1.v; + + x2=p2.position.x; + y2=p2.position.y; + z2=p2.position.z; + s2=p2.u; + t2=p2.v; + + k01infinite=PX_FALSE; + k02infinite=PX_FALSE; + k12infinite=PX_FALSE; + if (x0==x1) + { + k01infinite=PX_TRUE; + b01=x0; + } + else + { + k01=(y0-y1)/(x0-x1); + b01=y0-k01*x0; + } + + if (x0==x2) + { + k02infinite=PX_TRUE; + b02=x0; + } + else + { + k02=(y0-y2)/(x0-x2); + b02=y0-k02*x0; + } + + if (x1==x2) + { + k12infinite=PX_TRUE; + b12=x0; + } + else + { + k12=(y1-y2)/(x1-x2); + b12=y1-k12*x1; + } + + + for(y = y0; y < midy; y++) + { + if (k01infinite) + { + xleft=b01; + } + else + { + xleft = (y-b01)/k01; + } + + if (k02infinite) + { + xright=b02; + } + else + { + xright = (y-b02)/k02; + } + + + oneoverz_top = 1.0f / z0; + oneoverz_bottom = 1.0f/z1; + oneoverz_left = (y-y0) * (oneoverz_bottom-oneoverz_top) / (y1-y0) + oneoverz_top; + oneoverz_bottom = 1.0f / z2; + oneoverz_right = (y-y0) * (oneoverz_bottom-oneoverz_top) / (y2-y0) + oneoverz_top; + oneoverz_step = (oneoverz_right-oneoverz_left) / (xright-xleft); + soverz_top = s0 / z0; + soverz_bottom = s1 / z1; + soverz_left = (y-y0) * (soverz_bottom-soverz_top) / (y1-y0) + soverz_top; + soverz_bottom = s2 / z2; + soverz_right = (y-y0) * (soverz_bottom-soverz_top) / (y2-y0) + soverz_top; + soverz_step = (soverz_right-soverz_left) / (xright-xleft); + toverz_top = t0 / z0; + toverz_bottom = t1 / z1; + toverz_left = (y-y0) * (toverz_bottom-toverz_top) / (y1-y0) + toverz_top; + toverz_bottom = t2 / z2; + toverz_right = (y-y0) * (toverz_bottom-toverz_top) / (y2-y0) + toverz_top; + toverz_step = (toverz_right-toverz_left) / (xright-xleft); + for(x = xleft, oneoverz = oneoverz_left,soverz = soverz_left, toverz = toverz_left;x < xright; ++x, oneoverz += oneoverz_step,soverz += soverz_step, toverz += toverz_step) + { + s = soverz / oneoverz; + t = toverz / oneoverz; + originalZ=1.0f/oneoverz; + + ix=(px_int)x; + iy=(px_int)y; + + if (zbuffer[ix+iy*zw]!=0&&zbuffer[ix+iy*zw]pixelShader) + { + pList->pixelShader(psurface,ix,iy,s,t,p0.normal,ptexture,color/*,zbuffer,zw*/); + } + else + { + PX_3D_RenderListPixelShader(psurface,ix,iy,originalZ,s,t,p0.normal,ptexture,color/*,zbuffer,zw*/); + } + + } + } + + //inv p0 + p0.position.y=2*midy-p0.position.y; + if (p1.position.ybtmy) + { + midy=p1.position.y; + btmy=p2.position.y; + } + + do + { + px_float x01m; + + x0=p0.position.x; + y0=p0.position.y; + x1=p1.position.x; + y1=p1.position.y; + x2=p2.position.x; + y2=p2.position.y; + + + if (x0==x1) + { + x01m=x0; + } + else + { + k01=(y0-y1)/(x0-x1); + b01=y0-k01*x0; + x01m=(y2-b01)/k01; + } + + if (x01m>x2) + { + PX_3D_Vertex t; + t=p2; + p2=p1; + p1=t; + } + } while (0); + + // p0 + // p1 p2 + + x0=p0.position.x; + y0=p0.position.y; + z0=p0.position.z; + s0=p0.u; + t0=p0.v; + + x1=p1.position.x; + y1=p1.position.y; + z1=p1.position.z; + s1=p1.u; + t1=p1.v; + + x2=p2.position.x; + y2=p2.position.y; + z2=p2.position.z; + s2=p2.u; + t2=p2.v; + + k01infinite=PX_FALSE; + k02infinite=PX_FALSE; + k12infinite=PX_FALSE; + + if (x0==x1) + { + k01infinite=PX_TRUE; + b01=x0; + } + else + { + k01=(y0-y1)/(x0-x1); + b01=y0-k01*x0; + } + + if (x0==x2) + { + k02infinite=PX_TRUE; + b02=x0; + } + else + { + k02=(y0-y2)/(x0-x2); + b02=y0-k02*x0; + } + + if (x1==x2) + { + k12infinite=PX_TRUE; + b12=x0; + } + else + { + k12=(y1-y2)/(x1-x2); + b12=y1-k12*x1; + } + + + for(y = midy; y > y0; y--) + { + if (k01infinite) + { + xleft=b01; + } + else + { + xleft = (y-b01)/k01; + } + + if (k02infinite) + { + xright=b02; + } + else + { + xright = (y-b02)/k02; + } + + oneoverz_top = 1.0f / z0; + oneoverz_bottom = 1.0f/z1; + oneoverz_left = (y-y0) * (oneoverz_bottom-oneoverz_top) / (y1-y0) + oneoverz_top; + oneoverz_bottom = 1.0f / z2; + oneoverz_right = (y-y0) * (oneoverz_bottom-oneoverz_top) / (y2-y0) + oneoverz_top; + oneoverz_step = (oneoverz_right-oneoverz_left) / (xright-xleft); + soverz_top = s0 / z0; + soverz_bottom = s1 / z1; + soverz_left = (y-y0) * (soverz_bottom-soverz_top) / (y1-y0) + soverz_top; + soverz_bottom = s2 / z2; + soverz_right = (y-y0) * (soverz_bottom-soverz_top) / (y2-y0) + soverz_top; + soverz_step = (soverz_right-soverz_left) / (xright-xleft); + toverz_top = t0 / z0; + toverz_bottom = t1 / z1; + toverz_left = (y-y0) * (toverz_bottom-toverz_top) / (y1-y0) + toverz_top; + toverz_bottom = t2 / z2; + toverz_right = (y-y0) * (toverz_bottom-toverz_top) / (y2-y0) + toverz_top; + toverz_step = (toverz_right-toverz_left) / (xright-xleft); + for(x = xleft, oneoverz = oneoverz_left,soverz = soverz_left, toverz = toverz_left;x < xright; ++x, oneoverz += oneoverz_step,soverz += soverz_step, toverz += toverz_step) + { + originalZ=1.0f/oneoverz; + s = soverz / oneoverz; + t = toverz / oneoverz; + + ix=(px_int)x; + iy=(px_int)(2*midy-y); + + if (zbuffer[ix+iy*zw]!=0&&zbuffer[ix+iy*zw]pixelShader) + { + pList->pixelShader(psurface,ix,iy,s,t,p0.normal,ptexture,color/*,zbuffer,zw*/); + } + else + { + PX_3D_RenderListPixelShader(psurface,ix,iy,originalZ,s,t,p0.normal,ptexture,color/*,zbuffer,zw*/); + } + + } + } + +} + + + + + + +px_void PX_3D_Scene(PX_3D_RenderList *list,PX_3D_World *world,PX_3D_Camera *camera) +{ + PX_3D_CULLMODE cullmode; + PX_memset(camera->zbuffer,0,(px_int)(sizeof(px_float)*camera->viewport_height*camera->viewport_width)); + cullmode=list->cullmode; + PX_3D_RenderListTransform_LocalToGlobal(list,world); + switch (camera->type) + { + case PX_3D_CAMERA_TYPE_EULER: + PX_3D_CameraBuildEulerMatrix(camera,PX_3D_CAMERAROTMODE_XYZ); + break; + case PX_3D_CAMERA_TYPE_UVN: + PX_3D_CameraBuildUVNMatrix(camera); + break; + } + PX_3D_RenderListTransform_Camera(list,camera); + PX_3D_RenderListCullRegion(list,camera); + PX_3D_RenderListCalculateNormal(list); + PX_3D_RenderListUpdateBackFace(list,cullmode); + PX_3D_RenderListTransform_Perspective(list,camera); + PX_3D_RenderListCullOutSide(list,camera); + PX_3D_RenderListTransform_Screen(list,camera); +} + +px_void PX_3D_Present(px_surface *psurface, PX_3D_RenderList *list,PX_3D_Camera *camera) +{ + px_int i; + PX_3D_Face *pface=PX_NULL; + px_texture *ptex; + px_color clr; + + + if (list->PX_3D_PRESENTMODE&PX_3D_PRESENTMODE_PURE) + { + if (list->facestream.size) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,0); + clr=pface->transform_vertex[0].clr; + } + else + { + clr._argb.ucolor=0; + } + } + else + { + clr._argb.ucolor=0; + } + + if (list->PX_3D_PRESENTMODE&PX_3D_PRESENTMODE_TEXTURE) + { + ptex=list->ptexture; + } + else + { + ptex=PX_NULL; + } + + if (ptex||clr._argb.ucolor) + { + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + if (!(pface->state&PX_3D_FACESTATE_BACKFACE||pface->state&PX_3D_FACESTATE_CLIPPED)) + { + if (list->PX_3D_PRESENTMODE&PX_3D_PRESENTMODE_PURE) + { + PX_3D_RenderListRasterization(psurface,list,pface->transform_vertex[0],pface->transform_vertex[1],pface->transform_vertex[2],list->ptexture,clr,camera->zbuffer,(px_int)camera->viewport_width); + } + else + { + PX_3D_RenderListRasterization(psurface,list,pface->transform_vertex[0],pface->transform_vertex[1],pface->transform_vertex[2],ptex,PX_COLOR(0,0,0,0),camera->zbuffer,(px_int)camera->viewport_width); + } + + } + + } + } + + if (list->PX_3D_PRESENTMODE&PX_3D_PRESENTMODE_LINE) + { + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + if (!(pface->state&PX_3D_FACESTATE_BACKFACE||pface->state&PX_3D_FACESTATE_CLIPPED)) + { + PX_GeoDrawLine(psurface,(px_int)pface->transform_vertex[0].position.x,(px_int)pface->transform_vertex[0].position.y,(px_int)pface->transform_vertex[1].position.x,(px_int)pface->transform_vertex[1].position.y,1,pface->transform_vertex[0].clr); + PX_GeoDrawLine(psurface,(px_int)pface->transform_vertex[1].position.x,(px_int)pface->transform_vertex[1].position.y,(px_int)pface->transform_vertex[2].position.x,(px_int)pface->transform_vertex[2].position.y,1,pface->transform_vertex[1].clr); + PX_GeoDrawLine(psurface,(px_int)pface->transform_vertex[2].position.x,(px_int)pface->transform_vertex[2].position.y,(px_int)pface->transform_vertex[0].position.x,(px_int)pface->transform_vertex[0].position.y,1,pface->transform_vertex[2].clr); + } + + } + } + + +} + +px_void PX_3D_RenderListSetPixelShader(PX_3D_RenderList *list,PX_3D_PixelShader func) +{ + list->pixelShader=func; +} + +px_void PX_3D_RenderListTransform_Perspective(PX_3D_RenderList *list,PX_3D_Camera *camera) +{ + px_int i; + PX_3D_Face *pface=PX_NULL; + for (i=0;ifacestream.size;i++) + { + px_float z; + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + z=pface->transform_vertex[0].position.z; + pface->transform_vertex[0].position.x=camera->d*pface->transform_vertex[0].position.x/z; + pface->transform_vertex[0].position.y=camera->d*pface->transform_vertex[0].position.y/z; + + z=pface->transform_vertex[1].position.z; + pface->transform_vertex[1].position.x=camera->d*pface->transform_vertex[1].position.x/z; + pface->transform_vertex[1].position.y=camera->d*pface->transform_vertex[1].position.y/z; + + z=pface->transform_vertex[2].position.z; + pface->transform_vertex[2].position.x=camera->d*pface->transform_vertex[2].position.x/z; + pface->transform_vertex[2].position.y=camera->d*pface->transform_vertex[2].position.y/z; + + } +} + +px_void PX_3D_RenderListCullOutSide(PX_3D_RenderList *list,PX_3D_Camera *camera) +{ + px_int i; + PX_3D_Face *pface=PX_NULL; + px_bool outside; + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + outside=PX_FALSE; + + if (pface->transform_vertex[0].position.y>camera->viewplane_height/2&&\ + pface->transform_vertex[1].position.y>camera->viewplane_height/2&&\ + pface->transform_vertex[2].position.y>camera->viewplane_height/2) + { + //up + outside=PX_TRUE; + } + else\ + if (pface->transform_vertex[0].position.y<-camera->viewplane_height/2&&\ + pface->transform_vertex[1].position.y<-camera->viewplane_height/2&&\ + pface->transform_vertex[2].position.y<-camera->viewplane_height/2) + { + //down + outside=PX_TRUE; + } + else \ + if (pface->transform_vertex[0].position.x<-camera->viewplane_width/2&&\ + pface->transform_vertex[1].position.x<-camera->viewplane_width/2&&\ + pface->transform_vertex[2].position.x<-camera->viewplane_width/2) + { + //left + outside=PX_TRUE; + } + else \ + if (pface->transform_vertex[0].position.x>camera->viewplane_width/2&&\ + pface->transform_vertex[1].position.x>camera->viewplane_width/2&&\ + pface->transform_vertex[2].position.x>camera->viewplane_width/2) + { + //right + outside=PX_TRUE; + } + + + if (outside) + { + pface->state|=PX_3D_FACESTATE_CLIPPED; + } + else + { + pface->state&=~PX_3D_FACESTATE_CLIPPED; + } + } +} + +px_void PX_3D_RenderListTransform_Camera(PX_3D_RenderList *list,PX_3D_Camera *camera) +{ + PX_3D_RenderListTransform(list,camera->mat_cam,PX_3D_RENDERLIST_TRANSFORM_GLOBAL_TO_GLOBAL); +} + +px_void PX_3D_RenderListCullRegion(PX_3D_RenderList *list,PX_3D_Camera *camera) +{ + px_int i,j; + PX_3D_Face *pface=PX_NULL; + px_bool outside; + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + outside=PX_FALSE; + for (j=0;j<3;j++) + { + //behind + if (pface->transform_vertex[j].position.z<=camera->near_z) + { + outside=PX_TRUE; + break; + } + } + if (pface->transform_vertex[0].position.z>camera->far_z&&\ + pface->transform_vertex[1].position.z>camera->far_z&&\ + pface->transform_vertex[2].position.z>camera->far_z) + { + outside=PX_TRUE; + } + if (outside) + { + pface->state|=PX_3D_FACESTATE_CLIPPED; + } + else + { + pface->state&=~PX_3D_FACESTATE_CLIPPED; + } + } +} + +px_void PX_3D_RenderListTransform(PX_3D_RenderList *list,px_matrix mat,PX_3D_RENDERLIST_TRANSFORM t) +{ + switch (t) + { + case PX_3D_RENDERLIST_TRANSFORM_LOCAL_TO_LOCAL: + { + px_int i; + PX_3D_Face *pface=PX_NULL; + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + pface->vertex[0].position=PX_Point4DMulMatrix(pface->vertex[0].position,mat); + pface->vertex[1].position=PX_Point4DMulMatrix(pface->vertex[1].position,mat); + pface->vertex[2].position=PX_Point4DMulMatrix(pface->vertex[2].position,mat); + } + } + break; + case PX_3D_RENDERLIST_TRANSFORM_LOACL_TO_GLOBAL: + { + px_int i; + PX_3D_Face *pface=PX_NULL; + + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + pface->transform_vertex[0]=pface->vertex[0]; + pface->transform_vertex[1]=pface->vertex[1]; + pface->transform_vertex[2]=pface->vertex[2]; + pface->transform_vertex[0].position=PX_Point4DMulMatrix(pface->vertex[0].position,mat); + pface->transform_vertex[1].position=PX_Point4DMulMatrix(pface->vertex[1].position,mat); + pface->transform_vertex[2].position=PX_Point4DMulMatrix(pface->vertex[2].position,mat); + } + } + break; + case PX_3D_RENDERLIST_TRANSFORM_GLOBAL_TO_GLOBAL: + { + px_int i; + PX_3D_Face *pface=PX_NULL; + + for (i=0;ifacestream.size;i++) + { + pface=PX_VECTORAT(PX_3D_Face,&list->facestream,i); + pface->transform_vertex[0].position=PX_Point4DMulMatrix(pface->transform_vertex[0].position,mat); + pface->transform_vertex[1].position=PX_Point4DMulMatrix(pface->transform_vertex[1].position,mat); + pface->transform_vertex[2].position=PX_Point4DMulMatrix(pface->transform_vertex[2].position,mat); + } + } + break; + } +} + + + +px_void PX_3D_RenderListReset(PX_3D_RenderList *list) +{ + PX_VectorClear(&list->facestream); +} + +px_void PX_3D_RenderListFree(PX_3D_RenderList *list) +{ + PX_VectorFree(&list->facestream); +} + +px_bool PX_3D_RenderListInitialize(px_memorypool *mp,PX_3D_RenderList *list,px_dword PX_3D_PRESENTMODE,PX_3D_CULLMODE cullmode,px_texture *ptexture) +{ + list->mp=mp; + list->ptexture=ptexture; + list->PX_3D_PRESENTMODE=PX_3D_PRESENTMODE; + list->cullmode=cullmode; + list->pixelShader=PX_NULL; + if(!PX_VectorInit(mp,&list->facestream,sizeof(PX_3D_Face),64)) + { + return PX_FALSE; + } + return PX_TRUE; + +} + +px_void PX_3D_CameraFree(PX_3D_Camera *camera) +{ + MP_Free(camera->mp,camera->zbuffer); +} + +px_bool PX_3D_RenderListPush(PX_3D_RenderList *list,PX_3D_Face face) +{ + if(!PX_VectorPushback(&list->facestream,&face))return PX_FALSE; + return PX_TRUE; +} + +px_void PX_3D_RenderListTransform_LocalToGlobal(PX_3D_RenderList *list,PX_3D_World *world) +{ + PX_3D_RenderListTransform(list,world->mat,PX_3D_RENDERLIST_TRANSFORM_LOACL_TO_GLOBAL); +} + diff --git a/code/PainterEngine/Core/PX_3D.h b/code/PainterEngine/Core/PX_3D.h new file mode 100644 index 0000000000000000000000000000000000000000..3df2829415bf762580ee46acf59faadae4f29683 --- /dev/null +++ b/code/PainterEngine/Core/PX_3D.h @@ -0,0 +1,139 @@ +#ifndef PX_3D_H +#define PX_3D_H + + +#include "PX_BaseGeo.h" +#include "PX_Vector.h" +#include "PX_Texture.h" + +#define PX_3D_FACESTATE_ACTIVE 1 +#define PX_3D_FACESTATE_CLIPPED 2 +#define PX_3D_FACESTATE_BACKFACE 4 + +typedef enum +{ + PX_3D_RENDERLIST_TRANSFORM_LOCAL_TO_LOCAL, + PX_3D_RENDERLIST_TRANSFORM_LOACL_TO_GLOBAL, + PX_3D_RENDERLIST_TRANSFORM_GLOBAL_TO_GLOBAL, +}PX_3D_RENDERLIST_TRANSFORM; + +typedef enum +{ + PX_3D_CAMERAROTMODE_XYZ, + PX_3D_CAMERAROTMODE_YXZ, + PX_3D_CAMERAROTMODE_XZY, + PX_3D_CAMERAROTMODE_YZX, + PX_3D_CAMERAROTMODE_ZYX, + PX_3D_CAMERAROTMODE_ZXY, +}PX_3D_CAMERAROTMODE; + +typedef enum +{ + PX_3D_CULLMODE_NONE, + PX_3D_CULLMODE_CW, + PX_3D_CULLMODE_CCW, +}PX_3D_CULLMODE; + +#define PX_3D_PRESENTMODE_LINE 1 +#define PX_3D_PRESENTMODE_TEXTURE 2 +#define PX_3D_PRESENTMODE_PURE 4 + +typedef px_void (*PX_3D_PixelShader)(px_surface *psurface,px_int x,px_int y,px_float u,px_float v,px_point4D normal,px_texture *pTexture,px_color color); +// typedef enum +// { +// PX_3D_FACEATTRIBUTE_2SIDED=1, +// PX_3D_FACEATTRIBUTE_TRANSPARENT=2, +// PX_3D_FACEATTRIBUTE_SHAPE_MODE_PURE=0x20, +// PX_3D_FACEATTRIBUTE_SHAPE_MODE_FLAT=0x40, +// PX_3D_FACEATTRIBUTE_SHAPE_MODE_GOURAUD=0x80, +// PX_3D_FACEATTRIBUTE_SHAPE_MODE_PHONG=0x100, +// }PX_3D_FACEATTRIBUTE; + +/* +typedef struct +{ + PX_3D_POLYSTATE state; + PX_3D_POLYATTRIBUTE attribute; + px_color clr; + px_point *list; + px_int vertex[3]; +}PX_3D_POLYINDEX; +*/ + + +typedef struct +{ + px_point4D position; + px_vector4D normal; + px_color clr; + px_float u,v; +}PX_3D_Vertex; + +typedef struct +{ + px_dword state; + PX_3D_Vertex vertex[3]; + PX_3D_Vertex transform_vertex[3]; +}PX_3D_Face; + +typedef struct +{ + px_memorypool *mp; + px_texture *ptexture; + px_vector facestream; + px_dword PX_3D_PRESENTMODE; + PX_3D_CULLMODE cullmode; + PX_3D_PixelShader pixelShader; +}PX_3D_RenderList; + +typedef struct +{ + px_matrix mat; +}PX_3D_World; + +typedef enum +{ + PX_3D_CAMERA_TYPE_EULER, + PX_3D_CAMERA_TYPE_UVN, +}PX_3D_CAMERA_TYPE; + +typedef struct +{ + PX_3D_CAMERA_TYPE type; + px_memorypool *mp; + px_float near_z,far_z; + + px_float fov; + px_float d; + + px_point4D position; + union + { + px_point4D targetDirection; + px_point4D rotDirection; + }; + px_float viewplane_width,viewplane_height; + px_float viewport_width,viewport_height,viewport_center_x,viewport_center_y; + px_float aspect_ratio; + + px_matrix mat_cam,mat_per,mat_scr; + + px_float *zbuffer; +}PX_3D_Camera; + + + +px_void PX_3D_WorldInitialize(PX_3D_World *world,px_float x,px_float y,px_float z,px_float rotX,px_float rotY,px_float rotZ,px_float scale); +px_bool PX_3D_CameraEulerInitialize(px_memorypool *mp,PX_3D_Camera *camera,px_point4D cameraPosition,px_float rotX,px_float rotY,px_float rotZ,px_float near,px_float far,px_float fov,px_float viewPortWidth,px_float viewPortHeight); +px_bool PX_3D_CameraUVNInitialize(px_memorypool *mp,PX_3D_Camera *camera,px_point4D cameraPosition,px_point4D cameraTarget,px_float near,px_float far,px_float fov,px_float viewPortWidth,px_float viewPortHeight); +px_void PX_3D_CameraSetPosition(PX_3D_Camera *camera,px_point4D cameraPosition,px_point4D cameraTarget); +px_bool PX_3D_RenderListInitialize(px_memorypool *mp,PX_3D_RenderList *list,px_dword PX_3D_PRESENTMODE,PX_3D_CULLMODE cullmode,px_texture *ptexture); +px_void PX_3D_CameraFree(PX_3D_Camera *camera); +px_bool PX_3D_RenderListPush(PX_3D_RenderList *list,PX_3D_Face face); +px_void PX_3D_RenderListTransform(PX_3D_RenderList *list,px_matrix mat,PX_3D_RENDERLIST_TRANSFORM t); +px_void PX_3D_RenderListReset(PX_3D_RenderList *list); +px_void PX_3D_RenderListFree(PX_3D_RenderList *list); +px_void PX_3D_Scene(PX_3D_RenderList *list,PX_3D_World *world,PX_3D_Camera *camera); +px_void PX_3D_Present(px_surface *psurface, PX_3D_RenderList *list,PX_3D_Camera *camera); +px_void PX_3D_RenderListSetPixelShader(PX_3D_RenderList *list,PX_3D_PixelShader func); +#endif diff --git a/code/PainterEngine/Core/PX_AES.c b/code/PainterEngine/Core/PX_AES.c new file mode 100644 index 0000000000000000000000000000000000000000..c029170029c6b5771a84c523b6da2ea2879d7454 --- /dev/null +++ b/code/PainterEngine/Core/PX_AES.c @@ -0,0 +1,448 @@ +#include "PX_AES.h" + +const AES_BYTE Sbox[][16]= +{ // populate the Sbox matrix + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /*0*/ {0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76}, + /*1*/ {0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0}, + /*2*/ {0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15}, + /*3*/ {0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75}, + /*4*/ {0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84}, + /*5*/ {0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf}, + /*6*/ {0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8}, + /*7*/ {0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2}, + /*8*/ {0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73}, + /*9*/ {0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb}, + /*a*/ {0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79}, + /*b*/ {0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08}, + /*c*/ {0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a}, + /*d*/ {0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e}, + /*e*/ {0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf}, + /*f*/ {0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16}, +}; + +const AES_BYTE iSbox[][16]= +{ // populate the iSbox matrix + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /*0*/ {0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb}, + /*1*/ {0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb}, + /*2*/ {0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e}, + /*3*/ {0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25}, + /*4*/ {0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92}, + /*5*/ {0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84}, + /*6*/ {0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06}, + /*7*/ {0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b}, + /*8*/ {0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73}, + /*9*/ {0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e}, + /*a*/ {0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b}, + /*b*/ {0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4}, + /*c*/ {0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f}, + /*d*/ {0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef}, + /*e*/ {0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61}, + /*f*/ {0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d} +}; + +const AES_BYTE Rcon[][4]= +{ + {0x00, 0x00, 0x00, 0x00}, + {0x01, 0x00, 0x00, 0x00}, + {0x02, 0x00, 0x00, 0x00}, + {0x04, 0x00, 0x00, 0x00}, + {0x08, 0x00, 0x00, 0x00}, + {0x10, 0x00, 0x00, 0x00}, + {0x20, 0x00, 0x00, 0x00}, + {0x40, 0x00, 0x00, 0x00}, + {0x80, 0x00, 0x00, 0x00}, + {0x1b, 0x00, 0x00, 0x00}, + {0x36, 0x00, 0x00, 0x00} +}; + +static px_bool PX_AES_i_Cipher(PX_AES *aesStruct,AES_BYTE input[PX_AES_BLOCK_BYTES_SIZE], AES_BYTE output[PX_AES_BLOCK_BYTES_SIZE]) /* encipher 16-bit input */; +static px_void PX_AES_i_InvCipher(PX_AES *aesStruct,AES_BYTE input[PX_AES_BLOCK_BYTES_SIZE], AES_BYTE output[PX_AES_BLOCK_BYTES_SIZE]) /* decipher 16-bit input */; +AES_BYTE* PX_AES_SubWord(PX_AES *aesStruct,AES_BYTE* word); +AES_BYTE* PX_AES_RotWord(PX_AES *aesStruct,AES_BYTE* word); + +px_void PX_AES_SetNbNkNr(PX_AES *aesStruct,PX_AES_KeySize keySize); +px_void PX_AES_KeyExpansion(PX_AES *aesStruct); +px_void PX_AES_AddRoundKey(PX_AES *aesStruct,px_int round); +px_void PX_AES_SubBytes(PX_AES *aesStruct); +px_void PX_AES_ShiftRows(PX_AES *aesStruct); +px_void PX_AES_InvShiftRows(PX_AES *aesStruct); +px_void PX_AES_MixColumns(PX_AES *aesStruct); +px_void PX_AES_InvSubBytes(PX_AES *aesStruct); +px_void PX_AES_InvMixColumns(PX_AES *aesStruct); + + +px_void PX_AES_Initialize(PX_AES *aesStruct,PX_AES_KeySize keySize,AES_BYTE keyByte[]) +{ + PX_AES_SetNbNkNr(aesStruct,keySize); + /*Bytes copied*/ + PX_memcpy(aesStruct->key,keyByte,aesStruct->Nk*4); + + PX_AES_KeyExpansion(aesStruct); // expand the seed key into a key schedule and store in w +} + +px_void PX_AES_SetNbNkNr(PX_AES *aesStruct, PX_AES_KeySize keySize ) +{ + aesStruct->Nb = 4; // block size always = 4 words = 16 bytes = 128 bits for AES + + if (keySize == PX_AES_KeySize_Bits128) + { + aesStruct->Nk = 4; // key size = 4 words = 16 bytes = 128 bits + aesStruct->Nr = 10; // rounds for algorithm = 10 + } + else if (keySize == PX_AES_KeySize_Bits192) + { + aesStruct->Nk = 6; // 6 words = 24 bytes = 192 bits + aesStruct->Nr = 12; + } + else if (keySize == PX_AES_KeySize_Bits256) + { + aesStruct->Nk = 8; // 8 words = 32 bytes = 256 bits + aesStruct->Nr = 14; + } +} + +px_void PX_AES_AddRoundKey(PX_AES *aesStruct, px_int round ) +{ + px_int r,c; + for (r = 0; r < 4; ++r) + { + for (c = 0; c < 4; ++c) + { + aesStruct->State[r][c] = (AES_BYTE) ( (px_int)aesStruct->State[r][c] ^ (px_int)aesStruct->w[(round*4)+c][r] ); + } + } +} + +px_void PX_AES_KeyExpansion(PX_AES *aesStruct) +{ + px_int row; + AES_BYTE temp[4]; + for (row = 0; row < aesStruct->Nk; ++row) + { + aesStruct->w[row][0] = aesStruct->key[4*row]; + aesStruct->w[row][1] = aesStruct->key[4*row+1]; + aesStruct->w[row][2] = aesStruct->key[4*row+2]; + aesStruct->w[row][3] = aesStruct->key[4*row+3]; + } + + + + for (row = aesStruct->Nk; row < aesStruct->Nb * (aesStruct->Nr+1); ++row) + { + temp[0] = aesStruct->w[row-1][0]; temp[1] = aesStruct->w[row-1][1]; + temp[2] = aesStruct->w[row-1][2]; temp[3] = aesStruct->w[row-1][3]; + + if (row % aesStruct->Nk == 0) + { + PX_memcpy(temp ,PX_AES_SubWord(aesStruct,PX_AES_RotWord(aesStruct,temp)),4); + + temp[0] = (AES_BYTE)( (px_int)temp[0] ^ (px_int)Rcon[row/aesStruct->Nk][0] ); + temp[1] = (AES_BYTE)( (px_int)temp[1] ^ (px_int)Rcon[row/aesStruct->Nk][1] ); + temp[2] = (AES_BYTE)( (px_int)temp[2] ^ (px_int)Rcon[row/aesStruct->Nk][2] ); + temp[3] = (AES_BYTE)( (px_int)temp[3] ^ (px_int)Rcon[row/aesStruct->Nk][3] ); + } + else if ( aesStruct->Nk > 6 && (row % aesStruct->Nk == 4) ) + { + PX_memcpy(temp,PX_AES_SubWord(aesStruct,temp),4); + } + + // w[row] = w[row-Nk] xor temp + aesStruct->w[row][0] = (AES_BYTE) ( (px_int)aesStruct->w[row-aesStruct->Nk][0] ^ (px_int)temp[0] ); + aesStruct->w[row][1] = (AES_BYTE) ( (px_int)aesStruct->w[row-aesStruct->Nk][1] ^ (px_int)temp[1] ); + aesStruct->w[row][2] = (AES_BYTE) ( (px_int)aesStruct->w[row-aesStruct->Nk][2] ^ (px_int)temp[2] ); + aesStruct->w[row][3] = (AES_BYTE) ( (px_int)aesStruct->w[row-aesStruct->Nk][3] ^ (px_int)temp[3] ); + + } // for loop +} + + +AES_BYTE* PX_AES_SubWord(PX_AES *aesStruct,AES_BYTE* word) +{ + static AES_BYTE result[4]; + result[0] = Sbox[ word[0] >> 4][word[0] & 0x0f ]; + result[1] = Sbox[ word[1] >> 4][word[1] & 0x0f ]; + result[2] = Sbox[ word[2] >> 4][word[2] & 0x0f ]; + result[3] = Sbox[ word[3] >> 4][word[3] & 0x0f ]; + return result; +} + +AES_BYTE* PX_AES_RotWord(PX_AES *aesStruct,AES_BYTE* word) +{ + static AES_BYTE result[4]; + result[0] = word[1]; + result[1] = word[2]; + result[2] = word[3]; + result[3] = word[0]; + return result; +} + + +static px_bool PX_AES_i_Cipher(PX_AES *aesStruct,AES_BYTE input[PX_AES_BLOCK_BYTES_SIZE], AES_BYTE output[PX_AES_BLOCK_BYTES_SIZE]) // encipher 16-bit input +{ + px_int i,round; + for ( i = 0; i < (4 * aesStruct->Nb); ++i) + { + aesStruct->State[i % 4][i / 4] = input[i]; + } + + PX_AES_AddRoundKey(aesStruct,0); + + for (round = 1; round <= (aesStruct->Nr - 1); ++round) // main round loop + { + PX_AES_SubBytes(aesStruct); + PX_AES_ShiftRows(aesStruct); + PX_AES_MixColumns(aesStruct); + PX_AES_AddRoundKey(aesStruct,round); + } // main round loop + + PX_AES_SubBytes(aesStruct); + PX_AES_ShiftRows(aesStruct); + PX_AES_AddRoundKey(aesStruct,aesStruct->Nr); + + // output = state + for (i = 0; i < (4 * aesStruct->Nb); ++i) + { + output[i] = aesStruct->State[i % 4][i / 4]; + } + return PX_TRUE; +} // Cipher() + +px_bool PX_AES_Cipher(PX_AES *aesStruct,px_byte input[16], px_byte output[16]) /* encipher 16-bit input */ +{ + return PX_AES_i_Cipher(aesStruct,(AES_BYTE *)input,(AES_BYTE *)output); +} + + + +px_void PX_AES_SubBytes(PX_AES *aesStruct) +{ + px_int r,c; + for ( r = 0; r < 4; ++r) + { + for (c = 0; c < 4; ++c) + { + aesStruct->State[r][c] = Sbox[ (aesStruct->State[r][c] >> 4)][(aesStruct->State[r][c] & 0x0f) ]; + } + } +} + + +px_void PX_AES_ShiftRows(PX_AES *aesStruct) +{ + AES_BYTE temp[4][4]; + px_int r,c; + for ( r = 0; r < 4; ++r) // copy State into temp[] + { + for ( c = 0; c < 4; ++c) + { + temp[r][c] = aesStruct->State[r][c]; + } + } + + for ( r = 1; r < 4; ++r) // shift temp into State + { + for ( c = 0; c < 4; ++c) + { + aesStruct->State[r][c] = temp[ r][ (c + r) % aesStruct->Nb ]; + } + } +} // ShiftRows() + + +px_void PX_AES_InvShiftRows(PX_AES *aesStruct) +{ + AES_BYTE temp[4][4]; + px_int r,c; + for (r = 0; r < 4; ++r) // copy State into temp[] + { + for (c = 0; c < 4; ++c) + { + temp[r][c] = aesStruct->State[r][c]; + } + } + for ( r = 1; r < 4; ++r) // shift temp into State + { + for ( c = 0; c < 4; ++c) + { + aesStruct->State[r][(c + r) % aesStruct->Nb ] = temp[r][c]; + } + } +} // InvShiftRows() + +/////////////////////////////////////////////////////////////////////////// +// GF(2^8) Operation.... +////////////////////////////////////////////////////////////////////////// +AES_BYTE PX_AES_gfmultby01(AES_BYTE b) +{ + return b; +} + +AES_BYTE PX_AES_gfmultby02(AES_BYTE b) +{ + if (b < 0x80) + return (AES_BYTE)(px_int)(b <<1); + else + return (AES_BYTE)( (px_int)(b << 1) ^ (px_int)(0x1b) ); +} + +AES_BYTE PX_AES_gfmultby03(AES_BYTE b) +{ + return (AES_BYTE) ( (px_int)PX_AES_gfmultby02(b) ^ (px_int)b ); +} + +AES_BYTE PX_AES_gfmultby09(AES_BYTE b) +{ + return (AES_BYTE)( (px_int)PX_AES_gfmultby02(PX_AES_gfmultby02(PX_AES_gfmultby02(b))) ^ + (px_int)b ); +} + +AES_BYTE PX_AES_gfmultby0b(AES_BYTE b) +{ + return (AES_BYTE)( (px_int)PX_AES_gfmultby02(PX_AES_gfmultby02(PX_AES_gfmultby02(b))) ^ + (px_int)PX_AES_gfmultby02(b) ^ + (px_int)b ); +} + +AES_BYTE PX_AES_gfmultby0d(AES_BYTE b) +{ + return (AES_BYTE)( (px_int)PX_AES_gfmultby02(PX_AES_gfmultby02(PX_AES_gfmultby02(b))) ^ + (px_int)PX_AES_gfmultby02(PX_AES_gfmultby02(b)) ^ + (px_int)(b) ); +} + +AES_BYTE PX_AES_gfmultby0e(AES_BYTE b) +{ + return (AES_BYTE)( (px_int)PX_AES_gfmultby02(PX_AES_gfmultby02(PX_AES_gfmultby02(b))) ^ + (px_int)PX_AES_gfmultby02(PX_AES_gfmultby02(b)) ^ + (px_int)PX_AES_gfmultby02(b) ); +} + +px_void PX_AES_MixColumns(PX_AES *aesStruct) +{ + AES_BYTE temp[4][4]; + px_int r,c; + for ( r = 0; r < 4; ++r) // copy State into temp[] + { + for ( c = 0; c < 4; ++c) + { + temp[r][c] = aesStruct->State[r][c]; + } + } + + for ( c = 0; c < 4; ++c) + { + aesStruct->State[0][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby02(temp[0][c]) ^ (px_int)PX_AES_gfmultby03(temp[1][c]) ^ + (px_int)PX_AES_gfmultby01(temp[2][c]) ^ (px_int)PX_AES_gfmultby01(temp[3][c]) ); + aesStruct->State[1][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby01(temp[0][c]) ^ (px_int)PX_AES_gfmultby02(temp[1][c]) ^ + (px_int)PX_AES_gfmultby03(temp[2][c]) ^ (px_int)PX_AES_gfmultby01(temp[3][c]) ); + aesStruct->State[2][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby01(temp[0][c]) ^ (px_int)PX_AES_gfmultby01(temp[1][c]) ^ + (px_int)PX_AES_gfmultby02(temp[2][c]) ^ (px_int)PX_AES_gfmultby03(temp[3][c]) ); + aesStruct->State[3][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby03(temp[0][c]) ^ (px_int)PX_AES_gfmultby01(temp[1][c]) ^ + (px_int)PX_AES_gfmultby01(temp[2][c]) ^ (px_int)PX_AES_gfmultby02(temp[3][c]) ); + } +} // MixColumns + +px_void PX_AES_InvMixColumns(PX_AES *aesStruct) +{ + AES_BYTE temp[4][4]; + px_int r,c; + for ( r = 0; r < 4; ++r) // copy State into temp[] + { + for ( c = 0; c < 4; ++c) + { + temp[r][c] =aesStruct->State[r][c]; + } + } + + for ( c = 0; c < 4; ++c) + { + aesStruct->State[0][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby0e(temp[0][c]) ^ (px_int)PX_AES_gfmultby0b(temp[1][c]) ^ + (px_int)PX_AES_gfmultby0d(temp[2][c]) ^ (px_int)PX_AES_gfmultby09(temp[3][c]) ); + aesStruct->State[1][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby09(temp[0][c]) ^ (px_int)PX_AES_gfmultby0e(temp[1][c]) ^ + (px_int)PX_AES_gfmultby0b(temp[2][c]) ^ (px_int)PX_AES_gfmultby0d(temp[3][c]) ); + aesStruct->State[2][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby0d(temp[0][c]) ^ (px_int)PX_AES_gfmultby09(temp[1][c]) ^ + (px_int)PX_AES_gfmultby0e(temp[2][c]) ^ (px_int)PX_AES_gfmultby0b(temp[3][c]) ); + aesStruct->State[3][c] = (AES_BYTE) ( (px_int)PX_AES_gfmultby0b(temp[0][c]) ^ (px_int)PX_AES_gfmultby0d(temp[1][c]) ^ + (px_int)PX_AES_gfmultby09(temp[2][c]) ^ (px_int)PX_AES_gfmultby0e(temp[3][c]) ); + } +} // InvMixColumns + +static px_void PX_AES_i_InvCipher(PX_AES *aesStruct,AES_BYTE input[PX_AES_BLOCK_BYTES_SIZE], AES_BYTE output[PX_AES_BLOCK_BYTES_SIZE]) // decipher 16-bit input +{ + px_int i,round; + + for (i = 0; i < (4 * aesStruct->Nb); ++i) + { + aesStruct->State[i % 4][i / 4] = input[i]; + } + + PX_AES_AddRoundKey(aesStruct,aesStruct->Nr); + + for (round = aesStruct->Nr-1; round >= 1; --round) // main round loop + { + PX_AES_InvShiftRows(aesStruct); + PX_AES_InvSubBytes(aesStruct); + PX_AES_AddRoundKey(aesStruct,round); + PX_AES_InvMixColumns(aesStruct); + } // end main round loop for InvCipher + + PX_AES_InvShiftRows(aesStruct); + PX_AES_InvSubBytes(aesStruct); + PX_AES_AddRoundKey(aesStruct,0); + + // output = state + for ( i = 0; i < (4 * aesStruct->Nb); ++i) + { + output[i] = aesStruct->State[i % 4][i / 4]; + } + +} // InvCipher() + + + +px_void PX_AES_InvCipher(PX_AES *aesStruct,px_byte input[16], px_byte output[16]) /* decipher 16-bit input */ +{ + PX_AES_i_InvCipher(aesStruct,(AES_BYTE *)input,(AES_BYTE *)output); +} + +px_void PX_AES_InvSubBytes(PX_AES *aesStruct) +{ + px_int r,c; + for (r = 0; r < 4; ++r) + { + for (c = 0; c < 4; ++c) + { + aesStruct->State[r][c] = iSbox[ (aesStruct->State[r][c] >> 4)][(aesStruct->State[r][c] & 0x0f) ]; + } + } +} // InvSubBytes + +px_bool PX_AES_CipherBuffer(PX_AES *aesStruct,px_byte input[],px_int size,px_byte output[]) +{ + px_int i; + if (size%16) + { + return PX_FALSE; + } + for (i=0;imp=mp; + pANN->LayerCount=0; + pANN->Layer=PX_NULL; + pANN->learningRate=learningRate; + pANN->regularzation=regularzation; + pANN->regularization_rate=regularization_rate; + return PX_TRUE; +} + +px_bool PX_ANNAddLayer(PX_ANN *pAnn,px_int Neurals,px_double bias,PX_ANN_ACTIVATION_FUNCTION activation,PX_ANN_LAYER_WEIGHT_INITMODE mode,px_double weight_c) +{ + px_int i; + PX_ANN_Layer *newLayer,*p; + + + newLayer=(PX_ANN_Layer *)MP_Malloc(pAnn->mp,sizeof(PX_ANN_Layer)); + + newLayer->out=PX_NULL; + newLayer->net=PX_NULL; + newLayer->w=PX_NULL; + newLayer->back=PX_NULL; + newLayer->weight_init=weight_c; + if(!newLayer) return PX_FALSE; + + newLayer->activation=activation; + newLayer->Neurals=Neurals; + + newLayer->out=(px_double *)MP_Malloc(pAnn->mp,sizeof(px_double)*Neurals); + if(!newLayer->out) goto _ERROR; + + newLayer->back=(px_double *)MP_Malloc(pAnn->mp,sizeof(px_double)*Neurals); + if(!newLayer->back) goto _ERROR; + + newLayer->net=(px_double *)MP_Malloc(pAnn->mp,sizeof(px_double)*Neurals); + if(!newLayer->net) goto _ERROR; + + newLayer->bias=(px_double *)MP_Malloc(pAnn->mp,sizeof(px_double)*Neurals); + if(!newLayer->bias) goto _ERROR; + + for (i=0;ibias[i]=bias; + } + + newLayer->pNext=PX_NULL; + newLayer->w_initMode=mode; + + if (pAnn->Layer==PX_NULL) + { + newLayer->pPrevious=PX_NULL; + newLayer->w_count=0; + newLayer->w=PX_NULL; + pAnn->Layer=newLayer; + } + else + { + p=pAnn->Layer; + while (p->pNext) p=p->pNext; + + newLayer->pPrevious=p; + newLayer->w_count=p->Neurals*Neurals; + + newLayer->w=(px_double *)MP_Malloc(pAnn->mp,sizeof(px_double)*newLayer->w_count); + if(!newLayer->w) goto _ERROR; + + switch(mode) + { + + case PX_ANN_LAYER_WEIGHT_INITMODE_RAND: + for (i=0;iw_count;i++) + { + newLayer->w[i]=PX_rand()/1.0/PX_RAND_MAX; + } + break; + case PX_ANN_LAYER_WEIGHT_INITMODE_GAUSSRAND: + for (i=0;iw_count;i++) + { + newLayer->w[i]=PX_GaussRand(); + } + break; + + case PX_ANN_LAYER_WEIGHT_INITMODE_CONST: + default: + for (i=0;iw_count;i++) + { + newLayer->w[i]=weight_c; + } + break; + } + p->pNext=newLayer; + } + pAnn->LayerCount++; + return PX_TRUE; +_ERROR: + MP_Free(pAnn->mp,newLayer); + if(newLayer->out) MP_Free(pAnn->mp,newLayer->out); + if(newLayer->net) MP_Free(pAnn->mp,newLayer->net); + if(newLayer->w) MP_Free(pAnn->mp,newLayer->w); + if(newLayer->back) MP_Free(pAnn->mp,newLayer->back); + if(newLayer->back) MP_Free(pAnn->mp,newLayer->bias); + return PX_FALSE; + +} +px_double PX_ANNBackward(PX_ANN *pAnn,px_double *expect) +{ + PX_ANN_Layer *p; + px_int i,j; + px_double e=0; + p=pAnn->Layer; + while(p->pNext) p=p->pNext; + + //output layer + for (i=0;iNeurals;i++) + { + switch(p->activation) + { + case PX_ANN_ACTIVATION_FUNCTION_TANH: + p->net[i]=(1-PX_tanh(p->net[i])*PX_tanh(p->net[i])); + break; + case PX_ANN_ACTIVATION_FUNCTION_SIGMOID: + p->net[i]=PX_sigmoid(p->net[i])*(1-PX_sigmoid(p->net[i])); + break; + case PX_ANN_ACTIVATION_FUNCTION_RELU: + if (p->net[i]<0) + { + p->net[i]=0; + } + else + { + p->net[i]=1; + } + break; + default: + case PX_ANN_ACTIVATION_FUNCTION_LINEAR: + p->net[i]=1; + break; + } + p->net[i]*=-(expect[i]-p->out[i]); + e+=(expect[i]-p->out[i])*(expect[i]-p->out[i]); + } + + p=p->pPrevious; + //hidden + while (p->pPrevious) + { + for (i=0;iNeurals;i++) + { + p->back[i]=0; + for (j=0;jpNext->Neurals;j++) + { + p->back[i]+=p->pNext->net[j]*p->pNext->w[i*p->pNext->Neurals+j]; + } + + switch(p->activation) + { + case PX_ANN_ACTIVATION_FUNCTION_TANH: + p->net[i]=(1-PX_tanh(p->net[i])*PX_tanh(p->net[i])); + break; + case PX_ANN_ACTIVATION_FUNCTION_SIGMOID: + p->net[i]=PX_sigmoid(p->net[i])*(1-PX_sigmoid(p->net[i])); + break; + case PX_ANN_ACTIVATION_FUNCTION_RELU: + if (p->net[i]<0) + { + p->net[i]=0; + } + else + { + p->net[i]=1; + } + break; + default: + case PX_ANN_ACTIVATION_FUNCTION_LINEAR: + break; + } + p->net[i]*=p->back[i]; + } + p=p->pPrevious; + } + return e; +} + +px_double PX_ANNTrain(PX_ANN *pAnn,px_double *input,px_double *expect) +{ + px_int i,j; + px_double delta,e; + PX_ANN_Layer *p=pAnn->Layer; + + if (!p) return -1; + + PX_ANNForward(pAnn,input); + e=PX_ANNBackward(pAnn,expect); + //update weight + //input layer + p=p->pNext; + + while (p) + { + for (i=0;iNeurals;i++) + { + for (j=0;jpPrevious->Neurals;j++) + { + delta=p->net[i]*p->pPrevious->out[j]; + switch(pAnn->regularzation) + { + case PX_ANN_REGULARZATION_L1: + delta=delta-delta*pAnn->regularization_rate/pAnn->Layer->Neurals; + break; + case PX_ANN_REGULARZATION_L2: + delta=delta-delta*pAnn->regularization_rate/pAnn->Layer->Neurals*p->w[i*p->pPrevious->Neurals+j]; + break; + } + p->w[i*p->pPrevious->Neurals+j]-=delta*pAnn->learningRate; + } + } + p=p->pNext; + } + + return e; +} + + + +px_void PX_ANNForward(PX_ANN *pAnn,px_double *input) +{ + px_int i,j; + PX_ANN_Layer *pPre,*p; + px_int inputCount; + + p=pAnn->Layer; + if (!p) return; + + + inputCount=pAnn->Layer->Neurals; + + for (i=0;iLayer->net[i]=input[i]; + } + + + while (PX_TRUE) + { + if (p->pPrevious==PX_NULL) + { + for (i=0;iNeurals;i++) + { + switch(p->activation) + { + case PX_ANN_ACTIVATION_FUNCTION_SIGMOID: + p->out[i]=PX_sigmoid(p->net[i]); + break; + case PX_ANN_ACTIVATION_FUNCTION_TANH: + p->out[i]=PX_tanh(p->net[i]); + break; + case PX_ANN_ACTIVATION_FUNCTION_RELU: + p->out[i]=PX_ReLU(p->net[i]); + break; + default: + case PX_ANN_ACTIVATION_FUNCTION_LINEAR: + p->out[i]=p->net[i]; + break; + } + } + p=p->pNext; + continue; + } + pPre=p->pPrevious; + + for (i=0;iNeurals;i++) + { + p->net[i]=0; + for (j=0;jNeurals;j++) + { + p->net[i]+=pPre->out[j]*p->w[i*pPre->Neurals+j]; + } + p->net[i]+=p->bias[i]; + + switch(p->activation) + { + case PX_ANN_ACTIVATION_FUNCTION_SIGMOID: + p->out[i]=PX_sigmoid(p->net[i]); + break; + case PX_ANN_ACTIVATION_FUNCTION_TANH: + p->out[i]=PX_tanh(p->net[i]); + break; + case PX_ANN_ACTIVATION_FUNCTION_RELU: + p->out[i]=PX_ReLU(p->net[i]); + break; + default: + case PX_ANN_ACTIVATION_FUNCTION_LINEAR: + p->out[i]=p->net[i]; + break; + } + } + if (p->pNext) + { + p=p->pNext; + } + else + break; + } +} + +px_void PX_LayerFree(PX_ANN *pANN,PX_ANN_Layer *layer) +{ + MP_Free(pANN->mp,layer->back); + MP_Free(pANN->mp,layer->net); + MP_Free(pANN->mp,layer->out); + if(layer->w) + MP_Free(pANN->mp,layer->w); + if(layer->bias) + MP_Free(pANN->mp,layer->bias); +} + +px_void PX_ANNFree(PX_ANN *pANN) +{ + PX_ANN_Layer *p=pANN->Layer,*pnext; + while (p) + { + pnext=p->pNext; + PX_LayerFree(pANN,p); + MP_Free(pANN->mp,p); + p=pnext; + } + pANN->mp=PX_NULL; + pANN->LayerCount=0; + pANN->Layer=PX_NULL; +} + + +px_bool PX_ANNExport(PX_ANN *pAnn,px_void *buffer,px_int *size) +{ + PX_ANN_Layer *pLayer; + px_byte *wBuffer=(px_byte *)buffer; + PX_ANN_Data_Header dataheader; + PX_ANN_Data_LayerHeader Layerheader; + + *size=0; + + pLayer=pAnn->Layer; + + dataheader.LayerCount=pAnn->LayerCount; + dataheader.learningRate=pAnn->LayerCount; + dataheader.regularization_rate=pAnn->regularization_rate; + dataheader.regularzation=pAnn->regularzation; + + //write dataheader + if (wBuffer) + { + PX_memcpy(wBuffer,&dataheader,sizeof(dataheader)); + wBuffer+=sizeof(dataheader); + } + + *size+=sizeof(dataheader); + //write layers + while (pLayer) + { + //layer headers + Layerheader.NeuralsCount=pLayer->Neurals; + Layerheader.weight_count=pLayer->w_count; + Layerheader.activation=pLayer->activation; + + if (wBuffer) + { + PX_memcpy(wBuffer,&Layerheader,sizeof(Layerheader)); + wBuffer+=sizeof(Layerheader); + } + + *size+=sizeof(Layerheader); + + //weights + if (wBuffer) + { + PX_memcpy(wBuffer,pLayer->w,sizeof(pLayer->w[0])*pLayer->w_count); + wBuffer+=sizeof(pLayer->w[0])*pLayer->w_count; + } + *size+=sizeof(pLayer->w[0])*pLayer->w_count; + + //bias + if (wBuffer) + { + PX_memcpy(wBuffer,pLayer->bias,sizeof(pLayer->bias[0])*pLayer->Neurals); + wBuffer+=sizeof(pLayer->bias[0])*pLayer->Neurals; + } + *size+=sizeof(pLayer->bias[0])*pLayer->Neurals; + + pLayer=pLayer->pNext; + } + return PX_TRUE; +} + + +px_bool PX_ANNImport(px_memorypool *mp,PX_ANN *pAnn,px_void *buffer,px_int size) +{ + px_int i; + px_byte *rBuffer=(px_byte *)buffer; + PX_ANN_Data_Header dataheader; + PX_ANN_Data_LayerHeader Layerheader; + PX_ANN_Layer *pLastLayer; + PX_memcpy(&dataheader,rBuffer,sizeof(dataheader)); + rBuffer+=sizeof(PX_ANN_Data_Header); + size-=sizeof(PX_ANN_Data_Header); + if (size<=0){return PX_FALSE;} + + if(!PX_ANNInitialize(mp,pAnn,dataheader.learningRate,(PX_ANN_REGULARZATION)dataheader.regularzation,dataheader.regularization_rate)) + return PX_FALSE; + + for (i=0;i<(px_int)dataheader.LayerCount;i++) + { + PX_memcpy(&Layerheader,rBuffer,sizeof(Layerheader)); + rBuffer+=sizeof(Layerheader); + size-=sizeof(Layerheader); + if (size<=0){PX_ANNFree(pAnn); return PX_FALSE;} + + if(!PX_ANNAddLayer(pAnn,Layerheader.NeuralsCount,0,(PX_ANN_ACTIVATION_FUNCTION)Layerheader.activation,PX_ANN_LAYER_WEIGHT_INITMODE_CONST,0)) + { + PX_ANNFree(pAnn); + return PX_FALSE; + } + pLastLayer=pAnn->Layer; + while (pLastLayer->pNext) + { + pLastLayer=pLastLayer->pNext; + } + + PX_memcpy(pLastLayer->w,rBuffer,Layerheader.weight_count*sizeof(px_double)); + rBuffer+=Layerheader.weight_count*sizeof(px_double); + size-=Layerheader.weight_count*sizeof(px_double); + if (size<=0){PX_ANNFree(pAnn); return PX_FALSE;} + + PX_memcpy(pLastLayer->bias,rBuffer,Layerheader.NeuralsCount*sizeof(px_double)); + rBuffer+=Layerheader.NeuralsCount*sizeof(px_double); + size-=Layerheader.NeuralsCount*sizeof(px_double); + if (size<0){PX_ANNFree(pAnn); return PX_FALSE;} + + } + return PX_TRUE; +} + +px_void PX_ANNGetOutput(PX_ANN *pAnn,px_double *result) +{ + PX_ANN_Layer *p=pAnn->Layer; + if(!p) return; + while (p->pNext) p=p->pNext; + PX_memcpy(result,p->out,p->Neurals*sizeof(px_double)); +} + +px_void PX_ANNReset(PX_ANN *pANN) +{ + PX_ANN_Layer *pLayer=pANN->Layer; + px_int i; + while (pLayer) + { + switch(pLayer->w_initMode) + { + + case PX_ANN_LAYER_WEIGHT_INITMODE_RAND: + for (i=0;iw_count;i++) + { + pLayer->w[i]=PX_rand()/1.0/PX_RAND_MAX; + } + break; + case PX_ANN_LAYER_WEIGHT_INITMODE_GAUSSRAND: + for (i=0;iw_count;i++) + { + pLayer->w[i]=PX_GaussRand(); + } + break; + + case PX_ANN_LAYER_WEIGHT_INITMODE_CONST: + default: + for (i=0;iw_count;i++) + { + pLayer->w[i]=pLayer->weight_init; + } + break; + } + pLayer=pLayer->pNext; + } +} + diff --git a/code/PainterEngine/Core/PX_ANN.h b/code/PainterEngine/Core/PX_ANN.h new file mode 100644 index 0000000000000000000000000000000000000000..34f53efdf3104549b59b63ccc1833f46d30c0073 --- /dev/null +++ b/code/PainterEngine/Core/PX_ANN.h @@ -0,0 +1,78 @@ +#ifndef PX_ANN_H +#define PX_ANN_H + +#include "PX_MemoryPool.h" + +typedef enum +{ + PX_ANN_LAYER_WEIGHT_INITMODE_CONST, + PX_ANN_LAYER_WEIGHT_INITMODE_RAND, + PX_ANN_LAYER_WEIGHT_INITMODE_GAUSSRAND, +}PX_ANN_LAYER_WEIGHT_INITMODE; + +typedef enum +{ + PX_ANN_ACTIVATION_FUNCTION_SIGMOID, + PX_ANN_ACTIVATION_FUNCTION_TANH, + PX_ANN_ACTIVATION_FUNCTION_LINEAR, + PX_ANN_ACTIVATION_FUNCTION_RELU, +}PX_ANN_ACTIVATION_FUNCTION; + +typedef enum +{ + PX_ANN_REGULARZATION_NONE, + PX_ANN_REGULARZATION_L1, + PX_ANN_REGULARZATION_L2 +}PX_ANN_REGULARZATION; + +typedef struct __PX_ANN_Layer +{ + px_double *net; + px_double *out; + px_double *back; + px_double *w; + px_double *bias; + px_int Neurals; + px_int w_count; + px_double weight_init; + PX_ANN_ACTIVATION_FUNCTION activation; + PX_ANN_LAYER_WEIGHT_INITMODE w_initMode; + struct __PX_ANN_Layer *pNext,*pPrevious; +}PX_ANN_Layer; + +typedef struct +{ + px_int LayerCount; + PX_ANN_Layer *Layer; + px_double learningRate; + px_double regularization_rate; + PX_ANN_REGULARZATION regularzation; + px_memorypool *mp; +}PX_ANN; + + +typedef struct +{ + px_dword LayerCount; + px_double learningRate; + px_double regularization_rate; + px_dword regularzation; +}PX_ANN_Data_Header; + +typedef struct +{ + px_int weight_count; + px_dword NeuralsCount; + px_dword activation; +}PX_ANN_Data_LayerHeader; + +px_bool PX_ANNInitialize(px_memorypool *mp,PX_ANN *ann,px_double learningRate,PX_ANN_REGULARZATION regularzation,px_double regularization_rate); +px_bool PX_ANNAddLayer(PX_ANN *pAnn,px_int Neurals,px_double bias,PX_ANN_ACTIVATION_FUNCTION activation,PX_ANN_LAYER_WEIGHT_INITMODE mode,px_double weight_c); +px_double PX_ANNTrain(PX_ANN *pAnn,px_double *input,px_double *expect); +px_void PX_ANNForward(PX_ANN *pAnn,px_double *input); +px_void PX_ANNGetOutput(PX_ANN *pAnn,px_double *result); +px_void PX_ANNReset(PX_ANN *pANN); +px_void PX_ANNFree(PX_ANN *pAnn); +px_bool PX_ANNExport(PX_ANN *pAnn,px_void *buffer,px_int *size); +px_bool PX_ANNImport(px_memorypool *mp,PX_ANN *pAnn,px_void *buffer,px_int size); +#endif diff --git a/code/PainterEngine/Core/PX_Arle.c b/code/PainterEngine/Core/PX_Arle.c new file mode 100644 index 0000000000000000000000000000000000000000..5ce616b26b5e0d6b88ba6c6af3778a41288f6621 --- /dev/null +++ b/code/PainterEngine/Core/PX_Arle.c @@ -0,0 +1,163 @@ +#include "PX_Arle.h" + +typedef enum +{ + PX_ARLE_TYPE_UNKNOW, + PX_ARLE_TYPE_UNEQUAL, + PX_ARLE_TYPE_EQUAL, +}PX_ARLE_TYPE; + + +px_int PX_ArleCompressData(px_byte *_in,px_uchar size,PX_ARLE_TYPE type,px_byte *_out) +{ + px_uchar ecode; + if (size==0) + { + return 0; + } + switch (type) + { + case PX_ARLE_TYPE_UNKNOW: + { + if (_out) + { + ecode=1;//0000 0001 + _out[0]=ecode; + _out[1]=_in[0]; + } + return 2; + } + break; + case PX_ARLE_TYPE_UNEQUAL: + { + if (_out) + { + ecode=0; + ecode|=size; + _out[0]=ecode; + PX_memcpy(_out+1,_in,size); + } + return size+1; + + } + break; + case PX_ARLE_TYPE_EQUAL: + { + if (_out) + { + ecode&=0x80; + ecode|=size; + _out[0]=ecode; + _out[1]=_in[0]; + } + return 2; + } + break; + } + return 0; +} + +px_void PX_ArleCompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *_outsize) +{ + PX_ARLE_TYPE type=PX_ARLE_TYPE_UNKNOW; + px_uint wsize; + px_byte rlv=_in[0];//last value of read + px_uint p_cursor=0,r_cursor=1,w_cursor=0; + *_outsize=0; + + while (r_cursor=127) + { + wsize=PX_ArleCompressData(_in+p_cursor,r_cursor-p_cursor,type,_out?_out+w_cursor:PX_NULL); + *_outsize+=wsize; + w_cursor+=wsize; + p_cursor=r_cursor; + type=PX_ARLE_TYPE_UNKNOW; + rlv=_in[r_cursor]; + r_cursor++; + continue; + } + + switch (type) + { + case PX_ARLE_TYPE_UNKNOW: + { + if (rlv==_in[r_cursor]) + { + type=PX_ARLE_TYPE_EQUAL; + } + else + { + type=PX_ARLE_TYPE_UNEQUAL; + } + } + break; + case PX_ARLE_TYPE_UNEQUAL: + { + if (rlv==_in[r_cursor]) + { + //rollback + r_cursor--; + wsize=PX_ArleCompressData(_in+p_cursor,r_cursor-p_cursor,type,_out?_out+w_cursor:PX_NULL); + *_outsize+=wsize; + w_cursor+=wsize; + p_cursor=r_cursor; + type=PX_ARLE_TYPE_EQUAL; + } + } + break; + case PX_ARLE_TYPE_EQUAL: + { + if (rlv!=_in[r_cursor]) + { + //rollback + wsize=PX_ArleCompressData(_in+p_cursor,r_cursor-p_cursor,type,_out?_out+w_cursor:PX_NULL); + *_outsize+=wsize; + w_cursor+=wsize; + p_cursor=r_cursor; + type=PX_ARLE_TYPE_UNEQUAL; + } + } + break; + } + rlv=_in[r_cursor]; + r_cursor++; + } + //encode last token + *_outsize+=PX_ArleCompressData(_in+p_cursor,r_cursor-p_cursor,type,_out?_out+w_cursor:PX_NULL); + return; +} + +px_void PX_ArleDecompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *_outsize) +{ + px_uint r_cursor=0,w_cursor=0; + px_uchar rep,size; + *_outsize=0; + while (r_cursor', '?', */ + 60, 61, 255, 255, 255, 255, 255, 255, + + /* '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', */ + 255, 0, 1, 2, 3, 4, 5, 6, + + /* 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', */ + 7, 8, 9, 10, 11, 12, 13, 14, + + /* 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', */ + 15, 16, 17, 18, 19, 20, 21, 22, + + /* 'X', 'Y', 'Z', '[', '\', ']', '^', '_', */ + 23, 24, 25, 255, 255, 255, 255, 255, + + /* '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', */ + 255, 26, 27, 28, 29, 30, 31, 32, + + /* 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', */ + 33, 34, 35, 36, 37, 38, 39, 40, + + /* 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', */ + 41, 42, 43, 44, 45, 46, 47, 48, + + /* 'x', 'y', 'z', '{', '|', '}', '~', del, */ + 49, 50, 51, 255, 255, 255, 255, 255 +}; + +px_uint PX_Base64Encode(const px_byte *in, px_uint inlen, px_char *out) +{ + int s; + px_uint i; + px_uint j; + px_byte c; + px_byte l; + + s = 0; + l = 0; + for (i = j = 0; i < inlen; i++) { + c = in[i]; + + switch (s) { + case 0: + s = 1; + out[j++] = base64en[(c >> 2) & 0x3F]; + break; + case 1: + s = 2; + out[j++] = base64en[((l & 0x3) << 4) | ((c >> 4) & 0xF)]; + break; + case 2: + s = 0; + out[j++] = base64en[((l & 0xF) << 2) | ((c >> 6) & 0x3)]; + out[j++] = base64en[c & 0x3F]; + break; + } + l = c; + } + + switch (s) { + case 1: + out[j++] = base64en[(l & 0x3) << 4]; + out[j++] = BASE64_PAD; + out[j++] = BASE64_PAD; + break; + case 2: + out[j++] = base64en[(l & 0xF) << 2]; + out[j++] = BASE64_PAD; + break; + } + + out[j] = 0; + + return j; +} + +px_uint PX_Base64Decode(const px_char *in, px_uint inlen, px_byte *out) +{ + px_uint i; + px_uint j; + px_byte c; + + if (inlen & 0x3) { + return 0; + } + + for (i = j = 0; i < inlen; i++) { + if (in[i] == BASE64_PAD) { + break; + } + if (in[i] < 0) { + return 0; + } + + c = base64de[(px_byte)in[i]]; + if (c == 255) { + return 0; + } + + switch (i & 0x3) { + case 0: + out[j] = (c << 2) & 0xFF; + break; + case 1: + out[j++] |= (c >> 4) & 0x3; + out[j] = (c & 0xF) << 4; + break; + case 2: + out[j++] |= (c >> 2) & 0xF; + out[j] = (c & 0x3) << 6; + break; + case 3: + out[j++] |= c; + break; + } + } + + return j; +} + +px_uint PX_Base64GetEncodeLen(px_uint beforeEncodeLen) +{ + if(beforeEncodeLen%3) + return (beforeEncodeLen/3+1)*4; + else + return (beforeEncodeLen/3)*4; +} + +px_uint PX_Base64GetDecodeLen(px_uint beforeEncodeLen) +{ + if(beforeEncodeLen%4) + return 0; + return (beforeEncodeLen/4)*3; +} \ No newline at end of file diff --git a/code/PainterEngine/Core/PX_Base64.h b/code/PainterEngine/Core/PX_Base64.h new file mode 100644 index 0000000000000000000000000000000000000000..db7b932b0d13bafd54af79fbe52993ccf28d2fa2 --- /dev/null +++ b/code/PainterEngine/Core/PX_Base64.h @@ -0,0 +1,9 @@ +#ifndef PX_BASE64_H +#define PX_BASE64_H +#include "PX_Typedef.h" +px_uint PX_Base64Encode(const px_byte *_in, px_uint input_size, px_char *out); +px_uint PX_Base64Decode(const px_char *_in, px_uint input_size, px_byte *out); +px_uint PX_Base64GetEncodeLen(px_uint codeLen); +px_uint PX_Base64GetDecodeLen(px_uint codeLen); + +#endif diff --git a/code/PainterEngine/Core/PX_BaseGeo.c b/code/PainterEngine/Core/PX_BaseGeo.c new file mode 100644 index 0000000000000000000000000000000000000000..01b9944cfda6136c743443493a9c966afb578d53 --- /dev/null +++ b/code/PainterEngine/Core/PX_BaseGeo.c @@ -0,0 +1,2777 @@ +#include "PX_BaseGeo.h" +static px_int st_symmetry_axis; + +#define PX_ABS_FRAC(x) ((x)>0?PX_FRAC(x):PX_FRAC(-(x))) + +static px_void PX_DrawLinePixel_RecK(px_surface *psurface,px_int x,px_int y,px_color color) +{ + PX_SurfaceDrawPixel(psurface,y,x,color); +} + +static px_void PX_DrawLinePixel_InvK(px_surface *psurface,px_int x,px_int y,px_color color) +{ + PX_SurfaceDrawPixel(psurface,2*st_symmetry_axis-x,y,color); +} + +static px_void PX_DrawLinePixel_InvRecK(px_surface *psurface,px_int x,px_int y,px_color color) +{ + PX_SurfaceDrawPixel(psurface,2*st_symmetry_axis-y,x,color); +} +px_void PX_GeoDrawLine(px_surface *psurface, px_int x0, px_int y0, px_int x1, px_int y1 ,px_int lineWidth, px_color color) +{ + px_point Cross2points[2]; + px_int CrossCount=0; + px_int i,len,lm,x,y,temp1,temp2,xleft,xright; + px_int trimLX,trimRX,trimTY,trimBY; + px_float p0x,p0y,p1x,p1y,p2x,p2y,p3x,p3y,vx,vy,rx,ry,xlen,ylen,S,ftemp,fconst,ryL,ryR,rxL,rxR; + px_float k,recK; + px_color clr; + px_void (*func_DrawPixel)(px_surface *psurface,px_int x,px_int y,px_color color); + + if (lineWidth==0||PX_ABS(x0-x1)+PX_ABS(y0-y1)==0) + { + return; + } + + if (x0==x1) + { + if (y0<0) + { + y0=0; + } + if (y1<0) + { + y1=0; + } + if (y0>psurface->height-1) + { + y0=psurface->height-1; + } + if (y1>psurface->height-1) + { + y1=psurface->height-1; + } + if (lineWidth&1) + { + PX_GeoDrawRect(psurface,x0-lineWidth/2,y0,x1+lineWidth/2,y1,color); + } + else + { + PX_GeoDrawRect(psurface,x0-lineWidth/2+1,y0,x1+lineWidth/2-1,y1,color); + len=PX_ABS(y0-y1)+1; + y0>y1?(lm=y1):(lm=y0); + color._argb.a=(color._argb.a>>1); + for (i=0;i=psurface->height) + { + break; + } + PX_SurfaceDrawPixel(psurface,x0-lineWidth/2,lm+i,color); + PX_SurfaceDrawPixel(psurface,x0+lineWidth/2,lm+i,color); + } + } + return; + } + + if (y0==y1) + { + if (x0<0) + { + x0=0; + } + if (x1<0) + { + x1=0; + } + if (x0>psurface->width-1) + { + x0=psurface->width-1; + } + if (x1>psurface->width-1) + { + x1=psurface->width-1; + } + if (lineWidth&1) + { + PX_GeoDrawRect(psurface,x0,y0-lineWidth/2,x1,y1+lineWidth/2,color); + } + else + { + PX_GeoDrawRect(psurface,x0,y0-lineWidth/2+1,x1,y1+lineWidth/2-1,color); + len=PX_ABS(x0-x1)+1; + x0>x1?(lm=x1):(lm=x0); + color._argb.a=(color._argb.a>>1); + for (i=0;ix1) + { + lm=x0; + x0=x1; + x1=lm; + + lm=y0; + y0=y1; + y1=lm; + } + + k=((px_float)(y1-y0))/(x1-x0); + recK=1/k; + + //trim + trimLX=0-lineWidth; + trimRX=psurface->width+lineWidth; + trimTY=0-lineWidth; + trimBY=psurface->height+lineWidth; + + + + + //calculate c + //TrimLX + fconst=y0-k*x0; + ftemp=trimLX*k+fconst; + + do + { + if (ftemp>=trimTY&&ftemp<=trimBY) + { + Cross2points[CrossCount].x=(px_float)trimLX; + Cross2points[CrossCount].y=ftemp; + CrossCount++; + } + + //TrimRX + ftemp=trimRX*k+fconst; + + if (ftemp>=trimTY&&ftemp<=trimBY) + { + Cross2points[CrossCount].x=(px_float)trimRX; + Cross2points[CrossCount].y=ftemp; + CrossCount++; + if (CrossCount==2) + { + break; + } + } + + //trimBY + ftemp=(trimBY-fconst)/k; + if (ftemp>trimLX&&ftemptrimLX&&ftempCross2points[1].x) + { + ftemp=Cross2points[0].x; + Cross2points[0].x=Cross2points[1].x; + Cross2points[1].x=ftemp; + + ftemp=Cross2points[0].y; + Cross2points[0].y=Cross2points[1].y; + Cross2points[1].y=ftemp; + } + + + if (x0Cross2points[1].x) + { + return; + } + + + if (x1Cross2points[1].x) + { + x1=(px_int)Cross2points[1].x; + y1=(px_int)Cross2points[1].y; + } + + if (x1==x0&&y1==y0) + { + return; + } + + + if (k>0) + { + if(k<1.f) + { + func_DrawPixel=PX_SurfaceDrawPixel; + } + else + { + lm=x0; + x0=y0; + y0=lm; + + lm=x1; + x1=y1; + y1=lm; + + k=((px_float)(y1-y0))/(x1-x0); + recK=1/k; + + func_DrawPixel=PX_DrawLinePixel_RecK; + } + } + else + { + if (k>-1.f) + { + lm=x0; + x0=x1; + x1=lm; + + lm=y0; + y0=y1; + y1=lm; + + st_symmetry_axis=x0; + x1=2*x0-x1; + + k=((px_float)(y1-y0))/(x1-x0); + recK=1/k; + + func_DrawPixel=PX_DrawLinePixel_InvK; + } + else + { + lm=x0; + x0=x1; + x1=lm; + + lm=y0; + y0=y1; + y1=lm; + + st_symmetry_axis=x0; + x1=2*x0-x1; + + lm=x0; + x0=y0; + y0=lm; + + lm=x1; + x1=y1; + y1=lm; + + k=((px_float)(y1-y0))/(x1-x0); + recK=1/k; + + func_DrawPixel=PX_DrawLinePixel_InvRecK; + } + } + + vx=(lineWidth/(2*PX_sqrt(1+recK*recK))); + vy=(lineWidth*recK/(2*PX_sqrt(1+recK*recK))); + + p0x=x0+vx+0.5f; + p0y=y0-vy+0.5f; + + p1x=x0-vx+0.5f; + p1y=y0+vy+0.5f; + + p2x=x1+vx+0.5f; + p2y=y1-vy+0.5f; + + p3x=x1-vx+0.5f; + p3y=y1+vy+0.5f; + + + if (p1y<=p2y) + { + + //p0-->p1 draw triangle + xlen=k; + + rx=p0x-(1-PX_ABS_FRAC(p0y))*k; + y=PX_TRUNC(p0y)+1; + temp1=PX_TRUNC(p0x); + temp2=PX_TRUNC(p1y); + while (p1y>y) + { + //Draw full color + for (x=PX_TRUNC(rx)+1;x<=temp1;x++) + { + func_DrawPixel(psurface,x,y,color); + + } + //Draw edge point + ftemp=PX_FRAC(rx); + x=PX_TRUNC(rx); + if (PX_TRUNC(rx-xlen)p2 draw triangle + //Draw full color + y=PX_TRUNC(ry); + if(PX_TRUNC(ry+ylen)>PX_TRUNC(ry)) + { + //top + ftemp=1-PX_FRAC(ry); + S=ftemp*ftemp/k/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,x,y,clr); + + if (yPX_TRUNC(p2x)) + { + break; + } + } + xright=x; + ryR=ry; + + ryL=p1y+(1-PX_ABS_FRAC(p1x))*k; + xleft=PX_TRUNC(p1x)+1; + + y=PX_TRUNC(p1y)+1; + while(PX_TRUNC(ryL)=p2x) + { + break; + } + + if(PX_TRUNC(ryR+ylen)==y) + { + S=1-PX_FRAC(ryR)-ylen/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,xright,y,clr); + } + else + { + ftemp=1-PX_FRAC(ryR); + S=ftemp*ftemp/2/k; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,xright,y,clr); + } + xright++; + ryR+=ylen; + } + + } + else + { + while (PX_TRUNC(ryR)==y) + { + if(PX_TRUNC(ryR+ylen)==y) + { + S=1-PX_FRAC(ryR)-ylen/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,xright,y,clr); + } + else + { + ftemp=1-PX_FRAC(ryR); + S=ftemp*ftemp/2/k; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,xright,y,clr); + } + xright++; + ryR+=ylen; + } + } + + + //draw horizontal + for (x=xleft;xp1 triangle + ry=p3y-(1-PX_ABS_FRAC(p3x))*k; + x=PX_TRUNC(p3x)-1; + temp2=PX_TRUNC(p2y); + temp1=PX_TRUNC(p3x-(p3y-p2y)/k); + + while (x>temp1) + { + //Draw full color + y=PX_TRUNC(ry); + if(PX_TRUNC(ry-ylen)!=PX_TRUNC(ry)) + { + //bottom + ftemp=PX_FRAC(ry); + S=ftemp*ftemp/k/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,x,y,clr); + + //top + ftemp=1-PX_FRAC(ry-ylen); + S=1-ftemp*ftemp/k/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,x,y-1,clr); + + for (i=y-2;i>temp2;i--) + { + func_DrawPixel(psurface,x,i,color); + } + + } + else + { + ftemp=PX_FRAC(ry-ylen); + ftemp+=ylen/2; + + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*ftemp); + + func_DrawPixel(psurface,x,y,clr); + + for (i=y-1;i>temp2;i--) + { + func_DrawPixel(psurface,x,i,color); + } + } + ry-=ylen; + x--; + + if (xp3 draw triangle + rx=p2x-(1-PX_ABS_FRAC(p2y))*k; + y=PX_TRUNC(p2y)+1; + temp1=PX_TRUNC(p3x); + + //while() + + while (ytemp1-1;x--) + { + func_DrawPixel(psurface,x,y,color); + + } + //Draw edge point + ftemp=PX_FRAC(rx); + x=PX_TRUNC(rx); + if (PX_TRUNC(rx-xlen)p2 draw triangle + + //Draw full color + temp2=PX_TRUNC(p2y); + y=PX_TRUNC(ry); + if(PX_TRUNC(ry+ylen)>PX_TRUNC(ry)) + { + //top + ftemp=1-PX_FRAC(ry); + S=ftemp*ftemp/k/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,x,y,clr); + + //bottom + if(yPX_TRUNC(p2x)) + { + break; + } + } + + //p0-->p1 draw triangle + xlen=k; + + rx=p0x-(1-PX_ABS_FRAC(p0y))*k; + y=PX_TRUNC(p0y)+1; + temp1=PX_TRUNC(p0x); + while (y<=PX_TRUNC(p2y)) + { + //Draw full color + for (x=PX_TRUNC(rx)+1;x<=temp1;x++) + { + func_DrawPixel(psurface,x,y,color); + + } + //Draw edge point + ftemp=PX_FRAC(rx); + x=PX_TRUNC(rx); + if (PX_TRUNC(rx-xlen)p3 draw triangle + while (yp1 triangle + ry=p3y-(1-PX_ABS_FRAC(p3x))*k; + x=PX_TRUNC(p3x)-1; + + temp2=PX_TRUNC(p1y)+1; + while (x>PX_TRUNC(p1x)) + { + //Draw full color + y=PX_TRUNC(ry); + if(PX_TRUNC(ry-ylen)!=PX_TRUNC(ry)) + { + //bottom + ftemp=PX_FRAC(ry); + S=ftemp*ftemp/k/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,x,y,clr); + + //top + if(y>temp2) + { + ftemp=1-PX_FRAC(ry-ylen); + S=1-ftemp*ftemp/k/2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + func_DrawPixel(psurface,x,y-1,clr); + } + for (i=temp2;i0) + lineWidth-=1; + else + return; + + + + PX_GeoDrawRect(psurface,left,top,right,top+lineWidth,color); + PX_GeoDrawRect(psurface,left,bottom-lineWidth,right,bottom,color); + PX_GeoDrawRect(psurface,left,top+lineWidth+1,left+lineWidth,bottom-lineWidth-1,color); + PX_GeoDrawRect(psurface,right-lineWidth,top+lineWidth+1,right,bottom-lineWidth-1,color); +} + + + +px_void PX_GeoDrawRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_color color) +{ + px_int i,j,mid; + if(color._argb.a==0) + { + return; + } + + if (left>right) + { + mid=left; + left=right; + right=mid; + } + if (top>bottom) + { + mid=top; + top=bottom; + bottom=mid; + } + + if (left<0) + { + left=0; + } + if (top<0) + { + top=0; + } + + if (right>psurface->width-1) + { + right=psurface->width-1; + } + + if (bottom>psurface->height-1) + { + bottom=psurface->height-1; + } + + if (left>psurface->width-1) + { + return; + } + + if (bottom<0) + { + return; + } + + if (right<0) + { + return; + } + + if (top>psurface->height-1) + { + return; + } + + + + + + + if(color._argb.a==0xff) + { + for (i=top;i<=bottom;i++) + { + PX_memdwordset(psurface->surfaceBuffer+i*psurface->width+left,color._argb.ucolor,right-left+1); + } + } + else + for (i=top;i<=bottom;i++) + { + for (j=left;j<=right;j++) + { + PX_SurfaceDrawPixel(psurface,j,i,color); + } + } +} + +static px_void PX_GeoDrawSolidCircle_Ex1(px_surface *psurface, px_int x,px_int y,px_int Radius,px_color color ) +{ + px_int ry,dy,i,xleft,xright,Sy,cY,drx,dry; + px_float rad2,xoft1,xoft2,S,fy,fdis; + px_color clr; + + if (Radius==0) + { + return; + } + //Draw origin + PX_SurfaceDrawPixel(psurface,x,y,color); + + //Draw cross + + if (x>=0-Radius&&y>=0-Radius&&xwidth+Radius&&yheight+Radius) + { + clr=color; + clr._argb.a>>=1; + dy=Radius; + PX_SurfaceDrawPixel(psurface,x,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x,y-dy,clr); + PX_SurfaceDrawPixel(psurface,x+dy,y,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y,clr); + + for (i=1;i0.5f) + { + fdis=1-PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_SurfaceDrawPixel(psurface,x+dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x+dy,y-dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y-dy,clr); + } + else + { + fdis=PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_SurfaceDrawPixel(psurface,x+dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x+dy,y-dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y-dy,clr); + } + + + for (i=ry+1;ipsurface->width-1) + { + right=psurface->width-1; + } + + if (bottom>psurface->height-1) + { + bottom=psurface->height-1; + } + + if (left>psurface->width-1) + { + return; + } + + if (bottom<0) + { + return; + } + + if (right<0) + { + return; + } + + if (top>psurface->height-1) + { + return; + } + + + if (left>right) + { + mid=left; + left=right; + right=mid; + } + if (top>bottom) + { + mid=top; + top=bottom; + bottom=mid; + } + + for (i=top;i<=bottom;i++) + { + for (j=left;j<=right;j++) + { + d=PX_sqrt((px_float)((i-y)*(i-y)+(j-x)*(j-x))); + if (dpsurface->width-1) + { + right=psurface->width-1; + } + + if (bottom>psurface->height-1) + { + bottom=psurface->height-1; + } + + if (left>psurface->width-1) + { + return; + } + + if (bottom<0) + { + return; + } + + if (right<0) + { + return; + } + + if (top>psurface->height-1) + { + return; + } + + + if (left>right) + { + mid=left; + left=right; + right=mid; + } + if (top>bottom) + { + mid=top; + top=bottom; + bottom=mid; + } + + Sc=(px_int)(PX_PI*Radius*Radius); + Sr=(right-left+1)*(bottom-top+1); + if (SrRadius*2) + { + lineWidth=Radius*2; + } + + if (x>=0-Radius&&y>=0-Radius&&xwidth+Radius&&yheight+Radius) + { + i=x*x+y*y; + + if (i<(x-psurface->width)*(x-psurface->width)+y*y) + { + i=(x-psurface->width)*(x-psurface->width)+y*y; + } + + if (i<(x-psurface->width)*(x-psurface->width)+(y-psurface->height)*(y-psurface->height)) + { + i=(x-psurface->width)*(x-psurface->width)+(y-psurface->height)*(y-psurface->height); + } + + if (iheight)*(y-psurface->height)) + { + i=x*x+(y-psurface->height)*(y-psurface->height); + } + + if (i<(Radius-lineWidth/2)*(Radius-lineWidth/2)&&!PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT(0,0,(px_float)psurface->width,(px_float)psurface->height))) + { + return; + } + } + else + { + return; + } + + + + + + + if (lineWidth&1) + { + ry=Radius+(lineWidth>>1); + for (rx=Radius-(lineWidth>>1);rx<=ry;rx++) + { + PX_SurfaceDrawPixel(psurface,x+rx,y,color); + PX_SurfaceDrawPixel(psurface,x-rx,y,color); + PX_SurfaceDrawPixel(psurface,x,rx+y,color); + PX_SurfaceDrawPixel(psurface,x,-rx+y,color); + } + } + else + { + clr=color; + clr._argb.a>>=1; + dy=Radius+(lineWidth>>1); + PX_SurfaceDrawPixel(psurface,x,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x,y-dy,clr); + PX_SurfaceDrawPixel(psurface,x+dy,y,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y,clr); + + ry=Radius-(lineWidth>>1); + PX_SurfaceDrawPixel(psurface,x,y+ry,clr); + PX_SurfaceDrawPixel(psurface,x,y-ry,clr); + PX_SurfaceDrawPixel(psurface,x+ry,y,clr); + PX_SurfaceDrawPixel(psurface,x-ry,y,clr); + + for (i=ry+1;i0.5f) + { + fdis=1-PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_SurfaceDrawPixel(psurface,x+ry,y+ry,clr); + PX_SurfaceDrawPixel(psurface,x-ry,y+ry,clr); + PX_SurfaceDrawPixel(psurface,x+ry,y-ry,clr); + PX_SurfaceDrawPixel(psurface,x-ry,y-ry,clr); + } + else + { + fdis=PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_SurfaceDrawPixel(psurface,x+ry,y+ry,clr); + PX_SurfaceDrawPixel(psurface,x-ry,y+ry,clr); + PX_SurfaceDrawPixel(psurface,x+ry,y-ry,clr); + PX_SurfaceDrawPixel(psurface,x-ry,y-ry,clr); + } + + + //out side + rad2=Radius+lineWidth/2.0f; + dy=PX_TRUNC(rad2/1.4142135623731f+0.5f); + fy=rad2/1.4142135623731f+0.5f; + if (PX_FRAC(fy)>0.5f) + { + fdis=1-PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_SurfaceDrawPixel(psurface,x+dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x+dy,y-dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y-dy,clr); + } + else + { + fdis=PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_SurfaceDrawPixel(psurface,x+dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y+dy,clr); + PX_SurfaceDrawPixel(psurface,x+dy,y-dy,clr); + PX_SurfaceDrawPixel(psurface,x-dy,y-dy,clr); + } + + + for (i=ry+1;i0) + { + if (vy<0) + { + math_region+=4; + } + } + else + math_region=2-math_region; + + if ((math_region>s_r&&math_regionRadius*2) + { + lineWidth=Radius*2; + } + + if (x>=0-Radius&&y>=0-Radius&&xwidth+Radius&&yheight+Radius) + { + i=x*x+y*y; + + if (i<(x-psurface->width)*(x-psurface->width)+y*y) + { + i=(x-psurface->width)*(x-psurface->width)+y*y; + } + + if (i<(x-psurface->width)*(x-psurface->width)+(y-psurface->height)*(y-psurface->height)) + { + i=(x-psurface->width)*(x-psurface->width)+(y-psurface->height)*(y-psurface->height); + } + + if (iheight)*(y-psurface->height)) + { + i=x*x+(y-psurface->height)*(y-psurface->height); + } + + if (i<(Radius-lineWidth/2)*(Radius-lineWidth/2)&&!PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT(0,0,(px_float)psurface->width,(px_float)psurface->height))) + { + return; + } + } + else + { + return; + } + + + + if (lineWidth&1) + { + ry=Radius+(lineWidth>>1); + for (rx=Radius-(lineWidth>>1);rx<=ry;rx++) + { + PX_GeoDrawRingPoint(psurface,x+rx,y,color,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-rx,y,color,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x,rx+y,color,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x,-rx+y,color,x,y,start_mathRegion,end_mathRegion); + } + } + else + { + clr=color; + clr._argb.a>>=1; + dy=Radius+(lineWidth>>1); + PX_GeoDrawRingPoint(psurface,x,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+dy,y,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y,clr,x,y,start_mathRegion,end_mathRegion); + + ry=Radius-(lineWidth>>1); + PX_GeoDrawRingPoint(psurface,x,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+ry,y,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y,clr,x,y,start_mathRegion,end_mathRegion); + + for (i=ry+1;i0.5f) + { + fdis=1-PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + } + else + { + fdis=PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + } + + + //out side + rad2=Radius+lineWidth/2.0f; + dy=PX_TRUNC(rad2/1.4142135623731f+0.5f); + fy=rad2/1.4142135623731f+0.5f; + if (PX_FRAC(fy)>0.5f) + { + fdis=1-PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + } + else + { + fdis=PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + } + + + for (i=ry+1;i=0-Radius_outside&&y>=0-Radius_outside&&xwidth+Radius_outside&&yheight+Radius_outside) + { + i=x*x+y*y; + + if (i<(x-psurface->width)*(x-psurface->width)+y*y) + { + i=(x-psurface->width)*(x-psurface->width)+y*y; + } + + if (i<(x-psurface->width)*(x-psurface->width)+(y-psurface->height)*(y-psurface->height)) + { + i=(x-psurface->width)*(x-psurface->width)+(y-psurface->height)*(y-psurface->height); + } + + if (iheight)*(y-psurface->height)) + { + i=x*x+(y-psurface->height)*(y-psurface->height); + } + + if (iwidth,(px_float)psurface->height))) + { + return; + } + } + else + { + return; + } + + ry=Radius_outside; + for (rx=Radius_inside;rx<=ry;rx++) + { + PX_GeoDrawRingPoint(psurface,x+rx,y,color,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-rx,y,color,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x,rx+y,color,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x,-rx+y,color,x,y,start_mathRegion,end_mathRegion); + } + + // Draw 45-degree cross + //inside + rad=(px_float)Radius_inside; + ry=PX_TRUNC(rad/1.4142135623731f+0.5f); + fy=rad/1.4142135623731f+0.5f; + if (PX_FRAC(fy)>0.5f) + { + fdis=1-PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + } + else + { + fdis=PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y+ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-ry,y-ry,clr,x,y,start_mathRegion,end_mathRegion); + } + + + //outside + rad2=(px_float)Radius_outside; + dy=PX_TRUNC(rad2/1.4142135623731f+0.5f); + fy=rad2/1.4142135623731f+0.5f; + if (PX_FRAC(fy)>0.5f) + { + fdis=1-PX_FRAC(fy); + S=1-fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + } + else + { + fdis=PX_FRAC(fy); + S=fdis*fdis*2; + clr=color; + clr._argb.a=(px_uchar)(clr._argb.a*S); + PX_GeoDrawRingPoint(psurface,x+dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y+dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x+dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + PX_GeoDrawRingPoint(psurface,x-dy,y-dy,clr,x,y,start_mathRegion,end_mathRegion); + } + + + for (i=ry+1;iright) + { + Height=left; + left=right; + right=Height; + } + if (top>bottom) + { + Height=top; + top=bottom; + bottom=Height; + } + Height=(bottom-top)+1; + Width=(right-left)+1; + + r_y=roundRaduis; + r_x=roundRaduis; + for (y=0;y<(px_int)roundRaduis;y++) + { + if (Height&1) + { + if (y>Height/2) + { + break; + } + } + else + { + if (y>Height/2-1) + { + break; + } + } + + x=(px_int)roundRaduis-(px_int)(PX_sqrt(roundRaduis*roundRaduis-(roundRaduis-y-1)*(roundRaduis-y-1)))-1; + if(x<0) x=0; + for (;x<(px_int)roundRaduis;x++) + { + if (Width&1) + { + if (x>Width/2) + { + break; + } + } + else + { + if (x>Width/2-1) + { + break; + } + } + + if (x>Width/2) + { + break; + } + + dis=PX_sqrt((x-r_x)*(x-r_x)+(y-r_y)*(y-r_y)); + if (disroundRaduis) + drawColor._argb.a=(px_uchar)(color._argb.a*(dis-roundRaduis+0.5f)); + + PX_SurfaceDrawPixel(psurface,left+x,top+y,drawColor); + + if(2*xHeight/2) + { + drawHeight=(px_int)roundRaduis-Height/2; + } + else + { + drawHeight=(px_int)roundRaduis; + } + + + if (Width>2*(px_int)roundRaduis) + { + drawWidth=Width-2*(px_int)roundRaduis; + + if(drawWidth>0&&drawHeight>0) + { + PX_GeoDrawRect(psurface,left+(px_int)roundRaduis,top,left+(px_int)roundRaduis+drawWidth-1,top+drawHeight-1,color); + PX_GeoDrawRect(psurface,left+(px_int)roundRaduis,bottom-drawHeight+1,left+(px_int)roundRaduis+drawWidth-1,bottom,color); + } + } + + if(Height>2*(px_int)roundRaduis) + PX_GeoDrawRect(psurface,left,top+(px_int)roundRaduis,right,bottom-(px_int)roundRaduis,color); + +} + +px_void PX_GeoDrawRoundRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_float roundRaduis,px_float linewidth,px_color color) +{ + px_int y,x,Height,Width; + px_float r_x,r_y,dis; + px_int drawWidth; + px_int drawHeight; + px_int drawlinewidth_int; + px_color drawColor; + if(color._argb.a==0) + { + return; + } + + if (left>right) + { + Height=left; + left=right; + right=Height; + } + if (top>bottom) + { + Height=top; + top=bottom; + bottom=Height; + } + Height=(bottom-top)+1; + Width=(right-left)+1; + + r_y=roundRaduis; + r_x=roundRaduis; + for (y=0;y<(px_int)roundRaduis;y++) + { + if (Height&1) + { + if (y>Height/2) + { + break; + } + } + else + { + if (y>Height/2-1) + { + break; + } + } + + x=(px_int)roundRaduis-(px_int)(PX_sqrt(roundRaduis*roundRaduis-(roundRaduis-y-1)*(roundRaduis-y-1)))-1; + if(x<0)x=0; + for (;x<(px_int)roundRaduis;x++) + { + if (Width&1) + { + if (x>Width/2) + { + break; + } + } + else + { + if (x>Width/2-1) + { + break; + } + } + + if (x>Width/2) + { + break; + } + + dis=PX_sqrt((x-r_x)*(x-r_x)+(y-r_y)*(y-r_y)); + if (disroundRaduis-linewidth-0.5f) + { + drawColor=color; + + if (dis>roundRaduis) + drawColor._argb.a=(px_uchar)(color._argb.a*(dis-roundRaduis+0.5f)); + + if (disHeight/2) + { + drawHeight=(px_int)roundRaduis-Height/2; + } + else + { + drawHeight=(px_int)roundRaduis; + } + if (drawHeight>linewidth) + { + drawHeight=drawlinewidth_int; + } + + if (Width>2*(px_int)roundRaduis) + { + drawWidth=Width-2*(px_int)roundRaduis; + if(drawWidth>0&&drawHeight>0) + { + PX_GeoDrawRect(psurface,left+(px_int)roundRaduis,top,left+(px_int)roundRaduis+drawWidth-1,top+drawHeight-1,color); + PX_GeoDrawRect(psurface,left+(px_int)roundRaduis,bottom-drawHeight+1,left+(px_int)roundRaduis+drawWidth-1,bottom,color); + } + } + + if(Height>2*(px_int)roundRaduis) + { + PX_GeoDrawRect(psurface,left,top+(px_int)roundRaduis,left+drawlinewidth_int-1,bottom-(px_int)roundRaduis,color); + PX_GeoDrawRect(psurface,right-drawlinewidth_int+1,top+(px_int)roundRaduis,right,bottom-(px_int)roundRaduis,color); + } +} + diff --git a/code/PainterEngine/Core/PX_BaseGeo.h b/code/PainterEngine/Core/PX_BaseGeo.h new file mode 100644 index 0000000000000000000000000000000000000000..62fc8d73c05b45925bff7a050d7a70e1dfcd9801 --- /dev/null +++ b/code/PainterEngine/Core/PX_BaseGeo.h @@ -0,0 +1,15 @@ +#ifndef PIXELSES_BASEGEO +#define PIXELSES_BASEGEO + +#include "PX_Surface.h" + +px_void PX_GeoDrawLine(px_surface *psurface, px_int x0, px_int y0, px_int x1, px_int y1 ,px_int lineWidth, px_color color); +px_void PX_GeoDrawBorder(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom ,px_int lineWidth,px_color color); +px_void PX_GeoDrawRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_color color); +px_void PX_GeoDrawSolidCircle(px_surface *psurface, px_int x,px_int y,px_int Radius,px_color color ); +px_void PX_GeoDrawCircle(px_surface *psurface,px_int x,px_int y,px_int Radius,px_int lineWidth,px_color color); +px_void PX_GeoDrawRing(px_surface *psurface, px_int x,px_int y,px_int Radius,px_int lineWidth,px_color color,px_uint start_angle,px_uint end_angle); +px_void PX_GeoDrawSector(px_surface *psurface, px_int x,px_int y,px_int Radius_outside,px_int Radius_inside,px_color color,px_uint start_angle,px_uint end_angle); +px_void PX_GeoDrawSolidRoundRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_float roundRaduis,px_color color); +px_void PX_GeoDrawRoundRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_float roundRaduis,px_float linewidth,px_color color); +#endif diff --git a/code/PainterEngine/Core/PX_Bitmap.c b/code/PainterEngine/Core/PX_Bitmap.c new file mode 100644 index 0000000000000000000000000000000000000000..d9026bd5e3b9a132e474d0afcaf28908daf581ce --- /dev/null +++ b/code/PainterEngine/Core/PX_Bitmap.c @@ -0,0 +1,321 @@ +#include "PX_Bitmap.h" + +px_uint PX_BitmapGetHeight( void *BitmapBuffer ) +{ + return (px_dword)(*(px_dword *)((px_char *)BitmapBuffer+22)); +} + +px_uint PX_BitmapGetWidth( void *BitmapBuffer ) +{ + return (px_dword)(*(px_dword *)((px_char *)BitmapBuffer+18)); +} + +px_word PX_BitmapGetBitCount( void *BitmapBuffer ) +{ + return (px_word)(*(px_word *)((px_char *)BitmapBuffer+28)); +} + +px_dword PX_BitmapGetDataOffset(void *BitmapBuffer) +{ + return (px_dword)(*(px_dword *)((px_char *)BitmapBuffer+10)); +} + +px_void PX_BitmapRender(px_surface *psurface, void *BitmapBuffer,px_int BufferSize,px_int x,px_int y ) +{ + px_int i,j; + px_int Height; + px_int Width; + px_int RowBytes; + px_word bitCount; + px_char *ByteColor; + PX_BITMAP_RGB32 *rgb32; + PX_BITMAP_RGB24 *rgb24; + px_word *rgb16; + px_color PXcolor32; + if (x>psurface->width||y>psurface->height) + { + return; + } + + Height=PX_BitmapGetHeight(BitmapBuffer); + Width=PX_BitmapGetWidth(BitmapBuffer); + bitCount=PX_BitmapGetBitCount(BitmapBuffer); + if (Height>0) + { + if (x<-Width||y<-Height) + { + return; + } + } + else + { + if (x<-Width||yBufferSize-(px_int)PX_BitmapGetDataOffset(BitmapBuffer)) + { + return; + } + if(Height>0) + { + for (i=0;iBufferSize-(px_int)PX_BitmapGetDataOffset(BitmapBuffer)) + { + return; + } + if(Height>0) + { + for (i=0;iwidth&&i+yheight) + PX_SurfaceSetPixel(psurface,j+x,i+y,PXcolor32); + } + } + } + else + { + for (i=0;i<-Height;i++) + { + rgb24=(PX_BITMAP_RGB24 *)(ByteColor+RowBytes*(i)); + for (j=0;j0&&i+y>0&&j+xwidth&&i+yheight) + PX_SurfaceSetPixel(psurface,j+x,i+y,PXcolor32); + } + } + } + return; + } + + //16bit Color for R5G6B5 + if(bitCount==16) + { + //Translate buffer as format + rgb16=(px_word *)ByteColor; + if((Width*2)%4) + RowBytes=Width*2+4-((Width*2)%4); + else + RowBytes=Width*2; + + if (Height*RowBytes>BufferSize-(px_int)PX_BitmapGetDataOffset(BitmapBuffer)) + { + return; + } + if(Height>0) + { + for (i=0;i>5)&0x1F) *255)/31; + PXcolor32._argb.r=(((rgb16[j]>>10)&0x1F)*255)/31; + if(j+x>0&&i+y>0&&j+xwidth&&i+yheight) + PX_SurfaceSetPixel(psurface,j+x,i+y,PXcolor32); + } + } + } + else + { + for (i=0;i<-Height;i++) + { + rgb16=(px_word *)(ByteColor+RowBytes*(i)); + for (j=0;j>5)&0x1F) *255)/31; + PXcolor32._argb.r=(((rgb16[j]>>10)&0x1F)*255)/31; + if(j+x>0&&i+y>0&&j+xwidth&&i+yheight) + PX_SurfaceSetPixel(psurface,j+x,i+y,PXcolor32); + } + } + } + return; + } + + //Other bit format is no support + return; +} + +px_bool PX_BitmapVerify(void *BitmapBuffer,px_int BufferSize) +{ + + px_int Height; + px_int Width; + px_int RowBytes; + px_word bitCount; + + if (BufferSize<54) + { + return PX_FALSE; + } + if (((px_char *)BitmapBuffer)[0]!='B') + { + return PX_FALSE; + } + + if (((px_char *)BitmapBuffer)[1]!='M') + { + return PX_FALSE; + } + + + Height=PX_BitmapGetHeight(BitmapBuffer); + Width=PX_BitmapGetWidth(BitmapBuffer); + bitCount=PX_BitmapGetBitCount(BitmapBuffer); + + //32bit Color for A8R8G8B8(X8R8G8B8) + if(bitCount==32) + { + if (Height*Width>BufferSize-(px_int)PX_BitmapGetDataOffset(BitmapBuffer)) + { + return PX_FALSE; + } + } + + + //24bit Color for R8G8B8 + if(bitCount==24) + { + //Translate buffer as format + + if((Width*3)%4) + RowBytes=Width*3+4-((Width*3)%4); + else + RowBytes=Width*3; + + if (Height*RowBytes>BufferSize-(px_int)PX_BitmapGetDataOffset(BitmapBuffer)) + { + return PX_FALSE; + } + } + + //16bit Color for R5G6B5 + if(bitCount==16) + { + //Translate buffer as format + if((Width*2)%4) + RowBytes=Width*2+4-((Width*2)%4); + else + RowBytes=Width*2; + + if (Height*RowBytes>BufferSize-(px_int)PX_BitmapGetDataOffset(BitmapBuffer)) + { + return PX_FALSE; + } + } + + return PX_TRUE; +} + +px_bool PX_BitmapBuild(px_surface *psurface,px_char *BitmapBuffer,px_int *size) +{ + px_int _outsize,x,y,rowAppendSize; + PX_BITMAPFILEHEADER fileheader; + PX_BITMAPINFOHEADER infoheader; + PX_BITMAP_RGB24 *pdata; + + rowAppendSize=psurface->width%4; + + + _outsize=psurface->height*psurface->width*3+sizeof(PX_BITMAPFILEHEADER)+sizeof(PX_BITMAPINFOHEADER)+rowAppendSize*psurface->height; + + *size=_outsize; + if (BitmapBuffer) + { + px_dword bfoftsize=sizeof(PX_BITMAPFILEHEADER)+sizeof(PX_BITMAPINFOHEADER); + fileheader.bfType[0]='B'; + fileheader.bfType[1]='M'; + PX_memcpy(fileheader.bfSize,&_outsize,4); + fileheader.bfReserbed[0]=0; + fileheader.bfReserbed[1]=0; + fileheader.bfReserbed[2]=0; + fileheader.bfReserbed[3]=0; + PX_memcpy(fileheader.bfOffbits,&bfoftsize,4); + + infoheader.biBitCount=24; + infoheader.biClrImportant=0; + infoheader.biClrUsed=0; + infoheader.biCompression=0; + infoheader.biHeight=psurface->height; + infoheader.biWidth=psurface->width; + infoheader.biPlanes=1; + infoheader.biSize=40; + infoheader.biSizeImage=psurface->height*psurface->width*3; + infoheader.biXPelsPerMeter=2834; + infoheader.biYPelsPerMeter=2834; + + PX_memcpy(BitmapBuffer,&fileheader,sizeof(fileheader)); + PX_memcpy(BitmapBuffer+14,&infoheader,sizeof(infoheader)); + + pdata=(PX_BITMAP_RGB24 *)(BitmapBuffer+sizeof(PX_BITMAPFILEHEADER)+sizeof(PX_BITMAPINFOHEADER)); + for (y=psurface->height-1;y>=0;y--) + { + for (x=0;xwidth;x++) + { + (*pdata).R=PX_SURFACECOLOR(psurface,x,y)._argb.r*PX_SURFACECOLOR(psurface,x,y)._argb.a/256; + (*pdata).G=PX_SURFACECOLOR(psurface,x,y)._argb.g*PX_SURFACECOLOR(psurface,x,y)._argb.a/256; + (*pdata).B=PX_SURFACECOLOR(psurface,x,y)._argb.b*PX_SURFACECOLOR(psurface,x,y)._argb.a/256; + pdata++; + } + pdata=(PX_BITMAP_RGB24 *)(((px_char *)pdata)+rowAppendSize); + } + return PX_TRUE; + } + else + return PX_TRUE; +} diff --git a/code/PainterEngine/Core/PX_Bitmap.h b/code/PainterEngine/Core/PX_Bitmap.h new file mode 100644 index 0000000000000000000000000000000000000000..a22aaa79363fda358e26402ab714d82995d8a62c --- /dev/null +++ b/code/PainterEngine/Core/PX_Bitmap.h @@ -0,0 +1,66 @@ +#ifndef PIXELSES_BITMAP +#define PIXELSES_BITMAP + +#include "PX_Surface.h" + +typedef struct PX_BITMAPFILEHEADER { + px_char bfType[2]; //Must be "BM" offset 0-1 + px_char bfSize[4]; //offset 2-5 + px_char bfReserbed[4]; //offset 6-13 + px_uchar bfOffbits[4]; +} PX_BITMAPFILEHEADER; //14 Byte + +typedef struct PX_BITMAPINFOHEADER{ + px_dword biSize; //offset 14-17 + px_dword biWidth; //offset 18-21 + px_dword biHeight; //offset 22-25 + px_word biPlanes; //offset 26-27 + px_word biBitCount; //offset 28-29 + px_dword biCompression; + px_dword biSizeImage; + px_dword biXPelsPerMeter; + px_dword biYPelsPerMeter; + px_dword biClrUsed; + px_dword biClrImportant; +} PX_BITMAPINFOHEADER; + +typedef struct PX_BITMAP_tagRBG24 +{ + px_char B; + px_char G; + px_char R; +}PX_BITMAP_RGB24; + +typedef struct PX_BITMAP_tagRBG32 +{ + px_char B; + px_char G; + px_char R; + px_char A; +}PX_BITMAP_RGB32; + +//Bitmap Verify +px_bool PX_BitmapVerify(void *BitmapBuffer,px_int size); + +//Get bitmap height +px_uint PX_BitmapGetHeight(void *BitmapBuffer); +//Get bitmap width +px_uint PX_BitmapGetWidth(void *BitmapBuffer); +//Get bitmap BitCount +px_word PX_BitmapGetBitCount(void *BitmapBuffer); +////////////////////////////////////////////////////////////////////////// +// Draw bitmap to panel +// param:void *BitmapBuffer -Point to buffer of bitmap +// param:int x -Offset of X +// param:int y -Offset of Y +///////////////////////////////////////////////////////////////////////// +px_void PX_BitmapRender(px_surface *psurface,void *BitmapBuffer,px_int BufferSize,int x,int y); + +////////////////////////////////////////////////////////////////////////// +// build bitmap from surface +// param:px_memory *BitmapBuffer -Pointer of px_buffer to save bmpfile data +///////////////////////////////////////////////////////////////////////// + +px_bool PX_BitmapBuild(px_surface *psurface,px_char *BitmapBuffer,px_int *size); + +#endif \ No newline at end of file diff --git a/code/PainterEngine/Core/PX_BpNeural.c b/code/PainterEngine/Core/PX_BpNeural.c new file mode 100644 index 0000000000000000000000000000000000000000..7bf7742a185dd46292d71fabd1cd6e987b4ba2c6 --- /dev/null +++ b/code/PainterEngine/Core/PX_BpNeural.c @@ -0,0 +1,304 @@ +#include "PX_BpNeural.h" +px_bool PX_BpNeuralsInit(px_memorypool *mp,PX_BpNeurals *bpN,px_int inputCount,px_int hiddenCount,px_int outputCount,px_double bias1,px_double bias2,px_double learningRate,PX_BPNERURALS_ACTIVATION_FUNCTION activation,PX_BPNERURALS_INITMODE mode,px_double c) +{ + px_int i; + if (!inputCount||!hiddenCount||!outputCount) + { + return PX_FALSE; + } + + bpN->bias1=bias1; + bpN->bias2=bias2; + bpN->ho_w=PX_NULL; + bpN->ih_w=PX_NULL; + bpN->input=PX_NULL; + bpN->output=PX_NULL; + bpN->hidden=PX_NULL; + bpN->netHidden=PX_NULL; + bpN->netOutput=PX_NULL; + bpN->activationFunction=activation; + bpN->learningRate=learningRate; + + bpN->hiddenCount=hiddenCount; + bpN->inputCount=inputCount; + bpN->outputCount=outputCount; + + bpN->input=(px_double *)MP_Malloc(mp,inputCount*sizeof(px_double)); + if(!bpN->input) goto _ERROR; + + bpN->hidden=(px_double *)MP_Malloc(mp,hiddenCount*sizeof(px_double)); + if(!bpN->hidden) goto _ERROR; + + bpN->netHidden=(px_double *)MP_Malloc(mp,hiddenCount*sizeof(px_double)); + if(!bpN->netHidden) goto _ERROR; + + bpN->output=(px_double *)MP_Malloc(mp,outputCount*sizeof(px_double)); + if(!bpN->output) goto _ERROR; + + bpN->netOutput=(px_double *)MP_Malloc(mp,outputCount*sizeof(px_double)); + if(!bpN->netOutput) goto _ERROR; + + bpN->ih_w=(px_double *)MP_Malloc(mp,inputCount*hiddenCount*sizeof(px_double)); + if(!bpN->ih_w) goto _ERROR; + + bpN->ho_w=(px_double *)MP_Malloc(mp,outputCount*hiddenCount*sizeof(px_double)); + if(!bpN->ho_w) goto _ERROR; + + + switch(mode) + { + + case PX_BPNERURALS_INITMODE_RAND: + for (i=0;iih_w[i]=PX_rand()/1.0/PX_RAND_MAX; + } + for (i=0;iho_w[i]=PX_rand()/1.0/PX_RAND_MAX; + } + break; + case PX_BPNERURALS_INITMODE_GAUSS: + for (i=0;iih_w[i]=PX_GaussRand(); + } + for (i=0;iho_w[i]=PX_GaussRand(); + } + break; + + case PX_BPNERURALS_INITMODE_CONST: + default: + for (i=0;iih_w[i]=c; + } + for (i=0;iho_w[i]=c; + } + break; + + } + return PX_TRUE; +_ERROR: + if(bpN->input) MP_Free(mp,bpN->input); + if(bpN->output) MP_Free(mp,bpN->output); + if(bpN->hidden) MP_Free(mp,bpN->hidden); + if(bpN->netHidden) MP_Free(mp,bpN->netHidden); + if(bpN->netOutput) MP_Free(mp,bpN->netOutput); + if(bpN->ih_w) MP_Free(mp,bpN->ih_w); + if(bpN->ho_w) MP_Free(mp,bpN->ho_w); + return PX_FALSE; +} + +px_void PX_BpNeuralsTraining(PX_BpNeurals *bpN,px_double *expect) +{ + px_int i,j,k; + px_double E_Total; + for (i=0;ihiddenCount;i++) + { + //netI=input0*w1+input2*w2+input3*w3...... + bpN->netHidden[i]=0; + for (j=0;jinputCount;j++) + { + bpN->netHidden[i]+=bpN->input[j]*bpN->ih_w[i*bpN->inputCount+j]; + } + //bias + bpN->netHidden[i]+=bpN->bias1; + + switch(bpN->activationFunction) + { + case PX_BPNERURALS_ACTIVATION_FUNCTION_SIGMOID: + { + bpN->hidden[i]=PX_sigmoid(bpN->netHidden[i]); + } + break; + case PX_BPNERURALS_ACTIVATION_FUNCTION_TANH: + default: + { + bpN->hidden[i]=PX_tanh(bpN->netHidden[i]); + } + break; + } + } + + for (i=0;ioutputCount;i++) + { + //netI=input0*w1+input2*w2+input3*w3...... + bpN->netOutput[i]=0; + for (j=0;jhiddenCount;j++) + { + bpN->netOutput[i]+=bpN->hidden[j]*bpN->ho_w[i*bpN->hiddenCount+j]; + } + //bias + bpN->netOutput[i]+=bpN->bias2; + + switch(bpN->activationFunction) + { + case PX_BPNERURALS_ACTIVATION_FUNCTION_SIGMOID: + { + bpN->output[i]=PX_sigmoid(bpN->netOutput[i]); + } + break; + case PX_BPNERURALS_ACTIVATION_FUNCTION_TANH: + default: + { + bpN->output[i]=PX_tanh(bpN->netOutput[i]); + } + break; + } + } + //back HiddenLayer + + + for (j=0;jhiddenCount;j++) + { + E_Total=0; + for (k=0;koutputCount;k++) + { + switch(bpN->activationFunction) + { + case PX_BPNERURALS_ACTIVATION_FUNCTION_SIGMOID: + { + E_Total+=-(expect[k]-bpN->output[k])*PX_sigmoid(bpN->netOutput[k])*(1-PX_sigmoid(bpN->netOutput[k]))*bpN->ho_w[k]; + } + break; + case PX_BPNERURALS_ACTIVATION_FUNCTION_TANH: + default: + { + E_Total+=-(expect[k]-bpN->output[k])*(1-PX_tanh(bpN->netOutput[k])*PX_tanh(bpN->netOutput[k]))*bpN->ho_w[k]; + } + break; + } + } + E_Total*=PX_sigmoid(bpN->netHidden[j])*(1-PX_sigmoid(bpN->netOutput[j])); + + for (i=0;iinputCount;i++) + { + bpN->ih_w[j*bpN->inputCount+i]-=E_Total*bpN->input[i]*bpN->learningRate; + } + } + + + + //back + + switch(bpN->activationFunction) + { + case PX_BPNERURALS_ACTIVATION_FUNCTION_SIGMOID: + { + for (i=0;ioutputCount;i++) + { + E_Total=-(expect[i]-bpN->output[i])*PX_sigmoid(bpN->netOutput[i])*(1-PX_sigmoid(bpN->netOutput[i])); + + for (j=0;jhiddenCount;j++) + { + bpN->ho_w[i*bpN->hiddenCount+j]-=E_Total*bpN->hidden[j]*bpN->learningRate; + } + } + } + break; + case PX_BPNERURALS_ACTIVATION_FUNCTION_TANH: + default: + { + for (i=0;ioutputCount;i++) + { + E_Total=-(expect[i]-bpN->output[i])*(1-PX_tanh(bpN->netOutput[i])*PX_tanh(bpN->netOutput[i])); + for (j=0;jhiddenCount;j++) + { + bpN->ho_w[i*bpN->hiddenCount+j]-=E_Total*bpN->hidden[j]*bpN->learningRate; + } + } + + } + break; + } + + + + +} + +px_void PX_BpNeuralsTrain(PX_BpNeurals *bpN,px_double *input,px_double *expect) +{ + PX_memcpy(bpN->input,input,bpN->inputCount*sizeof(px_double)); + PX_BpNeuralsTraining(bpN,expect); +} + +px_void PX_BpNeuralsForward(PX_BpNeurals *bpN,px_double *input,px_double *output) +{ + px_int i,j; + + PX_memcpy(bpN->input,input,bpN->inputCount*sizeof(px_double)); + + for (i=0;ihiddenCount;i++) + { + //netI=input0*w1+input2*w2+input3*w3...... + bpN->netHidden[i]=0; + for (j=0;jinputCount;j++) + { + bpN->netHidden[i]+=bpN->input[i]*bpN->ih_w[i*bpN->inputCount+j]; + } + //bias + bpN->netHidden[i]+=bpN->bias1; + + switch(bpN->activationFunction) + { + case PX_BPNERURALS_ACTIVATION_FUNCTION_SIGMOID: + { + bpN->hidden[i]=PX_sigmoid(bpN->netHidden[i]); + } + break; + case PX_BPNERURALS_ACTIVATION_FUNCTION_TANH: + default: + { + bpN->hidden[i]=PX_tanh(bpN->netHidden[i]); + } + break; + } + } + + for (i=0;ioutputCount;i++) + { + //netI=input0*w1+input2*w2+input3*w3...... + bpN->netOutput[i]=0; + for (j=0;jhiddenCount;j++) + { + bpN->netOutput[i]+=bpN->hidden[i]*bpN->ho_w[i*bpN->hiddenCount+j]; + } + //bias + bpN->netOutput[i]+=bpN->bias2; + + switch(bpN->activationFunction) + { + case PX_BPNERURALS_ACTIVATION_FUNCTION_SIGMOID: + { + bpN->output[i]=PX_sigmoid(bpN->netOutput[i]); + } + break; + case PX_BPNERURALS_ACTIVATION_FUNCTION_TANH: + default: + { + bpN->output[i]=PX_tanh(bpN->netOutput[i]); + } + break; + } + } + + PX_memcpy(output,bpN->output,sizeof(px_double)*bpN->outputCount); +} + +px_void PX_BpNeuralsFree(PX_BpNeurals *bpN) +{ + if(bpN->input) MP_Free(bpN->mp,bpN->input); + if(bpN->output) MP_Free(bpN->mp,bpN->output); + if(bpN->hidden) MP_Free(bpN->mp,bpN->hidden); + if(bpN->netHidden) MP_Free(bpN->mp,bpN->netHidden); + if(bpN->netOutput) MP_Free(bpN->mp,bpN->netOutput); + if(bpN->ih_w) MP_Free(bpN->mp,bpN->ih_w); + if(bpN->ho_w) MP_Free(bpN->mp,bpN->ho_w); +} + diff --git a/code/PainterEngine/Core/PX_BpNeural.h b/code/PainterEngine/Core/PX_BpNeural.h new file mode 100644 index 0000000000000000000000000000000000000000..0a3c105bdd2be4355ae8074dd55afe30b544ce3c --- /dev/null +++ b/code/PainterEngine/Core/PX_BpNeural.h @@ -0,0 +1,44 @@ +#ifndef PX_BRNEURAL_H +#define PX_BRNEURAL_H + +#include "PX_MemoryPool.h" + +typedef enum +{ + PX_BPNERURALS_INITMODE_CONST, + PX_BPNERURALS_INITMODE_RAND, + PX_BPNERURALS_INITMODE_GAUSS, +}PX_BPNERURALS_INITMODE; + +typedef enum +{ + PX_BPNERURALS_ACTIVATION_FUNCTION_SIGMOID, + PX_BPNERURALS_ACTIVATION_FUNCTION_TANH, +}PX_BPNERURALS_ACTIVATION_FUNCTION; + +typedef struct +{ + px_int inputCount; + px_int hiddenCount; + px_int outputCount; + px_double bias1,bias2; + px_double *input; + px_double *netHidden; + px_double *ih_w; + px_double *hidden; + px_double *ho_w; + px_double *netOutput; + px_double *output; + px_double learningRate; + px_memorypool *mp; + PX_BPNERURALS_ACTIVATION_FUNCTION activationFunction; +}PX_BpNeurals; + + + +px_bool PX_BpNeuralsInit(px_memorypool *mp,PX_BpNeurals *bpN,px_int inputCount,px_int hiddenCount,px_int outputCount,px_double bias1,px_double bias2,px_double learningRate,PX_BPNERURALS_ACTIVATION_FUNCTION activation,PX_BPNERURALS_INITMODE mode,px_double c); +px_void PX_BpNeuralsTrain(PX_BpNeurals *bpN,px_double *input,px_double *expect); +px_void PX_BpNeuralsForward(PX_BpNeurals *bpN,px_double *input,px_double *output); +px_void PX_BpNeuralsFree(PX_BpNeurals *bpN); + +#endif diff --git a/code/PainterEngine/Core/PX_Core.h b/code/PainterEngine/Core/PX_Core.h new file mode 100644 index 0000000000000000000000000000000000000000..27552fa6bc6569ef6f65dc142930625598d44414 --- /dev/null +++ b/code/PainterEngine/Core/PX_Core.h @@ -0,0 +1,37 @@ +////////////////////////////////////////////////////////////////////////// +/* + PainterEngine Core + (C)2019 DBinary + + This program is free software; you can redistribute it and/or modify + it under the terms of the BSD General Public License +*/ +////////////////////////////////////////////////////////////////////////// + +#ifndef __PX_CORE_H +#define __PX_CORE_H +#include "PX_Texture.h" +#include "PX_BaseGeo.h" +#include "PX_Font.h" +#include "PX_String.h" +#include "PX_Memory.h" +#include "PX_Hashmap.h" +#include "PX_Vector.h" +#include "PX_List.h" +#include "PX_AES.h" +#include "PX_ANN.h" +#include "PX_Sound.h" +#include "PX_Effect.h" +#include "PX_Quicksort.h" +#include "PX_Quadtree.h" +#include "PX_curve25519.h" +#include "PX_Sha256.h" +#include "PX_Arle.h" +#include "PX_Huffman.h" +#include "PX_Packet.h" +#include "PX_Base64.h" +#include "PX_3D.h" +#include "PX_MFCC.h" +#include "PX_KalmanFilter.h" +#include "PX_SoundModule.h" +#endif diff --git a/code/PainterEngine/Core/PX_Effect.c b/code/PainterEngine/Core/PX_Effect.c new file mode 100644 index 0000000000000000000000000000000000000000..6cc0fc63f3922d011aace75122b617dc25adee97 --- /dev/null +++ b/code/PainterEngine/Core/PX_Effect.c @@ -0,0 +1,89 @@ +#include "PX_Effect.h" + + + +px_bool PX_EffectShine(px_surface *s,px_int radius,px_color color,px_float intension) +{ + px_int x,y,sampleX,sampleY; + px_surface ns; + px_int alpha; + px_color bindColor; + if(!PX_SurfaceCreate(s->MP,s->width,s->height,&ns)) + return PX_FALSE; + + for(y=0;yheight;y++) + for (x=0;xwidth;x++) + { + if(PX_SurfaceGetPixel(s,x,y)._argb.a==0) + { + alpha=0; + for (sampleY=y-radius;sampleY<=y+radius;sampleY++) + { + for (sampleX=x-radius;sampleX<=x+radius;sampleX++) + { + if(sampleX>=0&&sampleXwidth&&sampleY>=0&&sampleY<=s->height-1) + alpha+=PX_SurfaceGetPixel(s,sampleX,sampleY)._argb.a; + } + } + alpha/=((radius*2-1)*(radius*2-1)); + alpha=(px_int)(alpha*intension); + alpha=alpha>255?255:alpha; + bindColor=color; + if(alpha!=0) + { + bindColor._argb.a=alpha; + PX_SurfaceSetPixel(&ns,x,y,bindColor); + } + } + else + { + PX_SurfaceSetPixel(&ns,x,y,PX_SurfaceGetPixel(s,x,y)); + } + } + PX_memcpy(s->surfaceBuffer,ns.surfaceBuffer,s->width*s->height*sizeof(px_color)); + PX_SurfaceFree(&ns); + return PX_TRUE; +} + +px_bool PX_EffectOutline(px_surface *s,px_int radius,px_color color) +{ + px_int x,y,sampleX,sampleY; + px_surface ns; + px_int alpha; + px_color bindColor; + if(!PX_SurfaceCreate(s->MP,s->width,s->height,&ns)) + return PX_FALSE; + + for(y=0;yheight;y++) + for (x=0;xwidth;x++) + { + if(PX_SurfaceGetPixel(s,x,y)._argb.a==0) + { + alpha=0; + for (sampleY=y-radius;sampleY<=y+radius;sampleY++) + { + for (sampleX=x-radius;sampleX<=x+radius;sampleX++) + { + if(sampleX>=0&&sampleXwidth&&sampleY>=0&&sampleY<=s->height-1) + alpha+=PX_SurfaceGetPixel(s,sampleX,sampleY)._argb.a; + } + } + alpha/=((radius*2-1)*(radius-1)); + alpha=alpha>255?255:alpha; + bindColor=color; + if(alpha!=0) + { + bindColor._argb.a=alpha; + PX_SurfaceSetPixel(&ns,x,y,bindColor); + } + } + else + { + PX_SurfaceSetPixel(&ns,x,y,PX_SurfaceGetPixel(s,x,y)); + } + + } + PX_memcpy(s->surfaceBuffer,ns.surfaceBuffer,s->width*s->height*sizeof(px_color)); + PX_SurfaceFree(&ns); + return PX_TRUE; +} diff --git a/code/PainterEngine/Core/PX_Effect.h b/code/PainterEngine/Core/PX_Effect.h new file mode 100644 index 0000000000000000000000000000000000000000..e16286d8684222c2546ecb2f3138f6cdb3a35b87 --- /dev/null +++ b/code/PainterEngine/Core/PX_Effect.h @@ -0,0 +1,7 @@ +#ifndef PX_EFFECT_H +#define PX_EFFECT_H +#include "PX_Surface.h" + +px_bool PX_EffectShine(px_surface *s,px_int radius,px_color color,px_float intension); +px_bool PX_EffectOutline(px_surface *s,px_int radius,px_color color); +#endif diff --git a/code/PainterEngine/Core/PX_Font.c b/code/PainterEngine/Core/PX_Font.c new file mode 100644 index 0000000000000000000000000000000000000000..7246d6ebd864f3fdeb43b44543ba0d2c620f21d5 --- /dev/null +++ b/code/PainterEngine/Core/PX_Font.c @@ -0,0 +1,21010 @@ + +#include "PX_Font.h" + +static px_void PX_GetGBKCode(px_uchar* pBuffer,px_uchar * c); +static px_void PX_GetASCIICode(px_uchar* pBuffer,px_uchar ASCII); + + +static px_uchar const HzLib[] = { +/* */ +0x00,0x00,0x77,0x70,0x55,0x20,0x55,0xE0,0x56,0xA0,0x56,0xA0,0x55,0xA0,0x55,0xE0, +0x75,0x20,0x56,0x20,0x04,0x20,0x04,0x60,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x48,0x20,0x48,0x20,0x53,0xA0,0x52,0xA0,0x4A,0xA0,0x4A,0xA0, +0x4B,0xA0,0x72,0x20,0x40,0x20,0x40,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x11,0x00,0x12,0x20,0x17,0xF0,0x7A,0x10,0x13,0xE0,0x14,0x80,0x10,0x80, +0x17,0xF0,0x19,0x40,0x62,0x20,0x04,0x10,0x00,0x00, +/* */ +0x20,0x80,0x21,0x00,0x22,0x20,0x77,0xF0,0x22,0x10,0x23,0xE0,0x34,0x80,0x60,0x80, +0x27,0xF0,0x21,0x40,0x22,0x20,0x6C,0x10,0x00,0x00, +/* */ +0x04,0x40,0x74,0x40,0x5F,0xF0,0x54,0x40,0x50,0x00,0x54,0x40,0x54,0x40,0x52,0x80, +0x71,0x00,0x52,0x80,0x04,0x40,0x18,0x30,0x00,0x00, +/* */ +0x00,0x80,0x71,0x00,0x52,0x20,0x57,0xF0,0x52,0x10,0x53,0xE0,0x54,0x80,0x50,0x80, +0x77,0xF0,0x51,0x40,0x02,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x06,0x00, +0x09,0x10,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x10,0x80,0x22,0xA0,0x7A,0xA0,0x4B,0xE0,0x48,0x00,0x4B,0xE0,0x78,0x20,0x48,0x20, +0x4B,0xE0,0x4A,0x00,0x7A,0x10,0x49,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x53,0xE0,0x32,0x20,0x13,0xE0,0x17,0x70,0x35,0x50, +0x57,0x70,0x10,0x80,0x24,0x90,0x47,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x27,0xE0,0x14,0x20,0x07,0xE0,0x64,0x20,0x27,0xF0, +0x28,0x90,0x25,0x50,0x37,0xD0,0x20,0x30,0x00,0x00, +/* */ +0x20,0x60,0x23,0x80,0x38,0x80,0x57,0xF0,0x12,0xA0,0x14,0x90,0x78,0x80,0x17,0xF0, +0x11,0x20,0x2B,0x20,0x28,0xC0,0x47,0x30,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x08,0x80,0x08,0x80,0x05,0x00, +0x02,0x00,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x03,0xF0,0x7A,0x10,0x13,0xF0,0x12,0x10,0x23,0xF0,0x38,0x00,0x6B,0xF0,0x28,0x20, +0x2F,0xF0,0x3A,0x20,0x29,0x20,0x00,0x60,0x00,0x00, +/* */ +0x01,0xF0,0x7E,0x00,0x24,0x20,0x12,0x40,0x7F,0xF0,0x44,0x10,0x3F,0xE0,0x08,0x00, +0x0F,0xC0,0x14,0x40,0x23,0x80,0x5C,0x70,0x00,0x00, +/* */ +0x08,0x20,0x74,0x40,0x50,0x00,0x5F,0xE0,0x64,0x40,0x68,0x20,0x50,0x10,0x5F,0xE0, +0x5A,0xA0,0x6A,0xA0,0x4A,0xA0,0x5F,0xF0,0x00,0x00, +/* */ +0x28,0x80,0x7C,0x40,0x2B,0xF0,0x3A,0x10,0x10,0x80,0x7C,0x80,0x57,0xF0,0x7D,0x20, +0x11,0x20,0x7C,0xC0,0x11,0x20,0x16,0x10,0x00,0x00, +/* */ +0x1F,0xE0,0x20,0x00,0x5F,0xC0,0x00,0x00,0x3F,0xC0,0x04,0x40,0x7F,0xC0,0x48,0xC0, +0x3F,0x40,0x12,0x50,0x0C,0x30,0x33,0x10,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x44,0x10,0x04,0x00,0x7F,0xF0,0x08,0x40,0x10,0x40, +0x1C,0x80,0x03,0x00,0x0C,0xC0,0x70,0x20,0x00,0x00, +/* */ +0x11,0x00,0x1F,0xE0,0x22,0x80,0x24,0x40,0x69,0x30,0x37,0xC0,0x25,0x40,0x27,0xC0, +0x25,0x40,0x27,0xD0,0x25,0x10,0x20,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7A,0x10,0x10,0x80,0x10,0x80,0x1B,0xF0,0x71,0x20, +0x11,0x20,0x10,0xC0,0x11,0x20,0x36,0x10,0x00,0x00, +/* */ +0x01,0x00,0x70,0x80,0x5F,0xF0,0x54,0x20,0x52,0x40,0x7F,0xF0,0x50,0x00,0x57,0xE0, +0x54,0x20,0x77,0xE0,0x54,0x20,0x07,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x20,0x00,0x2F,0xE0,0x21,0x00, +0x3F,0xF0,0x21,0x00,0x21,0x00,0x41,0x00,0x00,0x00, +/* */ +0x01,0x00,0x38,0x80,0x2B,0xF0,0x2A,0x10,0x38,0x80,0x28,0x80,0x2B,0xF0,0x39,0x20, +0x2B,0x20,0x28,0xC0,0x29,0x20,0x5A,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x44,0x10,0x3F,0xE0,0x08,0x80,0x07,0x00,0x78,0xE0,0x02,0x00, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x01,0x00,0x38,0x80,0x2F,0xF0,0x28,0x00,0x38,0x00,0x2B,0xC0,0x2A,0x40,0x3A,0x40, +0x2A,0x40,0x2A,0x50,0x2C,0x50,0x58,0x30,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x08,0x00,0x71,0xF0,0x41,0x10, +0x41,0x10,0x4D,0x10,0x71,0x30,0x01,0x00,0x00,0x00, +/* */ +0x02,0x00,0x1F,0xC0,0x12,0x40,0x12,0x40,0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x78,0xF0,0x48,0x90,0x48,0x90,0x48,0x90,0x48,0x90,0x4F,0x90,0x40,0x10, +0x40,0x10,0x40,0x10,0x7F,0xF0,0x40,0x10,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x7E,0x80,0x08,0xF0,0x3D,0x20,0x08,0xA0,0x7E,0xA0,0x10,0xA0, +0x1C,0xA0,0x14,0x40,0x24,0xA0,0x4D,0x10,0x00,0x00, +/* */ +0x10,0x80,0x7C,0x80,0x10,0xF0,0x39,0x20,0x12,0xA0,0x7C,0xA0,0x20,0x40,0x3C,0xA0, +0x25,0x10,0x4C,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x10,0x00,0x7D,0xB0,0x44,0x90,0x7C,0x90,0x46,0xD0,0x7D,0xB0,0x10,0x90,0x7D,0xB0, +0x2A,0xD0,0x54,0x90,0x38,0x90,0x11,0xB0,0x00,0x00, +/* */ +0x20,0x60,0x13,0x80,0x78,0x80,0x08,0x80,0x10,0x80,0x1B,0xF0,0x30,0x80,0x58,0x80, +0x11,0x40,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x14,0x80,0x1E,0x80,0x24,0x80,0x2E,0xF0,0x65,0x20,0x3E,0xA0,0x28,0xA0,0x2E,0xA0, +0x2A,0xA0,0x2A,0x40,0x2A,0xA0,0x37,0x10,0x00,0x00, +/* */ +0x04,0x00,0x3F,0xE0,0x22,0x20,0x2A,0xA0,0x3F,0xE0,0x22,0x20,0x2A,0xA0,0x20,0x20, +0x02,0x00,0x7F,0xF0,0x08,0x80,0x70,0x70,0x00,0x00, +/* */ +0x11,0x00,0x17,0xF0,0x14,0x90,0x5E,0xB0,0x57,0xF0,0x54,0x90,0x56,0xB0,0x14,0x10, +0x10,0x80,0x17,0xF0,0x11,0x40,0x16,0x30,0x00,0x00, +/* */ +0x42,0x00,0x3F,0xF0,0x11,0x10,0x15,0x50,0x5F,0xF0,0x31,0x10,0x15,0x50,0x10,0x10, +0x01,0x00,0x3F,0xF0,0x44,0x40,0x18,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x20,0x00,0x20,0x10,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x20,0x10,0x27,0x10,0x25,0x50,0x75,0x50,0x27,0x50,0x22,0x50,0x32,0x50,0x6F,0x50, +0x25,0x50,0x25,0x10,0x29,0x10,0x73,0x30,0x00,0x00, +/* */ +0x10,0x40,0x12,0x40,0x12,0x40,0x7A,0x40,0x12,0x40,0x12,0x40,0x1A,0x40,0x72,0x40, +0x12,0x40,0x14,0x20,0x14,0x20,0x38,0x10,0x00,0x00, +/* */ +0x00,0x40,0x72,0x40,0x52,0x40,0x52,0x40,0x52,0x40,0x52,0x40,0x52,0x40,0x52,0x40, +0x72,0x40,0x54,0x20,0x04,0x20,0x08,0x10,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x54,0x90,0x54,0x90,0x54,0x90,0x54,0x90,0x57,0xF0,0x54,0x00, +0x74,0x00,0x54,0x10,0x04,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x00,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x20,0x00,0x20,0x10,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x40, +0x10,0x40,0x10,0x20,0x20,0x20,0x40,0x10,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x37,0xF0,0x14,0x90,0x14,0x90,0x37,0xF0, +0x54,0x00,0x14,0x10,0x24,0x10,0x43,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0,0x20,0x00, +0x20,0x00,0x20,0x10,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x11,0x40,0x11,0x20,0x11,0x00,0x7B,0xF0,0x11,0x00,0x11,0xF0,0x1A,0x90,0x72,0x90, +0x12,0xA0,0x14,0x40,0x14,0xA0,0x39,0x10,0x00,0x00, +/* */ +0x01,0x40,0x79,0x20,0x49,0x00,0x4F,0xF0,0x79,0x00,0x11,0xF0,0x1A,0x90,0x52,0x90, +0x52,0xA0,0x5C,0x40,0x64,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x28,0x00,0x7D,0xF0,0x29,0x50,0x39,0x50,0x11,0x50,0x7D,0x50,0x55,0xF0,0x7D,0x00, +0x11,0x00,0x7D,0x10,0x11,0x10,0x10,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x24,0x90,0x74,0x90,0x24,0x90,0x24,0x90,0x37,0xF0,0x64,0x00, +0x24,0x00,0x24,0x10,0x24,0x10,0x63,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x7A,0x90,0x12,0x90,0x3A,0x90,0x12,0x90,0x7B,0xF0,0x12,0x00, +0x3A,0x00,0x52,0x10,0x12,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x24,0x10,0x74,0x90,0x24,0x90,0x24,0x90,0x24,0x90,0x24,0x90, +0x34,0x90,0x61,0x40,0x02,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x00,0x00,0x22,0xF0,0x7F,0x90,0x22,0xF0, +0x3E,0x90,0x08,0xF0,0x7E,0x90,0x09,0x30,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x25,0x20,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0, +0x08,0x00,0x10,0x40,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x08,0x80,0x10,0x40,0x28,0xA0,0x07,0x00,0x18,0xC0,0x60,0x30,0x1F,0xC0,0x12,0x40, +0x1F,0xC0,0x10,0x00,0x10,0x20,0x0F,0xE0,0x00,0x00, +/* */ +0x04,0x00,0x08,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x10,0x40,0x10,0x80,0x13,0xF0,0x7A,0x10,0x12,0x10,0x3A,0x10,0x37,0xF0,0x52,0x10, +0x12,0x10,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x02,0x00,0x04,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x17,0xF0,0x15,0x50,0x7D,0x50,0x17,0xF0,0x10,0x80,0x13,0xE0,0x18,0x80,0x77,0xF0, +0x11,0x00,0x12,0x20,0x17,0xF0,0x30,0x10,0x00,0x00, +/* */ +0x08,0x00,0x0F,0xF0,0x10,0x80,0x11,0x00,0x37,0xF0,0x54,0x10,0x14,0x10,0x17,0xF0, +0x14,0x10,0x14,0x10,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x45,0x00,0x55,0xF0,0x56,0x20,0x55,0x20,0x55,0x20,0x55,0x20, +0x55,0x40,0x10,0x80,0x29,0x40,0x46,0x30,0x00,0x00, +/* */ +0x0D,0xF0,0x70,0x40,0x10,0x40,0x11,0xF0,0x7C,0x40,0x11,0xF0,0x10,0x40,0x7C,0x40, +0x11,0xF0,0x10,0x40,0x20,0x40,0x40,0x40,0x00,0x00, +/* */ +0x08,0x80,0x71,0x00,0x13,0xF0,0x12,0x50,0x7B,0xF0,0x12,0x90,0x3B,0xF0,0x35,0x00, +0x52,0x40,0x17,0xF0,0x10,0x40,0x10,0x40,0x00,0x00, +/* */ +0x04,0x00,0x72,0x70,0x20,0x20,0x2F,0xA0,0x21,0x20,0x75,0x20,0x25,0x70,0x22,0x20, +0x22,0x20,0x35,0x20,0x69,0x20,0x00,0x70,0x00,0x00, +/* */ +0x02,0x00,0x72,0xF0,0x22,0x40,0x2A,0x40,0x2A,0x40,0x7A,0x40,0x2A,0xF0,0x32,0x40, +0x22,0x40,0x34,0x40,0x64,0x40,0x09,0xF0,0x00,0x00, +/* */ +0x22,0x00,0x24,0xE0,0x2E,0xA0,0x7A,0xA0,0x2F,0x30,0x2A,0x00,0x3E,0xE0,0x6A,0xA0, +0x2E,0xA0,0x2A,0x40,0x2A,0xA0,0x77,0x10,0x00,0x00, +/* */ +0x10,0x30,0x13,0xC0,0x12,0x00,0x7A,0x00,0x13,0xF0,0x12,0x90,0x1A,0x90,0x72,0xA0, +0x12,0xA0,0x12,0x40,0x14,0xA0,0x39,0x10,0x00,0x00, +/* */ +0x08,0x00,0x11,0xE0,0x3D,0x20,0x25,0x20,0x36,0x30,0x2C,0x00,0x7D,0xE0,0x25,0x20, +0x35,0x20,0x2C,0xC0,0x25,0x20,0x4E,0x10,0x00,0x00, +/* */ +0x09,0xF0,0x28,0x40,0x24,0x80,0x45,0xF0,0x01,0x10,0x7D,0x50,0x25,0x50,0x25,0x50, +0x25,0x50,0x24,0x40,0x24,0xA0,0x4D,0x10,0x00,0x00, +/* */ +0x10,0x30,0x13,0xC0,0x12,0x00,0x7A,0x00,0x13,0xF0,0x3A,0x90,0x36,0x90,0x52,0xA0, +0x12,0xA0,0x12,0x40,0x14,0xA0,0x19,0x10,0x00,0x00, +/* */ +0x08,0x30,0x2B,0xC0,0x2A,0x00,0x2A,0x00,0x3F,0xF0,0x22,0x90,0x22,0x90,0x3A,0xA0, +0x2A,0xA0,0x2A,0x40,0x2C,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x11,0x40,0x11,0x40,0x12,0x20,0x7A,0x20,0x14,0x10,0x13,0xE0,0x19,0x20,0x71,0x20, +0x11,0x20,0x12,0x20,0x12,0x20,0x34,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x12,0xA0,0x78,0x80,0x13,0xE0,0x10,0x80,0x18,0x80,0x77,0xF0, +0x10,0x80,0x10,0x80,0x10,0x80,0x30,0x80,0x00,0x00, +/* */ +0x08,0x80,0x0C,0x90,0x12,0xA0,0x10,0x80,0x33,0xE0,0x50,0x80,0x10,0x80,0x17,0xF0, +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x41,0x40,0x26,0x20,0x75,0x70,0x05,0x00,0x55,0x50,0x25,0xA0,0x75,0x70,0x25,0x20, +0x75,0x70,0x2A,0x20,0x2A,0xA0,0x53,0xA0,0x00,0x00, +/* */ +0x02,0x00,0x12,0x40,0x0A,0x80,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0, +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x04,0x00,0x3F,0x80,0x04,0x80,0x24,0xA0,0x24,0x90,0x24,0x90, +0x48,0x90,0x08,0x80,0x10,0x80,0x27,0x00,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x22,0xA0,0x48,0x80,0x73,0xE0,0x10,0x80,0x20,0x80,0x77,0xF0, +0x00,0x80,0x18,0x80,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x08,0x00,0x3E,0xF0,0x08,0x90,0x08,0x90,0x3E,0xA0,0x08,0xA0,0x08,0x90,0x7E,0x90, +0x08,0x90,0x10,0xE0,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x08,0x00,0x7E,0xF0,0x08,0x90,0x3E,0xA0,0x08,0x90,0x7E,0x90,0x10,0xE0,0x22,0x80, +0x7F,0xE0,0x22,0x20,0x22,0x60,0x02,0x00,0x00,0x00, +/* */ +0x12,0x00,0x17,0x70,0x12,0x50,0x7A,0x50,0x17,0x60,0x32,0x60,0x3A,0x50,0x57,0x50, +0x12,0x50,0x12,0x60,0x12,0x40,0x14,0x40,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x12,0x20,0x79,0x40,0x17,0xF0,0x34,0x10,0x38,0x80,0x57,0xF0, +0x11,0x00,0x11,0xF0,0x12,0x10,0x14,0x60,0x00,0x00, +/* */ +0x00,0x80,0x3B,0xF0,0x29,0x20,0x28,0xC0,0x3B,0xF0,0x2A,0x90,0x28,0x40,0x3B,0xF0, +0x29,0x00,0x29,0xF0,0x29,0x10,0x5A,0x60,0x00,0x00, +/* */ +0x22,0x00,0x22,0x70,0x47,0x50,0x52,0x50,0x62,0x60,0x27,0x60,0x42,0x50,0x72,0x50, +0x07,0x50,0x12,0x60,0x64,0x40,0x08,0x40,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x7B,0xE0,0x11,0x00,0x37,0xF0,0x3A,0x20,0x54,0x90, +0x13,0xE0,0x10,0x80,0x17,0xF0,0x10,0x80,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xF0,0x11,0x20,0x10,0xC0,0x23,0xF0,0x3A,0x90,0x68,0x40,0x2B,0xF0, +0x29,0x00,0x39,0xF0,0x29,0x10,0x02,0x60,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x11,0xF0,0x7C,0x40,0x54,0x40,0x55,0xF0,0x7C,0x40,0x10,0x40, +0x15,0xF0,0x1C,0x40,0x64,0x40,0x00,0x40,0x00,0x00, +/* */ +0x20,0x80,0x37,0xF0,0x42,0x20,0x01,0x40,0x77,0xF0,0x24,0x10,0x20,0x80,0x77,0xF0, +0x21,0x00,0x21,0xF0,0x32,0x10,0x24,0x60,0x00,0x00, +/* */ +0x08,0x80,0x0F,0xF0,0x12,0x20,0x11,0x40,0x37,0xF0,0x54,0x10,0x10,0x80,0x17,0xF0, +0x11,0x00,0x11,0xF0,0x12,0x10,0x14,0x60,0x00,0x00, +/* */ +0x41,0x00,0x2F,0xF0,0x04,0x20,0x02,0x40,0x6F,0xF0,0x29,0x10,0x20,0x80,0x2F,0xF0, +0x22,0x00,0x33,0xF0,0x24,0x10,0x08,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x00,0x1F,0xE0,0x20,0x20,0x5F,0x20,0x11,0x20, +0x1F,0x20,0x10,0x60,0x10,0x10,0x0F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x39,0x00,0x2B,0xF0,0x2C,0x10,0x3B,0xD0,0x2A,0x50,0x2A,0x50,0x3B,0xD0, +0x2A,0x30,0x2A,0x00,0x2A,0x10,0x59,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x1F,0xE0,0x20,0x20,0x5F,0x20,0x11,0x20,0x11,0x20,0x1F,0x20, +0x10,0x60,0x10,0x10,0x10,0x10,0x0F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x12,0x20,0x33,0xE0,0x50,0x80,0x17,0xF0,0x12,0xA0,0x16,0x90, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x7E,0x10,0x02,0x10,0x3E,0x50,0x02,0x50,0x7F,0x50,0x08,0x50,0x49,0x50,0x2A,0x50, +0x1C,0x50,0x2A,0x10,0x49,0x10,0x18,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x41,0x20,0x2F,0xF0,0x05,0x20,0x47,0xE0,0x25,0x20, +0x0F,0xF0,0x04,0x40,0x22,0x40,0x40,0xC0,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x4A,0x90,0x10,0x00,0x1F,0xE0,0x20,0x20,0x5F,0x20, +0x11,0x20,0x1F,0x60,0x10,0x10,0x0F,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x0B,0xE0,0x12,0x20,0x12,0x20,0x33,0xE0,0x50,0x80,0x17,0xF0,0x10,0x80, +0x11,0xC0,0x12,0xA0,0x14,0x90,0x10,0x80,0x00,0x00, +/* */ +0x0B,0xE0,0x12,0x20,0x33,0xE0,0x50,0x80,0x17,0xF0,0x12,0xA0,0x14,0x90,0x10,0x80, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x21,0x00,0x3B,0xF0,0x4A,0x10,0x17,0xD0,0x2A,0x50,0x22,0x50,0x23,0xD0, +0x22,0x30,0x2A,0x00,0x32,0x10,0x21,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00, +0x3F,0xE0,0x02,0x80,0x02,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x13,0xF0,0x7C,0x10,0x13,0xD0,0x12,0x50,0x1A,0x50,0x73,0xD0, +0x12,0x30,0x12,0x00,0x12,0x10,0x31,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x10,0x7A,0x10,0x12,0x60,0x12,0x00,0x1B,0xF0,0x72,0x90, +0x12,0xA0,0x12,0x40,0x12,0xA0,0x33,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x08,0x80,0x3F,0xE0,0x08,0x80, +0x7F,0xF0,0x12,0x40,0x6A,0xB0,0x16,0x40,0x00,0x00, +/* */ +0x10,0x80,0x20,0x80,0x54,0xF0,0x29,0x10,0x12,0x10,0x68,0x90,0x14,0x50,0x6C,0x50, +0x14,0x10,0x64,0x10,0x04,0x10,0x18,0x60,0x00,0x00, +/* */ +0x20,0x80,0x38,0x80,0x49,0xF0,0x12,0x10,0x7D,0xD0,0x55,0x50,0x7D,0x50,0x55,0xD0, +0x7D,0x30,0x01,0x00,0x1D,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x1B,0xE0,0x52,0x20,0x53,0xE0,0x51,0x40,0x53,0xE0,0x11,0x40, +0x17,0xF0,0x2A,0xA0,0x2D,0xD0,0x42,0xA0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x10,0x40,0x7C,0x80,0x10,0x80,0x31,0xA0,0x3A,0x90,0x54,0x90, +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x00,0x80,0x79,0x00,0x13,0xF0,0x12,0x50,0x23,0xF0,0x3A,0x90,0x6B,0xF0,0x29,0x00, +0x2A,0x40,0x2F,0xF0,0x38,0x40,0x28,0x40,0x00,0x00, +/* */ +0x08,0x80,0x78,0xF0,0x08,0x80,0x38,0xE0,0x08,0x80,0x78,0xF0,0x08,0x80,0x02,0x00, +0x29,0x20,0x29,0x10,0x48,0x50,0x07,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x04,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x24,0x20,0x3F,0xE0,0x09,0x00, +0x11,0x00,0x7F,0xF0,0x01,0x00,0x01,0x00,0x00,0x00, +/* */ +0x09,0x00,0x09,0x00,0x09,0x10,0x09,0x20,0x79,0x40,0x09,0x80,0x09,0x00,0x09,0x00, +0x19,0x00,0x69,0x10,0x09,0x10,0x08,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x78,0xF0,0x08,0x80,0x78,0xF0,0x08,0x80,0x04,0x00,0x3F,0xE0,0x0A,0x00, +0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x00,0x00, +/* */ +0x09,0x20,0x79,0xC0,0x09,0x10,0x18,0xF0,0x68,0x00,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x10,0xC0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x20,0x20,0x22,0x20,0x22,0x20,0x22,0x20,0x22,0x20,0x22,0x20, +0x24,0x20,0x09,0x80,0x10,0x60,0x60,0x10,0x00,0x00, +/* */ +0x20,0x00,0x37,0xF0,0x44,0x10,0x04,0x90,0x74,0x90,0x24,0x90,0x24,0x90,0x74,0x90, +0x24,0x90,0x21,0x40,0x32,0x20,0x24,0x10,0x00,0x00, +/* */ +0x10,0x80,0x17,0xE0,0x20,0x00,0x24,0x20,0x62,0x40,0x2F,0xF0,0x20,0x00,0x27,0xE0, +0x24,0x20,0x24,0x20,0x27,0xE0,0x24,0x20,0x00,0x00, +/* */ +0x10,0x00,0x57,0xF0,0x24,0x10,0x54,0x90,0x14,0x90,0x14,0x90,0x34,0x90,0x54,0x90, +0x14,0x90,0x11,0x40,0x12,0x20,0x64,0x10,0x00,0x00, +/* */ +0x08,0x00,0x1F,0xC0,0x28,0x80,0x07,0x00,0x18,0xC0,0x60,0x30,0x1F,0xC0,0x12,0x40, +0x1F,0xC0,0x12,0x40,0x1F,0xC0,0x10,0x40,0x00,0x00, +/* */ +0x1F,0xC0,0x28,0x80,0x07,0x00,0x18,0xC0,0x7F,0xF0,0x12,0x40,0x1F,0xC0,0x12,0x40, +0x1F,0xC0,0x2A,0x20,0x29,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x18,0x00,0x52,0x20,0x51,0x40,0x57,0xF0,0x50,0x00,0x13,0xE0, +0x12,0x20,0x2A,0x20,0x2B,0xE0,0x42,0x20,0x00,0x00, +/* */ +0x20,0x40,0x10,0x40,0x7B,0xF0,0x0A,0x50,0x12,0x40,0x1B,0xE0,0x32,0xA0,0x5A,0xA0, +0x12,0xA0,0x12,0x40,0x14,0xA0,0x19,0x10,0x00,0x00, +/* */ +0x02,0x00,0x04,0x00,0x3F,0xE0,0x08,0x80,0x12,0x40,0x6F,0xB0,0x02,0x00,0x08,0x80, +0x7F,0xF0,0x08,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x7F,0xF0,0x02,0x00,0x07,0x00,0x0A,0x80, +0x12,0x40,0x6F,0xB0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x07,0x00,0x0A,0x80,0x0A,0x80,0x12,0x40, +0x22,0x20,0x5F,0xD0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x02,0x00,0x7F,0xF0,0x02,0x00,0x07,0x00,0x0A,0x80, +0x12,0x40,0x6F,0xB0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x00,0x00,0x3D,0xE0,0x25,0x20,0x3D,0xE0,0x25,0x20, +0x3D,0xE0,0x25,0x20,0x25,0x20,0x4E,0x60,0x00,0x00, +/* */ +0x20,0x00,0x27,0x70,0x45,0x50,0x55,0x50,0x67,0x70,0x25,0x50,0x45,0x50,0x77,0x70, +0x05,0x50,0x15,0x50,0x65,0x50,0x0B,0xB0,0x00,0x00, +/* */ +0x7F,0xF0,0x02,0x00,0x0E,0xC0,0x72,0x30,0x00,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x22,0x20,0x42,0x60,0x00,0x00, +/* */ +0x7F,0xF0,0x08,0x00,0x1F,0xE0,0x30,0x20,0x50,0x20,0x1F,0xE0,0x02,0x20,0x7B,0x40, +0x0A,0x80,0x12,0x40,0x62,0x30,0x06,0x00,0x00,0x00, +/* */ +0x00,0x80,0x74,0x90,0x57,0xF0,0x50,0x00,0x77,0x70,0x15,0x50,0x1F,0x70,0x55,0x50, +0x57,0x70,0x5D,0x50,0x65,0x50,0x0B,0xB0,0x00,0x00, +/* */ +0x44,0x20,0x22,0x40,0x0F,0xF0,0x02,0x40,0x62,0x40,0x22,0x40,0x2F,0xF0,0x22,0x40, +0x22,0x40,0x24,0x40,0x28,0x40,0x5F,0xF0,0x00,0x00, +/* */ +0x27,0xF0,0x13,0xE0,0x02,0x20,0x03,0xE0,0x70,0x00,0x17,0xF0,0x14,0x90,0x17,0xF0, +0x14,0x90,0x17,0xF0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x7F,0xF0,0x10,0x40,0x20,0x40,0x00,0x00, +/* */ +0x21,0x00,0x21,0x00,0x21,0x10,0x21,0x20,0x3D,0x40,0x21,0x80,0x21,0x00,0x21,0x00, +0x25,0x00,0x29,0x10,0x31,0x10,0x20,0xF0,0x00,0x00, +/* */ +0x3E,0x70,0x22,0x50,0x3E,0x50,0x08,0x50,0x7F,0x60,0x08,0x60,0x7F,0x50,0x41,0x50, +0x5D,0x50,0x55,0x60,0x5D,0x40,0x7F,0x40,0x00,0x00, +/* */ +0x10,0x80,0x1E,0xF0,0x29,0x40,0x44,0x20,0x01,0xE0,0x3E,0x00,0x03,0xC0,0x1E,0x00, +0x03,0xE0,0x7E,0x00,0x02,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x10,0x80,0x27,0xF0,0x4C,0x90,0x14,0x80,0x37,0xE0,0x55,0x20,0x15,0x20, +0x15,0x40,0x14,0x80,0x15,0x40,0x1A,0x30,0x00,0x00, +/* */ +0x00,0x80,0x7D,0xF0,0x11,0x10,0x7D,0xF0,0x11,0x10,0x7D,0xF0,0x00,0x00,0x7F,0xF0, +0x08,0x00,0x1F,0xE0,0x30,0x20,0x5F,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x3F,0xE0,0x28,0xA0,0x27,0x20,0x28,0xA0,0x3F,0xE0, +0x21,0x20,0x3D,0xC0,0x21,0x10,0x3C,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x4A,0x80,0x2C,0x80,0x08,0xF0,0x7F,0x20,0x4A,0xA0, +0x5E,0xA0,0x6A,0x40,0x4A,0xA0,0x47,0x10,0x00,0x00, +/* */ +0x21,0x20,0x21,0x40,0x3D,0x80,0x21,0x10,0x2D,0x10,0x30,0xF0,0x02,0x00,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x21,0x20,0x3D,0x40,0x21,0x80,0x2D,0x10,0x30,0xF0,0x00,0x00,0x7F,0xF0,0x11,0x00, +0x3D,0x20,0x65,0xC0,0x19,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x21,0x20,0x21,0x40,0x3D,0x80,0x21,0x10,0x2D,0x10,0x30,0xF0,0x04,0x00,0x02,0x40, +0x28,0x80,0x4B,0x20,0x0C,0x50,0x77,0xC0,0x00,0x00, +/* */ +0x01,0xF0,0x7E,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20, +0x22,0x20,0x22,0x20,0x22,0x60,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x20,0x00,0x28,0x80,0x28,0x90,0x2E,0x90,0x28,0xA0, +0x28,0xC0,0x28,0x90,0x2A,0x90,0x4C,0x70,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x57,0xF0,0x34,0x90,0x17,0xF0,0x14,0x90,0x37,0xF0, +0x50,0x00,0x17,0xF0,0x22,0x20,0x4C,0x20,0x00,0x00, +/* */ +0x20,0x00,0x13,0xF0,0x00,0x10,0x21,0x10,0x21,0x10,0x2F,0xD0,0x21,0x10,0x23,0x10, +0x25,0x10,0x29,0x10,0x23,0x10,0x20,0x70,0x00,0x00, +/* */ +0x08,0x80,0x4A,0x80,0x2C,0x80,0x08,0xF0,0x7F,0x20,0x4A,0xA0,0x5A,0xA0,0x6E,0xA0, +0x4A,0xA0,0x4A,0x40,0x42,0xA0,0x47,0x10,0x00,0x00, +/* */ +0x4A,0x80,0x2C,0xF0,0x7F,0x20,0x4A,0xA0,0x5E,0x40,0x6A,0xA0,0x41,0x10,0x08,0x80, +0x7F,0xF0,0x08,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x04,0x00,0x02,0x40,0x0A,0x40,0x08,0x80,0x28,0x80,0x29,0x20,0x29,0x10,0x4A,0x10, +0x0C,0x00,0x08,0x40,0x18,0x40,0x27,0xC0,0x00,0x00, +/* */ +0x01,0x00,0x38,0x80,0x2B,0xE0,0x28,0x00,0x3A,0x20,0x21,0x40,0x27,0xF0,0x38,0x80, +0x6B,0xE0,0x28,0x80,0x38,0x80,0x28,0x80,0x00,0x00, +/* */ +0x00,0x40,0x3D,0xF0,0x24,0xA0,0x3C,0x40,0x21,0xF0,0x3C,0x40,0x54,0xE0,0x1C,0x40, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x3C,0x40,0x25,0xF0,0x3C,0xA0,0x21,0xF0,0x3C,0x40,0x54,0xE0,0x1C,0x40,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x40,0x40,0x2E,0xE0,0x0A,0x00,0x0A,0xA0,0x6E,0x40,0x29,0xF0,0x2E,0x40,0x3A,0x40, +0x2A,0xE0,0x2E,0x40,0x20,0x40,0x5F,0xF0,0x00,0x00, +/* */ +0x04,0x40,0x74,0x50,0x57,0x60,0x54,0x40,0x65,0x50,0x66,0x30,0x50,0x80,0x50,0x80, +0x53,0xE0,0x60,0x80,0x40,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x29,0x00,0x7D,0xF0,0x2A,0x40,0x3B,0xF0,0x16,0x50,0x7B,0xF0,0x52,0x50,0x7B,0xF0, +0x13,0x40,0x7E,0xC0,0x12,0x40,0x12,0xB0,0x00,0x00, +/* */ +0x21,0x00,0x11,0x00,0x01,0x00,0x07,0xF0,0x71,0x10,0x11,0x10,0x11,0x10,0x12,0x10, +0x12,0x10,0x14,0xE0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x44,0x10,0x57,0xF0,0x64,0x00,0x27,0xF0,0x45,0x50,0x6D,0x50, +0x07,0xF0,0x15,0x50,0x65,0x50,0x04,0x30,0x00,0x00, +/* */ +0x00,0x30,0x7D,0xC0,0x44,0x00,0x54,0x80,0x54,0x40,0x55,0xF0,0x54,0x10,0x54,0x20, +0x54,0x40,0x10,0x80,0x29,0x80,0x46,0x70,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x00,0x2F,0xF0,0x2A,0x90,0x2A,0x90, +0x2F,0xF0,0x2A,0x90,0x2A,0x90,0x48,0x30,0x00,0x00, +/* */ +0x08,0x00,0x0F,0xF0,0x10,0x80,0x17,0xF0,0x34,0x90,0x57,0xF0,0x14,0x90,0x17,0xF0, +0x12,0x80,0x11,0x00,0x12,0x80,0x14,0x70,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x48,0x90,0x00,0x00,0x3F,0xC0,0x10,0x40, +0x08,0x80,0x07,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x00,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x80,0x02,0x40, +0x02,0x20,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x22,0x80,0x12,0x40,0x7A,0xE0,0x02,0x00,0x2A,0xA0,0x16,0x40,0x7B,0xF0,0x12,0x40, +0x3A,0xE0,0x12,0x40,0x12,0x40,0x24,0x40,0x00,0x00, +/* */ +0x20,0x80,0x12,0x40,0x78,0xE0,0x06,0x00,0x2A,0xA0,0x12,0x40,0x7B,0xF0,0x12,0x40, +0x3A,0xE0,0x13,0x40,0x12,0x40,0x20,0x40,0x00,0x00, +/* */ +0x42,0x40,0x22,0x20,0x74,0x70,0x05,0x00,0x56,0x50,0x22,0x20,0x74,0x70,0x27,0x20, +0x70,0x70,0x21,0x20,0x26,0x20,0x40,0x20,0x00,0x00, +/* */ +0x41,0x00,0x2F,0xE0,0x08,0x20,0x0F,0xE0,0x68,0x00,0x2F,0xE0,0x3A,0xA0,0x2F,0xE0, +0x2A,0xA0,0x28,0x60,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x00,0x78,0x00,0x17,0xF0,0x30,0x80,0x38,0x80,0x52,0xA0, +0x12,0x90,0x14,0x90,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x08,0x10,0x0E,0x20,0x08,0x40,0x3F,0x10,0x29,0x20,0x2E,0x40,0x39,0x10,0x27,0x20, +0x20,0x40,0x2E,0x80,0x2A,0x10,0x51,0xF0,0x00,0x00, +/* */ +0x77,0xF0,0x51,0x40,0x57,0xF0,0x75,0x50,0x57,0xF0,0x50,0x00,0x73,0xE0,0x50,0x00, +0x57,0xF0,0x50,0x80,0x52,0xA0,0x35,0x90,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x05,0x00, +0x09,0x10,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x52,0x80,0x14,0xF0,0x7F,0xA0,0x5A,0x40,0x76,0xA0,0x5F,0x90,0x11,0x00,0x3F,0xC0, +0x12,0x40,0x1F,0xC0,0x12,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x52,0x80,0x14,0xF0,0x7F,0x20,0x52,0xA0,0x5A,0xA0,0x76,0x40,0x52,0xA0,0x57,0x10, +0x00,0x00,0x2A,0x20,0x29,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x3F,0x10,0x21,0x10,0x21,0x50,0x21,0x50,0x3F,0x50,0x08,0x50,0x7F,0x50,0x09,0x50, +0x11,0x50,0x11,0x10,0x21,0x10,0x4E,0x30,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x12,0x00,0x57,0xE0,0x34,0xA0,0x16,0x60,0x15,0x20,0x37,0xE0, +0x52,0x40,0x17,0xA0,0x2A,0x50,0x41,0xC0,0x00,0x00, +/* */ +0x11,0x10,0x11,0x10,0x11,0x20,0x7B,0xC0,0x11,0x10,0x31,0x10,0x3B,0xA0,0x53,0x40, +0x15,0x10,0x11,0x10,0x11,0x20,0x11,0x40,0x00,0x00, +/* */ +0x40,0x40,0x23,0x60,0x00,0x50,0x78,0x40,0x17,0xF0,0x11,0x40,0x51,0x40,0x55,0xC0, +0x25,0x40,0x25,0x50,0x55,0xB0,0x4E,0x10,0x00,0x00, +/* */ +0x02,0x00,0x4A,0xF0,0x2B,0x20,0x0A,0x40,0x1F,0xF0,0x40,0x90,0x22,0x90,0x0A,0xD0, +0x0B,0x40,0x22,0x40,0x44,0xA0,0x19,0x10,0x00,0x00, +/* */ +0x01,0x00,0x4F,0xF0,0x28,0x50,0x07,0x80,0x04,0x00,0x47,0xF0,0x24,0x40,0x04,0x40, +0x0F,0xF0,0x20,0x00,0x44,0x40,0x08,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x90,0x1F,0x00,0x10,0x00,0x1F,0xE0,0x10,0x80,0x10,0x80, +0x7F,0xF0,0x00,0x00,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x50,0x7B,0x80,0x12,0x00,0x13,0xF0,0x1A,0x40,0x72,0x40, +0x17,0xF0,0x10,0x00,0x12,0x40,0x34,0x20,0x00,0x00, +/* */ +0x00,0xC0,0x1F,0x00,0x10,0x00,0x10,0x00,0x1F,0xE0,0x10,0x80,0x10,0x80,0x10,0x80, +0x7F,0xF0,0x00,0x00,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x01,0x00,0x41,0x00,0x21,0x00,0x01,0x90,0x1D,0xA0,0x05,0x40,0x05,0x40,0x15,0x40, +0x29,0x20,0x49,0x20,0x11,0x10,0x03,0x00,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x10,0x80,0x78,0x80,0x17,0xF0,0x34,0x90,0x3C,0x90,0x55,0x50, +0x16,0x30,0x14,0x10,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x42,0x10,0x42,0x10,0x45,0x10, +0x48,0x90,0x50,0x50,0x40,0x10,0x40,0x30,0x00,0x00, +/* */ +0x01,0xC0,0x1E,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x20,0x7F,0xF0, +0x02,0x20,0x3F,0xE0,0x0A,0x80,0x32,0x60,0x00,0x00, +/* */ +0x22,0x10,0x21,0x20,0x38,0x00,0x4B,0xF0,0x11,0x20,0x21,0x20,0x21,0x20,0x27,0xF0, +0x21,0x20,0x29,0x20,0x31,0x20,0x22,0x20,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x80,0x58,0x80,0x57,0xF0,0x54,0x90,0x54,0x90,0x15,0x50, +0x16,0x30,0x2C,0x10,0x24,0x10,0x44,0x30,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x37,0xF0,0x10,0x80,0x17,0xF0,0x34,0x90, +0x55,0x50,0x16,0x30,0x24,0x10,0x44,0x30,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x00,0x00,0x3F,0xE0,0x08,0x80,0x08,0x80,0x08,0x80,0x7F,0xF0, +0x08,0x80,0x10,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x00,0x80,0x70,0x80,0x27,0xF0,0x24,0x90,0x24,0x80,0x77,0xE0,0x25,0x20,0x25,0x20, +0x25,0x40,0x34,0x80,0x65,0x40,0x0A,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x20,0x80,0x17,0xF0,0x44,0x90,0x24,0x80,0x07,0xE0, +0x15,0x20,0x25,0x20,0x48,0xC0,0x13,0x30,0x00,0x00, +/* */ +0x20,0xE0,0x2F,0x00,0x29,0x20,0x75,0x40,0x2F,0xF0,0x25,0x40,0x38,0x20,0x6F,0xF0, +0x29,0x20,0x2F,0xE0,0x29,0x20,0x6F,0xE0,0x00,0x00, +/* */ +0x20,0xA0,0x24,0x90,0x24,0x80,0x77,0xF0,0x21,0x00,0x21,0x00,0x33,0xE0,0x62,0x20, +0x25,0x40,0x24,0x80,0x29,0x40,0x66,0x30,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x3B,0xF0,0x40,0x80,0x79,0xC0,0x21,0xC0,0x22,0xA0,0x7A,0xA0, +0x24,0x90,0x23,0xE0,0x30,0x80,0x20,0x80,0x00,0x00, +/* */ +0x00,0x80,0x40,0x80,0x2F,0xF0,0x08,0x90,0x08,0x80,0x4F,0xE0,0x2A,0x20,0x0A,0x20, +0x09,0x40,0x28,0x80,0x49,0x40,0x16,0x30,0x00,0x00, +/* */ +0x20,0xA0,0x27,0xF0,0x20,0x80,0x27,0xF0,0x74,0x90,0x27,0xF0,0x24,0x90,0x24,0x90, +0x20,0x20,0x27,0xF0,0x22,0x20,0x21,0x60,0x00,0x00, +/* */ +0x08,0x40,0x3E,0x40,0x08,0x40,0x7F,0x40,0x41,0xF0,0x3E,0x50,0x04,0x50,0x08,0x50, +0x0E,0x90,0x78,0x90,0x09,0x10,0x1A,0x60,0x00,0x00, +/* */ +0x20,0xA0,0x27,0xF0,0x20,0x80,0x77,0xF0,0x24,0x90,0x27,0xF0,0x34,0x90,0x64,0x90, +0x20,0x20,0x27,0xF0,0x22,0x20,0x61,0x60,0x00,0x00, +/* */ +0x20,0x40,0x20,0x80,0x3B,0xF0,0x42,0x10,0x7A,0x10,0x22,0x10,0x23,0xF0,0x7A,0x10, +0x22,0x10,0x2A,0x10,0x33,0xF0,0x22,0x10,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x52,0x40,0x20,0x80,0x17,0xF0,0x04,0x10,0x44,0x10,0x27,0xF0, +0x04,0x10,0x14,0x10,0x27,0xF0,0x44,0x10,0x00,0x00, +/* */ +0x08,0x40,0x08,0x80,0x13,0xF0,0x12,0x10,0x32,0x10,0x52,0x10,0x13,0xF0,0x12,0x10, +0x12,0x10,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x04,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0, +0x42,0x10,0x42,0x10,0x42,0x30,0x02,0x00,0x00,0x00, +/* */ +0x08,0x40,0x10,0x80,0x3D,0xF0,0x25,0x10,0x35,0x10,0x2D,0x10,0x7D,0xF0,0x25,0x10, +0x35,0x10,0x2D,0x10,0x25,0xF0,0x4D,0x10,0x00,0x00, +/* */ +0x00,0x40,0x3B,0xF0,0x28,0x40,0x2B,0xF0,0x3A,0x10,0x29,0xE0,0x28,0x20,0x38,0x40, +0x2B,0xF0,0x28,0x40,0x28,0x40,0x58,0xC0,0x00,0x00, +/* */ +0x38,0xA0,0x2B,0xF0,0x28,0x80,0x3B,0xE0,0x2A,0xA0,0x2B,0xE0,0x3A,0xA0,0x2A,0xA0, +0x28,0x40,0x2F,0xF0,0x2A,0x40,0x58,0xC0,0x00,0x00, +/* */ +0x04,0x40,0x5F,0x40,0x24,0xF0,0x1F,0x50,0x11,0x50,0x4E,0x50,0x22,0x50,0x04,0x50, +0x0F,0x50,0x24,0x90,0x44,0x90,0x0D,0x60,0x00,0x00, +/* */ +0x01,0x00,0x42,0x00,0x2F,0xF0,0x08,0x10,0x08,0x10,0x48,0x10,0x2F,0xF0,0x08,0x10, +0x08,0x10,0x28,0x10,0x4F,0xF0,0x08,0x10,0x00,0x00, +/* */ +0x01,0x10,0x78,0xA0,0x08,0x40,0x28,0xA0,0x29,0x10,0x28,0x00,0x3D,0x10,0x05,0x10, +0x14,0xA0,0x64,0x40,0x04,0xA0,0x1B,0x10,0x00,0x00, +/* */ +0x10,0xA0,0x10,0x90,0x17,0xF0,0x78,0x80,0x17,0xF0,0x14,0x90,0x1F,0xF0,0x74,0x90, +0x17,0xF0,0x14,0x90,0x14,0x90,0x34,0x30,0x00,0x00, +/* */ +0x08,0x00,0x08,0x00,0x08,0x00,0x0A,0x00,0x09,0x00,0x08,0x80,0x08,0x40,0x08,0x20, +0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00, +/* */ +0x00,0xA0,0x70,0x90,0x57,0xF0,0x50,0x80,0x57,0xF0,0x54,0x90,0x57,0xF0,0x54,0x90, +0x77,0xF0,0x54,0x90,0x04,0x90,0x04,0x30,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x78,0x80,0x08,0x80,0x10,0xC0,0x14,0xA0,0x38,0x90,0x54,0x90, +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x12,0x20,0x7B,0xE0,0x12,0x00,0x13,0xF0,0x12,0x10,0x13,0xF0, +0x18,0x80,0x67,0xF0,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x01,0x00,0x01,0x00,0x02,0x00,0x06,0x80,0x0A,0x40,0x12,0x20, +0x62,0x10,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x7F,0xF0,0x09,0x00,0x11,0x00,0x1F,0xE0,0x29,0x20,0x29,0x20, +0x49,0x20,0x09,0x20,0x09,0x60,0x01,0x00,0x00,0x00, +/* */ +0x02,0x00,0x12,0x00,0x13,0xE0,0x12,0x00,0x12,0x00,0x7F,0xF0,0x00,0x00,0x0A,0x20, +0x12,0x40,0x23,0x80,0x06,0x00,0x38,0x00,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x41,0x20,0x2F,0xF0,0x05,0x20,0x47,0xE0,0x25,0x20, +0x0F,0xF0,0x04,0x40,0x22,0x40,0x40,0xC0,0x00,0x00, +/* */ +0x08,0x00,0x3E,0xF0,0x00,0x90,0x22,0x90,0x14,0xA0,0x7F,0xA0,0x00,0x90,0x3E,0x90, +0x22,0x90,0x22,0xE0,0x3E,0x80,0x22,0x80,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x17,0xF0,0x5A,0x00,0x52,0x80,0x57,0xF0,0x5A,0x90,0x12,0x90, +0x12,0x90,0x12,0x90,0x12,0xB0,0x10,0x80,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x24,0x10,0x73,0x70,0x25,0x50,0x2A,0x20,0x35,0xD0,0x60,0x00, +0x27,0xF0,0x20,0x80,0x22,0xA0,0x65,0x90,0x00,0x00, +/* */ +0x11,0x00,0x5F,0xF0,0x21,0x00,0x57,0xE0,0x11,0x00,0x1F,0xF0,0x34,0x20,0x57,0xE0, +0x14,0x20,0x17,0xE0,0x14,0x20,0x64,0x60,0x00,0x00, +/* */ +0x08,0xA0,0x3E,0x90,0x08,0x80,0x7F,0xF0,0x10,0x80,0x08,0xA0,0x7E,0xA0,0x08,0xA0, +0x15,0x40,0x32,0x50,0x5A,0xB0,0x11,0x10,0x00,0x00, +/* */ +0x08,0x20,0x08,0x20,0x08,0x20,0x7E,0xF0,0x08,0x20,0x1C,0x60,0x1A,0xA0,0x29,0x20, +0x4A,0x20,0x08,0x20,0x08,0x20,0x08,0x60,0x00,0x00, +/* */ +0x00,0x40,0x00,0x40,0x00,0x40,0x3F,0xF0,0x00,0xC0,0x01,0x40,0x02,0x40,0x04,0x40, +0x18,0x40,0x60,0x40,0x00,0x40,0x01,0xC0,0x00,0x00, +/* */ +0x00,0x20,0x7C,0x20,0x44,0x20,0x55,0xF0,0x54,0x20,0x54,0x60,0x54,0x60,0x54,0xA0, +0x55,0x20,0x12,0x20,0x28,0x20,0x44,0x60,0x00,0x00, +/* */ +0x00,0x70,0x77,0x80,0x51,0x10,0x54,0x90,0x72,0x20,0x50,0x80,0x57,0xF0,0x70,0x80, +0x51,0xC0,0x52,0xA0,0x74,0x90,0x50,0x80,0x00,0x00, +/* */ +0x00,0x70,0x77,0x80,0x51,0x10,0x54,0x90,0x72,0x20,0x10,0x80,0x17,0xF0,0x58,0x80, +0x51,0xC0,0x52,0xA0,0x5C,0x90,0x60,0x80,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x04,0x00,0x22,0x20,0x10,0x40,0x02,0x00,0x7F,0xF0,0x07,0x00, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x0E,0x20,0x70,0x20,0x12,0x40,0x4A,0x90,0x24,0x10,0x08,0x20,0x7E,0x40,0x08,0x80, +0x1C,0x10,0x2A,0x20,0x48,0x40,0x09,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0xE0,0x7F,0x00,0x24,0x40,0x12,0x80,0x02,0x00, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x1D,0xE0,0x35,0x20,0x68,0xC0,0x17,0x40,0x20,0x30, +0x5F,0xC0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x0E,0xE0,0x28,0x20,0x3E,0xA0,0x54,0x40,0x1A,0xA0,0x65,0x10,0x1A,0xC0,0x7F,0xF0, +0x12,0x40,0x1F,0xD0,0x10,0xA0,0x18,0x70,0x00,0x00, +/* */ +0x08,0x00,0x10,0x40,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x11,0x40,0x26,0x20,0x58,0x90, +0x03,0x00,0x3C,0x20,0x01,0xC0,0x3E,0x00,0x00,0x00, +/* */ +0x1F,0xC0,0x04,0x00,0x7F,0xF0,0x08,0x80,0x12,0x40,0x62,0x30,0x1F,0xC0,0x12,0x40, +0x1F,0xC0,0x02,0x20,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x00,0xA0,0x7C,0x90,0x10,0xF0,0x13,0x80,0x1C,0x80,0x24,0xF0,0x27,0x80,0x54,0xA0, +0x08,0xC0,0x10,0x90,0x21,0x50,0x46,0x30,0x00,0x00, +/* */ +0x22,0x10,0x22,0xE0,0x2F,0x80,0x34,0x80,0x6A,0xF0,0x6F,0xA0,0x22,0xA0,0x23,0xA0, +0x2E,0xA0,0x22,0xA0,0x22,0xA0,0x23,0x20,0x00,0x00, +/* */ +0x21,0x00,0x22,0x40,0x27,0xE0,0x31,0x00,0x6F,0xF0,0x62,0x80,0x25,0x40,0x2A,0xB0, +0x21,0x00,0x26,0x40,0x21,0x80,0x2E,0x00,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x14,0x80,0x5A,0x90,0x52,0x90,0x52,0x90,0x52,0x90,0x12,0x90, +0x12,0x90,0x2A,0x90,0x2B,0xF0,0x40,0x10,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x12,0x40,0x05,0x00,0x08,0x80,0x10,0x40,0x7F,0xB0,0x10,0x80, +0x10,0x80,0x13,0x00,0x10,0x20,0x0F,0xE0,0x00,0x00, +/* */ +0x08,0x40,0x10,0x40,0x3C,0xA0,0x25,0x10,0x36,0x00,0x2D,0xE0,0x7D,0x20,0x25,0x20, +0x35,0x60,0x2D,0x00,0x25,0x10,0x4C,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x1F,0x80,0x10,0x80,0x10,0x80, +0x10,0x80,0x13,0x20,0x10,0x20,0x0F,0xE0,0x00,0x00, +/* */ +0x21,0x00,0x11,0x00,0x02,0x80,0x04,0x40,0x48,0x30,0x27,0xC0,0x04,0x40,0x04,0x40, +0x15,0x80,0x24,0x10,0x44,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0xA0,0x5F,0xF0,0x50,0x40,0x77,0xC0,0x15,0x50,0x77,0xD0, +0x54,0xA0,0x57,0xA0,0x15,0x70,0x27,0x90,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x78,0x00,0x17,0x70,0x15,0x50,0x1F,0x70,0x70,0x80, +0x17,0xF0,0x11,0xC0,0x12,0xA0,0x34,0x90,0x00,0x00, +/* */ +0x14,0x20,0x12,0xA0,0x58,0xF0,0x31,0x20,0x16,0x20,0x7A,0xF0,0x12,0x00,0x32,0xF0, +0x5A,0x90,0x12,0xF0,0x12,0x00,0x15,0xF0,0x00,0x00, +/* */ +0x11,0x40,0x17,0xF0,0x11,0x40,0x7F,0xF0,0x15,0x50,0x37,0xF0,0x3D,0x50,0x57,0xF0, +0x12,0x20,0x13,0xE0,0x12,0x20,0x13,0xE0,0x00,0x00, +/* */ +0x05,0x00,0x7F,0xF0,0x05,0x00,0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x25,0x20,0x3F,0xE0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x20,0x00,0x2F,0x10,0x29,0x50,0x29,0x50,0x29,0x50,0x2D,0x50, +0x25,0x50,0x24,0x50,0x2A,0x10,0x51,0x30,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x49,0x20,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x22,0x20, +0x27,0x60,0x1A,0xC0,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x10,0x10,0x1F,0x10,0x29,0x50,0x29,0x50,0x69,0x50,0x29,0x50,0x2D,0x50,0x2D,0x50, +0x24,0x50,0x24,0x10,0x2A,0x10,0x31,0x30,0x00,0x00, +/* */ +0x00,0x00,0x3D,0xE0,0x25,0x20,0x25,0x20,0x25,0x20,0x25,0x20,0x7F,0xF0,0x25,0x20, +0x25,0x20,0x25,0x20,0x25,0x20,0x4E,0x60,0x00,0x00, +/* */ +0x00,0x10,0x5F,0x10,0x31,0x50,0x15,0x50,0x15,0x50,0x55,0x50,0x35,0x50,0x15,0x50, +0x15,0x50,0x24,0x10,0x4A,0x10,0x11,0x30,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x20,0x00,0x20,0x00,0x3F,0xF0, +0x22,0x00,0x24,0x20,0x2F,0xF0,0x40,0x10,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x54,0x90,0x56,0xB0,0x74,0x90,0x17,0xF0,0x18,0x00,0x53,0xE0, +0x52,0x20,0x5B,0xE0,0x62,0x20,0x03,0xE0,0x00,0x00, +/* */ +0x20,0x60,0x23,0x80,0x20,0x80,0x77,0xF0,0x20,0x80,0x22,0x80,0x34,0xB0,0x64,0x90, +0x26,0xB0,0x24,0x90,0x27,0xF0,0x64,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x10,0x20,0x12,0x20,0x11,0x40,0x08,0x40,0x08,0x80,0x05,0x00, +0x02,0x00,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x04,0x00,0x7F,0xF0,0x08,0x00,0x10,0x80,0x30,0x80, +0x53,0xE0,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x05,0x00,0x18,0xC0,0x62,0x30,0x1F,0xC0, +0x02,0x00,0x12,0x40,0x22,0x20,0x06,0x00,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x17,0xF0,0x12,0xA0,0x24,0x90,0x3B,0xE0,0x6A,0x20,0x2B,0xE0, +0x2A,0x20,0x3B,0xE0,0x20,0x00,0x0F,0xF0,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x12,0x20,0x78,0x80,0x11,0x40,0x12,0x20,0x1C,0x90,0x73,0xE0, +0x10,0x80,0x12,0xA0,0x14,0x90,0x31,0x80,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x50,0x10,0x1D,0xE0,0x35,0x20,0x68,0xC0,0x17,0x40,0x20,0x30, +0x5F,0xC0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x08,0x80,0x10,0x40,0x60,0x30,0x1F,0xC0,0x08,0x40,0x10,0x40,0x21,0x80,0x02,0x00, +0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x08,0x00, +0x1F,0xE0,0x21,0x00,0x41,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x10,0x80,0x07,0xF0,0x04,0x10,0x70,0x60,0x13,0x80,0x10,0x80,0x10,0xF0, +0x17,0x80,0x18,0x90,0x10,0x90,0x00,0x70,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x12,0x00,0x7A,0x00,0x13,0xF0,0x12,0x40,0x12,0x40,0x1A,0xC0, +0x72,0x60,0x12,0x50,0x12,0x40,0x34,0x40,0x00,0x00, +/* */ +0x08,0x80,0x28,0x90,0x2E,0xA0,0x28,0xC0,0x2E,0x90,0x70,0x70,0x02,0x00,0x7F,0xF0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x10,0x20,0x20,0x20,0x54,0x20,0x29,0xF0,0x10,0x20,0x68,0x60,0x14,0x60,0x6C,0xA0, +0x15,0x20,0x66,0x20,0x04,0x20,0x18,0x60,0x00,0x00, +/* */ +0x12,0x00,0x13,0xC0,0x14,0x40,0x7B,0xE0,0x12,0xA0,0x13,0xE0,0x19,0x40,0x72,0x50, +0x15,0xB0,0x10,0x40,0x13,0x00,0x30,0xC0,0x00,0x00, +/* */ +0x21,0x00,0x22,0x40,0x27,0xE0,0x71,0x00,0x2F,0xF0,0x22,0x80,0x35,0x40,0x6A,0xB0, +0x21,0x00,0x26,0x40,0x21,0x80,0x6E,0x00,0x00,0x00, +/* */ +0x11,0x10,0x10,0xA0,0x11,0xF0,0x7D,0x50,0x55,0xF0,0x55,0x50,0x7D,0x50,0x11,0xF0, +0x14,0x40,0x1D,0xF0,0x64,0x40,0x00,0x40,0x00,0x00, +/* */ +0x22,0x00,0x23,0xC0,0x34,0x40,0x53,0xE0,0x02,0xA0,0x23,0xE0,0x21,0x40,0x22,0x50, +0x25,0xB0,0x20,0x40,0x33,0x00,0x20,0xC0,0x00,0x00, +/* */ +0x44,0x00,0x27,0x80,0x08,0x80,0x07,0xE0,0x65,0x20,0x27,0xE0,0x22,0x40,0x24,0x50, +0x2B,0x30,0x20,0x80,0x36,0x00,0x21,0x80,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x44,0x00,0x55,0xF0,0x65,0x50,0x25,0xF0,0x45,0x50,0x75,0xF0, +0x04,0x40,0x15,0xF0,0x64,0x40,0x09,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x20,0x40,0x3B,0xF0,0x40,0x00,0x79,0x20,0x20,0xC0,0x23,0xF0,0x7A,0x00, +0x22,0x00,0x2A,0x00,0x32,0x00,0x24,0x00,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x3F,0xF0,0x00,0x00,0x08,0x40,0x04,0x80,0x3F,0xF0,0x20,0x00, +0x20,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x00,0x00, +/* */ +0x4F,0xF0,0x28,0x90,0x05,0x10,0x5F,0xD0,0x52,0x50,0x5F,0xD0,0x52,0x50,0x5F,0xD0, +0x42,0x10,0x7F,0xF0,0x42,0x10,0x42,0x30,0x00,0x00, +/* */ +0x10,0x00,0x7D,0xF0,0x00,0x40,0x7C,0x80,0x55,0xF0,0x5D,0x10,0x45,0x50,0x7D,0x50, +0x29,0x50,0x38,0x40,0x28,0xA0,0x7D,0x10,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x13,0xE0,0x52,0x20,0x23,0xE0,0x52,0x20,0x13,0xE0,0x10,0x00,0x37,0xF0,0x54,0x10, +0x17,0xF0,0x14,0x10,0x17,0xF0,0x64,0x10,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x40,0x78,0x80,0x11,0x00,0x13,0xF0,0x11,0x50,0x11,0x50, +0x1A,0x90,0x64,0x90,0x01,0x10,0x02,0x60,0x00,0x00, +/* */ +0x22,0x20,0x12,0x40,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x00,0x00,0x7F,0xF0,0x04,0x00, +0x08,0x80,0x10,0x40,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x12,0x40,0x0A,0x80,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x02,0x00, +0x3F,0xE0,0x22,0x20,0x22,0x60,0x02,0x00,0x00,0x00, +/* */ +0x08,0x00,0x08,0x60,0x09,0x80,0x0E,0x00,0x08,0x00,0x7F,0xF0,0x09,0x00,0x09,0x00, +0x08,0x80,0x0A,0x40,0x0C,0x30,0x08,0x00,0x00,0x00, +/* */ +0x08,0x80,0x0C,0x90,0x12,0xA0,0x17,0xF0,0x34,0x10,0x53,0xE0,0x10,0x00,0x17,0xF0, +0x11,0x00,0x12,0x20,0x17,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3B,0xE0,0x28,0x40,0x28,0x80,0x39,0x00,0x2B,0xF0,0x29,0x50,0x39,0x50, +0x2A,0x90,0x2C,0x90,0x29,0x10,0x5A,0x60,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00, +0x20,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x00,0x00, +/* */ +0x08,0x80,0x4A,0x80,0x2C,0x80,0x08,0xF0,0x7F,0x20,0x42,0xA0,0x5E,0xA0,0x56,0xA0, +0x56,0xA0,0x5E,0x40,0x42,0xA0,0x47,0x10,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x7C,0x40,0x54,0x80,0x55,0x00,0x7F,0xF0,0x55,0x50,0x55,0x50, +0x7E,0x90,0x54,0x90,0x11,0x10,0x12,0x60,0x00,0x00, +/* */ +0x03,0xE0,0x72,0x20,0x53,0xE0,0x52,0x20,0x53,0xE0,0x50,0x00,0x57,0xF0,0x54,0x10, +0x77,0xF0,0x54,0x10,0x07,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x0B,0xE0,0x0A,0x20,0x13,0xE0,0x12,0x20,0x33,0xE0,0x50,0x00,0x17,0xF0,0x14,0x10, +0x17,0xF0,0x14,0x10,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x08,0x00,0x09,0xF0,0x3C,0x90,0x08,0x90,0x09,0x30,0x7E,0x00,0x09,0xF0,0x29,0x10, +0x2F,0x10,0x29,0xF0,0x38,0x00,0x4F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0xA0,0x7A,0x90,0x12,0x90,0x12,0x90,0x1C,0x80,0x70,0x90, +0x10,0x20,0x10,0x40,0x11,0x80,0x36,0x00,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x38,0xA0,0x42,0x90,0x7A,0x90,0x22,0x90,0x24,0x80,0x78,0x90, +0x20,0x20,0x28,0x40,0x31,0x80,0x26,0x00,0x00,0x00, +/* */ +0x08,0x00,0x3E,0xF0,0x08,0x90,0x3E,0x90,0x22,0xF0,0x3E,0x90,0x22,0x90,0x3E,0xF0, +0x08,0x90,0x7F,0x90,0x08,0x90,0x09,0x30,0x00,0x00, +/* */ +0x02,0x00,0x07,0x70,0x72,0x50,0x57,0x50,0x55,0x70,0x57,0x50,0x55,0x50,0x57,0x70, +0x72,0x50,0x57,0x50,0x02,0x50,0x02,0xB0,0x00,0x00, +/* */ +0x04,0x00,0x5F,0x70,0x24,0x50,0x1F,0x50,0x11,0x70,0x5F,0x50,0x31,0x50,0x1F,0x70, +0x04,0x50,0x3F,0x50,0x44,0x50,0x04,0xB0,0x00,0x00, +/* */ +0x12,0x40,0x24,0x80,0x12,0x40,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x48,0xA0,0x4A,0x90,0x4A,0x90,0x4A,0x90,0x4C,0x80,0x48,0x90, +0x78,0x20,0x48,0x40,0x01,0x80,0x06,0x00,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x14,0xA0,0x5A,0x90,0x52,0x90,0x52,0x90,0x54,0x80,0x10,0x90, +0x10,0x20,0x28,0x40,0x29,0x80,0x46,0x00,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x7F,0xF0,0x08,0x00,0x12,0x00,0x22,0x00,0x3F,0xE0,0x02,0x00, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x10,0x40,0x7A,0x40,0x12,0x70,0x12,0x40,0x1A,0x40,0x72,0x40, +0x12,0x40,0x12,0x40,0x12,0x40,0x37,0xF0,0x00,0x00, +/* */ +0x24,0x40,0x3F,0x40,0x2A,0x80,0x7E,0xF0,0x21,0x20,0x2E,0xA0,0x3A,0xA0,0x6E,0xA0, +0x2A,0x40,0x2E,0x40,0x2A,0xA0,0x6B,0x10,0x00,0x00, +/* */ +0x28,0x10,0x3E,0x90,0x48,0x90,0x3E,0x90,0x2A,0x90,0x08,0x30,0x3F,0xC0,0x02,0x00, +0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x06,0x00,0x00,0x00, +/* */ +0x0A,0x00,0x12,0xF0,0x22,0x50,0x4B,0x50,0x16,0x50,0x32,0x50,0x52,0x50,0x13,0x50, +0x12,0x90,0x10,0x90,0x11,0x10,0x12,0x60,0x00,0x00, +/* */ +0x04,0x40,0x5F,0x40,0x2A,0x80,0x1E,0xF0,0x01,0x20,0x4E,0xA0,0x2A,0xA0,0x0E,0xA0, +0x0A,0x40,0x2E,0x40,0x4A,0xA0,0x0B,0x10,0x00,0x00, +/* */ +0x12,0x70,0x12,0x50,0x12,0x50,0x7F,0x50,0x12,0x60,0x3A,0x60,0x37,0x50,0x56,0xD0, +0x1A,0x50,0x12,0x60,0x12,0x40,0x12,0x40,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x21,0x00,0x21,0x00,0x3F,0xF0,0x20,0x10,0x20,0x10,0x3F,0xF0, +0x21,0x00,0x21,0x00,0x21,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x20,0x00,0x3F,0xF0,0x24,0x80,0x24,0x90, +0x24,0xA0,0x24,0x40,0x26,0x20,0x44,0x10,0x00,0x00, +/* */ +0x02,0x00,0x12,0x40,0x12,0x20,0x22,0x10,0x42,0x10,0x00,0x00,0x02,0x00,0x02,0x00, +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x10,0x20,0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x20,0x00, +0x3F,0xF0,0x29,0x20,0x28,0xC0,0x4C,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x5C,0x90,0x54,0x90,0x50,0x80,0x51,0x40,0x11,0x40, +0x11,0x40,0x12,0x40,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x00,0x00,0x27,0xF0,0x14,0x10,0x00,0x00,0x43,0xC0,0x22,0x40,0x02,0x40,0x02,0x40, +0x12,0x40,0x22,0x50,0x44,0x50,0x08,0x30,0x00,0x00, +/* */ +0x01,0x00,0x71,0x00,0x57,0xF0,0x52,0x00,0x62,0x80,0x64,0x80,0x57,0xF0,0x50,0x80, +0x54,0xA0,0x64,0x90,0x48,0x90,0x41,0x80,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x3D,0x40,0x09,0x20,0x0A,0x50,0x7D,0x80,0x08,0x20,0x29,0xC0, +0x2C,0x20,0x29,0xC0,0x38,0x00,0x4F,0xF0,0x00,0x00, +/* */ +0x20,0x20,0x10,0x20,0x78,0x20,0x0B,0xF0,0x10,0x20,0x14,0x20,0x39,0x20,0x54,0xA0, +0x10,0xA0,0x10,0x20,0x10,0x20,0x10,0xE0,0x00,0x00, +/* */ +0x12,0xA0,0x17,0xF0,0x15,0xD0,0x79,0x40,0x11,0xC0,0x10,0x00,0x1B,0xE0,0x70,0x80, +0x13,0xE0,0x10,0x80,0x17,0xF0,0x31,0x80,0x00,0x00, +/* */ +0x09,0x00,0x71,0x00,0x11,0xF0,0x12,0x10,0x7C,0xA0,0x10,0x80,0x3A,0xA0,0x36,0x90, +0x52,0x90,0x14,0x90,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x20,0x50,0x20,0x40,0x27,0xF0,0x74,0x40,0x24,0x40,0x27,0x50,0x25,0x50,0x25,0x60, +0x35,0x40,0x6B,0x50,0x08,0xB0,0x11,0x10,0x00,0x00, +/* */ +0x17,0x50,0x11,0x60,0x15,0x50,0x7A,0x20,0x13,0xE0,0x34,0x10,0x3B,0xE0,0x52,0x20, +0x13,0xE0,0x12,0x20,0x11,0x40,0x17,0xF0,0x00,0x00, +/* */ +0x01,0x40,0x01,0x20,0x3F,0xF0,0x21,0x00,0x21,0x00,0x3D,0x20,0x25,0x20,0x25,0x40, +0x24,0x90,0x2D,0x50,0x22,0x30,0x44,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00, +0x1F,0xC0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x02,0x00,0x7F,0xF0,0x0A,0x80,0x7A,0xA0,0x0A,0xC0,0x1A,0x90, +0x67,0x70,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x0B,0xE0,0x72,0x20,0x12,0x20,0x13,0xE0,0x78,0x00,0x13,0xE0,0x38,0x80,0x34,0x80, +0x53,0xE0,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x17,0xF0,0x20,0x80,0x48,0x80,0x12,0xE0,0x32,0x80,0x52,0x80,0x17,0xF0, +0x10,0x00,0x2A,0x20,0x29,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x27,0x50,0x11,0x60,0x05,0x40,0x02,0x50,0x45,0xA0,0x28,0x10,0x07,0xE0,0x04,0x20, +0x17,0xE0,0x24,0x20,0x42,0x40,0x0F,0xF0,0x00,0x00, +/* */ +0x40,0xA0,0x20,0x90,0x0F,0xF0,0x08,0x80,0x68,0x80,0x2F,0x50,0x29,0x50,0x29,0x60, +0x29,0x40,0x3B,0x50,0x28,0xB0,0x11,0x10,0x00,0x00, +/* */ +0x1F,0xC0,0x00,0x80,0x03,0x00,0x72,0x50,0x1F,0xD0,0x12,0x60,0x17,0x40,0x12,0x40, +0x2F,0xA0,0x22,0x20,0x42,0x10,0x06,0x00,0x00,0x00, +/* */ +0x23,0xE0,0x12,0x20,0x02,0x20,0x03,0xE0,0x70,0x00,0x17,0xF0,0x10,0x80,0x13,0xE0, +0x10,0x80,0x17,0xF0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xF0,0x0A,0x90,0x2B,0xF0,0x2A,0x90,0x2B,0xF0,0x3C,0x00,0x07,0xF0, +0x15,0x00,0x65,0xF0,0x04,0x10,0x18,0x60,0x00,0x00, +/* */ +0x08,0x00,0x73,0xE0,0x10,0x80,0x14,0x90,0x7A,0x90,0x12,0xA0,0x38,0x80,0x37,0xF0, +0x50,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x02,0x00,0x72,0x00,0x53,0xF0,0x54,0x00,0x58,0x00,0x57,0xE0,0x50,0x20,0x50,0xC0, +0x73,0x00,0x54,0x10,0x04,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x54,0x00,0x37,0x70,0x1A,0x50,0x12,0x50,0x3F,0xD0, +0x52,0x50,0x12,0x70,0x25,0x50,0x48,0x80,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x13,0xE0,0x78,0x80,0x17,0xF0,0x10,0x40,0x1B,0xF0,0x70,0x40, +0x12,0x40,0x11,0x40,0x10,0x40,0x31,0xC0,0x00,0x00, +/* */ +0x3C,0x80,0x24,0x80,0x3C,0x90,0x24,0xA0,0x3C,0xC0,0x00,0x80,0x7E,0x80,0x08,0x90, +0x2C,0x90,0x28,0x70,0x28,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x41,0x00,0x29,0x60,0x09,0xA0,0x0B,0x20,0x4D,0x20,0x39,0x20,0x09,0x20, +0x09,0x60,0x29,0x00,0x48,0x10,0x07,0xF0,0x00,0x00, +/* */ +0x23,0xF0,0x12,0x10,0x02,0x10,0x02,0x10,0x73,0xF0,0x12,0x40,0x12,0x20,0x12,0x20, +0x12,0x10,0x14,0x10,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x0A,0xB0,0x0A,0xD0,0x7B,0x90,0x46,0x90,0x42,0x90,0x7A,0xB0, +0x0A,0x80,0x0A,0x10,0x0A,0x10,0x31,0xF0,0x00,0x00, +/* */ +0x00,0x40,0x78,0x40,0x09,0x50,0x29,0x70,0x29,0xD0,0x2B,0x50,0x3D,0x50,0x05,0x70, +0x15,0x40,0x65,0x10,0x05,0x10,0x18,0xF0,0x00,0x00, +/* */ +0x00,0x40,0x7E,0x40,0x24,0x40,0x25,0x40,0x3D,0x70,0x25,0x40,0x3D,0x40,0x25,0x40, +0x27,0x40,0x7D,0x40,0x05,0x40,0x07,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x12,0x00,0x13,0xE0,0x12,0x00,0x12,0x00,0x7F,0xF0,0x00,0x00,0x22,0x20, +0x22,0x20,0x25,0x20,0x28,0xA0,0x3F,0xE0,0x00,0x00, +/* */ +0x09,0x00,0x09,0xE0,0x12,0x20,0x15,0x40,0x30,0x80,0x51,0x40,0x12,0xF0,0x11,0x10, +0x12,0xA0,0x10,0x40,0x11,0x80,0x16,0x00,0x00,0x00, +/* */ +0x00,0x00,0x1F,0xE0,0x10,0x20,0x10,0x20,0x10,0x20,0x1F,0xE0,0x11,0x00,0x11,0x00, +0x10,0x80,0x20,0x80,0x20,0x40,0x40,0x30,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0, +0x28,0x90,0x48,0x90,0x10,0x80,0x21,0x80,0x00,0x00, +/* */ +0x17,0x60,0x11,0x20,0x79,0x20,0x15,0xA0,0x13,0x60,0x79,0x20,0x2B,0x60,0x2D,0xA0, +0x29,0x20,0x13,0x60,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x00,0xE0,0x1F,0x00,0x10,0x00,0x10,0x00,0x1F,0xF0,0x10,0x80,0x10,0x80,0x13,0x80, +0x10,0xC0,0x20,0xA0,0x20,0x80,0x40,0x80,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x56,0x20,0x5A,0x20,0x52,0x20,0x52,0x20,0x13,0xE0, +0x10,0x00,0x29,0x40,0x22,0x20,0x44,0x10,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x04,0x00,0x08,0x80,0x10,0x40,0x3F,0xE0,0x08,0xA0, +0x08,0x80,0x08,0x90,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x00,0x80,0x40,0x80,0x27,0xF0,0x04,0x90,0x04,0x90,0x04,0x90,0x04,0x90,0x17,0xF0, +0x24,0x90,0x40,0x80,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x02,0x00,0x02,0x20,0x7F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x00,0x00, +0x7F,0xF0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x49,0x10,0x08,0x80,0x3F,0xE0,0x09,0x00,0x09,0x20, +0x11,0x40,0x11,0x90,0x23,0x10,0x4C,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x27,0xF0,0x74,0x90,0x24,0x90,0x24,0x90,0x37,0xF0,0x64,0x90, +0x24,0x90,0x24,0x90,0x27,0xF0,0x64,0x10,0x00,0x00, +/* */ +0x01,0x10,0x7D,0x50,0x11,0x50,0x7D,0x50,0x55,0xF0,0x57,0x50,0x6D,0x50,0x45,0x50, +0x7D,0x50,0x45,0x50,0x7D,0x50,0x46,0x10,0x00,0x00, +/* */ +0x00,0x40,0x7D,0xF0,0x54,0x40,0x55,0xE0,0x54,0x80,0x7F,0xF0,0x55,0x20,0x55,0xF0, +0x55,0x20,0x7E,0xA0,0x42,0x20,0x04,0x60,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xF0,0x48,0x80,0x4B,0xE0,0x78,0x80,0x17,0xF0,0x19,0x20,0x51,0xF0, +0x52,0x20,0x5A,0xA0,0x64,0x20,0x08,0x60,0x00,0x00, +/* */ +0x0F,0xF0,0x74,0x10,0x14,0x90,0x15,0xD0,0x7C,0x90,0x17,0xF0,0x34,0x10,0x3D,0xD0, +0x55,0x50,0x15,0xD0,0x14,0x10,0x18,0x70,0x00,0x00, +/* */ +0x08,0x40,0x30,0x40,0x11,0x50,0x7D,0x60,0x12,0x40,0x38,0xA0,0x54,0xA0,0x11,0x10, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x7F,0xF0,0x04,0x00,0x3F,0xE0,0x08,0x00,0x7F,0xF0, +0x10,0x40,0x2F,0xF0,0x44,0x40,0x02,0xC0,0x00,0x00, +/* */ +0x12,0x00,0x12,0x00,0x22,0x00,0x2F,0xC0,0x62,0x40,0x22,0x40,0x22,0x40,0x22,0x40, +0x22,0x40,0x24,0x50,0x24,0x50,0x28,0x30,0x00,0x00, +/* */ +0x27,0xF0,0x24,0x10,0x44,0x90,0x55,0xD0,0x64,0x90,0x27,0xF0,0x44,0x10,0x75,0xD0, +0x05,0x50,0x15,0xD0,0x64,0x10,0x08,0x70,0x00,0x00, +/* */ +0x01,0x40,0x76,0x40,0x52,0x50,0x52,0xD0,0x77,0x60,0x52,0x40,0x53,0x40,0x76,0x40, +0x5A,0xA0,0x52,0xA0,0x72,0xA0,0x53,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xC0,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x3F,0xC0,0x08,0x40, +0x08,0x40,0x08,0x40,0x08,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x02,0x40,0x7F,0xF0,0x08,0x80,0x70,0x70,0x00,0x00, +/* */ +0x20,0x00,0x13,0xF0,0x79,0x10,0x09,0x10,0x11,0x10,0x15,0x10,0x39,0x10,0x55,0x10, +0x11,0x10,0x12,0x10,0x12,0x10,0x14,0x60,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0,0x02,0x00,0x02,0x00,0x42,0x10, +0x42,0x10,0x42,0x10,0x7F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x20,0x7F,0xA0,0x14,0x70,0x37,0xA0,0x3C,0xE0,0x57,0xA0, +0x16,0xA0,0x15,0x20,0x17,0xA0,0x18,0x60,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x20,0x20,0x2E,0x20,0x20,0xF0,0x2E,0x20,0x2A,0x20,0x2E,0xA0, +0x20,0x60,0x2A,0x20,0x27,0x20,0x58,0x60,0x00,0x00, +/* */ +0x7A,0x20,0x4F,0xF0,0x4A,0xA0,0x79,0xD0,0x10,0xA0,0x17,0xF0,0x59,0x00,0x53,0xE0, +0x56,0x20,0x5B,0xE0,0x62,0x20,0x03,0xE0,0x00,0x00, +/* */ +0x20,0x40,0x37,0x40,0x45,0xF0,0x05,0x50,0x77,0x50,0x25,0x50,0x27,0x50,0x75,0x50, +0x25,0xD0,0x2E,0x50,0x30,0x90,0x21,0x30,0x00,0x00, +/* */ +0x21,0x40,0x39,0x20,0x4B,0xF0,0x12,0x40,0x7E,0x40,0x0B,0xF0,0x0A,0x40,0x7B,0xF0, +0x0A,0x40,0x0A,0x40,0x7B,0xF0,0x0A,0x00,0x00,0x00, +/* */ +0x00,0x80,0x5C,0x80,0x35,0x40,0x16,0x20,0x19,0xD0,0x54,0x80,0x34,0x80,0x17,0xE0, +0x18,0x80,0x32,0xA0,0x54,0x90,0x11,0x80,0x00,0x00, +/* */ +0x00,0x80,0x71,0x40,0x52,0x20,0x54,0x10,0x63,0xE0,0x60,0x80,0x57,0xF0,0x50,0x80, +0x52,0xA0,0x64,0x90,0x48,0x90,0x41,0x80,0x00,0x00, +/* */ +0x10,0x40,0x7D,0xF0,0x10,0x40,0x38,0xE0,0x55,0x50,0x10,0x40,0x7F,0xF0,0x02,0x10, +0x12,0x00,0x13,0xE0,0x2A,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x40,0x7C,0x40,0x11,0x50,0x11,0x50,0x21,0x50,0x3D,0xF0,0x64,0x40,0x25,0x50, +0x25,0x50,0x3D,0x50,0x25,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x29,0xD0,0x20,0xA0,0x7B,0xF0,0x28,0x80,0x29,0xE0,0x2B,0x20, +0x29,0xE0,0x2D,0x20,0x29,0xE0,0x21,0x20,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x02,0x00,0x1F,0xC0,0x10,0x40,0x12,0x40,0x7F,0xF0,0x08,0x80, +0x3D,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x11,0x20,0x7B,0xC0,0x10,0x90,0x17,0xF0,0x18,0x00,0x77,0xF0, +0x14,0x90,0x17,0xF0,0x14,0x90,0x37,0xF0,0x00,0x00, +/* */ +0x20,0x40,0x38,0x40,0x48,0x40,0x11,0xF0,0x7D,0x50,0x55,0x50,0x7D,0x50,0x55,0xF0, +0x7C,0x40,0x54,0x50,0x54,0x70,0x0D,0xD0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x1E,0x80,0x12,0xC0,0x22,0xA0,0x22,0x90,0x54,0x90,0x14,0x80, +0x08,0x80,0x14,0x80,0x22,0x00,0x41,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x24,0x90,0x24,0x90,0x77,0xF0,0x20,0x00,0x27,0xF0,0x30,0x80,0x67,0xF0, +0x25,0x50,0x25,0x50,0x25,0x50,0x64,0x30,0x00,0x00, +/* */ +0x10,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10, +0x11,0x10,0x11,0x10,0x21,0x10,0x40,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x10,0x40,0x3F,0xE0,0x00,0x80,0x20,0x80,0x3F,0xF0, +0x02,0x80,0x04,0x80,0x18,0x80,0x61,0x80,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x12,0x20,0x7B,0xC0,0x10,0x40,0x37,0xF0,0x39,0x10,0x56,0xA0, +0x11,0x40,0x16,0xE0,0x11,0x50,0x16,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x17,0xE0,0x11,0x00,0x31,0x00,0x5F,0xF0,0x12,0x00,0x13,0xE0, +0x10,0x20,0x13,0x40,0x10,0xC0,0x10,0x20,0x00,0x00, +/* */ +0x08,0x00,0x11,0xE0,0x3D,0x20,0x25,0x20,0x36,0x10,0x2C,0x00,0x7D,0xE0,0x25,0x20, +0x35,0x20,0x2D,0x20,0x25,0xE0,0x4D,0x20,0x00,0x00, +/* */ +0x00,0x80,0x74,0x90,0x54,0x90,0x57,0xF0,0x50,0x00,0x57,0xF0,0x50,0x80,0x57,0xF0, +0x75,0x50,0x55,0x50,0x05,0x50,0x04,0x30,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x42,0x10, +0x42,0x10,0x7F,0xF0,0x42,0x10,0x02,0x00,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x11,0x00,0x52,0x80,0x34,0x40,0x18,0x30,0x17,0xC0,0x34,0x40, +0x54,0x40,0x14,0xD0,0x24,0x10,0x43,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x12,0x40,0x04,0x00,0x3F,0xE0,0x24,0x20,0x2F,0xA0, +0x39,0x20,0x26,0x20,0x29,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x10,0x40,0x11,0xF0,0x7C,0xA0,0x57,0xF0,0x55,0x50,0x55,0xF0,0x55,0x50,0x55,0xF0, +0x5C,0x40,0x11,0xF0,0x10,0x40,0x13,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x21,0x00,0x21,0x00,0x2F,0xE0,0x21,0x00,0x23,0x80, +0x25,0x40,0x29,0x20,0x31,0x10,0x41,0x00,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x00,0x10,0x5F,0x90,0x40,0x90,0x48,0x90,0x4F,0xD0,0x40,0x50, +0x5F,0x50,0x40,0x50,0x41,0x90,0x40,0x30,0x00,0x00, +/* */ +0x08,0x10,0x14,0x10,0x22,0x50,0x41,0x50,0x3E,0x50,0x22,0x50,0x22,0x50,0x22,0x50, +0x2C,0x50,0x21,0x10,0x21,0x10,0x1F,0x30,0x00,0x00, +/* */ +0x01,0x00,0x79,0x00,0x49,0xF0,0x4A,0x10,0x4A,0x20,0x4C,0x80,0x48,0x80,0x48,0x80, +0x79,0x40,0x49,0x40,0x02,0x20,0x04,0x10,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x15,0xF0,0x5A,0x10,0x52,0x20,0x54,0x80,0x50,0x80,0x10,0x80, +0x11,0x40,0x29,0x40,0x2A,0x20,0x44,0x10,0x00,0x00, +/* */ +0x20,0x60,0x23,0x80,0x20,0x80,0x77,0xF0,0x22,0xA0,0x22,0xA0,0x37,0xF0,0x62,0xA0, +0x22,0xA0,0x27,0xF0,0x20,0x80,0x63,0xE0,0x00,0x00, +/* */ +0x20,0x60,0x33,0x80,0x40,0x80,0x07,0xF0,0x72,0xA0,0x22,0xA0,0x27,0xF0,0x72,0xA0, +0x22,0xA0,0x27,0xF0,0x30,0x80,0x23,0xE0,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x02,0x00,0x3F,0xE0,0x12,0x40,0x12,0x40,0x7F,0xF0,0x12,0x40, +0x12,0x40,0x3F,0xE0,0x02,0x00,0x1F,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x04,0x00,0x1F,0xC0,0x08,0x00,0x7F,0xF0,0x10,0x40,0x3F,0xE0, +0x50,0x50,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x7B,0xE0,0x11,0x00,0x37,0xF0,0x3A,0x20,0x57,0xF0, +0x12,0x20,0x13,0xE0,0x12,0x20,0x13,0xE0,0x00,0x00, +/* */ +0x00,0x40,0x7D,0xF0,0x10,0x00,0x7D,0xF0,0x55,0x10,0x55,0xF0,0x6C,0x00,0x45,0xE0, +0x7C,0x20,0x45,0xF0,0x7C,0x40,0x44,0xC0,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x20,0x00,0x3F,0xF0,0x29,0x20,0x28,0xC0,0x2C,0x30, +0x20,0x00,0x2F,0xE0,0x48,0x20,0x0F,0xE0,0x00,0x00, +/* */ +0x00,0x80,0x4F,0xF0,0x20,0x00,0x07,0xE0,0x04,0x20,0x47,0xE0,0x20,0x00,0x07,0xE0, +0x10,0x40,0x2F,0xF0,0x40,0x80,0x01,0x80,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x47,0xF0,0x50,0x80,0x64,0x90,0x24,0x90,0x44,0x90,0x77,0xF0, +0x00,0x80,0x10,0x90,0x60,0x90,0x00,0x70,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x18,0xC0,0x6F,0xB0,0x18,0xC0,0x7F,0xF0, +0x55,0x50,0x7D,0xF0,0x10,0x40,0x7D,0xF0,0x00,0x00, +/* */ +0x77,0x40,0x55,0x50,0x33,0x40,0x55,0x70,0x22,0xC0,0x7F,0x50,0x24,0x50,0x3F,0x60, +0x24,0x60,0x3F,0x50,0x24,0xB0,0x3F,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0xF0,0x20,0x80,0x4B,0xF0,0x72,0x10,0x13,0xF0,0x22,0x10,0x7B,0xF0, +0x00,0x80,0x1B,0xF0,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x31,0x40,0x11,0x50,0x15,0x60,0x35,0xC0, +0x55,0x40,0x15,0x50,0x25,0xD0,0x4E,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x41,0x00,0x21,0xF0,0x12,0x10,0x04,0xA0,0x00,0x80, +0x11,0x40,0x21,0x40,0x42,0x20,0x04,0x10,0x00,0x00, +/* */ +0x02,0x20,0x71,0x20,0x20,0x40,0x27,0xF0,0x42,0x20,0x74,0x40,0x55,0x50,0x56,0x60, +0x52,0x20,0x75,0x50,0x57,0x70,0x01,0x10,0x00,0x00, +/* */ +0x14,0xA0,0x14,0x80,0x15,0xF0,0x55,0x40,0x57,0x40,0x5D,0xF0,0x55,0x40,0x55,0x40, +0x55,0xF0,0x5F,0x40,0x65,0x40,0x01,0xF0,0x00,0x00, +/* */ +0x0C,0x80,0x70,0x40,0x11,0xF0,0x10,0x00,0x7D,0x10,0x10,0xA0,0x13,0xF0,0x7C,0x40, +0x45,0xF0,0x44,0x40,0x7C,0x40,0x44,0x40,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x7F,0xF0,0x10,0x80,0x25,0x20,0x39,0xC0,0x14,0xA0,0x3D,0xE0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x22,0x00,0x13,0xF0,0x04,0x90,0x11,0x40,0x66,0x30,0x00,0x00,0x7F,0xF0,0x10,0x00, +0x1F,0x80,0x14,0x90,0x22,0x90,0x3C,0x70,0x00,0x00, +/* */ +0x40,0x00,0x27,0xF0,0x00,0x10,0x0F,0xD0,0x60,0x10,0x27,0xD0,0x24,0x50,0x24,0x50, +0x27,0xD0,0x24,0x10,0x30,0x10,0x20,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x08,0x90,0x28,0x90,0x28,0xA0,0x2E,0xC0,0x28,0x80,0x28,0x80, +0x28,0x80,0x28,0x90,0x2E,0x90,0x70,0x70,0x00,0x00, +/* */ +0x08,0x10,0x08,0x10,0x7F,0x50,0x08,0x50,0x7F,0x50,0x49,0x50,0x49,0x50,0x4B,0x50, +0x1C,0x50,0x2A,0x10,0x49,0x10,0x08,0x30,0x00,0x00, +/* */ +0x7D,0xF0,0x45,0x10,0x45,0xF0,0x55,0x10,0x55,0xF0,0x54,0x80,0x55,0xF0,0x56,0xB0, +0x11,0x50,0x2A,0x50,0x24,0x90,0x41,0x60,0x00,0x00, +/* */ +0x02,0x00,0x42,0x00,0x23,0xF0,0x04,0x10,0x05,0x20,0x09,0x00,0x01,0x00,0x12,0x80, +0x22,0x80,0x44,0x40,0x08,0x20,0x10,0x10,0x00,0x00, +/* */ +0x02,0x20,0x7D,0x40,0x2B,0xE0,0x2A,0x20,0x3A,0x20,0x2B,0xE0,0x38,0x00,0x29,0x00, +0x2C,0xA0,0x7A,0x10,0x0D,0x50,0x09,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x1F,0xE0,0x35,0x20,0x0D,0x20,0x33,0x20,0x0C,0xC0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x02,0x00,0x04,0x00,0x3F,0xF0,0x22,0x10,0x23,0xD0,0x24,0x50,0x2A,0x90,0x21,0x10, +0x22,0x90,0x24,0x10,0x3F,0xF0,0x20,0x10,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x1F,0xF0,0x24,0x90,0x24,0x90,0x58,0x90,0x0E,0x90,0x11,0x10, +0x21,0x90,0x42,0x50,0x04,0x10,0x08,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x14,0x80,0x15,0x40,0x15,0x40, +0x15,0x40,0x22,0x20,0x22,0x20,0x44,0x10,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x09,0x40,0x15,0x40,0x15,0x40,0x22,0x20, +0x22,0x20,0x44,0x10,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x0F,0xE0,0x41,0x00,0x27,0xC0,0x02,0x00,0x1F,0xF0,0x04,0x40,0x2B,0xA0, +0x51,0x10,0x0F,0xE0,0x02,0x40,0x0C,0x20,0x00,0x00, +/* */ +0x10,0x00,0x11,0xE0,0x55,0x20,0x39,0x20,0x11,0xE0,0x7D,0x20,0x11,0x20,0x39,0xE0, +0x55,0x20,0x11,0x20,0x11,0x20,0x13,0xF0,0x00,0x00, +/* */ +0x01,0x20,0x7D,0x20,0x13,0xF0,0x7D,0x20,0x57,0xF0,0x54,0x00,0x6D,0xE0,0x45,0x20, +0x7D,0xE0,0x45,0x20,0x7D,0xE0,0x45,0x20,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x49,0x20,0x22,0x00,0x13,0xF0,0x7D,0x00,0x21,0xE0,0x3A,0x80, +0x2F,0xF0,0x28,0x80,0x29,0x40,0x5A,0x30,0x00,0x00, +/* */ +0x17,0xF0,0x14,0x10,0x24,0x10,0x24,0x10,0x67,0xF0,0x20,0x80,0x24,0x80,0x24,0xF0, +0x24,0x80,0x24,0x80,0x2A,0x80,0x31,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x55,0x50,0x52,0xA0,0x73,0xE0,0x12,0xA0,0x1B,0xE0,0x50,0x80, +0x57,0xF0,0x5C,0x90,0x67,0xF0,0x00,0x80,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x3F,0xE0,0x29,0x20,0x24,0xA0,0x22,0x60,0x7F,0xF0, +0x10,0x40,0x24,0x20,0x48,0x90,0x1F,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x50,0x50,0x22,0x20,0x1F,0xC0,0x12,0x40,0x1F,0xC0,0x02,0x00, +0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x02,0x00,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x17,0xF0,0x79,0x40,0x12,0x20,0x17,0xF0,0x1A,0x40,0x73,0xF0, +0x12,0x40,0x13,0xF0,0x12,0x40,0x33,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x09,0x00,0x10,0x80,0x3F,0xF0,0x51,0x00,0x1F,0xE0, +0x11,0x00,0x1F,0xE0,0x11,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x0C,0x90,0x17,0xF0,0x11,0x40,0x32,0x20,0x57,0xF0,0x1A,0x40,0x13,0xF0, +0x12,0x40,0x13,0xF0,0x12,0x40,0x13,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x39,0xE0,0x2A,0x20,0x2C,0x40,0x3B,0xF0,0x2A,0x00,0x2A,0xF0,0x3A,0x90, +0x2A,0xB0,0x2A,0x80,0x2A,0x90,0x5C,0x70,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x50,0x80,0x37,0xF0,0x12,0x20,0x12,0x20,0x35,0x50, +0x50,0x80,0x17,0xF0,0x20,0x80,0x40,0x80,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x57,0xF0,0x3A,0x20,0x12,0x20,0x7D,0x50,0x10,0x00,0x38,0x80, +0x57,0xF0,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x01,0x00,0x20,0x80,0x17,0xF0,0x02,0x20,0x42,0x20,0x25,0x50,0x00,0x00,0x00,0x80, +0x17,0xF0,0x20,0x80,0x40,0x80,0x00,0x80,0x00,0x00, +/* */ +0x7D,0xF0,0x24,0x90,0x14,0x50,0x24,0x90,0x02,0x00,0x3F,0xE0,0x10,0x40,0x28,0xA0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x10,0x20,0x10,0x20,0x10,0x20,0x7D,0xF0,0x10,0x20,0x30,0x20,0x39,0x20,0x54,0xA0, +0x10,0xA0,0x10,0x20,0x10,0x20,0x10,0xE0,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x7F,0xF0,0x08,0x00,0x13,0xE0,0x10,0x40,0x30,0x80,0x57,0xF0, +0x10,0x80,0x10,0x80,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x00,0x80,0x00,0x80,0x00,0x80,0x7F,0xF0,0x00,0x80,0x00,0x80,0x10,0x80,0x08,0x80, +0x08,0x80,0x00,0x80,0x00,0x80,0x03,0x80,0x00,0x00, +/* */ +0x01,0x10,0x78,0xA0,0x13,0xF0,0x10,0x40,0x21,0xF0,0x38,0x80,0x6B,0xF0,0x29,0x00, +0x29,0xF0,0x2A,0x40,0x3C,0x40,0x2B,0xF0,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x23,0xE0,0x72,0x20,0x2F,0xF0,0x25,0x00,0x37,0x70,0x65,0x50, +0x27,0x50,0x25,0xA0,0x2F,0x50,0x61,0x90,0x00,0x00, +/* */ +0x22,0x20,0x21,0x40,0x27,0xF0,0x70,0x80,0x23,0xE0,0x21,0x00,0x37,0xF0,0x62,0x00, +0x23,0xE0,0x24,0x80,0x28,0x80,0x67,0xF0,0x00,0x00, +/* */ +0x11,0x20,0x11,0x20,0x13,0xF0,0x79,0x20,0x17,0xF0,0x10,0x00,0x1B,0xF0,0x72,0x10, +0x13,0xF0,0x12,0x10,0x13,0xF0,0x32,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x12,0xA0,0x7A,0xA0,0x12,0xA0,0x15,0xD0,0x18,0x80,0x70,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x37,0xF0,0x00,0x00, +/* */ +0x21,0x20,0x21,0x20,0x3B,0xF0,0x41,0x20,0x77,0xF0,0x20,0x00,0x23,0xF0,0x7A,0x10, +0x23,0xF0,0x2A,0x10,0x33,0xF0,0x22,0x10,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x12,0x20,0x78,0x80,0x11,0x40,0x12,0x20,0x1D,0xD0,0x70,0x00, +0x13,0xE0,0x12,0x20,0x13,0xE0,0x32,0x20,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x00,0x80,0x07,0xF0,0x70,0x80,0x10,0x80,0x11,0x40,0x11,0x20, +0x12,0x10,0x14,0x10,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x52,0x40,0x05,0x00,0x18,0xC0,0x6F,0xB0,0x00,0x00,0x1F,0xC0, +0x10,0x40,0x10,0x40,0x1F,0xC0,0x10,0x40,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x14,0x40,0x5F,0xF0,0x35,0x40,0x12,0x80,0x14,0x40,0x3B,0xB0, +0x50,0x00,0x1F,0xE0,0x28,0x20,0x4F,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x10,0x40,0x7C,0x40,0x10,0x40,0x10,0x40,0x1C,0x40,0x70,0x40, +0x10,0x40,0x10,0x40,0x10,0x40,0x31,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x05,0x00,0x05,0x00, +0x08,0x80,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x07,0x00, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x04,0x00,0x08,0x00,0x0F,0xE0,0x10,0x20,0x28,0x40,0x44,0x40, +0x04,0x80,0x03,0x00,0x0C,0x00,0x70,0x00,0x00,0x00, +/* */ +0x11,0x00,0x1F,0xE0,0x21,0x00,0x2F,0xE0,0x62,0x00,0x3F,0xF0,0x24,0x40,0x29,0x20, +0x35,0x50,0x23,0x80,0x25,0x40,0x2B,0x20,0x00,0x00, +/* */ +0x08,0xA0,0x3E,0x90,0x08,0x80,0x7F,0xF0,0x2A,0x80,0x3E,0xA0,0x2A,0xA0,0x3E,0xA0, +0x14,0x40,0x7F,0x50,0x14,0xB0,0x23,0x10,0x00,0x00, +/* */ +0x12,0x40,0x7F,0xF0,0x12,0x40,0x00,0x00,0x7F,0xF0,0x40,0x10,0x02,0x00,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x22,0x60,0x02,0x00,0x00,0x00, +/* */ +0x00,0x40,0x7C,0x40,0x10,0x80,0x10,0x90,0x1D,0xF0,0x24,0x00,0x25,0xF0,0x55,0x10, +0x09,0x10,0x11,0x10,0x21,0xF0,0x41,0x10,0x00,0x00, +/* */ +0x09,0x40,0x09,0x20,0x11,0x00,0x11,0x70,0x37,0x80,0x51,0x00,0x11,0x00,0x11,0x00, +0x10,0x90,0x10,0x50,0x10,0x30,0x10,0x10,0x00,0x00, +/* */ +0x09,0x40,0x11,0x20,0x31,0x70,0x57,0x80,0x10,0x50,0x10,0x30,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* */ +0x09,0x40,0x11,0x20,0x31,0x70,0x57,0x80,0x10,0x50,0x10,0x30,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x08,0x80,0x10,0x80,0x23,0xE0,0x48,0x80,0x17,0xF0,0x30,0x40,0x57,0xF0,0x10,0x40, +0x12,0x40,0x11,0x40,0x10,0x40,0x11,0xC0,0x00,0x00, +/* */ +0x41,0x00,0x2F,0xE0,0x01,0x20,0x1F,0xF0,0x61,0x20,0x2F,0xE0,0x21,0x00,0x2B,0xA0, +0x25,0x40,0x2B,0x20,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x20,0x20,0x7F,0xF0,0x00,0x10,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x2B,0xF0,0x2A,0x90,0x3A,0x90,0x28,0x80,0x39,0x40,0x29,0x40, +0x2D,0x40,0x7A,0x40,0x0A,0x50,0x0C,0x30,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x7A,0x20,0x12,0x20,0x13,0xE0,0x1A,0x20,0x72,0x20, +0x12,0x20,0x13,0xE0,0x10,0x00,0x37,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x1F,0xE0,0x10,0x20,0x12,0x20,0x11,0x20,0x10,0x20,0x7F,0xF0,0x10,0x20, +0x10,0x20,0x20,0x20,0x20,0x20,0x40,0xE0,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x22,0x00,0x14,0x70,0x7F,0x50,0x49,0x50,0x7F,0x60,0x49,0x60,0x7F,0x50,0x08,0x50, +0x7F,0x50,0x08,0x60,0x08,0x40,0x08,0x40,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x17,0xF0,0x7C,0x90,0x17,0xF0,0x14,0x90,0x1F,0xF0,0x70,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x30,0x80,0x00,0x00, +/* */ +0x00,0x00,0x3D,0xF0,0x25,0x10,0x25,0x10,0x3D,0xF0,0x25,0x10,0x25,0x10,0x3D,0x10, +0x25,0xF0,0x24,0x00,0x24,0x00,0x4D,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x1F,0xE0,0x10,0x20,0x10,0x20,0x10,0x20,0x1F,0xE0,0x10,0x20,0x10,0x20, +0x10,0x20,0x1F,0xE0,0x00,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x1F,0xE0,0x20,0x00,0x5F,0xC0,0x00,0x00,0x3F,0xC0,0x15,0x40,0x26,0x40,0x09,0x40, +0x34,0x40,0x15,0x50,0x0A,0x30,0x31,0x10,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x24,0x20,0x24,0x20,0x67,0xE0,0x24,0x20,0x24,0x20,0x24,0x20, +0x27,0xE0,0x20,0x00,0x20,0x00,0x2F,0xF0,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x17,0xF0,0x5C,0x90,0x57,0xF0,0x54,0x90,0x57,0xF0,0x10,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x00,0x80,0x22,0x90,0x12,0xA0,0x04,0x80,0x41,0x60,0x26,0x10,0x00,0x80,0x02,0x90, +0x14,0xA0,0x21,0x40,0x42,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x40,0x30,0x2D,0xC0,0x04,0x40,0x04,0x40,0x69,0x70,0x29,0x40,0x2D,0x40,0x25,0x40, +0x25,0xF0,0x34,0x00,0x28,0x00,0x17,0xF0,0x00,0x00, +/* */ +0x02,0x20,0x71,0x40,0x17,0xF0,0x14,0x90,0x77,0xF0,0x44,0x90,0x47,0xF0,0x70,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x60,0x80,0x00,0x00, +/* */ +0x7F,0xF0,0x02,0x10,0x12,0x00,0x13,0xE0,0x2A,0x00,0x47,0xF0,0x02,0x00,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x12,0x40,0x02,0x00,0x3F,0xE0,0x00,0x20,0x00,0x20,0x1F,0xE0, +0x00,0x20,0x00,0x20,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x12,0xA0,0x78,0x80,0x17,0xF0,0x10,0x10,0x18,0x10,0x73,0xF0, +0x10,0x10,0x10,0x10,0x17,0xF0,0x30,0x10,0x00,0x00, +/* */ +0x22,0x20,0x12,0x40,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40,0x10,0x40,0x1F,0xC0, +0x08,0x80,0x08,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x27,0xC0,0x10,0x80,0x03,0x00,0x47,0xF0,0x21,0x50, +0x02,0x50,0x14,0x90,0x21,0x10,0x46,0x60,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x12,0xA0,0x78,0x80,0x17,0xF0,0x30,0x10,0x38,0x10,0x53,0xF0, +0x10,0x10,0x10,0x10,0x17,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x04,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x08,0x10,0x08,0x10, +0x10,0x10,0x10,0x10,0x20,0x10,0x40,0xE0,0x00,0x00, +/* */ +0x11,0x00,0x13,0xE0,0x12,0x20,0x7A,0xA0,0x12,0x60,0x12,0x00,0x1B,0xF0,0x71,0x10, +0x15,0x50,0x17,0xD0,0x10,0x10,0x30,0x60,0x00,0x00, +/* */ +0x00,0x70,0x7B,0x80,0x48,0x90,0x4A,0x50,0x79,0x20,0x10,0x80,0x13,0x30,0x5A,0x10, +0x53,0x30,0x52,0x10,0x5B,0xF0,0x62,0x10,0x00,0x00, +/* */ +0x10,0x10,0x1F,0x10,0x24,0x50,0x29,0x50,0x6F,0x50,0x25,0x50,0x24,0x50,0x2F,0x50, +0x24,0x50,0x27,0x10,0x2C,0x10,0x20,0x30,0x00,0x00, +/* */ +0x04,0x00,0x3F,0xC0,0x20,0x40,0x24,0x40,0x22,0xC0,0x20,0x00,0x3F,0xF0,0x04,0x10, +0x44,0x50,0x44,0x50,0x7F,0xD0,0x00,0x30,0x00,0x00, +/* */ +0x20,0x80,0x13,0xF0,0x78,0x80,0x0B,0xE0,0x10,0x80,0x17,0xF0,0x39,0x20,0x55,0xF0, +0x12,0x20,0x12,0xA0,0x14,0x20,0x10,0x60,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x00,0x20,0x10,0x1F,0xF0,0x00,0x00,0x00,0x40, +0x7F,0xF0,0x10,0x40,0x08,0x40,0x01,0xC0,0x00,0x00, +/* */ +0x00,0x10,0x7F,0x10,0x10,0x50,0x22,0x50,0x7F,0x50,0x09,0x50,0x08,0x50,0x7F,0x50, +0x08,0x50,0x08,0x10,0x0F,0x10,0x70,0x30,0x00,0x00, +/* */ +0x08,0x70,0x73,0x80,0x10,0x90,0x12,0x50,0x79,0x20,0x10,0x80,0x33,0x30,0x3A,0x10, +0x53,0x30,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0xF0,0x10,0x80,0x5B,0xF0,0x56,0x10,0x53,0xF0,0x52,0x10,0x13,0xF0, +0x10,0x80,0x17,0xF0,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x22,0x20,0x17,0xF0,0x01,0x00,0x07,0xF0,0x74,0x10,0x17,0xF0,0x14,0x10,0x17,0xF0, +0x14,0x10,0x17,0xF0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x47,0xF0,0x29,0x10,0x01,0x20,0x02,0x80,0x24,0x40,0x48,0x30,0x00,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x27,0xF0,0x40,0x80,0x17,0xF0,0x25,0x50,0x67,0xF0,0x20,0x00,0x2F,0xF0, +0x20,0x80,0x25,0x20,0x25,0x50,0x28,0xD0,0x00,0x00, +/* */ +0x17,0xE0,0x24,0x20,0x47,0xE0,0x14,0x20,0x27,0xE0,0x60,0x00,0x27,0xE0,0x20,0x40, +0x2F,0xF0,0x24,0x40,0x22,0x40,0x20,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x20,0x80,0x7C,0xF0,0x45,0x10,0x46,0x10,0x44,0x90,0x7C,0x50,0x44,0x50, +0x44,0x10,0x44,0x10,0x7C,0x10,0x44,0x60,0x00,0x00, +/* */ +0x07,0x50,0x79,0x60,0x4D,0x50,0x4A,0x20,0x7B,0xE0,0x14,0x10,0x13,0xE0,0x5A,0x20, +0x53,0xE0,0x52,0x20,0x59,0x40,0x67,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x10,0x40,0x54,0x40,0x58,0x40,0x50,0x40,0x10,0x40,0x10,0x40, +0x10,0x40,0x28,0x40,0x24,0x40,0x45,0xC0,0x00,0x00, +/* */ +0x3D,0x20,0x05,0x40,0x48,0x90,0x28,0xA0,0x17,0x40,0x20,0x20,0x5F,0xD0,0x10,0x40, +0x1F,0xC0,0x08,0x80,0x05,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x80, +0x7F,0xF0,0x10,0x80,0x08,0x80,0x03,0x80,0x00,0x00, +/* */ +0x07,0x50,0x71,0x60,0x55,0x40,0x52,0x50,0x75,0xA0,0x58,0x10,0x57,0xE0,0x74,0x20, +0x57,0xE0,0x54,0x20,0x72,0x40,0x5F,0xF0,0x00,0x00, +/* */ +0x78,0xA0,0x0F,0xC0,0x50,0x50,0x3F,0xE0,0x50,0x50,0x1F,0xC0,0x08,0x80,0x7F,0xF0, +0x00,0x00,0x1F,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xF0,0x05,0x10,0x05,0x20,0x45,0x40,0x29,0x20,0x29,0x10,0x11,0x10, +0x29,0x10,0x25,0x60,0x45,0x00,0x01,0x00,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x12,0x20,0x7B,0xE0,0x10,0x00,0x17,0xF0,0x10,0x80, +0x12,0xE0,0x1A,0x80,0x62,0x80,0x05,0xF0,0x00,0x00, +/* */ +0x08,0x60,0x0F,0x80,0x14,0x80,0x14,0x80,0x34,0x80,0x57,0xF0,0x14,0x80,0x14,0x80, +0x15,0x50,0x16,0x50,0x15,0x30,0x10,0x90,0x00,0x00, +/* */ +0x01,0x00,0x5F,0xF0,0x28,0x20,0x04,0x40,0x1F,0xF0,0x51,0x10,0x37,0xD0,0x11,0x10, +0x17,0xD0,0x34,0x50,0x57,0xD0,0x10,0x30,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x07,0xF0,0x04,0x90,0x74,0x90,0x17,0xF0,0x14,0x90,0x14,0x90, +0x17,0xF0,0x10,0x00,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x0C,0x80,0x70,0x80,0x10,0x80,0x10,0xF0,0x7D,0x20,0x12,0xA0,0x10,0xA0,0x7C,0xA0, +0x44,0xA0,0x44,0x40,0x7C,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x0A,0x20,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20, +0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x28,0x80,0x12,0x90,0x2A,0x90,0x4A,0xA0,0x0C,0x80,0x18,0x80,0x29,0x40, +0x49,0x40,0x0A,0x20,0x0A,0x20,0x34,0x10,0x00,0x00, +/* */ +0x02,0x00,0x47,0xC0,0x2C,0x40,0x03,0x80,0x04,0x40,0x59,0x30,0x21,0x00,0x0F,0xE0, +0x01,0x00,0x25,0x40,0x49,0x20,0x13,0x10,0x00,0x00, +/* */ +0x7D,0xF0,0x24,0x90,0x14,0x50,0x24,0x90,0x09,0x00,0x1F,0xF0,0x31,0x00,0x5F,0xE0, +0x11,0x00,0x1F,0xE0,0x11,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x22,0x20,0x71,0x40,0x57,0xF0,0x54,0x90,0x55,0xD0,0x54,0x90, +0x55,0xD0,0x25,0x50,0x55,0xD0,0x44,0x30,0x00,0x00, +/* */ +0x10,0x60,0x17,0x80,0x14,0x80,0x7C,0x80,0x14,0x80,0x17,0xF0,0x1C,0x80,0x74,0x80, +0x15,0x50,0x16,0x50,0x15,0x30,0x30,0x90,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x20,0xE0,0x2F,0x80,0x28,0x80,0x28,0x80,0x2F,0xF0, +0x28,0x80,0x2A,0x50,0x2D,0x30,0x48,0x90,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x12,0xB0,0x12,0xD0,0x7B,0x90,0x16,0x90,0x12,0x90,0x12,0xB0, +0x12,0x80,0x1A,0x10,0x62,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x42,0x10, +0x3F,0xE0,0x22,0x20,0x22,0x60,0x02,0x00,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x00,0x00,0x3F,0xE0,0x02,0x20,0x3F,0xE0,0x22,0x00, +0x3F,0xF0,0x0A,0x10,0x12,0x10,0x62,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x10,0x40,0x08,0x80,0x7F,0xF0,0x40,0x10,0x02,0x00,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x22,0x60,0x02,0x00,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x3F,0xE0,0x02,0x20,0x3F,0xE0,0x22,0x00,0x3F,0xF0,0x06,0x10, +0x0A,0x10,0x12,0x60,0x62,0x00,0x02,0x00,0x00,0x00, +/* */ +0x44,0x40,0x22,0x80,0x0F,0xE0,0x01,0x20,0x6F,0xE0,0x29,0x00,0x2F,0xF0,0x23,0x10, +0x25,0x10,0x29,0x60,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x42,0x20,0x51,0x40,0x67,0xF0,0x24,0x10,0x40,0x80,0x77,0xF0, +0x04,0x90,0x14,0x90,0x64,0xB0,0x00,0x80,0x00,0x00, +/* */ +0x08,0x00,0x3D,0xF0,0x08,0x40,0x3C,0x80,0x25,0xF0,0x3D,0x10,0x25,0x50,0x3D,0x50, +0x25,0x50,0x7E,0x40,0x24,0xA0,0x43,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7A,0x40,0x12,0x40,0x12,0x70,0x1A,0x40,0x72,0x40, +0x15,0xF0,0x15,0x10,0x19,0x10,0x31,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x4F,0xF0,0x21,0x00,0x07,0xE0,0x04,0x20,0x47,0xE0,0x24,0x20,0x07,0xE0, +0x14,0x20,0x2F,0xF0,0x42,0x40,0x04,0x20,0x00,0x00, +/* */ +0x01,0x40,0x71,0x40,0x27,0xF0,0x25,0x50,0x45,0x50,0x77,0xF0,0x55,0x50,0x55,0x50, +0x5F,0xF0,0x70,0x00,0x52,0x20,0x04,0x10,0x00,0x00, +/* */ +0x02,0x00,0x03,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20, +0x3F,0xE0,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x05,0x00,0x05,0x00,0x3F,0xE0,0x25,0x20,0x25,0x20,0x3F,0xE0,0x25,0x20,0x25,0x20, +0x7F,0xF0,0x08,0x80,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x10,0x80,0x7C,0x40,0x13,0xF0,0x3A,0x10,0x10,0x00,0x7D,0xF0,0x28,0x40,0x39,0x40, +0x29,0x70,0x39,0x40,0x2A,0xC0,0x2C,0x70,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x7B,0xC0,0x11,0x40,0x1B,0x50,0x71,0x50,0x12,0xB0,0x34,0x10, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x7F,0xC0,0x44,0x40,0x44,0x40,0x7F,0xC0,0x44,0x40,0x44,0x40, +0x7F,0xC0,0x44,0x10,0x04,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x0F,0xF0,0x14,0x90,0x14,0x90,0x34,0x90,0x57,0xF0,0x14,0x90,0x14,0x90, +0x14,0x90,0x14,0x90,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x20,0x10,0x7F,0x90,0x24,0x90,0x24,0x90,0x3F,0x90,0x24,0x90, +0x24,0x90,0x3F,0x90,0x20,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x21,0x00,0x21,0x00,0x21,0xF0,0x21,0x00,0x21,0x00, +0x2F,0xF0,0x28,0x10,0x28,0x10,0x4F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x5A,0x40,0x56,0x40,0x52,0x70,0x52,0x40,0x12,0x40, +0x15,0xF0,0x15,0x10,0x19,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x28,0xA0,0x37,0x60,0x20,0x20,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x08,0x80,0x70,0x70,0x00,0x00, +/* */ +0x01,0x00,0x40,0x80,0x2F,0xF0,0x08,0x10,0x00,0x00,0x4F,0xF0,0x20,0x80,0x04,0x80, +0x04,0xE0,0x24,0x80,0x4A,0x80,0x11,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3E,0xE0,0x22,0xA0,0x3E,0xA0,0x21,0x30,0x2A,0x00,0x3F,0xE0,0x2A,0xA0, +0x3F,0xA0,0x20,0x40,0x2A,0xA0,0x51,0x10,0x00,0x00, +/* */ +0x03,0xF0,0x7A,0x10,0x12,0x90,0x13,0xD0,0x22,0x90,0x3B,0xF0,0x6A,0x10,0x2B,0xD0, +0x2B,0x50,0x3D,0xD0,0x24,0x10,0x08,0x70,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x48,0x10,0x48,0x10,0x48,0x50,0x48,0x90,0x49,0x10,0x4A,0x10, +0x7C,0x10,0x48,0x10,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x7E,0x50,0x42,0x40,0x52,0xF0,0x7A,0xA0,0x53,0xA0,0x7A,0xF0,0x42,0xA0,0x7A,0xA0, +0x6A,0xF0,0x7A,0xA0,0x42,0xA0,0x0E,0xF0,0x00,0x00, +/* */ +0x0F,0xF0,0x08,0x10,0x49,0x10,0x2B,0xD0,0x09,0x10,0x0F,0xF0,0x08,0x10,0x0B,0xD0, +0x2A,0x50,0x4B,0xD0,0x10,0x10,0x20,0x70,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x00,0x20,0x00,0x20,0x00,0xA0,0x01,0x20,0x06,0x20,0x18,0x20, +0x60,0x20,0x00,0x20,0x00,0x20,0x01,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x10,0xF0,0x78,0x80,0x17,0xF0,0x14,0x10,0x17,0xF0,0x1C,0x10,0x77,0xF0, +0x10,0x80,0x17,0xF0,0x10,0x80,0x30,0x80,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x42,0x10, +0x42,0x10,0x42,0x10,0x42,0x30,0x02,0x00,0x00,0x00, +/* */ +0x21,0x00,0x21,0x00,0x3D,0xF0,0x42,0x10,0x3C,0x10,0x11,0x10,0x10,0x90,0x7C,0x90, +0x10,0x10,0x14,0x10,0x18,0x10,0x10,0x60,0x00,0x00, +/* */ +0x47,0xF0,0x24,0x10,0x04,0x90,0x05,0xD0,0x64,0x90,0x27,0xF0,0x24,0x10,0x25,0xD0, +0x25,0x50,0x35,0xD0,0x24,0x10,0x08,0x70,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x4A,0x80,0x4B,0xE0,0x7C,0x80,0x10,0x80,0x17,0xF0,0x58,0x80, +0x51,0x40,0x51,0x40,0x5A,0x20,0x64,0x10,0x00,0x00, +/* */ +0x10,0x40,0x28,0xA0,0x07,0x00,0x18,0xC0,0x67,0x30,0x19,0x00,0x2A,0x40,0x0C,0x80, +0x33,0xE0,0x0E,0x20,0x02,0xC0,0x3F,0x00,0x00,0x00, +/* */ +0x00,0xA0,0x7A,0xA0,0x17,0xF0,0x12,0xA0,0x22,0xE0,0x3A,0x00,0x6B,0xF0,0x28,0x80, +0x2F,0xF0,0x39,0xC0,0x2A,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x10,0xA0,0x12,0xA0,0x17,0xF0,0x7A,0xA0,0x52,0xE0,0x52,0x00,0x7B,0xF0,0x10,0x80, +0x17,0xF0,0x19,0xC0,0x62,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x20,0x80,0x12,0x80,0x03,0xE0,0x04,0x80,0x70,0x80,0x17,0xF0,0x10,0x80,0x11,0x40, +0x12,0x20,0x14,0x10,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x20,0xA0,0x12,0xA0,0x07,0xF0,0x02,0xA0,0x72,0xE0,0x12,0x00,0x13,0xF0,0x10,0x80, +0x17,0xF0,0x19,0xC0,0x12,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x3F,0xC0,0x10,0x80,0x0F,0x00,0x3D,0xE0,0x25,0x20,0x18,0xC0,0x25,0x20,0x7F,0xF0, +0x50,0x50,0x1F,0xC0,0x10,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x48,0x40,0x48,0x40,0x78,0x40,0x48,0x40,0x48,0x40,0x78,0x40, +0x48,0x40,0x48,0x40,0x78,0x40,0x49,0xC0,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x48,0x40,0x48,0x40,0x48,0x40,0x48,0x40,0x48,0x40,0x48,0x40, +0x78,0x40,0x48,0x40,0x00,0x40,0x01,0xC0,0x00,0x00, +/* */ +0x20,0x00,0x23,0xF0,0x3C,0x40,0x40,0x40,0x3C,0x40,0x10,0x40,0x10,0x40,0x7C,0x40, +0x10,0x40,0x14,0x40,0x18,0x40,0x11,0xC0,0x00,0x00, +/* */ +0x07,0xF0,0x78,0x80,0x11,0x00,0x17,0xF0,0x14,0x10,0x14,0x90,0x14,0x90,0x14,0x90, +0x14,0x90,0x11,0x40,0x32,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x50,0x50,0x5F,0xD0,0x50,0x50,0x7F,0xF0,0x05,0x00, +0x7D,0xF0,0x25,0x10,0x25,0x10,0x45,0x10,0x00,0x00, +/* */ +0x20,0x80,0x20,0x40,0x3B,0xF0,0x42,0x10,0x78,0x00,0x23,0xF0,0x20,0x80,0x7A,0x80, +0x22,0xE0,0x2A,0x80,0x35,0x80,0x28,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x00,0x00,0x7F,0xF0,0x02,0x00,0x12,0x00, +0x13,0xE0,0x12,0x00,0x2A,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x17,0xF0,0x00,0x40,0x00,0x40,0x70,0x40,0x10,0x40,0x10,0x40,0x10,0x40, +0x14,0x40,0x18,0x40,0x10,0x40,0x01,0xC0,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0, +0x08,0x00,0x10,0x40,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x7F,0xF0,0x08,0x00,0x12,0x00,0x22,0x00,0x3F,0xE0,0x02,0x00, +0x12,0x40,0x22,0x20,0x42,0x10,0x06,0x00,0x00,0x00, +/* */ +0x08,0x00,0x0F,0xC0,0x10,0x40,0x28,0x80,0x45,0x00,0x02,0x00,0x0D,0x80,0x70,0x70, +0x06,0x00,0x01,0x80,0x0E,0x00,0x01,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x12,0x40,0x1F,0xC0, +0x12,0x40,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x11,0x40,0x17,0xF0,0x11,0x40,0x5B,0xF0,0x54,0x80,0x53,0xE0,0x52,0xA0,0x13,0xE0, +0x12,0xA0,0x17,0xF0,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x00,0x80,0x01,0xF0,0x7C,0x90,0x10,0x90,0x20,0x90,0x28,0x90, +0x44,0x90,0x7D,0x10,0x01,0x10,0x02,0x60,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x13,0xF0,0x7D,0x00,0x11,0x80,0x32,0x80,0x3B,0xF0,0x54,0x80, +0x12,0xA0,0x12,0x90,0x14,0x90,0x11,0x80,0x00,0x00, +/* */ +0x08,0x00,0x0F,0xF0,0x14,0x10,0x15,0xD0,0x34,0x10,0x55,0xD0,0x15,0x50,0x15,0x50, +0x15,0xD0,0x14,0x10,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x10,0x5D,0xD0,0x54,0x10,0x55,0xD0,0x55,0x50,0x15,0x50, +0x15,0xD0,0x14,0x10,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x4F,0xE0,0x24,0x00,0x05,0x00,0x09,0x00,0x0F,0xF0,0x01,0x00, +0x25,0x40,0x49,0x20,0x11,0x10,0x03,0x00,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xF0,0x28,0x10,0x0B,0xD0,0x08,0x10,0x4B,0xD0,0x2A,0x50,0x0A,0x50, +0x0B,0xD0,0x28,0x10,0x48,0x10,0x08,0x30,0x00,0x00, +/* */ +0x02,0x00,0x24,0x30,0x4F,0x90,0x48,0x90,0x4F,0x90,0x48,0x90,0x6F,0xB0,0x00,0x00, +0x08,0x80,0x08,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x10,0x20,0x11,0x20,0x10,0xA0,0x7C,0x20,0x11,0x20,0x10,0xA0,0x18,0x20,0x70,0x30, +0x13,0xE0,0x10,0x20,0x10,0x20,0x30,0x20,0x00,0x00, +/* */ +0x00,0x80,0x08,0x80,0x04,0x80,0x02,0x80,0x20,0x80,0x10,0x80,0x08,0x80,0x00,0xF0, +0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x4B,0xE0,0x48,0x80,0x50,0x80,0x53,0xF0,0x48,0x80,0x4A,0x80, +0x4A,0xE0,0x72,0x80,0x45,0x80,0x48,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00, +0x20,0x20,0x10,0x40,0x08,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x17,0xF0,0x00,0x00,0x03,0xE0,0x72,0x20,0x13,0xE0,0x10,0x00,0x12,0x20, +0x11,0x40,0x17,0xF0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x5F,0xF0,0x30,0x00,0x17,0xE0,0x14,0x20,0x37,0xE0, +0x50,0x00,0x14,0x20,0x22,0x40,0x4F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x12,0xF0,0x3A,0x90,0x14,0x90,0x7E,0xA0,0x10,0xA0,0x3E,0x90,0x62,0x90, +0x3E,0x90,0x22,0xE0,0x3E,0x80,0x22,0x80,0x00,0x00, +/* */ +0x08,0xE0,0x0E,0xA0,0x08,0xA0,0x7F,0x40,0x2A,0xA0,0x5F,0xD0,0x10,0x40,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x14,0x40,0x7F,0xF0, +0x22,0x40,0x3F,0xE0,0x00,0x40,0x03,0x80,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x50,0x80,0x7B,0xF0,0x50,0x10,0x11,0x40,0x1A,0xC0,0x71,0x40, +0x17,0xF0,0x10,0x80,0x11,0x20,0x16,0x10,0x00,0x00, +/* */ +0x10,0x80,0x50,0x80,0x20,0x80,0x57,0xF0,0x14,0x90,0x14,0x90,0x34,0x90,0x57,0xF0, +0x10,0x80,0x10,0x90,0x10,0xF0,0x67,0x90,0x00,0x00, +/* */ +0x41,0x00,0x27,0xE0,0x01,0x00,0x0F,0xF0,0x60,0x10,0x22,0x80,0x29,0x80,0x24,0x80, +0x2F,0xF0,0x31,0x40,0x22,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x11,0x00,0x11,0x10,0x13,0xA0,0x79,0x40,0x17,0xF0,0x11,0x00,0x13,0xE0,0x16,0x20, +0x13,0xE0,0x1A,0x20,0x63,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x01,0x00,0x79,0x10,0x4B,0xA0,0x49,0x40,0x7F,0xF0,0x49,0x00,0x4B,0xE0,0x7E,0x20, +0x4B,0xE0,0x4A,0x20,0x7B,0xE0,0x4A,0x20,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x45,0xD0,0x54,0xA0,0x57,0xF0,0x54,0x80,0x55,0xF0,0x57,0x10, +0x55,0xF0,0x11,0x10,0x29,0xF0,0x45,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0x80,0x7C,0x80,0x13,0xE0,0x30,0x80,0x38,0x80,0x54,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x37,0xF0,0x45,0x20,0x07,0xF0,0x75,0x20,0x25,0xE0,0x24,0x00,0x77,0xE0, +0x25,0x20,0x25,0x20,0x34,0xC0,0x2B,0x30,0x00,0x00, +/* */ +0x00,0x40,0x3C,0x40,0x24,0x40,0x24,0x40,0x3D,0xF0,0x24,0x40,0x24,0x40,0x3C,0x40, +0x24,0x40,0x24,0x40,0x24,0x40,0x4D,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3F,0xF0,0x24,0x40,0x27,0xC0,0x20,0x00,0x2F,0xE0, +0x24,0x20,0x22,0x40,0x21,0x80,0x4E,0x70,0x00,0x00, +/* */ +0x00,0x80,0x4F,0xF0,0x2A,0x20,0x0F,0xF0,0x0A,0x20,0x4B,0xE0,0x28,0x00,0x0F,0xE0, +0x0A,0x20,0x2A,0x40,0x49,0x80,0x16,0x70,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7A,0x10,0x2A,0x10,0x2A,0x10,0x2B,0xF0,0x4A,0x10, +0x2A,0x00,0x12,0x00,0x2A,0x00,0x44,0x00,0x00,0x00, +/* */ +0x40,0x80,0x24,0x90,0x04,0x90,0x77,0xF0,0x00,0x00,0x57,0xF0,0x50,0x80,0x57,0xF0, +0x25,0x50,0x15,0x50,0x65,0x50,0x04,0x30,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x38,0x00,0x53,0xE0,0x12,0x20,0x12,0x20,0x7B,0xE0,0x10,0x00, +0x12,0x20,0x29,0x40,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x22,0xE0,0x34,0xA0,0x46,0xA0,0x05,0x30,0x74,0x00,0x26,0xE0,0x24,0xA0,0x74,0xA0, +0x26,0xA0,0x2C,0x40,0x34,0xA0,0x25,0x10,0x00,0x00, +/* */ +0x09,0xE0,0x31,0x20,0x21,0x20,0x3A,0x30,0x20,0x00,0x3B,0xE0,0x21,0x20,0x29,0x20, +0x31,0x40,0x60,0x80,0x21,0x40,0x26,0x30,0x00,0x00, +/* */ +0x08,0x10,0x2A,0xE0,0x5C,0x80,0x48,0x80,0x7E,0xF0,0x48,0xA0,0x5C,0xA0,0x6A,0xA0, +0x48,0xA0,0x48,0xA0,0x7E,0xA0,0x01,0x20,0x00,0x00, +/* */ +0x22,0xE0,0x24,0xA0,0x46,0xA0,0x55,0x30,0x64,0x00,0x26,0xE0,0x44,0xA0,0x74,0xA0, +0x06,0xA0,0x1C,0x40,0x64,0xA0,0x05,0x10,0x00,0x00, +/* */ +0x11,0x40,0x11,0x20,0x13,0xF0,0x7A,0x40,0x16,0x40,0x1B,0xF0,0x12,0x40,0x12,0x40, +0x13,0xF0,0x1A,0x40,0x62,0x40,0x03,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x08,0x80, +0x08,0x80,0x08,0x90,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x48,0x80,0x48,0x80,0x50,0x80,0x50,0x80,0x49,0x40,0x49,0x40, +0x49,0x40,0x72,0x20,0x42,0x20,0x44,0x10,0x00,0x00, +/* */ +0x00,0x20,0x00,0x20,0x7C,0x20,0x05,0xF0,0x04,0x20,0x44,0x20,0x29,0x20,0x28,0xA0, +0x10,0xA0,0x28,0x20,0x24,0x20,0x44,0xE0,0x00,0x00, +/* */ +0x24,0x80,0x2E,0x80,0x20,0x80,0x7E,0xF0,0x2B,0x20,0x2E,0xA0,0x20,0xA0,0x2E,0xA0, +0x32,0xA0,0x6F,0x40,0x04,0xA0,0x0D,0x10,0x00,0x00, +/* */ +0x00,0x80,0x00,0x80,0x77,0xF0,0x50,0x80,0x54,0x90,0x54,0x90,0x54,0x90,0x57,0xF0, +0x70,0x80,0x50,0x90,0x00,0x90,0x00,0x70,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x51,0x40,0x57,0xF0,0x75,0x50,0x16,0x70,0x1D,0x90,0x57,0xF0, +0x50,0x20,0x5F,0xF0,0x62,0x20,0x01,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7E,0x80,0x00,0x80,0x3E,0xF0,0x23,0x20,0x3E,0xA0,0x00,0xA0,0x3C,0xA0, +0x04,0xA0,0x7E,0x40,0x08,0xA0,0x19,0x10,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x7C,0x40,0x10,0x80,0x55,0xF0,0x55,0x10,0x55,0x50,0x7D,0x50, +0x11,0x50,0x14,0x40,0x18,0xA0,0x11,0x10,0x00,0x00, +/* */ +0x3F,0xF0,0x22,0x10,0x3F,0xD0,0x22,0x10,0x2A,0x90,0x2A,0x90,0x2F,0x90,0x22,0x10, +0x22,0x50,0x21,0xD0,0x20,0x10,0x3F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x30,0x80,0x47,0xF0,0x00,0x80,0x74,0x90,0x24,0x90,0x24,0x90,0x77,0xF0, +0x20,0x80,0x20,0x90,0x30,0x90,0x20,0x70,0x00,0x00, +/* */ +0x00,0xE0,0x3F,0x00,0x21,0x00,0x3F,0xF0,0x21,0x00,0x2F,0xE0,0x28,0x20,0x2F,0xE0, +0x28,0x20,0x2F,0xE0,0x28,0x20,0x4F,0xE0,0x00,0x00, +/* */ +0x47,0xE0,0x28,0x80,0x0F,0xF0,0x08,0x80,0x6B,0xE0,0x2A,0x20,0x2B,0xE0,0x2A,0x20, +0x2B,0xE0,0x32,0x20,0x23,0xE0,0x5F,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x27,0x70,0x21,0x10,0x75,0x50,0x22,0x20,0x25,0x50,0x30,0x00,0x67,0x70, +0x21,0x50,0x25,0x50,0x22,0x20,0x6D,0x50,0x00,0x00, +/* */ +0x01,0x00,0x79,0xE0,0x4A,0x20,0x4D,0x40,0x48,0x80,0x49,0x40,0x4A,0xF0,0x49,0x10, +0x7A,0xA0,0x48,0x40,0x01,0x80,0x06,0x00,0x00,0x00, +/* */ +0x04,0x00,0x07,0xC0,0x08,0x80,0x11,0x00,0x6A,0x40,0x04,0x80,0x19,0xF0,0x62,0x20, +0x0D,0x40,0x01,0x80,0x06,0x00,0x78,0x00,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0xB0,0x00,0x80,0x7F,0xF0, +0x10,0x80,0x08,0x80,0x00,0x80,0x03,0x80,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x12,0x20,0x7A,0x20,0x14,0x90,0x10,0x80,0x17,0xF0,0x10,0x80, +0x19,0xC0,0x62,0xA0,0x04,0x90,0x00,0x80,0x00,0x00, +/* */ +0x10,0x00,0x3D,0xC0,0x25,0x40,0x3D,0x40,0x26,0x30,0x3C,0x80,0x27,0xF0,0x7C,0x80, +0x15,0xC0,0x26,0xA0,0x44,0x90,0x0C,0x80,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x10,0x40,0x20,0x30,0x42,0x00,0x02,0x00,0x7F,0xF0,0x07,0x00, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x7B,0xE0,0x4A,0x20,0x4A,0x20,0x7A,0x20,0x14,0x90,0x10,0x80,0x5B,0xF0,0x50,0x80, +0x51,0xC0,0x5A,0xA0,0x64,0x90,0x00,0x80,0x00,0x00, +/* */ +0x10,0x80,0x38,0x40,0x2B,0xF0,0x3A,0x10,0x28,0x00,0x79,0x10,0x29,0x20,0x39,0x40, +0x29,0x80,0x29,0x10,0x29,0x10,0x58,0xF0,0x00,0x00, +/* */ +0x3E,0x10,0x22,0x10,0x22,0x50,0x22,0x50,0x49,0x50,0x08,0x50,0x7F,0x50,0x08,0x50, +0x1C,0x50,0x2A,0x10,0x49,0x10,0x08,0x30,0x00,0x00, +/* */ +0x11,0x00,0x17,0xF0,0x1A,0x00,0x55,0xE0,0x50,0x80,0x57,0xF0,0x52,0x20,0x13,0xE0, +0x12,0x20,0x13,0xE0,0x12,0x20,0x12,0x60,0x00,0x00, +/* */ +0x38,0x80,0x2B,0xF0,0x29,0x00,0x33,0xE0,0x2D,0x20,0x29,0xE0,0x31,0x20,0x21,0x60, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0xC0,0x13,0x60,0x11,0x50,0x7D,0x40,0x57,0xF0,0x55,0x40,0x7D,0xD0,0x13,0x60, +0x15,0x40,0x1D,0x50,0x65,0xB0,0x03,0x10,0x00,0x00, +/* */ +0x10,0xC0,0x13,0x60,0x11,0x50,0x55,0x40,0x57,0xF0,0x55,0x40,0x55,0xD0,0x57,0x60, +0x55,0x40,0x5D,0x50,0x65,0xB0,0x03,0x10,0x00,0x00, +/* */ +0x18,0x40,0x6C,0xF0,0x2A,0x90,0x28,0xD0,0x7E,0x90,0x28,0xB0,0x3A,0x80,0x6C,0xF0, +0x28,0x10,0x2A,0xF0,0x36,0x10,0x62,0x60,0x00,0x00, +/* */ +0x09,0x40,0x0E,0x60,0x12,0x50,0x12,0x40,0x3F,0xF0,0x52,0x40,0x13,0x50,0x1E,0x60, +0x12,0x40,0x12,0xD0,0x13,0x30,0x16,0x10,0x00,0x00, +/* */ +0x09,0xF0,0x7E,0x40,0x52,0x80,0x3D,0xF0,0x65,0x10,0x19,0x50,0x25,0x50,0x43,0x50, +0x3D,0x50,0x24,0x40,0x3C,0xA0,0x25,0x10,0x00,0x00, +/* */ +0x22,0x80,0x12,0x80,0x04,0x90,0x04,0xA0,0x6C,0xC0,0x24,0x80,0x25,0x80,0x26,0x80, +0x24,0x80,0x34,0x90,0x24,0x90,0x04,0x70,0x00,0x00, +/* */ +0x10,0xC0,0x13,0x60,0x11,0x50,0x79,0x40,0x2F,0xF0,0x29,0x40,0x29,0xD0,0x4F,0x60, +0x29,0x40,0x11,0xD0,0x29,0x30,0x4B,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x05,0x00,0x25,0x20,0x15,0x40,0x05,0x00,0x7F,0xF0,0x00,0x00, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x20,0x00,0x20,0x00,0x27,0xE0,0x24,0x20,0x24,0x20,0x24,0x20, +0x24,0xC0,0x24,0x10,0x24,0x10,0x43,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x00,0x7D,0xE0,0x15,0x20,0x15,0x20,0x1D,0x20,0x75,0x60, +0x15,0x00,0x15,0x10,0x15,0x10,0x38,0xF0,0x00,0x00, +/* */ +0x27,0xE0,0x14,0x20,0x07,0xE0,0x04,0x20,0x77,0xE0,0x12,0x00,0x17,0xF0,0x18,0x90, +0x15,0x50,0x17,0xD0,0x28,0x20,0x47,0xF0,0x00,0x00, +/* */ +0x77,0x70,0x55,0x50,0x77,0x50,0x00,0x50,0x3E,0x60,0x00,0x60,0x7F,0x50,0x20,0x50, +0x3E,0x50,0x02,0x60,0x02,0x40,0x0C,0x40,0x00,0x00, +/* */ +0x21,0x40,0x26,0x60,0x3A,0x50,0x4A,0x40,0x17,0xF0,0x22,0x40,0x23,0x50,0x26,0x60, +0x22,0x40,0x2A,0xD0,0x33,0x30,0x26,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x22,0x20,0x2F,0xA0,0x22,0x20,0x25,0x20,0x28,0xA0,0x3F,0xE0,0x00,0x00, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x02,0x00,0x04,0x00,0x3F,0xE0,0x25,0x20,0x25,0x20,0x25,0x20, +0x25,0x20,0x25,0x20,0x25,0x20,0x20,0x60,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80, +0x10,0x80,0x10,0x90,0x20,0x90,0x40,0x70,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x10,0x40,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40, +0x11,0xF0,0x7E,0x40,0x00,0x40,0x00,0x40,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x1F,0xF0,0x20,0x10,0x42,0x20,0x02,0x00,0x12,0x40,0x12,0x20, +0x22,0x10,0x42,0x10,0x02,0x00,0x06,0x00,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x3A,0x20,0x4A,0x20,0x13,0xE0,0x22,0x20,0x23,0xE0,0x22,0x20, +0x2A,0x30,0x37,0xE0,0x20,0x20,0x00,0x20,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xE0,0x24,0x40,0x04,0x40,0x07,0xC0,0x44,0x40,0x27,0xC0,0x04,0x40, +0x14,0x70,0x2F,0xC0,0x40,0x40,0x00,0x40,0x00,0x00, +/* */ +0x00,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00, +/* */ +0x00,0xA0,0x7F,0xF0,0x00,0x80,0x3E,0x80,0x00,0x80,0x3E,0x80,0x00,0x80,0x3E,0x80, +0x22,0x40,0x2A,0x50,0x14,0x30,0x22,0x10,0x00,0x00, +/* */ +0x04,0x80,0x44,0x40,0x44,0x00,0x7F,0xF0,0x08,0x00,0x08,0x00,0x0F,0xC0,0x14,0x40, +0x12,0x80,0x21,0x00,0x46,0xC0,0x18,0x30,0x00,0x00, +/* */ +0x3F,0xF0,0x24,0x90,0x24,0x90,0x3F,0xF0,0x10,0x00,0x08,0x10,0x00,0x90,0x70,0x90, +0x10,0x90,0x12,0x90,0x14,0x10,0x18,0x70,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x00,0x00,0x09,0x20,0x11,0xF0,0x3F,0x00,0x51,0x20, +0x11,0x40,0x10,0x90,0x11,0x50,0x12,0x30,0x00,0x00, +/* */ +0x09,0x40,0x09,0x20,0x11,0x00,0x11,0xF0,0x37,0x00,0x51,0x20,0x11,0x20,0x11,0x40, +0x10,0x90,0x11,0x50,0x12,0x30,0x14,0x10,0x00,0x00, +/* */ +0x01,0xF0,0x7E,0x00,0x00,0x00,0x04,0x00,0x02,0x00,0x7F,0xE0,0x00,0x40,0x01,0x80, +0x06,0x00,0x08,0x00,0x30,0x00,0x4F,0xF0,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x0A,0x90,0x52,0x10,0x73,0xD0,0x5E,0x10,0x52,0x90,0x52,0x90, +0x51,0x50,0x52,0xD0,0x54,0x50,0x40,0x30,0x00,0x00, +/* */ +0x21,0x00,0x11,0x00,0x01,0x00,0x0F,0xE0,0x41,0x00,0x21,0x00,0x1F,0xF0,0x02,0x00, +0x12,0x40,0x24,0x20,0x4F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x10,0x80,0x13,0xE0,0x10,0x80,0x78,0x80,0x17,0xF0,0x10,0x80, +0x11,0x00,0x1A,0x20,0x67,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x4F,0x80,0x25,0x40,0x1F,0xF0,0x49,0x20,0x3F,0xF0, +0x09,0x20,0x2F,0xE0,0x49,0x20,0x0F,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x11,0xE0,0x7D,0x20,0x55,0x20,0x55,0x20,0x55,0xA0,0x55,0x60,0x55,0x20, +0x5D,0x20,0x11,0x20,0x12,0x30,0x14,0x10,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x12,0x40,0x0A,0x80,0x7F,0xF0,0x12,0x40,0x20,0x20,0x5F,0xD0, +0x12,0x40,0x1F,0xC0,0x12,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x0C,0x00,0x71,0xB0,0x54,0x90,0x10,0x90,0x7E,0xD0,0x35,0xB0,0x50,0x90,0x7D,0xB0, +0x56,0xD0,0x7C,0x90,0x54,0x90,0x7D,0xB0,0x00,0x00, +/* */ +0x15,0x40,0x12,0x40,0x7D,0xF0,0x15,0x40,0x3A,0xE0,0x55,0x50,0x10,0x40,0x02,0x00, +0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xC0,0x12,0x40,0x12,0x40,0x22,0x40,0x3B,0x40,0x6A,0xC0,0x2A,0x40, +0x2A,0x40,0x3A,0x50,0x24,0x50,0x08,0x30,0x00,0x00, +/* */ +0x20,0x00,0x23,0xC0,0x3A,0x40,0x42,0x40,0x7A,0x40,0x23,0x40,0x22,0xC0,0x7A,0x40, +0x22,0x40,0x2A,0x50,0x34,0x50,0x28,0x30,0x00,0x00, +/* */ +0x20,0x80,0x3E,0xF0,0x6B,0x20,0x3E,0xA0,0x2A,0x40,0x3E,0xA0,0x08,0x90,0x1F,0x00, +0x04,0x40,0x3F,0xE0,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x00,0x00,0x1F,0x80,0x10,0x80,0x10,0x80,0x14,0x80,0x12,0x80,0x12,0x80,0x10,0x80, +0x10,0x80,0x10,0x90,0x20,0x90,0x40,0x70,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x14,0x80,0x59,0x00,0x53,0xE0,0x52,0x20,0x52,0xA0,0x12,0xA0, +0x12,0xA0,0x29,0x40,0x2A,0x20,0x44,0x10,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x20,0x00,0x20,0x00,0x3F,0xE0,0x28,0x20,0x28,0x20,0x24,0x40, +0x22,0x80,0x21,0x00,0x26,0xC0,0x58,0x30,0x00,0x00, +/* */ +0x20,0x70,0x17,0x80,0x04,0x00,0x07,0xF0,0x74,0x10,0x15,0x10,0x14,0xA0,0x14,0x40, +0x14,0xA0,0x19,0x10,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x20,0x00,0x17,0xE0,0x04,0x20,0x44,0x20,0x24,0x20, +0x04,0xC0,0x14,0x10,0x24,0x10,0x43,0xF0,0x00,0x00, +/* */ +0x00,0x30,0x7D,0xC0,0x45,0x00,0x55,0x00,0x55,0xF0,0x55,0x50,0x55,0x50,0x55,0x50, +0x55,0x50,0x11,0x20,0x2A,0x50,0x44,0x90,0x00,0x00, +/* */ +0x08,0x00,0x2B,0xE0,0x12,0x20,0x2A,0x20,0x4A,0x20,0x0A,0x20,0x1A,0x20,0x2A,0x60, +0x4A,0x00,0x0A,0x10,0x0A,0x10,0x31,0xF0,0x00,0x00, +/* */ +0x20,0x30,0x23,0xC0,0x3A,0x00,0x4A,0x00,0x13,0xF0,0x22,0x90,0x22,0x90,0x22,0xA0, +0x2A,0xA0,0x32,0x40,0x24,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x00,0xE0,0x27,0x00,0x10,0x00,0x01,0x00,0x40,0x80,0x27,0xE0,0x00,0x40,0x00,0x80, +0x11,0x00,0x22,0x00,0x45,0x00,0x08,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x11,0x00,0x79,0x00,0x11,0xF0,0x11,0x10,0x11,0x10, +0x11,0x10,0x1A,0x10,0x62,0x10,0x04,0x60,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x12,0x40,0x01,0x00,0x7F,0xF0,0x08,0x00,0x08,0x00,0x0F,0xE0, +0x08,0x20,0x10,0x20,0x20,0x20,0x40,0xC0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x08,0x00,0x08,0x00,0x0F,0xE0,0x08,0x20,0x08,0x20, +0x10,0x20,0x10,0x20,0x20,0x20,0x41,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x3C,0x40,0x27,0xF0,0x24,0x80,0x3C,0x80,0x24,0xF0,0x24,0x90,0x3C,0x90, +0x24,0x90,0x25,0x10,0x25,0x10,0x4E,0x60,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x22,0x00,0x21,0x00,0x3F,0xF0,0x24,0x00, +0x27,0xE0,0x24,0x20,0x28,0x20,0x50,0xC0,0x00,0x00, +/* */ +0x01,0x00,0x78,0x80,0x4F,0xF0,0x49,0x00,0x51,0x00,0x51,0xF0,0x49,0x10,0x49,0x10, +0x49,0x10,0x72,0x10,0x42,0x10,0x44,0x60,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x13,0xF0,0x79,0x00,0x29,0x00,0x29,0xF0,0x29,0x10,0x49,0x10, +0x29,0x10,0x12,0x10,0x2A,0x10,0x44,0x60,0x00,0x00, +/* */ +0x09,0x00,0x08,0x80,0x17,0xF0,0x11,0x00,0x31,0x00,0x51,0xF0,0x11,0x10,0x11,0x10, +0x11,0x10,0x12,0x10,0x12,0x10,0x14,0x60,0x00,0x00, +/* */ +0x21,0x00,0x10,0x80,0x07,0xF0,0x01,0x00,0x71,0x00,0x11,0xF0,0x11,0x10,0x11,0x10, +0x15,0x10,0x1A,0x10,0x12,0x10,0x04,0x60,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x23,0xF0,0x49,0x00,0x71,0x00,0x11,0xF0,0x21,0x10,0x79,0x10, +0x01,0x10,0x1A,0x10,0x62,0x10,0x04,0x60,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x00,0x80,0x7C,0xF0,0x21,0x20,0x22,0xA0,0x3C,0xA0,0x24,0xA0, +0x24,0xA0,0x24,0x40,0x24,0xA0,0x4D,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x05,0x00,0x7D,0xF0,0x05,0x00,0x3D,0xE0,0x05,0x00, +0x05,0x00,0x7D,0xF0,0x05,0x00,0x05,0x00,0x00,0x00, +/* */ +0x05,0x00,0x05,0x00,0x7D,0xF0,0x05,0x00,0x05,0x00,0x3D,0xE0,0x05,0x00,0x05,0x00, +0x7D,0xF0,0x05,0x00,0x05,0x00,0x05,0x00,0x00,0x00, +/* */ +0x01,0x40,0x01,0x40,0x77,0x70,0x51,0x40,0x51,0x40,0x57,0x70,0x51,0x40,0x51,0x40, +0x77,0x70,0x51,0x40,0x01,0x40,0x01,0x40,0x00,0x00, +/* */ +0x00,0x00,0x7F,0x00,0x01,0x20,0x01,0x40,0x01,0x80,0x01,0x40,0x01,0x20,0x00,0x80, +0x00,0x90,0x00,0x50,0x00,0x30,0x00,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3B,0xF0,0x2A,0x90,0x2A,0x90,0x3A,0x90,0x2A,0x90,0x2B,0xF0,0x3A,0x00, +0x2A,0x00,0x2A,0x10,0x2A,0x10,0x59,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x22,0x40,0x22,0x40,0x2E,0x70,0x22,0x40,0x2E,0x70,0x22,0x40, +0x2E,0x70,0x22,0x40,0x22,0x40,0x3F,0xF0,0x00,0x00, +/* */ +0x21,0x40,0x11,0x40,0x07,0x70,0x01,0x40,0x71,0x40,0x17,0x70,0x11,0x40,0x11,0x40, +0x17,0x70,0x19,0x40,0x11,0x40,0x01,0x40,0x00,0x00, +/* */ +0x00,0x80,0x78,0xA0,0x48,0x90,0x48,0x80,0x4F,0xF0,0x48,0x80,0x49,0x40,0x49,0x40, +0x79,0x40,0x4A,0x20,0x02,0x20,0x04,0x10,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x2B,0xF0,0x28,0x80,0x38,0x80,0x2B,0xF0,0x2A,0x90,0x3A,0x90, +0x2A,0x90,0x2A,0xB0,0x28,0x80,0x58,0x80,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x21,0x40,0x29,0x20,0x2F,0xF0,0x22,0x00,0x23,0xE0, +0x25,0x20,0x25,0x20,0x28,0xC0,0x53,0x30,0x00,0x00, +/* */ +0x02,0x80,0x4F,0xE0,0x22,0xA0,0x02,0xA0,0x0F,0xE0,0x4A,0x80,0x2A,0x80,0x0F,0xF0, +0x02,0x90,0x22,0x90,0x44,0xE0,0x08,0x80,0x00,0x00, +/* */ +0x05,0x00,0x7F,0xE0,0x05,0x20,0x3F,0xE0,0x25,0x00,0x3F,0xF0,0x09,0x10,0x3F,0xF0, +0x22,0x20,0x22,0x20,0x0D,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x1F,0xC0, +0x08,0x40,0x08,0x40,0x10,0x40,0x21,0x80,0x00,0x00, +/* */ +0x00,0xA0,0x7C,0xA0,0x11,0x10,0x7D,0x10,0x56,0x00,0x55,0xE0,0x6C,0xA0,0x44,0xA0, +0x7C,0xA0,0x45,0x20,0x7D,0x20,0x46,0x60,0x00,0x00, +/* */ +0x01,0x40,0x79,0x40,0x4A,0x20,0x4A,0x20,0x4C,0x10,0x4B,0xE0,0x49,0x20,0x49,0x20, +0x79,0x20,0x4A,0x20,0x02,0x20,0x04,0xC0,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x20,0x00,0x5F,0xE0,0x00,0x00,0x3F,0xC0,0x12,0x40,0x21,0x40, +0x5E,0xC0,0x0A,0x50,0x12,0x30,0x26,0x10,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x10,0x40,0x10,0x40,0x20,0x20,0x5F,0xD0,0x04,0x40,0x04,0x40, +0x08,0x40,0x08,0x40,0x10,0x40,0x23,0x80,0x00,0x00, +/* */ +0x11,0x40,0x11,0x40,0x22,0x20,0x4A,0x20,0x74,0x10,0x13,0xE0,0x21,0x20,0x79,0x20, +0x01,0x20,0x1A,0x20,0x62,0x20,0x04,0xC0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x12,0x20,0x7A,0x20,0x12,0x20,0x11,0x40,0x11,0x40, +0x10,0x80,0x19,0x40,0x62,0x20,0x04,0x10,0x00,0x00, +/* */ +0x10,0x40,0x7D,0xF0,0x10,0x40,0x38,0xE0,0x55,0x50,0x10,0x40,0x02,0x00,0x12,0x20, +0x22,0x40,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x22,0x40,0x12,0x40,0x04,0x20,0x04,0x20,0x48,0x10,0x37,0xE0,0x01,0x20,0x01,0x20, +0x12,0x20,0x22,0x20,0x44,0x20,0x08,0xC0,0x00,0x00, +/* */ +0x11,0x40,0x11,0x40,0x5A,0x20,0x32,0x20,0x14,0x10,0x7B,0xE0,0x11,0x20,0x31,0x20, +0x59,0x20,0x12,0x20,0x12,0x20,0x14,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x3F,0xE0,0x22,0x20, +0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x12,0x40,0x12,0x40,0x24,0x20,0x24,0x20,0x68,0x10,0x27,0xE0,0x22,0x20,0x22,0x20, +0x22,0x20,0x24,0x20,0x24,0x20,0x28,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x10,0x40,0x20,0x20,0x5F,0xD0,0x04,0x40,0x08,0x40,0x10,0x40,0x21,0x80, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x18,0x80,0x52,0x20,0x57,0xF0,0x52,0x20,0x57,0xF0,0x14,0x10, +0x14,0x90,0x14,0x90,0x11,0x60,0x16,0x10,0x00,0x00, +/* */ +0x12,0x40,0x0A,0x80,0x7F,0xF0,0x12,0x40,0x22,0x20,0x08,0x80,0x3F,0xE0,0x08,0x80, +0x08,0x80,0x7F,0xF0,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x08,0x20,0x08,0x20,0x3E,0x20,0x09,0xF0,0x08,0x20,0x7E,0x20,0x01,0x20,0x08,0xA0, +0x3E,0xA0,0x08,0x20,0x0E,0x20,0x70,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x7E,0x20,0x13,0x60,0x32,0xA0,0x3A,0xA0,0x57,0x60, +0x12,0x20,0x12,0x20,0x12,0x30,0x14,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0xF0,0x11,0x90,0x7C,0x60,0x55,0x90,0x54,0x40,0x7D,0xF0,0x10,0x40, +0x15,0xF0,0x1C,0x40,0x65,0xF0,0x00,0x40,0x00,0x00, +/* */ +0x10,0x80,0x10,0xF0,0x11,0x90,0x54,0x60,0x55,0x90,0x54,0x40,0x55,0xF0,0x54,0x40, +0x55,0xF0,0x5C,0x40,0x65,0xF0,0x00,0x40,0x00,0x00, +/* */ +0x21,0x00,0x21,0xE0,0x3B,0x20,0x40,0xC0,0x7B,0x30,0x20,0x80,0x23,0xE0,0x78,0x80, +0x23,0xE0,0x28,0x80,0x37,0xF0,0x20,0x80,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xC0,0x20,0x40,0x21,0x40,0x31,0x40,0x2A,0x40,0x24,0x40,0x24,0x40, +0x2A,0x50,0x31,0x50,0x20,0x30,0x40,0x10,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x37,0xE0,0x14,0x20,0x16,0xA0,0x35,0x20, +0x55,0x20,0x15,0x20,0x2A,0xB0,0x50,0x10,0x00,0x00, +/* */ +0x11,0x00,0x13,0xE0,0x16,0x20,0x59,0xC0,0x56,0x30,0x50,0x80,0x53,0xE0,0x10,0x80, +0x13,0xE0,0x28,0x80,0x2F,0xF0,0x40,0x80,0x00,0x00, +/* */ +0x42,0x00,0x27,0xC0,0x0C,0x40,0x03,0x80,0x6D,0x70,0x27,0xC0,0x21,0x00,0x27,0xC0, +0x21,0x00,0x2F,0xE0,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x0F,0xE0,0x40,0x20,0x24,0x20,0x04,0x20,0x04,0x20,0x07,0xF0,0x00,0x10,0x10,0x10, +0x2F,0xD0,0x40,0x10,0x00,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x28,0x80,0x24,0xF0,0x41,0x10,0x50,0xE0,0x63,0x50,0x2C,0xE0,0x44,0x40,0x75,0xF0, +0x04,0x40,0x15,0xF0,0x64,0x40,0x0B,0xF0,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xE0,0x08,0x20,0x0C,0x60,0x6A,0xA0,0x29,0x20,0x29,0x20,0x2A,0xA0, +0x2C,0x60,0x38,0x20,0x28,0x30,0x10,0x10,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x04,0x00,0x1F,0xC0,0x08,0x00,0x7F,0xF0,0x12,0x40,0x2F,0xA0, +0x42,0x10,0x3F,0xE0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xC0,0x20,0x40,0x20,0x40,0x2F,0x40,0x21,0x40,0x29,0x40,0x25,0x40, +0x22,0x50,0x25,0x50,0x28,0xB0,0x40,0x10,0x00,0x00, +/* */ +0x12,0x80,0x1F,0xE0,0x22,0xA0,0x22,0xA0,0x6F,0xE0,0x2A,0x80,0x2A,0x80,0x2F,0xF0, +0x22,0x90,0x22,0x90,0x24,0xE0,0x28,0x80,0x00,0x00, +/* */ +0x7F,0xF0,0x02,0x00,0x06,0xC0,0x1A,0x20,0x62,0x10,0x02,0x00,0x00,0x00,0x3F,0xE0, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x0A,0x80,0x7F,0x80,0x08,0x80,0x3E,0xF0,0x2B,0x20,0x3E,0xA0,0x2A,0xA0,0x7F,0xA0, +0x10,0xA0,0x1E,0x40,0x22,0xA0,0x4D,0x10,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x28,0x80,0x2B,0xE0,0x38,0x80,0x28,0x80,0x2F,0xF0,0x38,0x80, +0x29,0x40,0x29,0x40,0x2A,0x20,0x5C,0x10,0x00,0x00, +/* */ +0x10,0x10,0x67,0x60,0x55,0x00,0x55,0x50,0x77,0x20,0x55,0x70,0x55,0x10,0x77,0x20, +0x54,0xF0,0x14,0x20,0x24,0x20,0x44,0x60,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0x80,0x7B,0xE0,0x10,0x80,0x10,0x80,0x1B,0xF0,0x70,0x80, +0x11,0x40,0x11,0x40,0x12,0x20,0x34,0x10,0x00,0x00, +/* */ +0x22,0x80,0x2F,0xE0,0x22,0xA0,0x72,0xA0,0x2F,0xE0,0x2A,0x80,0x3A,0x80,0x6F,0xF0, +0x22,0x90,0x22,0x90,0x24,0xE0,0x68,0x80,0x00,0x00, +/* */ +0x17,0xF0,0x10,0x00,0x7B,0xE0,0x22,0x20,0x53,0xE0,0x78,0x00,0x17,0xF0,0x1C,0x90, +0x77,0xF0,0x14,0x90,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x11,0xF0,0x10,0x00,0x7D,0xF0,0x55,0x10,0x55,0xF0,0x54,0x00,0x55,0xF0,0x55,0x50, +0x5D,0xF0,0x11,0x50,0x11,0xF0,0x11,0x10,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x20,0x00,0x5F,0xC0,0x14,0x40,0x7F,0x40,0x15,0x40,0x7F,0x40, +0x54,0x40,0x7F,0xD0,0x14,0xB0,0x65,0x90,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x00,0x00,0x08,0x40,0x10,0x40,0x37,0xF0,0x50,0x40, +0x14,0x40,0x12,0x40,0x10,0x40,0x11,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x08,0xA0,0x10,0x90,0x10,0x80,0x37,0xF0,0x50,0x80,0x11,0x40,0x11,0x40, +0x11,0x40,0x12,0x20,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x08,0x70,0x0F,0x80,0x11,0x10,0x14,0xA0,0x32,0x00,0x57,0xE0,0x10,0x40,0x10,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x00,0x00,0x3D,0xF0,0x25,0x10,0x25,0x10,0x3D,0x60,0x25,0x00,0x25,0xF0,0x3D,0x50, +0x25,0x50,0x25,0x20,0x25,0x50,0x4D,0x90,0x00,0x00, +/* */ +0x20,0x70,0x17,0x80,0x01,0x10,0x04,0xA0,0x42,0x00,0x27,0xE0,0x00,0x40,0x00,0x80, +0x17,0xF0,0x20,0x80,0x40,0x80,0x01,0x80,0x00,0x00, +/* */ +0x20,0x80,0x17,0xE0,0x00,0x00,0x04,0x20,0x42,0x40,0x2F,0xF0,0x00,0x00,0x07,0xE0, +0x14,0x20,0x24,0x20,0x47,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x27,0xF0,0x10,0x00,0x7B,0xE0,0x0A,0x20,0x13,0xE0,0x18,0x00,0x37,0xF0,0x54,0x90, +0x17,0xF0,0x14,0x90,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x21,0x40,0x11,0x60,0x7A,0x50,0x0A,0x40,0x16,0xF0,0x1A,0x40,0x32,0x40,0x5A,0x40, +0x12,0xA0,0x12,0xA0,0x12,0xA0,0x13,0x10,0x00,0x00, +/* */ +0x09,0x00,0x7F,0xE0,0x09,0x20,0x09,0x20,0x7F,0xE0,0x49,0x00,0x49,0x00,0x7F,0xF0, +0x09,0x10,0x11,0x10,0x11,0x60,0x21,0x00,0x00,0x00, +/* */ +0x02,0x40,0x02,0x20,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x3F,0xE0,0x22,0x20,0x22,0x20,0x20,0x60,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x80,0x78,0x80,0x10,0x80,0x17,0xF0,0x19,0x40,0x71,0x40, +0x11,0x40,0x12,0x50,0x12,0x50,0x34,0x30,0x00,0x00, +/* */ +0x20,0xA0,0x20,0x90,0x77,0xF0,0x20,0x80,0x57,0xF0,0x54,0x90,0x7F,0xF0,0x14,0x90, +0x1F,0xF0,0x74,0x90,0x14,0x90,0x14,0x30,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x2F,0xF0,0x28,0x00,0x69,0x20,0x2A,0x20,0x2E,0xF0,0x2A,0x20, +0x2A,0xA0,0x2A,0x60,0x2A,0x20,0x32,0x60,0x00,0x00, +/* */ +0x08,0x80,0x10,0x40,0x28,0xA0,0x07,0x00,0x18,0xC0,0x60,0x30,0x1F,0xC0,0x02,0x00, +0x3F,0xE0,0x12,0x40,0x0A,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x10,0x40,0x28,0xA0,0x07,0x00,0x18,0xC0,0x61,0xB0,0x1E,0x00,0x10,0x00, +0x1F,0xE0,0x11,0x00,0x21,0x00,0x41,0x00,0x00,0x00, +/* */ +0x00,0xA0,0x38,0x90,0x2F,0xF0,0x28,0x80,0x3B,0xF0,0x2A,0x90,0x2B,0xF0,0x3A,0x90, +0x2B,0xF0,0x2A,0x90,0x2A,0x90,0x5A,0x30,0x00,0x00, +/* */ +0x00,0x80,0x70,0x40,0x57,0xF0,0x54,0x00,0x74,0xA0,0x55,0x20,0x57,0xF0,0x75,0x20, +0x55,0xA0,0x55,0x60,0x55,0x20,0x39,0x60,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x22,0x20,0x24,0x20,0x2D,0xF0,0x34,0x20,0x25,0x20, +0x24,0xA0,0x24,0x20,0x24,0x20,0x44,0xE0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x20,0x2D,0xF0,0x34,0xA0,0x24,0x60,0x21,0x00,0x2F,0xF0, +0x29,0x10,0x2A,0x90,0x29,0x10,0x4A,0xB0,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x3C,0x80,0x08,0xC0,0x08,0xA0,0x7E,0x90,0x08,0x90,0x28,0x80, +0x2E,0x80,0x28,0x80,0x38,0x00,0x4F,0xF0,0x00,0x00, +/* */ +0x7F,0x10,0x00,0x10,0x3E,0x50,0x22,0x50,0x3E,0x50,0x00,0x50,0x7F,0x50,0x49,0x50, +0x7F,0x50,0x49,0x10,0x7F,0x10,0x41,0x30,0x00,0x00, +/* */ +0x7F,0xF0,0x04,0x80,0x3F,0xF0,0x24,0x90,0x3F,0xF0,0x12,0x20,0x2B,0xE0,0x52,0x20, +0x33,0xE0,0x56,0x20,0x11,0xC0,0x16,0x30,0x00,0x00, +/* */ +0x00,0x40,0x73,0x60,0x50,0x50,0x50,0x40,0x57,0xF0,0x51,0x40,0x51,0x40,0x55,0xC0, +0x05,0x40,0x25,0x50,0x25,0xB0,0x5E,0x10,0x00,0x00, +/* */ +0x1F,0xF0,0x20,0x00,0x5F,0xE0,0x10,0x20,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x08,0x00, +0x1F,0xE0,0x28,0x40,0x07,0x80,0x38,0x70,0x00,0x00, +/* */ +0x11,0x40,0x1F,0xF0,0x21,0x00,0x2F,0xE0,0x69,0x20,0x2F,0xE0,0x29,0x20,0x29,0x20, +0x20,0x40,0x2F,0xF0,0x24,0x40,0x22,0xC0,0x00,0x00, +/* */ +0x08,0x20,0x08,0x20,0x10,0x20,0x17,0xF0,0x30,0x20,0x50,0x20,0x12,0x20,0x11,0x20, +0x11,0x20,0x10,0x20,0x10,0x20,0x10,0xE0,0x00,0x00, +/* */ +0x04,0x00,0x3F,0xC0,0x20,0x40,0x3F,0xC0,0x20,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x10,0x40,0x10,0x20,0x20,0x10,0x50,0x50,0x08,0x80,0x08,0x80,0x05,0x00,0x02,0x00, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x3B,0xF0,0x2C,0x00,0x2B,0xE0,0x3A,0x20,0x2B,0xE0,0x2A,0x20,0x3B,0xE0,0x29,0x00, +0x2B,0xE0,0x2D,0x20,0x28,0xC0,0x5B,0x30,0x00,0x00, +/* */ +0x10,0x00,0x1F,0x80,0x20,0x80,0x41,0x00,0x3F,0xE0,0x20,0x20,0x22,0x20,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x3F,0xE0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x00,0x80,0x00,0x80,0x70,0xC0,0x10,0xA0,0x10,0x90,0x10,0x90, +0x14,0x80,0x18,0x80,0x10,0x80,0x00,0x80,0x00,0x00, +/* */ +0x01,0x20,0x79,0x20,0x4A,0x20,0x4A,0xF0,0x56,0x20,0x52,0x20,0x4A,0xA0,0x4A,0x60, +0x4A,0x20,0x72,0x20,0x42,0x20,0x42,0x60,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x10,0x10,0x7C,0x10,0x24,0x10,0x25,0xF0,0x24,0x10,0x48,0x10, +0x28,0x10,0x10,0x10,0x2B,0xF0,0x44,0x10,0x00,0x00, +/* */ +0x20,0xA0,0x27,0xF0,0x40,0x80,0x57,0xF0,0x64,0x90,0x27,0xF0,0x44,0x90,0x74,0x90, +0x00,0x20,0x17,0xF0,0x62,0x20,0x01,0x60,0x00,0x00, +/* */ +0x02,0x20,0x72,0x20,0x54,0x20,0x55,0xF0,0x5C,0x20,0x55,0x20,0x54,0xA0,0x54,0xA0, +0x74,0x20,0x54,0x20,0x04,0x20,0x04,0x60,0x00,0x00, +/* */ +0x02,0x40,0x0F,0xF0,0x72,0x40,0x57,0xE0,0x54,0x20,0x57,0xE0,0x54,0x20,0x57,0xF0, +0x78,0x90,0x55,0x50,0x07,0xD0,0x00,0x30,0x00,0x00, +/* */ +0x0F,0xF0,0x01,0x00,0x77,0xE0,0x54,0x20,0x57,0xE0,0x54,0x20,0x57,0xE0,0x52,0x40, +0x71,0xF0,0x5F,0x20,0x00,0xD0,0x07,0x30,0x00,0x00, +/* */ +0x21,0x00,0x10,0x80,0x07,0xF0,0x01,0x00,0x72,0x20,0x17,0xC0,0x10,0x90,0x11,0x20, +0x16,0x40,0x18,0xC0,0x11,0x20,0x06,0x10,0x00,0x00, +/* */ +0x01,0x00,0x79,0x00,0x09,0x00,0x09,0xF0,0x0A,0x20,0x7D,0x20,0x41,0x20,0x41,0x40, +0x48,0x80,0x51,0x40,0x62,0x20,0x44,0x10,0x00,0x00, +/* */ +0x20,0x00,0x2E,0xF0,0x2A,0x20,0x7A,0xA0,0x2E,0xA0,0x2A,0xF0,0x7A,0x20,0x6E,0x40, +0x28,0x60,0x2C,0xA0,0x2A,0xA0,0x2D,0x30,0x00,0x00, +/* */ +0x20,0x00,0x23,0xF0,0x38,0x40,0x40,0x40,0x7A,0x70,0x22,0x40,0x22,0x40,0x7B,0xF0, +0x20,0x10,0x28,0x10,0x30,0x10,0x20,0x60,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x4E,0xF0,0x2A,0x20,0x0A,0xA0,0x0E,0xA0,0x4A,0xF0,0x2A,0x20,0x0E,0x40, +0x08,0x60,0x2C,0xA0,0x4A,0xA0,0x0D,0x30,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x7F,0xF0,0x10,0x40,0x10,0x40,0x10,0x40,0x1F,0xC0,0x10,0x40, +0x10,0x40,0x10,0x40,0x1F,0xC0,0x10,0x40,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x80,0x78,0x80,0x10,0x80,0x38,0x80,0x37,0xF0,0x50,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x12,0x20,0x12,0x20,0x17,0xF0,0x7A,0x20,0x12,0x20,0x3A,0x20,0x37,0xE0,0x52,0x20, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x10,0x80,0x1E,0xF0,0x29,0x40,0x44,0x20,0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x00,0x00,0x3B,0xE0,0x28,0x80,0x28,0x80,0x38,0x80,0x28,0x80,0x2F,0xF0,0x38,0x80, +0x28,0x80,0x28,0x80,0x28,0x80,0x58,0x80,0x00,0x00, +/* */ +0x08,0x00,0x09,0xF0,0x3C,0x40,0x08,0x40,0x08,0x40,0x7E,0x40,0x09,0xF0,0x28,0x40, +0x2E,0x40,0x28,0x40,0x38,0x40,0x4F,0xF0,0x00,0x00, +/* */ +0x00,0xA0,0x3F,0xF0,0x20,0x80,0x2E,0xA0,0x20,0xA0,0x2E,0x40,0x2A,0x50,0x2E,0xB0, +0x41,0x10,0x2A,0x20,0x29,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x08,0x00,0x73,0xE0,0x10,0x80,0x10,0x80,0x7C,0x80,0x10,0x80,0x3B,0xF0,0x34,0x80, +0x50,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x08,0x80,0x7E,0xF0,0x25,0x20,0x3E,0xA0,0x24,0xA0,0x3C,0xA0, +0x26,0xA0,0x7C,0x40,0x04,0xA0,0x05,0x10,0x00,0x00, +/* */ +0x11,0x00,0x7D,0xE0,0x2B,0x20,0x7C,0xC0,0x2B,0x30,0x39,0xE0,0x28,0x80,0x3B,0xF0, +0x12,0x20,0x7E,0xA0,0x11,0x40,0x12,0x20,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x20,0x50,0x2C,0x50,0x22,0x90,0x21,0x10,0x22,0x90,0x24,0x50, +0x28,0x10,0x20,0x10,0x20,0x10,0x20,0x70,0x00,0x00, +/* */ +0x00,0x10,0x7F,0x10,0x41,0x50,0x41,0x50,0x63,0x50,0x55,0x50,0x49,0x50,0x55,0x50, +0x63,0x50,0x41,0x10,0x41,0x10,0x43,0x30,0x00,0x00, +/* */ +0x20,0x00,0x37,0xF0,0x44,0x10,0x04,0x10,0x76,0x30,0x25,0x50,0x24,0x90,0x75,0x50, +0x26,0x30,0x24,0x10,0x34,0x10,0x24,0x30,0x00,0x00, +/* */ +0x20,0x00,0x21,0xF0,0x3C,0x40,0x50,0x40,0x10,0x40,0x10,0x40,0x7C,0x40,0x10,0x40, +0x54,0x40,0x54,0x40,0x5C,0x40,0x65,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3D,0xF0,0x24,0x40,0x24,0x40,0x3C,0x40,0x24,0x40,0x24,0x40,0x3C,0x40, +0x24,0x40,0x24,0x40,0x24,0x40,0x4D,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x44,0x10,0x54,0x10,0x66,0x30,0x25,0x50,0x44,0x90,0x75,0x50, +0x06,0x30,0x14,0x10,0x64,0x10,0x04,0x30,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x28,0xA0,0x25,0x20,0x22,0x20, +0x25,0x20,0x28,0xA0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x04,0x40,0x44,0x40,0x2F,0xE0,0x04,0x40,0x1F,0xF0,0x44,0x40,0x28,0x20,0x17,0xD0, +0x04,0x40,0x17,0xC0,0x24,0x20,0x43,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x80,0x7C,0x80,0x10,0x80,0x30,0x80,0x38,0x80,0x54,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x7F,0xF0, +0x40,0x10,0x4F,0x90,0x48,0x90,0x4F,0xB0,0x00,0x00, +/* */ +0x04,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x04,0x00,0x7F,0xF0, +0x10,0x40,0x22,0x20,0x5F,0xD0,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x7F,0xF0, +0x40,0x10,0x4F,0x90,0x48,0x90,0x4F,0xB0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x7F,0xF0,0x50,0x50,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x10,0xC0,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x3F,0xE0,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00, +0x7F,0xF0,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x57,0xF0,0x38,0x80,0x10,0x80,0x7B,0xE0,0x10,0x80,0x38,0x80, +0x57,0xF0,0x10,0x00,0x15,0x50,0x15,0x50,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x00,0x7B,0xE0,0x12,0x20,0x13,0xE0,0x18,0x00,0x77,0xF0, +0x14,0x10,0x15,0xD0,0x15,0x50,0x35,0xD0,0x00,0x00, +/* */ +0x20,0x80,0x37,0xF0,0x40,0x00,0x03,0xE0,0x72,0x20,0x23,0xE0,0x20,0x00,0x77,0xF0, +0x24,0x10,0x25,0xD0,0x35,0x50,0x25,0xD0,0x00,0x00, +/* */ +0x08,0x80,0x77,0xF0,0x10,0x00,0x13,0xE0,0x7A,0x20,0x13,0xE0,0x38,0x00,0x37,0xF0, +0x54,0x10,0x15,0xD0,0x15,0x50,0x15,0xD0,0x00,0x00, +/* */ +0x02,0x00,0x12,0x00,0x1F,0xE0,0x22,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x7F,0xF0,0x00,0x20,0x3F,0x20,0x21,0x20,0x3F,0x20,0x00,0x00,0x7F,0xF0,0x00,0x20, +0x3F,0x20,0x21,0x20,0x3F,0x20,0x00,0x60,0x00,0x00, +/* */ +0x7E,0x80,0x04,0x80,0x74,0xF0,0x54,0x90,0x75,0x20,0x00,0x00,0x7E,0x40,0x04,0x40, +0x74,0x40,0x54,0xA0,0x74,0xA0,0x0D,0x10,0x00,0x00, +/* */ +0x14,0x00,0x12,0xF0,0x15,0x10,0x7D,0xD0,0x15,0x50,0x16,0x90,0x1D,0x50,0x76,0x30, +0x15,0xD0,0x15,0x50,0x15,0xD0,0x34,0x30,0x00,0x00, +/* */ +0x04,0x80,0x04,0x40,0x04,0x00,0x05,0xF0,0x7E,0x00,0x04,0x20,0x02,0x40,0x02,0x80, +0x01,0x10,0x02,0x90,0x0C,0x50,0x30,0x30,0x00,0x00, +/* */ +0x08,0x80,0x09,0xE0,0x15,0x20,0x23,0xA0,0x41,0x20,0x3D,0x60,0x01,0x00,0x3D,0xF0, +0x24,0x10,0x25,0xD0,0x3C,0x10,0x24,0x60,0x00,0x00, +/* */ +0x01,0x00,0x39,0xE0,0x2A,0x20,0x2D,0x40,0x38,0x80,0x29,0x40,0x2E,0x30,0x3B,0xE0, +0x2A,0x20,0x2A,0x20,0x2B,0xE0,0x5A,0x20,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x52,0x00,0x33,0xE0,0x14,0x00,0x1B,0xE0,0x30,0x40, +0x51,0x80,0x12,0x00,0x24,0x10,0x43,0xF0,0x00,0x00, +/* */ +0x08,0x10,0x7F,0x10,0x49,0x50,0x3E,0x50,0x08,0x50,0x3E,0x50,0x08,0x50,0x7F,0x50, +0x08,0x50,0x3E,0x10,0x22,0x10,0x3E,0x30,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x10,0x20,0x3F,0xF0, +0x22,0x10,0x55,0x10,0x1F,0xD0,0x00,0x30,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x12,0x20,0x7D,0x40,0x10,0x80,0x39,0x40,0x36,0x30,0x53,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0x40,0x7D,0x20,0x56,0x10,0x55,0xE0,0x7C,0x00,0x11,0xE0, +0x15,0x20,0x1D,0x20,0x65,0xE0,0x01,0x20,0x00,0x00, +/* */ +0x4F,0xF0,0x24,0x10,0x07,0x90,0x48,0x90,0x55,0x10,0x42,0x10,0x4D,0x90,0x70,0x70, +0x4F,0x90,0x48,0x90,0x4F,0x90,0x48,0xB0,0x00,0x00, +/* */ +0x77,0xF0,0x50,0x00,0x53,0xE0,0x52,0x20,0x63,0xE0,0x60,0x00,0x57,0xF0,0x55,0x50, +0x54,0x90,0x65,0xD0,0x44,0x90,0x44,0xB0,0x00,0x00, +/* */ +0x21,0x00,0x21,0xE0,0x3A,0x20,0x45,0x40,0x70,0x80,0x21,0x40,0x26,0x30,0x7B,0xE0, +0x22,0x20,0x2A,0x20,0x33,0xE0,0x22,0x20,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x05,0x00,0x08,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xC0,0x30,0x40,0x48,0x80,0x07,0x00,0x18,0xC0,0x60,0x30,0x1F,0xC0, +0x10,0x40,0x10,0x40,0x1F,0xC0,0x10,0x40,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x21,0x40,0x4A,0x20,0x74,0x10,0x13,0xE0,0x20,0x00,0x7B,0xE0, +0x02,0x20,0x1A,0x20,0x63,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x12,0x20,0x7B,0xE0,0x12,0x20,0x32,0x20,0x3B,0xE0,0x52,0x90, +0x12,0xA0,0x12,0x40,0x13,0x20,0x12,0x10,0x00,0x00, +/* */ +0x7B,0xE0,0x4A,0x20,0x4A,0x20,0x7B,0xE0,0x12,0x20,0x12,0x20,0x5B,0xE0,0x52,0x90, +0x52,0xA0,0x5A,0x40,0x63,0x20,0x02,0x10,0x00,0x00, +/* */ +0x11,0x20,0x11,0x20,0x7D,0x20,0x13,0xF0,0x39,0x20,0x11,0x20,0x7D,0x20,0x13,0xF0, +0x39,0x20,0x55,0x20,0x12,0x20,0x14,0x20,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x22,0x00,0x12,0x00,0x0C,0x00,0x73,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x21,0x00,0x2F,0xE0,0x21,0x20,0x3F,0xF0,0x21,0x20, +0x2F,0xE0,0x22,0x80,0x24,0x40,0x58,0x30,0x00,0x00, +/* */ +0x08,0x80,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x25,0x20,0x40,0x10,0x08,0x80,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x08,0x80,0x70,0x70,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x20,0x80,0x27,0xF0,0x74,0x90,0x27,0xF0,0x24,0x90,0x27,0xF0, +0x22,0x80,0x31,0x00,0x62,0x80,0x04,0x70,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x2A,0x90,0x2A,0x90,0x3A,0xA0,0x2C,0x80,0x38,0x80,0x29,0x40, +0x2D,0x40,0x7A,0x20,0x0A,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x10,0x80,0x7F,0xF0,0x14,0x90,0x37,0xF0,0x3C,0x90,0x57,0xF0, +0x12,0x80,0x11,0x00,0x12,0x80,0x14,0x70,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x01,0x00,0x7D,0x00,0x11,0xF0,0x12,0x20,0x15,0x20,0x11,0x20,0x11,0x40, +0x1C,0x80,0x61,0x40,0x02,0x20,0x04,0x10,0x00,0x00, +/* */ +0x01,0x00,0x01,0x00,0x7D,0x00,0x13,0xF0,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10, +0x1E,0x10,0x62,0x10,0x04,0x10,0x08,0x60,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x08,0x80,0x14,0x40,0x24,0x20, +0x46,0x90,0x15,0x40,0x25,0x40,0x0C,0x00,0x00,0x00, +/* */ +0x04,0x80,0x04,0x40,0x7F,0xF0,0x09,0x40,0x11,0x90,0x66,0xF0,0x08,0x80,0x3F,0xE0, +0x08,0x80,0x7F,0xF0,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x14,0x40,0x14,0x40,0x24,0x40,0x2F,0xE0,0x64,0x40,0x24,0x40,0x24,0x40,0x3F,0xF0, +0x20,0x00,0x24,0x40,0x28,0x20,0x30,0x10,0x00,0x00, +/* */ +0x10,0x00,0x3D,0xF0,0x24,0x10,0x3C,0x10,0x25,0xF0,0x3D,0x00,0x25,0x00,0x7D,0xF0, +0x14,0x10,0x24,0x10,0x44,0x10,0x0C,0x60,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x08,0x80,0x10,0x40,0x12,0x40,0x22,0x20,0x44,0x10,0x04,0x00, +0x08,0x80,0x10,0x40,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40,0x10,0x40,0x1F,0xC0,0x00,0x00, +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x00,0x20,0x00,0x20,0x3F,0xE0,0x20,0x00,0x20,0x00,0x3F,0xF0, +0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x00,0x00,0x03,0xC0,0x7A,0x40,0x12,0x40,0x12,0x40,0x13,0x40,0x12,0xC0,0x12,0x40, +0x1A,0x40,0x62,0x50,0x04,0x50,0x08,0x30,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00,0x02,0x00,0x02,0x20,0x7B,0x40, +0x0A,0x80,0x12,0x40,0x62,0x30,0x06,0x00,0x00,0x00, +/* */ +0x22,0x40,0x22,0x40,0x22,0x40,0x77,0xE0,0x22,0x40,0x22,0x40,0x32,0x40,0x6F,0xF0, +0x20,0x00,0x22,0x40,0x24,0x20,0x68,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x08,0x80,0x3F,0xE0,0x08,0x80,0x08,0x80,0x08,0x80,0x7F,0xF0, +0x00,0x00,0x08,0x80,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x21,0x00,0x21,0x00,0x3B,0xF0,0x42,0x10,0x74,0x90,0x20,0x90,0x21,0x10,0x7A,0x50, +0x23,0xD0,0x28,0x50,0x30,0x10,0x20,0x60,0x00,0x00, +/* */ +0x08,0x00,0x08,0x00,0x1F,0xF0,0x10,0x10,0x24,0x10,0x44,0x10,0x09,0x10,0x10,0x90, +0x3F,0x90,0x00,0x90,0x00,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x22,0x00,0x12,0x00,0x03,0xF0,0x04,0x10,0x49,0x10,0x21,0x10,0x02,0x10,0x04,0x90, +0x17,0xD0,0x20,0x50,0x40,0x10,0x00,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x00,0x1F,0xF0,0x20,0x10,0x5F,0x90,0x10,0x90, +0x10,0x90,0x1F,0x90,0x10,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x09,0x00,0x29,0x00,0x11,0xF0,0x2A,0x10,0x4C,0x10,0x0B,0xD0,0x1A,0x50,0x2A,0x50, +0x4B,0xD0,0x0A,0x10,0x08,0x10,0x30,0x60,0x00,0x00, +/* */ +0x10,0x70,0x13,0x80,0x12,0x00,0x7A,0x00,0x13,0xF0,0x12,0x00,0x12,0x00,0x13,0xF0, +0x1B,0x10,0x65,0x10,0x05,0xF0,0x09,0x10,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x13,0xF0,0x7A,0x10,0x14,0x90,0x30,0x90,0x39,0x10,0x52,0x50, +0x13,0xD0,0x10,0x50,0x10,0x10,0x10,0x60,0x00,0x00, +/* */ +0x01,0x00,0x7D,0x00,0x45,0xF0,0x56,0x10,0x54,0x90,0x54,0x90,0x55,0x10,0x55,0x50, +0x55,0xD0,0x10,0x50,0x28,0x10,0x44,0x60,0x00,0x00, +/* */ +0x20,0x80,0x20,0xF0,0x3D,0x10,0x44,0xA0,0x04,0x40,0x75,0x80,0x54,0x70,0x54,0x90, +0x75,0x50,0x44,0x20,0x04,0x40,0x19,0x80,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x02,0x00,0x3F,0xE0, +0x08,0x80,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x40,0x10,0x40,0x7D,0xF0,0x24,0x40,0x45,0xF0, +0x29,0x10,0x11,0x10,0x29,0xF0,0x45,0x10,0x00,0x00, +/* */ +0x00,0x80,0x00,0x80,0x78,0x80,0x4F,0xF0,0x48,0x80,0x48,0x80,0x4B,0xE0,0x4A,0x20, +0x7A,0x20,0x4A,0x20,0x03,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x10,0x00,0x17,0xF0,0x7C,0x40,0x15,0xF0,0x1D,0x50, +0x75,0x50,0x15,0x70,0x14,0x40,0x37,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x21,0x00,0x3F,0xF0,0x61,0x00,0x21,0x00,0x2F,0xE0,0x28,0x20, +0x28,0x20,0x28,0x20,0x2F,0xE0,0x28,0x20,0x00,0x00, +/* */ +0x21,0x00,0x11,0x00,0x01,0x00,0x1F,0xF0,0x41,0x00,0x21,0x00,0x0F,0xE0,0x08,0x20, +0x18,0x20,0x28,0x20,0x4F,0xE0,0x08,0x20,0x00,0x00, +/* */ +0x00,0x30,0x7B,0xC0,0x0A,0xA0,0x0A,0xA0,0x12,0xA0,0x12,0xA0,0x1A,0xA0,0x72,0xA0, +0x12,0x90,0x12,0xD0,0x12,0xA0,0x34,0xE0,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x10,0x40,0x7D,0xF0,0x24,0x40,0x24,0x40,0x25,0xF0,0x49,0x10, +0x29,0x10,0x11,0x10,0x29,0xF0,0x45,0x10,0x00,0x00, +/* */ +0x08,0x40,0x7E,0x40,0x09,0xF0,0x3E,0x40,0x00,0x40,0x3F,0xE0,0x22,0xA0,0x3E,0xA0, +0x22,0xA0,0x14,0x40,0x0E,0xA0,0x71,0x10,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0,0x20,0x20, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x1F,0x40,0x11,0x40,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40, +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x10,0x40,0x22,0x20,0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x1F,0xC0, +0x10,0x40,0x10,0x40,0x1F,0xC0,0x10,0x40,0x00,0x00, +/* */ +0x00,0x00,0x3D,0xE0,0x25,0x20,0x25,0x20,0x3E,0x30,0x24,0x00,0x27,0xE0,0x3D,0x20, +0x25,0x40,0x24,0x80,0x25,0x40,0x4E,0x30,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x11,0x00,0x7D,0xF0,0x12,0x20,0x11,0x20,0x7D,0x20,0x45,0x20, +0x45,0x40,0x44,0x80,0x7D,0x40,0x46,0x30,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xF0,0x40,0x40,0x5C,0x80,0x55,0xF0,0x55,0x10,0x55,0x50,0x5D,0x50, +0x51,0x50,0x54,0x40,0x58,0xA0,0x11,0x10,0x00,0x00, +/* */ +0x7F,0xF0,0x42,0x10,0x42,0x10,0x5F,0xD0,0x42,0x10,0x4F,0x90,0x48,0x90,0x48,0x90, +0x4F,0x90,0x40,0x10,0x7F,0xF0,0x40,0x10,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x24,0x80,0x2F,0xF0,0x38,0x80,0x2F,0xF0, +0x28,0x80,0x2F,0xF0,0x28,0x80,0x4F,0xF0,0x00,0x00, +/* */ +0x06,0x10,0x38,0x10,0x08,0x90,0x08,0x90,0x7F,0x90,0x08,0x90,0x08,0x90,0x3E,0x90, +0x22,0x90,0x22,0x10,0x3E,0x10,0x22,0x70,0x00,0x00, +/* */ +0x00,0xE0,0x3F,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x24,0x40, +0x25,0x40,0x24,0xA0,0x25,0xA0,0x46,0x90,0x00,0x00, +/* */ +0x3E,0x10,0x22,0x10,0x22,0x50,0x3E,0x50,0x08,0x50,0x7F,0x50,0x49,0x50,0x49,0x50, +0x55,0x50,0x63,0x10,0x41,0x10,0x43,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x3F,0xE0,0x04,0x00,0x1F,0xC0,0x12,0x40,0x7F,0xF0, +0x10,0x40,0x2F,0xA0,0x44,0x90,0x19,0x80,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x13,0xE0,0x78,0x80,0x10,0x80,0x17,0xF0,0x18,0x00,0x70,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x37,0xF0,0x00,0x00, +/* */ +0x42,0x40,0x22,0x40,0x77,0x40,0x12,0x40,0x2F,0xE0,0x30,0x50,0x62,0x50,0x37,0x40, +0x22,0x40,0x23,0xC0,0x2C,0x40,0x20,0x40,0x00,0x00, +/* */ +0x01,0xC0,0x1E,0x00,0x02,0x00,0x7F,0xF0,0x0A,0x80,0x0A,0xA0,0x7A,0xC0,0x0A,0x90, +0x1A,0x90,0x6A,0x70,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x10,0x7A,0x10,0x13,0xF0,0x10,0x80,0x18,0x80,0x73,0xF0, +0x11,0x10,0x11,0x10,0x12,0x10,0x34,0x60,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x12,0x20,0x59,0x40,0x54,0x80,0x51,0x40,0x56,0xB0,0x10,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x17,0xF0,0x7C,0x10,0x13,0xE0,0x32,0x20,0x3B,0xE0,0x52,0x00, +0x13,0xF0,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x00, +0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x40,0x10,0x38,0x20,0x01,0xF0,0x00,0x20,0x7D,0x20,0x28,0xA0, +0x28,0x20,0x28,0x60,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x03,0xE0,0x7A,0x20,0x0A,0x20,0x4A,0xA0,0x2A,0xA0,0x2A,0xA0,0x12,0xA0, +0x11,0x40,0x29,0x50,0x4A,0x50,0x04,0x30,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x10,0x00,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x20,0x40,0x37,0xF0,0x54,0x10,0x03,0xE0,0x22,0x20,0x23,0xE0,0x22,0x00, +0x23,0xF0,0x22,0x10,0x33,0xF0,0x22,0x10,0x00,0x00, +/* */ +0x22,0x20,0x27,0xF0,0x3A,0x20,0x57,0x70,0x15,0x50,0x17,0x70,0x7A,0x80,0x17,0xF0, +0x5A,0x40,0x53,0xF0,0x5A,0x40,0x63,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0xA0,0x17,0xF0,0x5A,0xA0,0x53,0xE0,0x50,0x00,0x53,0xE0,0x12,0x20, +0x12,0xA0,0x12,0xA0,0x11,0x40,0x16,0x20,0x00,0x00, +/* */ +0x04,0x40,0x4F,0xF0,0x24,0x40,0x0E,0xE0,0x0A,0xA0,0x4E,0xE0,0x25,0x00,0x0F,0xF0, +0x14,0x80,0x27,0xE0,0x44,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x22,0x20,0x7F,0xF0,0x22,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x12,0x40,0x0A,0x80,0x02,0x00,0x7F,0xF0,0x08,0x80,0x08,0x80, +0x08,0x80,0x10,0x90,0x20,0x90,0x40,0x70,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00, +0x20,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x00,0x00, +/* */ +0x4A,0x00,0x25,0xF0,0x0A,0x40,0x02,0x40,0x62,0x40,0x26,0xE0,0x2A,0x40,0x22,0x40, +0x22,0x40,0x2D,0xF0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x71,0x00,0x27,0xE0,0x24,0xA0,0x27,0xE0,0x75,0x20,0x27,0xE0,0x21,0x40, +0x22,0xA0,0x32,0xE0,0x64,0x90,0x08,0x70,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x3A,0x20,0x12,0xA0,0x12,0xA0,0x7E,0xA0,0x12,0xA0, +0x11,0x40,0x29,0x50,0x2A,0x50,0x44,0x30,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00,0x02,0x00, +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x13,0xE0,0x10,0x80,0x20,0x80,0x3B,0xF0,0x68,0x00,0x28,0x80, +0x2B,0xE0,0x38,0x80,0x28,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x0B,0xF0,0x48,0x10,0x48,0x10,0x48,0x10,0x49,0xF0,0x48,0x10,0x48,0x10, +0x48,0x10,0x10,0x10,0x13,0xF0,0x20,0x10,0x00,0x00, +/* */ +0x08,0x00,0x0F,0x80,0x10,0x80,0x21,0x00,0x7F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x3F,0xE0,0x22,0x00,0x02,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x02,0x10,0x4F,0x90,0x42,0x10,0x5F,0xD0,0x42,0x10,0x4F,0x90, +0x42,0x10,0x5F,0xD0,0x40,0x10,0x40,0x30,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x7D,0x00,0x23,0xC0,0x51,0x40,0x51,0x40,0x7D,0x40,0x11,0x40, +0x1D,0x40,0x72,0x50,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x02,0x00,0x04,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x04,0x40, +0x06,0xA0,0x0B,0xE0,0x12,0x10,0x61,0xF0,0x00,0x00, +/* */ +0x22,0x00,0x13,0xE0,0x04,0x20,0x08,0x40,0x67,0xF0,0x24,0x00,0x25,0xE0,0x25,0x20, +0x25,0x60,0x35,0x00,0x25,0x10,0x08,0xF0,0x00,0x00, +/* */ +0x3C,0x80,0x04,0xA0,0x28,0x40,0x10,0x50,0x20,0x20,0x5F,0xD0,0x02,0x00,0x02,0x00, +0x3F,0xE0,0x04,0x80,0x08,0x40,0x30,0x20,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x13,0xE0,0x78,0x80,0x10,0x80,0x37,0xF0,0x38,0x00,0x50,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x00,0x7E,0x00,0x13,0xF0,0x32,0x10,0x3A,0x10,0x56,0x10, +0x13,0xF0,0x12,0x00,0x12,0x00,0x13,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x79,0xE0,0x4A,0x20,0x4C,0x40,0x7B,0xF0,0x12,0x00,0x1A,0xF0,0x52,0x90, +0x52,0xB0,0x5A,0x80,0x62,0x90,0x04,0x70,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x0D,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x08,0x10,0x14,0x10,0x22,0x90,0x40,0x90,0x3C,0x90,0x00,0x90,0x7E,0x90,0x10,0x90, +0x14,0x90,0x22,0x10,0x3E,0x10,0x02,0x70,0x00,0x00, +/* */ +0x13,0xF0,0x12,0x10,0x7B,0xF0,0x22,0x10,0x53,0xF0,0x78,0x00,0x12,0x40,0x1B,0x50, +0x72,0x60,0x12,0x40,0x13,0x50,0x12,0x30,0x00,0x00, +/* */ +0x00,0x80,0x4F,0xF0,0x24,0x20,0x09,0x10,0x02,0x40,0x44,0x20,0x2F,0xF0,0x02,0x90, +0x04,0xA0,0x2C,0x40,0x55,0x20,0x06,0x10,0x00,0x00, +/* */ +0x13,0xF0,0x12,0x10,0x13,0xF0,0x7A,0x10,0x13,0xF0,0x30,0x00,0x3A,0x40,0x53,0x50, +0x12,0x60,0x12,0x40,0x13,0x50,0x12,0x30,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x3A,0x20,0x43,0xE0,0x78,0x80,0x27,0xF0,0x24,0x90,0x7C,0x90, +0x25,0x50,0x2E,0x30,0x34,0x10,0x24,0x30,0x00,0x00, +/* */ +0x08,0x00,0x7E,0xF0,0x00,0x90,0x3E,0x90,0x22,0xA0,0x3E,0xA0,0x00,0x90,0x3C,0x90, +0x04,0x90,0x7E,0xE0,0x08,0x80,0x18,0x80,0x00,0x00, +/* */ +0x7F,0xF0,0x40,0x10,0x5F,0xD0,0x42,0x10,0x42,0x10,0x5F,0xD0,0x42,0x90,0x42,0x50, +0x7F,0xF0,0x40,0x10,0x7F,0xF0,0x40,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0, +0x12,0x40,0x25,0x20,0x18,0xC0,0x6C,0x30,0x00,0x00, +/* */ +0x20,0x20,0x10,0x20,0x00,0x20,0x07,0xF0,0x70,0x20,0x12,0x20,0x11,0x20,0x11,0x20, +0x10,0x20,0x10,0xE0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x00,0x80,0x79,0x40,0x4A,0x20,0x4C,0x10,0x4B,0xE0,0x48,0x00,0x4B,0xE0, +0x7A,0x20,0x4A,0x20,0x03,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x3C,0x80,0x24,0x40,0x25,0xF0,0x7E,0x80,0x43,0x10,0x3D,0xE0,0x24,0x40,0x3C,0x90, +0x25,0x20,0x3C,0x40,0x24,0xA0,0x2D,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x0B,0xF0,0x08,0x80,0x11,0x10,0x13,0xE0,0x18,0x40,0x70,0x90, +0x13,0x20,0x10,0x40,0x10,0xA0,0x37,0x10,0x00,0x00, +/* */ +0x44,0x00,0x27,0xF0,0x08,0x00,0x17,0xE0,0x44,0x20,0x25,0x20,0x1F,0xF0,0x08,0x20, +0x09,0x20,0x2F,0xF0,0x40,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x1F,0xE0,0x20,0x00,0x5F,0xC0,0x00,0x00,0x3F,0xC0,0x08,0x40,0x7F,0x40,0x24,0x40, +0x79,0x40,0x12,0x50,0x65,0x30,0x18,0x90,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x08,0x00,0x10,0x80,0x3F,0x00,0x02,0x40,0x0C,0x80, +0x31,0x00,0x02,0x80,0x0C,0x40,0x70,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x42,0x10,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0, +0x02,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x0B,0xF0,0x28,0x80,0x29,0x10,0x2B,0xE0,0x3C,0x40,0x04,0x90, +0x17,0x20,0x64,0x40,0x04,0xA0,0x1B,0x10,0x00,0x00, +/* */ +0x01,0x20,0x7D,0x20,0x13,0xF0,0x7D,0x20,0x55,0x20,0x55,0x20,0x6D,0xE0,0x45,0x20, +0x7D,0x20,0x45,0x20,0x7D,0xE0,0x45,0x20,0x00,0x00, +/* */ +0x38,0x80,0x08,0x80,0x7E,0xF0,0x25,0x20,0x3E,0xA0,0x24,0xA0,0x3C,0x40,0x26,0xA0, +0x7D,0x10,0x04,0x00,0x2A,0xA0,0x47,0x90,0x00,0x00, +/* */ +0x24,0x00,0x24,0xF0,0x7E,0x90,0x24,0x90,0x24,0xA0,0x24,0xA0,0x3C,0x90,0x24,0x90, +0x24,0x90,0x24,0xE0,0x3C,0x80,0x24,0x80,0x00,0x00, +/* */ +0x10,0x80,0x7C,0x80,0x13,0xF0,0x7C,0x80,0x45,0xE0,0x7C,0x80,0x47,0xF0,0x7C,0x90, +0x10,0x90,0x7C,0xB0,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x14,0x40,0x62,0x30,0x1F,0x80,0x00,0x80,0x01,0x00, +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x4F,0xC0,0x20,0x40,0x00,0x80,0x11,0x10,0x55,0x50,0x33,0x90,0x11,0x10,0x13,0x90, +0x15,0x50,0x31,0x10,0x53,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x3F,0xE0,0x08,0x80,0x3F,0xE0,0x08,0x80,0x7F,0xF0, +0x12,0x40,0x21,0x20,0x4C,0x10,0x03,0x00,0x00,0x00, +/* */ +0x3F,0xC0,0x00,0x80,0x41,0x10,0x52,0x50,0x4A,0x90,0x42,0x10,0x4A,0x90,0x52,0x50, +0x42,0x10,0x46,0x10,0x40,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x50,0x00,0x40,0x77,0xF0,0x54,0x40,0x57,0x40,0x54,0x50,0x57,0x50,0x55,0x60, +0x75,0x60,0x57,0x50,0x04,0xB0,0x09,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x48,0x90,0x10,0x40,0x20,0x20,0x1F,0xC0,0x02,0x00,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x21,0x00,0x72,0x80,0x24,0x40,0x78,0x30,0x56,0xE0,0x72,0x20,0x5A,0xA0,0x76,0x60, +0x26,0x60,0x7A,0xA0,0x22,0x20,0x26,0x60,0x00,0x00, +/* */ +0x20,0x50,0x27,0xF0,0x24,0x40,0x77,0x50,0x24,0x50,0x27,0x60,0x35,0x50,0x67,0xB0, +0x25,0x10,0x28,0x80,0x22,0x20,0x65,0xD0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x7A,0x20,0x13,0xE0,0x10,0x00,0x1B,0xE0,0x70,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x30,0x80,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x10,0x50,0x17,0xF0,0x1C,0x40,0x57,0x50,0x54,0x50,0x57,0x60,0x55,0x50,0x17,0xB0, +0x15,0x10,0x18,0x80,0x12,0x20,0x15,0xD0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x5A,0x20,0x57,0xE0,0x50,0x00,0x53,0xE0,0x10,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x17,0xE0,0x5A,0x20,0x53,0xE0,0x50,0x00,0x53,0xE0,0x10,0x80, +0x17,0xF0,0x28,0x80,0x24,0x80,0x40,0x80,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xE0,0x01,0x00,0x01,0x00,0x41,0x00,0x21,0x00,0x1F,0xF0,0x01,0x00, +0x11,0x00,0x21,0x00,0x41,0x00,0x01,0x00,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xE0,0x04,0x20,0x04,0x20,0x44,0x20,0x24,0x40,0x02,0x40,0x02,0x80, +0x11,0x00,0x22,0x80,0x44,0x40,0x18,0x30,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x05,0x00,0x08,0x80,0x14,0x40,0x64,0x30,0x1F,0xC0, +0x04,0x40,0x08,0x40,0x10,0x40,0x21,0x80,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x78,0x00,0x10,0x00,0x33,0xC0,0x3A,0x40,0x52,0x40, +0x12,0x40,0x12,0x50,0x14,0x50,0x18,0x30,0x00,0x00, +/* */ +0x10,0x80,0x3C,0x40,0x27,0xF0,0x34,0x00,0x2C,0x00,0x25,0xC0,0x7D,0x40,0x25,0x40, +0x35,0x40,0x2D,0x50,0x26,0x50,0x4C,0x30,0x00,0x00, +/* */ +0x21,0x00,0x2F,0xF0,0x20,0x00,0x77,0xE0,0x24,0x20,0x2F,0xF0,0x28,0x10,0x27,0xE0, +0x33,0x00,0x6D,0xD0,0x02,0xA0,0x0D,0x90,0x00,0x00, +/* */ +0x01,0x00,0x0F,0xF0,0x70,0x00,0x57,0xE0,0x54,0x20,0x5F,0xF0,0x58,0x10,0x57,0xE0, +0x73,0x00,0x5D,0xD0,0x02,0xA0,0x0D,0x90,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x7F,0xF0,0x40,0x10,0x3F,0xE0, +0x0C,0x00,0x32,0xA0,0x05,0x40,0x3B,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x7F,0xF0,0x41,0x90,0x1E,0x00, +0x03,0xC0,0x1E,0x00,0x03,0x90,0x3D,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x08,0xF0,0x3E,0x90,0x08,0x90,0x08,0xA0,0x7F,0xA0,0x14,0x90,0x36,0x90, +0x55,0x90,0x15,0xE0,0x24,0x80,0x4C,0x80,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x20,0x7C,0x40,0x24,0x80,0x24,0x80,0x27,0xF0,0x48,0x80, +0x28,0x80,0x10,0x80,0x28,0x80,0x45,0x80,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x7C,0x80,0x10,0xE0,0x3B,0x80,0x10,0x80,0x7C,0xF0,0x13,0x80, +0x38,0x80,0x54,0x90,0x10,0x90,0x10,0x70,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x10,0x40,0x1F,0xC0,0x00,0x00,0x7F,0xF0,0x08,0x00,0x10,0x00, +0x1F,0xE0,0x00,0x20,0x00,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x44,0x80,0x27,0xE0,0x08,0x80,0x00,0x80,0x4F,0xF0,0x20,0x00,0x07,0xE0, +0x14,0x20,0x24,0x20,0x47,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x50,0x20,0x50,0x20,0x57,0xA0,0x54,0xA0,0x54,0xA0,0x54,0xA0, +0x77,0xA0,0x54,0x20,0x00,0x20,0x00,0xE0,0x00,0x00, +/* */ +0x07,0xE0,0x74,0x20,0x57,0xE0,0x54,0x20,0x57,0xE0,0x52,0x00,0x57,0xF0,0x58,0x90, +0x71,0x50,0x54,0x10,0x07,0x90,0x00,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x17,0xF0,0x10,0x20,0x27,0xA0,0x64,0xA0,0x24,0xA0, +0x27,0xA0,0x24,0x20,0x20,0x20,0x20,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x40,0x00,0x2F,0xF0,0x00,0x20,0x4F,0xA0,0x28,0xA0, +0x08,0xA0,0x0F,0xA0,0x28,0x20,0x40,0xE0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x79,0x00,0x12,0x20,0x37,0xC0,0x38,0x90,0x51,0x20, +0x16,0x40,0x10,0xC0,0x11,0x20,0x16,0x10,0x00,0x00, +/* */ +0x01,0xC0,0x1E,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x07,0x00,0x0A,0x80,0x0A,0x80, +0x12,0x40,0x22,0x20,0x42,0x10,0x02,0x00,0x00,0x00, +/* */ +0x04,0x00,0x38,0x00,0x09,0xF0,0x09,0x10,0x7F,0x10,0x09,0x10,0x1D,0x10,0x2B,0x10, +0x49,0x10,0x09,0xF0,0x09,0x10,0x08,0x00,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x20,0x20,0x20,0x20,0x67,0xA0,0x24,0xA0,0x24,0xA0,0x24,0xA0, +0x27,0xA0,0x24,0x20,0x20,0x20,0x20,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x1F,0xC0,0x00,0x00,0x3F,0xE0, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x18,0xC0,0x6F,0xB0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x00,0x00,0x3F,0xE0,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x21,0xE0,0x52,0x20,0x2D,0x40,0x10,0x80,0x69,0x40,0x1E,0x30,0x6B,0xE0, +0x1A,0x20,0x6A,0x20,0x0B,0xE0,0x32,0x20,0x00,0x00, +/* */ +0x4F,0xF0,0x22,0x10,0x01,0x10,0x5F,0xD0,0x44,0x10,0x49,0x10,0x4E,0x50,0x44,0x90, +0x59,0x10,0x46,0x90,0x58,0x50,0x40,0x30,0x00,0x00, +/* */ +0x00,0x00,0x27,0xF0,0x10,0x20,0x00,0x20,0x47,0xA0,0x24,0xA0,0x04,0xA0,0x04,0xA0, +0x17,0xA0,0x24,0x20,0x40,0x20,0x00,0xE0,0x00,0x00, +/* */ +0x4F,0xF0,0x29,0x10,0x09,0x10,0x0F,0xF0,0x49,0x10,0x2B,0xD0,0x0A,0x50,0x0A,0x50, +0x0B,0xD0,0x28,0x10,0x4F,0xF0,0x08,0x10,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x7D,0xF0,0x10,0x40,0x10,0x40,0x7D,0xF0,0x28,0xA0,0x6D,0xA0, +0x2A,0xB0,0x28,0xA0,0x28,0xA0,0x59,0x60,0x00,0x00, +/* */ +0x23,0xE0,0x12,0x20,0x7B,0xE0,0x0A,0x20,0x13,0xE0,0x19,0x00,0x31,0xF0,0x5A,0x90, +0x15,0x50,0x12,0x10,0x13,0xD0,0x10,0x60,0x00,0x00, +/* */ +0x08,0x40,0x7E,0xF0,0x52,0x90,0x28,0xD0,0x3E,0x90,0x68,0xB0,0x3E,0x80,0x28,0xF0, +0x3E,0x10,0x28,0xF0,0x3E,0x10,0x20,0x60,0x00,0x00, +/* */ +0x10,0x00,0x7E,0xF0,0x12,0x90,0x22,0x90,0x4C,0xF0,0x00,0x00,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* */ +0x07,0xF0,0x74,0x90,0x56,0xB0,0x54,0x90,0x57,0xF0,0x50,0x80,0x57,0xF0,0x50,0x80, +0x77,0xF0,0x50,0x00,0x05,0x50,0x05,0x50,0x00,0x00, +/* */ +0x3F,0xE0,0x22,0x20,0x2A,0xA0,0x22,0x20,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x02,0x00, +0x7F,0xF0,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x57,0xE0,0x34,0x20,0x17,0xE0,0x14,0x20,0x37,0xE0, +0x55,0x10,0x14,0xA0,0x26,0x40,0x44,0x30,0x00,0x00, +/* */ +0x0B,0xE0,0x12,0x20,0x22,0x20,0x4B,0xE0,0x12,0x20,0x32,0x20,0x53,0xE0,0x12,0x90, +0x12,0xA0,0x12,0x40,0x13,0x20,0x12,0x10,0x00,0x00, +/* */ +0x0B,0xE0,0x2A,0x20,0x12,0x20,0x2B,0xE0,0x4A,0x20,0x0A,0x20,0x1B,0xE0,0x2A,0x90, +0x4A,0xA0,0x0A,0x40,0x0B,0x20,0x32,0x10,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x12,0x20,0x5B,0xE0,0x56,0x20,0x52,0x20,0x53,0xE0,0x12,0x90, +0x12,0xA0,0x12,0x40,0x13,0x20,0x12,0x10,0x00,0x00, +/* */ +0x00,0x80,0x0F,0xF0,0x70,0x00,0x57,0xE0,0x54,0x20,0x57,0xE0,0x50,0x00,0x57,0xE0, +0x70,0x40,0x50,0x80,0x00,0x80,0x01,0x80,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x3F,0xE0, +0x00,0xC0,0x03,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x7A,0x20,0x17,0xF0,0x10,0x80,0x3F,0xF0,0x34,0x90,0x57,0xF0, +0x14,0x90,0x17,0xF0,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x14,0x00,0x27,0x70,0x49,0x00,0x1F,0x80,0x2A,0xF0,0x6F,0xA0,0x2A,0xA0,0x2F,0xA0, +0x22,0x20,0x2F,0xA0,0x25,0x20,0x28,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x10,0x00,0x5B,0xE0,0x56,0x20,0x52,0x20,0x53,0xE0,0x12,0x20, +0x12,0x20,0x13,0xE0,0x10,0x00,0x17,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x3F,0xE0,0x0A,0x00,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3D,0xE0, +0x05,0x20,0x15,0x20,0x08,0xC0,0x35,0x30,0x00,0x00, +/* */ +0x02,0x40,0x72,0x40,0x52,0x40,0x57,0xE0,0x52,0x40,0x52,0x40,0x52,0x40,0x5F,0xF0, +0x70,0x00,0x52,0x40,0x04,0x20,0x08,0x10,0x00,0x00, +/* */ +0x11,0x40,0x11,0x40,0x15,0x40,0x5B,0xE0,0x51,0x40,0x51,0x40,0x51,0x40,0x17,0xF0, +0x10,0x00,0x29,0x40,0x2A,0x20,0x44,0x10,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x80,0x7C,0x80,0x54,0x80,0x54,0x80,0x7C,0x80,0x10,0x80, +0x14,0x80,0x1C,0x80,0x60,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x5D,0xE0,0x29,0x20,0x09,0xA0,0x09,0x20,0x49,0x60,0x29,0x00,0x09,0xF0, +0x08,0x10,0x2D,0xD0,0x58,0x10,0x00,0x60,0x00,0x00, +/* */ +0x22,0x40,0x12,0x40,0x02,0x40,0x07,0xE0,0x42,0x40,0x22,0x40,0x02,0x40,0x0F,0xF0, +0x10,0x00,0x22,0x40,0x44,0x20,0x08,0x10,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x44,0x10,0x04,0x00,0x7F,0xF0,0x08,0x00,0x09,0x00, +0x11,0x00,0x12,0x40,0x24,0x20,0x4F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x08,0x80,0x08,0x80,0x78,0x80,0x41,0x00,0x41,0x00,0x79,0x00, +0x09,0x20,0x0A,0x10,0x0B,0xF0,0x30,0x10,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x20,0x80,0x48,0x80,0x70,0x80,0x10,0x80,0x20,0x80,0x78,0x80, +0x00,0x80,0x18,0x80,0x60,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x02,0xE0,0x74,0x20,0x55,0xF0,0x5C,0x80,0x54,0xF0,0x55,0x40,0x54,0x40, +0x75,0xF0,0x54,0x40,0x04,0xA0,0x05,0x10,0x00,0x00, +/* */ +0x08,0x00,0x0B,0xC0,0x10,0x40,0x17,0xF0,0x32,0x00,0x53,0xE0,0x14,0x80,0x10,0x80, +0x17,0xF0,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x12,0x00,0x52,0xE0,0x24,0x20,0x55,0xF0,0x1C,0x80,0x14,0xF0,0x35,0x40,0x54,0x40, +0x15,0xF0,0x14,0x40,0x14,0xA0,0x65,0x10,0x00,0x00, +/* */ +0x00,0x40,0x07,0x40,0x71,0x40,0x52,0x40,0x52,0xC0,0x53,0x40,0x52,0x40,0x5E,0x40, +0x72,0x40,0x52,0x50,0x02,0x50,0x06,0x30,0x00,0x00, +/* */ +0x3F,0xF0,0x28,0x20,0x2F,0xE0,0x28,0x20,0x2F,0xE0,0x20,0x00,0x2F,0xE0,0x20,0xC0, +0x21,0x00,0x3F,0xF0,0x21,0x00,0x43,0x00,0x00,0x00, +/* */ +0x08,0x00,0x09,0xE0,0x14,0x20,0x17,0xF0,0x35,0x00,0x55,0xE0,0x16,0x40,0x14,0x40, +0x15,0xF0,0x14,0x40,0x10,0xA0,0x13,0x10,0x00,0x00, +/* */ +0x00,0xE0,0x1F,0x00,0x10,0x00,0x10,0x00,0x1F,0xF0,0x10,0x00,0x10,0x00,0x17,0xF0, +0x14,0x10,0x24,0x10,0x27,0xF0,0x44,0x10,0x00,0x00, +/* */ +0x00,0x70,0x77,0x80,0x50,0x80,0x54,0x90,0x52,0xA0,0x50,0x80,0x57,0xF0,0x50,0x80, +0x70,0x80,0x50,0x80,0x00,0x80,0x03,0x80,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x02,0x00,0x22,0x20,0x12,0x40,0x02,0x00,0x7F,0xF0,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x24,0x90,0x44,0x90,0x09,0x10,0x12,0x10,0x24,0xE0,0x00,0x00, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x72,0x70,0x27,0x50,0x22,0x50,0x22,0x70,0x77,0x50,0x25,0x50,0x25,0x70, +0x25,0x50,0x37,0x50,0x64,0x50,0x00,0xB0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x40,0x10,0x05,0x00, +0x25,0x20,0x15,0x40,0x05,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x00,0x11,0xF0,0x7D,0x10,0x11,0xF0,0x7D,0x10, +0x45,0xF0,0x45,0x10,0x7D,0x10,0x42,0x30,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x7D,0x10,0x11,0x10,0x11,0xF0,0x7D,0x10,0x45,0x10,0x45,0xF0, +0x45,0x10,0x7D,0x10,0x42,0x10,0x04,0x70,0x00,0x00, +/* */ +0x12,0x00,0x12,0x70,0x17,0x50,0x7A,0x50,0x52,0x70,0x57,0x50,0x7D,0x50,0x15,0x70, +0x15,0x50,0x1F,0x50,0x64,0x50,0x00,0xB0,0x00,0x00, +/* */ +0x10,0x60,0x57,0x80,0x25,0x40,0x55,0x40,0x15,0x40,0x15,0x40,0x35,0x40,0x55,0x40, +0x15,0x20,0x15,0xA0,0x15,0x50,0x69,0xC0,0x00,0x00, +/* */ +0x12,0x70,0x12,0x50,0x57,0x50,0x3A,0x70,0x12,0x50,0x7F,0x50,0x15,0x50,0x3D,0x70, +0x55,0x50,0x17,0x50,0x14,0x90,0x11,0x30,0x00,0x00, +/* */ +0x04,0x00,0x44,0xF0,0x2E,0x90,0x04,0x90,0x04,0xF0,0x4E,0x90,0x2A,0x90,0x0A,0xF0, +0x0A,0x90,0x2E,0x90,0x48,0x90,0x01,0x30,0x00,0x00, +/* */ +0x00,0x60,0x77,0x80,0x15,0x40,0x15,0x40,0x75,0x40,0x45,0x40,0x45,0x40,0x75,0x40, +0x15,0x20,0x15,0xA0,0x15,0x50,0x69,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x03,0xE0,0x02,0x00,0x3F,0xF0,0x22,0x10,0x23,0xC0,0x3E,0x10,0x21,0xF0, +0x20,0x00,0x27,0xC0,0x24,0x50,0x58,0x30,0x00,0x00, +/* */ +0x00,0x80,0x00,0xE0,0x70,0x80,0x57,0xF0,0x54,0x90,0x54,0xE0,0x57,0x90,0x54,0x70, +0x75,0xC0,0x55,0x40,0x05,0x50,0x0A,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7A,0x10,0x12,0x10,0x12,0x10,0x1B,0xF0,0x72,0x10, +0x12,0x00,0x12,0x00,0x12,0x00,0x34,0x00,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x10,0x00,0x10,0x00,0x1F,0xC0,0x10,0x40,0x20,0x40,0x20,0x40, +0x3F,0x80,0x00,0x80,0x00,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x10,0x80,0x07,0xF0,0x04,0x10,0x44,0x10,0x24,0x10,0x07,0xF0,0x04,0x10, +0x14,0x00,0x28,0x00,0x48,0x00,0x10,0x00,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10, +0x10,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x09,0x00,0x11,0x20,0x31,0x40,0x51,0x80, +0x11,0x00,0x13,0x10,0x15,0x10,0x10,0xF0,0x00,0x00, +/* */ +0x01,0x40,0x72,0x50,0x56,0x60,0x5A,0x40,0x52,0xD0,0x53,0x50,0x52,0x30,0x50,0x80, +0x77,0xF0,0x50,0x80,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x09,0x00,0x09,0x20,0x11,0x40,0x31,0x80,0x57,0x10,0x11,0x10,0x10,0xF0,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x17,0xE0,0x54,0x20,0x27,0xA0,0x54,0xA0,0x1F,0xF0,0x18,0x10,0x37,0xE0,0x54,0x20, +0x17,0xE0,0x14,0x20,0x17,0xE0,0x64,0x60,0x00,0x00, +/* */ +0x4F,0xE0,0x28,0x20,0x0F,0x20,0x09,0x20,0x5F,0xF0,0x30,0x10,0x0F,0xE0,0x08,0x20, +0x0F,0xE0,0x28,0x20,0x4F,0xE0,0x08,0x60,0x00,0x00, +/* */ +0x7F,0xF0,0x00,0x00,0x5F,0xD0,0x52,0x50,0x52,0x50,0x5F,0xD0,0x52,0x50,0x52,0x50, +0x5F,0xD0,0x40,0x10,0x7F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x14,0x10,0x12,0x10,0x10,0x50,0x1F,0x50,0x70,0x50,0x12,0x50,0x12,0x50,0x14,0x50, +0x09,0x50,0x15,0x10,0x23,0x10,0x41,0x30,0x00,0x00, +/* */ +0x09,0x00,0x09,0x00,0x11,0x10,0x11,0x20,0x31,0x40,0x51,0x80,0x11,0x00,0x13,0x00, +0x15,0x00,0x11,0x10,0x11,0x10,0x10,0xF0,0x00,0x00, +/* */ +0x20,0x70,0x17,0x80,0x00,0x80,0x00,0x80,0x6F,0xF0,0x20,0x80,0x20,0x80,0x27,0xF0, +0x2C,0x10,0x34,0x10,0x27,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x10,0x80,0x11,0x00,0x17,0xE0,0x7C,0xA0,0x17,0xE0,0x35,0x20,0x3F,0xE0,0x55,0x40, +0x12,0xA0,0x12,0xE0,0x14,0x90,0x18,0x70,0x00,0x00, +/* */ +0x08,0x00,0x17,0xF0,0x24,0x10,0x4C,0x10,0x15,0xD0,0x35,0x50,0x55,0x50,0x15,0xD0, +0x14,0x10,0x14,0x10,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x10,0x40,0x58,0x40,0x54,0x80,0x50,0xA0,0x51,0x90,0x12,0x90, +0x14,0x90,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x22,0x80,0x12,0x40,0x07,0xF0,0x04,0x80,0x4C,0x80,0x27,0xE0,0x04,0x80,0x04,0x80, +0x17,0xE0,0x24,0x80,0x44,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x10,0x40,0x10,0x80,0x78,0x80,0x11,0xA0,0x12,0x90,0x14,0x90, +0x10,0x80,0x18,0x80,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x01,0x00,0x7D,0x00,0x05,0xF0,0x46,0x10,0x2C,0x20,0x28,0x80,0x10,0x80,0x10,0x80, +0x29,0x40,0x29,0x40,0x42,0x20,0x04,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x10,0x40,0x10,0x80,0x10,0x80,0x79,0xA0,0x12,0x90,0x14,0x90, +0x10,0x80,0x18,0x80,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x10,0x00,0x7B,0xE0,0x12,0x20,0x32,0x20,0x3B,0xE0,0x52,0x20, +0x12,0x20,0x13,0xE0,0x10,0x00,0x17,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x17,0xF0,0x00,0x40,0x00,0x80,0x71,0xA0,0x12,0x90,0x14,0x90,0x10,0x80, +0x10,0x80,0x10,0x80,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x30,0x17,0xC0,0x25,0x10,0x4A,0xA0,0x77,0xF0,0x10,0x80,0x27,0xF0,0x71,0x00, +0x03,0xE0,0x15,0x20,0x68,0xC0,0x07,0x30,0x00,0x00, +/* */ +0x11,0x00,0x11,0xC0,0x12,0x40,0x7C,0x80,0x13,0xE0,0x12,0xA0,0x1A,0xA0,0x72,0xA0, +0x17,0xF0,0x11,0x40,0x12,0x20,0x34,0x10,0x00,0x00, +/* */ +0x02,0x00,0x1F,0xC0,0x12,0x40,0x1F,0xC0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x73,0xC0,0x54,0x40,0x58,0x80,0x57,0xE0,0x55,0x20,0x55,0x20,0x55,0x20, +0x7F,0xF0,0x52,0x80,0x04,0x40,0x08,0x30,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x12,0x00,0x53,0xC0,0x34,0x40,0x1F,0xE0,0x15,0x20,0x35,0x20, +0x5F,0xF0,0x12,0x80,0x24,0x40,0x58,0x30,0x00,0x00, +/* */ +0x12,0x40,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x10,0x40,0x2F,0xA0,0x44,0x10,0x1A,0x40, +0x05,0x80,0x3B,0x40,0x05,0x20,0x3B,0x00,0x00,0x00, +/* */ +0x11,0x00,0x11,0xC0,0x1A,0x40,0x54,0x80,0x53,0xE0,0x52,0xA0,0x52,0xA0,0x12,0xA0, +0x17,0xF0,0x29,0x40,0x2A,0x20,0x44,0x10,0x00,0x00, +/* */ +0x04,0x00,0x47,0xC0,0x28,0x40,0x10,0x80,0x0F,0xE0,0x49,0x20,0x29,0x20,0x09,0x20, +0x1F,0xF0,0x22,0x80,0x44,0x40,0x18,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x3F,0xE0,0x22,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20, +0x3F,0xE0,0x22,0x00,0x22,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x20,0x10,0x24,0x10,0x44,0x10,0x78,0x10,0x08,0x10,0x10,0x10, +0x24,0x10,0x7E,0x10,0x02,0x10,0x00,0x60,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x12,0x40,0x01,0x00,0x7F,0xF0,0x10,0x00,0x1F,0xE0,0x00,0x00, +0x12,0x40,0x12,0x40,0x22,0x50,0x42,0x30,0x00,0x00, +/* */ +0x22,0x40,0x2F,0xF0,0x22,0x40,0x31,0x00,0x6F,0xF0,0x64,0x00,0x27,0xE0,0x20,0x00, +0x25,0x40,0x25,0x40,0x25,0x50,0x28,0x30,0x00,0x00, +/* */ +0x08,0x80,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x01,0x40,0x7B,0xE0,0x11,0x40,0x17,0xF0,0x20,0x80,0x3B,0xE0,0x6A,0xA0,0x2B,0xE0, +0x2A,0xA0,0x3B,0xE0,0x29,0x40,0x02,0x20,0x00,0x00, +/* */ +0x10,0x80,0x11,0xF0,0x11,0x10,0x7D,0xF0,0x55,0x10,0x55,0xF0,0x7C,0x00,0x11,0xF0, +0x14,0x40,0x1D,0xF0,0x64,0x40,0x01,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x80,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x04,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0, +0x02,0x00,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x22,0x20,0x2F,0xA0,0x28,0xA0,0x2F,0xA0,0x28,0xA0,0x3F,0xE0,0x22,0x20, +0x2F,0xA0,0x22,0x20,0x2F,0xB0,0x40,0x10,0x00,0x00, +/* */ +0x11,0x00,0x13,0xE0,0x12,0x20,0x5B,0xE0,0x56,0x20,0x53,0xE0,0x50,0x00,0x17,0xF0, +0x10,0x80,0x13,0xE0,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x13,0xE0,0x12,0x20,0x57,0xE0,0x5A,0x20,0x53,0xE0,0x50,0x00,0x17,0xF0, +0x10,0x80,0x2B,0xE0,0x20,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x02,0x00,0x22,0x20,0x12,0x40, +0x7F,0xF0,0x09,0x00,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x7F,0xE0,0x56,0x20,0x57,0xE0,0x54,0x80,0x56,0xA0,0x55,0xC0, +0x57,0xF0,0x5D,0x40,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x14,0x90,0x5A,0xA0,0x50,0x80,0x57,0xF0,0x51,0x40,0x11,0x40, +0x11,0x40,0x12,0x50,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x42,0x40,0x2F,0xF0,0x02,0x40,0x01,0x00,0x6F,0xF0,0x24,0x00,0x27,0xE0,0x20,0x00, +0x25,0x40,0x35,0x40,0x25,0x50,0x08,0x30,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x7F,0xF0,0x10,0x00,0x11,0x00,0x15,0x20,0x15,0x20,0x15,0x40, +0x29,0x00,0x22,0x80,0x44,0x40,0x18,0x30,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x24,0x10,0x70,0x80,0x27,0xE0,0x21,0x00,0x32,0x80,0x63,0xE0, +0x20,0x80,0x27,0xF0,0x20,0x80,0x60,0x80,0x00,0x00, +/* */ +0x13,0xF0,0x12,0x90,0x54,0x80,0x3B,0xF0,0x10,0x80,0x7D,0x40,0x29,0xF0,0x28,0x40, +0x28,0x40,0x2B,0xF0,0x2C,0x40,0x48,0x40,0x00,0x00, +/* */ +0x12,0x20,0x2A,0xA0,0x4F,0xB0,0x14,0x50,0x29,0x90,0x6E,0x50,0x24,0x50,0x2F,0x50, +0x22,0x20,0x2B,0x20,0x32,0xD0,0x26,0x90,0x00,0x00, +/* */ +0x12,0x00,0x12,0x00,0x17,0xF0,0x5A,0x00,0x52,0x40,0x52,0x50,0x55,0x60,0x15,0x40, +0x14,0x40,0x14,0xA0,0x19,0x20,0x12,0x10,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x10,0x7C,0x10,0x55,0xD0,0x55,0x50,0x7D,0x50,0x15,0xD0, +0x14,0x10,0x1C,0x10,0x67,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x20,0x10,0x20,0x10,0x27,0x90,0x24,0x90,0x24,0x90,0x27,0x90, +0x20,0x10,0x20,0x10,0x3F,0xF0,0x20,0x10,0x00,0x00, +/* */ +0x20,0x00,0x4D,0xE0,0x45,0x20,0x6D,0x20,0x46,0x30,0x7C,0x00,0x01,0xE0,0x7D,0x20, +0x11,0x20,0x10,0xC0,0x1D,0x20,0x72,0x10,0x00,0x00, +/* */ +0x12,0x00,0x13,0xF0,0x14,0x00,0x5B,0xE0,0x52,0x20,0x52,0xA0,0x5F,0xF0,0x14,0x20, +0x14,0xA0,0x17,0xF0,0x10,0x20,0x10,0xC0,0x00,0x00, +/* */ +0x10,0x40,0x7D,0xF0,0x10,0x40,0x7D,0xF0,0x10,0x40,0x7F,0xF0,0x00,0x20,0x3F,0xE0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x12,0x40,0x12,0x40,0x10,0x40,0x7F,0xF0, +0x10,0x40,0x10,0x40,0x20,0x40,0x40,0x40,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x1F,0xC0,0x12,0x40,0x1F,0xC0,0x12,0x50,0x7F,0xF0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x02,0x00,0x73,0xF0,0x54,0x00,0x5B,0xE0,0x52,0x20,0x72,0xA0,0x5F,0xF0,0x54,0x20, +0x54,0xA0,0x77,0xF0,0x50,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x47,0xF0,0x55,0x00,0x55,0xF0,0x57,0x10,0x55,0xF0,0x55,0x10, +0x55,0xF0,0x11,0x10,0x29,0x10,0x45,0x30,0x00,0x00, +/* */ +0x08,0x80,0x74,0x90,0x14,0x90,0x17,0xF0,0x79,0x00,0x11,0xF0,0x3A,0x10,0x35,0x10, +0x50,0xA0,0x10,0x40,0x11,0x80,0x16,0x00,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x6F,0xB0,0x00,0x00,0x00,0x00,0x7F,0xF0, +0x08,0x00,0x10,0x40,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x10,0x80,0x11,0x40,0x1A,0x20,0x54,0x10,0x53,0xE0,0x50,0x00,0x50,0x00,0x17,0xF0, +0x11,0x00,0x2A,0x20,0x2B,0xF0,0x40,0x10,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xF0,0x08,0x00,0x08,0x00,0x48,0x00,0x28,0x00,0x08,0x00,0x08,0x00, +0x18,0x00,0x28,0x00,0x48,0x00,0x0F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x07,0xF0,0x00,0x80,0x73,0xE0,0x10,0x80,0x17,0xF0,0x10,0x90, +0x14,0x90,0x18,0xB0,0x10,0x80,0x00,0x80,0x00,0x00, +/* */ +0x22,0x00,0x13,0xF0,0x04,0x00,0x0B,0xE0,0x62,0x20,0x22,0xA0,0x2F,0xF0,0x24,0x20, +0x24,0xA0,0x37,0xF0,0x20,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x11,0x40,0x22,0x20,0x4C,0x10,0x73,0xE0,0x10,0x00,0x20,0x00,0x77,0xF0, +0x01,0x00,0x12,0x20,0x67,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x44,0x10,0x3F,0xE0,0x0A,0x00,0x1F,0xC0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x00,0xE0,0x3F,0x00,0x21,0x00,0x3F,0xF0,0x20,0x80,0x28,0x50,0x30,0x30,0x1F,0xE0, +0x10,0x20,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x10,0x20,0x13,0xC0,0x12,0x40,0x7B,0xE0,0x2A,0x50,0x2B,0xB0,0x28,0x10,0x4B,0xE0, +0x2A,0x20,0x13,0xE0,0x2A,0x20,0x4B,0xE0,0x00,0x00, +/* */ +0x01,0x00,0x77,0xE0,0x04,0xA0,0x07,0xE0,0x75,0x20,0x27,0xE0,0x21,0x40,0x42,0x40, +0x53,0xA0,0x75,0xE0,0x15,0x10,0x08,0xF0,0x00,0x00, +/* */ +0x4F,0xF0,0x29,0x10,0x01,0x00,0x0F,0xF0,0x42,0x00,0x24,0x80,0x07,0xE0,0x00,0x80, +0x10,0x80,0x2F,0xF0,0x40,0x80,0x00,0x80,0x00,0x00, +/* */ +0x27,0xE0,0x14,0x20,0x07,0xE0,0x04,0x20,0x47,0xE0,0x20,0x00,0x04,0x40,0x04,0x50, +0x17,0x60,0x24,0x40,0x45,0x50,0x06,0x30,0x00,0x00, +/* */ +0x08,0xA0,0x7F,0x10,0x49,0x00,0x3E,0x40,0x08,0xA0,0x3F,0x10,0x08,0x00,0x7F,0xE0, +0x08,0xA0,0x3E,0xA0,0x22,0xE0,0x3E,0xA0,0x00,0x00, +/* */ +0x00,0xE0,0x4F,0x00,0x21,0x00,0x01,0x00,0x1F,0xF0,0x41,0x00,0x21,0x00,0x0F,0xE0, +0x18,0x20,0x28,0x20,0x4F,0xE0,0x08,0x20,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x12,0x90,0x12,0x90,0x32,0xA0,0x54,0x80,0x10,0x80,0x11,0x40, +0x11,0x40,0x12,0x20,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x12,0x20,0x12,0x20,0x12,0x40,0x22,0x00,0x05,0x00,0x05,0x00, +0x08,0x80,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x44,0x20,0x28,0x90,0x10,0x80,0x6F,0xF0,0x08,0x80, +0x19,0x40,0x69,0x40,0x0A,0x20,0x34,0x10,0x00,0x00, +/* */ +0x01,0x40,0x01,0x20,0x7F,0xF0,0x01,0x00,0x3D,0x20,0x25,0x20,0x25,0x40,0x3D,0x40, +0x00,0x90,0x0D,0x50,0x72,0x30,0x04,0x10,0x00,0x00, +/* */ +0x01,0x20,0x7F,0xF0,0x01,0x00,0x3D,0x20,0x25,0x20,0x3D,0x40,0x00,0x90,0x0D,0x50, +0x72,0x30,0x04,0x00,0x2A,0xA0,0x47,0x90,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x09,0x00,0x1F,0xF0,0x31,0x00,0x5F,0xE0, +0x11,0x00,0x1F,0xE0,0x11,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x09,0x20,0x11,0x40,0x31,0x80,0x51,0x10,0x16,0xF0,0x10,0x00,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* */ +0x23,0xE0,0x12,0x20,0x7A,0x20,0x0B,0xE0,0x10,0x80,0x17,0xF0,0x3C,0x90,0x54,0x90, +0x15,0x50,0x16,0x30,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x22,0x20, +0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x12,0x20,0x7A,0x20,0x12,0x40,0x12,0x70,0x12,0x10,0x13,0x10, +0x1A,0xA0,0x64,0x40,0x04,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x7F,0xF0, +0x22,0x20,0x5F,0xD0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xC0,0x12,0x40,0x7A,0x40,0x12,0x40,0x3A,0x40,0x36,0x40,0x52,0x40, +0x12,0x40,0x12,0x50,0x14,0x50,0x18,0x30,0x00,0x00, +/* */ +0x00,0x40,0x7D,0xF0,0x54,0xA0,0x55,0x10,0x57,0xF0,0x7C,0x10,0x55,0xD0,0x55,0x50, +0x55,0x50,0x7D,0xD0,0x45,0x10,0x00,0x30,0x00,0x00, +/* */ +0x09,0x40,0x77,0xE0,0x12,0x90,0x14,0x70,0x7B,0xC0,0x12,0x10,0x39,0xF0,0x37,0xE0, +0x52,0x20,0x13,0xE0,0x12,0x20,0x13,0xE0,0x00,0x00, +/* */ +0x08,0x00,0x73,0xE0,0x12,0x20,0x12,0x20,0x7A,0x20,0x12,0x20,0x32,0x20,0x3B,0xE0, +0x50,0x00,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x52,0x40,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x10,0x40,0x7F,0xF0,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x00,0x00,0x3D,0xC0,0x25,0x40,0x25,0x40,0x3D,0x40,0x25,0x40,0x25,0x40,0x3D,0x40, +0x25,0x40,0x25,0x50,0x26,0x50,0x4C,0x30,0x00,0x00, +/* */ +0x20,0x00,0x23,0xC0,0x3A,0x40,0x4A,0x40,0x12,0x40,0x22,0x40,0x22,0x40,0x22,0x40, +0x2A,0x40,0x32,0x50,0x24,0x50,0x08,0x30,0x00,0x00, +/* */ +0x41,0x00,0x20,0x80,0x0F,0xF0,0x02,0x40,0x62,0x40,0x2A,0x60,0x2A,0x50,0x32,0x50, +0x24,0x40,0x28,0xC0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x04,0x40,0x4E,0x40,0x2A,0x80,0x0E,0xF0,0x0B,0x20,0x4E,0xA0,0x24,0xA0,0x1E,0xA0, +0x08,0x40,0x2E,0x40,0x4A,0xA0,0x17,0x10,0x00,0x00, +/* */ +0x20,0x00,0x17,0xC0,0x04,0x40,0x04,0x40,0x64,0x40,0x24,0x40,0x24,0x40,0x24,0x40, +0x24,0x40,0x34,0x50,0x28,0x50,0x10,0x30,0x00,0x00, +/* */ +0x01,0x00,0x7B,0xE0,0x0A,0x20,0x4A,0xA0,0x2A,0x60,0x2A,0x00,0x13,0xF0,0x10,0x10, +0x28,0x10,0x2F,0xD0,0x48,0x10,0x00,0x60,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x40,0x7A,0x40,0x2A,0xF0,0x2A,0x90,0x2A,0x90,0x4A,0x90, +0x2A,0xF0,0x12,0x40,0x2A,0x40,0x4B,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x20,0x80,0x4B,0xE0,0x70,0x80,0x17,0xF0,0x20,0x00,0x77,0xF0, +0x04,0x90,0x14,0x90,0x61,0x60,0x06,0x10,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x23,0xE0,0x48,0x00,0x77,0xF0,0x12,0x20,0x23,0xE0,0x7A,0x20, +0x03,0xE0,0x1A,0x30,0x67,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0,0x00,0x00,0x3F,0xE0, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x12,0x20,0x7A,0x20,0x12,0x40,0x32,0x70,0x3A,0x10,0x53,0x10, +0x12,0xA0,0x14,0x40,0x14,0xA0,0x19,0x10,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x7D,0xF0,0x10,0x40,0x7D,0xF0,0x55,0x50,0x5D,0x70,0x10,0x40, +0x38,0xE0,0x55,0x50,0x10,0x40,0x10,0x40,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x7B,0xE0,0x20,0x00,0x37,0xF0,0x52,0x20,0x7B,0xE0,0x12,0x20, +0x1B,0xE0,0x72,0x30,0x17,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x3D,0xF0,0x4A,0x20,0x11,0x40,0x7B,0xE0,0x11,0x40,0x3B,0xF0,0x10,0x00,0x7B,0xE0, +0x12,0x20,0x3B,0xE0,0x56,0x20,0x13,0xE0,0x00,0x00, +/* */ +0x09,0x00,0x1F,0xF0,0x31,0x00,0x5F,0xE0,0x11,0x00,0x1F,0xE0,0x11,0x00,0x1F,0xF0, +0x02,0x00,0x7F,0xF0,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x08,0x20,0x08,0x40,0x08,0x80,0x0C,0xF0,0x14,0x10,0x12,0x20, +0x11,0x40,0x20,0x80,0x23,0x40,0x4C,0x30,0x00,0x00, +/* */ +0x10,0x00,0x1F,0x80,0x20,0x80,0x5F,0xE0,0x00,0x20,0x1F,0xE0,0x00,0x20,0x3F,0xE0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x32,0x00,0x13,0xE0,0x14,0x80,0x30,0x80, +0x57,0xF0,0x11,0x40,0x22,0x20,0x44,0x10,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xC0,0x24,0x40,0x04,0x40,0x04,0x80,0x44,0xE0,0x24,0x20,0x06,0x20, +0x05,0x40,0x28,0x80,0x49,0x40,0x12,0x30,0x00,0x00, +/* */ +0x00,0x00,0x3E,0xF0,0x22,0x90,0x3E,0x90,0x22,0x90,0x3E,0x90,0x20,0x90,0x28,0x90, +0x24,0x90,0x2A,0xB0,0x32,0x80,0x20,0x80,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7A,0x80,0x2E,0x80,0x2A,0xF0,0x2B,0x40,0x4E,0x40, +0x2B,0xF0,0x12,0x40,0x2C,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x22,0x20,0x4A,0x20,0x72,0x40,0x12,0x70,0x22,0x10,0x7B,0x10, +0x02,0xA0,0x1C,0x40,0x64,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x79,0x20,0x10,0xC0,0x11,0x20,0x1A,0x10,0x71,0x20, +0x11,0x20,0x11,0x20,0x11,0x20,0x32,0x20,0x00,0x00, +/* */ +0x00,0x00,0x1F,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80, +0x10,0x80,0x10,0x90,0x20,0x90,0x40,0x70,0x00,0x00, +/* */ +0x22,0x20,0x12,0x40,0x25,0x20,0x48,0x90,0x10,0x40,0x3F,0xE0,0x50,0x50,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x10,0xC0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x00,0x20,0x00,0x20,0x00,0x20,0x3F,0xE0,0x20,0x00,0x20,0x00, +0x20,0x10,0x20,0x10,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x28,0x80,0x3E,0x10,0x42,0x50,0x3F,0x50,0x29,0x50,0x3F,0x50, +0x29,0x50,0x3F,0x50,0x00,0x10,0x7F,0xB0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x78,0x80,0x10,0x80,0x17,0xE0,0x1A,0x20,0x72,0x20, +0x11,0x40,0x10,0x80,0x11,0x40,0x36,0x30,0x00,0x00, +/* */ +0x09,0x20,0x79,0xC0,0x09,0x10,0x78,0xF0,0x1F,0xC0,0x12,0x40,0x1F,0xC0,0x12,0x40, +0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x10,0x40,0x00,0x00, +/* */ +0x01,0xC0,0x1E,0x00,0x02,0x00,0x7F,0xF0,0x0A,0x80,0x12,0x40,0x6F,0xB0,0x01,0x00, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x17,0xF0,0x10,0x80,0x30,0x80,0x57,0xE0,0x12,0x20,0x12,0x20, +0x11,0x40,0x10,0x80,0x11,0x40,0x16,0x30,0x00,0x00, +/* */ +0x11,0x00,0x3D,0xF0,0x55,0x10,0x28,0xA0,0x10,0x40,0x2F,0xA0,0x40,0x10,0x3F,0xE0, +0x02,0x00,0x12,0x40,0x22,0x20,0x46,0x10,0x00,0x00, +/* */ +0x10,0x10,0x08,0x10,0x7F,0x50,0x02,0x50,0x34,0x50,0x0C,0x50,0x12,0x50,0x61,0x50, +0x12,0x50,0x12,0x10,0x12,0x10,0x22,0x30,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x18,0x80,0x57,0xF0,0x51,0xC0,0x52,0xA0,0x55,0xD0,0x10,0x40, +0x10,0x80,0x17,0xF0,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x01,0x00,0x40,0x80,0x2F,0xF0,0x02,0x40,0x01,0x80,0x42,0x40,0x2C,0x30,0x02,0x40, +0x02,0x40,0x22,0x40,0x44,0x40,0x08,0x40,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x42,0x10,0x3F,0xE0,0x08,0x80,0x10,0x40,0x7F,0xF0,0x00,0x40, +0x3E,0x40,0x22,0x40,0x3E,0x40,0x00,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x10,0x00,0x1D,0xE0,0x11,0x20,0x7D,0x20,0x11,0x20, +0x39,0x40,0x54,0x80,0x11,0x40,0x32,0x30,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x00,0x80,0x00,0x80,0x70,0x80,0x17,0xF0,0x10,0x80,0x10,0x80, +0x14,0x80,0x18,0x80,0x10,0x80,0x00,0x80,0x00,0x00, +/* */ +0x20,0x00,0x13,0xE0,0x00,0x20,0x00,0x20,0x70,0x20,0x13,0xE0,0x12,0x00,0x12,0x00, +0x16,0x00,0x1A,0x10,0x12,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x48,0x80,0x7A,0x80,0x4A,0x80,0x7B,0xF0,0x40,0x80,0x50,0x80, +0x49,0x40,0x55,0x40,0x62,0x50,0x44,0x30,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x00,0x20,0x00,0x20,0x3F,0xE0,0x20,0x00,0x20,0x10,0x1F,0xF0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x48,0x00,0x48,0x00,0x57,0xF0,0x50,0x80,0x48,0x80,0x4A,0xA0, +0x4A,0x90,0x74,0x90,0x40,0x80,0x41,0x80,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x13,0xF0,0x78,0x80,0x28,0x80,0x2F,0xE0,0x2A,0x20,0x4A,0x20, +0x29,0x40,0x10,0x80,0x29,0x40,0x46,0x30,0x00,0x00, +/* */ +0x10,0x40,0x12,0x40,0x23,0x50,0x4A,0xE0,0x72,0x40,0x13,0xF0,0x22,0x40,0x7A,0xE0, +0x03,0x50,0x1A,0x40,0x62,0x40,0x03,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x20,0x20,0x48,0x20,0x70,0x20,0x13,0xE0,0x22,0x00,0x7A,0x00, +0x02,0x00,0x1A,0x10,0x62,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x10,0x40,0x1F,0xC0,0x08,0x80,0x7F,0xF0, +0x10,0x00,0x7E,0xF0,0x12,0x90,0x66,0xF0,0x00,0x00, +/* */ +0x24,0x00,0x24,0x00,0x24,0x70,0x7F,0x50,0x25,0x50,0x25,0x50,0x75,0x50,0x65,0x50, +0x25,0x50,0x25,0x50,0x29,0x70,0x33,0x50,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x12,0x40,0x0A,0x80,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x13,0xE0,0x10,0x80,0x30,0x80,0x57,0xF0,0x10,0x00,0x10,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x3F,0xE0,0x04,0x00,0x0A,0x20,0x35,0x40,0x09,0x80, +0x33,0x40,0x0D,0x30,0x71,0x00,0x06,0x00,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x10,0xF0,0x7E,0x90,0x12,0x90,0x12,0x90,0x12,0x90,0x12,0x90, +0x12,0x90,0x22,0x90,0x22,0xF0,0x4C,0x90,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x3F,0xE0,0x02,0x00,0x12,0x40,0x0A,0x80, +0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x7C,0x40,0x10,0x80,0x55,0xF0,0x39,0x10,0x11,0x50,0x7D,0x50, +0x11,0x50,0x28,0x40,0x24,0xA0,0x41,0x10,0x00,0x00, +/* */ +0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x48,0x90,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x20,0x00,0x37,0xF0,0x44,0x90,0x04,0x90,0x77,0xF0,0x24,0x90,0x24,0x90,0x77,0xF0, +0x24,0x90,0x20,0x80,0x30,0x80,0x20,0x80,0x00,0x00, +/* */ +0x10,0x00,0x1E,0xF0,0x2A,0x10,0x2A,0x10,0x6E,0xF0,0x28,0x00,0x2E,0xF0,0x28,0x90, +0x2E,0x90,0x28,0x60,0x28,0xA0,0x29,0x10,0x00,0x00, +/* */ +0x08,0x80,0x77,0xF0,0x14,0x10,0x13,0xE0,0x79,0x00,0x12,0x90,0x35,0x60,0x3A,0xC0, +0x55,0x60,0x12,0x50,0x14,0x40,0x11,0x80,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x11,0x40,0x12,0x20,0x34,0x10,0x52,0x20,0x12,0x20,0x12,0x20, +0x12,0x20,0x12,0x20,0x12,0x20,0x14,0x20,0x00,0x00, +/* */ +0x10,0x00,0x7E,0xF0,0x12,0x90,0x12,0x90,0x22,0x90,0x4C,0xF0,0x02,0x00,0x7F,0xF0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x10,0x00,0x7E,0xF0,0x12,0x90,0x22,0x90,0x4C,0xF0,0x00,0x00,0x3F,0xC0,0x10,0x40, +0x1F,0xF0,0x00,0x10,0x7F,0x10,0x00,0x60,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x10,0x7B,0xE0,0x29,0x00,0x2A,0x90,0x2C,0xE0,0x49,0x40, +0x2A,0xE0,0x11,0x50,0x2A,0x40,0x49,0x80,0x00,0x00, +/* */ +0x00,0x30,0x7D,0xC0,0x10,0x40,0x10,0x40,0x1C,0x40,0x27,0xF0,0x24,0x40,0x54,0x40, +0x08,0x40,0x10,0x40,0x20,0x40,0x40,0x40,0x00,0x00, +/* */ +0x04,0x80,0x24,0x80,0x24,0xF0,0x25,0x00,0x26,0x40,0x04,0x20,0x00,0x00,0x3F,0xE0, +0x25,0x20,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x4B,0xE0,0x4A,0x20,0x49,0x40,0x48,0x80,0x49,0x40,0x0A,0x30,0x02,0x00, +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x12,0x40,0x12,0x20,0x22,0x10,0x42,0x10,0x00,0x00,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x09,0x20,0x04,0x80,0x07,0xE0,0x3C,0x00,0x05,0xF0, +0x7E,0x40,0x02,0x80,0x03,0x10,0x3C,0xF0,0x00,0x00, +/* */ +0x27,0xF0,0x10,0x10,0x00,0x10,0x2F,0xD0,0x28,0x50,0x28,0x50,0x2F,0xD0,0x28,0x50, +0x28,0x50,0x2F,0xD0,0x20,0x10,0x20,0x70,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x00,0x00,0x3E,0x20,0x22,0xA0,0x3E,0xA0,0x22,0xA0,0x3E,0xA0, +0x22,0xA0,0x26,0x60,0x00,0x00,0x25,0x20,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x7F,0xF0,0x05,0x00,0x3F,0xE0,0x05,0x20,0x7F,0xF0,0x05,0x20, +0x3F,0xE0,0x15,0x40,0x25,0x20,0x45,0x10,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x00,0x2F,0xF0,0x28,0x10,0x2F,0xF0, +0x28,0x10,0x2F,0xF0,0x28,0x10,0x48,0x30,0x00,0x00, +/* */ +0x03,0xE0,0x7A,0x20,0x0A,0x20,0x4B,0xE0,0x2A,0x20,0x2A,0x20,0x13,0xE0,0x12,0x90, +0x2A,0xA0,0x2A,0x40,0x4B,0x20,0x02,0x10,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x80,0x78,0x80,0x28,0x80,0x28,0x80,0x2F,0xF0,0x48,0x80, +0x28,0x80,0x10,0x80,0x28,0x80,0x48,0x80,0x00,0x00, +/* */ +0x20,0x50,0x20,0x40,0x47,0xF0,0x54,0x40,0x67,0x40,0x24,0x50,0x47,0x50,0x75,0x60, +0x05,0x60,0x17,0x50,0x64,0xB0,0x09,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x02,0x00,0x02,0x20,0x7F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0x40,0x7A,0x20,0x14,0x10,0x33,0xE0,0x38,0x00,0x51,0x20, +0x14,0xA0,0x12,0xA0,0x12,0x40,0x17,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x2A,0xA0,0x27,0x20,0x3F,0xE0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x00,0x50,0x70,0x40,0x27,0xF0,0x24,0x40,0x47,0x40,0x74,0x50,0x57,0x50,0x55,0x60, +0x55,0x60,0x77,0x50,0x54,0xB0,0x09,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x11,0x40,0x12,0x20,0x24,0x10,0x3B,0xE0,0x68,0x00,0x29,0x20, +0x2C,0xA0,0x2A,0xA0,0x3A,0x40,0x2F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x79,0x00,0x17,0x80,0x12,0x80,0x1B,0xF0,0x70,0x80, +0x12,0xA0,0x12,0x90,0x14,0x90,0x31,0x80,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0x40,0x7A,0x20,0x14,0x10,0x13,0xE0,0x18,0x00,0x71,0x20, +0x14,0xA0,0x12,0xA0,0x12,0x40,0x37,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x27,0xE0,0x10,0x20,0x0F,0xA0,0x28,0xA0,0x2F,0xA0, +0x28,0xA0,0x2F,0xA0,0x20,0x20,0x20,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x11,0x40,0x12,0x20,0x34,0x10,0x53,0xE0,0x10,0x00,0x11,0x20, +0x14,0xA0,0x12,0xA0,0x12,0x40,0x17,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x22,0x20,0x3E,0xA0,0x22,0xA0,0x3E,0xA0,0x22,0x20,0x26,0x60, +0x00,0x00,0x3F,0xE0,0x08,0x20,0x70,0xC0,0x00,0x00, +/* */ +0x00,0x50,0x00,0x40,0x5F,0xF0,0x30,0x40,0x17,0x40,0x10,0x50,0x17,0x50,0x15,0x60, +0x35,0x60,0x57,0x50,0x10,0xB0,0x21,0x10,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x04,0x00,0x7F,0xF0,0x08,0x00,0x13,0xE0,0x30,0x40, +0x50,0x80,0x17,0xF0,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x11,0x40,0x15,0x40,0x15,0x70,0x7D,0x80,0x15,0x20,0x31,0x10,0x38,0x00,0x57,0xF0, +0x15,0x50,0x15,0x50,0x15,0x50,0x1F,0xF0,0x00,0x00, +/* */ +0x09,0x00,0x29,0xF0,0x2A,0x40,0x2D,0x20,0x18,0xC0,0x60,0x30,0x1F,0xC0,0x02,0x00, +0x3F,0xE0,0x12,0x40,0x0A,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0xA0,0x78,0x90,0x48,0xF0,0x4B,0x80,0x78,0x80,0x10,0xF0,0x13,0x80,0x58,0xA0, +0x50,0xC0,0x50,0x90,0x59,0x50,0x66,0x30,0x00,0x00, +/* */ +0x00,0xA0,0x7C,0x90,0x44,0xF0,0x57,0x80,0x54,0x80,0x54,0xF0,0x57,0x80,0x54,0xA0, +0x54,0xC0,0x10,0x90,0x29,0x50,0x46,0x30,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x20,0x20,0x22,0x20,0x22,0x20,0x22,0x20,0x22,0x20,0x25,0x20, +0x05,0x00,0x09,0x10,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x31,0xE0,0x4C,0xA0,0x07,0xF0,0x74,0xA0,0x29,0xE0,0x2C,0x80,0x77,0xE0, +0x24,0x80,0x2F,0xF0,0x34,0x80,0x2B,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x10,0x00,0x08,0x80,0x7F,0xF0,0x22,0x20,0x3E,0xA0, +0x22,0xA0,0x3E,0xA0,0x22,0x20,0x26,0x60,0x00,0x00, +/* */ +0x10,0x80,0x14,0x80,0x24,0x80,0x27,0xF0,0x68,0x80,0x20,0x80,0x20,0x80,0x2F,0xF0, +0x20,0x80,0x20,0x80,0x20,0x80,0x20,0x80,0x00,0x00, +/* */ +0x10,0x80,0x11,0xE0,0x2C,0xA0,0x27,0xF0,0x64,0xA0,0x29,0xE0,0x2C,0x80,0x27,0xE0, +0x24,0x80,0x2F,0xF0,0x24,0x80,0x2B,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x3D,0xF0,0x25,0x10,0x35,0x50,0x2D,0x50,0x25,0x50,0x7D,0x50,0x25,0x50, +0x34,0x80,0x2C,0xC0,0x25,0x50,0x4E,0x30,0x00,0x00, +/* */ +0x04,0x10,0x04,0x10,0x0A,0x50,0x11,0x50,0x20,0xD0,0x5F,0x50,0x08,0x50,0x25,0x50, +0x15,0x50,0x12,0x10,0x07,0x10,0x78,0x30,0x00,0x00, +/* */ +0x21,0x40,0x21,0x20,0x39,0x70,0x4F,0x80,0x11,0x00,0x21,0x70,0x2F,0x80,0x21,0x20, +0x20,0xC0,0x28,0x90,0x33,0x50,0x2C,0x30,0x00,0x00, +/* */ +0x04,0x10,0x44,0xE0,0x3E,0x80,0x08,0x80,0x14,0xF0,0x5E,0xA0,0x24,0xA0,0x06,0xA0, +0x1C,0xA0,0x24,0xA0,0x44,0xA0,0x05,0x20,0x00,0x00, +/* */ +0x00,0x50,0x5F,0x40,0x31,0x70,0x15,0xC0,0x15,0x70,0x55,0xC0,0x35,0x50,0x15,0x50, +0x15,0x60,0x24,0x50,0x4A,0xB0,0x11,0x10,0x00,0x00, +/* */ +0x08,0x00,0x45,0xF0,0x20,0x10,0x0B,0xD0,0x0A,0x50,0x4A,0x50,0x2B,0xD0,0x0A,0x50, +0x0A,0x50,0x2B,0xD0,0x48,0x10,0x08,0x70,0x00,0x00, +/* */ +0x01,0x00,0x77,0xE0,0x11,0x20,0x2F,0xF0,0x41,0x20,0x77,0xE0,0x11,0x00,0x17,0xE0, +0x51,0x00,0x2F,0xF0,0x31,0x00,0x4F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x25,0x20,0x27,0xE0,0x65,0x20,0x27,0xE0,0x20,0x00,0x2F,0xF0, +0x25,0x20,0x27,0xE0,0x25,0x20,0x2F,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x04,0x00, +0x7F,0xF0,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x52,0x20,0x35,0x40,0x10,0x80,0x13,0x20,0x1F,0xF0,0x30,0x20, +0x52,0x20,0x11,0x20,0x10,0x20,0x10,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x48,0xF0,0x29,0x10,0x0A,0xA0,0x28,0x40,0x4B,0x80,0x02,0x20,0x7B,0x40, +0x0A,0x80,0x12,0x40,0x62,0x30,0x06,0x00,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xE0,0x21,0x00,0x01,0x00,0x01,0x00,0x41,0x00,0x21,0x00,0x01,0x00, +0x11,0x00,0x21,0x00,0x41,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x0A,0xA0,0x7B,0xE0,0x42,0xA0,0x7B,0xE0,0x28,0x00,0x7F,0xF0, +0x2A,0xA0,0x7B,0xE0,0x0A,0xA0,0x37,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x12,0x00,0x57,0xE0,0x3A,0x40,0x11,0x80,0x16,0x40, +0x3F,0xF0,0x54,0x40,0x12,0x40,0x10,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x48,0xF0,0x29,0x10,0x0A,0xA0,0x28,0x40,0x49,0x80,0x02,0x00,0x7F,0xF0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x08,0x80,0x48,0xF0,0x29,0x10,0x0A,0xA0,0x28,0x40,0x48,0x80,0x09,0x00,0x02,0x00, +0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x22,0x40,0x12,0x40,0x02,0x40,0x0F,0xF0,0x62,0x40,0x22,0x40,0x22,0x40,0x2F,0xF0, +0x22,0x40,0x32,0x40,0x24,0x40,0x08,0x40,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x00,0x20,0x60,0x27,0x80,0x24,0x00,0x24,0x00,0x27,0xF0,0x24,0x40, +0x24,0x40,0x24,0x40,0x28,0x40,0x3F,0xF0,0x00,0x00, +/* */ +0x28,0x80,0x19,0xF0,0x0B,0x20,0x18,0xC0,0x2B,0x00,0x7F,0xF0,0x08,0x80,0x3F,0xE0, +0x28,0xA0,0x37,0x60,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x01,0x00,0x79,0xE0,0x4B,0x20,0x48,0xC0,0x53,0x30,0x50,0x80,0x4B,0xE0,0x48,0x80, +0x4A,0x80,0x73,0xF0,0x40,0x80,0x40,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x1F,0xF0,0x31,0x00,0x5F,0xE0,0x11,0x00,0x1F,0xE0, +0x11,0x00,0x1F,0xF0,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x12,0x00,0x12,0xF0,0x13,0x50,0x7A,0x50,0x17,0xD0,0x30,0x50,0x3A,0x50,0x52,0x50, +0x17,0x20,0x1A,0xA0,0x12,0x50,0x16,0x90,0x00,0x00, +/* */ +0x01,0x40,0x79,0x20,0x13,0xF0,0x16,0x40,0x23,0xF0,0x3A,0x40,0x6B,0xF0,0x2A,0x40, +0x2B,0xF0,0x3A,0x00,0x25,0x50,0x05,0x50,0x00,0x00, +/* */ +0x09,0x00,0x10,0x80,0x3F,0xF0,0x51,0x00,0x1F,0xE0,0x11,0x00,0x1F,0xE0,0x11,0x00, +0x1F,0xF0,0x10,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x01,0x00,0x38,0x80,0x2B,0xF0,0x28,0x00,0x39,0x40,0x2A,0x20,0x2D,0x50,0x39,0x40, +0x29,0x40,0x28,0x80,0x29,0x40,0x5A,0x30,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00,0x08,0x80,0x10,0x40,0x28,0xA0,0x05,0x00, +0x02,0x00,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x10,0x00,0x08,0xF0,0x7E,0x90,0x00,0x90,0x24,0xA0,0x22,0xA0,0x40,0x90,0x14,0x90, +0x08,0x90,0x14,0xE0,0x22,0x80,0x40,0x80,0x00,0x00, +/* */ +0x01,0x00,0x41,0xF0,0x2F,0x20,0x01,0x40,0x00,0x90,0x47,0x70,0x20,0x00,0x0F,0xF0, +0x02,0x40,0x22,0x40,0x44,0x50,0x08,0x30,0x00,0x00, +/* */ +0x00,0x60,0x7B,0x80,0x08,0x80,0x2B,0xF0,0x29,0x40,0x2A,0x20,0x3C,0x10,0x05,0x20, +0x15,0x20,0x65,0x20,0x05,0x20,0x1A,0x20,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x10,0x80,0x7B,0xF0,0x29,0x40,0x2A,0x20,0x2C,0x10,0x49,0x20, +0x29,0x20,0x11,0x20,0x29,0x20,0x4A,0x20,0x00,0x00, +/* */ +0x00,0x70,0x77,0x80,0x52,0xA0,0x57,0xF0,0x55,0x50,0x57,0xF0,0x50,0x20,0x57,0x70, +0x75,0x20,0x57,0x60,0x05,0x20,0x06,0xE0,0x00,0x00, +/* */ +0x15,0x10,0x12,0xA0,0x17,0xF0,0x7C,0x10,0x13,0xE0,0x12,0x20,0x1A,0xA0,0x72,0xA0, +0x12,0xA0,0x11,0x50,0x12,0x50,0x34,0x30,0x00,0x00, +/* */ +0x21,0x00,0x20,0x80,0x37,0xF0,0x40,0x00,0x71,0x40,0x22,0x20,0x25,0x50,0x79,0x40, +0x21,0x40,0x28,0x80,0x31,0x40,0x26,0x30,0x00,0x00, +/* */ +0x20,0x60,0x23,0x80,0x38,0x80,0x53,0xF0,0x11,0x40,0x12,0x20,0x7C,0x10,0x11,0x20, +0x11,0x20,0x29,0x20,0x29,0x20,0x42,0x20,0x00,0x00, +/* */ +0x11,0x00,0x11,0xF0,0x2F,0x20,0x21,0x40,0x60,0x90,0x27,0x70,0x20,0x00,0x2F,0xF0, +0x22,0x40,0x22,0x40,0x24,0x50,0x28,0x30,0x00,0x00, +/* */ +0x02,0x00,0x72,0x70,0x57,0x50,0x52,0x50,0x72,0x50,0x57,0x50,0x52,0x50,0x74,0x50, +0x55,0x50,0x57,0x70,0x50,0x40,0x30,0x40,0x00,0x00, +/* */ +0x09,0x00,0x28,0x80,0x17,0xF0,0x28,0x00,0x49,0x40,0x0A,0x20,0x1D,0x50,0x29,0x40, +0x49,0x40,0x08,0x80,0x09,0x40,0x36,0x30,0x00,0x00, +/* */ +0x10,0x00,0x1F,0x80,0x20,0x80,0x41,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x3F,0xE0,0x22,0x20,0x22,0x20,0x40,0x60,0x00,0x00, +/* */ +0x21,0x00,0x20,0x80,0x3B,0xF0,0x48,0x00,0x11,0x40,0x22,0x20,0x25,0x50,0x21,0x40, +0x21,0x40,0x28,0x80,0x31,0x40,0x26,0x30,0x00,0x00, +/* */ +0x12,0x40,0x17,0x40,0x25,0x40,0x4F,0x70,0x75,0xA0,0x17,0x20,0x22,0xA0,0x7F,0xA0, +0x04,0xA0,0x17,0x40,0x65,0xA0,0x0B,0x10,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x23,0xF0,0x48,0x00,0x71,0x40,0x12,0x20,0x25,0x50,0x79,0x40, +0x01,0x40,0x18,0x80,0x61,0x40,0x06,0x30,0x00,0x00, +/* */ +0x2A,0x10,0x54,0x10,0x2A,0x50,0x3E,0x50,0x2A,0x50,0x3E,0x50,0x2A,0x50,0x3E,0x50, +0x08,0x50,0x7F,0x10,0x2A,0x10,0x49,0x30,0x00,0x00, +/* */ +0x10,0x80,0x3A,0x80,0x14,0x80,0x7E,0xF0,0x11,0x20,0x7C,0xA0,0x24,0xA0,0x48,0xA0, +0x0E,0xA0,0x78,0x40,0x08,0xA0,0x19,0x10,0x00,0x00, +/* */ +0x00,0x80,0x7D,0xD0,0x10,0xA0,0x7F,0xF0,0x54,0x80,0x57,0xE0,0x6D,0x20,0x46,0x40, +0x7D,0xF0,0x44,0x40,0x7C,0x40,0x44,0xC0,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x78,0x80,0x27,0xF0,0x31,0x40,0x52,0x20,0x7C,0x10,0x12,0x20, +0x1A,0x20,0x72,0x20,0x12,0x20,0x14,0x20,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x7B,0xF0,0x20,0x00,0x31,0x40,0x52,0x20,0x7D,0x50,0x11,0x40, +0x19,0x40,0x70,0x80,0x11,0x40,0x16,0x30,0x00,0x00, +/* */ +0x00,0x20,0x7A,0x20,0x4A,0x20,0x4A,0x20,0x4A,0x20,0x4A,0x20,0x4A,0x20,0x4A,0x60, +0x7B,0xA0,0x4A,0x20,0x00,0x20,0x00,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x50,0x50,0x22,0x20,0x12,0x00,0x1F,0xE0,0x22,0x00,0x7F,0xF0, +0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x27,0xE0,0x24,0x20,0x27,0xE0,0x74,0x20,0x27,0xE0,0x22,0x00,0x37,0xF0,0x68,0x90, +0x21,0x50,0x24,0x10,0x27,0x90,0x60,0x30,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x7A,0x20,0x11,0x40,0x17,0xF0,0x18,0x80,0x77,0xF0, +0x11,0x20,0x13,0x20,0x10,0xC0,0x37,0x30,0x00,0x00, +/* */ +0x21,0x20,0x3D,0x40,0x21,0x80,0x2D,0x10,0x30,0xF0,0x04,0x00,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x08,0x80,0x70,0x80,0x17,0xF0,0x10,0x80,0x78,0x80,0x13,0xE0,0x30,0x00,0x3B,0xE0, +0x52,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x12,0x00,0x22,0x70,0x47,0x00,0x12,0x00,0x22,0x70,0x6F,0xA0,0x20,0x20,0x22,0x20, +0x27,0x20,0x22,0x20,0x23,0xA0,0x2C,0x60,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x49,0x40,0x4A,0x20,0x54,0x10,0x51,0x20,0x49,0x20,0x49,0x20, +0x49,0x20,0x72,0x20,0x42,0x20,0x44,0x20,0x00,0x00, +/* */ +0x08,0xA0,0x3E,0x90,0x08,0x80,0x7F,0xF0,0x14,0x80,0x3F,0xA0,0x64,0xA0,0x3F,0xA0, +0x24,0x40,0x3F,0x50,0x24,0xB0,0x3F,0x10,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x3E,0x80,0x09,0xF0,0x08,0x90,0x7F,0x90,0x08,0x90,0x10,0x90, +0x25,0x10,0x3D,0x10,0x02,0x10,0x04,0x60,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x7F,0xE0,0x04,0x20,0x04,0x20, +0x04,0x20,0x04,0x60,0x04,0x00,0x04,0x00,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x78,0x80,0x10,0x80,0x3B,0xE0,0x34,0x00,0x53,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x07,0x00,0x0A,0x80,0x12,0x40,0x62,0x30, +0x02,0x00,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x10,0x80,0x13,0xF0,0x10,0x80,0x7B,0xE0,0x10,0xA0,0x13,0xF0,0x18,0xA0,0x73,0xE0, +0x10,0x80,0x12,0xF0,0x12,0x80,0x35,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x77,0xF0,0x51,0x00,0x57,0xE0,0x71,0x20,0x5F,0xF0,0x51,0x20,0x77,0xE0, +0x51,0x00,0x55,0xE0,0x75,0x00,0x5B,0xF0,0x00,0x00, +/* */ +0x23,0xE0,0x12,0x20,0x03,0xE0,0x7A,0x20,0x03,0xE0,0x49,0x00,0x2B,0xF0,0x2C,0x90, +0x01,0x50,0x1A,0x10,0x63,0x90,0x00,0x60,0x00,0x00, +/* */ +0x01,0x00,0x41,0x00,0x2F,0xF0,0x01,0x00,0x01,0x00,0x4F,0xE0,0x20,0x00,0x0F,0xE0, +0x08,0x20,0x28,0x20,0x4F,0xE0,0x08,0x20,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x27,0xF0,0x48,0x80,0x70,0x80,0x13,0xE0,0x20,0x00,0x7B,0xE0, +0x02,0x20,0x1A,0x20,0x63,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x11,0xF0,0x1C,0x90,0x24,0x90,0x49,0x30,0x3E,0x00,0x2A,0xA0,0x3E,0xF0,0x2B,0x20, +0x3E,0x20,0x2A,0xF0,0x2A,0x20,0x46,0x20,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x7A,0x20,0x2B,0xE0,0x2A,0x20,0x2A,0x20,0x4B,0xE0, +0x2A,0x20,0x12,0x20,0x2A,0x20,0x47,0xF0,0x00,0x00, +/* */ +0x00,0xA0,0x00,0x80,0x7F,0xF0,0x00,0x80,0x14,0x90,0x14,0x90,0x7F,0xA0,0x14,0xA0, +0x14,0x40,0x14,0x50,0x24,0xB0,0x45,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x11,0x40,0x7B,0xE0,0x11,0x40,0x3B,0xF0,0x10,0x00,0x7B,0xE0, +0x12,0x20,0x3B,0xE0,0x56,0x20,0x13,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x05,0x00,0x18,0xC0,0x60,0x30,0x08,0x80, +0x08,0x80,0x08,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x02,0x00,0x0D,0x80,0x70,0x70, +0x08,0x80,0x08,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x12,0x40,0x12,0x40,0x27,0xE0,0x22,0x40,0x6F,0xF0,0x20,0x00,0x27,0xE0,0x24,0x20, +0x27,0xE0,0x24,0x20,0x27,0xE0,0x24,0x20,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x08,0x80,0x08,0x80, +0x08,0x80,0x10,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x51,0x00,0x32,0x80,0x14,0x40,0x18,0x30,0x32,0x40, +0x52,0x40,0x12,0x40,0x24,0x40,0x48,0x40,0x00,0x00, +/* */ +0x40,0x50,0x20,0x40,0x0F,0xF0,0x00,0x40,0x65,0x40,0x25,0x50,0x2F,0xD0,0x25,0x60, +0x25,0x60,0x35,0x50,0x28,0xB0,0x01,0x10,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x21,0x00,0x21,0x00,0x2F,0xF0,0x29,0x10,0x29,0x10, +0x2F,0xF0,0x29,0x10,0x29,0x10,0x4F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20,0x22,0x20,0x22,0x20, +0x22,0x20,0x22,0x60,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x3C,0x80,0x25,0xF0,0x3C,0x90,0x24,0x90, +0x3C,0x90,0x25,0x10,0x25,0x10,0x4E,0x60,0x00,0x00, +/* */ +0x00,0xE0,0x3F,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x3F,0xF0,0x20,0x80,0x20,0x80, +0x20,0x80,0x20,0x80,0x20,0x80,0x40,0x80,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x6F,0xB0,0x02,0x00,0x02,0x00,0x3F,0xE0, +0x02,0x00,0x12,0x40,0x0A,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x64,0x30,0x02,0x00,0x00,0x00,0x3F,0xC0, +0x00,0x40,0x00,0x80,0x01,0x00,0x02,0x00,0x00,0x00, +/* */ +0x01,0x00,0x47,0xE0,0x21,0x20,0x0F,0xF0,0x01,0x20,0x47,0xE0,0x21,0x00,0x07,0xE0, +0x11,0x00,0x2F,0xF0,0x41,0x00,0x01,0x00,0x00,0x00, +/* */ +0x22,0x40,0x17,0xF0,0x7A,0x40,0x0E,0xE0,0x13,0x50,0x18,0x00,0x33,0xE0,0x58,0x00, +0x17,0xF0,0x12,0xA0,0x14,0x90,0x11,0x80,0x00,0x00, +/* */ +0x0B,0xE0,0x49,0x20,0x48,0xC0,0x4B,0x20,0x04,0x10,0x08,0x80,0x1F,0x00,0x04,0x40, +0x3F,0xE0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x20,0x80,0x3B,0xE0,0x42,0x20,0x03,0xE0,0x7A,0x20,0x23,0xE0,0x78,0x80,0x27,0xF0, +0x2C,0x90,0x34,0x90,0x24,0xB0,0x00,0x80,0x00,0x00, +/* */ +0x08,0x00,0x0F,0xF0,0x12,0x10,0x12,0x10,0x32,0x10,0x52,0x20,0x11,0x20,0x11,0x40, +0x10,0x80,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x22,0x20,0x17,0xF0,0x02,0x20,0x03,0xE0,0x70,0x80,0x17,0xF0,0x14,0x90,0x17,0xF0, +0x10,0x80,0x17,0xF0,0x18,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x22,0x40,0x12,0x40,0x07,0xE0,0x02,0x40,0x72,0x40,0x12,0x40,0x1F,0xF0,0x12,0x40, +0x12,0x40,0x14,0x40,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x28,0x30,0x7D,0xC0,0x29,0x00,0x39,0x00,0x11,0xF0,0x7D,0x20,0x55,0x20,0x7D,0x20, +0x11,0x20,0x7D,0x20,0x12,0x20,0x14,0x20,0x00,0x00, +/* */ +0x3F,0xE0,0x05,0x00,0x25,0x20,0x15,0x40,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x10,0x40,0x7D,0xF0,0x10,0x40,0x38,0xE0,0x55,0x50,0x10,0x40,0x3F,0xE0,0x00,0x00, +0x7F,0xF0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x20,0x60,0x13,0x80,0x02,0x00,0x02,0x00,0x73,0xF0,0x12,0x40,0x12,0x40,0x12,0x40, +0x12,0x40,0x14,0x40,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x16,0x20,0x5A,0x20,0x53,0xE0,0x52,0x80,0x52,0x40,0x14,0xA0, +0x18,0x50,0x29,0x00,0x24,0x80,0x40,0x40,0x00,0x00, +/* */ +0x47,0xE0,0x20,0x20,0x03,0xE0,0x00,0x20,0x47,0xE0,0x20,0x00,0x0F,0xF0,0x08,0x10, +0x07,0xE0,0x22,0x20,0x41,0xC0,0x0E,0x30,0x00,0x00, +/* */ +0x00,0x00,0x1F,0xE0,0x10,0x20,0x10,0x20,0x1F,0xE0,0x10,0x80,0x16,0x80,0x11,0x40, +0x20,0x20,0x4C,0x10,0x03,0x00,0x00,0x80,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x08,0x80,0x11,0xF0,0x28,0x90,0x44,0x90,0x02,0x90,0x7C,0x90, +0x10,0x90,0x11,0x10,0x1D,0x10,0x62,0x60,0x00,0x00, +/* */ +0x12,0x10,0x7F,0x90,0x12,0x50,0x00,0x50,0x3F,0x50,0x12,0x50,0x12,0x50,0x7F,0xD0, +0x12,0x50,0x12,0x10,0x22,0x10,0x42,0x30,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x7D,0xF0,0x10,0x40,0x7D,0xF0,0x45,0x10,0x45,0x10,0x7D,0xF0, +0x28,0x40,0x28,0xC0,0x2D,0x50,0x4A,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x00,0xC0,0x03,0x00,0x0C,0xC0,0x70,0x30, +0x1F,0xC0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x80,0x53,0xE0,0x70,0x80,0x57,0xF0,0x52,0x20,0x73,0xE0, +0x52,0x20,0x53,0xE0,0x72,0x20,0x52,0x60,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x7D,0xF0,0x45,0x10, +0x7D,0xF0,0x45,0x10,0x7D,0xF0,0x45,0x10,0x00,0x00, +/* */ +0x20,0x80,0x38,0x40,0x4B,0xF0,0x10,0x00,0x7D,0xF0,0x55,0x10,0x7D,0x10,0x55,0xF0, +0x7C,0x40,0x01,0x60,0x1A,0x50,0x60,0xC0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0, +0x02,0x00,0x12,0x40,0x22,0x20,0x46,0x10,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x58,0x00,0x53,0xE0,0x52,0x20,0x52,0x20,0x13,0xE0, +0x10,0x80,0x12,0xA0,0x14,0x90,0x11,0x80,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x58,0x80,0x33,0xE0,0x10,0x80,0x7F,0xF0,0x12,0x20,0x33,0xE0, +0x5A,0x20,0x13,0xE0,0x12,0x20,0x12,0x60,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x58,0x80,0x37,0xF0,0x14,0x90,0x7F,0xF0,0x14,0x90,0x37,0xF0, +0x5A,0x80,0x11,0x00,0x12,0x80,0x14,0x70,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x20,0x40,0x48,0x80,0x71,0x40,0x12,0x20,0x24,0x10,0x7B,0xE0, +0x00,0x80,0x18,0x80,0x60,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x08,0x80,0x3F,0xE0,0x08,0x80,0x08,0x80,0x08,0x80,0x7F,0xF0, +0x08,0x80,0x08,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x24,0x80,0x7E,0xF0,0x25,0x20,0x3E,0xA0,0x6A,0x40,0x3A,0xA0,0x05,0x10,0x7F,0xF0, +0x00,0x00,0x3F,0xE0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x10,0x40, +0x1F,0xC0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xF0,0x08,0x40,0x10,0x80,0x29,0xF0,0x45,0x10,0x03,0x50,0x7D,0x50, +0x11,0x50,0x10,0x40,0x1C,0xA0,0x61,0x10,0x00,0x00, +/* */ +0x11,0x00,0x7D,0xC0,0x12,0x40,0x3C,0x80,0x13,0xE0,0x7C,0xA0,0x2B,0xF0,0x38,0xA0, +0x2B,0xE0,0x38,0xA0,0x28,0x80,0x29,0x80,0x00,0x00, +/* */ +0x21,0x00,0x27,0xE0,0x22,0x40,0x2F,0xF0,0x70,0x00,0x27,0xE0,0x24,0x20,0x27,0xE0, +0x24,0x20,0x37,0xE0,0x62,0x50,0x0C,0x70,0x00,0x00, +/* */ +0x24,0x80,0x7E,0x80,0x24,0x80,0x10,0xF0,0x3F,0x20,0x42,0xA0,0x3A,0xA0,0x2A,0xA0, +0x2A,0xA0,0x3A,0x40,0x22,0xA0,0x0D,0x10,0x00,0x00, +/* */ +0x21,0x00,0x37,0xE0,0x42,0x40,0x0F,0xF0,0x70,0x00,0x27,0xE0,0x24,0x20,0x77,0xE0, +0x24,0x20,0x27,0xE0,0x32,0x50,0x2C,0x70,0x00,0x00, +/* */ +0x08,0x00,0x13,0xE0,0x20,0x40,0x48,0x80,0x11,0x40,0x32,0x20,0x54,0x10,0x13,0xE0, +0x10,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x37,0xE0,0x10,0x40,0x11,0xA0,0x36,0x10, +0x53,0xE0,0x10,0x80,0x20,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x17,0xF0,0x00,0x80,0x7B,0xE0,0x00,0x80,0x4F,0xF0,0x2A,0x20,0x2B,0xE0, +0x02,0x20,0x1B,0xE0,0x62,0x20,0x02,0x60,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x08,0x90,0x70,0x70,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x10,0x40,0x08,0x80,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x09,0x00,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x07,0xC0,0x48,0x40,0x20,0x80,0x0F,0xE0,0x01,0x20,0x1F,0xF0,0x01,0x20, +0x2F,0xE0,0x41,0x20,0x01,0x00,0x07,0x00,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x10,0x5C,0x10,0x55,0xD0,0x55,0x50,0x55,0x50,0x15,0x50, +0x15,0xD0,0x2C,0x10,0x24,0x10,0x44,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x50,0x50,0x3F,0xE0,0x04,0x40,0x7F,0xF0,0x08,0x40,0x3F,0xC0, +0x10,0x00,0x3F,0xE0,0x50,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x11,0x40,0x16,0x40,0x12,0x50,0x7A,0xD0,0x17,0x60,0x12,0x40,0x1B,0x40,0x76,0x40, +0x1A,0xA0,0x12,0xA0,0x12,0xA0,0x33,0x10,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x48,0x90,0x10,0x40,0x24,0x20,0x04,0x00,0x3F,0x80, +0x04,0x80,0x08,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x10,0x20,0x12,0x20,0x22,0x20,0x4A,0x20,0x72,0x20,0x12,0x20,0x22,0x20,0x7A,0x60, +0x03,0xA0,0x1A,0x20,0x60,0x20,0x00,0x20,0x00,0x00, +/* */ +0x01,0x00,0x79,0x00,0x11,0xE0,0x12,0x20,0x12,0x20,0x7C,0x40,0x10,0x40,0x10,0x80, +0x10,0x80,0x19,0x40,0x62,0x20,0x04,0x10,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x78,0xF0,0x08,0x80,0x08,0x80,0x78,0xF0,0x08,0x80,0x08,0x80, +0x78,0xF0,0x08,0x80,0x08,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x1F,0xC0,0x10,0x40,0x20,0x80,0x20,0x80,0x41,0x00,0x02,0x00, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x08,0x00,0x0F,0xC0,0x10,0x80,0x23,0x00,0x0C,0xC0,0x70,0x20,0x02,0x00,0x12,0x20, +0x22,0x40,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x08,0x00,0x08,0x00,0x08,0x00,0x7F,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80, +0x10,0x80,0x10,0x90,0x20,0x90,0x40,0x70,0x00,0x00, +/* */ +0x00,0x00,0x5F,0xF0,0x22,0x80,0x0F,0xE0,0x0A,0xA0,0x4A,0xA0,0x2C,0x60,0x08,0x20, +0x0F,0xE0,0x28,0x20,0x4F,0xE0,0x08,0x20,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x20,0x00,0x2E,0xF0,0x2A,0x20,0x2E,0xA0,0x2A,0xF0,0x2E,0x40, +0x28,0x60,0x2C,0xA0,0x2A,0xA0,0x4D,0x30,0x00,0x00, +/* */ +0x11,0x00,0x15,0x00,0x11,0x00,0x7D,0xF0,0x12,0x20,0x55,0x20,0x39,0x20,0x11,0x40, +0x38,0x80,0x55,0x40,0x12,0x20,0x34,0x10,0x00,0x00, +/* */ +0x00,0x00,0x27,0xF0,0x24,0x10,0x24,0x10,0x24,0x10,0x27,0xF0,0x24,0x10,0x24,0x10, +0x24,0x10,0x24,0x10,0x27,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x02,0x00,0x0C,0x00,0x30,0xF0,0x20,0x10,0x20,0x10,0x20,0x10,0x3C,0xF0,0x20,0x10, +0x20,0x10,0x20,0x10,0x3F,0xF0,0x20,0x10,0x00,0x00, +/* */ +0x04,0x00,0x39,0xE0,0x20,0x20,0x3D,0xE0,0x20,0x20,0x3F,0xE0,0x12,0x40,0x1F,0xC0, +0x12,0x40,0x7F,0xF0,0x08,0x10,0x70,0x60,0x00,0x00, +/* */ +0x10,0x80,0x1E,0xA0,0x22,0x90,0x54,0x90,0x08,0x80,0x17,0xF0,0x60,0x00,0x1F,0xE0, +0x10,0x20,0x10,0x20,0x1F,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x21,0x00,0x11,0x40,0x7D,0x20,0x03,0xF0,0x7D,0x40,0x45,0x40,0x45,0x40,0x7D,0x40, +0x11,0x40,0x59,0x50,0x55,0x50,0x32,0x30,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x31,0x00,0x11,0xE0,0x12,0x20,0x34,0x40, +0x50,0x80,0x11,0x40,0x22,0x20,0x4C,0x10,0x00,0x00, +/* */ +0x29,0x00,0x7D,0xF0,0x2A,0x10,0x38,0x90,0x12,0xB0,0x7C,0x90,0x57,0xF0,0x7C,0x90, +0x11,0xD0,0x7E,0xB0,0x10,0x90,0x10,0x60,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x11,0xF0,0x7A,0x10,0x14,0x10,0x13,0xD0,0x1A,0x50,0x72,0x50, +0x13,0xD0,0x12,0x10,0x10,0x10,0x30,0x60,0x00,0x00, +/* */ +0x08,0x00,0x2B,0xE0,0x12,0x20,0x2A,0x20,0x4B,0xE0,0x0A,0x20,0x1A,0x20,0x2B,0xE0, +0x4A,0x20,0x0A,0x20,0x0A,0x20,0x37,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x57,0xE0,0x34,0x20,0x14,0x20,0x17,0xE0,0x34,0x20, +0x57,0xE0,0x14,0x20,0x24,0x20,0x4F,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x21,0x00,0x3F,0xF0,0x21,0x00,0x2F,0xE0, +0x28,0x20,0x28,0x20,0x2F,0xE0,0x48,0x20,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x08,0xF0,0x29,0x10,0x2A,0x10,0x29,0xD0,0x3D,0x50,0x05,0x50, +0x15,0xD0,0x65,0x10,0x04,0x10,0x18,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x28,0x80,0x3F,0xE0,0x44,0x20,0x24,0xA0,0x15,0x20,0x7F,0xA0, +0x15,0x20,0x24,0xA0,0x44,0x20,0x05,0xC0,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x00,0x3F,0xF0,0x20,0x10,0x2F,0xD0,0x28,0x50, +0x28,0x50,0x2F,0xD0,0x28,0x10,0x40,0xE0,0x00,0x00, +/* */ +0x00,0x00,0x03,0xE0,0x7A,0x20,0x4A,0x20,0x4B,0xE0,0x4A,0x20,0x4A,0x20,0x4B,0xE0, +0x7A,0x20,0x4A,0x20,0x02,0x20,0x07,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x23,0xF0,0x3A,0x00,0x52,0x00,0x13,0xF0,0x12,0x10,0x7E,0x10,0x12,0x10, +0x13,0xF0,0x2A,0x00,0x2A,0x00,0x43,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x22,0x20,0x10,0x40,0x7F,0xF0,0x08,0x80,0x12,0x40,0x62,0x30,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x00,0x00,0x27,0xE0,0x14,0x20,0x04,0x20,0x47,0xE0,0x24,0x20,0x04,0x20,0x07,0xE0, +0x14,0x20,0x24,0x20,0x44,0x20,0x1F,0xF0,0x00,0x00, +/* */ +0x7E,0xF0,0x24,0x10,0x3C,0x50,0x27,0x20,0x7C,0xD0,0x04,0x00,0x01,0xE0,0x3E,0x00, +0x13,0x10,0x66,0xA0,0x0A,0x40,0x72,0x30,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x00,0x7A,0x00,0x13,0xF0,0x12,0x10,0x1A,0x10,0x72,0x10, +0x13,0xF0,0x12,0x00,0x12,0x00,0x33,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x10,0x7B,0xF0,0x12,0x40,0x13,0xF0,0x1A,0x40,0x73,0xF0, +0x13,0x10,0x15,0x10,0x15,0xF0,0x39,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x20,0x00,0x20,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20, +0x3F,0xE0,0x20,0x00,0x20,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40, +0x7F,0xF0,0x00,0x00,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x00,0x00,0x3D,0xF0,0x25,0x00,0x25,0x00,0x3D,0xF0,0x09,0x10,0x09,0x10,0x2D,0x10, +0x29,0xF0,0x29,0x00,0x2D,0x00,0x71,0xF0,0x00,0x00, +/* */ +0x7B,0xF0,0x4A,0x10,0x4A,0x10,0x7B,0xF0,0x12,0x40,0x12,0xF0,0x5A,0x40,0x52,0xF0, +0x52,0x90,0x5A,0x90,0x64,0xF0,0x08,0x90,0x00,0x00, +/* */ +0x20,0x00,0x23,0xF0,0x3A,0x10,0x43,0xF0,0x7A,0x40,0x23,0xF0,0x22,0x40,0x7B,0xF0, +0x23,0x10,0x25,0x10,0x35,0xF0,0x29,0x10,0x00,0x00, +/* */ +0x17,0xE0,0x14,0x20,0x27,0xE0,0x24,0x20,0x67,0xE0,0x24,0x20,0x27,0xE0,0x24,0x20, +0x2F,0xF0,0x20,0x00,0x22,0x40,0x24,0x20,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x20,0x10,0x40,0x10,0x1F,0x90,0x10,0x90,0x10,0x90,0x10,0x90, +0x1F,0x90,0x10,0x10,0x00,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x17,0xE0,0x14,0x20,0x17,0xE0,0x5C,0x20,0x57,0xE0,0x54,0x20,0x57,0xE0,0x14,0x20, +0x1F,0xF0,0x10,0x00,0x12,0x40,0x14,0x20,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x16,0x00,0x5A,0x00,0x53,0xF0,0x52,0x10,0x52,0x10,0x12,0x10, +0x13,0xF0,0x2A,0x00,0x2A,0x00,0x43,0xF0,0x00,0x00, +/* */ +0x3F,0x10,0x21,0x10,0x21,0x50,0x3F,0x50,0x24,0x50,0x3F,0x50,0x24,0x50,0x3F,0x50, +0x31,0x50,0x51,0x10,0x1F,0x10,0x11,0x30,0x00,0x00, +/* */ +0x13,0xF0,0x12,0x10,0x13,0xF0,0x78,0x00,0x13,0xF0,0x12,0x10,0x1B,0xF0,0x72,0x10, +0x13,0xF0,0x12,0x10,0x12,0x10,0x32,0x30,0x00,0x00, +/* */ +0x00,0x80,0x7D,0xE0,0x45,0x20,0x7D,0xA0,0x01,0x20,0x7D,0x60,0x45,0x00,0x7D,0xF0, +0x44,0x10,0x7D,0xD0,0x44,0x10,0x4C,0x60,0x00,0x00, +/* */ +0x13,0xF0,0x12,0x10,0x13,0xF0,0x78,0x00,0x2B,0xF0,0x2A,0x10,0x2B,0xF0,0x4A,0x10, +0x2B,0xF0,0x12,0x10,0x2A,0x10,0x4A,0x30,0x00,0x00, +/* */ +0x19,0x20,0x15,0x40,0x2F,0xE0,0x22,0x00,0x7F,0xF0,0x24,0x40,0x28,0x20,0x37,0xD0, +0x24,0x40,0x24,0xC0,0x24,0x20,0x23,0xE0,0x00,0x00, +/* */ +0x12,0x40,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x10,0x40,0x3F,0xE0,0x50,0x50,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x12,0x40,0x0A,0x80,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x10,0x40,0x20,0x20,0x5F,0x90, +0x10,0x80,0x13,0x00,0x10,0x20,0x0F,0xE0,0x00,0x00, +/* */ +0x13,0xF0,0x12,0x10,0x23,0xF0,0x48,0x00,0x73,0xF0,0x12,0x10,0x23,0xF0,0x7A,0x10, +0x03,0xF0,0x1A,0x10,0x62,0x10,0x02,0x30,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x24,0x20,0x76,0xA0,0x25,0x30,0x27,0xD0,0x35,0x20,0x65,0x60, +0x27,0xE0,0x25,0x20,0x25,0x50,0x6A,0x90,0x00,0x00, +/* */ +0x27,0x70,0x25,0x50,0x27,0x70,0x75,0x50,0x27,0x70,0x22,0x40,0x37,0xF0,0x6A,0x40, +0x23,0xF0,0x22,0x20,0x21,0xC0,0x66,0x30,0x00,0x00, +/* */ +0x21,0x00,0x21,0x00,0x27,0xE0,0x71,0x20,0x21,0x20,0x21,0x20,0x2F,0xF0,0x31,0x00, +0x62,0x80,0x22,0x80,0x24,0x40,0x68,0x30,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x24,0x10,0x77,0xF0,0x24,0x40,0x25,0x50,0x35,0x50,0x65,0xF0, +0x24,0x40,0x25,0x50,0x25,0x50,0x69,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x28,0x10,0x2F,0xF0,0x68,0x80,0x2A,0xA0,0x2A,0xA0,0x2B,0xE0, +0x28,0x80,0x2C,0x90,0x34,0x90,0x27,0xF0,0x00,0x00, +/* */ +0x01,0xF0,0x7E,0x20,0x12,0x40,0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x00,0x00,0x3E,0x20, +0x2B,0xF0,0x3E,0x20,0x28,0xA0,0x34,0x60,0x00,0x00, +/* */ +0x24,0x20,0x12,0x40,0x7F,0xF0,0x40,0x10,0x5F,0xD0,0x10,0x40,0x12,0x40,0x12,0x40, +0x12,0x40,0x05,0x00,0x19,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x01,0x00,0x4F,0xE0,0x21,0x20,0x01,0x20,0x01,0x20,0x1F,0xF0,0x01,0x00, +0x22,0x80,0x42,0x80,0x04,0x40,0x18,0x30,0x00,0x00, +/* */ +0x21,0x00,0x11,0x00,0x07,0xE0,0x01,0x20,0x61,0x20,0x21,0x20,0x2F,0xF0,0x21,0x00, +0x22,0x80,0x32,0x80,0x24,0x40,0x08,0x30,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x22,0x20,0x4C,0x40,0x73,0xF0,0x12,0x90,0x22,0x90,0x7B,0xF0, +0x02,0x00,0x1A,0x10,0x62,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x11,0xF0,0x7A,0x10,0x15,0x10,0x10,0x90,0x10,0x30,0x10,0x50, +0x18,0x90,0x63,0x10,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x20,0xA0,0x2F,0x20,0x22,0x20,0x3F,0xE0, +0x2A,0xA0,0x32,0x60,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x1D,0xF0,0x22,0x10,0x45,0x10,0x38,0x90,0x10,0x30,0x7C,0x50, +0x10,0x90,0x15,0x10,0x1A,0x10,0x10,0x60,0x00,0x00, +/* */ +0x7F,0xF0,0x44,0x10,0x04,0x00,0x3F,0xE0,0x08,0x00,0x12,0x00,0x1F,0xC0,0x02,0x00, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x04,0x20,0x7F,0xF0,0x04,0x20,0x3F,0xE0,0x08,0x00,0x1F,0xE0, +0x30,0x20,0x50,0x20,0x1F,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x10,0x80,0x11,0x20,0x11,0xF0,0x54,0x10,0x55,0x20,0x56,0x90,0x54,0xE0,0x55,0x20, +0x56,0xA0,0x5C,0x40,0x64,0xA0,0x01,0x10,0x00,0x00, +/* */ +0x09,0x00,0x0A,0x20,0x17,0xF0,0x10,0x10,0x32,0x20,0x55,0x10,0x11,0xE0,0x12,0x20, +0x15,0x40,0x10,0x80,0x11,0x40,0x16,0x30,0x00,0x00, +/* */ +0x41,0x00,0x22,0x20,0x07,0xF0,0x70,0x10,0x02,0x20,0x55,0x10,0x51,0xE0,0x52,0x20, +0x25,0x40,0x10,0x80,0x61,0x40,0x06,0x30,0x00,0x00, +/* */ +0x02,0x00,0x44,0x20,0x2F,0xF0,0x02,0x50,0x04,0x20,0x4A,0x10,0x23,0xC0,0x04,0x40, +0x0A,0x80,0x21,0x00,0x46,0xC0,0x18,0x30,0x00,0x00, +/* */ +0x00,0x00,0x7E,0xF0,0x12,0x90,0x7F,0x90,0x12,0xA0,0x7E,0xA0,0x20,0x90,0x7E,0x90, +0x22,0x90,0x22,0xE0,0x3E,0x80,0x22,0x80,0x00,0x00, +/* */ +0x01,0x00,0x72,0x20,0x17,0xF0,0x50,0x10,0x52,0x20,0x55,0x10,0x79,0xE0,0x0A,0x20, +0x1D,0x40,0x68,0x80,0x09,0x40,0x36,0x30,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x55,0x10,0x51,0xE0,0x52,0x20,0x51,0xC0,0x56,0x30,0x53,0xE0, +0x72,0x20,0x52,0x20,0x03,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x74,0x70,0x5F,0x50,0x55,0x50,0x55,0x50,0x55,0x50,0x55,0x50, +0x75,0x50,0x45,0x50,0x09,0x70,0x13,0x50,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x07,0xE0,0x04,0x00,0x04,0x00,0x7F,0xF0,0x04,0x00,0x07,0x00, +0x04,0xC0,0x04,0x20,0x04,0x00,0x04,0x00,0x00,0x00, +/* */ +0x02,0x00,0x73,0xE0,0x54,0x20,0x5A,0x40,0x51,0x80,0x5E,0x70,0x50,0x00,0x57,0xE0, +0x74,0x20,0x54,0x20,0x07,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x7F,0xF0,0x08,0x80, +0x08,0x80,0x10,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x14,0x50,0x17,0x60,0x14,0x40,0x7D,0x50,0x16,0x30,0x10,0x80,0x1F,0xF0,0x74,0x10, +0x17,0xF0,0x14,0x10,0x17,0xF0,0x34,0x10,0x00,0x00, +/* */ +0x12,0x50,0x13,0xE0,0x12,0x40,0x7A,0xD0,0x13,0x30,0x38,0x80,0x37,0xF0,0x52,0x10, +0x13,0xF0,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x10,0x00,0x55,0xC0,0x55,0x40,0x7D,0x40,0x01,0x40,0x7D,0x40,0x05,0x40,0x7D,0x40, +0x41,0x40,0x45,0x50,0x5A,0x50,0x64,0x30,0x00,0x00, +/* */ +0x20,0x00,0x2E,0xF0,0x2A,0x20,0x3A,0xA0,0x6E,0xA0,0x6A,0xF0,0x2A,0x20,0x2E,0x40, +0x28,0x60,0x2C,0xA0,0x2A,0xA0,0x2D,0x30,0x00,0x00, +/* */ +0x00,0x10,0x3E,0x10,0x08,0x90,0x08,0x90,0x08,0x90,0x7F,0x90,0x08,0x90,0x08,0x90, +0x08,0x90,0x08,0x10,0x08,0x10,0x08,0x70,0x00,0x00, +/* */ +0x22,0x20,0x27,0xF0,0x22,0x20,0x23,0xE0,0x72,0x20,0x23,0xE0,0x22,0x20,0x2F,0xF0, +0x25,0x40,0x36,0x20,0x64,0x00,0x07,0xF0,0x00,0x00, +/* */ +0x12,0x40,0x3F,0x40,0x12,0x40,0x1E,0xF0,0x12,0x50,0x1E,0x50,0x12,0x50,0x7F,0x50, +0x2A,0x50,0x31,0x90,0x20,0x90,0x3F,0x60,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x11,0xF0,0x7A,0x10,0x12,0x20,0x14,0x80,0x10,0x80,0x10,0x80, +0x19,0x40,0x61,0x40,0x02,0x20,0x04,0x10,0x00,0x00, +/* */ +0x01,0x00,0x79,0x00,0x11,0xF0,0x12,0x10,0x22,0x20,0x3C,0x80,0x68,0x80,0x28,0x80, +0x29,0x40,0x39,0x40,0x2A,0x20,0x04,0x10,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x02,0x00,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x10,0x20,0x3F,0xE0, +0x50,0x20,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xF0,0x21,0x00,0x2F,0xE0,0x21,0x20,0x3F,0xF0,0x21,0x20,0x2F,0xE0, +0x21,0x00,0x2B,0xA0,0x25,0x40,0x4B,0x30,0x00,0x00, +/* */ +0x20,0x80,0x2F,0xF0,0x28,0x80,0x3B,0xE0,0x68,0xA0,0x6F,0xF0,0x28,0xA0,0x2B,0xE0, +0x2A,0xA0,0x29,0xC0,0x2A,0xA0,0x35,0x90,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x5C,0x80,0x35,0xE0,0x14,0xA0,0x7F,0xF0,0x14,0xA0,0x35,0xE0, +0x5E,0xA0,0x15,0xC0,0x16,0xA0,0x19,0x90,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x80,0x7C,0x80,0x10,0x80,0x10,0x80,0x1C,0x80,0x70,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x37,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x78,0x00,0x10,0x00,0x13,0xC0,0x1A,0x40,0x72,0x40, +0x12,0x40,0x12,0x50,0x14,0x50,0x38,0x30,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x1F,0x80,0x10,0x80,0x10,0x80, +0x10,0x80,0x10,0x90,0x20,0x90,0x40,0x70,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x54,0x00,0x58,0x00,0x53,0xC0,0x52,0x40,0x12,0x40, +0x12,0x40,0x2A,0x50,0x24,0x50,0x48,0x30,0x00,0x00, +/* */ +0x04,0x00,0x04,0x40,0x3F,0x80,0x05,0x00,0x7F,0xF0,0x04,0x00,0x0F,0xE0,0x18,0x00, +0x2F,0xE0,0x40,0x20,0x00,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x21,0x00,0x21,0x10,0x27,0xA0,0x71,0x40,0x27,0xF0,0x21,0x00,0x33,0xE0,0x66,0x00, +0x2B,0xE0,0x20,0x20,0x20,0x20,0x60,0xC0,0x00,0x00, +/* */ +0x11,0x00,0x11,0x10,0x17,0xA0,0x59,0x40,0x57,0xF0,0x51,0x00,0x53,0xE0,0x16,0x00, +0x1B,0xE0,0x28,0x20,0x24,0x20,0x40,0xC0,0x00,0x00, +/* */ +0x12,0x00,0x1F,0xE0,0x22,0x00,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x05,0x00,0x7D,0xF0, +0x05,0x00,0x7D,0xF0,0x05,0x00,0x05,0x00,0x00,0x00, +/* */ +0x20,0x00,0x2F,0xF0,0x20,0x20,0x20,0x20,0x77,0xA0,0x24,0xA0,0x24,0xA0,0x24,0xA0, +0x27,0xA0,0x34,0x20,0x60,0x20,0x00,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x7F,0xF0,0x00,0x40,0x3E,0x40,0x22,0x40, +0x22,0x40,0x3E,0x40,0x20,0x40,0x01,0xC0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x10,0x20,0x78,0x20,0x13,0xA0,0x3A,0xA0,0x36,0xA0,0x52,0xA0, +0x13,0xA0,0x12,0x20,0x10,0x20,0x10,0x60,0x00,0x00, +/* */ +0x13,0xE0,0x12,0xA0,0x13,0xE0,0x7A,0xA0,0x13,0xE0,0x38,0x80,0x37,0xF0,0x50,0x80, +0x11,0xC0,0x12,0xA0,0x14,0x90,0x10,0x80,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xE0,0x10,0x80,0x13,0xE0,0x20,0x80,0x39,0x20,0x6B,0xE0,0x28,0x00, +0x2B,0xE0,0x3A,0xA0,0x2A,0xA0,0x07,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xF0,0x54,0x40,0x7C,0x80,0x55,0xF0,0x7D,0x10,0x11,0x50,0x7D,0x50, +0x11,0x50,0x38,0x40,0x54,0xA0,0x11,0x10,0x00,0x00, +/* */ +0x08,0x40,0x72,0x40,0x11,0x40,0x10,0x40,0x7E,0x40,0x11,0x40,0x38,0x40,0x34,0x70, +0x53,0xC0,0x10,0x40,0x10,0x40,0x10,0x40,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x40,0x10,0x0F,0x80, +0x08,0x80,0x08,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x01,0x00,0x00,0x80,0x77,0xF0,0x51,0x00,0x52,0x20,0x57,0xC0,0x50,0x90,0x51,0x20, +0x76,0x40,0x50,0xC0,0x01,0x20,0x06,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x00,0x20,0x00,0x20,0x3F,0x20,0x21,0x20,0x21,0x20,0x21,0x20, +0x3F,0x20,0x20,0x20,0x00,0x20,0x00,0xE0,0x00,0x00, +/* */ +0x47,0xE0,0x24,0x20,0x07,0xE0,0x04,0x20,0x47,0xE0,0x22,0x00,0x07,0xF0,0x08,0x90, +0x01,0x50,0x24,0x10,0x47,0x90,0x00,0x30,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0, +0x08,0x80,0x08,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x08,0x10,0x04,0x10,0x3F,0x50,0x08,0x50,0x11,0x50,0x3E,0x50,0x04,0x50,0x09,0x50, +0x32,0x50,0x04,0x10,0x0A,0x10,0x71,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x10,0x0F,0xC0,0x10,0x40,0x28,0x80,0x07,0x00,0x78,0xF0, +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x00,0x00, +/* */ +0x4F,0xE0,0x29,0x20,0x0F,0xE0,0x09,0x20,0x6F,0xE0,0x21,0x00,0x3F,0xF0,0x21,0x00, +0x23,0x80,0x35,0x40,0x29,0x30,0x01,0x00,0x00,0x00, +/* */ +0x02,0x00,0x13,0xE0,0x12,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x00,0x80,0x74,0xE0,0x54,0x80,0x5F,0xF0,0x50,0x00,0x57,0xE0,0x54,0x20,0x57,0xE0, +0x74,0x20,0x57,0xE0,0x04,0x20,0x04,0x60,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x22,0x10,0x29,0x20,0x30,0xC0, +0x02,0x30,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x22,0x10,0x29,0x20,0x30,0xC0, +0x02,0x30,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x21,0x00,0x20,0x80,0x27,0xF0,0x20,0x00,0x70,0x00,0x23,0xC0,0x22,0x40,0x22,0x40, +0x22,0x40,0x32,0x50,0x64,0x50,0x08,0x30,0x00,0x00, +/* */ +0x01,0x00,0x00,0x80,0x77,0xF0,0x50,0x00,0x50,0x00,0x53,0xC0,0x52,0x40,0x52,0x40, +0x72,0x40,0x52,0x50,0x04,0x50,0x08,0x30,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x48,0x90,0x10,0x40,0x20,0x20,0x00,0x00,0x3F,0xE0, +0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x7B,0xC0,0x12,0x40,0x13,0x40,0x12,0xC0,0x1A,0x50,0x74,0x50,0x08,0x30,0x02,0x00, +0x29,0x20,0x29,0x10,0x48,0x50,0x07,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x3E,0x80,0x02,0x80,0x04,0x80,0x08,0x80,0x08,0x80,0x0E,0x80,0x78,0x80, +0x08,0x80,0x08,0x90,0x08,0x90,0x38,0x70,0x00,0x00, +/* */ +0x21,0x00,0x20,0x80,0x27,0xF0,0x74,0x10,0x21,0x40,0x22,0x20,0x34,0x10,0x63,0xE0, +0x20,0x80,0x20,0x80,0x20,0x80,0x67,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x24,0x00,0x75,0x20,0x24,0xA0,0x24,0xA0,0x34,0x40,0x64,0x40, +0x24,0xA0,0x25,0x20,0x24,0x00,0x67,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x13,0xF0,0x7A,0x10,0x12,0x10,0x12,0x10,0x1A,0x10,0x72,0x10, +0x12,0x10,0x12,0x10,0x13,0xF0,0x32,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x90,0x00,0xE0,0x38,0x80,0x03,0xE0,0x00,0x20,0x7D,0x40, +0x28,0x80,0x29,0x40,0x2A,0x50,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0x80,0x7B,0xF0,0x10,0x80,0x30,0x80,0x3B,0xE0,0x52,0x20, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x3D,0xE0,0x25,0x20,0x25,0x20,0x3D,0xE0,0x02,0x40,0x02,0x20,0x7F,0xF0,0x02,0x00, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x21,0x00,0x29,0x20, +0x2F,0xE0,0x21,0x00,0x29,0x20,0x4F,0xE0,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x00,0x40,0x7D,0x40,0x11,0xF0,0x7E,0x40,0x54,0x40,0x57,0xF0,0x6C,0x00,0x45,0xF0, +0x7D,0x10,0x45,0x10,0x7D,0xF0,0x45,0x10,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x22,0x00,0x3F,0xF0,0x24,0x00,0x29,0x00,0x2F,0xE0, +0x21,0x00,0x3F,0xF0,0x21,0x00,0x41,0x00,0x00,0x00, +/* */ +0x40,0x80,0x27,0xF0,0x74,0x40,0x14,0x40,0x27,0xF0,0x34,0x80,0x65,0x40,0x35,0xF0, +0x24,0x40,0x25,0xF0,0x24,0x40,0x28,0x40,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x05,0x00,0x18,0xC0,0x6F,0xB0,0x00,0x00,0x3F,0xE0,0x08,0x00, +0x0F,0xC0,0x00,0x40,0x00,0x40,0x01,0x80,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x11,0x40,0x7A,0x20,0x15,0xD0,0x10,0x00,0x17,0xF0,0x12,0x00, +0x1B,0xE0,0x60,0x20,0x00,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x11,0x40,0x7A,0x20,0x15,0xD0,0x10,0x00,0x17,0xF0,0x1A,0x00, +0x73,0xE0,0x10,0x20,0x10,0x20,0x30,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xF0,0x49,0x40,0x4A,0x20,0x7D,0xD0,0x10,0x00,0x17,0xF0,0x5A,0x00, +0x53,0xE0,0x50,0x20,0x58,0x20,0x60,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x3B,0xF0,0x29,0x40,0x2A,0x20,0x3D,0xD0,0x28,0x00,0x2F,0xF0,0x3A,0x00, +0x2B,0xE0,0x28,0x20,0x28,0x20,0x58,0xC0,0x00,0x00, +/* */ +0x21,0x00,0x21,0x00,0x27,0xE0,0x71,0x20,0x21,0x20,0x21,0x20,0x2F,0xF0,0x21,0x00, +0x32,0x80,0x62,0x80,0x04,0x40,0x08,0x30,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x11,0x00,0x11,0x00,0x5B,0xE0,0x51,0x20,0x51,0x20, +0x57,0xF0,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x08,0x80,0x09,0x40,0x12,0x20,0x14,0x10,0x33,0xE0,0x50,0x00,0x10,0x00,0x17,0xF0, +0x11,0x00,0x12,0x20,0x17,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x17,0xE0,0x59,0x20,0x51,0x20,0x51,0x20,0x5F,0xF0,0x11,0x00, +0x12,0x80,0x12,0x80,0x14,0x40,0x18,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x3F,0xE0,0x08,0x80,0x3F,0xE0,0x20,0x20,0x22,0x20, +0x22,0x20,0x05,0x00,0x19,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0x80,0x08,0xF0,0x3E,0x90,0x01,0x20,0x3E,0x00,0x00,0x40,0x7F,0x40, +0x08,0x40,0x2A,0xA0,0x49,0xA0,0x19,0x10,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x21,0x00,0x21,0x00,0x27,0xC0,0x21,0x00,0x21,0x00, +0x21,0x00,0x2F,0xE0,0x20,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x21,0x00,0x27,0xE0, +0x21,0x00,0x2F,0xF0,0x20,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x57,0xF0,0x20,0x80,0x50,0x80,0x10,0x80,0x10,0x80,0x37,0xF0,0x50,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x67,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x00,0x7D,0xF0,0x14,0x40,0x34,0x40,0x3D,0xF0,0x54,0x40, +0x14,0x40,0x15,0xF0,0x14,0x00,0x17,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x13,0xF0,0x12,0x00,0x22,0x00,0x3A,0x00,0x6A,0x00,0x2A,0x00, +0x2A,0x00,0x3A,0x00,0x2A,0x00,0x04,0x00,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x54,0x00,0x55,0xF0,0x74,0x40,0x54,0x40,0x55,0xF0,0x74,0x40, +0x54,0x40,0x55,0xF0,0x74,0x00,0x57,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x4B,0xF0,0x4A,0x00,0x4A,0x00,0x7A,0x00,0x4A,0x00,0x4A,0x00, +0x4A,0x00,0x7A,0x00,0x42,0x00,0x04,0x00,0x00,0x00, +/* */ +0x00,0x00,0x0F,0xE0,0x48,0x20,0x28,0x20,0x08,0x20,0x08,0x20,0x0F,0xE0,0x02,0x80, +0x12,0x80,0x24,0x90,0x48,0x90,0x10,0x70,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x7F,0xF0,0x08,0x00,0x10,0x00,0x1F,0xE0, +0x00,0x20,0x00,0x20,0x00,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x10,0x00,0x7F,0xF0,0x11,0x00,0x15,0x20,0x25,0x40,0x2A,0x80,0x24,0x40,0x48,0x30, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x08,0x00,0x0B,0xF0,0x48,0x10,0x48,0x10,0x49,0xF0, +0x48,0x10,0x08,0x10,0x13,0xF0,0x20,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x50,0x50,0x20,0x20,0x13,0xE0,0x3A,0x20,0x12,0xA0,0x7A,0xA0, +0x12,0xA0,0x29,0x50,0x2A,0x50,0x44,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3D,0x20,0x44,0xC0,0x28,0x50,0x1F,0xA0,0x62,0x10, +0x1F,0xC0,0x05,0x00,0x08,0xC0,0x30,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x05,0x00,0x1A,0xC0,0x62,0x30,0x1F,0xC0,0x02,0x00,0x3F,0xE0, +0x02,0x00,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x20,0x21,0x20,0x7C,0xA0,0x54,0x20,0x7D,0x20,0x54,0xB0,0x7D,0xE0,0x14,0x20, +0x2A,0x20,0x2E,0x20,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x09,0x00,0x17,0xE0,0x14,0xA0,0x37,0xE0,0x55,0x20,0x17,0xE0,0x11,0x40, +0x12,0xA0,0x12,0xE0,0x14,0x90,0x18,0x70,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x34,0x90,0x57,0xF0,0x00,0x80,0x2F,0xF0,0x20,0x00,0x27,0xF0, +0x24,0x90,0x24,0x90,0x31,0x60,0x26,0x10,0x00,0x00, +/* */ +0x10,0x80,0x11,0x00,0x17,0xE0,0x5C,0xA0,0x57,0xE0,0x55,0x20,0x57,0xE0,0x11,0x40, +0x12,0xA0,0x12,0xE0,0x14,0x90,0x18,0x70,0x00,0x00, +/* */ +0x01,0x00,0x4F,0xE0,0x29,0x20,0x0F,0xE0,0x01,0x00,0x5F,0xF0,0x20,0x00,0x0F,0xE0, +0x09,0x20,0x29,0x20,0x42,0xC0,0x0C,0x20,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x27,0xF0,0x24,0x90,0x74,0x90,0x27,0xF0,0x24,0x90,0x24,0x90, +0x27,0xF0,0x34,0x90,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00,0x21,0x10,0x3D,0x20, +0x21,0xC0,0x21,0x10,0x2D,0x10,0x30,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x90,0x7C,0x90,0x17,0xF0,0x14,0x90,0x1D,0xD0,0x76,0xB0, +0x14,0x90,0x14,0x90,0x17,0xF0,0x34,0x10,0x00,0x00, +/* */ +0x7F,0xF0,0x42,0x10,0x42,0x10,0x5F,0xD0,0x42,0x10,0x47,0x10,0x4A,0x90,0x52,0x50, +0x42,0x10,0x42,0x10,0x7F,0xF0,0x40,0x10,0x00,0x00, +/* */ +0x10,0x70,0x17,0x80,0x10,0x80,0x78,0x80,0x17,0xF0,0x10,0x80,0x18,0x80,0x77,0xF0, +0x14,0x10,0x14,0x10,0x17,0xF0,0x34,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7A,0x00,0x12,0x00,0x12,0x00,0x1A,0x00,0x72,0x00, +0x12,0x00,0x12,0x00,0x12,0x00,0x34,0x00,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x00,0x3F,0x70,0x2A,0x50,0x2E,0x50,0x20,0x60,0x2E,0x50, +0x22,0x50,0x3F,0x60,0x44,0x40,0x0C,0x40,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x00,0xD0,0x67,0x10,0x51,0x10,0x4F,0xF0,0x61,0x10,0x57,0xD0, +0x44,0x50,0x54,0x50,0x67,0xD0,0x40,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x10,0x00,0x13,0xF0,0x78,0x00,0x12,0x20,0x11,0x20,0x11,0x20, +0x11,0x40,0x18,0x40,0x60,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x10,0x00,0x7B,0xF0,0x10,0x00,0x12,0x20,0x19,0x20,0x71,0x20, +0x11,0x40,0x10,0x40,0x10,0x80,0x37,0xF0,0x00,0x00, +/* */ +0x02,0x10,0x72,0x10,0x5F,0x90,0x52,0x50,0x5F,0xD0,0x5A,0xD0,0x5F,0xD0,0x52,0x50, +0x77,0x50,0x5A,0x90,0x02,0x10,0x02,0x30,0x00,0x00, +/* */ +0x10,0xA0,0x10,0xA0,0x11,0xF0,0x7C,0xA0,0x57,0xF0,0x54,0x00,0x7D,0xF0,0x11,0x10, +0x15,0xF0,0x1D,0x10,0x65,0xF0,0x01,0x10,0x00,0x00, +/* */ +0x01,0x40,0x39,0x40,0x2B,0xE0,0x29,0x40,0x3B,0xF0,0x28,0x00,0x2B,0xE0,0x3A,0x20, +0x2B,0xE0,0x2A,0x20,0x2B,0xE0,0x5A,0x20,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x7B,0xF0,0x00,0x80,0x2B,0xF0,0x12,0x90,0x7B,0xF0,0x10,0x80, +0x39,0xC0,0x12,0xA0,0x14,0x90,0x20,0x80,0x00,0x00, +/* */ +0x04,0x40,0x74,0x20,0x54,0x00,0x5E,0xF0,0x54,0x00,0x54,0x90,0x56,0x90,0x5C,0x90, +0x74,0xA0,0x54,0x20,0x04,0x40,0x0D,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x3F,0xE0,0x12,0x40,0x0A,0x80,0x7F,0xF0, +0x07,0x00,0x1A,0xC0,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x12,0x40,0x0A,0x80,0x7F,0xF0,0x07,0x00, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x10,0x80,0x10,0xE0,0x7D,0x20,0x12,0x40,0x7D,0xF0,0x55,0x10,0x7D,0x50,0x11,0x50, +0x39,0x50,0x54,0xA0,0x11,0x10,0x12,0x10,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x09,0x00,0x29,0xF0,0x2A,0x40,0x28,0x20,0x00,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x7D,0xF0,0x10,0x40,0x38,0xE0,0x55,0x50,0x10,0x40,0x04,0x00,0x7F,0xF0, +0x08,0x40,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x12,0x20,0x11,0x20,0x11,0x40,0x7B,0xE0,0x10,0x00,0x30,0x00,0x38,0x00,0x53,0xE0, +0x10,0x00,0x10,0x00,0x10,0x00,0x17,0xF0,0x00,0x00, +/* */ +0x12,0x20,0x11,0x20,0x11,0x40,0x7B,0xE0,0x10,0x00,0x10,0x00,0x18,0x00,0x73,0xE0, +0x10,0x00,0x10,0x00,0x10,0x00,0x37,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x52,0x40,0x09,0x00,0x29,0xF0,0x2A,0x40,0x28,0x20,0x00,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x4F,0xF0,0x22,0x10,0x1F,0xD0,0x42,0x10,0x5F,0xD0,0x52,0x50,0x5A,0xD0,0x52,0x50, +0x5F,0xD0,0x4A,0x90,0x52,0x50,0x42,0x30,0x00,0x00, +/* */ +0x10,0x40,0x08,0x40,0x08,0x80,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0, +0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x13,0xF0,0x49,0x10,0x27,0xD0,0x11,0x10,0x17,0xD0,0x55,0x50,0x37,0xD0,0x15,0x50, +0x17,0xD0,0x33,0x90,0x55,0x50,0x11,0x30,0x00,0x00, +/* */ +0x4B,0xF0,0x21,0x10,0x0F,0xD0,0x09,0x10,0x6F,0xD0,0x2D,0x50,0x2F,0xD0,0x2D,0x50, +0x2F,0xD0,0x2B,0x90,0x3D,0x50,0x29,0x30,0x00,0x00, +/* */ +0x21,0x40,0x25,0x70,0x25,0xA0,0x75,0x10,0x21,0x00,0x27,0xE0,0x34,0x20,0x65,0x20, +0x25,0x20,0x22,0x80,0x24,0x90,0x68,0x70,0x00,0x00, +/* */ +0x09,0x00,0x49,0xF0,0x49,0x40,0x4A,0x20,0x08,0x00,0x3F,0xE0,0x20,0x20,0x22,0x20, +0x22,0x20,0x05,0x00,0x19,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x22,0x40,0x22,0x70,0x2F,0x90,0x32,0x20,0x6F,0xF0,0x6A,0xD0,0x2F,0xD0,0x22,0x50, +0x27,0x50,0x2A,0x20,0x22,0x50,0x22,0x90,0x00,0x00, +/* */ +0x11,0x40,0x15,0x70,0x25,0xA0,0x4D,0x10,0x71,0x00,0x17,0xE0,0x24,0x20,0x75,0x20, +0x05,0x20,0x12,0x80,0x64,0x90,0x08,0x70,0x00,0x00, +/* */ +0x12,0x20,0x11,0x20,0x15,0x40,0x5B,0xE0,0x50,0x00,0x50,0x00,0x50,0x00,0x13,0xE0, +0x10,0x00,0x28,0x00,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x02,0x80,0x4A,0x80,0x2A,0xF0,0x0B,0x00,0x0A,0x40,0x42,0x20,0x20,0x00,0x0F,0xE0, +0x0A,0xA0,0x2A,0xA0,0x4A,0xA0,0x1F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x78,0x80,0x13,0xE0,0x12,0x20,0x13,0xE0,0x7A,0x20,0x13,0xE0,0x12,0x90, +0x12,0xA0,0x1A,0x40,0x63,0x20,0x02,0x10,0x00,0x00, +/* */ +0x14,0x00,0x12,0x70,0x17,0x50,0x7D,0x50,0x17,0x60,0x35,0x60,0x3F,0x50,0x54,0x50, +0x16,0x50,0x15,0x60,0x16,0xC0,0x14,0x40,0x00,0x00, +/* */ +0x09,0x00,0x28,0x80,0x13,0xE0,0x2A,0x20,0x4B,0xE0,0x0A,0x20,0x1B,0xE0,0x2A,0x90, +0x4A,0xA0,0x0A,0x40,0x0B,0x20,0x32,0x10,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x22,0x00,0x2F,0x70,0x29,0x50,0x2F,0x50,0x29,0x60,0x2F,0x50, +0x28,0x50,0x2A,0x60,0x2D,0x40,0x48,0x40,0x00,0x00, +/* */ +0x10,0x00,0x08,0xF0,0x3E,0x90,0x22,0x90,0x3E,0xA0,0x22,0xA0,0x3E,0x90,0x28,0x90, +0x24,0x90,0x2A,0xE0,0x32,0x80,0x20,0x80,0x00,0x00, +/* */ +0x10,0x00,0x08,0xF0,0x3E,0x90,0x22,0x90,0x3E,0xF0,0x22,0x90,0x3E,0x90,0x28,0xF0, +0x24,0x90,0x2A,0x90,0x32,0x90,0x21,0x30,0x00,0x00, +/* */ +0x02,0x00,0x41,0x00,0x2F,0xE0,0x08,0x20,0x0F,0xE0,0x48,0x20,0x2F,0xE0,0x09,0x00, +0x19,0x10,0x28,0xA0,0x4A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x12,0x20,0x78,0x00,0x17,0xF0,0x14,0x10,0x19,0x00,0x77,0xF0, +0x11,0x10,0x11,0x10,0x12,0x10,0x34,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x7F,0xF0,0x44,0x10,0x04,0x00,0x3F,0xE0, +0x08,0x20,0x08,0x20,0x10,0x20,0x20,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x02,0x00,0x12,0x00,0x1F,0xE0,0x22,0x00,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x02,0x20,0x3F,0xC0,0x02,0x80,0x03,0x00,0x7F,0xF0,0x04,0x00,0x0C,0x20, +0x14,0xC0,0x27,0x10,0x44,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x09,0x00,0x09,0x10,0x17,0xD0,0x11,0x20,0x31,0x40,0x5F,0xF0,0x11,0x00,0x12,0x20, +0x16,0xC0,0x1B,0x00,0x12,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x90,0x13,0xD0,0x78,0xA0,0x28,0xC0,0x2B,0xF0,0x29,0x00,0x4B,0x30, +0x2D,0xC0,0x11,0x00,0x29,0x10,0x44,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x7D,0xE0,0x12,0x20,0x7D,0x20,0x54,0xC0,0x55,0x20,0x6E,0x10,0x45,0xE0, +0x7D,0x20,0x45,0x20,0x7D,0xE0,0x45,0x20,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x1A,0x20,0x55,0x40,0x50,0x80,0x51,0x40,0x56,0x30,0x13,0xE0, +0x12,0x20,0x2A,0x20,0x2B,0xE0,0x42,0x20,0x00,0x00, +/* */ +0x02,0x40,0x4F,0xF0,0x22,0x40,0x00,0x00,0x0F,0xF0,0x49,0x10,0x21,0x00,0x0F,0xF0, +0x01,0x10,0x22,0x10,0x44,0x10,0x08,0x60,0x00,0x00, +/* */ +0x14,0x40,0x7F,0x40,0x14,0x40,0x1C,0xF0,0x08,0x50,0x3E,0x50,0x2A,0x50,0x3E,0x50, +0x08,0x50,0x7F,0x90,0x08,0x90,0x09,0x60,0x00,0x00, +/* */ +0x01,0xC0,0x3E,0x00,0x20,0x00,0x22,0x00,0x22,0x00,0x3F,0xE0,0x02,0x00,0x12,0x40, +0x12,0x20,0x22,0x10,0x42,0x10,0x0E,0x00,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x5A,0xD0,0x02,0x00,0x3A,0xE0,0x00,0x00,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x27,0xF0,0x30,0x80,0x47,0xF0,0x04,0x90,0x72,0xA0,0x20,0x00,0x27,0xF0,0x74,0x90, +0x27,0xF0,0x24,0x90,0x37,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x3F,0xE0,0x04,0x00,0x0F,0xC0,0x18,0x40,0x2F,0xC0,0x00,0x00,0x7D,0xF0,0x10,0x80, +0x3D,0xF0,0x66,0x90,0x3C,0xF0,0x24,0x90,0x00,0x00, +/* */ +0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x08,0x80,0x1F,0x00,0x04,0x40, +0x3F,0xE0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x0B,0xE0,0x0A,0xA0,0x13,0xE0,0x12,0xA0,0x33,0xE0,0x50,0x00,0x17,0xF0,0x15,0x50, +0x17,0xF0,0x15,0x50,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x08,0x00,0x10,0x40,0x3F,0xE0,0x10,0x40,0x20,0x80,0x49,0x20,0x7D,0xF0,0x04,0x10, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x17,0xF0,0x10,0x80,0x17,0xF0,0x7C,0x90,0x12,0xA0,0x10,0x00,0x1F,0xF0,0x74,0x90, +0x17,0xF0,0x14,0x90,0x17,0xF0,0x34,0x10,0x00,0x00, +/* */ +0x00,0x80,0x3C,0x80,0x24,0x80,0x27,0xF0,0x3C,0x90,0x24,0x90,0x24,0x90,0x3C,0x90, +0x25,0x10,0x25,0x10,0x26,0x10,0x4C,0x60,0x00,0x00, +/* */ +0x02,0x00,0x12,0x40,0x0A,0x80,0x7F,0xF0,0x0A,0x80,0x12,0x40,0x20,0x20,0x02,0x00, +0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x00,0x00,0x27,0xF0,0x14,0x10,0x04,0x10,0x47,0xF0,0x24,0x10,0x04,0x10,0x07,0xF0, +0x14,0x10,0x24,0x10,0x47,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x78,0x80,0x17,0xF0,0x12,0x20,0x3D,0x10,0x31,0xE0,0x52,0x20, +0x15,0x40,0x10,0x80,0x11,0x40,0x16,0x30,0x00,0x00, +/* */ +0x17,0xF0,0x15,0x50,0x15,0x50,0x7F,0xF0,0x10,0x80,0x37,0xF0,0x39,0x00,0x55,0xF0, +0x11,0x10,0x12,0x10,0x12,0x10,0x14,0x60,0x00,0x00, +/* */ +0x01,0x00,0x01,0x00,0x42,0x80,0x24,0x40,0x09,0x30,0x00,0x80,0x07,0xE0,0x00,0x20, +0x10,0x40,0x22,0x80,0x41,0x00,0x00,0x80,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x29,0x20,0x2F,0xE0,0x29,0x20,0x2F,0xE0, +0x21,0x00,0x2F,0xE0,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x06,0x10,0x38,0x90,0x08,0x90,0x7E,0x90,0x1C,0x90,0x2A,0x10,0x48,0x30,0x02,0x00, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x06,0x10,0x38,0x90,0x08,0x90,0x7E,0x90,0x1C,0x90,0x2A,0x10,0x48,0x30,0x12,0x00, +0x1F,0xE0,0x22,0x00,0x7F,0xF0,0x02,0x00,0x00,0x00, +/* */ +0x3D,0x00,0x09,0xF0,0x7E,0x50,0x1C,0x50,0x2A,0x90,0x4D,0x30,0x18,0xC0,0x62,0x30, +0x12,0x40,0x0A,0x80,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x7F,0xF0,0x08,0x80,0x27,0x20,0x28,0xA0,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x49,0x10,0x5F,0xB0,0x00,0x00, +/* */ +0x17,0xF0,0x54,0x90,0x24,0x90,0x57,0xF0,0x14,0x90,0x14,0x90,0x37,0xF0,0x50,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x6F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x27,0x20,0x28,0xA0,0x3F,0xE0,0x02,0x00,0x7F,0xF0, +0x44,0x10,0x49,0x10,0x5F,0x90,0x40,0xB0,0x00,0x00, +/* */ +0x01,0x00,0x5F,0xF0,0x22,0x80,0x09,0x20,0x0A,0xA0,0x4F,0xE0,0x21,0x00,0x1F,0xF0, +0x12,0x10,0x34,0x90,0x57,0xD0,0x10,0x30,0x00,0x00, +/* */ +0x07,0xF0,0x74,0x90,0x24,0x90,0x27,0xF0,0x24,0x90,0x74,0x90,0x27,0xF0,0x20,0x80, +0x27,0xF0,0x30,0x80,0x60,0x80,0x0F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x1F,0x80,0x01,0x00,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x02,0x00, +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x21,0xF0,0x39,0x50,0x49,0x50,0x11,0xF0,0x7D,0x50,0x55,0x50,0x7D,0xF0,0x54,0x40, +0x7D,0xF0,0x00,0x40,0x1C,0x40,0x63,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x11,0x00,0x79,0x00,0x09,0x00,0x11,0x00,0x11,0x00,0x39,0x00,0x55,0x00, +0x11,0x10,0x11,0x10,0x11,0x10,0x10,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x06,0x20,0x38,0xA0,0x08,0xA0,0x7E,0xA0,0x08,0xA0, +0x1C,0xA0,0x2A,0xA0,0x48,0x20,0x08,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x04,0x00,0x3F,0xE0,0x08,0x20,0x30,0xC0,0x10,0x80, +0x7D,0xF0,0x14,0x90,0x24,0x90,0x4D,0x30,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x14,0x00,0x0C,0x00,0x13,0x00,0x60,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x05,0x00,0x3F,0xE0,0x25,0x20,0x25,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x00,0x00,0x3D,0xE0,0x25,0x20,0x25,0x20,0x35,0xA0,0x2D,0x60, +0x25,0x20,0x25,0x20,0x25,0x20,0x2D,0x60,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x20,0x00,0x20,0x00,0x2F,0xE0,0x22,0x00,0x22,0x00,0x23,0xE0, +0x22,0x20,0x24,0x20,0x24,0x20,0x48,0xC0,0x00,0x00, +/* */ +0x00,0x40,0x3F,0x40,0x20,0x40,0x3E,0xF0,0x28,0x50,0x28,0x50,0x2E,0x50,0x2A,0x50, +0x2A,0x50,0x2A,0x90,0x2A,0x90,0x57,0x60,0x00,0x00, +/* */ +0x00,0x60,0x7B,0x80,0x12,0x00,0x12,0x80,0x22,0x80,0x3B,0xF0,0x68,0x80,0x2A,0xA0, +0x2A,0x90,0x3C,0x90,0x28,0x80,0x01,0x80,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x22,0x00,0x22,0x00,0x2F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20, +0x24,0x20,0x24,0x20,0x28,0x20,0x51,0xC0,0x00,0x00, +/* */ +0x06,0x10,0x38,0x10,0x08,0x90,0x08,0x90,0x7F,0x90,0x08,0x90,0x1C,0x90,0x2A,0x90, +0x48,0x90,0x08,0x10,0x08,0x10,0x08,0x70,0x00,0x00, +/* */ +0x1F,0xF0,0x12,0x80,0x2F,0xE0,0x2A,0xA0,0x6A,0xA0,0x2F,0xE0,0x21,0x00,0x3F,0xF0, +0x23,0x80,0x25,0x40,0x39,0x30,0x21,0x00,0x00,0x00, +/* */ +0x10,0x10,0x1F,0x10,0x24,0x50,0x24,0x50,0x67,0x50,0x29,0x50,0x29,0x50,0x35,0x50, +0x22,0x50,0x22,0x10,0x24,0x10,0x28,0x70,0x00,0x00, +/* */ +0x11,0x10,0x16,0x10,0x22,0x50,0x22,0x50,0x6F,0xD0,0x22,0x50,0x22,0x50,0x27,0x50, +0x2A,0xD0,0x22,0x10,0x22,0x10,0x22,0x30,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x51,0x10,0x36,0x10,0x12,0x50,0x1F,0xD0,0x32,0x50, +0x57,0x50,0x1A,0xD0,0x22,0x10,0x42,0x30,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x40,0x10,0x40,0x08,0x40, +0x08,0x80,0x08,0x80,0x01,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x54,0x00,0x3B,0xF0,0x10,0x00,0x7A,0x20,0x11,0x20,0x39,0x20, +0x55,0x40,0x10,0x40,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xF0,0x28,0x00,0x08,0x80,0x08,0x80,0x4B,0xF0,0x28,0x90,0x08,0x90, +0x09,0x10,0x29,0x10,0x52,0x10,0x24,0x60,0x00,0x00, +/* */ +0x02,0x00,0x1F,0xC0,0x02,0x40,0x7F,0xF0,0x02,0x40,0x1F,0xC0,0x22,0x20,0x17,0x40, +0x0A,0x80,0x12,0x40,0x62,0x30,0x06,0x00,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xE0,0x04,0x20,0x04,0x20,0x04,0x20,0x08,0x20, +0x08,0x20,0x10,0x20,0x20,0x20,0x41,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x21,0x40,0x24,0x90,0x25,0x50,0x77,0xF0,0x20,0x80,0x27,0xF0, +0x24,0x90,0x35,0x50,0x65,0xD0,0x04,0x30,0x00,0x00, +/* */ +0x07,0xF0,0x74,0x90,0x54,0x90,0x57,0xF0,0x54,0x90,0x54,0x90,0x57,0xF0,0x50,0x80, +0x77,0xF0,0x50,0x80,0x00,0x80,0x0F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x22,0x80,0x22,0x80,0x6F,0xE0,0x2A,0xA0,0x2A,0xA0,0x2A,0xA0, +0x2D,0x60,0x28,0x20,0x28,0x20,0x28,0x60,0x00,0x00, +/* */ +0x02,0x20,0x7D,0x40,0x28,0x00,0x2B,0xE0,0x38,0x80,0x28,0x80,0x3F,0xF0,0x28,0x80, +0x2D,0x40,0x79,0x40,0x0A,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x41,0x00,0x2F,0xF0,0x02,0x80,0x67,0xE0,0x20,0x80, +0x2F,0xF0,0x20,0x80,0x20,0x80,0x5F,0xF0,0x00,0x00, +/* */ +0x41,0x00,0x21,0x00,0x0F,0xF0,0x02,0x00,0x04,0x80,0x67,0xE0,0x20,0x80,0x20,0x80, +0x2F,0xF0,0x20,0x80,0x20,0x80,0x5F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x2F,0xF0,0x39,0x20,0x4F,0xF0,0x79,0x40,0x2B,0xF0,0x79,0x50,0x2F,0xF0, +0x29,0x50,0x3B,0xF0,0x2B,0x60,0x15,0x50,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3F,0xF0,0x22,0x80,0x2F,0xE0,0x22,0xA0,0x3F,0xF0, +0x22,0xA0,0x2F,0xE0,0x26,0xC0,0x5A,0xB0,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x1A,0x80,0x54,0x40,0x59,0x30,0x50,0x80,0x57,0xE0,0x10,0x20, +0x10,0x40,0x12,0x80,0x11,0x00,0x10,0x80,0x00,0x00, +/* */ +0x10,0x80,0x48,0x80,0x23,0xE0,0x01,0x00,0x1A,0x80,0x4B,0xE0,0x28,0x80,0x08,0x80, +0x0B,0xE0,0x28,0x80,0x54,0x80,0x23,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x48,0x90,0x52,0x50,0x02,0x00,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x22,0x20,0x22,0x60,0x02,0x00,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x14,0x80,0x22,0xF0,0x41,0x20,0x3E,0xA0,0x10,0xA0,0x4A,0xA0, +0x2A,0xA0,0x24,0x40,0x0E,0xA0,0x71,0x10,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x29,0x40,0x2A,0x20,0x3C,0x10,0x2B,0xE0,0x28,0x00,0x39,0x20, +0x2C,0xA0,0x2A,0xA0,0x2A,0x40,0x5F,0xF0,0x00,0x00, +/* */ +0x24,0x20,0x22,0x20,0x38,0xF0,0x40,0x40,0x76,0xA0,0x22,0xF0,0x22,0x20,0x7A,0x20, +0x22,0xF0,0x22,0x20,0x35,0x20,0x28,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x28,0x90,0x48,0x90,0x00,0x00, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x59,0x00,0x57,0x80,0x52,0x80,0x53,0xF0,0x10,0x80, +0x12,0xA0,0x2A,0x90,0x24,0x90,0x41,0x80,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x27,0xF0,0x49,0x00,0x77,0x80,0x12,0x80,0x23,0xF0,0x78,0x80, +0x02,0xA0,0x1A,0x90,0x64,0x90,0x01,0x80,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x57,0xE0,0x3A,0x20,0x13,0xE0,0x7E,0x20,0x13,0xE0,0x3A,0x90, +0x56,0xA0,0x12,0x40,0x13,0x20,0x12,0x10,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x5F,0xF0,0x20,0x00,0x0F,0xE0,0x08,0x20,0x08,0x20,0x0F,0xE0, +0x21,0x00,0x49,0x20,0x11,0x10,0x03,0x00,0x00,0x00, +/* */ +0x27,0xC0,0x11,0x40,0x45,0x60,0x29,0x50,0x02,0x40,0x24,0xC0,0x42,0x00,0x7F,0xF0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x27,0xC0,0x11,0x40,0x45,0x60,0x29,0x50,0x02,0x40,0x24,0xC0,0x52,0x40,0x0A,0x80, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x22,0x10, +0x21,0x20,0x20,0xC0,0x24,0x40,0x38,0x30,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x08,0x80,0x08,0x80,0x7F,0xF0,0x48,0x90,0x48,0x90,0x55,0x50, +0x62,0x30,0x44,0x10,0x40,0x10,0x40,0x30,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x79,0x40,0x21,0x40,0x57,0xF0,0x7D,0x50,0x15,0x50,0x1D,0x50, +0x76,0xB0,0x14,0x10,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x3F,0xE0,0x22,0x20,0x21,0x20,0x7F,0xF0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x70,0x80,0x57,0xF0,0x50,0x00,0x53,0xE0,0x72,0x20,0x52,0x20,0x53,0xE0, +0x50,0x80,0x72,0xA0,0x54,0x90,0x01,0x80,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x7F,0xF0, +0x40,0x10,0x1F,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x21,0x00,0x10,0x80,0x07,0xF0,0x00,0x00,0x73,0xE0,0x12,0x20,0x12,0x20,0x13,0xE0, +0x10,0x80,0x1A,0xA0,0x14,0x90,0x01,0x80,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x7D,0x50,0x12,0x20,0x17,0xF0,0x1A,0x20,0x73,0xE0, +0x12,0x20,0x13,0xE0,0x12,0xA0,0x35,0x90,0x00,0x00, +/* */ +0x7C,0x80,0x29,0x70,0x2A,0x50,0x3A,0x50,0x2A,0x50,0x2B,0x50,0x3B,0x50,0x2B,0x50, +0x2D,0x50,0x79,0x70,0x09,0x40,0x0A,0x40,0x00,0x00, +/* */ +0x11,0x00,0x1F,0xF0,0x22,0x80,0x34,0x50,0x6F,0xE0,0x34,0x50,0x27,0xC0,0x24,0x40, +0x27,0xC0,0x21,0x00,0x25,0x40,0x2B,0x20,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x37,0xE0,0x10,0x20,0x10,0x40,0x30,0x80, +0x50,0x80,0x10,0x80,0x20,0x80,0x43,0x80,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x55,0x50,0x5A,0x20,0x57,0xF0,0x52,0x20,0x13,0xE0, +0x12,0x20,0x2B,0xE0,0x22,0xA0,0x45,0x90,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x3D,0xE0,0x25,0x20,0x14,0xA0,0x23,0x20,0x0D,0x80, +0x71,0x70,0x0E,0x00,0x01,0xC0,0x3E,0x00,0x00,0x00, +/* */ +0x20,0x00,0x17,0xF0,0x00,0x10,0x00,0x20,0x70,0xC0,0x10,0x80,0x10,0x80,0x10,0x80, +0x10,0x80,0x11,0x80,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x41,0x00,0x2F,0xF0,0x02,0x80,0x14,0x50,0x4F,0xE0,0x34,0x50,0x07,0xC0,0x04,0x40, +0x17,0xC0,0x21,0x00,0x49,0x20,0x13,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00,0x01,0x00,0x01,0x00, +0x01,0x00,0x01,0x00,0x01,0x00,0x07,0x00,0x00,0x00, +/* */ +0x17,0xF0,0x14,0x90,0x17,0xF0,0x7C,0x90,0x17,0xF0,0x12,0x00,0x17,0xF0,0x1A,0x20, +0x71,0x40,0x17,0xF0,0x12,0x20,0x33,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x38,0x80,0x45,0x50,0x72,0x20,0x27,0xF0,0x22,0x20,0x7B,0xE0, +0x22,0x20,0x23,0xE0,0x32,0xA0,0x25,0x90,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x2A,0xA0,0x26,0x60,0x2A,0xA0,0x21,0x00,0x26,0xC0,0x39,0x30, +0x26,0x80,0x21,0x20,0x20,0xC0,0x4F,0x00,0x00,0x00, +/* */ +0x10,0x20,0x11,0x20,0x54,0xA0,0x38,0x20,0x11,0x20,0x7C,0xA0,0x10,0x30,0x3B,0xE0, +0x54,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x00,0x00, +/* */ +0x00,0x10,0x7E,0x10,0x10,0x90,0x10,0x90,0x1E,0x90,0x22,0x90,0x52,0x90,0x0A,0x90, +0x04,0x90,0x08,0x10,0x10,0x10,0x20,0x70,0x00,0x00, +/* */ +0x3E,0x10,0x10,0x90,0x3E,0x90,0x52,0x90,0x0C,0x10,0x70,0x30,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x00,0x20,0x7E,0x20,0x10,0xA0,0x1E,0xA0,0x22,0xA0,0x54,0xA0,0x08,0xA0,0x10,0x20, +0x60,0x60,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x02,0x00,0x12,0x40,0x22,0x20,0x43,0x90,0x0E,0x00,0x70,0x00,0x04,0x00,0x3F,0xE0, +0x04,0x20,0x08,0x20,0x10,0x20,0x60,0xC0,0x00,0x00, +/* */ +0x12,0x40,0x52,0x40,0x27,0xE0,0x52,0x40,0x1F,0xF0,0x10,0x00,0x37,0xE0,0x54,0x20, +0x17,0xE0,0x14,0x20,0x17,0xE0,0x64,0x20,0x00,0x00, +/* */ +0x02,0x40,0x72,0x40,0x22,0x40,0x2F,0xF0,0x22,0x40,0x73,0x40,0x26,0xE0,0x2B,0x50, +0x22,0x40,0x32,0x40,0x62,0x40,0x02,0x40,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x08,0x80,0x7D,0xF0,0x08,0x80,0x19,0xC0,0x1D,0xC0,0x2A,0xA0, +0x2A,0xA0,0x4C,0x90,0x08,0x80,0x08,0x80,0x00,0x00, +/* */ +0x04,0x90,0x7A,0xA0,0x17,0xF0,0x12,0xA0,0x24,0x90,0x3A,0x20,0x6B,0x70,0x2D,0x20, +0x2D,0xA0,0x3A,0xF0,0x2A,0x20,0x04,0x20,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x5A,0xD0,0x02,0x00,0x3A,0xE0,0x10,0x40,0x7D,0xF0, +0x10,0x40,0x38,0xE0,0x55,0x50,0x10,0x40,0x00,0x00, +/* */ +0x12,0x00,0x12,0x00,0x53,0xF0,0x54,0x80,0x58,0x40,0x50,0x00,0x57,0xF0,0x54,0x90, +0x54,0x90,0x14,0x90,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x08,0x00,0x08,0xF0,0x14,0x90,0x22,0x90,0x49,0xA0,0x04,0xA0,0x3E,0x90,0x02,0x90, +0x04,0x90,0x14,0xE0,0x08,0x80,0x04,0x80,0x00,0x00, +/* */ +0x24,0x90,0x3A,0xA0,0x4F,0xF0,0x12,0xA0,0x7C,0x90,0x52,0x20,0x7B,0x70,0x55,0x20, +0x7D,0xA0,0x02,0xF0,0x1A,0x20,0x64,0x20,0x00,0x00, +/* */ +0x44,0x40,0x24,0x40,0x04,0x40,0x1E,0xF0,0x44,0x40,0x2C,0x40,0x0E,0xE0,0x14,0xD0, +0x05,0x40,0x24,0x40,0x44,0x40,0x04,0x40,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x40,0x00,0x2F,0xE0,0x08,0x20,0x0B,0xA0,0x0A,0xA0,0x0F,0xE0, +0x20,0x00,0x5F,0xF0,0x09,0x20,0x13,0x10,0x00,0x00, +/* */ +0x08,0x60,0x13,0x80,0x30,0x80,0x57,0xF0,0x10,0x80,0x13,0xE0,0x00,0x00,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x0D,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x10,0x40,0x08,0x80,0x07,0x00,0x18,0xC0,0x60,0x30, +0x1F,0xC0,0x10,0x40,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0x40,0x7A,0x20,0x14,0x90,0x10,0x40,0x1B,0xE0,0x70,0x20, +0x10,0x40,0x11,0x40,0x10,0x80,0x30,0x40,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x11,0x40,0x12,0x20,0x14,0x90,0x78,0x40,0x13,0xE0,0x10,0x20, +0x10,0x40,0x19,0x40,0x60,0x80,0x00,0x40,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x10,0x40,0x24,0x20, +0x4F,0x90,0x18,0x80,0x07,0x00,0x78,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x5A,0xD0,0x02,0x00,0x3A,0xE0,0x05,0x00,0x1A,0xC0, +0x6F,0xB0,0x01,0x00,0x0E,0x00,0x01,0x80,0x00,0x00, +/* */ +0x10,0x80,0x5C,0x80,0x51,0x40,0x51,0x20,0x7E,0x90,0x00,0x40,0x55,0xE0,0x54,0x20, +0x6C,0x40,0x45,0x40,0x7C,0x80,0x04,0x40,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x39,0x40,0x42,0x20,0x74,0x90,0x20,0x40,0x23,0xE0,0x78,0x20, +0x20,0x40,0x29,0x40,0x30,0x80,0x20,0x40,0x00,0x00, +/* */ +0x09,0x00,0x09,0x00,0x12,0x80,0x14,0x40,0x39,0x30,0x50,0x80,0x17,0xE0,0x10,0x20, +0x10,0x40,0x12,0x80,0x11,0x00,0x10,0x80,0x00,0x00, +/* */ +0x44,0x80,0x28,0x80,0x01,0x40,0x7A,0x20,0x14,0x90,0x38,0x40,0x13,0xE0,0x78,0x20, +0x10,0x40,0x11,0x40,0x20,0x80,0x40,0x40,0x00,0x00, +/* */ +0x01,0x00,0x4F,0xE0,0x21,0x00,0x1F,0xF0,0x04,0x40,0x0A,0x20,0x03,0xC0,0x14,0x40, +0x2A,0x80,0x41,0x00,0x06,0xC0,0x18,0x30,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x00,0x20,0x1F,0xE0,0x00,0x20,0x3F,0xE0,0x02,0x00,0x12,0x20, +0x22,0x40,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x00,0x80,0x73,0xE0,0x50,0x80,0x57,0xF0,0x62,0x20,0x65,0x10,0x51,0xE0,0x52,0x20, +0x55,0x40,0x60,0x80,0x41,0x40,0x46,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0x40,0x56,0x20,0x54,0x90,0x54,0x40,0x57,0xE0,0x54,0x20, +0x54,0x40,0x5D,0x40,0x64,0x80,0x00,0x40,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x28,0x40,0x44,0x80,0x13,0xF0,0x09,0x10,0x7D,0x50,0x05,0x50, +0x09,0x50,0x28,0x40,0x10,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x1F,0xE0,0x10,0x20,0x10,0x20,0x10,0x20,0x1F,0xE0,0x04,0x00,0x04,0x00,0x3F,0xF0, +0x04,0x10,0x08,0x10,0x10,0x10,0x20,0x60,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x64,0x30,0x02,0x00,0x3F,0xC0,0x00,0x40, +0x00,0x80,0x19,0x00,0x06,0x00,0x01,0x80,0x00,0x00, +/* */ +0x04,0x00,0x59,0xF0,0x30,0x90,0x14,0x90,0x1A,0xB0,0x51,0x00,0x2F,0xE0,0x09,0x20, +0x0F,0xE0,0x29,0x20,0x4F,0xE0,0x08,0x20,0x00,0x00, +/* */ +0x01,0x00,0x70,0x80,0x27,0xF0,0x21,0x00,0x22,0x20,0x77,0xF0,0x20,0x10,0x25,0x40, +0x25,0x40,0x35,0x40,0x65,0x50,0x08,0x30,0x00,0x00, +/* */ +0x11,0x00,0x16,0xF0,0x14,0x50,0x7D,0x50,0x16,0xB0,0x39,0x00,0x37,0xF0,0x54,0x90, +0x17,0xF0,0x14,0x90,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x13,0xF0,0x10,0x80,0x21,0x20,0x3B,0xF0,0x68,0x10,0x2A,0xA0, +0x2A,0xA0,0x3A,0xA0,0x2A,0xA0,0x04,0x30,0x00,0x00, +/* */ +0x21,0x00,0x26,0xF0,0x34,0x50,0x55,0x50,0x06,0xB0,0x21,0x00,0x27,0xF0,0x24,0x90, +0x27,0xF0,0x24,0x90,0x37,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x0C,0x00,0x71,0xF0,0x50,0x90,0x48,0x90,0x75,0x30,0x00,0x00,0x3F,0xE0,0x22,0x20, +0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x10,0x10,0x08,0x10,0x00,0x90,0x7E,0x90,0x04,0x90,0x04,0x90,0x24,0x90,0x14,0x90, +0x08,0x90,0x14,0x10,0x22,0x10,0x42,0x70,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x11,0x00,0x56,0xF0,0x35,0x50,0x16,0xB0,0x10,0x00,0x37,0xF0, +0x54,0x90,0x17,0xF0,0x24,0x90,0x47,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x40,0x80,0x2F,0xF0,0x02,0x00,0x04,0x20,0x4F,0xF0,0x20,0x10,0x05,0x40, +0x05,0x40,0x25,0x50,0x49,0x50,0x11,0x30,0x00,0x00, +/* */ +0x11,0x00,0x16,0x70,0x15,0x50,0x7D,0x50,0x15,0x50,0x35,0x50,0x3D,0x50,0x57,0x50, +0x15,0x70,0x11,0x40,0x12,0x40,0x14,0x40,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x08,0x80,0x08,0x40, +0x10,0x20,0x10,0x20,0x20,0x10,0x40,0x10,0x00,0x00, +/* */ +0x04,0x80,0x04,0x40,0x04,0x00,0x7F,0xF0,0x05,0x00,0x09,0x00,0x09,0x20,0x09,0x40, +0x11,0x80,0x11,0x10,0x23,0x10,0x44,0xF0,0x00,0x00, +/* */ +0x04,0x80,0x7F,0xF0,0x09,0x40,0x11,0x90,0x6E,0xF0,0x00,0x00,0x7F,0xF0,0x10,0x40, +0x1F,0xC0,0x10,0x70,0x7F,0xC0,0x00,0x40,0x00,0x00, +/* */ +0x02,0x40,0x72,0x20,0x52,0x00,0x5F,0xF0,0x52,0x80,0x52,0x90,0x52,0xA0,0x52,0xC0, +0x74,0x80,0x55,0x90,0x0A,0x90,0x10,0x70,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x01,0x00,0x04,0x80,0x7F,0xF0,0x04,0x00,0x0A,0x40, +0x0A,0x80,0x13,0x00,0x22,0x10,0x4D,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x11,0x40,0x39,0xE0,0x2A,0x20,0x29,0xC0,0x36,0x30, +0x2A,0x80,0x2B,0xE0,0x34,0x80,0x27,0xF0,0x00,0x00, +/* ¡ */ +0x01,0x00,0x73,0xE0,0x56,0x20,0x51,0xC0,0x66,0x30,0x51,0xC0,0x54,0x80,0x57,0xF0, +0x68,0x80,0x43,0xE0,0x40,0x80,0x4F,0xF0,0x00,0x00, +/* ¢ */ +0x04,0x80,0x04,0x40,0x7F,0xF0,0x09,0x00,0x09,0x40,0x11,0x80,0x23,0x10,0x4C,0xF0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* £ */ +0x11,0x40,0x11,0x20,0x11,0x00,0x7B,0xF0,0x11,0x40,0x11,0x40,0x19,0x50,0x71,0x60, +0x12,0x40,0x12,0xD0,0x15,0x50,0x38,0x30,0x00,0x00, +/* ¤ */ +0x02,0x40,0x72,0x20,0x52,0x00,0x5F,0xF0,0x62,0x80,0x62,0x90,0x52,0xA0,0x52,0xC0, +0x54,0x80,0x65,0x90,0x4A,0x90,0x50,0x70,0x00,0x00, +/* ¥ */ +0x10,0x80,0x14,0x90,0x12,0xA0,0x7F,0xF0,0x12,0xA0,0x34,0x90,0x39,0x00,0x57,0xF0, +0x11,0x20,0x12,0x20,0x11,0xC0,0x16,0x30,0x00,0x00, +/* ¦ */ +0x12,0x40,0x0A,0x80,0x7F,0xF0,0x0A,0x80,0x12,0x40,0x20,0x20,0x04,0x00,0x7F,0xF0, +0x08,0x40,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* § */ +0x10,0x80,0x14,0x90,0x12,0xA0,0x7F,0xF0,0x12,0xA0,0x14,0x90,0x19,0x00,0x77,0xF0, +0x11,0x20,0x12,0x20,0x11,0xC0,0x36,0x30,0x00,0x00, +/* ¨ */ +0x21,0x00,0x3D,0xF0,0x52,0x40,0x0A,0x80,0x7F,0xF0,0x0A,0x80,0x32,0x60,0x04,0x00, +0x7F,0xF0,0x08,0x80,0x07,0x00,0x38,0xE0,0x00,0x00, +/* © */ +0x1F,0xF0,0x50,0x10,0x3F,0xF0,0x10,0x00,0x1F,0xF0,0x50,0x80,0x37,0xF0,0x14,0x90, +0x16,0xD0,0x34,0x90,0x56,0xD0,0x24,0xB0,0x00,0x00, +/* ª */ +0x73,0xF0,0x50,0x40,0x50,0x40,0x55,0xF0,0x65,0x50,0x65,0x50,0x55,0xB0,0x55,0x10, +0x55,0x10,0x65,0x30,0x44,0x00,0x47,0xF0,0x00,0x00, +/* « */ +0x10,0x40,0x7F,0xF0,0x14,0x40,0x02,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x20,0x00,0x20,0x00,0x40,0x00,0x00,0x00, +/* ¬ */ +0x02,0x00,0x03,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x20,0x00,0x20,0x00,0x40,0x00,0x00,0x00, +/* ­ */ +0x10,0x00,0x11,0xF0,0x1C,0x40,0x10,0x80,0x3D,0xF0,0x25,0x10,0x25,0x50,0x3D,0x50, +0x25,0x50,0x20,0x40,0x20,0xA0,0x41,0x10,0x00,0x00, +/* ® */ +0x01,0x00,0x3F,0xF0,0x22,0x00,0x21,0x00,0x2F,0xF0,0x28,0x10,0x28,0x10,0x2F,0xF0, +0x28,0x10,0x28,0x00,0x28,0x00,0x50,0x00,0x00,0x00, +/* ¯ */ +0x10,0x80,0x10,0x40,0x17,0xF0,0x5A,0x10,0x52,0x10,0x52,0x10,0x53,0xF0,0x12,0x10, +0x12,0x00,0x2A,0x00,0x2A,0x00,0x44,0x00,0x00,0x00, +/* ° */ +0x10,0xE0,0x10,0x80,0x17,0xF0,0x7C,0x90,0x14,0xE0,0x17,0x90,0x1C,0x70,0x74,0x80, +0x17,0xF0,0x14,0x90,0x15,0x10,0x3A,0x60,0x00,0x00, +/* ± */ +0x02,0x00,0x03,0xF0,0x02,0x00,0x3F,0xE0,0x28,0xA0,0x25,0x20,0x22,0x20,0x25,0x20, +0x28,0xA0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* ² */ +0x03,0xE0,0x02,0x00,0x3F,0xF0,0x22,0x10,0x23,0xC0,0x3E,0x10,0x21,0xF0,0x22,0x00, +0x2F,0xE0,0x22,0x20,0x24,0x20,0x48,0xC0,0x00,0x00, +/* ³ */ +0x10,0x00,0x1F,0x80,0x20,0x80,0x7F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x7F,0xF0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* ´ */ +0x10,0x40,0x7D,0xF0,0x38,0xE0,0x55,0x50,0x12,0x40,0x3F,0xF0,0x24,0x80,0x3F,0xE0, +0x24,0xA0,0x3F,0xE0,0x28,0x90,0x4E,0xF0,0x00,0x00, +/* µ */ +0x03,0xE0,0x78,0x20,0x13,0xE0,0x10,0x20,0x27,0xF0,0x38,0x80,0x6C,0x90,0x2A,0xA0, +0x29,0xC0,0x2A,0xA0,0x3C,0x90,0x29,0x80,0x00,0x00, +/* ¶ */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x00,0x80,0x3C,0xE0,0x25,0x20,0x3C,0xC0, +0x0B,0x30,0x2D,0xE0,0x29,0x20,0x7D,0xE0,0x00,0x00, +/* · */ +0x01,0x00,0x79,0xE0,0x4A,0x20,0x4D,0x40,0x78,0x80,0x11,0x40,0x16,0x30,0x5B,0xE0, +0x52,0x20,0x52,0x20,0x5B,0xE0,0x62,0x20,0x00,0x00, +/* ¸ */ +0x01,0x00,0x7D,0xE0,0x46,0x20,0x55,0x20,0x54,0xC0,0x55,0x20,0x56,0x10,0x55,0xE0, +0x55,0x20,0x11,0x20,0x29,0xE0,0x45,0x20,0x00,0x00, +/* ¹ */ +0x01,0x00,0x3F,0xF0,0x24,0x80,0x3F,0xF0,0x24,0x90,0x3F,0xF0,0x20,0x00,0x28,0x90, +0x2E,0xA0,0x28,0xC0,0x2A,0x90,0x4C,0x70,0x00,0x00, +/* º */ +0x00,0x80,0x5E,0xE0,0x33,0x20,0x12,0xA0,0x1E,0x40,0x44,0xA0,0x25,0x10,0x16,0xE0, +0x14,0xA0,0x34,0xA0,0x56,0xE0,0x38,0xA0,0x00,0x00, +/* » */ +0x23,0xE0,0x10,0x20,0x03,0xE0,0x78,0x20,0x0F,0xF0,0x10,0x80,0x14,0x90,0x3A,0xA0, +0x51,0xC0,0x12,0xA0,0x14,0x90,0x11,0x80,0x00,0x00, +/* ¼ */ +0x3F,0xC0,0x00,0x40,0x1F,0xC0,0x00,0x40,0x7F,0xF0,0x02,0x00,0x22,0x20,0x17,0x40, +0x0A,0x80,0x12,0x40,0x62,0x30,0x06,0x00,0x00,0x00, +/* ½ */ +0x00,0x80,0x70,0x80,0x57,0xF0,0x50,0x80,0x60,0x80,0x5F,0xF0,0x50,0x80,0x54,0x90, +0x64,0x90,0x44,0x90,0x47,0xF0,0x40,0x10,0x00,0x00, +/* ¾ */ +0x76,0xA0,0x5A,0x90,0x36,0x80,0x5A,0xF0,0x0B,0x80,0x14,0xA0,0x2A,0xA0,0x54,0xA0, +0x08,0x40,0x32,0xD0,0x05,0x30,0x3A,0x10,0x00,0x00, +/* ¿ */ +0x00,0x80,0x78,0x40,0x09,0xF0,0x29,0x10,0x29,0x10,0x29,0x10,0x3D,0xF0,0x05,0x10, +0x15,0x00,0x65,0x00,0x05,0x00,0x1A,0x00,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x10,0x40,0x10,0x40,0x1F,0xC0,0x00,0x00,0x3F,0xE0,0x20,0x20, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x3A,0x20,0x42,0x20,0x7B,0xE0,0x20,0x00,0x27,0xF0,0x7C,0x10, +0x24,0x10,0x24,0x10,0x37,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x0B,0xE0,0x0A,0x20,0x12,0x20,0x12,0x20,0x33,0xE0,0x50,0x00,0x17,0xF0,0x14,0x10, +0x14,0x10,0x14,0x10,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x21,0x00,0x11,0x00,0x7B,0xF0,0x22,0x00,0x24,0x30,0x3B,0xC0,0x2A,0x90,0x2A,0xA0, +0x2A,0x40,0x2A,0x40,0x2B,0x20,0x5A,0x10,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x25,0x00,0x2B,0xF0,0x31,0x20,0x25,0xE0,0x29,0x20, +0x39,0xE0,0x2B,0x20,0x28,0xC0,0x4B,0x30,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x29,0x20,0x25,0x40,0x3F,0xF0,0x25,0x40,0x2A,0x20, +0x3F,0xF0,0x24,0x40,0x23,0x80,0x5C,0x70,0x00,0x00, +/* */ +0x20,0x80,0x24,0x90,0x42,0xA0,0x57,0xF0,0x62,0xA0,0x24,0x90,0x41,0x00,0x77,0xF0, +0x01,0x20,0x12,0x20,0x61,0xC0,0x06,0x30,0x00,0x00, +/* */ +0x02,0x00,0x03,0xE0,0x02,0x00,0x3F,0xF0,0x22,0x10,0x23,0xC0,0x3E,0x10,0x21,0xF0, +0x21,0x00,0x2A,0xA0,0x2A,0x50,0x51,0xD0,0x00,0x00, +/* */ +0x1F,0xE0,0x20,0x00,0x5F,0xC0,0x00,0x00,0x3F,0xC0,0x01,0x40,0x3F,0x40,0x01,0x40, +0x7F,0xC0,0x24,0xD0,0x15,0x30,0x2C,0x90,0x00,0x00, +/* */ +0x11,0x00,0x27,0xE0,0x41,0x20,0x1F,0xF0,0x21,0x20,0x67,0xE0,0x21,0x00,0x27,0xE0, +0x21,0x00,0x2F,0xF0,0x21,0x00,0x21,0x00,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x04,0x00,0x28,0xA0,0x1F,0x40,0x02,0x00,0x15,0x40,0x2F,0xA0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x01,0xE0,0x41,0x00,0x2F,0xF0,0x09,0x10,0x09,0xC0,0x4F,0x10,0x28,0xF0,0x09,0x00, +0x08,0x80,0x2A,0x20,0x4D,0x50,0x11,0xC0,0x00,0x00, +/* */ +0x13,0xE0,0x10,0x20,0x23,0xE0,0x48,0x20,0x77,0xF0,0x10,0x80,0x24,0x90,0x72,0xA0, +0x01,0xC0,0x12,0xA0,0x64,0x90,0x01,0x80,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x28,0x90,0x48,0x90,0x02,0x00, +0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x40,0x50,0x1F,0x80,0x02,0x00,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x48,0x90,0x00,0x00,0x1F,0x80,0x01,0x00, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x01,0x00,0x4F,0xF0,0x22,0x40,0x06,0x60,0x0A,0x50,0x42,0x40,0x21,0x00,0x1F,0xF0, +0x05,0x40,0x29,0x20,0x51,0x10,0x01,0x00,0x00,0x00, +/* */ +0x0C,0x00,0x71,0xF0,0x41,0x10,0x65,0x10,0x55,0x90,0x45,0x50,0x45,0x10,0x5D,0x10, +0x65,0x30,0x09,0x00,0x11,0x00,0x21,0x00,0x00,0x00, +/* */ +0x06,0x80,0x38,0x80,0x08,0x80,0x08,0x80,0x7F,0x80,0x08,0x80,0x08,0x80,0x3E,0x80, +0x22,0x80,0x22,0x90,0x3E,0x90,0x22,0x70,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x78,0x00,0x13,0xE0,0x12,0x20,0x1A,0x20,0x73,0xE0, +0x10,0x80,0x12,0xA0,0x14,0x90,0x31,0x80,0x00,0x00, +/* */ +0x01,0x00,0x7D,0xE0,0x56,0x20,0x55,0x20,0x54,0xC0,0x7D,0x20,0x56,0x10,0x55,0xE0, +0x55,0x20,0x7D,0x20,0x45,0xE0,0x01,0x20,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0x40,0x7A,0x20,0x14,0x10,0x12,0x00,0x1A,0x20,0x72,0xC0, +0x13,0x00,0x12,0x10,0x12,0x10,0x31,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x79,0x40,0x22,0x20,0x34,0x10,0x52,0x00,0x7A,0x20,0x12,0xC0, +0x1B,0x00,0x72,0x10,0x12,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x11,0x40,0x12,0x20,0x34,0x10,0x52,0x00,0x12,0x20,0x12,0xC0, +0x13,0x00,0x12,0x10,0x12,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x10,0x00,0x10,0xC0,0x13,0x00, +0x1C,0x00,0x10,0x20,0x10,0x20,0x0F,0xE0,0x00,0x00, +/* */ +0x21,0x00,0x11,0x00,0x02,0x80,0x04,0x40,0x48,0x30,0x24,0x00,0x04,0x40,0x05,0x80, +0x16,0x00,0x24,0x20,0x44,0x20,0x03,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x21,0x40,0x4A,0x20,0x74,0x10,0x12,0x00,0x22,0x20,0x7A,0xC0, +0x03,0x00,0x1A,0x10,0x62,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x41,0x00,0x21,0x00,0x02,0x80,0x04,0x40,0x68,0x30,0x24,0x00,0x24,0x40,0x25,0x80, +0x26,0x00,0x24,0x20,0x34,0x20,0x23,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x08,0x00,0x1F,0xE0, +0x68,0x40,0x05,0x80,0x0E,0x00,0x70,0x00,0x00,0x00, +/* */ +0x11,0xF0,0x11,0x50,0x11,0xF0,0x7D,0x50,0x55,0xF0,0x54,0xA0,0x7D,0xC0,0x10,0x90, +0x15,0xF0,0x1C,0x40,0x65,0x60,0x02,0xD0,0x00,0x00, +/* */ +0x3F,0xF0,0x24,0x90,0x24,0x90,0x3F,0xF0,0x08,0x00,0x08,0x00,0x0F,0xE0,0x10,0x20, +0x28,0x40,0x05,0x80,0x06,0x00,0x78,0x00,0x00,0x00, +/* */ +0x27,0xF0,0x15,0x50,0x05,0x50,0x07,0xF0,0x71,0x00,0x11,0xF0,0x16,0x10,0x11,0x20, +0x10,0xC0,0x17,0x00,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x37,0xF0,0x45,0x50,0x05,0x50,0x77,0xF0,0x21,0x00,0x21,0xF0,0x72,0x10, +0x25,0x20,0x20,0xC0,0x31,0x80,0x26,0x00,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x08,0x00,0x1F,0xE0, +0x68,0x40,0x05,0x80,0x0E,0x00,0x70,0x00,0x00,0x00, +/* */ +0x73,0xF0,0x12,0x50,0x53,0xF0,0x52,0x50,0x53,0xF0,0x79,0x20,0x0B,0xC0,0x18,0x90, +0x6B,0xF0,0x08,0x80,0x0A,0xA0,0x35,0x90,0x00,0x00, +/* */ +0x47,0xF0,0x24,0x90,0x77,0xF0,0x14,0x90,0x27,0xF0,0x30,0x80,0x6F,0xF0,0x30,0x80, +0x21,0xC0,0x22,0xA0,0x2C,0x90,0x20,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x22,0x00,0x17,0xC0,0x0A,0x40,0x41,0x80,0x2E,0x70, +0x00,0x00,0x17,0xE0,0x24,0x20,0x47,0xE0,0x00,0x00, +/* */ +0x22,0x00,0x13,0xE0,0x04,0x20,0x0A,0x40,0x41,0x80,0x2E,0x70,0x00,0x00,0x07,0xE0, +0x14,0x20,0x24,0x20,0x47,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x01,0x00,0x79,0xE0,0x0A,0x20,0x29,0x20,0x28,0xC0,0x29,0x20,0x3E,0x10,0x05,0xE0, +0x15,0x20,0x65,0x20,0x05,0xE0,0x19,0x20,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x22,0x20,0x4D,0x40,0x70,0x80,0x11,0x40,0x26,0x30,0x7B,0xE0, +0x02,0x20,0x1A,0x20,0x63,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x17,0xE0,0x10,0x20,0x12,0x20,0x7A,0x20,0x2A,0x20,0x2B,0xF0,0x28,0x10,0x48,0x10, +0x2F,0xD0,0x10,0x10,0x28,0x10,0x44,0x60,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x24,0x40,0x24,0x40,0x3F,0xF0,0x24,0x40,0x2E,0xE0, +0x35,0x50,0x24,0x40,0x24,0x40,0x44,0x40,0x00,0x00, +/* */ +0x07,0xE0,0x78,0x20,0x12,0x20,0x12,0x20,0x12,0x20,0x7B,0xF0,0x10,0x10,0x10,0x10, +0x17,0xD0,0x18,0x10,0x60,0x10,0x00,0x60,0x00,0x00, +/* */ +0x07,0xE0,0x78,0x20,0x12,0x20,0x12,0x20,0x22,0x20,0x3B,0xF0,0x68,0x10,0x28,0x10, +0x2F,0xD0,0x38,0x10,0x28,0x10,0x00,0x60,0x00,0x00, +/* */ +0x13,0xE0,0x10,0x20,0x11,0x20,0x7D,0x20,0x55,0x20,0x55,0xF0,0x7C,0x10,0x10,0x10, +0x17,0xD0,0x1C,0x10,0x64,0x10,0x00,0x60,0x00,0x00, +/* */ +0x3F,0xC0,0x00,0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x1F,0xF0,0x00,0x10,0x00,0x10, +0x7F,0xD0,0x00,0x10,0x00,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x3D,0xE0,0x25,0x20,0x3D,0xE0,0x00,0x00,0x3F,0xC0,0x00,0x40,0x10,0x40,0x1F,0xF0, +0x00,0x10,0x7F,0x90,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x00,0x80,0x07,0xF0,0x74,0x00,0x55,0x40,0x55,0x40,0x57,0xF0,0x55,0x40,0x55,0xE0, +0x77,0x50,0x45,0x40,0x05,0x40,0x09,0x40,0x00,0x00, +/* */ +0x07,0xE0,0x70,0x20,0x52,0x20,0x52,0x20,0x52,0x20,0x53,0xF0,0x50,0x10,0x50,0x10, +0x77,0xD0,0x50,0x10,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x27,0xF0,0x24,0x90,0x24,0x90,0x27,0xF0,0x74,0x90,0x24,0x90,0x27,0xF0,0x20,0x80, +0x27,0xF0,0x30,0x80,0x60,0x80,0x0F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x00,0x20,0x09,0x00,0x05,0x00,0x11,0x00,0x09,0x00,0x7F,0xF0, +0x02,0x00,0x04,0xC0,0x18,0x20,0x60,0x10,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x02,0x00,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x08,0x00,0x0F,0xC0, +0x10,0x40,0x28,0x80,0x07,0x00,0x78,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x08,0x10,0x05,0x20,0x11,0x00,0x09,0x00, +0x7F,0xF0,0x02,0x80,0x0C,0x60,0x30,0x10,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xF0,0x02,0x00,0x02,0x00,0x03,0xE0,0x62,0x20,0x22,0x20,0x24,0x20, +0x24,0x20,0x28,0xC0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x03,0x00,0x38,0xC0,0x28,0x00,0x2B,0x90,0x38,0xA0,0x2E,0xC0,0x2A,0xC0,0x3A,0xA0, +0x2A,0xA0,0x2C,0x90,0x28,0x80,0x59,0x80,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x52,0x20,0x50,0x00,0x77,0xF0,0x51,0x40,0x57,0xF0,0x75,0x50, +0x55,0x50,0x56,0xB0,0x74,0x10,0x54,0x30,0x00,0x00, +/* */ +0x27,0xE0,0x24,0x20,0x37,0xE0,0x54,0x20,0x0F,0xF0,0x2A,0x50,0x2F,0xF0,0x20,0x00, +0x27,0xE0,0x22,0x20,0x31,0xC0,0x2E,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x48,0x90,0x02,0x00,0x3F,0xE0,0x22,0x20, +0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x04,0x40,0x5F,0xF0,0x24,0x40,0x00,0x00,0x1F,0xF0,0x42,0x80,0x3F,0xF0,0x12,0x90, +0x12,0x90,0x35,0x50,0x50,0x10,0x10,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x24,0x20,0x22,0x20,0x7F,0xF0,0x48,0x90, +0x7F,0xF0,0x10,0x40,0x0F,0x80,0x70,0x70,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x7F,0xF0,0x48,0x90,0x7F,0xF0,0x00,0x00, +0x3F,0xE0,0x10,0x40,0x0F,0x80,0x70,0x70,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x1B,0xE0,0x52,0x20,0x57,0xF0,0x55,0x50,0x57,0xF0,0x10,0x00, +0x17,0xE0,0x12,0x20,0x11,0xC0,0x16,0x30,0x00,0x00, +/* */ +0x27,0xE0,0x14,0x20,0x07,0xE0,0x04,0x20,0x4F,0xF0,0x2A,0x50,0x0F,0xF0,0x00,0x00, +0x17,0xE0,0x22,0x20,0x41,0xC0,0x0E,0x30,0x00,0x00, +/* á */ +0x47,0xE0,0x24,0x20,0x07,0xE0,0x04,0x20,0x6F,0xF0,0x2A,0x50,0x2F,0xF0,0x20,0x00, +0x27,0xE0,0x32,0x20,0x21,0xC0,0x0E,0x30,0x00,0x00, +/* â */ +0x08,0x80,0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x01,0x00,0x7F,0xF0,0x10,0x00, +0x10,0x00,0x10,0x00,0x10,0x00,0x1F,0xE0,0x00,0x00, +/* ã */ +0x08,0x80,0x08,0x80,0x7F,0xF0,0x08,0x80,0x41,0x00,0x20,0x80,0x1F,0xF0,0x44,0x00, +0x24,0x00,0x04,0x00,0x24,0x00,0x47,0xE0,0x00,0x00, +/* ä */ +0x02,0x00,0x7F,0xF0,0x20,0x00,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* å */ +0x23,0xF0,0x12,0x10,0x02,0x10,0x7B,0xF0,0x22,0x40,0x22,0x40,0x23,0xF0,0x22,0x40, +0x22,0x40,0x22,0x50,0x3B,0x30,0x02,0x10,0x00,0x00, +/* æ */ +0x11,0x00,0x10,0x80,0x18,0x00,0x57,0xF0,0x52,0x00,0x52,0x00,0x52,0x00,0x12,0x00, +0x12,0x00,0x12,0x00,0x12,0x00,0x13,0xE0,0x00,0x00, +/* ç */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x40,0x3F,0xE0,0x08,0x80,0x10,0x40,0x68,0xB0, +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x80,0x00,0x00, +/* è */ +0x12,0x20,0x57,0xF0,0x22,0x20,0x50,0x00,0x17,0xF0,0x14,0x90,0x34,0x90,0x57,0xF0, +0x14,0x90,0x14,0x90,0x17,0xF0,0x64,0x10,0x00,0x00, +/* é */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x04,0x40,0x02,0x80,0x7F,0xF0,0x05,0x10, +0x09,0x20,0x11,0x00,0x61,0x00,0x03,0x00,0x00,0x00, +/* ê */ +0x22,0x20,0x37,0xF0,0x42,0x20,0x00,0x00,0x77,0xF0,0x24,0x90,0x24,0x90,0x77,0xF0, +0x24,0x90,0x24,0x90,0x37,0xF0,0x24,0x10,0x00,0x00, +/* ë */ +0x01,0xE0,0x3E,0x00,0x02,0x00,0x03,0xC0,0x1E,0x00,0x02,0x00,0x03,0xF0,0x7E,0x00, +0x02,0x00,0x02,0x10,0x02,0x10,0x01,0xF0,0x00,0x00, +/* ì */ +0x1F,0xE0,0x00,0x40,0x06,0x80,0x01,0x00,0x7F,0xF0,0x03,0x10,0x05,0x10,0x09,0x20, +0x11,0x00,0x61,0x00,0x01,0x00,0x07,0x00,0x00,0x00, +/* í */ +0x21,0x00,0x36,0x70,0x45,0x50,0x05,0x50,0x75,0x50,0x25,0x50,0x25,0x50,0x77,0x50, +0x25,0x70,0x21,0x40,0x32,0x40,0x24,0x40,0x00,0x00, +/* î */ +0x0C,0x00,0x71,0xF0,0x41,0x10,0x45,0x10,0x45,0x10,0x45,0x10,0x45,0x10,0x5D,0x10, +0x65,0x30,0x09,0x00,0x11,0x00,0x21,0x00,0x00,0x00, +/* ï */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x01,0x40,0x3F,0xF0,0x21,0x00,0x21,0x20,0x21,0x20, +0x21,0x40,0x20,0x90,0x21,0x50,0x46,0x30,0x00,0x00, +/* ð */ +0x3F,0xF0,0x20,0x10,0x2F,0xD0,0x20,0x10,0x00,0x00,0x1F,0xE0,0x10,0x20,0x1F,0xE0, +0x10,0x20,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* ñ */ +0x11,0xF0,0x11,0x10,0x7D,0x50,0x55,0x10,0x54,0x00,0x55,0xF0,0x55,0x10,0x55,0xF0, +0x55,0x10,0x5D,0xF0,0x11,0x10,0x11,0xF0,0x00,0x00, +/* ò */ +0x10,0x80,0x21,0x00,0x53,0xF0,0x2A,0x10,0x13,0xF0,0x6A,0x10,0x1B,0xF0,0x69,0x40, +0x19,0x40,0x69,0x40,0x0A,0x50,0x34,0x30,0x00,0x00, +/* ó */ +0x0C,0x00,0x71,0xF0,0x50,0x90,0x48,0x90,0x75,0x30,0x00,0x00,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* ô */ +0x02,0x00,0x02,0x00,0x04,0x40,0x04,0x40,0x08,0x80,0x10,0x80,0x21,0x00,0x42,0x00, +0x04,0x40,0x08,0x20,0x1F,0xF0,0x00,0x10,0x00,0x00, +/* õ */ +0x00,0x80,0x7C,0x80,0x11,0x00,0x11,0xF0,0x12,0x20,0x7D,0x20,0x11,0x20,0x11,0x40, +0x10,0x80,0x1D,0x40,0x72,0x20,0x04,0x10,0x00,0x00, +/* ö */ +0x10,0x80,0x10,0x80,0x11,0x00,0x7D,0xF0,0x12,0x20,0x31,0x20,0x39,0x20,0x55,0x40, +0x10,0x80,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* ÷ */ +0x12,0x00,0x13,0xF0,0x14,0x00,0x7B,0xE0,0x12,0x20,0x32,0xA0,0x3F,0xF0,0x54,0x20, +0x14,0xA0,0x17,0xF0,0x10,0x20,0x10,0xC0,0x00,0x00, +/* ø */ +0x01,0x00,0x7D,0xF0,0x12,0x00,0x7D,0xF0,0x55,0x10,0x55,0x50,0x6F,0xF0,0x45,0x10, +0x7D,0x50,0x45,0xF0,0x7C,0x10,0x44,0x60,0x00,0x00, +/* ù */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x4A,0x90,0x1F,0xE0,0x20,0x00,0x1F,0xC0,0x12,0x40, +0x7F,0xF0,0x24,0x40,0x3F,0xE0,0x00,0x40,0x00,0x00, +/* ú */ +0x12,0x20,0x17,0xF0,0x12,0x20,0x57,0xE0,0x5A,0x20,0x53,0xE0,0x50,0x80,0x17,0xF0, +0x11,0xC0,0x2A,0xA0,0x24,0x90,0x40,0x80,0x00,0x00, +/* û */ +0x27,0xC0,0x14,0x40,0x04,0x40,0x08,0x30,0x40,0x00,0x2F,0xE0,0x04,0x20,0x04,0x40, +0x12,0x80,0x21,0x00,0x46,0xC0,0x18,0x30,0x00,0x00, +/* ü */ +0x3F,0xF0,0x21,0x10,0x21,0x10,0x3F,0xF0,0x20,0x00,0x2F,0xF0,0x28,0x10,0x2F,0xF0, +0x28,0x10,0x2F,0xF0,0x28,0x10,0x4F,0xF0,0x00,0x00, +/* ý */ +0x12,0x20,0x17,0xF0,0x12,0x20,0x7B,0xE0,0x2A,0x20,0x2B,0xE0,0x28,0x80,0x4F,0xF0, +0x29,0xC0,0x12,0xA0,0x2C,0x90,0x48,0x80,0x00,0x00, +/* þ */ +0x22,0x20,0x31,0x40,0x47,0xF0,0x00,0x80,0x73,0xE0,0x20,0x80,0x27,0xF0,0x70,0x80, +0x27,0xF0,0x21,0x40,0x32,0x20,0x24,0x10,0x00,0x00, +/* ÿ */ +0x10,0x00,0x1F,0xF0,0x20,0x00,0x5F,0xE0,0x12,0x20,0x11,0x20,0x7F,0xF0,0x24,0x20, +0x22,0x20,0x3F,0xF0,0x00,0x20,0x01,0xC0,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x02,0x00, +0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x4B,0xE0,0x48,0x80,0x48,0x80,0x7F,0xF0,0x48,0x80,0x49,0xC0, +0x4A,0xA0,0x7C,0x90,0x48,0x80,0x00,0x80,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x28,0x80,0x2B,0xE0,0x38,0x80,0x0F,0xF0,0x78,0x80, +0x29,0xC0,0x2A,0xA0,0x2C,0x90,0x48,0x80,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x13,0xE0,0x78,0x80,0x28,0x80,0x2F,0xF0,0x28,0x80,0x49,0xC0, +0x2A,0xA0,0x14,0x90,0x28,0x80,0x48,0x80,0x00,0x00, +/* */ +0x13,0xF0,0x12,0x50,0x12,0x50,0x7B,0xF0,0x2A,0x00,0x2A,0xF0,0x2A,0x90,0x4A,0xF0, +0x2A,0x90,0x12,0xF0,0x2A,0x90,0x44,0xF0,0x00,0x00, +/* */ +0x27,0xF0,0x10,0x10,0x00,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10, +0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x70,0x00,0x00, +/* */ +0x47,0xF0,0x20,0x10,0x04,0x10,0x42,0x10,0x42,0x10,0x40,0x90,0x54,0x50,0x54,0x50, +0x54,0x10,0x64,0x90,0x43,0x90,0x40,0x70,0x00,0x00, +/* */ +0x14,0x00,0x12,0xF0,0x24,0x10,0x24,0x10,0x64,0x10,0x24,0x10,0x24,0x10,0x24,0x10, +0x24,0x10,0x24,0x10,0x24,0x10,0x24,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x01,0xF0,0x7D,0x10,0x45,0x10,0x7D,0xF0,0x45,0x10, +0x45,0xF0,0x7D,0x10,0x42,0x10,0x04,0x70,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x0C,0x20,0x32,0x40, +0x0D,0x80,0x33,0x40,0x0D,0x30,0x73,0x00,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x12,0x20,0x7F,0xF0,0x14,0x10,0x33,0xE0,0x39,0x10,0x56,0xA0, +0x11,0x40,0x16,0xE0,0x11,0x50,0x16,0xC0,0x00,0x00, +/* */ +0x01,0xF0,0x7D,0x10,0x45,0xF0,0x7D,0x10,0x45,0xF0,0x7D,0x10,0x02,0x30,0x04,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x23,0xE0,0x30,0x40,0x40,0x80,0x07,0xF0,0x70,0x80,0x21,0x80,0x20,0x00,0x77,0xF0, +0x25,0x50,0x25,0x50,0x35,0x50,0x2F,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x50,0x40,0x20,0x80,0x57,0xF0,0x10,0x80,0x11,0x80,0x30,0x00,0x57,0xF0, +0x15,0x50,0x15,0x50,0x15,0x50,0x6F,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x7D,0xF0,0x10,0x40,0x38,0xE0,0x55,0x50,0x10,0x40,0x04,0x00,0x0F,0xE0, +0x30,0x20,0x08,0xC0,0x07,0x00,0x78,0x00,0x00,0x00, +/* */ +0x1F,0xC0,0x00,0x80,0x01,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x4C,0x90,0x4A,0xA0,0x78,0x80,0x4F,0xF0,0x48,0x80,0x79,0xC0, +0x4A,0xA0,0x4C,0x90,0x78,0x80,0x48,0x80,0x00,0x00, +/* */ +0x7C,0x20,0x12,0xA0,0x7D,0x70,0x54,0x20,0x54,0x70,0x6F,0x20,0x45,0x60,0x7D,0xB0, +0x45,0x20,0x45,0x20,0x7D,0x00,0x46,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3E,0xF0,0x2D,0x60,0x36,0xD0,0x3E,0xF0,0x22,0x80, +0x3E,0xF0,0x22,0x80,0x3E,0xF0,0x42,0x80,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3E,0xF0,0x2D,0x60,0x34,0x50,0x29,0x20,0x25,0x40, +0x3F,0xF0,0x25,0x40,0x29,0x20,0x51,0x10,0x00,0x00, +/* */ +0x20,0x80,0x14,0x90,0x02,0xA0,0x00,0x80,0x77,0xF0,0x10,0x80,0x11,0xC0,0x12,0xA0, +0x14,0x90,0x10,0x80,0x28,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x48,0x40,0x25,0x50,0x00,0xE0,0x00,0x40,0x6D,0xF0,0x24,0x40,0x24,0xE0,0x25,0x50, +0x24,0x40,0x34,0x40,0x2A,0x00,0x11,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x71,0x00,0x11,0xF0,0x12,0x10,0x74,0xA0,0x40,0x80,0x42,0xA0,0x72,0x90, +0x12,0x90,0x14,0x90,0x10,0x80,0x61,0x80,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x12,0x40,0x0A,0x80,0x7F,0xF0,0x02,0x00,0x07,0x00,0x0A,0x80, +0x12,0x40,0x62,0x30,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x09,0x00,0x70,0x80,0x10,0xA0,0x10,0x20,0x7D,0x20,0x15,0x50,0x35,0x50,0x39,0x90, +0x51,0x00,0x13,0x20,0x15,0x20,0x18,0xE0,0x00,0x00, +/* */ +0x01,0xF0,0x7E,0x00,0x24,0x20,0x12,0x40,0x00,0x00,0x3F,0xE0,0x20,0x20,0x22,0x20, +0x22,0x20,0x05,0x00,0x19,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x21,0x00,0x10,0xA0,0x02,0x20,0x02,0x40,0x4A,0x40,0x2A,0xA0,0x0A,0x90, +0x13,0x10,0x02,0x00,0x26,0x20,0x49,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x44,0x10,0x2A,0xA0,0x29,0x50,0x47,0xD0,0x1A,0x00,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x44,0x10,0x02,0x80,0x29,0x20,0x2A,0x50,0x47,0xD0,0x18,0x00, +0x02,0x00,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x7F,0xF0,0x50,0x50,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x04,0x00,0x7F,0xF0,0x12,0x40, +0x3F,0xE0,0x52,0x50,0x12,0xC0,0x02,0x00,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x12,0x20,0x7B,0xE0,0x12,0x20,0x33,0xE0,0x38,0x80,0x57,0xF0, +0x14,0x90,0x14,0x90,0x14,0xB0,0x10,0x80,0x00,0x00, +/* */ +0x7B,0xF0,0x4A,0x10,0x4A,0x10,0x7B,0xF0,0x4A,0x40,0x4A,0x40,0x7B,0xF0,0x4A,0x40, +0x4A,0x40,0x7A,0x50,0x4B,0x30,0x02,0x10,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x22,0x20,0x4B,0xE0,0x72,0x20,0x13,0xE0,0x20,0x80,0x77,0xF0, +0x04,0x90,0x14,0x90,0x64,0xB0,0x00,0x80,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x2F,0xA0,0x20,0x20,0x1F,0x80,0x20,0x80,0x7F,0xE0,0x22,0x20, +0x3F,0xE0,0x05,0x00,0x19,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x0F,0x80,0x10,0x80,0x21,0x00,0x7F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x05,0x00,0x09,0x00,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x1C,0x80,0x24,0x80,0x49,0xE0,0x3E,0xA0,0x2A,0xA0,0x2A,0xA0,0x3E,0xA0, +0x08,0xA0,0x15,0x60,0x24,0x10,0x43,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x11,0xC0,0x12,0x40,0x78,0x80,0x2B,0xE0,0x2A,0xA0,0x2A,0xA0,0x4B,0xE0, +0x29,0x40,0x11,0x50,0x2A,0x50,0x44,0x30,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x20,0x80,0x49,0x00,0x77,0xF0,0x15,0x50,0x25,0xD0,0x75,0x50, +0x05,0xD0,0x15,0x50,0x67,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x02,0x00,0x04,0x00,0x3F,0xF0,0x24,0x90,0x27,0x90,0x24,0x90, +0x27,0x90,0x24,0x90,0x3F,0xF0,0x20,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x12,0x20,0x78,0x00,0x17,0xF0,0x14,0x90,0x1C,0x90,0x77,0xF0, +0x14,0x90,0x14,0x90,0x17,0xF0,0x34,0x10,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x52,0x20,0x50,0x00,0x77,0xF0,0x54,0x90,0x54,0x90,0x77,0xF0, +0x54,0x90,0x54,0x90,0x77,0xF0,0x54,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x11,0x00,0x6B,0xE0,0x32,0x20,0x6B,0xE0,0x1A,0x20, +0x6B,0xE0,0x19,0x40,0x6A,0x50,0x34,0x30,0x00,0x00, +/* */ +0x08,0x80,0x70,0x80,0x10,0xA0,0x12,0x90,0x7A,0x90,0x12,0x90,0x34,0x80,0x38,0x90, +0x50,0x20,0x10,0x40,0x11,0x80,0x16,0x00,0x00,0x00, +/* */ +0x00,0x40,0x5C,0x40,0x34,0x60,0x15,0x50,0x1D,0x50,0x55,0x50,0x3E,0x40,0x14,0x50, +0x14,0x20,0x3C,0x40,0x50,0x80,0x03,0x00,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x21,0x00,0x21,0x00,0x2F,0xE0,0x29,0x20,0x29,0x20, +0x2F,0xE0,0x29,0x20,0x29,0x20,0x4F,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0xA0,0x7A,0x90,0x2A,0x90,0x2A,0x90,0x2C,0x80,0x48,0x90, +0x28,0x20,0x10,0x40,0x29,0x80,0x46,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x02,0x80,0x3F,0xF0, +0x22,0x20,0x31,0x40,0x28,0x90,0x43,0x70,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x22,0x20,0x22,0x20,0x22,0x40,0x45,0x00, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x21,0x00,0x21,0x00,0x3F,0xF0,0x21,0x00, +0x20,0x80,0x28,0x50,0x30,0x30,0x20,0x10,0x00,0x00, +/* */ +0x13,0xF0,0x12,0x10,0x12,0x10,0x7B,0xF0,0x12,0x40,0x12,0x40,0x1B,0xF0,0x72,0x40, +0x12,0x40,0x12,0x50,0x13,0x30,0x32,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x25,0x20,0x25,0x20,0x25,0x20,0x25,0x20,0x25,0x20,0x25,0x20, +0x25,0x20,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3E,0x80,0x40,0x80,0x3E,0xF0,0x23,0x20,0x2A,0xA0,0x7F,0xA0,0x22,0xA0, +0x2A,0xA0,0x3F,0x40,0x02,0xA0,0x0D,0x10,0x00,0x00, +/* */ +0x15,0xF0,0x12,0x10,0x18,0x90,0x54,0x10,0x57,0xF0,0x54,0x50,0x55,0x50,0x14,0x90, +0x15,0x50,0x16,0x50,0x14,0x10,0x14,0x70,0x00,0x00, +/* */ +0x4F,0xF0,0x22,0x10,0x02,0x10,0x5F,0xD0,0x52,0x50,0x52,0x50,0x5F,0xD0,0x42,0x10, +0x42,0x90,0x5F,0xD0,0x40,0x50,0x40,0x30,0x00,0x00, +/* */ +0x7D,0xF0,0x45,0x10,0x45,0x10,0x45,0xF0,0x7D,0x10,0x45,0x10,0x45,0xF0,0x45,0x10, +0x7D,0x10,0x41,0x10,0x02,0x10,0x04,0x70,0x00,0x00, +/* */ +0x13,0xF0,0x12,0x10,0x11,0xE0,0x7D,0x20,0x55,0xE0,0x55,0x20,0x7D,0xE0,0x10,0x40, +0x17,0xF0,0x1C,0x00,0x65,0x20,0x02,0x10,0x00,0x00, +/* */ +0x01,0x00,0x7B,0xE0,0x4A,0x20,0x4A,0xA0,0x4A,0x60,0x4A,0x00,0x4B,0xF0,0x48,0x10, +0x78,0x10,0x4F,0xD0,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x39,0xF0,0x42,0x10,0x75,0x20,0x20,0xC0,0x21,0x00,0x7B,0xF0, +0x25,0x10,0x21,0x10,0x31,0xF0,0x21,0x10,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x0F,0xE0,0x10,0x20,0x28,0x40,0x05,0x80,0x06,0x00,0x1F,0xF0, +0x68,0x10,0x08,0x10,0x0F,0xF0,0x08,0x10,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x6F,0xB0,0x00,0x00,0x3D,0xE0,0x25,0x20, +0x25,0x20,0x3D,0x20,0x25,0x60,0x01,0x00,0x00,0x00, +/* */ +0x47,0x70,0x25,0x50,0x03,0x30,0x05,0x50,0x60,0x80,0x23,0x40,0x2C,0xB0,0x23,0x00, +0x20,0x40,0x27,0x90,0x30,0x60,0x27,0x80,0x00,0x00, +/* */ +0x22,0x40,0x2F,0xF0,0x22,0x40,0x77,0xE0,0x24,0x20,0x27,0xE0,0x34,0x20,0x67,0xE0, +0x21,0x00,0x2F,0xF0,0x22,0x40,0x6C,0x30,0x00,0x00, +/* ġ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x1F,0xC0,0x14,0x40,0x12,0x40,0x7F,0xF0,0x12,0x40, +0x2F,0xA0,0x42,0x10,0x3F,0xE0,0x06,0x00,0x00,0x00, +/* Ģ */ +0x10,0x40,0x7F,0xF0,0x12,0x40,0x3F,0xF0,0x24,0x40,0x3E,0xF0,0x35,0x50,0x2F,0xE0, +0x24,0x00,0x2F,0xE0,0x34,0x20,0x47,0xE0,0x00,0x00, +/* ģ */ +0x11,0x40,0x17,0xF0,0x11,0x40,0x7B,0xE0,0x12,0x20,0x33,0xE0,0x3A,0x20,0x53,0xE0, +0x10,0x80,0x17,0xF0,0x11,0x40,0x16,0x30,0x00,0x00, +/* Ĥ */ +0x39,0x40,0x2F,0xF0,0x29,0x40,0x3B,0xE0,0x2A,0x20,0x2B,0xE0,0x3A,0x20,0x2B,0xE0, +0x28,0x80,0x2F,0xF0,0x29,0x40,0x5A,0x30,0x00,0x00, +/* ĥ */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3E,0xF0,0x2D,0x60,0x34,0x50,0x20,0x00,0x3F,0xF0, +0x24,0x00,0x2F,0xE0,0x34,0x20,0x47,0xE0,0x00,0x00, +/* Ħ */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3E,0xF0,0x2D,0x60,0x34,0x50,0x2F,0xE0,0x21,0x00, +0x2F,0xE0,0x21,0x00,0x3F,0xF0,0x43,0x00,0x00,0x00, +/* ħ */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3E,0xF0,0x35,0x50,0x2F,0xE0,0x29,0x20,0x2F,0xE0, +0x2A,0x20,0x2F,0xE0,0x25,0x50,0x58,0xF0,0x00,0x00, +/* Ĩ */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x78,0x80,0x10,0x80,0x13,0xE0,0x18,0x80,0x71,0xC0, +0x12,0xA0,0x14,0x90,0x10,0x80,0x30,0x80,0x00,0x00, +/* ĩ */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0,0x07,0x00,0x0A,0x80, +0x12,0x40,0x62,0x30,0x02,0x00,0x02,0x00,0x00,0x00, +/* Ī */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x04,0x00,0x7F,0xF0,0x08,0x80,0x70,0x70,0x00,0x00, +/* ī */ +0x3F,0xE0,0x2A,0xA0,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x25,0x20, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* Ĭ */ +0x7E,0x40,0x4A,0x60,0x6E,0x50,0x4A,0x40,0x7E,0xF0,0x08,0x40,0x7E,0x40,0x08,0x40, +0x0E,0xA0,0x70,0xA0,0x2A,0xA0,0x55,0x10,0x00,0x00, +/* ĭ */ +0x01,0x00,0x41,0x00,0x2F,0xF0,0x01,0x00,0x01,0x00,0x47,0xE0,0x21,0x00,0x03,0x80, +0x05,0x40,0x29,0x20,0x51,0x10,0x01,0x00,0x00,0x00, +/* Į */ +0x04,0x40,0x5F,0xF0,0x24,0x40,0x0F,0xE0,0x08,0x20,0x4F,0xE0,0x28,0x20,0x0F,0xE0, +0x01,0x00,0x2F,0xF0,0x42,0x80,0x1C,0x70,0x00,0x00, +/* į */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x3F,0xE0,0x08,0x80,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x7F,0xF0,0x08,0x80,0x70,0x70,0x00,0x00, +/* İ */ +0x00,0x00,0x7B,0xF0,0x48,0x40,0x48,0x80,0x53,0xF0,0x52,0x10,0x4A,0x10,0x4B,0xF0, +0x4A,0x10,0x72,0x10,0x43,0xF0,0x42,0x10,0x00,0x00, +/* ı */ +0x22,0x20,0x17,0xF0,0x02,0x20,0x03,0xE0,0x72,0x20,0x13,0xE0,0x10,0x80,0x17,0xF0, +0x11,0xC0,0x1A,0xA0,0x14,0x90,0x00,0x80,0x00,0x00, +/* IJ */ +0x04,0x00,0x08,0x80,0x10,0x40,0x3F,0xE0,0x02,0x20,0x12,0x00,0x1F,0xE0,0x22,0x00, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* ij */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x02,0x00,0x7F,0xF0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* Ĵ */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x7B,0x20,0x12,0xA0,0x17,0xF0,0x1A,0x20,0x75,0x20, +0x14,0xA0,0x17,0xF0,0x10,0x20,0x30,0xC0,0x00,0x00, +/* ĵ */ +0x10,0x80,0x10,0x80,0x50,0x80,0x78,0x80,0x53,0xE0,0x10,0x80,0x18,0x80,0x70,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* Ķ */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* ķ */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x7B,0x20,0x2A,0xA0,0x2F,0xF0,0x2A,0x20,0x4B,0x20, +0x2A,0xA0,0x13,0xF0,0x28,0x20,0x44,0xC0,0x00,0x00, +/* ĸ */ +0x00,0x00,0x3F,0xE0,0x20,0x20,0x22,0x20,0x21,0x20,0x7F,0xF0,0x20,0x20,0x24,0x20, +0x22,0x20,0x3F,0xF0,0x00,0x20,0x01,0xC0,0x00,0x00, +/* Ĺ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x08,0x00,0x7F,0xF0, +0x12,0x40,0x2F,0xA0,0x42,0x10,0x1F,0xC0,0x00,0x00, +/* ĺ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x08,0x00,0x7F,0xF0, +0x10,0x40,0x3F,0xE0,0x50,0x50,0x1F,0xC0,0x00,0x00, +/* Ļ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x08,0x00,0x7F,0xF0, +0x12,0x40,0x3F,0xE0,0x52,0x50,0x12,0xC0,0x00,0x00, +/* ļ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x08,0x00,0x7F,0xF0, +0x14,0x40,0x3F,0xE0,0x48,0x50,0x31,0x80,0x00,0x00, +/* Ľ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x08,0x00,0x7F,0xF0, +0x22,0x20,0x4B,0x50,0x12,0xA0,0x06,0x00,0x00,0x00, +/* ľ */ +0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x07,0x00,0x0A,0x80,0x0A,0x80,0x12,0x40, +0x22,0x20,0x42,0x10,0x02,0x00,0x02,0x00,0x00,0x00, +/* Ŀ */ +0x00,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x4B,0xE0,0x48,0x80,0x7F,0xF0,0x49,0x40,0x4A,0x20,0x7C,0x90, +0x4B,0xE0,0x48,0x80,0x78,0x80,0x4F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x28,0x80,0x29,0x00,0x3D,0xF0,0x4A,0x20,0x09,0x20,0x0D,0x20,0x79,0x40, +0x08,0x80,0x09,0x40,0x0A,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x09,0x00,0x73,0xE0,0x12,0x20,0x13,0xE0,0x7A,0x20,0x13,0xE0,0x3A,0xA0,0x35,0x90, +0x52,0x40,0x11,0x80,0x10,0x60,0x13,0x80,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x18,0xC0,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x00,0x20,0x3F,0xC0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x06,0x00,0x00,0x00, +/* */ +0x00,0x00,0x0F,0x70,0x75,0x50,0x55,0x50,0x5F,0x60,0x55,0x60,0x55,0x50,0x5F,0x50, +0x75,0x50,0x55,0x60,0x09,0x40,0x13,0x40,0x00,0x00, +/* */ +0x00,0x80,0x00,0x80,0x77,0xF0,0x54,0x90,0x54,0x90,0x54,0x90,0x55,0x50,0x56,0x30, +0x74,0x10,0x54,0x10,0x04,0x10,0x04,0x30,0x00,0x00, +/* */ +0x20,0x80,0x30,0x80,0x47,0xF0,0x04,0x90,0x74,0x90,0x24,0x90,0x25,0x50,0x76,0x30, +0x24,0x10,0x24,0x10,0x34,0x10,0x24,0x30,0x00,0x00, +/* */ +0x00,0x00,0x7E,0xF0,0x12,0x90,0x12,0x90,0x7E,0xA0,0x12,0xA0,0x12,0x90,0x7E,0x90, +0x12,0x90,0x12,0xE0,0x22,0x80,0x4C,0x80,0x00,0x00, +/* */ +0x20,0x00,0x2F,0x70,0x25,0x50,0x75,0x50,0x5F,0x60,0x55,0x60,0x55,0x50,0x5F,0x50, +0x55,0x50,0x25,0x60,0x59,0x40,0x53,0x40,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x27,0xF0,0x4C,0x90,0x74,0x90,0x14,0x90,0x25,0x50,0x76,0x30, +0x04,0x10,0x14,0x10,0x64,0x10,0x04,0x30,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x20,0x00,0x5F,0xE0,0x00,0x00,0x3F,0xC0,0x00,0x40,0x3E,0x40, +0x12,0x40,0x17,0x50,0x21,0x30,0x46,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x08,0x20,0x08,0x40,0x08,0x40,0x08,0x80,0x08,0xF0,0x08,0x10, +0x10,0x10,0x10,0x10,0x20,0x10,0x40,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x11,0x20,0x79,0x20,0x29,0x40,0x29,0x40,0x29,0x70,0x49,0x10, +0x29,0x10,0x12,0x10,0x2A,0x10,0x44,0x60,0x00,0x00, +/* */ +0x00,0x20,0x7F,0x20,0x08,0x20,0x10,0xF0,0x7F,0x20,0x55,0x20,0x55,0xA0,0x55,0x60, +0x55,0x20,0x55,0x20,0x55,0x20,0x43,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x1F,0xC0,0x00,0x00,0x7F,0xF0, +0x02,0x00,0x12,0x40,0x22,0x20,0x46,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x28,0xA0,0x25,0x20,0x2F,0xA0,0x22,0x20, +0x3F,0xE0,0x22,0x20,0x22,0x20,0x20,0xE0,0x00,0x00, +/* */ +0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x04,0x00, +0x7F,0xF0,0x08,0x10,0x10,0x10,0x60,0xE0,0x00,0x00, +/* */ +0x01,0x40,0x79,0x20,0x0B,0xF0,0x4A,0x40,0x2E,0x40,0x2B,0xF0,0x12,0x40,0x13,0xF0, +0x2A,0x40,0x2A,0x40,0x4B,0xF0,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x22,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x48,0x90,0x3F,0xE0, +0x08,0x80,0x7F,0xF0,0x18,0x80,0x6C,0x70,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x17,0x00,0x79,0x50,0x10,0x90,0x13,0x70,0x18,0x00,0x77,0xF0, +0x11,0x40,0x11,0x40,0x12,0x50,0x34,0x30,0x00,0x00, +/* */ +0x00,0x80,0x38,0x40,0x2B,0xF0,0x28,0x00,0x38,0xA0,0x2A,0x50,0x2A,0x50,0x3A,0x50, +0x2A,0xB0,0x2A,0x10,0x2B,0xF0,0x58,0x10,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x58,0x00,0x51,0x40,0x54,0x90,0x54,0x90,0x14,0x90, +0x15,0x50,0x14,0x10,0x17,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x4F,0xF0,0x22,0x10,0x01,0x10,0x5F,0xD0,0x42,0x10,0x42,0x10,0x5F,0xD0,0x52,0x50, +0x52,0x50,0x52,0xD0,0x42,0x10,0x42,0x30,0x00,0x00, +/* */ +0x01,0x00,0x41,0xF0,0x21,0x00,0x0F,0xE0,0x08,0x20,0x4F,0xE0,0x28,0x20,0x0F,0xE0, +0x01,0x00,0x2F,0xF0,0x41,0x00,0x01,0x00,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x4A,0x10,0x4A,0x10,0x4B,0xF0,0x4A,0x00,0x4A,0x90,0x4A,0xA0, +0x7A,0xC0,0x4A,0x90,0x02,0x90,0x04,0x70,0x00,0x00, +/* */ +0x20,0x70,0x27,0x80,0x39,0x10,0x4C,0xA0,0x12,0x00,0x20,0x80,0x27,0xF0,0x21,0x20, +0x23,0x20,0x28,0xC0,0x31,0x20,0x26,0x10,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x25,0x20,0x24,0xA0,0x28,0xA0, +0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xE0,0x00,0x00, +/* */ +0x24,0x20,0x24,0x20,0x3F,0x40,0x74,0x70,0x5F,0x90,0x55,0x50,0x55,0x50,0x5F,0x50, +0x54,0x20,0x2E,0x20,0x55,0x50,0x44,0x90,0x00,0x00, +/* */ +0x11,0x20,0x25,0x40,0x7D,0x80,0x01,0x10,0x3C,0xF0,0x24,0x00,0x3D,0x00,0x25,0x20, +0x3D,0x40,0x25,0x90,0x25,0x10,0x2C,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x10,0x7A,0x10,0x2B,0xF0,0x2A,0x00,0x2A,0x90,0x4A,0xA0, +0x2A,0xC0,0x12,0x90,0x2A,0x90,0x44,0x70,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x04,0x00,0x39,0xE0,0x20,0x20,0x3D,0xE0, +0x20,0x20,0x3F,0xE0,0x08,0x90,0x70,0x70,0x00,0x00, +/* */ +0x11,0x00,0x16,0x60,0x24,0x20,0x24,0x20,0x66,0xE0,0x24,0x20,0x24,0x20,0x27,0xE0, +0x22,0x40,0x22,0x40,0x24,0x50,0x28,0x30,0x00,0x00, +/* */ +0x20,0x00,0x17,0xF0,0x04,0x10,0x04,0x10,0x47,0xF0,0x24,0x00,0x05,0x20,0x05,0x40, +0x15,0x80,0x25,0x10,0x49,0x10,0x10,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x1F,0xE0,0x10,0x20,0x10,0x20,0x1F,0xE0,0x10,0x00,0x14,0x20,0x14,0xC0, +0x17,0x00,0x24,0x10,0x24,0x10,0x43,0xF0,0x00,0x00, +/* */ +0x20,0x20,0x25,0x20,0x24,0xA0,0x74,0xA0,0x24,0x20,0x24,0x40,0x34,0x40,0x65,0x40, +0x26,0xA0,0x24,0xA0,0x21,0x10,0x62,0x10,0x00,0x00, +/* */ +0x0A,0x00,0x0A,0x00,0x13,0xF0,0x12,0x10,0x34,0xA0,0x50,0x80,0x12,0xA0,0x12,0x90, +0x12,0x90,0x14,0x90,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x3F,0xF0,0x24,0x40,0x3F,0xF0,0x24,0x40,0x22,0x00,0x3F,0xF0,0x24,0x00,0x2F,0xE0, +0x34,0x20,0x27,0xE0,0x20,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x00,0x50,0x3B,0xF0,0x28,0x40,0x2B,0xC0,0x38,0x40,0x2B,0xC0,0x28,0x40,0x3B,0xA0, +0x2A,0xA0,0x2A,0xA0,0x29,0x30,0x5A,0x90,0x00,0x00, +/* */ +0x44,0x40,0x22,0x80,0x1F,0xF0,0x01,0x00,0x69,0x20,0x29,0x20,0x29,0x20,0x2F,0xE0, +0x21,0x00,0x22,0x00,0x24,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x1E,0xF0,0x42,0x10,0x22,0x10,0x1E,0xF0,0x10,0x80,0x5E,0xF0,0x22,0x10,0x0A,0x50, +0x06,0x30,0x2A,0x50,0x52,0x90,0x0C,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x02,0x00,0x13,0xE0,0x12,0x00,0x7F,0xF0, +0x20,0x00,0x3F,0xF0,0x00,0x10,0x2A,0xB0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0x80,0x7C,0xF0,0x10,0x80,0x10,0x80,0x1B,0xF0,0x72,0x10, +0x12,0x10,0x12,0x10,0x13,0xF0,0x32,0x10,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x1F,0xF0,0x21,0x00,0x41,0x00,0x1F,0xE0,0x11,0x00,0x11,0x00, +0x7F,0xF0,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x24,0x10,0x27,0xF0,0x44,0xA0,0x77,0xF0,0x54,0xA0,0x57,0xF0, +0x55,0x40,0x75,0x50,0x55,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x22,0x20,0x27,0x70,0x22,0x20,0x77,0x70,0x22,0x20,0x25,0x50,0x37,0xF0,0x62,0x80, +0x27,0xE0,0x20,0x80,0x27,0xF0,0x60,0x80,0x00,0x00, +/* */ +0x20,0x80,0x21,0x40,0x22,0x20,0x74,0x90,0x23,0xE0,0x20,0x20,0x30,0x40,0x61,0x00, +0x24,0xA0,0x25,0x10,0x29,0x50,0x60,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x14,0x40,0x62,0x30,0x1F,0x80,0x00,0x80,0x01,0x00, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x13,0xE0,0x7A,0x20,0x2B,0xE0,0x2A,0x20,0x2B,0xE0,0x4A,0x90, +0x2A,0xA0,0x12,0x40,0x2B,0x20,0x4A,0x10,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x40,0x11,0xF0,0x7D,0x10,0x55,0xF0,0x55,0x10,0x6D,0xF0,0x45,0x40, +0x7D,0x50,0x45,0x20,0x7D,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x04,0x00,0x1F,0xC0,0x10,0x40,0x14,0x40,0x12,0xC0,0x10,0x00,0x1F,0xF0,0x00,0x10, +0x00,0x10,0x7F,0xD0,0x00,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x20,0x10,0x3F,0xF0,0x21,0x00,0x21,0x90,0x3D,0xA0,0x25,0x40, +0x25,0x40,0x29,0x20,0x31,0x10,0x43,0x00,0x00,0x00, +/* */ +0x27,0xF0,0x24,0x10,0x24,0x10,0x77,0xF0,0x24,0x10,0x24,0x10,0x37,0xF0,0x60,0x80, +0x27,0xF0,0x20,0x80,0x20,0x80,0x6F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x70,0x7F,0xC0,0x00,0x40, +0x7D,0xF0,0x24,0x90,0x18,0x60,0x65,0x90,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x10,0x40,0x39,0xF0,0x28,0xA0,0x3D,0xF0,0x24,0x40,0x3F,0xE0, +0x01,0x00,0x7F,0xF0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x00,0x80,0x04,0x80,0x74,0xF0,0x54,0x80,0x5F,0xF0,0x50,0x00,0x50,0x80,0x54,0x90, +0x75,0x50,0x56,0x30,0x04,0x10,0x07,0xF0,0x00,0x00, +/* */ +0x27,0xF0,0x32,0x20,0x43,0xE0,0x02,0x20,0x73,0xE0,0x22,0x30,0x27,0xE0,0x70,0x20, +0x27,0x70,0x25,0x50,0x32,0x20,0x25,0x50,0x00,0x00, +/* */ +0x20,0x80,0x23,0xE0,0x3A,0x20,0x43,0xE0,0x7A,0x20,0x23,0xE0,0x22,0x20,0x7B,0xE0, +0x20,0x80,0x2F,0xF0,0x32,0xA0,0x24,0x90,0x00,0x00, +/* */ +0x4F,0xE0,0x28,0x20,0x08,0x20,0x0F,0xE0,0x48,0x20,0x28,0x20,0x0F,0xE0,0x01,0x00, +0x0F,0xE0,0x21,0x00,0x41,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x0A,0x00,0x0A,0x00,0x13,0xF0,0x34,0x90,0x50,0x80,0x12,0xA0,0x14,0x90,0x11,0x80, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7A,0x10,0x10,0x00,0x3B,0xF0,0x34,0x40,0x50,0x40, +0x10,0x40,0x10,0x40,0x10,0x40,0x11,0xC0,0x00,0x00, +/* */ +0x11,0x00,0x50,0x80,0x27,0xF0,0x54,0x10,0x10,0x00,0x17,0xF0,0x30,0x80,0x50,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x63,0x80,0x00,0x00, +/* */ +0x0A,0xF0,0x0C,0x10,0x4A,0xA0,0x26,0x40,0x09,0xF0,0x0E,0x50,0x14,0x40,0x05,0x70, +0x2F,0x40,0x45,0x40,0x0B,0x40,0x12,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x00,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* š */ +0x21,0x00,0x20,0x80,0x27,0xF0,0x74,0x10,0x20,0x00,0x27,0xF0,0x30,0x80,0x60,0x80, +0x20,0x80,0x20,0x80,0x20,0x80,0x63,0x80,0x00,0x00, +/* Ţ */ +0x01,0x00,0x40,0x80,0x2F,0xF0,0x08,0x10,0x00,0x00,0x4F,0xF0,0x20,0x80,0x00,0x80, +0x10,0x80,0x20,0x80,0x40,0x80,0x03,0x80,0x00,0x00, +/* ţ */ +0x02,0x00,0x12,0x00,0x12,0x00,0x1F,0xE0,0x22,0x00,0x42,0x00,0x02,0x00,0x7F,0xF0, +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* Ť */ +0x20,0x00,0x27,0xE0,0x21,0x20,0x71,0x20,0x21,0x20,0x21,0x20,0x37,0xE0,0x62,0x20, +0x22,0x20,0x22,0x20,0x22,0x20,0x6F,0xF0,0x00,0x00, +/* ť */ +0x20,0x00,0x27,0xE0,0x39,0x20,0x41,0x20,0x79,0x20,0x21,0x20,0x27,0xE0,0x7A,0x20, +0x22,0x20,0x22,0x20,0x32,0x20,0x2F,0xF0,0x00,0x00, +/* Ŧ */ +0x10,0x00,0x17,0xE0,0x21,0x20,0x49,0x20,0x71,0x20,0x11,0x20,0x27,0xE0,0x72,0x20, +0x02,0x20,0x12,0x20,0x62,0x20,0x0F,0xF0,0x00,0x00, +/* ŧ */ +0x00,0x80,0x38,0x80,0x2F,0xF0,0x2C,0x90,0x38,0x80,0x29,0x40,0x29,0x40,0x3B,0x50, +0x2D,0x20,0x29,0x20,0x29,0x90,0x59,0x00,0x00,0x00, +/* Ũ */ +0x00,0x80,0x40,0x80,0x2F,0xF0,0x09,0x10,0x01,0x00,0x42,0x90,0x26,0xA0,0x0A,0x40, +0x02,0x40,0x22,0x20,0x43,0x10,0x02,0x00,0x00,0x00, +/* ũ */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x44,0x10,0x46,0x10,0x0A,0x00,0x09,0x20,0x19,0x40, +0x28,0x80,0x4A,0x40,0x0C,0x30,0x08,0x00,0x00,0x00, +/* Ū */ +0x00,0x00,0x3F,0xE0,0x02,0x00,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x00,0x00,0x08,0x80, +0x7F,0xF0,0x08,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* ū */ +0x10,0x00,0x17,0xE0,0x12,0x20,0x7A,0x20,0x2A,0x20,0x2A,0x20,0x29,0x40,0x49,0x40, +0x28,0x80,0x11,0x40,0x2A,0x20,0x44,0x10,0x00,0x00, +/* Ŭ */ +0x10,0x00,0x11,0xF0,0x7C,0x90,0x24,0x90,0x24,0xA0,0x18,0x40,0x24,0xA0,0x45,0x10, +0x7F,0xE0,0x08,0x20,0x10,0x20,0x60,0xC0,0x00,0x00, +/* ŭ */ +0x10,0x00,0x11,0xF0,0x7C,0x90,0x24,0x90,0x24,0xA0,0x18,0x40,0x24,0xA0,0x41,0x10, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* Ů */ +0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xF0,0x08,0x40,0x08,0x40,0x10,0x80,0x0D,0x00, +0x02,0x00,0x05,0x80,0x18,0x40,0x60,0x20,0x00,0x00, +/* ů */ +0x00,0x30,0x77,0xC0,0x55,0x10,0x52,0xA0,0x57,0xF0,0x70,0x80,0x57,0xF0,0x51,0x00, +0x53,0xE0,0x75,0x20,0x58,0xC0,0x07,0x30,0x00,0x00, +/* Ű */ +0x03,0xE0,0x02,0x00,0x3F,0xF0,0x22,0x90,0x2F,0x20,0x21,0xE0,0x20,0x00,0x2F,0xE0, +0x28,0x00,0x3F,0xF0,0x28,0x00,0x4F,0xE0,0x00,0x00, +/* ű */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x30,0x00,0x17,0xE0,0x14,0x00,0x34,0x00, +0x5F,0xF0,0x14,0x00,0x24,0x00,0x47,0xE0,0x00,0x00, +/* Ų */ +0x20,0x00,0x2F,0x70,0x25,0x50,0x75,0x50,0x2F,0x60,0x25,0x60,0x35,0x50,0x6F,0x50, +0x25,0x50,0x25,0x60,0x29,0x40,0x73,0x40,0x00,0x00, +/* ų */ +0x13,0xE0,0x10,0x80,0x17,0xF0,0x5C,0x90,0x52,0xA0,0x50,0x00,0x57,0xF0,0x10,0x80, +0x17,0xF0,0x15,0x50,0x15,0x50,0x14,0x30,0x00,0x00, +/* Ŵ */ +0x13,0xE0,0x10,0x80,0x57,0xF0,0x3C,0x90,0x12,0xA0,0x78,0x00,0x17,0xF0,0x38,0x80, +0x57,0xF0,0x15,0x50,0x15,0x50,0x14,0x30,0x00,0x00, +/* ŵ */ +0x42,0x40,0x22,0x40,0x0F,0xF0,0x02,0x40,0x61,0x00,0x2F,0xF0,0x22,0x00,0x23,0xE0, +0x26,0x20,0x2A,0x20,0x33,0xE0,0x22,0x20,0x00,0x00, +/* Ŷ */ +0x01,0x40,0x06,0x60,0x72,0x50,0x52,0x40,0x5F,0xF0,0x52,0x40,0x53,0x50,0x5E,0x60, +0x72,0x40,0x52,0xD0,0x03,0x30,0x06,0x10,0x00,0x00, +/* ŷ */ +0x00,0x80,0x7C,0x80,0x40,0xF0,0x54,0x90,0x55,0x20,0x48,0x00,0x48,0x40,0x54,0x40, +0x54,0x40,0x40,0xA0,0x7C,0xA0,0x01,0x10,0x00,0x00, +/* Ÿ */ +0x00,0x80,0x7D,0xE0,0x41,0x20,0x55,0xA0,0x55,0x20,0x49,0x60,0x49,0x00,0x55,0xF0, +0x54,0x10,0x41,0xD0,0x7C,0x10,0x00,0x60,0x00,0x00, +/* Ź */ +0x00,0x00,0x7D,0xE0,0x41,0x20,0x55,0x20,0x56,0x30,0x48,0x00,0x49,0xE0,0x55,0x20, +0x55,0x20,0x40,0xC0,0x7D,0x20,0x02,0x10,0x00,0x00, +/* ź */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x13,0xE0,0x3A,0xA0,0x13,0xE0,0x3A,0xA0,0x13,0xE0, +0x78,0x80,0x37,0xF0,0x5C,0x90,0x15,0xD0,0x00,0x00, +/* Ż */ +0x00,0x00,0x07,0xF0,0x74,0x00,0x55,0x20,0x54,0xA0,0x54,0xA0,0x54,0x40,0x54,0x40, +0x74,0xA0,0x55,0x20,0x04,0x00,0x07,0xF0,0x00,0x00, +/* ż */ +0x17,0xE0,0x15,0x20,0x27,0xE0,0x25,0x20,0x67,0xE0,0x21,0x00,0x2F,0xF0,0x29,0x10, +0x29,0x50,0x2B,0xD0,0x28,0x50,0x28,0x30,0x00,0x00, +/* Ž */ +0x00,0x00,0x4F,0xF0,0x28,0x20,0x0A,0x20,0x09,0x40,0x49,0x40,0x28,0x80,0x09,0x40, +0x09,0x20,0x2A,0x20,0x48,0x00,0x0F,0xF0,0x00,0x00, +/* ž */ +0x02,0x20,0x72,0x40,0x52,0xF0,0x5F,0x90,0x52,0x90,0x52,0x90,0x53,0xF0,0x5E,0x90, +0x72,0x90,0x52,0x90,0x02,0xF0,0x06,0x90,0x00,0x00, +/* ſ */ +0x00,0x40,0x7A,0x40,0x4A,0x40,0x4A,0x40,0x7A,0x40,0x12,0x40,0x1A,0x40,0x52,0x40, +0x52,0x40,0x5C,0x20,0x64,0x20,0x08,0x10,0x00,0x00, +/* */ +0x06,0x00,0x79,0xF0,0x55,0x50,0x55,0x50,0x55,0x50,0x55,0xF0,0x55,0x00,0x55,0x10, +0x55,0x10,0x54,0xF0,0x52,0x00,0x51,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x10,0x80,0x7D,0xF0,0x55,0x10,0x55,0x10,0x55,0x10,0x55,0xF0,0x55,0x10, +0x55,0x10,0x5D,0x10,0x11,0xF0,0x11,0x10,0x00,0x00, +/* */ +0x10,0x40,0x10,0x80,0x13,0xF0,0x5A,0x10,0x56,0x10,0x52,0x10,0x53,0xF0,0x12,0x10, +0x12,0x10,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x7D,0xF0,0x10,0x40,0x38,0xE0,0x10,0x40,0x7D,0xF0,0x00,0x00,0x3F,0xE0,0x22,0x20, +0x3F,0xE0,0x20,0x00,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x10,0x80,0x13,0xF0,0x7A,0x10,0x12,0x10,0x12,0x10,0x1B,0xF0,0x72,0x10, +0x12,0x10,0x12,0x10,0x13,0xF0,0x32,0x10,0x00,0x00, +/* */ +0x11,0x40,0x11,0x40,0x17,0x70,0x79,0x40,0x11,0x40,0x17,0x70,0x19,0x40,0x71,0x40, +0x17,0x70,0x11,0x40,0x11,0x40,0x31,0x40,0x00,0x00, +/* */ +0x08,0x80,0x29,0x00,0x2B,0xF0,0x2A,0x50,0x3F,0xF0,0x22,0x90,0x23,0xF0,0x39,0x00, +0x2A,0x40,0x2F,0xF0,0x28,0x40,0x48,0x40,0x00,0x00, +/* */ +0x09,0x40,0x11,0x40,0x27,0x70,0x49,0x40,0x11,0x40,0x37,0x70,0x51,0x40,0x11,0x40, +0x17,0x70,0x11,0x40,0x11,0x40,0x11,0x40,0x00,0x00, +/* */ +0x06,0xF0,0x5C,0x40,0x24,0x40,0x04,0xF0,0x1E,0x40,0x44,0xF0,0x24,0x40,0x1E,0x40, +0x04,0xF0,0x24,0x40,0x48,0x40,0x10,0x40,0x00,0x00, +/* */ +0x00,0x60,0x27,0x80,0x14,0x20,0x05,0xC0,0x45,0x40,0x25,0x50,0x05,0x60,0x05,0x40, +0x15,0x40,0x25,0x20,0x45,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x15,0x40,0x7A,0xF0,0x35,0x60,0x5A,0xD0,0x15,0x40,0x7F,0xF0,0x10,0x40,0x2F,0xA0, +0x42,0x10,0x1F,0xC0,0x02,0x00,0x06,0x00,0x00,0x00, +/* */ +0x00,0xE0,0x4F,0x00,0x29,0x20,0x05,0x40,0x1F,0xF0,0x45,0x40,0x28,0x20,0x1F,0xF0, +0x09,0x20,0x2F,0xE0,0x49,0x20,0x0F,0xE0,0x00,0x00, +/* */ +0x04,0x00,0x1F,0xC0,0x14,0x40,0x12,0x40,0x7F,0xF0,0x14,0x40,0x22,0xC0,0x40,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0xE0,0x3E,0xA0,0x2B,0x10,0x7E,0xE0,0x22,0xA0,0x2A,0x40,0x46,0xA0,0x7F,0xF0, +0x08,0x00,0x1F,0xE0,0x30,0x20,0x5F,0xE0,0x00,0x00, +/* */ +0x01,0x40,0x79,0x40,0x4A,0x20,0x4A,0x20,0x7C,0x10,0x4B,0xE0,0x49,0x20,0x79,0x20, +0x49,0x20,0x4A,0x20,0x7A,0x20,0x44,0xC0,0x00,0x00, +/* */ +0x00,0x40,0x7D,0x50,0x54,0xE0,0x54,0x40,0x55,0xF0,0x7C,0x40,0x54,0x40,0x57,0xF0, +0x54,0x40,0x7C,0x40,0x44,0x40,0x00,0x40,0x00,0x00, +/* */ +0x08,0x10,0x2A,0x10,0x1C,0x90,0x08,0x90,0x3E,0x90,0x08,0x90,0x08,0x90,0x7F,0x90, +0x08,0x90,0x10,0x10,0x10,0x10,0x20,0x70,0x00,0x00, +/* */ +0x10,0x00,0x54,0x30,0x3B,0xC0,0x12,0x00,0x7A,0x00,0x13,0xF0,0x12,0x90,0x7E,0x90, +0x12,0xA0,0x12,0x40,0x24,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x00,0xC0,0x1F,0x00,0x10,0x00,0x10,0x00,0x1F,0xE0,0x10,0x80,0x10,0x80,0x10,0x80, +0x7F,0xF0,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x24,0x80,0x24,0x40,0x3F,0xF0,0x25,0x00,0x25,0x20, +0x25,0x40,0x29,0x90,0x29,0x10,0x52,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x10,0x40,0x08,0x80,0x7F,0xF0,0x44,0x10,0x02,0x00,0x7F,0xF0, +0x08,0x00,0x0F,0xE0,0x10,0x20,0x60,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x13,0xF0,0x79,0x20,0x10,0xC0,0x3B,0xF0,0x12,0x90,0x78,0x40,0x13,0xF0, +0x39,0x00,0x51,0xF0,0x11,0x10,0x12,0x60,0x00,0x00, +/* */ +0x38,0x80,0x2C,0x90,0x2A,0xA0,0x38,0x80,0x2B,0xE0,0x28,0x80,0x38,0x80,0x2F,0xF0, +0x28,0x80,0x28,0x80,0x28,0x80,0x58,0x80,0x00,0x00, +/* */ +0x24,0x40,0x24,0x40,0x24,0xF0,0x74,0x50,0x2F,0x50,0x25,0x50,0x35,0x50,0x65,0x50, +0x25,0xB0,0x25,0x00,0x25,0x10,0x68,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x77,0xE0,0x58,0x20,0x57,0xA0,0x54,0xA0,0x54,0xA0,0x57,0xA0, +0x74,0x60,0x54,0x10,0x04,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x10,0x10,0x10,0x10,0x3F,0x50,0x21,0x50,0x7D,0x50,0x25,0x50,0x25,0x50,0x3D,0x50, +0x23,0x50,0x20,0x10,0x21,0x10,0x1F,0x30,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x1B,0xF0,0x54,0x10,0x53,0xD0,0x52,0x50,0x52,0x50,0x13,0xD0, +0x12,0x30,0x2A,0x00,0x2A,0x10,0x41,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x11,0x00,0x7B,0xF0,0x0C,0x10,0x13,0xD0,0x1A,0x50,0x32,0x50,0x5B,0xD0, +0x12,0x30,0x12,0x00,0x12,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x79,0x00,0x4B,0xF0,0x4C,0x10,0x7B,0xD0,0x12,0x50,0x12,0x50,0x5B,0xD0, +0x52,0x30,0x52,0x00,0x5A,0x10,0x61,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x44,0x00,0x27,0xE0,0x08,0x20,0x17,0xA0,0x44,0xA0,0x24,0xA0,0x07,0xA0, +0x14,0x60,0x24,0x10,0x44,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x50,0x40,0x50,0x80,0x50,0x80,0x51,0xA0,0x52,0x90,0x54,0x90, +0x70,0x80,0x50,0x80,0x00,0x00,0x07,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3B,0xF0,0x28,0x40,0x28,0x80,0x38,0x80,0x29,0xA0,0x2A,0x90,0x3C,0x90, +0x28,0x80,0x28,0x80,0x28,0x00,0x5B,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x27,0xE0,0x20,0x00,0x24,0x20,0x72,0x40,0x2F,0xF0,0x20,0x00,0x27,0xE0, +0x24,0x20,0x34,0x20,0x67,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x08,0x80,0x78,0xF0,0x08,0x80,0x38,0xE0,0x08,0x80,0x78,0xF0,0x0A,0x80,0x7F,0xF0, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x00,0x40,0x7D,0xF0,0x44,0x00,0x55,0x10,0x54,0xA0,0x55,0xF0,0x54,0x00,0x55,0xF0, +0x55,0x10,0x11,0x10,0x29,0xF0,0x45,0x10,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xE0,0x48,0x00,0x4A,0x20,0x51,0x40,0x57,0xF0,0x48,0x00,0x4B,0xE0, +0x4A,0x20,0x72,0x20,0x43,0xE0,0x42,0x20,0x00,0x00, +/* */ +0x00,0x00,0x7F,0x70,0x14,0x10,0x7F,0x10,0x55,0x10,0x55,0x70,0x63,0x40,0x41,0x40, +0x7F,0x40,0x41,0x50,0x7F,0x50,0x41,0x30,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xE0,0x28,0x20,0x2F,0xA0,0x6A,0x20,0x2F,0xA0,0x2A,0xA0,0x2A,0xA0, +0x2A,0xA0,0x2B,0xA0,0x2A,0x30,0x32,0x10,0x00,0x00, +/* */ +0x41,0x00,0x21,0x00,0x1F,0xF0,0x01,0x00,0x41,0x00,0x2F,0xE0,0x09,0x20,0x09,0x20, +0x09,0x20,0x29,0x20,0x49,0x60,0x01,0x00,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x80,0x52,0x20,0x57,0xF0,0x52,0x20,0x57,0xF0,0x54,0x10, +0x74,0x90,0x54,0x90,0x01,0x60,0x06,0x10,0x00,0x00, +/* */ +0x08,0x80,0x10,0x40,0x20,0x20,0x5F,0xD0,0x04,0x40,0x08,0x40,0x31,0x80,0x00,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x10,0x80,0x14,0x90,0x22,0x90,0x3A,0xA0,0x68,0x80,0x2F,0xF0, +0x28,0x80,0x28,0x80,0x38,0x80,0x28,0x80,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x80,0x7C,0x90,0x12,0x90,0x12,0xA0,0x18,0x80,0x77,0xF0, +0x10,0x80,0x10,0x80,0x10,0x80,0x30,0x80,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x3F,0xC0, +0x00,0x80,0x01,0x00,0x2B,0x20,0x44,0x90,0x00,0x00, +/* */ +0x02,0x10,0x5F,0xA0,0x22,0x40,0x0F,0x80,0x00,0x10,0x4F,0xA0,0x28,0xC0,0x0F,0x80, +0x08,0x80,0x25,0x10,0x43,0xA0,0x1C,0x40,0x00,0x00, +/* */ +0x08,0x20,0x7E,0x20,0x08,0x40,0x3E,0x90,0x00,0x10,0x3E,0x20,0x22,0x40,0x3E,0x80, +0x22,0x10,0x14,0x20,0x0E,0x40,0x71,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x4A,0x80,0x27,0xC0,0x0C,0x40,0x63,0x80,0x3D,0x70,0x27,0xC0, +0x21,0x00,0x2F,0xE0,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x17,0x70,0x15,0x50,0x7D,0x50,0x17,0x70,0x35,0x50,0x3D,0x50,0x57,0x70, +0x15,0x50,0x15,0x50,0x15,0x50,0x1B,0xB0,0x00,0x00, +/* */ +0x07,0x70,0x7D,0x50,0x15,0x50,0x17,0x50,0x25,0x70,0x3D,0x50,0x67,0x50,0x25,0x70, +0x25,0x50,0x3D,0x50,0x25,0x90,0x0B,0x30,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x27,0xC0,0x0C,0x40,0x63,0x80,0x3D,0x70,0x27,0xC0, +0x21,0x00,0x2F,0xE0,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x39,0x00,0x2F,0xD0,0x29,0x10,0x3B,0xA0,0x28,0x00,0x2B,0x90,0x3A,0x90,0x2B,0xA0, +0x28,0x00,0x2A,0x90,0x2F,0xD0,0x58,0x20,0x00,0x00, +/* */ +0x00,0x00,0x3C,0xF0,0x24,0x90,0x24,0x90,0x3C,0xF0,0x24,0x90,0x24,0x90,0x3C,0xF0, +0x24,0x90,0x24,0x90,0x24,0x90,0x4D,0x30,0x00,0x00, +/* */ +0x00,0x20,0x77,0x70,0x55,0x50,0x55,0x70,0x77,0x50,0x55,0x60,0x55,0x40,0x77,0x70, +0x55,0x10,0x55,0x70,0x55,0x10,0x3B,0x60,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x7B,0xE0,0x11,0x00,0x17,0xF0,0x1A,0x20,0x74,0x90, +0x13,0xE0,0x10,0x80,0x17,0xF0,0x30,0x80,0x00,0x00, +/* */ +0x02,0x20,0x79,0x40,0x10,0x00,0x17,0xF0,0x21,0x40,0x39,0x40,0x6D,0x50,0x2B,0x60, +0x29,0x40,0x39,0x40,0x29,0x40,0x07,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x10,0x40,0x10,0x80,0x78,0x80,0x11,0xA0,0x12,0x90,0x14,0x90, +0x10,0x80,0x18,0x80,0x60,0x00,0x07,0xF0,0x00,0x00, +/* */ +0x02,0x40,0x7A,0x40,0x12,0x50,0x12,0x50,0x23,0xE0,0x3A,0x40,0x6A,0x40,0x2A,0x40, +0x2A,0x40,0x2A,0xD0,0x3B,0x50,0x2A,0x30,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x4A,0x90,0x00,0x40,0x3D,0xF0,0x24,0xA0,0x3C,0x40, +0x21,0xF0,0x3C,0x40,0x54,0xE0,0x1C,0x40,0x00,0x00, +/* */ +0x24,0x80,0x24,0x80,0x24,0x90,0x74,0x90,0x27,0xA0,0x24,0xC0,0x34,0x80,0x64,0x80, +0x24,0x80,0x25,0x90,0x26,0x90,0x64,0x70,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x13,0xF0,0x7A,0x50,0x12,0x40,0x13,0xE0,0x1A,0xA0,0x72,0xA0, +0x12,0xA0,0x12,0x40,0x14,0xA0,0x39,0x10,0x00,0x00, +/* */ +0x3C,0x40,0x25,0xF0,0x3C,0xA0,0x21,0xF0,0x3C,0x40,0x54,0xE0,0x1C,0x40,0x00,0x00, +0x3F,0xE0,0x04,0x20,0x08,0x20,0x30,0xC0,0x00,0x00, +/* */ +0x7D,0xF0,0x10,0x40,0x38,0xE0,0x10,0x40,0x7D,0xF0,0x00,0x00,0x21,0x20,0x21,0x40, +0x3D,0x80,0x21,0x10,0x2D,0x10,0x30,0xF0,0x00,0x00, +/* */ +0x01,0x40,0x7D,0x40,0x55,0x50,0x55,0x50,0x55,0xE0,0x7D,0x40,0x55,0x40,0x55,0x40, +0x55,0x40,0x7D,0x50,0x45,0xD0,0x01,0x30,0x00,0x00, +/* ơ */ +0x01,0x00,0x02,0x00,0x77,0xE0,0x54,0xA0,0x57,0xE0,0x55,0x20,0x57,0xE0,0x52,0x00, +0x74,0x80,0x5F,0xF0,0x00,0x80,0x00,0x80,0x00,0x00, +/* Ƣ */ +0x00,0x80,0x39,0x00,0x2B,0xF0,0x2A,0x50,0x3B,0xF0,0x2A,0x90,0x2B,0xF0,0x39,0x00, +0x2A,0x40,0x2F,0xF0,0x28,0x40,0x58,0x40,0x00,0x00, +/* ƣ */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x80,0x37,0xF0,0x14,0x90,0x14,0x80,0x37,0xE0, +0x55,0x20,0x15,0x20,0x28,0xC0,0x53,0x30,0x00,0x00, +/* Ƥ */ +0x01,0x00,0x01,0x00,0x3F,0xF0,0x21,0x10,0x21,0x00,0x3F,0xE0,0x28,0x20,0x24,0x40, +0x22,0x80,0x21,0x00,0x26,0xC0,0x58,0x30,0x00,0x00, +/* ƥ */ +0x00,0x00,0x3F,0xF0,0x24,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x24,0x90,0x28,0x90, +0x28,0x70,0x30,0x00,0x20,0x00,0x3F,0xF0,0x00,0x00, +/* Ʀ */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x37,0xF0,0x10,0x80,0x11,0xA0,0x36,0x90, +0x50,0x80,0x17,0xF0,0x24,0x10,0x47,0xF0,0x00,0x00, +/* Ƨ */ +0x10,0x80,0x1E,0x40,0x2A,0xE0,0x2A,0x00,0x6E,0xA0,0x28,0x40,0x29,0xF0,0x2E,0x40, +0x3A,0x40,0x2A,0xE0,0x2E,0x40,0x2A,0x40,0x00,0x00, +/* ƨ */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x00,0x28,0x80,0x28,0x90,0x2E,0x90,0x28,0xA0, +0x28,0xC0,0x28,0x90,0x2A,0x90,0x4C,0x70,0x00,0x00, +/* Ʃ */ +0x3C,0x40,0x25,0xF0,0x3C,0xA0,0x21,0xF0,0x3C,0x40,0x54,0xE0,0x1D,0x40,0x7F,0xF0, +0x00,0x00,0x3F,0xE0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* ƪ */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x00,0x3F,0xF0, +0x32,0x90,0x5F,0xF0,0x12,0x90,0x10,0x30,0x00,0x00, +/* ƫ */ +0x10,0x80,0x17,0xF0,0x24,0x10,0x27,0xF0,0x64,0x00,0x27,0xF0,0x25,0x50,0x2D,0x50, +0x37,0xF0,0x25,0x50,0x25,0x50,0x24,0x30,0x00,0x00, +/* Ƭ */ +0x00,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x1F,0xF0,0x10,0x00,0x10,0x00,0x1F,0xC0, +0x10,0x40,0x20,0x40,0x20,0x40,0x40,0x40,0x00,0x00, +/* ƭ */ +0x00,0x80,0x77,0xF0,0x14,0x10,0x57,0xF0,0x54,0x00,0x47,0xF0,0x75,0x50,0x1D,0x50, +0x37,0xF0,0x55,0x50,0x15,0x50,0x64,0x30,0x00,0x00, +/* Ʈ */ +0x7C,0x00,0x13,0xE0,0x7E,0x20,0x56,0x20,0x7F,0x60,0x02,0xA0,0x3A,0xA0,0x02,0xA0, +0x7F,0x60,0x12,0x20,0x56,0x30,0x34,0x10,0x00,0x00, +/* Ư */ +0x5F,0xF0,0x22,0x80,0x0F,0xE0,0x0A,0xA0,0x4F,0xE0,0x20,0x00,0x0F,0xE0,0x00,0x00, +0x1F,0xF0,0x21,0x00,0x49,0x20,0x13,0x10,0x00,0x00, +/* ư */ +0x7C,0x10,0x11,0xE0,0x7D,0x50,0x55,0x50,0x7D,0x50,0x01,0x50,0x39,0x50,0x01,0x50, +0x7D,0x40,0x11,0x60,0x55,0x50,0x32,0x70,0x00,0x00, +/* Ʊ */ +0x7F,0xF0,0x05,0x00,0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x00,0x00, +0x7F,0xF0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* Ʋ */ +0x22,0x40,0x2A,0xC0,0x27,0x40,0x72,0xF0,0x2F,0xA0,0x2A,0xA0,0x3B,0xA0,0x6E,0xA0, +0x2A,0xA0,0x2A,0x40,0x2A,0xA0,0x69,0x10,0x00,0x00, +/* Ƴ */ +0x4A,0x80,0x2C,0xF0,0x7F,0x20,0x4A,0xA0,0x5E,0x40,0x6A,0xA0,0x49,0x10,0x00,0x00, +0x3F,0xE0,0x29,0x20,0x24,0xA0,0x3F,0xE0,0x00,0x00, +/* ƴ */ +0x12,0x10,0x11,0x20,0x10,0x00,0x7B,0xF0,0x11,0x20,0x11,0x20,0x19,0x20,0x77,0xF0, +0x11,0x20,0x11,0x20,0x11,0x20,0x32,0x20,0x00,0x00, +/* Ƶ */ +0x09,0xF0,0x2E,0x40,0x28,0x80,0x29,0xF0,0x7F,0x10,0x09,0x50,0x29,0x50,0x2B,0x50, +0x45,0x50,0x08,0x40,0x10,0xA0,0x61,0x10,0x00,0x00, +/* ƶ */ +0x10,0x40,0x20,0x20,0x5F,0xD0,0x08,0x40,0x11,0x80,0x20,0x00,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* Ʒ */ +0x1F,0xC0,0x10,0x40,0x10,0x40,0x10,0x40,0x1F,0xC0,0x00,0x00,0x7D,0xF0,0x45,0x10, +0x45,0x10,0x45,0x10,0x7D,0xF0,0x45,0x10,0x00,0x00, +/* Ƹ */ +0x00,0x80,0x7F,0xF0,0x2A,0x90,0x2B,0xF0,0x3A,0x90,0x2B,0xF0,0x38,0x00,0x2B,0xF0, +0x2D,0x00,0x79,0xF0,0x08,0x10,0x08,0x60,0x00,0x00, +/* ƹ */ +0x00,0xC0,0x1F,0x00,0x10,0x00,0x10,0x00,0x1F,0xE0,0x10,0x80,0x10,0x80,0x10,0x80, +0x7F,0xF0,0x08,0x00,0x10,0x00,0x20,0x00,0x00,0x00, +/* ƺ */ +0x10,0x00,0x13,0xE0,0x10,0x80,0x14,0x90,0x7A,0x90,0x12,0xA0,0x10,0x80,0x17,0xF0, +0x10,0x80,0x18,0x80,0x60,0x80,0x00,0x80,0x00,0x00, +/* ƻ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x02,0x00,0x12,0x40,0x0A,0x80, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* Ƽ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x40,0x00,0x2F,0xE0,0x01,0x00,0x49,0x20,0x25,0x40, +0x1F,0xF0,0x01,0x00,0x21,0x00,0x41,0x00,0x00,0x00, +/* ƽ */ +0x00,0x00,0x3F,0xE0,0x02,0x00,0x22,0x20,0x12,0x20,0x12,0x40,0x02,0x00,0x7F,0xF0, +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* ƾ */ +0x08,0x60,0x13,0x80,0x30,0x80,0x57,0xF0,0x10,0x80,0x13,0xE0,0x00,0x00,0x1F,0x80, +0x10,0x80,0x10,0x80,0x20,0x90,0x40,0x70,0x00,0x00, +/* ƿ */ +0x44,0x00,0x2B,0xE0,0x01,0x00,0x7D,0x00,0x29,0xC0,0x29,0x40,0x2A,0x40,0x7F,0x40, +0x2A,0xC0,0x2A,0x50,0x2B,0x50,0x4A,0x30,0x00,0x00, +/* */ +0x20,0x00,0x13,0xE0,0x00,0x80,0x04,0x90,0x72,0x90,0x12,0xA0,0x10,0x80,0x17,0xF0, +0x10,0x80,0x18,0x80,0x10,0x80,0x00,0x80,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x24,0x20,0x22,0x40,0x2F,0xF0,0x22,0x40,0x22,0x40, +0x3F,0xF0,0x22,0x40,0x24,0x40,0x48,0x40,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x7C,0x90,0x14,0x80,0x17,0xE0,0x15,0x20,0x15,0x20, +0x1D,0x40,0x64,0x80,0x05,0x40,0x0A,0x30,0x00,0x00, +/* */ +0x01,0x20,0x49,0x10,0x29,0x00,0x0F,0xF0,0x02,0x00,0x42,0x00,0x23,0xF0,0x05,0x10, +0x04,0xA0,0x28,0x40,0x48,0xA0,0x13,0x10,0x00,0x00, +/* */ +0x09,0xF0,0x08,0x40,0x3E,0x80,0x2B,0xF0,0x29,0x10,0x3D,0x50,0x25,0x50,0x25,0x50, +0x35,0x50,0x28,0x40,0x54,0xA0,0x25,0x10,0x00,0x00, +/* */ +0x20,0x80,0x17,0xF0,0x44,0x90,0x27,0xE0,0x05,0x20,0x24,0xC0,0x4B,0x30,0x04,0x00, +0x7F,0xF0,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x00,0x40,0x78,0x40,0x13,0xF0,0x12,0x50,0x22,0x40,0x3B,0xE0,0x6A,0xA0,0x2A,0xA0, +0x2A,0xA0,0x3A,0x40,0x24,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x10,0x80,0x21,0x00,0x77,0xE0,0x54,0xA0,0x57,0xE0,0x75,0x20,0x57,0xE0,0x51,0x40, +0x52,0xA0,0x72,0xE0,0x44,0x90,0x08,0x70,0x00,0x00, +/* */ +0x20,0x80,0x11,0x00,0x07,0xF0,0x04,0x10,0x74,0x10,0x17,0xF0,0x14,0x10,0x14,0x10, +0x17,0xF0,0x10,0x00,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x10,0x80,0x55,0xF0,0x39,0x10,0x11,0x10,0x7D,0x10,0x11,0xF0,0x39,0x10, +0x55,0x10,0x11,0x10,0x11,0xF0,0x11,0x10,0x00,0x00, +/* */ +0x04,0x10,0x3F,0x10,0x00,0x50,0x21,0x50,0x12,0x50,0x7F,0xD0,0x00,0x50,0x3F,0x50, +0x21,0x50,0x21,0x10,0x3F,0x10,0x21,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0x80,0x7C,0x80,0x10,0xC0,0x10,0xA0,0x1C,0x90,0x70,0x90, +0x10,0x80,0x10,0x80,0x10,0x80,0x30,0x80,0x00,0x00, +/* */ +0x20,0xA0,0x30,0x90,0x47,0xF0,0x00,0x80,0x77,0xF0,0x24,0x90,0x27,0xF0,0x74,0x90, +0x27,0xF0,0x24,0x90,0x34,0x90,0x24,0x30,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x10,0x80,0x10,0x80,0x30,0xC0,0x50,0xA0,0x10,0x90,0x10,0x90, +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0xA0,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x22,0x20,0x20,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x28,0x80,0x3F,0xF0,0x45,0x10,0x7F,0xD0,0x24,0x90,0x3F,0x90, +0x24,0x90,0x3F,0x90,0x24,0x90,0x21,0xB0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x3F,0xE0,0x10,0x40,0x7F,0xF0,0x00,0x00, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x09,0xA0,0x5F,0xF0,0x21,0x00,0x0F,0xE0,0x49,0x20,0x2F,0xE0, +0x09,0x20,0x2F,0xE0,0x49,0x20,0x08,0x60,0x00,0x00, +/* */ +0x20,0xA0,0x20,0x90,0x27,0xF0,0x20,0x80,0x77,0xF0,0x24,0x90,0x27,0xF0,0x24,0x90, +0x27,0xF0,0x34,0x90,0x64,0x90,0x04,0x30,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x08,0x80,0x7E,0x80,0x08,0xC0,0x1C,0xA0,0x1A,0x90,0x28,0x90, +0x48,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x00,0x00, +/* */ +0x7F,0xF0,0x42,0x50,0x7F,0xF0,0x42,0x10,0x5F,0xD0,0x52,0x50,0x5F,0xD0,0x52,0x50, +0x5F,0xD0,0x52,0x50,0x50,0xD0,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x40,0x3F,0xF0,0x04,0x80,0x14,0xA0,0x0C,0xC0,0x7F,0xF0,0x00,0x00,0x1F,0xE0, +0x10,0x20,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x41,0x40,0x21,0x20,0x1F,0xF0,0x01,0x00,0x4F,0xE0,0x29,0x20,0x0F,0xE0,0x09,0x20, +0x1F,0xE0,0x29,0x20,0x49,0x20,0x08,0x60,0x00,0x00, +/* */ +0x22,0x20,0x17,0xF0,0x01,0x40,0x05,0x50,0x71,0x40,0x17,0xF0,0x10,0x00,0x13,0xE0, +0x12,0x20,0x1B,0xE0,0x12,0x20,0x03,0xE0,0x00,0x00, +/* */ +0x07,0xE0,0x74,0x20,0x57,0xE0,0x54,0x20,0x57,0xE0,0x72,0x40,0x57,0xE0,0x52,0x40, +0x5F,0xF0,0x74,0xA0,0x5A,0xD0,0x05,0xA0,0x00,0x00, +/* */ +0x27,0xE0,0x14,0x20,0x07,0xE0,0x04,0x20,0x47,0xE0,0x22,0x40,0x07,0xE0,0x02,0x40, +0x1F,0xF0,0x24,0xA0,0x4A,0xD0,0x05,0xA0,0x00,0x00, +/* */ +0x24,0x00,0x24,0xF0,0x7E,0x90,0x24,0x90,0x3C,0xF0,0x24,0x90,0x3C,0x90,0x24,0xF0, +0x7E,0x90,0x00,0x90,0x24,0x90,0x43,0x30,0x00,0x00, +/* */ +0x24,0x80,0x24,0x80,0x7E,0xF0,0x24,0x90,0x3D,0x20,0x24,0x00,0x3C,0x40,0x24,0x40, +0x7E,0x40,0x00,0xA0,0x24,0xA0,0x43,0x10,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x11,0x40,0x79,0x40,0x17,0xF0,0x35,0x50,0x3D,0x50,0x55,0x70, +0x16,0x10,0x14,0x10,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x00,0x50,0x00,0x40,0x3F,0xF0,0x24,0x40,0x27,0x40,0x24,0x50,0x3F,0x50,0x24,0x50, +0x2E,0x60,0x35,0x50,0x24,0xB0,0x4D,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x20,0x7F,0xF0,0x02,0x20,0x04,0x00, +0x7F,0xF0,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x07,0xF0,0x7C,0x00,0x04,0x00,0x04,0x00, +0x04,0x00,0x04,0x10,0x04,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x41,0x00,0x2F,0xE0,0x01,0x20,0x1F,0xF0,0x01,0x20,0x02,0x00, +0x1F,0xF0,0x24,0x40,0x43,0x80,0x1C,0x70,0x00,0x00, +/* */ +0x01,0x00,0x4F,0xE0,0x25,0x40,0x09,0x20,0x02,0x80,0x44,0x40,0x29,0x30,0x05,0x40, +0x03,0x80,0x25,0x40,0x49,0x20,0x03,0x00,0x00,0x00, +/* */ +0x21,0x00,0x11,0x00,0x41,0xF0,0x2F,0x00,0x01,0x10,0x10,0xF0,0x22,0x00,0x7F,0xF0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x08,0x00,0x4B,0xF0,0x28,0x90,0x08,0x90,0x1E,0x90,0x48,0x90,0x28,0x90,0x0A,0x90, +0x0D,0x10,0x29,0x10,0x42,0x10,0x04,0x60,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40, +0x7F,0xF0,0x00,0x00,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x12,0x20,0x12,0x20,0x17,0xF0,0x7A,0x20,0x13,0xE0,0x32,0x20,0x3B,0xE0,0x52,0x20, +0x17,0xF0,0x10,0x00,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x04,0x00,0x3F,0xE0,0x09,0x00,0x10,0x80,0x7F,0xF0,0x00,0x40,0x3E,0x40,0x22,0x40, +0x22,0x40,0x3E,0x40,0x20,0x40,0x01,0xC0,0x00,0x00, +/* */ +0x08,0x40,0x08,0x40,0x09,0xF0,0x2C,0x40,0x28,0x40,0x2B,0xF0,0x29,0x10,0x29,0x10, +0x28,0xA0,0x2C,0x40,0x70,0xA0,0x03,0x10,0x00,0x00, +/* */ +0x00,0x40,0x7C,0x40,0x55,0xF0,0x54,0x40,0x54,0x40,0x7D,0xF0,0x54,0x00,0x54,0x40, +0x55,0xF0,0x7C,0x40,0x44,0x40,0x03,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x11,0xF0,0x10,0xA0,0x55,0x10,0x57,0xF0,0x54,0x10,0x55,0xD0,0x55,0x50, +0x55,0x50,0x5D,0xD0,0x65,0x10,0x00,0x30,0x00,0x00, +/* */ +0x00,0x80,0x38,0x40,0x2B,0xF0,0x29,0x20,0x38,0xC0,0x29,0x20,0x2A,0x10,0x39,0x20, +0x29,0x20,0x29,0x20,0x29,0x20,0x5A,0x20,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x7F,0xF0,0x10,0x40,0x08,0x80,0x07,0x00,0x18,0xC0,0x68,0xB0, +0x08,0x80,0x08,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x22,0x00,0x13,0xF0,0x7D,0x20,0x23,0xF0,0x21,0x20,0x39,0xE0,0x29,0x20,0x29,0xE0, +0x29,0x20,0x2B,0xF0,0x29,0x20,0x5A,0x10,0x00,0x00, +/* */ +0x20,0x30,0x11,0xC0,0x79,0x00,0x09,0x00,0x11,0xF0,0x19,0x20,0x35,0x20,0x51,0x20, +0x11,0x20,0x11,0x20,0x12,0x20,0x14,0x20,0x00,0x00, +/* */ +0x20,0x00,0x11,0xF0,0x79,0x10,0x09,0x20,0x11,0x40,0x11,0x20,0x39,0x10,0x55,0x10, +0x11,0x10,0x11,0x60,0x11,0x00,0x11,0x00,0x00,0x00, +/* */ +0x00,0x80,0x73,0xE0,0x11,0x40,0x52,0x20,0x57,0xF0,0x50,0x20,0x7B,0xA0,0x0A,0xA0, +0x1A,0xA0,0x6B,0xA0,0x0A,0x20,0x30,0x60,0x00,0x00, +/* */ +0x08,0x00,0x09,0xE0,0x3C,0x20,0x08,0x20,0x09,0xE0,0x7D,0x00,0x09,0x00,0x29,0x10, +0x2D,0x10,0x28,0xF0,0x38,0x00,0x4F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x00,0x20,0x00,0x20, +0x3F,0xE0,0x20,0x00,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x1F,0xE0,0x20,0x00,0x20,0x00,0x5F,0xC0,0x01,0x80,0x06,0x00, +0x08,0x00,0x10,0x20,0x10,0x20,0x0F,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x62,0x30,0x02,0x00,0x12,0x00,0x13,0xE0, +0x12,0x00,0x12,0x00,0x12,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x00,0x1F,0xF0, +0x18,0x10,0x28,0x10,0x2F,0xF0,0x48,0x10,0x00,0x00, +/* */ +0x10,0x00,0x7D,0xF0,0x10,0x90,0x38,0x90,0x10,0x90,0x7D,0x10,0x12,0x60,0x02,0x00, +0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7A,0xF0,0x12,0x50,0x13,0x50,0x26,0x50,0x3A,0x50,0x6A,0x50,0x2B,0x50, +0x2A,0x90,0x38,0x90,0x29,0x10,0x02,0x60,0x00,0x00, +/* */ +0x3D,0xE0,0x25,0x20,0x3D,0xE0,0x02,0x40,0x02,0x20,0x7F,0xF0,0x05,0x00,0x18,0xC0, +0x60,0x30,0x3D,0xE0,0x25,0x20,0x3D,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x20,0x00,0x5F,0xE0,0x00,0x00,0x3F,0xC0,0x00,0x40,0x00,0x40, +0x00,0x40,0x00,0x50,0x00,0x30,0x00,0x10,0x00,0x00, +/* */ +0x22,0x00,0x12,0x00,0x07,0xF0,0x08,0x00,0x73,0xE0,0x10,0x40,0x10,0x80,0x11,0x10, +0x12,0x10,0x13,0xF0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x08,0x00,0x10,0x40,0x3F,0xE0,0x08,0xA0,0x08,0x80, +0x7F,0xF0,0x08,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x04,0x00,0x47,0xE0,0x28,0x00,0x17,0xC0,0x00,0x00,0x4F,0xC0,0x20,0x40,0x00,0x40, +0x00,0x50,0x20,0x50,0x40,0x30,0x00,0x10,0x00,0x00, +/* */ +0x01,0x00,0x40,0x80,0x20,0x00,0x0F,0xF0,0x00,0x00,0x40,0x20,0x24,0x20,0x02,0x20, +0x12,0x40,0x22,0x40,0x40,0x80,0x1F,0xF0,0x00,0x00, +/* */ +0x42,0x00,0x22,0x00,0x03,0xF0,0x04,0x00,0x68,0x00,0x27,0xE0,0x20,0x20,0x20,0xC0, +0x23,0x00,0x24,0x10,0x34,0x10,0x23,0xF0,0x00,0x00, +/* */ +0x22,0x00,0x23,0xE0,0x24,0x20,0x78,0x40,0x21,0x00,0x26,0x70,0x34,0x10,0x67,0x70, +0x24,0x10,0x24,0x10,0x27,0xF0,0x64,0x10,0x00,0x00, +/* ǡ */ +0x10,0x80,0x10,0x80,0x19,0x40,0x52,0x20,0x54,0x10,0x53,0xE0,0x50,0x00,0x13,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* Ǣ */ +0x01,0x00,0x41,0x00,0x22,0x80,0x04,0x40,0x08,0x20,0x57,0xD0,0x20,0x00,0x0F,0xE0, +0x08,0x20,0x28,0x20,0x4F,0xE0,0x08,0x20,0x00,0x00, +/* ǣ */ +0x02,0x00,0x3F,0xE0,0x05,0x00,0x08,0x80,0x7F,0xF0,0x40,0x10,0x12,0x00,0x1F,0xE0, +0x22,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* Ǥ */ +0x10,0x60,0x13,0x80,0x10,0x80,0x78,0x80,0x10,0x80,0x17,0xF0,0x18,0x80,0x70,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x30,0x80,0x00,0x00, +/* ǥ */ +0x20,0x60,0x23,0x80,0x38,0x80,0x40,0x80,0x78,0x80,0x27,0xF0,0x20,0x80,0x78,0x80, +0x20,0x80,0x28,0x80,0x30,0x80,0x20,0x80,0x00,0x00, +/* Ǧ */ +0x23,0xE0,0x22,0x20,0x3A,0x20,0x42,0x20,0x74,0x10,0x20,0x00,0x23,0xE0,0x7A,0x20, +0x22,0x20,0x2A,0x20,0x33,0xE0,0x22,0x20,0x00,0x00, +/* ǧ */ +0x00,0x00,0x01,0xE0,0x3E,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* Ǩ */ +0x20,0x60,0x13,0x80,0x00,0x80,0x00,0x80,0x70,0x80,0x17,0xF0,0x10,0x80,0x10,0x80, +0x10,0x80,0x10,0x80,0x28,0x80,0x47,0xF0,0x00,0x00, +/* ǩ */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x0A,0x20,0x05,0x00,0x18,0xC0,0x60,0x30,0x1F,0xC0, +0x04,0x00,0x12,0x40,0x08,0x80,0x7F,0xF0,0x00,0x00, +/* Ǫ */ +0x08,0x60,0x0B,0x80,0x10,0x80,0x10,0x80,0x30,0x80,0x57,0xF0,0x10,0x80,0x10,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* ǫ */ +0x44,0x40,0x22,0x80,0x0F,0xF0,0x02,0x80,0x6F,0xE0,0x22,0xA0,0x2F,0xF0,0x22,0xA0, +0x2F,0xE0,0x36,0xC0,0x2A,0xA0,0x02,0x90,0x00,0x00, +/* Ǭ */ +0x10,0x80,0x7C,0x80,0x11,0xF0,0x7E,0x00,0x44,0x00,0x7D,0xE0,0x44,0x20,0x7C,0x40, +0x10,0x80,0x7D,0x10,0x11,0x10,0x10,0xF0,0x00,0x00, +/* ǭ */ +0x7E,0x40,0x4A,0x40,0x6E,0xA0,0x4A,0xA0,0x7F,0x10,0x0A,0x40,0x7E,0x00,0x09,0xF0, +0x0E,0x10,0x70,0x20,0x2A,0x20,0x55,0x40,0x00,0x00, +/* Ǯ */ +0x21,0x40,0x21,0x20,0x39,0x70,0x47,0x80,0x71,0x00,0x21,0x70,0x2F,0x80,0x79,0x20, +0x20,0xC0,0x28,0x90,0x33,0x50,0x2C,0x30,0x00,0x00, +/* ǯ */ +0x22,0x20,0x22,0x20,0x37,0xF0,0x42,0x20,0x72,0x20,0x22,0x20,0x23,0xE0,0x7A,0x20, +0x22,0x20,0x2A,0x20,0x33,0xE0,0x22,0x20,0x00,0x00, +/* ǰ */ +0x10,0x40,0x08,0x80,0x7F,0xF0,0x00,0x00,0x3E,0x20,0x22,0xA0,0x3E,0xA0,0x22,0xA0, +0x3E,0xA0,0x22,0xA0,0x22,0x20,0x26,0x60,0x00,0x00, +/* DZ */ +0x04,0x40,0x4E,0xE0,0x24,0x40,0x1E,0xF0,0x04,0x40,0x4A,0xA0,0x31,0x10,0x0F,0xE0, +0x08,0x20,0x2F,0xE0,0x48,0x20,0x0F,0xE0,0x00,0x00, +/* Dz */ +0x41,0x00,0x2F,0xE0,0x09,0x20,0x0F,0xE0,0x61,0x00,0x3F,0xF0,0x24,0x40,0x27,0xC0, +0x24,0x00,0x27,0xE0,0x24,0x20,0x5F,0xF0,0x00,0x00, +/* dz */ +0x01,0x40,0x21,0x20,0x11,0x70,0x07,0x80,0x41,0x00,0x21,0x70,0x0F,0x80,0x01,0x20, +0x10,0xC0,0x20,0x90,0x43,0x50,0x0C,0x30,0x00,0x00, +/* Ǵ */ +0x40,0x80,0x2B,0xE0,0x06,0xA0,0x03,0xE0,0x60,0x80,0x23,0xF0,0x2D,0x20,0x25,0xE0, +0x25,0x00,0x35,0xE0,0x25,0x20,0x0B,0xF0,0x00,0x00, +/* ǵ */ +0x08,0x20,0x7D,0xC0,0x11,0x00,0x29,0xF0,0x3D,0x40,0x09,0x40,0x7D,0x40,0x0A,0x40, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* Ƕ */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x00,0x80,0x24,0x80,0x7E,0xF0,0x25,0x10,0x24,0x40, +0x3C,0x40,0x24,0xA0,0x24,0xA0,0x3D,0x10,0x00,0x00, +/* Ƿ */ +0x10,0x00,0x10,0x00,0x1F,0xE0,0x20,0x20,0x22,0x20,0x42,0x40,0x02,0x00,0x05,0x00, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* Ǹ */ +0x22,0x40,0x14,0x40,0x7F,0x70,0x14,0x50,0x3F,0x90,0x15,0x00,0x7F,0xA0,0x15,0x20, +0x7F,0x20,0x36,0x50,0x55,0x50,0x14,0x90,0x00,0x00, +/* ǹ */ +0x10,0x80,0x10,0x80,0x11,0x40,0x7A,0x20,0x14,0x10,0x33,0xE0,0x3A,0x20,0x52,0x20, +0x12,0x60,0x12,0x00,0x12,0x10,0x11,0xF0,0x00,0x00, +/* Ǻ */ +0x00,0x80,0x00,0x80,0x79,0x40,0x4A,0x20,0x4C,0x10,0x4B,0xE0,0x4A,0x20,0x4A,0x20, +0x7A,0x60,0x4A,0x00,0x02,0x10,0x01,0xF0,0x00,0x00, +/* ǻ */ +0x01,0x00,0x38,0x80,0x2F,0xF0,0x2C,0x10,0x39,0x40,0x2A,0x20,0x2C,0x10,0x3B,0xE0, +0x28,0x80,0x28,0x80,0x28,0x80,0x5F,0xF0,0x00,0x00, +/* Ǽ */ +0x10,0x40,0x08,0x80,0x3F,0xE0,0x02,0x00,0x1F,0xC0,0x04,0x00,0x7F,0xF0,0x05,0x00, +0x09,0x00,0x09,0x00,0x11,0x10,0x20,0xF0,0x00,0x00, +/* ǽ */ +0x20,0x80,0x27,0xF0,0x22,0xA0,0x27,0xF0,0x70,0x00,0x27,0xF0,0x24,0x10,0x25,0xD0, +0x25,0x50,0x35,0xD0,0x64,0x10,0x07,0xF0,0x00,0x00, +/* Ǿ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x3F,0xE0,0x12,0x40,0x0A,0x80,0x7F,0xF0, +0x20,0x20,0x2F,0xA0,0x28,0xA0,0x3F,0xE0,0x00,0x00, +/* ǿ */ +0x03,0xE0,0x72,0x20,0x12,0x20,0x13,0xE0,0x70,0x80,0x47,0xF0,0x44,0x90,0x74,0x90, +0x17,0xF0,0x10,0x80,0x10,0xA0,0x67,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0x40,0x7A,0x20,0x14,0x10,0x13,0xE0,0x1A,0x20,0x72,0x20, +0x12,0x60,0x12,0x00,0x12,0x10,0x31,0xF0,0x00,0x00, +/* */ +0x20,0xC0,0x27,0x00,0x21,0xC0,0x77,0x00,0x21,0xE0,0x2F,0x10,0x70,0xF0,0x62,0x20, +0x2C,0xC0,0x26,0x60,0x2C,0xD0,0x26,0x70,0x00,0x00, +/* */ +0x21,0x40,0x36,0x40,0x42,0x50,0x02,0xD0,0x77,0x60,0x22,0x40,0x23,0x40,0x76,0x40, +0x2A,0xA0,0x22,0xA0,0x32,0xA0,0x23,0x10,0x00,0x00, +/* */ +0x08,0x20,0x7F,0x20,0x00,0x30,0x3E,0x20,0x22,0x20,0x3E,0xF0,0x00,0x50,0x7F,0x50, +0x41,0x50,0x5D,0x20,0x55,0x50,0x5D,0x90,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x12,0xA0,0x58,0x80,0x57,0xF0,0x54,0x10,0x57,0xF0,0x14,0x10, +0x17,0xF0,0x14,0x10,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x78,0x80,0x17,0xF0,0x11,0x40,0x3A,0x20,0x34,0x10,0x52,0x20, +0x12,0x20,0x12,0x20,0x12,0x20,0x14,0x20,0x00,0x00, +/* */ +0x02,0x80,0x72,0x40,0x57,0xF0,0x54,0x80,0x7F,0xE0,0x54,0x80,0x57,0xE0,0x74,0x80, +0x57,0xF0,0x54,0x00,0x7A,0xA0,0x49,0x50,0x00,0x00, +/* */ +0x01,0xC0,0x3E,0x00,0x02,0x00,0x7F,0xF0,0x05,0x00,0x08,0x80,0x10,0x40,0x68,0xB0, +0x08,0x80,0x08,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x08,0x60,0x0B,0x80,0x10,0x80,0x17,0xF0,0x31,0x40,0x52,0x20,0x14,0x10,0x12,0x20, +0x12,0x20,0x12,0x20,0x12,0x20,0x14,0x20,0x00,0x00, +/* */ +0x00,0x00,0x03,0xF0,0x78,0x80,0x11,0x00,0x11,0x00,0x12,0x00,0x13,0xF0,0x10,0x10, +0x1C,0x10,0x60,0x10,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x28,0x40,0x7D,0x50,0x28,0xE0,0x38,0x40,0x11,0xF0,0x7D,0x10,0x55,0xF0,0x7D,0x10, +0x11,0xF0,0x7D,0x10,0x11,0x10,0x11,0x30,0x00,0x00, +/* */ +0x20,0xC0,0x27,0x00,0x21,0xC0,0x77,0x00,0x21,0xE0,0x2F,0x10,0x30,0xF0,0x62,0x20, +0x2C,0xC0,0x26,0x60,0x2C,0xD0,0x66,0x70,0x00,0x00, +/* */ +0x20,0x00,0x3B,0xB0,0x60,0x90,0x2A,0xD0,0x15,0xB0,0x6C,0x90,0x01,0xB0,0x7E,0xD0, +0x28,0x90,0x29,0xB0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x11,0x50,0x10,0xE0,0x54,0x40,0x55,0xF0,0x55,0x10,0x55,0xF0,0x55,0x10, +0x55,0xF0,0x5D,0x10,0x65,0x10,0x01,0x30,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x22,0xA0,0x20,0x80,0x67,0xF0,0x24,0x10,0x27,0xF0,0x24,0x10, +0x27,0xF0,0x24,0x10,0x24,0x10,0x24,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x10,0x40,0x00,0x00,0x7B,0xF0,0x10,0x80,0x11,0x00, +0x11,0xF0,0x1C,0x10,0x60,0x10,0x00,0x60,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x10,0x90,0x1C,0x90,0x70,0x90,0x10,0x90,0x10,0x90,0x10,0x90, +0x15,0x10,0x19,0x10,0x12,0x10,0x04,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x10,0x00,0x7E,0xF0,0x12,0x90,0x12,0x90, +0x12,0x90,0x22,0x90,0x22,0xF0,0x4C,0x90,0x00,0x00, +/* */ +0x00,0x00,0x1F,0xC0,0x10,0x40,0x10,0x40,0x1F,0xC0,0x10,0x40,0x10,0x40,0x1F,0xC0, +0x10,0x40,0x10,0x40,0x10,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0x80,0x5B,0xE0,0x54,0x80,0x50,0x80,0x57,0xF0,0x10,0x80, +0x11,0x00,0x12,0x20,0x17,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x50,0x50,0x20,0x20,0x13,0xF0,0x10,0x90,0x1C,0x90,0x70,0x90, +0x10,0x90,0x15,0x10,0x19,0x10,0x12,0x60,0x00,0x00, +/* */ +0x21,0x00,0x21,0x00,0x39,0xF0,0x42,0x10,0x7A,0x20,0x24,0x80,0x20,0x80,0x78,0x80, +0x21,0x40,0x29,0x40,0x32,0x20,0x24,0x10,0x00,0x00, +/* */ +0x17,0xE0,0x10,0x20,0x23,0xE0,0x20,0x20,0x67,0xE0,0x20,0x00,0x2F,0xF0,0x28,0x10, +0x27,0xE0,0x22,0x20,0x21,0xC0,0x2E,0x30,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x10,0x40,0x08,0x80,0x7F,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0, +0x02,0x00,0x12,0x40,0x22,0x20,0x46,0x10,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x04,0x00,0x1F,0xC0,0x08,0x00,0x7F,0xF0,0x10,0x40,0x2F,0xA0, +0x42,0x10,0x3F,0xE0,0x0A,0x80,0x12,0x40,0x00,0x00, +/* */ +0x7D,0xF0,0x10,0x40,0x38,0xE0,0x10,0x40,0x7D,0xF0,0x02,0x00,0x05,0x00,0x1A,0xC0, +0x61,0x30,0x1F,0xC0,0x00,0x80,0x01,0x00,0x00,0x00, +/* */ +0x28,0x80,0x7C,0x80,0x28,0x80,0x39,0xF0,0x10,0x90,0x7C,0x90,0x54,0x90,0x7C,0x90, +0x10,0x90,0x7D,0x10,0x11,0x10,0x7E,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0xE0,0x1F,0x00,0x10,0x00,0x10,0x00,0x1F,0xF0, +0x10,0x80,0x10,0x80,0x20,0x80,0x40,0x80,0x00,0x00, +/* */ +0x11,0xC0,0x16,0xB0,0x13,0xE0,0x79,0x40,0x14,0x90,0x15,0x50,0x1F,0xF0,0x70,0x80, +0x17,0xF0,0x15,0x50,0x15,0xD0,0x34,0x50,0x00,0x00, +/* */ +0x02,0x00,0x0D,0x80,0x72,0x70,0x1F,0xC0,0x08,0x80,0x27,0x20,0x28,0xA0,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x49,0x10,0x5F,0xB0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x17,0xE0,0x50,0x20,0x37,0xE0,0x10,0x20,0x1F,0xF0, +0x3B,0xD0,0x52,0x40,0x11,0x80,0x1E,0x70,0x00,0x00, +/* */ +0x00,0x80,0x20,0x40,0x10,0x40,0x00,0x00,0x41,0x20,0x25,0x10,0x05,0x10,0x05,0x10, +0x15,0x00,0x29,0x20,0x41,0x20,0x00,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x10,0x40,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x10,0xC0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x78,0x40,0x20,0x80,0x51,0x40,0x7A,0x20,0x14,0x10,0x1B,0xE0, +0x70,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x1F,0xE0,0x20,0x00,0x5F,0xC0,0x00,0x00,0x3F,0xC0,0x00,0x40,0x3E,0x40,0x0C,0x40, +0x73,0x40,0x3E,0x50,0x08,0x30,0x7F,0x10,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x28,0x40,0x28,0x80,0x69,0xF0,0x2D,0x10,0x29,0x50,0x29,0x50, +0x29,0x50,0x2C,0x40,0x28,0xA0,0x21,0x10,0x00,0x00, +/* */ +0x10,0x00,0x67,0x70,0x45,0x50,0x55,0x50,0x57,0x50,0x55,0x50,0x55,0x50,0x77,0x50, +0x54,0x50,0x15,0x70,0x26,0xC0,0x44,0x40,0x00,0x00, +/* */ +0x01,0x00,0x5F,0xF0,0x21,0x00,0x0F,0xE0,0x01,0x00,0x5F,0xF0,0x28,0x20,0x0F,0xE0, +0x08,0x20,0x2F,0xE0,0x48,0x20,0x08,0x60,0x00,0x00, +/* */ +0x24,0x80,0x7E,0xF0,0x25,0x20,0x3E,0xA0,0x6A,0x40,0x3A,0xA0,0x05,0x10,0x3F,0xC0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x80,0x53,0xE0,0x50,0x80,0x77,0xF0,0x52,0x20,0x53,0xE0, +0x52,0x20,0x73,0xE0,0x52,0x20,0x02,0x60,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x20,0x00,0x5F,0xC0,0x08,0x40,0x3F,0x40,0x08,0x40,0x7F,0xC0, +0x21,0x40,0x3F,0x50,0x21,0x30,0x23,0x10,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x18,0x80,0x53,0xE0,0x50,0x80,0x57,0xF0,0x52,0x20,0x13,0xE0, +0x12,0x20,0x13,0xE0,0x12,0x20,0x12,0x60,0x00,0x00, +/* */ +0x47,0xF0,0x40,0x80,0x41,0x00,0x47,0xF0,0x74,0x10,0x44,0x90,0x44,0x90,0x44,0x90, +0x54,0x90,0x61,0x40,0x42,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x41,0x00,0x2F,0xF0,0x01,0x00,0x07,0xE0,0x61,0x00,0x2F,0xF0,0x24,0x20,0x27,0xE0, +0x24,0x20,0x27,0xE0,0x34,0x20,0x24,0x60,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x20,0x00,0x21,0x00,0x21,0x00,0x2F,0xF0,0x21,0x00, +0x22,0x80,0x22,0x80,0x24,0x40,0x48,0x30,0x00,0x00, +/* */ +0x01,0x00,0x78,0x80,0x17,0xF0,0x10,0x00,0x13,0xE0,0x7A,0x20,0x12,0x20,0x13,0xE0, +0x10,0x80,0x1A,0xA0,0x64,0x90,0x01,0x80,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x48,0x90,0x10,0x40,0x24,0x20,0x04,0x00,0x3F,0xE0, +0x08,0x20,0x08,0x20,0x10,0x20,0x20,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x70,0x80,0x12,0x90,0x12,0x90,0x7A,0xA0,0x14,0x80,0x30,0x80,0x39,0x40, +0x51,0x40,0x12,0x20,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x00,0xC0,0x1F,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x1F,0xE0,0x10,0x80,0x10,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x38,0xF0,0x20,0x90,0x20,0x90,0x3E,0xA0,0x24,0xA0,0x24,0x90,0x24,0x90, +0x24,0x90,0x2E,0xE0,0x70,0x80,0x00,0x80,0x00,0x00, +/* */ +0x00,0xA0,0x78,0x90,0x10,0x80,0x17,0xF0,0x10,0x80,0x7A,0xC0,0x11,0xD0,0x11,0xA0, +0x12,0xA0,0x1C,0x90,0x60,0x80,0x01,0x80,0x00,0x00, +/* */ +0x02,0x40,0x02,0x20,0x7F,0xF0,0x02,0x00,0x23,0x20,0x13,0x40,0x06,0x80,0x0A,0x80, +0x12,0x40,0x62,0x20,0x02,0x10,0x06,0x00,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x22,0x10,0x22,0x10,0x22,0x10,0x25,0x10,0x24,0x90,0x28,0x50, +0x30,0x50,0x20,0x10,0x20,0x10,0x3F,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x7F,0xF0,0x05,0x00,0x3F,0xE0,0x25,0x20,0x29,0xE0,0x30,0x20, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xF0,0x28,0x10,0x09,0x10,0x09,0x10,0x49,0x10,0x29,0x10,0x0A,0x90, +0x0C,0x50,0x28,0x10,0x4F,0xF0,0x08,0x10,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x3D,0xF0,0x09,0x10,0x0A,0x20,0x7D,0xF0,0x08,0x10,0x29,0xF0, +0x2C,0x10,0x29,0xF0,0x38,0x00,0x4F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x20,0x00,0x28,0x20,0x24,0x40,0x22,0x80,0x21,0x00,0x22,0x80, +0x24,0x40,0x28,0x20,0x20,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x11,0xE0,0x11,0x20,0x7D,0x20,0x55,0xE0,0x55,0x20,0x7D,0x20,0x11,0xE0, +0x15,0x20,0x1D,0x20,0x65,0x20,0x03,0xF0,0x00,0x00, +/* */ +0x04,0x80,0x04,0x80,0x3F,0xF0,0x24,0x90,0x24,0x90,0x24,0x90,0x3F,0xF0,0x24,0x90, +0x24,0x90,0x24,0x90,0x3F,0xF0,0x20,0x10,0x00,0x00, +/* */ +0x10,0x00,0x3B,0xF0,0x2A,0x00,0x3B,0x20,0x2A,0xA0,0x3A,0xA0,0x2A,0x40,0x7A,0x40, +0x1A,0xA0,0x2B,0x20,0x4A,0x00,0x1B,0xF0,0x00,0x00, +/* */ +0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x80,0x14,0x90,0x14,0x90,0x17,0xF0,0x10,0x80, +0x14,0x90,0x24,0x90,0x27,0xF0,0x40,0x10,0x00,0x00, +/* */ +0x00,0x00,0x73,0xF0,0x12,0x00,0x53,0x20,0x52,0xA0,0x52,0xA0,0x7A,0x40,0x0A,0x40, +0x1A,0xA0,0x6B,0x20,0x0A,0x00,0x33,0xF0,0x00,0x00, +/* */ +0x27,0xF0,0x14,0x00,0x47,0xE0,0x24,0x20,0x07,0xE0,0x14,0x00,0x27,0xF0,0x02,0x00, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* ȡ */ +0x00,0x00,0x7E,0x00,0x25,0xE0,0x24,0xA0,0x3C,0xA0,0x24,0xA0,0x3C,0xA0,0x24,0xA0, +0x26,0x40,0x7C,0x40,0x04,0xA0,0x05,0x10,0x00,0x00, +/* Ȣ */ +0x7E,0x00,0x25,0xF0,0x3C,0x90,0x24,0x90,0x3C,0xA0,0x26,0x40,0x7C,0xA0,0x05,0x10, +0x7F,0xF0,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* ȣ */ +0x10,0x30,0x5D,0xC0,0x50,0x40,0x51,0xF0,0x7D,0x50,0x01,0xF0,0x54,0x40,0x55,0xF0, +0x6D,0x50,0x45,0xF0,0x7D,0x10,0x05,0x30,0x00,0x00, +/* Ȥ */ +0x1F,0x80,0x15,0x70,0x7D,0x10,0x17,0x50,0x15,0x50,0x7F,0x50,0x15,0x20,0x55,0xA0, +0x5F,0x50,0x51,0x90,0x71,0x00,0x5F,0xF0,0x00,0x00, +/* ȥ */ +0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x04,0x00, +0x08,0x80,0x10,0x40,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* Ȧ */ +0x7F,0xF0,0x4A,0x90,0x5F,0xD0,0x44,0x10,0x7F,0xF0,0x48,0x90,0x5F,0xD0,0x68,0xB0, +0x4B,0x50,0x47,0xD0,0x40,0x10,0x7F,0xF0,0x00,0x00, +/* ȧ */ +0x22,0x70,0x7F,0x20,0x22,0x40,0x77,0x70,0x55,0x50,0x77,0x50,0x28,0x50,0x7F,0x50, +0x24,0x00,0x3F,0x20,0x24,0x20,0x3F,0x50,0x00,0x00, +/* Ȩ */ +0x10,0x00,0x17,0xE0,0x12,0x20,0x7A,0x20,0x12,0x20,0x32,0x20,0x39,0x40,0x51,0x40, +0x10,0x80,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* ȩ */ +0x00,0xA0,0x7D,0xF0,0x10,0xA0,0x7C,0x40,0x54,0xA0,0x55,0x10,0x6C,0xE0,0x44,0x40, +0x7C,0xE0,0x44,0x40,0x7C,0x40,0x45,0xF0,0x00,0x00, +/* Ȫ */ +0x04,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x02,0x20,0x7B,0x40, +0x0A,0x80,0x12,0x40,0x62,0x30,0x06,0x00,0x00,0x00, +/* ȫ */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x1F,0xC0,0x02,0x00,0x02,0x00, +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* Ȭ */ +0x01,0x00,0x1F,0xF0,0x10,0x80,0x51,0x40,0x32,0x20,0x14,0x10,0x13,0xE0,0x30,0x80, +0x53,0xE0,0x10,0x80,0x20,0x80,0x47,0xF0,0x00,0x00, +/* ȭ */ +0x12,0x40,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x10,0xC0,0x2F,0x20,0x42,0x10,0x1F,0xC0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x06,0x00,0x00,0x00, +/* Ȯ */ +0x02,0x00,0x02,0x40,0x02,0x20,0x02,0x00,0x7F,0xF0,0x02,0x00,0x05,0x00,0x05,0x00, +0x08,0x80,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* ȯ */ +0x12,0x40,0x0A,0x80,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x10,0x40,0x20,0x20,0x5F,0xD0, +0x04,0x40,0x08,0x40,0x10,0x40,0x21,0x80,0x00,0x00, +/* Ȱ */ +0x00,0x80,0x00,0x80,0x7C,0x80,0x05,0xF0,0x44,0x90,0x28,0x90,0x28,0x90,0x10,0x90, +0x10,0x90,0x29,0x10,0x29,0x10,0x42,0x60,0x00,0x00, +/* ȱ */ +0x20,0x80,0x3C,0x80,0x53,0xE0,0x10,0xA0,0x10,0xA0,0x7C,0xA0,0x13,0xF0,0x54,0x80, +0x55,0x40,0x5D,0x40,0x66,0x20,0x04,0x10,0x00,0x00, +/* Ȳ */ +0x10,0x80,0x10,0x80,0x17,0xE0,0x58,0xA0,0x50,0xA0,0x50,0xA0,0x57,0xF0,0x10,0x80, +0x11,0x40,0x29,0x40,0x2A,0x20,0x44,0x10,0x00,0x00, +/* ȳ */ +0x01,0x00,0x3F,0xF0,0x24,0x00,0x6F,0x70,0x25,0x50,0x2B,0x70,0x21,0x00,0x6F,0xF0, +0x29,0x10,0x2A,0x90,0x29,0x10,0x4A,0xB0,0x00,0x00, +/* ȴ */ +0x08,0x00,0x08,0xF0,0x3E,0x90,0x08,0x90,0x08,0x90,0x7F,0x90,0x08,0x90,0x10,0x90, +0x24,0x90,0x7E,0xB0,0x02,0x80,0x00,0x80,0x00,0x00, +/* ȵ */ +0x14,0x40,0x14,0xF0,0x3E,0x90,0x14,0xD0,0x7F,0x90,0x00,0xB0,0x3E,0x80,0x22,0xF0, +0x3E,0x10,0x22,0xF0,0x3E,0x10,0x22,0x60,0x00,0x00, +/* ȶ */ +0x10,0x80,0x17,0xF0,0x14,0x90,0x79,0x40,0x12,0x20,0x37,0xF0,0x3A,0x40,0x53,0xF0, +0x12,0x40,0x13,0xF0,0x12,0x40,0x13,0xF0,0x00,0x00, +/* ȷ */ +0x01,0x00,0x79,0xE0,0x12,0x20,0x10,0x40,0x23,0xF0,0x3A,0x90,0x6B,0xF0,0x2A,0x90, +0x2B,0xF0,0x3A,0x90,0x2A,0x90,0x04,0x30,0x00,0x00, +/* ȸ */ +0x02,0x00,0x12,0x40,0x22,0xA0,0x43,0x10,0x0C,0x80,0x7F,0xF0,0x11,0x00,0x1F,0xE0, +0x11,0x00,0x1F,0xE0,0x11,0x00,0x1F,0xF0,0x00,0x00, +/* ȹ */ +0x40,0x00,0x27,0xE0,0x71,0x20,0x17,0xF0,0x21,0x20,0x37,0xE0,0x62,0x00,0x37,0xE0, +0x2A,0x20,0x22,0x20,0x23,0xE0,0x22,0x20,0x00,0x00, +/* Ⱥ */ +0x01,0x10,0x3C,0xA0,0x15,0xF0,0x7E,0x40,0x14,0x40,0x3D,0xF0,0x10,0x40,0x3C,0x40, +0x35,0xF0,0x54,0x40,0x1C,0x40,0x14,0x40,0x00,0x00, +/* Ȼ */ +0x10,0xA0,0x1C,0x90,0x24,0x80,0x37,0xF0,0x48,0x80,0x29,0x40,0x11,0x40,0x22,0x20, +0x44,0x10,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* ȼ */ +0x12,0x40,0x12,0x50,0x1B,0x40,0x55,0xF0,0x57,0x40,0x59,0x40,0x56,0xA0,0x12,0xA0, +0x15,0x10,0x28,0x00,0x2D,0x50,0x45,0x50,0x00,0x00, +/* Ƚ */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x22,0x20,0x22,0x20, +0x7F,0xF0,0x20,0x20,0x20,0x20,0x20,0xE0,0x00,0x00, +/* Ⱦ */ +0x22,0x00,0x17,0xC0,0x42,0x40,0x02,0x40,0x24,0x50,0x48,0x30,0x02,0x00,0x7F,0xF0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* ȿ */ +0x08,0x10,0x7F,0xE0,0x01,0x50,0x77,0x50,0x55,0x50,0x77,0x50,0x15,0x50,0x7F,0x50, +0x15,0x40,0x7F,0x60,0x35,0x50,0x5A,0x70,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x20,0x00,0x27,0x70,0x75,0x50,0x27,0x70,0x21,0x40,0x27,0xF0, +0x21,0x40,0x37,0xF0,0x63,0x20,0x05,0x90,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x20,0x00,0x77,0x70,0x25,0x50,0x27,0x70,0x31,0x40,0x67,0xF0, +0x21,0x40,0x27,0xF0,0x23,0x20,0x65,0x90,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x00,0x57,0x70,0x55,0x50,0x57,0x70,0x51,0x40,0x57,0xF0, +0x71,0x40,0x57,0xF0,0x03,0x20,0x05,0x90,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x00,0x80,0x00,0x80,0x70,0xE0,0x10,0x80,0x10,0x80,0x10,0x80, +0x14,0x80,0x18,0x80,0x10,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x21,0xE0,0x3B,0x00,0x49,0x50,0x10,0x90,0x23,0x70,0x20,0x00,0x27,0xF0, +0x21,0x40,0x29,0x40,0x32,0x50,0x24,0x30,0x00,0x00, +/* */ +0x11,0x20,0x11,0x10,0x11,0x00,0x7B,0xF0,0x11,0x40,0x11,0x40,0x19,0x40,0x71,0x40, +0x11,0x40,0x12,0x50,0x12,0x50,0x34,0x30,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x27,0x00,0x49,0x50,0x70,0x90,0x13,0x70,0x20,0x00,0x77,0xF0, +0x01,0x40,0x11,0x40,0x62,0x50,0x04,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x7F,0xF0,0x04,0x00,0x1F,0xE0,0x68,0x20,0x0F,0xE0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x7B,0xC0,0x11,0x40,0x1B,0x40,0x71,0x50,0x12,0xD0,0x12,0x30, +0x34,0x10,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x00,0x00,0x01,0xE0,0x3E,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x00,0x00, +/* */ +0x08,0x00,0x08,0x00,0x10,0x00,0x17,0xE0,0x30,0x00,0x50,0x00,0x10,0x00,0x10,0x00, +0x10,0x00,0x10,0x00,0x1F,0xF0,0x10,0x00,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x05,0x00,0x05,0x00,0x08,0x80, +0x08,0x80,0x10,0x40,0x20,0x20,0x40,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x20,0x12,0x20,0x12,0x20,0x24,0x20,0x09,0xC0,0x30,0x00,0x02,0x00, +0x29,0x20,0x29,0x10,0x48,0x50,0x07,0xC0,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x7C,0x50,0x10,0x50,0x7D,0x50,0x11,0x50,0x7D,0x50,0x16,0x50, +0x14,0x50,0x1C,0x50,0x10,0x90,0x11,0x30,0x00,0x00, +/* */ +0x08,0x00,0x08,0x60,0x13,0x80,0x10,0x80,0x30,0x80,0x50,0x80,0x17,0xF0,0x10,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x13,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x00,0x80,0x00,0x80,0x70,0x80,0x10,0x80,0x11,0x40,0x11,0x40, +0x15,0x40,0x1A,0x20,0x12,0x20,0x04,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x02,0x10,0x02,0x10,0x12,0x10,0x12,0x10,0x12,0x10,0x24,0x10, +0x04,0x10,0x08,0x10,0x10,0x10,0x60,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x10,0x60,0x13,0x80,0x78,0x80,0x28,0x80,0x28,0x80,0x2F,0xF0,0x48,0x80, +0x28,0x80,0x10,0x80,0x28,0x80,0x4B,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x20,0x90,0x48,0x90,0x72,0x90,0x12,0x90,0x22,0x90,0x74,0x90, +0x01,0x10,0x19,0x10,0x62,0x10,0x04,0x60,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x12,0x20,0x7A,0x20,0x12,0x40,0x12,0x40,0x1A,0x70,0x72,0x10, +0x12,0x10,0x14,0x10,0x14,0x10,0x38,0x60,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x22,0x20,0x22,0x20,0x62,0x40,0x22,0x40,0x22,0x70,0x22,0x10, +0x22,0x10,0x24,0x10,0x24,0x10,0x28,0x60,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x20, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x01,0x40,0x01,0x20,0x7F,0xF0,0x01,0x00,0x11,0x20,0x11,0x20,0x7D,0x40,0x11,0x40, +0x10,0x90,0x21,0x50,0x22,0x30,0x44,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x10,0x40,0x1F,0xC0,0x10,0x40, +0x1F,0xC0,0x10,0x70,0x7F,0xC0,0x00,0x40,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x7F,0xF0,0x48,0x90,0x12,0x40,0x05,0x00,0x18,0xC0, +0x60,0x30,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x7F,0xF0,0x42,0x10,0x02,0x00,0x7F,0xF0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x7C,0x40,0x00,0x40,0x38,0x40,0x29,0xF0,0x39,0x50,0x01,0x50,0x7D,0x50,0x6D,0xF0, +0x54,0x40,0x7C,0x50,0x54,0x70,0x4D,0xD0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x10,0x5A,0x20,0x54,0x90,0x51,0x40,0x52,0x20,0x14,0x10, +0x13,0xE0,0x2A,0x20,0x2B,0xE0,0x42,0x20,0x00,0x00, +/* */ +0x00,0x80,0x27,0xF0,0x14,0x10,0x02,0x20,0x44,0x90,0x21,0x40,0x02,0x20,0x04,0x10, +0x13,0xE0,0x22,0x20,0x43,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x12,0x40,0x05,0x00,0x18,0xC0,0x60,0x30,0x1F,0xC0, +0x10,0x40,0x10,0x40,0x1F,0xC0,0x10,0x40,0x00,0x00, +/* */ +0x10,0xA0,0x10,0x90,0x20,0x80,0x4F,0xF0,0x70,0x80,0x12,0xA0,0x22,0xA0,0x77,0xA0, +0x02,0x40,0x12,0x50,0x64,0xB0,0x09,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x40,0x10,0x40,0x10,0x0F,0x80,0x08,0x80,0x08,0x80,0x08,0x80, +0x08,0x80,0x10,0x90,0x20,0x90,0x40,0x70,0x00,0x00, +/* */ +0x23,0xE0,0x21,0x20,0x20,0xC0,0x77,0xF0,0x21,0x50,0x22,0x40,0x34,0xC0,0x60,0x80, +0x27,0xF0,0x21,0xC0,0x22,0xA0,0x64,0x90,0x00,0x00, +/* */ +0x1F,0xC0,0x04,0x80,0x03,0x00,0x7F,0xF0,0x09,0x10,0x73,0x00,0x00,0x00,0x02,0x00, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x25,0x20,0x28,0xA0,0x22,0x20,0x22,0x20, +0x25,0x20,0x28,0xA0,0x20,0x20,0x20,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x08,0x00,0x7E,0xF0,0x12,0x90,0x12,0x90, +0x34,0x90,0x08,0x90,0x14,0xF0,0x62,0x90,0x00,0x00, +/* */ +0x13,0xE0,0x10,0x80,0x17,0xF0,0x7C,0x90,0x52,0xA0,0x50,0x00,0x7F,0xF0,0x10,0x80, +0x17,0xF0,0x1D,0x50,0x65,0x50,0x04,0x30,0x00,0x00, +/* */ +0x0B,0xE0,0x08,0x80,0x17,0xF0,0x14,0x90,0x32,0xA0,0x50,0x00,0x17,0xF0,0x10,0x80, +0x17,0xF0,0x15,0x50,0x15,0x50,0x14,0x30,0x00,0x00, +/* */ +0x73,0xE0,0x10,0x80,0x17,0xF0,0x24,0x90,0x22,0xA0,0x30,0x00,0x67,0xF0,0x20,0x80, +0x27,0xF0,0x25,0x50,0x25,0x50,0x64,0x30,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x11,0xF0,0x7D,0x10,0x25,0x10,0x25,0x10,0x25,0x10,0x49,0x10, +0x29,0x10,0x11,0x10,0x29,0xF0,0x45,0x10,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x20,0x00,0x3F,0xF0,0x29,0x20,0x28,0xC0,0x4C,0x30, +0x00,0x40,0x7F,0xF0,0x10,0x40,0x08,0xC0,0x00,0x00, +/* */ +0x07,0x40,0x78,0x40,0x11,0x40,0x4A,0x40,0x20,0x40,0x7E,0x40,0x04,0x40,0x08,0x40, +0x0F,0x40,0x78,0x50,0x08,0x50,0x18,0x30,0x00,0x00, +/* */ +0x42,0x00,0x22,0x00,0x02,0x00,0x1F,0xF0,0x44,0x40,0x24,0x40,0x0C,0x40,0x02,0x80, +0x01,0x00,0x22,0x80,0x44,0x40,0x18,0x20,0x00,0x00, +/* */ +0x18,0x00,0x04,0x00,0x02,0x00,0x02,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x08,0x80, +0x08,0x80,0x10,0x40,0x20,0x20,0x40,0x10,0x00,0x00, +/* */ +0x47,0xF0,0x24,0x00,0x75,0xF0,0x14,0x00,0x27,0xF0,0x35,0x50,0x65,0x20,0x35,0x90, +0x24,0x20,0x27,0xF0,0x25,0x20,0x28,0x60,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x79,0xF0,0x22,0x10,0x32,0x20,0x54,0x80,0x78,0x80,0x10,0x80, +0x19,0x40,0x71,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x48,0x00,0x48,0x00,0x57,0xF0,0x51,0x40,0x49,0x40,0x49,0x40, +0x49,0x40,0x72,0x50,0x42,0x50,0x44,0x30,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x04,0x00,0x02,0x00,0x28,0xA0,0x47,0x90,0x11,0x00, +0x08,0xA0,0x53,0x10,0x55,0x40,0x0C,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x74,0x90,0x24,0x90,0x27,0xF0,0x20,0x00,0x77,0xF0,0x20,0x80,0x27,0xF0, +0x25,0x50,0x35,0x50,0x65,0x50,0x04,0x30,0x00,0x00, +/* */ +0x22,0x20,0x21,0x40,0x38,0x00,0x43,0xE0,0x7A,0x20,0x22,0x20,0x23,0xE0,0x79,0x40, +0x21,0x40,0x29,0x40,0x32,0x50,0x24,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x00,0x10,0x4F,0x90,0x42,0x10,0x42,0x10,0x4F,0x90,0x42,0x10, +0x42,0x10,0x5F,0xD0,0x40,0x10,0x40,0x30,0x00,0x00, +/* */ +0x13,0xF0,0x48,0x10,0x20,0x10,0x17,0xD0,0x11,0x10,0x51,0x10,0x37,0xD0,0x11,0x10, +0x11,0x10,0x37,0xD0,0x50,0x10,0x10,0x70,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x02,0x00,0x7F,0xF0,0x04,0x00,0x08,0x00,0x1F,0xE0, +0x28,0x20,0x48,0x20,0x0F,0xE0,0x08,0x20,0x00,0x00, +/* */ +0x3C,0xF0,0x04,0x10,0x04,0x10,0x3C,0xF0,0x20,0x80,0x3C,0xF0,0x45,0x10,0x24,0x90, +0x14,0x50,0x24,0x90,0x45,0x10,0x18,0x60,0x00,0x00, +/* */ +0x2A,0x40,0x3F,0x40,0x2A,0x80,0x7F,0xF0,0x21,0x20,0x2E,0xA0,0x3A,0xA0,0x6E,0xA0, +0x2A,0x40,0x2E,0x40,0x2A,0xA0,0x6B,0x10,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xF0,0x22,0x40,0x02,0x40,0x0F,0xF0,0x4A,0x50,0x2A,0x50,0x0A,0x70, +0x0C,0x10,0x28,0x10,0x4F,0xF0,0x08,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x78,0x40,0x4B,0xF0,0x49,0x20,0x50,0xC0,0x4B,0xF0, +0x6A,0x00,0x52,0x00,0x44,0x00,0x48,0x00,0x00,0x00, +/* */ +0x3B,0xE0,0x2A,0xA0,0x2A,0xA0,0x3B,0xE0,0x2A,0xA0,0x2A,0xA0,0x3B,0xE0,0x28,0x80, +0x2A,0x50,0x2D,0x10,0x29,0x20,0x58,0xE0,0x00,0x00, +/* */ +0x21,0xF0,0x39,0x50,0x49,0x50,0x11,0xF0,0x7D,0x50,0x55,0x50,0x7D,0xF0,0x54,0x00, +0x7D,0x50,0x02,0x90,0x18,0xA0,0x60,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x3F,0xE0,0x08,0x80,0x3F,0xE0,0x08,0x80,0x7F,0xF0, +0x12,0x40,0x2F,0xA0,0x42,0x10,0x3F,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x10,0x40,0x3F,0xE0, +0x52,0x50,0x12,0x40,0x05,0x80,0x18,0x40,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x10,0x40,0x3F,0xE0,0x04,0x20,0x7F,0xF0,0x08,0x80,0x10,0x40,0x2F,0xA0, +0x40,0x10,0x1F,0xC0,0x00,0x00,0x3F,0xE0,0x00,0x00, +/* ɡ */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x62,0x30,0x02,0x00,0x12,0x40,0x0A,0x80, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* ɢ */ +0x24,0x80,0x7E,0x80,0x24,0x80,0x7E,0xF0,0x01,0x20,0x3C,0xA0,0x24,0xA0,0x3C,0xA0, +0x24,0xA0,0x3C,0x40,0x24,0xA0,0x2D,0x10,0x00,0x00, +/* ɣ */ +0x3F,0xC0,0x10,0x80,0x0F,0x00,0x10,0x80,0x3D,0xE0,0x25,0x20,0x18,0xC0,0x25,0x20, +0x02,0x00,0x7F,0xF0,0x12,0x40,0x62,0x30,0x00,0x00, +/* ɤ */ +0x03,0xE0,0x72,0x20,0x51,0xC0,0x52,0x20,0x57,0x70,0x55,0x50,0x52,0x20,0x55,0x50, +0x70,0x80,0x57,0xF0,0x02,0xA0,0x04,0x90,0x00,0x00, +/* ɥ */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x12,0x40,0x0A,0x80,0x7F,0xF0,0x12,0x20, +0x11,0x40,0x10,0x80,0x14,0x40,0x18,0x30,0x00,0x00, +/* ɦ */ +0x10,0x00,0x17,0xF0,0x12,0x90,0x7A,0x20,0x11,0xC0,0x16,0x30,0x18,0x80,0x73,0xE0, +0x12,0xA0,0x13,0xE0,0x10,0x90,0x37,0xF0,0x00,0x00, +/* ɧ */ +0x00,0x00,0x77,0xF0,0x12,0x90,0x52,0x20,0x51,0xC0,0x56,0x30,0x78,0x80,0x0B,0xE0, +0x1A,0xA0,0x6B,0xE0,0x08,0x90,0x37,0xF0,0x00,0x00, +/* ɨ */ +0x10,0x00,0x13,0xF0,0x10,0x10,0x7C,0x10,0x10,0x10,0x11,0xF0,0x1C,0x10,0x70,0x10, +0x10,0x10,0x10,0x10,0x13,0xF0,0x30,0x10,0x00,0x00, +/* ɩ */ +0x20,0x80,0x22,0xB0,0x24,0x90,0x76,0xB0,0x54,0x90,0x57,0xF0,0x50,0x80,0x57,0xF0, +0x52,0x10,0x21,0x20,0x50,0xC0,0x47,0x30,0x00,0x00, +/* ɪ */ +0x7D,0xF0,0x10,0x40,0x38,0xE0,0x10,0x40,0x7D,0xF0,0x00,0x00,0x04,0x00,0x22,0xA0, +0x29,0x10,0x4A,0x50,0x0C,0x40,0x37,0xC0,0x00,0x00, +/* ɫ */ +0x08,0x00,0x1F,0xC0,0x20,0x40,0x40,0x80,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x20,0x00,0x20,0x10,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* ɬ */ +0x00,0x00,0x4F,0xE0,0x22,0x20,0x0A,0x20,0x12,0x20,0x44,0xC0,0x29,0x00,0x01,0x00, +0x09,0xE0,0x29,0x00,0x49,0x00,0x1F,0xF0,0x00,0x00, +/* ɭ */ +0x02,0x00,0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x08,0x80,0x08,0x80,0x7D,0xF0, +0x18,0xC0,0x2D,0xA0,0x4A,0x90,0x08,0x80,0x00,0x00, +/* ɮ */ +0x0A,0x20,0x0F,0xF0,0x14,0x90,0x16,0xB0,0x34,0x90,0x57,0xF0,0x10,0x00,0x13,0xE0, +0x12,0x20,0x13,0xE0,0x12,0x20,0x13,0xE0,0x00,0x00, +/* ɯ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x21,0x00,0x15,0x40,0x45,0x20,0x29,0x10, +0x01,0x50,0x10,0x80,0x21,0x00,0x46,0x00,0x00,0x00, +/* ɰ */ +0x00,0x80,0x78,0x80,0x10,0xA0,0x12,0x90,0x22,0x90,0x3A,0x90,0x6C,0x80,0x28,0x90, +0x28,0x20,0x38,0x40,0x21,0x80,0x06,0x00,0x00,0x00, +/* ɱ */ +0x10,0x40,0x08,0x80,0x07,0x00,0x08,0xC0,0x32,0x20,0x02,0x00,0x7F,0xF0,0x02,0x00, +0x12,0x40,0x22,0x20,0x42,0x10,0x06,0x00,0x00,0x00, +/* ɲ */ +0x22,0x10,0x14,0x10,0x08,0x50,0x14,0x50,0x22,0x50,0x08,0x50,0x7F,0x50,0x08,0x50, +0x2A,0x50,0x49,0x10,0x08,0x10,0x18,0x30,0x00,0x00, +/* ɳ */ +0x20,0x80,0x10,0x80,0x02,0xA0,0x02,0x90,0x44,0x90,0x24,0x90,0x08,0x80,0x00,0x90, +0x10,0x20,0x20,0xC0,0x43,0x00,0x1C,0x00,0x00,0x00, +/* ɴ */ +0x10,0x80,0x10,0x80,0x20,0xA0,0x4A,0x90,0x72,0x90,0x12,0x90,0x24,0x80,0x78,0x90, +0x00,0x20,0x18,0x40,0x61,0x80,0x06,0x00,0x00,0x00, +/* ɵ */ +0x11,0x00,0x1F,0xE0,0x2A,0xA0,0x29,0x20,0x6A,0xA0,0x2F,0xE0,0x24,0x40,0x2A,0x20, +0x27,0xC0,0x2A,0x40,0x21,0x80,0x2E,0x70,0x00,0x00, +/* ɶ */ +0x00,0x80,0x71,0x40,0x52,0x20,0x55,0xD0,0x50,0x80,0x57,0xF0,0x50,0x80,0x53,0xE0, +0x72,0x20,0x52,0x20,0x03,0xE0,0x02,0x20,0x00,0x00, +/* ɷ */ +0x10,0x80,0x1C,0x80,0x24,0xF0,0x49,0x20,0x3E,0xA0,0x04,0xA0,0x3C,0x40,0x04,0xA0, +0x3D,0x10,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* ɸ */ +0x20,0x80,0x3C,0xF0,0x49,0x20,0x00,0x00,0x17,0xF0,0x50,0x80,0x57,0xF0,0x54,0x90, +0x54,0x90,0x14,0x90,0x14,0xB0,0x20,0x80,0x00,0x00, +/* ɹ */ +0x00,0x00,0x77,0xF0,0x51,0x40,0x51,0x40,0x57,0xF0,0x75,0x50,0x55,0x50,0x55,0x70, +0x56,0x10,0x74,0x10,0x57,0xF0,0x04,0x10,0x00,0x00, +/* ɺ */ +0x0E,0xE0,0x7A,0xA0,0x2A,0xA0,0x2A,0xA0,0x2A,0xA0,0x7F,0xF0,0x2A,0xA0,0x2A,0xA0, +0x3A,0xA0,0x6A,0xA0,0x13,0x20,0x26,0x60,0x00,0x00, +/* ɻ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x03,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* ɼ */ +0x10,0x20,0x10,0x40,0x10,0x80,0x7D,0x10,0x10,0x20,0x30,0x40,0x38,0x80,0x55,0x10, +0x10,0x20,0x10,0x40,0x10,0x80,0x13,0x00,0x00,0x00, +/* ɽ */ +0x02,0x00,0x02,0x00,0x02,0x00,0x22,0x20,0x22,0x20,0x22,0x20,0x22,0x20,0x22,0x20, +0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* ɾ */ +0x00,0x10,0x77,0x10,0x55,0x50,0x55,0x50,0x55,0x50,0x7F,0xD0,0x55,0x50,0x55,0x50, +0x55,0x50,0x55,0x10,0x55,0x10,0x33,0x30,0x00,0x00, +/* ɿ */ +0x10,0x80,0x17,0xF0,0x14,0x10,0x5F,0xF0,0x54,0x00,0x57,0xB0,0x54,0x90,0x16,0xD0, +0x15,0xB0,0x2E,0xD0,0x24,0x90,0x49,0xB0,0x00,0x00, +/* */ +0x20,0x20,0x10,0x40,0x78,0x80,0x09,0x10,0x10,0x20,0x14,0x40,0x38,0x80,0x55,0x10, +0x10,0x20,0x10,0x40,0x10,0x80,0x13,0x00,0x00,0x00, +/* */ +0x27,0xF0,0x10,0x10,0x02,0x10,0x22,0x10,0x22,0x10,0x25,0x10,0x24,0x90,0x28,0x50, +0x30,0x50,0x20,0x10,0x20,0x10,0x20,0x70,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x4F,0xF0,0x48,0x80,0x54,0x90,0x52,0xA0,0x48,0x80,0x4F,0xF0, +0x48,0x80,0x71,0x40,0x42,0x20,0x44,0x10,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x20,0x00,0x77,0xF0,0x25,0x50,0x25,0xD0,0x34,0x10,0x67,0xF0, +0x22,0x20,0x23,0xE0,0x22,0x20,0x67,0xF0,0x00,0x00, +/* */ +0x03,0xC0,0x74,0x40,0x57,0xF0,0x55,0x20,0x56,0x90,0x55,0xE0,0x54,0x00,0x55,0xE0, +0x04,0x00,0x25,0xE0,0x25,0x20,0x59,0xE0,0x00,0x00, +/* */ +0x3A,0x20,0x2F,0xF0,0x28,0x80,0x3B,0xE0,0x28,0x80,0x2F,0xF0,0x3A,0xA0,0x2F,0xF0, +0x28,0x00,0x2B,0xE0,0x2A,0x20,0x5B,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x12,0x40,0x7F,0xF0, +0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x00,0x80,0x04,0x90,0x44,0x90,0x24,0x90,0x04,0x90,0x04,0x90, +0x14,0x90,0x24,0x90,0x47,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x00,0x3E,0xF0,0x22,0x10,0x2A,0x50, +0x26,0x30,0x2A,0x50,0x32,0x90,0x46,0x30,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x20,0x80,0x4B,0xE0,0x70,0x80,0x17,0xF0,0x22,0xA0,0x77,0xF0, +0x00,0x00,0x13,0xE0,0x62,0x20,0x03,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x22,0x20,0x21,0x40,0x77,0xF0,0x25,0x50,0x26,0x30,0x25,0xD0, +0x25,0x50,0x35,0xD0,0x64,0x10,0x04,0x30,0x00,0x00, +/* */ +0x09,0x00,0x09,0x00,0x11,0xF0,0x12,0x00,0x34,0x80,0x50,0x80,0x13,0xF0,0x10,0x90, +0x11,0x10,0x11,0x10,0x12,0x10,0x14,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x10,0x40,0x08,0x80,0x3F,0xE0,0x25,0x20,0x28,0xA0,0x37,0x60, +0x25,0x20,0x27,0x20,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x12,0x40,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x0D,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x00,0x80,0x71,0x00,0x57,0xF0,0x54,0x10,0x54,0x10,0x75,0xD0,0x55,0x50,0x55,0x50, +0x55,0xD0,0x74,0x10,0x54,0x10,0x04,0x30,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x07,0xE0,0x04,0x00,0x04,0x00,0x04,0x00, +0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x12,0x40,0x02,0x00,0x3F,0xE0,0x20,0x20,0x2F,0xA0,0x28,0xA0, +0x28,0xA0,0x2F,0xA0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x12,0x40,0x0A,0x80,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x02,0x00, +0x7F,0xF0,0x05,0x20,0x18,0xC0,0x6C,0x30,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x12,0xA0,0x78,0x80,0x13,0xF0,0x32,0x10,0x3B,0xF0,0x52,0x10, +0x13,0xF0,0x12,0x10,0x12,0x10,0x12,0x30,0x00,0x00, +/* */ +0x20,0x80,0x24,0x90,0x22,0xA0,0x70,0x80,0x27,0xF0,0x24,0x10,0x37,0xF0,0x64,0x10, +0x27,0xF0,0x24,0x10,0x24,0x10,0x64,0x30,0x00,0x00, +/* */ +0x08,0x80,0x74,0x90,0x12,0xA0,0x10,0x80,0x7B,0xF0,0x12,0x10,0x33,0xF0,0x3A,0x10, +0x53,0xF0,0x12,0x10,0x12,0x10,0x12,0x30,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x17,0x00,0x59,0x50,0x50,0x90,0x53,0x70,0x50,0x00,0x17,0xF0, +0x11,0x40,0x29,0x40,0x2A,0x50,0x44,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x00,0x1F,0xE0,0x20,0x20,0x40,0x20,0x08,0x20, +0x04,0x20,0x04,0x20,0x00,0x20,0x01,0xC0,0x00,0x00, +/* */ +0x08,0x00,0x08,0x00,0x1F,0xF0,0x10,0x10,0x20,0x10,0x40,0x10,0x04,0x10,0x02,0x10, +0x02,0x10,0x00,0x10,0x00,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x7D,0xF0,0x00,0x90,0x44,0x90,0x28,0x90,0x7D,0x30,0x02,0x00,0x7D,0xF0, +0x45,0x10,0x7D,0x10,0x45,0xF0,0x7D,0x10,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x12,0x40,0x12,0x20,0x22,0x10,0x42,0x10,0x02,0x00,0x02,0x40, +0x00,0x80,0x03,0x00,0x0C,0x00,0x70,0x00,0x00,0x00, +/* */ +0x00,0x80,0x04,0x90,0x72,0xA0,0x50,0x80,0x57,0xF0,0x54,0x10,0x57,0xF0,0x54,0x10, +0x77,0xF0,0x54,0x10,0x04,0x10,0x04,0x30,0x00,0x00, +/* */ +0x00,0x00,0x3E,0xF0,0x12,0x90,0x12,0x90,0x12,0xA0,0x26,0xA0,0x40,0x90,0x3E,0x90, +0x22,0x90,0x22,0xE0,0x3E,0x80,0x22,0x80,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x21,0x10,0x49,0x10,0x72,0x10,0x14,0x60,0x20,0x00,0x7B,0xF0, +0x02,0x10,0x1A,0x10,0x63,0xF0,0x02,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x05,0x00,0x1A,0xC0,0x6F,0x30,0x02,0x80,0x7F,0xF0,0x08,0x40, +0x1F,0xC0,0x68,0x40,0x0F,0xC0,0x08,0x40,0x00,0x00, +/* */ +0x00,0x40,0x7C,0x40,0x44,0xA0,0x55,0x10,0x54,0xE0,0x54,0x00,0x55,0xF0,0x54,0x40, +0x55,0x60,0x11,0x50,0x2A,0x50,0x44,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7E,0x10,0x54,0x00,0x55,0x10,0x55,0x20,0x7D,0x40, +0x11,0x80,0x15,0x10,0x1D,0x10,0x64,0xF0,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x18,0xC0,0x60,0x30,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x02,0x00, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x3C,0x80,0x08,0xF0,0x09,0x20,0x7E,0xA0,0x14,0xA0,0x34,0xA0, +0x56,0x40,0x14,0x40,0x24,0xA0,0x4D,0x10,0x00,0x00, +/* */ +0x17,0xF0,0x12,0x20,0x13,0xE0,0x7A,0x20,0x13,0xE0,0x12,0x30,0x1F,0xE0,0x70,0x20, +0x17,0x70,0x15,0x50,0x12,0x20,0x35,0x50,0x00,0x00, +/* */ +0x10,0x20,0x3C,0x20,0x24,0x20,0x3D,0xF0,0x24,0x20,0x3C,0x20,0x25,0x20,0x7C,0xA0, +0x14,0xA0,0x24,0x20,0x44,0x20,0x0C,0xE0,0x00,0x00, +/* */ +0x17,0xF0,0x12,0x20,0x13,0xE0,0x5A,0x20,0x53,0xE0,0x52,0x30,0x57,0xE0,0x10,0x20, +0x17,0x70,0x15,0x50,0x12,0x20,0x15,0x50,0x00,0x00, +/* */ +0x00,0x80,0x24,0xE0,0x14,0x80,0x04,0x80,0x4F,0xF0,0x20,0x00,0x00,0x80,0x04,0x90, +0x14,0xA0,0x28,0x40,0x41,0x80,0x0E,0x00,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x78,0x80,0x08,0x80,0x13,0xE0,0x18,0x80,0x34,0x80,0x50,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x23,0xC0,0x12,0x40,0x02,0x40,0x02,0x40,0x74,0x30,0x10,0x00,0x17,0xE0,0x12,0x20, +0x11,0x40,0x18,0x80,0x11,0x40,0x06,0x30,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x13,0xF0,0x12,0x90,0x22,0x90,0x3B,0xF0,0x6A,0x90,0x2A,0x90, +0x2B,0xF0,0x3A,0x90,0x28,0x80,0x00,0x80,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x22,0x20,0x22,0x20, +0x3F,0xE0,0x22,0x20,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x00,0x80,0x00,0x80,0x77,0xF0,0x54,0x90,0x54,0x90,0x57,0xF0,0x54,0x90,0x54,0x90, +0x77,0xF0,0x54,0x90,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x17,0xF0,0x14,0x90,0x34,0x90,0x57,0xF0,0x14,0x90,0x14,0x90, +0x17,0xF0,0x14,0x90,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x04,0x00,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xD0,0x10,0x60,0x7F,0xC0, +0x03,0x40,0x0C,0x40,0x70,0x40,0x01,0xC0,0x00,0x00, +/* */ +0x00,0x00,0x5F,0xF0,0x32,0x90,0x04,0x40,0x09,0x20,0x41,0x00,0x2F,0xF0,0x01,0x00, +0x03,0x80,0x25,0x40,0x59,0x30,0x01,0x00,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x00,0x7A,0xE0,0x2A,0x00,0x2B,0xF0,0x2B,0x40,0x4B,0x50, +0x2D,0x60,0x15,0x40,0x2D,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x47,0xF0,0x54,0x90,0x64,0x90,0x27,0xF0,0x44,0x90,0x74,0x90, +0x07,0xF0,0x14,0x90,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x7B,0xF0,0x0A,0x90,0x12,0x90,0x1B,0xF0,0x36,0x90,0x52,0x90, +0x13,0xF0,0x12,0x90,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x01,0x00,0x41,0x00,0x2F,0xF0,0x09,0x10,0x09,0x10,0x41,0x00,0x22,0x80,0x02,0x80, +0x04,0x80,0x24,0x90,0x48,0x90,0x10,0x70,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x3F,0xE0,0x22,0x20,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x24,0x10,0x70,0x80,0x57,0xF0,0x54,0x90,0x57,0xF0,0x54,0x90, +0x57,0xF0,0x24,0x90,0x50,0x80,0x40,0x80,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x7F,0xF0, +0x24,0x80,0x28,0x40,0x20,0x00,0x3F,0xE0,0x00,0x00, +/* */ +0x0B,0xE0,0x49,0x20,0x48,0xC0,0x4B,0x20,0x00,0x10,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x5B,0xE0,0x52,0x20,0x53,0xE0,0x52,0x20,0x13,0xE0, +0x12,0x20,0x17,0xF0,0x11,0x40,0x12,0x20,0x00,0x00, +/* */ +0x02,0x00,0x44,0x40,0x2F,0xE0,0x02,0x20,0x1F,0xF0,0x44,0x40,0x29,0x20,0x16,0x50, +0x01,0x80,0x26,0x20,0x40,0xC0,0x0F,0x00,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20, +0x3F,0xE0,0x20,0x20,0x20,0x00,0x40,0x00,0x00,0x00, +/* */ +0x02,0x00,0x12,0x00,0x12,0x00,0x1F,0xE0,0x22,0x00,0x42,0x00,0x02,0x00,0x1F,0xC0, +0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x09,0xF0,0x29,0x50,0x3F,0xF0,0x29,0x50,0x49,0xF0,0x3C,0x80,0x09,0xF0, +0x08,0x90,0x0E,0x90,0x70,0x90,0x01,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x52,0x80,0x7B,0xE0,0x52,0x80,0x14,0x80,0x18,0x80,0x73,0xE0, +0x10,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x06,0x40,0x38,0x40,0x08,0x40,0x08,0x40,0x08,0x40,0x7F,0xF0,0x08,0x40,0x08,0x40, +0x08,0x40,0x10,0x40,0x10,0x40,0x20,0x40,0x00,0x00, +/* */ +0x27,0xC0,0x24,0x40,0x47,0xC0,0x51,0x00,0x6F,0xE0,0x29,0x20,0x4F,0xE0,0x79,0x20, +0x0F,0xE0,0x19,0x00,0x61,0x10,0x00,0xF0,0x00,0x00, +/* ʡ */ +0x02,0x00,0x12,0x40,0x22,0xA0,0x43,0x10,0x0C,0x00,0x7F,0xE0,0x10,0x20,0x1F,0xE0, +0x10,0x20,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* ʢ */ +0x00,0xA0,0x3F,0xF0,0x20,0x80,0x3E,0x90,0x22,0xA0,0x22,0x50,0x26,0xB0,0x41,0x10, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* ʣ */ +0x06,0x10,0x38,0x10,0x08,0x50,0x7F,0x50,0x2A,0x50,0x6B,0x50,0x2A,0x50,0x6B,0x50, +0x1C,0x50,0x2A,0x10,0x49,0x10,0x08,0x30,0x00,0x00, +/* ʤ */ +0x00,0x80,0x38,0x80,0x2A,0x80,0x2B,0xE0,0x3A,0x80,0x2C,0x80,0x28,0x80,0x3B,0xE0, +0x28,0x80,0x28,0x80,0x28,0x80,0x5F,0xF0,0x00,0x00, +/* ʥ */ +0x00,0x00,0x3F,0xE0,0x10,0x40,0x08,0x80,0x07,0x00,0x18,0xC0,0x62,0x30,0x02,0x00, +0x1F,0xC0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* ʦ */ +0x10,0x00,0x17,0xF0,0x50,0x80,0x50,0x80,0x57,0xF0,0x54,0x90,0x54,0x90,0x54,0x90, +0x54,0x90,0x14,0xB0,0x20,0x80,0x40,0x80,0x00,0x00, +/* ʧ */ +0x02,0x00,0x12,0x00,0x12,0x00,0x1F,0xC0,0x22,0x00,0x42,0x00,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* ʨ */ +0x14,0x00,0x55,0xF0,0x24,0x40,0x54,0x40,0x15,0xF0,0x15,0x50,0x35,0x50,0x55,0x50, +0x15,0x50,0x15,0x70,0x14,0x40,0x68,0x40,0x00,0x00, +/* ʩ */ +0x22,0x00,0x13,0xF0,0x7C,0x80,0x20,0x80,0x22,0xB0,0x3A,0xD0,0x2F,0x90,0x2A,0x90, +0x2A,0xB0,0x2A,0x80,0x2A,0x10,0x59,0xF0,0x00,0x00, +/* ʪ */ +0x40,0x00,0x2F,0xE0,0x08,0x20,0x0F,0xE0,0x48,0x20,0x2F,0xE0,0x02,0x80,0x12,0x90, +0x0A,0xA0,0x22,0x80,0x42,0x80,0x1F,0xF0,0x00,0x00, +/* ʫ */ +0x40,0x80,0x20,0x80,0x07,0xE0,0x00,0x80,0x6F,0xF0,0x20,0x40,0x2F,0xF0,0x20,0x40, +0x24,0x40,0x22,0x40,0x30,0x40,0x20,0xC0,0x00,0x00, +/* ʬ */ +0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x00, +0x10,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x00,0x00, +/* ʭ */ +0x3F,0xC0,0x00,0x40,0x07,0x40,0x78,0x40,0x08,0x40,0x7F,0x40,0x49,0x40,0x7F,0x40, +0x08,0x50,0x0A,0x50,0x7F,0x30,0x01,0x10,0x00,0x00, +/* ʮ */ +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* ʯ */ +0x00,0x00,0x7F,0xF0,0x04,0x00,0x04,0x00,0x08,0x00,0x0F,0xE0,0x18,0x20,0x28,0x20, +0x48,0x20,0x08,0x20,0x0F,0xE0,0x08,0x20,0x00,0x00, +/* ʰ */ +0x10,0x80,0x10,0x80,0x11,0x40,0x7A,0x20,0x14,0x10,0x13,0xE0,0x18,0x00,0x73,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x32,0x20,0x00,0x00, +/* ʱ */ +0x00,0x20,0x78,0x20,0x48,0x20,0x4B,0xF0,0x48,0x20,0x78,0x20,0x49,0x20,0x48,0xA0, +0x48,0xA0,0x78,0x20,0x48,0x20,0x00,0xE0,0x00,0x00, +/* ʲ */ +0x08,0x80,0x08,0x80,0x10,0x80,0x10,0x80,0x30,0x80,0x57,0xF0,0x10,0x80,0x10,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* ʳ */ +0x02,0x00,0x05,0x00,0x18,0xC0,0x62,0x30,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40, +0x1F,0xD0,0x11,0x20,0x14,0xC0,0x18,0x20,0x00,0x00, +/* ʴ */ +0x20,0x80,0x20,0x80,0x38,0x80,0x4F,0xF0,0x14,0x90,0x24,0x90,0x24,0x90,0x27,0xF0, +0x20,0x80,0x28,0x90,0x30,0xF0,0x27,0x90,0x00,0x00, +/* ʵ */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x09,0x00,0x05,0x00,0x11,0x00,0x09,0x00,0x7F,0xF0, +0x02,0x00,0x04,0xC0,0x18,0x20,0x60,0x10,0x00,0x00, +/* ʶ */ +0x20,0x00,0x17,0xE0,0x04,0x20,0x04,0x20,0x64,0x20,0x24,0x20,0x27,0xE0,0x20,0x00, +0x20,0x00,0x32,0x40,0x24,0x20,0x08,0x10,0x00,0x00, +/* ʷ */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0,0x02,0x00, +0x14,0x00,0x0C,0x00,0x13,0x00,0x60,0xF0,0x00,0x00, +/* ʸ */ +0x10,0x00,0x10,0x00,0x1F,0xE0,0x22,0x00,0x42,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* ʹ */ +0x08,0x80,0x08,0x80,0x17,0xF0,0x10,0x80,0x37,0xF0,0x54,0x90,0x17,0xF0,0x14,0x80, +0x12,0x80,0x11,0x00,0x12,0xC0,0x14,0x30,0x00,0x00, +/* ʺ */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x00,0x29,0x20,0x25,0x40,0x21,0x00,0x3F,0xF0, +0x25,0x40,0x29,0x20,0x31,0x10,0x41,0x00,0x00,0x00, +/* ʻ */ +0x00,0x40,0x78,0x40,0x09,0xF0,0x29,0x50,0x29,0x50,0x29,0x50,0x3D,0xF0,0x06,0x40, +0x15,0x40,0x64,0x80,0x05,0x40,0x1A,0x30,0x00,0x00, +/* ʼ */ +0x10,0x80,0x10,0x80,0x11,0x00,0x7A,0x20,0x2B,0xF0,0x28,0x10,0x2B,0xE0,0x4A,0x20, +0x2A,0x20,0x12,0x20,0x2B,0xE0,0x4A,0x20,0x00,0x00, +/* ʽ */ +0x00,0xA0,0x00,0x90,0x00,0x80,0x7F,0xF0,0x00,0x80,0x00,0x80,0x3E,0x80,0x08,0x80, +0x08,0x40,0x08,0x50,0x0F,0x30,0x70,0x10,0x00,0x00, +/* ʾ */ +0x00,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x12,0x40, +0x12,0x20,0x22,0x10,0x42,0x10,0x06,0x00,0x00,0x00, +/* ʿ */ +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x00,0x00, +/* */ +0x02,0x40,0x12,0x40,0x12,0x40,0x12,0x40,0x7F,0xF0,0x12,0x40,0x12,0x40,0x12,0x40, +0x13,0xC0,0x10,0x00,0x10,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x78,0x80,0x10,0x80,0x37,0xF0,0x3C,0x90,0x54,0x90, +0x14,0x90,0x14,0x90,0x14,0xB0,0x10,0x80,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x12,0x40,0x1F,0xC0,0x02,0x00,0x3F,0xE0,0x02,0x20,0x7F,0xF0, +0x02,0x20,0x3F,0xE0,0x02,0x00,0x06,0x00,0x00,0x00, +/* */ +0x10,0x50,0x10,0x40,0x17,0xF0,0x78,0x40,0x10,0x40,0x17,0x40,0x1A,0x40,0x72,0x40, +0x12,0x40,0x13,0x50,0x16,0x30,0x30,0x10,0x00,0x00, +/* */ +0x10,0x60,0x7B,0x80,0x12,0x00,0x7B,0xF0,0x12,0x40,0x34,0x40,0x04,0x00,0x7F,0xF0, +0x00,0x00,0x3F,0xE0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x44,0x10,0x24,0xE0,0x04,0x80,0x1E,0x80,0x64,0xF0,0x26,0xA0,0x3C,0xA0,0x24,0xA0, +0x24,0xA0,0x2D,0x20,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x7B,0xC0,0x11,0x40,0x1B,0x50,0x71,0x50,0x12,0xB0,0x34,0x10,0x04,0x00, +0x7F,0xE0,0x08,0x20,0x10,0x20,0x60,0xC0,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x7F,0xF0,0x02,0x00, +0x13,0xE0,0x12,0x00,0x2A,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x77,0xA0,0x51,0x40,0x5F,0xF0,0x53,0x20,0x55,0x50,0x58,0xF0,0x57,0xE0, +0x74,0x20,0x57,0xE0,0x04,0x20,0x07,0xE0,0x00,0x00, +/* */ +0x04,0x40,0x07,0x70,0x7A,0xA0,0x50,0x00,0x57,0xF0,0x50,0x80,0x52,0xA0,0x52,0xA0, +0x75,0xD0,0x58,0x80,0x00,0x80,0x0F,0xF0,0x00,0x00, +/* */ +0x20,0x60,0x13,0x80,0x00,0x80,0x00,0x80,0x77,0xF0,0x10,0x80,0x13,0xE0,0x12,0x20, +0x12,0x20,0x13,0xE0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x10,0x80,0x10,0x80,0x37,0xF0,0x50,0x80,0x10,0x80,0x10,0x80, +0x10,0x80,0x10,0x80,0x13,0xE0,0x10,0x00,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x13,0xE0,0x10,0x80,0x37,0xF0,0x50,0x40,0x17,0xF0,0x10,0x40, +0x12,0x40,0x11,0x40,0x10,0x40,0x11,0xC0,0x00,0x00, +/* */ +0x0B,0xF0,0x71,0x10,0x10,0xA0,0x54,0x40,0x38,0xA0,0x13,0x50,0x78,0x40,0x11,0xF0, +0x38,0x40,0x57,0xF0,0x10,0x40,0x10,0x40,0x00,0x00, +/* */ +0x21,0x00,0x21,0x00,0x33,0xF0,0x54,0x80,0x00,0x80,0x27,0xF0,0x24,0x90,0x24,0x90, +0x24,0x90,0x24,0xB0,0x30,0x80,0x20,0x80,0x00,0x00, +/* */ +0x00,0xE0,0x3F,0x00,0x21,0x00,0x21,0x00,0x21,0x00,0x3F,0xF0,0x21,0x00,0x20,0x80, +0x20,0x90,0x28,0x50,0x30,0x30,0x20,0x10,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20, +0x22,0x20,0x22,0x20,0x22,0x60,0x02,0x00,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x13,0xE0,0x58,0x80,0x57,0xF0,0x50,0x40,0x57,0xF0,0x10,0x40, +0x12,0x40,0x11,0x40,0x10,0x40,0x11,0xC0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x5F,0xD0,0x04,0x00,0x08,0x80,0x1F,0xC0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x13,0xE0,0x7A,0x20,0x0A,0xA0,0x12,0xA0,0x1A,0xA0,0x36,0xA0,0x52,0xA0, +0x11,0x40,0x11,0x40,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x40,0x50,0x20,0x40,0x07,0xF0,0x00,0x40,0x60,0x40,0x27,0x40,0x22,0x40,0x22,0x40, +0x22,0x40,0x23,0x50,0x36,0x30,0x20,0x10,0x00,0x00, +/* */ +0x09,0x00,0x49,0x00,0x49,0x00,0x49,0xF0,0x4A,0x20,0x4D,0x20,0x49,0x20,0x59,0x40, +0x68,0x80,0x49,0x40,0x0A,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0, +0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x00,0x80,0x00,0x80,0x7F,0xF0,0x00,0x80, +0x10,0x80,0x08,0x80,0x00,0x80,0x03,0x80,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x02,0x00,0x1F,0xC0,0x04,0x00,0x7F,0xF0,0x08,0x40,0x1F,0xF0, +0x14,0x40,0x22,0x40,0x40,0x40,0x01,0xC0,0x00,0x00, +/* */ +0x20,0x30,0x2F,0xC0,0x25,0x10,0x72,0xA0,0x2F,0xF0,0x28,0x10,0x37,0xE0,0x64,0x20, +0x22,0x40,0x21,0x80,0x22,0x40,0x6C,0x30,0x00,0x00, +/* */ +0x11,0x00,0x1F,0xF0,0x21,0x00,0x7F,0xE0,0x21,0x00,0x3F,0xE0,0x21,0x00,0x3F,0xF0, +0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x01,0xF0,0x7E,0x00,0x24,0x20,0x12,0x40,0x7F,0xF0,0x40,0x10,0x5F,0xD0,0x10,0x40, +0x08,0x80,0x07,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xF0,0x25,0x60,0x69,0x20,0x2D,0x60,0x29,0x20,0x2F,0xE0,0x21,0x00, +0x6F,0xE0,0x24,0x20,0x23,0xC0,0x5C,0x30,0x00,0x00, +/* */ +0x08,0x80,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0, +0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x40,0x7B,0xF0,0x08,0x80,0x11,0x20,0x5B,0xF0, +0x50,0x10,0x52,0xA0,0x5A,0xA0,0x64,0xB0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x00,0x7D,0x20,0x14,0xA0,0x34,0xA0,0x3C,0x40,0x54,0x40, +0x14,0xA0,0x15,0x20,0x14,0x00,0x17,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x79,0x00,0x12,0x20,0x37,0xF0,0x38,0x10,0x55,0x40, +0x15,0x40,0x15,0x40,0x15,0x50,0x18,0x30,0x00,0x00, +/* */ +0x00,0x80,0x7A,0x80,0x23,0xE0,0x24,0x80,0x38,0x80,0x2F,0xF0,0x28,0x80,0x59,0xC0, +0x0A,0xA0,0x14,0x90,0x20,0x80,0x40,0x80,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x20,0x79,0x40,0x10,0x80,0x17,0xF0,0x18,0x90,0x70,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x33,0x80,0x00,0x00, +/* */ +0x10,0x80,0x11,0x40,0x7A,0x20,0x25,0xD0,0x50,0x00,0x7F,0x10,0x15,0x50,0x1F,0x50, +0x75,0x50,0x17,0x50,0x15,0x10,0x15,0x30,0x00,0x00, +/* */ +0x08,0x00,0x0E,0xF0,0x08,0x90,0x08,0x90,0x7E,0x90,0x00,0xA0,0x08,0xA0,0x2C,0x40, +0x2A,0x40,0x48,0xA0,0x09,0x20,0x1A,0x10,0x00,0x00, +/* */ +0x10,0x00,0x29,0xF0,0x44,0x10,0x38,0xA0,0x10,0x40,0x7D,0xF0,0x10,0x50,0x7C,0x40, +0x44,0x40,0x44,0x40,0x7C,0x40,0x45,0xC0,0x00,0x00, +/* */ +0x04,0x00,0x45,0xE0,0x26,0xA0,0x04,0xA0,0x1F,0xA0,0x40,0xA0,0x24,0xA0,0x04,0xA0, +0x0E,0x40,0x35,0x40,0x44,0xA0,0x0D,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x0B,0xF0,0x10,0x80,0x11,0x20,0x53,0xF0,0x58,0x10,0x52,0xA0, +0x52,0xA0,0x5A,0xA0,0x62,0xA0,0x04,0x30,0x00,0x00, +/* */ +0x04,0x40,0x04,0x20,0x3F,0xC0,0x04,0x40,0x04,0x40,0x04,0x40,0x7F,0xF0,0x04,0x10, +0x04,0x10,0x04,0x10,0x04,0x60,0x04,0x00,0x00,0x00, +/* */ +0x00,0x40,0x7D,0xF0,0x44,0x40,0x55,0xF0,0x54,0x10,0x54,0xA0,0x55,0x60,0x54,0xA0, +0x55,0xF0,0x10,0x40,0x28,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7E,0x80,0x01,0xE0,0x3C,0xA0,0x24,0xA0,0x3D,0xA0,0x00,0xE0,0x3C,0xA0, +0x04,0xA0,0x7E,0xA0,0x09,0x30,0x1A,0x10,0x00,0x00, +/* */ +0x10,0x80,0x7E,0x80,0x25,0xE0,0x3C,0xA0,0x00,0xA0,0x3D,0xA0,0x04,0xE0,0x7E,0xA0, +0x09,0x30,0x1A,0x10,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x04,0x00,0x7F,0xF0, +0x10,0x20,0x3F,0xE0,0x50,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x3F,0xE0,0x22,0x20,0x21,0x20,0x3F,0xE0,0x04,0x40,0x1E,0x80,0x05,0x00,0x7F,0xF0, +0x08,0x40,0x1F,0xC0,0x68,0x40,0x0F,0xC0,0x00,0x00, +/* */ +0x07,0xF0,0x75,0x50,0x57,0xF0,0x51,0x00,0x53,0xA0,0x71,0x40,0x5F,0xF0,0x52,0x20, +0x57,0xE0,0x7A,0x20,0x53,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x02,0x40,0x1F,0x40,0x02,0x80,0x7F,0xF0,0x08,0x40, +0x1F,0xC0,0x68,0x40,0x0F,0xC0,0x08,0x40,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x10,0x00,0x1F,0xF0,0x24,0x10,0x7F,0x90,0x24,0x90, +0x3F,0x90,0x04,0x50,0x7F,0xD0,0x00,0x60,0x00,0x00, +/* */ +0x01,0xC0,0x1E,0x00,0x02,0x00,0x7F,0xF0,0x12,0x40,0x25,0x20,0x18,0xC0,0x62,0x30, +0x12,0x40,0x0A,0x80,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x04,0x00,0x39,0xE0,0x20,0x20,0x3D,0xE0,0x20,0x20,0x3F,0xE0,0x22,0x40,0x33,0x40, +0x22,0x40,0x33,0x50,0x22,0x30,0x33,0x10,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x21,0x00,0x2F,0xE0,0x29,0x20,0x2F,0xE0,0x21,0x00, +0x3F,0xF0,0x31,0x50,0x37,0xD0,0x50,0x30,0x00,0x00, +/* */ +0x02,0x40,0x02,0x20,0x02,0x00,0x7F,0xF0,0x07,0x00,0x0A,0x80,0x0A,0x80,0x12,0x40, +0x22,0x20,0x42,0x10,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x20,0xA0,0x10,0x90,0x00,0x80,0x07,0xF0,0x70,0x80,0x11,0xC0,0x12,0xA0,0x14,0x90, +0x10,0x80,0x10,0x80,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x20,0x10,0x20,0x17,0x20,0x79,0xF0,0x15,0x20,0x35,0x20,0x3A,0xA0,0x52,0x60, +0x15,0x20,0x19,0x20,0x10,0x20,0x10,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x07,0x00, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x01,0x40,0x01,0x20,0x01,0x00,0x3F,0xF0,0x21,0x00,0x21,0x20,0x31,0x20,0x29,0x40, +0x20,0x90,0x21,0x50,0x22,0x30,0x44,0x10,0x00,0x00, +/* */ +0x0B,0xE0,0x48,0x20,0x49,0x40,0x48,0x80,0x49,0x40,0x0A,0x20,0x02,0x00,0x3F,0xE0, +0x00,0x00,0x10,0x40,0x08,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x7D,0xE0,0x54,0x20,0x7C,0xA0,0x54,0x40,0x7D,0xF0,0x10,0x50,0x7C,0x40,0x10,0xC0, +0x7A,0x00,0x0F,0xC0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x24,0x40,0x24,0x40,0x3F,0xF0,0x24,0x40,0x24,0x40, +0x27,0xC0,0x20,0x00,0x2A,0xA0,0x51,0x50,0x00,0x00, +/* */ +0x08,0x80,0x2A,0x80,0x08,0x80,0x7E,0xF0,0x19,0x20,0x2C,0xA0,0x4A,0xA0,0x10,0xA0, +0x7C,0xA0,0x24,0x40,0x18,0xA0,0x65,0x10,0x00,0x00, +/* */ +0x04,0x40,0x44,0x40,0x3F,0x70,0x04,0x90,0x1F,0x10,0x55,0x40,0x3F,0x40,0x04,0x40, +0x06,0x40,0x2D,0xA0,0x54,0xA0,0x05,0x10,0x00,0x00, +/* ˡ */ +0x10,0x00,0x11,0xE0,0x7D,0x20,0x25,0x20,0x25,0x20,0x19,0x20,0x25,0xE0,0x40,0x00, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* ˢ */ +0x3F,0x10,0x21,0x10,0x21,0x50,0x3F,0x50,0x24,0x50,0x24,0x50,0x3F,0x50,0x35,0x50, +0x55,0x50,0x15,0x10,0x17,0x10,0x04,0x30,0x00,0x00, +/* ˣ */ +0x00,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x25,0x20,0x25,0x20,0x20,0x60,0x04,0x00, +0x7F,0xF0,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* ˤ */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x79,0x40,0x15,0xD0,0x12,0xA0,0x1D,0x50,0x71,0xC0, +0x10,0x80,0x17,0xF0,0x10,0x80,0x30,0x80,0x00,0x00, +/* ˥ */ +0x02,0x00,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x7F,0xF0,0x10,0x40,0x1F,0xC0, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* ˦ */ +0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x22,0xE0,0x42,0x10,0x01,0xF0,0x00,0x00, +/* ˧ */ +0x10,0x80,0x10,0x80,0x57,0xF0,0x54,0x90,0x54,0x90,0x54,0x90,0x54,0x90,0x54,0x90, +0x54,0x90,0x14,0xB0,0x20,0x80,0x40,0x80,0x00,0x00, +/* ˨ */ +0x10,0x80,0x10,0x80,0x11,0x40,0x7A,0x20,0x14,0x10,0x33,0xE0,0x38,0x80,0x50,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* ˩ */ +0x10,0x80,0x10,0x80,0x11,0x40,0x7A,0x20,0x14,0x10,0x13,0xE0,0x18,0x80,0x70,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x37,0xF0,0x00,0x00, +/* ˪ */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x4A,0x90,0x10,0x00,0x13,0xF0,0x7E,0x10,0x13,0xF0, +0x3A,0x10,0x57,0xF0,0x12,0x10,0x13,0xF0,0x00,0x00, +/* ˫ */ +0x00,0x00,0x7D,0xF0,0x05,0x10,0x05,0x10,0x45,0x10,0x28,0xA0,0x28,0xA0,0x10,0x40, +0x10,0x40,0x28,0xA0,0x29,0x20,0x42,0x10,0x00,0x00, +/* ˬ */ +0x02,0x00,0x7F,0xF0,0x2A,0xA0,0x12,0x40,0x2A,0xA0,0x02,0x00,0x2A,0xA0,0x12,0x40, +0x2A,0xA0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* ˭ */ +0x22,0x80,0x12,0x40,0x07,0xF0,0x04,0x80,0x6C,0x80,0x37,0xE0,0x24,0x80,0x24,0x80, +0x27,0xE0,0x34,0x80,0x24,0x80,0x07,0xF0,0x00,0x00, +/* ˮ */ +0x02,0x00,0x02,0x00,0x02,0x10,0x3B,0x20,0x0B,0x40,0x0A,0x80,0x0A,0x80,0x12,0x40, +0x12,0x40,0x22,0x20,0x42,0x10,0x0E,0x00,0x00,0x00, +/* ˯ */ +0x00,0x60,0x73,0x80,0x50,0x80,0x57,0xF0,0x72,0xA0,0x52,0xA0,0x5F,0xF0,0x72,0xA0, +0x52,0xA0,0x57,0xF0,0x70,0x80,0x53,0xE0,0x00,0x00, +/* ˰ */ +0x0A,0x20,0x71,0x40,0x10,0x00,0x13,0xE0,0x7A,0x20,0x12,0x20,0x33,0xE0,0x39,0x40, +0x51,0x40,0x11,0x40,0x12,0x50,0x14,0x30,0x00,0x00, +/* ˱ */ +0x01,0x00,0x01,0x00,0x72,0x40,0x54,0x20,0x5F,0xE0,0x52,0xA0,0x52,0x80,0x52,0x80, +0x72,0x80,0x52,0x90,0x04,0x90,0x08,0x70,0x00,0x00, +/* ˲ */ +0x00,0x70,0x77,0x80,0x55,0x10,0x52,0xA0,0x77,0xF0,0x54,0x10,0x52,0x20,0x73,0x70, +0x55,0xA0,0x52,0xF0,0x72,0x20,0x54,0x20,0x00,0x00, +/* ˳ */ +0x05,0xF0,0x44,0x40,0x54,0x80,0x55,0xF0,0x55,0x10,0x55,0x50,0x55,0x50,0x55,0x50, +0x55,0x50,0x54,0x40,0x44,0xA0,0x05,0x10,0x00,0x00, +/* ˴ */ +0x01,0xF0,0x7E,0x00,0x24,0x20,0x12,0x40,0x7F,0xF0,0x50,0x50,0x1D,0xE0,0x24,0x40, +0x55,0x40,0x09,0xF0,0x10,0x40,0x20,0x40,0x00,0x00, +/* ˵ */ +0x24,0x20,0x12,0x40,0x00,0x00,0x07,0xE0,0x64,0x20,0x24,0x20,0x24,0x20,0x27,0xE0, +0x2A,0x40,0x32,0x40,0x24,0x50,0x08,0x30,0x00,0x00, +/* ˶ */ +0x00,0x00,0x7B,0xF0,0x10,0x80,0x11,0x00,0x23,0xE0,0x3A,0x20,0x6A,0xA0,0x2A,0xA0, +0x2A,0xA0,0x39,0x40,0x22,0x20,0x04,0x10,0x00,0x00, +/* ˷ */ +0x22,0x00,0x14,0xF0,0x00,0x90,0x7E,0x90,0x08,0xF0,0x2A,0x90,0x2A,0x90,0x3E,0xF0, +0x0A,0x90,0x08,0x90,0x10,0x90,0x21,0x30,0x00,0x00, +/* ˸ */ +0x10,0x60,0x13,0x80,0x16,0x00,0x5A,0x80,0x52,0x80,0x53,0xF0,0x50,0x80,0x12,0xA0, +0x12,0x90,0x2C,0x90,0x24,0x80,0x41,0x80,0x00,0x00, +/* ˹ */ +0x24,0x20,0x25,0xC0,0x7F,0x00,0x25,0x00,0x3D,0xF0,0x25,0x20,0x3D,0x20,0x25,0x20, +0x7F,0x20,0x01,0x20,0x25,0x20,0x42,0x20,0x00,0x00, +/* ˺ */ +0x2A,0x10,0x2A,0xE0,0x7F,0x80,0x2A,0x80,0x2E,0xF0,0x2A,0xA0,0x3E,0xA0,0x6A,0xA0, +0x3F,0xA0,0x20,0xA0,0x2A,0xA0,0x71,0x20,0x00,0x00, +/* ˻ */ +0x05,0x10,0x75,0x60,0x5F,0xC0,0x55,0x40,0x57,0x70,0x55,0x50,0x57,0x50,0x55,0x50, +0x7F,0xD0,0x50,0x50,0x05,0x50,0x08,0x90,0x00,0x00, +/* ˼ */ +0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x02,0x00, +0x29,0x20,0x29,0x10,0x48,0x50,0x07,0xC0,0x00,0x00, +/* ˽ */ +0x04,0x40,0x38,0x40,0x08,0x40,0x08,0x40,0x7E,0x40,0x08,0x80,0x1C,0x80,0x2A,0x80, +0x48,0xA0,0x09,0x10,0x0B,0xF0,0x08,0x10,0x00,0x00, +/* ˾ */ +0x00,0x00,0x3F,0xE0,0x00,0x20,0x7F,0xA0,0x00,0x20,0x3F,0x20,0x21,0x20,0x21,0x20, +0x21,0x20,0x3F,0x20,0x20,0x20,0x01,0xC0,0x00,0x00, +/* ˿ */ +0x08,0x40,0x10,0x40,0x20,0x80,0x45,0x10,0x79,0xE0,0x10,0x40,0x20,0x80,0x41,0x00, +0x7D,0xF0,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x11,0x00,0x11,0x00,0x1D,0x10,0x25,0x20,0x55,0x40,0x09,0x80, +0x09,0x00,0x11,0x10,0x21,0x10,0x40,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x3B,0xE0,0x20,0xA0,0x3B,0xF0,0x20,0xA0,0x3B,0xE0,0x20,0x80,0x7B,0xE0, +0x20,0x80,0x4B,0xF0,0x7C,0x80,0x04,0x80,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x80,0x00,0x80,0x7F,0xF0, +0x10,0x80,0x08,0x80,0x00,0x80,0x03,0x80,0x00,0x00, +/* */ +0x7D,0xF0,0x44,0x10,0x7D,0xD0,0x00,0x10,0x7D,0xD0,0x55,0x50,0x55,0x50,0x7D,0x50, +0x55,0xD0,0x55,0x10,0x54,0x10,0x4C,0x60,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x24,0x90,0x24,0x90,0x24,0x90,0x24,0x90,0x24,0x90,0x28,0x70, +0x30,0x10,0x20,0x10,0x3F,0xF0,0x20,0x10,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x20,0x10,0x2F,0xD0,0x60,0x10,0x27,0xD0,0x24,0x50,0x24,0x50, +0x27,0xD0,0x24,0x10,0x20,0x10,0x20,0xE0,0x00,0x00, +/* */ +0x10,0x20,0x15,0x20,0x24,0xA0,0x24,0xA0,0x64,0x20,0x24,0x40,0x24,0x40,0x25,0x40, +0x26,0xA0,0x24,0xA0,0x21,0x10,0x22,0x10,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x30,0x10,0x57,0xD0,0x00,0x10,0x27,0xD0,0x24,0x50,0x24,0x50, +0x27,0xD0,0x24,0x10,0x30,0x10,0x20,0xE0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x00, +0x20,0x00,0x20,0x10,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x11,0x40,0x11,0x40,0x11,0x40,0x7A,0x20,0x12,0x20,0x34,0x90,0x38,0x80,0x51,0x00, +0x11,0x40,0x12,0x20,0x13,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x15,0x40,0x22,0x20,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x10,0x40, +0x1F,0xC0,0x10,0x70,0x7F,0xC0,0x00,0x40,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x08,0x80,0x15,0x40,0x22,0x20,0x44,0x10,0x00,0x00,0x02,0x00, +0x29,0x20,0x29,0x10,0x48,0x50,0x07,0xC0,0x00,0x00, +/* */ +0x09,0xF0,0x28,0x40,0x24,0x80,0x45,0xF0,0x45,0x10,0x11,0x50,0x11,0x50,0x21,0x50, +0x29,0x50,0x44,0x40,0x7C,0xA0,0x05,0x10,0x00,0x00, +/* */ +0x44,0x40,0x22,0x80,0x00,0x00,0x0F,0xE0,0x61,0x00,0x21,0x00,0x3F,0xF0,0x21,0x00, +0x22,0x80,0x24,0x40,0x28,0x20,0x5F,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x02,0x00,0x02,0x00,0x7F,0xF0,0x07,0x00, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x22,0x40,0x12,0x40,0x02,0x40,0x04,0x20,0x64,0x20,0x29,0x10,0x21,0x00,0x22,0x00, +0x2A,0x40,0x34,0x20,0x27,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x27,0xE0,0x10,0x20,0x01,0x40,0x00,0x80,0x67,0xF0,0x24,0x90,0x27,0xF0,0x24,0x90, +0x27,0xF0,0x34,0x90,0x24,0x90,0x04,0x30,0x00,0x00, +/* */ +0x10,0x80,0x12,0xB0,0x14,0x90,0x7E,0xB0,0x14,0x90,0x17,0xF0,0x18,0x80,0x77,0xF0, +0x12,0x10,0x11,0x20,0x10,0xC0,0x37,0x30,0x00,0x00, +/* */ +0x10,0x80,0x39,0xB0,0x2A,0x90,0x3B,0xB0,0x2A,0x90,0x7B,0xF0,0x28,0x80,0x3B,0xF0, +0x29,0x10,0x28,0xA0,0x28,0xC0,0x5B,0x30,0x00,0x00, +/* */ +0x22,0x20,0x2A,0xA0,0x72,0x40,0x2F,0xF0,0x22,0x50,0x27,0x50,0x3A,0xD0,0x64,0x50, +0x2F,0x50,0x25,0x20,0x22,0x50,0x6D,0x90,0x00,0x00, +/* */ +0x04,0x40,0x74,0x40,0x5F,0x70,0x54,0x90,0x5F,0x10,0x55,0x40,0x5F,0x40,0x54,0x40, +0x76,0x40,0x4D,0xA0,0x14,0xA0,0x05,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x04,0x00,0x3F,0xC0,0x04,0x40,0x24,0x60,0x24,0x50, +0x28,0x50,0x48,0x40,0x10,0x40,0x23,0x80,0x00,0x00, +/* */ +0x00,0x10,0x7F,0x60,0x14,0x20,0x7F,0x20,0x55,0xF0,0x55,0x20,0x63,0x20,0x41,0x70, +0x7F,0xA0,0x41,0x20,0x7F,0x20,0x41,0x20,0x00,0x00, +/* */ +0x09,0x40,0x0A,0x20,0x14,0x90,0x10,0x80,0x31,0x40,0x52,0x20,0x14,0x10,0x13,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x08,0x80,0x1F,0x00, +0x04,0x40,0x3F,0xE0,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x41,0x00,0x2F,0xF0,0x01,0x00,0x0F,0xE0,0x69,0x20,0x29,0x20,0x2F,0xE0,0x23,0x80, +0x25,0x40,0x29,0x20,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x05,0x00,0x3F,0xE0,0x25,0x20,0x25,0x20,0x3F,0xE0,0x12,0x40,0x0A,0x80, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x0F,0xF0,0x09,0x40,0x17,0xF0,0x15,0x50,0x37,0xF0,0x50,0x80,0x12,0xA0,0x10,0x80, +0x17,0xF0,0x11,0xC0,0x12,0xA0,0x14,0x90,0x00,0x00, +/* */ +0x22,0xF0,0x14,0x90,0x7E,0xF0,0x08,0x90,0x2A,0xF0,0x3E,0x90,0x11,0x10,0x62,0x30, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x4A,0x70,0x20,0x50,0x1F,0x50,0x04,0x70,0x55,0x50,0x35,0x50,0x1F,0x70, +0x04,0x50,0x24,0x50,0x48,0x50,0x10,0xB0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x1F,0xE0,0x22,0x00,0x6F,0xE0,0x28,0x20, +0x2F,0xE0,0x28,0x20,0x2F,0xE0,0x28,0x20,0x00,0x00, +/* */ +0x20,0xE0,0x17,0x00,0x04,0x00,0x04,0x00,0x67,0xF0,0x24,0x40,0x24,0x40,0x25,0xC0, +0x2C,0x60,0x34,0x50,0x24,0x40,0x08,0x40,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x02,0x20,0x7F,0xF0,0x02,0x20,0x3F,0xE0,0x02,0x00,0x22,0x20, +0x27,0x20,0x2A,0xA0,0x22,0x20,0x42,0x20,0x00,0x00, +/* */ +0x00,0x80,0x7D,0x20,0x11,0xF0,0x7C,0x10,0x55,0x20,0x56,0x90,0x6C,0xE0,0x45,0x20, +0x7E,0xA0,0x44,0x40,0x7C,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x38,0xE0,0x00,0x00,0x7D,0xF0,0x10,0x40, +0x38,0xE0,0x55,0x50,0x10,0x40,0x30,0xC0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x49,0x20,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x10,0x40,0x7F,0xF0,0x08,0x80,0x10,0x80,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x10,0x40,0x1F,0xC0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20, +0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x71,0x00,0x57,0xF0,0x52,0x00,0x55,0xE0,0x60,0x80,0x67,0xF0,0x52,0x20,0x53,0xE0, +0x52,0x20,0x63,0xE0,0x42,0x20,0x42,0x60,0x00,0x00, +/* */ +0x70,0x80,0x57,0xF0,0x51,0x00,0x5B,0xE0,0x65,0x20,0x61,0xE0,0x5D,0x20,0x55,0xE0, +0x55,0x20,0x65,0x60,0x44,0x00,0x4B,0xF0,0x00,0x00, +/* */ +0x10,0x70,0x17,0x80,0x21,0x10,0x4C,0xA0,0x72,0x00,0x10,0x80,0x27,0xF0,0x79,0x20, +0x03,0x20,0x18,0xC0,0x61,0x20,0x06,0x10,0x00,0x00, +/* */ +0x38,0x40,0x29,0xF0,0x28,0x80,0x7D,0xF0,0x46,0x40,0x39,0xF0,0x2E,0x90,0x3A,0xF0, +0x2A,0x90,0x3A,0xB0,0x2A,0x00,0x2D,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x78,0x80,0x17,0xF0,0x12,0x20,0x22,0x20,0x3D,0x50,0x68,0x00,0x28,0x80, +0x2F,0xF0,0x38,0x80,0x28,0x80,0x00,0x80,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x22,0x20,0x3F,0xE0,0x04,0x00,0x04,0x00,0x0F,0xE0,0x30,0x20, +0x08,0x40,0x05,0x80,0x0E,0x00,0x70,0x00,0x00,0x00, +/* */ +0x08,0x80,0x77,0xF0,0x10,0x80,0x13,0xE0,0x7A,0xA0,0x13,0xE0,0x3A,0xA0,0x37,0xF0, +0x51,0x00,0x10,0xA0,0x13,0x50,0x15,0xD0,0x00,0x00, +/* */ +0x44,0x20,0x22,0x40,0x0F,0xF0,0x02,0x00,0x65,0x10,0x29,0xA0,0x22,0xC0,0x2D,0xA0, +0x22,0x90,0x2C,0x90,0x23,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x72,0x20,0x59,0x40,0x57,0xF0,0x50,0x80,0x61,0x50,0x6E,0xE0,0x55,0x40,0x56,0xE0, +0x55,0x50,0x66,0xC0,0x44,0x00,0x4B,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x42,0x10,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x00,0x00, +0x7F,0xF0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x08,0x80,0x08,0x80,0x12,0xA0,0x12,0xA0,0x1A,0x90,0x72,0x90, +0x14,0x90,0x10,0x80,0x10,0x80,0x31,0x80,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x23,0xE0,0x70,0x00,0x27,0xF0,0x24,0x10,0x34,0x90,0x64,0x90, +0x24,0x90,0x21,0x40,0x22,0x20,0x64,0x10,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x3F,0xC0,0x04,0x40,0x7F,0xF0,0x04,0x40, +0x3F,0xC0,0x08,0x40,0x10,0x00,0x60,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x7F,0xF0,0x1F,0xC0,0x10,0x40,0x7F,0xF0,0x10,0x40, +0x1F,0xC0,0x0D,0x20,0x14,0xC0,0x66,0x30,0x00,0x00, +/* */ +0x11,0x00,0x12,0x20,0x17,0xF0,0x78,0x10,0x12,0x20,0x35,0x10,0x39,0xE0,0x52,0x20, +0x15,0x40,0x10,0x80,0x11,0x40,0x16,0x30,0x00,0x00, +/* */ +0x01,0x00,0x72,0x20,0x57,0xF0,0x50,0x10,0x52,0x20,0x55,0x10,0x51,0xE0,0x52,0x20, +0x75,0x40,0x50,0x80,0x01,0x40,0x06,0x30,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x24,0x10,0x49,0x00,0x72,0xF0,0x16,0x40,0x22,0xF0,0x7A,0x90, +0x02,0xF0,0x1A,0x90,0x62,0xF0,0x02,0x90,0x00,0x00, +/* */ +0x00,0x80,0x74,0x90,0x22,0xA0,0x20,0x80,0x27,0xF0,0x74,0x10,0x24,0x90,0x24,0x90, +0x24,0x90,0x31,0x40,0x62,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x44,0x10,0x08,0x80,0x1F,0x00,0x04,0x40, +0x3F,0xE0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x20,0x80,0x34,0x90,0x42,0xA0,0x00,0x80,0x77,0xF0,0x24,0x10,0x24,0x90,0x74,0x90, +0x24,0x90,0x21,0x40,0x32,0x20,0x2C,0x10,0x00,0x00, +/* */ +0x04,0x30,0x39,0xC0,0x21,0x00,0x21,0x00,0x3D,0xF0,0x25,0x20,0x25,0x20,0x3D,0x20, +0x25,0x20,0x21,0x20,0x22,0x20,0x44,0x20,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x23,0xE0,0x22,0x20,0x73,0xE0,0x20,0x00,0x27,0x70,0x21,0x10, +0x25,0x50,0x33,0x30,0x65,0x50,0x03,0x30,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x12,0xB0,0x12,0xD0,0x33,0x90,0x56,0x90,0x12,0x90,0x12,0xB0, +0x12,0x80,0x12,0x10,0x12,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x50,0x10,0x10,0xC0,0x13,0x00,0x1C,0x00, +0x10,0x00,0x10,0x20,0x10,0x20,0x0F,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x12,0xB0,0x7A,0xD0,0x2B,0x90,0x2E,0x90,0x2A,0x90,0x4A,0xB0, +0x2A,0x80,0x12,0x10,0x2A,0x10,0x49,0xF0,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x12,0x20,0x10,0x80,0x79,0x40,0x12,0x20,0x15,0xD0,0x10,0x00, +0x13,0xE0,0x1A,0x20,0x63,0xE0,0x02,0x20,0x00,0x00, +/* ̡ */ +0x12,0x40,0x52,0x70,0x2F,0x90,0x62,0x20,0x2F,0xF0,0x2A,0xD0,0x2F,0xD0,0x62,0x50, +0x27,0x50,0x2A,0x20,0x22,0x50,0x42,0x90,0x00,0x00, +/* ̢ */ +0x14,0x40,0x12,0x40,0x10,0x40,0x78,0xF0,0x16,0x40,0x12,0x40,0x1A,0x40,0x72,0xA0, +0x12,0x90,0x13,0x10,0x16,0x00,0x39,0xF0,0x00,0x00, +/* ̣ */ +0x03,0xE0,0x7A,0x20,0x4B,0xE0,0x4A,0x20,0x7B,0xE0,0x10,0x00,0x17,0x70,0x59,0x10, +0x55,0x50,0x53,0x30,0x5D,0x50,0x63,0x30,0x00,0x00, +/* ̤ */ +0x00,0x80,0x76,0xD0,0x52,0xA0,0x52,0xA0,0x75,0x90,0x10,0x00,0x17,0xF0,0x5C,0x10, +0x57,0xF0,0x54,0x10,0x5F,0xF0,0x64,0x10,0x00,0x00, +/* ̥ */ +0x00,0x80,0x38,0x80,0x29,0x00,0x2A,0x20,0x3B,0xF0,0x28,0x10,0x2B,0xE0,0x3A,0x20, +0x2A,0x20,0x2A,0x20,0x2B,0xE0,0x5A,0x20,0x00,0x00, +/* ̦ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x00,0x20,0x20,0x7F,0xF0,0x00,0x10,0x3F,0xE0, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* ̧ */ +0x10,0x80,0x10,0x80,0x11,0x00,0x7A,0x20,0x17,0xF0,0x10,0x10,0x1B,0xE0,0x72,0x20, +0x12,0x20,0x12,0x20,0x13,0xE0,0x32,0x20,0x00,0x00, +/* ̨ */ +0x04,0x00,0x08,0x00,0x10,0x40,0x20,0x20,0x7F,0xF0,0x00,0x10,0x3F,0xE0,0x20,0x20, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* ̩ */ +0x02,0x00,0x3F,0xE0,0x04,0x00,0x1F,0xC0,0x08,0x00,0x7F,0xF0,0x12,0x40,0x22,0x20, +0x57,0x50,0x0A,0x80,0x12,0x40,0x66,0x30,0x00,0x00, +/* ̪ */ +0x7C,0x80,0x10,0x80,0x7C,0x80,0x57,0xF0,0x54,0x80,0x6C,0x80,0x45,0x40,0x7D,0x40, +0x45,0x40,0x46,0xA0,0x7E,0xA0,0x44,0x10,0x00,0x00, +/* ̫ */ +0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x05,0x00,0x05,0x00,0x09,0x00, +0x08,0x80,0x14,0x80,0x22,0x40,0x40,0x30,0x00,0x00, +/* ̬ */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x05,0x00,0x08,0x80,0x12,0x40,0x61,0x30,0x02,0x00, +0x29,0x20,0x29,0x10,0x48,0x50,0x07,0xC0,0x00,0x00, +/* ̭ */ +0x21,0x00,0x11,0x00,0x01,0x00,0x1F,0xF0,0x41,0x00,0x22,0x80,0x02,0x80,0x02,0x80, +0x14,0x40,0x26,0x40,0x49,0x20,0x10,0x10,0x00,0x00, +/* ̮ */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x7B,0x20,0x12,0xA0,0x12,0x20,0x17,0xF0,0x12,0x20, +0x1A,0x20,0x62,0x20,0x04,0x20,0x08,0x60,0x00,0x00, +/* ̯ */ +0x20,0x50,0x2E,0x40,0x22,0xF0,0x72,0xA0,0x2B,0xA0,0x2A,0xF0,0x34,0xA0,0x64,0xA0, +0x2A,0xF0,0x2A,0xA0,0x32,0xA0,0x60,0xF0,0x00,0x00, +/* ̰ */ +0x02,0x00,0x05,0x00,0x18,0xC0,0x62,0x30,0x1F,0xC0,0x00,0x80,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* ̱ */ +0x01,0x00,0x3F,0xF0,0x20,0xC0,0x60,0xA0,0x3D,0xF0,0x27,0x40,0x35,0xF0,0x69,0x40, +0x29,0xF0,0x35,0x40,0x25,0xF0,0x41,0x00,0x00,0x00, +/* ̲ */ +0x00,0x50,0x4E,0x40,0x22,0xF0,0x02,0xA0,0x0B,0xA0,0x4A,0xF0,0x24,0xA0,0x04,0xA0, +0x0A,0xF0,0x2A,0xA0,0x52,0xA0,0x00,0xF0,0x00,0x00, +/* ̳ */ +0x10,0x00,0x13,0xE0,0x10,0x00,0x10,0x00,0x78,0x00,0x17,0xF0,0x10,0x80,0x11,0x00, +0x11,0x00,0x1A,0x20,0x67,0xF0,0x00,0x10,0x00,0x00, +/* ̴ */ +0x10,0x80,0x17,0xF0,0x10,0x00,0x7F,0xF0,0x15,0x50,0x35,0xD0,0x3C,0x10,0x57,0xF0, +0x12,0x20,0x13,0xE0,0x12,0x20,0x17,0xF0,0x00,0x00, +/* ̵ */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x54,0x90,0x34,0xA0,0x19,0x40,0x12,0x20,0x30,0x90, +0x54,0xA0,0x14,0x80,0x29,0x40,0x46,0x30,0x00,0x00, +/* ̶ */ +0x4F,0xE0,0x22,0x80,0x1F,0xF0,0x12,0x90,0x5F,0xF0,0x28,0x20,0x0F,0xE0,0x08,0x20, +0x0F,0xE0,0x21,0x00,0x5F,0xF0,0x01,0x00,0x00,0x00, +/* ̷ */ +0x27,0xF0,0x11,0x40,0x07,0xF0,0x05,0x50,0x77,0xF0,0x12,0x20,0x13,0xE0,0x12,0x20, +0x13,0xE0,0x18,0x80,0x17,0xF0,0x00,0x80,0x00,0x00, +/* ̸ */ +0x20,0x80,0x12,0x90,0x02,0xA0,0x04,0x80,0x71,0x60,0x16,0x10,0x10,0x80,0x12,0x90, +0x14,0xA0,0x19,0x40,0x12,0x20,0x0C,0x10,0x00,0x00, +/* ̹ */ +0x20,0x00,0x27,0xE0,0x24,0x20,0x24,0x20,0x77,0xE0,0x24,0x20,0x24,0x20,0x24,0x20, +0x27,0xE0,0x30,0x00,0x60,0x00,0x0F,0xF0,0x00,0x00, +/* ̺ */ +0x08,0x90,0x72,0xA0,0x14,0x80,0x19,0x40,0x72,0x20,0x10,0x80,0x12,0xA0,0x1A,0xC0, +0x74,0x80,0x11,0x40,0x12,0x30,0x0F,0xF0,0x00,0x00, +/* ̻ */ +0x20,0x00,0x13,0xE0,0x7A,0x20,0x0A,0x20,0x13,0xE0,0x1A,0x20,0x32,0x20,0x5A,0x20, +0x13,0xE0,0x10,0x00,0x10,0x00,0x17,0xF0,0x00,0x00, +/* ̼ */ +0x00,0x80,0x7C,0x90,0x17,0xF0,0x11,0x00,0x27,0xF0,0x39,0x00,0x69,0x40,0x2A,0x50, +0x2A,0xE0,0x3D,0x40,0x24,0xA0,0x09,0x10,0x00,0x00, +/* ̽ */ +0x10,0x00,0x17,0xF0,0x14,0x10,0x79,0x40,0x12,0x20,0x10,0x80,0x17,0xF0,0x18,0x80, +0x71,0xC0,0x12,0xA0,0x14,0x90,0x30,0x80,0x00,0x00, +/* ̾ */ +0x00,0x00,0x77,0xF0,0x52,0x10,0x52,0x10,0x52,0x10,0x52,0x20,0x51,0x20,0x51,0x40, +0x70,0x80,0x51,0x40,0x02,0x20,0x0C,0x10,0x00,0x00, +/* ̿ */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x10,0x00,0x7F,0xF0,0x11,0x00,0x15,0x20,0x15,0x40, +0x29,0x00,0x22,0x80,0x24,0x40,0x48,0x30,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xE0,0x20,0x40,0x01,0x80,0x06,0x00,0x4F,0xF0,0x22,0x50,0x02,0x50, +0x04,0x90,0x24,0x90,0x49,0x10,0x02,0x60,0x00,0x00, +/* */ +0x20,0x80,0x2F,0xF0,0x28,0x80,0x7B,0xE0,0x28,0xA0,0x2F,0xF0,0x28,0xA0,0x2B,0xE0, +0x38,0x80,0x6B,0xE0,0x0A,0x20,0x13,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x2F,0xF0,0x28,0x80,0x7B,0xE0,0x28,0xA0,0x2F,0xF0,0x38,0xA0,0x6B,0xE0, +0x28,0x80,0x2B,0xE0,0x2A,0x20,0x73,0xE0,0x00,0x00, +/* */ +0x22,0x20,0x12,0x40,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40,0x10,0x40,0x1F,0xC0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x12,0x40,0x0A,0x80,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x02,0x00, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x04,0x90,0x3A,0xA0,0x2F,0xF0,0x2C,0x10,0x3B,0xE0,0x2A,0x20,0x2A,0x20,0x3B,0xE0, +0x28,0x80,0x2B,0xE0,0x28,0x80,0x5F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x21,0x00,0x2F,0xE0,0x21,0x20,0x3F,0xF0,0x21,0x20,0x2F,0xE0, +0x21,0x00,0x2F,0xE0,0x28,0x20,0x4F,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x54,0x80,0x3D,0xE0,0x14,0xA0,0x7F,0xF0,0x14,0xA0,0x3D,0xE0, +0x54,0x80,0x15,0xE0,0x15,0x20,0x19,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x0C,0x90,0x12,0xA0,0x10,0x80,0x37,0xF0,0x54,0x10,0x15,0xD0,0x15,0x50, +0x15,0x50,0x15,0xD0,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x10,0x80,0x3A,0x90,0x29,0xA0,0x38,0x80,0x2B,0xF0,0x3A,0x10,0x2A,0xF0,0x7A,0xB0, +0x1A,0xB0,0x2A,0xF0,0x4A,0x10,0x1A,0x30,0x00,0x00, +/* */ +0x00,0x80,0x24,0x90,0x12,0xA0,0x00,0x80,0x47,0xF0,0x24,0x10,0x05,0xD0,0x05,0x50, +0x15,0x50,0x25,0xD0,0x44,0x10,0x04,0x30,0x00,0x00, +/* */ +0x14,0x90,0x12,0xA0,0x78,0x80,0x17,0xF0,0x14,0x10,0x7D,0xD0,0x15,0x50,0x55,0xD0, +0x5C,0x10,0x54,0x30,0x70,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x27,0xE0,0x10,0xC0,0x03,0x00,0x47,0xF0,0x21,0x50,0x02,0x50,0x2C,0x90,0x40,0x30, +0x12,0x20,0x22,0x40,0x0D,0x80,0x70,0x70,0x00,0x00, +/* */ +0x24,0x00,0x27,0xF0,0x2A,0x10,0x73,0xD0,0x25,0x10,0x21,0x10,0x37,0xD0,0x61,0x10, +0x25,0x50,0x27,0xD0,0x20,0x10,0x60,0x60,0x00,0x00, +/* */ +0x01,0x00,0x4F,0xF0,0x21,0x00,0x07,0xE0,0x02,0x00,0x4F,0xF0,0x22,0x20,0x07,0xF0, +0x05,0x20,0x28,0xA0,0x48,0x20,0x10,0x60,0x00,0x00, +/* */ +0x00,0xF0,0x5F,0x00,0x21,0x10,0x08,0xA0,0x05,0x40,0x4E,0x70,0x28,0x10,0x08,0x10, +0x0E,0x70,0x28,0x10,0x48,0x10,0x0F,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x21,0xE0,0x42,0x20,0x55,0x40,0x60,0x80,0x27,0x70,0x40,0x80,0x77,0xF0, +0x00,0x80,0x12,0xA0,0x64,0x90,0x01,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x28,0x80,0x3F,0xF0,0x50,0x10,0x1F,0x90,0x24,0x10,0x7F,0xD0, +0x04,0x10,0x24,0x90,0x3F,0x90,0x00,0x60,0x00,0x00, +/* */ +0x11,0x40,0x11,0x40,0x15,0x50,0x7B,0x60,0x11,0x40,0x31,0x40,0x3B,0x60,0x55,0x50, +0x11,0x40,0x11,0x50,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x42,0x80,0x22,0x80,0x0A,0xA0,0x06,0xC0,0x62,0x80,0x26,0xC0,0x2A,0xA0,0x22,0x80, +0x24,0x90,0x28,0x70,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x47,0xF0,0x2A,0x10,0x13,0xD0,0x05,0x10,0x41,0x10,0x2F,0xD0,0x01,0x10, +0x15,0x50,0x27,0xD0,0x40,0x10,0x00,0x60,0x00,0x00, +/* */ +0x04,0x00,0x77,0xF0,0x5A,0x10,0x53,0xD0,0x65,0x10,0x61,0x10,0x5F,0xD0,0x51,0x10, +0x55,0x50,0x67,0xD0,0x40,0x10,0x40,0x60,0x00,0x00, +/* */ +0x20,0x20,0x10,0x20,0x00,0x20,0x07,0xF0,0x70,0x20,0x10,0x20,0x12,0x20,0x11,0x20, +0x11,0x20,0x14,0x20,0x18,0x20,0x10,0xE0,0x00,0x00, +/* */ +0x04,0x00,0x7F,0xF0,0x08,0x80,0x1F,0xC0,0x70,0x30,0x1F,0x80,0x10,0x00,0x1F,0x80, +0x10,0x00,0x7F,0xF0,0x10,0x40,0x3F,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x53,0xE0,0x78,0x80,0x57,0xF0,0x10,0x40,0x1B,0xF0,0x70,0x40, +0x12,0x40,0x11,0x40,0x10,0x40,0x11,0xC0,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x3A,0xA0,0x28,0x80,0x2B,0xE0,0x39,0x00,0x2F,0xF0, +0x3A,0x20,0x2C,0x90,0x2A,0xA0,0x5D,0x90,0x00,0x00, +/* */ +0x3A,0xA0,0x28,0x80,0x2B,0xE0,0x39,0x00,0x2F,0xF0,0x2A,0x20,0x3F,0xD0,0x2A,0x40, +0x2B,0xF0,0x28,0x10,0x2F,0xD0,0x58,0x30,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x12,0x00,0x53,0xE0,0x34,0x20,0x1A,0x40,0x11,0x80,0x32,0x40, +0x5D,0xB0,0x10,0x40,0x23,0x00,0x40,0xC0,0x00,0x00, +/* */ +0x12,0x40,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x12,0x40,0x3F,0xE0,0x40,0x10,0x3F,0xE0, +0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x13,0xE0,0x78,0xA0,0x13,0xE0,0x32,0x80,0x3B,0xF0,0x50,0x90, +0x11,0x90,0x12,0xB0,0x14,0x80,0x10,0x80,0x00,0x00, +/* */ +0x3E,0x10,0x22,0x10,0x3E,0x50,0x22,0x50,0x3E,0x50,0x10,0x50,0x3F,0x50,0x55,0x50, +0x25,0x50,0x49,0x10,0x11,0x10,0x26,0x30,0x00,0x00, +/* */ +0x7B,0xE0,0x4A,0x20,0x4B,0xE0,0x7A,0x20,0x13,0xE0,0x11,0x00,0x5B,0xF0,0x55,0x50, +0x52,0x50,0x5C,0x90,0x61,0x10,0x02,0x60,0x00,0x00, +/* */ +0x22,0x20,0x21,0x40,0x3B,0xE0,0x40,0xA0,0x7B,0xE0,0x22,0x80,0x23,0xF0,0x78,0x90, +0x21,0x90,0x22,0xB0,0x34,0x80,0x20,0x80,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x7E,0x20,0x13,0xE0,0x10,0x00,0x1B,0xF0,0x70,0x80, +0x12,0xE0,0x12,0x80,0x12,0x80,0x35,0xF0,0x00,0x00, +/* */ +0x3D,0xF0,0x24,0x40,0x3C,0x80,0x25,0xF0,0x3D,0x10,0x01,0x50,0x7F,0x50,0x09,0x50, +0x2C,0xA0,0x29,0x10,0x28,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x78,0x80,0x4F,0xF0,0x4A,0x20,0x79,0x40,0x17,0xF0,0x14,0x90,0x5B,0xE0,0x52,0xA0, +0x52,0xA0,0x5A,0xE0,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x52,0x20,0x51,0x40,0x57,0xF0,0x54,0x10,0x50,0x80,0x57,0xF0, +0x74,0x90,0x54,0x90,0x04,0xB0,0x00,0x80,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x21,0x00,0x2F,0xE0,0x61,0x00,0x23,0x80,0x25,0x40,0x29,0x20, +0x31,0x10,0x27,0xC0,0x21,0x00,0x21,0x00,0x00,0x00, +/* */ +0x08,0x80,0x3D,0xE0,0x08,0x80,0x7F,0xF0,0x15,0x40,0x22,0x20,0x5F,0xD0,0x10,0x40, +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x00,0x00, +/* */ +0x00,0x80,0x07,0xF0,0x70,0x80,0x5F,0xF0,0x5A,0xB0,0x53,0xE0,0x52,0xA0,0x5F,0xF0, +0x70,0x90,0x54,0xE0,0x04,0x80,0x0B,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x5A,0x20,0x53,0xE0,0x51,0x00,0x53,0xF0,0x15,0x50, +0x12,0x50,0x14,0x90,0x11,0x10,0x12,0x60,0x00,0x00, +/* */ +0x04,0x40,0x42,0x80,0x2F,0xE0,0x01,0x20,0x0F,0xE0,0x49,0x00,0x2F,0xF0,0x03,0x10, +0x05,0x10,0x29,0x60,0x51,0x00,0x01,0x00,0x00,0x00, +/* */ +0x22,0x10,0x14,0x10,0x7E,0x50,0x0A,0x50,0x7E,0x50,0x48,0x50,0x7F,0x50,0x09,0x50, +0x19,0x50,0x2B,0x10,0x48,0x10,0x08,0x30,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x20,0x10,0x3F,0xF0,0x21,0x20,0x29,0x20,0x3F,0xF0,0x29,0x20, +0x29,0x20,0x29,0xE0,0x28,0x00,0x4F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x05,0x00, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x07,0xE0,0x41,0x00,0x21,0x00,0x0F,0xF0,0x02,0x40,0x44,0x20,0x29,0x10,0x01,0x00, +0x11,0xA0,0x25,0x50,0x49,0x50,0x03,0x00,0x00,0x00, +/* */ +0x21,0x00,0x2F,0xF0,0x21,0x00,0x77,0xE0,0x24,0x20,0x27,0xE0,0x24,0x20,0x27,0xE0, +0x34,0x20,0x6F,0xF0,0x02,0x40,0x04,0x20,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0,0x22,0x20,0x22,0x20, +0x22,0x20,0x22,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x0D,0x20,0x71,0x20,0x13,0xF0,0x11,0x20,0x7D,0x20,0x11,0x20,0x11,0xE0,0x7D,0x20, +0x45,0x20,0x45,0x20,0x7D,0xE0,0x45,0x20,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x10,0x80,0x58,0x80,0x57,0xF0,0x50,0x80,0x50,0x80,0x13,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x17,0xE0,0x61,0x00,0x21,0x00,0x2F,0xF0,0x72,0x40,0x24,0x20,0x29,0x10,0x71,0x00, +0x51,0xA0,0x55,0x50,0x79,0x50,0x53,0x00,0x00,0x00, +/* */ +0x02,0x80,0x3A,0x80,0x2F,0xE0,0x2A,0xA0,0x3A,0xA0,0x2F,0xE0,0x2A,0xA0,0x3A,0xA0, +0x2F,0xF0,0x28,0x00,0x29,0x40,0x5A,0x20,0x00,0x00, +/* */ +0x11,0x40,0x11,0x40,0x15,0x50,0x7B,0x60,0x11,0x40,0x11,0x40,0x1B,0x60,0x75,0x50, +0x11,0x40,0x11,0x50,0x12,0x50,0x34,0x30,0x00,0x00, +/* */ +0x08,0x00,0x1F,0xC0,0x28,0x80,0x07,0x00,0x18,0xC0,0x62,0x30,0x02,0x00,0x3F,0xE0, +0x02,0x00,0x12,0x40,0x22,0x20,0x46,0x10,0x00,0x00, +/* */ +0x4F,0xE0,0x22,0x20,0x02,0x20,0x02,0x20,0x64,0xC0,0x28,0x00,0x27,0xE0,0x24,0x20, +0x24,0x20,0x27,0xE0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x01,0x40,0x79,0x40,0x4D,0x50,0x4B,0x60,0x79,0x40,0x49,0x40,0x4B,0x60,0x7D,0x50, +0x49,0x40,0x49,0x50,0x7A,0x50,0x44,0x30,0x00,0x00, +/* */ +0x79,0x40,0x49,0x40,0x4D,0x50,0x7B,0x60,0x11,0x40,0x11,0x40,0x5B,0x60,0x55,0x50, +0x51,0x40,0x59,0x50,0x62,0x50,0x04,0x30,0x00,0x00, +/* */ +0x00,0x40,0x7C,0x40,0x44,0x40,0x54,0x70,0x54,0x40,0x54,0x40,0x55,0xF0,0x55,0x10, +0x55,0x10,0x11,0x10,0x29,0xF0,0x45,0x10,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x3A,0x80,0x43,0xE0,0x74,0x80,0x20,0x80,0x27,0xF0,0x78,0x80, +0x21,0x40,0x29,0x40,0x32,0x20,0x24,0x10,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x7C,0x40,0x54,0x70,0x54,0x40,0x54,0x40,0x55,0xF0,0x55,0x10, +0x5D,0x10,0x11,0x10,0x11,0xF0,0x11,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x20,0x00,0x20,0x00,0x2F,0xF0,0x20,0x80,0x20,0x80,0x20,0x80, +0x20,0x80,0x20,0x80,0x20,0x80,0x43,0x80,0x00,0x00, +/* */ +0x00,0x60,0x7B,0x80,0x4A,0x00,0x4A,0x00,0x4B,0xF0,0x4A,0x40,0x4A,0x40,0x4A,0x40, +0x7A,0x40,0x4A,0x40,0x02,0x40,0x04,0x40,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x14,0x40,0x58,0x80,0x51,0x40,0x52,0x20,0x54,0x10,0x13,0xE0, +0x10,0x80,0x28,0x80,0x28,0x80,0x47,0xF0,0x00,0x00, +/* ͡ */ +0x00,0x00,0x4F,0xF0,0x20,0x80,0x00,0x80,0x00,0x80,0x40,0x80,0x20,0x80,0x00,0x80, +0x10,0x80,0x20,0x80,0x40,0x80,0x03,0x80,0x00,0x00, +/* ͢ */ +0x00,0x60,0x7B,0x80,0x08,0x80,0x10,0x80,0x23,0xE0,0x38,0x80,0x08,0x80,0x08,0x80, +0x2F,0xF0,0x10,0x00,0x28,0x00,0x47,0xF0,0x00,0x00, +/* ͣ */ +0x08,0x80,0x0F,0xF0,0x10,0x00,0x13,0xE0,0x32,0x20,0x53,0xE0,0x10,0x00,0x17,0xF0, +0x14,0x10,0x13,0xE0,0x10,0x80,0x11,0x80,0x00,0x00, +/* ͤ */ +0x02,0x00,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x7F,0xF0, +0x40,0x10,0x3F,0xE0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* ͥ */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x2C,0x30,0x25,0xC0,0x24,0x40,0x29,0xF0,0x2C,0x40, +0x24,0x40,0x35,0xF0,0x28,0x00,0x57,0xF0,0x00,0x00, +/* ͦ */ +0x20,0x20,0x26,0xC0,0x22,0x40,0x72,0x40,0x24,0x40,0x24,0xE0,0x36,0x40,0x62,0x40, +0x22,0x40,0x2A,0xE0,0x24,0x00,0x6B,0xF0,0x00,0x00, +/* ͧ */ +0x10,0x10,0x3B,0x60,0x29,0x20,0x39,0x20,0x2A,0x20,0x7A,0x70,0x2B,0x20,0x39,0x20, +0x29,0x20,0x2D,0x70,0x2A,0x00,0x5D,0xF0,0x00,0x00, +/* ͨ */ +0x4F,0xC0,0x22,0x40,0x01,0x80,0x0F,0xE0,0x69,0x20,0x2F,0xE0,0x29,0x20,0x2F,0xE0, +0x29,0x20,0x29,0x60,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* ͩ */ +0x10,0x00,0x17,0xF0,0x14,0x10,0x7D,0xD0,0x14,0x10,0x35,0xD0,0x3D,0x50,0x55,0x50, +0x15,0xD0,0x14,0x10,0x14,0x10,0x14,0x30,0x00,0x00, +/* ͪ */ +0x00,0x00,0x7D,0xF0,0x11,0x10,0x7D,0xD0,0x55,0x10,0x55,0xD0,0x6D,0x50,0x45,0x50, +0x7D,0xD0,0x45,0x10,0x7D,0x10,0x45,0x30,0x00,0x00, +/* ͫ */ +0x00,0x80,0x7B,0xE0,0x49,0x40,0x4F,0xF0,0x7A,0xA0,0x4B,0xE0,0x4A,0xA0,0x7B,0xE0, +0x48,0x80,0x4B,0xE0,0x78,0x80,0x47,0xF0,0x00,0x00, +/* ͬ */ +0x00,0x00,0x3F,0xF0,0x20,0x10,0x2F,0xD0,0x20,0x10,0x2F,0xD0,0x28,0x50,0x28,0x50, +0x2F,0xD0,0x20,0x10,0x20,0x10,0x20,0x70,0x00,0x00, +/* ͭ */ +0x20,0x00,0x37,0xF0,0x44,0x10,0x05,0xD0,0x74,0x10,0x25,0xD0,0x25,0x50,0x75,0x50, +0x25,0xD0,0x24,0x10,0x34,0x10,0x24,0x30,0x00,0x00, +/* ͮ */ +0x00,0x20,0x3E,0x20,0x22,0x40,0x32,0x90,0x2A,0x10,0x22,0x20,0x7F,0x40,0x22,0x80, +0x22,0x10,0x22,0x20,0x22,0x40,0x47,0x80,0x00,0x00, +/* ͯ */ +0x02,0x00,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* Ͱ */ +0x17,0xE0,0x10,0x20,0x11,0x40,0x78,0x80,0x17,0xF0,0x34,0x90,0x3F,0xF0,0x54,0x90, +0x17,0xF0,0x14,0x90,0x14,0x90,0x14,0x30,0x00,0x00, +/* ͱ */ +0x17,0xE0,0x10,0x20,0x11,0x40,0x78,0x80,0x17,0xF0,0x14,0x90,0x1F,0xF0,0x74,0x90, +0x17,0xF0,0x14,0x90,0x14,0x90,0x34,0x30,0x00,0x00, +/* Ͳ */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x3F,0xE0,0x20,0x20,0x2F,0xA0,0x20,0x20,0x2F,0xA0, +0x28,0xA0,0x2F,0xA0,0x20,0x20,0x20,0xE0,0x00,0x00, +/* ͳ */ +0x10,0x80,0x10,0x40,0x23,0xF0,0x48,0x80,0x71,0x20,0x12,0x10,0x23,0xF0,0x79,0x50, +0x01,0x40,0x19,0x40,0x62,0x50,0x04,0x30,0x00,0x00, +/* ʹ */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x57,0xE0,0x31,0x40,0x17,0xF0,0x14,0x90,0x37,0xF0, +0x54,0x90,0x17,0xF0,0x24,0x90,0x44,0x30,0x00,0x00, +/* ͵ */ +0x11,0x00,0x12,0x80,0x24,0x40,0x2B,0xB0,0x60,0x00,0x2F,0x10,0x29,0x50,0x2F,0x50, +0x29,0x50,0x2F,0x50,0x29,0x10,0x2B,0x30,0x00,0x00, +/* Ͷ */ +0x13,0xC0,0x12,0x40,0x12,0x40,0x7A,0x40,0x14,0x30,0x10,0x00,0x17,0xE0,0x1A,0x20, +0x71,0x40,0x10,0x80,0x11,0x40,0x36,0x30,0x00,0x00, +/* ͷ */ +0x01,0x00,0x09,0x00,0x05,0x00,0x21,0x00,0x11,0x00,0x01,0x00,0x7F,0xF0,0x02,0x00, +0x02,0x80,0x04,0x40,0x18,0x20,0x60,0x10,0x00,0x00, +/* ͸ */ +0x40,0x20,0x27,0xC0,0x01,0x00,0x0F,0xF0,0x65,0x40,0x29,0x20,0x27,0xC0,0x22,0x40, +0x22,0xE0,0x24,0x20,0x28,0xC0,0x5F,0xF0,0x00,0x00, +/* ͹ */ +0x0F,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x78,0xF0,0x40,0x10,0x40,0x10,0x40,0x10, +0x40,0x10,0x40,0x10,0x7F,0xF0,0x40,0x10,0x00,0x00, +/* ͺ */ +0x01,0xC0,0x1E,0x00,0x02,0x00,0x7F,0xF0,0x0A,0x80,0x12,0x40,0x60,0x30,0x0F,0x80, +0x08,0x80,0x08,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* ͻ */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x48,0x90,0x50,0x50,0x02,0x80,0x02,0x40,0x7F,0xF0, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* ͼ */ +0x7F,0xF0,0x44,0x10,0x4F,0x90,0x58,0x90,0x47,0x10,0x78,0xF0,0x46,0x10,0x41,0x10, +0x4C,0x10,0x43,0x10,0x7F,0xF0,0x40,0x10,0x00,0x00, +/* ͽ */ +0x08,0x80,0x10,0x80,0x23,0xE0,0x48,0x80,0x10,0x80,0x33,0xF0,0x50,0x80,0x12,0x80, +0x12,0xE0,0x12,0x80,0x15,0x80,0x18,0xF0,0x00,0x00, +/* ; */ +0x20,0x80,0x11,0x40,0x02,0x20,0x05,0xD0,0x70,0x80,0x17,0xF0,0x10,0x80,0x12,0xA0, +0x14,0x90,0x11,0x80,0x28,0x00,0x47,0xF0,0x00,0x00, +/* Ϳ */ +0x01,0x00,0x42,0x80,0x24,0x40,0x08,0x30,0x07,0xC0,0x41,0x00,0x2F,0xE0,0x01,0x00, +0x05,0x40,0x29,0x20,0x51,0x20,0x03,0x00,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x21,0x20,0x2F,0xA0,0x21,0x40,0x3F,0xF0,0x24,0x20, +0x2F,0xE0,0x34,0x20,0x27,0xE0,0x44,0x20,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x00,0x80,0x78,0x80,0x48,0x80,0x4B,0xE0,0x48,0x80,0x48,0x80,0x48,0x80, +0x78,0x80,0x48,0x80,0x00,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x0F,0x80,0x10,0x80,0x21,0x00,0x7F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x05,0x00,0x09,0x40,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x49,0x20,0x29,0x20,0x0F,0xE0,0x00,0x00,0x5F,0xF0,0x21,0x00,0x1F,0xF0, +0x12,0x90,0x32,0x90,0x52,0x90,0x10,0x30,0x00,0x00, +/* */ +0x7F,0xF0,0x41,0x10,0x41,0x10,0x5F,0xD0,0x43,0x10,0x45,0x10,0x49,0x10,0x51,0x10, +0x43,0x10,0x40,0x10,0x7F,0xF0,0x40,0x10,0x00,0x00, +/* */ +0x11,0x40,0x11,0x20,0x13,0xF0,0x7A,0x40,0x16,0x40,0x13,0xF0,0x1A,0x40,0x72,0x40, +0x13,0xF0,0x12,0x40,0x12,0x40,0x33,0xF0,0x00,0x00, +/* */ +0x0D,0xF0,0x70,0x40,0x10,0x80,0x7D,0xF0,0x11,0x10,0x39,0x50,0x55,0x50,0x11,0x50, +0x39,0x50,0x28,0x40,0x2C,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x38,0xF0,0x2C,0x90,0x2A,0xF0,0x3A,0x90,0x28,0xF0,0x2E,0xC0,0x3A,0xB0,0x2A,0xA0, +0x2A,0xD0,0x2A,0x90,0x2B,0x00,0x5C,0xF0,0x00,0x00, +/* */ +0x11,0x10,0x10,0xA0,0x10,0x00,0x7D,0xF0,0x55,0x10,0x55,0x10,0x55,0x10,0x7D,0xF0, +0x10,0xA0,0x14,0xA0,0x1C,0xA0,0x65,0x30,0x00,0x00, +/* */ +0x20,0xF0,0x14,0x90,0x7A,0xF0,0x0A,0x90,0x10,0xF0,0x1E,0xC0,0x32,0xB0,0x5A,0xA0, +0x12,0xD0,0x12,0x90,0x13,0x00,0x14,0xF0,0x00,0x00, +/* */ +0x27,0xE0,0x14,0x20,0x07,0xE0,0x04,0x20,0x77,0xE0,0x15,0x10,0x14,0xA0,0x15,0x40, +0x16,0x20,0x14,0x20,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x04,0x00,0x7F,0xF0,0x08,0x80,0x10,0x40,0x20,0x20,0x5F,0xD0, +0x10,0x40,0x10,0x40,0x1F,0xC0,0x10,0x40,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x02,0x00,0x02,0x10,0x02,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x3E,0xE0,0x22,0xB0,0x3F,0x00,0x2A,0xE0,0x3F,0xA0,0x2A,0x40,0x51,0xB0,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x13,0xF0,0x7C,0x80,0x12,0xB0,0x12,0xD0,0x1F,0x90,0x72,0x90, +0x12,0xB0,0x12,0x80,0x12,0x10,0x31,0xF0,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x10,0x80,0x78,0x80,0x10,0x80,0x10,0xF0,0x1B,0x80,0x70,0x80, +0x10,0x80,0x10,0x90,0x10,0x90,0x30,0x70,0x00,0x00, +/* */ +0x02,0x20,0x39,0x40,0x28,0x00,0x2B,0xE0,0x3A,0x20,0x2A,0x20,0x2B,0xE0,0x39,0x40, +0x29,0x40,0x29,0x40,0x2A,0x50,0x5C,0x30,0x00,0x00, +/* */ +0x20,0x80,0x78,0x40,0x4B,0xF0,0x6A,0x10,0x58,0x00,0x41,0x10,0x7D,0x20,0x05,0x40, +0x15,0x80,0x65,0x10,0x05,0x10,0x18,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x4B,0xF0,0x4A,0x10,0x50,0x00,0x51,0x10,0x49,0x20,0x49,0x40, +0x49,0x80,0x71,0x10,0x41,0x10,0x40,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x08,0x80,0x2B,0xF0,0x28,0x80,0x28,0x80,0x3C,0x80,0x05,0x40, +0x15,0x40,0x65,0x40,0x05,0x20,0x1A,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x0B,0xF0,0x2A,0x10,0x28,0x00,0x29,0x10,0x3D,0x20,0x05,0x40, +0x15,0x80,0x65,0x10,0x05,0x10,0x18,0xF0,0x00,0x00, +/* */ +0x20,0x40,0x2E,0x40,0x2B,0xF0,0x7A,0x80,0x2C,0xF0,0x2D,0x90,0x7A,0xF0,0x6A,0x90, +0x2A,0xF0,0x2C,0x90,0x28,0x90,0x28,0xB0,0x00,0x00, +/* */ +0x01,0xF0,0x7E,0x00,0x00,0x20,0x24,0x20,0x12,0x40,0x00,0x00,0x04,0x00,0x7F,0xF0, +0x08,0x40,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x10,0x80,0x7C,0x80,0x11,0x00,0x11,0xF0,0x1B,0x10,0x75,0x10, +0x11,0x10,0x11,0x10,0x11,0xF0,0x31,0x10,0x00,0x00, +/* */ +0x00,0x60,0x73,0x80,0x50,0x80,0x57,0xF0,0x52,0xA0,0x52,0xA0,0x57,0xF0,0x52,0xA0, +0x72,0xA0,0x57,0xF0,0x00,0x80,0x03,0xE0,0x00,0x00, +/* */ +0x21,0x00,0x20,0x80,0x27,0xF0,0x75,0x50,0x22,0x20,0x20,0x00,0x37,0xE0,0x60,0x40, +0x21,0x80,0x22,0x00,0x24,0x10,0x63,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x00,0x80,0x7B,0xE0,0x48,0x80,0x48,0x80,0x4F,0xF0,0x48,0x00,0x48,0x80, +0x7B,0xE0,0x48,0x80,0x00,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x11,0xF0,0x7C,0x40,0x54,0x40,0x55,0xF0,0x54,0x00,0x7C,0x40, +0x11,0xF0,0x14,0x40,0x1C,0x40,0x67,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x41,0x00,0x2F,0xE0,0x01,0x00,0x01,0x00,0x5F,0xF0,0x20,0x00,0x01,0x00, +0x1F,0xE0,0x21,0x00,0x41,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x13,0xE0,0x78,0x80,0x28,0x80,0x2F,0xF0,0x28,0x00,0x48,0x80, +0x2B,0xE0,0x10,0x80,0x28,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x08,0x00,0x08,0x00,0x0F,0x80,0x10,0x80,0x14,0x80,0x12,0x80, +0x22,0x80,0x20,0x90,0x2C,0x90,0x30,0x70,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x7B,0xF0,0x08,0x80,0x10,0x80,0x1B,0xE0,0x30,0x80,0x59,0xC0, +0x12,0xA0,0x14,0x90,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x7F,0xF0,0x02,0x00,0x06,0xC0,0x1A,0x20,0x62,0x10,0x00,0x00,0x7F,0xF0,0x02,0x00, +0x13,0xE0,0x12,0x00,0x12,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0x80,0x1C,0x80,0x24,0xC0,0x24,0xA0,0x54,0x90,0x08,0x90, +0x08,0x80,0x10,0x80,0x20,0x80,0x40,0x80,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x04,0x10,0x72,0x00,0x53,0x70,0x55,0x50,0x75,0x50,0x0B,0x70, +0x51,0x40,0x22,0x50,0x1A,0x50,0x64,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x48,0x90,0x3F,0xE0,0x00,0x20,0x3F,0xE0, +0x20,0x00,0x3F,0xF0,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x00,0x80,0x4F,0xF0,0x22,0x40,0x06,0x60,0x0A,0x50,0x47,0xE0,0x20,0x20,0x07,0xE0, +0x14,0x00,0x27,0xF0,0x40,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x10,0x00,0x10,0x00,0x17,0xF0,0x79,0x40,0x11,0x40,0x11,0x40, +0x11,0x40,0x1A,0x50,0x62,0x50,0x04,0x30,0x00,0x00, +/* */ +0x00,0x00,0x39,0xF0,0x00,0x40,0x00,0x80,0x7D,0xF0,0x29,0x10,0x29,0x50,0x29,0x50, +0x29,0x50,0x2C,0x40,0x28,0xA0,0x41,0x10,0x00,0x00, +/* */ +0x08,0x00,0x08,0x00,0x08,0x00,0x7F,0x80,0x08,0x80,0x28,0x80,0x18,0x80,0x08,0x80, +0x14,0x80,0x12,0x90,0x20,0x90,0x40,0x70,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x5C,0x10,0x50,0x00,0x53,0xE0,0x50,0x00,0x17,0xF0, +0x11,0x40,0x29,0x40,0x2A,0x50,0x44,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x00,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x7F,0xF0, +0x08,0x80,0x08,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x24,0x10,0x22,0x00,0x43,0x70,0x75,0x50,0x55,0x50,0x5B,0x70, +0x51,0x40,0x72,0x50,0x52,0x50,0x04,0x30,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x12,0x20,0x7C,0x40,0x17,0xF0,0x14,0x90,0x1C,0x90,0x77,0xF0, +0x11,0x40,0x11,0x40,0x12,0x50,0x34,0x30,0x00,0x00, +/* */ +0x01,0x00,0x71,0xE0,0x52,0x20,0x54,0x40,0x57,0xF0,0x74,0x90,0x54,0x90,0x57,0xF0, +0x51,0x40,0x71,0x40,0x52,0x50,0x04,0x30,0x00,0x00, +/* */ +0x11,0x00,0x20,0x80,0x77,0xF0,0x54,0x10,0x50,0x00,0x53,0xE0,0x70,0x00,0x57,0xF0, +0x51,0x40,0x51,0x40,0x72,0x50,0x54,0x30,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x10,0x5A,0x00,0x53,0x70,0x55,0x50,0x55,0x50,0x1B,0x70, +0x11,0x40,0x12,0x50,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x10,0x00,0x1D,0xE0,0x25,0x20,0x25,0x20,0x55,0x20, +0x09,0x60,0x09,0x00,0x11,0x10,0x20,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x10,0x7A,0x00,0x2B,0x70,0x2D,0x50,0x2D,0x50,0x4B,0x70, +0x29,0x40,0x12,0x50,0x2A,0x50,0x44,0x30,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x08,0x00,0x08,0x00,0x08,0x00,0x0F,0xE0,0x08,0x20,0x08,0x20, +0x10,0x20,0x10,0x20,0x20,0x20,0x41,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x54,0x10,0x52,0x00,0x73,0x70,0x55,0x50,0x55,0x50,0x7B,0x70, +0x51,0x40,0x52,0x50,0x52,0x50,0x34,0x30,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xE0,0x21,0x00,0x01,0x00,0x01,0x00,0x41,0x00,0x2F,0xE0,0x01,0x00, +0x11,0x00,0x21,0x00,0x41,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x00,0x00,0x7F,0xF0,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00, +0x10,0x00,0x10,0x00,0x10,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x10,0x80,0x7C,0x80,0x10,0x80,0x30,0x80,0x3B,0xE0,0x54,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x40,0x10,0x40,0x10,0x62,0x30,0x55,0x50,0x48,0x90,0x48,0x90,0x55,0x50, +0x62,0x30,0x40,0x10,0x40,0x10,0x40,0x70,0x00,0x00, +/* */ +0x09,0x00,0x10,0x80,0x20,0x00,0x4B,0xF0,0x10,0x80,0x30,0x80,0x50,0x80,0x13,0xE0, +0x10,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x48,0x80,0x48,0x80,0x48,0x80,0x78,0x80,0x4B,0xE0,0x48,0x80, +0x48,0x80,0x78,0x80,0x40,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x11,0xF0,0x09,0x10,0x7D,0xF0,0x21,0x10,0x21,0xF0,0x3D,0x10,0x02,0x30,0x3F,0xE0, +0x02,0x00,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x7F,0xF0,0x10,0x00,0x10,0x00,0x1F,0xE0,0x00,0x00,0x02,0x00, +0x29,0x20,0x29,0x10,0x48,0x50,0x07,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x7F,0xF0,0x10,0x00,0x10,0x00,0x1F,0xE0,0x04,0x00,0x7F,0xF0, +0x08,0x40,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x00,0xA0,0x00,0x90,0x3F,0xF0,0x20,0x80,0x3E,0x90,0x28,0x90,0x3E,0xA0,0x2A,0xA0, +0x32,0x50,0x2C,0x50,0x32,0xB0,0x41,0x10,0x00,0x00, +/* Ρ */ +0x22,0x20,0x3F,0xE0,0x08,0x80,0x31,0x00,0x13,0xE0,0x7E,0xA0,0x3B,0xE0,0x56,0xA0, +0x7F,0xE0,0x24,0xA0,0x19,0x90,0x66,0x70,0x00,0x00, +/* ΢ */ +0x12,0x20,0x2A,0xA0,0x4A,0xB0,0x1F,0xD0,0x20,0x90,0x67,0x50,0x20,0x50,0x27,0x50, +0x25,0x20,0x25,0xA0,0x25,0x50,0x28,0x90,0x00,0x00, +/* Σ */ +0x08,0x00,0x0F,0xC0,0x10,0x40,0x3F,0xF0,0x50,0x00,0x17,0xE0,0x14,0x20,0x14,0x20, +0x14,0xC0,0x24,0x10,0x24,0x10,0x43,0xF0,0x00,0x00, +/* Τ */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x02,0x10, +0x02,0x10,0x02,0x10,0x02,0x60,0x02,0x00,0x00,0x00, +/* Υ */ +0x41,0x00,0x21,0x00,0x0F,0xF0,0x01,0x00,0x6F,0xE0,0x21,0x00,0x3F,0xF0,0x21,0x10, +0x21,0x10,0x21,0x60,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* Φ */ +0x11,0x00,0x11,0xE0,0x12,0x20,0x7C,0x40,0x13,0xF0,0x32,0x00,0x3A,0xF0,0x52,0x90, +0x12,0xB0,0x12,0x80,0x12,0x90,0x14,0x70,0x00,0x00, +/* Χ */ +0x7F,0xF0,0x40,0x10,0x42,0x10,0x5F,0xD0,0x42,0x10,0x4F,0x90,0x42,0x10,0x5F,0xD0, +0x42,0x50,0x42,0xD0,0x42,0x10,0x7F,0xF0,0x00,0x00, +/* Ψ */ +0x02,0x80,0x72,0x40,0x57,0xF0,0x54,0x80,0x5C,0x80,0x57,0xE0,0x54,0x80,0x54,0x80, +0x77,0xE0,0x54,0x80,0x04,0x80,0x07,0xF0,0x00,0x00, +/* Ω */ +0x11,0x40,0x11,0x20,0x1B,0xF0,0x52,0x40,0x56,0x40,0x5B,0xF0,0x52,0x40,0x12,0x40, +0x13,0xF0,0x12,0x40,0x12,0x40,0x13,0xF0,0x00,0x00, +/* Ϊ */ +0x01,0x00,0x11,0x00,0x09,0x00,0x3F,0xF0,0x02,0x10,0x02,0x10,0x05,0x10,0x04,0x90, +0x08,0x90,0x10,0x10,0x20,0x10,0x40,0xE0,0x00,0x00, +/* Ϋ */ +0x48,0xA0,0x28,0x80,0x11,0xF0,0x15,0x40,0x5B,0x40,0x29,0xF0,0x11,0x40,0x1D,0x40, +0x01,0xF0,0x25,0x40,0x59,0x40,0x01,0xF0,0x00,0x00, +/* ά */ +0x11,0x40,0x11,0x20,0x23,0xF0,0x4A,0x40,0x76,0x40,0x13,0xF0,0x22,0x40,0x7A,0x40, +0x03,0xF0,0x1A,0x40,0x62,0x40,0x03,0xF0,0x00,0x00, +/* έ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x00, +0x7F,0xF0,0x02,0x10,0x02,0x60,0x02,0x00,0x00,0x00, +/* ή */ +0x08,0x80,0x7F,0xF0,0x08,0xA0,0x3F,0xC0,0x02,0x00,0x7F,0xF0,0x12,0x40,0x24,0x20, +0x7F,0xF0,0x08,0x80,0x07,0x00,0x38,0xE0,0x00,0x00, +/* ί */ +0x00,0x60,0x3F,0x80,0x02,0x00,0x7F,0xF0,0x12,0x40,0x62,0x30,0x04,0x00,0x7F,0xF0, +0x08,0x40,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* ΰ */ +0x11,0x00,0x11,0x00,0x2F,0xF0,0x21,0x00,0x67,0xE0,0x21,0x00,0x2F,0xF0,0x21,0x10, +0x21,0x10,0x21,0x10,0x21,0x60,0x21,0x00,0x00,0x00, +/* α */ +0x08,0x80,0x0C,0x80,0x12,0x80,0x17,0xF0,0x30,0x90,0x51,0x10,0x11,0x90,0x11,0x50, +0x12,0x50,0x12,0x10,0x14,0x10,0x18,0xE0,0x00,0x00, +/* β */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x00,0x20,0xE0,0x2F,0x00,0x21,0xC0,0x2F,0x00, +0x21,0xE0,0x3F,0x00,0x21,0x10,0x40,0xF0,0x00,0x00, +/* γ */ +0x10,0x80,0x10,0x80,0x27,0xF0,0x48,0x80,0x73,0xE0,0x10,0x80,0x27,0xF0,0x70,0x90, +0x00,0x90,0x18,0xB0,0x60,0x80,0x00,0x80,0x00,0x00, +/* δ */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x07,0x00,0x0A,0x80, +0x12,0x40,0x62,0x30,0x02,0x00,0x02,0x00,0x00,0x00, +/* ε */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3E,0x20,0x22,0x20,0x3E,0xF0,0x20,0x20,0x3E,0xA0, +0x24,0x60,0x2E,0x20,0x55,0x20,0x0C,0x60,0x00,0x00, +/* ζ */ +0x00,0x80,0x78,0x80,0x4B,0xE0,0x48,0x80,0x48,0x80,0x4F,0xF0,0x48,0x80,0x49,0xC0, +0x7A,0xA0,0x4C,0x90,0x00,0x80,0x00,0x80,0x00,0x00, +/* η */ +0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x24,0x20, +0x22,0x40,0x21,0x80,0x2C,0xC0,0x30,0x30,0x00,0x00, +/* θ */ +0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x10,0x40,0x1F,0xC0,0x10,0x40, +0x1F,0xC0,0x10,0x40,0x10,0x40,0x10,0xC0,0x00,0x00, +/* ι */ +0x07,0xF0,0x74,0x90,0x57,0xF0,0x54,0x90,0x57,0xF0,0x50,0x00,0x5F,0xF0,0x54,0x80, +0x74,0x90,0x54,0x60,0x05,0x20,0x06,0x10,0x00,0x00, +/* κ */ +0x0C,0x80,0x71,0x00,0x13,0xE0,0x7E,0xA0,0x3B,0xE0,0x56,0xA0,0x13,0xE0,0x7D,0x40, +0x25,0xA0,0x6A,0xE0,0x1A,0x90,0x64,0x70,0x00,0x00, +/* λ */ +0x11,0x00,0x10,0x80,0x20,0x00,0x2F,0xF0,0x60,0x00,0x24,0x20,0x24,0x20,0x22,0x20, +0x22,0x40,0x22,0x40,0x20,0x80,0x2F,0xF0,0x00,0x00, +/* μ */ +0x5F,0xF0,0x31,0x10,0x1F,0xF0,0x11,0x10,0x5F,0xF0,0x28,0x20,0x0F,0xE0,0x08,0x20, +0x0F,0xE0,0x28,0x20,0x48,0x20,0x08,0x60,0x00,0x00, +/* ν */ +0x4F,0xF0,0x28,0x90,0x0F,0xF0,0x08,0x90,0x6F,0xF0,0x24,0x20,0x27,0xE0,0x24,0x20, +0x27,0xE0,0x24,0x20,0x34,0x20,0x24,0x60,0x00,0x00, +/* ξ */ +0x3F,0x20,0x21,0x20,0x3F,0x20,0x20,0xF0,0x2E,0x20,0x20,0x20,0x3F,0xA0,0x24,0x60, +0x2E,0x20,0x35,0x20,0x24,0x20,0x4C,0x60,0x00,0x00, +/* ο */ +0x3E,0x20,0x22,0xF0,0x3E,0x20,0x20,0xA0,0x3E,0x60,0x48,0x20,0x2A,0x20,0x59,0x60, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x05,0xC0, +0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x57,0xC0,0x34,0x40,0x17,0xC0,0x14,0x40,0x37,0xC0, +0x50,0x00,0x1F,0xE0,0x2A,0xA0,0x5F,0xF0,0x00,0x00, +/* */ +0x07,0xC0,0x44,0x40,0x27,0xC0,0x04,0x40,0x07,0xC0,0x40,0x00,0x2F,0xE0,0x0A,0xA0, +0x1A,0xA0,0x2A,0xA0,0x4A,0xA0,0x1F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x10,0x00,0x7F,0xF0,0x55,0x20,0x55,0x20,0x7D,0x20,0x11,0x20, +0x15,0x40,0x1C,0x80,0x65,0x40,0x02,0x30,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x10,0x40,0x10,0x40,0x08,0x80,0x08,0x80,0x05,0x00, +0x02,0x00,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x47,0xF0,0x20,0x10,0x00,0x10,0x5F,0xD0,0x48,0x90,0x4F,0x90,0x48,0x90,0x4F,0x90, +0x48,0xD0,0x5F,0x90,0x40,0x90,0x40,0x70,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x27,0xF0,0x4A,0x20,0x72,0x20,0x12,0x20,0x21,0x40,0x79,0x40, +0x00,0x80,0x19,0x40,0x62,0x20,0x04,0x10,0x00,0x00, +/* */ +0x02,0x00,0x72,0x00,0x53,0xF0,0x55,0x50,0x55,0x50,0x59,0x50,0x52,0x50,0x52,0x90, +0x74,0x90,0x59,0x10,0x02,0x10,0x04,0x60,0x00,0x00, +/* */ +0x0A,0x00,0x73,0xC0,0x14,0x40,0x13,0xE0,0x78,0x20,0x13,0xE0,0x38,0x20,0x37,0xE0, +0x51,0x00,0x14,0xA0,0x1A,0x50,0x13,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x07,0x00,0x1A,0xC0,0x64,0xB0,0x1F,0x00,0x08,0x40, +0x3F,0xE0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x20,0x00,0x13,0xF0,0x00,0x10,0x20,0x10,0x27,0x90,0x24,0x90,0x24,0x90,0x24,0x90, +0x27,0x90,0x20,0x10,0x20,0x10,0x20,0x70,0x00,0x00, +/* */ +0x01,0x20,0x72,0x10,0x54,0x80,0x51,0x20,0x53,0xF0,0x50,0x00,0x57,0x70,0x51,0x10, +0x75,0x50,0x53,0x30,0x05,0x50,0x03,0x30,0x00,0x00, +/* */ +0x08,0x80,0x10,0x40,0x64,0x30,0x08,0x80,0x1F,0xC0,0x00,0x00,0x3D,0xE0,0x04,0x20, +0x25,0x20,0x14,0xA0,0x25,0x20,0x0C,0x60,0x00,0x00, +/* */ +0x08,0x80,0x12,0x40,0x64,0x30,0x08,0x80,0x1F,0xC0,0x00,0x20,0x7F,0xF0,0x10,0x00, +0x1F,0x80,0x14,0x90,0x22,0x90,0x3C,0x70,0x00,0x00, +/* */ +0x14,0x20,0x12,0x20,0x10,0xF0,0x78,0x20,0x16,0x20,0x12,0xA0,0x1A,0x60,0x72,0x20, +0x12,0x20,0x12,0x60,0x15,0x00,0x38,0xF0,0x00,0x00, +/* */ +0x11,0xF0,0x11,0x10,0x11,0x10,0x7D,0xF0,0x54,0x40,0x55,0xF0,0x7D,0x50,0x11,0x50, +0x15,0xB0,0x1D,0x10,0x65,0x10,0x01,0x30,0x00,0x00, +/* */ +0x0F,0xE0,0x48,0x20,0x28,0x20,0x0F,0xE0,0x01,0x00,0x5F,0xF0,0x31,0x10,0x12,0x90, +0x14,0x50,0x30,0x10,0x50,0x10,0x10,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x50,0x50,0x20,0x20,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x02,0x00, +0x3F,0xE0,0x25,0x20,0x28,0xA0,0x20,0x60,0x00,0x00, +/* */ +0x0D,0x00,0x39,0x20,0x09,0x10,0x09,0x00,0x7F,0xF0,0x09,0x00,0x09,0x20,0x0D,0x40, +0x18,0x80,0x69,0x90,0x0A,0x50,0x18,0x30,0x00,0x00, +/* */ +0x10,0x80,0x7D,0x40,0x12,0x20,0x7C,0x50,0x45,0x40,0x7C,0x40,0x45,0x40,0x7C,0x70, +0x13,0xC0,0x7C,0x40,0x10,0x40,0x10,0x40,0x00,0x00, +/* */ +0x00,0x80,0x7E,0x80,0x48,0x80,0x48,0x80,0x7E,0xC0,0x42,0xA0,0x42,0x90,0x7E,0x90, +0x48,0x80,0x48,0x80,0x48,0x80,0x7E,0x80,0x00,0x00, +/* */ +0x27,0xF0,0x24,0x10,0x27,0xF0,0x74,0x00,0x25,0xF0,0x24,0x40,0x34,0x90,0x65,0xF0, +0x24,0x40,0x25,0xF0,0x24,0x40,0x6B,0xF0,0x00,0x00, +/* */ +0x40,0xE0,0x2F,0x00,0x01,0x00,0x01,0x00,0x41,0x00,0x2F,0xF0,0x02,0x80,0x02,0x80, +0x14,0x40,0x24,0x40,0x48,0x20,0x10,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x02,0x00,0x12,0x40,0x12,0x40,0x12,0x40,0x12,0x40,0x2A,0xA0, +0x47,0x10,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x73,0xE0,0x52,0x20,0x52,0x20,0x52,0x60,0x52,0x00,0x53,0xF0,0x50,0x10, +0x70,0x10,0x57,0xD0,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x21,0x00,0x23,0xE0,0x3A,0x20,0x42,0x20,0x7A,0x60,0x22,0x00,0x23,0xF0,0x78,0x10, +0x20,0x10,0x2F,0xD0,0x30,0x10,0x20,0x60,0x00,0x00, +/* */ +0x04,0x00,0x1F,0xC0,0x10,0x40,0x10,0x40,0x10,0xC0,0x10,0x00,0x1F,0xF0,0x00,0x10, +0x00,0x10,0x7F,0xD0,0x00,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xE0,0x00,0x00,0x00,0x00,0x5F,0xF0,0x22,0x00,0x04,0x00,0x07,0xE0, +0x10,0x20,0x20,0x20,0x40,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xE0,0x01,0x00,0x05,0x40,0x65,0x40,0x25,0x40,0x25,0x40,0x2B,0xA0, +0x31,0x10,0x21,0x00,0x31,0x00,0x2F,0xF0,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x22,0x00,0x24,0x40,0x2F,0xE0, +0x21,0x00,0x2F,0xE0,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x05,0x00,0x05,0x00, +0x09,0x00,0x11,0x10,0x21,0x10,0x40,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x09,0x00,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x17,0xF0,0x10,0x80,0x13,0xE0,0x79,0x20,0x11,0x20,0x37,0xF0,0x38,0x00,0x53,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x3F,0xE0,0x04,0x00,0x04,0x00,0x3F,0xC0,0x08,0x40,0x08,0x40,0x7F,0xF0,0x00,0x00, +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x10,0x40,0x1F,0xC0,0x00,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0, +0x02,0x00,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x1F,0xC0,0x12,0x40,0x12,0x40,0x12,0x40,0x7F,0xF0,0x24,0x40,0x24,0x40,0x24,0x40, +0x3F,0xE0,0x08,0x40,0x10,0x40,0x23,0x80,0x00,0x00, +/* */ +0x00,0x80,0x3E,0xA0,0x00,0x90,0x00,0x80,0x7F,0xF0,0x08,0x80,0x08,0x80,0x2E,0x80, +0x28,0x40,0x28,0x50,0x2E,0x30,0x70,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xE0,0x04,0x00,0x04,0x00,0x04,0x00,0x3F,0xC0,0x08,0x40,0x08,0x40, +0x08,0x40,0x10,0x40,0x10,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x2F,0xF0,0x21,0x00,0x27,0xE0,0x72,0x20,0x22,0x20,0x2F,0xF0,0x30,0x00,0x67,0xE0, +0x24,0x20,0x24,0x20,0x27,0xE0,0x64,0x20,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x1F,0xE0,0x22,0x00,0x42,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0, +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x10,0x00,0x3F,0xF0,0x55,0x40,0x3F,0xE0,0x15,0x40,0x7F,0xF0,0x10,0x40,0x3D,0xE0, +0x44,0x40,0x2A,0x40,0x13,0xF0,0x60,0x40,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x21,0x00,0x21,0x00,0x61,0x00,0x27,0xE0,0x21,0x20,0x21,0x20, +0x22,0x20,0x22,0x20,0x22,0x20,0x2F,0xF0,0x00,0x00, +/* */ +0x14,0x00,0x17,0xF0,0x28,0x00,0x37,0xE0,0x64,0x20,0x25,0x20,0x3F,0xF0,0x28,0x20, +0x29,0x20,0x2F,0xF0,0x20,0x20,0x20,0xC0,0x00,0x00, +/* */ +0x11,0x00,0x13,0xE0,0x12,0x20,0x7A,0x20,0x12,0x60,0x12,0x00,0x13,0xF0,0x10,0x10, +0x18,0x10,0x67,0xD0,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x01,0x40,0x01,0x20,0x01,0x00,0x3F,0xF0,0x21,0x00,0x21,0x20,0x21,0x20,0x21,0x40, +0x20,0x90,0x21,0x50,0x22,0x30,0x44,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x1F,0xC0,0x28,0x80,0x07,0x00,0x18,0xC0, +0x64,0x30,0x1F,0xC0,0x08,0x40,0x30,0xC0,0x00,0x00, +/* */ +0x0F,0xF0,0x71,0x00,0x57,0xE0,0x52,0x20,0x52,0x20,0x7F,0xF0,0x50,0x00,0x57,0xE0, +0x54,0x20,0x74,0x20,0x57,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x12,0x00,0x12,0x00,0x53,0xF0,0x7D,0x50,0x51,0x50,0x11,0x50,0x1A,0x50,0x72,0x90, +0x14,0x90,0x11,0x10,0x12,0x10,0x14,0x60,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x1F,0xF0,0x24,0x90,0x24,0x90,0x48,0x90,0x08,0x90,0x11,0x10, +0x21,0x10,0x42,0x10,0x04,0x10,0x08,0xE0,0x00,0x00, +/* */ +0x08,0x00,0x1F,0xC0,0x28,0x80,0x07,0x00,0x18,0xC0,0x64,0x30,0x04,0x00,0x3F,0xC0, +0x08,0x40,0x08,0x40,0x10,0x40,0x21,0x80,0x00,0x00, +/* */ +0x17,0xF0,0x10,0x80,0x13,0xE0,0x59,0x20,0x51,0x20,0x57,0xF0,0x50,0x00,0x13,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x47,0xC0,0x24,0x40,0x04,0x40,0x07,0xC0,0x60,0x00,0x2F,0xE0,0x21,0x00,0x3F,0xF0, +0x21,0x00,0x32,0x80,0x24,0x40,0x08,0x30,0x00,0x00, +/* */ +0x08,0x80,0x3F,0xE0,0x08,0x80,0x08,0x80,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40, +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x00,0x00, +/* */ +0x7E,0xF0,0x48,0x90,0x5C,0x90,0x54,0x90,0x54,0xF0,0x5C,0x80,0x48,0x90,0x48,0x90, +0x7E,0x70,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x10,0x70,0x13,0x80,0x12,0x00,0x7A,0x00,0x13,0xF0,0x32,0x40,0x3A,0x40,0x52,0x40, +0x12,0x40,0x14,0x40,0x14,0x40,0x18,0x40,0x00,0x00, +/* */ +0x7F,0xF0,0x05,0x00,0x05,0x00,0x3F,0xE0,0x25,0x20,0x25,0x20,0x25,0x20,0x28,0xE0, +0x30,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x11,0x40,0x11,0x40,0x27,0xF0,0x3D,0x50,0x65,0x50,0x25,0x70, +0x26,0x10,0x3C,0x10,0x27,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x10,0xF0,0x11,0x10,0x21,0x10,0x3E,0xA0,0x64,0xA0,0x24,0x40, +0x24,0x40,0x3C,0x80,0x25,0x00,0x02,0x00,0x00,0x00, +/* */ +0x02,0x10,0x72,0xE0,0x52,0x80,0x5F,0x80,0x52,0xF0,0x76,0xA0,0x57,0xA0,0x5A,0xA0, +0x52,0xA0,0x72,0xA0,0x53,0x20,0x02,0x20,0x00,0x00, +/* */ +0x01,0x00,0x0F,0xF0,0x71,0x00,0x57,0xE0,0x50,0x00,0x57,0xE0,0x54,0x20,0x57,0xE0, +0x72,0x40,0x5F,0xF0,0x04,0x20,0x07,0xE0,0x00,0x00, +/* */ +0x00,0x00,0x77,0xE0,0x52,0x20,0x52,0x20,0x52,0x40,0x52,0x70,0x52,0x10,0x53,0x10, +0x72,0xA0,0x54,0x40,0x04,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x3B,0xE0,0x42,0x20,0x7B,0xE0,0x21,0x00,0x23,0xF0,0x7D,0x50, +0x22,0x50,0x24,0x90,0x31,0x10,0x22,0x60,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x51,0x40,0x79,0x40,0x57,0xF0,0x15,0x50,0x1D,0x50,0x75,0x70, +0x16,0x10,0x14,0x10,0x17,0xF0,0x14,0x10,0x00,0x00, +/* ϡ */ +0x0A,0x20,0x71,0xC0,0x12,0x20,0x10,0x80,0x7B,0xF0,0x11,0x00,0x3A,0x80,0x37,0xF0, +0x52,0x90,0x12,0x90,0x12,0xB0,0x10,0x80,0x00,0x00, +/* Ϣ */ +0x04,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* ϣ */ +0x30,0x20,0x0C,0xC0,0x03,0x00,0x3C,0xC0,0x08,0x20,0x7F,0xF0,0x12,0x00,0x3F,0xE0, +0x52,0x20,0x12,0x20,0x12,0x60,0x02,0x00,0x00,0x00, +/* Ϥ */ +0x01,0xE0,0x3E,0x00,0x12,0x40,0x0A,0x80,0x7F,0xF0,0x0A,0x80,0x12,0x40,0x60,0x30, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* ϥ */ +0x38,0x80,0x2F,0xF0,0x2A,0xA0,0x3C,0x90,0x29,0x40,0x2A,0x20,0x3C,0x90,0x2A,0xA0, +0x29,0xC0,0x2A,0xA0,0x2C,0x90,0x59,0x80,0x00,0x00, +/* Ϧ */ +0x04,0x00,0x04,0x00,0x0F,0xF0,0x08,0x10,0x10,0x20,0x28,0x20,0x44,0x40,0x04,0x80, +0x03,0x00,0x02,0x00,0x0C,0x00,0x70,0x00,0x00,0x00, +/* ϧ */ +0x11,0x20,0x11,0x20,0x13,0xF0,0x59,0x20,0x57,0xF0,0x50,0x00,0x53,0xF0,0x12,0x10, +0x13,0xF0,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* Ϩ */ +0x10,0x80,0x13,0xE0,0x16,0x20,0x5B,0xE0,0x52,0x20,0x53,0xE0,0x52,0x20,0x13,0xE0, +0x10,0x80,0x2A,0x20,0x25,0x50,0x41,0xC0,0x00,0x00, +/* ϩ */ +0x12,0x20,0x11,0xC0,0x1A,0x20,0x50,0x80,0x57,0xF0,0x51,0x00,0x52,0x80,0x17,0xF0, +0x12,0x90,0x2A,0x90,0x2A,0xB0,0x40,0x80,0x00,0x00, +/* Ϫ */ +0x00,0x70,0x4F,0x80,0x25,0x00,0x02,0xA0,0x04,0x40,0x43,0x00,0x24,0x40,0x0F,0xE0, +0x01,0x20,0x2F,0xF0,0x42,0x80,0x0C,0x60,0x00,0x00, +/* ϫ */ +0x21,0x00,0x11,0x00,0x01,0xF0,0x02,0x10,0x42,0x10,0x25,0x20,0x08,0xA0,0x00,0x40, +0x10,0x40,0x20,0x80,0x41,0x00,0x02,0x00,0x00,0x00, +/* Ϭ */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x29,0x20,0x25,0x40,0x28,0x20,0x25,0x00,0x27,0xE0, +0x29,0x00,0x3F,0xF0,0x21,0x00,0x41,0x00,0x00,0x00, +/* ϭ */ +0x22,0x40,0x27,0x40,0x25,0x40,0x77,0x70,0x25,0xA0,0x27,0x20,0x72,0xA0,0x6F,0xA0, +0x24,0xA0,0x27,0x40,0x25,0xA0,0x2B,0x10,0x00,0x00, +/* Ϯ */ +0x08,0x40,0x7F,0xF0,0x09,0x40,0x11,0x80,0x23,0x10,0x4C,0xF0,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* ϯ */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3F,0xF0,0x24,0x40,0x27,0xC0,0x21,0x00,0x2F,0xE0, +0x29,0x20,0x29,0x20,0x49,0x60,0x01,0x00,0x00,0x00, +/* ϰ */ +0x00,0x00,0x3F,0xE0,0x00,0x20,0x10,0x20,0x08,0x20,0x04,0x20,0x00,0xA0,0x03,0x20, +0x0C,0x20,0x70,0x20,0x00,0x20,0x01,0xC0,0x00,0x00, +/* ϱ */ +0x10,0x80,0x13,0xE0,0x12,0x20,0x7B,0xE0,0x2A,0x20,0x2B,0xE0,0x2A,0x20,0x4B,0xE0, +0x28,0x80,0x12,0x20,0x2D,0x50,0x49,0xC0,0x00,0x00, +/* ϲ */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x10,0x40,0x7F,0xF0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* ϳ */ +0x20,0x80,0x22,0x80,0x3A,0x80,0x43,0xE0,0x74,0x80,0x20,0x80,0x27,0xF0,0x79,0x40, +0x21,0x40,0x29,0x40,0x32,0x50,0x24,0x30,0x00,0x00, +/* ϴ */ +0x01,0x00,0x45,0x00,0x25,0x00,0x07,0xE0,0x09,0x00,0x41,0x00,0x2F,0xF0,0x04,0x80, +0x04,0x80,0x24,0x80,0x48,0x90,0x10,0x70,0x00,0x00, +/* ϵ */ +0x01,0xE0,0x3E,0x00,0x04,0x00,0x08,0x40,0x1F,0x80,0x03,0x00,0x0C,0x20,0x3F,0xF0, +0x02,0x10,0x12,0x40,0x22,0x20,0x46,0x10,0x00,0x00, +/* ϶ */ +0x00,0x80,0x7A,0xA0,0x4C,0x90,0x4B,0xE0,0x52,0x20,0x53,0xE0,0x4A,0x20,0x4B,0xE0, +0x48,0x80,0x72,0xA0,0x44,0x90,0x41,0x80,0x00,0x00, +/* Ϸ */ +0x00,0xA0,0x00,0x90,0x7C,0x80,0x04,0xF0,0x47,0x80,0x28,0xA0,0x28,0xA0,0x10,0xA0, +0x10,0x40,0x28,0xD0,0x29,0x30,0x42,0x10,0x00,0x00, +/* ϸ */ +0x10,0x00,0x17,0xF0,0x24,0x90,0x4C,0x90,0x74,0x90,0x17,0xF0,0x24,0x90,0x7C,0x90, +0x04,0x90,0x1C,0x90,0x67,0xF0,0x04,0x10,0x00,0x00, +/* Ϲ */ +0x00,0x80,0x77,0xF0,0x54,0x90,0x53,0xE0,0x70,0x80,0x53,0xE0,0x50,0x80,0x77,0xF0, +0x50,0x80,0x53,0xE0,0x72,0x20,0x53,0xE0,0x00,0x00, +/* Ϻ */ +0x10,0x00,0x17,0xF0,0x10,0x80,0x7C,0x80,0x54,0x80,0x54,0xC0,0x7C,0xA0,0x10,0x90, +0x14,0x90,0x1C,0x80,0x64,0x80,0x00,0x80,0x00,0x00, +/* ϻ */ +0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x29,0x20,0x29,0x20,0x2F,0xE0,0x29,0x20,0x29,0x20, +0x2F,0xE0,0x21,0x00,0x21,0x00,0x3F,0xF0,0x00,0x00, +/* ϼ */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x3D,0xE0,0x24,0x20,0x3D,0xE0,0x20,0x00, +0x3D,0xE0,0x21,0x20,0x3C,0xC0,0x23,0x30,0x00,0x00, +/* Ͻ */ +0x10,0x80,0x17,0xF0,0x7C,0x90,0x23,0xE0,0x30,0x80,0x53,0xE0,0x78,0x80,0x17,0xF0, +0x18,0x80,0x73,0xE0,0x12,0x20,0x13,0xE0,0x00,0x00, +/* Ͼ */ +0x07,0x70,0x75,0x10,0x55,0x10,0x57,0x70,0x54,0x00,0x74,0x00,0x57,0x70,0x54,0x50, +0x54,0x50,0x77,0x20,0x54,0x50,0x04,0x90,0x00,0x00, +/* Ͽ */ +0x10,0x40,0x10,0x40,0x11,0xF0,0x54,0x40,0x55,0x50,0x54,0xE0,0x54,0x40,0x55,0xF0, +0x5C,0x40,0x64,0xA0,0x01,0x20,0x02,0x10,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x17,0xF0,0x10,0x80,0x34,0x90,0x52,0xA0,0x10,0x80,0x17,0xF0, +0x10,0x80,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x10,0x80,0x50,0x80,0x27,0xF0,0x50,0x80,0x14,0x90,0x12,0xA0,0x30,0x80,0x57,0xF0, +0x10,0x80,0x11,0x40,0x12,0x20,0x64,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x04,0x00,0x04,0x00,0x05,0x00,0x04,0x80,0x04,0x40,0x04,0x20, +0x04,0x20,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x00,0x3F,0xF0,0x22,0x00,0x2F,0xE0,0x28,0x20,0x2F,0xE0,0x28,0x20, +0x2F,0xE0,0x34,0x40,0x23,0x80,0x5C,0x70,0x00,0x00, +/* */ +0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x08,0x00, +0x1F,0xC0,0x28,0x40,0x07,0x80,0x78,0x70,0x00,0x00, +/* */ +0x00,0x00,0x07,0xF0,0x78,0x80,0x48,0x80,0x48,0x80,0x48,0xC0,0x48,0xA0,0x48,0x90, +0x78,0x90,0x48,0x80,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x21,0x40,0x2E,0x40,0x28,0x70,0x78,0x90,0x2F,0x10,0x2A,0x40,0x3A,0x40,0x6A,0x40, +0x2A,0x40,0x2A,0xA0,0x32,0xA0,0x61,0x10,0x00,0x00, +/* */ +0x21,0x40,0x36,0x40,0x44,0x70,0x04,0x50,0x77,0x90,0x25,0x00,0x25,0x20,0x75,0x20, +0x25,0x20,0x35,0x50,0x25,0x50,0x08,0x90,0x00,0x00, +/* */ +0x02,0x00,0x12,0x00,0x12,0x00,0x1F,0xE0,0x22,0x00,0x02,0x00,0x7F,0xF0,0x04,0x80, +0x04,0x80,0x08,0x90,0x10,0x90,0x20,0x70,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x10,0x80,0x14,0x90,0x34,0x90,0x54,0x90,0x14,0x90,0x14,0x90, +0x14,0x90,0x14,0x90,0x17,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x21,0x10,0x38,0xA0,0x49,0xF0,0x10,0x40,0x7C,0x40,0x55,0xF0,0x7C,0x40,0x54,0x40, +0x7D,0xF0,0x00,0x40,0x1C,0x40,0x60,0x40,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x20,0x80,0x48,0x80,0x70,0x80,0x17,0xF0,0x20,0x80,0x78,0x80, +0x00,0x80,0x18,0x80,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x00,0x50,0x00,0x40,0x3F,0xF0,0x20,0x40,0x2F,0x40,0x20,0x50,0x2F,0x50,0x29,0x50, +0x29,0x60,0x2F,0x50,0x20,0xB0,0x41,0x10,0x00,0x00, +/* */ +0x0B,0xE0,0x49,0x20,0x48,0xC0,0x49,0x20,0x0A,0x10,0x00,0x00,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* */ +0x14,0x00,0x24,0x70,0x47,0x00,0x18,0x00,0x2F,0x70,0x64,0x20,0x24,0x20,0x2F,0x20, +0x24,0x20,0x25,0x20,0x26,0x20,0x24,0x60,0x00,0x00, +/* */ +0x10,0x80,0x3C,0x40,0x25,0xF0,0x34,0x40,0x2C,0x80,0x25,0x10,0x7D,0xE0,0x24,0x40, +0x34,0x80,0x2D,0x20,0x25,0xF0,0x4C,0x10,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x02,0x10,0x42,0x10,0x5F,0xD0,0x42,0x10,0x47,0x10,0x4A,0x90, +0x52,0x50,0x42,0x10,0x42,0x10,0x40,0x30,0x00,0x00, +/* */ +0x40,0x30,0x2D,0xC0,0x04,0x40,0x04,0x40,0x49,0x70,0x29,0x40,0x0D,0x40,0x05,0x40, +0x05,0xF0,0x34,0x00,0x48,0x00,0x17,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x70,0x80,0x17,0xF0,0x10,0x80,0x71,0x00,0x42,0x20,0x47,0xC0,0x70,0x80, +0x11,0x00,0x12,0x20,0x17,0xF0,0x60,0x10,0x00,0x00, +/* */ +0x14,0x40,0x12,0x80,0x17,0xE0,0x7A,0x80,0x2F,0xE0,0x2A,0xA0,0x2F,0xF0,0x4A,0xA0, +0x2F,0xE0,0x16,0xC0,0x2A,0xA0,0x4A,0x90,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x08,0x80,0x48,0x90, +0x28,0xA0,0x18,0xC0,0x08,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x49,0x40,0x4A,0x20,0x54,0x10,0x53,0xE0,0x48,0x00,0x49,0x20, +0x4C,0xA0,0x72,0xA0,0x42,0x40,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x12,0x20,0x12,0xA0,0x12,0xA0,0x7A,0xA0,0x12,0xA0,0x12,0xA0, +0x11,0x40,0x19,0x40,0x62,0x50,0x04,0x30,0x00,0x00, +/* */ +0x08,0x40,0x7F,0x60,0x08,0x50,0x7E,0x40,0x56,0xF0,0x4A,0x40,0x5E,0x40,0x4A,0x40, +0x7E,0xA0,0x4A,0xA0,0x4A,0xA0,0x47,0x10,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x7F,0xF0,0x04,0x00, +0x08,0x80,0x10,0x40,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x00,0x80,0x3B,0xE0,0x2A,0x20,0x2B,0xE0,0x3A,0x20,0x2B,0xE0,0x28,0x80,0x3E,0xD0, +0x2A,0xA0,0x2A,0xA0,0x2C,0x90,0x59,0x80,0x00,0x00, +/* */ +0x21,0x00,0x21,0xE0,0x3A,0x20,0x48,0x40,0x11,0x00,0x22,0x30,0x22,0x10,0x23,0x70, +0x22,0x10,0x2A,0x10,0x33,0xF0,0x22,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x04,0x00,0x47,0xF0, +0x29,0x10,0x02,0xA0,0x24,0x40,0x48,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x12,0x00,0x1F,0xE0,0x22,0x00,0x02,0x00,0x7F,0xF0, +0x08,0x80,0x08,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x01,0x00,0x79,0xE0,0x4A,0x20,0x48,0x40,0x51,0x00,0x52,0x30,0x4A,0x10,0x4B,0x70, +0x4A,0x10,0x72,0x10,0x43,0xF0,0x42,0x10,0x00,0x00, +/* */ +0x7B,0xE0,0x4A,0x20,0x4A,0x20,0x53,0xE0,0x52,0x20,0x4A,0x20,0x4B,0xE0,0x4A,0x90, +0x4A,0xA0,0x72,0x40,0x43,0x20,0x42,0x10,0x00,0x00, +/* */ +0x10,0xA0,0x10,0x90,0x20,0xF0,0x4B,0x80,0x70,0x80,0x10,0xF0,0x23,0x80,0x78,0xA0, +0x00,0xC0,0x18,0x90,0x61,0x50,0x06,0x30,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x10,0x7A,0x10,0x13,0xF0,0x32,0x10,0x3A,0x10,0x53,0xF0, +0x12,0x10,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x00,0x24,0xF0,0x24,0x90,0x3F,0x90,0x24,0xF0,0x24,0x90,0x2E,0xF0, +0x35,0x90,0x24,0x90,0x24,0xF0,0x44,0x90,0x00,0x00, +/* */ +0x20,0x80,0x37,0xF0,0x40,0x00,0x07,0x70,0x75,0x50,0x27,0x70,0x21,0x40,0x77,0xF0, +0x21,0x40,0x27,0xF0,0x33,0x20,0x25,0x90,0x00,0x00, +/* */ +0x01,0xC0,0x1E,0x00,0x02,0x00,0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x10,0x00,0x13,0xF0,0x7E,0x10,0x13,0xF0,0x3A,0x10, +0x57,0xF0,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x00,0x00,0x3D,0xE0,0x25,0x20,0x3D,0xE0,0x08,0x80,0x3F,0xE0, +0x08,0x80,0x7F,0xF0,0x18,0x80,0x6C,0x70,0x00,0x00, +/* */ +0x44,0x00,0x24,0xF0,0x04,0x90,0x1F,0x90,0x44,0xF0,0x26,0x90,0x0D,0x90,0x14,0xF0, +0x04,0x90,0x24,0x90,0x44,0xF0,0x04,0x90,0x00,0x00, +/* */ +0x04,0x00,0x08,0x00,0x10,0x40,0x20,0x80,0x3F,0x00,0x06,0x10,0x18,0x10,0x3F,0xE0, +0x00,0x40,0x01,0x80,0x06,0x00,0x78,0x00,0x00,0x00, +/* */ +0x44,0x00,0x2B,0xB0,0x00,0x90,0x78,0x90,0x12,0xD0,0x39,0xB0,0x10,0x90,0x79,0xB0, +0x12,0xD0,0x10,0x90,0x20,0x90,0x41,0xB0,0x00,0x00, +/* */ +0x22,0x20,0x11,0x40,0x7B,0xE0,0x08,0x80,0x10,0x80,0x1B,0xE0,0x34,0x80,0x50,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x22,0x20,0x11,0x40,0x07,0xF0,0x00,0x80,0x60,0x80,0x27,0xF0,0x20,0x80,0x20,0x80, +0x2F,0xF0,0x30,0x80,0x20,0x80,0x00,0x80,0x00,0x00, +/* */ +0x08,0x00,0x09,0xF0,0x7F,0x10,0x09,0xF0,0x1D,0x10,0x2B,0xF0,0x49,0x10,0x09,0xF0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x00,0x80,0x01,0x00,0x77,0xF0,0x54,0x10,0x54,0x10,0x55,0xD0,0x55,0x50,0x55,0x50, +0x75,0xD0,0x54,0x10,0x04,0x10,0x04,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xC0, +0x00,0x80,0x7F,0xF0,0x01,0x00,0x07,0x00,0x00,0x00, +/* */ +0x07,0xF0,0x70,0x80,0x21,0x00,0x27,0xF0,0x24,0x10,0x24,0x90,0x24,0x90,0x24,0x90, +0x34,0x90,0x41,0x40,0x02,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x10,0x40,0x3F,0xE0,0x50,0x50, +0x1F,0xC0,0x10,0x00,0x10,0x20,0x0F,0xE0,0x00,0x00, +/* */ +0x12,0x00,0x13,0xE0,0x14,0x20,0x7F,0xF0,0x14,0x90,0x37,0xF0,0x39,0x10,0x56,0xA0, +0x11,0x40,0x16,0xE0,0x11,0x50,0x16,0xC0,0x00,0x00, +/* */ +0x14,0x00,0x17,0xC0,0x28,0x40,0x3F,0xE0,0x69,0x20,0x2F,0xE0,0x22,0x00,0x2D,0x20, +0x22,0xC0,0x2D,0xA0,0x22,0x90,0x2D,0x80,0x00,0x00, +/* */ +0x04,0x00,0x08,0x00,0x7F,0xF0,0x40,0x10,0x40,0x10,0x4F,0x90,0x48,0x90,0x48,0x90, +0x48,0x90,0x4F,0x90,0x40,0x10,0x40,0x70,0x00,0x00, +/* */ +0x08,0x00,0x1F,0x80,0x20,0x80,0x7F,0xE0,0x22,0x20,0x3F,0xE0,0x0C,0x20,0x32,0x40, +0x0D,0x80,0x33,0x40,0x0D,0x30,0x73,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x3F,0xE0,0x02,0x20,0x7F,0xF0,0x02,0x20,0x3F,0xE0, +0x02,0x00,0x27,0x20,0x2A,0xA0,0x42,0x20,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x90,0x12,0xA0,0x10,0x80,0x23,0xF0,0x3A,0x10,0x6B,0xF0,0x2A,0x10, +0x2B,0xF0,0x2A,0x10,0x3A,0x10,0x2A,0x30,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x0A,0x80,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x08,0x10,0x49,0x10,0x2A,0x50,0x08,0x50,0x7F,0x50,0x41,0x50,0x7F,0x50,0x41,0x50, +0x7F,0x50,0x41,0x10,0x41,0x10,0x43,0x30,0x00,0x00, +/* */ +0x01,0x00,0x77,0xD0,0x51,0x20,0x5F,0xF0,0x50,0x80,0x57,0xE0,0x52,0x20,0x54,0xC0, +0x7B,0xF0,0x50,0x80,0x00,0x80,0x01,0x80,0x00,0x00, +/* */ +0x3D,0xE0,0x25,0x20,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x20,0x20,0x22,0x20,0x0D,0xC0, +0x70,0x30,0x3D,0xE0,0x25,0x20,0x3D,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x34,0x90,0x42,0xA0,0x00,0x80,0x77,0xF0,0x24,0x10,0x27,0xF0,0x74,0x10, +0x27,0xF0,0x24,0x10,0x34,0x10,0x24,0x30,0x00,0x00, +/* */ +0x00,0x80,0x24,0x90,0x12,0xA0,0x00,0x80,0x47,0xF0,0x24,0x10,0x07,0xF0,0x04,0x10, +0x17,0xF0,0x24,0x10,0x44,0x10,0x04,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x12,0x40,0x0A,0x80,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x44,0x20,0x23,0xC0,0x05,0x20,0x0F,0xF0,0x42,0x00,0x27,0xE0,0x0C,0x20,0x17,0xE0, +0x04,0x20,0x27,0xE0,0x44,0x20,0x04,0x60,0x00,0x00, +/* */ +0x01,0x00,0x71,0xF0,0x5F,0x20,0x51,0x40,0x50,0x90,0x77,0x70,0x50,0x00,0x5F,0xF0, +0x52,0x40,0x72,0x40,0x54,0x50,0x08,0x30,0x00,0x00, +/* С */ +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x12,0x40,0x12,0x20,0x22,0x20,0x22,0x10, +0x42,0x10,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* Т */ +0x04,0x20,0x3F,0x40,0x04,0x80,0x7F,0xF0,0x02,0x00,0x3F,0xC0,0x08,0x80,0x11,0x00, +0x3F,0xF0,0x41,0x00,0x01,0x00,0x07,0x00,0x00,0x00, +/* У */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x78,0x00,0x11,0x40,0x3A,0x20,0x35,0x50,0x51,0x40, +0x11,0x40,0x10,0x80,0x11,0x40,0x16,0x30,0x00,0x00, +/* Ф */ +0x02,0x00,0x22,0x20,0x12,0x40,0x02,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x60,0x00,0x00, +/* Х */ +0x01,0x00,0x77,0xE0,0x51,0x20,0x5F,0xF0,0x51,0x20,0x57,0xE0,0x51,0x00,0x55,0x20, +0x77,0xA0,0x55,0x60,0x05,0x20,0x09,0x20,0x00,0x00, +/* Ц */ +0x10,0x80,0x1E,0xF0,0x29,0x40,0x44,0x20,0x01,0xC0,0x1E,0x00,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* Ч */ +0x10,0x80,0x08,0x80,0x7E,0x80,0x00,0xF0,0x25,0x20,0x22,0xA0,0x40,0xA0,0x14,0xA0, +0x08,0x40,0x14,0x40,0x22,0xA0,0x41,0x10,0x00,0x00, +/* Ш */ +0x12,0x00,0x17,0xF0,0x7A,0x50,0x17,0x50,0x12,0x50,0x3F,0x50,0x32,0xB0,0x50,0x80, +0x17,0xF0,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* Щ */ +0x08,0x80,0x28,0x90,0x2E,0xA0,0x28,0xC0,0x28,0x90,0x2E,0x90,0x70,0x70,0x00,0x00, +0x1F,0xC0,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* Ъ */ +0x7C,0x80,0x44,0x80,0x7C,0xF0,0x44,0x90,0x7D,0x20,0x20,0x00,0x3E,0x40,0x52,0x40, +0x2A,0x40,0x42,0xA0,0x7A,0xA0,0x0D,0x10,0x00,0x00, +/* Ы */ +0x11,0xE0,0x11,0x20,0x11,0xE0,0x7D,0x20,0x55,0xE0,0x54,0x80,0x7C,0xF0,0x11,0x50, +0x14,0xB0,0x1D,0x10,0x65,0xD0,0x00,0x30,0x00,0x00, +/* Ь */ +0x28,0x80,0x7C,0x80,0x2B,0xE0,0x38,0x80,0x10,0x80,0x7F,0xF0,0x54,0x00,0x7C,0x80, +0x13,0xE0,0x7C,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* Э */ +0x22,0x00,0x22,0x00,0x22,0x00,0x2F,0xC0,0x72,0x40,0x22,0x40,0x26,0x60,0x2A,0x50, +0x22,0x50,0x24,0x40,0x24,0x40,0x29,0x80,0x00,0x00, +/* Ю */ +0x20,0x80,0x20,0x80,0x27,0xF0,0x70,0x80,0x24,0x90,0x22,0xA0,0x30,0x80,0x67,0xF0, +0x20,0x80,0x21,0x40,0x22,0x20,0x64,0x10,0x00,0x00, +/* Я */ +0x11,0x40,0x13,0xF0,0x16,0x40,0x7B,0xF0,0x12,0x40,0x13,0xF0,0x1A,0x40,0x77,0xF0, +0x11,0x20,0x11,0x70,0x12,0x10,0x34,0x60,0x00,0x00, +/* а */ +0x00,0x00,0x3E,0xF0,0x04,0x90,0x14,0x90,0x24,0xA0,0x3E,0xA0,0x0C,0x90,0x14,0x90, +0x14,0x90,0x24,0xE0,0x44,0x80,0x0C,0x80,0x00,0x00, +/* б */ +0x08,0x20,0x15,0x20,0x22,0xA0,0x5C,0x20,0x09,0x20,0x08,0xA0,0x3E,0x30,0x09,0xE0, +0x2C,0x20,0x4A,0x20,0x08,0x20,0x18,0x20,0x00,0x00, +/* в */ +0x01,0x00,0x39,0x00,0x2B,0xC0,0x29,0x40,0x39,0x40,0x2B,0x60,0x2D,0x50,0x39,0x50, +0x2A,0x40,0x2A,0x40,0x2C,0x40,0x59,0x80,0x00,0x00, +/* г */ +0x44,0x50,0x27,0x60,0x04,0x40,0x05,0x50,0x66,0x30,0x20,0x80,0x27,0xF0,0x24,0x10, +0x27,0xF0,0x24,0x10,0x37,0xF0,0x24,0x10,0x00,0x00, +/* д */ +0x7F,0xF0,0x50,0x10,0x10,0x00,0x1F,0xE0,0x10,0x00,0x20,0x00,0x3F,0xE0,0x00,0x20, +0x00,0x20,0x7F,0xA0,0x00,0x20,0x01,0xC0,0x00,0x00, +/* е */ +0x10,0x50,0x10,0x40,0x17,0xF0,0x78,0x40,0x15,0x40,0x35,0x50,0x3F,0xD0,0x55,0x60, +0x15,0x60,0x15,0x50,0x18,0xB0,0x11,0x10,0x00,0x00, +/* ж */ +0x20,0x00,0x3E,0xF0,0x48,0x90,0x08,0x90,0x7E,0x90,0x08,0x90,0x28,0x90,0x2E,0x90, +0x28,0x90,0x2E,0xB0,0x70,0x80,0x00,0x80,0x00,0x00, +/* з */ +0x3D,0xF0,0x44,0x90,0x3E,0xB0,0x2B,0x40,0x3E,0xF0,0x2A,0x40,0x42,0x40,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x00, +/* и */ +0x24,0xF0,0x27,0x50,0x29,0x50,0x32,0xB0,0x6F,0xA0,0x6A,0xF0,0x2F,0xA0,0x2A,0xA0, +0x2F,0xF0,0x2A,0xA0,0x2A,0xA0,0x31,0xA0,0x00,0x00, +/* й */ +0x41,0x20,0x29,0x20,0x09,0x20,0x09,0x20,0x5F,0xF0,0x29,0x20,0x09,0x20,0x09,0x20, +0x09,0xE0,0x28,0x00,0x48,0x00,0x0F,0xF0,0x00,0x00, +/* к */ +0x4F,0xF0,0x2A,0x10,0x02,0x00,0x03,0xF0,0x42,0x00,0x24,0x00,0x07,0xF0,0x00,0x10, +0x10,0x10,0x2F,0xD0,0x40,0x10,0x00,0xE0,0x00,0x00, +/* л */ +0x44,0x20,0x2F,0x20,0x09,0x20,0x0F,0x70,0x69,0x20,0x2F,0x20,0x29,0xA0,0x3F,0x60, +0x25,0x20,0x29,0x20,0x31,0x20,0x23,0x60,0x00,0x00, +/* м */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x29,0x10,0x25,0x20,0x2F,0xF0,0x28,0x10,0x2F,0xF0, +0x28,0x10,0x2F,0xF0,0x28,0x10,0x48,0x30,0x00,0x00, +/* н */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x08,0x30,0x3E,0xC0,0x14,0x80,0x7F,0x80,0x08,0xF0, +0x3E,0xA0,0x08,0xA0,0x2A,0xA0,0x59,0x20,0x00,0x00, +/* о */ +0x08,0x80,0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x02,0x00,0x09,0x00,0x29,0x20, +0x28,0x10,0x28,0x50,0x48,0x50,0x07,0xC0,0x00,0x00, +/* п */ +0x21,0x00,0x20,0x80,0x3B,0xE0,0x40,0x00,0x7A,0x20,0x21,0x40,0x27,0xF0,0x78,0x80, +0x23,0xE0,0x28,0x80,0x30,0x80,0x20,0x80,0x00,0x00, +/* */ +0x06,0x80,0x38,0x80,0x20,0xF0,0x20,0x90,0x3F,0x20,0x24,0x00,0x24,0x40,0x24,0x40, +0x24,0x40,0x24,0xA0,0x24,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x3F,0xE0,0x10,0x40,0x08,0x80,0x7F,0xF0,0x02,0x00,0x02,0x00, +0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x08,0x10,0x3E,0xE0,0x00,0x80,0x22,0x80,0x14,0xF0,0x7E,0xA0,0x08,0xA0,0x3E,0xA0, +0x08,0xA0,0x2A,0xA0,0x49,0x20,0x1A,0x20,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x12,0x00,0x5A,0x00,0x57,0xF0,0x52,0x40,0x52,0x40,0x12,0x40, +0x12,0x40,0x12,0x40,0x12,0x40,0x14,0x40,0x00,0x00, +/* */ +0x00,0x00,0x04,0x00,0x02,0x00,0x01,0x00,0x09,0x00,0x08,0x20,0x28,0x10,0x28,0x10, +0x28,0x10,0x48,0x40,0x08,0x40,0x07,0xC0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x2F,0xF0,0x20,0x00,0x67,0xE0,0x20,0x00,0x27,0xE0,0x20,0x00, +0x27,0xE0,0x24,0x20,0x27,0xE0,0x24,0x20,0x00,0x00, +/* */ +0x08,0x40,0x09,0x50,0x10,0xE0,0x3E,0x40,0x2B,0xF0,0x2A,0x40,0x2A,0x40,0x2B,0xF0, +0x2A,0x40,0x2F,0x40,0x78,0x40,0x00,0x40,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x02,0x00,0x22,0x00,0x3F,0xE0, +0x42,0x00,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x3B,0xE0,0x2A,0x20,0x2B,0xE0,0x3A,0x20,0x2B,0xE0,0x28,0x80,0x3A,0x80,0x2B,0xE0, +0x2C,0x80,0x2B,0xE0,0x28,0x80,0x5F,0xF0,0x00,0x00, +/* */ +0x0B,0xE0,0x2A,0x20,0x13,0xE0,0x2A,0x20,0x4B,0xE0,0x08,0x80,0x1A,0x80,0x2B,0xE0, +0x4C,0x80,0x0B,0xE0,0x08,0x80,0x37,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x5A,0x20,0x57,0xE0,0x50,0x80,0x52,0x80,0x13,0xE0, +0x14,0x80,0x13,0xE0,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x04,0x20,0x22,0x20,0x12,0x40,0x10,0x40,0x00,0x80,0x00,0x00,0x7F,0xF0,0x00,0x00, +0x08,0x80,0x10,0x40,0x20,0x20,0x40,0x10,0x00,0x00, +/* */ +0x00,0x10,0x7E,0x10,0x24,0x90,0x24,0x90,0x24,0x90,0x7E,0x90,0x24,0x90,0x24,0x90, +0x24,0x90,0x24,0x10,0x24,0x10,0x44,0x70,0x00,0x00, +/* */ +0x00,0x10,0x3F,0x50,0x12,0x50,0x12,0x50,0x7F,0x50,0x12,0x50,0x22,0x10,0x40,0x30, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x20,0x7E,0x20,0x24,0x40,0x24,0x90,0x24,0x10,0x7E,0x20,0x24,0x40,0x24,0x80, +0x24,0x10,0x24,0x20,0x24,0x40,0x45,0x80,0x00,0x00, +/* */ +0x00,0x00,0x7E,0xF0,0x24,0x90,0x24,0x90,0x24,0xA0,0x7E,0xA0,0x24,0x90,0x24,0x90, +0x24,0x90,0x24,0xE0,0x24,0x80,0x44,0x80,0x00,0x00, +/* */ +0x08,0x00,0x13,0xE0,0x20,0x00,0x48,0x00,0x17,0xF0,0x30,0x40,0x50,0x40,0x10,0x40, +0x10,0x40,0x10,0x40,0x10,0x40,0x11,0xC0,0x00,0x00, +/* */ +0x7D,0xF0,0x11,0x10,0x7D,0xF0,0x55,0x10,0x55,0xF0,0x6C,0x40,0x45,0x40,0x7D,0xF0, +0x46,0x40,0x45,0xF0,0x7C,0x40,0x45,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x10,0x40,0x08,0x80,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x07,0x00,0x0A,0x80,0x12,0x40,0x62,0x30,0x1F,0xC0, +0x10,0x40,0x10,0x40,0x1F,0xC0,0x10,0x40,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x12,0x80,0x5B,0xE0,0x52,0x80,0x54,0x80,0x50,0x80,0x13,0xE0, +0x10,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x12,0x80,0x7B,0xE0,0x2A,0x80,0x2C,0x80,0x28,0x80,0x4B,0xE0, +0x28,0x80,0x10,0x80,0x28,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x08,0x80, +0x08,0x80,0x08,0x90,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x00,0x80,0x10,0x80,0x49,0x10,0x45,0x10,0x42,0x10,0x45,0x10,0x48,0x90,0x50,0x90, +0x40,0x10,0x40,0x10,0x7F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x72,0x00,0x52,0x00,0x57,0xF0,0x78,0x10,0x52,0x90,0x55,0x50,0x75,0x50,0x56,0xD0, +0x54,0x50,0x57,0xD0,0x50,0x10,0x30,0x60,0x00,0x00, +/* */ +0x08,0x00,0x08,0x00,0x1F,0xF0,0x10,0x10,0x25,0x10,0x52,0x50,0x12,0x50,0x15,0x50, +0x10,0x50,0x1F,0xD0,0x00,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x40,0x40,0x24,0x40,0x02,0x80,0x12,0x90,0x51,0x10,0x31,0x10,0x12,0x90,0x12,0x50, +0x14,0x50,0x30,0x10,0x5F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x10,0xA0,0x10,0x80,0x7D,0xF0,0x11,0x40,0x23,0x40,0x29,0xF0,0x29,0x40,0x51,0x40, +0x11,0xF0,0x25,0x40,0x3D,0x40,0x05,0xF0,0x00,0x00, +/* */ +0x10,0xA0,0x22,0xC0,0x3E,0x90,0x00,0x70,0x3E,0x00,0x22,0x90,0x3E,0xA0,0x22,0xC0, +0x3E,0x90,0x22,0x70,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x10,0x80,0x17,0xF0,0x30,0x80,0x51,0xC0,0x11,0xC0,0x12,0xA0, +0x12,0xA0,0x14,0x90,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x22,0x20,0x29,0xC0,0x6E,0x30,0x28,0x40,0x28,0x80,0x2B,0x20, +0x28,0xC0,0x2B,0x10,0x20,0x60,0x27,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x02,0x00,0x3F,0xC0,0x04,0x00,0x7F,0xF0,0x08,0x00,0x1F,0xC0, +0x12,0x40,0x2F,0xC0,0x44,0x40,0x3F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x10,0x80,0x7D,0x00,0x11,0x00,0x32,0x00,0x3B,0xF0,0x54,0x10, +0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x60,0x00,0x00, +/* */ +0x01,0x00,0x77,0xE0,0x54,0x20,0x57,0xE0,0x54,0x20,0x57,0xE0,0x54,0x20,0x57,0xE0, +0x71,0x40,0x5F,0xF0,0x02,0x80,0x0C,0x70,0x00,0x00, +/* */ +0x20,0x60,0x23,0x80,0x38,0x80,0x47,0xF0,0x7A,0xA0,0x24,0x90,0x23,0xE0,0x79,0x20, +0x21,0x70,0x2A,0x10,0x32,0x10,0x24,0x60,0x00,0x00, +/* */ +0x01,0xC0,0x1E,0x00,0x02,0x00,0x7F,0xF0,0x0A,0x80,0x12,0x40,0x7F,0xB0,0x08,0x80, +0x08,0xE0,0x08,0x20,0x10,0x20,0x21,0xC0,0x00,0x00, +/* */ +0x40,0x80,0x20,0x80,0x70,0x80,0x17,0xF0,0x24,0x90,0x34,0x90,0x67,0xF0,0x34,0x90, +0x24,0x90,0x24,0x90,0x27,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x20,0x80,0x4F,0xF0,0x72,0xA0,0x14,0x90,0x23,0xE0,0x79,0x20, +0x01,0x70,0x1A,0x10,0x62,0x10,0x04,0x60,0x00,0x00, +/* */ +0x20,0xE0,0x20,0x80,0x27,0xF0,0x24,0x90,0x74,0xE0,0x27,0x90,0x24,0x70,0x25,0x40, +0x25,0x50,0x37,0x60,0x65,0x40,0x0B,0xF0,0x00,0x00, +/* */ +0x01,0x40,0x01,0x20,0x01,0x00,0x3F,0xF0,0x21,0x00,0x21,0x20,0x21,0x20,0x3D,0x40, +0x20,0x90,0x21,0x50,0x22,0x30,0x44,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x5A,0xD0,0x02,0x00,0x3A,0xE0,0x00,0x00,0x7F,0xF0, +0x02,0x00,0x3F,0xE0,0x25,0x20,0x25,0x60,0x00,0x00, +/* */ +0x02,0x00,0x03,0xE0,0x02,0x00,0x3F,0xF0,0x22,0x10,0x23,0xC0,0x3E,0x10,0x21,0xF0, +0x22,0x80,0x2A,0xA0,0x26,0xC0,0x5F,0xF0,0x00,0x00, +/* */ +0x00,0xE0,0x00,0x80,0x77,0xF0,0x54,0x90,0x54,0xE0,0x57,0x90,0x54,0x70,0x55,0x40, +0x75,0x50,0x57,0x60,0x05,0x40,0x0B,0xF0,0x00,0x00, +/* */ +0x17,0xF0,0x20,0x80,0x41,0x00,0x07,0xF0,0x14,0x10,0x24,0x90,0x44,0x90,0x04,0x90, +0x14,0x90,0x21,0x40,0x42,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x10,0x80,0x21,0x40,0x42,0x20,0x0C,0x10,0x13,0xE0,0x30,0x80,0x57,0xF0,0x10,0x80, +0x12,0xA0,0x12,0x90,0x14,0x90,0x11,0x80,0x00,0x00, +/* */ +0x22,0x00,0x12,0x00,0x03,0xE0,0x04,0x80,0x70,0x80,0x10,0x80,0x10,0x80,0x17,0xF0, +0x10,0x80,0x14,0x80,0x18,0x80,0x10,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x7F,0xF0,0x10,0x80,0x3F,0x00,0x04,0x20,0x7F,0xF0, +0x12,0x50,0x1F,0xC0,0x12,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x7D,0x10,0x10,0xA0,0x7C,0xA0,0x54,0x40,0x55,0x50,0x6D,0x50,0x45,0x50,0x7D,0xB0, +0x45,0x10,0x45,0x10,0x7D,0xF0,0x44,0x10,0x00,0x00, +/* */ +0x08,0x00,0x15,0xF0,0x22,0x90,0x5C,0x90,0x08,0x90,0x08,0xA0,0x3E,0xA0,0x08,0x40, +0x2C,0x40,0x4A,0xA0,0x08,0xA0,0x19,0x10,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x22,0x20,0x7A,0x20,0x2B,0xE0,0x2A,0x20,0x2A,0x20,0x2A,0x20, +0x2B,0xE0,0x28,0x00,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x20,0x40,0x26,0x80,0x21,0x00,0x3F,0xF0, +0x21,0x10,0x21,0x20,0x21,0x00,0x43,0x00,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x10,0x80,0x3F,0x00,0x04,0x20,0x7F,0xF0,0x00,0x10,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x19,0x00,0x57,0xF0,0x55,0x50,0x55,0x50,0x55,0x50,0x15,0x50, +0x15,0x50,0x15,0x50,0x15,0x50,0x1F,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x7E,0xF0,0x12,0x90,0x32,0x90,0x0C,0xF0,0x32,0x00,0x08,0x80,0x1F,0x00, +0x04,0x40,0x3F,0xE0,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x17,0xF0,0x10,0x90,0x12,0xE0,0x7A,0x80,0x2D,0xF0,0x28,0x00,0x2B,0xE0,0x4A,0x20, +0x2B,0xE0,0x12,0x20,0x2A,0x20,0x4A,0x60,0x00,0x00, +/* */ +0x11,0x00,0x11,0x10,0x23,0xA0,0x49,0x40,0x77,0xF0,0x11,0x00,0x23,0xE0,0x76,0x20, +0x03,0xE0,0x1A,0x20,0x63,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x20,0x80,0x4B,0xF0,0x70,0x10,0x11,0x40,0x22,0xC0,0x79,0x40, +0x07,0xF0,0x18,0x80,0x61,0x20,0x06,0x10,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x78,0x80,0x20,0x80,0x50,0x80,0x78,0x80,0x17,0xF0,0x18,0x80, +0x70,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x00,0x80,0x07,0xF0,0x7C,0x10,0x4B,0xE0,0x48,0x00,0x4B,0xE0,0x4A,0x20,0x4B,0xE0, +0x7A,0x20,0x4B,0xE0,0x00,0x00,0x07,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x7F,0xF0,0x10,0x40, +0x3F,0xE0,0x04,0x20,0x2A,0xA0,0x47,0x90,0x00,0x00, +/* */ +0x11,0x00,0x09,0x00,0x01,0xF0,0x7A,0x00,0x25,0xF0,0x20,0x50,0x3D,0x40,0x25,0x40, +0x25,0x70,0x25,0x40,0x25,0x40,0x5A,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x04,0x00,0x08,0x00,0x10,0x80,0x3F,0x00,0x02,0x00, +0x04,0x40,0x08,0x20,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* ѡ */ +0x20,0x80,0x12,0x80,0x03,0xE0,0x04,0x80,0x70,0x80,0x17,0xF0,0x11,0x40,0x11,0x40, +0x12,0x50,0x14,0x30,0x28,0x00,0x47,0xF0,0x00,0x00, +/* Ѣ */ +0x01,0x00,0x3F,0xF0,0x24,0x50,0x67,0x20,0x29,0x70,0x3F,0xA0,0x2A,0xF0,0x6F,0xA0, +0x2A,0xF0,0x2F,0xA0,0x20,0x20,0x5F,0xA0,0x00,0x00, +/* ѣ */ +0x01,0x00,0x70,0x80,0x57,0xF0,0x50,0x80,0x71,0x00,0x52,0x20,0x57,0xC0,0x70,0x80, +0x51,0x00,0x52,0x20,0x77,0xF0,0x50,0x10,0x00,0x00, +/* Ѥ */ +0x12,0x00,0x13,0xF0,0x24,0x10,0x4B,0xD0,0x72,0x50,0x12,0x50,0x23,0xD0,0x7A,0x50, +0x02,0x50,0x1B,0xD0,0x62,0x10,0x00,0x60,0x00,0x00, +/* ѥ */ +0x29,0x40,0x7D,0x40,0x2A,0x50,0x3B,0x50,0x15,0x60,0x7D,0x40,0x55,0xC0,0x7D,0x40, +0x11,0x40,0x7D,0x50,0x11,0x50,0x11,0x30,0x00,0x00, +/* Ѧ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x40,0x3D,0xF0,0x24,0xA0,0x3C,0x40,0x21,0xF0, +0x3C,0x40,0x24,0xE0,0x3C,0x40,0x24,0x40,0x00,0x00, +/* ѧ */ +0x24,0x20,0x12,0x40,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x00,0x80,0x01,0x00,0x7F,0xF0, +0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* Ѩ */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x48,0x90,0x08,0x80,0x08,0x80,0x08,0x80, +0x10,0x40,0x10,0x40,0x20,0x20,0x40,0x10,0x00,0x00, +/* ѩ */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x5A,0xD0,0x02,0x00,0x3A,0xE0,0x00,0x00,0x3F,0xE0, +0x00,0x20,0x1F,0xE0,0x00,0x20,0x3F,0xE0,0x00,0x00, +/* Ѫ */ +0x04,0x00,0x04,0x00,0x08,0x00,0x3F,0xE0,0x25,0x20,0x25,0x20,0x25,0x20,0x25,0x20, +0x25,0x20,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* ѫ */ +0x7C,0x80,0x44,0x80,0x7C,0x80,0x01,0xF0,0x7C,0x90,0x44,0x90,0x54,0x90,0x54,0x90, +0x54,0x90,0x11,0x10,0x29,0x10,0x46,0x60,0x00,0x00, +/* Ѭ */ +0x01,0xE0,0x3E,0x00,0x02,0x00,0x7F,0xF0,0x22,0x20,0x2A,0xA0,0x3F,0xE0,0x02,0x00, +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x25,0x20,0x00,0x00, +/* ѭ */ +0x10,0x30,0x27,0xC0,0x44,0x40,0x17,0xF0,0x24,0x40,0x65,0xF0,0x25,0x10,0x25,0xF0, +0x25,0x10,0x25,0xF0,0x25,0x10,0x29,0xF0,0x00,0x00, +/* Ѯ */ +0x10,0x00,0x1F,0xF0,0x20,0x10,0x5F,0x90,0x10,0x90,0x10,0x90,0x1F,0x90,0x10,0x90, +0x10,0x90,0x1F,0x90,0x10,0x10,0x00,0xE0,0x00,0x00, +/* ѯ */ +0x44,0x00,0x27,0xF0,0x08,0x10,0x17,0xD0,0x64,0x50,0x24,0x50,0x27,0xD0,0x24,0x50, +0x24,0x50,0x37,0xD0,0x24,0x10,0x00,0x60,0x00,0x00, +/* Ѱ */ +0x3F,0xE0,0x00,0x20,0x1F,0xE0,0x00,0x20,0x3F,0xE0,0x00,0x40,0x7F,0xF0,0x00,0x40, +0x10,0x40,0x08,0x40,0x08,0x40,0x01,0xC0,0x00,0x00, +/* ѱ */ +0x01,0x10,0x79,0x50,0x09,0x50,0x29,0x50,0x29,0x50,0x29,0x50,0x3D,0x50,0x05,0x50, +0x15,0x50,0x65,0x50,0x05,0x50,0x1A,0x10,0x00,0x00, +/* Ѳ */ +0x44,0x90,0x24,0x90,0x09,0x20,0x09,0x20,0x12,0x40,0x69,0x20,0x29,0x20,0x24,0x90, +0x24,0x90,0x20,0x00,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* ѳ */ +0x02,0x00,0x7B,0xF0,0x24,0x10,0x23,0xD0,0x3A,0x50,0x2A,0x50,0x2B,0xD0,0x5A,0x50, +0x0A,0x50,0x13,0xD0,0x22,0x10,0x40,0x60,0x00,0x00, +/* Ѵ */ +0x00,0x00,0x5F,0xC0,0x24,0x40,0x04,0x40,0x04,0x40,0x5F,0xC0,0x24,0x40,0x04,0x50, +0x14,0x50,0x24,0x50,0x44,0x30,0x04,0x10,0x00,0x00, +/* ѵ */ +0x24,0x10,0x14,0x90,0x04,0x90,0x04,0x90,0x64,0x90,0x24,0x90,0x24,0x90,0x24,0x90, +0x2C,0x90,0x34,0x90,0x28,0x90,0x10,0x10,0x00,0x00, +/* Ѷ */ +0x20,0x00,0x17,0xC0,0x02,0x40,0x02,0x40,0x72,0x40,0x17,0xC0,0x12,0x40,0x12,0x40, +0x12,0x40,0x1A,0x50,0x12,0x30,0x02,0x10,0x00,0x00, +/* ѷ */ +0x40,0x40,0x2E,0x40,0x02,0x40,0x04,0x40,0x05,0x60,0x67,0x50,0x3D,0x50,0x26,0x50, +0x24,0x40,0x2C,0xC0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* Ѹ */ +0x40,0x00,0x2F,0xC0,0x02,0x40,0x02,0x40,0x02,0x40,0x6F,0xC0,0x22,0x40,0x22,0x50, +0x22,0x30,0x22,0x10,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* ѹ */ +0x00,0x00,0x3F,0xF0,0x20,0x00,0x21,0x00,0x21,0x00,0x21,0x00,0x2F,0xE0,0x21,0x00, +0x21,0x40,0x21,0x20,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* Ѻ */ +0x10,0x00,0x17,0xF0,0x14,0x90,0x7C,0x90,0x17,0xF0,0x14,0x90,0x1C,0x90,0x77,0xF0, +0x14,0x90,0x10,0x80,0x10,0x80,0x30,0x80,0x00,0x00, +/* ѻ */ +0x00,0x80,0x7D,0xE0,0x09,0x20,0x29,0xA0,0x49,0x20,0x7D,0x60,0x19,0x00,0x29,0xF0, +0x28,0x10,0x4B,0xD0,0x08,0x10,0x18,0x60,0x00,0x00, +/* Ѽ */ +0x00,0x80,0x7D,0xE0,0x55,0x20,0x55,0xA0,0x7D,0x20,0x55,0x60,0x55,0x00,0x7D,0xF0, +0x54,0x10,0x13,0xD0,0x10,0x10,0x10,0x60,0x00,0x00, +/* ѽ */ +0x00,0x00,0x7B,0xF0,0x48,0x20,0x49,0x20,0x4A,0x20,0x4B,0xF0,0x48,0x60,0x48,0xA0, +0x79,0x20,0x4A,0x20,0x04,0x20,0x00,0x60,0x00,0x00, +/* Ѿ */ +0x40,0x10,0x20,0x20,0x10,0x40,0x08,0x80,0x05,0x00,0x02,0x00,0x02,0x00,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* ѿ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x00,0x80,0x20,0x80,0x3F,0xF0, +0x02,0x80,0x04,0x80,0x18,0x80,0x61,0x80,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x00,0x80,0x10,0x80,0x20,0x80,0x3F,0xF0,0x01,0x80,0x02,0x80, +0x04,0x80,0x18,0x80,0x60,0x80,0x03,0x80,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x10,0x20,0x7C,0xA0,0x55,0x20,0x55,0xF0,0x7C,0x60,0x10,0xA0, +0x14,0xA0,0x1D,0x20,0x66,0x20,0x00,0x60,0x00,0x00, +/* */ +0x22,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xF0,0x21,0x00,0x2F,0xE0,0x21,0x00,0x3F,0xF0, +0x21,0x00,0x2F,0xE0,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x2F,0x70,0x44,0x00,0x1F,0x00,0x29,0x70,0x69,0x20,0x3F,0xA0,0x20,0x20, +0x2F,0x20,0x29,0x20,0x29,0x20,0x2F,0x60,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xF0,0x28,0x80,0x08,0x80,0x0B,0xE0,0x48,0x80,0x2F,0xF0,0x08,0x00, +0x08,0x80,0x2B,0xE0,0x48,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x00,0xA0,0x7C,0x80,0x09,0xF0,0x29,0x40,0x4B,0x40,0x7D,0xF0,0x19,0x40,0x29,0x40, +0x29,0xF0,0x49,0x40,0x09,0x40,0x19,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x0F,0xF0,0x72,0x40,0x52,0x40,0x52,0x40,0x5A,0x50,0x56,0x60,0x52,0x40, +0x72,0x40,0x52,0x40,0x02,0x40,0x0F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x08,0x80,0x08,0x80,0x08,0x80,0x48,0x90,0x28,0xA0,0x18,0xC0, +0x08,0x80,0x08,0x80,0x08,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xF0,0x00,0x20,0x04,0x20,0x64,0x20,0x27,0xF0,0x20,0x60,0x20,0xA0, +0x29,0x20,0x32,0x20,0x24,0x20,0x08,0xE0,0x00,0x00, +/* */ +0x7F,0xF0,0x02,0x00,0x13,0xE0,0x12,0x00,0x7F,0xF0,0x10,0x00,0x1F,0xE0,0x20,0x00, +0x3F,0xF0,0x00,0x10,0x55,0x10,0x55,0x60,0x00,0x00, +/* */ +0x07,0xF0,0x74,0x10,0x54,0x90,0x54,0x90,0x57,0xF0,0x54,0x90,0x54,0x90,0x55,0x50, +0x76,0x30,0x54,0x10,0x07,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x4F,0xF0,0x22,0x10,0x1F,0xD0,0x45,0x10,0x4A,0x90,0x5F,0xD0,0x6A,0xB0,0x4F,0x90, +0x4A,0x90,0x4F,0x90,0x4A,0x10,0x41,0xB0,0x00,0x00, +/* */ +0x17,0xF0,0x14,0x10,0x14,0x90,0x5C,0x90,0x57,0xF0,0x54,0x90,0x54,0x90,0x15,0x50, +0x16,0x30,0x2C,0x10,0x27,0xF0,0x44,0x10,0x00,0x00, +/* */ +0x01,0x00,0x5F,0xF0,0x22,0x80,0x04,0x40,0x09,0x20,0x5F,0xF0,0x29,0x20,0x0F,0xE0, +0x09,0x20,0x2F,0xE0,0x49,0x10,0x00,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x3E,0xC0,0x08,0xA0,0x0E,0x90,0x78,0x80,0x00,0x00,0x3F,0xE0, +0x25,0x20,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x04,0x80,0x14,0xA0,0x0C,0xC0,0x04,0x80,0x3F,0xF0,0x20,0x00, +0x20,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x11,0x20,0x11,0x20,0x21,0x20,0x3B,0xF0,0x69,0x20,0x29,0x20, +0x29,0x20,0x39,0x20,0x29,0x20,0x02,0x20,0x00,0x00, +/* */ +0x10,0x30,0x16,0xE0,0x12,0x20,0x7A,0x20,0x54,0xB0,0x54,0xA0,0x7A,0xA0,0x12,0xA0, +0x12,0xF0,0x1E,0x00,0x62,0x00,0x05,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x08,0x00,0x1F,0xE0, +0x30,0x20,0x50,0x20,0x1F,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x00,0x30,0x7B,0xC0,0x08,0x40,0x10,0x40,0x22,0x40,0x3A,0x70,0x0A,0x40,0x0A,0x40, +0x2A,0x40,0x13,0xF0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x00,0x00, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x09,0xF0,0x3E,0x40,0x14,0x80,0x09,0xF0,0x3F,0x10,0x25,0x50,0x39,0x50,0x25,0x50, +0x39,0x50,0x22,0x40,0x24,0xA0,0x59,0x10,0x00,0x00, +/* */ +0x4F,0xF0,0x24,0x10,0x07,0x90,0x48,0x90,0x51,0x10,0x44,0x10,0x59,0xD0,0x50,0x50, +0x5D,0xD0,0x50,0x50,0x5F,0xD0,0x40,0x30,0x00,0x00, +/* */ +0x02,0x00,0x12,0x20,0x22,0x40,0x05,0x80,0x18,0x60,0x60,0x10,0x02,0x00,0x12,0x20, +0x22,0x40,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x27,0xC0,0x14,0x40,0x04,0x40,0x04,0x40,0x48,0x30,0x20,0x00,0x0F,0xE0,0x08,0x20, +0x18,0x20,0x28,0x20,0x4F,0xE0,0x08,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x05,0x00,0x18,0xC0,0x62,0x30,0x1F,0xC0,0x12,0x40,0x1F,0xC0, +0x12,0x40,0x1F,0xD0,0x12,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x11,0x40,0x7A,0x20,0x14,0x90,0x13,0xE0,0x1A,0xA0,0x73,0xE0, +0x12,0xA0,0x13,0xE0,0x12,0x90,0x30,0x70,0x00,0x00, +/* */ +0x7B,0xE0,0x4A,0x20,0x4A,0x20,0x7B,0xE0,0x4A,0x20,0x4A,0x20,0x7B,0xE0,0x4A,0x90, +0x4A,0xA0,0x7A,0x40,0x4B,0x20,0x02,0x10,0x00,0x00, +/* */ +0x12,0x00,0x21,0x70,0x40,0x00,0x08,0x00,0x14,0x70,0x32,0x20,0x50,0x20,0x10,0x20, +0x11,0x20,0x12,0x20,0x14,0x20,0x10,0x60,0x00,0x00, +/* */ +0x00,0x80,0x27,0xF0,0x14,0x10,0x03,0xE0,0x40,0x80,0x27,0xF0,0x04,0x90,0x07,0xF0, +0x14,0x90,0x27,0xF0,0x42,0x20,0x04,0x10,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x7A,0x20,0x14,0x40,0x13,0xF0,0x3A,0x90,0x12,0x90,0x13,0xF0, +0x7E,0x00,0x12,0x10,0x12,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x27,0xF0,0x25,0xE0,0x25,0x20,0x25,0xE0,0x75,0x20,0x25,0xE0,0x24,0x80,0x27,0xF0, +0x25,0x20,0x34,0xC0,0x65,0x20,0x07,0xF0,0x00,0x00, +/* */ +0x05,0x00,0x7F,0xF0,0x05,0x00,0x17,0x40,0x70,0x50,0x17,0x60,0x15,0x40,0x35,0x50, +0x57,0x30,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x21,0x00,0x21,0x40,0x21,0x20,0x2F,0xF0,0x21,0x00,0x22,0x80, +0x22,0x80,0x24,0x40,0x28,0x20,0x50,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x12,0x20,0x12,0xA0,0x22,0xA0,0x3A,0xA0,0x6A,0xA0,0x2A,0xA0, +0x29,0x40,0x39,0x40,0x2A,0x50,0x04,0x30,0x00,0x00, +/* */ +0x3F,0xF0,0x25,0x40,0x25,0x20,0x2B,0xF0,0x3A,0x40,0x2E,0x40,0x2B,0xF0,0x2A,0x40, +0x2B,0xF0,0x2A,0x40,0x2A,0x40,0x4B,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x70,0x80,0x5F,0xF0,0x50,0x00,0x57,0xE0,0x50,0x00,0x57,0xE0,0x50,0x00, +0x77,0xE0,0x54,0x20,0x07,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xF0,0x08,0x40,0x04,0x80,0x3F,0xF0,0x20,0x80,0x23,0x00,0x2C,0x60, +0x21,0x80,0x2E,0x30,0x21,0xC0,0x4E,0x00,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x1A,0x20,0x50,0x40,0x51,0x00,0x52,0x30,0x52,0x10,0x13,0x70, +0x12,0x10,0x2A,0x10,0x2B,0xF0,0x42,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x5F,0xD0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x04,0x00, +0x7F,0xF0,0x08,0x80,0x07,0x00,0x38,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x17,0xF0,0x02,0x20,0x01,0x40,0x67,0xF0,0x24,0x40,0x25,0x80,0x24,0x60, +0x25,0x80,0x34,0x10,0x24,0x60,0x0B,0x80,0x00,0x00, +/* */ +0x00,0x80,0x70,0x80,0x11,0x40,0x52,0x20,0x54,0x10,0x53,0xE0,0x78,0x00,0x09,0x20, +0x1C,0xA0,0x6A,0xA0,0x0A,0x40,0x37,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x23,0xE0,0x22,0xA0,0x3A,0xA0,0x2A,0xA0,0x2A,0xA0,0x5F,0xF0, +0x08,0x80,0x11,0x40,0x22,0x20,0x44,0x10,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20,0x22,0x20,0x7F,0xF0, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x22,0x20,0x7F,0xF0,0x08,0x80,0x74,0x70,0x1F,0xC0,0x14,0x40, +0x12,0xC0,0x1F,0xF0,0x00,0x10,0x7F,0x60,0x00,0x00, +/* */ +0x08,0x80,0x70,0x80,0x13,0xE0,0x12,0xA0,0x7A,0xA0,0x12,0xA0,0x3A,0xA0,0x37,0xF0, +0x50,0x80,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x40,0x7C,0x80,0x11,0x00,0x33,0xF0,0x39,0x50,0x55,0x50, +0x12,0x90,0x14,0x90,0x11,0x10,0x12,0x60,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x40,0x7C,0x80,0x11,0x00,0x13,0xF0,0x19,0x50,0x71,0x50, +0x12,0x90,0x14,0x90,0x11,0x10,0x32,0x60,0x00,0x00, +/* */ +0x0A,0x20,0x09,0x40,0x17,0xF0,0x10,0x80,0x30,0x80,0x53,0xE0,0x10,0x80,0x10,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x57,0xE0,0x30,0xC0,0x13,0x00,0x17,0xF0,0x31,0x50, +0x52,0x50,0x14,0x90,0x21,0x10,0x46,0x60,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x3F,0xE0,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x04,0x40,0x42,0x80,0x2F,0xE0,0x01,0x00,0x01,0x00,0x4F,0xE0,0x21,0x00,0x01,0x00, +0x1F,0xF0,0x21,0x00,0x41,0x00,0x01,0x00,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x4A,0x10,0x4A,0x10,0x52,0x10,0x53,0xF0,0x4A,0x10,0x4A,0x10, +0x4A,0x10,0x72,0x10,0x43,0xF0,0x42,0x10,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x20,0x00,0x5F,0xC0,0x0A,0x40,0x3F,0xC0,0x04,0x40,0x1F,0x40, +0x04,0x40,0x7F,0xD0,0x04,0x30,0x04,0x10,0x00,0x00, +/* */ +0x09,0x00,0x0A,0x00,0x14,0xF0,0x14,0x90,0x34,0x90,0x54,0x90,0x14,0x90,0x15,0x90, +0x16,0x90,0x14,0xB0,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x12,0x20,0x51,0x40,0x37,0xF0,0x10,0x80,0x13,0xE0,0x30,0x80, +0x50,0x80,0x17,0xF0,0x20,0x80,0x40,0x80,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x10,0x40, +0x28,0xA0,0x48,0x90,0x08,0x80,0x10,0x80,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x17,0xF0,0x78,0x80,0x10,0x80,0x33,0xE0,0x38,0x80,0x50,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x04,0x40,0x5F,0xF0,0x21,0x00,0x0F,0xE0,0x01,0x00,0x5F,0xF0,0x22,0x00,0x07,0x10, +0x1D,0xA0,0x25,0x40,0x49,0x20,0x13,0x10,0x00,0x00, +/* */ +0x44,0x80,0x2E,0x80,0x0A,0xF0,0x0F,0x20,0x6A,0xA0,0x2E,0xA0,0x24,0xA0,0x3F,0x40, +0x28,0x40,0x2E,0xA0,0x33,0x10,0x5F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x51,0x40,0x57,0xF0,0x75,0x50,0x57,0xF0,0x50,0x80,0x77,0xF0, +0x51,0x20,0x53,0x20,0x50,0xC0,0x37,0x30,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x10,0x80,0x78,0x80,0x28,0x80,0x2F,0xF0,0x28,0x80,0x48,0x80, +0x29,0x40,0x11,0x40,0x2A,0x20,0x44,0x10,0x00,0x00, +/* */ +0x00,0x70,0x77,0x80,0x21,0x10,0x24,0xA0,0x22,0x00,0x73,0xE0,0x24,0x80,0x20,0x80, +0x27,0xF0,0x30,0x80,0x64,0x90,0x07,0xF0,0x00,0x00, +/* ҡ */ +0x10,0x70,0x17,0x80,0x11,0x10,0x7C,0xA0,0x12,0x00,0x13,0xE0,0x1C,0x80,0x70,0x80, +0x17,0xF0,0x10,0x80,0x14,0x90,0x37,0xF0,0x00,0x00, +/* Ң */ +0x04,0x00,0x05,0xF0,0x7E,0x40,0x02,0x80,0x03,0x10,0x3C,0xF0,0x00,0x00,0x7F,0xF0, +0x08,0x80,0x08,0x90,0x10,0x90,0x60,0x70,0x00,0x00, +/* ң */ +0x40,0x70,0x2F,0x80,0x05,0x10,0x02,0xA0,0x63,0xE0,0x24,0x80,0x2F,0xF0,0x20,0x80, +0x24,0x90,0x27,0xF0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* Ҥ */ +0x02,0x00,0x7F,0xF0,0x50,0x50,0x20,0x20,0x10,0x00,0x1F,0xE0,0x22,0x00,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* ҥ */ +0x40,0x70,0x27,0x80,0x01,0x10,0x04,0xA0,0x62,0x00,0x23,0xE0,0x24,0x80,0x20,0x80, +0x27,0xF0,0x20,0x80,0x34,0x90,0x27,0xF0,0x00,0x00, +/* Ҧ */ +0x11,0x40,0x11,0x40,0x15,0x50,0x7B,0x60,0x29,0x40,0x29,0x40,0x2B,0x60,0x4D,0x50, +0x29,0x40,0x11,0x50,0x2A,0x50,0x44,0x30,0x00,0x00, +/* ҧ */ +0x01,0x00,0x70,0x80,0x5F,0xF0,0x50,0x00,0x52,0x40,0x54,0x20,0x5A,0x50,0x52,0x40, +0x72,0x40,0x51,0x80,0x02,0x40,0x0C,0x30,0x00,0x00, +/* Ҩ */ +0x01,0xE0,0x3E,0x00,0x04,0x00,0x22,0x20,0x10,0x40,0x04,0x00,0x39,0xE0,0x20,0x20, +0x3D,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* ҩ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x11,0x00,0x25,0xF0,0x7A,0x10,0x10,0x10,0x21,0x10, +0x7C,0x90,0x00,0x10,0x0E,0x10,0x70,0x60,0x00,0x00, +/* Ҫ */ +0x00,0x00,0x7F,0xF0,0x05,0x00,0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x04,0x00,0x7F,0xF0, +0x08,0x40,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* ҫ */ +0x11,0xB0,0x12,0xD0,0x55,0xB0,0x3A,0xD0,0x11,0x20,0x7D,0xF0,0x2B,0x40,0x29,0xF0, +0x29,0x40,0x29,0xF0,0x2D,0x40,0x49,0xF0,0x00,0x00, +/* Ҭ */ +0x10,0x00,0x1F,0xF0,0x15,0x50,0x7D,0x50,0x17,0x60,0x35,0x60,0x3F,0x50,0x55,0x50, +0x15,0xD0,0x1F,0x60,0x11,0x40,0x11,0x40,0x00,0x00, +/* ҭ */ +0x00,0x80,0x07,0xF0,0x70,0x80,0x53,0xE0,0x50,0x00,0x57,0xF0,0x54,0x10,0x53,0xE0, +0x72,0x20,0x53,0xE0,0x01,0x40,0x07,0xF0,0x00,0x00, +/* Ү */ +0x00,0x00,0x7E,0xF0,0x24,0x90,0x24,0x90,0x3C,0xA0,0x24,0xA0,0x3C,0x90,0x24,0x90, +0x26,0x90,0x7C,0xE0,0x04,0x80,0x04,0x80,0x00,0x00, +/* ү */ +0x08,0x80,0x10,0x40,0x28,0xA0,0x07,0x00,0x18,0xC0,0x60,0x30,0x00,0x00,0x3F,0xE0, +0x04,0x20,0x04,0x20,0x04,0x60,0x04,0x00,0x00,0x00, +/* Ұ */ +0x00,0x00,0x7D,0xF0,0x54,0x10,0x7C,0xA0,0x54,0x40,0x7D,0xF0,0x10,0x50,0x7C,0x40, +0x10,0x40,0x1C,0x40,0x70,0x40,0x01,0xC0,0x00,0x00, +/* ұ */ +0x01,0x00,0x01,0x00,0x42,0x00,0x24,0x20,0x0F,0xF0,0x00,0x10,0x07,0xE0,0x04,0x20, +0x14,0x20,0x24,0x20,0x47,0xE0,0x04,0x20,0x00,0x00, +/* Ҳ */ +0x02,0x00,0x12,0x00,0x12,0x60,0x13,0xA0,0x1E,0x20,0x72,0x20,0x12,0x20,0x12,0x60, +0x12,0x00,0x10,0x10,0x10,0x10,0x0F,0xF0,0x00,0x00, +/* ҳ */ +0x7F,0xF0,0x02,0x00,0x04,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x22,0x20,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* Ҵ */ +0x21,0x00,0x20,0x80,0x2F,0xF0,0x72,0x80,0x22,0xF0,0x24,0x90,0x35,0x50,0x6D,0x20, +0x26,0xA0,0x24,0x40,0x24,0xA0,0x65,0x10,0x00,0x00, +/* ҵ */ +0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x48,0x90,0x28,0xA0,0x18,0xC0,0x08,0x80, +0x08,0x80,0x08,0x80,0x08,0x80,0x7F,0xF0,0x00,0x00, +/* Ҷ */ +0x00,0x80,0x78,0x80,0x48,0x80,0x48,0x80,0x48,0x80,0x4F,0xF0,0x48,0x80,0x48,0x80, +0x78,0x80,0x48,0x80,0x00,0x80,0x00,0x80,0x00,0x00, +/* ҷ */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x02,0x40, +0x02,0x80,0x03,0x10,0x0C,0xD0,0x70,0x30,0x00,0x00, +/* Ҹ */ +0x01,0x00,0x70,0x80,0x57,0xF0,0x52,0x80,0x72,0xF0,0x54,0x90,0x55,0x50,0x7D,0x20, +0x56,0xA0,0x54,0x40,0x54,0xA0,0x35,0x10,0x00,0x00, +/* ҹ */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x09,0x00,0x09,0xE0,0x12,0x20,0x34,0xA0,0x5A,0x40, +0x11,0x40,0x10,0x80,0x11,0x40,0x16,0x30,0x00,0x00, +/* Һ */ +0x02,0x00,0x41,0x00,0x2F,0xF0,0x05,0x00,0x05,0xE0,0x49,0x20,0x2A,0xA0,0x1A,0x40, +0x0D,0x40,0x28,0x80,0x49,0x40,0x0A,0x30,0x00,0x00, +/* һ */ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* Ҽ */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x40,0x10,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x00,0x00, +/* ҽ */ +0x00,0x00,0x3F,0xF0,0x24,0x00,0x24,0x00,0x2F,0xE0,0x31,0x00,0x21,0x00,0x3F,0xF0, +0x22,0x80,0x24,0x40,0x28,0x20,0x3F,0xF0,0x00,0x00, +/* Ҿ */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x78,0x00,0x17,0xF0,0x12,0x20,0x1B,0xE0,0x72,0x20, +0x13,0xE0,0x12,0x30,0x17,0xE0,0x30,0x20,0x00,0x00, +/* ҿ */ +0x21,0x00,0x20,0x80,0x37,0xF0,0x40,0x80,0x71,0x00,0x22,0x90,0x26,0xA0,0x7A,0x40, +0x22,0x40,0x2A,0x20,0x33,0x10,0x22,0x00,0x00,0x00, +/* */ +0x09,0x00,0x08,0x80,0x17,0xF0,0x10,0x80,0x31,0x00,0x52,0x90,0x16,0xA0,0x1A,0x40, +0x12,0x40,0x12,0x20,0x13,0x10,0x12,0x00,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x21,0x20,0x21,0x20,0x6F,0xF0,0x21,0x20,0x21,0x20,0x27,0xE0, +0x21,0x20,0x21,0x00,0x22,0x00,0x24,0x00,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x7F,0xF0,0x04,0x00,0x0A,0x20,0x0A,0x40,0x19,0x80,0x29,0x00, +0x48,0x80,0x0A,0x40,0x0C,0x30,0x08,0x00,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xF0,0x48,0x40,0x48,0x80,0x5D,0xF0,0x55,0x10,0x55,0x50,0x55,0x50, +0x5D,0x50,0x48,0x40,0x48,0xA0,0x7D,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x20,0x3F,0xE0,0x22,0x00,0x3F,0xF0, +0x02,0x10,0x05,0x30,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x41,0x00,0x2F,0xE0,0x09,0x20,0x0F,0xE0,0x61,0x00,0x3F,0xF0,0x20,0x00,0x2F,0xE0, +0x29,0x20,0x2A,0xA0,0x24,0x40,0x5F,0xF0,0x00,0x00, +/* */ +0x09,0x00,0x71,0xE0,0x12,0x20,0x15,0x40,0x78,0x80,0x11,0x40,0x32,0xF0,0x39,0x10, +0x52,0xA0,0x10,0x40,0x11,0x80,0x16,0x00,0x00,0x00, +/* */ +0x09,0x00,0x08,0x80,0x10,0x90,0x14,0x10,0x34,0x10,0x52,0x20,0x12,0x20,0x11,0x40, +0x10,0x80,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x38,0x80,0x2B,0xF0,0x28,0x80,0x3B,0xF0,0x28,0x90,0x2B,0xF0,0x3A,0x80,0x2B,0xF0, +0x28,0x90,0x28,0xB0,0x29,0x40,0x5A,0x30,0x00,0x00, +/* */ +0x29,0xF0,0x30,0x10,0x24,0xA0,0x1C,0x40,0x21,0xF0,0x3C,0x50,0x48,0x40,0x09,0x70, +0x7F,0x40,0x09,0x40,0x15,0x40,0x22,0xF0,0x00,0x00, +/* */ +0x20,0xE0,0x17,0x00,0x04,0x00,0x04,0x00,0x47,0xF0,0x24,0x40,0x04,0x40,0x04,0x40, +0x14,0x40,0x28,0x40,0x48,0x40,0x10,0x40,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40, +0x1F,0xC0,0x10,0x40,0x10,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x13,0xF0,0x10,0x80,0x7B,0xF0,0x28,0x90,0x2B,0xF0,0x2A,0x80,0x4B,0xF0, +0x28,0x90,0x10,0xB0,0x29,0x40,0x4A,0x30,0x00,0x00, +/* */ +0x0F,0xC0,0x10,0x40,0x7F,0xF0,0x54,0x90,0x11,0xE0,0x7C,0x40,0x13,0xF0,0x55,0x50, +0x0A,0xC0,0x7F,0xF0,0x08,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x11,0x40,0x7A,0x20,0x17,0xF0,0x30,0x20,0x3B,0xA0,0x52,0xA0, +0x12,0xA0,0x13,0xA0,0x12,0x20,0x10,0x60,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x10,0x50,0x7D,0x10,0x55,0x10,0x55,0x10,0x54,0xA0,0x7C,0xA0, +0x10,0x40,0x14,0x40,0x1C,0xA0,0x65,0x10,0x00,0x00, +/* */ +0x11,0x00,0x17,0xE0,0x22,0x40,0x24,0x20,0x6F,0xF0,0x20,0x20,0x27,0xA0,0x24,0xA0, +0x24,0xA0,0x27,0xA0,0x24,0x20,0x20,0xE0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x00,0x20,0x00,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x00, +0x20,0x00,0x20,0x10,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xC0,0x00,0x80,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00, +0x20,0x20,0x20,0x20,0x20,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x04,0x00,0x08,0x80,0x10,0x40,0x3F,0xE0,0x08,0x20,0x1F,0xC0,0x22,0x00,0x02,0x00, +0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x00,0x40,0x24,0x40,0x22,0x40,0x22,0x40,0x20,0x40,0x20,0x40,0x24,0x40,0x28,0x80, +0x30,0x80,0x21,0x40,0x06,0x20,0x18,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x00,0x40,0x01,0x80,0x06,0x00, +0x18,0x00,0x20,0x10,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x12,0x00,0x14,0xF0,0x7C,0x90,0x14,0x90,0x14,0x90,0x1C,0x90,0x75,0x90, +0x16,0x90,0x14,0xB0,0x10,0x80,0x30,0x80,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x10,0x00,0x1F,0xF0,0x24,0x90, +0x44,0x90,0x09,0x10,0x12,0x10,0x24,0xE0,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x20,0x00,0x20,0x10,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0xF0,0x56,0x00,0x54,0x00,0x55,0xE0,0x54,0x20,0x54,0x40, +0x54,0x80,0x5D,0x10,0x65,0x10,0x00,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x0F,0xE0,0x10,0x20,0x10,0x40,0x30,0x80,0x51,0x00,0x12,0x00,0x12,0x00, +0x14,0x10,0x14,0x10,0x14,0x10,0x13,0xF0,0x00,0x00, +/* */ +0x0B,0xC0,0x12,0x40,0x22,0x40,0x4A,0x40,0x14,0x30,0x30,0x00,0x57,0xE0,0x12,0x20, +0x11,0x40,0x10,0x80,0x11,0x40,0x16,0x30,0x00,0x00, +/* */ +0x00,0x80,0x3B,0xE0,0x29,0x40,0x2F,0xF0,0x3A,0x20,0x2B,0xE0,0x2A,0x20,0x3B,0xE0, +0x28,0x80,0x2A,0x20,0x2D,0x50,0x59,0xD0,0x00,0x00, +/* */ +0x44,0x00,0x27,0xC0,0x08,0x40,0x1F,0xE0,0x69,0x20,0x2F,0xE0,0x22,0x80,0x25,0x40, +0x29,0x10,0x30,0xF0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x28,0x80,0x33,0xE0,0x28,0xA0,0x1B,0xF0,0x20,0xA0,0x3B,0xE0,0x50,0x80,0x13,0xE0, +0x7C,0x80,0x13,0xF0,0x28,0x80,0x44,0x80,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x53,0xC0,0x32,0x40,0x14,0x30,0x18,0x00,0x37,0xE0, +0x52,0x20,0x12,0x40,0x21,0x80,0x4E,0x70,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x08,0x80,0x08,0x80,0x08,0x80,0x28,0xA0,0x28,0x90, +0x48,0x90,0x08,0x80,0x10,0x80,0x21,0x80,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x0A,0x20,0x19,0x40,0x6C,0xC0,0x08,0x30,0x3F,0xE0,0x28,0xA0, +0x37,0x60,0x25,0x20,0x27,0x20,0x20,0x60,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x10,0xE0,0x7C,0xA0,0x44,0xA0,0x29,0x30,0x7E,0x00,0x10,0xE0,0x6A,0xA0,0x14,0xA0, +0x6E,0xA0,0x14,0x40,0x64,0xA0,0x19,0x10,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x10,0x20,0x58,0x40,0x54,0x80,0x51,0x00,0x52,0x00,0x12,0x00, +0x14,0x10,0x14,0x10,0x14,0x10,0x13,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x20,0x22,0x20,0x20,0x40,0x10,0x40,0x08,0x80,0x05,0x00,0x02,0x00, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x20,0x20,0x10,0x40,0x08,0x80,0x7F,0xF0,0x10,0x40,0x20,0x20,0x40,0x10,0x3F,0xE0, +0x25,0x20,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x48,0x20,0x24,0x40,0x00,0x00,0x1F,0xF0,0x44,0x40,0x28,0x20,0x10,0x10,0x0F,0xE0, +0x0A,0xA0,0x2A,0xA0,0x4A,0xA0,0x1F,0xF0,0x00,0x00, +/* */ +0x44,0x10,0x24,0x60,0x07,0x80,0x04,0x10,0x63,0xF0,0x20,0x00,0x27,0xF0,0x24,0x10, +0x27,0xF0,0x24,0x10,0x37,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x21,0x00,0x10,0x80,0x00,0x90,0x04,0x10,0x74,0x10,0x12,0x20,0x12,0x20,0x11,0x40, +0x14,0x80,0x19,0x40,0x12,0x20,0x04,0x10,0x00,0x00, +/* */ +0x41,0x00,0x20,0x80,0x0F,0xF0,0x08,0x10,0x67,0xE0,0x24,0x20,0x27,0xE0,0x24,0x20, +0x27,0xE0,0x24,0x20,0x34,0x20,0x2F,0xF0,0x00,0x00, +/* */ +0x27,0xE0,0x12,0x20,0x01,0x40,0x00,0x80,0x61,0x40,0x26,0xB0,0x20,0x80,0x23,0xE0, +0x28,0x80,0x37,0xF0,0x20,0x80,0x00,0x80,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x00,0x20,0x10,0x1F,0xF0,0x08,0x40,0x08,0x40, +0x7F,0xF0,0x08,0x40,0x10,0x40,0x20,0x40,0x00,0x00, +/* */ +0x7D,0xF0,0x24,0x90,0x14,0x50,0x3F,0xD0,0x12,0x40,0x1F,0xC0,0x12,0x40,0x3F,0xE0, +0x08,0x80,0x7F,0xF0,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x3D,0xE0,0x04,0x20,0x25,0x20,0x14,0xA0,0x25,0x20,0x04,0x00,0x02,0x00,0x3F,0xE0, +0x00,0x00,0x10,0x40,0x08,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x17,0xE0,0x12,0x20,0x21,0x40,0x48,0x80,0x71,0x40,0x16,0xB0,0x20,0x80,0x73,0xE0, +0x00,0x80,0x17,0xF0,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x20,0x20,0x22,0x20,0x2F,0xA0,0x22,0x20, +0x25,0x20,0x28,0xA0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3D,0xF0,0x25,0x10,0x25,0x10,0x29,0xF0,0x25,0x10, +0x35,0xF0,0x29,0x10,0x22,0x10,0x24,0x70,0x00,0x00, +/* */ +0x7F,0xF0,0x40,0x10,0x42,0x10,0x42,0x10,0x5F,0xD0,0x42,0x10,0x45,0x10,0x48,0x90, +0x50,0x50,0x40,0x10,0x7F,0xF0,0x40,0x10,0x00,0x00, +/* */ +0x1C,0x00,0x21,0xE0,0x3D,0x20,0x25,0x20,0x3E,0x30,0x24,0x00,0x3D,0xE0,0x21,0x20, +0x3D,0x20,0x24,0xC0,0x25,0x20,0x4E,0x10,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x10,0x40,0x08,0x80,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x7B,0xE0,0x4A,0x20,0x4A,0x20,0x53,0xE0,0x52,0x20,0x4A,0x20,0x4B,0xE0,0x4A,0x20, +0x4A,0x20,0x72,0x20,0x44,0x20,0x48,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x10,0x7A,0x90,0x2A,0x90,0x2B,0xF0,0x2A,0x90,0x4B,0x50, +0x2A,0x30,0x12,0x10,0x2B,0xF0,0x4A,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x49,0x40,0x49,0x40,0x4A,0x20,0x4C,0x90,0x48,0x00,0x4B,0xE0, +0x78,0x20,0x48,0x40,0x00,0x40,0x00,0x80,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x3A,0x20,0x43,0xE0,0x7A,0x20,0x22,0x20,0x23,0xE0,0x7A,0x90, +0x22,0xA0,0x2A,0x40,0x33,0x20,0x22,0x10,0x00,0x00, +/* */ +0x00,0xF0,0x5F,0x00,0x22,0x20,0x09,0x40,0x04,0xE0,0x4F,0x00,0x21,0x00,0x01,0x00, +0x1F,0xF0,0x21,0x00,0x41,0x00,0x0F,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x21,0x00,0x21,0x00,0x39,0xF0,0x4A,0x10,0x12,0x20,0x24,0x80,0x20,0x80,0x20,0x80, +0x21,0x40,0x29,0x40,0x32,0x20,0x24,0x10,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x02,0x20,0x02,0x20,0x7F,0xF0,0x04,0x20,0x04,0x20,0x3F,0xE0, +0x08,0x20,0x08,0x00,0x10,0x00,0x20,0x00,0x00,0x00, +/* */ +0x00,0x20,0x3E,0x20,0x02,0x20,0x02,0x20,0x3E,0x20,0x20,0x20,0x20,0x20,0x3E,0x20, +0x02,0x20,0x02,0x20,0x02,0x20,0x1C,0x20,0x00,0x00, +/* */ +0x02,0x00,0x73,0xC0,0x54,0x40,0x5B,0xE0,0x60,0x20,0x53,0xE0,0x50,0x20,0x57,0xE0, +0x61,0x00,0x4A,0xA0,0x4A,0x50,0x51,0xD0,0x00,0x00, +/* ӡ */ +0x0C,0x00,0x71,0xF0,0x41,0x10,0x41,0x10,0x7D,0x10,0x41,0x10,0x41,0x10,0x45,0x10, +0x59,0x10,0x61,0x70,0x01,0x00,0x01,0x00,0x00,0x00, +/* Ӣ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20, +0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* ӣ */ +0x27,0x70,0x25,0x50,0x25,0x50,0x75,0x50,0x22,0x20,0x25,0x50,0x71,0x00,0x6F,0xF0, +0x22,0x40,0x26,0x40,0x21,0x80,0x2E,0x60,0x00,0x00, +/* Ӥ */ +0x7D,0xF0,0x45,0x10,0x55,0x50,0x55,0x50,0x28,0xA0,0x45,0x10,0x04,0x00,0x7F,0xF0, +0x08,0x40,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* ӥ */ +0x01,0x00,0x3F,0xF0,0x25,0x40,0x2B,0xF0,0x2E,0x40,0x3B,0xF0,0x2A,0x40,0x2F,0xF0, +0x29,0x20,0x2F,0xF0,0x40,0x10,0x1F,0xB0,0x00,0x00, +/* Ӧ */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x20,0x00,0x22,0x00,0x21,0x20,0x29,0x20,0x25,0x20, +0x24,0x40,0x24,0x40,0x20,0x80,0x5F,0xF0,0x00,0x00, +/* ӧ */ +0x27,0x70,0x25,0x50,0x45,0x50,0x55,0x50,0x62,0x20,0x25,0x50,0x41,0x00,0x6F,0xF0, +0x02,0x40,0x16,0x40,0x61,0x80,0x0E,0x60,0x00,0x00, +/* Ө */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x40,0x10,0x3F,0xE0,0x02,0x00,0x02,0x00, +0x1F,0xC0,0x02,0x80,0x02,0x40,0x7F,0xF0,0x00,0x00, +/* ө */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x42,0x10,0x3F,0xE0,0x22,0x20,0x22,0x20, +0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x10,0x00,0x00, +/* Ӫ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* ӫ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x7F,0xF0,0x42,0x10,0x12,0x20,0x15,0x20, +0x25,0x40,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* Ӭ */ +0x11,0xF0,0x11,0x10,0x11,0xF0,0x7C,0x40,0x55,0xF0,0x55,0x50,0x7D,0xF0,0x11,0x50, +0x15,0xF0,0x1D,0x40,0x64,0x50,0x00,0x30,0x00,0x00, +/* ӭ */ +0x42,0x00,0x2C,0xF0,0x08,0x90,0x08,0x90,0x68,0x90,0x28,0x90,0x2A,0x90,0x2C,0x90, +0x28,0xB0,0x20,0x80,0x20,0x80,0x5F,0xF0,0x00,0x00, +/* Ӯ */ +0x02,0x00,0x7F,0xF0,0x20,0x00,0x3F,0xE0,0x00,0x00,0x70,0x70,0x57,0xD0,0x74,0x50, +0x55,0x70,0x75,0x50,0x53,0x50,0x34,0x90,0x00,0x00, +/* ӯ */ +0x00,0x00,0x7F,0xC0,0x10,0x40,0x1E,0x80,0x2A,0xE0,0x24,0x20,0x4A,0xC0,0x00,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* Ӱ */ +0x3E,0x10,0x22,0x10,0x3E,0x20,0x22,0x40,0x3E,0x10,0x08,0x10,0x7F,0x20,0x22,0x40, +0x3E,0x10,0x08,0x10,0x2A,0x20,0x59,0x40,0x00,0x00, +/* ӱ */ +0x49,0xF0,0x70,0x40,0x44,0x80,0x3D,0xF0,0x09,0x10,0x31,0x50,0x11,0x50,0x7D,0x50, +0x11,0x50,0x38,0x40,0x54,0xA0,0x11,0x10,0x00,0x00, +/* Ӳ */ +0x00,0x00,0x7B,0xF0,0x10,0x80,0x13,0xE0,0x22,0xA0,0x3B,0xE0,0x6A,0xA0,0x2B,0xE0, +0x2C,0x80,0x2A,0x80,0x39,0x80,0x2A,0x70,0x00,0x00, +/* ӳ */ +0x00,0x80,0x78,0x80,0x4B,0xE0,0x4A,0xA0,0x4A,0xA0,0x7A,0xA0,0x4A,0xA0,0x4F,0xF0, +0x48,0x80,0x79,0x40,0x4A,0x20,0x04,0x10,0x00,0x00, +/* Ӵ */ +0x02,0x40,0x72,0x40,0x54,0x70,0x55,0x90,0x56,0x10,0x52,0x90,0x54,0x50,0x57,0x50, +0x70,0x10,0x51,0x10,0x06,0x10,0x00,0x60,0x00,0x00, +/* ӵ */ +0x20,0x00,0x27,0xF0,0x24,0x90,0x74,0x90,0x27,0xF0,0x24,0x90,0x34,0x90,0x67,0xF0, +0x24,0x90,0x24,0x90,0x24,0x90,0x68,0x70,0x00,0x00, +/* Ӷ */ +0x10,0x00,0x17,0xF0,0x24,0x90,0x24,0x90,0x67,0xF0,0x24,0x90,0x24,0x90,0x27,0xF0, +0x24,0x90,0x24,0x90,0x24,0x90,0x28,0x70,0x00,0x00, +/* ӷ */ +0x38,0x80,0x2F,0xF0,0x2A,0x40,0x3A,0xA0,0x2D,0xF0,0x2E,0xA0,0x3A,0xF0,0x2D,0xA0, +0x2E,0xF0,0x2A,0xA0,0x2C,0xF0,0x58,0x80,0x00,0x00, +/* Ӹ */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x37,0xF0,0x14,0x90,0x17,0xF0,0x34,0x90, +0x57,0xF0,0x14,0x90,0x24,0x90,0x48,0x30,0x00,0x00, +/* ӹ */ +0x01,0x00,0x3F,0xF0,0x21,0x00,0x2F,0xE0,0x21,0x20,0x3F,0xF0,0x21,0x20,0x2F,0xE0, +0x29,0x20,0x2F,0xE0,0x49,0x20,0x08,0x60,0x00,0x00, +/* Ӻ */ +0x02,0x00,0x7F,0xF0,0x21,0x40,0x29,0x20,0x4B,0xF0,0x76,0x40,0x23,0xF0,0x4A,0x40, +0x7B,0xF0,0x12,0x40,0x23,0xF0,0x42,0x00,0x00,0x00, +/* ӻ */ +0x7B,0xE0,0x48,0x20,0x49,0x40,0x78,0x80,0x13,0xF0,0x12,0x90,0x5B,0xF0,0x52,0x90, +0x53,0xF0,0x5A,0x90,0x62,0x90,0x02,0x30,0x00,0x00, +/* Ӽ */ +0x11,0xE0,0x10,0x20,0x10,0xA0,0x7C,0x40,0x55,0xF0,0x55,0x50,0x7D,0xF0,0x11,0x50, +0x15,0xF0,0x1D,0x50,0x65,0x50,0x01,0x30,0x00,0x00, +/* ӽ */ +0x03,0x00,0x70,0xC0,0x50,0x00,0x53,0x80,0x50,0x90,0x56,0xA0,0x52,0xC0,0x52,0xC0, +0x72,0xA0,0x54,0xA0,0x08,0x90,0x01,0x80,0x00,0x00, +/* Ӿ */ +0x03,0x00,0x40,0xC0,0x20,0x00,0x0F,0x00,0x01,0x80,0x5D,0x90,0x25,0xA0,0x05,0x40, +0x09,0x40,0x29,0x20,0x51,0x10,0x03,0x00,0x00,0x00, +/* ӿ */ +0x27,0xE0,0x10,0x20,0x01,0x40,0x00,0x80,0x47,0xF0,0x24,0x90,0x07,0xF0,0x04,0x90, +0x17,0xF0,0x24,0x90,0x44,0x90,0x04,0x30,0x00,0x00, +/* */ +0x06,0x00,0x01,0x80,0x1E,0x00,0x02,0x00,0x03,0x10,0x7B,0x20,0x0A,0xC0,0x12,0x80, +0x12,0x40,0x22,0x20,0x42,0x10,0x06,0x00,0x00,0x00, +/* */ +0x3F,0xC0,0x04,0x80,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x00,0x60,0x2A,0x20,0x29,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x3F,0xC0,0x04,0x80,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x04,0x00,0x7F,0xE0,0x08,0x20,0x30,0xC0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x22,0x20,0x40,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x0A,0x40,0x4A,0x50,0x52,0x90,0x56,0xB0,0x5A,0xD0,0x4A,0x50,0x56,0xB0, +0x5E,0xF0,0x42,0x10,0x7F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x12,0x40,0x12,0x20,0x22,0x00,0x2F,0xF0,0x62,0x80,0x22,0x80,0x22,0x80,0x22,0x80, +0x24,0x80,0x24,0x90,0x28,0x90,0x30,0x70,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x15,0xF0,0x35,0x20,0x56,0xA0,0x14,0x40,0x14,0xA0,0x11,0x10, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x11,0x40,0x11,0x20,0x11,0x00,0x5B,0xF0,0x55,0x40,0x51,0x40,0x51,0x40,0x11,0x40, +0x11,0x40,0x12,0x50,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x04,0x80,0x04,0x40,0x04,0x00,0x7F,0xF0,0x05,0x00,0x09,0x00,0x09,0x00,0x09,0x00, +0x11,0x00,0x11,0x10,0x21,0x10,0x40,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x22,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x08,0x00,0x08,0x70,0x08,0x50,0x7F,0x50,0x49,0x60,0x49,0x60,0x7F,0x50,0x49,0x50, +0x49,0x50,0x49,0x60,0x7F,0x40,0x41,0x40,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x38,0x80,0x47,0xF0,0x74,0x90,0x24,0x90,0x27,0xF0,0x7C,0x90, +0x24,0x90,0x24,0x90,0x37,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x09,0x20,0x29,0x10,0x11,0x00,0x2B,0xF0,0x49,0x40,0x09,0x40,0x19,0x40,0x29,0x40, +0x49,0x40,0x0A,0x50,0x0A,0x50,0x34,0x30,0x00,0x00, +/* */ +0x00,0x80,0x20,0x80,0x17,0xF0,0x04,0x90,0x44,0x90,0x24,0x90,0x07,0xF0,0x04,0x90, +0x14,0x90,0x24,0x90,0x47,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x08,0x80,0x44,0x80,0x3E,0xF0,0x09,0x00,0x08,0xE0,0x4E,0x20,0x2A,0x40,0x0B,0xF0, +0x0A,0x40,0x2A,0x40,0x4A,0x40,0x16,0xC0,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x05,0x00,0x3F,0xE0,0x25,0x20,0x25,0x20,0x28,0xE0,0x30,0x20, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x7F,0xF0,0x08,0x00,0x1F,0xE0,0x30,0x20,0x5F,0xE0,0x10,0x20, +0x1F,0xE0,0x10,0x20,0x10,0x20,0x10,0x60,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x7F,0xF0,0x08,0x00,0x08,0x00,0x0F,0xC0,0x14,0x40,0x14,0x40, +0x22,0x80,0x21,0x00,0x46,0xC0,0x18,0x30,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x04,0x00,0x04,0x00,0x08,0x00,0x0F,0xE0,0x18,0x20, +0x28,0x20,0x48,0x20,0x0F,0xE0,0x08,0x20,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x17,0xF0,0x10,0x80,0x31,0x00,0x51,0x00,0x13,0xF0,0x16,0x10, +0x1A,0x10,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x08,0x80,0x70,0x80,0x10,0x80,0x57,0xF0,0x3A,0x90,0x12,0x90,0x7B,0xF0,0x12,0x90, +0x3A,0x90,0x56,0x90,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x20,0x60,0x13,0x80,0x00,0x80,0x07,0xF0,0x72,0xA0,0x14,0x90,0x13,0xE0,0x11,0x20, +0x15,0x70,0x1A,0x10,0x12,0x10,0x04,0x60,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x10,0x20,0x10,0x20,0x10,0x40,0x08,0x40,0x08,0x80,0x05,0x00, +0x02,0x00,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x24,0x80,0x25,0xF0,0x48,0x90,0x78,0x90,0x10,0x90,0x20,0x90, +0x48,0x90,0x7D,0x10,0x05,0x10,0x02,0x60,0x00,0x00, +/* */ +0x40,0x00,0x27,0xF0,0x00,0x80,0x00,0x80,0x60,0x80,0x2F,0xF0,0x20,0x80,0x20,0x80, +0x20,0x80,0x23,0x80,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x08,0x40,0x44,0x40,0x20,0xA0,0x1E,0xA0,0x09,0x10,0x48,0x40,0x2E,0x20,0x0A,0x20, +0x0A,0x80,0x2A,0x40,0x4A,0x20,0x16,0x20,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x11,0x40,0x12,0x20,0x7D,0xD0,0x10,0x00,0x37,0x10,0x3D,0x50,0x57,0x50, +0x15,0x50,0x17,0x50,0x15,0x10,0x15,0x30,0x00,0x00, +/* */ +0x03,0xE0,0x02,0x00,0x3F,0xF0,0x22,0x90,0x2F,0x20,0x23,0xE0,0x24,0x40,0x27,0xC0, +0x21,0x00,0x2F,0xE0,0x22,0x80,0x4C,0x70,0x00,0x00, +/* */ +0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x42,0x90, +0x4F,0xB0,0x04,0x00,0x2A,0xA0,0x47,0x90,0x00,0x00, +/* */ +0x12,0x60,0x27,0x20,0x22,0x20,0x34,0x60,0x27,0x20,0x22,0x20,0x37,0x60,0x22,0x20, +0x7F,0xF0,0x00,0x00,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x6F,0xB0,0x02,0x00,0x02,0x00,0x3F,0xE0, +0x02,0x00,0x12,0x40,0x22,0x20,0x46,0x10,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x18,0xC0,0x6F,0xB0,0x00,0x00,0x3E,0x20,0x22,0xA0,0x3E,0xA0, +0x22,0xA0,0x3E,0xA0,0x22,0x20,0x26,0x60,0x00,0x00, +/* */ +0x41,0x00,0x22,0x80,0x04,0x40,0x1B,0xB0,0x00,0x00,0x6E,0x20,0x2A,0xA0,0x2E,0xA0, +0x2A,0xA0,0x2E,0x20,0x2A,0x60,0x5F,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x1F,0x80,0x20,0x80,0x7F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x11,0x40,0x1A,0x20,0x55,0xD0,0x50,0x00,0x57,0x10,0x55,0x50,0x17,0x50, +0x15,0x50,0x17,0x50,0x15,0x10,0x15,0x30,0x00,0x00, +/* */ +0x21,0x00,0x12,0x80,0x04,0x40,0x0B,0xB0,0x40,0x00,0x2F,0x10,0x09,0x50,0x0F,0x50, +0x19,0x50,0x2F,0x50,0x49,0x10,0x0B,0x30,0x00,0x00, +/* */ +0x04,0x00,0x47,0x80,0x28,0x80,0x1F,0xE0,0x09,0x20,0x49,0x20,0x2F,0xE0,0x09,0x20, +0x09,0x20,0x2F,0xE0,0x40,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x73,0xE0,0x52,0xA0,0x53,0xE0,0x52,0xA0,0x62,0xA0,0x63,0xE0,0x50,0x80,0x57,0xF0, +0x54,0x90,0x65,0xD0,0x44,0x50,0x44,0x30,0x00,0x00, +/* */ +0x3F,0xE0,0x00,0x40,0x0C,0x80,0x03,0x00,0x00,0x80,0x7F,0xF0,0x02,0x10,0x02,0x20, +0x02,0x40,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x12,0x20,0x7B,0xE0,0x28,0x00,0x2B,0xE0,0x28,0x80,0x48,0x80, +0x2F,0xF0,0x11,0x40,0x2A,0x20,0x44,0x10,0x00,0x00, +/* */ +0x7F,0xF0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x42,0x10,0x52,0x90,0x4A,0x50,0x42,0x10, +0x52,0x90,0x4A,0x50,0x42,0x10,0x40,0x70,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x1F,0xF0,0x20,0x00,0x20,0x00,0x3F,0xE0,0x00,0x20,0x00,0x20, +0x7F,0xA0,0x00,0x20,0x00,0x20,0x01,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0xF0,0x54,0x80,0x55,0x00,0x55,0xF0,0x54,0x10,0x54,0x10, +0x57,0xD0,0x5C,0x10,0x64,0x10,0x00,0x60,0x00,0x00, +/* */ +0x01,0xF0,0x7E,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0, +0x42,0x10,0x5F,0xD0,0x40,0x50,0x40,0x30,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x40,0x10,0x1F,0xC0,0x02,0x00,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x4F,0xF0,0x21,0x00,0x07,0xE0,0x02,0x20,0x62,0x20,0x2F,0xF0,0x20,0x00,0x27,0xE0, +0x24,0x20,0x34,0x20,0x27,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xF0,0x04,0x10,0x45,0x10,0x24,0x90,0x14,0x50,0x04,0x10,0x14,0x50, +0x24,0x90,0x45,0x10,0x04,0x10,0x1C,0x70,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00, +0x02,0x80,0x02,0x40,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x50,0x20,0x40,0x27,0xF0,0x20,0x40,0x77,0x40,0x25,0x50,0x25,0x50,0x27,0x60, +0x20,0x60,0x31,0x50,0x66,0xB0,0x01,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0, +0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x10,0x00,0x10,0xF0,0x7F,0x90,0x20,0x90,0x3E,0xA0,0x62,0xA0,0x3E,0x90,0x22,0x90, +0x3E,0x90,0x22,0xE0,0x22,0x80,0x26,0x80,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x48,0x80,0x48,0x80,0x48,0x80,0x4F,0xF0,0x48,0x80,0x48,0x80, +0x78,0x80,0x48,0x80,0x00,0x80,0x03,0x80,0x00,0x00, +/* */ +0x47,0xE0,0x25,0x20,0x07,0xE0,0x05,0x20,0x07,0xE0,0x61,0x00,0x2F,0xF0,0x29,0x50, +0x2B,0xD0,0x28,0x30,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x71,0x40,0x52,0x20,0x55,0xD0,0x50,0x00,0x57,0x10,0x55,0x50,0x57,0x50, +0x75,0x50,0x57,0x50,0x05,0x10,0x05,0x30,0x00,0x00, +/* */ +0x11,0x40,0x12,0x20,0x14,0x10,0x54,0x80,0x55,0x40,0x56,0x30,0x54,0x00,0x55,0xE0, +0x55,0x20,0x5D,0x20,0x65,0xE0,0x01,0x20,0x00,0x00, +/* */ +0x14,0x00,0x24,0x70,0x4F,0x50,0x12,0x50,0x22,0x50,0x6F,0xD0,0x22,0x50,0x2B,0x50, +0x2A,0x50,0x2B,0x70,0x3C,0x40,0x20,0x40,0x00,0x00, +/* */ +0x07,0x00,0x18,0xC0,0x6F,0xB0,0x00,0x00,0x3E,0x20,0x22,0xA0,0x3E,0xA0,0x22,0xA0, +0x3E,0x20,0x26,0x60,0x11,0x40,0x4F,0xD0,0x00,0x00, +/* */ +0x14,0x80,0x22,0x80,0x49,0xF0,0x08,0x90,0x15,0x20,0x22,0x00,0x41,0x40,0x3E,0x40, +0x22,0x40,0x22,0xA0,0x3E,0xA0,0x23,0x10,0x00,0x00, +/* */ +0x14,0x40,0x52,0x60,0x20,0x50,0x50,0x40,0x1D,0xF0,0x14,0x40,0x34,0x40,0x54,0x40, +0x14,0xA0,0x16,0xA0,0x14,0xA0,0x61,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x10,0x40,0x3F,0xE0,0x00,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x24,0x20,0x12,0x40,0x7F,0xF0,0x10,0x40,0x22,0x20,0x5F,0xD0,0x00,0x00,0x3F,0xE0, +0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* ԡ */ +0x44,0x40,0x28,0x20,0x11,0x10,0x02,0x80,0x44,0x40,0x28,0x30,0x00,0x00,0x0F,0xE0, +0x08,0x20,0x28,0x20,0x4F,0xE0,0x08,0x20,0x00,0x00, +/* Ԣ */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x42,0x90,0x4F,0xB0,0x00,0x00, +/* ԣ */ +0x41,0x40,0x22,0x20,0x74,0x90,0x10,0x80,0x21,0x40,0x32,0x20,0x64,0x10,0x33,0xE0, +0x22,0x20,0x22,0x20,0x23,0xE0,0x22,0x20,0x00,0x00, +/* Ԥ */ +0x00,0x00,0x39,0xF0,0x08,0x40,0x28,0x80,0x11,0xF0,0x7D,0x10,0x15,0x50,0x11,0x50, +0x11,0x50,0x10,0x40,0x10,0xA0,0x31,0x10,0x00,0x00, +/* ԥ */ +0x01,0x00,0x79,0xE0,0x0A,0x40,0x57,0xF0,0x22,0x90,0x13,0xF0,0x7D,0x80,0x16,0xD0, +0x11,0x60,0x16,0xE0,0x11,0x50,0x36,0xC0,0x00,0x00, +/* Ԧ */ +0x00,0x00,0x77,0xE0,0x12,0x20,0x52,0x20,0x52,0x20,0x52,0x20,0x79,0x40,0x09,0x40, +0x18,0x80,0x69,0x40,0x0A,0x20,0x34,0x10,0x00,0x00, +/* ԧ */ +0x11,0xE0,0x3D,0x20,0x45,0x60,0x29,0x10,0x14,0xF0,0x3F,0xC0,0x54,0x40,0x12,0xC0, +0x1F,0xF0,0x00,0x10,0x7F,0x90,0x00,0x30,0x00,0x00, +/* Ԩ */ +0x04,0x10,0x24,0x90,0x16,0xB0,0x05,0xD0,0x44,0x90,0x27,0xF0,0x04,0x90,0x05,0xD0, +0x16,0xB0,0x28,0x90,0x48,0x90,0x10,0x10,0x00,0x00, +/* ԩ */ +0x00,0x00,0x7F,0xF0,0x48,0x10,0x0F,0x80,0x10,0x80,0x3F,0xE0,0x52,0x20,0x1F,0xE0, +0x05,0x00,0x09,0x50,0x11,0x10,0x60,0xF0,0x00,0x00, +/* Ԫ */ +0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x08,0x80,0x08,0x80, +0x08,0x80,0x10,0x90,0x20,0x90,0x40,0x70,0x00,0x00, +/* ԫ */ +0x20,0x00,0x2F,0xF0,0x20,0x00,0x27,0xE0,0x74,0x20,0x24,0x20,0x27,0xE0,0x24,0x20, +0x24,0x20,0x37,0xE0,0x60,0x00,0x0F,0xF0,0x00,0x00, +/* Ԭ */ +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x09,0x10,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* ԭ */ +0x00,0x00,0x3F,0xF0,0x22,0x00,0x2F,0xE0,0x28,0x20,0x2F,0xE0,0x28,0x20,0x2F,0xE0, +0x21,0x00,0x25,0x40,0x29,0x20,0x53,0x10,0x00,0x00, +/* Ԯ */ +0x20,0x30,0x27,0xC0,0x25,0x10,0x72,0xA0,0x27,0xF0,0x20,0x80,0x37,0xF0,0x61,0x00, +0x23,0xE0,0x25,0x20,0x28,0xC0,0x67,0x30,0x00,0x00, +/* ԯ */ +0x10,0x80,0x13,0xF0,0x78,0x80,0x27,0xF0,0x50,0x00,0x7B,0xF0,0x12,0x10,0x1B,0xF0, +0x71,0x40,0x13,0x50,0x15,0x20,0x11,0x90,0x00,0x00, +/* ԰ */ +0x3F,0xF0,0x20,0x10,0x2F,0x90,0x20,0x10,0x20,0x10,0x3F,0xD0,0x25,0x10,0x25,0x10, +0x29,0x50,0x30,0xD0,0x20,0x10,0x3F,0xF0,0x00,0x00, +/* Ա */ +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x22,0x20,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* Բ */ +0x7F,0xF0,0x40,0x10,0x4F,0x90,0x48,0x90,0x4F,0x90,0x40,0x10,0x5F,0xD0,0x52,0x50, +0x52,0x50,0x45,0x10,0x48,0x90,0x7F,0xF0,0x00,0x00, +/* Գ */ +0x11,0x00,0x57,0xE0,0x21,0x00,0x5F,0xF0,0x10,0x00,0x17,0xE0,0x34,0x20,0x57,0xE0, +0x12,0x90,0x16,0xA0,0x1A,0x40,0x63,0x30,0x00,0x00, +/* Դ */ +0x4F,0xF0,0x28,0x80,0x09,0x00,0x0B,0xE0,0x4A,0x20,0x2B,0xE0,0x0A,0x20,0x0B,0xE0, +0x08,0x80,0x2A,0xA0,0x4C,0x90,0x11,0x80,0x00,0x00, +/* Ե */ +0x22,0x00,0x23,0xE0,0x44,0x20,0x57,0xC0,0x60,0x40,0x27,0xF0,0x42,0x00,0x75,0x20, +0x02,0xC0,0x15,0xA0,0x62,0xA0,0x0D,0x90,0x00,0x00, +/* Զ */ +0x40,0x00,0x27,0xE0,0x00,0x00,0x00,0x00,0x0F,0xF0,0x62,0x40,0x22,0x40,0x22,0x40, +0x24,0x50,0x28,0x30,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* Է */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x00,0x1D,0xE0,0x25,0x20,0x25,0x20,0x55,0x20, +0x09,0x60,0x09,0x00,0x11,0x10,0x20,0xF0,0x00,0x00, +/* Ը */ +0x3F,0xF0,0x22,0x00,0x2F,0xE0,0x28,0x20,0x2F,0xE0,0x28,0x20,0x2F,0xE0,0x25,0x40, +0x2B,0x20,0x20,0x80,0x2A,0x50,0x53,0xD0,0x00,0x00, +/* Թ */ +0x10,0x00,0x11,0xE0,0x1D,0x20,0x25,0x20,0x55,0x60,0x09,0x00,0x11,0x10,0x60,0xF0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* Ժ */ +0x01,0x00,0x70,0x80,0x57,0xF0,0x54,0x10,0x60,0x00,0x53,0xE0,0x50,0x00,0x57,0xF0, +0x61,0x40,0x41,0x40,0x42,0x50,0x44,0x30,0x00,0x00, +/* Ի */ +0x00,0x00,0x3F,0xF0,0x20,0x10,0x20,0x10,0x20,0x10,0x3F,0x90,0x20,0x10,0x20,0x10, +0x20,0x10,0x20,0x10,0x3F,0xF0,0x20,0x10,0x00,0x00, +/* Լ */ +0x11,0x00,0x11,0x00,0x21,0xF0,0x4A,0x10,0x74,0x10,0x11,0x10,0x20,0x90,0x78,0x90, +0x00,0x10,0x18,0x10,0x60,0x10,0x00,0x60,0x00,0x00, +/* Խ */ +0x10,0x50,0x10,0x40,0x7B,0xF0,0x12,0x40,0x12,0x50,0x7A,0xD0,0x13,0x60,0x52,0x50, +0x58,0xB0,0x51,0x10,0x70,0x00,0x5F,0xF0,0x00,0x00, +/* Ծ */ +0x00,0x60,0x7B,0x80,0x48,0x80,0x48,0x80,0x78,0x80,0x13,0xF0,0x18,0x80,0x50,0x80, +0x51,0x40,0x59,0x40,0x62,0x20,0x04,0x10,0x00,0x00, +/* Կ */ +0x20,0x00,0x21,0xF0,0x3D,0x10,0x41,0x10,0x3D,0xF0,0x11,0x10,0x11,0x10,0x7D,0xF0, +0x11,0x10,0x15,0x10,0x19,0x10,0x12,0x70,0x00,0x00, +/* */ +0x01,0xC0,0x1E,0x00,0x10,0x00,0x10,0x00,0x1F,0xE0,0x10,0x80,0x10,0x80,0x7F,0xF0, +0x02,0x00,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x04,0x00,0x3F,0xE0,0x22,0x20,0x2A,0xA0,0x3F,0xE0,0x22,0x20,0x2A,0xA0,0x7F,0xF0, +0x10,0x00,0x1F,0xE0,0x00,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x00,0x00,0x1F,0xE0,0x10,0x20,0x10,0x20,0x1F,0xE0,0x10,0x20,0x10,0x20,0x1F,0xE0, +0x10,0x20,0x20,0x20,0x20,0x20,0x40,0xE0,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x10,0x00,0x5B,0xE0,0x56,0x20,0x52,0x20,0x53,0xE0,0x11,0x40, +0x11,0x40,0x11,0x40,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x08,0x90,0x45,0x10,0x5F,0xD0,0x50,0x50,0x50,0x50,0x5F,0xD0, +0x45,0x10,0x49,0x50,0x50,0xD0,0x40,0x30,0x00,0x00, +/* */ +0x10,0x00,0x11,0xE0,0x7C,0x00,0x10,0x00,0x38,0x00,0x13,0xF0,0x7C,0x80,0x11,0x00, +0x39,0x00,0x56,0x20,0x13,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x00,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x02,0x00,0x04,0x00, +0x08,0x80,0x10,0x40,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x3E,0x70,0x22,0x50,0x3E,0x50,0x00,0x50,0x7F,0x60,0x41,0x60,0x49,0x50,0x49,0x50, +0x49,0x50,0x14,0x60,0x22,0x40,0x41,0x40,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x1F,0xE0,0x20,0x20,0x28,0x20,0x44,0x20,0x04,0x20,0x01,0xA0, +0x06,0x20,0x38,0x20,0x00,0x20,0x01,0xC0,0x00,0x00, +/* */ +0x73,0xE0,0x52,0x20,0x53,0xE0,0x50,0x00,0x67,0xF0,0x64,0x10,0x54,0x90,0x54,0x90, +0x54,0x90,0x61,0x40,0x42,0x20,0x44,0x10,0x00,0x00, +/* */ +0x04,0x00,0x08,0x00,0x10,0x40,0x20,0x20,0x7F,0xF0,0x08,0x90,0x08,0x80,0x08,0x80, +0x10,0x80,0x10,0x90,0x20,0x90,0x40,0x70,0x00,0x00, +/* */ +0x20,0x00,0x13,0xE0,0x00,0x00,0x00,0x00,0x77,0xF0,0x10,0x80,0x11,0x00,0x12,0x20, +0x17,0xF0,0x10,0x10,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x27,0xC0,0x4C,0x40,0x77,0xC0,0x24,0x40,0x47,0xC0, +0x70,0x00,0x0F,0xE0,0x6A,0xA0,0x1F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7F,0x60,0x14,0x00,0x7F,0x00,0x55,0x00,0x55,0xF0,0x63,0x40,0x41,0x40, +0x7F,0x40,0x41,0x90,0x7F,0xF0,0x41,0x10,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x7F,0xF0,0x44,0x10,0x3F,0xE0,0x0A,0x00, +0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x00,0x00, +/* */ +0x10,0x80,0x7C,0x80,0x00,0xF0,0x45,0x10,0x2A,0x90,0x7C,0x50,0x00,0x10,0x7C,0x30, +0x44,0x50,0x7D,0x90,0x44,0x10,0x7C,0x60,0x00,0x00, +/* */ +0x7F,0x80,0x10,0x80,0x10,0xE0,0x10,0x20,0x2F,0x20,0x21,0x20,0x42,0x60,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x06,0x00,0x00,0x00, +/* */ +0x3F,0xF0,0x21,0x00,0x21,0x00,0x2F,0xE0,0x29,0x20,0x29,0x20,0x29,0x20,0x29,0x20, +0x29,0x60,0x21,0x00,0x21,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x24,0x40,0x24,0x40,0x45,0xF0,0x75,0x50,0x55,0x50,0x55,0x50, +0x55,0x70,0x74,0x40,0x54,0x40,0x07,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x3F,0x80,0x08,0x80,0x10,0x90,0x22,0x70,0x02,0x00,0x7F,0xF0, +0x02,0x00,0x12,0x40,0x22,0x20,0x46,0x10,0x00,0x00, +/* */ +0x08,0xA0,0x3E,0x90,0x08,0x80,0x7F,0xF0,0x00,0x80,0x08,0xA0,0x7E,0xA0,0x08,0xA0, +0x1C,0x40,0x2A,0x50,0x48,0xB0,0x09,0x10,0x00,0x00, +/* */ +0x08,0x80,0x3E,0xA0,0x08,0x90,0x08,0x80,0x7F,0xF0,0x00,0x80,0x00,0x90,0x3E,0xA0, +0x22,0xC0,0x22,0x90,0x3F,0x50,0x22,0x30,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x02,0x00,0x12,0x20,0x12,0x20,0x25,0x40, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x44,0x10,0x02,0x00,0x3F,0xE0,0x10,0x40,0x08,0x80,0x7F,0xF0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x08,0xA0,0x3E,0x90,0x08,0x80,0x7F,0xF0,0x10,0x80,0x7E,0xA0,0x28,0xA0,0x3E,0xA0, +0x08,0x40,0x0E,0x50,0x78,0xB0,0x09,0x10,0x00,0x00, +/* */ +0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x22,0x20,0x22,0x20, +0x7F,0xF0,0x20,0x20,0x20,0x20,0x20,0xE0,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x7F,0xF0,0x08,0x00,0x08,0x80,0x10,0x80,0x30,0x80,0x53,0xE0, +0x10,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x01,0x00,0x7B,0xF0,0x4A,0x10,0x4A,0x10,0x4B,0xF0,0x4A,0x10,0x4A,0x10, +0x7B,0xF0,0x4A,0x10,0x02,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x2A,0xA0,0x2F,0xF0,0x72,0x20,0x2F,0xF0,0x25,0x60,0x29,0xB0,0x30,0x00,0x6F,0xE0, +0x29,0x20,0x29,0x20,0x22,0xC0,0x6C,0x20,0x00,0x00, +/* */ +0x10,0x60,0x7D,0x80,0x29,0x00,0x3D,0xF0,0x09,0x20,0x7D,0x20,0x0A,0x20,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x29,0x40,0x3D,0xF0,0x4A,0x40,0x3D,0xF0,0x18,0xC0,0x2D,0x50,0x4A,0x30,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x0D,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x40,0x45,0xF0,0x55,0x00,0x55,0x40,0x55,0x40,0x55,0xF0,0x55,0x40, +0x55,0x40,0x11,0x40,0x29,0x40,0x46,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x38,0x40,0x2B,0xF0,0x2A,0x00,0x3A,0x40,0x2A,0x40,0x2B,0xF0,0x3A,0x40, +0x2A,0x40,0x2A,0x40,0x2A,0x40,0x5D,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x11,0x20,0x3D,0xC0,0x65,0x10,0x18,0xF0, +0x68,0x80,0x3F,0xE0,0x08,0x80,0x10,0x80,0x00,0x00, +/* */ +0x42,0x80,0x2F,0xF0,0x02,0x80,0x0F,0xE0,0x6A,0xA0,0x2F,0xE0,0x2A,0xA0,0x2F,0xE0, +0x24,0x40,0x27,0xC0,0x24,0x40,0x5F,0xF0,0x00,0x00, +/* */ +0x11,0x40,0x17,0xF0,0x59,0x40,0x37,0xF0,0x15,0x50,0x7F,0xF0,0x15,0x50,0x37,0xF0, +0x5A,0x20,0x13,0xE0,0x12,0x20,0x13,0xE0,0x00,0x00, +/* */ +0x05,0x00,0x25,0x20,0x15,0x40,0x7F,0xF0,0x08,0x80,0x25,0x20,0x2F,0xA0,0x22,0x20, +0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x47,0xC0,0x24,0x40,0x0F,0xE0,0x4A,0xA0,0x2E,0xE0, +0x01,0x00,0x0F,0xF0,0x25,0x40,0x49,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x27,0x20,0x2A,0xA0,0x10,0x40,0x66,0x30, +0x01,0x00,0x0C,0x00,0x03,0x00,0x00,0x80,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x02,0x00,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x27,0xC0,0x14,0x40,0x07,0xC0,0x00,0x00,0x5E,0xF0,0x32,0x90,0x1E,0xF0,0x01,0x00, +0x1F,0xF0,0x25,0x40,0x49,0x20,0x11,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x12,0x40,0x08,0x80,0x07,0x00,0x18,0xC0,0x62,0x30,0x1F,0xC0,0x12,0x40, +0x1F,0xC0,0x02,0x20,0x7F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x7B,0xE0,0x4A,0x20,0x4B,0xE0,0x78,0x00,0x17,0x70,0x15,0x50,0x5F,0x70,0x50,0x80, +0x57,0xF0,0x59,0xC0,0x62,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x03,0xE0,0x72,0x20,0x53,0xE0,0x50,0x00,0x57,0x70,0x55,0x50,0x57,0x70,0x50,0x80, +0x77,0xF0,0x51,0xC0,0x02,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x41,0x00,0x29,0x00,0x0F,0xE0,0x11,0x00,0x61,0x00,0x3F,0xF0,0x20,0x00,0x2F,0xE0, +0x28,0x20,0x2F,0xE0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x04,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x04,0x00, +0x05,0xF0,0x7E,0x00,0x04,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x14,0x80,0x58,0x80,0x53,0xE0,0x50,0x80,0x50,0x80,0x10,0x80, +0x10,0x80,0x28,0x80,0x28,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x1B,0xE0,0x50,0x00,0x57,0x70,0x55,0x50,0x57,0x70,0x10,0x80, +0x17,0xF0,0x29,0xC0,0x2A,0xA0,0x44,0x90,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x0D,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x17,0xE0,0x12,0x20,0x11,0x40,0x78,0x80,0x11,0x40,0x16,0xB0,0x18,0x80,0x73,0xE0, +0x10,0x80,0x17,0xF0,0x10,0x80,0x30,0x80,0x00,0x00, +/* */ +0x00,0x10,0x7F,0x10,0x41,0x50,0x49,0x50,0x49,0x50,0x49,0x50,0x49,0x50,0x49,0x50, +0x49,0x50,0x14,0x10,0x22,0x10,0x41,0x30,0x00,0x00, +/* */ +0x4F,0xE0,0x24,0x40,0x02,0x80,0x01,0x00,0x06,0xC0,0x59,0x30,0x21,0x00,0x0F,0xE0, +0x01,0x00,0x1F,0xF0,0x21,0x00,0x41,0x00,0x00,0x00, +/* */ +0x7C,0x50,0x44,0x40,0x47,0xF0,0x54,0x40,0x55,0x40,0x55,0x50,0x57,0xD0,0x55,0x60, +0x11,0x40,0x2A,0x50,0x24,0xB0,0x41,0x10,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x28,0x00,0x4F,0xE0,0x08,0x00,0x0F,0xF0,0x08,0x00,0x08,0x00, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x14,0x90,0x16,0xB0,0x7C,0x90,0x17,0xF0,0x10,0x00,0x13,0xE0, +0x12,0x20,0x1B,0xE0,0x62,0x20,0x03,0xE0,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x14,0x90,0x5E,0xB0,0x54,0x90,0x57,0xF0,0x50,0x00,0x13,0xE0, +0x12,0x20,0x13,0xE0,0x12,0x20,0x13,0xE0,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x7F,0xF0,0x52,0x50,0x4A,0x90,0x7F,0xF0,0x00,0x00,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x02,0x20,0x7F,0xF0,0x44,0x90,0x56,0xB0,0x54,0x90,0x57,0xF0,0x54,0x00,0x57,0xE0, +0x56,0x20,0x13,0xE0,0x2A,0x20,0x47,0xE0,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x11,0x00,0x7D,0x00,0x11,0x00,0x11,0x00,0x1D,0x00,0x71,0x00, +0x11,0x10,0x11,0x10,0x11,0x10,0x30,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x07,0xF0,0x79,0xC0,0x4A,0xA0,0x4C,0x90,0x4B,0xE0,0x4A,0x20,0x4B,0xE0, +0x7A,0x20,0x4B,0xE0,0x00,0x00,0x07,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x41,0x00,0x2F,0xF0,0x05,0x40,0x09,0x20,0x57,0xD0,0x24,0x40,0x07,0xC0, +0x04,0x40,0x27,0xC0,0x40,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x08,0x80,0x7E,0x80,0x08,0x80,0x1C,0x80,0x1A,0x80,0x28,0x80, +0x48,0x90,0x08,0x90,0x08,0x90,0x08,0x70,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x7E,0x80,0x10,0x80,0x10,0x80,0x28,0x80,0x3E,0x80,0x08,0x80, +0x0E,0x80,0x78,0x90,0x08,0x90,0x08,0x70,0x00,0x00, +/* ա */ +0x20,0x10,0x3F,0x10,0x49,0x50,0x09,0x50,0x79,0x50,0x29,0x50,0x2D,0x50,0x7D,0x50, +0x24,0x50,0x34,0x10,0x2A,0x10,0x11,0x30,0x00,0x00, +/* բ */ +0x4F,0xF0,0x20,0x10,0x00,0x10,0x5F,0xD0,0x52,0x50,0x5F,0xD0,0x52,0x50,0x5F,0xD0, +0x42,0x10,0x42,0x10,0x42,0x10,0x40,0x30,0x00,0x00, +/* գ */ +0x00,0x70,0x7B,0x80,0x48,0x00,0x48,0x80,0x78,0x40,0x4B,0xF0,0x48,0x20,0x78,0x40, +0x48,0x80,0x49,0x00,0x7A,0x80,0x44,0x70,0x00,0x00, +/* դ */ +0x10,0x00,0x17,0x70,0x15,0x50,0x7D,0x50,0x15,0x50,0x3F,0xF0,0x35,0x50,0x55,0x50, +0x15,0x50,0x15,0x50,0x15,0x50,0x1B,0xB0,0x00,0x00, +/* ե */ +0x10,0x80,0x17,0xF0,0x15,0x50,0x7A,0x20,0x15,0x10,0x31,0xE0,0x3B,0x00,0x55,0xE0, +0x11,0x00,0x11,0xF0,0x11,0x00,0x11,0x00,0x00,0x00, +/* զ */ +0x02,0x00,0x02,0x00,0x7B,0xF0,0x4D,0x00,0x49,0x00,0x49,0xE0,0x49,0x00,0x49,0x00, +0x79,0xF0,0x49,0x00,0x01,0x00,0x01,0x00,0x00,0x00, +/* է */ +0x10,0x00,0x10,0x00,0x1F,0xF0,0x24,0x00,0x24,0x00,0x47,0xE0,0x04,0x00,0x04,0x00, +0x07,0xF0,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00, +/* ը */ +0x12,0x00,0x12,0x00,0x13,0xF0,0x55,0x00,0x59,0x00,0x51,0xE0,0x51,0x00,0x11,0x00, +0x11,0xF0,0x29,0x00,0x25,0x00,0x41,0x00,0x00,0x00, +/* թ */ +0x22,0x00,0x12,0x00,0x03,0xF0,0x05,0x00,0x71,0x00,0x11,0xE0,0x11,0x00,0x11,0x00, +0x15,0xF0,0x19,0x00,0x11,0x00,0x01,0x00,0x00,0x00, +/* ժ */ +0x10,0x80,0x17,0xF0,0x12,0x20,0x79,0x40,0x17,0xF0,0x14,0x90,0x1D,0xD0,0x74,0x90, +0x15,0xD0,0x15,0x50,0x15,0xD0,0x34,0x30,0x00,0x00, +/* ի */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x07,0x00,0x78,0xF0,0x00,0x00,0x3F,0xE0,0x02,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x20,0x60,0x00,0x00, +/* լ */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x01,0xE0,0x3E,0x00,0x02,0x00,0x03,0xF0, +0x7E,0x00,0x02,0x10,0x02,0x10,0x01,0xF0,0x00,0x00, +/* խ */ +0x02,0x00,0x7F,0xF0,0x50,0x50,0x28,0x20,0x08,0x00,0x1F,0xF0,0x24,0x00,0x47,0xE0, +0x04,0x00,0x07,0xF0,0x04,0x00,0x04,0x00,0x00,0x00, +/* ծ */ +0x08,0x80,0x0F,0xF0,0x10,0x80,0x13,0xE0,0x30,0x80,0x57,0xF0,0x10,0x00,0x17,0xF0, +0x14,0x90,0x14,0x90,0x11,0x60,0x16,0x10,0x00,0x00, +/* կ */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x3F,0xE0,0x08,0x80,0x3F,0xE0,0x08,0x80,0x7F,0xF0, +0x12,0x40,0x3F,0xE0,0x4A,0x90,0x16,0x40,0x00,0x00, +/* հ */ +0x03,0xC0,0x74,0x40,0x57,0xF0,0x55,0x20,0x76,0x90,0x55,0xE0,0x54,0x00,0x75,0xE0, +0x54,0x00,0x55,0xE0,0x75,0x20,0x59,0xE0,0x00,0x00, +/* ձ */ +0x08,0x80,0x70,0x80,0x10,0xF0,0x18,0x80,0x70,0x80,0x13,0xE0,0x12,0x20,0x1A,0x20, +0x72,0x20,0x13,0xE0,0x10,0x10,0x0F,0xF0,0x00,0x00, +/* ղ */ +0x1F,0xC0,0x20,0x40,0x7F,0xF0,0x24,0x40,0x29,0x20,0x37,0xD0,0x20,0x00,0x2F,0xE0, +0x20,0x00,0x2F,0xE0,0x28,0x20,0x4F,0xE0,0x00,0x00, +/* ճ */ +0x10,0x80,0x10,0x80,0x54,0x80,0x38,0xF0,0x10,0x80,0x7C,0x80,0x13,0xF0,0x3A,0x10, +0x56,0x10,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* մ */ +0x21,0x00,0x11,0x00,0x01,0x00,0x01,0xF0,0x41,0x00,0x21,0x00,0x0F,0xE0,0x08,0x20, +0x18,0x20,0x28,0x20,0x4F,0xE0,0x08,0x20,0x00,0x00, +/* յ */ +0x04,0x80,0x07,0xE0,0x7C,0x00,0x03,0xE0,0x7E,0x40,0x01,0x80,0x3E,0x90,0x00,0x70, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* ն */ +0x10,0x60,0x13,0x80,0x7A,0x00,0x22,0x00,0x33,0xF0,0x52,0x40,0x7A,0x40,0x12,0x40, +0x1A,0x40,0x72,0x40,0x12,0x40,0x14,0x40,0x00,0x00, +/* շ */ +0x10,0x00,0x17,0xF0,0x7C,0x10,0x27,0xF0,0x34,0xA0,0x57,0xF0,0x7C,0xA0,0x17,0xF0, +0x1D,0x40,0x75,0x50,0x15,0xA0,0x19,0x10,0x00,0x00, +/* ո */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x10,0x30,0x7D,0xC0,0x21,0x00,0x49,0x00,0x7D,0xF0, +0x09,0x20,0x0D,0x20,0x79,0x20,0x0A,0x20,0x00,0x00, +/* չ */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x24,0x40,0x2F,0xE0,0x24,0x40,0x3F,0xF0,0x29,0x00, +0x29,0x10,0x28,0xA0,0x2A,0x40,0x4C,0x30,0x00,0x00, +/* պ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7D,0x40,0x13,0xF0,0x7D,0x40,0x55,0xF0,0x6D,0x40, +0x45,0xF0,0x7C,0x00,0x45,0x50,0x7D,0x50,0x00,0x00, +/* ջ */ +0x10,0xA0,0x10,0x90,0x10,0xF0,0x7B,0x80,0x10,0x80,0x30,0xF0,0x3B,0x80,0x50,0xA0, +0x10,0xC0,0x10,0x90,0x11,0x50,0x16,0x30,0x00,0x00, +/* ռ */ +0x02,0x00,0x02,0x00,0x02,0x00,0x03,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0,0x20,0x20, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* ս */ +0x10,0xA0,0x10,0x90,0x1C,0x80,0x10,0xF0,0x13,0x80,0x7C,0xA0,0x44,0xA0,0x44,0xA0, +0x44,0x40,0x7C,0xD0,0x41,0x30,0x02,0x10,0x00,0x00, +/* վ */ +0x20,0x80,0x10,0x80,0x00,0x80,0x7C,0xF0,0x00,0x80,0x48,0x80,0x2B,0xF0,0x2A,0x10, +0x12,0x10,0x1A,0x10,0x63,0xF0,0x02,0x10,0x00,0x00, +/* տ */ +0x44,0x40,0x2F,0xE0,0x04,0x40,0x07,0xC0,0x44,0x40,0x27,0xC0,0x04,0x40,0x1F,0xF0, +0x0A,0x80,0x2C,0x40,0x48,0x00,0x0F,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x27,0xF0,0x4C,0x10,0x70,0x00,0x17,0xF0,0x20,0x80,0x7A,0x80, +0x02,0xE0,0x1A,0x80,0x65,0x80,0x08,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x79,0x40,0x17,0xF0,0x12,0x20,0x3B,0xE0,0x32,0x20,0x53,0xE0, +0x10,0x80,0x17,0xF0,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x08,0x20,0x3E,0x20,0x14,0x40,0x7F,0x90,0x22,0x10,0x3E,0x20,0x22,0x40,0x3E,0x80, +0x08,0x10,0x7F,0x20,0x08,0x40,0x09,0x80,0x00,0x00, +/* */ +0x41,0x00,0x2F,0xE0,0x04,0x40,0x1F,0xF0,0x48,0x20,0x2F,0xE0,0x08,0x20,0x0F,0xE0, +0x01,0x00,0x3F,0xF0,0x41,0x00,0x01,0x00,0x00,0x00, +/* */ +0x01,0x00,0x79,0x20,0x09,0x40,0x09,0x80,0x79,0x00,0x43,0xF0,0x41,0x40,0x79,0x40, +0x09,0x20,0x09,0x20,0x09,0x90,0x31,0x00,0x00,0x00, +/* */ +0x12,0x40,0x7F,0xF0,0x4F,0x90,0x08,0x80,0x0F,0x80,0x00,0x00,0x3F,0xC0,0x02,0x00, +0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x06,0x00,0x00,0x00, +/* */ +0x01,0x00,0x5D,0x20,0x25,0x40,0x05,0x80,0x1D,0x00,0x53,0xF0,0x31,0x40,0x1D,0x40, +0x05,0x20,0x25,0x20,0x45,0x90,0x19,0x00,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x10,0x40,0x7B,0xF0,0x10,0x40,0x32,0x40,0x3A,0x40,0x51,0x40, +0x11,0x40,0x10,0x80,0x11,0x40,0x16,0x30,0x00,0x00, +/* */ +0x00,0x80,0x00,0x80,0x00,0x80,0x7F,0xF0,0x00,0x80,0x10,0x80,0x10,0x80,0x09,0x00, +0x05,0x00,0x02,0x00,0x0D,0x80,0x30,0x70,0x00,0x00, +/* */ +0x11,0x00,0x11,0x20,0x7D,0x40,0x55,0x80,0x55,0x00,0x57,0xF0,0x55,0x40,0x55,0x40, +0x5D,0x20,0x11,0x20,0x11,0x90,0x11,0x00,0x00,0x00, +/* */ +0x01,0x00,0x7D,0x20,0x45,0x40,0x55,0x80,0x55,0x00,0x57,0xF0,0x55,0x40,0x55,0x40, +0x55,0x20,0x11,0x20,0x29,0x90,0x45,0x00,0x00,0x00, +/* */ +0x08,0x40,0x08,0x40,0x10,0x40,0x17,0xF0,0x30,0x40,0x54,0x40,0x12,0x40,0x12,0x80, +0x11,0x00,0x12,0x80,0x14,0x40,0x18,0x30,0x00,0x00, +/* */ +0x39,0x00,0x29,0x20,0x29,0x40,0x39,0x80,0x29,0x00,0x2B,0xF0,0x39,0x40,0x29,0x40, +0x29,0x20,0x29,0x20,0x29,0x90,0x59,0x00,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x21,0x00,0x6F,0xE0,0x24,0x40,0x3F,0xF0,0x28,0x20,0x6F,0xE0, +0x28,0x20,0x3F,0xF0,0x21,0x00,0x41,0x00,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xE0,0x49,0x40,0x4F,0xF0,0x52,0x20,0x53,0xE0,0x4A,0x20,0x4B,0xE0, +0x48,0x80,0x77,0xF0,0x40,0x80,0x40,0x80,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x11,0x10,0x79,0x10,0x12,0x10,0x14,0x60,0x18,0x00,0x73,0xF0, +0x12,0x10,0x12,0x10,0x13,0xF0,0x32,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x49,0x10,0x49,0x10,0x4A,0x10,0x7C,0x60,0x48,0x00,0x4B,0xF0, +0x4A,0x10,0x7A,0x10,0x4B,0xF0,0x02,0x10,0x00,0x00, +/* */ +0x11,0x40,0x11,0x20,0x11,0x00,0x7D,0xF0,0x13,0x00,0x11,0x20,0x1D,0x20,0x71,0x40, +0x10,0x90,0x11,0x50,0x12,0x30,0x34,0x10,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xF0,0x22,0x10,0x02,0x10,0x04,0x10,0x44,0x60,0x28,0x00,0x07,0xF0, +0x14,0x10,0x24,0x10,0x47,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x08,0x00,0x09,0x10,0x3C,0x90,0x08,0xA0,0x08,0xA0,0x7E,0x40,0x08,0x40,0x28,0xA0, +0x2E,0x90,0x29,0x10,0x38,0x00,0x4F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x49,0x10,0x49,0x10,0x7A,0x60,0x4C,0x00,0x4B,0xF0,0x4A,0x10, +0x7B,0xF0,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x02,0x00,0x03,0xE0,0x02,0x00,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x20,0x20,0x7F,0xF0,0x02,0x00,0x00,0x00, +/* */ +0x09,0x00,0x09,0x00,0x49,0x20,0x29,0x40,0x19,0x80,0x09,0x00,0x19,0x80,0x29,0x40, +0x49,0x00,0x11,0x10,0x11,0x10,0x20,0xF0,0x00,0x00, +/* */ +0x09,0x00,0x3D,0xF0,0x26,0xA0,0x3C,0x40,0x21,0xB0,0x42,0x40,0x3F,0xF0,0x02,0x40, +0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x08,0x20,0x08,0x20,0x10,0x20,0x20,0xC0,0x40,0x00,0x1F,0xE0, +0x10,0x20,0x10,0x20,0x1F,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x40,0x80,0x2F,0xF0,0x08,0x00,0x0A,0x20,0x0F,0xF0,0x6A,0x20,0x2B,0xE0,0x28,0x00, +0x35,0x50,0x25,0x50,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x12,0x00,0x7E,0x00,0x13,0xF0,0x12,0x40,0x1A,0x40,0x72,0x40, +0x12,0x40,0x12,0x40,0x12,0x40,0x34,0x40,0x00,0x00, +/* */ +0x10,0x20,0x7B,0xC0,0x12,0x00,0x1B,0xF0,0x72,0x40,0x12,0x40,0x34,0x40,0x00,0x00, +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x11,0x00,0x7B,0xC0,0x11,0x40,0x7B,0x50,0x12,0xB0,0x34,0x10,0x02,0x00,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x22,0x20,0x2F,0xA0,0x75,0x40,0x2F,0x70,0x50,0x90,0x57,0x50,0x7D,0x50,0x17,0x50, +0x1D,0x20,0x77,0x20,0x15,0x50,0x15,0x90,0x00,0x00, +/* */ +0x02,0x00,0x02,0x20,0x3F,0xC0,0x02,0x80,0x7F,0xF0,0x04,0x00,0x1F,0xE0,0x70,0x20, +0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x21,0x00,0x31,0x10,0x43,0xA0,0x01,0x40,0x77,0xF0,0x21,0x00,0x23,0xE0,0x76,0x20, +0x2B,0xE0,0x22,0x20,0x33,0xE0,0x22,0x20,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x01,0x00,0x3F,0xF0,0x24,0x40,0x3F,0xF0,0x24,0x40, +0x27,0xC0,0x20,0x00,0x2A,0xA0,0x51,0x50,0x00,0x00, +/* */ +0x21,0x00,0x10,0x80,0x07,0xF0,0x00,0x20,0x72,0x20,0x11,0x40,0x10,0x80,0x11,0x40, +0x12,0x20,0x14,0x10,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x44,0x10,0x24,0xE0,0x04,0x80,0x1E,0x80,0x44,0xF0,0x24,0xA0,0x06,0xA0,0x1C,0xA0, +0x04,0xA0,0x24,0xA0,0x44,0xA0,0x0D,0x20,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x11,0x40,0x12,0x20,0x14,0x90,0x79,0x00,0x12,0x40,0x10,0x90, +0x13,0x20,0x18,0x40,0x61,0x80,0x06,0x00,0x00,0x00, +/* */ +0x12,0x20,0x3F,0xA0,0x12,0x60,0x1E,0x20,0x12,0xA0,0x1E,0x60,0x12,0x20,0x7F,0x30, +0x2A,0xE0,0x31,0x20,0x20,0x20,0x3F,0x20,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x02,0x00,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x10,0x40,0x7F,0xF0,0x08,0x80,0x10,0x40,0x00,0x00, +/* */ +0x00,0x00,0x7E,0xF0,0x14,0x40,0x7F,0x40,0x55,0x60,0x55,0xA0,0x7F,0xA0,0x08,0xE0, +0x3E,0xA0,0x08,0xA0,0x0E,0xA0,0x70,0xD0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x10,0x80,0x10,0xF0,0x20,0x80,0x38,0x80,0x6B,0xF0,0x2A,0x10, +0x2A,0x10,0x2A,0x10,0x3B,0xF0,0x2A,0x10,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x20,0x80,0x43,0xE0,0x51,0x00,0x77,0xF0,0x22,0x20,0x25,0xD0, +0x70,0x80,0x27,0xF0,0x32,0xA0,0x64,0x90,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x03,0xF0,0x02,0x00,0x3F,0xE0,0x20,0x20,0x22,0x20,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x3C,0x80,0x40,0x80,0x3C,0x80,0x13,0xF0,0x10,0x80,0x7C,0x80, +0x10,0x80,0x14,0x80,0x18,0x80,0x10,0x80,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x21,0xF0,0x21,0x00,0x6F,0xE0,0x28,0x20,0x29,0x20,0x29,0x20, +0x29,0x20,0x22,0x80,0x24,0x40,0x28,0x20,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x7C,0x90,0x14,0x90,0x30,0x80,0x39,0x40,0x55,0x40, +0x11,0x40,0x12,0x40,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x11,0x00,0x52,0x80,0x34,0x40,0x19,0xB0,0x16,0x00,0x30,0xC0, +0x57,0x00,0x10,0x20,0x20,0xC0,0x4F,0x00,0x00,0x00, +/* */ +0x21,0x00,0x11,0x00,0x02,0x80,0x04,0x40,0x69,0x30,0x22,0x00,0x24,0x80,0x21,0x20, +0x26,0x40,0x30,0x80,0x23,0x00,0x0C,0x00,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x42,0x10,0x3A,0xE0,0x00,0x00,0x3F,0xF0,0x20,0x00, +0x3F,0xF0,0x29,0x20,0x28,0xC0,0x4C,0x30,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x24,0x00,0x75,0xE0,0x24,0x00,0x27,0xF0,0x35,0x40,0x65,0x50, +0x25,0x60,0x25,0x40,0x25,0xA0,0x69,0x10,0x00,0x00, +/* */ +0x21,0x00,0x37,0xE0,0x41,0x00,0x07,0xE0,0x74,0x20,0x27,0xE0,0x24,0x20,0x77,0xE0, +0x24,0x20,0x2F,0xF0,0x32,0x40,0x24,0x20,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x4B,0xF0,0x49,0x00,0x51,0x40,0x52,0x40,0x4B,0xF0,0x48,0x40, +0x48,0x40,0x73,0xF0,0x40,0x40,0x40,0x40,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0x80,0x01,0x10,0x7A,0xA0,0x12,0x40,0x26,0x30, +0x5F,0xC0,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x22,0x00,0x23,0xC0,0x74,0x40,0x28,0x80,0x27,0xE0,0x21,0x20,0x3F,0xF0,0x61,0x20, +0x27,0xE0,0x21,0x20,0x21,0x00,0x67,0x00,0x00,0x00, +/* */ +0x02,0x00,0x73,0xC0,0x54,0x40,0x58,0x80,0x77,0xE0,0x51,0x20,0x5F,0xF0,0x71,0x20, +0x57,0xE0,0x51,0x20,0x71,0x00,0x57,0x00,0x00,0x00, +/* */ +0x10,0x00,0x27,0xF0,0x40,0x80,0x10,0x80,0x20,0x80,0x64,0x80,0x24,0xF0,0x24,0x80, +0x24,0x80,0x24,0x80,0x24,0x80,0x2F,0xF0,0x00,0x00, +/* */ +0x12,0x00,0x53,0xC0,0x24,0x40,0x58,0x80,0x17,0xE0,0x11,0x20,0x3F,0xF0,0x51,0x20, +0x17,0xE0,0x11,0x20,0x11,0x00,0x67,0x00,0x00,0x00, +/* */ +0x08,0x00,0x1F,0x80,0x20,0x80,0x41,0x00,0x3F,0xE0,0x02,0x20,0x7F,0xF0,0x02,0x20, +0x3F,0xE0,0x02,0x20,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x10,0x80,0x58,0x80,0x50,0x80,0x52,0x80,0x52,0xF0,0x12,0x80, +0x12,0x80,0x12,0x80,0x12,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7E,0xF0,0x2B,0x20,0x3E,0xA0,0x1C,0x40,0x2A,0xA0,0x49,0x10,0x7F,0xF0, +0x02,0x00,0x13,0xE0,0x12,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x27,0xE0,0x20,0x40,0x70,0x80,0x2E,0x90,0x22,0xD0,0x32,0xA0,0x64,0xA0, +0x28,0x90,0x21,0x80,0x20,0x00,0x6F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x12,0x00,0x13,0xE0,0x12,0x00, +0x12,0x00,0x12,0x00,0x12,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x7E,0x80,0x08,0x80,0x08,0xF0,0x29,0x20,0x2E,0xA0,0x28,0xA0,0x28,0xA0, +0x28,0xA0,0x2E,0x40,0x70,0xA0,0x01,0x10,0x00,0x00, +/* ֡ */ +0x10,0x40,0x10,0x40,0x7C,0x70,0x54,0x40,0x55,0xF0,0x55,0x10,0x55,0x50,0x55,0x50, +0x5D,0x50,0x11,0x50,0x10,0xA0,0x11,0x10,0x00,0x00, +/* ֢ */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x37,0xF0,0x10,0x80,0x10,0x80,0x34,0xF0, +0x54,0x80,0x14,0x80,0x24,0x80,0x4F,0xF0,0x00,0x00, +/* ֣ */ +0x22,0x00,0x14,0xF0,0x00,0x90,0x3E,0x90,0x08,0xA0,0x08,0xA0,0x7F,0x90,0x08,0x90, +0x14,0x90,0x12,0xE0,0x22,0x80,0x40,0x80,0x00,0x00, +/* ֤ */ +0x40,0x00,0x2F,0xF0,0x00,0x80,0x00,0x80,0x60,0x80,0x24,0x80,0x24,0xF0,0x24,0x80, +0x2C,0x80,0x34,0x80,0x24,0x80,0x0F,0xF0,0x00,0x00, +/* ֥ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x04,0x00,0x02,0x00,0x7F,0xE0,0x00,0x40,0x01,0x80, +0x06,0x00,0x08,0x00,0x30,0x00,0x4F,0xF0,0x00,0x00, +/* ֦ */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x78,0x80,0x10,0x80,0x37,0xE0,0x3A,0x20,0x52,0x20, +0x11,0x40,0x10,0x80,0x11,0x40,0x16,0x30,0x00,0x00, +/* ֧ */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0,0x10,0x20,0x08,0x40, +0x04,0x80,0x03,0x00,0x0C,0xC0,0x70,0x30,0x00,0x00, +/* ֨ */ +0x00,0x80,0x00,0x80,0x77,0xF0,0x50,0x80,0x50,0x80,0x57,0xE0,0x52,0x20,0x52,0x20, +0x71,0x40,0x50,0x80,0x03,0x40,0x0C,0x30,0x00,0x00, +/* ֩ */ +0x12,0x00,0x12,0x70,0x13,0xD0,0x7D,0x50,0x55,0x50,0x55,0x50,0x7F,0xD0,0x11,0x50, +0x15,0x50,0x1E,0xF0,0x62,0xD0,0x04,0x80,0x00,0x00, +/* ֪ */ +0x10,0x00,0x10,0x00,0x1E,0xF0,0x28,0x90,0x48,0x90,0x08,0x90,0x7F,0x90,0x08,0x90, +0x14,0x90,0x12,0xF0,0x22,0x90,0x40,0x00,0x00,0x00, +/* ֫ */ +0x00,0x80,0x38,0x80,0x2B,0xF0,0x28,0x80,0x38,0x80,0x2F,0xE0,0x2A,0x20,0x3A,0x20, +0x29,0x40,0x28,0x80,0x29,0x40,0x5E,0x30,0x00,0x00, +/* ֬ */ +0x3A,0x10,0x2A,0x60,0x2B,0x80,0x3A,0x10,0x29,0xF0,0x28,0x00,0x3B,0xF0,0x2A,0x10, +0x2B,0xF0,0x2A,0x10,0x2B,0xF0,0x5A,0x10,0x00,0x00, +/* ֭ */ +0x21,0x00,0x11,0x00,0x01,0x00,0x01,0x00,0x41,0x00,0x2F,0xF0,0x01,0x00,0x01,0x00, +0x11,0x00,0x21,0x00,0x41,0x00,0x01,0x00,0x00,0x00, +/* ֮ */ +0x04,0x00,0x02,0x00,0x00,0x00,0x3F,0xE0,0x00,0x40,0x00,0x80,0x01,0x00,0x02,0x00, +0x04,0x00,0x08,0x00,0x14,0x00,0x23,0xF0,0x00,0x00, +/* ֯ */ +0x10,0x00,0x13,0xE0,0x22,0x20,0x4A,0x20,0x72,0x20,0x12,0x20,0x22,0x20,0x7B,0xE0, +0x00,0x00,0x19,0x40,0x62,0x20,0x04,0x10,0x00,0x00, +/* ְ */ +0x7E,0x00,0x25,0xF0,0x25,0x10,0x3D,0x10,0x25,0x10,0x25,0x10,0x3D,0xF0,0x24,0x00, +0x26,0x00,0x7C,0xA0,0x04,0x90,0x05,0x10,0x00,0x00, +/* ֱ */ +0x02,0x00,0x3F,0xF0,0x02,0x00,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x10,0x20,0x1F,0xE0, +0x10,0x20,0x1F,0xE0,0x10,0x20,0x3F,0xF0,0x00,0x00, +/* ֲ */ +0x10,0x80,0x13,0xF0,0x10,0x80,0x7B,0xE0,0x12,0x20,0x33,0xE0,0x3A,0x20,0x53,0xE0, +0x12,0x20,0x13,0xE0,0x12,0x20,0x17,0xF0,0x00,0x00, +/* ֳ */ +0x01,0x00,0x77,0xF0,0x21,0x00,0x27,0xE0,0x34,0x20,0x57,0xE0,0x54,0x20,0x37,0xE0, +0x14,0x20,0x27,0xE0,0x24,0x20,0x4F,0xF0,0x00,0x00, +/* ִ */ +0x22,0x00,0x22,0x00,0x22,0x00,0x77,0xC0,0x22,0x40,0x22,0x40,0x36,0x40,0x62,0x40, +0x25,0x40,0x25,0x50,0x28,0x30,0x70,0x10,0x00,0x00, +/* ֵ */ +0x11,0x00,0x17,0xF0,0x21,0x00,0x27,0xE0,0x64,0x20,0x27,0xE0,0x24,0x20,0x27,0xE0, +0x24,0x20,0x27,0xE0,0x24,0x20,0x2F,0xF0,0x00,0x00, +/* ֶ */ +0x08,0x00,0x0B,0xF0,0x10,0x80,0x11,0x00,0x32,0x20,0x53,0xF0,0x10,0x90,0x10,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* ַ */ +0x10,0x40,0x10,0x40,0x10,0x40,0x12,0x40,0x7A,0x70,0x12,0x40,0x12,0x40,0x12,0x40, +0x12,0x40,0x1A,0x40,0x62,0x40,0x07,0xF0,0x00,0x00, +/* ָ */ +0x12,0x10,0x12,0x60,0x13,0x80,0x7A,0x10,0x11,0xF0,0x10,0x00,0x1B,0xF0,0x72,0x10, +0x13,0xF0,0x12,0x10,0x13,0xF0,0x32,0x10,0x00,0x00, +/* ֹ */ +0x01,0x00,0x01,0x00,0x01,0x00,0x11,0x00,0x11,0xE0,0x11,0x00,0x11,0x00,0x11,0x00, +0x11,0x00,0x11,0x00,0x11,0x00,0x7F,0xF0,0x00,0x00, +/* ֺ */ +0x00,0x40,0x78,0x40,0x48,0x40,0x4A,0x40,0x7A,0x70,0x12,0x40,0x12,0x40,0x5A,0x40, +0x52,0x40,0x52,0x40,0x5A,0x40,0x67,0xF0,0x00,0x00, +/* ֻ */ +0x00,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00, +0x00,0x00,0x10,0x40,0x20,0x20,0x40,0x10,0x00,0x00, +/* ּ */ +0x20,0xC0,0x27,0x00,0x38,0x20,0x20,0x20,0x1F,0xE0,0x00,0x00,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* ֽ */ +0x10,0x70,0x13,0xC0,0x22,0x40,0x4A,0x40,0x72,0x40,0x13,0xF0,0x22,0x40,0x7A,0x40, +0x02,0x40,0x1A,0xD0,0x63,0x30,0x02,0x10,0x00,0x00, +/* ־ */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0,0x00,0x00,0x02,0x00, +0x29,0x20,0x29,0x10,0x48,0x50,0x07,0xC0,0x00,0x00, +/* ֿ */ +0x11,0x00,0x7B,0xC0,0x11,0x40,0x7B,0x50,0x12,0xB0,0x34,0x10,0x00,0x80,0x1F,0x00, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x25,0x00,0x22,0x70,0x20,0x50,0x77,0x50,0x22,0x60,0x22,0x60,0x2F,0xD0,0x32,0x50, +0x62,0x50,0x25,0x60,0x25,0x40,0x68,0x40,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x04,0x00,0x08,0x80,0x10,0x40,0x3F,0xE0,0x02,0x20,0x02,0x00, +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x10,0x80,0x25,0xF0,0x7D,0x20,0x12,0x20,0x11,0x20,0x7D,0x40, +0x10,0x80,0x1D,0x40,0x72,0x20,0x04,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x1F,0xC0,0x10,0x40, +0x10,0x40,0x12,0x40,0x12,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x7D,0x10,0x55,0x10,0x55,0x10,0x55,0x10,0x55,0xF0,0x54,0x00, +0x5C,0x00,0x10,0xA0,0x10,0x90,0x11,0x10,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x11,0xF0,0x54,0x40,0x57,0xF0,0x54,0x20,0x55,0xF0,0x54,0x20, +0x55,0x20,0x5C,0xA0,0x64,0x20,0x00,0xE0,0x00,0x00, +/* */ +0x08,0x10,0x28,0x10,0x3E,0x90,0x48,0x90,0x7F,0x90,0x08,0x90,0x3E,0x90,0x2A,0x90, +0x2A,0x90,0x2A,0x10,0x2E,0x10,0x08,0x70,0x00,0x00, +/* */ +0x20,0x00,0x3E,0xF0,0x48,0x90,0x08,0x90,0x7E,0x90,0x14,0xF0,0x22,0x00,0x5F,0xE0, +0x10,0x20,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x70,0x80,0x12,0x80,0x13,0xE0,0x7C,0x80,0x10,0x80,0x3B,0xF0,0x34,0x80, +0x51,0x40,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x09,0x40,0x71,0x20,0x13,0xF0,0x12,0x40,0x7E,0x40,0x13,0xF0,0x3A,0x40,0x36,0x40, +0x53,0xF0,0x12,0x40,0x12,0x40,0x13,0xF0,0x00,0x00, +/* */ +0x00,0xE0,0x3F,0x00,0x21,0x00,0x3F,0xF0,0x21,0x00,0x2F,0xE0,0x28,0x20,0x29,0x20, +0x29,0x20,0x2A,0xA0,0x44,0x40,0x08,0x20,0x00,0x00, +/* */ +0x04,0x00,0x0F,0xE0,0x32,0x40,0x09,0x80,0x06,0x00,0x78,0x00,0x02,0x00,0x12,0x20, +0x22,0x40,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x80,0x57,0xE0,0x30,0x80,0x1F,0xF0,0x10,0x40,0x3F,0xF0, +0x54,0x40,0x12,0x40,0x20,0x40,0x41,0xC0,0x00,0x00, +/* */ +0x05,0x40,0x5F,0xF0,0x25,0x40,0x00,0x00,0x1F,0xF0,0x50,0x10,0x21,0x00,0x0F,0xE0, +0x09,0x20,0x29,0x20,0x49,0x60,0x01,0x00,0x00,0x00, +/* */ +0x01,0x00,0x21,0x00,0x12,0x00,0x04,0x20,0x4F,0xF0,0x20,0x10,0x07,0xE0,0x04,0x20, +0x14,0x20,0x24,0x20,0x47,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x50,0x50,0x20,0x20,0x5F,0xD0,0x04,0x00,0x08,0x80,0x1F,0xC0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x02,0x00,0x02,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x02,0x00,0x02,0x00, +0x29,0x20,0x29,0x10,0x48,0x50,0x07,0xC0,0x00,0x00, +/* */ +0x20,0x40,0x20,0x40,0x3C,0x40,0x41,0xF0,0x3D,0x50,0x11,0x50,0x11,0x50,0x7D,0xF0, +0x11,0x50,0x14,0x40,0x18,0x40,0x10,0x40,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x06,0x00, +0x09,0x10,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x22,0x20,0x4D,0x40,0x70,0x80,0x11,0x40,0x26,0x30,0x71,0x80, +0x00,0x40,0x1B,0x00,0x60,0xC0,0x00,0x20,0x00,0x00, +/* */ +0x08,0x80,0x70,0x80,0x10,0x80,0x17,0xF0,0x7C,0x90,0x14,0x90,0x3C,0x90,0x37,0xF0, +0x54,0x90,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x00,0x40,0x3C,0x40,0x24,0x40,0x25,0xF0,0x3D,0x50,0x25,0x50,0x25,0x50,0x3D,0xF0, +0x25,0x50,0x24,0x40,0x24,0x40,0x4C,0x40,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x02,0x00,0x7F,0xF0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x10,0x80,0x17,0xF0,0x34,0x90,0x54,0x90,0x14,0x90,0x17,0xF0, +0x14,0x90,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x08,0x80,0x08,0x80, +0x08,0x80,0x15,0x40,0x22,0x20,0x44,0x10,0x00,0x00, +/* */ +0x02,0x00,0x04,0x00,0x1F,0xC0,0x10,0x40,0x14,0x40,0x12,0x40,0x7F,0xF0,0x10,0x40, +0x14,0x40,0x22,0x40,0x20,0x40,0x40,0xC0,0x00,0x00, +/* */ +0x1F,0xF0,0x10,0x10,0x11,0x10,0x17,0xD0,0x11,0x10,0x1F,0xF0,0x10,0x10,0x17,0xD0, +0x14,0x50,0x17,0xD0,0x20,0x10,0x40,0x70,0x00,0x00, +/* */ +0x08,0x10,0x09,0x10,0x09,0x10,0x29,0x10,0x2D,0x50,0x4B,0x30,0x09,0x10,0x09,0x10, +0x11,0x10,0x11,0x10,0x21,0x10,0x40,0x10,0x00,0x00, +/* */ +0x04,0x10,0x44,0x90,0x24,0x90,0x04,0x90,0x0E,0xD0,0x55,0xB0,0x24,0x90,0x04,0x90, +0x14,0x90,0x24,0x90,0x48,0x90,0x10,0x10,0x00,0x00, +/* */ +0x21,0x00,0x13,0xE0,0x04,0x20,0x08,0x40,0x67,0xF0,0x20,0x10,0x20,0x10,0x23,0xF0, +0x28,0x10,0x30,0x10,0x27,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x02,0x00,0x72,0x70,0x1A,0x90,0x17,0x10,0x72,0x70,0x4F,0xC0,0x42,0x40,0x77,0x70, +0x1A,0x90,0x12,0x10,0x12,0x10,0x62,0x60,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x78,0x80,0x27,0xF0,0x54,0x90,0x7C,0x90,0x17,0xF0,0x1C,0x90, +0x74,0x90,0x14,0x90,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x00,0x20,0x3C,0x20,0x24,0x20,0x25,0xF0,0x3C,0x20,0x25,0x20,0x24,0xA0,0x3C,0xA0, +0x24,0x20,0x24,0x20,0x24,0x20,0x4C,0x60,0x00,0x00, +/* */ +0x3F,0xE0,0x00,0x20,0x1F,0xE0,0x00,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x42,0x10, +0x3F,0xE0,0x22,0x20,0x22,0x60,0x02,0x00,0x00,0x00, +/* */ +0x00,0x00,0x3D,0xE0,0x25,0x20,0x25,0x20,0x3D,0xE0,0x00,0x00,0x0F,0x80,0x08,0x80, +0x08,0x80,0x08,0x90,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x20,0x40,0x38,0x40,0x4B,0xF0,0x12,0x50,0x7A,0x40,0x0B,0xE0,0x0A,0xA0,0x7A,0xA0, +0x0A,0xA0,0x0A,0x40,0x7A,0xA0,0x05,0x10,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x42,0x10,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20, +0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x80,0x20,0x40,0x3F,0xE0,0x50,0x50,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x00,0x00,0x3F,0xE0,0x00,0x00, +/* */ +0x77,0xC0,0x12,0xB0,0x53,0x90,0x52,0xD0,0x57,0xA0,0x78,0xD0,0x0F,0x80,0x1A,0xD0, +0x6C,0xA0,0x09,0xA0,0x0A,0x90,0x34,0x80,0x00,0x00, +/* */ +0x00,0x80,0x72,0x80,0x23,0xE0,0x24,0x80,0x20,0x80,0x77,0xF0,0x20,0x80,0x21,0xC0, +0x22,0xA0,0x34,0x90,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x10,0x80,0x12,0x80,0x13,0xE0,0x7C,0x80,0x10,0x80,0x37,0xF0,0x38,0x80,0x51,0xC0, +0x12,0xA0,0x14,0x90,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x80,0x12,0x80,0x13,0xE0,0x7C,0x80,0x54,0x80,0x57,0xF0,0x7C,0x80,0x11,0xC0, +0x16,0xA0,0x1C,0x90,0x64,0x80,0x00,0x80,0x00,0x00, +/* */ +0x02,0x00,0x12,0x00,0x1F,0xC0,0x22,0x00,0x02,0x00,0x7F,0xF0,0x07,0x00,0x0A,0x80, +0x12,0x40,0x62,0x30,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x11,0x00,0x51,0x10,0x23,0xA0,0x51,0x40,0x1F,0xF0,0x11,0x00,0x33,0xE0,0x56,0x20, +0x1B,0xE0,0x12,0x20,0x13,0xE0,0x62,0x20,0x00,0x00, +/* */ +0x41,0x00,0x21,0x10,0x03,0xA0,0x01,0x40,0x6F,0xF0,0x21,0x00,0x23,0xE0,0x26,0x20, +0x2B,0xE0,0x22,0x20,0x33,0xE0,0x22,0x20,0x00,0x00, +/* */ +0x20,0x80,0x12,0x80,0x03,0xE0,0x04,0x80,0x70,0x80,0x17,0xF0,0x10,0x80,0x11,0xC0, +0x12,0xA0,0x1C,0x90,0x10,0x80,0x00,0x80,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xF0,0x02,0x00,0x05,0x10,0x69,0xA0,0x22,0xC0,0x2D,0xA0,0x22,0x90, +0x2C,0x90,0x23,0x00,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x08,0x40,0x08,0x40,0x10,0x80,0x1E,0xF0,0x29,0x20,0x4A,0x20,0x08,0x20,0x08,0x20, +0x08,0x20,0x08,0x20,0x08,0x20,0x08,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x18,0x80,0x57,0xF0,0x54,0x90,0x54,0x90,0x54,0x90,0x17,0xF0, +0x10,0x80,0x28,0x90,0x28,0xF0,0x47,0x90,0x00,0x00, +/* */ +0x02,0x00,0x1F,0x40,0x02,0x80,0x7F,0xF0,0x04,0x00,0x1F,0xE0,0x70,0x20,0x1F,0xE0, +0x10,0x20,0x1F,0xE0,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x10,0x00,0x7B,0xF0,0x10,0x80,0x10,0x80,0x18,0x80,0x73,0xE0, +0x10,0x80,0x10,0x80,0x10,0x80,0x37,0xF0,0x00,0x00, +/* */ +0x07,0xE0,0x74,0x20,0x57,0xE0,0x54,0x80,0x77,0xE0,0x56,0xA0,0x57,0xE0,0x74,0x80, +0x57,0xF0,0x5A,0x90,0x7B,0xD0,0x52,0x30,0x00,0x00, +/* */ +0x07,0xE0,0x74,0x20,0x57,0xE0,0x54,0x80,0x57,0xE0,0x56,0xA0,0x57,0xE0,0x54,0x80, +0x77,0xF0,0x5A,0x90,0x0B,0xD0,0x12,0x30,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x00,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0, +0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x1F,0x40,0x02,0x80,0x7F,0xF0,0x04,0x00,0x1F,0xE0, +0x70,0x20,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x10,0x00,0x7B,0xF0,0x10,0x80,0x30,0x80,0x38,0x80,0x53,0xE0, +0x10,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x3C,0x80,0x24,0x80,0x25,0xF0,0x3C,0x90,0x24,0x90,0x24,0x90,0x3C,0x90, +0x24,0x90,0x2F,0x10,0x71,0x10,0x02,0x60,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x10,0x00,0x7D,0xF0,0x54,0x40,0x54,0x40,0x7C,0x40,0x11,0xF0, +0x14,0x40,0x1C,0x40,0x64,0x40,0x01,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x40,0x44,0x00,0x55,0xF0,0x55,0x10,0x55,0x10,0x54,0x00,0x54,0x00, +0x54,0x00,0x10,0x00,0x29,0xF0,0x44,0x00,0x00,0x00, +/* */ +0x20,0x80,0x23,0xF0,0x38,0x80,0x43,0xE0,0x78,0x80,0x27,0xF0,0x21,0x20,0x79,0xF0, +0x22,0x20,0x22,0xA0,0x34,0x20,0x20,0x60,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x00,0x00,0x7B,0xC0,0x12,0x40,0x13,0x40, +0x12,0xC0,0x1A,0x50,0x64,0x50,0x08,0x30,0x00,0x00, +/* ס */ +0x09,0x00,0x08,0x80,0x10,0x00,0x17,0xF0,0x30,0x80,0x50,0x80,0x10,0x80,0x13,0xE0, +0x10,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* ע */ +0x02,0x00,0x41,0x00,0x20,0x00,0x0F,0xE0,0x01,0x00,0x41,0x00,0x21,0x00,0x0F,0xE0, +0x01,0x00,0x21,0x00,0x41,0x00,0x1F,0xF0,0x00,0x00, +/* ף */ +0x20,0x00,0x13,0xE0,0x7A,0x20,0x0A,0x20,0x12,0x20,0x12,0x20,0x3B,0xE0,0x55,0x40, +0x11,0x40,0x11,0x40,0x12,0x50,0x14,0x30,0x00,0x00, +/* פ */ +0x00,0x80,0x78,0x40,0x08,0x00,0x2B,0xF0,0x28,0x40,0x28,0x40,0x3C,0x40,0x05,0xF0, +0x14,0x40,0x64,0x40,0x04,0x40,0x1B,0xF0,0x00,0x00, +/* ץ */ +0x20,0x20,0x27,0xC0,0x25,0x40,0x75,0x40,0x25,0x40,0x25,0x40,0x35,0x40,0x65,0x40, +0x25,0x40,0x25,0x20,0x25,0x20,0x69,0x10,0x00,0x00, +/* צ */ +0x00,0xE0,0x3F,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x24,0x40, +0x24,0x40,0x24,0x20,0x24,0x20,0x44,0x10,0x00,0x00, +/* ק */ +0x20,0x80,0x20,0x80,0x27,0xF0,0x74,0x90,0x27,0xF0,0x24,0x90,0x37,0xF0,0x60,0xA0, +0x20,0x40,0x20,0xD0,0x21,0x30,0x66,0x10,0x00,0x00, +/* ר */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x04,0x00,0x04,0x00,0x7F,0xF0,0x08,0x00,0x1F,0xC0, +0x00,0x40,0x1C,0x80,0x03,0x80,0x00,0x40,0x00,0x00, +/* ש */ +0x00,0x80,0x78,0x80,0x17,0xE0,0x11,0x00,0x21,0x00,0x3F,0xF0,0x6A,0x00,0x2B,0xE0, +0x28,0x20,0x3B,0x40,0x28,0xC0,0x00,0x20,0x00,0x00, +/* ת */ +0x20,0x80,0x20,0x80,0x77,0xE0,0x21,0x00,0x51,0x00,0x57,0xF0,0x7A,0x00,0x13,0xE0, +0x18,0x20,0x73,0x40,0x10,0xC0,0x10,0x20,0x00,0x00, +/* ׫ */ +0x27,0x70,0x25,0x50,0x27,0x70,0x74,0x40,0x25,0x50,0x23,0x30,0x32,0x20,0x67,0xF0, +0x22,0x20,0x2F,0xF0,0x22,0x20,0x64,0x10,0x00,0x00, +/* ׬ */ +0x04,0x40,0x72,0x80,0x4F,0xF0,0x42,0x80,0x57,0xE0,0x52,0xA0,0x5F,0xF0,0x52,0xA0, +0x57,0xE0,0x16,0xC0,0x2A,0xA0,0x4A,0x90,0x00,0x00, +/* ׭ */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x0F,0x80,0x10,0x80,0x7F,0xF0,0x0C,0x20,0x32,0x40, +0x0D,0x80,0x33,0x40,0x0D,0x30,0x73,0x00,0x00,0x00, +/* ׮ */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7A,0x00,0x12,0x40,0x32,0x40,0x3B,0xF0,0x52,0x40, +0x12,0x40,0x12,0x40,0x12,0x40,0x15,0xF0,0x00,0x00, +/* ׯ */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x20,0x00,0x21,0x00,0x21,0x00,0x2F,0xE0,0x21,0x00, +0x21,0x00,0x21,0x00,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* װ */ +0x48,0x80,0x28,0x80,0x0F,0xF0,0x18,0x80,0x28,0x80,0x4B,0xE0,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* ױ */ +0x08,0x80,0x08,0x80,0x48,0x80,0x2B,0xF0,0x19,0x20,0x09,0x20,0x1A,0x20,0x29,0x40, +0x48,0x80,0x09,0x40,0x0A,0x20,0x0C,0x10,0x00,0x00, +/* ײ */ +0x10,0x80,0x13,0xE0,0x79,0x40,0x17,0xF0,0x12,0xA0,0x13,0xE0,0x1A,0xA0,0x73,0xE0, +0x10,0x80,0x13,0xE0,0x10,0x80,0x37,0xF0,0x00,0x00, +/* ׳ */ +0x10,0x80,0x10,0x80,0x50,0x80,0x30,0x80,0x17,0xF0,0x10,0x80,0x10,0x80,0x30,0x80, +0x50,0x80,0x10,0x80,0x13,0xE0,0x10,0x00,0x00,0x00, +/* ״ */ +0x10,0x80,0x10,0xA0,0x50,0x90,0x30,0x80,0x17,0xF0,0x10,0x80,0x11,0x40,0x31,0x40, +0x51,0x40,0x12,0x20,0x12,0x20,0x14,0x10,0x00,0x00, +/* ׵ */ +0x11,0x40,0x11,0x20,0x13,0xF0,0x7A,0x40,0x16,0x40,0x3B,0xF0,0x36,0x40,0x52,0x40, +0x13,0xF0,0x12,0x40,0x12,0x40,0x13,0xF0,0x00,0x00, +/* ׶ */ +0x21,0x40,0x21,0x20,0x3B,0xF0,0x42,0x40,0x76,0x40,0x2B,0xF0,0x22,0x40,0x7A,0x40, +0x23,0xF0,0x2A,0x40,0x32,0x40,0x23,0xF0,0x00,0x00, +/* ׷ */ +0x41,0x00,0x22,0x00,0x0F,0xE0,0x08,0x20,0x6F,0xE0,0x28,0x00,0x2F,0xE0,0x28,0x20, +0x28,0x20,0x2F,0xE0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* ׸ */ +0x08,0x80,0x3E,0xF0,0x09,0x20,0x7E,0xA0,0x10,0x40,0x3C,0xA0,0x45,0x10,0x1F,0xC0, +0x12,0x40,0x12,0x40,0x0D,0x80,0x70,0x60,0x00,0x00, +/* ׹ */ +0x3C,0x80,0x24,0x80,0x28,0x80,0x24,0x80,0x25,0x40,0x39,0x40,0x22,0x20,0x24,0x10, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* ׺ */ +0x20,0x00,0x27,0x70,0x41,0x10,0x55,0x50,0x62,0x20,0x25,0x50,0x40,0x00,0x77,0x70, +0x01,0x50,0x15,0x50,0x62,0x20,0x05,0x50,0x00,0x00, +/* ׻ */ +0x40,0x80,0x2F,0xF0,0x00,0x00,0x07,0xE0,0x64,0x20,0x27,0xE0,0x20,0x00,0x27,0xE0, +0x20,0x40,0x37,0xF0,0x20,0x80,0x01,0x80,0x00,0x00, +/* ׼ */ +0x02,0x80,0x02,0x40,0x47,0xF0,0x24,0x80,0x0C,0x80,0x17,0xE0,0x04,0x80,0x04,0x80, +0x17,0xE0,0x24,0x80,0x44,0x80,0x07,0xF0,0x00,0x00, +/* ׽ */ +0x13,0xE0,0x12,0x20,0x12,0x20,0x7A,0x20,0x13,0xE0,0x10,0x80,0x1A,0x80,0x72,0xF0, +0x12,0x80,0x12,0x80,0x15,0x80,0x38,0xF0,0x00,0x00, +/* ׾ */ +0x10,0x80,0x10,0x80,0x14,0x90,0x7C,0x90,0x14,0x90,0x17,0xF0,0x18,0x80,0x74,0x90, +0x14,0x90,0x14,0x90,0x17,0xF0,0x30,0x10,0x00,0x00, +/* ׿ */ +0x02,0x00,0x03,0xF0,0x02,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x03,0xE0,0x02,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x21,0x00,0x22,0x80,0x24,0xD0,0x73,0x60,0x22,0x40,0x25,0xE0, +0x21,0x50,0x32,0x40,0x64,0x40,0x01,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x22,0x20,0x22,0x20,0x3F,0xE0,0x02,0x00, +0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x00,0x40,0x7F,0x40,0x14,0x70,0x7F,0x90,0x55,0x10,0x55,0x90,0x63,0x50,0x41,0x50, +0x7F,0x10,0x41,0x10,0x7F,0x10,0x41,0x60,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x51,0x00,0x52,0x80,0x54,0xD0,0x53,0x60,0x52,0x40,0x55,0xE0, +0x71,0x50,0x52,0x40,0x04,0x40,0x01,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x04,0x00,0x3F,0xC0,0x08,0x00,0x7F,0xF0,0x10,0x40,0x3F,0xC0, +0x50,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x15,0xF0,0x5A,0x10,0x54,0x10,0x51,0x10,0x50,0x90,0x10,0x90, +0x10,0x10,0x28,0x10,0x24,0x10,0x40,0x60,0x00,0x00, +/* */ +0x21,0x00,0x11,0x00,0x01,0x00,0x0F,0xE0,0x49,0x20,0x29,0x20,0x09,0x20,0x0F,0xE0, +0x11,0x00,0x21,0x20,0x5F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x7F,0xF0,0x10,0x40,0x20,0x80,0x45,0x10,0x79,0xE0,0x10,0x40, +0x20,0x80,0x49,0x20,0x7D,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x04,0x00,0x47,0xF0,0x29,0x10,0x01,0x20,0x02,0x80,0x24,0x40,0x48,0x30,0x3F,0xE0, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x22,0x00,0x13,0xF0,0x04,0x90,0x11,0x40,0x66,0x30,0x00,0x00,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* */ +0x04,0x00,0x47,0xF0,0x29,0x10,0x02,0xA0,0x24,0x40,0x48,0x30,0x04,0x00,0x7F,0xF0, +0x08,0x40,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x44,0x20,0x22,0x40,0x0F,0xF0,0x04,0x40,0x45,0x50,0x29,0x90,0x0E,0xE0,0x02,0x20, +0x14,0x40,0x2A,0x90,0x4E,0xF0,0x02,0x10,0x00,0x00, +/* */ +0x04,0x90,0x49,0x20,0x32,0x40,0x09,0x20,0x04,0x90,0x40,0x00,0x2F,0xF0,0x09,0x10, +0x0F,0xF0,0x29,0x10,0x4F,0xF0,0x08,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x08,0x80,0x09,0xF0,0x11,0x20,0x12,0x20,0x19,0x20,0x71,0x40, +0x10,0x80,0x11,0x40,0x12,0x20,0x34,0x10,0x00,0x00, +/* */ +0x08,0x90,0x2E,0xA0,0x28,0xC0,0x2E,0x90,0x74,0x70,0x08,0x80,0x1F,0x00,0x04,0x40, +0x3F,0xE0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x08,0x00,0x0B,0xE0,0x10,0x20,0x10,0x40,0x30,0x80,0x50,0x80,0x17,0xF0,0x10,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x54,0x20,0x38,0x40,0x10,0x80,0x7C,0x80,0x13,0xF0,0x38,0x80, +0x54,0x80,0x10,0x80,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x01,0x00,0x5F,0xF0,0x32,0x10,0x01,0x00,0x0F,0xE0,0x44,0x40,0x22,0x80,0x1F,0xF0, +0x01,0x00,0x2F,0xE0,0x41,0x00,0x01,0x00,0x00,0x00, +/* */ +0x00,0x00,0x1F,0xC0,0x00,0x80,0x01,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x02,0x00,0x04,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x20, +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x01,0x00,0x5F,0xF0,0x21,0x00,0x0F,0xE0,0x01,0x00,0x5F,0xF0,0x20,0x00,0x0F,0xE0, +0x09,0x20,0x29,0x20,0x46,0xC0,0x18,0x30,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x00,0x00,0x1F,0xC0,0x00,0x80,0x01,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x24,0x20,0x28,0x40,0x7E,0x90,0x24,0x20,0x7E,0x40,0x02,0x00,0x7F,0xF0,0x40,0x10, +0x3F,0xE0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x10,0x78,0x00,0x13,0xE0,0x30,0x00,0x38,0x00,0x53,0xF0, +0x10,0x80,0x12,0xA0,0x14,0x90,0x11,0x80,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xF0,0x4A,0x10,0x48,0x00,0x7B,0xE0,0x10,0x00,0x10,0x00,0x5B,0xF0, +0x50,0x80,0x52,0xA0,0x5C,0x90,0x61,0x80,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x00,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x7F,0xF0, +0x02,0x00,0x12,0x40,0x22,0x20,0x46,0x10,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x24,0x10,0x48,0x00,0x73,0xE0,0x10,0x00,0x20,0x00,0x77,0xF0, +0x00,0x80,0x12,0xA0,0x64,0x90,0x01,0x80,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x12,0x40,0x12,0x40,0x22,0x40,0x4A,0x40,0x72,0x40,0x12,0x40,0x22,0x40,0x72,0x40, +0x05,0xA0,0x14,0xA0,0x69,0x20,0x12,0x10,0x00,0x00, +/* */ +0x10,0x00,0x1E,0xF0,0x22,0x90,0x44,0x90,0x3E,0xA0,0x02,0xA0,0x02,0x90,0x3E,0x90, +0x02,0x90,0x02,0xE0,0x3E,0x80,0x02,0x80,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x12,0x00, +0x13,0xE0,0x12,0x00,0x2A,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x04,0x00,0x1F,0xC0,0x08,0x00,0x7F,0xF0,0x10,0x40,0x2F,0xA0, +0x42,0x10,0x3F,0xE0,0x04,0x80,0x18,0x40,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x7B,0xE0,0x11,0x00,0x17,0xF0,0x1A,0x20,0x75,0xD0, +0x10,0x80,0x17,0xF0,0x11,0x40,0x32,0x20,0x00,0x00, +/* */ +0x08,0x00,0x73,0xE0,0x12,0x20,0x12,0x20,0x7B,0xE0,0x12,0x20,0x3A,0x20,0x37,0xE0, +0x52,0x20,0x12,0x20,0x12,0x20,0x17,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x02,0x00,0x02,0x00,0x13,0xE0, +0x12,0x00,0x12,0x00,0x2A,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x3F,0xE0,0x08,0x80,0x08,0x80,0x15,0x40,0x22,0x20,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x11,0x00,0x09,0x00,0x01,0xF0,0x7A,0x00,0x24,0x80,0x20,0xF0,0x3D,0x40,0x24,0x40, +0x25,0xF0,0x24,0x40,0x24,0xA0,0x59,0x10,0x00,0x00, +/* */ +0x20,0x00,0x13,0xE0,0x7A,0x20,0x0A,0x20,0x13,0xE0,0x1A,0x20,0x36,0x20,0x53,0xE0, +0x12,0x20,0x12,0x20,0x12,0x20,0x17,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x17,0xE0,0x04,0x20,0x04,0x20,0x67,0xE0,0x24,0x20,0x24,0x20,0x27,0xE0, +0x2C,0x20,0x34,0x20,0x24,0x20,0x1F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x4A,0x20,0x4A,0x20,0x53,0xE0,0x52,0x20,0x4A,0x20,0x4B,0xE0, +0x4A,0x20,0x72,0x20,0x42,0x20,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x22,0x20,0x4A,0x20,0x73,0xE0,0x12,0x20,0x22,0x20,0x7B,0xE0, +0x02,0x20,0x1A,0x20,0x62,0x20,0x07,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x38,0x80,0x40,0xF0,0x78,0x80,0x20,0x80,0x23,0xF0,0x7A,0x10, +0x22,0x10,0x2A,0x10,0x33,0xF0,0x22,0x10,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x49,0x20,0x1F,0xC0,0x15,0x40,0x12,0xC0,0x7F,0xF0,0x20,0x20, +0x48,0x50,0x3F,0xE0,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x03,0x50,0x0A,0x60,0x7B,0x50,0x5E,0x30,0x53,0xC0,0x54,0x40,0x5F,0xF0,0x54,0x90, +0x77,0xF0,0x54,0x90,0x07,0xF0,0x08,0x90,0x00,0x00, +/* */ +0x7C,0x80,0x10,0x40,0x7D,0xF0,0x54,0xA0,0x54,0xA0,0x6D,0x50,0x44,0x00,0x7C,0x40, +0x45,0xF0,0x44,0x40,0x7C,0x40,0x44,0x40,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x7F,0xF0,0x24,0x00,0x3D,0xE0,0x24,0xA0, +0x3C,0xA0,0x26,0x40,0x7C,0xA0,0x05,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x25,0x20,0x3F,0xE0,0x05,0x00,0x7D,0xF0,0x05,0x00,0x3D,0xE0, +0x05,0x00,0x7D,0xF0,0x05,0x00,0x05,0x00,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x28,0xA0,0x37,0x60,0x20,0x20,0x3F,0xE0, +0x00,0x40,0x7F,0xF0,0x10,0x40,0x08,0xC0,0x00,0x00, +/* */ +0x44,0x40,0x2F,0xE0,0x02,0x80,0x0F,0xE0,0x6A,0xA0,0x2C,0xE0,0x2B,0x20,0x2F,0xE0, +0x20,0x40,0x2F,0xF0,0x24,0x40,0x5F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7A,0x00,0x4B,0xF0,0x4D,0x00,0x49,0x00,0x79,0xE0,0x49,0x00,0x49,0x00, +0x49,0xF0,0x79,0x00,0x49,0x00,0x01,0x00,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x7F,0xF0,0x04,0x00,0x08,0x00,0x08,0x00,0x0F,0xE0,0x11,0x00, +0x11,0x00,0x21,0x00,0x41,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x09,0x00,0x09,0x00,0x17,0xF0,0x11,0x00,0x32,0x00,0x52,0x00,0x13,0xE0,0x14,0x80, +0x14,0x80,0x18,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x12,0x00,0x12,0x00,0x13,0xF0,0x7D,0x00,0x11,0x00,0x31,0xE0,0x39,0x00,0x55,0x00, +0x11,0xF0,0x11,0x00,0x11,0x00,0x11,0x00,0x00,0x00, +/* */ +0x14,0x80,0x14,0x80,0x24,0x80,0x2E,0xF0,0x65,0x20,0x24,0xA0,0x2E,0xA0,0x2A,0xA0, +0x2A,0xA0,0x2E,0x40,0x28,0xA0,0x21,0x10,0x00,0x00, +/* */ +0x0A,0x00,0x0A,0x00,0x13,0xF0,0x15,0x00,0x31,0x00,0x51,0xE0,0x11,0x00,0x11,0x00, +0x11,0xF0,0x11,0x00,0x11,0x00,0x11,0x00,0x00,0x00, +/* */ +0x02,0x00,0x12,0x40,0x12,0x40,0x12,0x40,0x12,0x40,0x2A,0xA0,0x47,0x10,0x02,0x00, +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x21,0x00,0x25,0x40,0x25,0x40,0x2B,0xA0,0x31,0x10, +0x2F,0xE0,0x21,0x00,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* */ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* */ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* */ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* */ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* ء */ +0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* آ */ +0x00,0x00,0x7F,0xF0,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80, +0x08,0x80,0x10,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* أ */ +0x00,0x00,0x7F,0xF0,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80, +0x10,0x80,0x10,0x90,0x20,0x90,0x40,0x70,0x00,0x00, +/* ؤ */ +0x00,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x23,0xF0,0x22,0x00,0x22,0x00,0x3F,0xF0, +0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x60,0x00,0x00, +/* إ */ +0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x7F,0xF0,0x10,0x40,0x10,0x40,0x10,0x40, +0x10,0x40,0x10,0x40,0x1F,0xC0,0x10,0x40,0x00,0x00, +/* ئ */ +0x10,0x40,0x12,0x40,0x12,0x40,0x12,0x40,0x12,0x40,0x7F,0xF0,0x12,0x40,0x12,0x40, +0x12,0x40,0x12,0x40,0x22,0x40,0x40,0x40,0x00,0x00, +/* ا */ +0x00,0x00,0x7F,0xF0,0x01,0x00,0x02,0x00,0x06,0xC0,0x0A,0x20,0x12,0x10,0x62,0x00, +0x02,0x00,0x02,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* ب */ +0x00,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20, +0x20,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* ة */ +0x1F,0x80,0x00,0x80,0x01,0x00,0x02,0x20,0x7A,0xC0,0x0B,0x00,0x12,0x80,0x22,0x40, +0x42,0x30,0x0E,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* ت */ +0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x7F,0xF0,0x48,0x90, +0x45,0x10,0x5F,0xD0,0x42,0x10,0x42,0x30,0x00,0x00, +/* ث */ +0x7F,0xF0,0x02,0x00,0x0E,0xC0,0x72,0x30,0x02,0x00,0x11,0xE0,0x7C,0x20,0x24,0x40, +0x65,0xF0,0x18,0x40,0x24,0x40,0x42,0xC0,0x00,0x00, +/* ج */ +0x7F,0xF0,0x3A,0xE0,0x2A,0xA0,0x3A,0xE0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3A,0xE0, +0x2A,0xA0,0x3A,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* ح */ +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* خ */ +0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x42,0x10, +0x42,0x90,0x5F,0xD0,0x40,0x50,0x40,0x30,0x00,0x00, +/* د */ +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00, +0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x00,0x00, +/* ذ */ +0x20,0x00,0x20,0x00,0x20,0x20,0x20,0xC0,0x23,0x00,0x3C,0x00,0x20,0x00,0x20,0x10, +0x20,0x10,0x20,0x10,0x1F,0xF0,0x00,0x00,0x00,0x00, +/* ر */ +0x01,0xE0,0x3E,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x03,0xF0,0x7E,0x00,0x02,0x00, +0x02,0x00,0x02,0x10,0x02,0x10,0x01,0xF0,0x00,0x00, +/* ز */ +0x01,0xC0,0x3E,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00,0x05,0x00, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* س */ +0x00,0x20,0x30,0x40,0x0C,0x80,0x03,0x00,0x0C,0xE0,0x70,0x10,0x00,0x00,0x08,0x40, +0x04,0x80,0x03,0x00,0x0C,0xC0,0x70,0x30,0x00,0x00, +/* ش */ +0x00,0xE0,0x3F,0x00,0x20,0x00,0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x28,0x20,0x28,0x20, +0x28,0xC0,0x28,0x10,0x28,0x10,0x47,0xF0,0x00,0x00, +/* ص */ +0x00,0xE0,0x3F,0x00,0x21,0x00,0x21,0x00,0x21,0x00,0x3F,0xF0,0x21,0x00,0x20,0x80, +0x20,0x90,0x28,0x50,0x32,0x30,0x21,0x10,0x00,0x00, +/* ض */ +0x04,0x00,0x08,0x00,0x7F,0xF0,0x40,0x10,0x48,0x90,0x45,0x10,0x42,0x10,0x45,0x10, +0x48,0x90,0x40,0x10,0x7F,0xF0,0x40,0x10,0x00,0x00, +/* ط */ +0x24,0x40,0x29,0x40,0x2E,0x40,0x25,0x40,0x2F,0x40,0x20,0x40,0x2F,0x40,0x29,0x40, +0x2F,0x40,0x29,0x50,0x2F,0x50,0x4B,0x30,0x00,0x00, +/* ظ */ +0x21,0x20,0x27,0xF0,0x20,0x80,0x7B,0xE0,0x2A,0x20,0x2B,0xE0,0x2A,0x20,0x2B,0xE0, +0x2A,0x20,0x2B,0xE0,0x28,0x10,0x47,0xF0,0x00,0x00, +/* ع */ +0x40,0x80,0x78,0x40,0x03,0xF0,0x78,0x80,0x49,0x20,0x5B,0xF0,0x7C,0x10,0x4A,0xA0, +0x5A,0xA0,0x7A,0xA0,0x0A,0xA0,0x34,0x30,0x00,0x00, +/* غ */ +0x08,0x00,0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x10,0x40,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* ػ */ +0x49,0x20,0x29,0xC0,0x49,0x10,0x10,0xF0,0x7E,0x40,0x11,0xF0,0x7C,0x40,0x45,0xE0, +0x7C,0xA0,0x44,0xA0,0x28,0x40,0x7D,0xB0,0x00,0x00, +/* ؼ */ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0x02,0x00, +0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* ؽ */ +0x3F,0xC0,0x00,0x80,0x01,0x00,0x7A,0xF0,0x4A,0x10,0x4A,0xA0,0x4A,0x40,0x7A,0xA0, +0x03,0x10,0x06,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* ؾ */ +0x7F,0xE0,0x29,0x20,0x2F,0x70,0x49,0x10,0x0F,0x60,0x49,0x10,0x4F,0x10,0x7D,0xF0, +0x05,0x00,0x7D,0xF0,0x25,0x10,0x45,0x10,0x00,0x00, +/* ؿ */ +0x00,0x00,0x10,0x00,0x10,0x40,0x11,0xC0,0x16,0x40,0x18,0x40,0x70,0x40,0x10,0x40, +0x13,0x80,0x10,0x10,0x10,0x10,0x0F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0x80,0x1E,0x80,0x10,0x80,0x10,0x80,0x7E,0x80,0x42,0x80, +0x42,0x80,0x42,0x90,0x7E,0x90,0x42,0x70,0x00,0x00, +/* */ +0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x10,0x40,0x10,0x40,0x10,0x40, +0x10,0x40,0x20,0x40,0x20,0x40,0x40,0x40,0x00,0x00, +/* */ +0x0A,0x80,0x0A,0x80,0x7A,0xF0,0x0A,0x80,0x0A,0x80,0x3F,0xE0,0x02,0x00,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x40,0x10,0x1F,0x80,0x01,0x00,0x02,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x12,0x40,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x2F,0xA0, +0x28,0xA0,0x2F,0xA0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x27,0x70,0x25,0x10,0x25,0x10,0x77,0x70,0x24,0x00,0x24,0x00,0x77,0x70,0x54,0x50, +0x54,0x50,0x57,0x20,0x74,0x50,0x54,0x90,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xF0,0x21,0x00,0x21,0x00,0x21,0x00,0x21,0x00,0x22,0x80,0x22,0x80, +0x24,0x40,0x24,0x40,0x28,0x20,0x50,0x10,0x00,0x00, +/* */ +0x3F,0xF0,0x22,0x00,0x22,0x00,0x3F,0xF0,0x24,0x00,0x29,0x00,0x2F,0xE0,0x21,0x00, +0x21,0x00,0x3F,0xF0,0x21,0x00,0x41,0x00,0x00,0x00, +/* */ +0x3F,0xF0,0x24,0x40,0x2F,0xE0,0x24,0x40,0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x28,0x20, +0x2F,0xE0,0x28,0x20,0x2F,0xE0,0x48,0x20,0x00,0x00, +/* */ +0x3F,0xF0,0x21,0x20,0x3F,0xF0,0x24,0x40,0x38,0x30,0x2F,0xE0,0x29,0x20,0x2F,0xE0, +0x29,0x20,0x2F,0xE0,0x29,0x20,0x41,0x00,0x00,0x00, +/* */ +0x3F,0xF0,0x31,0x40,0x2A,0x40,0x3F,0x70,0x24,0x90,0x35,0x10,0x35,0x40,0x3F,0x40, +0x24,0x40,0x24,0xA0,0x28,0xA0,0x51,0x10,0x00,0x00, +/* */ +0x3F,0xF0,0x2A,0x10,0x2A,0xE0,0x3F,0x80,0x2A,0x80,0x2E,0xF0,0x2A,0xA0,0x2E,0xA0, +0x2A,0xA0,0x3F,0xA0,0x2A,0xA0,0x51,0x20,0x00,0x00, +/* */ +0x3F,0xF0,0x21,0x20,0x3F,0xF0,0x24,0x40,0x38,0x30,0x27,0xC0,0x21,0x00,0x2F,0xE0, +0x2A,0xA0,0x2B,0xA0,0x2A,0xA0,0x4F,0xE0,0x00,0x00, +/* */ +0x3F,0xF0,0x25,0x40,0x2B,0xF0,0x2E,0x40,0x3B,0xF0,0x2A,0x40,0x2B,0xF0,0x20,0x00, +0x2F,0xE0,0x29,0x20,0x22,0xC0,0x5C,0x30,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00, +0x20,0x00,0x20,0x00,0x20,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x00,0x20,0x00,0x27,0xC0,0x24,0x40,0x24,0x40,0x24,0x40,0x24,0x40, +0x27,0xC0,0x20,0x00,0x20,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x44,0x80,0x44,0x80,0x5E,0x80,0x49,0xE0,0x54,0xA0,0x5E,0xA0,0x44,0xA0, +0x5E,0xA0,0x44,0xB0,0x45,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x3F,0xF0,0x21,0x00,0x2F,0xE0,0x29,0x20,0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x29,0x20, +0x29,0x20,0x22,0xC0,0x2C,0x20,0x3F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x42,0x00,0x5F,0xE0,0x50,0x20,0x5F,0xE0,0x50,0x00,0x5F,0xE0,0x5A,0xA0, +0x6F,0xE0,0x4A,0xA0,0x48,0x60,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x40,0x7D,0xF0,0x48,0x40,0x49,0xF0,0x5C,0x40,0x57,0xF0,0x54,0x00,0x55,0xF0, +0x5D,0x50,0x49,0x50,0x48,0xA0,0x7D,0x10,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x3E,0x80,0x08,0x80,0x08,0xC0,0x7E,0xA0,0x00,0x90,0x08,0x90, +0x3E,0x80,0x08,0x80,0x0E,0x80,0x70,0x80,0x00,0x00, +/* */ +0x02,0x00,0x03,0xF0,0x02,0x00,0x3F,0xF0,0x20,0x10,0x3F,0x90,0x20,0x90,0x20,0x90, +0x3F,0x90,0x20,0x10,0x3F,0xF0,0x20,0x10,0x00,0x00, +/* */ +0x00,0x20,0x00,0x20,0x01,0x20,0x01,0x20,0x01,0x20,0x01,0x20,0x01,0x20,0x01,0x20, +0x01,0x20,0x00,0x20,0x00,0x20,0x00,0xE0,0x00,0x00, +/* */ +0x00,0x10,0x02,0x10,0x02,0x90,0x42,0x90,0x24,0x90,0x14,0x90,0x08,0x90,0x08,0x90, +0x14,0x90,0x12,0x10,0x22,0x10,0x40,0x70,0x00,0x00, +/* */ +0x20,0x10,0x20,0x10,0x3F,0x50,0x55,0x50,0x15,0x50,0x15,0x50,0x25,0x50,0x29,0x50, +0x49,0x50,0x11,0x10,0x21,0x10,0x46,0x30,0x00,0x00, +/* */ +0x00,0x10,0x7C,0x10,0x08,0x90,0x10,0x90,0x28,0x90,0x44,0x90,0x02,0x90,0x7C,0x90, +0x10,0x90,0x10,0x10,0x1C,0x10,0x60,0x70,0x00,0x00, +/* */ +0x08,0x10,0x7F,0x10,0x14,0x50,0x22,0x50,0x5D,0x50,0x00,0x50,0x7F,0x50,0x20,0x50, +0x3E,0x50,0x02,0x10,0x02,0x10,0x0C,0x30,0x00,0x00, +/* */ +0x08,0x10,0x49,0x10,0x49,0x50,0x7F,0x50,0x10,0x50,0x1E,0x50,0x22,0x50,0x52,0x50, +0x0A,0x50,0x04,0x10,0x18,0x10,0x60,0x30,0x00,0x00, +/* */ +0x08,0x10,0x49,0x10,0x49,0x50,0x7F,0x50,0x00,0x50,0x7F,0x50,0x01,0x50,0x7F,0x50, +0x40,0x50,0x43,0x10,0x4C,0x10,0x70,0x30,0x00,0x00, +/* */ +0x08,0x10,0x08,0x10,0x7F,0x50,0x08,0x50,0x7F,0x50,0x49,0x50,0x49,0x50,0x7F,0x50, +0x1C,0x50,0x2A,0x10,0x49,0x10,0x08,0x30,0x00,0x00, +/* */ +0x08,0x10,0x3F,0x10,0x12,0x50,0x21,0x50,0x7F,0xD0,0x01,0x50,0x3D,0x50,0x25,0x50, +0x25,0x50,0x3D,0x10,0x21,0x10,0x07,0x30,0x00,0x00, +/* */ +0x08,0x10,0x2A,0x10,0x2C,0x90,0x48,0x90,0x14,0x90,0x22,0x90,0x08,0x90,0x2A,0x90, +0x2C,0x90,0x48,0x10,0x14,0x10,0x62,0x70,0x00,0x00, +/* */ +0x08,0x10,0x7F,0x10,0x41,0x50,0x20,0x50,0x37,0x50,0x55,0x50,0x55,0x50,0x57,0x50, +0x24,0x50,0x25,0x10,0x26,0x10,0x44,0x30,0x00,0x00, +/* */ +0x22,0x10,0x7F,0x10,0x22,0x50,0x77,0x50,0x55,0x50,0x77,0x50,0x55,0x50,0x77,0x50, +0x55,0x50,0x55,0x10,0x55,0x10,0x3B,0x30,0x00,0x00, +/* */ +0x7F,0x10,0x14,0x10,0x7F,0x50,0x55,0x50,0x7F,0x50,0x00,0x50,0x3E,0x50,0x00,0x50, +0x7F,0x50,0x08,0x10,0x2A,0x10,0x59,0x30,0x00,0x00, +/* */ +0x00,0x10,0x3F,0x90,0x21,0x50,0x35,0x50,0x29,0xD0,0x3E,0xD0,0x29,0x50,0x2B,0x50, +0x3F,0x50,0x29,0x10,0x2A,0x90,0x54,0xB0,0x00,0x00, +/* */ +0x14,0x10,0x12,0x10,0x3F,0x50,0x64,0x50,0x3F,0x50,0x24,0x50,0x3F,0x50,0x24,0x50, +0x3F,0x50,0x20,0x10,0x55,0x10,0x55,0x30,0x00,0x00, +/* */ +0x12,0x10,0x7F,0x10,0x12,0x50,0x24,0x50,0x7F,0x50,0x24,0x50,0x3F,0x50,0x24,0x50, +0x3F,0x50,0x12,0x10,0x0C,0x10,0x73,0x30,0x00,0x00, +/* */ +0x08,0x10,0x1E,0x10,0x12,0x50,0x1E,0x50,0x12,0x50,0x3F,0x50,0x29,0x50,0x3F,0x50, +0x29,0x50,0x7F,0x90,0x12,0x10,0x22,0x30,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10, +0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x70,0x00,0x00, +/* */ +0x7F,0xF0,0x40,0x10,0x48,0x90,0x45,0x10,0x7F,0xF0,0x42,0x10,0x5F,0xD0,0x48,0x10, +0x48,0x10,0x4F,0x90,0x40,0x10,0x40,0x70,0x00,0x00, +/* */ +0x08,0x00,0x08,0x00,0x10,0x00,0x10,0x00,0x30,0x00,0x50,0x00,0x10,0x00,0x10,0x00, +0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00, +/* */ +0x08,0x00,0x0B,0xF0,0x10,0x40,0x10,0x40,0x30,0x40,0x50,0x40,0x10,0x40,0x10,0x40, +0x10,0x40,0x10,0x40,0x10,0x40,0x11,0xC0,0x00,0x00, +/* */ +0x08,0x00,0x0B,0xC0,0x12,0x40,0x12,0x40,0x32,0x40,0x52,0x40,0x12,0x40,0x12,0x40, +0x12,0x40,0x12,0x50,0x14,0x50,0x18,0x30,0x00,0x00, +/* */ +0x09,0x00,0x09,0x00,0x11,0x00,0x17,0xF0,0x31,0x10,0x51,0x10,0x11,0x10,0x11,0x10, +0x12,0x10,0x12,0x10,0x14,0x10,0x18,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x20,0x00,0x20,0x00,0x60,0x00,0x20,0x00,0x27,0xE0,0x20,0x00, +0x20,0x00,0x20,0x00,0x20,0x00,0x2F,0xF0,0x00,0x00, +/* */ +0x0A,0x00,0x0A,0x00,0x13,0xF0,0x14,0x00,0x38,0x00,0x57,0xE0,0x10,0x20,0x10,0xC0, +0x13,0x00,0x14,0x10,0x14,0x10,0x13,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x11,0x00,0x11,0x20,0x32,0x20,0x54,0x40,0x10,0x40,0x10,0x80, +0x11,0x00,0x12,0x20,0x17,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x08,0x00,0x0B,0xF0,0x10,0x90,0x10,0x90,0x32,0x90,0x52,0x90,0x12,0x90,0x14,0x90, +0x11,0x10,0x11,0x10,0x12,0x10,0x14,0x60,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x24,0x00,0x25,0x20,0x64,0xA0,0x24,0xA0,0x24,0x40,0x24,0x40, +0x24,0xA0,0x25,0x20,0x24,0x00,0x27,0xF0,0x00,0x00, +/* */ +0x14,0x80,0x14,0x80,0x24,0x90,0x24,0x90,0x67,0xA0,0x24,0xC0,0x24,0x80,0x24,0x80, +0x24,0x80,0x25,0x90,0x26,0x90,0x24,0x70,0x00,0x00, +/* */ +0x08,0x00,0x0B,0xF0,0x10,0x20,0x11,0x20,0x32,0x20,0x53,0xF0,0x10,0x60,0x10,0xA0, +0x11,0x20,0x12,0x20,0x14,0x20,0x10,0x60,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x22,0x00,0x22,0x00,0x63,0xC0,0x22,0x40,0x22,0x40,0x25,0x40, +0x24,0x40,0x24,0x50,0x25,0x50,0x26,0x30,0x00,0x00, +/* */ +0x0A,0x00,0x0A,0x00,0x13,0xE0,0x14,0x80,0x30,0x80,0x50,0x80,0x10,0x80,0x17,0xF0, +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x0A,0x00,0x0A,0x20,0x12,0xC0,0x13,0x00,0x32,0x00,0x5F,0xF0,0x12,0x40,0x12,0x40, +0x12,0x20,0x12,0xA0,0x13,0x10,0x12,0x00,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x22,0x80,0x24,0x40,0x68,0x30,0x27,0xC0,0x24,0x40,0x24,0x40, +0x25,0x80,0x24,0x10,0x24,0x10,0x23,0xF0,0x00,0x00, +/* */ +0x09,0x00,0x08,0x80,0x17,0xF0,0x10,0x00,0x30,0x00,0x53,0xC0,0x12,0x40,0x12,0x40, +0x12,0x40,0x12,0x50,0x14,0x50,0x18,0x30,0x00,0x00, +/* */ +0x09,0x00,0x08,0x80,0x10,0x00,0x17,0xF0,0x34,0x10,0x54,0x10,0x10,0x00,0x10,0x00, +0x10,0x00,0x10,0x00,0x17,0xF0,0x10,0x00,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x20,0x00,0x2F,0xF0,0x61,0x00,0x21,0x00,0x2F,0xF0,0x22,0x40, +0x26,0x40,0x21,0x80,0x22,0x40,0x2C,0x20,0x00,0x00, +/* */ +0x09,0x00,0x09,0x00,0x11,0xE0,0x11,0x00,0x31,0x00,0x5F,0xF0,0x11,0x00,0x11,0x80, +0x11,0x40,0x11,0x20,0x11,0x00,0x11,0x00,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x21,0x00,0x29,0xF0,0x6A,0x20,0x2D,0x20,0x29,0x20,0x29,0x40, +0x28,0x80,0x29,0x40,0x22,0x20,0x24,0x10,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x12,0x80,0x13,0xE0,0x34,0x80,0x50,0x80,0x17,0xF0,0x10,0x80, +0x11,0x40,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x0A,0x00,0x0A,0x00,0x17,0xF0,0x14,0x10,0x38,0x10,0x57,0xD0,0x14,0x50,0x14,0x50, +0x17,0xD0,0x14,0x10,0x10,0x10,0x10,0x60,0x00,0x00, +/* ١ */ +0x09,0x00,0x09,0xE0,0x12,0x20,0x15,0x40,0x30,0x80,0x51,0x40,0x16,0x30,0x11,0x80, +0x10,0x40,0x13,0x00,0x10,0xC0,0x10,0x20,0x00,0x00, +/* ٢ */ +0x09,0x00,0x08,0x80,0x17,0xF0,0x14,0x10,0x30,0x00,0x52,0x20,0x12,0x40,0x12,0x80, +0x13,0x00,0x12,0x10,0x12,0x10,0x11,0xF0,0x00,0x00, +/* ٣ */ +0x10,0x00,0x17,0xF0,0x24,0x10,0x24,0x10,0x67,0xF0,0x24,0x00,0x25,0x20,0x25,0x40, +0x25,0x80,0x25,0x10,0x29,0x10,0x30,0xF0,0x00,0x00, +/* ٤ */ +0x14,0x00,0x14,0x00,0x24,0x70,0x2F,0x50,0x65,0x50,0x25,0x50,0x25,0x50,0x25,0x50, +0x25,0x50,0x25,0x50,0x29,0x70,0x33,0x50,0x00,0x00, +/* ٥ */ +0x11,0x00,0x11,0x00,0x2F,0xF0,0x21,0x00,0x61,0x00,0x2F,0xE0,0x20,0x00,0x2F,0xE0, +0x28,0x20,0x28,0x20,0x2F,0xE0,0x28,0x20,0x00,0x00, +/* ٦ */ +0x08,0x00,0x0F,0xF0,0x12,0x20,0x12,0x20,0x33,0xE0,0x52,0x20,0x13,0xE0,0x12,0x20, +0x12,0x30,0x17,0xE0,0x10,0x20,0x10,0x20,0x00,0x00, +/* ٧ */ +0x11,0x00,0x11,0x00,0x2F,0xF0,0x22,0x00,0x67,0xE0,0x2C,0x20,0x37,0xE0,0x24,0x20, +0x27,0xE0,0x24,0x20,0x24,0x20,0x24,0x60,0x00,0x00, +/* ٨ */ +0x08,0x80,0x0F,0xF0,0x11,0x40,0x12,0x20,0x35,0xD0,0x50,0x00,0x17,0xF0,0x12,0x00, +0x13,0xE0,0x10,0x20,0x10,0x20,0x10,0xC0,0x00,0x00, +/* ٩ */ +0x10,0x00,0x17,0xE0,0x24,0x20,0x24,0x20,0x67,0xE0,0x20,0x00,0x25,0x40,0x25,0x40, +0x25,0x40,0x25,0x40,0x29,0x50,0x31,0x30,0x00,0x00, +/* ٪ */ +0x08,0x80,0x0A,0x80,0x13,0xE0,0x14,0x80,0x30,0x80,0x57,0xF0,0x10,0x80,0x11,0xC0, +0x12,0xA0,0x14,0x90,0x10,0x80,0x10,0x80,0x00,0x00, +/* ٫ */ +0x12,0x40,0x12,0x40,0x24,0x20,0x28,0x10,0x67,0xE0,0x24,0x20,0x27,0xE0,0x24,0x20, +0x27,0xE0,0x24,0x20,0x24,0x20,0x24,0x60,0x00,0x00, +/* ٬ */ +0x12,0x40,0x12,0x40,0x22,0x40,0x2A,0x50,0x66,0x60,0x22,0x40,0x26,0x60,0x2A,0x50, +0x22,0x40,0x24,0x50,0x24,0x50,0x28,0x30,0x00,0x00, +/* ٭ */ +0x11,0x00,0x10,0x80,0x2F,0xF0,0x22,0x40,0x61,0x80,0x22,0x40,0x2C,0x30,0x22,0x40, +0x22,0x40,0x22,0x40,0x24,0x40,0x28,0x40,0x00,0x00, +/* ٮ */ +0x11,0x00,0x10,0x80,0x2F,0xF0,0x20,0x00,0x62,0x40,0x24,0x20,0x2A,0x50,0x22,0x40, +0x22,0x40,0x21,0x80,0x22,0x40,0x2C,0x30,0x00,0x00, +/* ٯ */ +0x10,0x80,0x10,0x80,0x2F,0xF0,0x29,0x10,0x61,0x00,0x22,0x90,0x26,0xA0,0x2A,0x40, +0x32,0x40,0x22,0x20,0x23,0x10,0x22,0x00,0x00,0x00, +/* ٰ */ +0x08,0x80,0x09,0x00,0x12,0x20,0x13,0xF0,0x30,0x90,0x52,0x80,0x13,0xE0,0x14,0x80, +0x10,0x80,0x17,0xF0,0x10,0x80,0x10,0x80,0x00,0x00, +/* ٱ */ +0x11,0x00,0x1F,0xF0,0x21,0x00,0x27,0xE0,0x62,0x00,0x2F,0xF0,0x22,0x20,0x27,0xF0, +0x25,0x20,0x28,0xA0,0x28,0x20,0x30,0x60,0x00,0x00, +/* ٲ */ +0x10,0x00,0x1F,0xF0,0x22,0x40,0x2A,0x50,0x66,0x60,0x22,0x40,0x2F,0xF0,0x28,0x00, +0x28,0x00,0x28,0x00,0x28,0x00,0x30,0x00,0x00,0x00, +/* ٳ */ +0x08,0x00,0x0F,0xF0,0x10,0x00,0x17,0x70,0x35,0x50,0x55,0x50,0x15,0x50,0x17,0x70, +0x15,0x50,0x15,0x50,0x15,0x50,0x15,0x50,0x00,0x00, +/* ٴ */ +0x11,0x40,0x11,0x20,0x21,0x00,0x2F,0xF0,0x61,0x00,0x29,0x90,0x25,0xA0,0x23,0x40, +0x25,0x40,0x29,0x20,0x21,0x10,0x23,0x00,0x00,0x00, +/* ٵ */ +0x17,0xF0,0x14,0x90,0x24,0x90,0x27,0xF0,0x64,0x90,0x24,0x90,0x27,0xF0,0x20,0x80, +0x27,0xF0,0x20,0x80,0x20,0x80,0x2F,0xF0,0x00,0x00, +/* ٶ */ +0x17,0xC0,0x14,0x40,0x24,0x40,0x27,0xC0,0x60,0x00,0x2F,0xE0,0x21,0x00,0x3F,0xF0, +0x21,0x00,0x22,0x80,0x24,0x40,0x28,0x30,0x00,0x00, +/* ٷ */ +0x11,0x00,0x1F,0xE0,0x29,0x20,0x2F,0xE0,0x69,0x20,0x2F,0xE0,0x20,0x00,0x2F,0xF0, +0x24,0x00,0x27,0xE0,0x20,0x20,0x20,0xC0,0x00,0x00, +/* ٸ */ +0x0B,0xE0,0x08,0x20,0x11,0x40,0x10,0x80,0x37,0xF0,0x54,0x90,0x17,0xF0,0x14,0x90, +0x17,0xF0,0x14,0x90,0x14,0x90,0x14,0x30,0x00,0x00, +/* ٹ */ +0x08,0x80,0x09,0x00,0x12,0x20,0x17,0xF0,0x32,0x10,0x53,0xE0,0x14,0x80,0x10,0x80, +0x17,0xF0,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* ٺ */ +0x11,0x00,0x1F,0xF0,0x21,0x00,0x2F,0xE0,0x62,0x00,0x3F,0xF0,0x24,0x40,0x29,0x20, +0x37,0xD0,0x21,0x00,0x2F,0xE0,0x21,0x00,0x00,0x00, +/* ٻ */ +0x11,0x00,0x1F,0xF0,0x21,0x00,0x27,0xE0,0x61,0x00,0x2F,0xF0,0x24,0x20,0x27,0xE0, +0x24,0x20,0x27,0xE0,0x24,0x20,0x24,0x60,0x00,0x00, +/* ټ */ +0x12,0x40,0x12,0x40,0x2F,0xF0,0x22,0x40,0x61,0x00,0x2F,0xF0,0x22,0x00,0x23,0xE0, +0x26,0x20,0x2A,0x20,0x23,0xE0,0x22,0x20,0x00,0x00, +/* ٽ */ +0x12,0x40,0x12,0x40,0x2E,0x70,0x22,0x40,0x62,0x40,0x2E,0x70,0x22,0x40,0x22,0x40, +0x2E,0x70,0x22,0x40,0x22,0x40,0x22,0x40,0x00,0x00, +/* پ */ +0x11,0x00,0x11,0xF0,0x21,0x00,0x2F,0xE0,0x68,0x20,0x2F,0xE0,0x28,0x20,0x2F,0xE0, +0x21,0x00,0x3F,0xF0,0x21,0x00,0x21,0x00,0x00,0x00, +/* ٿ */ +0x11,0x00,0x11,0xE0,0x22,0x20,0x29,0xC0,0x6E,0x30,0x28,0x80,0x28,0xA0,0x2B,0xF0, +0x28,0x80,0x29,0x40,0x22,0x20,0x24,0x10,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xE0,0x29,0x20,0x2F,0xE0,0x69,0x20,0x2F,0xE0,0x21,0x00,0x2F,0xF0, +0x23,0x80,0x25,0x40,0x29,0x30,0x21,0x00,0x00,0x00, +/* */ +0x10,0xC0,0x17,0x00,0x21,0x00,0x2F,0xF0,0x65,0x40,0x29,0x20,0x21,0x00,0x2F,0xF0, +0x22,0x40,0x26,0x40,0x21,0x80,0x2E,0x60,0x00,0x00, +/* */ +0x09,0x00,0x0A,0x00,0x17,0xE0,0x14,0xA0,0x37,0xE0,0x55,0x20,0x17,0xE0,0x12,0x00, +0x14,0x80,0x1F,0xF0,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x17,0xF0,0x14,0x10,0x24,0x90,0x25,0xD0,0x64,0x90,0x27,0xF0,0x24,0x10,0x25,0xD0, +0x25,0x50,0x25,0xD0,0x24,0x10,0x28,0x70,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x2F,0xF0,0x28,0x10,0x67,0xE0,0x24,0x20,0x27,0xE0,0x24,0x00, +0x27,0xF0,0x24,0x10,0x27,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x09,0x00,0x08,0x80,0x17,0xF0,0x14,0x10,0x31,0x40,0x52,0x20,0x14,0x10,0x13,0xE0, +0x10,0x80,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x24,0x10,0x27,0xF0,0x64,0x80,0x27,0xF0,0x24,0x80,0x27,0xF0, +0x26,0x10,0x2A,0x10,0x2B,0xF0,0x32,0x10,0x00,0x00, +/* */ +0x08,0x80,0x0F,0xF0,0x10,0x80,0x12,0x20,0x37,0xF0,0x52,0x20,0x17,0xF0,0x14,0x10, +0x14,0x90,0x14,0x90,0x11,0x60,0x16,0x10,0x00,0x00, +/* */ +0x17,0xF0,0x15,0xE0,0x25,0x20,0x25,0xE0,0x65,0x20,0x25,0xE0,0x24,0x80,0x27,0xF0, +0x25,0x20,0x24,0xC0,0x25,0x20,0x27,0xF0,0x00,0x00, +/* */ +0x14,0x50,0x17,0x60,0x24,0x40,0x25,0x50,0x66,0x30,0x20,0x80,0x27,0xF0,0x24,0x10, +0x27,0xF0,0x24,0x10,0x27,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x17,0xE0,0x14,0x20,0x27,0xE0,0x24,0x20,0x67,0xE0,0x22,0x00,0x27,0xF0,0x28,0x90, +0x21,0x50,0x24,0x10,0x27,0x90,0x20,0x30,0x00,0x00, +/* */ +0x17,0xF0,0x14,0x90,0x27,0xF0,0x24,0x90,0x67,0xF0,0x20,0x00,0x2F,0xF0,0x24,0x80, +0x24,0x90,0x24,0x60,0x25,0x20,0x26,0x10,0x00,0x00, +/* */ +0x12,0x00,0x13,0xF0,0x25,0x50,0x2B,0x50,0x62,0x90,0x25,0x50,0x22,0x60,0x21,0x00, +0x24,0xA0,0x25,0x10,0x29,0x50,0x20,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x0C,0x90,0x12,0xA0,0x17,0xF0,0x32,0xA0,0x54,0x90,0x11,0x00,0x17,0xF0, +0x11,0x20,0x12,0x20,0x11,0xC0,0x16,0x30,0x00,0x00, +/* */ +0x19,0x20,0x15,0x40,0x2F,0xF0,0x30,0x10,0x67,0xC0,0x24,0x40,0x24,0x40,0x27,0xC0, +0x22,0x80,0x22,0x80,0x24,0x90,0x28,0x70,0x00,0x00, +/* */ +0x11,0x00,0x1F,0xF0,0x28,0x50,0x27,0x80,0x64,0x00,0x27,0xF0,0x24,0x40,0x24,0x40, +0x2F,0xF0,0x20,0x00,0x24,0x40,0x28,0x20,0x00,0x00, +/* */ +0x10,0x50,0x1E,0x40,0x22,0xF0,0x22,0xA0,0x6B,0xA0,0x2A,0xF0,0x24,0xA0,0x24,0xA0, +0x2A,0xF0,0x2A,0xA0,0x32,0xA0,0x20,0xF0,0x00,0x00, +/* */ +0x14,0x40,0x17,0x70,0x25,0x50,0x2B,0x20,0x66,0x20,0x25,0xD0,0x28,0x00,0x27,0xF0, +0x20,0x80,0x22,0xA0,0x24,0x90,0x21,0x80,0x00,0x00, +/* */ +0x11,0x00,0x1F,0xF0,0x21,0x00,0x2F,0xE0,0x60,0x00,0x2F,0xE0,0x28,0x20,0x2F,0xE0, +0x24,0x40,0x3F,0xF0,0x28,0x20,0x2F,0xE0,0x00,0x00, +/* */ +0x15,0x40,0x1F,0xC0,0x25,0x40,0x28,0xF0,0x6E,0xA0,0x33,0xA0,0x2E,0xA0,0x2A,0xA0, +0x2A,0x40,0x2E,0x40,0x22,0xA0,0x2D,0x10,0x00,0x00, +/* */ +0x17,0x70,0x12,0x20,0x2A,0xA0,0x2F,0xF0,0x65,0x60,0x29,0xB0,0x27,0xE0,0x24,0x20, +0x27,0xE0,0x24,0x20,0x27,0xE0,0x24,0x20,0x00,0x00, +/* */ +0x12,0x80,0x12,0x40,0x27,0xF0,0x24,0x80,0x6F,0xE0,0x34,0x80,0x27,0xE0,0x24,0x80, +0x27,0xF0,0x24,0x00,0x2A,0xA0,0x29,0x50,0x00,0x00, +/* */ +0x14,0x80,0x1E,0xA0,0x20,0x90,0x2E,0x80,0x6B,0xF0,0x2A,0x80,0x2E,0xC0,0x24,0xC0, +0x2E,0xC0,0x35,0x50,0x25,0x50,0x2E,0x30,0x00,0x00, +/* */ +0x11,0x00,0x1F,0xE0,0x24,0x40,0x3F,0xF0,0x69,0x20,0x2F,0xE0,0x29,0x20,0x2F,0xE0, +0x21,0x00,0x2F,0xE0,0x21,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x17,0xF0,0x15,0x50,0x27,0xF0,0x20,0x00,0x6F,0xF0,0x20,0x00,0x27,0xF0,0x24,0x10, +0x27,0xF0,0x22,0x50,0x26,0x20,0x2B,0x10,0x00,0x00, +/* */ +0x13,0xC0,0x14,0x40,0x2F,0xF0,0x3A,0x20,0x6C,0x90,0x2B,0xE0,0x28,0x00,0x2B,0xE0, +0x28,0x00,0x2B,0xE0,0x2A,0x20,0x33,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00,0x3F,0xE0,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x62,0x30,0x02,0x00,0x3B,0x20,0x0B,0x40, +0x12,0x80,0x22,0x40,0x42,0x30,0x06,0x00,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x18,0xC0,0x60,0x30,0x0F,0x80,0x00,0x00,0x00,0x00,0x3F,0xE0, +0x02,0x00,0x12,0x40,0x22,0x20,0x46,0x10,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x6F,0xB0,0x00,0x00,0x04,0x40,0x22,0x40, +0x12,0x80,0x10,0x80,0x01,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x2A,0x20,0x27,0xE0,0x42,0x20,0x12,0x20,0x13,0xE0, +0x2A,0x20,0x26,0x20,0x42,0x20,0x07,0xF0,0x00,0x00, +/* */ +0x07,0x00,0x18,0xC0,0x6F,0xB0,0x00,0x00,0x77,0x70,0x55,0x50,0x77,0x70,0x00,0x00, +0x7F,0xF0,0x48,0x90,0x7F,0xF0,0x48,0xB0,0x00,0x00, +/* */ +0x0C,0x00,0x02,0x00,0x05,0x00,0x18,0xC0,0x62,0x30,0x02,0x00,0x3B,0x20,0x0B,0x40, +0x12,0x80,0x22,0x40,0x42,0x30,0x06,0x00,0x00,0x00, +/* */ +0x0C,0x00,0x02,0x00,0x05,0x00,0x18,0xC0,0x62,0x30,0x12,0x40,0x0A,0x80,0x7F,0xF0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x10,0x40,0x20,0x20,0x5F,0xD0,0x08,0x00,0x10,0x00,0x1F,0xC0, +0x00,0x40,0x00,0x40,0x00,0x40,0x01,0x80,0x00,0x00, +/* */ +0x3D,0xE0,0x25,0x20,0x3D,0xE0,0x21,0x00,0x25,0x20,0x1C,0xE0,0x08,0x80,0x3F,0xE0, +0x08,0x80,0x7F,0xF0,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x12,0x40,0x7F,0xF0,0x48,0x90,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x50,0x50,0x20,0x40,0x77,0xF0,0x20,0x40,0x77,0x40,0x55,0x50,0x75,0x50,0x57,0x60, +0x70,0x60,0x51,0x50,0x76,0xB0,0x51,0x10,0x00,0x00, +/* */ +0x28,0x00,0x17,0xF0,0x7C,0x10,0x57,0xF0,0x7C,0xA0,0x57,0xF0,0x7C,0xA0,0x17,0xF0, +0x7D,0x40,0x15,0x50,0x15,0xA0,0x19,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x12,0x00,0x5D,0x70,0x57,0x50,0x55,0x70,0x5F,0x40,0x65,0x30, +0x2F,0xA0,0x58,0x90,0x07,0x00,0x78,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x08,0x00,0x1F,0xF0,0x10,0x10,0x20,0x10,0x40,0x10,0x00,0x10,0x00,0x10, +0x00,0x10,0x00,0x10,0x00,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x20,0x00,0x3F,0xF0,0x44,0x90,0x7F,0xD0,0x04,0x10,0x3F,0x90,0x24,0x90,0x3F,0x90, +0x24,0x90,0x3F,0x90,0x24,0x90,0x21,0xB0,0x00,0x00, +/* */ +0x20,0x00,0x3F,0xF0,0x44,0x10,0x3F,0xD0,0x00,0x10,0x3F,0x90,0x00,0x10,0x3F,0x90, +0x00,0x10,0x3F,0x90,0x20,0x90,0x3F,0xB0,0x00,0x00, +/* */ +0x20,0x00,0x3F,0xF0,0x40,0x10,0x3F,0x90,0x00,0x10,0x1F,0x10,0x11,0x10,0x3F,0x90, +0x24,0x90,0x3F,0x90,0x24,0x90,0x3F,0xB0,0x00,0x00, +/* */ +0x04,0x00,0x3F,0x80,0x28,0x80,0x25,0x80,0x20,0x00,0x3F,0xE0,0x00,0x20,0x1F,0x20, +0x11,0x60,0x11,0x00,0x21,0x10,0x40,0xF0,0x00,0x00, +/* */ +0x3F,0xC0,0x20,0x40,0x2F,0x40,0x24,0x40,0x27,0x40,0x29,0x40,0x35,0x40,0x22,0x40, +0x22,0x50,0x24,0x50,0x28,0x30,0x40,0x10,0x00,0x00, +/* */ +0x3D,0xE0,0x25,0x20,0x25,0x20,0x27,0x20,0x20,0x20,0x20,0x20,0x3F,0xE0,0x08,0x80, +0x08,0x80,0x08,0x90,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x10,0x80,0x24,0x40,0x49,0x20,0x10,0x80,0x3F,0xC0, +0x09,0x40,0x09,0x00,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x7F,0xF0,0x40,0x10,0x03,0x80, +0x3C,0x00,0x07,0xC0,0x7C,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x12,0x40,0x64,0x30,0x08,0x80,0x1F,0xC0,0x02,0x20, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xC0,0x04,0x80,0x7F,0xF0,0x09,0x10,0x73,0x00, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x11,0x00,0x7B,0xC0,0x11,0x40,0x7B,0x50,0x12,0xB0,0x36,0x10, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x48,0x90,0x02,0x00,0x3F,0xE0,0x25,0x20, +0x28,0xA0,0x22,0x20,0x25,0x20,0x20,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x04,0x00,0x39,0xE0,0x20,0x20,0x3D,0xE0,0x20,0x20,0x3F,0xE0, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x20,0x20,0x2F,0xA0,0x28,0xA0,0x3F,0xE0,0x00,0x00,0x1F,0xC0, +0x00,0x00,0x7F,0xF0,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x20,0x00,0x3F,0xE0,0x02,0x00,0x72,0x70,0x5F,0x50,0x75,0x50, +0x55,0x70,0x75,0x50,0x52,0x50,0x35,0x90,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x20,0x00,0x3F,0xE0,0x00,0x00,0x72,0x70,0x5F,0xD0,0x7A,0xD0, +0x5F,0xF0,0x72,0x50,0x5F,0xD0,0x30,0x90,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x20,0x00,0x3F,0xE0,0x05,0x00,0x72,0x70,0x57,0x50,0x72,0x50, +0x57,0x70,0x72,0x50,0x57,0x50,0x32,0x90,0x00,0x00, +/* */ +0x00,0x00,0x00,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x10,0x00,0x20,0x00,0x40,0x00,0x00,0x00,0x00,0x00, +/* */ +0x00,0x00,0x1F,0xF0,0x44,0x00,0x24,0x00,0x07,0xE0,0x04,0x20,0x08,0x20,0x08,0x20, +0x2F,0xC0,0x40,0x40,0x00,0x40,0x1F,0xF0,0x00,0x00, +/* */ +0x00,0x10,0x1F,0x10,0x44,0x50,0x24,0x50,0x07,0x50,0x09,0x50,0x09,0x50,0x15,0x50, +0x02,0x50,0x22,0x10,0x44,0x10,0x08,0x70,0x00,0x00, +/* */ +0x01,0x00,0x05,0x00,0x45,0x00,0x27,0xE0,0x09,0x00,0x01,0x00,0x1F,0xF0,0x04,0x80, +0x24,0x80,0x44,0x80,0x08,0x90,0x10,0x70,0x00,0x00, +/* ڡ */ +0x04,0xA0,0x04,0xA0,0x44,0xA0,0x2F,0x10,0x05,0x10,0x06,0x40,0x0D,0x40,0x14,0x80, +0x04,0xA0,0x25,0x10,0x45,0xF0,0x04,0x10,0x00,0x00, +/* ڢ */ +0x00,0x00,0x7F,0xF0,0x40,0x10,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* ڣ */ +0x7F,0xF0,0x40,0x10,0x3F,0xE0,0x04,0x00,0x1A,0x20,0x63,0x40,0x15,0x80,0x1B,0x40, +0x65,0x40,0x19,0x20,0x61,0x10,0x06,0x00,0x00,0x00, +/* ڤ */ +0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x02,0x00, +0x7F,0xF0,0x00,0x00,0x10,0x40,0x20,0x20,0x00,0x00, +/* ڥ */ +0x20,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x10,0x00,0x10,0x00,0x10,0x00, +0x14,0x00,0x18,0x00,0x10,0x00,0x00,0x00,0x00,0x00, +/* ڦ */ +0x20,0x00,0x13,0xE0,0x00,0x80,0x00,0x80,0x70,0x80,0x10,0x80,0x17,0xF0,0x10,0x80, +0x14,0x80,0x18,0x80,0x10,0x80,0x00,0x80,0x00,0x00, +/* ڧ */ +0x20,0x00,0x13,0xE0,0x00,0x80,0x00,0x80,0x70,0x80,0x10,0x80,0x10,0x80,0x10,0x80, +0x14,0x80,0x18,0x80,0x10,0x80,0x07,0xF0,0x00,0x00, +/* ڨ */ +0x20,0x80,0x10,0x80,0x00,0x80,0x04,0x90,0x64,0x90,0x24,0x90,0x24,0x90,0x24,0x90, +0x2C,0x90,0x34,0x90,0x27,0xF0,0x00,0x10,0x00,0x00, +/* ک */ +0x20,0x00,0x17,0xF0,0x04,0x00,0x05,0x20,0x64,0xA0,0x24,0xA0,0x24,0x40,0x24,0x40, +0x2C,0xA0,0x35,0x20,0x24,0x00,0x07,0xF0,0x00,0x00, +/* ڪ */ +0x20,0x00,0x13,0xF0,0x02,0x00,0x02,0x00,0x73,0xF0,0x12,0x10,0x12,0x10,0x12,0x10, +0x17,0xF0,0x1A,0x00,0x12,0x00,0x03,0xF0,0x00,0x00, +/* ګ */ +0x20,0x80,0x10,0x80,0x07,0xF0,0x04,0x90,0x64,0x90,0x24,0x90,0x25,0x50,0x26,0x30, +0x2C,0x10,0x34,0x10,0x24,0x10,0x04,0x30,0x00,0x00, +/* ڬ */ +0x20,0x80,0x10,0x80,0x00,0x80,0x0F,0xF0,0x60,0x80,0x20,0x80,0x27,0xF0,0x24,0x10, +0x2C,0x10,0x34,0x10,0x27,0xF0,0x04,0x10,0x00,0x00, +/* ڭ */ +0x40,0x00,0x2F,0xF0,0x00,0x20,0x00,0x20,0x67,0xA0,0x24,0xA0,0x24,0xA0,0x24,0xA0, +0x2F,0xA0,0x34,0x20,0x20,0x20,0x00,0xE0,0x00,0x00, +/* ڮ */ +0x20,0x60,0x17,0x80,0x04,0x80,0x04,0x80,0x64,0x80,0x27,0xF0,0x24,0x80,0x24,0x80, +0x2D,0x50,0x36,0x50,0x25,0x30,0x00,0x90,0x00,0x00, +/* گ */ +0x20,0x00,0x17,0xF0,0x01,0x10,0x01,0x10,0x62,0x10,0x24,0x60,0x20,0x00,0x23,0xF0, +0x2A,0x10,0x32,0x10,0x23,0xF0,0x02,0x10,0x00,0x00, +/* ڰ */ +0x20,0x80,0x10,0x80,0x04,0x90,0x04,0x90,0x64,0x90,0x27,0xF0,0x20,0x80,0x24,0x90, +0x2C,0x90,0x34,0x90,0x27,0xF0,0x00,0x10,0x00,0x00, +/* ڱ */ +0x21,0x00,0x11,0x00,0x02,0x00,0x04,0x20,0x6F,0xF0,0x20,0x10,0x27,0xE0,0x24,0x20, +0x2C,0x20,0x34,0x20,0x27,0xE0,0x04,0x20,0x00,0x00, +/* ڲ */ +0x20,0x00,0x17,0xF0,0x04,0x00,0x05,0xF0,0x64,0x40,0x24,0x40,0x25,0xF0,0x24,0x40, +0x2C,0x40,0x35,0xF0,0x24,0x00,0x07,0xF0,0x00,0x00, +/* ڳ */ +0x20,0x80,0x10,0x80,0x07,0xF0,0x00,0x80,0x73,0xE0,0x10,0x80,0x17,0xF0,0x10,0x80, +0x15,0xC0,0x1A,0xA0,0x14,0x90,0x00,0x80,0x00,0x00, +/* ڴ */ +0x20,0x80,0x10,0x80,0x03,0xE0,0x00,0x80,0x70,0x80,0x17,0xF0,0x10,0x00,0x10,0x80, +0x13,0xE0,0x18,0x80,0x10,0x80,0x07,0xF0,0x00,0x00, +/* ڵ */ +0x41,0x00,0x21,0x00,0x0F,0xF0,0x01,0x00,0x61,0x00,0x2F,0xE0,0x20,0x00,0x2F,0xE0, +0x28,0x20,0x38,0x20,0x2F,0xE0,0x08,0x20,0x00,0x00, +/* ڶ */ +0x42,0x00,0x22,0x00,0x0F,0xF0,0x02,0x00,0x62,0x40,0x22,0x50,0x25,0x60,0x25,0x40, +0x24,0x40,0x34,0xA0,0x29,0x20,0x02,0x10,0x00,0x00, +/* ڷ */ +0x21,0x00,0x15,0x00,0x05,0x00,0x07,0xE0,0x69,0x00,0x21,0x00,0x2F,0xF0,0x24,0x80, +0x24,0x80,0x34,0x80,0x28,0x90,0x10,0x70,0x00,0x00, +/* ڸ */ +0x20,0x60,0x17,0x80,0x04,0x00,0x04,0x00,0x67,0xF0,0x24,0x00,0x24,0x00,0x25,0xF0, +0x2D,0x10,0x35,0x10,0x25,0xF0,0x09,0x10,0x00,0x00, +/* ڹ */ +0x20,0x80,0x10,0x80,0x01,0x40,0x02,0x20,0x74,0x10,0x13,0xE0,0x10,0x80,0x10,0x80, +0x13,0xE0,0x18,0x80,0x10,0x80,0x07,0xF0,0x00,0x00, +/* ں */ +0x22,0x00,0x13,0xC0,0x04,0x40,0x08,0x80,0x67,0xE0,0x21,0x20,0x2F,0xF0,0x21,0x20, +0x27,0xE0,0x31,0x20,0x21,0x00,0x07,0x00,0x00,0x00, +/* ڻ */ +0x4F,0xF0,0x29,0x10,0x01,0x00,0x0F,0xF0,0x62,0x00,0x24,0x80,0x27,0xE0,0x20,0x80, +0x28,0x80,0x37,0xF0,0x20,0x80,0x00,0x80,0x00,0x00, +/* ڼ */ +0x20,0x00,0x17,0x70,0x01,0x10,0x01,0x10,0x65,0x50,0x23,0x30,0x21,0x10,0x23,0x30, +0x25,0x50,0x31,0x10,0x21,0x10,0x03,0x30,0x00,0x00, +/* ڽ */ +0x20,0x80,0x14,0x90,0x02,0xA0,0x00,0x80,0x67,0xF0,0x24,0x10,0x27,0xF0,0x24,0x10, +0x2F,0xF0,0x34,0x10,0x24,0x10,0x04,0x30,0x00,0x00, +/* ھ */ +0x20,0x80,0x14,0x80,0x07,0xE0,0x08,0x80,0x60,0x80,0x2F,0xF0,0x20,0x00,0x27,0xE0, +0x2C,0x20,0x34,0x20,0x27,0xE0,0x04,0x20,0x00,0x00, +/* ڿ */ +0x42,0x00,0x2B,0xF0,0x04,0x40,0x0A,0x40,0x62,0x40,0x22,0x40,0x27,0xF0,0x2A,0x40, +0x22,0x40,0x32,0x40,0x22,0x40,0x0D,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x11,0x00,0x02,0x20,0x07,0xF0,0x72,0x10,0x13,0xE0,0x14,0x80,0x10,0x80, +0x17,0xF0,0x19,0x40,0x12,0x20,0x04,0x10,0x00,0x00, +/* */ +0x4F,0x80,0x25,0x70,0x05,0x50,0x07,0x50,0x65,0x50,0x25,0x50,0x27,0x50,0x25,0x50, +0x25,0xA0,0x2F,0x20,0x31,0x50,0x21,0x90,0x00,0x00, +/* */ +0x20,0x00,0x17,0xF0,0x01,0x00,0x02,0x80,0x74,0xD0,0x13,0x60,0x12,0x40,0x15,0xE0, +0x11,0x50,0x1A,0x40,0x14,0x40,0x01,0x80,0x00,0x00, +/* */ +0x40,0xC0,0x27,0x00,0x01,0x00,0x0F,0xF0,0x65,0x40,0x29,0x20,0x21,0x00,0x2F,0xF0, +0x22,0x40,0x36,0x40,0x21,0x80,0x0E,0x60,0x00,0x00, +/* */ +0x20,0x80,0x12,0xB0,0x04,0x90,0x04,0x90,0x66,0xB0,0x24,0x90,0x24,0x90,0x27,0xF0, +0x20,0x80,0x31,0x40,0x22,0x20,0x04,0x10,0x00,0x00, +/* */ +0x20,0x80,0x11,0x40,0x02,0x20,0x04,0x90,0x63,0xE0,0x20,0x20,0x20,0x40,0x21,0x00, +0x24,0xA0,0x35,0x10,0x29,0x50,0x00,0xC0,0x00,0x00, +/* */ +0x22,0x00,0x13,0xE0,0x04,0x20,0x08,0x40,0x61,0x00,0x26,0x70,0x24,0x10,0x27,0x70, +0x24,0x10,0x34,0x10,0x27,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x21,0x00,0x10,0x80,0x07,0xF0,0x02,0x20,0x62,0x20,0x25,0x50,0x20,0x00,0x20,0x80, +0x27,0xF0,0x30,0x80,0x20,0x80,0x00,0x80,0x00,0x00, +/* */ +0x22,0x20,0x17,0xF0,0x02,0x20,0x03,0xE0,0x62,0x20,0x23,0xE0,0x22,0x20,0x2F,0xF0, +0x25,0x40,0x36,0x20,0x24,0x00,0x07,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x17,0xF0,0x00,0x80,0x07,0xF0,0x74,0x90,0x16,0xB0,0x14,0x90,0x17,0xF0, +0x11,0xC0,0x1A,0xA0,0x14,0x90,0x00,0x80,0x00,0x00, +/* */ +0x21,0xE0,0x11,0x00,0x07,0xF0,0x05,0x50,0x67,0xA0,0x24,0xE0,0x24,0x00,0x25,0xE0, +0x2D,0x00,0x37,0xF0,0x25,0x00,0x09,0xE0,0x00,0x00, +/* */ +0x27,0xE0,0x14,0x20,0x07,0xE0,0x04,0x20,0x67,0xE0,0x22,0x00,0x27,0xF0,0x28,0x90, +0x21,0x50,0x34,0x10,0x27,0x90,0x00,0x30,0x00,0x00, +/* */ +0x4E,0xE0,0x2A,0xA0,0x0E,0xE0,0x00,0x00,0x6F,0xE0,0x20,0x00,0x3F,0xF0,0x24,0x00, +0x27,0xE0,0x20,0x20,0x30,0x20,0x20,0xC0,0x00,0x00, +/* */ +0x21,0x00,0x12,0x80,0x04,0x40,0x0B,0xB0,0x60,0x00,0x2F,0x10,0x29,0x50,0x2F,0x50, +0x29,0x50,0x3F,0x50,0x29,0x10,0x0B,0x30,0x00,0x00, +/* */ +0x40,0x30,0x2F,0xC0,0x05,0x10,0x02,0xA0,0x67,0xF0,0x20,0x80,0x2F,0xF0,0x21,0x00, +0x2B,0xE0,0x35,0x20,0x28,0xC0,0x07,0x30,0x00,0x00, +/* */ +0x41,0x00,0x2F,0xF0,0x04,0x20,0x02,0x40,0x6F,0xF0,0x20,0x00,0x27,0xE0,0x24,0x20, +0x2F,0xE0,0x34,0x20,0x27,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x20,0x80,0x17,0xF0,0x02,0x20,0x01,0x40,0x67,0xF0,0x24,0x10,0x20,0x80,0x27,0xF0, +0x2C,0x90,0x34,0x90,0x24,0xB0,0x00,0x80,0x00,0x00, +/* */ +0x49,0x00,0x25,0xF0,0x02,0x90,0x00,0x80,0x65,0x40,0x2A,0x30,0x20,0x00,0x27,0xF0, +0x2C,0x10,0x34,0x10,0x27,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x20,0x80,0x17,0xF0,0x04,0x10,0x07,0xF0,0x64,0x00,0x27,0xF0,0x25,0x50,0x2D,0x50, +0x27,0xF0,0x35,0x50,0x25,0x50,0x04,0x30,0x00,0x00, +/* */ +0x42,0x40,0x2F,0xF0,0x02,0x40,0x07,0xE0,0x64,0x20,0x27,0xE0,0x24,0x20,0x27,0xE0, +0x21,0x00,0x2F,0xF0,0x32,0x40,0x2C,0x30,0x00,0x00, +/* */ +0x49,0x20,0x25,0x40,0x1F,0xF0,0x10,0x10,0x67,0xC0,0x24,0x40,0x24,0x40,0x27,0xC0, +0x22,0x80,0x32,0x80,0x24,0x90,0x08,0x70,0x00,0x00, +/* */ +0x4F,0xE0,0x29,0x20,0x0F,0xE0,0x09,0x20,0x6F,0xE0,0x24,0x40,0x2A,0x20,0x33,0xD0, +0x24,0x40,0x2A,0x40,0x31,0x80,0x2E,0x70,0x00,0x00, +/* */ +0x48,0x20,0x24,0x40,0x00,0x00,0x1F,0xF0,0x64,0x40,0x28,0x20,0x30,0x10,0x2F,0xE0, +0x2A,0xA0,0x3A,0xA0,0x2A,0xA0,0x1F,0xF0,0x00,0x00, +/* */ +0x42,0x20,0x21,0x40,0x0A,0xA0,0x0B,0x10,0x62,0x50,0x2D,0xC0,0x20,0x00,0x2F,0xE0, +0x2A,0xA0,0x3A,0xA0,0x2A,0xA0,0x1F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x17,0xF0,0x02,0x20,0x01,0x40,0x67,0xF0,0x24,0x90,0x25,0xD0,0x24,0x90, +0x2D,0xD0,0x35,0x50,0x25,0xD0,0x04,0x30,0x00,0x00, +/* */ +0x42,0x40,0x2F,0xF0,0x00,0x00,0x0F,0x50,0x69,0x50,0x2F,0x50,0x29,0x10,0x2B,0x30, +0x20,0x00,0x2F,0xF0,0x34,0x10,0x28,0x60,0x00,0x00, +/* */ +0x47,0x70,0x22,0x20,0x0A,0xA0,0x0F,0xF0,0x65,0x60,0x29,0xB0,0x27,0xE0,0x24,0x20, +0x27,0xE0,0x34,0x20,0x27,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x22,0x80,0x12,0x40,0x07,0xF0,0x04,0x80,0x6F,0xE0,0x34,0x80,0x27,0xE0,0x24,0x80, +0x27,0xF0,0x34,0x00,0x2A,0xA0,0x09,0x50,0x00,0x00, +/* */ +0x27,0xE0,0x11,0x20,0x00,0xC0,0x0F,0xF0,0x62,0x90,0x25,0x80,0x2F,0xF0,0x25,0x50, +0x26,0x30,0x35,0xD0,0x25,0x50,0x05,0xD0,0x00,0x00, +/* */ +0x42,0x20,0x2F,0xB0,0x02,0x20,0x0F,0xA0,0x68,0xF0,0x2D,0xA0,0x2A,0xA0,0x2F,0xA0, +0x2A,0xA0,0x3F,0xA0,0x2A,0xD0,0x09,0x90,0x00,0x00, +/* */ +0x43,0xC0,0x24,0x40,0x0F,0xF0,0x1A,0x20,0x6C,0x90,0x2B,0xE0,0x28,0x00,0x2B,0xE0, +0x28,0x00,0x3B,0xE0,0x2A,0x20,0x13,0xE0,0x00,0x00, +/* */ +0x45,0x40,0x25,0x60,0x0A,0xD0,0x0F,0xF0,0x65,0x40,0x2D,0xC0,0x25,0x50,0x2D,0xE0, +0x25,0x40,0x2D,0xD0,0x35,0x30,0x2F,0x90,0x00,0x00, +/* */ +0x00,0x00,0x01,0xF0,0x01,0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x01,0x10, +0x01,0x60,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00, +/* */ +0x3F,0x80,0x01,0x10,0x7A,0xA0,0x12,0x40,0x26,0x30,0x5F,0xC0,0x00,0x00,0x3F,0xC0, +0x20,0x40,0x20,0xC0,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x78,0x00,0x48,0x00,0x48,0x00,0x50,0x00,0x50,0x00,0x48,0x00,0x48,0x00, +0x48,0x00,0x70,0x00,0x40,0x00,0x40,0x00,0x00,0x00, +/* */ +0x78,0x00,0x4F,0xF0,0x4A,0x40,0x52,0x40,0x52,0x40,0x4A,0x40,0x4A,0x40,0x4A,0x40, +0x4A,0x40,0x72,0x50,0x44,0x50,0x48,0x30,0x00,0x00, +/* */ +0x00,0x60,0x7B,0x80,0x48,0x80,0x48,0x80,0x50,0x80,0x57,0xF0,0x48,0x80,0x48,0x80, +0x48,0x80,0x70,0x80,0x40,0x80,0x40,0x80,0x00,0x00, +/* */ +0x01,0x20,0x79,0x20,0x49,0x20,0x4B,0xF0,0x51,0x20,0x51,0x20,0x49,0x20,0x4F,0xF0, +0x49,0x20,0x71,0x20,0x42,0x20,0x44,0x20,0x00,0x00, +/* */ +0x00,0x30,0x7B,0xC0,0x4A,0x00,0x4A,0x00,0x53,0xF0,0x52,0x90,0x4A,0x90,0x4A,0xA0, +0x4A,0xA0,0x72,0x40,0x44,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x48,0x80,0x48,0xF0,0x50,0x80,0x50,0x80,0x4B,0xF0,0x4A,0x10, +0x4A,0x10,0x72,0x10,0x43,0xF0,0x42,0x10,0x00,0x00, +/* */ +0x02,0x00,0x7A,0x00,0x4B,0xF0,0x4D,0x00,0x51,0x00,0x51,0xE0,0x49,0x00,0x49,0x00, +0x49,0xF0,0x71,0x00,0x41,0x00,0x41,0x00,0x00,0x00, +/* */ +0x00,0x40,0x78,0x40,0x4B,0xF0,0x4A,0x50,0x52,0x40,0x53,0xE0,0x4A,0xA0,0x4A,0xA0, +0x4A,0xA0,0x72,0x40,0x44,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x48,0x40,0x48,0x80,0x51,0x40,0x52,0x20,0x4C,0x10,0x4B,0xE0, +0x48,0x80,0x70,0x80,0x40,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x4B,0xF0,0x48,0x80,0x51,0x10,0x53,0xE0,0x48,0x40,0x48,0x90, +0x4B,0x20,0x70,0x40,0x40,0xA0,0x47,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x4A,0xF0,0x4A,0x80,0x52,0x80,0x57,0xF0,0x48,0x80,0x4A,0x90, +0x4C,0xA0,0x70,0x40,0x41,0x80,0x46,0x00,0x00,0x00, +/* */ +0x7B,0xE0,0x4A,0x20,0x4A,0x20,0x53,0xE0,0x52,0x20,0x4A,0x20,0x4B,0xE0,0x48,0x80, +0x4B,0xE0,0x70,0x80,0x40,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x0F,0x80,0x75,0x70,0x55,0x50,0x57,0x50,0x65,0x50,0x65,0x50,0x57,0x50,0x55,0x50, +0x55,0xA0,0x6F,0x20,0x41,0x50,0x41,0x90,0x00,0x00, +/* */ +0x00,0xC0,0x77,0x00,0x51,0x00,0x5F,0xE0,0x65,0x40,0x65,0x40,0x5F,0xF0,0x55,0x40, +0x55,0x40,0x6F,0xE0,0x41,0x00,0x47,0xC0,0x00,0x00, +/* */ +0x01,0x00,0x72,0x00,0x57,0xE0,0x54,0xA0,0x67,0xE0,0x65,0x20,0x57,0xE0,0x52,0x00, +0x54,0x80,0x6F,0xF0,0x40,0x80,0x40,0x80,0x00,0x00, +/* */ +0x7B,0xE0,0x4A,0xA0,0x4B,0xE0,0x52,0xA0,0x53,0xE0,0x48,0x00,0x4F,0xF0,0x4A,0x80, +0x4A,0xA0,0x72,0x40,0x43,0x20,0x42,0x10,0x00,0x00, +/* */ +0x01,0x00,0x7B,0xE0,0x4A,0x20,0x4B,0xE0,0x52,0x20,0x53,0xE0,0x48,0x00,0x4F,0xF0, +0x48,0x80,0x73,0xE0,0x40,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x71,0x00,0x57,0xE0,0x54,0xA0,0x67,0xE0,0x65,0x20,0x57,0xE0,0x51,0x40, +0x52,0xA0,0x62,0xE0,0x44,0x90,0x48,0x70,0x00,0x00, +/* */ +0x77,0xF0,0x54,0x10,0x57,0xF0,0x54,0x10,0x67,0xF0,0x62,0x20,0x55,0x50,0x52,0x20, +0x55,0x50,0x67,0x70,0x40,0x00,0x45,0x50,0x00,0x00, +/* */ +0x00,0x00,0x3E,0xF0,0x08,0x90,0x08,0x90,0x08,0xA0,0x7F,0xA0,0x08,0x90,0x08,0x90, +0x08,0x90,0x08,0xE0,0x08,0x80,0x08,0x80,0x00,0x00, +/* */ +0x00,0x00,0x3E,0xF0,0x08,0x90,0x08,0x90,0x08,0xA0,0x08,0xA0,0x08,0x90,0x08,0x90, +0x0E,0x90,0x70,0xE0,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x08,0x00,0x04,0xF0,0x3F,0x90,0x20,0x90,0x20,0xA0,0x20,0xA0,0x20,0x90,0x20,0x90, +0x20,0x90,0x20,0xE0,0x20,0x80,0x40,0x80,0x00,0x00, +/* */ +0x10,0x00,0x08,0xF0,0x00,0x90,0x7E,0x90,0x20,0xA0,0x20,0xA0,0x20,0x90,0x20,0x90, +0x20,0x90,0x20,0xE0,0x3C,0x80,0x00,0x80,0x00,0x00, +/* */ +0x08,0x00,0x10,0xF0,0x3E,0x90,0x22,0x90,0x26,0xA0,0x20,0xA0,0x3E,0x90,0x02,0x90, +0x1A,0x90,0x62,0xE0,0x02,0x80,0x0C,0x80,0x00,0x00, +/* */ +0x10,0x00,0x08,0xF0,0x7E,0x90,0x10,0x90,0x10,0xA0,0x1E,0xA0,0x12,0x90,0x12,0x90, +0x12,0x90,0x22,0xE0,0x22,0x80,0x4C,0x80,0x00,0x00, +/* */ +0x00,0x00,0x7F,0x70,0x08,0x50,0x08,0x50,0x7F,0x60,0x49,0x60,0x49,0x50,0x55,0x50, +0x63,0x50,0x41,0x60,0x41,0x40,0x43,0x40,0x00,0x00, +/* */ +0x00,0x00,0x7E,0xF0,0x08,0x90,0x08,0x90,0x1C,0xA0,0x2A,0xA0,0x4A,0x90,0x08,0x90, +0x08,0x90,0x0E,0xE0,0x70,0x80,0x00,0x80,0x00,0x00, +/* */ +0x14,0x00,0x14,0xF0,0x14,0x90,0x14,0x90,0x77,0xA0,0x14,0xA0,0x14,0x90,0x14,0x90, +0x34,0x90,0x55,0xE0,0x16,0x80,0x14,0x80,0x00,0x00, +/* */ +0x14,0x00,0x14,0xF0,0x14,0x90,0x14,0x90,0x55,0xA0,0x36,0xA0,0x14,0x90,0x14,0x90, +0x14,0x90,0x1E,0xE0,0x70,0x80,0x00,0x80,0x00,0x00, +/* ۡ */ +0x06,0x00,0x78,0xF0,0x48,0x90,0x48,0x90,0x48,0xA0,0x7E,0xA0,0x48,0x90,0x48,0x90, +0x48,0x90,0x4A,0xE0,0x66,0x80,0x52,0x80,0x00,0x00, +/* ۢ */ +0x10,0x00,0x10,0xF0,0x20,0x90,0x44,0x90,0x7E,0xA0,0x02,0xA0,0x7C,0x90,0x44,0x90, +0x44,0x90,0x44,0xE0,0x7C,0x80,0x44,0x80,0x00,0x00, +/* ۣ */ +0x08,0x00,0x08,0x70,0x7F,0x50,0x08,0x50,0x49,0x60,0x2A,0x60,0x08,0x50,0x7F,0x50, +0x08,0x50,0x14,0x60,0x22,0x40,0x41,0x40,0x00,0x00, +/* ۤ */ +0x00,0x00,0x7E,0xF0,0x10,0x90,0x24,0x90,0x7E,0xA0,0x0A,0xA0,0x08,0x90,0x7E,0x90, +0x08,0x90,0x08,0xE0,0x0E,0x80,0x70,0x80,0x00,0x00, +/* ۥ */ +0x08,0x00,0x28,0xF0,0x3E,0x90,0x48,0x90,0x08,0xA0,0x7E,0xA0,0x08,0x90,0x1C,0x90, +0x2A,0x90,0x48,0xE0,0x08,0x80,0x08,0x80,0x00,0x00, +/* ۦ */ +0x08,0x00,0x14,0xF0,0x22,0x90,0x40,0x90,0x3C,0xA0,0x00,0xA0,0x7E,0x90,0x10,0x90, +0x14,0x90,0x22,0xE0,0x3E,0x80,0x02,0x80,0x00,0x00, +/* ۧ */ +0x32,0x00,0x0C,0x70,0x12,0x50,0x21,0x50,0x08,0x60,0x7F,0x60,0x10,0x50,0x24,0x50, +0x48,0x50,0x12,0x60,0x3F,0x40,0x01,0x40,0x00,0x00, +/* ۨ */ +0x20,0x00,0x3E,0xF0,0x42,0x90,0x3A,0x90,0x2A,0xA0,0x2A,0xA0,0x3A,0x90,0x2A,0x90, +0x2A,0x90,0x3A,0xE0,0x22,0x80,0x0C,0x80,0x00,0x00, +/* ۩ */ +0x00,0x00,0x7E,0xF0,0x42,0x90,0x10,0x90,0x7E,0xA0,0x20,0xA0,0x48,0x90,0x7E,0x90, +0x08,0x90,0x0E,0xE0,0x78,0x80,0x08,0x80,0x00,0x00, +/* ۪ */ +0x00,0x00,0x7F,0x70,0x00,0x50,0x77,0x50,0x55,0x60,0x55,0x60,0x55,0x50,0x77,0x50, +0x55,0x50,0x55,0x60,0x55,0x40,0x55,0x40,0x00,0x00, +/* ۫ */ +0x00,0x00,0x3E,0xF0,0x22,0x90,0x22,0x90,0x3E,0xA0,0x00,0xA0,0x3E,0x90,0x08,0x90, +0x3E,0x90,0x08,0xE0,0x0E,0x80,0x70,0x80,0x00,0x00, +/* ۬ */ +0x08,0x00,0x28,0xF0,0x3E,0x90,0x48,0x90,0x08,0xA0,0x7F,0xA0,0x00,0x90,0x3E,0x90, +0x22,0x90,0x22,0xE0,0x3E,0x80,0x22,0x80,0x00,0x00, +/* ۭ */ +0x22,0x00,0x1C,0x70,0x22,0x50,0x10,0x50,0x7F,0x60,0x10,0x60,0x28,0x50,0x7F,0x50, +0x29,0x50,0x29,0x60,0x2B,0x40,0x08,0x40,0x00,0x00, +/* ۮ */ +0x07,0x00,0x78,0xF0,0x11,0x90,0x4A,0x90,0x20,0xA0,0x7E,0xA0,0x04,0x90,0x08,0x90, +0x0F,0x90,0x78,0xE0,0x08,0x80,0x18,0x80,0x00,0x00, +/* ۯ */ +0x08,0x00,0x10,0xF0,0x3E,0x90,0x2A,0x90,0x3E,0xA0,0x2A,0xA0,0x3E,0x90,0x10,0x90, +0x28,0x90,0x7E,0xE0,0x08,0x80,0x08,0x80,0x00,0x00, +/* ۰ */ +0x08,0x00,0x2A,0xF0,0x2C,0x90,0x48,0x90,0x14,0xA0,0x22,0xA0,0x08,0x90,0x2A,0x90, +0x2C,0x90,0x48,0xE0,0x14,0x80,0x62,0x80,0x00,0x00, +/* ۱ */ +0x7F,0x70,0x5E,0x50,0x52,0x50,0x5E,0x50,0x52,0x60,0x5E,0x60,0x48,0x50,0x7F,0xD0, +0x52,0x50,0x4C,0x60,0x52,0x40,0x7F,0xC0,0x00,0x00, +/* ۲ */ +0x00,0x00,0x7F,0x70,0x14,0x50,0x7F,0x50,0x55,0x60,0x55,0x60,0x7F,0x50,0x08,0x50, +0x3E,0x50,0x08,0x60,0x0E,0x40,0x70,0x40,0x00,0x00, +/* ۳ */ +0x7F,0x70,0x08,0x50,0x2E,0x50,0x28,0x50,0x7F,0x60,0x10,0x60,0x1F,0x50,0x20,0x50, +0x3F,0x50,0x01,0x60,0x55,0x40,0x2A,0x40,0x00,0x00, +/* ۴ */ +0x14,0x00,0x7E,0xF0,0x14,0x90,0x1C,0x90,0x08,0xA0,0x3E,0xA0,0x2A,0x90,0x3E,0x90, +0x08,0x90,0x3E,0xE0,0x08,0x80,0x7E,0x80,0x00,0x00, +/* ۵ */ +0x08,0x00,0x3E,0xF0,0x14,0x90,0x7F,0x90,0x22,0xA0,0x3E,0xA0,0x22,0x90,0x3E,0x90, +0x08,0x90,0x7F,0xE0,0x08,0x80,0x08,0x80,0x00,0x00, +/* ۶ */ +0x06,0x00,0x78,0xF0,0x2A,0x90,0x1C,0x90,0x7F,0xA0,0x2A,0xA0,0x41,0x90,0x3E,0x90, +0x2A,0x90,0x3E,0xE0,0x2A,0x80,0x3E,0x80,0x00,0x00, +/* ۷ */ +0x22,0x00,0x7F,0x70,0x08,0x50,0x3E,0x50,0x08,0x60,0x7F,0x60,0x2A,0x50,0x7F,0x50, +0x00,0x50,0x3E,0x60,0x22,0x40,0x3E,0x40,0x00,0x00, +/* ۸ */ +0x7C,0x70,0x2B,0x50,0x39,0x50,0x2D,0x50,0x7A,0x60,0x0D,0x60,0x78,0x50,0x2D,0x50, +0x4A,0x50,0x1A,0x60,0x29,0x40,0x48,0x40,0x00,0x00, +/* ۹ */ +0x3E,0x70,0x08,0x50,0x7F,0x50,0x49,0x50,0x2A,0x60,0x08,0x60,0x2A,0x50,0x00,0x50, +0x7F,0x50,0x55,0x60,0x55,0x40,0x7F,0x40,0x00,0x00, +/* ۺ */ +0x14,0x00,0x3E,0x70,0x55,0x50,0x7F,0x50,0x55,0x60,0x7F,0x60,0x00,0x50,0x7F,0x50, +0x22,0x50,0x3E,0x60,0x14,0x40,0x7F,0x40,0x00,0x00, +/* ۻ */ +0x08,0x00,0x0F,0xE0,0x10,0x20,0x20,0x40,0x5F,0xF0,0x00,0x10,0x00,0x10,0x1F,0xF0, +0x00,0x10,0x00,0x10,0x3F,0xF0,0x00,0x10,0x00,0x00, +/* ۼ */ +0x08,0x00,0x0F,0xC0,0x10,0x40,0x20,0x80,0x7F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20, +0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* ۽ */ +0x00,0x40,0x7E,0x40,0x10,0x40,0x10,0xF0,0x1E,0x50,0x12,0x50,0x12,0x50,0x12,0x50, +0x12,0x50,0x22,0x90,0x22,0x90,0x4D,0x60,0x00,0x00, +/* ۾ */ +0x10,0x40,0x10,0x40,0x1E,0x40,0x22,0xF0,0x42,0x50,0x3A,0x50,0x2A,0x50,0x2A,0x50, +0x3A,0x50,0x22,0x90,0x02,0x90,0x0D,0x60,0x00,0x00, +/* ۿ */ +0x00,0x40,0x7E,0x40,0x12,0x40,0x12,0xF0,0x22,0x50,0x4C,0x50,0x00,0x50,0x3E,0x50, +0x22,0x50,0x22,0x90,0x3E,0x90,0x23,0x60,0x00,0x00, +/* */ +0x10,0x40,0x08,0x40,0x7E,0x40,0x10,0xF0,0x22,0x50,0x7C,0x50,0x08,0x50,0x12,0x50, +0x64,0x50,0x08,0x90,0x14,0x90,0x63,0x60,0x00,0x00, +/* */ +0x10,0x00,0x7E,0xF0,0x12,0x90,0x22,0x90,0x4C,0xF0,0x00,0x00,0x7F,0xF0,0x00,0x20, +0x3F,0x20,0x21,0x20,0x3F,0x20,0x00,0x60,0x00,0x00, +/* */ +0x3E,0x40,0x04,0x40,0x0F,0x40,0x78,0xF0,0x08,0x50,0x18,0x50,0x00,0x50,0x7F,0x50, +0x55,0x50,0x55,0x50,0x57,0xD0,0x78,0xB0,0x00,0x00, +/* */ +0x7F,0x40,0x41,0x40,0x5D,0x40,0x00,0xF0,0x3E,0x50,0x22,0x50,0x3E,0x50,0x22,0x50, +0x3E,0x50,0x22,0x50,0x3E,0x50,0x22,0xB0,0x00,0x00, +/* */ +0x21,0xF0,0x7D,0x50,0x25,0x50,0x25,0xF0,0x4D,0x50,0x01,0x50,0x29,0xF0,0x7E,0x80, +0x2A,0x50,0x2A,0x90,0x2B,0xA0,0x56,0xE0,0x00,0x00, +/* */ +0x0A,0x00,0x32,0xE0,0x22,0x20,0x3A,0xE0,0x22,0x20,0x3F,0xE0,0x02,0x00,0x3F,0xC0, +0x10,0x40,0x08,0x80,0x07,0x00,0x78,0xF0,0x00,0x00, +/* */ +0x12,0x40,0x17,0x50,0x58,0xE0,0x57,0x40,0x50,0x40,0x17,0x40,0x2D,0xA0,0x47,0x10, +0x3F,0xC0,0x10,0x40,0x0F,0x80,0x70,0x70,0x00,0x00, +/* */ +0x3D,0xE0,0x25,0x20,0x3D,0xE0,0x25,0x20,0x3D,0xE0,0x12,0x00,0x3F,0xE0,0x51,0x00, +0x3F,0xE0,0x10,0x40,0x0F,0x80,0x70,0x70,0x00,0x00, +/* */ +0x00,0x00,0x78,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x38,0x00,0x08,0x00,0x08,0x00, +0x28,0x00,0x10,0x00,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x00,0x00,0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x10, +0x40,0x10,0x40,0x10,0x7F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x42,0x90,0x5B,0x10,0x4A,0x10,0x4B,0x10,0x52,0x90,0x62,0x50, +0x46,0x10,0x40,0x10,0x7F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x02,0x00,0x28,0xA0,0x25,0x20,0x32,0x60,0x25,0x20,0x2A,0xA0,0x3F,0xE0,0x00,0x00, +0x20,0xE0,0x3F,0x00,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x80,0x10,0x40, +0x20,0x20,0x7F,0xF0,0x00,0x10,0x00,0x10,0x00,0x00, +/* */ +0x08,0x00,0x08,0x00,0x10,0x40,0x3F,0xE0,0x00,0x20,0x08,0x80,0x08,0x80,0x7F,0xF0, +0x08,0x80,0x10,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x08,0x00,0x10,0x40,0x3F,0xE0,0x04,0x20,0x7F,0xF0,0x08,0x80,0x10,0x40,0x3F,0xE0, +0x52,0x50,0x1F,0xC0,0x12,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x0B,0xF0,0x10,0x80,0x29,0x20,0x47,0xF0,0x38,0x10,0x12,0xA0, +0x12,0xA0,0x1A,0xA0,0x62,0xA0,0x04,0x30,0x00,0x00, +/* */ +0x08,0x80,0x10,0x40,0x60,0x30,0x1F,0xC0,0x08,0x40,0x10,0x40,0x21,0x80,0x02,0x00, +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x05,0x00,0x25,0x20,0x15,0x40,0x05,0x00,0x7F,0xF0,0x00,0x00,0x02,0x00, +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x09,0x20,0x11,0xF0,0x3F,0x00,0x51,0x20,0x11,0x40,0x10,0x90,0x11,0x50,0x12,0x30, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7E,0x80,0x25,0xE0,0x3C,0xA0,0x09,0xA0,0x7E,0xE0,0x11,0x30,0x32,0x10, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0xE0,0x7F,0xA0,0x2A,0xB0,0x3F,0x00,0x2A,0xE0,0x3E,0xA0,0x49,0x40,0x7F,0xB0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x21,0x20,0x49,0xF0,0x33,0x40,0x7D,0xF0,0x09,0x40,0x71,0xF0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x1C,0x00,0x11,0xE0,0x7E,0xA0,0x5A,0xA0,0x24,0xA0,0x7E,0x40,0x24,0xA0,0x3D,0x10, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x80,0x10,0x80,0x78,0x80,0x17,0xF0,0x10,0x80,0x10,0x80, +0x10,0x80,0x18,0x80,0x60,0x80,0x03,0x80,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x00,0x78,0x00,0x17,0xF0,0x11,0x00,0x12,0x00,0x13,0xE0, +0x10,0x20,0x18,0x20,0x60,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x11,0xF0,0x7A,0x00,0x14,0x00,0x13,0xE0,0x10,0x40,0x10,0x80, +0x11,0x00,0x1A,0x10,0x62,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x24,0x10,0x24,0x90,0x24,0x90,0x74,0x90,0x24,0x90,0x24,0x90,0x24,0x90,0x24,0x90, +0x34,0x90,0x64,0x90,0x08,0x90,0x10,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7A,0x00,0x12,0x00,0x12,0x00,0x12,0x00,0x12,0x00, +0x1A,0x00,0x62,0x00,0x02,0x00,0x04,0x00,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x20,0x78,0x20,0x10,0x20,0x13,0xE0,0x12,0x00,0x12,0x00, +0x12,0x00,0x1A,0x10,0x62,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x7A,0x20,0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x00, +0x12,0x00,0x1A,0x10,0x62,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x24,0x00,0x74,0x80,0x24,0x80,0x25,0xF0,0x24,0x90,0x24,0x90, +0x35,0x10,0x65,0x10,0x0A,0x10,0x14,0x60,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x12,0x00,0x12,0x00,0x7B,0xF0,0x12,0x40,0x12,0x40,0x12,0x40, +0x12,0x40,0x1A,0x40,0x62,0x40,0x04,0x40,0x00,0x00, +/* */ +0x10,0x30,0x13,0xC0,0x12,0x00,0x12,0x00,0x7B,0xF0,0x12,0x90,0x12,0x90,0x12,0xA0, +0x12,0xA0,0x1A,0x40,0x64,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x12,0x20,0x12,0x20,0x17,0xF0,0x12,0x20,0x7A,0x20,0x12,0x20,0x13,0xE0,0x12,0x20, +0x12,0x20,0x1A,0x20,0x63,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x11,0x40,0x11,0x20,0x11,0x00,0x7B,0xF0,0x11,0x40,0x11,0x40,0x11,0x50,0x11,0x60, +0x1A,0x40,0x62,0xD0,0x05,0x50,0x08,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0xF0,0x78,0x80,0x10,0x80,0x13,0xF0,0x12,0x10, +0x12,0x10,0x1A,0x10,0x63,0xF0,0x02,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0xF0,0x10,0x80,0x78,0x80,0x13,0xF0,0x12,0x10,0x12,0x10,0x13,0xF0, +0x1A,0x10,0x62,0x00,0x02,0x00,0x04,0x00,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x12,0x00,0x7A,0x00,0x13,0xF0,0x12,0x40,0x12,0x40,0x12,0xC0, +0x1A,0x60,0x62,0x50,0x02,0x40,0x04,0x40,0x00,0x00, +/* */ +0x10,0x30,0x13,0xC0,0x12,0x40,0x12,0x40,0x7A,0x40,0x13,0xF0,0x12,0x40,0x12,0x40, +0x12,0x40,0x1A,0x50,0x63,0x30,0x02,0x90,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x14,0x10,0x78,0x00,0x12,0x20,0x12,0x40,0x12,0x80, +0x13,0x00,0x1A,0x10,0x62,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x10,0x12,0x10,0x7B,0xF0,0x12,0x00,0x12,0x90,0x12,0xA0, +0x12,0xC0,0x1A,0x90,0x62,0x90,0x04,0x70,0x00,0x00, +/* */ +0x20,0x00,0x23,0xE0,0x22,0x20,0x23,0x20,0x72,0xA0,0x27,0xF0,0x22,0x20,0x25,0x20, +0x24,0xA0,0x37,0xF0,0x60,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x22,0x40,0x22,0x40,0x22,0x40,0x24,0xF0,0x75,0x50,0x27,0x50,0x22,0x50,0x22,0x50, +0x25,0x50,0x37,0x90,0x60,0x90,0x01,0x30,0x00,0x00, +/* */ +0x20,0x00,0x2F,0xF0,0x22,0x40,0x22,0x40,0x72,0x40,0x2A,0x50,0x26,0x60,0x22,0x40, +0x22,0x40,0x32,0x40,0x62,0x40,0x0F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x10,0x80,0x11,0x00,0x7A,0x20,0x13,0xF0,0x10,0x90,0x10,0x80, +0x13,0xE0,0x18,0x80,0x60,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x24,0x10,0x25,0xD0,0x74,0x10,0x25,0xD0,0x25,0x50,0x25,0x50, +0x25,0xD0,0x34,0x10,0x64,0x10,0x04,0x30,0x00,0x00, +/* */ +0x10,0x80,0x12,0xA0,0x12,0xA0,0x13,0xE0,0x78,0x00,0x13,0xE0,0x10,0x20,0x10,0x20, +0x13,0xE0,0x1A,0x00,0x62,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x20,0x30,0x26,0xE0,0x22,0x20,0x22,0x20,0x74,0xB0,0x24,0xA0,0x22,0xA0,0x22,0xA0, +0x22,0xF0,0x36,0x00,0x62,0x00,0x05,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x21,0x00,0x27,0xF0,0x24,0x10,0x74,0x10,0x25,0xD0,0x25,0x50,0x25,0x50, +0x25,0xD0,0x34,0x10,0x64,0x10,0x04,0x30,0x00,0x00, +/* */ +0x21,0x00,0x20,0x80,0x27,0xF0,0x20,0x00,0x71,0x40,0x24,0x90,0x24,0x90,0x24,0x90, +0x25,0x50,0x34,0x10,0x67,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x11,0x00,0x7A,0x20,0x17,0xC0,0x10,0x90,0x11,0x20, +0x16,0x40,0x18,0xC0,0x61,0x20,0x06,0x10,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x12,0x20,0x7B,0xE0,0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x90, +0x1A,0xA0,0x62,0x40,0x03,0x20,0x02,0x10,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x12,0x20,0x13,0xE0,0x78,0x00,0x17,0xF0,0x10,0x80,0x10,0x80, +0x13,0xE0,0x18,0x80,0x60,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x20,0x20,0x27,0x20,0x25,0x20,0x25,0xF0,0x75,0x20,0x27,0x20,0x25,0xA0,0x25,0x60, +0x25,0x20,0x37,0x20,0x65,0x20,0x00,0x60,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x22,0x20,0x23,0xE0,0x70,0x80,0x27,0xF0,0x24,0x90,0x24,0x90, +0x25,0x50,0x36,0x30,0x64,0x10,0x04,0x30,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x23,0xE0,0x70,0x00,0x27,0xF0,0x24,0x10,0x24,0x90,0x24,0x90, +0x34,0x90,0x61,0x40,0x02,0x20,0x04,0x10,0x00,0x00, +/* */ +0x10,0x70,0x17,0x80,0x11,0x10,0x14,0xA0,0x7A,0x00,0x10,0x20,0x17,0xF0,0x10,0x20, +0x12,0x20,0x19,0x20,0x60,0x20,0x00,0x60,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x14,0x10,0x78,0x00,0x13,0xE0,0x10,0x00,0x17,0xF0, +0x11,0x40,0x19,0x40,0x62,0x50,0x04,0x30,0x00,0x00, +/* */ +0x21,0x00,0x2F,0xF0,0x21,0x00,0x27,0xE0,0x74,0x20,0x27,0xE0,0x24,0x20,0x27,0xE0, +0x24,0x20,0x37,0xE0,0x64,0x20,0x0F,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x2F,0xE0,0x22,0x80,0x74,0x40,0x29,0x30,0x37,0xC0,0x25,0x40,0x27,0xC0, +0x35,0x40,0x67,0xD0,0x05,0x10,0x00,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x12,0x20,0x7B,0xE0,0x11,0x00,0x13,0xF0,0x15,0x50, +0x12,0x50,0x1C,0x90,0x61,0x10,0x02,0x60,0x00,0x00, +/* */ +0x21,0x00,0x22,0x00,0x27,0xE0,0x74,0xA0,0x27,0xE0,0x25,0x20,0x27,0xE0,0x22,0x00, +0x34,0x80,0x6F,0xF0,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x20,0x80,0x21,0x40,0x22,0x20,0x24,0x90,0x73,0xE0,0x20,0x20,0x20,0x40,0x21,0x00, +0x24,0xA0,0x35,0x10,0x69,0x50,0x00,0xC0,0x00,0x00, +/* ܡ */ +0x20,0x00,0x27,0x70,0x25,0x50,0x25,0x50,0x77,0x70,0x25,0x50,0x25,0x50,0x27,0x70, +0x25,0x50,0x35,0x50,0x65,0x50,0x0B,0xB0,0x00,0x00, +/* ܢ */ +0x22,0x00,0x23,0xC0,0x24,0x40,0x28,0x80,0x77,0xE0,0x24,0xA0,0x25,0x20,0x27,0xE0, +0x22,0x80,0x32,0xA0,0x64,0x90,0x08,0x70,0x00,0x00, +/* ܣ */ +0x27,0xE0,0x20,0x20,0x27,0xE0,0x20,0x20,0x77,0xE0,0x20,0x00,0x2F,0xF0,0x29,0x10, +0x27,0xE0,0x35,0x20,0x65,0x60,0x01,0x00,0x00,0x00, +/* ܤ */ +0x21,0x00,0x27,0xE0,0x21,0x20,0x2F,0xF0,0x71,0x20,0x27,0xE0,0x29,0x20,0x25,0x40, +0x23,0x80,0x35,0x40,0x69,0x30,0x03,0x00,0x00,0x00, +/* ܥ */ +0x20,0x00,0x27,0xF0,0x24,0x10,0x27,0xF0,0x74,0x40,0x25,0x50,0x25,0x50,0x25,0xF0, +0x24,0x40,0x35,0x50,0x65,0x50,0x09,0xF0,0x00,0x00, +/* ܦ */ +0x10,0xA0,0x12,0xA0,0x17,0xF0,0x12,0xA0,0x7A,0xE0,0x12,0x00,0x13,0xF0,0x10,0x80, +0x17,0xF0,0x19,0xC0,0x62,0xA0,0x04,0x90,0x00,0x00, +/* ܧ */ +0x20,0x00,0x27,0xF0,0x21,0x40,0x27,0xF0,0x75,0x50,0x25,0x50,0x27,0xF0,0x20,0x80, +0x27,0xF0,0x30,0x80,0x60,0x80,0x0F,0xF0,0x00,0x00, +/* ܨ */ +0x17,0xF0,0x15,0x50,0x15,0x50,0x17,0xF0,0x78,0x80,0x17,0xF0,0x11,0x00,0x11,0xF0, +0x11,0x10,0x1A,0x10,0x62,0x10,0x04,0x60,0x00,0x00, +/* ܩ */ +0x22,0x00,0x22,0xE0,0x24,0x20,0x75,0xF0,0x2C,0x80,0x24,0xF0,0x25,0x40,0x24,0x40, +0x35,0xF0,0x64,0x40,0x04,0xA0,0x05,0x10,0x00,0x00, +/* ܪ */ +0x27,0xF0,0x20,0x00,0x23,0xE0,0x22,0x20,0x73,0xE0,0x20,0x00,0x27,0xF0,0x25,0x50, +0x24,0x90,0x35,0xD0,0x64,0x90,0x04,0xB0,0x00,0x00, +/* ܫ */ +0x2F,0xF0,0x28,0x80,0x29,0x00,0x7B,0xE0,0x2A,0x20,0x2B,0xE0,0x2A,0x20,0x2B,0xE0, +0x38,0x80,0x6A,0xA0,0x0C,0x90,0x11,0x80,0x00,0x00, +/* ܬ */ +0x27,0xE0,0x24,0x20,0x27,0xE0,0x74,0x20,0x2F,0xF0,0x2A,0x50,0x2F,0xF0,0x20,0x00, +0x37,0xE0,0x62,0x20,0x01,0xC0,0x0E,0x30,0x00,0x00, +/* ܭ */ +0x20,0x80,0x2F,0xF0,0x28,0x80,0x7B,0xE0,0x28,0xA0,0x2F,0xF0,0x28,0xA0,0x2B,0xE0, +0x3A,0xA0,0x6B,0xE0,0x0A,0xA0,0x12,0x60,0x00,0x00, +/* ܮ */ +0x2B,0xC0,0x21,0x40,0x2B,0x60,0x25,0x50,0x71,0x50,0x2A,0xC0,0x21,0x00,0x2F,0xF0, +0x23,0x80,0x35,0x40,0x69,0x30,0x01,0x00,0x00,0x00, +/* ܯ */ +0x27,0xF0,0x24,0x10,0x27,0xF0,0x75,0x50,0x24,0xE0,0x25,0x50,0x24,0x00,0x25,0x40, +0x35,0xF0,0x6A,0x40,0x0B,0xF0,0x10,0x40,0x00,0x00, +/* ܰ */ +0x08,0xE0,0x7E,0xA0,0x09,0xF0,0x3E,0xA0,0x2A,0x40,0x3F,0xB0,0x4A,0x80,0x1F,0xC0, +0x30,0x60,0x5F,0xD0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* ܱ */ +0x10,0x40,0x7D,0xF0,0x10,0x40,0x7C,0xE0,0x28,0xA0,0x3A,0x40,0x1F,0xE0,0x12,0x50, +0x1F,0xC0,0x14,0x40,0x7F,0xF0,0x01,0x00,0x00,0x00, +/* ܲ */ +0x12,0x40,0x7D,0x40,0x10,0x70,0x7C,0x90,0x45,0x40,0x3A,0x40,0x28,0xA0,0x39,0x10, +0x00,0x40,0x29,0x00,0x13,0x50,0x7C,0xD0,0x00,0x00, +/* ܳ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* ܴ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x04,0x00,0x04,0x00,0x3F,0xC0,0x04,0x40,0x04,0x40, +0x08,0x40,0x08,0x50,0x10,0x50,0x60,0x30,0x00,0x00, +/* ܵ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x08,0x40,0x08,0x80,0x08,0xF0, +0x10,0x10,0x10,0x10,0x20,0x10,0x40,0xE0,0x00,0x00, +/* ܶ */ +0x08,0x80,0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x02,0x00,0x02,0x00,0x3F,0xE0, +0x02,0x00,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* ܷ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x60,0x3F,0x80,0x02,0x00,0x02,0x00,0x7F,0xF0, +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* ܸ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xC0,0x08,0x80,0x08,0xE0,0x0A,0x20, +0x11,0x40,0x10,0x80,0x23,0x40,0x4C,0x30,0x00,0x00, +/* ܹ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x04,0x00,0x04,0x00,0x3F,0xC0,0x04,0x40,0x34,0x40, +0x08,0x40,0x0C,0x50,0x12,0x50,0x60,0x30,0x00,0x00, +/* ܺ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x00,0x20,0x3F,0xE0,0x20,0x00, +0x3F,0xF0,0x00,0x10,0x00,0x10,0x00,0x60,0x00,0x00, +/* ܻ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x00,0x20,0x00,0x20,0x3F,0xE0, +0x20,0x00,0x20,0x00,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* ܼ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x04,0x00,0x08,0x40,0x1F,0x80,0x03,0x10,0x0C,0x20, +0x3F,0xC0,0x01,0x80,0x06,0x00,0x78,0x00,0x00,0x00, +/* ܽ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* ܾ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x7F,0xF0, +0x08,0x80,0x08,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* ܿ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x7F,0xF0, +0x08,0x00,0x10,0x40,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x22,0x20,0x22,0x60,0x02,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xC0,0x10,0x40, +0x08,0x80,0x07,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xF0,0x22,0x00,0x22,0x00,0x2F,0xE0, +0x22,0x20,0x22,0x20,0x24,0x20,0x48,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x28,0x20, +0x28,0x20,0x28,0x60,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xF0,0x20,0x00,0x3F,0xE0,0x20,0x20, +0x20,0x20,0x3F,0xE0,0x20,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x21,0x00,0x21,0x10,0x3D,0x20,0x21,0x40, +0x21,0x80,0x21,0x10,0x2D,0x10,0x30,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x02,0x00,0x12,0x00,0x13,0xE0, +0x12,0x00,0x12,0x00,0x12,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x02,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x25,0x20, +0x28,0xA0,0x20,0x20,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20, +0x25,0x20,0x09,0x10,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x40,0x11,0x80,0x1E,0x00,0x10,0x00,0x7F,0xF0, +0x11,0x00,0x10,0x80,0x14,0x40,0x18,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x08,0x80,0x08,0x80,0x08,0x80,0x14,0x80, +0x13,0x40,0x21,0x40,0x42,0x20,0x04,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x05,0x00,0x18,0xC0,0x62,0x30,0x01,0x00, +0x3F,0xE0,0x00,0x40,0x00,0x80,0x01,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x00,0x1F,0xE0,0x25,0x20,0x45,0x20,0x09,0x20, +0x11,0x20,0x62,0x20,0x04,0x20,0x19,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x00,0x1F,0xF0,0x20,0x10,0x42,0x20,0x02,0x00, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0xE0,0x3F,0x00,0x21,0x00,0x21,0x00,0x3F,0xF0, +0x21,0x00,0x28,0x90,0x30,0x50,0x20,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x1F,0xC0,0x10,0x40,0x20,0x40,0x40,0x30,0x3F,0xC0, +0x10,0x40,0x08,0x80,0x07,0x00,0x78,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x01,0x00,0x7F,0xF0,0x04,0x00,0x05,0x00, +0x04,0x80,0x04,0x40,0x04,0x00,0x04,0x00,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x40,0x10, +0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3E,0x80,0x04,0x80,0x08,0x80,0x0E,0x80, +0x78,0x80,0x08,0x90,0x08,0x90,0x18,0x70,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x24,0x40,0x22,0x40,0x22,0x40,0x20,0x80, +0x20,0xC0,0x29,0x20,0x32,0x10,0x24,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x3F,0xE0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x40,0x7F,0xF0,0x10,0x40,0x10,0x40,0x1F,0xC0, +0x10,0x40,0x10,0x40,0x1F,0xC0,0x10,0x40,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x02,0x00,0x06,0x80,0x0A,0x40, +0x32,0x20,0x02,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x04,0x80,0x04,0x40,0x7F,0xF0,0x05,0x00,0x09,0x20, +0x09,0x40,0x11,0x90,0x23,0x10,0x4C,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x04,0x80,0x04,0x40,0x7F,0xF0,0x08,0x00,0x0F,0xE0, +0x14,0x20,0x12,0x40,0x21,0x80,0x4E,0x70,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x20,0x20,0x20,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x7F,0xF0,0x20,0x20,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x3F,0xE0,0x20,0x20,0x2F,0xA0,0x28,0xA0, +0x28,0xA0,0x2F,0xA0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x08,0x80,0x10,0x80,0x37,0xF0,0x50,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x13,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x08,0x40,0x10,0x40,0x37,0xF0,0x50,0x40, +0x14,0x40,0x12,0x40,0x10,0x40,0x11,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x05,0x00,0x18,0xC0,0x62,0x30,0x1F,0xC0, +0x00,0x40,0x0C,0x80,0x03,0x00,0x00,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x1F,0xC0,0x14,0x40,0x12,0xC0,0x10,0x00, +0x1F,0xF0,0x00,0x10,0x7F,0x90,0x00,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x0C,0x00,0x71,0xF0,0x41,0x10,0x7D,0x10,0x41,0x10, +0x45,0x10,0x79,0x30,0x01,0x00,0x01,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x18,0x00,0x61,0xF0,0x45,0x10,0x45,0x10,0x4D,0x10, +0x55,0x10,0x65,0x30,0x09,0x00,0x11,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x7F,0xF0,0x40,0x10,0x02,0x00,0x02,0x00, +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x40,0x10,0x3F,0xC0,0x08,0x40,0x08,0x40, +0x7F,0x40,0x08,0x50,0x08,0x30,0x08,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x21,0x00,0x3F,0xF0, +0x21,0x00,0x28,0x90,0x30,0x50,0x20,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x08,0x20,0x10,0xC0,0x60,0x00,0x1F,0xE0, +0x10,0x20,0x10,0x20,0x1F,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x05,0x00,0x3F,0xE0,0x25,0x20,0x25,0x20, +0x28,0xE0,0x30,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x7F,0xF0,0x02,0x20,0x3F,0xE0,0x22,0x00,0x3F,0xF0, +0x02,0x10,0x05,0x60,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x14,0x40,0x05,0xF0,0x7E,0x40,0x03,0x90,0x3C,0x70,0x00,0x00, +0x7F,0xF0,0x09,0x00,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x21,0x20,0x3D,0x40,0x21,0x80,0x2D,0x10,0x30,0xF0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x08,0x80,0x08,0x90,0x28,0xA0,0x2E,0xC0, +0x28,0x80,0x28,0x90,0x2E,0x90,0x70,0x70,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x1F,0xC0,0x10,0x40,0x10,0x40,0x1F,0xC0,0x00,0x00, +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x20,0x20,0x2F,0xA0,0x20,0x20,0x2F,0xA0, +0x28,0xA0,0x2F,0xA0,0x20,0x20,0x20,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x20,0x20,0x2F,0xA0,0x28,0xA0,0x28,0xA0, +0x2F,0xA0,0x20,0x20,0x3F,0xE0,0x00,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x12,0x00,0x1F,0xE0,0x22,0x00,0x02,0x00,0x7F,0xF0, +0x07,0x00,0x1A,0xC0,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x38,0x60,0x0B,0x80,0x10,0x80,0x3B,0xE0, +0x08,0x80,0x2B,0xE0,0x10,0x00,0x6F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x01,0xC0,0x1E,0x00,0x02,0x00,0x7F,0xF0,0x08,0x80, +0x10,0x40,0x68,0xB0,0x08,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x09,0x40,0x11,0x20,0x3F,0xF0,0x51,0x00,0x11,0x00, +0x12,0x80,0x12,0x80,0x14,0x40,0x18,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x08,0x60,0x13,0x80,0x30,0x80,0x50,0x80,0x17,0xF0, +0x10,0x80,0x10,0x80,0x10,0x80,0x13,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x08,0x00,0x11,0xE0,0x20,0x00,0x48,0x00,0x13,0xF0, +0x30,0x40,0x50,0x40,0x10,0x40,0x11,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x05,0x00,0x18,0xC0,0x60,0x30,0x1F,0xC0,0x02,0x00, +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x05,0x00,0x18,0xC0,0x6F,0xB0,0x00,0x00,0x7F,0xF0, +0x08,0x00,0x10,0x40,0x3F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x00,0x1F,0xF0,0x20,0x10,0x5F,0x90,0x10,0x90, +0x1F,0x90,0x10,0x90,0x1F,0x90,0x10,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x04,0x00,0x0F,0xE0,0x10,0x40,0x29,0x80,0x06,0x00, +0x1F,0xE0,0x70,0x20,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x7F,0xF0,0x10,0x40,0x0F,0x80,0x70,0x70, +0x08,0x80,0x08,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x02,0x00,0x7F,0xF0,0x08,0x80,0x10,0x40,0x28,0xA0, +0x05,0x00,0x02,0x00,0x0D,0x80,0x70,0x70,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x14,0x40,0x02,0x00,0x7F,0xF0,0x08,0x00,0x10,0x40,0x3F,0xE0, +0x08,0xA0,0x08,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x40,0x00,0x2F,0xE0,0x01,0x00,0x41,0x00,0x21,0x00, +0x01,0x00,0x11,0x00,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x40,0x10,0x12,0x00,0x1F,0xE0,0x22,0x00, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x42,0x10,0x02,0x00,0x3B,0x20,0x0B,0x40, +0x12,0x80,0x22,0x40,0x42,0x30,0x06,0x00,0x00,0x00, +/* ݡ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x00,0x20,0x1F,0xE0,0x00,0x20,0x3F,0xE0, +0x00,0x40,0x7F,0xF0,0x10,0x40,0x09,0xC0,0x00,0x00, +/* ݢ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x22,0x00,0x21,0x20,0x2C,0xC0,0x30,0x30,0x00,0x00, +/* ݣ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x10,0x80,0x16,0x40, +0x21,0x30,0x4C,0x80,0x03,0x00,0x00,0x80,0x00,0x00, +/* ݤ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x08,0x10,0x05,0x20,0x11,0x00,0x09,0x00, +0x7F,0xF0,0x02,0x80,0x0C,0x60,0x30,0x10,0x00,0x00, +/* ݥ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x00,0x78,0x80,0x08,0x80,0x12,0xA0,0x1A,0x90, +0x72,0x90,0x14,0x90,0x10,0x80,0x31,0x80,0x00,0x00, +/* ݦ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x00,0x23,0xE0,0x78,0x80,0x10,0x80,0x20,0x80, +0x78,0x80,0x00,0x80,0x18,0x80,0x67,0xF0,0x00,0x00, +/* ݧ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x20,0x20,0x20,0x7B,0xF0,0x10,0x20,0x22,0x20, +0x79,0x20,0x01,0x20,0x18,0x20,0x60,0xE0,0x00,0x00, +/* ݨ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x11,0x00,0x11,0xF0,0x12,0x10,0x7C,0xA0,0x10,0x80, +0x11,0x40,0x1D,0x40,0x72,0x20,0x04,0x10,0x00,0x00, +/* ݩ */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x40,0x10,0x1F,0x80, +0x01,0x00,0x7F,0xF0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* ݪ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x20,0x78,0x20,0x4B,0xF0,0x48,0x20,0x79,0x20, +0x48,0xA0,0x48,0x20,0x78,0x20,0x48,0xE0,0x00,0x00, +/* ݫ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0, +0x42,0x10,0x45,0x10,0x48,0x90,0x40,0x30,0x00,0x00, +/* ݬ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x12,0x40,0x2F,0xA0, +0x44,0x90,0x05,0xE0,0x08,0x20,0x31,0xC0,0x00,0x00, +/* ݭ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x05,0x40,0x39,0x20,0x09,0x00,0x7F,0xF0,0x09,0x20, +0x0D,0x40,0x38,0x90,0x09,0x50,0x1A,0x30,0x00,0x00, +/* ݮ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x1F,0xE0,0x20,0x00,0x1F,0xC0,0x12,0x40,0x7F,0xF0, +0x24,0x40,0x3F,0xE0,0x00,0x40,0x03,0x80,0x00,0x00, +/* ݯ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x80,0x11,0x00,0x29,0xF0,0x6A,0x20,0x29,0x20, +0x29,0x40,0x28,0x80,0x21,0x40,0x26,0x30,0x00,0x00, +/* ݰ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x11,0x00,0x10,0x80,0x27,0xE0,0x20,0x00,0x64,0x20, +0x22,0x20,0x22,0x40,0x20,0x40,0x2F,0xF0,0x00,0x00, +/* ݱ */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x05,0x00,0x18,0xC0,0x6F,0xB0,0x02,0x00,0x3F,0xE0, +0x02,0x00,0x12,0x40,0x22,0x20,0x46,0x10,0x00,0x00, +/* ݲ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x05,0x00,0x18,0xC0,0x60,0x30,0x1F,0xC0, +0x04,0x00,0x12,0x40,0x08,0x80,0x7F,0xF0,0x00,0x00, +/* ݳ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0xF0,0x7F,0x00,0x24,0x40,0x12,0x80,0x1F,0xC0, +0x00,0x80,0x7F,0xF0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* ݴ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x01,0xF0,0x7E,0x00,0x24,0x20,0x12,0x40,0x04,0x00, +0x7F,0xF0,0x08,0x80,0x07,0x00,0x38,0xE0,0x00,0x00, +/* ݵ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x29,0x20,0x11,0x10,0x2B,0xF0,0x49,0x40,0x19,0x40, +0x29,0x40,0x4A,0x50,0x0A,0x50,0x34,0x30,0x00,0x00, +/* ݶ */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x28,0x80,0x10,0x80,0x2A,0x90,0x4A,0xA0,0x1C,0x80, +0x29,0x40,0x49,0x40,0x0A,0x20,0x34,0x10,0x00,0x00, +/* ݷ */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x02,0x00,0x3F,0xE0,0x10,0x40,0x08,0x80,0x7F,0xF0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x02,0x00,0x00,0x00, +/* ݸ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x00,0x00, +0x7F,0xF0,0x09,0x00,0x11,0x10,0x60,0xF0,0x00,0x00, +/* ݹ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x21,0x20,0x2C,0xC0,0x30,0x30,0x00,0x00, +/* ݺ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x44,0x10,0x1F,0xC0,0x14,0x40,0x12,0xC0, +0x1F,0xF0,0x00,0x10,0x7F,0x90,0x00,0x30,0x00,0x00, +/* ݻ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x80,0x27,0xF0,0x78,0x80,0x12,0xA0,0x22,0xA0, +0x7B,0xE0,0x00,0x80,0x18,0x90,0x60,0x70,0x00,0x00, +/* ݼ */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x10,0xC0,0x00,0x00, +/* ݽ */ +0x08,0x80,0x7F,0xF0,0x10,0x40,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x10,0x40,0x7F,0xF0,0x10,0x40,0x20,0x20,0x00,0x00, +/* ݾ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x60,0x13,0x80,0x7E,0x00,0x12,0x00,0x3B,0xF0, +0x56,0x40,0x12,0x40,0x12,0x40,0x14,0x40,0x00,0x00, +/* ݿ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x00,0x11,0x20,0x79,0x20,0x12,0x10,0x38,0x80, +0x55,0x00,0x12,0x20,0x13,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x7F,0xF0,0x08,0x80,0x17,0x40,0x60,0x30, +0x1F,0xC0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x04,0x00,0x3F,0xC0,0x04,0x40,0x7F,0xF0,0x04,0x40, +0x7F,0xF0,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x11,0x40,0x11,0x20,0x7F,0xF0,0x12,0x00,0x1B,0xE0, +0x75,0x20,0x15,0x20,0x18,0xC0,0x33,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x00,0x1D,0xE0,0x11,0x20,0x7D,0x20,0x11,0x20, +0x39,0x40,0x54,0x80,0x11,0x40,0x32,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x40,0x10,0x40,0x7C,0x70,0x54,0x40,0x55,0xF0, +0x55,0x10,0x5D,0x10,0x11,0xF0,0x11,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x06,0x00,0x3A,0xE0,0x22,0x20,0x3A,0xE0,0x22,0x20, +0x3F,0xE0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x15,0x40,0x08,0x80,0x1F,0xF0,0x31,0x00,0x5F,0xE0,0x11,0x00, +0x1F,0xE0,0x11,0x00,0x1F,0xF0,0x10,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x04,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x24,0x20, +0x3F,0xE0,0x11,0x00,0x7F,0xF0,0x01,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3D,0xF0,0x25,0x10,0x3D,0x60,0x25,0x00,0x3D,0xF0, +0x25,0x50,0x25,0x50,0x25,0x20,0x4D,0x50,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x08,0x00,0x0F,0x80,0x10,0x80,0x3F,0xE0,0x52,0x20, +0x1F,0xE0,0x05,0x50,0x19,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x1F,0xC0,0x20,0x40,0x44,0x80,0x39,0xE0,0x20,0x20, +0x3D,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x3F,0xE0,0x08,0x80,0x08,0x80,0x15,0x40, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x20,0x80,0x10,0x80,0x7D,0x40,0x22,0x20,0x3C,0x90, +0x24,0x40,0x25,0x00,0x24,0x80,0x58,0x40,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x27,0xE0,0x14,0x20,0x04,0x20,0x47,0xE0,0x24,0x20, +0x07,0xE0,0x14,0x20,0x24,0x20,0x4F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x7F,0xF0,0x40,0x10,0x3F,0xE0,0x08,0x00, +0x1F,0xE0,0x30,0x20,0x5F,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x7F,0xF0,0x40,0x10,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x10,0x00,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x02,0x00,0x7F,0xF0,0x50,0x10,0x1D,0xE0,0x25,0x20, +0x55,0x20,0x09,0x60,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x44,0x10,0x08,0x80,0x1F,0x00,0x04,0x40, +0x3F,0xE0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x60,0x77,0x80,0x15,0x40,0x25,0x40,0x35,0x40, +0x65,0x20,0x25,0xA0,0x25,0x50,0x69,0xD0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xC0,0x00,0x80,0x43,0x10,0x52,0x50,0x4A,0x90, +0x52,0x50,0x46,0x10,0x40,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x7D,0xF0,0x10,0x90,0x38,0x90,0x11,0x10,0x7C,0x60, +0x12,0x00,0x7F,0xF0,0x08,0x80,0x70,0x70,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x08,0x20,0x3E,0x20,0x09,0xF0,0x7E,0x20,0x09,0x20, +0x3E,0xA0,0x08,0x20,0x0E,0x20,0x70,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x40,0x3F,0xE0,0x10,0x40,0x1F,0xC0,0x10,0x40, +0x7F,0xF0,0x24,0x80,0x28,0x40,0x3F,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x00,0x13,0xF0,0x7E,0x10,0x13,0xF0,0x3A,0x10, +0x57,0xF0,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x00,0xA0,0x3F,0xF0,0x20,0x80,0x3E,0xA0,0x28,0xA0, +0x3E,0x40,0x2A,0x50,0x24,0xB0,0x5B,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0xA0,0x3F,0xF0,0x20,0x80,0x2F,0xA0,0x28,0xA0,0x2A,0xA0, +0x2A,0xC0,0x25,0x50,0x28,0xB0,0x41,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x28,0x80,0x3D,0x60,0x21,0x90,0x3C,0xF0,0x02,0x00,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x0F,0x80,0x08,0x80,0x7F,0xF0,0x10,0x40,0x1F,0xC0, +0x10,0x40,0x13,0xF0,0x7C,0x40,0x00,0x40,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x3F,0xE0,0x22,0x20,0x7F,0xF0,0x00,0x00,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x0D,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3D,0xE0,0x25,0x20,0x3D,0xE0,0x00,0x00,0x7F,0xF0, +0x10,0x00,0x1F,0xE0,0x00,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x0B,0xE0,0x0A,0x20,0x13,0xE0,0x30,0x80,0x57,0xF0, +0x11,0xC0,0x12,0xA0,0x14,0x90,0x10,0x80,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x20,0x00,0x7B,0xE0,0x4A,0xA0,0x4A,0xA0,0x7B,0xE0, +0x4A,0x00,0x4A,0x10,0x7A,0x10,0x49,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x7F,0xF0, +0x40,0x10,0x3F,0xE0,0x02,0x00,0x06,0x00,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x12,0x40,0x0A,0x80,0x7F,0xF0,0x0A,0x80,0x32,0x60,0x04,0x00, +0x7F,0xF0,0x08,0x80,0x07,0x00,0x38,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x20,0x60,0x17,0x80,0x04,0x20,0x45,0xC0,0x25,0x40, +0x05,0x50,0x15,0x20,0x25,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x12,0x40,0x7F,0xF0,0x40,0x10,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3D,0xE0,0x24,0x20,0x3D,0xE0,0x20,0x00,0x3D,0xE0, +0x21,0x20,0x3D,0x20,0x20,0xC0,0x23,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x1F,0xC0,0x04,0x00,0x7F,0xF0,0x08,0x80,0x1F,0x40, +0x62,0x30,0x3F,0xE0,0x0A,0x40,0x32,0x20,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0xA0,0x1F,0x40,0x02,0x80,0x7F,0xF0,0x04,0x80,0x1D,0x10, +0x63,0xF0,0x1F,0xC0,0x12,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xF0,0x20,0x00,0x3F,0xF0,0x24,0xA0,0x26,0x70, +0x20,0x40,0x3F,0xF0,0x48,0x40,0x04,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x22,0x20,0x7F,0xF0,0x10,0x40,0x3F,0xA0, +0x48,0x90,0x0F,0xE0,0x00,0x20,0x3F,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x22,0x20,0x2F,0xA0,0x25,0x20,0x28,0xA0, +0x3F,0xE0,0x04,0x00,0x2A,0xA0,0x47,0x90,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x10,0x80,0x1F,0xF0,0x24,0x20,0x62,0x40,0x2F,0xF0, +0x20,0x00,0x27,0xE0,0x24,0x20,0x27,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x14,0x40,0x68,0xB0,0x1F,0xC0,0x00,0x00,0x3D,0xE0, +0x14,0xA0,0x0C,0x60,0x35,0xA0,0x0C,0x60,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x7F,0xF0, +0x40,0x10,0x4F,0x90,0x48,0x90,0x4F,0xB0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x01,0x00,0x1F,0xF0,0x52,0x00,0x37,0xE0,0x19,0x00, +0x3F,0xF0,0x52,0x80,0x24,0x40,0x58,0x30,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x12,0x40,0x7F,0xF0,0x05,0x00,0x22,0x20,0x3F,0xE0,0x02,0x00, +0x7F,0xF0,0x44,0x10,0x49,0x10,0x4F,0xB0,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x12,0x40,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x44,0x10,0x3F,0xE0, +0x08,0x00,0x0F,0xE0,0x10,0x20,0x20,0xC0,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x08,0x80,0x7F,0xF0,0x05,0x20,0x7F,0xF0,0x05,0x20, +0x3F,0xE0,0x15,0x40,0x25,0x20,0x45,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x44,0x00,0x29,0xF0,0x7D,0x10,0x11,0xF0,0x55,0x10, +0x7D,0xF0,0x11,0x10,0x22,0x10,0x44,0x30,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x12,0x40,0x4F,0xE0,0x28,0x20,0x0F,0xE0,0x48,0x20,0x2F,0xE0, +0x09,0x10,0x08,0xA0,0x2A,0x40,0x4C,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x42,0x10,0x0D,0x80,0x70,0x70,0x1F,0xC0, +0x02,0x00,0x3F,0xE0,0x0A,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7B,0xF0,0x08,0x40,0x29,0xF0,0x11,0x10,0x7D,0x50, +0x15,0x50,0x10,0x40,0x10,0xA0,0x31,0x10,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x08,0x80,0x3E,0xF0,0x08,0x90,0x3F,0x10,0x2A,0x40, +0x3E,0x40,0x1C,0xA0,0x2A,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x25,0x20,0x7F,0xF0,0x40,0x10,0x3F,0xE0, +0x10,0x00,0x1F,0x80,0x24,0x90,0x3A,0x70,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x24,0x30,0x4F,0x90,0x48,0x90,0x4F,0x90,0x48,0x90, +0x6F,0xB0,0x05,0x00,0x09,0x10,0x70,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x08,0x80,0x12,0xE0,0x2A,0x80,0x57,0xF0,0x30,0x00, +0x50,0x80,0x12,0xE0,0x12,0x80,0x15,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x08,0x80,0x14,0x80,0x22,0xF0,0x5D,0x20,0x02,0xA0, +0x4A,0xA0,0x24,0x40,0x06,0xA0,0x79,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x22,0x00,0x13,0xF0,0x7D,0x00,0x21,0xE0,0x3A,0x80, +0x2F,0xF0,0x28,0x80,0x29,0x40,0x5A,0x30,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x4F,0xF0,0x25,0x10,0x4F,0x90,0x5A,0x10,0x4F,0x90, +0x4A,0x10,0x4F,0x90,0x4A,0x10,0x4F,0xB0,0x00,0x00, +/* ޡ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x27,0xF0,0x14,0x00,0x47,0xE0,0x24,0x20,0x17,0xF0, +0x22,0x00,0x7F,0xF0,0x12,0x40,0x62,0x30,0x00,0x00, +/* ޢ */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x7F,0xF0,0x40,0x90,0x38,0xE0,0x00,0x80,0x7D,0xE0, +0x29,0x20,0x28,0xC0,0x29,0x20,0x47,0xF0,0x00,0x00, +/* ޣ */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x7F,0xF0,0x48,0x10,0x17,0xE0,0x31,0x00,0x57,0xE0, +0x14,0x20,0x17,0xE0,0x14,0x20,0x17,0xE0,0x00,0x00, +/* ޤ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3D,0xE0,0x25,0x20,0x14,0xA0,0x23,0x20,0x0D,0x80, +0x71,0x70,0x0E,0x00,0x01,0xC0,0x3E,0x00,0x00,0x00, +/* ޥ */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x3F,0xE0,0x12,0x40,0x1F,0xC0,0x12,0x50,0x7F,0xF0, +0x02,0x10,0x29,0x20,0x48,0x50,0x07,0xC0,0x00,0x00, +/* ަ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7F,0xF0,0x05,0x00,0x3F,0xE0,0x25,0x20,0x3F,0xE0, +0x12,0x40,0x11,0x40,0x7F,0xF0,0x02,0x00,0x00,0x00, +/* ާ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xF0,0x31,0x40,0x2A,0x40,0x3F,0x70,0x24,0x90, +0x35,0x40,0x3F,0x40,0x24,0xA0,0x59,0x10,0x00,0x00, +/* ި */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x7C,0x40,0x11,0x40,0x2D,0xF0,0x5A,0x40,0x29,0xF0, +0x5C,0x40,0x2B,0xF0,0x4A,0x00,0x19,0xF0,0x00,0x00, +/* ީ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x1F,0xC0,0x14,0x40,0x12,0x40,0x7F,0xF0,0x24,0x00, +0x3D,0xE0,0x26,0xA0,0x7C,0x40,0x05,0xB0,0x00,0x00, +/* ު */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x00,0x80,0x3C,0xA0,0x24,0x80,0x7F,0xF0,0x24,0x80, +0x3C,0xA0,0x26,0x50,0x7C,0xB0,0x05,0x10,0x00,0x00, +/* ޫ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x25,0x20,0x7F,0xF0,0x50,0x50,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* ެ */ +0x08,0x80,0x7F,0xF0,0x08,0xC0,0x3F,0x80,0x12,0x40,0x7F,0xF0,0x12,0x40,0x3F,0xE0, +0x52,0x50,0x1F,0xC0,0x12,0x40,0x1F,0xC0,0x00,0x00, +/* ޭ */ +0x08,0x80,0x7F,0xF0,0x2A,0x80,0x14,0x30,0x3E,0xC0,0x2A,0x80,0x3E,0xF0,0x2A,0xA0, +0x3E,0xA0,0x08,0xA0,0x7E,0xA0,0x09,0x20,0x00,0x00, +/* ޮ */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x3C,0xA0,0x20,0xA0,0x3D,0xF0,0x20,0xA0,0x7E,0xA0, +0x11,0xF0,0x24,0x00,0x7E,0xA0,0x01,0x10,0x00,0x00, +/* ޯ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x01,0x40,0x79,0x40,0x27,0x70,0x39,0x40,0x4F,0x70, +0x29,0x40,0x17,0x70,0x21,0x40,0x4F,0xF0,0x00,0x00, +/* ް */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x25,0x20,0x7F,0xF0,0x40,0x10,0x3F,0xE0, +0x09,0x20,0x3D,0x40,0x15,0x90,0x78,0xF0,0x00,0x00, +/* ޱ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x24,0x40,0x55,0x40,0x1F,0x70,0x20,0xA0,0x6E,0xA0, +0x20,0xA0,0x2E,0x40,0x2A,0xA0,0x33,0x10,0x00,0x00, +/* ޲ */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x3F,0xE0,0x10,0x40,0x7F,0xF0,0x22,0x20,0x21,0x20, +0x3F,0xE0,0x02,0x00,0x28,0xA0,0x47,0x90,0x00,0x00, +/* ޳ */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x7F,0xF0,0x21,0x40,0x2B,0xF0,0x4E,0x40,0x73,0xF0, +0x2A,0x40,0x7B,0xF0,0x12,0x40,0x23,0xF0,0x00,0x00, +/* ޴ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x2A,0x40,0x7F,0x70,0x2C,0xA0,0x4A,0x20,0x10,0xA0, +0x7E,0xA0,0x22,0x40,0x1C,0xA0,0x63,0x10,0x00,0x00, +/* ޵ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x00,0x40,0x3D,0xF0,0x24,0xA0,0x3C,0x40,0x21,0xF0, +0x3C,0x40,0x34,0xE0,0x54,0x40,0x1C,0x40,0x00,0x00, +/* ޶ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x13,0xF0,0x12,0x00,0x7B,0xF0,0x2A,0xA0,0x2A,0xD0, +0x12,0x20,0x2B,0xF0,0x45,0x20,0x08,0x60,0x00,0x00, +/* ޷ */ +0x10,0x40,0x7F,0xF0,0x12,0x40,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x10,0x40,0x7F,0xF0, +0x48,0x90,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* ޸ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x3F,0xE0, +0x02,0x00,0x3F,0xE0,0x25,0x20,0x25,0x60,0x00,0x00, +/* ޹ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x22,0x20,0x2A,0xA0, +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x25,0x20,0x00,0x00, +/* ޺ */ +0x08,0x80,0x7F,0xF0,0x28,0x80,0x3D,0x10,0x44,0xA0,0x3F,0xF0,0x2A,0x40,0x3E,0xE0, +0x2A,0x40,0x3F,0xF0,0x00,0x40,0x7E,0x40,0x00,0x00, +/* ޻ */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x7F,0xF0,0x10,0x40,0x7F,0xF0,0x48,0x90,0x4F,0xB0, +0x02,0x00,0x7F,0xF0,0x12,0x40,0x62,0x30,0x00,0x00, +/* ޼ */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x3D,0x00,0x09,0xF0,0x7E,0x50,0x2A,0x90,0x4D,0x30, +0x1A,0xC0,0x67,0x30,0x0A,0x80,0x16,0x40,0x00,0x00, +/* ޽ */ +0x08,0x80,0x7F,0xF0,0x08,0x80,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x4A,0x90,0x1F,0xE0, +0x31,0x00,0x5F,0xE0,0x11,0x00,0x1F,0xF0,0x00,0x00, +/* ޾ */ +0x08,0x80,0x7F,0xF0,0x0A,0x80,0x43,0xE0,0x22,0x00,0x0F,0xF0,0x69,0x10,0x2A,0xA0, +0x2D,0xC0,0x2A,0xA0,0x31,0x80,0x4F,0xF0,0x00,0x00, +/* ޿ */ +0x10,0x40,0x7F,0xF0,0x12,0x40,0x27,0x70,0x49,0x00,0x1F,0x80,0x2A,0xF0,0x6F,0xA0, +0x2A,0xA0,0x3F,0xE0,0x25,0x20,0x28,0xE0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x28,0x80,0x3E,0xF0,0x6B,0x20,0x3E,0xA0,0x2A,0x40,0x3E,0xA0, +0x08,0x50,0x3F,0xE0,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x10,0x40,0x39,0xF0,0x28,0xA0,0x3D,0xF0,0x24,0x40,0x3C,0xE0, +0x02,0x40,0x7F,0xF0,0x0A,0x80,0x72,0x70,0x00,0x00, +/* */ +0x10,0x40,0x7F,0xF0,0x11,0x40,0x3F,0xF0,0x24,0x40,0x3E,0xF0,0x2D,0x60,0x36,0xD0, +0x2E,0xE0,0x22,0x80,0x2E,0xE0,0x42,0x80,0x00,0x00, +/* */ +0x00,0x00,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x08,0x80,0x7F,0xF0,0x08,0x80, +0x08,0x80,0x10,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x48,0x90,0x11,0x80,0x00,0x00,0x08,0x80, +0x7F,0xF0,0x08,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x12,0x40,0x12,0x40, +0x12,0x40,0x12,0x40,0x22,0x40,0x40,0x40,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x3F,0xE0,0x20,0x00,0x2C,0xC0, +0x23,0x00,0x2C,0xC0,0x20,0x00,0x3F,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x10,0x40,0x7F,0xF0,0x10,0x40,0x1F,0xC0,0x10,0x40, +0x1F,0xC0,0x10,0x70,0x7F,0xC0,0x00,0x40,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x48,0x90,0x11,0x80,0x02,0x00, +0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x12,0x40,0x09,0x80,0x1E,0x00,0x04,0x40,0x3F,0xE0,0x02,0x00, +0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x08,0x80,0x28,0x80,0x3B,0xF0,0x08,0x80,0x78,0x80,0x2B,0xE0,0x48,0x00,0x02,0x00, +0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x10,0x80,0x7C,0x80,0x29,0xF0,0x46,0x10,0x39,0xD0,0x01,0x50,0x7D,0x50,0x21,0xD0, +0x39,0x30,0x09,0x00,0x09,0x10,0x18,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x04,0x00,0x7F,0xF0,0x05,0x00,0x09,0x00,0x09,0x00,0x09,0x00, +0x11,0x00,0x11,0x10,0x21,0x10,0x40,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x21,0x00,0x21,0xE0,0x7E,0x20,0x28,0x20,0x29,0x20,0x28,0xA0,0x28,0x20, +0x28,0x20,0x28,0xC0,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x21,0x40,0x7E,0x30,0x29,0x40,0x29,0x40,0x29,0x40,0x29,0x40, +0x29,0x40,0x2A,0x40,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x20,0xA0,0x22,0xA0,0x22,0xB0,0x7E,0xC0,0x2A,0x90,0x28,0x00,0x2B,0xE0,0x2A,0xA0, +0x2A,0xA0,0x2F,0xF0,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x10,0x00,0x78,0x00,0x10,0x00,0x10,0x00,0x18,0x00,0x70,0x00, +0x10,0x00,0x10,0x00,0x10,0x00,0x30,0x00,0x00,0x00, +/* */ +0x24,0x00,0x22,0xF0,0x24,0x10,0x74,0x10,0x24,0x10,0x24,0x10,0x34,0x10,0x64,0x10, +0x24,0x10,0x24,0x10,0x24,0x10,0x64,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xE0,0x79,0x00,0x11,0x00,0x17,0xF0,0x1A,0x00,0x73,0xE0, +0x10,0x20,0x13,0x40,0x10,0xC0,0x30,0x20,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x27,0xF0,0x74,0x90,0x24,0x90,0x27,0xF0,0x34,0x90,0x64,0x90, +0x27,0xF0,0x24,0x90,0x20,0x80,0x60,0x80,0x00,0x00, +/* */ +0x11,0x20,0x11,0x20,0x12,0x20,0x7A,0xF0,0x16,0x20,0x12,0x20,0x1A,0xA0,0x72,0x60, +0x12,0x20,0x12,0x20,0x12,0x20,0x32,0x60,0x00,0x00, +/* */ +0x10,0x80,0x11,0x00,0x12,0x20,0x7B,0xF0,0x10,0x10,0x11,0x20,0x19,0x20,0x73,0xF0, +0x11,0x20,0x11,0x20,0x12,0x20,0x34,0x20,0x00,0x00, +/* */ +0x24,0x80,0x24,0x80,0x24,0x80,0x79,0xF0,0x2A,0x90,0x2E,0x90,0x34,0x90,0x64,0x90, +0x2A,0x90,0x2F,0x10,0x21,0x10,0x62,0x60,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x78,0x80,0x10,0x80,0x13,0xE0,0x18,0x00,0x73,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x32,0x20,0x00,0x00, +/* */ +0x20,0x60,0x23,0x80,0x20,0x80,0x77,0xF0,0x21,0x40,0x22,0x20,0x34,0x10,0x62,0x20, +0x22,0x20,0x22,0x20,0x22,0x20,0x64,0x20,0x00,0x00, +/* */ +0x24,0x90,0x24,0x90,0x29,0x20,0x74,0x90,0x24,0x90,0x21,0x00,0x32,0x00,0x67,0xE0, +0x28,0x20,0x22,0x40,0x21,0x80,0x6E,0x00,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x23,0xE0,0x70,0x00,0x27,0xF0,0x24,0x90,0x34,0x90,0x67,0xF0, +0x24,0x00,0x24,0x10,0x24,0x10,0x63,0xF0,0x00,0x00, +/* */ +0x20,0x70,0x27,0x80,0x21,0x10,0x74,0xA0,0x22,0x00,0x20,0x20,0x37,0xF0,0x60,0x20, +0x22,0x20,0x21,0x20,0x20,0x20,0x60,0x60,0x00,0x00, +/* */ +0x20,0x00,0x27,0xE0,0x21,0x20,0x77,0xF0,0x21,0x20,0x27,0xE0,0x32,0x00,0x67,0xE0, +0x2A,0x20,0x22,0x20,0x23,0xE0,0x62,0x20,0x00,0x00, +/* */ +0x27,0xE0,0x21,0x00,0x71,0x00,0x2F,0xF0,0x22,0x40,0x24,0x20,0x39,0x10,0x61,0x00, +0x21,0xA0,0x25,0x50,0x29,0x50,0x63,0x00,0x00,0x00, +/* */ +0x20,0x00,0x2F,0xF0,0x25,0x50,0x75,0x50,0x27,0x60,0x25,0x60,0x37,0x50,0x65,0x50, +0x25,0xD0,0x2F,0x60,0x21,0x40,0x61,0x40,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x24,0x40,0x74,0x40,0x25,0xF0,0x24,0x40,0x37,0xF0,0x64,0x00, +0x24,0x40,0x25,0xF0,0x24,0x40,0x6B,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x79,0x40,0x12,0x20,0x15,0xD0,0x18,0x00,0x77,0xF0, +0x10,0x80,0x12,0xA0,0x14,0x90,0x31,0x80,0x00,0x00, +/* */ +0x21,0x00,0x27,0xE0,0x22,0x40,0x74,0x20,0x2F,0xF0,0x20,0x20,0x37,0xA0,0x64,0xA0, +0x24,0xA0,0x27,0xA0,0x24,0x20,0x60,0xE0,0x00,0x00, +/* */ +0x27,0xF0,0x24,0x10,0x77,0xF0,0x24,0x90,0x24,0x90,0x27,0xF0,0x34,0x90,0x64,0xB0, +0x24,0x90,0x27,0xF0,0x24,0x10,0x67,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x22,0x00,0x27,0xE0,0x74,0xA0,0x27,0xE0,0x25,0x20,0x37,0xE0,0x62,0x00, +0x24,0x80,0x2F,0xF0,0x20,0x80,0x60,0x80,0x00,0x00, +/* */ +0x22,0x00,0x23,0xF0,0x24,0x10,0x71,0x10,0x25,0x50,0x21,0x10,0x37,0xD0,0x61,0x10, +0x23,0x90,0x25,0x50,0x21,0x10,0x60,0x60,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x10,0x00,0x7A,0x20,0x11,0x40,0x17,0xF0,0x18,0x00,0x73,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x32,0x20,0x00,0x00, +/* */ +0x21,0x00,0x20,0x80,0x27,0xF0,0x74,0x10,0x27,0xF0,0x24,0x80,0x34,0xA0,0x67,0xF0, +0x24,0x80,0x25,0x40,0x2A,0x20,0x74,0x10,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x24,0x10,0x77,0xF0,0x24,0x00,0x25,0xF0,0x35,0x10,0x65,0xF0, +0x25,0x10,0x25,0xF0,0x25,0x10,0x69,0x30,0x00,0x00, +/* */ +0x13,0xE0,0x12,0xA0,0x17,0xF0,0x7A,0xA0,0x13,0xE0,0x10,0x00,0x1B,0xE0,0x72,0x20, +0x12,0xA0,0x12,0xA0,0x11,0x40,0x36,0x20,0x00,0x00, +/* */ +0x10,0xA0,0x12,0xA0,0x17,0xF0,0x7A,0xA0,0x12,0xE0,0x12,0x00,0x1B,0xF0,0x70,0x80, +0x17,0xF0,0x11,0xC0,0x12,0xA0,0x34,0x90,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x11,0xC0,0x7A,0xA0,0x14,0x90,0x13,0xE0,0x1A,0x20,0x73,0xE0, +0x12,0x20,0x13,0xE0,0x10,0x00,0x37,0xF0,0x00,0x00, +/* */ +0x17,0xF0,0x15,0xE0,0x15,0x20,0x7D,0xE0,0x15,0x20,0x15,0xE0,0x1C,0x80,0x77,0xF0, +0x15,0x20,0x14,0xC0,0x15,0x20,0x37,0xF0,0x00,0x00, +/* */ +0x24,0x80,0x26,0x80,0x28,0xF0,0x70,0x90,0x2F,0x20,0x24,0x00,0x34,0x40,0x6E,0x40, +0x24,0x40,0x24,0xA0,0x26,0xA0,0x65,0x10,0x00,0x00, +/* */ +0x21,0x00,0x22,0x80,0x74,0x40,0x2B,0xB0,0x20,0x00,0x2F,0x10,0x39,0x50,0x6F,0x50, +0x29,0x50,0x2F,0x50,0x29,0x10,0x6B,0x30,0x00,0x00, +/* */ +0x21,0x00,0x2F,0xF0,0x24,0x20,0x72,0x40,0x2F,0xF0,0x20,0x00,0x37,0xE0,0x64,0x20, +0x27,0xE0,0x24,0x20,0x27,0xE0,0x64,0x20,0x00,0x00, +/* */ +0x21,0x00,0x2F,0xF0,0x28,0x10,0x77,0xE0,0x20,0x00,0x27,0xE0,0x34,0x20,0x67,0xE0, +0x24,0x20,0x27,0xE0,0x20,0x00,0x6F,0xF0,0x00,0x00, +/* */ +0x27,0xF0,0x24,0x10,0x77,0xF0,0x26,0x10,0x25,0x20,0x27,0xF0,0x35,0x20,0x65,0x20, +0x27,0xF0,0x25,0x20,0x29,0x20,0x62,0x20,0x00,0x00, +/* */ +0x20,0x50,0x27,0x60,0x21,0x40,0x75,0x50,0x22,0x20,0x22,0x20,0x35,0xD0,0x60,0x80, +0x27,0xF0,0x21,0x40,0x22,0x20,0x64,0x10,0x00,0x00, +/* */ +0x22,0x00,0x23,0xE0,0x24,0x20,0x77,0xC0,0x20,0x40,0x27,0xF0,0x32,0x00,0x65,0x20, +0x22,0xC0,0x25,0xA0,0x22,0xA0,0x6D,0x90,0x00,0x00, +/* */ +0x21,0xE0,0x21,0x00,0x2F,0xF0,0x79,0x10,0x29,0xC0,0x2F,0x10,0x38,0xF0,0x69,0x00, +0x28,0x80,0x2A,0x20,0x2D,0x50,0x71,0xC0,0x00,0x00, +/* */ +0x27,0xF0,0x24,0x90,0x27,0xF0,0x74,0x90,0x25,0x50,0x26,0x30,0x37,0xF0,0x61,0x00, +0x24,0xA0,0x25,0x10,0x29,0x50,0x60,0xC0,0x00,0x00, +/* */ +0x20,0xF0,0x2F,0x80,0x78,0xE0,0x28,0x80,0x2B,0xF0,0x2A,0x90,0x3B,0xC0,0x6A,0x90, +0x2A,0x70,0x2D,0xC0,0x29,0x50,0x72,0x30,0x00,0x00, +/* */ +0x24,0x40,0x22,0x80,0x2F,0xF0,0x72,0x80,0x27,0xE0,0x22,0xA0,0x3F,0xF0,0x62,0xA0, +0x2F,0xE0,0x26,0xC0,0x2A,0xA0,0x62,0x90,0x00,0x00, +/* */ +0x28,0x80,0x25,0x70,0x20,0x50,0x77,0x50,0x22,0x70,0x2A,0xD0,0x3A,0xD0,0x6F,0xF0, +0x22,0x50,0x22,0x50,0x24,0x50,0x68,0xB0,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x24,0x10,0x77,0xF0,0x24,0xA0,0x27,0xF0,0x34,0xA0,0x67,0xF0, +0x25,0x40,0x25,0x50,0x25,0xA0,0x69,0x10,0x00,0x00, +/* */ +0x27,0x70,0x21,0x10,0x21,0x10,0x77,0x70,0x24,0x40,0x27,0x70,0x31,0x10,0x65,0x50, +0x23,0x30,0x25,0x50,0x21,0x10,0x66,0x60,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x11,0xC0,0x7A,0x20,0x17,0x70,0x15,0x50,0x1A,0x20,0x75,0x50, +0x10,0x80,0x17,0xF0,0x12,0xA0,0x34,0x90,0x00,0x00, +/* */ +0x27,0xF0,0x24,0x90,0x27,0xF0,0x74,0x90,0x27,0xF0,0x22,0x40,0x37,0x80,0x61,0x20, +0x27,0xF0,0x20,0x80,0x24,0xA0,0x69,0x90,0x00,0x00, +/* */ +0x27,0x70,0x25,0x50,0x25,0x50,0x75,0x50,0x22,0x20,0x25,0x50,0x31,0x00,0x6F,0xF0, +0x22,0x40,0x26,0x40,0x21,0x80,0x6E,0x60,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x24,0x00,0x75,0x20,0x25,0x20,0x27,0xF0,0x35,0x20,0x65,0x20, +0x25,0xE0,0x24,0x00,0x2A,0xA0,0x75,0x50,0x00,0x00, +/* */ +0x2E,0x40,0x22,0x40,0x24,0x80,0x7E,0xF0,0x2B,0x20,0x2E,0xA0,0x3A,0xA0,0x6E,0xA0, +0x2B,0x40,0x3E,0x40,0x22,0xA0,0x63,0x10,0x00,0x00, +/* ߡ */ +0x27,0x70,0x21,0x10,0x75,0x50,0x23,0x30,0x25,0x50,0x20,0x80,0x37,0xF0,0x64,0x10, +0x27,0xF0,0x24,0x10,0x27,0xF0,0x64,0x10,0x00,0x00, +/* ߢ */ +0x24,0x00,0x24,0xF0,0x2E,0x20,0x74,0x40,0x24,0xF0,0x2E,0x90,0x30,0x90,0x6E,0xD0, +0x2A,0xD0,0x2A,0x40,0x2E,0xA0,0x6B,0x10,0x00,0x00, +/* ߣ */ +0x22,0x00,0x27,0xC0,0x28,0x40,0x7F,0xE0,0x29,0x20,0x2F,0xE0,0x29,0x20,0x3F,0xF0, +0x64,0x40,0x27,0xC0,0x24,0x40,0x67,0xC0,0x00,0x00, +/* ߤ */ +0x22,0x20,0x2F,0xF0,0x21,0x40,0x77,0xF0,0x25,0x50,0x26,0x70,0x35,0x90,0x67,0xF0, +0x20,0x20,0x27,0xF0,0x22,0x20,0x61,0x60,0x00,0x00, +/* ߥ */ +0x10,0x80,0x17,0xF0,0x15,0x50,0x7A,0xA0,0x13,0xE0,0x12,0xA0,0x1B,0xE0,0x70,0x80, +0x17,0xF0,0x14,0x90,0x17,0xF0,0x30,0x80,0x00,0x00, +/* ߦ */ +0x24,0x40,0x2E,0xA0,0x25,0x10,0x7E,0x00,0x2A,0xE0,0x2E,0x40,0x3A,0x40,0x6E,0x40, +0x25,0xF0,0x2E,0x40,0x24,0x40,0x64,0x40,0x00,0x00, +/* ߧ */ +0x17,0xF0,0x15,0x50,0x17,0xF0,0x78,0x00,0x17,0xF0,0x10,0x00,0x1B,0xE0,0x72,0x20, +0x13,0xE0,0x11,0x50,0x13,0x20,0x35,0x90,0x00,0x00, +/* ߨ */ +0x20,0x40,0x27,0x20,0x25,0x70,0x75,0x00,0x27,0x50,0x24,0x20,0x34,0xF0,0x67,0x20, +0x2D,0x20,0x25,0x70,0x27,0x20,0x65,0x20,0x00,0x00, +/* ߩ */ +0x22,0x00,0x27,0xC0,0x24,0x40,0x77,0xC0,0x24,0x40,0x2F,0xE0,0x39,0x20,0x6F,0xE0, +0x29,0x20,0x3F,0xF0,0x24,0x40,0x68,0x40,0x00,0x00, +/* ߪ */ +0x27,0x70,0x25,0x50,0x23,0x30,0x75,0x50,0x24,0x20,0x2F,0xF0,0x34,0x40,0x67,0xF0, +0x24,0x40,0x27,0xF0,0x24,0x40,0x67,0xF0,0x00,0x00, +/* ߫ */ +0x27,0xF0,0x20,0x80,0x27,0xF0,0x74,0x90,0x22,0xA0,0x22,0x40,0x37,0xF0,0x6C,0x80, +0x27,0xE0,0x24,0x80,0x27,0xF0,0x64,0x00,0x00,0x00, +/* ߬ */ +0x24,0x40,0x27,0x70,0x2A,0xA0,0x77,0xE0,0x26,0xA0,0x25,0x60,0x34,0xA0,0x6F,0xF0, +0x25,0x20,0x2B,0xD0,0x22,0xA0,0x65,0x90,0x00,0x00, +/* ߭ */ +0x10,0x80,0x17,0xF0,0x12,0xA0,0x7B,0xE0,0x10,0x80,0x17,0xF0,0x1D,0x50,0x73,0xE0, +0x11,0x40,0x17,0xF0,0x13,0x20,0x35,0x90,0x00,0x00, +/* ߮ */ +0x04,0x80,0x04,0x40,0x04,0x00,0x05,0xF0,0x7E,0x00,0x04,0x00,0x02,0x00,0x02,0x00, +0x01,0x10,0x00,0x90,0x00,0x50,0x00,0x30,0x00,0x00, +/* ߯ */ +0x00,0xA0,0x00,0x90,0x00,0x80,0x7F,0xF0,0x00,0x80,0x10,0x80,0x08,0x80,0x00,0x80, +0x52,0x40,0x51,0x50,0x55,0x30,0x0C,0x10,0x00,0x00, +/* ߰ */ +0x00,0xA0,0x00,0x90,0x00,0x80,0x7F,0xF0,0x00,0x80,0x22,0x80,0x7F,0x80,0x22,0x80, +0x3E,0x40,0x22,0x50,0x3E,0x30,0x22,0x10,0x00,0x00, +/* ߱ */ +0x6C,0x50,0x10,0x40,0x2B,0xF0,0x44,0x40,0x10,0x40,0x13,0xC0,0x7D,0x40,0x11,0x40, +0x39,0x40,0x55,0xD0,0x13,0x30,0x30,0x10,0x00,0x00, +/* ߲ */ +0x00,0x80,0x78,0x80,0x48,0x80,0x48,0x80,0x48,0xC0,0x48,0xA0,0x48,0x90,0x48,0x90, +0x78,0x80,0x48,0x80,0x00,0x80,0x00,0x80,0x00,0x00, +/* ߳ */ +0x01,0x00,0x79,0x00,0x49,0x10,0x49,0x20,0x49,0x40,0x49,0x80,0x49,0x00,0x4B,0x00, +0x7D,0x00,0x49,0x10,0x01,0x10,0x00,0xF0,0x00,0x00, +/* ߴ */ +0x00,0x00,0x7B,0xC0,0x4A,0x40,0x4A,0x40,0x4A,0x40,0x4A,0x40,0x4A,0x40,0x4A,0x40, +0x7A,0x40,0x4A,0x50,0x04,0x50,0x08,0x30,0x00,0x00, +/* ߵ */ +0x00,0x00,0x79,0xF0,0x49,0x10,0x49,0x10,0x49,0x10,0x49,0x10,0x49,0x10,0x49,0x10, +0x79,0x10,0x49,0x60,0x01,0x00,0x01,0x00,0x00,0x00, +/* ߶ */ +0x00,0x00,0x7B,0xF0,0x49,0x10,0x49,0x10,0x49,0x10,0x49,0x10,0x49,0x10,0x49,0x10, +0x79,0x10,0x4A,0x10,0x02,0x10,0x04,0x60,0x00,0x00, +/* ߷ */ +0x00,0x80,0x78,0x80,0x48,0x80,0x4B,0xF0,0x48,0x90,0x48,0x90,0x48,0x90,0x48,0x90, +0x79,0x10,0x49,0x10,0x02,0x10,0x04,0x60,0x00,0x00, +/* ߸ */ +0x00,0x60,0x7B,0x80,0x48,0x80,0x48,0x80,0x48,0x80,0x48,0xF0,0x4F,0x80,0x48,0x80, +0x78,0x80,0x48,0x90,0x00,0x90,0x00,0x70,0x00,0x00, +/* ߹ */ +0x04,0x10,0x7A,0x20,0x49,0x40,0x48,0x80,0x48,0x80,0x48,0x80,0x48,0x80,0x48,0x80, +0x78,0x80,0x48,0x80,0x00,0x80,0x00,0x80,0x00,0x00, +/* ߺ */ +0x00,0x80,0x78,0x80,0x49,0x00,0x49,0x20,0x4A,0x20,0x4B,0xC0,0x48,0x80,0x48,0x80, +0x79,0x20,0x4A,0x10,0x03,0xF0,0x00,0x10,0x00,0x00, +/* ߻ */ +0x00,0x80,0x78,0x80,0x48,0x80,0x4B,0xE0,0x48,0x80,0x48,0x80,0x4F,0xF0,0x48,0x80, +0x79,0x40,0x49,0x40,0x02,0x20,0x04,0x10,0x00,0x00, +/* ߼ */ +0x00,0x00,0x77,0xE0,0x51,0x00,0x51,0x00,0x51,0x00,0x5F,0xF0,0x51,0x00,0x52,0x80, +0x72,0x90,0x54,0x90,0x08,0x90,0x10,0x70,0x00,0x00, +/* ߽ */ +0x02,0x40,0x72,0x40,0x5F,0xF0,0x52,0x40,0x50,0x00,0x57,0xE0,0x50,0x20,0x50,0xC0, +0x73,0x00,0x54,0x10,0x04,0x10,0x03,0xF0,0x00,0x00, +/* ߾ */ +0x01,0x00,0x71,0x00,0x51,0x00,0x5F,0xF0,0x51,0x00,0x52,0x80,0x52,0x80,0x52,0x80, +0x74,0x40,0x56,0x40,0x09,0x20,0x10,0x10,0x00,0x00, +/* ߿ */ +0x00,0x00,0x77,0xF0,0x54,0x00,0x54,0x80,0x54,0x80,0x55,0xF0,0x54,0x90,0x54,0x90, +0x75,0x10,0x55,0x10,0x0A,0x10,0x14,0x60,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x54,0x00,0x55,0xE0,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0x60, +0x75,0x00,0x55,0x10,0x05,0x10,0x08,0xF0,0x00,0x00, +/* */ +0x04,0x80,0x74,0x80,0x54,0x90,0x54,0x90,0x57,0xA0,0x54,0xC0,0x54,0x80,0x54,0x80, +0x74,0x80,0x55,0x90,0x06,0x90,0x04,0x70,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x54,0x10,0x54,0x90,0x54,0x90,0x54,0x90,0x54,0x90,0x54,0x90, +0x74,0x90,0x51,0x40,0x02,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x42,0x10,0x45,0x10, +0x48,0x90,0x40,0x10,0x40,0x10,0x40,0x30,0x00,0x00, +/* */ +0x00,0x80,0x00,0x40,0x70,0x40,0x50,0x00,0x51,0x20,0x55,0x10,0x55,0x10,0x55,0x10, +0x75,0x00,0x49,0x20,0x01,0x20,0x00,0xE0,0x00,0x00, +/* */ +0x00,0x10,0x77,0x90,0x50,0x90,0x50,0x90,0x57,0x90,0x54,0x10,0x54,0x10,0x57,0x90, +0x70,0x90,0x50,0x90,0x00,0x90,0x03,0x90,0x00,0x00, +/* */ +0x00,0x00,0x07,0xF0,0x74,0x40,0x54,0x40,0x55,0xF0,0x55,0x50,0x55,0x50,0x55,0x50, +0x75,0x70,0x54,0x40,0x04,0x40,0x07,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x79,0x00,0x49,0xE0,0x49,0x00,0x49,0x00,0x4F,0xF0,0x49,0x00,0x49,0x80, +0x79,0x40,0x49,0x20,0x01,0x00,0x01,0x00,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x54,0x90,0x54,0x90,0x57,0xF0,0x54,0x90,0x54,0x90,0x57,0xF0, +0x74,0x90,0x50,0x80,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x00,0x60,0x77,0x80,0x55,0x40,0x55,0x40,0x55,0x40,0x55,0x40,0x55,0x40,0x55,0x40, +0x75,0x20,0x55,0xA0,0x05,0x50,0x09,0xC0,0x00,0x00, +/* */ +0x01,0x00,0x71,0x00,0x52,0x80,0x54,0x40,0x59,0x30,0x50,0x80,0x57,0xE0,0x50,0x20, +0x70,0x40,0x52,0x80,0x01,0x00,0x00,0x80,0x00,0x00, +/* */ +0x01,0x00,0x71,0xE0,0x52,0x20,0x55,0x40,0x50,0x80,0x51,0x40,0x56,0x30,0x51,0x80, +0x70,0x40,0x53,0x00,0x00,0xC0,0x00,0x20,0x00,0x00, +/* */ +0x01,0x00,0x70,0x80,0x57,0xF0,0x54,0x10,0x50,0x00,0x57,0xF0,0x50,0x80,0x50,0x80, +0x70,0x80,0x50,0x80,0x00,0x80,0x03,0x80,0x00,0x00, +/* */ +0x00,0x80,0x70,0x80,0x54,0x90,0x54,0x90,0x54,0x90,0x57,0xF0,0x50,0x80,0x54,0x90, +0x74,0x90,0x54,0x90,0x07,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x02,0x00,0x72,0x00,0x52,0xF0,0x5F,0x50,0x55,0x50,0x55,0x50,0x55,0x50,0x55,0x50, +0x75,0x20,0x52,0x20,0x05,0x50,0x08,0x90,0x00,0x00, +/* */ +0x02,0x40,0x72,0x40,0x52,0x40,0x54,0xF0,0x55,0x50,0x57,0x50,0x52,0x50,0x52,0x50, +0x75,0x50,0x57,0x90,0x00,0x90,0x01,0x30,0x00,0x00, +/* */ +0x02,0x20,0x72,0x20,0x52,0x20,0x54,0x40,0x55,0x50,0x56,0x60,0x52,0x20,0x54,0x40, +0x74,0x40,0x57,0x70,0x00,0x00,0x0F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x07,0xF0,0x74,0x00,0x55,0xF0,0x54,0x40,0x54,0x40,0x55,0xF0,0x54,0x40, +0x74,0x40,0x55,0xF0,0x04,0x00,0x07,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x4F,0xF0,0x48,0x80,0x48,0x80,0x4B,0xE0,0x48,0x00,0x4B,0xE0, +0x7A,0x20,0x4A,0x20,0x03,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x00,0x00,0x07,0xF0,0x71,0x40,0x51,0x40,0x57,0xF0,0x55,0x50,0x55,0x50,0x55,0x70, +0x76,0x10,0x54,0x10,0x07,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x02,0x00,0x72,0x00,0x57,0xF0,0x52,0x00,0x52,0x40,0x52,0x50,0x55,0x60,0x55,0x40, +0x74,0x40,0x54,0xA0,0x09,0x20,0x02,0x10,0x00,0x00, +/* */ +0x04,0x40,0x72,0x40,0x50,0x40,0x50,0xF0,0x56,0x40,0x52,0x40,0x52,0x40,0x52,0xA0, +0x72,0x90,0x53,0x10,0x06,0x00,0x09,0xF0,0x00,0x00, +/* */ +0x00,0x10,0x0F,0x10,0x74,0x50,0x54,0x50,0x57,0x50,0x59,0x50,0x59,0x50,0x55,0x50, +0x72,0x50,0x52,0x10,0x04,0x10,0x08,0x70,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x80,0x57,0xF0,0x50,0x90,0x57,0xF0,0x54,0x80,0x57,0xF0, +0x70,0x90,0x50,0xB0,0x01,0x40,0x06,0x30,0x00,0x00, +/* */ +0x01,0x00,0x71,0xE0,0x57,0x00,0x51,0x50,0x50,0x90,0x53,0x70,0x50,0x00,0x57,0xF0, +0x71,0x40,0x51,0x40,0x02,0x50,0x04,0x30,0x00,0x00, +/* */ +0x04,0x40,0x74,0x50,0x57,0x60,0x54,0x40,0x55,0x50,0x56,0x30,0x50,0x80,0x50,0x80, +0x77,0xF0,0x50,0x80,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x01,0x40,0x71,0x40,0x51,0x40,0x55,0x50,0x55,0x60,0x55,0xC0,0x55,0x40,0x55,0x40, +0x75,0x40,0x55,0x50,0x05,0xD0,0x0E,0x30,0x00,0x00, +/* */ +0x00,0x80,0x70,0x80,0x54,0x90,0x52,0xA0,0x50,0x80,0x57,0xF0,0x51,0x40,0x51,0x40, +0x71,0x40,0x52,0x50,0x02,0x50,0x04,0x30,0x00,0x00, +/* */ +0x00,0x80,0x74,0x90,0x54,0x90,0x57,0xF0,0x51,0x00,0x51,0xF0,0x52,0x10,0x55,0x10, +0x70,0xA0,0x50,0x40,0x01,0x80,0x06,0x00,0x00,0x00, +/* */ +0x02,0x80,0x02,0x80,0x74,0x80,0x57,0xF0,0x5C,0x80,0x55,0xC0,0x55,0xA0,0x56,0xA0, +0x74,0x90,0x54,0x80,0x04,0x80,0x04,0x80,0x00,0x00, +/* */ +0x02,0x00,0x03,0xE0,0x74,0xA0,0x5C,0xA0,0x57,0xF0,0x54,0xA0,0x54,0xA0,0x55,0xE0, +0x74,0xA0,0x54,0x80,0x04,0x80,0x05,0x00,0x00,0x00, +/* */ +0x00,0x60,0x77,0x80,0x54,0x20,0x55,0xC0,0x55,0x40,0x55,0x50,0x55,0x60,0x55,0x40, +0x75,0x40,0x55,0x20,0x05,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x00,0x80,0x71,0x40,0x52,0x20,0x54,0x10,0x53,0xE0,0x50,0x00,0x50,0x00,0x57,0xF0, +0x71,0x00,0x52,0x20,0x07,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x03,0xE0,0x72,0x20,0x52,0x20,0x52,0x20,0x54,0x90,0x50,0x80,0x57,0xF0,0x50,0x80, +0x71,0xC0,0x52,0xA0,0x04,0x90,0x00,0x80,0x00,0x00, +/* */ +0x01,0x00,0x70,0x80,0x5F,0xF0,0x52,0x40,0x51,0x80,0x52,0x40,0x5C,0x30,0x52,0x40, +0x72,0x40,0x52,0x40,0x04,0x40,0x08,0x40,0x00,0x00, +/* */ +0x02,0x20,0x71,0x40,0x57,0xF0,0x50,0x80,0x50,0x80,0x53,0xE0,0x50,0x80,0x50,0x80, +0x77,0xF0,0x50,0x80,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x00,0x80,0x70,0x80,0x54,0x90,0x52,0xA0,0x50,0x80,0x57,0xF0,0x50,0x80,0x51,0xC0, +0x72,0xA0,0x54,0x90,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x01,0x00,0x00,0x80,0x77,0xF0,0x54,0x10,0x50,0x60,0x53,0x80,0x50,0x80,0x50,0xF0, +0x77,0x80,0x50,0x90,0x00,0x90,0x00,0x70,0x00,0x00, +/* */ +0x00,0x80,0x70,0x80,0x57,0xF0,0x54,0x90,0x50,0x80,0x51,0x40,0x51,0x40,0x53,0x50, +0x75,0x20,0x51,0x20,0x01,0x90,0x01,0x00,0x00,0x00, +/* */ +0x03,0xE0,0x7A,0x20,0x4A,0x20,0x4B,0xE0,0x4A,0x20,0x4A,0x20,0x4B,0xE0,0x4A,0x90, +0x7A,0xA0,0x4A,0x40,0x03,0x20,0x02,0x10,0x00,0x00, +/* */ +0x00,0x80,0x71,0x00,0x52,0x20,0x53,0xF0,0x50,0x90,0x52,0x80,0x53,0xE0,0x54,0x80, +0x70,0x80,0x57,0xF0,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x80,0x53,0xE0,0x50,0x80,0x57,0xF0,0x51,0x00,0x51,0xE0, +0x72,0x20,0x55,0x40,0x00,0x80,0x07,0x70,0x00,0x00, +/* */ +0x00,0x80,0x00,0x80,0x73,0xE0,0x50,0x80,0x50,0x80,0x57,0xF0,0x51,0x40,0x53,0x60, +0x75,0x50,0x51,0x50,0x02,0x40,0x04,0xC0,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x52,0x20,0x50,0x00,0x57,0xF0,0x54,0x10,0x51,0x00,0x57,0xF0, +0x71,0x10,0x51,0x10,0x02,0x10,0x04,0x60,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x50,0x80,0x57,0xF0,0x54,0x90,0x57,0xF0,0x54,0x90,0x57,0xF0, +0x72,0x80,0x51,0x00,0x02,0x80,0x04,0x70,0x00,0x00, +/* */ +0x0F,0xF0,0x71,0x00,0x57,0xE0,0x52,0x20,0x52,0x20,0x5F,0xF0,0x50,0x00,0x57,0xE0, +0x74,0x20,0x54,0x20,0x07,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x04,0x10,0x74,0xE0,0x54,0x80,0x5E,0x80,0x54,0xF0,0x54,0xA0,0x56,0xA0,0x5C,0xA0, +0x74,0xA0,0x54,0xA0,0x04,0xA0,0x0D,0x20,0x00,0x00, +/* */ +0x00,0x80,0x74,0x90,0x52,0xA0,0x50,0x80,0x57,0xF0,0x54,0x10,0x54,0x90,0x54,0x90, +0x74,0x90,0x51,0x40,0x02,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x00,0x80,0x71,0x00,0x57,0xE0,0x54,0x20,0x57,0xE0,0x54,0x20,0x57,0xE0,0x51,0x00, +0x71,0xE0,0x5F,0x00,0x01,0x10,0x00,0xF0,0x00,0x00, +/* */ +0x04,0x20,0x73,0xC0,0x54,0x20,0x51,0x00,0x5F,0xF0,0x52,0x00,0x54,0x80,0x5F,0xF0, +0x74,0x90,0x54,0x90,0x04,0xB0,0x00,0x80,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x4A,0xA0,0x4A,0xA0,0x4A,0xA0,0x4D,0xD0,0x48,0x80,0x48,0x80, +0x7B,0xE0,0x48,0x80,0x00,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x77,0x70,0x55,0x50,0x55,0x50,0x57,0x50,0x55,0x50,0x55,0x50,0x57,0x50, +0x74,0x70,0x55,0x40,0x06,0xC0,0x04,0x40,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x80,0x53,0xE0,0x51,0x00,0x57,0xF0,0x52,0x20,0x54,0x90, +0x73,0xE0,0x50,0x80,0x07,0xF0,0x00,0x80,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x80,0x53,0xE0,0x50,0x80,0x57,0xF0,0x50,0x00,0x57,0xF0, +0x74,0x90,0x54,0x90,0x01,0x60,0x06,0x10,0x00,0x00, +/* */ +0x02,0x40,0x72,0x40,0x5F,0xF0,0x52,0x40,0x51,0x00,0x5F,0xF0,0x52,0x00,0x53,0xE0, +0x76,0x20,0x5A,0x20,0x03,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x52,0x20,0x50,0x00,0x57,0xF0,0x54,0x90,0x54,0x90,0x57,0xF0, +0x74,0x90,0x54,0x90,0x07,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x02,0x40,0x72,0x40,0x52,0x40,0x5F,0xF0,0x52,0x40,0x53,0x40,0x56,0xE0,0x5B,0x50, +0x72,0x40,0x52,0x40,0x02,0x40,0x02,0x40,0x00,0x00, +/* */ +0x02,0x20,0x72,0x20,0x5F,0x70,0x54,0x20,0x56,0xF0,0x5A,0x20,0x5F,0x40,0x52,0x70, +0x73,0x10,0x5E,0x50,0x02,0x20,0x02,0x20,0x00,0x00, +/* */ +0x07,0xF0,0x74,0x10,0x54,0x90,0x55,0xD0,0x54,0x90,0x57,0xF0,0x54,0x10,0x55,0xD0, +0x75,0x50,0x55,0xD0,0x04,0x10,0x08,0x70,0x00,0x00, +/* */ +0x04,0x00,0x77,0xF0,0x5A,0x10,0x53,0xD0,0x55,0x10,0x51,0x10,0x57,0xD0,0x51,0x10, +0x75,0x50,0x57,0xD0,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x02,0x00,0x73,0xF0,0x55,0x50,0x59,0x50,0x52,0x90,0x55,0x10,0x52,0x60,0x51,0x00, +0x74,0xA0,0x55,0x10,0x09,0x50,0x00,0xC0,0x00,0x00, +/* */ +0x01,0x00,0x70,0x80,0x57,0xF0,0x52,0x20,0x52,0x20,0x55,0x50,0x50,0x00,0x50,0x80, +0x77,0xF0,0x50,0x80,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x01,0x00,0x00,0x80,0x77,0xF0,0x52,0x20,0x51,0x40,0x57,0xF0,0x50,0x80,0x57,0xF0, +0x71,0x20,0x53,0x20,0x00,0xC0,0x07,0x30,0x00,0x00, +/* */ +0x01,0x00,0x0F,0xF0,0x74,0x20,0x57,0xF0,0x50,0x10,0x57,0xE0,0x54,0x20,0x57,0xE0, +0x74,0x20,0x57,0xE0,0x04,0x20,0x04,0x60,0x00,0x00, +/* */ +0x00,0x80,0x72,0x90,0x52,0xA0,0x54,0x80,0x51,0x60,0x56,0x10,0x50,0x80,0x52,0x90, +0x74,0xA0,0x51,0x40,0x02,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x00,0x40,0x08,0x40,0x77,0xF0,0x52,0x50,0x52,0x40,0x5B,0xE0,0x56,0xA0,0x52,0xA0, +0x72,0xA0,0x46,0x40,0x0A,0xA0,0x05,0x10,0x00,0x00, +/* */ +0x00,0x80,0x70,0x40,0x57,0xF0,0x54,0x10,0x50,0x00,0x57,0xF0,0x50,0x80,0x52,0x80, +0x72,0xE0,0x52,0x80,0x05,0x80,0x08,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x72,0x70,0x57,0x50,0x55,0x50,0x57,0x60,0x55,0x60,0x57,0x50,0x54,0x50, +0x76,0x50,0x55,0x60,0x06,0xC0,0x04,0x40,0x00,0x00, +/* */ +0x01,0x00,0x70,0x80,0x57,0xF0,0x54,0x10,0x57,0xF0,0x54,0x80,0x54,0xA0,0x57,0xF0, +0x74,0x80,0x55,0x40,0x0A,0x20,0x14,0x10,0x00,0x00, +/* */ +0x1F,0x10,0x71,0x10,0x51,0x50,0x5F,0x50,0x54,0x50,0x5F,0x50,0x55,0x50,0x55,0x50, +0x75,0x50,0x57,0x10,0x14,0x10,0x24,0x70,0x00,0x00, +/* */ +0x00,0x00,0x77,0x70,0x51,0x10,0x55,0x50,0x52,0x20,0x55,0x50,0x50,0x00,0x57,0x70, +0x71,0x50,0x55,0x50,0x02,0x20,0x0D,0x50,0x00,0x00, +/* */ +0x00,0xA0,0x72,0xA0,0x57,0xF0,0x52,0xA0,0x52,0xE0,0x52,0x00,0x53,0xF0,0x50,0x80, +0x77,0xF0,0x51,0xC0,0x02,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x02,0x20,0x07,0xF0,0x7A,0x20,0x48,0x80,0x49,0x40,0x4A,0x20,0x4D,0xD0,0x48,0x00, +0x7B,0xE0,0x4A,0x20,0x03,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x80,0x57,0xF0,0x55,0x50,0x54,0x90,0x55,0xD0,0x54,0x90, +0x77,0xF0,0x54,0x90,0x04,0x90,0x04,0x30,0x00,0x00, +/* */ +0x07,0xF0,0x74,0x00,0x55,0xF0,0x55,0x50,0x55,0xF0,0x55,0x50,0x55,0xF0,0x54,0x40, +0x75,0xF0,0x54,0x40,0x04,0x40,0x09,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x51,0x40,0x52,0x20,0x54,0x90,0x53,0xE0,0x50,0x80,0x57,0xF0, +0x70,0x80,0x53,0xE0,0x00,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x04,0x50,0x77,0x60,0x54,0x40,0x55,0x50,0x56,0x30,0x50,0x80,0x57,0xF0,0x54,0x10, +0x77,0xF0,0x54,0x10,0x07,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x03,0xE0,0x72,0xA0,0x53,0xE0,0x52,0xA0,0x52,0xA0,0x53,0xE0,0x50,0x80,0x57,0xF0, +0x74,0x90,0x55,0xD0,0x04,0x50,0x04,0x30,0x00,0x00, +/* */ +0x07,0xF0,0x74,0x90,0x57,0xF0,0x54,0x90,0x57,0xF0,0x52,0x20,0x53,0xE0,0x52,0x20, +0x73,0xE0,0x52,0x20,0x02,0x20,0x02,0x60,0x00,0x00, +/* */ +0x01,0x40,0x06,0x40,0x72,0x50,0x52,0xD0,0x57,0x60,0x52,0x40,0x53,0x40,0x56,0x40, +0x7A,0xA0,0x52,0xA0,0x02,0xA0,0x03,0x10,0x00,0x00, +/* */ +0x00,0x80,0x72,0xB0,0x54,0x90,0x56,0xB0,0x54,0x90,0x57,0xF0,0x50,0x80,0x57,0xF0, +0x72,0x10,0x51,0x20,0x00,0xC0,0x07,0x30,0x00,0x00, +/* */ +0x01,0x00,0x0F,0xF0,0x74,0x20,0x52,0x40,0x5F,0xF0,0x50,0x00,0x57,0xE0,0x54,0x20, +0x77,0xE0,0x54,0x20,0x07,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x42,0x10,0x3F,0xE0,0x22,0x20,0x22,0x60, +0x02,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x02,0x20,0x71,0x40,0x57,0xF0,0x50,0x80,0x53,0xE0,0x51,0x00,0x57,0xF0,0x52,0x00, +0x73,0xE0,0x54,0x80,0x08,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x74,0x90,0x52,0xA0,0x57,0xF0,0x52,0xA0,0x54,0x90,0x51,0x00,0x57,0xF0, +0x71,0x20,0x52,0x20,0x01,0xC0,0x06,0x30,0x00,0x00, +/* */ +0x24,0x20,0x12,0x40,0x7F,0xF0,0x52,0x10,0x1F,0xE0,0x22,0x00,0x7F,0xF0,0x00,0x00, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x07,0xF0,0x74,0x10,0x57,0xF0,0x54,0x00,0x55,0xF0,0x54,0x40,0x54,0x90,0x55,0xF0, +0x74,0x40,0x55,0xF0,0x04,0x40,0x0B,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x73,0xE0,0x54,0x20,0x57,0xC0,0x50,0x40,0x57,0xF0,0x52,0x00,0x55,0x20, +0x72,0xC0,0x55,0xA0,0x02,0xA0,0x0D,0x90,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x80,0x53,0xE0,0x51,0x00,0x57,0xF0,0x52,0x20,0x55,0xD0, +0x70,0x80,0x57,0xF0,0x02,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x02,0x40,0x77,0x40,0x52,0x40,0x57,0x70,0x52,0x90,0x5F,0x50,0x54,0x50,0x57,0x50, +0x75,0x50,0x55,0x20,0x05,0x50,0x0B,0x90,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x80,0x53,0xE0,0x50,0x80,0x57,0xF0,0x51,0x20,0x53,0xC0, +0x70,0x90,0x57,0xF0,0x02,0xA0,0x05,0x90,0x00,0x00, +/* */ +0x02,0x00,0x77,0x70,0x52,0xD0,0x53,0x50,0x5F,0xE0,0x54,0x60,0x5F,0x50,0x55,0x50, +0x77,0x50,0x55,0x60,0x07,0x40,0x05,0x40,0x00,0x00, +/* */ +0x00,0x80,0x73,0xE0,0x50,0x80,0x57,0xF0,0x51,0x00,0x52,0x20,0x57,0xF0,0x50,0x00, +0x77,0xF0,0x55,0x50,0x05,0x50,0x0F,0xF0,0x00,0x00, +/* */ +0x07,0xF0,0x72,0x20,0x53,0xE0,0x52,0x20,0x53,0xE0,0x52,0x30,0x57,0xE0,0x50,0x20, +0x77,0x70,0x55,0x50,0x02,0x20,0x05,0x50,0x00,0x00, +/* */ +0x02,0x40,0x0F,0xF0,0x72,0x40,0x52,0x00,0x55,0xF0,0x5C,0x20,0x55,0xE0,0x55,0x60, +0x75,0x60,0x55,0xE0,0x04,0x20,0x04,0x60,0x00,0x00, +/* */ +0x01,0x00,0x0F,0xF0,0x71,0x00,0x57,0xE0,0x54,0x20,0x57,0xE0,0x54,0x20,0x57,0xE0, +0x74,0x20,0x4F,0xF0,0x02,0x40,0x04,0x20,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x80,0x57,0xF0,0x55,0x10,0x52,0x40,0x53,0x80,0x51,0x20, +0x77,0xF0,0x50,0x80,0x02,0xA0,0x05,0x90,0x00,0x00, +/* */ +0x07,0xF0,0x70,0x00,0x53,0xE0,0x52,0x20,0x53,0xE0,0x50,0x00,0x57,0xF0,0x55,0x50, +0x74,0x90,0x55,0xD0,0x04,0x90,0x04,0xB0,0x00,0x00, +/* */ +0x0F,0xF0,0x71,0x00,0x57,0xE0,0x54,0x20,0x57,0xE0,0x54,0x20,0x57,0xE0,0x51,0x00, +0x73,0xE0,0x56,0x20,0x01,0xC0,0x0E,0x30,0x00,0x00, +/* */ +0x07,0xF0,0x74,0x90,0x57,0xF0,0x54,0x90,0x55,0x50,0x56,0x30,0x57,0xF0,0x51,0x00, +0x74,0xA0,0x55,0x10,0x09,0x50,0x00,0xC0,0x00,0x00, +/* */ +0x01,0x00,0x07,0xE0,0x74,0x20,0x57,0xE0,0x54,0x20,0x57,0xE0,0x52,0x00,0x5F,0xF0, +0x74,0x40,0x49,0x20,0x17,0xD0,0x01,0x00,0x00,0x00, +/* */ +0x02,0x20,0x75,0x50,0x50,0x80,0x53,0x40,0x5D,0x30,0x53,0xC0,0x54,0x40,0x52,0x80, +0x73,0xE0,0x5D,0x20,0x00,0xC0,0x0F,0x00,0x00,0x00, +/* */ +0x00,0x70,0x77,0x80,0x55,0x10,0x52,0xA0,0x5F,0xF0,0x59,0x10,0x57,0xE0,0x52,0x00, +0x73,0xE0,0x55,0x20,0x08,0xC0,0x03,0x30,0x00,0x00, +/* */ +0x08,0x20,0x04,0x40,0x70,0x00,0x5F,0xE0,0x54,0x40,0x58,0x20,0x50,0x00,0x5F,0xE0, +0x7A,0xA0,0x4A,0xA0,0x0A,0xA0,0x1F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x75,0x70,0x50,0x50,0x57,0x50,0x52,0x70,0x5A,0xD0,0x5A,0xD0,0x5F,0xF0, +0x72,0x50,0x52,0x50,0x04,0x50,0x08,0xB0,0x00,0x00, +/* */ +0x02,0x00,0x0B,0xF0,0x74,0x00,0x53,0xE0,0x52,0x20,0x5A,0xA0,0x57,0xF0,0x52,0x20, +0x72,0xA0,0x57,0xF0,0x08,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x09,0xE0,0x74,0xA0,0x50,0x40,0x51,0xF0,0x5D,0x50,0x55,0xF0,0x55,0x50,0x55,0xF0, +0x75,0x50,0x55,0x30,0x04,0x00,0x0B,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x74,0x90,0x57,0xF0,0x50,0x80,0x57,0xF0,0x50,0x00,0x50,0x80,0x57,0xF0, +0x74,0x90,0x57,0xF0,0x00,0x90,0x0F,0xF0,0x00,0x00, +/* */ +0x22,0x40,0x2F,0x40,0x54,0x90,0x6A,0xE0,0x2F,0x20,0x42,0x40,0x77,0x70,0x02,0x00, +0x72,0x70,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x05,0x40,0x0F,0xC0,0x75,0x40,0x57,0xF0,0x52,0x50,0x5F,0xD0,0x5A,0xD0,0x5F,0xD0, +0x72,0x50,0x4F,0xD0,0x02,0x50,0x02,0xB0,0x00,0x00, +/* */ +0x01,0x40,0x77,0xF0,0x51,0x40,0x57,0xF0,0x55,0x50,0x57,0xF0,0x55,0x50,0x57,0xF0, +0x72,0x20,0x53,0xE0,0x02,0x20,0x03,0xE0,0x00,0x00, +/* */ +0x07,0xF0,0x71,0x40,0x57,0xF0,0x55,0x50,0x57,0xF0,0x50,0x00,0x53,0xE0,0x50,0x00, +0x77,0xF0,0x50,0x80,0x02,0xA0,0x05,0x90,0x00,0x00, +/* */ +0x00,0x50,0x70,0x40,0x57,0xF0,0x55,0x40,0x55,0xC0,0x55,0x50,0x57,0xD0,0x55,0x50, +0x75,0xE0,0x57,0x50,0x05,0xB0,0x0B,0x10,0x00,0x00, +/* */ +0x07,0x70,0x75,0x50,0x55,0x50,0x55,0x50,0x52,0x20,0x55,0x50,0x51,0x00,0x5F,0xF0, +0x72,0x40,0x56,0x40,0x01,0x80,0x0E,0x60,0x00,0x00, +/* */ +0x00,0x80,0x74,0x90,0x57,0xF0,0x50,0x00,0x57,0x70,0x55,0x50,0x57,0x70,0x55,0x50, +0x77,0x70,0x55,0x50,0x05,0x50,0x0B,0xB0,0x00,0x00, +/* */ +0x04,0x80,0x72,0xF0,0x5F,0x00,0x54,0x40,0x54,0x70,0x57,0xA0,0x55,0x20,0x55,0xF0, +0x75,0x20,0x55,0x20,0x05,0x50,0x0A,0x90,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x52,0x20,0x51,0x40,0x57,0xF0,0x54,0x90,0x55,0xD0,0x54,0x90, +0x75,0xD0,0x55,0x50,0x05,0xD0,0x04,0x30,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x55,0x10,0x50,0xA0,0x56,0x40,0x5A,0x90,0x53,0x50,0x55,0xC0, +0x70,0x00,0x54,0x90,0x04,0x90,0x07,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x0F,0xD0,0x71,0x20,0x57,0xC0,0x50,0x00,0x57,0xD0,0x54,0x60,0x57,0xC0, +0x74,0x40,0x52,0x80,0x01,0xD0,0x0E,0x20,0x00,0x00, +/* */ +0x00,0x00,0x07,0xF0,0x74,0x20,0x56,0xA0,0x55,0x30,0x57,0xD0,0x55,0x20,0x55,0x60, +0x77,0xE0,0x55,0x20,0x05,0x50,0x0A,0x90,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x80,0x55,0x50,0x52,0x20,0x57,0xF0,0x52,0x20,0x53,0xE0, +0x72,0x20,0x53,0xE0,0x02,0xA0,0x05,0x90,0x00,0x00, +/* */ +0x05,0x50,0x71,0x40,0x57,0xF0,0x52,0x20,0x51,0x40,0x57,0xF0,0x50,0x80,0x53,0xE0, +0x70,0x80,0x57,0xF0,0x01,0x40,0x06,0x30,0x00,0x00, +/* */ +0x03,0xE0,0x72,0x20,0x53,0xE0,0x52,0x20,0x5F,0xF0,0x55,0x00,0x57,0x70,0x55,0x50, +0x77,0x50,0x55,0xA0,0x0F,0x50,0x01,0x90,0x00,0x00, +/* */ +0x02,0x80,0x72,0x40,0x57,0xF0,0x54,0x80,0x5F,0xE0,0x54,0x80,0x57,0xE0,0x54,0x80, +0x77,0xF0,0x54,0x00,0x0A,0xA0,0x09,0x50,0x00,0x00, +/* */ +0x01,0x00,0x77,0xF0,0x54,0x90,0x56,0xB0,0x57,0xF0,0x54,0x90,0x56,0xB0,0x54,0x10, +0x70,0x80,0x57,0xF0,0x01,0x40,0x06,0x30,0x00,0x00, +/* */ +0x01,0xC0,0x76,0xB0,0x53,0xE0,0x51,0x40,0x54,0x90,0x55,0x50,0x57,0xF0,0x50,0x80, +0x77,0xF0,0x55,0x50,0x05,0xD0,0x04,0x50,0x00,0x00, +/* */ +0x02,0x00,0x07,0x80,0x78,0x80,0x57,0xE0,0x55,0x20,0x57,0xE0,0x55,0x20,0x5F,0xF0, +0x72,0x40,0x53,0xC0,0x02,0x40,0x03,0xC0,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x54,0x90,0x56,0xB0,0x54,0x90,0x57,0xF0,0x50,0x00,0x53,0xE0, +0x72,0x20,0x53,0xE0,0x02,0x20,0x03,0xE0,0x00,0x00, +/* */ +0x07,0x50,0x71,0x60,0x55,0x40,0x52,0x50,0x55,0xA0,0x58,0x10,0x57,0xE0,0x54,0x20, +0x77,0xE0,0x54,0x20,0x02,0x40,0x0F,0xF0,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x52,0xA0,0x57,0xF0,0x50,0x00,0x53,0xE0,0x52,0x20,0x57,0xF0, +0x74,0x10,0x55,0xD0,0x05,0x50,0x05,0xD0,0x00,0x00, +/* */ +0x02,0x40,0x77,0xF0,0x52,0x40,0x56,0xE0,0x53,0x50,0x50,0x00,0x53,0xE0,0x50,0x00, +0x77,0xF0,0x52,0xA0,0x04,0x90,0x01,0x80,0x00,0x00, +/* */ +0x00,0xF0,0x70,0x80,0x57,0xF0,0x54,0x90,0x57,0xE0,0x54,0x90,0x57,0xF0,0x54,0x80, +0x77,0x50,0x54,0xE0,0x0B,0x50,0x00,0xC0,0x00,0x00, +/* */ +0x01,0x00,0x77,0xE0,0x52,0x40,0x5F,0xF0,0x54,0x20,0x57,0xE0,0x54,0x20,0x57,0xE0, +0x71,0x00,0x54,0xA0,0x0A,0x50,0x03,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x55,0x50,0x53,0xE0,0x51,0x40,0x57,0xF0,0x51,0x40,0x57,0xF0, +0x72,0xA0,0x55,0xD0,0x00,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x00,0x40,0x77,0x20,0x55,0x70,0x55,0x00,0x57,0x50,0x54,0x20,0x54,0xF0,0x57,0x20, +0x7D,0x20,0x55,0x70,0x07,0x20,0x05,0x20,0x00,0x00, +/* */ +0x03,0xE0,0x70,0x80,0x57,0xF0,0x54,0x90,0x52,0xA0,0x50,0x00,0x57,0xF0,0x50,0x80, +0x77,0xF0,0x55,0x50,0x05,0x50,0x04,0x30,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x54,0x10,0x53,0x70,0x55,0x50,0x5A,0x20,0x55,0xD0,0x50,0x00, +0x77,0xF0,0x50,0x80,0x02,0xA0,0x05,0x90,0x00,0x00, +/* */ +0x07,0xF0,0x70,0x80,0x57,0xF0,0x54,0x90,0x52,0xA0,0x52,0x40,0x57,0xF0,0x5C,0x80, +0x77,0xE0,0x54,0x80,0x07,0xF0,0x04,0x00,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x52,0xA0,0x53,0xE0,0x50,0x80,0x57,0xF0,0x55,0x50,0x53,0xE0, +0x71,0x40,0x57,0xF0,0x03,0x20,0x05,0x90,0x00,0x00, +/* */ +0x7F,0xF0,0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x10, +0x40,0x10,0x40,0x10,0x40,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x40,0x10,0x4F,0x90,0x40,0x90,0x41,0x10,0x42,0x10,0x5F,0xD0,0x42,0x10, +0x42,0x10,0x46,0x10,0x40,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x42,0x10,0x42,0x10,0x5F,0xD0,0x44,0x90,0x48,0x90,0x45,0x10,0x42,0x10, +0x45,0x10,0x58,0x90,0x40,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x42,0x10,0x45,0x10,0x48,0x90,0x70,0x70,0x49,0x10,0x4A,0x10,0x4C,0x10, +0x48,0x50,0x47,0xD0,0x40,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x48,0x10,0x48,0x10,0x4F,0xD0,0x55,0x50,0x65,0x50,0x49,0x50,0x52,0x50, +0x44,0x50,0x49,0x90,0x40,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x42,0x10,0x45,0x10,0x48,0x90,0x52,0x50,0x61,0x30,0x5F,0xD0,0x40,0x90, +0x45,0x10,0x42,0x10,0x41,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x42,0x10,0x5F,0xD0,0x48,0x10,0x5F,0x90,0x68,0x90,0x4F,0x90,0x48,0x90, +0x4F,0x90,0x48,0x90,0x49,0x90,0x7F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x40,0x10,0x5F,0xD0,0x44,0x10,0x5F,0x90,0x48,0x90,0x7F,0xF0,0x40,0x10, +0x4F,0x90,0x48,0x90,0x4F,0x90,0x7F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x42,0x10,0x5F,0xD0,0x42,0x10,0x5F,0xD0,0x42,0x10,0x7F,0xD0,0x48,0x90, +0x4F,0x90,0x48,0x90,0x49,0x90,0x7F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x42,0x10,0x5F,0xD0,0x42,0x10,0x7F,0xF0,0x48,0x90,0x5F,0xD0,0x42,0x10, +0x7F,0xF0,0x42,0x10,0x42,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x40,0x10,0x5F,0xD0,0x55,0x50,0x7F,0xF0,0x48,0x90,0x4F,0x90,0x45,0x10, +0x4D,0x50,0x56,0x90,0x44,0x50,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x13,0xF0,0x7C,0x80,0x55,0xE0,0x54,0x80,0x57,0xF0,0x54,0x90, +0x54,0x90,0x5C,0xB0,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x40,0x11,0x40,0x7D,0x40,0x55,0xF0,0x56,0x40,0x54,0x40,0x57,0xF0,0x54,0x40, +0x54,0xA0,0x5C,0xA0,0x11,0x20,0x12,0x10,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x7D,0xF0,0x55,0x50,0x55,0x40,0x55,0xE0,0x55,0xA0,0x55,0xA0, +0x55,0xA0,0x5D,0x40,0x12,0xA0,0x15,0x10,0x00,0x00, +/* */ +0x11,0xF0,0x7C,0x90,0x24,0xA0,0x24,0x40,0x18,0xA0,0x25,0x10,0x42,0x00,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x22,0x60,0x02,0x00,0x00,0x00, +/* */ +0x10,0x80,0x13,0xF0,0x7C,0x80,0x57,0xE0,0x54,0x80,0x57,0xF0,0x55,0x20,0x55,0xF0, +0x5E,0x20,0x12,0xA0,0x14,0x20,0x10,0x60,0x00,0x00, +/* */ +0x10,0x40,0x11,0xF0,0x7C,0x40,0x54,0xF0,0x54,0x40,0x55,0xF0,0x54,0x00,0x55,0xF0, +0x55,0x50,0x5D,0x50,0x10,0xA0,0x11,0x10,0x00,0x00, +/* */ +0x11,0xF0,0x11,0x10,0x7D,0xF0,0x55,0x50,0x55,0x50,0x55,0xF0,0x55,0x50,0x55,0x70, +0x55,0x50,0x5D,0xF0,0x11,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x10,0xC0,0x10,0xA0,0x7D,0xF0,0x55,0x40,0x57,0x40,0x55,0xF0,0x55,0x40,0x55,0x40, +0x55,0xF0,0x5D,0x40,0x11,0x40,0x11,0xF0,0x00,0x00, +/* */ +0x11,0xF0,0x11,0x10,0x7D,0xF0,0x55,0x00,0x55,0x70,0x55,0x20,0x55,0x50,0x55,0x70, +0x55,0x20,0x5D,0x70,0x12,0x20,0x10,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x7A,0x20,0x57,0xF0,0x55,0x50,0x57,0xF0,0x50,0x00, +0x57,0xE0,0x52,0x20,0x11,0xC0,0x16,0x30,0x00,0x00, +/* */ +0x10,0x40,0x11,0xF0,0x7C,0xA0,0x57,0xF0,0x55,0x10,0x55,0xF0,0x55,0x10,0x55,0xF0, +0x5C,0x40,0x13,0xF0,0x10,0x40,0x10,0x40,0x00,0x00, +/* */ +0x10,0xA0,0x11,0xB0,0x7C,0xA0,0x55,0xF0,0x54,0xA0,0x55,0xF0,0x54,0x40,0x55,0xF0, +0x5C,0x40,0x13,0xF0,0x10,0xA0,0x11,0x10,0x00,0x00, +/* */ +0x10,0x30,0x13,0xC0,0x7D,0x50,0x54,0xE0,0x57,0xF0,0x55,0x50,0x56,0x00,0x55,0xF0, +0x55,0x50,0x5D,0xF0,0x11,0x50,0x11,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xC0,0x08,0x80,0x08,0xE0,0x0A,0x20, +0x11,0x40,0x10,0x80,0x23,0x40,0x4C,0x30,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x10,0x10,0x54,0x10,0x54,0x10,0x55,0xF0,0x55,0x00,0x55,0x00, +0x5D,0x00,0x65,0x10,0x01,0x10,0x00,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x11,0x20,0x55,0x20,0x55,0x20,0x57,0xF0,0x55,0x20,0x55,0x20, +0x5D,0x20,0x65,0x20,0x01,0x20,0x02,0x20,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x11,0xF0,0x54,0x40,0x54,0x40,0x57,0xF0,0x55,0x10,0x55,0x10, +0x5C,0xA0,0x64,0x40,0x00,0xA0,0x03,0x10,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x11,0x00,0x55,0x90,0x55,0x50,0x55,0x50,0x55,0x20,0x55,0x20, +0x5D,0x50,0x65,0x90,0x01,0x00,0x01,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x10,0x20,0x54,0xA0,0x55,0x20,0x55,0xF0,0x54,0x60,0x54,0xA0, +0x5C,0xA0,0x65,0x20,0x02,0x20,0x00,0x60,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x11,0x10,0x55,0x50,0x55,0x50,0x55,0x50,0x55,0x50,0x55,0x50, +0x5C,0x80,0x64,0xC0,0x01,0x50,0x02,0x30,0x00,0x00, +/* */ +0x01,0xC0,0x1E,0x00,0x02,0x00,0x7F,0xF0,0x08,0x80,0x10,0x40,0x60,0x30,0x02,0x00, +0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x02,0x00,0x05,0x00,0x18,0xC0,0x62,0x30,0x01,0x00, +0x3F,0xE0,0x00,0x40,0x00,0x80,0x01,0x00,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x28,0xA0,0x25,0x20, +0x22,0x20,0x25,0x20,0x28,0xB0,0x40,0x10,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x20,0x00,0x20,0x10,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x10,0x40,0x55,0xF0,0x54,0x40,0x54,0x40,0x55,0xF0,0x55,0x10, +0x5D,0x10,0x65,0x10,0x01,0xF0,0x01,0x10,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x00,0x40,0x3E,0x40,0x22,0x40, +0x22,0x40,0x3E,0x40,0x20,0x40,0x01,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x10,0x00,0x22,0x00,0x3F,0xE0, +0x02,0x00,0x12,0x40,0x22,0x20,0x46,0x10,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x11,0x50,0x55,0x50,0x55,0xF0,0x55,0x50,0x55,0x50,0x55,0xF0, +0x5D,0x50,0x64,0x40,0x00,0x40,0x00,0x40,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x10,0x40,0x55,0xF0,0x55,0x50,0x55,0x50,0x55,0xF0,0x55,0x50, +0x55,0x50,0x5D,0x50,0x65,0xF0,0x01,0x10,0x00,0x00, +/* */ +0x09,0x40,0x09,0x20,0x11,0x70,0x37,0x80,0x50,0x90,0x10,0x50,0x10,0x30,0x02,0x00, +0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0xF0,0x55,0x10,0x56,0x10,0x55,0xD0,0x55,0x50,0x55,0x50, +0x55,0xD0,0x5D,0x10,0x64,0x10,0x00,0x60,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x00,0x00,0x18,0x00,0x61,0xF0,0x45,0x10,0x4D,0x10, +0x55,0x10,0x65,0x30,0x09,0x00,0x11,0x00,0x00,0x00, +/* */ +0x11,0xF0,0x11,0x10,0x11,0x10,0x55,0xF0,0x55,0x40,0x55,0x40,0x55,0xF0,0x55,0x40, +0x5D,0x40,0x65,0x50,0x01,0xB0,0x01,0x10,0x00,0x00, +/* */ +0x17,0xE0,0x12,0x20,0x11,0x40,0x54,0x80,0x55,0x40,0x56,0xB0,0x54,0x80,0x57,0xE0, +0x5C,0x80,0x67,0xF0,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x10,0x55,0xD0,0x54,0x10,0x55,0xD0,0x55,0x50,0x55,0x50, +0x5D,0xD0,0x64,0x10,0x04,0x10,0x04,0x30,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x10,0x80,0x57,0xF0,0x55,0x40,0x56,0x20,0x54,0x10,0x55,0x20, +0x5D,0x20,0x65,0x20,0x01,0x20,0x02,0x20,0x00,0x00, +/* */ +0x11,0x00,0x11,0xF0,0x12,0x10,0x55,0xD0,0x55,0x50,0x55,0x50,0x55,0xD0,0x55,0x50, +0x5D,0x50,0x65,0xD0,0x01,0x10,0x00,0x60,0x00,0x00, +/* */ +0x11,0x00,0x11,0xC0,0x12,0x40,0x54,0x80,0x57,0xE0,0x54,0xA0,0x57,0xF0,0x54,0xA0, +0x57,0xE0,0x5C,0xA0,0x64,0x80,0x01,0x80,0x00,0x00, +/* */ +0x11,0x20,0x13,0xF0,0x11,0x20,0x54,0x00,0x57,0xF0,0x56,0x10,0x54,0x80,0x57,0xF0, +0x5C,0x90,0x64,0x90,0x01,0x10,0x02,0x60,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x54,0x80,0x56,0xA0,0x55,0xC0,0x57,0xF0,0x54,0x80, +0x5D,0xC0,0x62,0xA0,0x04,0x90,0x00,0x80,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x10,0x00,0x11,0x20,0x79,0x20,0x12,0x10,0x38,0x80, +0x55,0x00,0x12,0x20,0x13,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x11,0x40,0x52,0x20,0x54,0x90,0x53,0xE0,0x52,0xA0,0x53,0xE0, +0x5A,0xA0,0x63,0xE0,0x02,0x90,0x00,0x70,0x00,0x00, +/* */ +0x22,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x2F,0xA0, +0x28,0xA0,0x2F,0xA0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x12,0x20,0x11,0xC0,0x12,0xA0,0x57,0xF0,0x55,0x00,0x55,0xE0,0x57,0x20,0x55,0xE0, +0x5D,0x20,0x65,0xE0,0x01,0x20,0x01,0x60,0x00,0x00, +/* */ +0x10,0x40,0x11,0xF0,0x10,0x00,0x55,0xF0,0x55,0x10,0x55,0xF0,0x54,0x00,0x55,0xE0, +0x5C,0x20,0x65,0xF0,0x00,0x40,0x00,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x11,0xF0,0x55,0x10,0x54,0xA0,0x55,0x10,0x54,0x00,0x55,0xF0, +0x54,0x40,0x5C,0x40,0x64,0x40,0x01,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x10,0x57,0xF0,0x54,0x40,0x55,0x50,0x55,0x50,0x55,0xF0, +0x5C,0x40,0x65,0x50,0x05,0x50,0x09,0xF0,0x00,0x00, +/* */ +0x10,0xA0,0x11,0xF0,0x10,0xA0,0x54,0x00,0x55,0xF0,0x55,0x10,0x54,0x40,0x55,0xF0, +0x5C,0x40,0x64,0xE0,0x01,0x50,0x00,0x40,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x11,0x40,0x57,0xF0,0x55,0x50,0x57,0xF0,0x50,0x80,0x57,0xF0, +0x59,0x20,0x63,0x20,0x00,0xC0,0x07,0x30,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x00,0xA0,0x3F,0xF0,0x20,0x80,0x3E,0xA0,0x28,0xA0, +0x3E,0x40,0x2A,0x50,0x24,0xB0,0x5B,0x10,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x3F,0xE0,0x04,0x00,0x2A,0xA0,0x47,0x90,0x00,0x00, +/* */ +0x22,0x20,0x3F,0xE0,0x04,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x24,0x20,0x3F,0xE0, +0x05,0x40,0x0B,0xE0,0x12,0x10,0x61,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x05,0x00,0x18,0xC0,0x7E,0x30,0x22,0xA0,0x3E,0xA0, +0x22,0xA0,0x3E,0xA0,0x22,0x20,0x26,0x60,0x00,0x00, +/* */ +0x11,0x10,0x10,0xA0,0x13,0xF0,0x54,0x40,0x55,0xF0,0x54,0x80,0x57,0xF0,0x55,0x00, +0x5D,0xF0,0x62,0x40,0x04,0x40,0x03,0xF0,0x00,0x00, +/* */ +0x11,0x50,0x10,0x40,0x11,0xF0,0x54,0xE0,0x55,0x50,0x54,0x40,0x54,0x80,0x57,0xF0, +0x5C,0xA0,0x65,0x20,0x00,0xC0,0x01,0x20,0x00,0x00, +/* */ +0x12,0x20,0x11,0x20,0x10,0x40,0x57,0xF0,0x52,0x20,0x54,0x40,0x55,0x50,0x56,0x60, +0x5A,0x20,0x65,0x50,0x07,0x70,0x01,0x10,0x00,0x00, +/* */ +0x11,0xF0,0x11,0x50,0x11,0x50,0x55,0xF0,0x55,0x00,0x55,0x70,0x55,0x50,0x55,0x70, +0x5D,0x50,0x65,0x70,0x01,0x50,0x02,0x70,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x10,0x80,0x57,0xF0,0x52,0xA0,0x56,0xB0,0x52,0xA0,0x56,0xB0, +0x59,0xC0,0x62,0xA0,0x04,0x90,0x00,0x80,0x00,0x00, +/* */ +0x22,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x7F,0xF0, +0x40,0x10,0x4F,0x90,0x48,0x90,0x4F,0xB0,0x00,0x00, +/* */ +0x12,0x90,0x11,0xA0,0x12,0x90,0x55,0x40,0x56,0x20,0x55,0xF0,0x55,0x20,0x55,0xE0, +0x5D,0x20,0x65,0xE0,0x01,0x20,0x01,0x60,0x00,0x00, +/* */ +0x10,0x40,0x11,0xF0,0x10,0xA0,0x57,0xF0,0x55,0x10,0x55,0xF0,0x55,0x10,0x55,0xF0, +0x54,0x40,0x5F,0xF0,0x64,0x40,0x00,0x40,0x00,0x00, +/* */ +0x14,0x90,0x12,0xA0,0x17,0xF0,0x52,0xA0,0x54,0x90,0x52,0x20,0x53,0x70,0x55,0x20, +0x5D,0xA0,0x62,0xF0,0x02,0x20,0x04,0x20,0x00,0x00, +/* */ +0x17,0x50,0x11,0x60,0x15,0x50,0x52,0x20,0x55,0xD0,0x54,0x00,0x55,0xC0,0x55,0x40, +0x5D,0xC0,0x64,0x00,0x01,0x40,0x07,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x3B,0xC0,0x52,0x90,0x6B,0x50,0x5E,0xF0,0x6B,0x50,0x5E,0xF0,0x6B,0x50, +0x4A,0x50,0x5A,0xD0,0x42,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x22,0x20,0x3F,0xE0,0x08,0x00,0x31,0xE0,0x24,0xA0,0x1C,0x40,0x21,0xF0,0x3C,0x50, +0x51,0x40,0x7D,0x60,0x29,0x40,0x46,0xF0,0x00,0x00, +/* */ +0x22,0x20,0x3F,0xE0,0x10,0x00,0x7D,0xF0,0x10,0x40,0x7D,0xF0,0x45,0x10,0x55,0x50, +0x55,0x50,0x7E,0x40,0x28,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x08,0x00,0x10,0x00,0x20,0x00,0x48,0x00,0x10,0x00,0x30,0x00,0x50,0x00,0x10,0x00, +0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00, +/* */ +0x09,0x00,0x10,0x80,0x27,0xF0,0x49,0x00,0x11,0x00,0x31,0xF0,0x51,0x10,0x11,0x10, +0x11,0x10,0x12,0x10,0x12,0x10,0x14,0x60,0x00,0x00, +/* */ +0x08,0x00,0x13,0xE0,0x22,0x20,0x4A,0x20,0x13,0xE0,0x32,0x20,0x52,0x20,0x13,0xE0, +0x12,0x20,0x12,0x20,0x12,0x20,0x17,0xF0,0x00,0x00, +/* */ +0x0A,0x00,0x13,0xF0,0x24,0x10,0x4B,0xD0,0x12,0x50,0x32,0x50,0x53,0xD0,0x12,0x50, +0x12,0x50,0x13,0xD0,0x12,0x10,0x10,0x60,0x00,0x00, +/* */ +0x0A,0x20,0x11,0x40,0x23,0xE0,0x48,0x80,0x10,0x80,0x33,0xE0,0x50,0x80,0x10,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x08,0x80,0x11,0x20,0x23,0xC0,0x48,0x80,0x11,0x20,0x37,0xF0,0x51,0x10,0x11,0xE0, +0x12,0x20,0x15,0x40,0x10,0x80,0x17,0x70,0x00,0x00, +/* */ +0x08,0x80,0x10,0x80,0x27,0xF0,0x48,0x80,0x12,0xA0,0x31,0xC0,0x57,0xF0,0x10,0x80, +0x11,0xC0,0x12,0xA0,0x14,0x90,0x10,0x80,0x00,0x00, +/* */ +0x08,0x80,0x10,0x80,0x22,0xF0,0x4A,0x80,0x12,0x80,0x37,0xF0,0x50,0x00,0x12,0x80, +0x12,0xF0,0x12,0x80,0x15,0x80,0x18,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x14,0x90,0x22,0xA0,0x48,0x80,0x17,0xF0,0x34,0x10,0x55,0xD0,0x15,0x50, +0x15,0x50,0x15,0xD0,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x09,0x00,0x13,0xE0,0x22,0x20,0x4B,0xE0,0x12,0x20,0x33,0xE0,0x50,0x00,0x17,0xF0, +0x10,0x80,0x13,0xE0,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x08,0x70,0x17,0x80,0x21,0x10,0x4C,0xA0,0x12,0x00,0x33,0xE0,0x54,0x80,0x10,0x80, +0x17,0xF0,0x10,0x80,0x14,0x90,0x17,0xF0,0x00,0x00, +/* */ +0x14,0x40,0x35,0x40,0x5F,0x80,0x10,0xF0,0x2F,0x20,0x60,0xA0,0x2E,0xA0,0x24,0xA0, +0x2E,0x40,0x24,0x40,0x2E,0xA0,0x21,0x10,0x00,0x00, +/* */ +0x14,0x40,0x2E,0x40,0x4A,0x80,0x1E,0xF0,0x2B,0x20,0x6E,0xA0,0x24,0xA0,0x3E,0xA0, +0x28,0x40,0x2E,0x40,0x2A,0xA0,0x37,0x10,0x00,0x00, +/* */ +0x1F,0x80,0x2A,0xF0,0x4F,0x80,0x1A,0x80,0x2F,0xF0,0x65,0x20,0x2F,0xA0,0x3A,0x20, +0x2F,0xA0,0x2A,0x20,0x2F,0xA0,0x28,0x60,0x00,0x00, +/* */ +0x00,0x80,0x01,0x00,0x06,0x00,0x18,0x40,0x00,0x80,0x01,0x00,0x06,0x00,0x18,0x40, +0x00,0x80,0x01,0x00,0x06,0x00,0x18,0x00,0x00,0x00, +/* */ +0x08,0x00,0x28,0x00,0x10,0x00,0x28,0x00,0x48,0x00,0x08,0x00,0x18,0x00,0x28,0x00, +0x48,0x00,0x08,0x00,0x08,0x00,0x30,0x00,0x00,0x00, +/* */ +0x12,0x00,0x52,0x00,0x22,0x00,0x57,0xC0,0x12,0x40,0x12,0x40,0x32,0x40,0x52,0x40, +0x12,0x40,0x14,0x50,0x14,0x50,0x68,0x30,0x00,0x00, +/* */ +0x10,0x00,0x53,0xE0,0x20,0x80,0x50,0x80,0x10,0x80,0x10,0x80,0x37,0xF0,0x50,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x60,0x80,0x00,0x00, +/* */ +0x08,0x80,0x28,0x40,0x13,0xF0,0x2A,0x00,0x4A,0x00,0x0A,0x00,0x1A,0x00,0x2A,0x00, +0x4A,0x00,0x0A,0x00,0x0A,0x00,0x34,0x00,0x00,0x00, +/* */ +0x17,0xE0,0x50,0x20,0x22,0x20,0x52,0x20,0x12,0x20,0x13,0xF0,0x30,0x10,0x50,0x10, +0x17,0xD0,0x10,0x10,0x10,0x10,0x60,0x60,0x00,0x00, +/* */ +0x10,0x00,0x57,0xE0,0x21,0x20,0x51,0x20,0x11,0x20,0x11,0x20,0x37,0xE0,0x52,0x20, +0x12,0x20,0x12,0x20,0x12,0x20,0x6F,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x51,0x00,0x22,0x40,0x54,0x20,0x1F,0xE0,0x12,0xA0,0x32,0x80,0x52,0x80, +0x12,0x80,0x12,0x90,0x14,0x90,0x68,0x70,0x00,0x00, +/* */ +0x10,0x00,0x57,0xF0,0x24,0x90,0x54,0x90,0x17,0xF0,0x14,0x90,0x34,0x90,0x57,0xF0, +0x14,0x90,0x10,0x80,0x10,0x80,0x60,0x80,0x00,0x00, +/* */ +0x09,0x00,0x29,0x00,0x13,0xF0,0x2C,0x10,0x4B,0xD0,0x0A,0x50,0x1A,0x50,0x2B,0xD0, +0x4A,0x30,0x0A,0x00,0x0A,0x10,0x31,0xF0,0x00,0x00, +/* */ +0x11,0x40,0x57,0xF0,0x21,0x50,0x51,0x50,0x17,0xF0,0x15,0x40,0x35,0x40,0x57,0xF0, +0x11,0x50,0x11,0x50,0x12,0x70,0x64,0x40,0x00,0x00, +/* */ +0x10,0xA0,0x50,0x90,0x20,0x80,0x57,0xF0,0x10,0x80,0x12,0xA0,0x32,0xA0,0x57,0xA0, +0x12,0x40,0x12,0x50,0x14,0xB0,0x69,0x10,0x00,0x00, +/* */ +0x10,0x80,0x51,0x40,0x22,0x20,0x54,0x10,0x13,0xE0,0x10,0x00,0x30,0x00,0x57,0xF0, +0x11,0x00,0x12,0x20,0x17,0xF0,0x60,0x10,0x00,0x00, +/* */ +0x11,0x00,0x50,0x80,0x27,0xF0,0x54,0x10,0x10,0x40,0x17,0xF0,0x30,0x40,0x52,0x40, +0x11,0x40,0x10,0x40,0x10,0x40,0x61,0xC0,0x00,0x00, +/* */ +0x10,0x40,0x5E,0x40,0x22,0x40,0x54,0x40,0x15,0x60,0x17,0x50,0x3D,0x50,0x56,0x50, +0x14,0x40,0x14,0x40,0x14,0x40,0x6C,0xC0,0x00,0x00, +/* */ +0x14,0x40,0x54,0x50,0x27,0x60,0x54,0x40,0x15,0x50,0x16,0x30,0x30,0x80,0x50,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x67,0xF0,0x00,0x00, +/* */ +0x0B,0xF0,0x2A,0x10,0x13,0xF0,0x28,0x00,0x4B,0xF0,0x0A,0x10,0x1B,0xF0,0x2A,0x10, +0x4B,0xF0,0x0A,0x10,0x0A,0x10,0x32,0x30,0x00,0x00, +/* */ +0x11,0x10,0x56,0x10,0x22,0x50,0x52,0x50,0x1F,0xD0,0x12,0x50,0x32,0x50,0x57,0x50, +0x1A,0xD0,0x12,0x10,0x12,0x10,0x62,0x30,0x00,0x00, +/* */ +0x10,0x80,0x51,0x40,0x22,0x20,0x54,0x10,0x13,0xE0,0x10,0x80,0x37,0xF0,0x50,0x80, +0x12,0xA0,0x12,0x90,0x14,0x90,0x61,0x80,0x00,0x00, +/* */ +0x10,0x80,0x50,0x80,0x21,0x40,0x52,0x20,0x14,0x10,0x13,0xE0,0x30,0x00,0x51,0x20, +0x14,0xA0,0x12,0xA0,0x12,0x40,0x67,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x50,0x80,0x2F,0xF0,0x50,0x00,0x17,0xE0,0x10,0x00,0x37,0xE0,0x50,0x00, +0x17,0xE0,0x14,0x20,0x17,0xE0,0x64,0x20,0x00,0x00, +/* */ +0x11,0x00,0x52,0x20,0x27,0xF0,0x50,0x10,0x12,0x20,0x15,0x10,0x31,0xE0,0x52,0x20, +0x15,0x40,0x10,0x80,0x11,0x40,0x66,0x30,0x00,0x00, +/* */ +0x11,0x00,0x57,0xE0,0x22,0x40,0x54,0x20,0x1F,0xF0,0x10,0x20,0x37,0xA0,0x54,0xA0, +0x14,0xA0,0x17,0xA0,0x14,0x20,0x60,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x57,0xF0,0x24,0x90,0x57,0xF0,0x14,0x90,0x17,0xF0,0x30,0x80,0x57,0xF0, +0x11,0xC0,0x12,0xA0,0x14,0x90,0x60,0x80,0x00,0x00, +/* */ +0x10,0x00,0x57,0xF0,0x25,0x50,0x55,0x50,0x17,0xF0,0x11,0x00,0x31,0xF0,0x52,0x10, +0x15,0x20,0x10,0xC0,0x11,0x80,0x66,0x00,0x00,0x00, +/* */ +0x11,0x00,0x56,0x60,0x24,0x20,0x54,0x20,0x16,0xE0,0x14,0x20,0x34,0x20,0x57,0xE0, +0x12,0x40,0x12,0x40,0x14,0x50,0x68,0x30,0x00,0x00, +/* */ +0x10,0x80,0x51,0x40,0x22,0x20,0x55,0xD0,0x10,0x80,0x17,0xF0,0x30,0x80,0x53,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x62,0x20,0x00,0x00, +/* */ +0x11,0x00,0x50,0x80,0x27,0xF0,0x52,0x20,0x12,0x20,0x15,0x50,0x30,0x00,0x50,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x60,0x80,0x00,0x00, +/* */ +0x16,0x80,0x52,0x80,0x22,0xF0,0x56,0x90,0x15,0x40,0x14,0x40,0x36,0xE0,0x52,0xD0, +0x13,0x50,0x12,0x40,0x12,0x40,0x66,0xC0,0x00,0x00, +/* */ +0x12,0x70,0x52,0x50,0x27,0x50,0x52,0x70,0x12,0x50,0x17,0x50,0x35,0x50,0x55,0x70, +0x15,0x50,0x17,0x50,0x14,0x90,0x61,0x30,0x00,0x00, +/* */ +0x10,0x80,0x57,0xF0,0x21,0xC0,0x52,0xA0,0x14,0x90,0x13,0xE0,0x32,0x20,0x53,0xE0, +0x12,0x20,0x13,0xE0,0x10,0x00,0x67,0xF0,0x00,0x00, +/* */ +0x17,0xF0,0x54,0x90,0x27,0xF0,0x54,0x90,0x17,0xF0,0x10,0x00,0x3F,0xF0,0x54,0x80, +0x14,0x90,0x14,0x60,0x15,0x20,0x66,0x10,0x00,0x00, +/* */ +0x17,0xF0,0x54,0x90,0x27,0xF0,0x54,0x90,0x17,0xF0,0x12,0x20,0x33,0xE0,0x52,0x20, +0x13,0xE0,0x12,0x20,0x12,0x20,0x62,0x60,0x00,0x00, +/* */ +0x17,0xF0,0x54,0x90,0x24,0x90,0x57,0xF0,0x14,0x00,0x15,0xF0,0x35,0x10,0x55,0xF0, +0x15,0x10,0x15,0xF0,0x15,0x10,0x69,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x51,0x20,0x20,0xC0,0x57,0xF0,0x11,0x50,0x12,0x40,0x34,0xC0,0x50,0x80, +0x17,0xF0,0x11,0xC0,0x12,0xA0,0x64,0x90,0x00,0x00, +/* */ +0x10,0x80,0x53,0xE0,0x21,0x40,0x57,0xF0,0x12,0x20,0x13,0xE0,0x32,0x20,0x53,0xE0, +0x10,0x80,0x17,0xF0,0x10,0x80,0x60,0x80,0x00,0x00, +/* */ +0x11,0x00,0x57,0xE0,0x22,0x40,0x5F,0xF0,0x10,0x00,0x17,0xE0,0x34,0x20,0x57,0xE0, +0x14,0x20,0x17,0xE0,0x12,0x50,0x6C,0x70,0x00,0x00, +/* */ +0x10,0x00,0x57,0xF0,0x24,0x20,0x56,0xA0,0x15,0x30,0x17,0xD0,0x35,0x20,0x55,0x60, +0x17,0xE0,0x15,0x20,0x15,0x50,0x6A,0x90,0x00,0x00, +/* */ +0x10,0x80,0x57,0xF0,0x20,0x80,0x55,0x50,0x12,0x20,0x17,0xF0,0x32,0x20,0x53,0xE0, +0x12,0x20,0x13,0xE0,0x12,0xA0,0x65,0x90,0x00,0x00, +/* */ +0x14,0xF0,0x57,0x50,0x29,0x50,0x72,0xB0,0x2F,0xA0,0x2A,0xF0,0x2F,0xA0,0x6A,0xA0, +0x2F,0xF0,0x2A,0xA0,0x2A,0xA0,0x51,0xA0,0x00,0x00, +/* */ +0x13,0xE0,0x50,0x80,0x27,0xF0,0x50,0x80,0x17,0xF0,0x14,0x90,0x36,0xB0,0x54,0x90, +0x17,0xF0,0x10,0x80,0x17,0xF0,0x65,0x50,0x00,0x00, +/* */ +0x12,0x20,0x57,0xF0,0x22,0x20,0x57,0x70,0x15,0x50,0x17,0x70,0x32,0x80,0x57,0xF0, +0x1A,0x40,0x13,0xF0,0x12,0x40,0x63,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x11,0xF0,0x1C,0x40,0x25,0x40,0x25,0x40,0x55,0x40,0x09,0x40, +0x09,0xF0,0x10,0x40,0x20,0x40,0x40,0x40,0x00,0x00, +/* */ +0x7C,0x80,0x54,0xF0,0x7D,0x10,0x54,0xA0,0x7C,0x40,0x11,0x80,0x7C,0x70,0x10,0x90, +0x39,0x50,0x54,0x20,0x10,0x40,0x11,0x80,0x00,0x00, +/* */ +0x20,0x80,0x21,0x40,0x3A,0x20,0x2C,0x90,0x2B,0xE0,0x4A,0x20,0x2B,0xE0,0x12,0x20, +0x13,0xE0,0x22,0x50,0x23,0x20,0x42,0x10,0x00,0x00, +/* */ +0x04,0x00,0x0F,0xC0,0x32,0x80,0x0F,0xF0,0x72,0x10,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x10,0x40,0x20,0x20,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x08,0x00,0x0F,0xC0,0x10,0x40,0x28,0x40,0x48,0x80,0x05,0x00, +0x02,0x00,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x20,0x00,0x20,0x00,0x38,0x00,0x48,0x00,0x10,0x00,0x20,0x00,0x20,0x00,0x20,0x00, +0x28,0x00,0x30,0x00,0x20,0x00,0x00,0x00,0x00,0x00, +/* */ +0x20,0x00,0x23,0xE0,0x38,0x40,0x48,0x80,0x11,0x00,0x23,0xF0,0x21,0x50,0x21,0x50, +0x2A,0x90,0x34,0x90,0x21,0x10,0x02,0x60,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x37,0xF0,0x50,0x80,0x04,0x90,0x24,0x90,0x24,0x90,0x27,0xF0, +0x20,0x80,0x20,0x90,0x30,0x90,0x20,0x70,0x00,0x00, +/* */ +0x22,0x00,0x22,0x00,0x3B,0xE0,0x4C,0x00,0x13,0xC0,0x20,0x00,0x27,0xC0,0x20,0x40, +0x20,0x40,0x28,0x50,0x30,0x30,0x20,0x10,0x00,0x00, +/* */ +0x20,0x00,0x20,0x60,0x3B,0x80,0x48,0x80,0x10,0x80,0x20,0x80,0x27,0xF0,0x20,0x80, +0x20,0x80,0x28,0x80,0x30,0x80,0x23,0xE0,0x00,0x00, +/* */ +0x20,0x60,0x23,0x80,0x38,0x80,0x48,0x80,0x10,0x80,0x27,0xF0,0x20,0x80,0x20,0x80, +0x21,0x40,0x29,0x40,0x32,0x20,0x24,0x10,0x00,0x00, +/* */ +0x21,0x00,0x21,0x00,0x39,0xF0,0x4A,0x00,0x14,0x80,0x20,0x80,0x23,0xF0,0x20,0x90, +0x21,0x10,0x29,0x10,0x32,0x10,0x24,0x60,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x39,0x00,0x4A,0x20,0x17,0xF0,0x20,0x10,0x23,0xE0,0x22,0x20, +0x22,0x20,0x2A,0x20,0x33,0xE0,0x22,0x20,0x00,0x00, +/* */ +0x20,0x80,0x21,0x00,0x37,0xF0,0x54,0x10,0x04,0x10,0x25,0xD0,0x25,0x50,0x25,0x50, +0x25,0xD0,0x24,0x10,0x34,0x10,0x24,0x30,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x30,0x80,0x57,0xF0,0x04,0x10,0x23,0xE0,0x20,0x40,0x20,0x80, +0x27,0xF0,0x20,0x80,0x30,0x80,0x21,0x80,0x00,0x00, +/* */ +0x20,0x80,0x21,0x40,0x32,0x20,0x54,0x10,0x03,0xE0,0x20,0x80,0x27,0xF0,0x20,0x80, +0x22,0xA0,0x22,0x90,0x34,0x90,0x21,0x80,0x00,0x00, +/* */ +0x27,0xE0,0x24,0x20,0x37,0xE0,0x54,0x20,0x07,0xE0,0x20,0x00,0x24,0x40,0x24,0x50, +0x27,0x60,0x24,0x40,0x35,0x50,0x26,0x30,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x39,0xC0,0x4A,0xA0,0x14,0x90,0x23,0xE0,0x22,0x20,0x23,0xE0, +0x22,0x20,0x2B,0xE0,0x30,0x00,0x27,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x22,0xB0,0x34,0x90,0x56,0xB0,0x04,0x90,0x27,0xF0,0x20,0x80,0x27,0xF0, +0x22,0x10,0x21,0x20,0x30,0xC0,0x27,0x30,0x00,0x00, +/* */ +0x21,0x40,0x27,0xF0,0x39,0x40,0x4B,0xE0,0x12,0x20,0x23,0xE0,0x22,0x20,0x23,0xE0, +0x28,0x80,0x37,0xF0,0x21,0x40,0x06,0x30,0x00,0x00, +/* */ +0x22,0x20,0x27,0xF0,0x30,0x80,0x53,0xE0,0x01,0x00,0x27,0xF0,0x22,0x00,0x25,0xE0, +0x28,0xA0,0x23,0xE0,0x31,0x20,0x27,0xF0,0x00,0x00, +/* */ +0x22,0x20,0x27,0xF0,0x32,0x20,0x53,0xE0,0x00,0x80,0x27,0xF0,0x24,0x90,0x27,0xF0, +0x20,0x80,0x27,0xF0,0x30,0x80,0x27,0xF0,0x00,0x00, +/* */ +0x25,0x20,0x2F,0xA0,0x35,0x40,0x5F,0xF0,0x00,0x90,0x27,0x50,0x25,0x50,0x27,0x50, +0x25,0x20,0x27,0x20,0x35,0x50,0x25,0x90,0x00,0x00, +/* */ +0x27,0x70,0x25,0x50,0x37,0x70,0x54,0x40,0x05,0x50,0x23,0x30,0x22,0x20,0x27,0xF0, +0x22,0x20,0x2F,0xF0,0x32,0x20,0x24,0x10,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x3A,0xA0,0x4B,0xE0,0x10,0x80,0x27,0xF0,0x25,0x50,0x23,0xE0, +0x21,0x40,0x2F,0xF0,0x33,0x20,0x25,0x90,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x20,0x00,0x24,0x00,0x24,0x20,0x24,0xC0,0x27,0x00, +0x24,0x00,0x24,0x10,0x24,0x10,0x43,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x21,0x00,0x21,0x00,0x3F,0xF0, +0x21,0x80,0x22,0x80,0x24,0x90,0x58,0x70,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x21,0x00,0x21,0x00,0x3F,0xF0,0x21,0x00,0x2F,0xE0,0x24,0x20, +0x22,0x40,0x21,0x80,0x22,0x40,0x4C,0x30,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x00,0x27,0xE0,0x28,0x20,0x37,0xA0,0x24,0xA0,0x24,0xA0, +0x27,0xA0,0x24,0x60,0x24,0x10,0x43,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x24,0x80,0x28,0x80,0x3B,0xF0,0x28,0x80,0x29,0xC0, +0x2A,0xA0,0x2C,0x90,0x28,0x80,0x48,0x80,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x3F,0xF0,0x24,0x40,0x22,0x80,0x2F,0xE0,0x21,0x00,0x27,0xC0, +0x21,0x00,0x3F,0xF0,0x21,0x00,0x41,0x00,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3F,0xF0,0x24,0x40,0x27,0xC0,0x20,0x00,0x2F,0xE0, +0x28,0x20,0x2F,0xE0,0x28,0x40,0x50,0x30,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x22,0x00,0x3F,0xF0,0x25,0x40,0x2F,0xE0,0x39,0x30,0x2F,0xE0, +0x29,0x20,0x2F,0xE0,0x29,0x10,0x40,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x21,0x00,0x25,0x60,0x29,0x20,0x2D,0x60,0x29,0x20, +0x2F,0xE0,0x22,0x80,0x24,0x40,0x58,0x30,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x22,0x00,0x2F,0xE0,0x29,0x20,0x2F,0xE0,0x2A,0x20,0x2F,0xE0, +0x24,0x80,0x3F,0xF0,0x20,0x80,0x40,0x80,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xF0,0x21,0x00,0x2F,0xE0,0x21,0x20,0x3F,0xF0,0x24,0x20,0x2F,0xE0, +0x39,0x30,0x29,0x20,0x22,0xC0,0x4C,0x20,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x80,0x2E,0x80,0x24,0xF0,0x2E,0xA0,0x25,0xA0,0x3E,0xA0, +0x28,0xA0,0x2E,0x40,0x2A,0xA0,0x57,0x10,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3F,0xF0,0x24,0x40,0x2F,0xE0,0x29,0x20,0x2F,0xE0, +0x21,0x00,0x2F,0xE0,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x2F,0xE0,0x29,0x20,0x2F,0xE0,0x29,0x20,0x3F,0xF0, +0x25,0x40,0x2B,0xA0,0x31,0x10,0x4F,0xE0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x00,0x2E,0xF0,0x32,0x50,0x2F,0xB0,0x2A,0xA0,0x2F,0xF0, +0x2A,0xA0,0x2F,0xF0,0x2A,0xA0,0x51,0xA0,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xF0,0x21,0x00,0x3F,0xF0,0x28,0x20,0x2B,0xA0,0x2A,0xA0,0x2F,0xE0, +0x20,0x00,0x3F,0xF0,0x25,0x40,0x4B,0x20,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x25,0x40,0x2B,0xF0,0x2E,0x40,0x3B,0xF0,0x2A,0x40,0x2F,0xF0, +0x28,0x20,0x2F,0xE0,0x28,0x20,0x48,0x60,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x10,0x00,0x58,0x00,0x54,0x00,0x50,0x00,0x50,0x00,0x10,0x00, +0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x11,0x10,0x59,0x10,0x55,0x10,0x51,0x10,0x51,0x10,0x11,0x10, +0x11,0x10,0x12,0x10,0x12,0x10,0x14,0x60,0x00,0x00, +/* */ +0x10,0x20,0x10,0x20,0x10,0x20,0x5B,0xF0,0x50,0x20,0x50,0x20,0x52,0x20,0x11,0x20, +0x11,0x20,0x10,0x20,0x10,0x20,0x10,0xE0,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x10,0x80,0x58,0x80,0x50,0x80,0x57,0xF0,0x50,0x80,0x10,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x80,0x58,0x80,0x50,0x80,0x57,0xF0,0x51,0x40,0x11,0x40, +0x11,0x40,0x12,0x50,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x58,0x80,0x50,0x80,0x57,0xE0,0x52,0x20,0x12,0x20, +0x11,0x40,0x10,0x80,0x11,0x40,0x16,0x30,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x00,0x5D,0x20,0x54,0xA0,0x54,0xA0,0x54,0x40,0x14,0x40, +0x14,0xA0,0x15,0x20,0x14,0x00,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x18,0x80,0x57,0xF0,0x54,0x90,0x54,0x90,0x54,0x90,0x17,0xF0, +0x14,0x90,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x12,0x00,0x12,0x00,0x1B,0xE0,0x54,0x80,0x50,0x80,0x50,0x80,0x50,0x80,0x17,0xF0, +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x12,0x00,0x12,0x00,0x1B,0xE0,0x54,0x00,0x53,0xC0,0x50,0x00,0x57,0xC0,0x10,0x40, +0x10,0x40,0x10,0x50,0x10,0x30,0x10,0x10,0x00,0x00, +/* */ +0x12,0x00,0x12,0x20,0x12,0xC0,0x5B,0x00,0x52,0x00,0x57,0xF0,0x52,0x40,0x12,0x40, +0x12,0x20,0x12,0xA0,0x13,0x10,0x12,0x00,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0x40,0x5A,0x20,0x54,0x10,0x53,0xE0,0x52,0x20,0x12,0x20, +0x12,0x60,0x12,0x00,0x12,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x12,0x40,0x12,0x40,0x1A,0x40,0x54,0x20,0x54,0x20,0x59,0x10,0x51,0x00,0x12,0x00, +0x12,0x40,0x14,0x20,0x17,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x10,0x00,0x5B,0xF0,0x54,0x80,0x50,0x80,0x50,0xC0,0x10,0xA0, +0x10,0x90,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x11,0x20,0x59,0x20,0x51,0x20,0x51,0x20,0x57,0xE0,0x12,0x20, +0x12,0x20,0x12,0x20,0x12,0x20,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x18,0x80,0x57,0xF0,0x50,0x80,0x50,0x80,0x53,0xE0,0x12,0x20, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x10,0xA0,0x10,0x90,0x18,0x80,0x57,0xF0,0x50,0x80,0x51,0xC0,0x51,0xC0,0x12,0xA0, +0x12,0xA0,0x14,0x90,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x18,0x80,0x54,0x90,0x52,0x90,0x52,0xA0,0x50,0x80,0x17,0xF0, +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x5A,0x20,0x52,0x20,0x53,0xE0,0x52,0x20,0x12,0x20, +0x12,0x20,0x13,0xE0,0x10,0x00,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x13,0xE0,0x5A,0xA0,0x52,0xA0,0x52,0xA0,0x52,0xA0,0x17,0xF0, +0x10,0x80,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x12,0x00,0x12,0x00,0x1B,0xF0,0x55,0x00,0x51,0x00,0x51,0xE0,0x51,0x00,0x11,0x00, +0x11,0xF0,0x11,0x00,0x11,0x00,0x11,0x00,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x10,0x5A,0x10,0x53,0xF0,0x52,0x00,0x52,0x90,0x12,0xA0, +0x12,0xC0,0x12,0x90,0x12,0x90,0x14,0x70,0x00,0x00, +/* */ +0x11,0x40,0x17,0xF0,0x11,0x50,0x59,0x50,0x57,0xF0,0x55,0x40,0x55,0x40,0x17,0xF0, +0x11,0x50,0x11,0x50,0x12,0x70,0x14,0x40,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x11,0x10,0x59,0x10,0x52,0x10,0x54,0x60,0x50,0x00,0x13,0xF0, +0x12,0x10,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x17,0xE0,0x12,0x20,0x11,0x40,0x58,0x80,0x51,0x40,0x56,0xB0,0x50,0x80,0x13,0xE0, +0x10,0x80,0x17,0xF0,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0x00,0x5A,0x20,0x57,0xF0,0x50,0x10,0x53,0xE0,0x12,0x20, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x10,0x40,0x17,0x40,0x10,0xF0,0x58,0x50,0x57,0x50,0x52,0x50,0x52,0x50,0x15,0x50, +0x17,0x50,0x11,0x50,0x10,0x90,0x11,0x30,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0xA0,0x5C,0x90,0x54,0x80,0x57,0xF0,0x54,0x80,0x14,0x80, +0x15,0x40,0x15,0x40,0x1A,0x20,0x14,0x10,0x00,0x00, +/* */ +0x20,0x10,0x2F,0x10,0x29,0x50,0x39,0x50,0x69,0x50,0x69,0x50,0x2D,0x50,0x2D,0x50, +0x24,0x50,0x24,0x10,0x2A,0x10,0x31,0x30,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x1C,0x90,0x57,0xF0,0x50,0x00,0x57,0xE0,0x50,0x20,0x10,0x20, +0x17,0xE0,0x14,0x00,0x14,0x10,0x13,0xF0,0x00,0x00, +/* */ +0x12,0x00,0x13,0xF0,0x14,0x10,0x5B,0xD0,0x56,0x50,0x52,0x50,0x53,0xD0,0x12,0x50, +0x12,0x50,0x13,0xD0,0x12,0x10,0x10,0x60,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x1A,0x20,0x55,0x40,0x50,0x80,0x51,0x40,0x56,0x30,0x13,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x10,0x58,0x80,0x57,0xE0,0x51,0x00,0x52,0x80,0x13,0xE0, +0x10,0x80,0x17,0xF0,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x18,0x80,0x57,0xF0,0x54,0x10,0x53,0xE0,0x50,0x40,0x10,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x58,0x80,0x57,0xF0,0x54,0x90,0x54,0x90,0x17,0xF0, +0x11,0xC0,0x12,0xA0,0x14,0x90,0x10,0x80,0x00,0x00, +/* */ +0x11,0x00,0x15,0xF0,0x15,0x50,0x5D,0x50,0x55,0x50,0x55,0x20,0x51,0x50,0x10,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0xA0,0x12,0xA0,0x5B,0xE0,0x56,0xA0,0x52,0xA0,0x53,0xE0,0x10,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x90,0x5C,0x90,0x57,0xF0,0x54,0x90,0x55,0xD0,0x16,0xB0, +0x14,0x90,0x14,0x90,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x58,0x00,0x57,0xF0,0x54,0x90,0x54,0x90,0x17,0xF0, +0x14,0x00,0x14,0x10,0x14,0x10,0x13,0xF0,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x17,0xE0,0x58,0xA0,0x57,0xE0,0x54,0x80,0x57,0xF0,0x10,0x90, +0x11,0x90,0x12,0xB0,0x14,0x80,0x10,0x80,0x00,0x00, +/* */ +0x11,0x00,0x12,0x20,0x17,0xF0,0x58,0x10,0x52,0x20,0x55,0x10,0x51,0xE0,0x12,0x20, +0x15,0x40,0x10,0x80,0x11,0x40,0x16,0x30,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x40,0x5D,0xF0,0x54,0x40,0x55,0x50,0x54,0x40,0x15,0xF0, +0x14,0x40,0x14,0xA0,0x15,0x10,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x18,0x80,0x57,0xF0,0x52,0x20,0x51,0x40,0x53,0xE0,0x10,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x11,0x40,0x11,0x40,0x17,0x70,0x59,0x40,0x51,0x40,0x57,0x70,0x51,0x40,0x11,0x40, +0x17,0x70,0x11,0x40,0x11,0x40,0x11,0x40,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x12,0xA0,0x58,0x80,0x57,0xF0,0x54,0x10,0x55,0xD0,0x15,0x50, +0x15,0x50,0x15,0xD0,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x16,0x30,0x5D,0x50,0x57,0xF0,0x54,0x90,0x57,0xF0,0x15,0x10, +0x15,0x10,0x15,0xD0,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x17,0xF0,0x14,0x10,0x14,0x90,0x5D,0xD0,0x54,0x90,0x57,0xF0,0x54,0x10,0x15,0xD0, +0x15,0x50,0x15,0xD0,0x14,0x10,0x18,0x70,0x00,0x00, +/* */ +0x12,0x00,0x13,0xF0,0x15,0x50,0x59,0x50,0x52,0x90,0x55,0x10,0x52,0x60,0x11,0x00, +0x14,0xA0,0x15,0x10,0x19,0x50,0x10,0xC0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x5A,0x20,0x52,0x20,0x55,0x50,0x50,0x00,0x10,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x5A,0x20,0x53,0xE0,0x50,0x00,0x57,0xF0,0x15,0x50, +0x15,0x50,0x15,0x50,0x15,0x50,0x1F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x13,0xF0,0x1A,0x90,0x53,0xF0,0x50,0x80,0x57,0xF0,0x50,0x00,0x13,0xF0, +0x12,0x90,0x12,0x90,0x11,0x60,0x12,0x10,0x00,0x00, +/* */ +0x17,0x70,0x15,0x50,0x17,0x70,0x58,0x00,0x53,0xE0,0x50,0x00,0x57,0xF0,0x12,0x00, +0x13,0xE0,0x10,0x20,0x10,0x20,0x10,0xC0,0x00,0x00, +/* */ +0x17,0xF0,0x15,0x50,0x1D,0x50,0x57,0xF0,0x50,0x80,0x57,0xF0,0x51,0x00,0x11,0xF0, +0x11,0x10,0x12,0x10,0x12,0x10,0x14,0x60,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x1C,0x90,0x57,0xF0,0x50,0x00,0x57,0xF0,0x50,0x80,0x17,0xF0, +0x15,0x50,0x15,0x50,0x15,0x50,0x14,0x30,0x00,0x00, +/* */ +0x11,0x40,0x16,0x40,0x12,0x50,0x5A,0xD0,0x57,0x60,0x52,0x40,0x53,0x40,0x16,0x40, +0x1A,0xA0,0x12,0xA0,0x12,0xA0,0x13,0x10,0x00,0x00, +/* */ +0x13,0xF0,0x14,0x00,0x13,0xE0,0x5A,0x20,0x53,0xE0,0x52,0x20,0x53,0xE0,0x11,0x00, +0x13,0xE0,0x15,0x20,0x10,0xC0,0x17,0x30,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x5B,0xE0,0x50,0x80,0x57,0xF0,0x51,0x20,0x13,0xC0, +0x10,0x90,0x17,0xF0,0x12,0xA0,0x15,0x90,0x00,0x00, +/* */ +0x14,0x40,0x12,0x80,0x17,0xE0,0x5A,0x80,0x57,0xE0,0x52,0xA0,0x5F,0xF0,0x12,0xA0, +0x17,0xE0,0x16,0xC0,0x1A,0xA0,0x12,0x90,0x00,0x00, +/* */ +0x20,0x80,0x2F,0xF0,0x28,0x80,0x3B,0xE0,0x68,0xA0,0x6F,0xF0,0x28,0xA0,0x2B,0xE0, +0x2A,0xA0,0x2B,0xE0,0x2A,0xA0,0x32,0x60,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x5A,0x20,0x53,0xE0,0x50,0x80,0x57,0xF0,0x12,0x20, +0x13,0xE0,0x10,0x80,0x12,0xA0,0x15,0x90,0x00,0x00, +/* */ +0x11,0x40,0x11,0x20,0x1B,0xF0,0x56,0x40,0x53,0xF0,0x52,0x40,0x53,0xF0,0x12,0x40, +0x13,0xF0,0x12,0x00,0x15,0x50,0x15,0x50,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x19,0x40,0x57,0xF0,0x52,0xA0,0x53,0xE0,0x52,0xA0,0x13,0xE0, +0x10,0x80,0x13,0xE0,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x12,0x40,0x17,0xF0,0x1A,0x40,0x53,0x60,0x56,0xD0,0x52,0x40,0x57,0xF0,0x10,0x90, +0x12,0xE0,0x12,0x80,0x15,0x80,0x18,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x18,0x00,0x57,0xF0,0x54,0x10,0x55,0xD0,0x55,0x50,0x17,0xF0, +0x10,0x00,0x17,0xF0,0x12,0xA0,0x15,0x90,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x1A,0x20,0x57,0xF0,0x55,0x50,0x57,0xF0,0x50,0x00,0x17,0xF0, +0x15,0x50,0x11,0xC0,0x11,0x40,0x11,0xC0,0x00,0x00, +/* */ +0x1F,0xC0,0x02,0x00,0x04,0x00,0x7F,0xF0,0x08,0x80,0x10,0x40,0x62,0x30,0x02,0x00, +0x0A,0xA0,0x12,0x50,0x22,0x50,0x06,0x00,0x00,0x00, +/* */ +0x38,0x80,0x2B,0xF0,0x31,0x40,0x2B,0xF0,0x2D,0x20,0x31,0xE0,0x27,0x20,0x18,0xC0, +0x62,0x30,0x0B,0x40,0x12,0xA0,0x06,0x00,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x00,0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x5F,0xD0,0x40,0x10, +0x40,0x10,0x40,0x10,0x40,0x10,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x00,0x10,0x4F,0x90,0x40,0x10,0x40,0x10,0x4F,0x90,0x40,0x10, +0x40,0x10,0x5F,0xD0,0x40,0x10,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x02,0x10,0x5F,0xD0,0x42,0x10,0x4F,0x90,0x42,0x10,0x5F,0xD0, +0x42,0x50,0x42,0xD0,0x42,0x10,0x42,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x04,0x10,0x44,0x10,0x5F,0xD0,0x44,0x10,0x49,0x10,0x49,0x10, +0x52,0x10,0x64,0x90,0x47,0xD0,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x04,0x10,0x42,0x10,0x5F,0xD0,0x41,0x10,0x49,0x10,0x45,0x10, +0x42,0x10,0x45,0x10,0x58,0x90,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x04,0x10,0x42,0x10,0x5F,0xD0,0x40,0x10,0x4F,0x10,0x49,0x10, +0x49,0x10,0x51,0x50,0x60,0xD0,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x01,0x10,0x51,0x10,0x47,0xD0,0x59,0x10,0x49,0x10,0x4A,0x90, +0x4C,0x50,0x48,0x10,0x57,0xD0,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x0F,0x90,0x48,0x90,0x48,0x90,0x4F,0x90,0x40,0x10,0x5F,0xD0, +0x50,0x50,0x50,0x50,0x5F,0xD0,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x1F,0xD0,0x52,0x50,0x52,0x50,0x5F,0xD0,0x52,0x50,0x57,0x50, +0x5A,0xD0,0x52,0x50,0x5F,0xD0,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x24,0x10,0x07,0x10,0x49,0x10,0x5F,0x90,0x4A,0x90,0x4F,0x90,0x4A,0x90, +0x4F,0x90,0x42,0x50,0x41,0xD0,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x24,0x10,0x02,0x10,0x5F,0xD0,0x50,0x50,0x5F,0xD0,0x50,0x50,0x5F,0xD0, +0x52,0x30,0x51,0x50,0x58,0x90,0x50,0x70,0x00,0x00, +/* */ +0x4F,0xF0,0x21,0x50,0x01,0x10,0x5F,0xD0,0x41,0x10,0x5D,0x10,0x55,0x50,0x55,0x50, +0x5D,0x90,0x45,0x50,0x5A,0xD0,0x44,0x70,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x0F,0x90,0x48,0x90,0x4F,0x90,0x48,0x90,0x5F,0xD0,0x50,0x50, +0x5F,0xD0,0x50,0x50,0x5F,0xD0,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x24,0x10,0x19,0x90,0x50,0x90,0x59,0x90,0x50,0x90,0x5F,0x90,0x4A,0x10, +0x4A,0x50,0x52,0x50,0x61,0xD0,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x00,0xD0,0x5F,0x10,0x4A,0x90,0x5F,0xD0,0x50,0x50,0x4F,0x90, +0x48,0x90,0x47,0x10,0x58,0xD0,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x50,0x1F,0x90,0x52,0x10,0x5F,0xD0,0x51,0x10,0x58,0xB0,0x4F,0xF0, +0x48,0x90,0x4F,0x90,0x48,0x90,0x4F,0xB0,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x10,0x90,0x48,0x90,0x7D,0x50,0x52,0x30,0x5C,0x90,0x54,0x50, +0x54,0x50,0x55,0x10,0x54,0x90,0x6C,0x70,0x00,0x00, +/* */ +0x4F,0xF0,0x28,0x90,0x0F,0x90,0x48,0x90,0x4F,0x90,0x48,0x90,0x4F,0x90,0x42,0x10, +0x42,0x90,0x5F,0xD0,0x45,0x10,0x58,0xB0,0x00,0x00, +/* */ +0x4F,0xF0,0x21,0x50,0x1D,0x90,0x45,0x10,0x55,0x50,0x48,0x90,0x48,0x90,0x57,0x50, +0x42,0x10,0x5F,0xD0,0x45,0x10,0x48,0xB0,0x00,0x00, +/* */ +0x4F,0xF0,0x22,0x10,0x1F,0xD0,0x42,0x10,0x5F,0xF0,0x48,0x90,0x5F,0xD0,0x40,0x10, +0x5F,0xD0,0x55,0x50,0x7F,0xF0,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x22,0x10,0x0F,0x90,0x42,0x10,0x4F,0x90,0x48,0x90,0x4A,0x90,0x4A,0x90, +0x5F,0xD0,0x45,0x10,0x48,0x90,0x40,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x10,0x01,0x10,0x55,0x10,0x49,0xD0,0x7E,0x50,0x48,0x90,0x6A,0x90, +0x7E,0x90,0x48,0x90,0x49,0x50,0x52,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x21,0x10,0x19,0x10,0x49,0xF0,0x7E,0x50,0x55,0x50,0x5D,0x50,0x55,0x50, +0x5D,0x50,0x56,0x90,0x7D,0x50,0x46,0x30,0x00,0x00, +/* */ +0x08,0x00,0x08,0x00,0x48,0x00,0x28,0x00,0x18,0x00,0x08,0x00,0x18,0x00,0x28,0x00, +0x48,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00, +/* */ +0x08,0x20,0x08,0x20,0x08,0x20,0x0F,0xE0,0x00,0x20,0x00,0x20,0x3F,0xE0,0x08,0x20, +0x08,0x20,0x08,0x20,0x10,0x20,0x20,0x20,0x00,0x00, +/* */ +0x09,0x40,0x29,0x20,0x29,0x00,0x29,0xF0,0x3F,0x00,0x09,0x20,0x79,0x20,0x29,0x40, +0x28,0x90,0x29,0x50,0x2A,0x30,0x4C,0x10,0x00,0x00, +/* */ +0x00,0x00,0x20,0x00,0x10,0x00,0x00,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00, +0x10,0x00,0x20,0x00,0x40,0x00,0x00,0x00,0x00,0x00, +/* */ +0x02,0x00,0x22,0x00,0x13,0xF0,0x04,0x00,0x48,0x00,0x27,0xE0,0x00,0x20,0x00,0xC0, +0x13,0x00,0x24,0x10,0x44,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xE0,0x28,0x20,0x08,0x20,0x08,0x20,0x48,0x20,0x2F,0xE0,0x08,0x00, +0x08,0x00,0x28,0x10,0x48,0x10,0x07,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xE0,0x24,0x20,0x05,0x20,0x04,0xA0,0x44,0x40,0x22,0x40,0x02,0x80, +0x11,0x00,0x22,0x80,0x44,0x40,0x18,0x30,0x00,0x00, +/* */ +0x00,0x80,0x20,0x80,0x17,0xF0,0x00,0x80,0x40,0x80,0x23,0xE0,0x00,0x80,0x00,0x80, +0x17,0xF0,0x20,0x80,0x40,0x80,0x00,0x80,0x00,0x00, +/* */ +0x00,0x00,0x27,0xE0,0x10,0x00,0x00,0x00,0x4F,0xF0,0x22,0x40,0x02,0x40,0x02,0x40, +0x12,0x40,0x24,0x50,0x44,0x50,0x08,0x30,0x00,0x00, +/* */ +0x01,0x00,0x41,0x00,0x21,0x00,0x0F,0xE0,0x01,0x00,0x43,0x80,0x23,0x80,0x05,0x40, +0x05,0x40,0x29,0x20,0x51,0x10,0x01,0x00,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xF0,0x01,0x00,0x01,0x00,0x49,0xE0,0x29,0x20,0x09,0x20,0x0F,0xE0, +0x00,0x20,0x20,0x20,0x40,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x41,0x00,0x21,0x00,0x1F,0xF0,0x01,0x00,0x49,0x20,0x29,0x20,0x09,0x20,0x0F,0xE0, +0x01,0x00,0x21,0x10,0x41,0x10,0x00,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x27,0xF0,0x14,0x10,0x04,0x10,0x44,0x10,0x27,0xF0,0x04,0x10,0x04,0x10, +0x14,0x10,0x24,0x10,0x47,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x00,0x00,0x27,0xF0,0x14,0x10,0x04,0x10,0x44,0x10,0x27,0xD0,0x04,0x10,0x04,0x10, +0x14,0x10,0x24,0x10,0x47,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x21,0x00,0x10,0x80,0x00,0x00,0x0F,0xF0,0x41,0x00,0x21,0x80,0x01,0x40,0x01,0x20, +0x11,0x00,0x21,0x00,0x41,0x00,0x01,0x00,0x00,0x00, +/* */ +0x02,0x00,0x41,0x00,0x2F,0xF0,0x04,0x40,0x04,0x40,0x44,0x40,0x22,0x80,0x02,0x80, +0x11,0x00,0x22,0x80,0x44,0x40,0x08,0x30,0x00,0x00, +/* */ +0x01,0x00,0x20,0x80,0x17,0xF0,0x00,0x00,0x40,0x00,0x23,0xC0,0x02,0x40,0x02,0x40, +0x12,0x40,0x22,0x50,0x44,0x50,0x08,0x30,0x00,0x00, +/* */ +0x41,0x00,0x29,0x00,0x05,0x00,0x0F,0xF0,0x41,0x10,0x22,0x10,0x02,0x90,0x02,0x50, +0x04,0x50,0x24,0x10,0x48,0x10,0x10,0xE0,0x00,0x00, +/* */ +0x00,0x40,0x4E,0x40,0x2A,0x40,0x0B,0xF0,0x0C,0x50,0x4A,0x50,0x2A,0x50,0x0A,0x50, +0x0C,0x90,0x28,0x90,0x49,0x10,0x0A,0x60,0x00,0x00, +/* */ +0x04,0x20,0x44,0x20,0x2F,0xF0,0x04,0x20,0x04,0x20,0x44,0x20,0x27,0xE0,0x04,0x20, +0x14,0x20,0x24,0x20,0x47,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x41,0x40,0x21,0x20,0x01,0x00,0x0F,0xF0,0x41,0x00,0x23,0x80,0x03,0x80,0x05,0x40, +0x05,0x40,0x29,0x20,0x51,0x10,0x01,0x00,0x00,0x00, +/* */ +0x22,0x40,0x12,0x20,0x02,0x00,0x0F,0xF0,0x42,0x80,0x22,0x90,0x02,0xA0,0x02,0xC0, +0x14,0x80,0x25,0x90,0x4A,0x90,0x10,0x70,0x00,0x00, +/* */ +0x00,0x80,0x20,0xF0,0x10,0x80,0x00,0x80,0x47,0xF0,0x24,0x10,0x04,0x10,0x07,0xF0, +0x14,0x10,0x24,0x00,0x44,0x00,0x08,0x00,0x00,0x00, +/* */ +0x01,0x00,0x41,0x00,0x2F,0xE0,0x09,0x20,0x09,0x20,0x49,0x20,0x29,0x20,0x1F,0xF0, +0x02,0x80,0x24,0x40,0x48,0x20,0x10,0x10,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xF0,0x2A,0x50,0x0A,0x50,0x0A,0x50,0x4A,0x50,0x2A,0x50,0x0A,0x70, +0x0C,0x10,0x28,0x10,0x4F,0xF0,0x08,0x10,0x00,0x00, +/* */ +0x02,0x00,0x42,0x00,0x27,0xF0,0x09,0x00,0x05,0x60,0x45,0xA0,0x2F,0x20,0x05,0x20, +0x15,0x60,0x25,0x00,0x44,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x21,0x00,0x12,0x80,0x04,0x40,0x49,0x30,0x20,0x80,0x07,0xE0,0x00,0x20, +0x10,0x40,0x22,0x80,0x41,0x00,0x00,0x80,0x00,0x00, +/* */ +0x02,0x00,0x5C,0xF0,0x32,0x90,0x12,0x90,0x12,0x90,0x52,0x90,0x32,0x90,0x16,0x90, +0x1A,0xB0,0x22,0x80,0x44,0x80,0x08,0x80,0x00,0x00, +/* */ +0x00,0x60,0x27,0x80,0x14,0x00,0x04,0x80,0x44,0x80,0x27,0xF0,0x00,0x80,0x04,0xA0, +0x14,0x90,0x28,0x90,0x40,0x80,0x01,0x80,0x00,0x00, +/* */ +0x01,0x00,0x20,0x80,0x17,0xF0,0x00,0x80,0x41,0x00,0x22,0x20,0x07,0xC0,0x00,0x80, +0x11,0x00,0x22,0x20,0x47,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x41,0x00,0x29,0x20,0x05,0x40,0x01,0x00,0x4F,0xE0,0x21,0x00,0x01,0x00,0x1F,0xF0, +0x01,0x00,0x21,0x00,0x41,0x00,0x01,0x00,0x00,0x00, +/* */ +0x01,0x00,0x40,0x80,0x2F,0xF0,0x08,0x10,0x00,0x00,0x44,0x00,0x24,0x20,0x04,0xC0, +0x17,0x00,0x24,0x10,0x44,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x4E,0x40,0x22,0x40,0x02,0x40,0x0E,0x40,0x48,0x40,0x28,0x80,0x0E,0x80,0x02,0x80, +0x02,0xA0,0x22,0x90,0x42,0xF0,0x0C,0x10,0x00,0x00, +/* */ +0x4F,0xE0,0x28,0x20,0x08,0x20,0x0F,0xE0,0x48,0x80,0x28,0x80,0x0F,0xF0,0x08,0x80, +0x08,0x80,0x2A,0x50,0x4C,0x30,0x08,0x10,0x00,0x00, +/* */ +0x00,0x00,0x4F,0xE0,0x20,0x40,0x00,0x80,0x03,0x60,0x4C,0x10,0x20,0x00,0x0F,0xE0, +0x01,0x00,0x21,0x00,0x41,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x2F,0xF0,0x10,0x00,0x07,0xE0,0x44,0x20,0x24,0x20,0x07,0xE0,0x04,0x20, +0x14,0x20,0x27,0xE0,0x40,0x00,0x0F,0xF0,0x00,0x00, +/* */ +0x41,0x00,0x21,0x00,0x0F,0xF0,0x02,0x00,0x47,0xE0,0x2C,0x20,0x17,0xE0,0x04,0x20, +0x07,0xE0,0x24,0x20,0x44,0x20,0x04,0x60,0x00,0x00, +/* */ +0x00,0x10,0x5F,0x10,0x24,0x50,0x04,0x50,0x07,0x50,0x49,0x50,0x29,0x50,0x15,0x50, +0x02,0x50,0x22,0x10,0x44,0x10,0x08,0x70,0x00,0x00, +/* */ +0x00,0x80,0x20,0x80,0x17,0xF0,0x00,0x80,0x44,0x90,0x22,0xA0,0x00,0x80,0x07,0xF0, +0x10,0x80,0x21,0x40,0x42,0x20,0x04,0x10,0x00,0x00, +/* */ +0x01,0x00,0x41,0x00,0x21,0xF0,0x01,0x00,0x0F,0xE0,0x48,0x20,0x29,0x20,0x09,0x20, +0x09,0x20,0x22,0x80,0x44,0x40,0x08,0x20,0x00,0x00, +/* */ +0x27,0xF0,0x14,0x10,0x04,0x90,0x04,0x90,0x47,0xF0,0x24,0x90,0x04,0x90,0x05,0x50, +0x16,0x30,0x24,0x10,0x47,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xF0,0x08,0x10,0x08,0x10,0x4B,0xD0,0x2A,0x50,0x0A,0x50,0x0B,0xD0, +0x08,0x10,0x28,0x10,0x4F,0xF0,0x08,0x10,0x00,0x00, +/* */ +0x20,0x80,0x12,0x80,0x03,0xE0,0x04,0x80,0x40,0x80,0x2F,0xF0,0x01,0x80,0x02,0xC0, +0x14,0xA0,0x28,0x90,0x40,0x80,0x00,0x80,0x00,0x00, +/* */ +0x00,0x80,0x21,0x00,0x17,0xF0,0x04,0x10,0x44,0x10,0x27,0xF0,0x04,0x10,0x04,0x10, +0x17,0xF0,0x24,0x10,0x44,0x10,0x07,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x41,0x00,0x22,0x00,0x0F,0xE0,0x0A,0xA0,0x4A,0xA0,0x2A,0xA0,0x0A,0xA0, +0x0A,0xA0,0x2A,0xA0,0x4A,0xA0,0x1F,0xF0,0x00,0x00, +/* */ +0x41,0x00,0x22,0x80,0x04,0x40,0x08,0x20,0x57,0xD0,0x20,0x00,0x00,0x00,0x0F,0xE0, +0x02,0x00,0x24,0x40,0x4F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x02,0x40,0x42,0x40,0x22,0x40,0x0A,0x50,0x06,0x60,0x42,0x40,0x26,0x60,0x0A,0x50, +0x02,0x40,0x24,0x50,0x44,0x50,0x08,0x30,0x00,0x00, +/* */ +0x44,0x00,0x27,0xF0,0x08,0x10,0x17,0xD0,0x44,0x50,0x24,0x50,0x07,0xD0,0x04,0x50, +0x14,0x50,0x27,0xD0,0x44,0x10,0x00,0x60,0x00,0x00, +/* */ +0x22,0x00,0x13,0xE0,0x04,0x20,0x0A,0x40,0x41,0x80,0x2E,0x70,0x00,0x80,0x07,0xE0, +0x10,0x80,0x28,0x80,0x4F,0xF0,0x00,0x80,0x00,0x00, +/* */ +0x44,0x10,0x22,0x10,0x00,0x50,0x0F,0xD0,0x41,0x50,0x29,0x50,0x05,0x50,0x05,0x50, +0x12,0x50,0x25,0x10,0x45,0x10,0x08,0x30,0x00,0x00, +/* */ +0x11,0x00,0x49,0x00,0x21,0xE0,0x02,0x80,0x18,0x80,0x48,0x80,0x28,0x80,0x0B,0xF0, +0x08,0x80,0x2C,0x80,0x48,0x80,0x00,0x80,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xE0,0x00,0x20,0x07,0xE0,0x40,0x20,0x2F,0xE0,0x00,0x40,0x1F,0xF0, +0x04,0x40,0x22,0x40,0x40,0x40,0x00,0xC0,0x00,0x00, +/* */ +0x44,0x00,0x24,0x00,0x04,0xF0,0x1E,0x90,0x4A,0x90,0x2A,0x90,0x0A,0x90,0x12,0x90, +0x0A,0x90,0x24,0xF0,0x4A,0x90,0x11,0x00,0x00,0x00, +/* */ +0x01,0x00,0x41,0x00,0x2F,0xF0,0x01,0x00,0x0F,0xE0,0x49,0x20,0x29,0x20,0x0F,0xE0, +0x03,0x80,0x25,0x40,0x49,0x30,0x01,0x00,0x00,0x00, +/* */ +0x4F,0xF0,0x21,0x00,0x07,0xE0,0x02,0x20,0x42,0x20,0x2F,0xF0,0x00,0x00,0x07,0xE0, +0x14,0x20,0x24,0x20,0x47,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x41,0x00,0x21,0x00,0x0F,0xE0,0x01,0x00,0x49,0x20,0x25,0x40,0x1F,0xF0,0x03,0x80, +0x05,0x40,0x29,0x20,0x51,0x10,0x01,0x00,0x00,0x00, +/* */ +0x4F,0xF0,0x29,0x10,0x0F,0xD0,0x09,0x10,0x4B,0x90,0x29,0x10,0x0F,0xD0,0x09,0x50, +0x09,0xD0,0x29,0x10,0x4F,0xF0,0x08,0x10,0x00,0x00, +/* */ +0x0F,0xE0,0x48,0x20,0x28,0x20,0x08,0x20,0x0F,0xE0,0x41,0x00,0x21,0x00,0x05,0xE0, +0x15,0x00,0x25,0x00,0x4B,0x00,0x11,0xF0,0x00,0x00, +/* */ +0x47,0xE0,0x24,0x20,0x07,0xE0,0x00,0x00,0x4F,0xF0,0x28,0x10,0x0F,0xF0,0x08,0x10, +0x0F,0xF0,0x28,0x10,0x48,0x10,0x08,0x30,0x00,0x00, +/* */ +0x20,0x80,0x14,0x90,0x07,0xF0,0x00,0x80,0x41,0x40,0x22,0x20,0x04,0x90,0x00,0x40, +0x13,0xE0,0x20,0x20,0x40,0x40,0x00,0x80,0x00,0x00, +/* */ +0x20,0x60,0x17,0x80,0x04,0x00,0x04,0x00,0x47,0xF0,0x24,0x40,0x04,0x40,0x04,0x40, +0x1F,0xF0,0x20,0x00,0x44,0x20,0x08,0x10,0x00,0x00, +/* */ +0x44,0x20,0x23,0xC0,0x04,0x20,0x01,0x00,0x4F,0xF0,0x22,0x00,0x04,0x80,0x0F,0xF0, +0x04,0x90,0x24,0x90,0x44,0xB0,0x00,0x80,0x00,0x00, +/* */ +0x04,0x00,0x47,0xC0,0x28,0x40,0x10,0x80,0x0F,0xE0,0x49,0x20,0x29,0x20,0x0F,0xE0, +0x02,0x80,0x22,0x80,0x44,0x90,0x18,0x70,0x00,0x00, +/* */ +0x42,0x00,0x21,0x00,0x1F,0xF0,0x10,0x10,0x47,0xC0,0x20,0x00,0x1F,0xF0,0x04,0x80, +0x04,0x80,0x24,0x90,0x48,0x90,0x10,0x70,0x00,0x00, +/* */ +0x01,0x00,0x41,0x10,0x2F,0xE0,0x01,0x40,0x1F,0xF0,0x42,0x00,0x27,0xF0,0x1C,0x10, +0x07,0xF0,0x24,0x10,0x47,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x44,0x20,0x24,0x20,0x1F,0xF0,0x04,0x20,0x47,0xE0,0x24,0x20,0x07,0xE0,0x04,0x20, +0x1F,0xF0,0x20,0x00,0x44,0x20,0x08,0x10,0x00,0x00, +/* */ +0x44,0x30,0x24,0xC0,0x04,0x80,0x1F,0x80,0x44,0xF0,0x2C,0xA0,0x0E,0xA0,0x15,0xA0, +0x04,0xA0,0x24,0xA0,0x45,0x20,0x06,0x20,0x00,0x00, +/* */ +0x44,0xA0,0x24,0xA0,0x04,0xA0,0x1F,0x10,0x45,0x10,0x26,0x40,0x0D,0x40,0x14,0x80, +0x04,0xA0,0x25,0x10,0x45,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x41,0x00,0x27,0xE0,0x01,0x00,0x0F,0xF0,0x40,0x10,0x22,0x80,0x09,0x80,0x04,0x80, +0x0F,0xF0,0x21,0x40,0x42,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xF0,0x02,0x00,0x05,0x10,0x49,0xA0,0x26,0xC0,0x04,0x80,0x0B,0xC0, +0x02,0xA0,0x24,0x90,0x48,0x80,0x03,0x00,0x00,0x00, +/* */ +0x4F,0xE0,0x29,0x20,0x09,0x20,0x0F,0xE0,0x49,0x20,0x29,0x20,0x0F,0xE0,0x00,0x00, +0x1F,0xF0,0x24,0x40,0x44,0x40,0x08,0x40,0x00,0x00, +/* */ +0x47,0xC0,0x24,0x40,0x07,0xC0,0x01,0x00,0x4F,0xE0,0x29,0x20,0x0F,0xE0,0x09,0x20, +0x0F,0xE0,0x29,0x00,0x41,0x10,0x00,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x42,0x80,0x24,0x40,0x08,0x20,0x17,0xD0,0x41,0x00,0x21,0x00,0x0F,0xE0, +0x01,0x00,0x29,0x20,0x45,0x40,0x1F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x5D,0xF0,0x35,0x50,0x15,0x50,0x1D,0x50,0x55,0x50,0x35,0xF0,0x1D,0x00, +0x15,0x00,0x35,0x10,0x55,0x10,0x2C,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x27,0xF0,0x14,0x10,0x00,0x00,0x43,0xE0,0x20,0x00,0x00,0x00,0x07,0xF0, +0x10,0x80,0x22,0xA0,0x44,0x90,0x01,0x80,0x00,0x00, +/* */ +0x42,0x00,0x21,0x00,0x1F,0xF0,0x10,0x10,0x41,0x00,0x2F,0xE0,0x09,0x20,0x0F,0xE0, +0x09,0x20,0x2F,0xE0,0x49,0x20,0x01,0x00,0x00,0x00, +/* */ +0x01,0x00,0x40,0x80,0x2F,0xF0,0x08,0x10,0x07,0xE0,0x44,0x20,0x27,0xE0,0x04,0x00, +0x17,0xF0,0x24,0x10,0x47,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x27,0xC0,0x10,0x40,0x07,0xC0,0x00,0x40,0x4F,0xE0,0x21,0x00,0x09,0x20,0x05,0x40, +0x13,0x80,0x25,0x40,0x49,0x30,0x03,0x00,0x00,0x00, +/* */ +0x1F,0x10,0x51,0x10,0x31,0x50,0x1F,0x50,0x14,0x50,0x5F,0x50,0x35,0x50,0x15,0x50, +0x15,0x50,0x37,0x10,0x54,0x10,0x24,0x70,0x00,0x00, +/* */ +0x01,0x40,0x45,0x40,0x2F,0xF0,0x05,0x40,0x05,0xC0,0x44,0x00,0x27,0xE0,0x01,0x00, +0x1F,0xF0,0x23,0x80,0x45,0x40,0x09,0x30,0x00,0x00, +/* */ +0x40,0x00,0x2F,0xE0,0x02,0x80,0x0F,0xE0,0x4A,0xA0,0x2A,0xA0,0x0F,0xE0,0x01,0x00, +0x0F,0xE0,0x21,0x00,0x41,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x4F,0xF0,0x20,0x80,0x01,0x00,0x0F,0xF0,0x4A,0x50,0x2B,0xD0,0x0A,0x50,0x0B,0xD0, +0x0A,0x50,0x2A,0x50,0x4F,0xF0,0x08,0x10,0x00,0x00, +/* */ +0x41,0x40,0x2E,0x40,0x04,0x50,0x04,0xD0,0x5F,0x60,0x24,0x40,0x0E,0x40,0x0D,0x40, +0x14,0x40,0x24,0xA0,0x44,0xA0,0x05,0x10,0x00,0x00, +/* */ +0x20,0x80,0x12,0xB0,0x04,0x90,0x06,0xB0,0x44,0x90,0x27,0xF0,0x00,0x80,0x07,0xF0, +0x12,0x10,0x21,0x20,0x40,0xC0,0x07,0x30,0x00,0x00, +/* */ +0x02,0x00,0x4F,0xE0,0x28,0x20,0x0F,0xE0,0x08,0x20,0x4F,0xE0,0x20,0x00,0x0F,0xE0, +0x01,0x00,0x2F,0xE0,0x41,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x4A,0xE0,0x31,0xA0,0x0E,0xA0,0x04,0xA0,0x44,0xA0,0x3F,0xA0,0x04,0xA0, +0x0E,0x40,0x35,0x40,0x44,0xA0,0x0D,0x10,0x00,0x00, +/* */ +0x42,0x40,0x24,0x20,0x08,0x10,0x07,0xE0,0x42,0x20,0x24,0x20,0x08,0xC0,0x00,0x00, +0x0F,0xE0,0x2A,0xA0,0x4A,0xA0,0x1F,0xF0,0x00,0x00, +/* */ +0x04,0x20,0x42,0x40,0x2F,0xF0,0x00,0x00,0x0F,0x10,0x49,0x50,0x2F,0x50,0x09,0x50, +0x0F,0x50,0x29,0x50,0x49,0x10,0x0B,0x30,0x00,0x00, +/* */ +0x01,0x00,0x4F,0xF0,0x28,0x10,0x07,0xE0,0x00,0x00,0x47,0xE0,0x24,0x20,0x07,0xE0, +0x04,0x20,0x27,0xE0,0x40,0x00,0x0F,0xF0,0x00,0x00, +/* */ +0x4F,0xF0,0x28,0x10,0x0F,0xF0,0x08,0x00,0x4B,0xF0,0x28,0x80,0x09,0x20,0x0B,0xF0, +0x08,0x80,0x2B,0xE0,0x48,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x4F,0xF0,0x28,0x90,0x08,0x90,0x0F,0xF0,0x48,0x00,0x2B,0xF0,0x0A,0x10,0x0B,0xF0, +0x0A,0x10,0x2B,0xF0,0x4A,0x10,0x13,0xF0,0x00,0x00, +/* */ +0x04,0x80,0x44,0xE0,0x3F,0x20,0x04,0x40,0x05,0xF0,0x5F,0x50,0x25,0x50,0x05,0xF0, +0x1F,0x00,0x25,0x10,0x45,0x10,0x04,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x4F,0xE0,0x21,0x00,0x07,0xC0,0x02,0x00,0x4F,0xF0,0x24,0x40,0x0B,0xA0, +0x01,0x10,0x2F,0xE0,0x45,0x40,0x09,0x20,0x00,0x00, +/* */ +0x01,0x00,0x47,0xC0,0x21,0x00,0x0F,0xF0,0x02,0x00,0x44,0x40,0x2F,0xE0,0x00,0x00, +0x0F,0xE0,0x2A,0xA0,0x4A,0xA0,0x1F,0xF0,0x00,0x00, +/* */ +0x5F,0xF0,0x28,0x20,0x0F,0xE0,0x08,0x20,0x4F,0xE0,0x28,0x30,0x1F,0xE0,0x00,0x20, +0x1E,0xF0,0x32,0x90,0x4C,0x60,0x12,0x90,0x00,0x00, +/* */ +0x02,0x40,0x4F,0xF0,0x22,0x40,0x01,0x20,0x0F,0xF0,0x42,0x40,0x2C,0x30,0x02,0x40, +0x0F,0xF0,0x22,0x40,0x42,0x40,0x04,0x40,0x00,0x00, +/* */ +0x04,0x40,0x5F,0xF0,0x24,0x40,0x1F,0xF0,0x10,0x10,0x4F,0xE0,0x21,0x00,0x01,0x00, +0x0F,0xE0,0x21,0x40,0x41,0x20,0x1F,0xF0,0x00,0x00, +/* */ +0x01,0x40,0x4F,0xF0,0x21,0x00,0x0F,0xE0,0x09,0x20,0x4F,0xE0,0x29,0x20,0x09,0x20, +0x00,0x40,0x2F,0xF0,0x44,0x40,0x02,0xC0,0x00,0x00, +/* */ +0x5F,0xF0,0x22,0x80,0x0F,0xE0,0x0A,0xA0,0x4A,0xA0,0x2F,0xE0,0x01,0x00,0x1F,0xF0, +0x03,0x80,0x25,0x40,0x59,0x30,0x01,0x00,0x00,0x00, +/* */ +0x4F,0xF0,0x28,0x00,0x0B,0xE0,0x08,0x00,0x4F,0xF0,0x2A,0xA0,0x0A,0x40,0x0B,0x30, +0x08,0x40,0x2F,0xF0,0x4A,0x40,0x10,0xC0,0x00,0x00, +/* */ +0x47,0xE0,0x24,0x20,0x07,0xE0,0x04,0x20,0x47,0xE0,0x20,0x00,0x1E,0xF0,0x0A,0x50, +0x06,0x30,0x2A,0x50,0x52,0x90,0x06,0x30,0x00,0x00, +/* */ +0x4F,0xF0,0x28,0x10,0x0F,0xF0,0x09,0x10,0x4A,0xB0,0x2D,0xD0,0x0A,0x90,0x0D,0xD0, +0x0A,0xB0,0x2D,0x90,0x48,0x10,0x0F,0xF0,0x00,0x00, +/* */ +0x48,0x40,0x2F,0x70,0x14,0xA0,0x02,0x10,0x40,0xE0,0x2F,0x00,0x01,0xC0,0x07,0x00, +0x01,0xE0,0x2F,0x00,0x41,0x10,0x00,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x4F,0xE0,0x28,0x20,0x0F,0xE0,0x08,0x20,0x4F,0xE0,0x28,0x20,0x0F,0xE0, +0x01,0x40,0x3F,0xF0,0x42,0x80,0x1C,0x70,0x00,0x00, +/* */ +0x04,0x40,0x48,0x20,0x22,0x80,0x01,0x00,0x06,0xC0,0x58,0x30,0x27,0xC0,0x01,0x00, +0x0F,0xE0,0x21,0x00,0x45,0x40,0x1F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x4F,0xF0,0x28,0x80,0x0B,0xE0,0x08,0xA0,0x4F,0xF0,0x28,0xA0,0x0B,0xE0, +0x08,0x80,0x2B,0xE0,0x4A,0x20,0x13,0xE0,0x00,0x00, +/* */ +0x01,0x00,0x4F,0xF0,0x24,0x20,0x02,0x40,0x0F,0xF0,0x49,0x10,0x20,0x80,0x0F,0xF0, +0x02,0x00,0x23,0xF0,0x44,0x10,0x08,0x60,0x00,0x00, +/* */ +0x1F,0xF0,0x50,0x10,0x2F,0xE0,0x08,0x20,0x0F,0xE0,0x48,0x20,0x2F,0xE0,0x01,0x00, +0x1F,0xF0,0x20,0x00,0x44,0x40,0x08,0x20,0x00,0x00, +/* */ +0x44,0x40,0x2F,0xE0,0x04,0x40,0x1F,0xF0,0x41,0x00,0x2F,0xE0,0x09,0x20,0x0F,0xE0, +0x09,0x20,0x2F,0xE0,0x44,0x40,0x08,0x20,0x00,0x00, +/* */ +0x02,0x40,0x4F,0xF0,0x22,0x40,0x0F,0xF0,0x09,0x10,0x42,0x40,0x27,0x80,0x01,0x20, +0x17,0xF0,0x20,0x80,0x44,0xA0,0x09,0x90,0x00,0x00, +/* */ +0x04,0x40,0x5F,0xF0,0x25,0x40,0x0F,0xE0,0x01,0x20,0x5F,0xF0,0x21,0x20,0x0F,0xE0, +0x01,0x00,0x2B,0xA0,0x4D,0x60,0x11,0x20,0x00,0x00, +/* */ +0x04,0x40,0x5E,0xF0,0x24,0x40,0x0E,0xE0,0x15,0x50,0x44,0x40,0x21,0x00,0x0F,0xF0, +0x02,0x40,0x26,0x40,0x41,0x80,0x0E,0x60,0x00,0x00, +/* */ +0x02,0x80,0x5F,0xF0,0x22,0x80,0x0F,0xE0,0x0A,0xA0,0x4F,0xE0,0x2A,0xA0,0x0F,0xE0, +0x04,0x40,0x27,0xC0,0x44,0x40,0x07,0xC0,0x00,0x00, +/* */ +0x41,0xE0,0x21,0x00,0x0F,0xF0,0x09,0x10,0x4F,0xC0,0x29,0x10,0x08,0xF0,0x0F,0x80, +0x0A,0xA0,0x2F,0xF0,0x48,0x80,0x11,0x80,0x00,0x00, +/* */ +0x27,0xF0,0x14,0x90,0x07,0xF0,0x04,0x90,0x47,0xF0,0x22,0x40,0x07,0x80,0x01,0x20, +0x17,0xF0,0x20,0x80,0x44,0xA0,0x09,0x90,0x00,0x00, +/* */ +0x01,0x00,0x4F,0xE0,0x29,0x20,0x0F,0xE0,0x01,0x00,0x4F,0xE0,0x29,0x20,0x0F,0xE0, +0x01,0x00,0x2A,0xA0,0x4A,0x50,0x11,0xD0,0x00,0x00, +/* */ +0x44,0x40,0x24,0x40,0x0A,0x40,0x11,0x70,0x4E,0xA0,0x21,0x20,0x05,0xA0,0x12,0xA0, +0x08,0xA0,0x23,0x40,0x5C,0xA0,0x01,0x10,0x00,0x00, +/* */ +0x04,0x80,0x54,0x80,0x29,0xD0,0x14,0xA0,0x07,0xF0,0x44,0x80,0x2D,0xE0,0x17,0x20, +0x05,0xE0,0x25,0x20,0x45,0xE0,0x19,0x20,0x00,0x00, +/* */ +0x04,0x40,0x55,0xF0,0x28,0xA0,0x15,0x10,0x07,0xF0,0x44,0x10,0x2D,0xD0,0x15,0x50, +0x05,0x50,0x25,0xD0,0x45,0x10,0x18,0x30,0x00,0x00, +/* */ +0x00,0x80,0x4F,0xF0,0x29,0x40,0x0F,0xF0,0x09,0x50,0x4F,0xF0,0x28,0x00,0x0A,0x50, +0x0B,0x60,0x2A,0x40,0x4A,0x50,0x13,0x30,0x00,0x00, +/* */ +0x11,0x00,0x49,0x00,0x3D,0xF0,0x12,0x00,0x11,0xF0,0x5C,0x50,0x35,0x40,0x15,0x40, +0x15,0x70,0x35,0x40,0x55,0x40,0x2E,0xF0,0x00,0x00, +/* */ +0x4E,0x40,0x22,0x40,0x04,0x80,0x1E,0xF0,0x4B,0x20,0x2E,0xA0,0x0A,0xA0,0x0E,0xA0, +0x0B,0x40,0x3E,0x40,0x42,0xA0,0x03,0x10,0x00,0x00, +/* */ +0x04,0x20,0x5F,0x20,0x24,0x20,0x0E,0xF0,0x00,0x20,0x4E,0x20,0x2A,0xA0,0x0E,0x60, +0x00,0x20,0x2A,0x20,0x47,0x20,0x18,0x60,0x00,0x00, +/* */ +0x4A,0x10,0x2A,0xE0,0x1F,0x80,0x0A,0x80,0x4E,0xF0,0x2A,0xA0,0x0E,0xA0,0x0A,0xA0, +0x1F,0xA0,0x20,0xA0,0x4A,0xA0,0x11,0x20,0x00,0x00, +/* */ +0x04,0x40,0x5E,0xF0,0x24,0x40,0x0D,0x50,0x15,0x50,0x4F,0xE0,0x28,0x20,0x0F,0xE0, +0x08,0x20,0x2F,0xE0,0x48,0x20,0x08,0x60,0x00,0x00, +/* */ +0x02,0x40,0x5D,0x50,0x24,0xE0,0x04,0x40,0x1F,0xF0,0x45,0x10,0x2D,0xF0,0x0F,0x10, +0x15,0xF0,0x25,0x10,0x45,0x10,0x05,0x30,0x00,0x00, +/* */ +0x41,0x00,0x2F,0xE0,0x04,0x40,0x1F,0xF0,0x49,0x20,0x2F,0xE0,0x09,0x20,0x0F,0xE0, +0x01,0x00,0x2F,0xE0,0x41,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x1F,0xF0,0x50,0x10,0x3F,0xF0,0x10,0x80,0x13,0xE0,0x50,0x80,0x37,0x70,0x11,0x10, +0x12,0x20,0x37,0x70,0x52,0x20,0x26,0x60,0x00,0x00, +/* */ +0x04,0x40,0x44,0x70,0x3F,0x90,0x04,0x20,0x1F,0x70,0x55,0x50,0x35,0x50,0x1F,0x50, +0x04,0x50,0x2E,0x20,0x55,0x50,0x04,0x90,0x00,0x00, +/* */ +0x00,0xA0,0x5C,0x80,0x35,0xE0,0x15,0x40,0x1F,0x40,0x55,0xE0,0x35,0x40,0x1D,0x40, +0x15,0xE0,0x35,0x40,0x5D,0x40,0x15,0xE0,0x00,0x00, +/* */ +0x02,0x80,0x4F,0xE0,0x2A,0xA0,0x0F,0xE0,0x0A,0xA0,0x5F,0xF0,0x20,0x00,0x0F,0xE0, +0x08,0x20,0x2F,0xE0,0x44,0x40,0x1F,0xF0,0x00,0x00, +/* */ +0x43,0xC0,0x24,0x40,0x0F,0xF0,0x1A,0x20,0x4C,0x90,0x2B,0xE0,0x08,0x00,0x0B,0xE0, +0x08,0x00,0x2B,0xE0,0x4A,0x20,0x13,0xE0,0x00,0x00, +/* */ +0x01,0x00,0x5F,0xF0,0x20,0x00,0x0F,0xE0,0x0A,0xA0,0x4B,0xA0,0x28,0x20,0x0F,0xE0, +0x04,0x40,0x27,0xC0,0x44,0x40,0x1F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x5F,0xF0,0x32,0x40,0x1F,0xF0,0x12,0x80,0x57,0xE0,0x32,0xA0,0x1F,0xF0, +0x12,0xA0,0x37,0xE0,0x56,0xC0,0x2A,0xA0,0x00,0x00, +/* */ +0x4F,0xE0,0x21,0x00,0x1F,0xF0,0x11,0x10,0x4D,0x60,0x20,0x00,0x1F,0xF0,0x01,0x00, +0x1F,0xF0,0x32,0x90,0x52,0x90,0x10,0x30,0x00,0x00, +/* */ +0x05,0x40,0x47,0x60,0x29,0x40,0x0B,0xE0,0x19,0x40,0x4B,0xE0,0x28,0x80,0x0B,0xE0, +0x08,0x80,0x2F,0xF0,0x49,0x40,0x0A,0x20,0x00,0x00, +/* */ +0x02,0x00,0x47,0xC0,0x24,0x40,0x07,0xC0,0x04,0x40,0x4F,0xE0,0x29,0x20,0x0F,0xE0, +0x09,0x20,0x3F,0xF0,0x44,0x40,0x08,0x40,0x00,0x00, +/* */ +0x41,0x00,0x2F,0xF0,0x00,0x00,0x07,0xE0,0x44,0x20,0x2F,0xF0,0x08,0x10,0x07,0xE0, +0x03,0x00,0x2D,0xD0,0x42,0xA0,0x0D,0x90,0x00,0x00, +/* */ +0x0E,0xE0,0x4A,0xA0,0x26,0x60,0x0A,0xA0,0x08,0x40,0x5F,0xF0,0x28,0x80,0x0F,0xE0, +0x08,0x80,0x2F,0xE0,0x48,0x80,0x0F,0xF0,0x00,0x00, +/* */ +0x08,0x40,0x5C,0xA0,0x29,0x10,0x1C,0x00,0x15,0xB0,0x5C,0x90,0x36,0xD0,0x1D,0xB0, +0x0A,0xD0,0x3C,0x90,0x48,0x90,0x09,0xB0,0x00,0x00, +/* */ +0x04,0x00,0x46,0xE0,0x24,0xA0,0x0E,0xA0,0x1A,0x40,0x44,0xB0,0x2A,0x80,0x0E,0xE0, +0x02,0x80,0x2E,0xE0,0x42,0x80,0x1F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x4F,0xF0,0x24,0x00,0x07,0xE0,0x00,0x00,0x42,0x70,0x2F,0x50,0x05,0x50, +0x15,0x70,0x22,0x50,0x45,0x50,0x08,0x90,0x00,0x00, +/* */ +0x41,0x00,0x26,0xC0,0x18,0x30,0x0F,0xE0,0x4A,0xA0,0x2F,0xE0,0x00,0x00,0x0F,0xE0, +0x0A,0xA0,0x2F,0xE0,0x4A,0xA0,0x08,0x60,0x00,0x00, +/* */ +0x49,0x20,0x25,0x40,0x1F,0xF0,0x05,0x40,0x59,0x30,0x2F,0xE0,0x09,0x20,0x1F,0xF0, +0x04,0x40,0x3F,0xF0,0x44,0x40,0x08,0x20,0x00,0x00, +/* */ +0x4F,0x70,0x29,0x20,0x0F,0x40,0x09,0x70,0x4F,0x50,0x24,0x50,0x1F,0xD0,0x09,0x50, +0x0F,0x00,0x22,0x20,0x4A,0xA0,0x16,0x50,0x00,0x00, +/* */ +0x4F,0xE0,0x21,0x00,0x1F,0xF0,0x15,0x50,0x40,0x00,0x2A,0x70,0x1F,0x50,0x0A,0x70, +0x0E,0x50,0x24,0x70,0x5F,0x50,0x04,0xB0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x40,0x10,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x44,0x10,0x04,0x00,0x3F,0xC0,0x04,0x40,0x04,0x40, +0x08,0x40,0x08,0x50,0x10,0x50,0x60,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x00,0x00,0x7F,0xF0,0x08,0x00,0x10,0x00,0x3F,0xE0, +0x50,0x20,0x10,0x20,0x1F,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x44,0x10,0x02,0x00,0x02,0x40,0x28,0x80,0x29,0x20, +0x4A,0x10,0x0C,0x50,0x18,0x40,0x67,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x42,0x10,0x3F,0xE0,0x08,0x00,0x1F,0xE0,0x30,0x20,0x5F,0xE0, +0x10,0x20,0x1F,0xE0,0x10,0x20,0x10,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x3F,0xE0,0x20,0x00,0x2F,0xC0,0x20,0x00,0x3F,0xE0, +0x29,0x10,0x28,0xA0,0x2A,0x40,0x4C,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x44,0x10,0x2A,0xA0,0x47,0x90,0x00,0x00,0x3F,0xE0,0x22,0x20, +0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x10,0x40,0x2F,0xA0, +0x48,0x90,0x0F,0xE0,0x00,0x20,0x3E,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x12,0x40,0x3F,0xE0, +0x42,0x10,0x3F,0xE0,0x02,0x00,0x06,0x00,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x0B,0xE0,0x28,0x80,0x2B,0xE0,0x39,0x20,0x0B,0xF0, +0x78,0x00,0x2B,0xE0,0x2A,0x20,0x4B,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x42,0x10,0x3F,0xE0,0x08,0x80,0x5F,0xD0,0x30,0x60,0x5F,0xD0, +0x10,0x40,0x1F,0xC0,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x14,0x40,0x22,0x20, +0x5F,0xD0,0x05,0x20,0x18,0xC0,0x6C,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x40,0x10,0x3F,0xE0,0x25,0x20,0x7F,0xF0,0x10,0x40,0x1F,0xC0, +0x05,0x10,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x18,0xC0,0x2F,0xA0, +0x42,0x10,0x13,0xC0,0x2A,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x12,0x40,0x2F,0xA0, +0x40,0x10,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x20,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x10,0x00,0x10,0x00,0x10,0x00, +0x10,0x00,0x10,0x00,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x27,0xF0,0x10,0x40,0x02,0x40,0x04,0x40,0x77,0xF0,0x10,0xC0,0x11,0x40,0x12,0x40, +0x14,0x40,0x10,0xC0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x22,0x00,0x12,0x00,0x03,0xE0,0x04,0x80,0x70,0x80,0x10,0x80,0x17,0xF0,0x10,0x80, +0x10,0x80,0x10,0x80,0x28,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x17,0xF0,0x04,0x10,0x05,0xD0,0x75,0x50,0x15,0x50,0x15,0x50,0x15,0xD0, +0x14,0x10,0x14,0x30,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x22,0x00,0x12,0x00,0x03,0xF0,0x05,0x00,0x71,0x00,0x11,0xE0,0x11,0x00,0x11,0x00, +0x11,0xF0,0x11,0x00,0x29,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x42,0x00,0x27,0xF0,0x09,0x00,0x05,0x60,0x65,0xA0,0x2F,0x20,0x25,0x20,0x25,0x60, +0x24,0x10,0x23,0xF0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x22,0x00,0x12,0x00,0x03,0xF0,0x04,0x10,0x70,0x80,0x12,0xA0,0x12,0x90,0x14,0x90, +0x10,0x80,0x11,0x80,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x44,0x00,0x24,0x00,0x0F,0x70,0x05,0x50,0x65,0x50,0x25,0x50,0x25,0x50,0x29,0x50, +0x29,0x50,0x33,0x70,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x17,0xE0,0x00,0x40,0x00,0x80,0x73,0x60,0x14,0x10,0x13,0xE0,0x10,0x80, +0x10,0x80,0x17,0xF0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x12,0x40,0x04,0x20,0x0F,0xF0,0x70,0x10,0x17,0xE0,0x14,0x20,0x14,0x20, +0x14,0x20,0x17,0xE0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x40,0xE0,0x2F,0x00,0x08,0x00,0x08,0x00,0x6F,0xF0,0x28,0x00,0x2B,0xE0,0x2A,0x20, +0x2A,0x20,0x33,0xE0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x13,0xE0,0x06,0x20,0x01,0xC0,0x76,0x30,0x10,0x80,0x13,0xE0,0x10,0x80, +0x14,0x80,0x17,0xF0,0x28,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x41,0x20,0x3F,0xF0,0x01,0x00,0x0F,0xE0,0x69,0x20,0x2F,0xE0,0x29,0x20,0x2F,0xE0, +0x29,0x20,0x28,0x60,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x4F,0xE0,0x20,0x00,0x0E,0xE0,0x0A,0xA0,0x6A,0xA0,0x2E,0xE0,0x2A,0xA0,0x2A,0xA0, +0x2A,0xA0,0x2A,0xA0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x20,0xA0,0x10,0x80,0x07,0xF0,0x00,0x80,0x74,0x90,0x12,0xA0,0x11,0xC0,0x12,0xA0, +0x14,0x90,0x11,0x80,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x24,0x90,0x12,0xA0,0x00,0x80,0x07,0xF0,0x74,0x10,0x17,0xF0,0x14,0x10,0x17,0xF0, +0x14,0x10,0x14,0x30,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x42,0x40,0x2A,0x50,0x04,0x40,0x0A,0x40,0x62,0xF0,0x26,0x40,0x2A,0x40,0x22,0xA0, +0x22,0x90,0x2D,0x10,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x42,0x00,0x24,0x20,0x0F,0xF0,0x04,0x40,0x6A,0x20,0x33,0xD0,0x24,0x40,0x2A,0x40, +0x21,0x80,0x22,0x40,0x24,0x20,0x5F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x13,0xE0,0x00,0x80,0x07,0xF0,0x71,0x40,0x12,0x20,0x14,0x90,0x13,0xE0, +0x10,0x80,0x17,0xF0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x41,0xC0,0x2F,0x00,0x01,0x00,0x1F,0xF0,0x65,0x40,0x29,0x20,0x22,0x00,0x2F,0xF0, +0x24,0x20,0x23,0xC0,0x24,0x20,0x5F,0xF0,0x00,0x00, +/* */ +0x40,0x80,0x2F,0xF0,0x08,0x10,0x07,0xE0,0x64,0x20,0x27,0xE0,0x24,0x00,0x27,0xE0, +0x24,0x20,0x27,0xE0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x4F,0xE0,0x20,0x20,0x07,0xE0,0x00,0x20,0x6F,0xF0,0x21,0x00,0x29,0x20,0x25,0x40, +0x29,0x20,0x33,0x10,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x14,0x90,0x07,0xF0,0x00,0x00,0x77,0xF0,0x10,0x80,0x17,0xF0,0x15,0x50, +0x15,0x50,0x14,0x30,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x42,0x00,0x2F,0xE0,0x08,0x20,0x0F,0xE0,0x68,0x20,0x3F,0xF0,0x21,0x00,0x2F,0xE0, +0x21,0x00,0x3F,0xF0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x44,0x40,0x2F,0xF0,0x02,0x80,0x0F,0xE0,0x6A,0xA0,0x2C,0x60,0x28,0x20,0x2F,0xE0, +0x28,0x20,0x2F,0xE0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x4E,0xE0,0x2A,0x20,0x0A,0xE0,0x0E,0x00,0x68,0xE0,0x2E,0x20,0x28,0xA0,0x2E,0x40, +0x28,0xA0,0x29,0x10,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x44,0x40,0x2E,0x40,0x04,0xF0,0x0F,0x20,0x64,0xA0,0x3F,0xA0,0x28,0x40,0x2E,0x40, +0x2A,0xA0,0x37,0x20,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x44,0x40,0x2F,0xE0,0x04,0x40,0x1F,0xF0,0x61,0x00,0x2F,0xE0,0x29,0x20,0x2F,0xE0, +0x29,0x20,0x3F,0xF0,0x28,0x20,0x5F,0xF0,0x00,0x00, +/* */ +0x47,0xC0,0x24,0x40,0x07,0xC0,0x04,0x40,0x67,0xC0,0x20,0x00,0x2E,0xE0,0x2A,0xA0, +0x26,0x60,0x2A,0xA0,0x26,0x60,0x5F,0xF0,0x00,0x00, +/* */ +0x4D,0xE0,0x28,0xA0,0x0A,0xA0,0x0D,0x60,0x62,0x00,0x2F,0xE0,0x29,0x20,0x2F,0xE0, +0x29,0x20,0x2F,0xE0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x4F,0xF0,0x29,0x10,0x08,0x90,0x0F,0xF0,0x62,0x80,0x27,0xF0,0x24,0x80,0x2F,0xE0, +0x24,0x80,0x27,0xE0,0x24,0x80,0x5F,0xF0,0x00,0x00, +/* */ +0x49,0x20,0x25,0x40,0x0F,0xF0,0x05,0x40,0x69,0x20,0x24,0x40,0x26,0xF0,0x2A,0x40, +0x2B,0x40,0x35,0xF0,0x24,0x40,0x5F,0xF0,0x00,0x00, +/* */ +0x20,0xF0,0x10,0x80,0x07,0xF0,0x04,0x90,0x77,0xE0,0x14,0x90,0x17,0xF0,0x14,0x80, +0x17,0x50,0x14,0xE0,0x2B,0x50,0x47,0xF0,0x00,0x00, +/* */ +0x48,0xF0,0x2F,0x50,0x11,0x50,0x0F,0xB0,0x0A,0xA0,0x6F,0xF0,0x2A,0xA0,0x2F,0xA0, +0x2A,0xF0,0x31,0xA0,0x20,0x20,0x5F,0xF0,0x00,0x00, +/* */ +0x44,0x80,0x29,0xF0,0x17,0x10,0x0D,0xF0,0x09,0x10,0x75,0xF0,0x2A,0xA0,0x36,0xA0, +0x2A,0xA0,0x36,0xB0,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x41,0x00,0x2F,0xF0,0x0A,0x50,0x04,0x20,0x62,0x40,0x2F,0xF0,0x23,0x00,0x2D,0xA0, +0x22,0xC0,0x2D,0xA0,0x22,0x90,0x5F,0xF0,0x00,0x00, +/* */ +0x44,0x90,0x29,0x20,0x04,0x90,0x0F,0xF0,0x6A,0x50,0x29,0x90,0x2A,0x50,0x2F,0xF0, +0x29,0x20,0x2D,0xA0,0x29,0x10,0x5F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xE0,0x00,0x20,0x00,0x20,0x00,0x20,0x3F,0xE0,0x00,0x20,0x00,0x20, +0x00,0x20,0x00,0x20,0x7F,0xE0,0x00,0x20,0x00,0x00, +/* */ +0x10,0x40,0x7D,0xF0,0x10,0x40,0x7D,0xF0,0x10,0x40,0x7D,0xF0,0x10,0x40,0x3F,0xE0, +0x00,0x20,0x1F,0xE0,0x00,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x08,0x00,0x0F,0xC0,0x10,0x40,0x1F,0x80,0x00,0x80,0x7F,0xF0,0x0C,0x20,0x32,0x40, +0x0D,0x80,0x33,0x40,0x0D,0x30,0x73,0x00,0x00,0x00, +/* */ +0x08,0x00,0x0F,0xC0,0x10,0x40,0x1F,0x80,0x00,0x80,0x7F,0xF0,0x24,0x40,0x27,0x50, +0x3A,0x60,0x27,0x40,0x2A,0x50,0x35,0x30,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x20,0x10,0x3F,0xF0,0x22,0x00,0x22,0x00,0x2F,0xC0,0x22,0x40, +0x22,0x40,0x22,0x40,0x24,0x50,0x48,0x30,0x00,0x00, +/* */ +0x3D,0xF0,0x25,0x10,0x25,0x10,0x25,0x10,0x25,0xF0,0x3C,0x00,0x28,0xA0,0x28,0x90, +0x25,0x10,0x22,0x00,0x21,0x00,0x40,0xF0,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x24,0x80,0x28,0x80,0x33,0xF0,0x24,0x80,0x2B,0xE0, +0x39,0x20,0x29,0x40,0x28,0xC0,0x4B,0x30,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x00,0x2E,0xF0,0x2A,0x20,0x2D,0xE0,0x2B,0x60, +0x2B,0x60,0x2D,0xE0,0x28,0x20,0x48,0x60,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x80,0x2F,0xE0,0x21,0x00,0x23,0x00,0x3C,0xE0, +0x24,0x20,0x3E,0xF0,0x28,0x40,0x58,0xC0,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x24,0x40,0x29,0x70,0x35,0x40,0x2B,0xF0,0x38,0x00, +0x28,0x40,0x29,0x70,0x29,0x40,0x4A,0xF0,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x2A,0xA0,0x33,0xF0,0x25,0xA0,0x2A,0x90,0x38,0x80, +0x2B,0xF0,0x29,0x20,0x28,0xC0,0x4B,0x30,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x24,0x40,0x2F,0xE0,0x21,0x00,0x2A,0xA0,0x24,0x40, +0x2E,0xF0,0x24,0x40,0x3E,0xF0,0x48,0x40,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x08,0x40,0x08,0x80,0x79,0x40,0x42,0x20,0x44,0x10,0x7B,0xE0, +0x08,0x80,0x08,0x80,0x08,0x80,0x37,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x7D,0xE0,0x25,0x20,0x18,0xC0,0x65,0x30,0x3F,0xE0,0x00,0x20,0x3F,0xE0, +0x20,0x00,0x3F,0xF0,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x12,0x20,0x12,0x20,0x73,0xE0,0x42,0x20,0x43,0xE0,0x72,0x20, +0x12,0x30,0x17,0xE0,0x10,0x20,0x60,0x20,0x00,0x00, +/* */ +0x14,0x80,0x14,0xE0,0x7F,0x20,0x15,0x40,0x7F,0xF0,0x55,0x50,0x7F,0x50,0x15,0xF0, +0x15,0x00,0x27,0x10,0x25,0x10,0x44,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x77,0x70,0x12,0x10,0x17,0x10,0x75,0x70,0x45,0x40,0x47,0x40,0x75,0x70, +0x15,0x10,0x15,0x10,0x17,0x10,0x65,0x60,0x00,0x00, +/* */ +0x6A,0xB0,0x22,0x10,0x6F,0xB0,0x47,0x20,0x6A,0xB0,0x22,0x10,0x7F,0xF0,0x10,0x40, +0x7F,0xF0,0x48,0x90,0x5F,0xD0,0x42,0x30,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x7F,0xF0,0x02,0x10, +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x11,0xF0,0x7A,0x10,0x2C,0x10,0x29,0x10,0x28,0x90,0x48,0x90, +0x28,0x10,0x10,0x10,0x28,0x10,0x44,0x60,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x20,0x78,0x20,0x28,0x20,0x2B,0xE0,0x2A,0x00,0x4A,0x00, +0x2A,0x00,0x12,0x10,0x2A,0x10,0x45,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x11,0x20,0x79,0x20,0x29,0x20,0x2B,0xF0,0x29,0x20,0x49,0x20, +0x29,0x20,0x12,0x20,0x2A,0x20,0x44,0x20,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x80,0x78,0x80,0x28,0x80,0x2F,0xF0,0x29,0x40,0x49,0x40, +0x29,0x40,0x12,0x50,0x2A,0x50,0x44,0x30,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x00,0x7A,0x90,0x2A,0x50,0x2A,0x50,0x2A,0x20,0x4A,0x20, +0x2A,0x50,0x12,0x90,0x2A,0x00,0x4B,0xF0,0x00,0x00, +/* */ +0x12,0x40,0x12,0x40,0x12,0x50,0x7A,0x50,0x2B,0xE0,0x2A,0x40,0x2A,0x40,0x4A,0x40, +0x2A,0x40,0x12,0xD0,0x2B,0x50,0x4A,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0x40,0x79,0x40,0x2A,0x20,0x2C,0x90,0x28,0x00,0x4B,0xE0, +0x28,0x20,0x10,0x40,0x28,0x40,0x44,0x80,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0xE0,0x7B,0x80,0x2A,0x80,0x2A,0x80,0x2B,0xF0,0x48,0x90, +0x29,0x90,0x12,0xB0,0x2C,0x80,0x48,0x80,0x00,0x00, +/* */ +0x10,0x80,0x12,0x80,0x11,0x80,0x7B,0xF0,0x28,0x90,0x28,0x90,0x29,0x50,0x49,0x50, +0x29,0x50,0x12,0x10,0x2A,0x10,0x44,0x60,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x11,0x20,0x79,0x20,0x29,0x20,0x29,0x20,0x2F,0xE0,0x4A,0x20, +0x2A,0x20,0x12,0x20,0x2A,0x20,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x20,0x79,0x40,0x28,0x80,0x2F,0xF0,0x28,0x90,0x48,0x80, +0x28,0x80,0x10,0x80,0x28,0x80,0x45,0x80,0x00,0x00, +/* */ +0x10,0x20,0x11,0x20,0x10,0xA0,0x7A,0x20,0x2A,0x20,0x2A,0x20,0x2A,0xA0,0x4B,0x20, +0x2A,0x20,0x10,0x50,0x28,0x90,0x49,0x10,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x7A,0x20,0x2B,0xE0,0x2A,0x20,0x2A,0x20,0x4A,0x20, +0x2B,0xE0,0x10,0x00,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0x80,0x7B,0xF0,0x2A,0x90,0x2A,0x90,0x2B,0xF0,0x4A,0x90, +0x2A,0x90,0x12,0x90,0x2B,0xF0,0x4A,0x10,0x00,0x00, +/* */ +0x20,0x00,0x27,0x70,0x25,0x50,0x75,0x50,0x55,0x50,0x5F,0xF0,0x55,0x50,0x55,0x50, +0x55,0x50,0x25,0x50,0x55,0x50,0x4B,0xB0,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x3F,0xE0,0x10,0x40,0x08,0x80,0x7F,0xF0,0x04,0x00,0x7F,0xF0, +0x08,0x40,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x11,0x40,0x79,0x40,0x29,0x40,0x2D,0x50,0x2B,0x60,0x49,0x40, +0x29,0x40,0x11,0x40,0x29,0x40,0x47,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x17,0x00,0x79,0x50,0x28,0x90,0x2B,0x70,0x28,0x00,0x4F,0xF0, +0x29,0x40,0x11,0x40,0x2A,0x50,0x44,0x30,0x00,0x00, +/* */ +0x10,0x80,0x12,0x80,0x13,0xE0,0x7C,0x80,0x28,0x80,0x2F,0xF0,0x28,0x80,0x49,0xC0, +0x2A,0xA0,0x14,0x90,0x28,0x80,0x44,0x80,0x00,0x00, +/* */ +0x04,0x00,0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x48,0x90,0x04,0x00,0x7F,0xF0, +0x08,0x40,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x13,0xF0,0x78,0x00,0x29,0x40,0x2A,0x20,0x2D,0x50,0x49,0x40, +0x29,0x40,0x10,0x80,0x29,0x40,0x4A,0x30,0x00,0x00, +/* */ +0x12,0x10,0x11,0x20,0x10,0x00,0x7B,0xF0,0x29,0x20,0x29,0x20,0x29,0x20,0x4F,0xF0, +0x29,0x20,0x11,0x20,0x29,0x20,0x4A,0x20,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7A,0x10,0x28,0x60,0x2B,0x80,0x28,0x80,0x48,0xF0, +0x2B,0x80,0x10,0x90,0x28,0x90,0x44,0x70,0x00,0x00, +/* */ +0x13,0xE0,0x12,0xA0,0x12,0xA0,0x7B,0xE0,0x2A,0xA0,0x2A,0xA0,0x2B,0xE0,0x48,0x80, +0x2B,0xE0,0x10,0x80,0x28,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x13,0xF0,0x12,0x90,0x7B,0xF0,0x2A,0x90,0x2B,0xF0,0x28,0x00,0x4B,0xF0, +0x29,0x00,0x11,0xF0,0x28,0x10,0x44,0x60,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x22,0x20,0x73,0xE0,0x50,0x80,0x57,0xF0,0x54,0x90,0x54,0x90, +0x55,0x50,0x26,0x30,0x54,0x10,0x44,0x30,0x00,0x00, +/* */ +0x24,0x00,0x22,0xF0,0x24,0x10,0x74,0x90,0x57,0xF0,0x54,0x90,0x55,0xD0,0x56,0xB0, +0x54,0x90,0x24,0x90,0x54,0x10,0x44,0x30,0x00,0x00, +/* */ +0x10,0x80,0x4A,0xA0,0x22,0x90,0x04,0x80,0x20,0xE0,0x4F,0x00,0x04,0x00,0x7F,0xF0, +0x08,0x40,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x13,0xE0,0x78,0xA0,0x2B,0xE0,0x2A,0x80,0x2B,0xF0,0x48,0x90, +0x29,0x90,0x12,0xB0,0x2C,0x80,0x44,0x80,0x00,0x00, +/* */ +0x13,0xF0,0x12,0x10,0x13,0xF0,0x7A,0x00,0x2A,0x30,0x2B,0xC0,0x2A,0x70,0x4B,0xC0, +0x2A,0x70,0x13,0xC0,0x2A,0x50,0x44,0x30,0x00,0x00, +/* */ +0x20,0x00,0x27,0x70,0x25,0x20,0x75,0xE0,0x56,0xA0,0x56,0xA0,0x55,0xA0,0x55,0xE0, +0x55,0x20,0x26,0x20,0x54,0x20,0x44,0x60,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x7B,0xE0,0x28,0x80,0x2F,0xF0,0x2A,0x20,0x4B,0xE0, +0x2A,0x20,0x13,0xE0,0x2A,0x20,0x4A,0x60,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x78,0x80,0x2B,0xE0,0x28,0x80,0x2F,0xF0,0x49,0x40, +0x2B,0x50,0x15,0x20,0x29,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x10,0x80,0x13,0xF0,0x10,0x80,0x7B,0xE0,0x28,0xA0,0x2F,0xF0,0x28,0xA0,0x4B,0xE0, +0x28,0x80,0x12,0xE0,0x2A,0x80,0x45,0xF0,0x00,0x00, +/* */ +0x11,0xE0,0x11,0x20,0x11,0xE0,0x79,0x20,0x29,0xE0,0x28,0x00,0x2B,0xF0,0x4A,0x10, +0x2B,0xF0,0x12,0x10,0x2B,0xF0,0x4A,0x10,0x00,0x00, +/* */ +0x10,0x80,0x11,0x00,0x13,0xF0,0x7A,0x50,0x2B,0xF0,0x2A,0x90,0x2B,0xF0,0x49,0x00, +0x2A,0x40,0x17,0xF0,0x28,0x40,0x44,0x40,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x13,0xE0,0x7A,0xA0,0x2B,0xE0,0x2A,0xA0,0x2A,0xA0,0x4B,0xE0, +0x28,0x80,0x17,0xF0,0x28,0x80,0x44,0x80,0x00,0x00, +/* */ +0x10,0x00,0x7D,0xE0,0x25,0x20,0x18,0xC0,0x65,0x30,0x02,0x00,0x3F,0xE0,0x25,0x20, +0x28,0xA0,0x22,0x20,0x25,0x20,0x20,0x60,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x23,0xE0,0x72,0x20,0x53,0xE0,0x50,0x00,0x57,0xF0,0x55,0x50, +0x55,0x50,0x25,0x50,0x55,0x50,0x4F,0xF0,0x00,0x00, +/* */ +0x20,0x30,0x27,0xC0,0x25,0x10,0x72,0xA0,0x57,0xF0,0x50,0x80,0x57,0xF0,0x51,0x00, +0x53,0xE0,0x25,0x20,0x50,0xC0,0x47,0x30,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x00,0x7B,0xE0,0x2A,0x20,0x2B,0xE0,0x28,0x00,0x4F,0xF0, +0x2C,0x10,0x13,0xE0,0x28,0x80,0x49,0x80,0x00,0x00, +/* */ +0x3C,0x80,0x14,0xF0,0x09,0x20,0x7E,0xA0,0x1A,0x40,0x28,0xA0,0x59,0x10,0x04,0x00, +0x7F,0xF0,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x11,0x40,0x13,0xE0,0x11,0x40,0x7F,0xF0,0x28,0x80,0x2B,0xE0,0x2A,0xA0,0x4B,0xE0, +0x2A,0xA0,0x17,0xF0,0x2A,0x20,0x4A,0x60,0x00,0x00, +/* */ +0x11,0x40,0x17,0xF0,0x11,0x40,0x7B,0xE0,0x2A,0x20,0x2B,0xE0,0x2A,0x20,0x4B,0xE0, +0x28,0x80,0x17,0xF0,0x29,0x40,0x4A,0x30,0x00,0x00, +/* */ +0x10,0x80,0x13,0xF0,0x13,0x50,0x7A,0x90,0x2B,0x50,0x2B,0xF0,0x28,0x00,0x4A,0x50, +0x2B,0x60,0x12,0x40,0x2A,0x50,0x4B,0x30,0x00,0x00, +/* */ +0x20,0x70,0x27,0x80,0x25,0x10,0x72,0xA0,0x5F,0xF0,0x59,0x10,0x57,0xE0,0x52,0x00, +0x53,0xE0,0x25,0x20,0x58,0xC0,0x43,0x30,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x50,0x7B,0x80,0x2A,0x00,0x2B,0xF0,0x2A,0x40,0x4A,0x40, +0x2F,0xF0,0x10,0x00,0x2A,0x40,0x44,0x20,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x17,0xF0,0x78,0x80,0x2F,0xF0,0x28,0x00,0x28,0x80,0x4B,0xE0, +0x2A,0xA0,0x13,0xE0,0x28,0x90,0x4F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x3C,0xF0,0x09,0x20,0x7E,0xA0,0x1C,0x40,0x2A,0xA0,0x7F,0xF0,0x22,0x00, +0x3F,0xF0,0x24,0x40,0x23,0x80,0x5C,0x70,0x00,0x00, +/* */ +0x27,0xF0,0x20,0x80,0x22,0xE0,0x72,0x80,0x5F,0xF0,0x52,0x00,0x53,0xE0,0x54,0x00, +0x57,0xF0,0x20,0x10,0x55,0x50,0x4A,0xB0,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x22,0xA0,0x77,0xF0,0x50,0x00,0x57,0xF0,0x54,0x10,0x55,0xD0, +0x55,0x50,0x25,0xD0,0x54,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x27,0xF0,0x21,0x40,0x27,0xF0,0x75,0x50,0x57,0xF0,0x50,0x00,0x53,0xE0,0x50,0x00, +0x57,0xF0,0x20,0x80,0x52,0xA0,0x45,0x90,0x00,0x00, +/* */ +0x24,0x90,0x22,0xA0,0x27,0xF0,0x74,0x10,0x53,0xE0,0x52,0x20,0x53,0xE0,0x50,0x80, +0x57,0xF0,0x24,0x90,0x54,0xB0,0x40,0x80,0x00,0x00, +/* */ +0x13,0xF0,0x12,0x50,0x13,0xF0,0x7A,0x50,0x2B,0xF0,0x29,0x20,0x2B,0xC0,0x48,0x90, +0x2B,0xF0,0x10,0x80,0x2A,0xA0,0x45,0x90,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x11,0x40,0x7F,0xF0,0x2A,0x20,0x2B,0xE0,0x2A,0x20,0x4B,0xE0, +0x28,0x80,0x17,0xF0,0x28,0x80,0x44,0x80,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x7B,0xE0,0x28,0x00,0x2B,0xE0,0x2A,0x20,0x4B,0xE0, +0x29,0x40,0x17,0xF0,0x2A,0x20,0x4B,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x20,0x00,0x77,0xF0,0x55,0x50,0x55,0xD0,0x54,0x10,0x57,0xF0, +0x52,0x20,0x23,0xE0,0x52,0x20,0x47,0xF0,0x00,0x00, +/* */ +0x3C,0x40,0x25,0xF0,0x3C,0xA0,0x21,0xF0,0x3C,0x40,0x54,0xE0,0x1C,0x40,0x04,0x00, +0x7F,0xF0,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x7A,0xF0,0x52,0x50,0x7F,0xF0,0x55,0x50,0x55,0x50,0x7D,0xF0,0x25,0x40,0x7D,0xF0, +0x2A,0x50,0x2A,0x50,0x2D,0x50,0x58,0xB0,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x25,0x20,0x77,0xF0,0x55,0x60,0x57,0xB0,0x55,0x20,0x54,0x80, +0x55,0x20,0x26,0x40,0x54,0x90,0x49,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x10,0x80,0x17,0xF0,0x7C,0x90,0x2A,0xA0,0x29,0x00,0x29,0x70,0x4F,0xD0, +0x29,0x70,0x13,0xD0,0x2D,0x70,0x49,0x50,0x00,0x00, +/* */ +0x7F,0xC0,0x08,0x40,0x08,0x80,0x10,0xF0,0x10,0x10,0x20,0x10,0x42,0x60,0x02,0x00, +0x12,0x40,0x22,0x20,0x42,0x10,0x06,0x00,0x00,0x00, +/* */ +0x02,0x00,0x12,0x40,0x22,0x20,0x42,0x10,0x08,0x00,0x7F,0xF0,0x10,0x40,0x22,0x20, +0x42,0x10,0x12,0x40,0x22,0x20,0x06,0x00,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x12,0x20,0x09,0x40,0x00,0x00,0x1F,0xC0,0x00,0x80,0x01,0x00, +0x7F,0xF0,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x10,0x00,0x7D,0xE0,0x25,0x20,0x18,0xC0,0x65,0x30,0x00,0x00,0x1F,0x80,0x01,0x00, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x14,0xA0,0x29,0x40,0x14,0xA0,0x3D,0xE0,0x00,0x00,0x1F,0x80, +0x01,0x00,0x7F,0xF0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xC0,0x00,0x40,0x00,0x80,0x01,0x00,0x02,0x30,0x03,0xC0,0x0E,0x00, +0x72,0x00,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xC0,0x00,0x40,0x00,0x80,0x41,0x00,0x22,0x00,0x1A,0x00,0x06,0x00, +0x03,0x80,0x02,0x70,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x01,0x00,0x79,0x00,0x0B,0xF0,0x0C,0x10,0x13,0xD0,0x12,0x50,0x1A,0x50,0x73,0xD0, +0x12,0x30,0x12,0x00,0x12,0x10,0x31,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x73,0xE0,0x12,0x20,0x52,0x20,0x53,0xE0,0x52,0x20,0x7A,0x20,0x0B,0xE0, +0x1A,0x20,0x6A,0x20,0x0A,0x20,0x37,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x15,0x50,0x55,0x50,0x55,0x50,0x45,0x50,0x75,0x50,0x15,0x70, +0x36,0x10,0x54,0x10,0x17,0xF0,0x64,0x10,0x00,0x00, +/* */ +0x01,0x20,0x71,0x20,0x12,0x20,0x52,0xF0,0x56,0x20,0x52,0x20,0x7A,0xA0,0x0A,0x60, +0x1A,0x20,0x6A,0x20,0x0A,0x20,0x32,0x60,0x00,0x00, +/* */ +0x01,0x00,0x71,0xE0,0x12,0x20,0x54,0x40,0x53,0xF0,0x50,0x10,0x78,0x10,0x0B,0xF0, +0x18,0x10,0x68,0x10,0x0B,0xF0,0x30,0x10,0x00,0x00, +/* */ +0x77,0xE0,0x12,0x20,0x51,0x40,0x50,0x80,0x51,0x40,0x7A,0xB0,0x08,0x80,0x1B,0xE0, +0x68,0x80,0x0F,0xF0,0x08,0x80,0x30,0x80,0x00,0x00, +/* */ +0x10,0x00,0x7D,0xE0,0x25,0x20,0x18,0xC0,0x65,0x30,0x00,0x00,0x3F,0xC0,0x10,0x40, +0x1F,0xF0,0x00,0x10,0x7F,0x10,0x00,0x60,0x00,0x00, +/* */ +0x00,0x80,0x70,0x80,0x11,0x00,0x52,0x20,0x57,0xF0,0x50,0x10,0x7B,0xE0,0x0A,0x20, +0x1A,0x20,0x6A,0x20,0x0B,0xE0,0x32,0x20,0x00,0x00, +/* */ +0x01,0x00,0x71,0xE0,0x17,0x00,0x51,0x50,0x50,0x90,0x53,0x70,0x78,0x00,0x0F,0xF0, +0x19,0x40,0x69,0x40,0x0A,0x50,0x34,0x30,0x00,0x00, +/* */ +0x01,0x40,0x72,0x50,0x16,0x60,0x5A,0x40,0x52,0xD0,0x53,0x50,0x7A,0x30,0x08,0x80, +0x1F,0xF0,0x68,0x80,0x08,0x80,0x30,0x80,0x00,0x00, +/* */ +0x02,0x10,0x71,0x20,0x10,0x00,0x53,0xF0,0x51,0x20,0x51,0x20,0x79,0x20,0x0B,0xF0, +0x19,0x20,0x69,0x20,0x09,0x20,0x32,0x20,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x10,0x00,0x57,0x70,0x55,0x50,0x45,0x50,0x75,0x50,0x17,0x70, +0x35,0x50,0x55,0x50,0x15,0x50,0x65,0x50,0x00,0x00, +/* */ +0x02,0x20,0x72,0x20,0x17,0xF0,0x52,0x20,0x53,0xE0,0x52,0x20,0x7B,0xE0,0x0A,0x20, +0x1F,0xF0,0x68,0x00,0x0A,0x20,0x34,0x10,0x00,0x00, +/* */ +0x73,0xE0,0x12,0xA0,0x53,0xE0,0x52,0xA0,0x53,0xE0,0x78,0x80,0x0F,0xF0,0x18,0x80, +0x69,0xC0,0x0A,0xA0,0x0C,0x90,0x30,0x80,0x00,0x00, +/* */ +0x01,0x40,0x71,0x20,0x13,0xF0,0x52,0x40,0x56,0x40,0x53,0xF0,0x7A,0x40,0x0A,0x40, +0x1B,0xF0,0x6A,0x40,0x0A,0x40,0x33,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x71,0x20,0x13,0xF0,0x50,0x80,0x57,0xF0,0x51,0x40,0x7A,0xA0,0x0D,0x50, +0x18,0x80,0x6B,0x20,0x08,0xC0,0x37,0x00,0x00,0x00, +/* */ +0x7A,0xE0,0x4A,0x80,0x57,0xF0,0x48,0x00,0x4A,0xA0,0x74,0xC0,0x43,0x00,0x3F,0xC0, +0x10,0x40,0x1F,0xF0,0x00,0x10,0x7F,0x60,0x00,0x00, +/* */ +0x3C,0x80,0x14,0xF0,0x09,0xA0,0x7E,0x40,0x2A,0xA0,0x59,0x10,0x00,0x00,0x3F,0xC0, +0x10,0x40,0x1F,0xF0,0x00,0x10,0x7F,0x60,0x00,0x00, +/* */ +0x08,0x80,0x3E,0xF0,0x09,0x20,0x7E,0xA0,0x10,0x40,0x3C,0xA0,0x45,0x10,0x3F,0xC0, +0x10,0x40,0x1F,0xF0,0x00,0x10,0x7F,0x60,0x00,0x00, +/* */ +0x01,0x00,0x76,0xF0,0x14,0x50,0x55,0x50,0x56,0xB0,0x41,0x00,0x77,0xF0,0x14,0x90, +0x37,0xF0,0x54,0x90,0x17,0xF0,0x64,0x10,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x14,0x10,0x57,0xF0,0x54,0x00,0x47,0xB0,0x74,0x90,0x16,0xD0, +0x35,0xB0,0x56,0xD0,0x14,0x90,0x69,0xB0,0x00,0x00, +/* */ +0x77,0xF0,0x11,0x40,0x57,0xF0,0x55,0x50,0x57,0xF0,0x78,0x00,0x0B,0xE0,0x18,0x00, +0x6F,0xF0,0x08,0x80,0x0A,0xA0,0x35,0x90,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x15,0x10,0x55,0xD0,0x57,0x50,0x44,0x90,0x75,0x50,0x17,0xF0, +0x30,0x80,0x55,0x20,0x15,0x50,0x68,0xD0,0x00,0x00, +/* */ +0x07,0xF0,0x74,0x10,0x17,0xF0,0x54,0x40,0x57,0xF0,0x44,0x80,0x75,0xB0,0x14,0x90, +0x35,0x20,0x57,0xF0,0x15,0x20,0x6B,0x60,0x00,0x00, +/* */ +0x01,0x50,0x77,0x60,0x11,0x50,0x56,0x30,0x53,0xE0,0x52,0xA0,0x7B,0xE0,0x09,0x40, +0x1B,0xE0,0x69,0x40,0x0F,0xF0,0x32,0x20,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x10,0x00,0x57,0x70,0x55,0x50,0x47,0x70,0x71,0x40,0x17,0xF0, +0x31,0x40,0x57,0xF0,0x13,0x20,0x65,0x90,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x20,0x00,0x48,0x00,0x70,0x00,0x10,0x00,0x20,0x00,0x78,0x00, +0x00,0x00,0x18,0x00,0x60,0x00,0x00,0x00,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x20,0x80,0x48,0x80,0x70,0x80,0x17,0xF0,0x20,0x80,0x78,0x80, +0x00,0x80,0x18,0x80,0x60,0x80,0x03,0x80,0x00,0x00, +/* */ +0x10,0x20,0x10,0x20,0x20,0x20,0x4B,0xF0,0x70,0x20,0x10,0x20,0x21,0x20,0x78,0xA0, +0x00,0xA0,0x18,0x20,0x60,0x20,0x00,0xE0,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x21,0xF0,0x4A,0x00,0x74,0x00,0x13,0xE0,0x20,0x40,0x78,0x80, +0x01,0x00,0x1A,0x10,0x62,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x21,0x00,0x4B,0xC0,0x71,0x40,0x11,0x40,0x23,0x40,0x79,0x40, +0x01,0x50,0x1A,0xD0,0x62,0x30,0x04,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x23,0xF0,0x4A,0x00,0x72,0x00,0x12,0x00,0x22,0x00,0x7A,0x00, +0x02,0x00,0x1A,0x00,0x62,0x00,0x04,0x00,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x20,0x00,0x48,0x00,0x70,0x00,0x17,0xF0,0x20,0x80,0x79,0x00, +0x01,0x00,0x1A,0x20,0x67,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x14,0x80,0x14,0x80,0x24,0x90,0x4C,0x90,0x77,0xA0,0x14,0xC0,0x24,0x80,0x74,0x80, +0x04,0x80,0x15,0x90,0x66,0x90,0x04,0x70,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x20,0x20,0x49,0x40,0x70,0x80,0x17,0xF0,0x20,0x90,0x78,0x80, +0x00,0x80,0x18,0x80,0x60,0x80,0x03,0x80,0x00,0x00, +/* */ +0x12,0x20,0x12,0x20,0x27,0xF0,0x4A,0x20,0x72,0x20,0x12,0x20,0x23,0xE0,0x7A,0x20, +0x02,0x20,0x1A,0x20,0x63,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x10,0xA0,0x12,0xA0,0x22,0xA0,0x4A,0xA0,0x77,0xF0,0x12,0xA0,0x22,0xA0,0x7A,0xA0, +0x02,0xE0,0x1A,0x00,0x62,0x00,0x03,0xF0,0x00,0x00, +/* */ +0x11,0x40,0x11,0x20,0x21,0x00,0x4B,0xF0,0x71,0x00,0x11,0xE0,0x22,0xA0,0x7A,0xA0, +0x02,0xA0,0x1A,0x40,0x64,0xA0,0x01,0x10,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x22,0x20,0x4C,0x40,0x73,0xF0,0x10,0x10,0x20,0x10,0x7B,0xF0, +0x00,0x10,0x18,0x10,0x63,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x11,0x40,0x17,0xF0,0x21,0x50,0x49,0x50,0x77,0xF0,0x15,0x40,0x25,0x40,0x77,0xF0, +0x01,0x50,0x19,0x50,0x62,0x70,0x04,0x40,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x44,0x90,0x54,0x90,0x64,0x90,0x27,0xF0,0x40,0x80,0x74,0x90, +0x04,0x90,0x14,0x90,0x67,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x21,0x00,0x4A,0x20,0x77,0xF0,0x10,0x10,0x23,0xE0,0x7A,0x20, +0x02,0x20,0x1A,0x20,0x63,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x21,0x40,0x4A,0x20,0x75,0xD0,0x10,0x00,0x27,0xF0,0x7A,0x00, +0x03,0xE0,0x18,0x20,0x60,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x11,0x00,0x12,0x70,0x24,0x00,0x49,0x00,0x72,0xF0,0x16,0x20,0x22,0x20,0x7A,0x20, +0x02,0x20,0x1A,0x20,0x62,0x20,0x02,0xE0,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x23,0x20,0x48,0xC0,0x73,0x30,0x10,0x80,0x23,0xE0,0x78,0x80, +0x02,0x80,0x1B,0xF0,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x20,0x80,0x4F,0xF0,0x74,0x90,0x17,0xF0,0x24,0x90,0x77,0xF0, +0x02,0x80,0x11,0x00,0x62,0x80,0x04,0x70,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x22,0xA0,0x48,0x80,0x77,0xF0,0x14,0x10,0x27,0xF0,0x74,0x10, +0x07,0xF0,0x14,0x10,0x64,0x10,0x04,0x30,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x27,0xE0,0x48,0xA0,0x77,0xE0,0x14,0x80,0x27,0xF0,0x70,0x90, +0x01,0x90,0x12,0xB0,0x64,0x80,0x00,0x80,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x20,0x80,0x4F,0xF0,0x72,0x20,0x15,0x10,0x21,0xE0,0x72,0x20, +0x05,0x40,0x10,0x80,0x61,0x40,0x06,0x30,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x21,0x40,0x4A,0x20,0x77,0xF0,0x10,0x20,0x23,0xA0,0x7A,0xA0, +0x02,0xA0,0x1B,0xA0,0x62,0x20,0x00,0x60,0x00,0x00, +/* */ +0x11,0x40,0x11,0x40,0x27,0x70,0x49,0x40,0x71,0x40,0x17,0x70,0x21,0x40,0x79,0x40, +0x07,0x70,0x19,0x40,0x61,0x40,0x01,0x40,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x22,0xA0,0x48,0x80,0x77,0xF0,0x14,0x10,0x25,0xD0,0x75,0x50, +0x05,0x50,0x15,0xD0,0x64,0x10,0x04,0x30,0x00,0x00, +/* */ +0x27,0xE0,0x24,0x20,0x47,0xE0,0x54,0x20,0x67,0xE0,0x20,0x00,0x44,0x40,0x74,0x50, +0x07,0x60,0x14,0x40,0x65,0x50,0x06,0x30,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x20,0x80,0x4F,0xF0,0x72,0xA0,0x12,0xA0,0x27,0xF0,0x72,0xA0, +0x02,0xA0,0x17,0xF0,0x60,0x80,0x03,0xE0,0x00,0x00, +/* */ +0x20,0x30,0x2F,0xC0,0x45,0x10,0x52,0xA0,0x6F,0xF0,0x28,0x10,0x47,0xE0,0x74,0x20, +0x02,0x40,0x11,0x80,0x62,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x24,0x40,0x27,0x40,0x49,0x60,0x55,0x50,0x62,0x40,0x25,0xF0,0x48,0x00,0x77,0xE0, +0x04,0x20,0x14,0x20,0x67,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x12,0xA0,0x10,0x80,0x23,0xE0,0x49,0x00,0x77,0xF0,0x12,0x20,0x24,0x10,0x7B,0xE0, +0x02,0x20,0x1A,0x60,0x62,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x27,0xF0,0x4C,0x10,0x73,0xE0,0x12,0x20,0x23,0xE0,0x7A,0x00, +0x03,0xF0,0x1A,0x10,0x63,0xF0,0x02,0x10,0x00,0x00, +/* */ +0x11,0x50,0x12,0xA0,0x25,0x40,0x4A,0xA0,0x71,0x50,0x10,0x00,0x27,0xF0,0x74,0x90, +0x07,0xF0,0x1C,0x90,0x67,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x22,0x20,0x4B,0xE0,0x70,0x80,0x17,0xF0,0x24,0x90,0x77,0xF0, +0x00,0x80,0x17,0xF0,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x24,0x00,0x24,0xF0,0x44,0x90,0x5F,0x90,0x64,0xF0,0x26,0x90,0x4D,0x90,0x74,0xF0, +0x04,0x90,0x14,0x90,0x64,0xF0,0x04,0x90,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x23,0xE0,0x4A,0x20,0x73,0xE0,0x10,0x00,0x27,0xF0,0x78,0x80, +0x02,0xE0,0x1A,0x80,0x62,0x80,0x05,0xF0,0x00,0x00, +/* */ +0x20,0x40,0x2E,0x40,0x4A,0x60,0x5A,0xD0,0x6F,0x50,0x2A,0x40,0x4A,0x50,0x6E,0x10, +0x0A,0x20,0x1E,0x40,0x68,0x80,0x01,0x00,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x44,0x90,0x57,0xF0,0x60,0x80,0x2F,0xF0,0x40,0x00,0x77,0xF0, +0x04,0x90,0x14,0x90,0x61,0x60,0x06,0x10,0x00,0x00, +/* */ +0x27,0xF0,0x24,0x90,0x44,0x90,0x57,0xF0,0x64,0x90,0x24,0x90,0x47,0xF0,0x71,0x00, +0x04,0xA0,0x15,0x10,0x69,0x50,0x00,0xC0,0x00,0x00, +/* */ +0x22,0x00,0x23,0xF0,0x44,0x40,0x55,0xF0,0x6D,0x50,0x25,0xF0,0x45,0x50,0x75,0xF0, +0x04,0x40,0x15,0x40,0x64,0x80,0x05,0x70,0x00,0x00, +/* */ +0x22,0x00,0x22,0xE0,0x44,0x20,0x55,0xF0,0x6C,0x80,0x24,0xF0,0x45,0x40,0x74,0x40, +0x05,0xF0,0x14,0x40,0x64,0xA0,0x05,0x10,0x00,0x00, +/* */ +0x14,0x20,0x12,0x40,0x20,0xF0,0x48,0x90,0x76,0xF0,0x12,0x80,0x22,0xF0,0x7A,0x90, +0x02,0x90,0x1A,0xF0,0x65,0x00,0x08,0xF0,0x00,0x00, +/* */ +0x17,0xE0,0x14,0x20,0x27,0xE0,0x4C,0x80,0x77,0xE0,0x14,0x50,0x26,0x30,0x73,0xE0, +0x02,0x20,0x1B,0xE0,0x62,0x20,0x03,0xE0,0x00,0x00, +/* */ +0x27,0xE0,0x22,0x40,0x4A,0x50,0x56,0x60,0x62,0x40,0x2F,0xF0,0x40,0x00,0x77,0xE0, +0x04,0x20,0x17,0xE0,0x64,0x20,0x07,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x20,0x80,0x4B,0xE0,0x72,0x20,0x13,0xE0,0x22,0x20,0x7B,0xE0, +0x02,0x20,0x1F,0xF0,0x61,0x40,0x02,0x20,0x00,0x00, +/* */ +0x27,0xF0,0x24,0x00,0x45,0xF0,0x54,0x00,0x67,0xF0,0x25,0x50,0x45,0x20,0x75,0x90, +0x04,0x20,0x17,0xF0,0x65,0x20,0x08,0x60,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x20,0x00,0x4B,0xE0,0x72,0x20,0x13,0xE0,0x20,0x00,0x77,0xF0, +0x04,0x10,0x15,0xD0,0x65,0x50,0x05,0xD0,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x41,0x40,0x54,0x90,0x65,0x50,0x27,0xF0,0x40,0x80,0x77,0xF0, +0x04,0x90,0x15,0x50,0x65,0xD0,0x04,0x30,0x00,0x00, +/* */ +0x28,0x20,0x24,0x40,0x40,0x00,0x5F,0xE0,0x64,0x40,0x28,0x20,0x40,0x00,0x6F,0xE0, +0x0A,0xA0,0x1A,0xA0,0x6A,0xA0,0x1F,0xF0,0x00,0x00, +/* */ +0x24,0x40,0x22,0x80,0x4F,0xF0,0x52,0x80,0x6F,0xE0,0x22,0xA0,0x4F,0xF0,0x72,0xA0, +0x0F,0xE0,0x16,0xC0,0x6A,0xA0,0x02,0x90,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x24,0x50,0x4B,0x80,0x72,0x00,0x13,0xF0,0x22,0x40,0x7A,0x40, +0x07,0xF0,0x18,0x00,0x62,0x40,0x04,0x20,0x00,0x00, +/* */ +0x17,0xF0,0x11,0x40,0x27,0xF0,0x4D,0x50,0x77,0xF0,0x10,0x00,0x23,0xE0,0x78,0x00, +0x07,0xF0,0x18,0x80,0x62,0xA0,0x05,0x90,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x23,0xE0,0x4A,0x20,0x77,0xF0,0x15,0x50,0x27,0xF0,0x78,0x00, +0x07,0xE0,0x1A,0x20,0x61,0xC0,0x06,0x30,0x00,0x00, +/* */ +0x27,0xF0,0x24,0x90,0x47,0xF0,0x54,0x90,0x67,0xF0,0x22,0x40,0x47,0x80,0x71,0x20, +0x07,0xF0,0x10,0x80,0x64,0xA0,0x09,0x90,0x00,0x00, +/* */ +0x27,0x70,0x25,0x50,0x43,0x30,0x55,0x50,0x60,0x80,0x23,0x40,0x4C,0xB0,0x73,0x00, +0x00,0x40,0x17,0x90,0x60,0x60,0x07,0x80,0x00,0x00, +/* */ +0x12,0xA0,0x15,0x40,0x22,0xA0,0x4F,0xF0,0x74,0x90,0x17,0xF0,0x24,0x90,0x77,0xF0, +0x00,0x80,0x17,0xF0,0x62,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x24,0x00,0x24,0xF0,0x4E,0x20,0x54,0x40,0x64,0xF0,0x2E,0x90,0x40,0x90,0x6E,0xD0, +0x0A,0xD0,0x1A,0x40,0x6E,0xA0,0x0B,0x10,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x20,0x80,0x4D,0x50,0x72,0x20,0x17,0xF0,0x22,0x20,0x7B,0xE0, +0x02,0x20,0x1B,0xE0,0x62,0xA0,0x05,0x90,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x24,0x90,0x4E,0xB0,0x74,0x90,0x17,0xF0,0x20,0x00,0x7B,0xE0, +0x02,0x20,0x1B,0xE0,0x62,0x20,0x03,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x22,0xA0,0x4B,0xE0,0x72,0xA0,0x13,0xE0,0x20,0x00,0x77,0xF0, +0x02,0xA0,0x1B,0xE0,0x62,0xA0,0x07,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x2B,0xE0,0x46,0xA0,0x53,0xE0,0x60,0x80,0x23,0xF0,0x4D,0x20,0x75,0xE0, +0x05,0x00,0x15,0xE0,0x65,0x20,0x0B,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x23,0xE0,0x48,0x00,0x77,0x70,0x15,0x50,0x27,0x70,0x78,0x80, +0x07,0xF0,0x19,0xC0,0x62,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x17,0xF0,0x15,0x50,0x27,0xF0,0x48,0x00,0x77,0xF0,0x10,0x00,0x23,0xE0,0x7A,0x20, +0x03,0xE0,0x19,0x50,0x63,0x20,0x05,0x90,0x00,0x00, +/* */ +0x2A,0xA0,0x2F,0xF0,0x52,0x20,0x5F,0xF0,0x65,0x60,0x29,0xB0,0x40,0x00,0x6F,0xE0, +0x09,0x20,0x19,0x20,0x62,0xC0,0x0C,0x20,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x04,0x40,0x08,0x40,0x10,0x80,0x3F,0x00,0x02,0x00,0x04,0x00, +0x08,0x40,0x10,0x20,0x3F,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x12,0x40,0x2A,0xA0,0x12,0x40,0x2A,0xA0,0x3A,0xE0,0x01,0x40,0x7F,0xF0,0x2A,0x80, +0x3E,0xA0,0x2A,0x50,0x3E,0xB0,0x23,0x10,0x00,0x00, +/* */ +0x00,0x00,0x09,0x20,0x09,0x20,0x12,0x40,0x12,0x40,0x24,0x80,0x24,0x80,0x12,0x40, +0x12,0x40,0x09,0x20,0x09,0x20,0x00,0x00,0x00,0x00, +/* */ +0x11,0x10,0x22,0x20,0x44,0x40,0x22,0x20,0x11,0x10,0x3F,0xE0,0x22,0x20,0x22,0x20, +0x3F,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x12,0x40,0x24,0x80,0x12,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xF0,0x10,0x40,0x10,0x40,0x10,0x40,0x7C,0x40,0x10,0x40,0x10,0x40, +0x10,0x40,0x1C,0x40,0x70,0x40,0x01,0xC0,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xC0,0x12,0x40,0x12,0x40,0x12,0x40,0x7A,0x40,0x12,0x40,0x12,0x40, +0x12,0x40,0x1A,0x50,0x64,0x50,0x08,0x30,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x17,0xF0,0x10,0x80,0x13,0xE0,0x78,0x80,0x17,0xF0,0x10,0x90, +0x10,0x90,0x18,0xB0,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x01,0x40,0x79,0x40,0x12,0x20,0x12,0x20,0x14,0x10,0x7B,0xE0,0x11,0x20,0x11,0x20, +0x11,0x20,0x1A,0x20,0x62,0x20,0x04,0xC0,0x00,0x00, +/* */ +0x01,0x00,0x78,0x80,0x17,0xF0,0x12,0x20,0x12,0x20,0x7A,0x20,0x11,0x40,0x11,0x40, +0x10,0x80,0x19,0x40,0x62,0x20,0x04,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x10,0x80,0x10,0x80,0x10,0x80,0x78,0x80,0x13,0xE0,0x10,0x80, +0x10,0xA0,0x18,0x90,0x60,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x10,0x20,0x10,0x20,0x13,0xA0,0x7A,0xA0,0x12,0xA0,0x12,0xA0, +0x13,0xA0,0x1A,0x20,0x60,0x20,0x00,0xE0,0x00,0x00, +/* */ +0x01,0x40,0x79,0x20,0x11,0x00,0x17,0xF0,0x11,0x40,0x79,0x40,0x11,0x50,0x11,0x60, +0x12,0x40,0x1A,0xD0,0x65,0x50,0x08,0x30,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x10,0x80,0x10,0xF0,0x10,0x80,0x78,0x80,0x13,0xF0,0x12,0x10, +0x12,0x10,0x1A,0x10,0x63,0xF0,0x02,0x10,0x00,0x00, +/* */ +0x01,0x40,0x79,0x60,0x12,0x50,0x12,0x40,0x16,0x70,0x7B,0xC0,0x12,0x40,0x12,0x40, +0x12,0x40,0x1A,0x50,0x62,0x30,0x02,0x10,0x00,0x00, +/* */ +0x00,0x40,0x78,0x80,0x13,0xF0,0x12,0x10,0x12,0x10,0x7A,0x10,0x13,0xF0,0x12,0x10, +0x12,0x10,0x1A,0x10,0x63,0xF0,0x02,0x10,0x00,0x00, +/* */ +0x03,0xF0,0x7A,0x10,0x12,0x10,0x13,0xF0,0x12,0x40,0x7A,0x40,0x13,0xF0,0x12,0x40, +0x12,0x40,0x1A,0x50,0x63,0x30,0x02,0x10,0x00,0x00, +/* */ +0x04,0x00,0x74,0x00,0x24,0x70,0x2F,0x50,0x25,0x50,0x75,0x50,0x25,0x50,0x25,0x50, +0x25,0x50,0x35,0x50,0x69,0x70,0x13,0x50,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x22,0x20,0x22,0x20,0x23,0xE0,0x72,0x20,0x23,0xE0,0x22,0x20, +0x22,0x30,0x37,0xE0,0x60,0x20,0x00,0x20,0x00,0x00, +/* */ +0x02,0x40,0x72,0x40,0x22,0x40,0x27,0xE0,0x22,0x40,0x72,0x40,0x22,0x40,0x2F,0xF0, +0x20,0x00,0x32,0x40,0x64,0x20,0x08,0x10,0x00,0x00, +/* */ +0x07,0xF0,0x70,0x80,0x21,0x00,0x27,0xF0,0x24,0x10,0x74,0x90,0x24,0x90,0x24,0x90, +0x24,0x90,0x31,0x40,0x42,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x07,0x80,0x71,0x70,0x25,0x50,0x25,0x50,0x25,0x60,0x77,0xE0,0x21,0x50,0x23,0x50, +0x25,0x50,0x39,0x60,0x61,0x40,0x03,0x40,0x00,0x00, +/* */ +0x01,0x00,0x72,0x70,0x24,0x00,0x21,0x00,0x22,0xF0,0x76,0x20,0x22,0x20,0x22,0x20, +0x22,0x20,0x32,0x20,0x62,0x20,0x02,0xE0,0x00,0x00, +/* */ +0x02,0x40,0x72,0x40,0x22,0x40,0x2A,0x50,0x26,0x60,0x72,0x40,0x26,0x60,0x2A,0x50, +0x22,0x40,0x34,0x50,0x64,0x50,0x08,0x30,0x00,0x00, +/* */ +0x01,0x00,0x79,0xE0,0x12,0x20,0x15,0x40,0x10,0x80,0x79,0x40,0x16,0x30,0x13,0xE0, +0x12,0x20,0x1A,0x20,0x63,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xE0,0x22,0x20,0x0A,0x80,0x12,0x40,0x26,0x20,0x00,0x00,0x3F,0xE0, +0x02,0x00,0x1F,0xC0,0x02,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x24,0x10,0x20,0x80,0x27,0xE0,0x71,0x00,0x22,0x80,0x23,0xE0, +0x20,0x80,0x37,0xF0,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x08,0x40,0x74,0x40,0x21,0xF0,0x20,0x80,0x2D,0x40,0x75,0xF0,0x24,0x40,0x24,0x40, +0x25,0xF0,0x34,0x40,0x6A,0x40,0x11,0xF0,0x00,0x00, +/* */ +0x02,0x20,0x7A,0x20,0x17,0xF0,0x12,0x20,0x13,0xE0,0x7A,0x20,0x13,0xE0,0x12,0x20, +0x17,0xF0,0x18,0x00,0x62,0x20,0x04,0x10,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x22,0x20,0x20,0x80,0x23,0xE0,0x72,0xA0,0x22,0xA0,0x22,0xA0, +0x27,0xF0,0x31,0x40,0x62,0x20,0x04,0x10,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xE0,0x11,0x40,0x12,0x20,0x17,0xF0,0x78,0x20,0x13,0xA0,0x12,0xA0, +0x12,0xA0,0x1B,0xA0,0x62,0x20,0x00,0x60,0x00,0x00, +/* */ +0x00,0x80,0x70,0xE0,0x20,0x80,0x27,0xF0,0x24,0x90,0x74,0xE0,0x27,0x90,0x24,0x70, +0x25,0xC0,0x35,0x40,0x65,0x50,0x0A,0x30,0x00,0x00, +/* */ +0x07,0xE0,0x74,0x20,0x27,0xE0,0x24,0x20,0x27,0xE0,0x70,0x00,0x24,0x40,0x24,0x50, +0x27,0x60,0x34,0x40,0x65,0x50,0x06,0x30,0x00,0x00, +/* */ +0x00,0x80,0x72,0x90,0x22,0xA0,0x24,0x80,0x21,0x60,0x76,0x10,0x20,0x80,0x22,0x90, +0x24,0xA0,0x31,0x40,0x62,0x20,0x0C,0x10,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x24,0x10,0x20,0x00,0x23,0xE0,0x70,0x00,0x20,0x00,0x27,0xF0, +0x20,0x80,0x32,0xA0,0x64,0x90,0x01,0x80,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x24,0x10,0x22,0x00,0x23,0x70,0x75,0x50,0x25,0x50,0x2B,0x70, +0x21,0x40,0x32,0x50,0x62,0x50,0x04,0x30,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x24,0x10,0x21,0x40,0x22,0x20,0x70,0x80,0x27,0xF0,0x20,0x80, +0x21,0xC0,0x32,0xA0,0x64,0x90,0x00,0x80,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x12,0x10,0x13,0xF0,0x12,0x40,0x7B,0xF0,0x12,0x40,0x13,0xF0, +0x13,0x10,0x1D,0x10,0x65,0xF0,0x09,0x10,0x00,0x00, +/* */ +0x07,0xF0,0x7C,0x10,0x15,0xD0,0x10,0x00,0x13,0xE0,0x7A,0x20,0x13,0xE0,0x12,0x20, +0x13,0xE0,0x1A,0x20,0x63,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x01,0x00,0x72,0x80,0x24,0x40,0x2B,0xB0,0x20,0x00,0x7F,0x10,0x29,0x50,0x2F,0x50, +0x29,0x50,0x3F,0x50,0x69,0x10,0x0B,0x30,0x00,0x00, +/* */ +0x00,0x30,0x77,0xC0,0x25,0x10,0x22,0xA0,0x27,0xF0,0x70,0x80,0x27,0xF0,0x21,0x00, +0x23,0xE0,0x35,0x20,0x68,0xC0,0x07,0x30,0x00,0x00, +/* */ +0x0E,0xE0,0x7A,0x20,0x2A,0x20,0x2E,0xE0,0x28,0x00,0x78,0x00,0x2E,0xE0,0x28,0xA0, +0x28,0xA0,0x3E,0x40,0x68,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x01,0x50,0x72,0xA0,0x25,0x40,0x22,0xA0,0x21,0x50,0x72,0x00,0x27,0xF0,0x25,0x50, +0x24,0x90,0x35,0x50,0x67,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x00,0x70,0x77,0x80,0x25,0x10,0x22,0xA0,0x2F,0xF0,0x79,0x10,0x27,0xE0,0x22,0x00, +0x23,0xE0,0x35,0x20,0x68,0xC0,0x03,0x30,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x24,0x80,0x25,0xE0,0x24,0xA0,0x77,0xF0,0x24,0xA0,0x25,0xE0, +0x24,0x80,0x35,0xE0,0x65,0x20,0x09,0xE0,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x22,0x20,0x23,0xE0,0x20,0x80,0x77,0xF0,0x24,0x90,0x27,0xF0, +0x20,0x80,0x37,0xF0,0x60,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x22,0x20,0x2F,0xF0,0x20,0x80,0x77,0xF0,0x24,0x90,0x27,0xF0, +0x24,0x90,0x37,0xF0,0x62,0x20,0x04,0x10,0x00,0x00, +/* */ +0x07,0x70,0x75,0x50,0x25,0x50,0x25,0x50,0x22,0x20,0x75,0x50,0x21,0x00,0x2F,0xF0, +0x22,0x40,0x36,0x40,0x61,0x80,0x0E,0x60,0x00,0x00, +/* */ +0x00,0x80,0x74,0x90,0x27,0xF0,0x21,0x40,0x22,0x20,0x77,0xF0,0x2A,0x40,0x23,0xF0, +0x22,0x40,0x33,0xF0,0x62,0x40,0x03,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x25,0x10,0x25,0xD0,0x27,0x50,0x74,0x90,0x25,0x50,0x27,0xF0, +0x20,0x80,0x35,0x20,0x65,0x50,0x08,0xD0,0x00,0x00, +/* */ +0x04,0x80,0x72,0xF0,0x2F,0x00,0x24,0x00,0x24,0xF0,0x77,0x50,0x25,0x40,0x25,0x70, +0x25,0x40,0x35,0x40,0x65,0xC0,0x0B,0x70,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xE0,0x11,0x40,0x17,0xF0,0x12,0x20,0x7B,0xE0,0x12,0x20,0x13,0xE0, +0x18,0x80,0x67,0xF0,0x00,0x80,0x00,0x80,0x00,0x00, +/* */ +0x05,0x50,0x71,0x40,0x27,0xF0,0x22,0x20,0x21,0x40,0x77,0xF0,0x20,0x80,0x23,0xE0, +0x20,0x80,0x37,0xF0,0x61,0x40,0x06,0x30,0x00,0x00, +/* */ +0x02,0x00,0x73,0x70,0x22,0x10,0x27,0x50,0x2D,0x20,0x72,0x50,0x24,0x80,0x22,0xA0, +0x2F,0xF0,0x31,0xC0,0x62,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x00,0xF0,0x70,0x80,0x27,0xF0,0x24,0x90,0x27,0xE0,0x74,0x90,0x27,0xF0,0x24,0x80, +0x27,0x50,0x34,0xE0,0x6B,0x50,0x00,0xC0,0x00,0x00, +/* */ +0x00,0x40,0x7F,0x70,0x29,0x90,0x29,0x50,0x2F,0x20,0x72,0x50,0x22,0x80,0x2B,0x70, +0x2A,0x50,0x3A,0x50,0x6B,0x70,0x1C,0x50,0x00,0x00, +/* */ +0x3C,0x40,0x25,0xF0,0x3C,0xA0,0x21,0xF0,0x3C,0x40,0x54,0xE0,0x1C,0x40,0x7F,0xF0, +0x02,0x00,0x3F,0xE0,0x02,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x0A,0xA0,0x7F,0xF0,0x32,0x20,0x2F,0xF0,0x25,0x60,0x79,0xB0,0x20,0x00,0x2F,0xE0, +0x29,0x20,0x39,0x20,0x62,0xC0,0x0C,0x20,0x00,0x00, +/* */ +0x17,0x60,0x25,0x20,0x37,0x60,0x25,0x20,0x25,0x20,0x7F,0xF0,0x40,0x10,0x3F,0xE0, +0x02,0x00,0x1F,0xC0,0x02,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x3C,0x80,0x27,0xF0,0x3C,0x80,0x25,0xE0,0x3C,0x80,0x03,0xF0,0x7E,0x90,0x08,0x90, +0x2C,0xB0,0x28,0x80,0x28,0x80,0x5F,0xF0,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x7B,0xE0,0x22,0x20,0x7B,0xE0,0x20,0x00,0x7B,0xE0,0x2A,0xA0, +0x2A,0xA0,0x3A,0xA0,0x22,0xA0,0x27,0xF0,0x00,0x00, +/* */ +0x20,0x70,0x23,0x80,0x78,0x90,0x22,0x50,0x79,0x20,0x20,0x80,0x7B,0x30,0x2A,0x10, +0x2B,0x30,0x3A,0x10,0x23,0xF0,0x22,0x10,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x11,0x40,0x79,0x40,0x11,0x40,0x39,0x40,0x35,0x40,0x51,0x40, +0x11,0x40,0x11,0x50,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x11,0xF0,0x7A,0x10,0x14,0x10,0x39,0x10,0x34,0x90,0x50,0x90, +0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x60,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x20,0x7C,0x20,0x10,0x20,0x33,0xE0,0x3A,0x00,0x56,0x00, +0x12,0x00,0x12,0x10,0x12,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x12,0x20,0x7A,0xA0,0x12,0x60,0x3A,0x20,0x35,0x40,0x51,0x40, +0x10,0x80,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x17,0xE0,0x10,0x20,0x12,0x20,0x7A,0x20,0x12,0x20,0x3B,0xF0,0x34,0x10,0x50,0x10, +0x17,0xD0,0x10,0x10,0x10,0x10,0x10,0x60,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x00,0x7A,0x40,0x12,0x40,0x3B,0xF0,0x36,0x50,0x52,0x50, +0x12,0x50,0x12,0x90,0x14,0x90,0x19,0x60,0x00,0x00, +/* */ +0x12,0x40,0x12,0x40,0x12,0x50,0x7E,0x50,0x13,0xE0,0x32,0x40,0x3A,0x40,0x56,0x40, +0x12,0x40,0x12,0xD0,0x13,0x50,0x12,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0xA0,0x7A,0x90,0x12,0x90,0x3A,0x90,0x34,0x80,0x50,0x90, +0x10,0x20,0x10,0x40,0x11,0x80,0x16,0x00,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x7C,0x90,0x14,0x90,0x34,0x90,0x3D,0x50,0x56,0x30, +0x14,0x10,0x14,0x10,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x7A,0xA0,0x12,0xA0,0x3A,0xA0,0x36,0xA0,0x52,0xA0, +0x11,0x40,0x11,0x40,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x12,0x00,0x12,0x00,0x7B,0xE0,0x14,0x80,0x10,0x80,0x38,0x80,0x30,0x80,0x57,0xF0, +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x11,0x00,0x11,0x20,0x11,0x40,0x7D,0x80,0x11,0x00,0x33,0xF0,0x39,0x40,0x55,0x40, +0x11,0x20,0x11,0x20,0x11,0x90,0x11,0x00,0x00,0x00, +/* */ +0x12,0x40,0x12,0x40,0x12,0x40,0x7A,0x40,0x12,0x40,0x3A,0x40,0x36,0x40,0x52,0x40, +0x15,0xA0,0x14,0xA0,0x19,0x20,0x12,0x10,0x00,0x00, +/* */ +0x04,0x00,0x3F,0xC0,0x28,0x40,0x24,0xC0,0x20,0x00,0x3F,0xF0,0x02,0x10,0x7F,0xD0, +0x0A,0xB0,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x13,0xF0,0x7D,0x00,0x11,0x00,0x31,0xF0,0x39,0x10,0x55,0x10, +0x11,0x10,0x12,0x10,0x12,0x10,0x14,0x60,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x12,0xA0,0x7E,0xA0,0x12,0xA0,0x32,0xA0,0x3B,0xE0,0x56,0x00, +0x12,0x00,0x12,0x10,0x12,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x10,0x20,0x79,0x40,0x10,0x80,0x37,0xF0,0x38,0x90,0x50,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x13,0x80,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00,0x1F,0xC0,0x00,0x00, +0x7F,0xF0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x11,0x20,0x11,0x20,0x13,0xF0,0x7D,0x20,0x10,0x00,0x33,0xF0,0x38,0x90,0x54,0x90, +0x10,0x90,0x10,0xB0,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x10,0x80,0x78,0x80,0x11,0x00,0x31,0xF0,0x3B,0x10,0x55,0x10, +0x11,0x10,0x11,0x10,0x11,0xF0,0x11,0x10,0x00,0x00, +/* */ +0x11,0x40,0x11,0x20,0x11,0x00,0x7B,0xF0,0x11,0x40,0x39,0x40,0x35,0x50,0x51,0x60, +0x12,0x40,0x12,0xD0,0x15,0x50,0x18,0x30,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x40,0x7A,0x40,0x12,0xF0,0x3A,0x90,0x37,0x20,0x52,0x40, +0x12,0xA0,0x13,0x10,0x12,0x00,0x13,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x78,0x80,0x14,0x90,0x12,0x90,0x3A,0xA0,0x30,0x80,0x57,0xF0, +0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x80,0x10,0xF0,0x10,0x80,0x78,0x80,0x13,0xF0,0x3A,0x10,0x36,0x10,0x53,0xF0, +0x12,0x10,0x12,0x00,0x12,0x00,0x14,0x00,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x90,0x7C,0x90,0x17,0xF0,0x34,0x90,0x3C,0x90,0x57,0xF0, +0x14,0x90,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x12,0x20,0x7B,0xE0,0x10,0x00,0x37,0xF0,0x39,0x00,0x52,0x00, +0x13,0xE0,0x10,0x20,0x10,0x20,0x10,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x7C,0x90,0x14,0x90,0x3C,0x90,0x37,0xF0,0x54,0x90, +0x14,0x90,0x14,0x90,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x7A,0x20,0x12,0x20,0x3A,0x20,0x36,0x20,0x53,0xE0, +0x10,0x00,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x12,0x00,0x7A,0x00,0x13,0xF0,0x3A,0x40,0x36,0x40,0x52,0xC0, +0x12,0x60,0x12,0x50,0x12,0x40,0x14,0x40,0x00,0x00, +/* */ +0x10,0x30,0x13,0xC0,0x12,0x00,0x7B,0xF0,0x12,0x00,0x3A,0xF0,0x36,0x90,0x52,0x90, +0x12,0xB0,0x12,0x80,0x12,0x90,0x14,0x70,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0x40,0x7A,0x20,0x14,0x90,0x30,0x40,0x3B,0xE0,0x50,0x20, +0x10,0x40,0x11,0x40,0x10,0x80,0x10,0x40,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x11,0xF0,0x7A,0x10,0x14,0x10,0x33,0xD0,0x3A,0x50,0x52,0x50, +0x13,0xD0,0x12,0x10,0x10,0x10,0x10,0x60,0x00,0x00, +/* */ +0x10,0x30,0x13,0xC0,0x12,0x40,0x7E,0x40,0x12,0x40,0x33,0xF0,0x3A,0x40,0x56,0x40, +0x12,0x40,0x12,0x50,0x13,0x30,0x12,0x90,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x12,0x00,0x7A,0x80,0x12,0x80,0x33,0xF0,0x38,0x80,0x52,0xA0, +0x12,0x90,0x14,0x90,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7A,0x10,0x10,0x00,0x39,0x10,0x35,0x20,0x51,0x40, +0x11,0x80,0x11,0x10,0x11,0x10,0x10,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x12,0x20,0x79,0x40,0x10,0x80,0x39,0x40,0x36,0xB0,0x50,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x11,0x10,0x17,0xA0,0x79,0x40,0x17,0xF0,0x31,0x00,0x3B,0xE0,0x56,0x00, +0x1B,0xE0,0x10,0x20,0x10,0x20,0x10,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x90,0x13,0xD0,0x78,0xA0,0x10,0xC0,0x37,0xF0,0x39,0x00,0x53,0x30, +0x15,0xC0,0x11,0x00,0x11,0x10,0x10,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x11,0x40,0x79,0x40,0x11,0x40,0x35,0x50,0x3B,0x60,0x51,0x40, +0x11,0x40,0x11,0x40,0x11,0x40,0x17,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x17,0x00,0x79,0x50,0x10,0x90,0x33,0x70,0x38,0x00,0x57,0xF0, +0x11,0x40,0x11,0x40,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x10,0x80,0x79,0x00,0x12,0x20,0x3B,0xF0,0x34,0x90,0x50,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0xF0,0x78,0x80,0x17,0xF0,0x34,0x10,0x3C,0x90,0x54,0x90, +0x14,0x90,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x14,0x90,0x7A,0xA0,0x10,0x80,0x37,0xF0,0x39,0x40,0x51,0x40, +0x11,0x40,0x12,0x50,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x10,0x80,0x12,0xA0,0x12,0xA0,0x7B,0xE0,0x10,0x00,0x33,0xE0,0x38,0x20,0x50,0x20, +0x13,0xE0,0x12,0x00,0x12,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x10,0x10,0x13,0x60,0x11,0x20,0x79,0x20,0x12,0x20,0x3A,0x70,0x37,0x20,0x51,0x20, +0x11,0x20,0x15,0x70,0x12,0x00,0x15,0xF0,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x10,0x80,0x78,0x80,0x17,0xF0,0x30,0x80,0x38,0x80,0x53,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x10,0x80,0x11,0x00,0x16,0x70,0x7C,0x10,0x14,0x10,0x3C,0x10,0x37,0x70,0x54,0x10, +0x14,0x10,0x14,0x10,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x11,0x40,0x12,0x50,0x16,0x60,0x7A,0x40,0x12,0xD0,0x33,0x50,0x3A,0x30,0x50,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x11,0x00,0x12,0x70,0x14,0x00,0x79,0x00,0x12,0xF0,0x36,0x20,0x3A,0x20,0x52,0x20, +0x12,0x20,0x12,0x20,0x12,0x20,0x12,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x11,0x40,0x7A,0x20,0x14,0x10,0x13,0xE0,0x38,0x00,0x30,0x00,0x57,0xF0, +0x11,0x00,0x12,0x20,0x17,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x10,0x40,0x1D,0xE0,0x24,0x40,0x55,0x40,0x09,0xF0,0x10,0x40,0x22,0x40,0x7F,0xF0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x28,0x90,0x48,0x90,0x02,0x00,0x7F,0xF0, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x12,0x40,0x0A,0x80,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x10,0x40,0x22,0x20,0x5F,0xD0, +0x0A,0x80,0x12,0x40,0x62,0x20,0x02,0x00,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7A,0x10,0x10,0x80,0x30,0x80,0x3B,0xF0,0x51,0x20, +0x11,0x20,0x10,0xC0,0x11,0x20,0x16,0x10,0x00,0x00, +/* */ +0x10,0x00,0x17,0x70,0x11,0x10,0x79,0x10,0x15,0x50,0x33,0x30,0x39,0x10,0x53,0x30, +0x15,0x50,0x11,0x10,0x11,0x10,0x13,0x30,0x00,0x00, +/* */ +0x10,0x40,0x7D,0xF0,0x10,0x40,0x38,0xE0,0x55,0x50,0x10,0x40,0x0F,0x80,0x08,0x80, +0x0C,0x80,0x0A,0x90,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x10,0x80,0x12,0x80,0x13,0xE0,0x7C,0x80,0x10,0x80,0x37,0xF0,0x38,0x00,0x53,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x10,0x70,0x17,0x80,0x11,0x10,0x7C,0xA0,0x12,0x00,0x37,0xE0,0x38,0x40,0x50,0x80, +0x17,0xF0,0x10,0x80,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x12,0x20,0x78,0x40,0x13,0xF0,0x32,0x90,0x3B,0xF0,0x52,0x90, +0x13,0xF0,0x12,0x90,0x12,0x90,0x14,0x30,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x13,0xE0,0x78,0x00,0x12,0x20,0x39,0x40,0x37,0xF0,0x50,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x14,0x40,0x12,0x40,0x10,0x40,0x79,0x60,0x15,0x50,0x32,0x50,0x38,0x40,0x50,0x50, +0x12,0x20,0x14,0x40,0x10,0x80,0x13,0x00,0x00,0x00, +/* */ +0x10,0x00,0x17,0xE0,0x10,0x20,0x7B,0xE0,0x10,0x20,0x37,0xE0,0x38,0x80,0x52,0x90, +0x14,0xA0,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x11,0x00,0x11,0x10,0x13,0xA0,0x79,0x40,0x17,0xF0,0x31,0x00,0x3B,0xE0,0x56,0x20, +0x1B,0xE0,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x10,0x40,0x7D,0xF0,0x10,0x40,0x38,0xE0,0x55,0x50,0x10,0x40,0x08,0x80,0x70,0x70, +0x1F,0xC0,0x08,0x40,0x08,0x40,0x31,0x80,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x10,0x80,0x7B,0xF0,0x10,0x10,0x31,0x40,0x3A,0xC0,0x51,0x40, +0x17,0xF0,0x10,0x80,0x11,0x20,0x16,0x10,0x00,0x00, +/* */ +0x10,0x60,0x7D,0x80,0x29,0x00,0x3D,0xF0,0x09,0x20,0x7D,0x20,0x0A,0x20,0x02,0x00, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0xF0,0x10,0x80,0x7B,0xF0,0x12,0x10,0x3B,0xF0,0x36,0x10,0x53,0xF0, +0x10,0x80,0x17,0xF0,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x15,0x50,0x7D,0x50,0x17,0xF0,0x31,0x00,0x39,0xF0,0x52,0x10, +0x15,0x20,0x10,0xC0,0x11,0x80,0x16,0x00,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x78,0x80,0x17,0xF0,0x12,0xA0,0x3A,0xA0,0x37,0xF0,0x52,0xA0, +0x12,0xA0,0x17,0xF0,0x10,0x80,0x13,0xE0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x78,0x00,0x13,0xE0,0x3A,0x20,0x36,0x20,0x53,0xE0, +0x10,0x80,0x12,0xA0,0x14,0x90,0x11,0x80,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x00,0x7B,0xE0,0x12,0x20,0x3B,0xE0,0x34,0x00,0x53,0xE0, +0x10,0x40,0x17,0xF0,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x20,0x80,0x21,0xE0,0x2C,0xA0,0x77,0xF0,0x24,0xA0,0x39,0xE0,0x6C,0x80,0x67,0xE0, +0x24,0x80,0x2F,0xF0,0x24,0x80,0x2B,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x10,0xA0,0x7B,0xF0,0x10,0xA0,0x33,0xE0,0x38,0x80,0x52,0xA0, +0x11,0xC0,0x12,0xA0,0x14,0x90,0x11,0x80,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x12,0x10,0x7B,0xF0,0x12,0x40,0x33,0xF0,0x3A,0x40,0x53,0xF0, +0x13,0x10,0x15,0x10,0x15,0xF0,0x19,0x10,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x7B,0xE0,0x11,0x00,0x37,0xF0,0x3A,0x20,0x55,0xD0, +0x10,0x80,0x17,0xF0,0x11,0x40,0x12,0x20,0x00,0x00, +/* */ +0x11,0x20,0x13,0xF0,0x11,0x20,0x7D,0xE0,0x11,0x20,0x31,0xE0,0x39,0x20,0x57,0xF0, +0x12,0xA0,0x13,0x10,0x12,0x00,0x13,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x78,0x80,0x17,0xF0,0x15,0x50,0x3C,0x90,0x35,0xD0,0x54,0x90, +0x17,0xF0,0x14,0x90,0x14,0x90,0x14,0x30,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x11,0xC0,0x7A,0xA0,0x14,0x90,0x33,0xE0,0x3A,0x20,0x53,0xE0, +0x12,0x20,0x13,0xE0,0x10,0x00,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x78,0x80,0x17,0xF0,0x14,0x90,0x36,0xB0,0x3C,0x90,0x57,0xF0, +0x11,0xC0,0x12,0xA0,0x14,0x90,0x10,0x80,0x00,0x00, +/* */ +0x11,0x40,0x15,0x70,0x15,0xA0,0x7D,0x10,0x11,0x00,0x37,0xE0,0x3C,0x20,0x55,0x20, +0x15,0x20,0x12,0x80,0x14,0x90,0x18,0x70,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x78,0x00,0x17,0xF0,0x32,0x20,0x3B,0xE0,0x52,0x20, +0x13,0xE0,0x12,0x30,0x17,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x12,0x20,0x7A,0x20,0x13,0xE0,0x38,0x00,0x37,0x70,0x55,0x50, +0x15,0x50,0x15,0x50,0x17,0x70,0x15,0x50,0x00,0x00, +/* */ +0x21,0xF0,0x3D,0x00,0x51,0xE0,0x7D,0x20,0x11,0xE0,0x29,0x00,0x45,0xF0,0x02,0x00, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x11,0x40,0x16,0x40,0x12,0x50,0x7A,0xD0,0x17,0x60,0x32,0x40,0x3B,0x40,0x56,0x40, +0x1A,0xA0,0x12,0xA0,0x12,0xA0,0x13,0x10,0x00,0x00, +/* */ +0x22,0xE0,0x24,0xA0,0x26,0xA0,0x75,0x30,0x24,0x00,0x26,0xE0,0x74,0xA0,0x64,0xA0, +0x26,0xA0,0x2C,0x40,0x24,0xA0,0x25,0x10,0x00,0x00, +/* */ +0x14,0x20,0x12,0x40,0x10,0xF0,0x78,0x90,0x16,0xF0,0x32,0x80,0x3A,0xF0,0x52,0x90, +0x12,0x90,0x12,0xF0,0x15,0x00,0x18,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x7A,0x20,0x11,0x40,0x37,0xF0,0x38,0x80,0x53,0xE0, +0x10,0x80,0x12,0xA0,0x14,0x90,0x11,0x80,0x00,0x00, +/* */ +0x14,0x00,0x12,0xF0,0x14,0x10,0x7D,0xD0,0x15,0x50,0x35,0xD0,0x3C,0x10,0x55,0xD0, +0x15,0x50,0x15,0xD0,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x17,0xF0,0x78,0x80,0x13,0xE0,0x39,0x00,0x37,0xF0,0x52,0x00, +0x13,0xE0,0x14,0x80,0x18,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x15,0x10,0x12,0xA0,0x10,0x40,0x7B,0xF0,0x11,0x40,0x3A,0x20,0x34,0x90,0x53,0xE0, +0x10,0x80,0x17,0xF0,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x10,0x7B,0xE0,0x10,0x00,0x33,0xE0,0x3A,0x20,0x53,0xE0, +0x12,0x20,0x13,0xE0,0x10,0x00,0x17,0xF0,0x00,0x00, +/* */ +0x17,0xF0,0x14,0x90,0x7C,0x90,0x17,0xF0,0x14,0x00,0x3D,0xF0,0x35,0x10,0x55,0xF0, +0x15,0x10,0x15,0xF0,0x15,0x10,0x19,0xF0,0x00,0x00, +/* */ +0x2F,0xC0,0x24,0x60,0x27,0xA0,0x7A,0xA0,0x29,0x20,0x2A,0xA0,0x70,0x40,0x6F,0xE0, +0x2A,0xA0,0x2A,0xA0,0x2A,0xA0,0x3F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x7B,0xE0,0x11,0x00,0x37,0xF0,0x3A,0x20,0x55,0xD0, +0x10,0x80,0x17,0xF0,0x12,0xA0,0x14,0x90,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x15,0x40,0x7D,0x40,0x17,0x70,0x35,0x40,0x3F,0x70,0x55,0x40, +0x17,0x70,0x15,0x40,0x15,0x40,0x17,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x13,0xE0,0x7A,0x20,0x13,0xE0,0x38,0x00,0x37,0x70,0x51,0x10, +0x15,0x50,0x13,0x30,0x15,0x50,0x13,0x30,0x00,0x00, +/* */ +0x11,0x40,0x13,0xF0,0x16,0x40,0x7B,0xF0,0x12,0x40,0x3B,0xF0,0x36,0x40,0x53,0xF0, +0x10,0x80,0x17,0xF0,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x12,0x20,0x17,0x20,0x7D,0x20,0x17,0x70,0x15,0x20,0x3F,0x20,0x35,0xA0,0x5F,0x60, +0x13,0x20,0x15,0x20,0x19,0x20,0x13,0x60,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x12,0x20,0x7B,0xE0,0x12,0x20,0x33,0xE0,0x39,0x00,0x57,0xF0, +0x12,0x20,0x14,0x90,0x13,0xE0,0x10,0x80,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x00,0x7B,0xE0,0x12,0x20,0x37,0xF0,0x3A,0x20,0x53,0xE0, +0x11,0x80,0x13,0x50,0x15,0x20,0x11,0x90,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x00,0x7B,0xE0,0x12,0x20,0x33,0xE0,0x38,0x00,0x57,0xF0, +0x14,0x10,0x15,0xD0,0x15,0x50,0x15,0xD0,0x00,0x00, +/* */ +0x22,0xF0,0x14,0x90,0x7E,0xF0,0x08,0x90,0x2A,0xF0,0x3E,0x90,0x11,0x10,0x62,0x30, +0x02,0x00,0x7F,0xF0,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x50,0x7B,0x80,0x12,0x00,0x33,0xF0,0x3A,0x40,0x52,0x40, +0x17,0xF0,0x10,0x00,0x12,0x40,0x14,0x20,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x10,0x7A,0x20,0x14,0x90,0x31,0x40,0x3A,0x20,0x54,0x10, +0x13,0xE0,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x10,0x40,0x14,0x40,0x12,0xE0,0x78,0x50,0x11,0xF0,0x36,0x40,0x3A,0xF0,0x53,0x90, +0x12,0xF0,0x13,0x90,0x12,0xF0,0x10,0x90,0x00,0x00, +/* */ +0x17,0xF0,0x14,0x10,0x17,0xF0,0x7D,0x50,0x14,0xE0,0x35,0xF0,0x3D,0x10,0x55,0xF0, +0x15,0x10,0x15,0xF0,0x15,0x10,0x19,0x30,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x12,0x20,0x7B,0xE0,0x10,0x80,0x37,0xF0,0x3C,0x90,0x57,0xF0, +0x10,0x80,0x17,0xF0,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x7A,0xA0,0x17,0xF0,0x10,0x00,0x3F,0xF0,0x34,0x10,0x55,0xD0, +0x15,0x50,0x15,0xD0,0x14,0x10,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x50,0x10,0x40,0x17,0xF0,0x7D,0x40,0x15,0xC0,0x35,0x50,0x3F,0xD0,0x55,0x50, +0x15,0xE0,0x17,0x50,0x15,0xB0,0x1B,0x10,0x00,0x00, +/* */ +0x13,0xE0,0x10,0x80,0x17,0xF0,0x7C,0x90,0x12,0xA0,0x38,0x00,0x37,0xF0,0x52,0x00, +0x13,0xE0,0x10,0x20,0x10,0x20,0x10,0xC0,0x00,0x00, +/* */ +0x14,0x90,0x12,0xA0,0x17,0xF0,0x7C,0x10,0x13,0xE0,0x32,0x20,0x3A,0x20,0x53,0xE0, +0x10,0x80,0x13,0xE0,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x28,0x80,0x13,0xD0,0x28,0xA0,0x5B,0xF0,0x29,0x10,0x4B,0xF0,0x0D,0x10,0x31,0xF0, +0x02,0x00,0x7F,0xF0,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x24,0x20,0x27,0xA0,0x29,0x60,0x72,0x20,0x2F,0xA0,0x2A,0xE0,0x7F,0xA0,0x6A,0xB0, +0x2F,0xE0,0x2A,0xA0,0x2A,0xA0,0x31,0xA0,0x00,0x00, +/* */ +0x2E,0x40,0x22,0x40,0x24,0x80,0x7E,0xF0,0x2B,0x20,0x2E,0xA0,0x7A,0xA0,0x6E,0xA0, +0x2B,0x40,0x3E,0x40,0x22,0xA0,0x23,0x10,0x00,0x00, +/* */ +0x22,0x20,0x22,0x30,0x2F,0x20,0x72,0xF0,0x22,0xA0,0x2F,0xA0,0x72,0xB0,0x6B,0xA0, +0x2A,0xF0,0x2A,0x90,0x2E,0x00,0x2B,0xF0,0x00,0x00, +/* */ +0x14,0x80,0x7E,0x80,0x14,0xF0,0x3F,0x20,0x42,0xA0,0x3A,0x40,0x2A,0xA0,0x3D,0x10, +0x02,0x00,0x7F,0xF0,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x12,0x40,0x7F,0xF0,0x48,0x10,0x1F,0xE0,0x30,0x20,0x5F,0xE0, +0x02,0x00,0x7F,0xF0,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x20,0x7E,0xA0,0x15,0x30,0x37,0xD0,0x3D,0x20,0x55,0x60, +0x17,0xE0,0x15,0x20,0x15,0x50,0x1A,0x90,0x00,0x00, +/* */ +0x11,0x40,0x11,0x20,0x7B,0xF0,0x16,0x40,0x13,0xF0,0x3A,0x40,0x33,0xF0,0x52,0x40, +0x13,0xF0,0x12,0x00,0x15,0x50,0x15,0x50,0x00,0x00, +/* */ +0x11,0xC0,0x16,0xB0,0x13,0xE0,0x79,0x40,0x14,0x90,0x35,0x50,0x3F,0xF0,0x50,0x80, +0x17,0xF0,0x15,0x50,0x15,0xD0,0x14,0x50,0x00,0x00, +/* */ +0x22,0x00,0x27,0x80,0x28,0x80,0x77,0xE0,0x25,0x20,0x27,0xE0,0x75,0x20,0x6F,0xF0, +0x22,0x40,0x23,0xC0,0x22,0x40,0x23,0xC0,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x79,0x40,0x17,0xF0,0x15,0x50,0x3E,0x70,0x35,0x90,0x57,0xF0, +0x10,0x20,0x17,0xF0,0x12,0x20,0x11,0x60,0x00,0x00, +/* */ +0x17,0xF0,0x14,0x10,0x17,0xF0,0x7D,0x50,0x14,0xE0,0x35,0x50,0x3C,0x00,0x55,0x40, +0x15,0xF0,0x16,0x40,0x15,0xF0,0x18,0x40,0x00,0x00, +/* */ +0x13,0xE0,0x11,0x20,0x78,0xC0,0x17,0xF0,0x12,0x90,0x3D,0x80,0x37,0xF0,0x55,0x50, +0x16,0x30,0x15,0xD0,0x15,0x50,0x15,0xD0,0x00,0x00, +/* */ +0x22,0x80,0x22,0xE0,0x24,0xA0,0x7A,0x40,0x2D,0xF0,0x24,0x80,0x79,0x50,0x6C,0xE0, +0x21,0x40,0x2C,0xE0,0x23,0x50,0x20,0xC0,0x00,0x00, +/* */ +0x17,0xF0,0x10,0x80,0x17,0xF0,0x7C,0x90,0x12,0xA0,0x38,0x00,0x37,0xF0,0x54,0x90, +0x17,0xF0,0x14,0x90,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x13,0xC0,0x14,0x40,0x17,0xF0,0x7D,0x20,0x16,0x90,0x35,0xE0,0x3C,0x00,0x55,0xE0, +0x14,0x00,0x15,0xE0,0x15,0x20,0x19,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x78,0x00,0x17,0xF0,0x14,0x10,0x3D,0xD0,0x35,0x50,0x57,0xF0, +0x10,0x00,0x17,0xF0,0x12,0xA0,0x15,0x90,0x00,0x00, +/* */ +0x3C,0x40,0x25,0xF0,0x3C,0xA0,0x21,0xF0,0x3C,0x40,0x54,0xE0,0x1C,0x40,0x02,0x00, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x10,0x7B,0x70,0x15,0x50,0x3A,0x20,0x35,0xD0,0x50,0x00, +0x17,0xF0,0x10,0x80,0x12,0xA0,0x15,0x90,0x00,0x00, +/* */ +0x22,0x40,0x14,0x60,0x7F,0x50,0x08,0x40,0x3E,0xF0,0x2A,0x40,0x2A,0x40,0x36,0x40, +0x22,0xA0,0x3E,0xA0,0x22,0xA0,0x3F,0x10,0x00,0x00, +/* */ +0x08,0x80,0x3E,0xF0,0x09,0x20,0x7E,0xA0,0x10,0x40,0x3C,0xA0,0x45,0x10,0x0C,0x00, +0x02,0x40,0x7F,0xF0,0x08,0x80,0x70,0x70,0x00,0x00, +/* */ +0x03,0xC0,0x7A,0x40,0x22,0x40,0x22,0x40,0x3C,0x30,0x28,0x00,0x2F,0xE0,0x5A,0x20, +0x09,0x40,0x10,0x80,0x21,0x40,0x46,0x30,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x22,0x20,0x22,0x20,0x3B,0xE0,0x2A,0x20,0x2A,0x20,0x5B,0xE0, +0x0A,0x20,0x12,0x20,0x22,0x20,0x47,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7B,0xF0,0x24,0x00,0x23,0xE0,0x38,0x40,0x29,0x80,0x2B,0xF0,0x59,0x50, +0x0A,0x50,0x14,0x90,0x21,0x10,0x42,0x60,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x21,0x40,0x22,0x20,0x3C,0x90,0x29,0x00,0x2A,0x40,0x58,0x90, +0x0B,0x20,0x10,0x40,0x21,0x80,0x46,0x00,0x00,0x00, +/* */ +0x03,0xE0,0x72,0x20,0x23,0xE0,0x20,0x00,0x37,0xF0,0x54,0x10,0x54,0x90,0x34,0x90, +0x14,0x90,0x21,0x40,0x22,0x20,0x44,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x21,0x40,0x22,0x20,0x3C,0x10,0x2B,0xE0,0x28,0x00,0x59,0x20, +0x0C,0xA0,0x12,0xA0,0x22,0x40,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x30,0x7B,0xC0,0x20,0x90,0x22,0x50,0x39,0x20,0x2B,0xF0,0x28,0x20,0x58,0x40, +0x0B,0xF0,0x10,0x40,0x20,0x40,0x40,0xC0,0x00,0x00, +/* */ +0x02,0x20,0x79,0x40,0x23,0xE0,0x22,0xA0,0x3B,0xE0,0x2A,0xA0,0x2A,0xA0,0x5B,0xE0, +0x08,0x80,0x17,0xF0,0x20,0x80,0x40,0x80,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x20,0x40,0x20,0x80,0x3B,0xB0,0x2A,0x90,0x2A,0xD0,0x5B,0xA0, +0x08,0xD0,0x11,0x90,0x20,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x24,0x50,0x23,0x80,0x32,0x00,0x53,0xF0,0x52,0x40,0x32,0x40, +0x17,0xF0,0x20,0x00,0x22,0x40,0x44,0x20,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x20,0x80,0x23,0xE0,0x30,0x00,0x57,0xF0,0x54,0x10,0x33,0xE0, +0x12,0x20,0x23,0xE0,0x21,0x40,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x78,0x90,0x20,0x90,0x32,0x90,0x52,0x90,0x7A,0x90,0x14,0x90, +0x19,0x10,0x71,0x10,0x12,0x10,0x14,0x60,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x7C,0x00,0x25,0xE0,0x55,0x20,0x7D,0x20,0x15,0x20,0x1D,0x60, +0x75,0x00,0x15,0x10,0x15,0x10,0x18,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x78,0x80,0x27,0xF0,0x50,0x80,0x78,0x80,0x13,0xE0,0x1A,0x20, +0x72,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x78,0x20,0x20,0x20,0x53,0xA0,0x7A,0xA0,0x12,0xA0,0x1A,0xA0, +0x73,0xA0,0x12,0x20,0x10,0x20,0x10,0x60,0x00,0x00, +/* */ +0x10,0x80,0x10,0xF0,0x78,0x80,0x20,0x80,0x53,0xF0,0x7A,0x10,0x12,0x10,0x1B,0xF0, +0x72,0x10,0x12,0x00,0x12,0x00,0x14,0x00,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x7A,0x20,0x22,0x20,0x52,0x20,0x7A,0x20,0x12,0x20,0x1B,0xE0, +0x70,0x00,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x7A,0x80,0x23,0xE0,0x54,0x80,0x78,0x80,0x17,0xF0,0x18,0x80, +0x71,0x40,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x79,0x40,0x22,0x20,0x54,0x90,0x79,0x00,0x12,0x40,0x18,0x90, +0x73,0x20,0x10,0x40,0x11,0x80,0x16,0x00,0x00,0x00, +/* */ +0x10,0x70,0x13,0x80,0x78,0x80,0x22,0x90,0x51,0xA0,0x78,0x80,0x13,0xF0,0x18,0x80, +0x70,0x80,0x10,0x80,0x10,0x80,0x13,0x80,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x7A,0x00,0x22,0x80,0x52,0x80,0x7B,0xF0,0x10,0x80,0x1A,0xA0, +0x72,0x90,0x14,0x90,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x79,0x10,0x21,0x10,0x32,0x10,0x54,0x60,0x78,0x00,0x13,0xF0, +0x1A,0x10,0x72,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x10,0x50,0x10,0x40,0x7B,0xF0,0x20,0x40,0x30,0x40,0x57,0x40,0x7A,0x40,0x12,0x40, +0x1A,0x40,0x73,0x50,0x16,0x30,0x10,0x10,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x78,0x80,0x21,0x00,0x32,0x20,0x53,0xF0,0x78,0x90,0x10,0x80, +0x1B,0xE0,0x70,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x79,0x40,0x22,0x20,0x34,0x10,0x53,0xE0,0x78,0x80,0x10,0x80, +0x1B,0xE0,0x70,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x7A,0x20,0x25,0x40,0x50,0x80,0x79,0x40,0x16,0x30,0x1B,0xE0, +0x72,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x7A,0x80,0x22,0xA0,0x53,0xA0,0x7A,0xA0,0x13,0xA0,0x1A,0xA0, +0x72,0xE0,0x17,0xA0,0x10,0xA0,0x10,0x90,0x00,0x00, +/* */ +0x10,0x40,0x38,0xE0,0x10,0x40,0x7D,0xF0,0x28,0xA0,0x45,0x10,0x3F,0xE0,0x0A,0x00, +0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x7E,0x30,0x25,0x50,0x57,0xF0,0x7C,0x90,0x17,0xF0,0x1D,0x10, +0x75,0x10,0x15,0xD0,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x20,0x00,0x27,0x70,0x71,0x10,0x25,0x50,0x52,0x20,0x55,0x50,0x78,0x00,0x17,0x70, +0x19,0x50,0x75,0x50,0x12,0x20,0x15,0x50,0x00,0x00, +/* */ +0x11,0x50,0x12,0xA0,0x7D,0x40,0x22,0xA0,0x51,0x50,0x78,0x00,0x17,0xF0,0x1C,0x90, +0x77,0xF0,0x14,0x90,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x78,0x80,0x23,0xE0,0x31,0x00,0x57,0xF0,0x7A,0x20,0x15,0xD0, +0x18,0x80,0x77,0xF0,0x11,0x40,0x12,0x20,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x7D,0x40,0x27,0xF0,0x35,0x50,0x57,0xF0,0x7C,0x00,0x15,0x50, +0x1D,0xE0,0x75,0x40,0x15,0x50,0x19,0xB0,0x00,0x00, +/* */ +0x14,0x90,0x12,0xA0,0x7F,0xF0,0x22,0xA0,0x54,0x90,0x7A,0x20,0x13,0x70,0x1D,0x20, +0x75,0xA0,0x1A,0xF0,0x12,0x20,0x14,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x7F,0xF0, +0x02,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x04,0x80,0x04,0x40,0x07,0xE0,0x3C,0x00,0x04,0x00,0x05,0xF0,0x7E,0x00,0x04,0x40, +0x02,0x80,0x01,0x10,0x06,0x90,0x38,0x70,0x00,0x00, +/* */ +0x08,0xA0,0x14,0x90,0x22,0x80,0x40,0xF0,0x3F,0x80,0x24,0xA0,0x24,0xA0,0x24,0xA0, +0x2C,0x40,0x20,0xD0,0x25,0x30,0x1E,0x10,0x00,0x00, +/* */ +0x7F,0xF0,0x04,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x08,0x80, +0x0F,0xE0,0x74,0x40,0x03,0x90,0x3C,0x70,0x00,0x00, +/* */ +0x08,0x40,0x3E,0x50,0x08,0x40,0x3E,0x70,0x22,0xC0,0x3E,0x50,0x22,0x50,0x3E,0x60, +0x08,0x60,0x7F,0x50,0x08,0xB0,0x09,0x10,0x00,0x00, +/* */ +0x3E,0x80,0x22,0xA0,0x3E,0x90,0x00,0x80,0x7F,0xF0,0x22,0x80,0x3E,0x90,0x22,0xA0, +0x3E,0xC0,0x22,0x90,0x7F,0x50,0x02,0x30,0x00,0x00, +/* */ +0x12,0x40,0x3F,0x50,0x12,0x40,0x1E,0x70,0x12,0xC0,0x1E,0x50,0x12,0x50,0x7F,0x60, +0x2A,0x60,0x31,0x50,0x20,0xB0,0x3F,0x10,0x00,0x00, +/* */ +0x3E,0x40,0x22,0x50,0x3E,0x40,0x22,0x70,0x3E,0xC0,0x08,0x50,0x28,0x50,0x3E,0x60, +0x48,0x60,0x3E,0x50,0x08,0xB0,0x7F,0x10,0x00,0x00, +/* */ +0x7E,0x40,0x22,0x50,0x3B,0x40,0x29,0x70,0x51,0xC0,0x2B,0x50,0x00,0x50,0x7F,0x60, +0x55,0x60,0x55,0x50,0x57,0xB0,0x79,0x10,0x00,0x00, +/* */ +0x3E,0x40,0x14,0x50,0x55,0x40,0x36,0x70,0x14,0xC0,0x7F,0x50,0x00,0x50,0x3E,0x60, +0x22,0x60,0x3E,0x50,0x22,0xB0,0x3F,0x10,0x00,0x00, +/* */ +0x00,0x40,0x00,0x50,0x5F,0xF0,0x50,0x40,0x77,0xA0,0x15,0x20,0x17,0xB0,0x74,0xA0, +0x57,0xA0,0x55,0x20,0x17,0xF0,0x20,0x90,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xE0,0x40,0x80,0x54,0x80,0x54,0xC0,0x49,0x40,0x49,0x40,0x55,0xC0, +0x55,0x40,0x41,0x50,0x7D,0x50,0x01,0xB0,0x00,0x00, +/* */ +0x10,0x00,0x11,0xE0,0x28,0x80,0x44,0x80,0x10,0xC0,0x09,0x40,0x7D,0x40,0x05,0xC0, +0x09,0x40,0x29,0x50,0x11,0x50,0x09,0xB0,0x00,0x00, +/* */ +0x10,0x00,0x7B,0xE0,0x01,0x00,0x49,0x00,0x31,0xC0,0x7D,0x40,0x02,0x40,0x7B,0x40, +0x4A,0xC0,0x4A,0x50,0x7B,0x50,0x4A,0x30,0x00,0x00, +/* */ +0x08,0x10,0x7F,0x20,0x08,0x50,0x7F,0x20,0x22,0x50,0x3E,0x20,0x14,0xC0,0x7F,0xF0, +0x10,0x00,0x1F,0x80,0x24,0x90,0x3A,0x70,0x00,0x00, +/* */ +0x28,0x00,0x7D,0xE0,0x54,0x80,0x7C,0x80,0x54,0xC0,0x7D,0x40,0x01,0x40,0x39,0xC0, +0x29,0x40,0x39,0x50,0x29,0x50,0x39,0xB0,0x00,0x00, +/* */ +0x3C,0x40,0x25,0xF0,0x3C,0xA0,0x21,0xF0,0x3C,0x40,0x54,0xE0,0x1C,0x40,0x7F,0xF0, +0x10,0x00,0x1F,0x80,0x24,0x90,0x3A,0x70,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x03,0xE0,0x02,0x00,0x02,0x00,0x3F,0xE0,0x10,0x20,0x08,0x40, +0x04,0x80,0x03,0x00,0x0C,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x3F,0x80,0x08,0x80,0x10,0x90,0x20,0x70,0x40,0x00,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x04,0x00,0x04,0x00,0x3F,0x80, +0x04,0x80,0x08,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x48,0x80,0x48,0x80,0x48,0x80,0x78,0x80,0x4F,0xF0,0x48,0x80, +0x48,0x80,0x78,0x80,0x48,0x80,0x00,0x80,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x02,0x00, +0x7F,0xF0,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x00,0x00, +0x7F,0xF0,0x08,0x00,0x10,0x40,0x3F,0xE0,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x07,0x00, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00,0x3F,0xF0,0x21,0x00, +0x21,0x00,0x22,0x80,0x24,0x40,0x58,0x30,0x00,0x00, +/* */ +0x00,0x60,0x7B,0x80,0x4A,0x00,0x4A,0x00,0x4B,0xF0,0x7A,0x40,0x4A,0x40,0x4A,0x40, +0x4A,0x40,0x7A,0x40,0x44,0x40,0x08,0x40,0x00,0x00, +/* */ +0x01,0x00,0x79,0x00,0x49,0xF0,0x4A,0x10,0x4D,0x10,0x78,0x90,0x48,0x30,0x48,0x50, +0x48,0x90,0x7B,0x10,0x48,0x10,0x00,0x60,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x02,0x00,0x12,0x20,0x12,0x40, +0x25,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x08,0x00,0x1F,0xF0,0x22,0x10, +0x45,0x10,0x28,0x90,0x3F,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x1E,0xA0,0x22,0x90,0x54,0x90,0x08,0x80,0x17,0xF0,0x60,0x00,0x1F,0xE0, +0x10,0x20,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x18,0x00,0x65,0xF0,0x45,0x10, +0x4D,0x10,0x55,0x10,0x69,0x30,0x11,0x00,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x04,0x00,0x02,0x00,0x3F,0xE0, +0x00,0x00,0x10,0x40,0x08,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x04,0xF0,0x00,0x90,0x38,0x90,0x09,0xF0,0x0A,0x90,0x6C,0x90,0x2A,0x90, +0x2A,0xF0,0x29,0x00,0x48,0x80,0x18,0x70,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x4A,0x10,0x4A,0x10,0x4B,0xF0,0x7A,0x00,0x4A,0x90,0x4A,0xA0, +0x4A,0xC0,0x7A,0x90,0x4A,0x90,0x04,0x70,0x00,0x00, +/* */ +0x02,0x20,0x1F,0x40,0x02,0x80,0x7F,0xF0,0x04,0x80,0x1D,0x10,0x63,0xF0,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0xA0,0x3F,0xF0,0x20,0x90, +0x3E,0xA0,0x22,0x50,0x26,0xB0,0x41,0x10,0x00,0x00, +/* */ +0x01,0x40,0x72,0x50,0x56,0x60,0x5A,0x40,0x52,0xD0,0x73,0x50,0x52,0x30,0x50,0x80, +0x57,0xF0,0x70,0x80,0x50,0x80,0x00,0x80,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x05,0x00,0x25,0x20,0x15,0x40, +0x25,0x20,0x09,0x00,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x44,0x10, +0x3F,0xE0,0x08,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x54,0x10,0x50,0x80,0x57,0xE0,0x71,0x00,0x52,0x80,0x53,0xE0, +0x50,0x80,0x77,0xF0,0x50,0x80,0x00,0x80,0x00,0x00, +/* */ +0x00,0xA0,0x70,0x90,0x57,0xF0,0x50,0x80,0x57,0xF0,0x74,0x90,0x57,0xF0,0x54,0x90, +0x57,0xF0,0x74,0x90,0x54,0x90,0x04,0x30,0x00,0x00, +/* */ +0x01,0x00,0x72,0x80,0x54,0x40,0x59,0x30,0x50,0x80,0x77,0xC0,0x50,0x40,0x50,0x80, +0x57,0xE0,0x74,0x20,0x57,0xE0,0x04,0x20,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x10,0x80,0x3C,0xC0,0x44,0xA0, +0x28,0x80,0x1F,0xF0,0x70,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x54,0x10,0x53,0xE0,0x50,0x00,0x73,0xE0,0x52,0x20,0x53,0xE0, +0x52,0x20,0x73,0xE0,0x50,0x00,0x07,0xF0,0x00,0x00, +/* */ +0x00,0x50,0x77,0x60,0x51,0x40,0x55,0x50,0x52,0x20,0x72,0x20,0x55,0xD0,0x50,0x80, +0x57,0xF0,0x71,0x40,0x52,0x20,0x04,0x10,0x00,0x00, +/* */ +0x00,0x70,0x77,0x80,0x55,0x10,0x52,0xA0,0x5F,0xF0,0x79,0x10,0x57,0xE0,0x52,0x00, +0x53,0xE0,0x75,0x20,0x58,0xC0,0x03,0x30,0x00,0x00, +/* */ +0x07,0xF0,0x74,0x10,0x53,0xE0,0x52,0x20,0x53,0xE0,0x72,0x20,0x53,0xE0,0x50,0x80, +0x57,0xF0,0x70,0x00,0x52,0x20,0x04,0x10,0x00,0x00, +/* */ +0x02,0x40,0x77,0x40,0x50,0x40,0x57,0x70,0x55,0x90,0x77,0x50,0x50,0x50,0x57,0x50, +0x51,0x50,0x77,0xA0,0x52,0x50,0x06,0x90,0x00,0x00, +/* */ +0x03,0xE0,0x70,0x80,0x57,0xF0,0x50,0x80,0x57,0xF0,0x74,0x90,0x56,0xB0,0x54,0x90, +0x57,0xF0,0x70,0x80,0x57,0xF0,0x05,0x50,0x00,0x00, +/* */ +0x07,0x70,0x75,0x50,0x53,0x30,0x55,0x50,0x52,0x20,0x77,0xF0,0x52,0x40,0x53,0xF0, +0x52,0x40,0x73,0xF0,0x52,0x40,0x03,0xF0,0x00,0x00, +/* */ +0x01,0x40,0x77,0xF0,0x50,0x80,0x53,0xE0,0x50,0x80,0x77,0xF0,0x52,0x50,0x57,0xF0, +0x5A,0x50,0x77,0x60,0x51,0x50,0x02,0xB0,0x00,0x00, +/* */ +0x3F,0xE0,0x22,0x20,0x21,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x25,0x20,0x3D,0xE0, +0x08,0x80,0x3F,0xE0,0x18,0x80,0x6C,0x70,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x02,0x00,0x10,0x40,0x7F,0xF0,0x10,0x40,0x00,0x00,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x0D,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x24,0x40,0x7F,0xF0,0x24,0x40,0x27,0xC0,0x20,0x00,0x3F,0xE0,0x00,0x00,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x0D,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xE0,0x45,0x20,0x55,0x20,0x55,0x20,0x55,0x20,0x55,0xE0,0x54,0xC0, +0x54,0xC0,0x11,0x40,0x29,0x50,0x46,0x30,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x45,0x00,0x55,0x20,0x57,0xF0,0x54,0x10,0x55,0xE0,0x55,0x20, +0x55,0x20,0x11,0x20,0x29,0xE0,0x45,0x20,0x00,0x00, +/* */ +0x11,0x00,0x7B,0xC0,0x11,0x40,0x7B,0x50,0x12,0xB0,0x34,0x10,0x00,0x00,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x0D,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x08,0x90,0x2E,0xA0,0x28,0xC0,0x2E,0x90,0x70,0x70,0x00,0x00,0x3F,0xE0,0x22,0x20, +0x22,0x20,0x05,0x80,0x18,0x60,0x60,0x10,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x40,0x45,0xF0,0x54,0x80,0x55,0x10,0x55,0xE0,0x54,0x40,0x54,0x90, +0x55,0x20,0x10,0x40,0x28,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xF0,0x45,0x10,0x55,0x10,0x55,0xF0,0x55,0x40,0x55,0x20,0x56,0xA0, +0x54,0x50,0x11,0x00,0x28,0x80,0x44,0x40,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xF0,0x45,0x00,0x55,0x70,0x55,0x00,0x55,0xF0,0x55,0xA0,0x55,0xA0, +0x56,0xB0,0x12,0xA0,0x2A,0xD0,0x44,0x80,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x12,0x40,0x0A,0x80,0x7F,0xF0,0x12,0x40,0x20,0x20,0x5F,0xD0, +0x12,0x40,0x12,0x40,0x0D,0x80,0x70,0x60,0x00,0x00, +/* */ +0x00,0xA0,0x7C,0x90,0x44,0x80,0x57,0xF0,0x54,0x80,0x56,0xC0,0x55,0xD0,0x55,0xA0, +0x56,0xA0,0x14,0x90,0x28,0x80,0x45,0x80,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x12,0x40,0x2A,0xA0,0x02,0x00,0x7F,0xF0,0x40,0x10,0x3F,0xE0, +0x22,0x20,0x22,0x20,0x0D,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x00,0x40,0x7D,0x50,0x45,0x60,0x56,0x40,0x54,0xA0,0x55,0x10,0x54,0x40,0x55,0x50, +0x55,0x60,0x12,0x40,0x28,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x00,0x50,0x7D,0xF0,0x44,0x40,0x55,0xF0,0x55,0x50,0x55,0xF0,0x55,0x50,0x55,0x50, +0x54,0x20,0x13,0xF0,0x29,0x20,0x44,0x60,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x11,0x10,0x1D,0x10,0x11,0x50,0x11,0x50,0x7D,0x50,0x45,0x50, +0x44,0x80,0x44,0xD0,0x7D,0x50,0x46,0x30,0x00,0x00, +/* */ +0x10,0x00,0x55,0xF0,0x55,0x10,0x7D,0x10,0x01,0x50,0x7D,0x50,0x05,0x50,0x7D,0x50, +0x40,0x80,0x44,0xD0,0x59,0x50,0x62,0x30,0x00,0x00, +/* */ +0x00,0x00,0x3E,0xF0,0x08,0x90,0x08,0x90,0x2A,0x90,0x2A,0x90,0x2A,0xD0,0x5D,0x40, +0x08,0x40,0x08,0x50,0x0E,0xD0,0x71,0x30,0x00,0x00, +/* */ +0x10,0x00,0x7D,0xF0,0x11,0x10,0x7D,0x10,0x05,0x50,0x29,0x50,0x59,0x50,0x29,0x50, +0x7C,0x80,0x10,0xD0,0x29,0x50,0x46,0x30,0x00,0x00, +/* */ +0x08,0x00,0x14,0xF0,0x22,0x90,0x5D,0x90,0x00,0x90,0x71,0x90,0x55,0xD0,0x75,0x40, +0x55,0x40,0x75,0x50,0x51,0xD0,0x53,0x30,0x00,0x00, +/* */ +0x14,0x00,0x3E,0xF0,0x14,0x90,0x7F,0x90,0x08,0x90,0x3E,0x90,0x2A,0xD0,0x3E,0x40, +0x2A,0x40,0x7F,0x50,0x22,0xD0,0x27,0x30,0x00,0x00, +/* */ +0x28,0x00,0x7D,0xF0,0x29,0x10,0x39,0x10,0x11,0x50,0x7D,0x50,0x55,0x50,0x7D,0x50, +0x10,0x80,0x7C,0xD0,0x11,0x50,0x7E,0x30,0x00,0x00, +/* */ +0x1E,0x00,0x10,0xF0,0x7E,0x90,0x52,0x90,0x5C,0x90,0x72,0x90,0x4E,0xD0,0x54,0x40, +0x55,0x40,0x76,0x50,0x54,0xD0,0x3F,0x30,0x00,0x00, +/* */ +0x09,0x40,0x11,0x20,0x31,0x70,0x57,0x80,0x10,0x50,0x00,0x30,0x12,0x00,0x1F,0xE0, +0x22,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x73,0xE0,0x12,0x20,0x77,0xF0,0x44,0x90,0x77,0xF0,0x10,0xA0,0x17,0xF0,0x72,0x10, +0x1F,0xE0,0x22,0x00,0x7F,0xF0,0x02,0x00,0x00,0x00, +/* */ +0x09,0x00,0x29,0x00,0x29,0x10,0x3D,0x20,0x49,0x40,0x09,0x80,0x0D,0x00,0x79,0x00, +0x09,0x00,0x09,0x10,0x09,0x10,0x08,0xF0,0x00,0x00, +/* */ +0x08,0x60,0x2B,0x80,0x28,0x80,0x3C,0xE0,0x4B,0x80,0x08,0x80,0x0C,0xF0,0x7B,0x80, +0x08,0x80,0x08,0x90,0x08,0x90,0x08,0x70,0x00,0x00, +/* */ +0x08,0x40,0x28,0x40,0x28,0x40,0x3D,0xF0,0x48,0x40,0x08,0x40,0x0D,0xF0,0x79,0x10, +0x09,0x10,0x09,0x10,0x09,0xF0,0x09,0x10,0x00,0x00, +/* */ +0x17,0xF0,0x10,0x80,0x53,0xE0,0x79,0x20,0x51,0x20,0x17,0xF0,0x18,0x00,0x73,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x10,0x80,0x12,0x80,0x53,0xE0,0x7C,0x80,0x50,0x80,0x17,0xF0,0x18,0x00,0x73,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x10,0x80,0x13,0xE0,0x51,0x40,0x7A,0x20,0x57,0xF0,0x10,0x20,0x1B,0xA0,0x72,0xA0, +0x12,0xA0,0x13,0xA0,0x12,0x20,0x10,0x60,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x53,0xE0,0x7A,0x20,0x53,0xE0,0x12,0x20,0x1B,0xE0,0x72,0x20, +0x17,0xF0,0x10,0x00,0x11,0x40,0x12,0x20,0x00,0x00, +/* */ +0x10,0x40,0x10,0xF0,0x56,0x50,0x7B,0xF0,0x52,0x50,0x14,0xF0,0x1E,0x40,0x73,0xF0, +0x12,0x40,0x17,0xF0,0x12,0x40,0x15,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x54,0x10,0x7F,0xF0,0x54,0x00,0x17,0xF0,0x1D,0x50,0x75,0x50, +0x17,0xF0,0x15,0x50,0x15,0x50,0x14,0x30,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x50,0x00,0x7B,0xE0,0x52,0x20,0x13,0xE0,0x18,0x00,0x77,0xF0, +0x14,0x10,0x15,0xD0,0x15,0x50,0x15,0xD0,0x00,0x00, +/* */ +0x10,0x00,0x7D,0xF0,0x10,0x90,0x38,0x90,0x10,0x90,0x7D,0x10,0x12,0x60,0x3F,0xC0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x10,0x80,0x4A,0xA0,0x22,0x90,0x04,0x80,0x20,0xE0,0x4F,0x00,0x00,0x80,0x1F,0x00, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x11,0x10,0x65,0x60,0x25,0x20,0x28,0xA0,0x70,0x70,0x2F,0x20,0x25,0x20,0x75,0x70, +0x25,0x20,0x25,0x20,0x25,0x20,0x4B,0x60,0x00,0x00, +/* */ +0x12,0x10,0x62,0x60,0x25,0x20,0x28,0xA0,0x77,0x70,0x20,0x20,0x27,0x20,0x75,0x70, +0x25,0x20,0x25,0x20,0x27,0x20,0x45,0x60,0x00,0x00, +/* */ +0x3C,0x40,0x25,0xF0,0x3C,0xA0,0x21,0xF0,0x3C,0x40,0x54,0xE0,0x1C,0x40,0x3F,0xC0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x02,0x20,0x1F,0x40,0x02,0x80,0x7F,0xF0,0x04,0x80,0x1D,0x10,0x63,0xF0,0x03,0x80, +0x3C,0x00,0x07,0xC0,0x7C,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x09,0x00,0x72,0x20,0x13,0xF0,0x18,0x90,0x72,0x80,0x13,0xE0,0x14,0x80,0x18,0x80, +0x77,0xF0,0x10,0x80,0x10,0x90,0x0F,0xF0,0x00,0x00, +/* */ +0x03,0x80,0x3C,0x00,0x07,0x80,0x3C,0x00,0x07,0xC0,0x7C,0x10,0x03,0xF0,0x08,0x60, +0x71,0x80,0x1C,0xE0,0x73,0x90,0x18,0x70,0x00,0x00, +/* */ +0x10,0x80,0x6D,0xE0,0x24,0xA0,0x37,0xF0,0x68,0xA0,0x2D,0xE0,0x24,0x80,0x35,0xE0, +0x6C,0x80,0x27,0xE0,0x28,0x90,0x1F,0xF0,0x00,0x00, +/* */ +0x10,0x30,0x29,0xC0,0x7C,0x40,0x10,0x70,0x7D,0xC0,0x28,0x40,0x54,0x70,0x29,0xC0, +0x10,0x40,0x24,0x50,0x18,0x50,0x60,0x30,0x00,0x00, +/* */ +0x08,0x30,0x14,0xC0,0x22,0x40,0x5D,0x70,0x00,0xC0,0x71,0x40,0x55,0x70,0x75,0xC0, +0x55,0x40,0x75,0x50,0x51,0x50,0x53,0x30,0x00,0x00, +/* */ +0x49,0x40,0x2A,0x70,0x7F,0xA0,0x41,0x20,0x5D,0xA0,0x55,0x40,0x5D,0xA0,0x43,0x90, +0x3C,0x00,0x07,0xC0,0x7C,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x12,0x00,0x67,0x80,0x28,0x80,0x37,0xE0,0x65,0x20,0x27,0xE0,0x25,0x20,0x3F,0xF0, +0x62,0x40,0x23,0xC0,0x22,0x50,0x1F,0xF0,0x00,0x00, +/* */ +0x12,0x20,0x67,0xF0,0x21,0x40,0x35,0x50,0x61,0x40,0x27,0xF0,0x22,0x20,0x33,0xE0, +0x62,0x20,0x23,0xE0,0x20,0x10,0x1F,0xF0,0x00,0x00, +/* */ +0x77,0x30,0x55,0xC0,0x77,0x40,0x55,0x70,0x77,0xC0,0x14,0x40,0x3F,0x70,0x64,0xC0, +0x3F,0x40,0x24,0x50,0x3F,0x50,0x20,0x30,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x20,0x00,0x5F,0xE0,0x00,0x00,0x3F,0xC0,0x00,0x40,0x08,0x40, +0x08,0x40,0x08,0x50,0x10,0x30,0x20,0x10,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x20,0x00,0x5F,0xE0,0x00,0x00,0x3F,0xC0,0x00,0x40,0x12,0x40, +0x12,0x40,0x12,0x50,0x22,0x30,0x42,0x10,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x20,0x00,0x5F,0xE0,0x00,0x00,0x3F,0xC0,0x08,0x40,0x49,0x40, +0x49,0x40,0x49,0x50,0x7F,0x30,0x01,0x10,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x20,0x00,0x5F,0xE0,0x00,0x00,0x3F,0xC0,0x00,0x40,0x15,0x40, +0x15,0x40,0x15,0x50,0x15,0x30,0x21,0x10,0x00,0x00, +/* */ +0x1F,0xE0,0x20,0x00,0x5F,0xC0,0x00,0x00,0x3F,0xC0,0x10,0x40,0x3F,0x40,0x51,0x40, +0x0E,0x40,0x75,0xD0,0x12,0x30,0x08,0x10,0x00,0x00, +/* */ +0x10,0x00,0x1F,0xF0,0x20,0x00,0x5F,0xE0,0x00,0x00,0x3F,0xC0,0x00,0x40,0x7F,0x40, +0x14,0x40,0x55,0x50,0x14,0x30,0x7F,0x90,0x00,0x00, +/* */ +0x1F,0xE0,0x20,0x00,0x5F,0xC0,0x00,0x00,0x3F,0xC0,0x00,0x40,0x7F,0x40,0x49,0x40, +0x5D,0x40,0x49,0x50,0x55,0x30,0x7F,0x10,0x00,0x00, +/* */ +0x1F,0xF0,0x20,0x00,0x5F,0xC0,0x08,0x40,0x7F,0x40,0x08,0x40,0x3E,0x40,0x22,0x40, +0x3E,0x40,0x14,0x50,0x25,0x30,0x43,0x10,0x00,0x00, +/* */ +0x1F,0xF0,0x20,0x00,0x5F,0xC0,0x00,0x40,0x1F,0x40,0x11,0x40,0x1F,0x40,0x11,0x40, +0x3F,0xC0,0x2A,0xD0,0x2A,0xB0,0x7F,0xD0,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x08,0x00,0x0F,0xF0,0x10,0x40,0x28,0x40,0x48,0x80,0x05,0x00, +0x02,0x00,0x05,0x00,0x18,0xC0,0x60,0x30,0x00,0x00, +/* */ +0x08,0x80,0x08,0x80,0x3E,0x80,0x08,0xF0,0x3F,0x20,0x2A,0xA0,0x2A,0xA0,0x3E,0xA0, +0x1C,0xA0,0x2A,0x40,0x48,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x10,0x80,0x3C,0x80,0x24,0x80,0x3C,0xF0,0x25,0x20,0x3C,0xA0,0x10,0xA0,0x7E,0xA0, +0x20,0xA0,0x3C,0x40,0x24,0xA0,0x4D,0x10,0x00,0x00, +/* */ +0x08,0x80,0x2B,0xE0,0x28,0x80,0x2B,0xF0,0x3C,0x10,0x21,0x40,0x22,0xC0,0x39,0x40, +0x2F,0xF0,0x28,0x80,0x29,0x20,0x4E,0x10,0x00,0x00, +/* */ +0x10,0xA0,0x52,0xA0,0x57,0xF0,0x52,0xA0,0x7A,0xE0,0x42,0x00,0x43,0xF0,0x70,0x80, +0x57,0xF0,0x51,0xC0,0x52,0xA0,0x14,0x90,0x00,0x00, +/* */ +0x10,0x80,0x57,0xF0,0x54,0x10,0x57,0xF0,0x7C,0xA0,0x47,0xF0,0x44,0x80,0x77,0xF0, +0x56,0x90,0x5B,0xF0,0x52,0x90,0x12,0x30,0x00,0x00, +/* */ +0x01,0xE0,0x3E,0x00,0x12,0x20,0x09,0x40,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x08,0x00, +0x1F,0xC0,0x24,0x40,0x43,0x80,0x1C,0x70,0x00,0x00, +/* */ +0x0C,0x80,0x70,0xE0,0x14,0x80,0x4B,0xF0,0x22,0x90,0x0A,0xE0,0x7F,0x90,0x0A,0x70, +0x4A,0x00,0x2D,0xC0,0x09,0x50,0x1A,0x30,0x00,0x00, +/* */ +0x00,0x10,0x3C,0x10,0x24,0x90,0x24,0x90,0x3C,0x90,0x24,0x90,0x24,0x90,0x3C,0x90, +0x24,0x90,0x24,0x10,0x24,0x10,0x4C,0x70,0x00,0x00, +/* */ +0x00,0x00,0x3D,0xF0,0x24,0x00,0x24,0x00,0x3F,0xF0,0x24,0x80,0x25,0x00,0x3D,0xF0, +0x24,0x10,0x24,0x10,0x24,0x10,0x4C,0x60,0x00,0x00, +/* */ +0x00,0x10,0x3E,0x20,0x22,0x40,0x22,0x80,0x3E,0x10,0x22,0x20,0x22,0x40,0x3E,0x80, +0x22,0x10,0x22,0x20,0x22,0x40,0x4E,0x80,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x20,0x00,0x3F,0xE0,0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x01,0x20,0x39,0x20,0x29,0x20,0x2B,0xF0,0x39,0x20,0x29,0x20,0x29,0x20,0x3B,0xF0, +0x29,0x20,0x29,0x20,0x2A,0x20,0x5C,0x20,0x00,0x00, +/* */ +0x00,0x00,0x3B,0xE0,0x28,0x00,0x28,0x00,0x3B,0xF0,0x29,0x40,0x29,0x40,0x39,0x40, +0x29,0x40,0x2A,0x50,0x2A,0x50,0x5C,0x30,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x28,0x80,0x2B,0xF0,0x38,0x80,0x28,0x80,0x29,0x40,0x39,0x40, +0x29,0x40,0x2A,0xA0,0x2A,0xA0,0x5C,0x10,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x28,0x80,0x2B,0xF0,0x38,0x80,0x29,0x20,0x29,0x20,0x39,0x40, +0x2A,0x40,0x2A,0x90,0x2A,0xF0,0x5C,0x10,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x2B,0xF0,0x28,0x80,0x3A,0xA0,0x2A,0xA0,0x2A,0xA0,0x3B,0xE0, +0x28,0x80,0x28,0x90,0x28,0x90,0x58,0x70,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x2B,0xF0,0x2A,0x90,0x3A,0x90,0x2A,0x90,0x2B,0x50,0x3A,0x30, +0x2A,0x10,0x2A,0x10,0x2A,0x10,0x5A,0x30,0x00,0x00, +/* */ +0x10,0x40,0x0F,0x80,0x12,0x40,0x7F,0xF0,0x08,0x00,0x1F,0xE0,0x30,0x20,0x5F,0xE0, +0x10,0x20,0x1F,0xE0,0x10,0x20,0x10,0x60,0x00,0x00, +/* */ +0x01,0x00,0x39,0x00,0x29,0xF0,0x2A,0x10,0x3A,0x20,0x2C,0x80,0x28,0x80,0x38,0x80, +0x29,0x40,0x29,0x40,0x2A,0x20,0x5C,0x10,0x00,0x00, +/* */ +0x01,0x40,0x39,0x20,0x29,0x00,0x2F,0xF0,0x39,0x40,0x29,0x40,0x29,0x50,0x39,0x60, +0x2A,0x40,0x2A,0xD0,0x2D,0x50,0x58,0x30,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x2F,0xF0,0x29,0x00,0x39,0x80,0x2A,0x80,0x2B,0xF0,0x38,0x80, +0x2A,0xA0,0x2A,0x90,0x2C,0x90,0x59,0x80,0x00,0x00, +/* */ +0x00,0x80,0x3C,0x80,0x24,0xF0,0x24,0x80,0x3C,0x80,0x27,0xF0,0x24,0x80,0x3C,0xC0, +0x24,0xA0,0x24,0x90,0x24,0x80,0x4C,0x80,0x00,0x00, +/* */ +0x00,0x40,0x3C,0x70,0x24,0x40,0x24,0x40,0x3D,0xF0,0x25,0x10,0x25,0x10,0x3D,0xF0, +0x25,0x10,0x25,0x00,0x25,0x00,0x4E,0x00,0x00,0x00, +/* */ +0x00,0x00,0x3D,0xF0,0x25,0x50,0x25,0x50,0x3D,0xF0,0x25,0x50,0x25,0x50,0x3D,0xF0, +0x25,0x50,0x24,0x40,0x24,0x40,0x4C,0x40,0x00,0x00, +/* */ +0x00,0x40,0x3C,0x40,0x25,0xF0,0x25,0x50,0x3D,0x50,0x25,0xF0,0x25,0x50,0x3D,0x50, +0x25,0xF0,0x25,0x50,0x24,0x40,0x4C,0x40,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x42,0x10,0x7F,0xF0,0x42,0x10,0x7F,0xF0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x02,0x00,0x3A,0x00,0x2B,0xF0,0x2D,0x00,0x39,0x00,0x29,0xE0,0x29,0x00,0x39,0x00, +0x29,0xF0,0x29,0x00,0x29,0x00,0x59,0x00,0x00,0x00, +/* */ +0x00,0x30,0x3B,0xC0,0x2A,0xA0,0x2A,0xA0,0x3A,0xA0,0x2A,0xA0,0x2A,0xA0,0x3A,0xA0, +0x2A,0x90,0x2A,0xD0,0x2A,0xA0,0x5C,0xE0,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x29,0x40,0x2A,0x20,0x3C,0x90,0x29,0x00,0x2A,0x40,0x38,0x90, +0x2B,0x20,0x28,0x40,0x29,0x80,0x5E,0x00,0x00,0x00, +/* */ +0x00,0x80,0x3C,0x80,0x24,0xF0,0x25,0x10,0x3E,0x10,0x25,0xD0,0x25,0x50,0x3D,0x50, +0x25,0xD0,0x25,0x10,0x24,0x10,0x4C,0x60,0x00,0x00, +/* */ +0x00,0x30,0x3B,0xC0,0x2A,0x40,0x2A,0x40,0x3A,0x40,0x2B,0xF0,0x2A,0x40,0x3A,0x40, +0x2A,0x40,0x2A,0x50,0x2B,0x30,0x5A,0x90,0x00,0x00, +/* */ +0x00,0x00,0x3B,0xE0,0x28,0x40,0x28,0x80,0x39,0x40,0x2A,0x20,0x2C,0x10,0x3B,0xE0, +0x28,0x80,0x28,0x80,0x28,0x80,0x5F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x2C,0x90,0x2A,0xA0,0x38,0x80,0x2F,0xF0,0x29,0x40,0x39,0x40, +0x29,0x40,0x2A,0x50,0x2A,0x50,0x5C,0x30,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x54,0x10,0x55,0xD0,0x74,0x10,0x55,0xD0,0x55,0x50,0x75,0x50, +0x55,0xD0,0x54,0x10,0x54,0x10,0x34,0x30,0x00,0x00, +/* */ +0x00,0x00,0x3B,0xF0,0x2A,0x10,0x2A,0x90,0x3A,0x90,0x2B,0xF0,0x2A,0x90,0x3B,0x50, +0x2A,0x30,0x2A,0x10,0x2B,0xF0,0x5A,0x10,0x00,0x00, +/* */ +0x00,0x80,0x39,0x40,0x2A,0x20,0x2C,0x10,0x3B,0xE0,0x28,0x00,0x28,0x00,0x3F,0xF0, +0x29,0x00,0x2A,0x20,0x2B,0xF0,0x58,0x10,0x00,0x00, +/* */ +0x02,0x20,0x39,0x40,0x28,0x80,0x29,0x40,0x3A,0x20,0x28,0x80,0x2F,0xF0,0x38,0x80, +0x2A,0xA0,0x2C,0x90,0x28,0x80,0x59,0x80,0x00,0x00, +/* */ +0x00,0x80,0x38,0x40,0x2B,0xF0,0x28,0x80,0x39,0x10,0x2B,0xE0,0x28,0x40,0x38,0x90, +0x2B,0x20,0x28,0x40,0x28,0xA0,0x5B,0x10,0x00,0x00, +/* */ +0x02,0x10,0x39,0x20,0x28,0x00,0x2B,0xF0,0x39,0x20,0x29,0x20,0x29,0x20,0x3B,0xF0, +0x29,0x20,0x29,0x20,0x29,0x20,0x5A,0x20,0x00,0x00, +/* */ +0x02,0x20,0x39,0x40,0x28,0x00,0x2B,0xE0,0x38,0x80,0x28,0x80,0x2F,0xF0,0x38,0x80, +0x29,0x40,0x29,0x40,0x2A,0x20,0x5C,0x10,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x2C,0x90,0x2A,0xA0,0x38,0x80,0x2F,0xF0,0x28,0x80,0x39,0xC0, +0x2A,0xA0,0x2C,0x90,0x28,0x80,0x58,0x80,0x00,0x00, +/* */ +0x00,0x00,0x3B,0xF0,0x28,0x80,0x29,0x40,0x3A,0x50,0x28,0xE0,0x29,0x40,0x3A,0x60, +0x28,0xD0,0x29,0x40,0x2A,0x40,0x59,0x80,0x00,0x00, +/* */ +0x73,0xE0,0x52,0x20,0x52,0x20,0x73,0xE0,0x50,0x80,0x57,0xF0,0x74,0x90,0x54,0x90, +0x55,0x50,0x56,0x30,0x54,0x10,0x34,0x30,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x2A,0xA0,0x2A,0xA0,0x3A,0xA0,0x2D,0xD0,0x28,0x80,0x38,0x80, +0x2B,0xE0,0x28,0x80,0x28,0x80,0x5F,0xF0,0x00,0x00, +/* */ +0x00,0x30,0x3B,0xC0,0x28,0x90,0x2A,0x50,0x39,0x20,0x2B,0xF0,0x28,0x20,0x38,0x40, +0x2B,0xF0,0x28,0x40,0x28,0x40,0x58,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x38,0x40,0x2B,0xF0,0x2A,0x10,0x39,0xE0,0x28,0x00,0x2B,0xF0,0x39,0x40, +0x29,0x40,0x29,0x40,0x2A,0x50,0x5C,0x30,0x00,0x00, +/* */ +0x00,0x00,0x3B,0xF0,0x2A,0x10,0x2B,0xF0,0x3A,0x40,0x2A,0x40,0x2B,0xD0,0x3A,0xE0, +0x2A,0xD0,0x2B,0x50,0x2A,0x40,0x5C,0xC0,0x00,0x00, +/* */ +0x38,0x80,0x2F,0xF0,0x28,0x80,0x3B,0xE0,0x28,0x80,0x2F,0xF0,0x3A,0x20,0x2B,0xE0, +0x2A,0x20,0x2B,0xE0,0x2A,0x20,0x5A,0x60,0x00,0x00, +/* */ +0x38,0x80,0x2F,0xF0,0x29,0x40,0x3A,0x20,0x2C,0x90,0x2B,0xE0,0x3A,0xA0,0x2B,0xE0, +0x2A,0xA0,0x2B,0xE0,0x2A,0x90,0x58,0x70,0x00,0x00, +/* */ +0x01,0x40,0x39,0x40,0x2F,0x70,0x29,0x40,0x39,0x40,0x2F,0x70,0x29,0x40,0x39,0x40, +0x2F,0x70,0x29,0x40,0x29,0x40,0x59,0x40,0x00,0x00, +/* */ +0x00,0x80,0x72,0xB0,0x54,0x90,0x54,0x90,0x76,0xB0,0x54,0x90,0x54,0x90,0x77,0xF0, +0x50,0x80,0x51,0x40,0x52,0x20,0x34,0x10,0x00,0x00, +/* */ +0x00,0x80,0x3B,0xF0,0x2A,0x10,0x28,0x00,0x39,0xE0,0x28,0x00,0x28,0x00,0x3B,0xF0, +0x28,0x80,0x2A,0xA0,0x2C,0x90,0x59,0x80,0x00,0x00, +/* */ +0x00,0x80,0x38,0x40,0x2B,0xF0,0x2A,0x10,0x38,0x00,0x2B,0xF0,0x28,0x80,0x3A,0x80, +0x2A,0xE0,0x2A,0x80,0x2D,0x80,0x58,0xF0,0x00,0x00, +/* */ +0x00,0x40,0x70,0xF0,0x56,0x50,0x53,0xF0,0x72,0x50,0x54,0xF0,0x56,0x40,0x73,0xF0, +0x52,0x40,0x57,0xF0,0x52,0x40,0x35,0xF0,0x00,0x00, +/* */ +0x38,0x80,0x2F,0xF0,0x28,0x80,0x3B,0xE0,0x29,0x00,0x2F,0xF0,0x3A,0x20,0x2D,0xD0, +0x28,0x80,0x2F,0xF0,0x29,0x40,0x5A,0x20,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x80,0x57,0xF0,0x75,0x50,0x54,0x90,0x55,0xD0,0x74,0x90, +0x57,0xF0,0x54,0x90,0x54,0x90,0x34,0x30,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x50,0x80,0x51,0x00,0x77,0xF0,0x55,0x50,0x55,0xD0,0x75,0x50, +0x55,0xD0,0x55,0x50,0x57,0xF0,0x34,0x10,0x00,0x00, +/* */ +0x73,0xE0,0x52,0x20,0x53,0xE0,0x72,0x20,0x53,0xE0,0x50,0x00,0x77,0xF0,0x55,0x50, +0x55,0x50,0x55,0x50,0x55,0x50,0x3F,0xF0,0x00,0x00, +/* */ +0x77,0x70,0x55,0x50,0x57,0x70,0x70,0x00,0x53,0xE0,0x50,0x00,0x77,0xF0,0x52,0x00, +0x53,0xE0,0x50,0x20,0x50,0x20,0x30,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x71,0x40,0x52,0x20,0x55,0xD0,0x70,0x00,0x57,0x10,0x55,0x50,0x77,0x50, +0x55,0x50,0x57,0x50,0x55,0x10,0x35,0x30,0x00,0x00, +/* */ +0x00,0x80,0x3A,0xA0,0x28,0x80,0x2B,0xE0,0x38,0x80,0x2F,0xF0,0x29,0x40,0x3A,0x20, +0x2C,0x90,0x2B,0xE0,0x28,0x80,0x5F,0xF0,0x00,0x00, +/* */ +0x3A,0xA0,0x28,0x80,0x2B,0xE0,0x39,0x00,0x2F,0xF0,0x2A,0x20,0x3C,0x90,0x28,0x80, +0x2B,0xF0,0x29,0x20,0x28,0xC0,0x5B,0x30,0x00,0x00, +/* */ +0x77,0xF0,0x50,0x00,0x53,0xE0,0x72,0x20,0x53,0xE0,0x50,0x00,0x77,0xF0,0x55,0x50, +0x54,0x90,0x55,0xD0,0x54,0x90,0x34,0xB0,0x00,0x00, +/* */ +0x11,0x00,0x7D,0xF0,0x22,0x20,0x3D,0xC0,0x25,0x50,0x59,0xA0,0x00,0x10,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x54,0x50,0x53,0x80,0x72,0x00,0x53,0xF0,0x52,0x40,0x72,0x40, +0x57,0xF0,0x50,0x00,0x52,0x40,0x34,0x20,0x00,0x00, +/* */ +0x00,0x80,0x3A,0xA0,0x28,0x80,0x2B,0xE0,0x39,0x00,0x2F,0xF0,0x2A,0x20,0x3C,0x90, +0x2A,0xA0,0x29,0xC0,0x2A,0xA0,0x59,0x80,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x55,0x50,0x52,0x20,0x73,0xE0,0x51,0x00,0x52,0x20,0x73,0xE0, +0x50,0x80,0x53,0xE0,0x50,0x80,0x37,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x3B,0xE0,0x29,0x40,0x2F,0xF0,0x3C,0x90,0x2B,0xE0,0x2A,0xA0,0x38,0x80, +0x2B,0xE0,0x2A,0x20,0x2B,0xE0,0x5A,0x20,0x00,0x00, +/* */ +0x72,0x20,0x5F,0xA0,0x52,0x70,0x77,0x20,0x50,0x20,0x57,0x70,0x75,0x50,0x57,0x50, +0x50,0x50,0x55,0x20,0x53,0xD0,0x3C,0x90,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x52,0x20,0x57,0xF0,0x74,0x10,0x53,0xE0,0x51,0x10,0x76,0xA0, +0x51,0x40,0x56,0xE0,0x51,0x50,0x36,0xC0,0x00,0x00, +/* */ +0x03,0xE0,0x72,0x20,0x53,0xE0,0x50,0x00,0x77,0x70,0x55,0x50,0x57,0x70,0x70,0x80, +0x57,0xF0,0x51,0xC0,0x52,0xA0,0x34,0x90,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x50,0x00,0x57,0xF0,0x75,0x50,0x55,0xD0,0x54,0x10,0x77,0xF0, +0x52,0x20,0x53,0xE0,0x52,0x20,0x37,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x55,0x20,0x57,0xF0,0x75,0x40,0x57,0xF0,0x55,0x50,0x77,0xF0, +0x55,0x50,0x57,0xF0,0x5B,0x60,0x35,0x50,0x00,0x00, +/* */ +0x04,0x90,0x72,0xA0,0x57,0xF0,0x52,0xA0,0x74,0x90,0x52,0x20,0x53,0x70,0x75,0x20, +0x55,0xA0,0x5A,0xF0,0x52,0x20,0x34,0x20,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x1E,0xF0,0x10,0x90,0x21,0x20,0x3E,0x00,0x02,0x40,0x02,0x40, +0x1A,0x40,0x62,0xA0,0x02,0xA0,0x0D,0x10,0x00,0x00, +/* */ +0x24,0x80,0x18,0x80,0x24,0xF0,0x10,0x90,0x7F,0x20,0x10,0x00,0x28,0x40,0x7E,0x40, +0x2A,0x40,0x2A,0xA0,0x2E,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x08,0x80,0x3E,0x80,0x14,0xF0,0x22,0x90,0x7F,0x20,0x02,0x00,0x3A,0x40,0x2A,0x40, +0x2A,0x40,0x3A,0xA0,0x22,0xA0,0x07,0x10,0x00,0x00, +/* */ +0x0C,0x80,0x70,0x80,0x10,0xF0,0x7E,0x90,0x11,0x20,0x30,0x00,0x56,0x40,0x52,0x40, +0x76,0x40,0x52,0xA0,0x7E,0xA0,0x41,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0x80,0x22,0xF0,0x14,0x90,0x7F,0x20,0x00,0x00,0x3E,0x40,0x22,0x40, +0x3E,0x40,0x22,0xA0,0x3E,0xA0,0x23,0x10,0x00,0x00, +/* */ +0x18,0x80,0x24,0x80,0x5A,0xF0,0x00,0x90,0x3D,0x20,0x24,0x00,0x3C,0x40,0x00,0x40, +0x76,0x40,0x5A,0xA0,0x36,0xA0,0x5B,0x10,0x00,0x00, +/* */ +0x01,0x00,0x7D,0xF0,0x46,0x10,0x45,0xD0,0x6D,0x50,0x55,0xD0,0x55,0x30,0x55,0x00, +0x6D,0x10,0x44,0xF0,0x44,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x40,0x00,0x27,0xE0,0x04,0x20,0x76,0x20,0x05,0x60,0x54,0xA0,0x54,0xA0,0x55,0x60, +0x26,0x20,0x14,0x20,0x64,0x30,0x08,0x10,0x00,0x00, +/* */ +0x00,0xE0,0x3E,0xA0,0x22,0xE0,0x22,0xA0,0x36,0xE0,0x2A,0xA0,0x2A,0xE0,0x2A,0xA0, +0x37,0xF0,0x22,0xA0,0x23,0x10,0x41,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x7E,0xB0,0x44,0x90,0x46,0xB0,0x6C,0x90,0x57,0xF0,0x54,0x80,0x57,0xE0, +0x6D,0x20,0x44,0xC0,0x45,0x30,0x03,0xF0,0x00,0x00, +/* */ +0x14,0x00,0x13,0xE0,0x7E,0x20,0x2A,0x20,0x27,0x60,0x42,0xA0,0x16,0xA0,0x2A,0xA0, +0x7F,0x60,0x2A,0x20,0x2A,0x30,0x54,0x10,0x00,0x00, +/* */ +0x01,0x50,0x7C,0x60,0x44,0x40,0x44,0xA0,0x6D,0x10,0x54,0xA0,0x55,0xB0,0x54,0xE0, +0x6C,0xA0,0x45,0x50,0x44,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x0F,0xC0,0x08,0x40,0x08,0x40,0x10,0x30,0x20,0x00,0x1F,0xE0,0x08,0x20,0x08,0x40, +0x04,0x80,0x03,0x00,0x0C,0xC0,0x30,0x30,0x00,0x00, +/* */ +0x08,0xE0,0x7E,0xA0,0x08,0xA0,0x7F,0x30,0x42,0x00,0x3C,0xE0,0x04,0xA0,0x3C,0xA0, +0x20,0xA0,0x3C,0x40,0x04,0xA0,0x1D,0x10,0x00,0x00, +/* */ +0x08,0xE0,0x7E,0xA0,0x08,0xA0,0x7F,0x30,0x52,0x00,0x3C,0xE0,0x10,0xA0,0x28,0xA0, +0x3E,0xA0,0x08,0x40,0x7E,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x08,0xE0,0x7E,0xA0,0x08,0xA0,0x7F,0x30,0x52,0x00,0x3C,0xE0,0x44,0xA0,0x3E,0xA0, +0x2A,0xA0,0x3E,0x40,0x2A,0xA0,0x47,0x10,0x00,0x00, +/* */ +0x05,0x00,0x7D,0xF0,0x05,0x00,0x3D,0xE0,0x05,0x00,0x7D,0xF0,0x05,0x00,0x02,0x00, +0x7F,0xF0,0x10,0x40,0x0F,0x80,0x70,0x70,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x07,0x00,0x78,0xF0,0x05,0x00,0x2D,0xA0,0x25,0x20, +0x2D,0xA0,0x25,0x20,0x2F,0xA0,0x40,0x20,0x00,0x00, +/* */ +0x44,0xF0,0x22,0x10,0x04,0x90,0x7F,0xF0,0x14,0x90,0x17,0xF0,0x56,0xB0,0x55,0xD0, +0x27,0xF0,0x24,0x90,0x55,0xD0,0x56,0xB0,0x00,0x00, +/* */ +0x10,0x80,0x08,0x80,0x7D,0x40,0x21,0x40,0x22,0x20,0x3C,0x10,0x25,0x80,0x24,0x40, +0x24,0x00,0x25,0x80,0x24,0x40,0x58,0x20,0x00,0x00, +/* */ +0x22,0x00,0x13,0xF0,0x7C,0x80,0x20,0x80,0x27,0xF0,0x38,0x80,0x2B,0xF0,0x2A,0x90, +0x2A,0x90,0x2A,0x90,0x2A,0xB0,0x58,0x80,0x00,0x00, +/* */ +0x22,0x00,0x13,0xF0,0x7C,0x00,0x20,0x60,0x23,0x80,0x38,0xE0,0x2B,0x80,0x28,0xF0, +0x2B,0x80,0x28,0x90,0x28,0x90,0x58,0x70,0x00,0x00, +/* */ +0x22,0x00,0x13,0xF0,0x7C,0x00,0x21,0xE0,0x21,0x20,0x39,0xA0,0x29,0x60,0x2B,0xF0, +0x29,0x20,0x29,0x20,0x29,0x20,0x5A,0x60,0x00,0x00, +/* */ +0x22,0x00,0x13,0xF0,0x7C,0x00,0x20,0x40,0x21,0x40,0x39,0xF0,0x2A,0x40,0x28,0x40, +0x29,0xF0,0x28,0x40,0x28,0x40,0x5B,0xF0,0x00,0x00, +/* */ +0x22,0x00,0x13,0xF0,0x7C,0x00,0x23,0xE0,0x22,0x20,0x3B,0xE0,0x2A,0x80,0x2A,0xA0, +0x2A,0xC0,0x2A,0x90,0x2A,0x90,0x5C,0x70,0x00,0x00, +/* */ +0x22,0x00,0x13,0xF0,0x7C,0x80,0x23,0xE0,0x21,0x00,0x3A,0x20,0x2B,0xE0,0x28,0x00, +0x2A,0xA0,0x2A,0xA0,0x2A,0xA0,0x5C,0xB0,0x00,0x00, +/* */ +0x22,0x00,0x13,0xF0,0x7C,0x80,0x23,0xE0,0x21,0x40,0x3A,0x20,0x2F,0xF0,0x28,0x20, +0x2B,0xA0,0x2A,0xA0,0x2B,0xA0,0x58,0x60,0x00,0x00, +/* */ +0x10,0x00,0x13,0xE0,0x14,0x40,0x58,0x80,0x51,0x00,0x53,0xF0,0x51,0x50,0x11,0x50, +0x12,0x90,0x2C,0x90,0x29,0x10,0x42,0x60,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x58,0x80,0x53,0xE0,0x50,0x80,0x57,0xF0,0x10,0x90, +0x10,0x90,0x28,0xB0,0x24,0x80,0x40,0x80,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x17,0xF0,0x58,0x80,0x52,0xA0,0x52,0xA0,0x52,0xA0,0x13,0xE0, +0x10,0x80,0x28,0x90,0x24,0x90,0x40,0x70,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x15,0x40,0x5A,0x20,0x54,0x10,0x53,0xE0,0x52,0x20,0x12,0x20, +0x12,0x60,0x2A,0x00,0x2A,0x10,0x41,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x14,0x80,0x58,0x80,0x51,0x00,0x51,0xF0,0x53,0x10,0x15,0x10, +0x11,0x10,0x29,0x10,0x25,0xF0,0x41,0x10,0x00,0x00, +/* */ +0x10,0x70,0x17,0x80,0x10,0x80,0x54,0x90,0x5A,0xA0,0x50,0x80,0x57,0xF0,0x10,0x80, +0x10,0x80,0x28,0x80,0x24,0x80,0x41,0x80,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x14,0x00,0x5B,0xF0,0x50,0x80,0x50,0x80,0x50,0x80,0x13,0xE0, +0x10,0x80,0x28,0x80,0x28,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x10,0x80,0x17,0xF0,0x58,0x80,0x51,0x00,0x52,0x20,0x57,0xC0,0x10,0x80, +0x11,0x00,0x2A,0x20,0x27,0xF0,0x40,0x10,0x00,0x00, +/* */ +0x10,0x00,0x20,0x20,0x7F,0xF0,0x00,0x10,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +0x12,0x20,0x22,0x40,0x0D,0x80,0x70,0x70,0x00,0x00, +/* */ +0x11,0x40,0x12,0x50,0x16,0x60,0x5A,0x40,0x52,0xD0,0x53,0x50,0x52,0x30,0x10,0x80, +0x17,0xF0,0x28,0x80,0x28,0x80,0x40,0x80,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x17,0xE0,0x58,0x80,0x50,0x80,0x53,0xE0,0x50,0x80,0x10,0x80, +0x17,0xF0,0x28,0x80,0x24,0x80,0x40,0x80,0x00,0x00, +/* */ +0x17,0xF0,0x10,0x80,0x17,0xE0,0x59,0x20,0x51,0x20,0x57,0xF0,0x50,0x00,0x13,0xE0, +0x12,0x20,0x2A,0x20,0x2B,0xE0,0x42,0x20,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x15,0x40,0x5A,0x20,0x54,0x90,0x53,0xC0,0x50,0x40,0x10,0x80, +0x13,0xE0,0x2A,0x20,0x2B,0xE0,0x42,0x20,0x00,0x00, +/* */ +0x14,0x00,0x12,0xF0,0x14,0x10,0x5C,0x90,0x54,0x50,0x55,0x10,0x57,0x30,0x15,0x10, +0x15,0x50,0x2C,0xD0,0x24,0x10,0x44,0x30,0x00,0x00, +/* */ +0x10,0x80,0x10,0xF0,0x14,0x80,0x5B,0xE0,0x52,0x20,0x53,0xE0,0x52,0x20,0x13,0xE0, +0x10,0x80,0x2B,0xF0,0x24,0x80,0x40,0x80,0x00,0x00, +/* */ +0x02,0x00,0x12,0x20,0x22,0x40,0x05,0x00,0x18,0xC0,0x60,0x30,0x10,0x40,0x55,0x50, +0x59,0x60,0x10,0x40,0x28,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x12,0x70,0x12,0x50,0x17,0x50,0x5A,0x70,0x52,0x50,0x57,0x50,0x55,0x50,0x15,0x70, +0x15,0x50,0x2F,0x50,0x24,0x90,0x41,0x30,0x00,0x00, +/* */ +0x13,0xF0,0x12,0x10,0x17,0xF0,0x5A,0x10,0x53,0xF0,0x50,0x80,0x50,0x40,0x13,0xF0, +0x10,0x00,0x2A,0x10,0x29,0x20,0x47,0xF0,0x00,0x00, +/* */ +0x13,0xE0,0x12,0xA0,0x17,0xE0,0x5A,0xA0,0x53,0xE0,0x50,0x00,0x57,0xF0,0x12,0x80, +0x12,0xA0,0x2A,0x40,0x2B,0x20,0x42,0x10,0x00,0x00, +/* */ +0x12,0xE0,0x14,0xA0,0x16,0xA0,0x5D,0x30,0x54,0x00,0x56,0xE0,0x54,0xA0,0x14,0xA0, +0x16,0xA0,0x2C,0x40,0x24,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x0B,0xE0,0x12,0x20,0x33,0xE0,0x50,0x80,0x17,0xF0,0x12,0xA0,0x14,0x90,0x00,0x00, +0x12,0x20,0x22,0x40,0x0D,0x80,0x70,0x70,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x10,0x5B,0xE0,0x50,0x00,0x53,0xE0,0x52,0x20,0x13,0xE0, +0x12,0x20,0x2B,0xE0,0x28,0x00,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x10,0x5F,0xF0,0x54,0x00,0x57,0xF0,0x5D,0x50,0x15,0x50, +0x17,0xF0,0x2D,0x50,0x25,0x50,0x44,0x30,0x00,0x00, +/* */ +0x10,0xF0,0x14,0x90,0x1A,0xF0,0x52,0x90,0x50,0xF0,0x56,0xC0,0x52,0xB0,0x12,0xA0, +0x12,0xD0,0x2A,0x90,0x2B,0x00,0x44,0xF0,0x00,0x00, +/* */ +0x11,0x00,0x16,0xF0,0x14,0x50,0x5D,0x50,0x56,0xB0,0x51,0x00,0x57,0xF0,0x14,0x90, +0x17,0xF0,0x2C,0x90,0x27,0xF0,0x44,0x10,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x17,0xE0,0x5A,0x20,0x57,0xF0,0x55,0x50,0x57,0xF0,0x10,0x00, +0x17,0xE0,0x2A,0x20,0x29,0xC0,0x46,0x30,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x12,0x20,0x55,0x40,0x5F,0xF0,0x55,0x50,0x56,0x30,0x15,0xD0, +0x15,0x50,0x2D,0xD0,0x24,0x10,0x44,0x30,0x00,0x00, +/* */ +0x3E,0x20,0x22,0xF0,0x3E,0x20,0x20,0xA0,0x3E,0x60,0x48,0x20,0x2A,0x20,0x59,0x60, +0x00,0x00,0x12,0x40,0x0D,0x80,0x70,0x70,0x00,0x00, +/* */ +0x17,0x70,0x11,0x10,0x15,0x50,0x5B,0x30,0x55,0x50,0x50,0x80,0x57,0xF0,0x14,0x10, +0x17,0xF0,0x2C,0x10,0x27,0xF0,0x44,0x10,0x00,0x00, +/* */ +0x11,0x00,0x17,0xF0,0x14,0x90,0x5E,0xB0,0x57,0xF0,0x54,0x90,0x56,0xB0,0x14,0x10, +0x10,0x80,0x2F,0xF0,0x29,0x40,0x46,0x30,0x00,0x00, +/* */ +0x10,0x60,0x17,0x80,0x1A,0xA0,0x51,0xC0,0x57,0xF0,0x52,0xA0,0x54,0x10,0x13,0xE0, +0x12,0xA0,0x2B,0xE0,0x2A,0xA0,0x43,0xE0,0x00,0x00, +/* */ +0x15,0x10,0x12,0xA0,0x19,0xF0,0x50,0x40,0x56,0xA0,0x53,0x70,0x52,0xA0,0x13,0x70, +0x12,0xA0,0x2B,0x60,0x2A,0x00,0x45,0xF0,0x00,0x00, +/* */ +0x7B,0xF0,0x21,0x00,0x56,0x90,0x29,0x60,0x5C,0xC0,0x2B,0x60,0x58,0xD0,0x00,0x00, +0x12,0x20,0x22,0x40,0x0D,0x80,0x70,0x70,0x00,0x00, +/* */ +0x10,0x70,0x17,0x80,0x12,0xA0,0x57,0xF0,0x5D,0x50,0x57,0xF0,0x50,0x20,0x17,0x70, +0x15,0x20,0x2F,0x60,0x25,0x20,0x46,0xE0,0x00,0x00, +/* */ +0x37,0x60,0x25,0x20,0x37,0x60,0x25,0x20,0x7F,0xF0,0x48,0x90,0x3D,0xE0,0x1A,0xC0, +0x2A,0xA0,0x7F,0xF0,0x08,0x80,0x70,0x70,0x00,0x00, +/* */ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x04,0x00,0x3F,0xE0,0x08,0x00,0x7F,0xF0,0x10,0x40,0x2F,0xF0, +0x44,0x40,0x02,0xC0,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x01,0x00,0x39,0x00,0x2B,0xE0,0x2C,0x20,0x3B,0xA0,0x2A,0xA0,0x2A,0xA0,0x2B,0xA0, +0x38,0x20,0x00,0xC0,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x10,0x40,0x1F,0xC0,0x08,0x80,0x7F,0xF0, +0x20,0x20,0x3F,0xE0,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x00,0x21,0x40,0x21,0x20,0x2F,0xF0, +0x21,0x00,0x22,0x80,0x24,0x40,0x58,0x30,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x00,0x22,0x40,0x21,0x40,0x28,0x40, +0x24,0x70,0x3F,0xC0,0x20,0x40,0x40,0x40,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x00,0x2F,0xF0,0x28,0x10,0x2B,0xD0, +0x2A,0x50,0x2B,0xD0,0x28,0x10,0x48,0x30,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x20,0x00,0x27,0xC0,0x24,0x40,0x2F,0xE0, +0x29,0x20,0x2F,0xE0,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x10,0x3F,0xF0,0x22,0x80,0x3E,0xF0,0x22,0x80,0x2E,0xE0, +0x22,0x80,0x3E,0xF0,0x22,0x80,0x42,0x80,0x00,0x00, +/* */ +0x20,0x00,0x10,0x00,0x78,0x00,0x08,0x00,0x10,0x00,0x18,0x00,0x34,0x00,0x50,0x00, +0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00, +/* */ +0x20,0x00,0x13,0xE0,0x7A,0x20,0x0A,0x20,0x12,0x20,0x1A,0x20,0x37,0xE0,0x52,0x00, +0x12,0x00,0x12,0x10,0x12,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x13,0xE0,0x78,0x80,0x08,0x80,0x10,0x80,0x1B,0xF0,0x34,0x80,0x50,0x80, +0x11,0x40,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x20,0x40,0x10,0x40,0x78,0x40,0x0A,0x40,0x12,0x70,0x1A,0x40,0x36,0x40,0x52,0x40, +0x12,0x40,0x12,0x40,0x12,0x40,0x17,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x78,0x80,0x0B,0xE0,0x10,0x80,0x18,0x80,0x37,0xF0,0x50,0x80, +0x11,0x00,0x12,0x20,0x17,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x78,0x80,0x0F,0xF0,0x10,0x80,0x18,0x80,0x37,0xE0,0x52,0x20, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x21,0x40,0x11,0x20,0x79,0x00,0x0B,0xF0,0x11,0x00,0x19,0xE0,0x36,0xA0,0x52,0xA0, +0x12,0xA0,0x12,0x40,0x14,0xA0,0x11,0x10,0x00,0x00, +/* */ +0x22,0x00,0x12,0x00,0x7B,0xF0,0x0D,0x00,0x11,0x00,0x19,0xE0,0x35,0x00,0x51,0x00, +0x11,0xF0,0x11,0x00,0x11,0x00,0x11,0x00,0x00,0x00, +/* */ +0x21,0x00,0x11,0x00,0x79,0xF0,0x0A,0x10,0x14,0xA0,0x10,0x80,0x3A,0xA0,0x56,0x90, +0x12,0x90,0x14,0x90,0x10,0x80,0x11,0x80,0x00,0x00, +/* */ +0x20,0x30,0x13,0xC0,0x7A,0x40,0x0A,0x40,0x12,0x40,0x1B,0xF0,0x36,0x40,0x52,0x40, +0x12,0x40,0x12,0x50,0x13,0x30,0x12,0x90,0x00,0x00, +/* */ +0x20,0x00,0x13,0xF0,0x78,0x10,0x0B,0xD0,0x10,0x10,0x1B,0xD0,0x36,0x50,0x52,0x50, +0x13,0xD0,0x12,0x10,0x10,0x10,0x10,0x60,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x78,0xF0,0x08,0x80,0x13,0xF0,0x1A,0x10,0x36,0x90,0x52,0x90, +0x12,0x90,0x11,0x40,0x11,0x20,0x12,0x10,0x00,0x00, +/* */ +0x21,0x40,0x11,0x40,0x7D,0x50,0x0B,0x60,0x11,0x40,0x11,0x40,0x3B,0x60,0x55,0x50, +0x11,0x40,0x11,0x50,0x12,0x50,0x14,0x30,0x00,0x00, +/* */ +0x21,0x20,0x11,0x20,0x7B,0xF0,0x09,0x20,0x11,0xE0,0x19,0x20,0x35,0xE0,0x51,0x20, +0x13,0xF0,0x10,0x00,0x11,0x20,0x12,0x10,0x00,0x00, +/* */ +0x22,0x20,0x11,0x40,0x7B,0xE0,0x0A,0xA0,0x13,0xE0,0x1A,0xA0,0x36,0xA0,0x53,0xE0, +0x10,0x80,0x17,0xF0,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x42,0x00,0x27,0xF0,0x72,0x50,0x17,0x50,0x22,0x50,0x37,0x50,0x6A,0xB0,0x20,0x80, +0x27,0xF0,0x21,0x40,0x22,0x20,0x24,0x10,0x00,0x00, +/* */ +0x42,0x20,0x21,0x40,0x77,0xF0,0x10,0x80,0x20,0x80,0x33,0xE0,0x68,0x80,0x20,0x80, +0x27,0xF0,0x20,0x00,0x25,0x50,0x25,0x50,0x00,0x00, +/* */ +0x20,0x80,0x17,0xF0,0x78,0x80,0x0B,0xE0,0x10,0x00,0x1B,0xE0,0x36,0x20,0x53,0xE0, +0x11,0x40,0x17,0xF0,0x12,0x20,0x13,0xE0,0x00,0x00, +/* */ +0x40,0x80,0x27,0xF0,0x70,0x00,0x17,0x70,0x25,0x50,0x37,0x70,0x69,0x40,0x27,0xF0, +0x21,0x40,0x27,0xF0,0x23,0x20,0x25,0x90,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x04,0x00,0x05,0x00,0x04,0x80,0x04,0x40,0x04,0x00,0x02,0x00, +0x29,0x20,0x29,0x10,0x48,0x50,0x07,0xC0,0x00,0x00, +/* */ +0x04,0x00,0x04,0x00,0x07,0xE0,0x04,0x00,0x04,0x00,0x7F,0xF0,0x00,0x00,0x02,0x00, +0x29,0x20,0x29,0x10,0x48,0x50,0x07,0xC0,0x00,0x00, +/* */ +0x00,0x20,0x7C,0x20,0x05,0xF0,0x08,0x20,0x2A,0x20,0x11,0x20,0x28,0x20,0x48,0x60, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x10,0x00,0x7D,0xF0,0x10,0x90,0x38,0x90,0x10,0x90,0x7D,0x10,0x12,0x60,0x00,0x00, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x25,0x20,0x25,0x20,0x25,0x20,0x25,0x20,0x20,0x60, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x08,0x60,0x13,0x80,0x30,0x80,0x57,0xF0,0x10,0x80,0x10,0x80,0x13,0xE0,0x10,0x00, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x10,0x40,0x08,0x80,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x02,0x00, +0x29,0x20,0x29,0x10,0x48,0x50,0x07,0xC0,0x00,0x00, +/* */ +0x04,0x00,0x47,0xF0,0x29,0x10,0x01,0x20,0x02,0x80,0x24,0x40,0x48,0x30,0x02,0x00, +0x29,0x20,0x29,0x10,0x48,0x50,0x07,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x40,0x10,0x0F,0x80, +0x10,0x90,0x64,0x70,0x2A,0xA0,0x47,0x90,0x00,0x00, +/* */ +0x14,0xF0,0x22,0x00,0x48,0x00,0x14,0xF0,0x32,0x20,0x50,0x20,0x12,0x20,0x14,0xE0, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x7C,0x80,0x44,0xF0,0x7D,0x20,0x48,0xA0,0x7E,0xA0,0x48,0x40,0x4A,0xA0,0x65,0x10, +0x02,0x20,0x29,0x10,0x28,0x50,0x47,0xC0,0x00,0x00, +/* */ +0x3F,0xF0,0x24,0x40,0x3F,0xE0,0x22,0x00,0x3F,0xE0,0x2C,0x40,0x37,0xC0,0x20,0x00, +0x3F,0xF0,0x04,0x00,0x2A,0xA0,0x47,0x90,0x00,0x00, +/* */ +0x06,0x40,0x38,0xF0,0x08,0x90,0x7E,0xF0,0x08,0x90,0x3E,0xF0,0x22,0x90,0x3E,0xF0, +0x00,0x00,0x2A,0x20,0x29,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x08,0x80,0x7E,0xF0,0x25,0x20,0x3C,0xA0,0x08,0xA0,0x7E,0x40,0x10,0xA0,0x31,0x10, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x2F,0x20,0x25,0x20,0x72,0x70,0x2F,0xA0,0x32,0xB0,0x66,0x60,0x2A,0x20,0x26,0x20, +0x02,0x00,0x29,0x20,0x28,0x50,0x47,0xD0,0x00,0x00, +/* */ +0x42,0x40,0x2F,0xF0,0x02,0x40,0x4F,0xF0,0x22,0x40,0x0F,0xF0,0x2A,0x50,0x4D,0xB0, +0x08,0x30,0x04,0x00,0x2A,0xA0,0x47,0x90,0x00,0x00, +/* */ +0x11,0x00,0x7D,0xE0,0x2B,0x20,0x7C,0xC0,0x2B,0x30,0x39,0xE0,0x11,0x20,0x7D,0xE0, +0x11,0x20,0x02,0x10,0x2A,0xA0,0x47,0x90,0x00,0x00, +/* */ +0x02,0x00,0x1F,0xC0,0x02,0x40,0x7F,0xF0,0x02,0x40,0x1F,0xC0,0x02,0x00,0x02,0x00, +0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x02,0x00,0x1F,0xC0,0x02,0x40,0x7F,0xF0,0x02,0x40,0x1F,0xC0,0x02,0x00,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x02,0x20,0x7B,0x40,0x0A,0x80,0x12,0x40,0x66,0x30,0x00,0x00,0x3F,0xE0,0x20,0x20, +0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x24,0x20,0x12,0x40,0x00,0x00,0x7F,0xF0,0x40,0x10,0x02,0x00,0x02,0x20,0x7B,0x40, +0x0A,0x80,0x12,0x40,0x62,0x30,0x06,0x00,0x00,0x00, +/* */ +0x02,0x20,0x7B,0x40,0x0A,0x80,0x12,0x40,0x66,0x30,0x08,0x80,0x08,0x80,0x6B,0xD0, +0x2D,0xA0,0x2A,0xA0,0x48,0x90,0x19,0x80,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xC0,0x12,0x40,0x12,0x40,0x22,0x40,0x3A,0x40,0x6A,0x40,0x2A,0x40, +0x2A,0x40,0x3A,0x50,0x24,0x50,0x08,0x30,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x10,0x80,0x10,0x80,0x20,0x80,0x38,0x80,0x6F,0xF0,0x28,0x80, +0x28,0x80,0x38,0x80,0x28,0x80,0x00,0x80,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x10,0x40,0x10,0x80,0x21,0x00,0x3B,0xF0,0x69,0x50,0x29,0x50, +0x2A,0x90,0x3C,0x90,0x29,0x10,0x02,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x7F,0xF0, +0x08,0x00,0x1F,0xE0,0x30,0x20,0x5F,0xE0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x13,0xF0,0x11,0x00,0x21,0x40,0x3A,0x40,0x6B,0xF0,0x28,0x40, +0x28,0x40,0x3B,0xF0,0x28,0x40,0x00,0x40,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x13,0xF0,0x10,0x80,0x22,0xA0,0x3A,0xA0,0x6A,0xA0,0x2B,0xE0, +0x28,0x80,0x28,0x90,0x38,0x90,0x28,0x70,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x10,0x20,0x11,0x20,0x22,0x20,0x3B,0xF0,0x68,0x60,0x28,0xA0, +0x29,0x20,0x3A,0x20,0x24,0x20,0x00,0x60,0x00,0x00, +/* */ +0x00,0x60,0x7B,0x80,0x12,0x00,0x12,0x00,0x23,0xF0,0x3A,0x40,0x6A,0x40,0x2A,0x40, +0x2A,0x40,0x3A,0x40,0x22,0x40,0x04,0x40,0x00,0x00, +/* */ +0x00,0x70,0x7B,0x80,0x10,0x00,0x10,0x80,0x20,0x40,0x3B,0xF0,0x68,0x20,0x28,0x40, +0x28,0x80,0x39,0x00,0x2A,0x80,0x04,0x70,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x12,0x20,0x12,0x20,0x23,0x60,0x3A,0xA0,0x6A,0xA0,0x2B,0x60, +0x2A,0x20,0x3A,0x20,0x22,0x30,0x04,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x10,0x80,0x13,0xE0,0x20,0x80,0x38,0x80,0x6B,0xF0,0x28,0x80, +0x29,0x00,0x3A,0x20,0x2B,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x02,0x20,0x7A,0x20,0x17,0xF0,0x12,0x20,0x20,0x00,0x3A,0x20,0x6A,0x20,0x29,0x40, +0x29,0x40,0x38,0x80,0x21,0x40,0x06,0x30,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x12,0x00,0x13,0xF0,0x22,0x80,0x3A,0x80,0x6A,0xF0,0x2A,0x90, +0x2A,0x90,0x3A,0x90,0x25,0x10,0x0A,0x60,0x00,0x00, +/* */ +0x04,0x80,0x04,0x40,0x7F,0xF0,0x09,0x40,0x11,0x90,0x66,0xF0,0x00,0x00,0x7F,0xF0, +0x08,0x00,0x1F,0xE0,0x30,0x20,0x5F,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x7A,0x00,0x13,0xF0,0x15,0x00,0x21,0x00,0x39,0xE0,0x69,0x00,0x29,0x00, +0x29,0xF0,0x39,0x00,0x29,0x00,0x01,0x00,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x11,0x40,0x12,0x20,0x24,0x10,0x38,0x00,0x6B,0xE0,0x28,0x80, +0x28,0x80,0x38,0x80,0x28,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x00,0x30,0x7B,0xC0,0x12,0x40,0x12,0x40,0x22,0x40,0x3B,0xF0,0x6A,0x40,0x2A,0x40, +0x2A,0x40,0x3A,0x50,0x2B,0x30,0x02,0x90,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x10,0x00,0x13,0xF0,0x20,0x00,0x3A,0x20,0x69,0x20,0x29,0x20, +0x29,0x40,0x38,0x40,0x28,0x80,0x07,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x78,0x80,0x17,0xF0,0x14,0x10,0x20,0x00,0x3A,0x20,0x6A,0x40,0x2A,0x80, +0x2B,0x00,0x3A,0x10,0x2A,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x01,0x40,0x7B,0xF0,0x11,0x50,0x11,0x50,0x27,0xF0,0x3D,0x40,0x6D,0x40,0x2F,0xF0, +0x29,0x50,0x39,0x50,0x22,0x70,0x04,0x40,0x00,0x00, +/* */ +0x00,0x10,0x7F,0x90,0x25,0x50,0x25,0x50,0x45,0x50,0x7F,0xD0,0x55,0x50,0x55,0x50, +0x55,0x50,0x75,0x10,0x55,0x10,0x09,0x30,0x00,0x00, +/* */ +0x02,0x20,0x7A,0x20,0x17,0xF0,0x12,0x20,0x20,0x80,0x38,0x40,0x6F,0xF0,0x2A,0x00, +0x2A,0x00,0x3A,0x00,0x2A,0x00,0x03,0xE0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x17,0xF0,0x10,0x80,0x24,0x90,0x3A,0xA0,0x68,0x80,0x2F,0xF0, +0x28,0x80,0x39,0x40,0x2A,0x20,0x04,0x10,0x00,0x00, +/* */ +0x01,0x00,0x79,0xE0,0x17,0x00,0x11,0x50,0x20,0x90,0x3B,0x70,0x68,0x00,0x2F,0xF0, +0x29,0x40,0x39,0x40,0x2A,0x50,0x04,0x30,0x00,0x00, +/* */ +0x08,0x90,0x2E,0xA0,0x28,0xC0,0x2E,0x90,0x70,0x70,0x00,0x00,0x7F,0xF0,0x08,0x00, +0x1F,0xE0,0x30,0x20,0x5F,0xE0,0x10,0x20,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x24,0x10,0x25,0xD0,0x44,0x10,0x75,0xD0,0x55,0x50,0x55,0x50, +0x55,0xD0,0x74,0x10,0x54,0x10,0x04,0x30,0x00,0x00, +/* */ +0x00,0x40,0x78,0x80,0x13,0xF0,0x12,0x10,0x23,0x50,0x3A,0x90,0x6A,0x90,0x2A,0x90, +0x2B,0x50,0x3A,0x10,0x2B,0xF0,0x02,0x10,0x00,0x00, +/* */ +0x01,0x00,0x79,0xE0,0x12,0x20,0x15,0x40,0x20,0x80,0x39,0x40,0x6E,0x30,0x2B,0xE0, +0x2A,0x20,0x3A,0x20,0x2B,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x00,0xC0,0x7B,0x60,0x11,0x50,0x11,0x40,0x27,0xF0,0x39,0x40,0x69,0xD0,0x2F,0x60, +0x29,0x40,0x39,0xD0,0x29,0x30,0x03,0x10,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x20,0x80,0x23,0xE0,0x40,0x80,0x77,0xF0,0x50,0x00,0x57,0xF0, +0x54,0x90,0x74,0x90,0x51,0x60,0x06,0x10,0x00,0x00, +/* */ +0x01,0x40,0x79,0x20,0x13,0xF0,0x12,0x40,0x26,0x40,0x3B,0xF0,0x6A,0x40,0x2A,0x40, +0x2B,0xF0,0x3A,0x40,0x2A,0x40,0x03,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xE0,0x10,0x00,0x12,0x20,0x21,0x40,0x3F,0xF0,0x68,0x00,0x2B,0xE0, +0x2A,0x20,0x3A,0x20,0x2B,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x17,0xF0,0x14,0x10,0x20,0x00,0x3F,0xF0,0x68,0x80,0x2A,0x80, +0x2A,0xE0,0x3A,0x80,0x25,0x80,0x08,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x79,0x20,0x13,0xF0,0x10,0x80,0x27,0xF0,0x39,0x40,0x6A,0xA0,0x2D,0x50, +0x28,0x80,0x3B,0x20,0x28,0xC0,0x07,0x00,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xF0,0x10,0x80,0x23,0xE0,0x38,0x80,0x6F,0xF0,0x2A,0xA0,0x2F,0xF0, +0x2A,0xA0,0x3B,0xF0,0x28,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x03,0xE0,0x7A,0x20,0x13,0xE0,0x12,0x20,0x23,0xE0,0x39,0x00,0x6B,0xF0,0x2C,0x90, +0x29,0x50,0x3A,0x10,0x2B,0x90,0x00,0x60,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x22,0x20,0x21,0x40,0x47,0xF0,0x74,0x10,0x50,0x80,0x57,0xF0, +0x54,0x90,0x74,0x90,0x54,0xB0,0x00,0x80,0x00,0x00, +/* */ +0x00,0x80,0x7F,0xF0,0x14,0x10,0x13,0xE0,0x20,0x00,0x3B,0xE0,0x6A,0x20,0x2B,0xE0, +0x2A,0x20,0x3B,0xE0,0x20,0x00,0x07,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xF0,0x12,0x10,0x13,0xF0,0x22,0x00,0x3B,0xF0,0x6D,0x50,0x2D,0x50, +0x2F,0xF0,0x3D,0x50,0x25,0x50,0x04,0x30,0x00,0x00, +/* */ +0x02,0x20,0x7B,0x70,0x15,0x20,0x12,0xA0,0x22,0xF0,0x3C,0x20,0x68,0x80,0x2F,0xF0, +0x29,0xC0,0x3A,0xA0,0x24,0x90,0x00,0x80,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xF0,0x11,0x20,0x12,0x10,0x20,0x80,0x39,0x20,0x6B,0xF0,0x28,0x80, +0x29,0x50,0x3B,0x20,0x2D,0xA0,0x01,0x10,0x00,0x00, +/* */ +0x03,0xE0,0x7A,0x20,0x11,0xC0,0x12,0x20,0x27,0x70,0x3D,0x50,0x6A,0x20,0x2D,0x50, +0x28,0x80,0x3F,0xF0,0x22,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x08,0xE0,0x7E,0xB0,0x09,0x00,0x3E,0xE0,0x2A,0xA0,0x3E,0x40,0x20,0xA0,0x7F,0xF0, +0x08,0x00,0x1F,0xE0,0x30,0x20,0x5F,0xE0,0x00,0x00, +/* */ +0x04,0xF0,0x72,0x80,0x28,0xF0,0x24,0x90,0x40,0xF0,0x72,0x80,0x54,0xF0,0x50,0x80, +0x57,0xF0,0x71,0xC0,0x52,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x02,0x40,0x77,0x40,0x20,0x40,0x27,0x70,0x45,0x90,0x77,0x50,0x50,0x50,0x57,0x50, +0x51,0x50,0x77,0xA0,0x52,0x50,0x06,0x90,0x00,0x00, +/* */ +0x07,0x50,0x79,0x60,0x15,0x50,0x12,0x20,0x23,0xE0,0x3C,0x10,0x6B,0xE0,0x2A,0x20, +0x2B,0xE0,0x3A,0x20,0x29,0x40,0x07,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x12,0xA0,0x13,0xE0,0x22,0xA0,0x3B,0xE0,0x68,0x00,0x2F,0xF0, +0x2A,0xA0,0x3B,0xE0,0x2A,0xA0,0x07,0xF0,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x22,0x20,0x23,0x70,0x45,0x50,0x7A,0x20,0x55,0xD0,0x58,0x00, +0x57,0xF0,0x70,0x80,0x52,0xA0,0x05,0x90,0x00,0x00, +/* */ +0x02,0x20,0x77,0xF0,0x22,0x20,0x27,0xF0,0x44,0x10,0x73,0xE0,0x51,0x10,0x56,0xA0, +0x51,0x40,0x76,0xE0,0x51,0x50,0x06,0xC0,0x00,0x00, +/* */ +0x01,0x20,0x7B,0xF0,0x11,0x20,0x14,0x50,0x23,0xF0,0x39,0x50,0x6D,0xF0,0x2B,0x50, +0x28,0x20,0x3B,0xF0,0x25,0x20,0x00,0x60,0x00,0x00, +/* */ +0x07,0x00,0x18,0xC0,0x6F,0xB0,0x00,0x00,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x04,0x20, +0x7F,0xF0,0x09,0x40,0x11,0x90,0x66,0xF0,0x00,0x00, +/* */ +0x05,0x00,0x25,0x20,0x15,0x40,0x7F,0xF0,0x12,0x40,0x0A,0x80,0x3F,0xE0,0x22,0x20, +0x27,0x20,0x2A,0xA0,0x22,0x20,0x22,0x60,0x00,0x00, +/* */ +0x28,0xA0,0x6C,0x90,0x28,0x80,0x7D,0xF0,0x10,0x80,0x54,0xF0,0x11,0x50,0x7D,0x50, +0x55,0x50,0x5D,0x20,0x76,0x50,0x54,0x90,0x00,0x00, +/* */ +0x28,0x50,0x6C,0x40,0x29,0xF0,0x7C,0x40,0x11,0xF0,0x55,0x50,0x11,0xF0,0x7D,0x50, +0x55,0xF0,0x5D,0x50,0x75,0x50,0x55,0x30,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x48,0x80,0x48,0x80,0x78,0x80,0x4F,0xF0,0x48,0x80,0x78,0x80, +0x48,0x80,0x48,0x80,0x78,0x80,0x4B,0x80,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x48,0x80,0x48,0x80,0x7A,0xF0,0x4A,0x90,0x4A,0x90,0x7B,0xF0, +0x48,0x10,0x48,0x10,0x78,0x10,0x48,0x60,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x4A,0x00,0x4A,0x90,0x7A,0x50,0x4A,0x50,0x4A,0x20,0x7A,0x20, +0x4A,0x50,0x4A,0x90,0x7A,0x00,0x4B,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x4B,0xF0,0x48,0x80,0x7A,0x90,0x4A,0x90,0x4A,0x90,0x7B,0xF0, +0x48,0x80,0x48,0x90,0x78,0x90,0x48,0x70,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x48,0xA0,0x4A,0x90,0x7A,0x90,0x4A,0x90,0x4C,0x80,0x78,0x90, +0x48,0x20,0x48,0x40,0x79,0x80,0x46,0x00,0x00,0x00, +/* */ +0x00,0x80,0x70,0x80,0x57,0xF0,0x54,0x90,0x74,0x90,0x50,0x80,0x51,0x40,0x71,0x40, +0x51,0x40,0x52,0x40,0x72,0x50,0x54,0x30,0x00,0x00, +/* */ +0x22,0x00,0x3F,0xE0,0x42,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x10,0x40,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x11,0xE0,0x3D,0x20,0x45,0x60,0x29,0x10,0x10,0xF0,0x3F,0xC0,0x50,0x40,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x49,0x00,0x4A,0x20,0x7B,0xF0,0x48,0x10,0x4B,0xE0,0x7A,0x20, +0x4A,0x20,0x4A,0x20,0x7B,0xE0,0x4A,0x20,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x4B,0xE0,0x48,0x80,0x78,0x80,0x4F,0xF0,0x48,0x00,0x78,0x80, +0x4B,0xE0,0x48,0x80,0x78,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x01,0x40,0x71,0x40,0x51,0x40,0x55,0x50,0x75,0x60,0x55,0xC0,0x55,0x40,0x75,0x40, +0x55,0x40,0x55,0x50,0x75,0xD0,0x4E,0x30,0x00,0x00, +/* */ +0x01,0x00,0x79,0xE0,0x4A,0x20,0x4D,0x40,0x78,0x80,0x49,0x40,0x4A,0xF0,0x79,0x10, +0x4A,0xA0,0x48,0x40,0x79,0x80,0x4E,0x00,0x00,0x00, +/* */ +0x00,0x80,0x79,0x00,0x4A,0x20,0x4B,0xF0,0x78,0x90,0x4A,0x80,0x4B,0xE0,0x7C,0x80, +0x48,0x80,0x4F,0xF0,0x78,0x80,0x48,0x80,0x00,0x00, +/* */ +0x00,0x80,0x70,0x80,0x57,0xF0,0x50,0x80,0x72,0xA0,0x51,0xC0,0x57,0xF0,0x70,0x80, +0x51,0xC0,0x52,0xA0,0x74,0x90,0x50,0x80,0x00,0x00, +/* */ +0x00,0x80,0x70,0x80,0x51,0x40,0x52,0x20,0x74,0x10,0x53,0xE0,0x50,0x00,0x71,0x20, +0x54,0xA0,0x52,0xA0,0x72,0x40,0x57,0xF0,0x00,0x00, +/* */ +0x02,0x20,0x79,0x40,0x4B,0xE0,0x48,0xA0,0x7B,0xE0,0x4A,0x80,0x4B,0xF0,0x78,0x90, +0x49,0x90,0x4A,0xB0,0x7C,0x80,0x48,0x80,0x00,0x00, +/* */ +0x01,0x00,0x72,0x20,0x57,0xF0,0x50,0x10,0x72,0x20,0x55,0x10,0x51,0xE0,0x72,0x20, +0x55,0x40,0x50,0x80,0x71,0x40,0x56,0x30,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x54,0x40,0x54,0x40,0x75,0xF0,0x54,0x40,0x57,0xF0,0x74,0x00, +0x54,0x40,0x55,0xF0,0x74,0x40,0x4B,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x76,0x60,0x54,0x20,0x54,0x20,0x76,0xE0,0x54,0x20,0x54,0x20,0x77,0xE0, +0x52,0x40,0x52,0x40,0x74,0x50,0x48,0x30,0x00,0x00, +/* */ +0x01,0x40,0x79,0x20,0x4B,0xF0,0x4A,0x40,0x7E,0x40,0x4B,0xF0,0x4A,0x40,0x7A,0x40, +0x4B,0xF0,0x4A,0x40,0x7A,0x40,0x4B,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x72,0x00,0x57,0xE0,0x54,0xA0,0x77,0xE0,0x55,0x20,0x57,0xE0,0x72,0x00, +0x54,0x80,0x5F,0xF0,0x70,0x80,0x50,0x80,0x00,0x00, +/* */ +0x03,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x25,0x20,0x1F,0xC0,0x70,0x70,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x72,0xB0,0x54,0x90,0x56,0xB0,0x74,0x90,0x57,0xF0,0x50,0x80,0x77,0xF0, +0x52,0x10,0x51,0x20,0x70,0xC0,0x57,0x30,0x00,0x00, +/* */ +0x00,0x50,0x77,0x60,0x51,0x40,0x55,0x50,0x72,0x20,0x52,0x20,0x55,0xD0,0x70,0x80, +0x57,0xF0,0x51,0x40,0x72,0x20,0x54,0x10,0x00,0x00, +/* */ +0x3C,0x80,0x14,0xF0,0x7F,0x20,0x2A,0xC0,0x59,0x30,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x00,0x80,0x73,0xE0,0x50,0x80,0x57,0xF0,0x71,0x00,0x52,0x20,0x57,0xF0,0x70,0x00, +0x57,0xF0,0x55,0x50,0x75,0x50,0x4F,0xF0,0x00,0x00, +/* */ +0x07,0xF0,0x74,0x10,0x53,0xE0,0x52,0x20,0x73,0xE0,0x52,0x20,0x53,0xE0,0x70,0x80, +0x57,0xF0,0x50,0x00,0x72,0x20,0x54,0x10,0x00,0x00, +/* */ +0x07,0xF0,0x71,0x40,0x57,0xF0,0x55,0x50,0x77,0xF0,0x50,0x00,0x53,0xE0,0x70,0x00, +0x57,0xF0,0x50,0x80,0x72,0xA0,0x55,0x90,0x00,0x00, +/* */ +0x04,0x90,0x72,0xA0,0x57,0xF0,0x54,0x10,0x73,0xE0,0x52,0x20,0x52,0x20,0x73,0xE0, +0x50,0x80,0x53,0xE0,0x70,0x80,0x57,0xF0,0x00,0x00, +/* */ +0x07,0x20,0x71,0x20,0x52,0x40,0x5F,0x70,0x75,0x90,0x57,0x50,0x55,0x50,0x77,0x50, +0x55,0xA0,0x5F,0x20,0x71,0x50,0x51,0x90,0x00,0x00, +/* */ +0x04,0x90,0x72,0xA0,0x57,0xF0,0x52,0xA0,0x74,0x90,0x52,0x20,0x53,0x70,0x75,0x20, +0x55,0xA0,0x5A,0xF0,0x72,0x20,0x54,0x20,0x00,0x00, +/* */ +0x10,0x40,0x7D,0xF0,0x10,0x40,0x7D,0xE0,0x45,0x20,0x7C,0xC0,0x29,0x30,0x7F,0xE0, +0x31,0x20,0x28,0xA0,0x24,0x60,0x3F,0xE0,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xF0,0x54,0x40,0x54,0x40,0x54,0x40,0x7C,0x40,0x54,0x40,0x54,0x40, +0x54,0x40,0x7C,0x40,0x44,0x40,0x01,0xC0,0x00,0x00, +/* */ +0x00,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0, +0x10,0x40,0x10,0x40,0x20,0x40,0x40,0x40,0x00,0x00, +/* */ +0x00,0xA0,0x7C,0x90,0x54,0x80,0x57,0xF0,0x54,0x80,0x7C,0x80,0x55,0x40,0x55,0x40, +0x55,0x40,0x7E,0x20,0x42,0x20,0x04,0x10,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x55,0x00,0x55,0xF0,0x56,0x20,0x7D,0x20,0x55,0x20,0x55,0x40, +0x54,0x80,0x7D,0x40,0x42,0x20,0x04,0x10,0x00,0x00, +/* */ +0x00,0x30,0x7D,0xC0,0x55,0x00,0x55,0x00,0x55,0xF0,0x7D,0x50,0x55,0x50,0x55,0x50, +0x55,0x50,0x7D,0x20,0x42,0x50,0x00,0x90,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x55,0x40,0x56,0x20,0x54,0x90,0x7D,0x00,0x56,0x40,0x54,0x90, +0x57,0x20,0x7C,0x40,0x41,0x80,0x06,0x00,0x00,0x00, +/* */ +0x07,0x00,0x18,0xC0,0x6F,0xB0,0x00,0x00,0x7F,0xF0,0x22,0x20,0x46,0x10,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x01,0x00,0x78,0x80,0x57,0xF0,0x54,0x10,0x52,0x00,0x7B,0x70,0x55,0x50,0x55,0x50, +0x52,0x70,0x7A,0x40,0x44,0x50,0x08,0x30,0x00,0x00, +/* */ +0x00,0x40,0x7D,0xF0,0x54,0xA0,0x57,0xF0,0x55,0x50,0x7D,0xF0,0x55,0x50,0x55,0xF0, +0x54,0x40,0x7D,0xF0,0x44,0x40,0x03,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x25,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x01,0x00,0x02,0x00, +0x06,0x40,0x1A,0x20,0x62,0x10,0x02,0x00,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x25,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x02,0x00,0x12,0x00, +0x13,0xE0,0x12,0x00,0x12,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x25,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0, +0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x25,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0, +0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x25,0x20,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x12,0x60,0x3F,0xD0, +0x52,0x40,0x1F,0xC0,0x12,0x20,0x01,0xE0,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x10,0x40, +0x3F,0xE0,0x00,0x00,0x29,0x20,0x44,0x90,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x25,0x20, +0x2F,0xA0,0x22,0x20,0x3F,0xA0,0x22,0x60,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x12,0x80,0x1A,0x40,0x57,0xF0,0x5C,0x80,0x57,0xE0, +0x14,0x80,0x17,0xE0,0x14,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x28,0x00,0x7D,0xE0,0x28,0x20,0x7D,0x20,0x55,0xF0, +0x7C,0x10,0x11,0xD0,0x7C,0x10,0x10,0x60,0x00,0x00, +/* */ +0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x52,0x50,0x4A,0x90,0x7F,0xF0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x08,0x00,0x10,0x40,0x3F,0xE0,0x00,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x12,0x00,0x62,0x30,0x4E,0x90,0x67,0x30,0x47,0x10,0x6A,0xB0,0x46,0x10,0x00,0x00, +0x3F,0xE0,0x25,0x20,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x45,0xF0,0x29,0x50,0x7D,0xF0,0x00,0x80,0x29,0xF0,0x46,0x50,0x01,0xF0,0x7D,0x50, +0x55,0xF0,0x54,0x50,0x5F,0xF0,0x70,0x30,0x00,0x00, +/* */ +0x20,0x00,0x20,0x00,0x3C,0x00,0x40,0x00,0x3C,0x00,0x10,0x00,0x10,0x00,0x7C,0x00, +0x10,0x00,0x14,0x00,0x18,0x00,0x10,0x00,0x00,0x00, +/* */ +0x21,0x00,0x21,0x00,0x3D,0x00,0x41,0x00,0x3D,0x00,0x11,0x00,0x11,0x00,0x7D,0x00, +0x11,0x00,0x15,0x10,0x19,0x10,0x10,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x23,0xE0,0x38,0x20,0x40,0x40,0x78,0x80,0x20,0x80,0x21,0x00,0x79,0x00, +0x22,0x00,0x2A,0x10,0x32,0x10,0x21,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x3C,0x80,0x40,0x80,0x3C,0xC0,0x10,0xA0,0x10,0x90,0x7C,0x90, +0x10,0x80,0x14,0x80,0x18,0x80,0x10,0x80,0x00,0x00, +/* */ +0x20,0x20,0x20,0x20,0x3D,0x20,0x41,0x20,0x3D,0x20,0x11,0x20,0x11,0x20,0x7D,0x20, +0x11,0x20,0x14,0x20,0x18,0x20,0x10,0xE0,0x00,0x00, +/* */ +0x20,0x00,0x21,0xF0,0x3C,0x10,0x40,0x20,0x3C,0x40,0x10,0x40,0x10,0x40,0x7C,0x40, +0x10,0x40,0x14,0x40,0x18,0x40,0x10,0xC0,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x38,0x80,0x40,0x80,0x7B,0xE0,0x20,0x80,0x20,0x80,0x78,0x80, +0x20,0x80,0x28,0x80,0x30,0x80,0x27,0xF0,0x00,0x00, +/* */ +0x21,0x10,0x21,0x50,0x3D,0x50,0x41,0x50,0x3D,0x50,0x11,0x50,0x11,0x50,0x7D,0x50, +0x11,0x50,0x15,0x50,0x19,0x50,0x12,0x10,0x00,0x00, +/* */ +0x20,0x20,0x20,0x40,0x3C,0x80,0x41,0x10,0x3C,0x20,0x10,0x40,0x10,0x80,0x7D,0x10, +0x10,0x20,0x14,0x40,0x18,0x80,0x13,0x00,0x00,0x00, +/* */ +0x24,0x00,0x32,0xF0,0x44,0x10,0x04,0x10,0x74,0x10,0x24,0x10,0x24,0x10,0x74,0x10, +0x24,0x10,0x24,0x10,0x34,0x10,0x24,0x30,0x00,0x00, +/* */ +0x20,0x00,0x27,0xE0,0x3A,0x20,0x42,0xA0,0x7A,0x60,0x22,0x20,0x21,0x40,0x79,0x40, +0x20,0x80,0x29,0x40,0x32,0x20,0x24,0x10,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x38,0x80,0x43,0xF0,0x79,0x20,0x21,0x20,0x22,0x20,0x79,0x40, +0x20,0x80,0x29,0x40,0x32,0x20,0x24,0x10,0x00,0x00, +/* */ +0x20,0x00,0x23,0xF0,0x3C,0x40,0x40,0x80,0x3C,0x80,0x11,0xA0,0x12,0x90,0x7C,0x90, +0x10,0x80,0x14,0x80,0x18,0x80,0x10,0x80,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x38,0x80,0x43,0xF0,0x78,0x80,0x20,0x80,0x21,0x40,0x79,0x40, +0x21,0x40,0x2A,0xA0,0x32,0xA0,0x24,0x10,0x00,0x00, +/* */ +0x20,0x00,0x21,0xF0,0x3D,0x00,0x41,0x00,0x3D,0xF0,0x11,0x10,0x11,0x10,0x7D,0x10, +0x11,0xF0,0x15,0x00,0x19,0x00,0x11,0xF0,0x00,0x00, +/* */ +0x20,0x30,0x23,0xC0,0x3A,0x00,0x42,0x00,0x7B,0xF0,0x22,0x90,0x22,0x90,0x7A,0xA0, +0x22,0xA0,0x2A,0x40,0x34,0xA0,0x29,0x10,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x39,0x40,0x41,0x40,0x7A,0x20,0x24,0x90,0x20,0x00,0x7B,0xE0, +0x20,0x20,0x28,0x40,0x30,0x40,0x20,0x80,0x00,0x00, +/* */ +0x21,0x00,0x20,0x80,0x3B,0xF0,0x41,0x00,0x79,0x00,0x21,0xF0,0x21,0x10,0x79,0x10, +0x21,0x10,0x2A,0x10,0x32,0x10,0x24,0x60,0x00,0x00, +/* */ +0x21,0x00,0x20,0x80,0x37,0xF0,0x40,0x00,0x70,0x00,0x23,0xC0,0x22,0x40,0x7A,0x40, +0x22,0x40,0x2A,0x50,0x34,0x50,0x28,0x30,0x00,0x00, +/* */ +0x20,0x40,0x22,0x40,0x39,0x40,0x40,0x40,0x7A,0x40,0x21,0x40,0x20,0x40,0x78,0x70, +0x23,0xC0,0x28,0x40,0x30,0x40,0x20,0x40,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x3A,0x90,0x42,0x90,0x7A,0xA0,0x24,0x80,0x20,0x80,0x79,0x40, +0x21,0x40,0x2A,0x20,0x32,0x20,0x24,0x10,0x00,0x00, +/* */ +0x20,0x00,0x23,0xF0,0x3A,0x90,0x42,0x90,0x7A,0x90,0x22,0x90,0x23,0xF0,0x7A,0x00, +0x22,0x00,0x2A,0x10,0x32,0x10,0x21,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x23,0xE0,0x38,0x80,0x40,0x80,0x78,0x80,0x20,0x80,0x23,0xE0,0x78,0x80, +0x20,0xA0,0x28,0x90,0x30,0x80,0x27,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x38,0x80,0x40,0x80,0x78,0x80,0x22,0x80,0x22,0xF0,0x7A,0x80, +0x22,0x80,0x2A,0x80,0x32,0x80,0x27,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x38,0x80,0x47,0xF0,0x78,0x80,0x20,0x80,0x23,0xE0,0x7A,0x20, +0x22,0x20,0x2A,0x20,0x33,0xE0,0x22,0x20,0x00,0x00, +/* */ +0x20,0x00,0x23,0xF0,0x38,0x20,0x40,0x20,0x7B,0xA0,0x22,0xA0,0x22,0xA0,0x7A,0xA0, +0x23,0xA0,0x2A,0x20,0x30,0x20,0x20,0xE0,0x00,0x00, +/* */ +0x20,0x00,0x23,0xF0,0x3A,0x00,0x42,0x00,0x7A,0xE0,0x22,0xA0,0x22,0xA0,0x7A,0xA0, +0x22,0xE0,0x2A,0x00,0x32,0x00,0x23,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x30,0x80,0x47,0xF0,0x01,0x00,0x72,0x80,0x27,0xF0,0x2A,0x90,0x72,0x90, +0x22,0x90,0x22,0x90,0x32,0xB0,0x20,0x80,0x00,0x00, +/* */ +0x21,0x40,0x21,0x20,0x39,0x00,0x43,0xF0,0x79,0x00,0x21,0xE0,0x22,0xA0,0x7A,0xA0, +0x22,0xA0,0x2A,0x40,0x34,0xA0,0x21,0x10,0x00,0x00, +/* */ +0x20,0xA0,0x30,0x90,0x40,0x80,0x07,0xF0,0x74,0x80,0x24,0xA0,0x24,0xA0,0x74,0xA0, +0x24,0x40,0x26,0x50,0x34,0xB0,0x21,0x10,0x00,0x00, +/* */ +0x20,0x00,0x23,0xF0,0x3A,0x10,0x42,0x10,0x7B,0xF0,0x22,0x10,0x22,0x10,0x7B,0xF0, +0x22,0x10,0x2A,0x10,0x33,0xF0,0x22,0x10,0x00,0x00, +/* */ +0x20,0x00,0x23,0xE0,0x3A,0x20,0x42,0x20,0x7B,0xE0,0x22,0x20,0x22,0x20,0x7A,0x20, +0x23,0xE0,0x28,0x00,0x30,0x00,0x27,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x37,0xF0,0x44,0x90,0x04,0x90,0x74,0x90,0x27,0xF0,0x24,0x90,0x74,0x90, +0x24,0x90,0x24,0x90,0x37,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x20,0x60,0x23,0x80,0x3A,0x00,0x42,0x80,0x7A,0x80,0x23,0xF0,0x20,0x80,0x7A,0xA0, +0x22,0x90,0x24,0x90,0x30,0x80,0x21,0x80,0x00,0x00, +/* */ +0x21,0x00,0x30,0x80,0x47,0xF0,0x00,0x80,0x70,0x80,0x27,0xF0,0x24,0x90,0x74,0x90, +0x24,0x90,0x24,0x90,0x34,0xB0,0x20,0x80,0x00,0x00, +/* */ +0x21,0x00,0x30,0x80,0x47,0xF0,0x00,0x80,0x71,0x00,0x22,0x20,0x27,0xC0,0x70,0x80, +0x21,0x00,0x22,0x20,0x37,0xF0,0x20,0x10,0x00,0x00, +/* */ +0x20,0x80,0x20,0x40,0x3B,0xF0,0x42,0x10,0x78,0x00,0x21,0x10,0x21,0x20,0x79,0x40, +0x21,0x80,0x29,0x10,0x31,0x10,0x20,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x30,0x80,0x40,0xA0,0x00,0x20,0x75,0x20,0x25,0x50,0x25,0x50,0x79,0x90, +0x21,0x00,0x23,0x20,0x35,0x20,0x28,0xE0,0x00,0x00, +/* */ +0x20,0x00,0x23,0xF0,0x3A,0x10,0x42,0x10,0x7B,0xF0,0x22,0x00,0x22,0x90,0x7A,0xA0, +0x22,0xC0,0x2A,0x90,0x32,0x90,0x24,0x70,0x00,0x00, +/* */ +0x20,0x80,0x30,0x80,0x47,0xF0,0x04,0x90,0x74,0x80,0x27,0xE0,0x25,0x20,0x75,0x20, +0x25,0x40,0x24,0x80,0x35,0x40,0x2A,0x30,0x00,0x00, +/* */ +0x27,0xE0,0x22,0x20,0x39,0x40,0x40,0x80,0x71,0x40,0x26,0xB0,0x20,0x80,0x7B,0xE0, +0x20,0x80,0x27,0xF0,0x30,0x80,0x20,0x80,0x00,0x00, +/* */ +0x21,0x00,0x31,0x10,0x47,0xA0,0x01,0x40,0x77,0xF0,0x21,0x00,0x23,0xE0,0x76,0x00, +0x2B,0xE0,0x20,0x20,0x30,0x20,0x20,0xC0,0x00,0x00, +/* */ +0x20,0x80,0x20,0x90,0x3B,0xD0,0x40,0xA0,0x70,0xC0,0x27,0xF0,0x21,0x00,0x7B,0x30, +0x25,0xC0,0x21,0x00,0x31,0x10,0x20,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x27,0xF0,0x3A,0x20,0x42,0x20,0x7B,0xE0,0x22,0x20,0x23,0xE0,0x7A,0x20, +0x22,0x30,0x27,0xE0,0x30,0x20,0x20,0x20,0x00,0x00, +/* */ +0x20,0x80,0x30,0x80,0x47,0xF0,0x01,0x00,0x73,0xE0,0x26,0x20,0x2B,0xE0,0x72,0x20, +0x23,0xE0,0x22,0x20,0x32,0x20,0x22,0x60,0x00,0x00, +/* */ +0x20,0x50,0x30,0x40,0x47,0xF0,0x04,0x40,0x74,0x40,0x27,0x50,0x25,0x50,0x75,0x60, +0x25,0x40,0x3B,0x50,0x28,0xB0,0x11,0x10,0x00,0x00, +/* */ +0x20,0x80,0x30,0x80,0x47,0xF0,0x00,0x80,0x74,0x90,0x22,0xA0,0x20,0x80,0x77,0xF0, +0x20,0x80,0x21,0x40,0x32,0x20,0x24,0x10,0x00,0x00, +/* */ +0x21,0x00,0x31,0xE0,0x47,0x00,0x01,0x50,0x70,0x90,0x23,0x70,0x20,0x00,0x77,0xF0, +0x21,0x40,0x21,0x40,0x32,0x50,0x24,0x30,0x00,0x00, +/* */ +0x27,0x80,0x31,0x70,0x45,0x50,0x05,0x50,0x75,0x60,0x27,0xE0,0x21,0x50,0x73,0x50, +0x25,0x50,0x29,0x60,0x31,0x40,0x23,0x40,0x00,0x00, +/* */ +0x20,0x80,0x34,0x90,0x42,0xA0,0x00,0x80,0x77,0xF0,0x20,0x10,0x20,0x10,0x73,0xF0, +0x20,0x10,0x20,0x10,0x37,0xF0,0x20,0x10,0x00,0x00, +/* */ +0x20,0x00,0x23,0xE0,0x3A,0x20,0x42,0x20,0x7B,0xE0,0x20,0x80,0x27,0xF0,0x7C,0x90, +0x24,0x90,0x24,0x90,0x34,0xB0,0x20,0x80,0x00,0x00, +/* */ +0x20,0x00,0x37,0xF0,0x44,0x10,0x04,0x90,0x74,0x90,0x27,0xF0,0x24,0x90,0x75,0x50, +0x26,0x30,0x24,0x10,0x37,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x20,0x80,0x22,0xA0,0x3A,0xA0,0x43,0xE0,0x78,0x00,0x23,0xE0,0x20,0x20,0x78,0x20, +0x23,0xE0,0x2A,0x00,0x32,0x10,0x21,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x22,0x80,0x3B,0xE0,0x44,0x80,0x70,0x80,0x27,0xF0,0x20,0x80,0x79,0xC0, +0x22,0xA0,0x24,0x90,0x30,0x80,0x20,0x80,0x00,0x00, +/* */ +0x20,0x20,0x36,0xC0,0x42,0x40,0x02,0x40,0x74,0x40,0x24,0xE0,0x26,0x40,0x72,0x40, +0x22,0x40,0x2A,0xE0,0x34,0x00,0x2B,0xF0,0x00,0x00, +/* */ +0x20,0x60,0x23,0x80,0x38,0x80,0x40,0x80,0x7B,0xE0,0x20,0x80,0x20,0x80,0x7B,0xF0, +0x20,0x80,0x29,0x00,0x32,0x20,0x23,0xF0,0x00,0x00, +/* */ +0x21,0x40,0x32,0x50,0x46,0x60,0x0A,0x40,0x72,0xD0,0x23,0x50,0x22,0x30,0x70,0x80, +0x27,0xF0,0x20,0x80,0x30,0x80,0x20,0x80,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x39,0x40,0x42,0x20,0x74,0x10,0x23,0xE0,0x20,0x80,0x78,0x80, +0x23,0xE0,0x28,0x80,0x30,0x80,0x27,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x39,0x40,0x42,0x20,0x74,0x10,0x23,0xE0,0x20,0x00,0x7B,0xE0, +0x22,0x20,0x2A,0x20,0x33,0xE0,0x22,0x20,0x00,0x00, +/* */ +0x22,0x20,0x21,0x40,0x38,0x80,0x41,0x40,0x7A,0x20,0x20,0x80,0x27,0xF0,0x78,0x80, +0x22,0xA0,0x24,0x90,0x30,0x80,0x21,0x80,0x00,0x00, +/* */ +0x21,0x40,0x31,0x40,0x45,0x50,0x03,0x60,0x71,0x40,0x21,0x40,0x23,0x60,0x75,0x50, +0x21,0x40,0x21,0x50,0x32,0x50,0x24,0x30,0x00,0x00, +/* */ +0x22,0x00,0x33,0xC0,0x44,0x40,0x08,0x80,0x77,0xE0,0x21,0x20,0x2F,0xF0,0x71,0x20, +0x27,0xE0,0x21,0x20,0x31,0x00,0x27,0x00,0x00,0x00, +/* */ +0x21,0x00,0x21,0xE0,0x3A,0x20,0x44,0x40,0x7B,0xF0,0x22,0x90,0x22,0x90,0x7B,0xF0, +0x22,0x00,0x2A,0x10,0x32,0x10,0x21,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x20,0x40,0x3B,0xF0,0x40,0x80,0x79,0x20,0x22,0x10,0x23,0xF0,0x79,0x50, +0x21,0x40,0x29,0x40,0x32,0x50,0x24,0x30,0x00,0x00, +/* */ +0x25,0xE0,0x32,0x20,0x40,0x40,0x08,0x80,0x75,0xF0,0x20,0xB0,0x22,0xB0,0x75,0x50, +0x29,0x50,0x22,0x90,0x34,0x90,0x21,0x60,0x00,0x00, +/* */ +0x20,0x80,0x20,0x40,0x3B,0xF0,0x42,0x10,0x78,0x80,0x20,0x80,0x23,0xF0,0x79,0x20, +0x21,0x20,0x28,0xC0,0x31,0x20,0x26,0x10,0x00,0x00, +/* */ +0x22,0x00,0x32,0x00,0x42,0x70,0x0F,0x50,0x75,0x50,0x25,0x50,0x25,0x50,0x79,0x50, +0x25,0x50,0x22,0x70,0x35,0x50,0x29,0x00,0x00,0x00, +/* */ +0x22,0x20,0x37,0xF0,0x42,0x20,0x00,0x00,0x77,0xF0,0x24,0x10,0x21,0x00,0x77,0xF0, +0x21,0x10,0x21,0x10,0x32,0x10,0x24,0x60,0x00,0x00, +/* */ +0x20,0x80,0x30,0x80,0x47,0xF0,0x00,0x80,0x72,0xA0,0x21,0xC0,0x27,0xF0,0x70,0x80, +0x21,0xC0,0x22,0xA0,0x34,0x90,0x20,0x80,0x00,0x00, +/* */ +0x20,0x50,0x20,0x40,0x3B,0xF0,0x40,0x40,0x7A,0x40,0x21,0x40,0x22,0x20,0x7A,0xA0, +0x26,0x60,0x22,0xA0,0x31,0xB0,0x20,0x10,0x00,0x00, +/* */ +0x21,0x00,0x25,0xF0,0x3D,0x50,0x45,0x50,0x75,0x50,0x25,0x20,0x21,0x50,0x78,0x80, +0x23,0xE0,0x28,0x80,0x30,0x80,0x27,0xF0,0x00,0x00, +/* */ +0x23,0xE0,0x22,0x20,0x3A,0x20,0x43,0xE0,0x78,0x00,0x27,0xF0,0x20,0x80,0x78,0x80, +0x23,0xE0,0x28,0x80,0x30,0x80,0x27,0xF0,0x00,0x00, +/* */ +0x23,0xE0,0x22,0xA0,0x3A,0xA0,0x43,0xE0,0x7A,0xA0,0x22,0xA0,0x23,0xE0,0x78,0x80, +0x23,0xE0,0x28,0x80,0x30,0x80,0x27,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x22,0x80,0x3B,0xE0,0x44,0x80,0x70,0x80,0x27,0xF0,0x20,0x00,0x7B,0xE0, +0x22,0x20,0x2A,0x20,0x33,0xE0,0x22,0x20,0x00,0x00, +/* */ +0x21,0x40,0x36,0x60,0x42,0x50,0x02,0x40,0x77,0xF0,0x22,0x40,0x23,0x50,0x76,0x60, +0x22,0x40,0x22,0xD0,0x33,0x30,0x26,0x10,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x3A,0xA0,0x42,0xA0,0x7A,0xA0,0x25,0xD0,0x20,0x80,0x78,0x80, +0x23,0xE0,0x28,0x80,0x30,0x80,0x27,0xF0,0x00,0x00, +/* */ +0x20,0x70,0x27,0x80,0x39,0x10,0x44,0xA0,0x7A,0x00,0x20,0x20,0x27,0xF0,0x78,0x20, +0x22,0x20,0x29,0x20,0x30,0x20,0x20,0x60,0x00,0x00, +/* */ +0x21,0x00,0x30,0x80,0x47,0xF0,0x01,0x00,0x72,0x20,0x27,0xF0,0x20,0x10,0x75,0x40, +0x25,0x40,0x25,0x40,0x35,0x50,0x28,0x30,0x00,0x00, +/* */ +0x24,0x00,0x32,0xF0,0x44,0x10,0x07,0xF0,0x75,0x50,0x25,0x50,0x27,0xF0,0x75,0x50, +0x25,0x50,0x25,0x50,0x36,0x50,0x24,0x30,0x00,0x00, +/* */ +0x24,0x00,0x32,0xF0,0x40,0x10,0x05,0xD0,0x75,0x50,0x25,0x50,0x25,0xD0,0x75,0x50, +0x25,0x50,0x25,0xD0,0x34,0x10,0x24,0x30,0x00,0x00, +/* */ +0x21,0x00,0x20,0x80,0x3B,0xE0,0x42,0x20,0x7B,0xE0,0x22,0x20,0x23,0xE0,0x7A,0x90, +0x22,0xA0,0x2A,0x40,0x33,0x20,0x22,0x10,0x00,0x00, +/* */ +0x23,0xE0,0x20,0x20,0x3B,0xE0,0x40,0x20,0x7B,0xE0,0x20,0x00,0x27,0xF0,0x7C,0x10, +0x23,0xE0,0x2A,0x20,0x31,0xC0,0x26,0x30,0x00,0x00, +/* */ +0x27,0xE0,0x34,0x20,0x47,0xE0,0x04,0x00,0x77,0xF0,0x24,0x10,0x25,0xD0,0x75,0x50, +0x25,0x50,0x35,0xD0,0x24,0x10,0x08,0x60,0x00,0x00, +/* */ +0x20,0x00,0x37,0x70,0x45,0x20,0x05,0xE0,0x76,0xA0,0x26,0xA0,0x25,0xA0,0x75,0xE0, +0x25,0x20,0x26,0x20,0x34,0x20,0x24,0x60,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x38,0x80,0x43,0xE0,0x78,0x80,0x27,0xF0,0x22,0x20,0x7B,0xE0, +0x22,0x20,0x2B,0xE0,0x32,0x20,0x22,0x60,0x00,0x00, +/* */ +0x22,0x40,0x32,0x40,0x4F,0xF0,0x02,0x40,0x71,0x00,0x2F,0xF0,0x22,0x00,0x73,0xE0, +0x26,0x20,0x2A,0x20,0x33,0xE0,0x22,0x20,0x00,0x00, +/* */ +0x20,0x80,0x37,0xF0,0x41,0x40,0x02,0x20,0x74,0x90,0x23,0xE0,0x20,0x80,0x72,0x20, +0x27,0xF0,0x22,0x20,0x34,0x20,0x28,0x20,0x00,0x00, +/* */ +0x27,0xE0,0x34,0x20,0x47,0xE0,0x04,0x20,0x77,0xE0,0x20,0x00,0x27,0xE0,0x70,0x40, +0x2F,0xF0,0x24,0x40,0x32,0x40,0x20,0xC0,0x00,0x00, +/* */ +0x23,0xE0,0x22,0xA0,0x3B,0xE0,0x42,0xA0,0x7B,0xE0,0x20,0x80,0x27,0xF0,0x78,0x80, +0x21,0xC0,0x2A,0xA0,0x34,0x90,0x20,0x80,0x00,0x00, +/* */ +0x27,0xE0,0x34,0x20,0x47,0xE0,0x04,0x20,0x77,0xE0,0x20,0x00,0x24,0x40,0x74,0x50, +0x27,0x60,0x24,0x40,0x35,0x50,0x26,0x30,0x00,0x00, +/* */ +0x20,0x00,0x37,0xF0,0x44,0x90,0x04,0x90,0x75,0xD0,0x24,0x90,0x25,0xD0,0x75,0x50, +0x25,0xD0,0x24,0x10,0x37,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x22,0x00,0x33,0xF0,0x45,0x50,0x09,0x50,0x72,0x90,0x25,0x10,0x22,0x60,0x71,0x00, +0x24,0xA0,0x25,0x10,0x39,0x50,0x20,0xC0,0x00,0x00, +/* */ +0x20,0x80,0x23,0xE0,0x38,0x00,0x42,0x20,0x79,0x40,0x27,0xF0,0x20,0x00,0x7B,0xE0, +0x22,0x20,0x2A,0x20,0x33,0xE0,0x22,0x20,0x00,0x00, +/* */ +0x22,0xA0,0x20,0x80,0x3B,0xE0,0x41,0x00,0x77,0xF0,0x22,0x20,0x24,0x10,0x7B,0xE0, +0x22,0x20,0x2A,0x60,0x32,0x10,0x21,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x22,0x90,0x3A,0xA0,0x44,0x80,0x71,0x60,0x26,0x10,0x20,0x80,0x7A,0x90, +0x24,0xA0,0x21,0x40,0x32,0x20,0x24,0x10,0x00,0x00, +/* */ +0x21,0x50,0x32,0xA0,0x45,0x40,0x02,0xA0,0x71,0x50,0x20,0x00,0x27,0xF0,0x74,0x90, +0x27,0xF0,0x24,0x90,0x37,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x22,0x00,0x37,0xF0,0x42,0x50,0x07,0x50,0x72,0x50,0x27,0x50,0x22,0xB0,0x70,0x80, +0x27,0xF0,0x21,0x40,0x32,0x20,0x24,0x10,0x00,0x00, +/* */ +0x24,0x50,0x37,0x60,0x44,0x40,0x05,0x50,0x76,0x30,0x20,0x80,0x27,0xF0,0x74,0x10, +0x27,0xF0,0x24,0x10,0x37,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x23,0xE0,0x22,0xA0,0x3A,0xA0,0x43,0xE0,0x7A,0xA0,0x22,0xA0,0x23,0xE0,0x78,0x80, +0x22,0x50,0x25,0x10,0x31,0x20,0x20,0xE0,0x00,0x00, +/* */ +0x27,0x70,0x25,0x50,0x37,0x70,0x40,0x00,0x73,0xE0,0x20,0x00,0x27,0xF0,0x7A,0x00, +0x23,0xE0,0x28,0x20,0x30,0x20,0x20,0xC0,0x00,0x00, +/* */ +0x20,0x60,0x23,0x80,0x38,0x80,0x47,0xF0,0x70,0x80,0x22,0x80,0x24,0xB0,0x7C,0x90, +0x26,0xB0,0x24,0x90,0x37,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x20,0x80,0x32,0xB0,0x44,0x90,0x06,0xB0,0x74,0x90,0x27,0xF0,0x20,0x80,0x77,0xF0, +0x22,0x10,0x21,0x20,0x30,0xC0,0x27,0x30,0x00,0x00, +/* */ +0x20,0x30,0x37,0xC0,0x45,0x10,0x02,0xA0,0x77,0xF0,0x20,0x80,0x27,0xF0,0x71,0x00, +0x23,0xE0,0x25,0x20,0x30,0xC0,0x27,0x30,0x00,0x00, +/* */ +0x21,0x00,0x37,0xF0,0x40,0x00,0x07,0xE0,0x74,0x20,0x24,0x20,0x27,0xE0,0x71,0x10, +0x22,0xA0,0x26,0x40,0x3B,0x30,0x22,0x00,0x00,0x00, +/* */ +0x20,0x80,0x34,0x90,0x42,0xA0,0x07,0xF0,0x72,0xA0,0x24,0x90,0x21,0x00,0x77,0xF0, +0x21,0x20,0x22,0x20,0x31,0xC0,0x26,0x30,0x00,0x00, +/* */ +0x22,0x40,0x32,0xF0,0x4B,0x10,0x06,0xA0,0x72,0x40,0x23,0xA0,0x22,0x20,0x76,0xF0, +0x2B,0x20,0x22,0xA0,0x32,0x20,0x22,0x60,0x00,0x00, +/* */ +0x21,0x40,0x37,0xF0,0x41,0x50,0x07,0xF0,0x75,0x40,0x27,0xF0,0x22,0x50,0x77,0xE0, +0x22,0xA0,0x22,0xA0,0x31,0x40,0x26,0x20,0x00,0x00, +/* */ +0x27,0xF0,0x34,0x90,0x44,0x90,0x07,0xF0,0x74,0x00,0x25,0xF0,0x25,0x10,0x75,0xF0, +0x25,0x10,0x25,0xF0,0x35,0x10,0x29,0xF0,0x00,0x00, +/* */ +0x21,0x40,0x27,0xF0,0x39,0x40,0x43,0xE0,0x7A,0x20,0x23,0xE0,0x22,0x20,0x7B,0xE0, +0x20,0x80,0x27,0xF0,0x31,0x40,0x26,0x30,0x00,0x00, +/* */ +0x27,0xF0,0x20,0x00,0x3B,0xE0,0x42,0x20,0x7B,0xE0,0x20,0x00,0x27,0xF0,0x7D,0x50, +0x24,0x90,0x25,0xD0,0x34,0x90,0x24,0xB0,0x00,0x00, +/* */ +0x21,0x40,0x33,0xF0,0x46,0x40,0x03,0xF0,0x72,0x40,0x23,0xF0,0x22,0x40,0x77,0xF0, +0x21,0x20,0x21,0x70,0x32,0x10,0x24,0x60,0x00,0x00, +/* */ +0x20,0x80,0x33,0x60,0x4C,0x10,0x07,0xE0,0x74,0x20,0x27,0xE0,0x20,0x10,0x77,0xE0, +0x20,0x80,0x2F,0xF0,0x30,0x80,0x21,0x80,0x00,0x00, +/* */ +0x21,0x00,0x36,0xF0,0x44,0x50,0x05,0x50,0x76,0xB0,0x21,0x00,0x27,0xF0,0x74,0x90, +0x27,0xF0,0x24,0x90,0x37,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x24,0x10,0x32,0x20,0x40,0x00,0x07,0xF0,0x72,0x20,0x24,0x10,0x20,0x00,0x77,0xF0, +0x25,0x50,0x25,0x50,0x35,0x50,0x2F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x37,0xF0,0x44,0x10,0x03,0xE0,0x71,0x00,0x22,0x90,0x25,0x60,0x72,0xC0, +0x25,0x60,0x22,0x50,0x34,0x40,0x21,0x80,0x00,0x00, +/* */ +0x20,0x80,0x27,0xF0,0x3C,0x50,0x43,0x80,0x7A,0x00,0x23,0xF0,0x22,0x40,0x7A,0x40, +0x27,0xF0,0x20,0x00,0x32,0x40,0x24,0x20,0x00,0x00, +/* */ +0x27,0xF0,0x31,0x40,0x47,0xF0,0x05,0x50,0x77,0xF0,0x20,0x00,0x23,0xE0,0x70,0x00, +0x27,0xF0,0x20,0x80,0x32,0xA0,0x25,0x90,0x00,0x00, +/* */ +0x24,0x90,0x22,0xA0,0x37,0xF0,0x44,0x10,0x73,0xE0,0x22,0x20,0x22,0x20,0x7B,0xE0, +0x20,0x80,0x2B,0xE0,0x30,0x80,0x27,0xF0,0x00,0x00, +/* */ +0x23,0xE0,0x32,0x20,0x43,0xE0,0x02,0x20,0x77,0xF0,0x25,0x50,0x27,0xF0,0x70,0x00, +0x27,0xE0,0x22,0x20,0x31,0xC0,0x26,0x30,0x00,0x00, +/* */ +0x27,0xF0,0x34,0x90,0x47,0xF0,0x04,0x90,0x77,0xF0,0x22,0x40,0x27,0x80,0x71,0x20, +0x27,0xF0,0x20,0x80,0x34,0xA0,0x29,0x90,0x00,0x00, +/* */ +0x20,0x40,0x37,0xF0,0x44,0x40,0x05,0xF0,0x74,0x50,0x27,0xF0,0x24,0x50,0x75,0xF0, +0x25,0x50,0x25,0xF0,0x35,0x50,0x29,0x30,0x00,0x00, +/* */ +0x24,0x80,0x32,0xF0,0x4F,0x00,0x04,0x40,0x74,0x70,0x27,0xA0,0x25,0x20,0x75,0xF0, +0x25,0x20,0x25,0x20,0x35,0x50,0x2A,0x90,0x00,0x00, +/* */ +0x24,0x80,0x32,0xF0,0x4F,0x00,0x04,0x00,0x74,0xF0,0x27,0x50,0x25,0x40,0x75,0x70, +0x25,0x40,0x25,0x40,0x35,0xC0,0x2B,0x70,0x00,0x00, +/* */ +0x20,0x80,0x37,0xF0,0x42,0x20,0x01,0x40,0x77,0xF0,0x24,0x90,0x25,0xD0,0x74,0x90, +0x25,0xD0,0x25,0x50,0x35,0xD0,0x24,0x30,0x00,0x00, +/* */ +0x27,0xF0,0x31,0x40,0x47,0xF0,0x05,0x50,0x77,0xF0,0x22,0x20,0x23,0xE0,0x72,0x20, +0x23,0xE0,0x20,0x80,0x37,0xF0,0x20,0x80,0x00,0x00, +/* */ +0x20,0x00,0x37,0xF0,0x44,0x20,0x06,0xA0,0x75,0x30,0x27,0xD0,0x25,0x20,0x75,0x60, +0x27,0xE0,0x25,0x20,0x35,0x50,0x2A,0x90,0x00,0x00, +/* */ +0x25,0x50,0x31,0x40,0x47,0xF0,0x02,0x20,0x71,0x40,0x27,0xF0,0x20,0x80,0x73,0xE0, +0x20,0x80,0x27,0xF0,0x31,0x40,0x26,0x30,0x00,0x00, +/* */ +0x22,0x00,0x37,0x80,0x48,0x80,0x07,0xE0,0x75,0x20,0x27,0xE0,0x25,0x20,0x7F,0xF0, +0x22,0x40,0x23,0xC0,0x32,0x40,0x23,0xC0,0x00,0x00, +/* */ +0x22,0x40,0x37,0x40,0x40,0x40,0x07,0x70,0x75,0x90,0x27,0x50,0x20,0x50,0x77,0x50, +0x21,0x50,0x27,0xA0,0x32,0x50,0x26,0x90,0x00,0x00, +/* */ +0x24,0xF0,0x32,0x10,0x44,0x90,0x07,0xF0,0x74,0x90,0x27,0xF0,0x26,0xB0,0x75,0xD0, +0x27,0xF0,0x24,0x90,0x35,0xD0,0x26,0xB0,0x00,0x00, +/* */ +0x22,0x20,0x27,0xF0,0x31,0x40,0x45,0x50,0x71,0x40,0x27,0xF0,0x20,0x00,0x7B,0xE0, +0x22,0x20,0x2B,0xE0,0x32,0x20,0x23,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x37,0xF0,0x45,0x50,0x02,0xA0,0x73,0xE0,0x22,0xA0,0x23,0xE0,0x70,0x80, +0x27,0xF0,0x24,0x90,0x37,0xF0,0x20,0x80,0x00,0x00, +/* */ +0x26,0xE0,0x22,0xA0,0x3A,0xE0,0x46,0x40,0x75,0xF0,0x25,0x50,0x27,0x50,0x7B,0xF0, +0x22,0x40,0x2A,0x50,0x33,0xF0,0x26,0x10,0x00,0x00, +/* */ +0x27,0x50,0x31,0x60,0x45,0x40,0x02,0x50,0x75,0xA0,0x28,0x10,0x27,0xE0,0x74,0x20, +0x27,0xE0,0x24,0x20,0x32,0x40,0x2F,0xF0,0x00,0x00, +/* */ +0x22,0x20,0x37,0xF0,0x42,0xA0,0x04,0x40,0x77,0xF0,0x2C,0x80,0x27,0xF0,0x74,0x80, +0x27,0xF0,0x22,0x20,0x31,0xC0,0x2E,0x30,0x00,0x00, +/* */ +0x27,0xF0,0x35,0x50,0x47,0xF0,0x02,0x00,0x77,0xF0,0x29,0x10,0x27,0xD0,0x75,0x50, +0x27,0xD0,0x21,0x10,0x37,0xD0,0x20,0x60,0x00,0x00, +/* */ +0x20,0x80,0x23,0xE0,0x39,0x40,0x47,0xF0,0x7A,0x20,0x23,0xE0,0x22,0x20,0x7B,0xE0, +0x20,0x00,0x28,0xA0,0x35,0x50,0x25,0xD0,0x00,0x00, +/* */ +0x20,0x80,0x37,0xF0,0x44,0x10,0x03,0x70,0x75,0x50,0x2A,0x20,0x25,0xD0,0x70,0x00, +0x27,0xF0,0x20,0x80,0x32,0xA0,0x25,0x90,0x00,0x00, +/* */ +0x20,0x80,0x37,0xF0,0x45,0x40,0x07,0xF0,0x75,0x50,0x27,0xF0,0x25,0x50,0x75,0xE0, +0x25,0x50,0x35,0xB0,0x28,0x00,0x05,0x50,0x00,0x00, +/* */ +0x20,0x60,0x23,0x80,0x38,0x80,0x47,0xF0,0x7A,0xA0,0x23,0xE0,0x22,0xA0,0x7B,0xE0, +0x20,0x80,0x2B,0xE0,0x30,0x80,0x27,0xF0,0x00,0x00, +/* */ +0x20,0x20,0x23,0xA0,0x38,0xA0,0x50,0xA0,0x13,0xA0,0x12,0x20,0x7A,0x20,0x13,0xA0, +0x10,0xA0,0x28,0xA0,0x28,0xA0,0x43,0x20,0x00,0x00, +/* */ +0x20,0x80,0x20,0x80,0x3A,0xA0,0x52,0xA0,0x12,0xA0,0x15,0xD0,0x78,0x80,0x10,0x80, +0x13,0xE0,0x28,0x80,0x28,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x21,0x40,0x21,0x20,0x3B,0xF0,0x52,0x40,0x16,0x40,0x13,0xF0,0x7A,0x40,0x12,0x40, +0x13,0xF0,0x2A,0x40,0x2A,0x40,0x43,0xF0,0x00,0x00, +/* */ +0x0A,0x40,0x72,0x40,0x12,0x50,0x12,0x50,0x7B,0xE0,0x12,0x40,0x3A,0x40,0x36,0x40, +0x52,0x40,0x12,0xD0,0x13,0x50,0x12,0x30,0x00,0x00, +/* */ +0x08,0x80,0x70,0x80,0x10,0xE0,0x13,0x80,0x7A,0x80,0x12,0x80,0x3B,0xF0,0x34,0x90, +0x51,0x90,0x12,0xB0,0x14,0x80,0x10,0x80,0x00,0x00, +/* */ +0x08,0x80,0x70,0x80,0x17,0xF0,0x10,0x80,0x7C,0x80,0x13,0xE0,0x38,0x80,0x35,0xC0, +0x52,0xA0,0x14,0x90,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x08,0xA0,0x70,0x90,0x10,0x80,0x13,0xF0,0x78,0x80,0x11,0xC0,0x31,0xC0,0x3A,0xA0, +0x52,0xA0,0x14,0x90,0x10,0x80,0x10,0x80,0x00,0x00, +/* */ +0x09,0xE0,0x71,0x20,0x11,0x20,0x11,0x20,0x7D,0xE0,0x10,0x00,0x3B,0xF0,0x36,0x10, +0x52,0x10,0x12,0x10,0x13,0xF0,0x12,0x10,0x00,0x00, +/* */ +0x09,0x40,0x71,0x20,0x17,0xF0,0x11,0x80,0x7A,0x80,0x12,0x90,0x34,0x90,0x38,0x70, +0x50,0x80,0x14,0x90,0x14,0x90,0x17,0xF0,0x00,0x00, +/* */ +0x08,0x30,0x73,0xC0,0x10,0x90,0x12,0x50,0x79,0x20,0x13,0xF0,0x30,0x20,0x38,0x40, +0x53,0xF0,0x10,0x40,0x10,0x40,0x10,0xC0,0x00,0x00, +/* */ +0x09,0x00,0x70,0x80,0x13,0xE0,0x12,0x20,0x7B,0xE0,0x12,0x20,0x3B,0xE0,0x36,0x90, +0x52,0xA0,0x12,0x40,0x13,0x20,0x12,0x10,0x00,0x00, +/* */ +0x0B,0xE0,0x72,0xA0,0x13,0xE0,0x12,0xA0,0x7B,0xE0,0x10,0x80,0x37,0xF0,0x38,0x80, +0x51,0xC0,0x12,0xA0,0x14,0x90,0x10,0x80,0x00,0x00, +/* */ +0x08,0x80,0x71,0x40,0x12,0x20,0x14,0x90,0x7B,0xE0,0x10,0x20,0x30,0x40,0x39,0x00, +0x54,0xA0,0x15,0x10,0x19,0x50,0x10,0xC0,0x00,0x00, +/* */ +0x08,0x80,0x77,0xF0,0x10,0x80,0x13,0xE0,0x7A,0x20,0x13,0xE0,0x32,0x20,0x3B,0xE0, +0x52,0x20,0x17,0xF0,0x11,0x40,0x12,0x20,0x00,0x00, +/* */ +0x0B,0xE0,0x72,0xA0,0x13,0xE0,0x12,0xA0,0x7B,0xE0,0x11,0x40,0x3A,0x20,0x35,0x10, +0x53,0xE0,0x15,0x20,0x10,0xC0,0x13,0x30,0x00,0x00, +/* */ +0x08,0x80,0x77,0xF0,0x12,0xA0,0x17,0xF0,0x78,0x00,0x17,0xF0,0x34,0x10,0x3D,0xD0, +0x55,0x50,0x15,0xD0,0x14,0x10,0x17,0xF0,0x00,0x00, +/* */ +0x38,0x40,0x10,0x40,0x7C,0x40,0x38,0x70,0x54,0x40,0x18,0x40,0x65,0xF0,0x11,0x10, +0x55,0x10,0x39,0x10,0x55,0xF0,0x31,0x10,0x00,0x00, +/* */ +0x09,0xF0,0x72,0x00,0x11,0xE0,0x7D,0x20,0x11,0xE0,0x39,0x20,0x55,0xE0,0x38,0x80, +0x29,0xE0,0x3B,0x20,0x28,0xC0,0x3B,0x30,0x00,0x00, +/* */ +0x08,0x80,0x77,0xF0,0x10,0x00,0x17,0x70,0x7D,0x50,0x17,0x70,0x39,0x40,0x37,0xF0, +0x51,0x40,0x17,0xF0,0x13,0x20,0x15,0x90,0x00,0x00, +/* */ +0x10,0x30,0x23,0xC0,0x7A,0x00,0x4A,0x00,0x4B,0xF0,0x7A,0x90,0x4A,0x90,0x4A,0xA0, +0x4A,0xA0,0x7A,0x40,0x4C,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x11,0x00,0x20,0x80,0x7B,0xF0,0x48,0x00,0x49,0x40,0x7A,0x20,0x4D,0x50,0x49,0x40, +0x49,0x40,0x78,0x80,0x49,0x40,0x06,0x30,0x00,0x00, +/* */ +0x10,0x80,0x22,0x80,0x7B,0xE0,0x4C,0x80,0x48,0x80,0x4F,0xF0,0x78,0x00,0x4B,0xE0, +0x4A,0x20,0x4A,0x20,0x7B,0xE0,0x4A,0x20,0x00,0x00, +/* */ +0x10,0x10,0x7D,0xE0,0x11,0x00,0x39,0xF0,0x55,0x20,0x12,0x20,0x08,0x00,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x10,0x60,0x27,0x80,0x7A,0xA0,0x49,0xC0,0x4F,0xF0,0x7A,0xA0,0x4C,0x10,0x4B,0xE0, +0x4A,0xA0,0x7B,0xE0,0x4A,0xA0,0x03,0xE0,0x00,0x00, +/* */ +0x04,0x40,0x79,0x40,0x55,0xF0,0x56,0x40,0x54,0x40,0x57,0xF0,0x54,0x40,0x54,0xA0, +0x55,0x10,0x5A,0x00,0x55,0x80,0x1C,0x70,0x00,0x00, +/* */ +0x10,0x10,0x7D,0xE0,0x29,0x50,0x45,0x50,0x39,0x50,0x01,0x50,0x7D,0x50,0x21,0x50, +0x39,0x40,0x09,0x60,0x09,0x50,0x1A,0x70,0x00,0x00, +/* */ +0x3F,0xC0,0x00,0x80,0x05,0x00,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x3F,0xE0,0x22,0x20,0x22,0x20,0x20,0x60,0x00,0x00, +/* */ +0x20,0x80,0x21,0xE0,0x21,0x20,0x79,0xA0,0x29,0x20,0x29,0x60,0x29,0x00,0x29,0xF0, +0x28,0x10,0x2D,0xD0,0x28,0x10,0x40,0x60,0x00,0x00, +/* */ +0x04,0x40,0x07,0xF0,0x7A,0x00,0x01,0x90,0x04,0x70,0x1F,0xC0,0x14,0x40,0x12,0xC0, +0x1F,0xF0,0x00,0x10,0x7F,0x90,0x00,0x30,0x00,0x00, +/* */ +0x20,0x80,0x29,0xE0,0x31,0x20,0x25,0xA0,0x25,0x20,0x1D,0x60,0x01,0x00,0x11,0xF0, +0x7C,0x10,0x11,0xD0,0x10,0x10,0x10,0x60,0x00,0x00, +/* */ +0x10,0x80,0x11,0xE0,0x7D,0x20,0x55,0xA0,0x55,0x20,0x11,0x60,0x29,0x00,0x29,0xF0, +0x2A,0x10,0x2D,0xD0,0x28,0x10,0x40,0x60,0x00,0x00, +/* */ +0x10,0x80,0x11,0xE0,0x11,0x20,0x7D,0xA0,0x11,0x20,0x11,0x60,0x7D,0x00,0x45,0xF0, +0x44,0x10,0x45,0xD0,0x7C,0x10,0x44,0x60,0x00,0x00, +/* */ +0x10,0x80,0x11,0xE0,0x7D,0x20,0x21,0xA0,0x51,0x20,0x51,0x60,0x7D,0x00,0x11,0xF0, +0x38,0x10,0x55,0xD0,0x10,0x10,0x30,0x60,0x00,0x00, +/* */ +0x10,0x80,0x11,0xE0,0x1D,0x20,0x11,0xA0,0x3D,0x20,0x25,0x60,0x25,0x00,0x3D,0xF0, +0x24,0x10,0x21,0xD0,0x20,0x10,0x40,0x60,0x00,0x00, +/* */ +0x20,0x80,0x21,0xE0,0x3D,0x20,0x45,0xA0,0x05,0x20,0x75,0x60,0x55,0x00,0x55,0xF0, +0x74,0x10,0x45,0xD0,0x04,0x10,0x18,0x60,0x00,0x00, +/* */ +0x06,0x40,0x78,0xF0,0x48,0x90,0x48,0xD0,0x48,0x90,0x7E,0xB0,0x48,0x80,0x48,0xF0, +0x48,0x10,0x4A,0xF0,0x66,0x10,0x52,0x60,0x00,0x00, +/* */ +0x24,0x90,0x79,0xE0,0x10,0x40,0x3C,0xF0,0x00,0x00,0x7F,0xF0,0x04,0x00,0x1F,0xC0, +0x12,0x40,0x1F,0xF0,0x00,0x10,0x7F,0x60,0x00,0x00, +/* */ +0x00,0x20,0x7F,0x70,0x08,0x50,0x10,0x70,0x7F,0x50,0x55,0x60,0x55,0x40,0x55,0x70, +0x55,0x10,0x55,0x70,0x55,0x10,0x43,0x60,0x00,0x00, +/* */ +0x11,0x00,0x7B,0xC0,0x11,0x40,0x1B,0x50,0x71,0x50,0x12,0xB0,0x34,0x10,0x1F,0xC0, +0x12,0x40,0x1F,0xF0,0x00,0x10,0x7F,0x60,0x00,0x00, +/* */ +0x0C,0x80,0x71,0xE0,0x11,0x20,0x11,0xA0,0x7D,0x20,0x11,0x60,0x11,0x00,0x7D,0xF0, +0x44,0x10,0x45,0xD0,0x7C,0x10,0x44,0x60,0x00,0x00, +/* */ +0x14,0x40,0x14,0xF0,0x24,0x90,0x2E,0xD0,0x64,0x90,0x24,0xB0,0x2E,0x80,0x35,0xF0, +0x24,0x10,0x24,0xF0,0x24,0x10,0x24,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x4A,0x90,0x04,0x00,0x1F,0xE0,0x14,0x20, +0x12,0x40,0x1F,0xF0,0x00,0x10,0x3F,0x60,0x00,0x00, +/* */ +0x10,0x80,0x7D,0xE0,0x11,0x20,0x7D,0xA0,0x45,0x20,0x39,0x60,0x09,0x00,0x11,0xF0, +0x1C,0x10,0x71,0xD0,0x10,0x10,0x30,0x60,0x00,0x00, +/* */ +0x00,0x20,0x7F,0x70,0x00,0x50,0x77,0x70,0x55,0x50,0x55,0x60,0x55,0x40,0x77,0x70, +0x55,0x10,0x55,0x70,0x55,0x10,0x55,0x60,0x00,0x00, +/* */ +0x08,0x80,0x29,0xE0,0x3D,0x20,0x49,0xA0,0x09,0x20,0x7F,0x60,0x01,0x00,0x3D,0xF0, +0x24,0x10,0x25,0xD0,0x3C,0x10,0x24,0x60,0x00,0x00, +/* */ +0x28,0x80,0x45,0xE0,0x13,0x20,0x11,0xA0,0x29,0x20,0x45,0x60,0x03,0x00,0x7D,0xF0, +0x44,0x10,0x45,0xD0,0x7C,0x10,0x44,0x60,0x00,0x00, +/* */ +0x40,0x20,0x2F,0x70,0x41,0x50,0x49,0x70,0x7F,0x50,0x49,0x60,0x5D,0x40,0x6B,0x70, +0x49,0x10,0x49,0x70,0x41,0x10,0x43,0x60,0x00,0x00, +/* */ +0x44,0x80,0x29,0xE0,0x7D,0x20,0x15,0xA0,0x7D,0x20,0x51,0x60,0x7D,0x00,0x15,0xF0, +0x34,0x10,0x5D,0xD0,0x10,0x10,0x10,0x60,0x00,0x00, +/* */ +0x04,0x40,0x36,0xF0,0x05,0x90,0x04,0xD0,0x7F,0x90,0x14,0xB0,0x14,0x80,0x5C,0xF0, +0x54,0x10,0x55,0xF0,0x5B,0x10,0x61,0x60,0x00,0x00, +/* */ +0x28,0x80,0x7D,0xE0,0x29,0x20,0x01,0xA0,0x7D,0x20,0x55,0x60,0x55,0x00,0x7D,0xF0, +0x54,0x10,0x55,0xD0,0x7C,0x10,0x44,0x60,0x00,0x00, +/* */ +0x08,0x40,0x7E,0xF0,0x14,0x90,0x22,0xD0,0x49,0x90,0x3E,0xB0,0x2A,0x80,0x3E,0xF0, +0x2A,0x10,0x3E,0xF0,0x29,0x10,0x0E,0x60,0x00,0x00, +/* */ +0x08,0x40,0x10,0xF0,0x3E,0x90,0x2A,0xD0,0x3E,0x90,0x2A,0xB0,0x3E,0x80,0x10,0xF0, +0x28,0x10,0x7E,0xF0,0x08,0x10,0x08,0x60,0x00,0x00, +/* */ +0x10,0x80,0x7D,0xE0,0x01,0x20,0x7D,0xA0,0x45,0x20,0x7D,0x60,0x01,0x00,0x79,0xF0, +0x08,0x10,0x7D,0xD0,0x10,0x10,0x30,0x60,0x00,0x00, +/* */ +0x27,0x20,0x25,0x70,0x75,0x50,0x27,0x70,0x25,0x50,0x75,0x60,0x55,0x40,0x57,0x70, +0x55,0x10,0x75,0x70,0x49,0x10,0x13,0x60,0x00,0x00, +/* */ +0x77,0x20,0x55,0x70,0x77,0x50,0x00,0x70,0x3E,0x50,0x00,0x60,0x7F,0x40,0x20,0x70, +0x3E,0x10,0x02,0x70,0x02,0x10,0x0C,0x60,0x00,0x00, +/* */ +0x22,0x20,0x12,0x70,0x04,0x50,0x7F,0x70,0x22,0x50,0x44,0x60,0x55,0x40,0x66,0x70, +0x22,0x10,0x55,0x70,0x77,0x10,0x11,0x60,0x00,0x00, +/* */ +0x3E,0x40,0x2A,0xF0,0x2A,0x90,0x3E,0xD0,0x20,0x90,0x2E,0xB0,0x2A,0x80,0x2E,0xF0, +0x2A,0x10,0x2E,0xF0,0x2A,0x10,0x4E,0x60,0x00,0x00, +/* */ +0x3C,0x80,0x14,0xF0,0x09,0xA0,0x7E,0x40,0x2A,0xA0,0x59,0x10,0x04,0x00,0x1F,0xC0, +0x12,0x40,0x1F,0xF0,0x00,0x10,0x7F,0x60,0x00,0x00, +/* */ +0x04,0x80,0x79,0xE0,0x55,0x20,0x29,0xA0,0x3D,0x20,0x51,0x60,0x11,0x00,0x7D,0xF0, +0x10,0x10,0x55,0xD0,0x5C,0x10,0x64,0x60,0x00,0x00, +/* */ +0x22,0x20,0x14,0x70,0x7F,0xD0,0x14,0x70,0x3F,0x50,0x15,0x60,0x7F,0xC0,0x15,0x70, +0x7F,0x10,0x36,0x70,0x55,0x10,0x14,0xE0,0x00,0x00, +/* */ +0x77,0x20,0x55,0x70,0x55,0x50,0x55,0x70,0x22,0x50,0x55,0x60,0x08,0x40,0x7F,0x70, +0x12,0x10,0x32,0x70,0x0C,0x10,0x73,0x60,0x00,0x00, +/* */ +0x04,0x20,0x3F,0x70,0x20,0x50,0x2A,0x70,0x2A,0x50,0x3F,0x60,0x2A,0x40,0x2A,0x70, +0x2E,0x10,0x20,0x70,0x55,0x10,0x2A,0xE0,0x00,0x00, +/* */ +0x76,0x40,0x5A,0xF0,0x36,0x90,0x5A,0xD0,0x08,0x90,0x14,0xB0,0x2A,0x80,0x54,0xF0, +0x08,0x10,0x32,0xF0,0x04,0x10,0x38,0x60,0x00,0x00, +/* */ +0x08,0x20,0x7F,0x70,0x08,0x50,0x55,0x70,0x22,0x50,0x7F,0x60,0x22,0x40,0x3E,0x70, +0x22,0x10,0x3E,0x70,0x2A,0x10,0x59,0x60,0x00,0x00, +/* */ +0x14,0x40,0x10,0xF0,0x3E,0x90,0x68,0xD0,0x3E,0x90,0x28,0xB0,0x3E,0x80,0x28,0xF0, +0x3E,0x10,0x20,0xF0,0x55,0x10,0x55,0x60,0x00,0x00, +/* */ +0x10,0xA0,0x7C,0x80,0x2B,0xF0,0x39,0x40,0x55,0x50,0x32,0x30,0x04,0x00,0x1F,0xC0, +0x12,0x40,0x1F,0xF0,0x00,0x10,0x7F,0x60,0x00,0x00, +/* */ +0x3E,0x20,0x12,0x70,0x0C,0x50,0x7F,0x70,0x29,0x50,0x58,0x60,0x7F,0x40,0x55,0x70, +0x63,0x10,0x5D,0x70,0x55,0x10,0x5D,0x60,0x00,0x00, +/* */ +0x20,0xA0,0x7B,0xF0,0x48,0xA0,0x69,0x40,0x4B,0xF0,0x59,0x40,0x41,0xF0,0x7D,0x40, +0x07,0xF0,0x75,0x20,0x04,0xC0,0x1B,0x30,0x00,0x00, +/* */ +0x01,0x00,0x79,0xE0,0x4B,0x20,0x78,0xC0,0x13,0x30,0x59,0xE0,0x55,0x20,0x7F,0xE0, +0x12,0x40,0x1F,0xF0,0x00,0x10,0x7F,0x60,0x00,0x00, +/* */ +0x22,0x20,0x7F,0x70,0x22,0x50,0x77,0x70,0x55,0x50,0x77,0x60,0x28,0x40,0x7F,0x70, +0x24,0x10,0x3F,0x70,0x24,0x10,0x3F,0x60,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x30,0x00,0x10,0x00,0x10,0x00,0x30,0x00, +0x50,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x30,0x00,0x1F,0xF0,0x10,0x80,0x30,0x80, +0x50,0x80,0x10,0x80,0x20,0x80,0x43,0x80,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x30,0x00,0x17,0xF0,0x11,0x10,0x31,0x10, +0x51,0x10,0x11,0x30,0x21,0x00,0x41,0x00,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x37,0xE0,0x12,0x00,0x12,0x00,0x33,0xE0, +0x52,0x20,0x12,0x20,0x24,0x20,0x48,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x30,0x80,0x10,0x80,0x14,0x90,0x34,0x90, +0x54,0x90,0x14,0x90,0x27,0xF0,0x40,0x10,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x57,0xF0,0x34,0x00,0x14,0x80,0x17,0xF0,0x34,0x90, +0x54,0x90,0x15,0x10,0x29,0x10,0x52,0x60,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x52,0x40,0x32,0x20,0x1F,0xF0,0x12,0x80,0x32,0x80, +0x52,0x80,0x14,0x90,0x24,0x90,0x48,0x70,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x54,0x20,0x3F,0xF0,0x14,0x20,0x14,0x20,0x37,0xE0, +0x54,0x20,0x14,0x20,0x27,0xE0,0x44,0x20,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x50,0x00,0x3F,0xF0,0x10,0x20,0x17,0xA0,0x34,0xA0, +0x54,0xA0,0x17,0xA0,0x24,0x20,0x40,0xE0,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x57,0xE0,0x34,0x20,0x14,0x20,0x17,0xE0,0x34,0x20, +0x54,0x20,0x17,0xE0,0x20,0x00,0x4F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x52,0x00,0x32,0x00,0x13,0xF0,0x15,0x00,0x39,0xE0, +0x51,0x00,0x11,0xF0,0x21,0x00,0x41,0x00,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x14,0x00,0x57,0xE0,0x38,0x20,0x17,0xA0,0x14,0xA0,0x34,0xA0, +0x57,0xA0,0x14,0x60,0x24,0x10,0x43,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x51,0x00,0x30,0x80,0x17,0xF0,0x10,0x80,0x30,0x80, +0x53,0xE0,0x10,0x80,0x20,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x11,0x00,0x50,0x80,0x37,0xF0,0x11,0x00,0x12,0x20,0x37,0xC0, +0x50,0x80,0x11,0x20,0x27,0xF0,0x40,0x10,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x00,0x64,0x00,0x2F,0x70,0x25,0x50,0x25,0x50,0x65,0x50, +0x25,0x50,0x29,0x50,0x29,0x70,0x56,0x50,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x5F,0xF0,0x32,0x40,0x12,0x40,0x1A,0x50,0x36,0x60, +0x52,0x40,0x12,0x40,0x22,0x40,0x4F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x21,0x00,0x6F,0xE0,0x21,0x20,0x2F,0xE0,0x29,0x00,0x6F,0xF0, +0x21,0x10,0x22,0xB0,0x24,0x40,0x58,0x30,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x61,0x00,0x3F,0xF0,0x21,0x00,0x21,0x00,0x6F,0xE0, +0x21,0x00,0x2A,0xA0,0x2A,0x50,0x51,0xD0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x22,0x40,0x6F,0xF0,0x22,0x40,0x2F,0xF0,0x29,0x10,0x67,0xE0, +0x21,0x20,0x22,0x20,0x24,0x20,0x48,0xC0,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x57,0xE0,0x31,0x00,0x17,0xC0,0x12,0x40,0x3F,0xF0, +0x50,0x00,0x17,0xE0,0x24,0x20,0x47,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x01,0x00,0x1F,0xF0,0x51,0x00,0x35,0x40,0x15,0x40,0x1B,0xA0,0x31,0x10, +0x5F,0xE0,0x11,0x00,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x14,0x00,0x52,0xF0,0x34,0x10,0x14,0x90,0x17,0xF0,0x34,0x90, +0x55,0xD0,0x16,0xB0,0x24,0x90,0x44,0xB0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x28,0x40,0x64,0x40,0x21,0x60,0x29,0x50,0x25,0x50,0x62,0x40, +0x20,0x10,0x24,0x20,0x28,0xC0,0x43,0x00,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x57,0xF0,0x31,0x00,0x12,0x90,0x15,0x60,0x33,0x40, +0x54,0xE0,0x11,0x50,0x26,0x40,0x41,0x80,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x22,0x40,0x62,0x40,0x2E,0x70,0x22,0x40,0x22,0x40,0x6E,0x70, +0x22,0x40,0x22,0x40,0x2E,0x70,0x42,0x40,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x57,0xF0,0x34,0x90,0x15,0xD0,0x14,0x90,0x35,0xD0, +0x55,0x50,0x15,0xD0,0x24,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x20,0x53,0xC0,0x30,0x80,0x17,0xF0,0x12,0xA0,0x35,0x10, +0x5F,0xF0,0x12,0x40,0x21,0x80,0x4E,0x60,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x61,0x00,0x25,0x60,0x29,0x20,0x2D,0x60,0x69,0x20, +0x2F,0xE0,0x22,0x80,0x24,0x40,0x58,0x30,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x28,0x40,0x64,0x40,0x3E,0xA0,0x29,0x10,0x2E,0x40,0x6A,0x20, +0x2A,0x20,0x2A,0x80,0x2A,0x40,0x56,0x20,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x62,0x80,0x2F,0xE0,0x29,0x20,0x2F,0xE0,0x69,0x20, +0x2F,0xE0,0x21,0x00,0x3F,0xF0,0x41,0x00,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x00,0x3F,0x10,0x64,0x50,0x3F,0x50,0x35,0x50,0x3F,0x50, +0x64,0x50,0x2E,0x50,0x35,0x10,0x44,0x30,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xF0,0x21,0x00,0x6F,0xE0,0x25,0x40,0x23,0x80,0x2F,0xF0,0x24,0x40, +0x69,0x20,0x27,0xC0,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x12,0x00,0x55,0xE0,0x3C,0x20,0x17,0xF0,0x15,0x00,0x35,0xF0, +0x56,0x40,0x15,0xF0,0x24,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x20,0x6F,0xF0,0x21,0x00,0x27,0xE0,0x22,0x00,0x6F,0xF0, +0x24,0x00,0x2B,0xE0,0x30,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x29,0x20,0x65,0x40,0x3F,0xF0,0x25,0x40,0x29,0x20,0x62,0x00, +0x3F,0xF0,0x24,0x40,0x23,0x80,0x5C,0x70,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x6E,0xE0,0x2A,0x20,0x2E,0xE0,0x28,0x00,0x6E,0xE0, +0x28,0xA0,0x2E,0x40,0x28,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x6F,0xE0,0x25,0x20,0x23,0xC0,0x3D,0x30,0x6F,0xE0, +0x29,0x20,0x2F,0xE0,0x21,0x10,0x5F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x00,0x6F,0xE0,0x24,0xA0,0x2E,0xA0,0x24,0xA0,0x6F,0x60, +0x25,0x00,0x2A,0xA0,0x2A,0x50,0x51,0xD0,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x12,0x40,0x5F,0xF0,0x32,0x40,0x17,0xE0,0x14,0x20,0x37,0xE0, +0x54,0x20,0x1F,0xF0,0x22,0x40,0x4C,0x30,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xF0,0x24,0x00,0x6E,0xE0,0x2A,0xA0,0x2F,0x30,0x2A,0x00,0x3E,0xE0, +0x6A,0xA0,0x2E,0xA0,0x2A,0x40,0x56,0xB0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x29,0x20,0x65,0x40,0x2A,0xA0,0x27,0xC0,0x3C,0x70,0x67,0xC0, +0x24,0x40,0x27,0xC0,0x24,0x40,0x44,0xC0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x6F,0xE0,0x24,0x40,0x3F,0xF0,0x29,0x20,0x6F,0xE0, +0x29,0x20,0x2F,0xE0,0x24,0x40,0x48,0x20,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x57,0xF0,0x31,0x40,0x17,0xF0,0x15,0x50,0x37,0xF0, +0x50,0x00,0x17,0xF0,0x22,0xA0,0x45,0x90,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x29,0x20,0x6F,0xE0,0x29,0x20,0x2F,0xE0,0x22,0x40,0x67,0x80, +0x21,0x20,0x2F,0xE0,0x25,0x40,0x4B,0x20,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x00,0x57,0x70,0x35,0x50,0x15,0x50,0x12,0x20,0x35,0x50, +0x5F,0xF0,0x12,0x40,0x21,0x80,0x4E,0x70,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x14,0x00,0x57,0x70,0x35,0x50,0x1A,0x20,0x15,0xD0,0x38,0x00, +0x57,0xF0,0x10,0x80,0x22,0xA0,0x45,0x90,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x80,0x6E,0xE0,0x2B,0xA0,0x2A,0x40,0x2D,0xB0,0x6A,0xE0, +0x2A,0x40,0x2C,0xE0,0x28,0x40,0x49,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x80,0x6E,0xE0,0x2B,0x40,0x2C,0xE0,0x2A,0x20,0x6B,0xE0, +0x2A,0x80,0x2C,0x20,0x2B,0x50,0x49,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xF0,0x2A,0xA0,0x66,0x60,0x2A,0xA0,0x21,0x00,0x26,0xC0,0x39,0x30, +0x66,0x80,0x21,0x20,0x20,0xC0,0x4F,0x00,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x3D,0x70,0x68,0x20,0x2B,0xE0,0x28,0xA0,0x3E,0xF0, +0x69,0x20,0x2A,0xA0,0x2C,0xA0,0x58,0x70,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3F,0x60,0x64,0xA0,0x3F,0x70,0x35,0x50,0x3F,0x50, +0x64,0x50,0x2E,0x20,0x35,0x50,0x44,0x90,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x21,0x00,0x6F,0xE0,0x24,0x40,0x3F,0xF0,0x29,0x20,0x68,0xA0, +0x2F,0xE0,0x22,0x00,0x35,0x50,0x57,0xD0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x20,0x00,0x3F,0x70,0x61,0x50,0x3F,0x50,0x2A,0x80,0x3F,0x70, +0x6A,0x50,0x3F,0x50,0x2A,0x20,0x51,0x50,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x10,0x20,0x57,0x70,0x35,0x00,0x15,0x50,0x17,0x20,0x34,0x70, +0x57,0x20,0x1D,0x70,0x25,0x20,0x47,0x20,0x00,0x00, +/* */ +0x01,0x00,0x1F,0xF0,0x12,0x00,0x57,0x70,0x32,0x20,0x17,0x70,0x15,0x50,0x37,0x50, +0x55,0x50,0x1F,0xA0,0x25,0x50,0x48,0x90,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x2A,0xA0,0x6E,0xE0,0x2A,0xA0,0x2E,0xE0,0x25,0x00,0x6F,0xF0, +0x38,0x80,0x2F,0xE0,0x28,0x80,0x4F,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x13,0xB0,0x00,0x90,0x78,0x90,0x02,0xD0,0x49,0xB0,0x28,0x90,0x29,0xB0, +0x02,0xD0,0x18,0x90,0x60,0x90,0x01,0xB0,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x07,0xF0,0x78,0x80,0x03,0xE0,0x4A,0xA0,0x2B,0xE0,0x28,0x80, +0x01,0xC0,0x1A,0xA0,0x64,0x90,0x00,0x80,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x14,0x40,0x04,0x00,0x0F,0xE0,0x10,0x20,0x28,0x40, +0x04,0x80,0x03,0x00,0x0C,0x00,0x70,0x00,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x10,0x40,0x3F,0xE0,0x00,0x20,0x3F,0xE0,0x20,0x00, +0x3F,0xF0,0x00,0x10,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x12,0x40,0x7F,0xF0,0x02,0x00,0x22,0x20,0x22,0x20, +0x3F,0xE0,0x02,0x00,0x02,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x11,0xE0,0x3E,0x00,0x02,0x00,0x01,0x00,0x7F,0xE0, +0x00,0x40,0x07,0x80,0x18,0x00,0x67,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x50,0x50,0x20,0x20,0x08,0x80,0x11,0xF0,0x24,0x90,0x78,0x90, +0x10,0x90,0x25,0x10,0x7D,0x10,0x02,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x48,0x90,0x10,0x40,0x25,0x20,0x15,0x40,0x05,0x00,0x15,0x40, +0x25,0x20,0x09,0x00,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x50,0x50,0x22,0x20,0x1F,0xC0,0x02,0x00,0x3F,0xE0,0x05,0x20, +0x11,0x00,0x7F,0xF0,0x04,0x40,0x38,0x20,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x50,0x50,0x3F,0xE0,0x12,0x40,0x1F,0xC0,0x12,0x40,0x1F,0xC0, +0x02,0x00,0x7F,0xF0,0x0A,0x80,0x32,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x55,0x50,0x28,0xA0,0x17,0x40,0x60,0x30,0x3E,0x20,0x22,0xA0, +0x3E,0xA0,0x22,0xA0,0x3E,0x20,0x26,0x60,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x52,0x50,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x00,0x00,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x52,0x50,0x2A,0xA0,0x7F,0xF0,0x0A,0x80,0x32,0x60,0x04,0x00, +0x7F,0xF0,0x08,0x80,0x07,0x00,0x38,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x50,0x50,0x24,0x20,0x7B,0xC0,0x52,0xA0,0x5A,0xA0,0x56,0xA0, +0x52,0x90,0x5A,0xC0,0x54,0xA0,0x1C,0xE0,0x00,0x00, +/* */ +0x20,0x00,0x10,0x00,0x78,0x00,0x08,0x00,0x10,0x00,0x14,0x00,0x38,0x00,0x54,0x00, +0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00, +/* */ +0x20,0x00,0x17,0xE0,0x7A,0x20,0x0A,0xA0,0x12,0x60,0x16,0x20,0x39,0x40,0x55,0x40, +0x10,0x80,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x40,0x80,0x20,0x80,0x77,0xF0,0x14,0x90,0x24,0x90,0x34,0x90,0x65,0x50,0x36,0x30, +0x24,0x10,0x24,0x10,0x24,0x10,0x24,0x30,0x00,0x00, +/* */ +0x20,0x00,0x10,0x60,0x7B,0x80,0x08,0x80,0x10,0x80,0x18,0x80,0x37,0xF0,0x58,0x80, +0x10,0x80,0x10,0x80,0x10,0x80,0x13,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x79,0x40,0x09,0x40,0x12,0x20,0x18,0x90,0x30,0x00,0x5B,0xE0, +0x10,0x20,0x10,0x40,0x10,0x40,0x10,0x80,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x7B,0xE0,0x08,0xA0,0x10,0xA0,0x18,0xA0,0x37,0xF0,0x58,0x80, +0x11,0x40,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x40,0x80,0x24,0x90,0x72,0xA0,0x10,0x80,0x23,0xE0,0x30,0x80,0x60,0x80,0x37,0xF0, +0x20,0x80,0x20,0x80,0x20,0x80,0x20,0x80,0x00,0x00, +/* */ +0x20,0x80,0x14,0x90,0x7A,0xA0,0x08,0x80,0x13,0xF0,0x14,0x10,0x38,0x10,0x55,0xF0, +0x10,0x10,0x10,0x10,0x13,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x79,0x40,0x0A,0x20,0x14,0x10,0x1B,0xE0,0x30,0x00,0x5B,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x21,0x00,0x11,0xE0,0x7A,0x20,0x0D,0x40,0x10,0x80,0x19,0x40,0x36,0x30,0x5B,0xE0, +0x12,0x20,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x23,0xE0,0x12,0x20,0x7A,0x20,0x0B,0xE0,0x12,0x20,0x1A,0x20,0x33,0xE0,0x5A,0x90, +0x12,0xA0,0x12,0x40,0x13,0x20,0x12,0x10,0x00,0x00, +/* */ +0x48,0x40,0x24,0x40,0x71,0xF0,0x10,0x80,0x2D,0x40,0x35,0xF0,0x64,0x40,0x34,0x40, +0x25,0xF0,0x24,0x40,0x2A,0x40,0x31,0xF0,0x00,0x00, +/* */ +0x23,0xE0,0x12,0x20,0x7A,0x20,0x0B,0xE0,0x10,0x00,0x1B,0xE0,0x30,0x80,0x58,0x80, +0x13,0xE0,0x10,0x80,0x10,0x80,0x17,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x10,0x80,0x79,0x40,0x0A,0x20,0x14,0x10,0x1B,0xE0,0x30,0x00,0x59,0x20, +0x14,0xA0,0x12,0xA0,0x12,0x40,0x17,0xF0,0x00,0x00, +/* */ +0x44,0x00,0x22,0xF0,0x70,0x10,0x15,0xD0,0x25,0x50,0x35,0x50,0x65,0xD0,0x35,0x50, +0x25,0x50,0x25,0xD0,0x24,0x10,0x24,0x30,0x00,0x00, +/* */ +0x40,0x80,0x20,0x80,0x77,0xF0,0x10,0x80,0x23,0xE0,0x30,0x80,0x67,0xF0,0x31,0x40, +0x23,0x50,0x25,0x20,0x21,0xA0,0x21,0x10,0x00,0x00, +/* */ +0x41,0x00,0x21,0x10,0x73,0xA0,0x11,0x40,0x2F,0xF0,0x31,0x00,0x63,0xE0,0x36,0x20, +0x2B,0xE0,0x22,0x20,0x23,0xE0,0x22,0x20,0x00,0x00, +/* */ +0x23,0xE0,0x12,0x20,0x7B,0xE0,0x0A,0x20,0x13,0xE0,0x19,0x00,0x33,0xF0,0x5D,0x50, +0x12,0x50,0x14,0x90,0x11,0x10,0x12,0x60,0x00,0x00, +/* */ +0x20,0x80,0x11,0x00,0x7B,0xF0,0x0A,0x50,0x13,0xF0,0x1A,0x90,0x33,0xF0,0x59,0x00, +0x12,0x40,0x17,0xF0,0x10,0x40,0x10,0x40,0x00,0x00, +/* */ +0x20,0x00,0x13,0xF0,0x7A,0x10,0x0B,0xF0,0x12,0x40,0x1B,0xF0,0x32,0x40,0x5B,0xF0, +0x13,0x10,0x15,0x10,0x15,0xF0,0x19,0x10,0x00,0x00, +/* */ +0x40,0x00,0x27,0x70,0x71,0x10,0x15,0x50,0x22,0x20,0x35,0x50,0x60,0x00,0x37,0x70, +0x21,0x50,0x25,0x50,0x22,0x20,0x2D,0x50,0x00,0x00, +/* */ +0x22,0x20,0x17,0xF0,0x7A,0x20,0x08,0x80,0x11,0x40,0x1A,0x20,0x35,0xD0,0x58,0x00, +0x13,0xE0,0x12,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x21,0x50,0x17,0x60,0x79,0x40,0x0B,0x50,0x15,0x30,0x1B,0xE0,0x32,0x20,0x5B,0xE0, +0x12,0x20,0x13,0xE0,0x12,0x20,0x12,0x60,0x00,0x00, +/* */ +0x21,0x00,0x11,0xE0,0x7A,0xA0,0x0A,0xA0,0x16,0xE0,0x1A,0x40,0x33,0xF0,0x5A,0x40, +0x12,0xE0,0x13,0x50,0x12,0x40,0x12,0x40,0x00,0x00, +/* */ +0x40,0x80,0x24,0x90,0x72,0xA0,0x17,0xF0,0x22,0xA0,0x34,0x90,0x61,0x00,0x37,0xF0, +0x21,0x20,0x22,0x20,0x21,0xC0,0x26,0x30,0x00,0x00, +/* */ +0x40,0x80,0x27,0xF0,0x74,0x10,0x17,0xF0,0x24,0x00,0x37,0xF0,0x6D,0x50,0x35,0x50, +0x27,0xF0,0x25,0x50,0x25,0x50,0x24,0x30,0x00,0x00, +/* */ +0x41,0x40,0x25,0x40,0x75,0x70,0x15,0x80,0x25,0x20,0x31,0x10,0x60,0x00,0x37,0xF0, +0x25,0x50,0x25,0x50,0x25,0x50,0x2F,0xF0,0x00,0x00, +/* */ +0x40,0xF0,0x2F,0x80,0x78,0xE0,0x18,0x80,0x2B,0xF0,0x3A,0x90,0x6B,0xC0,0x3A,0x90, +0x2A,0x70,0x2D,0xC0,0x29,0x50,0x32,0x30,0x00,0x00, +/* */ +0x47,0x70,0x21,0x10,0x75,0x50,0x13,0x30,0x25,0x50,0x30,0x80,0x67,0xF0,0x34,0x10, +0x27,0xF0,0x24,0x10,0x27,0xF0,0x24,0x10,0x00,0x00, +/* */ +0x46,0xE0,0x22,0xA0,0x72,0xE0,0x16,0x40,0x25,0xF0,0x35,0x50,0x67,0x50,0x33,0xF0, +0x22,0x40,0x22,0x50,0x23,0xF0,0x26,0x10,0x00,0x00, +/* */ +0x43,0xE0,0x20,0x80,0x77,0xF0,0x14,0x90,0x22,0xA0,0x30,0x00,0x67,0xF0,0x30,0x80, +0x27,0xF0,0x25,0x50,0x25,0x50,0x24,0x30,0x00,0x00, +/* */ +0x42,0x20,0x27,0x70,0x72,0xA0,0x17,0x70,0x22,0xA0,0x37,0xF0,0x62,0x20,0x35,0xD0, +0x20,0x80,0x27,0xF0,0x20,0x80,0x21,0x80,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x02,0x10,0x02,0x20,0x02,0x00,0x12,0x00,0x13,0xE0,0x12,0x00, +0x12,0x00,0x2A,0x00,0x26,0x00,0x43,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x02,0x10,0x12,0x00,0x13,0xE0,0x2A,0x00,0x5F,0xF0,0x10,0x40,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x10,0xC0,0x00,0x00, +/* */ +0x00,0x40,0x78,0x40,0x4B,0xF0,0x22,0x50,0x7A,0x40,0x23,0xE0,0x52,0xA0,0x7A,0xA0, +0x12,0xA0,0x1A,0x40,0x72,0xA0,0x15,0x10,0x00,0x00, +/* */ +0x10,0x40,0x24,0x40,0x7F,0xF0,0x2A,0x50,0x46,0x40,0x23,0xE0,0x3A,0xA0,0x4A,0xA0, +0x2A,0xA0,0x12,0x40,0x2A,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x00,0x80,0x38,0x80,0x09,0x40,0x29,0x40,0x12,0x20,0x7C,0x90,0x14,0x00,0x33,0xE0, +0x50,0x20,0x10,0x40,0x10,0x40,0x30,0x80,0x00,0x00, +/* */ +0x02,0x00,0x02,0x00,0x3F,0xE0,0x02,0x00,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x07,0x00, +0x0A,0x80,0x12,0x40,0x62,0x30,0x02,0x00,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x7C,0x10,0x10,0x20,0x38,0x40,0x10,0x40,0x7D,0xF0,0x10,0x40, +0x38,0x40,0x54,0x40,0x10,0x40,0x10,0xC0,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x7C,0x40,0x11,0x60,0x39,0x50,0x12,0x50,0x7C,0x40,0x10,0x50, +0x38,0x20,0x54,0x40,0x10,0x80,0x13,0x00,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x7D,0x10,0x11,0x10,0x39,0xF0,0x11,0x00,0x7D,0x00,0x11,0xF0, +0x39,0x10,0x55,0x10,0x11,0xF0,0x11,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x79,0x40,0x12,0x20,0x3C,0x10,0x13,0xE0,0x78,0x00,0x13,0xE0, +0x3A,0x20,0x52,0x20,0x13,0xE0,0x12,0x20,0x00,0x00, +/* */ +0x11,0x20,0x13,0xF0,0x79,0x20,0x10,0x00,0x3B,0xF0,0x12,0x10,0x78,0x80,0x13,0xF0, +0x38,0x90,0x50,0x90,0x11,0x10,0x12,0x60,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x7A,0xA0,0x10,0x80,0x3F,0xF0,0x14,0x10,0x7D,0xD0,0x15,0x50, +0x3D,0x50,0x55,0xD0,0x14,0x10,0x14,0x30,0x00,0x00, +/* */ +0x13,0xE0,0x12,0xA0,0x7B,0xE0,0x12,0xA0,0x3A,0xA0,0x13,0xE0,0x78,0x80,0x17,0xF0, +0x3C,0x90,0x55,0xD0,0x14,0x50,0x14,0x30,0x00,0x00, +/* */ +0x10,0x80,0x14,0x90,0x7A,0xA0,0x17,0xF0,0x3A,0xA0,0x14,0x90,0x79,0x00,0x17,0xF0, +0x39,0x20,0x52,0x20,0x11,0xC0,0x16,0x30,0x00,0x00, +/* */ +0x11,0x40,0x13,0xE0,0x79,0x40,0x17,0xF0,0x38,0x80,0x13,0xE0,0x7A,0xA0,0x13,0xE0, +0x3A,0xA0,0x57,0xF0,0x12,0x20,0x12,0x60,0x00,0x00, +/* */ +0x17,0xF0,0x14,0x00,0x7D,0xF0,0x14,0x00,0x3F,0xF0,0x15,0x50,0x7D,0x20,0x15,0x90, +0x3C,0x20,0x57,0xF0,0x15,0x20,0x18,0x60,0x00,0x00, +/* */ +0x10,0x40,0x17,0xF0,0x7D,0x20,0x17,0xF0,0x3D,0xA0,0x17,0x70,0x7D,0x20,0x17,0xF0, +0x3C,0x80,0x55,0xF0,0x17,0x10,0x19,0xF0,0x00,0x00, +/* */ +0x04,0x40,0x3F,0x80,0x05,0x00,0x7F,0xE0,0x04,0x90,0x1F,0xF0,0x68,0x80,0x1F,0xC0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xF0,0x28,0x40,0x28,0x40,0x38,0x40,0x28,0x40,0x38,0x40,0x28,0x40, +0x2C,0x40,0x78,0x40,0x08,0x40,0x09,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x2B,0xE0,0x2A,0xA0,0x3A,0xA0,0x2B,0xE0,0x3A,0xA0,0x2A,0xA0, +0x2F,0xF0,0x7A,0x20,0x0A,0x20,0x0A,0x60,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x29,0x40,0x2A,0x20,0x3C,0x90,0x28,0x40,0x3B,0xE0,0x28,0x20, +0x2C,0x40,0x79,0x40,0x08,0x80,0x08,0x40,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x40,0x2B,0xF0,0x2A,0x10,0x38,0x00,0x2B,0xF0,0x38,0x40,0x28,0x40, +0x2C,0x40,0x78,0x40,0x08,0x40,0x09,0xC0,0x00,0x00, +/* */ +0x00,0x30,0x7D,0xC0,0x28,0x40,0x28,0x40,0x39,0xF0,0x28,0x40,0x38,0x40,0x29,0xF0, +0x2D,0x10,0x79,0x10,0x09,0xF0,0x09,0x10,0x00,0x00, +/* */ +0x00,0x40,0x7D,0xF0,0x29,0x50,0x29,0xF0,0x38,0x40,0x2B,0xF0,0x38,0x00,0x29,0xF0, +0x2D,0x50,0x79,0x50,0x08,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x08,0x80,0x3E,0xF0,0x09,0x20,0x7E,0xA0,0x10,0x40,0x3C,0xA0,0x45,0x10,0x7F,0xF0, +0x19,0x40,0x14,0xF0,0x7F,0xC0,0x00,0x40,0x00,0x00, +/* */ +0x7F,0xF0,0x05,0x00,0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x10,0x40,0x1F,0xC0,0x10,0x40, +0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x00,0x00, +/* */ +0x00,0x00,0x39,0xF0,0x10,0x40,0x10,0x80,0x11,0xF0,0x11,0x10,0x7D,0x50,0x11,0x50, +0x11,0x50,0x10,0x40,0x10,0xA0,0x11,0x10,0x00,0x00, +/* */ +0x04,0x00,0x39,0xF0,0x20,0x40,0x20,0x80,0x3D,0xF0,0x29,0x10,0x29,0x50,0x29,0x50, +0x29,0x50,0x28,0x40,0x28,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x10,0x00,0x09,0xF0,0x00,0x40,0x7C,0x80,0x01,0xF0,0x39,0x10,0x29,0x50,0x29,0x50, +0x29,0x50,0x2C,0x40,0x28,0xA0,0x41,0x10,0x00,0x00, +/* */ +0x08,0x00,0x09,0xF0,0x7E,0x40,0x08,0x80,0x09,0xF0,0x3D,0x10,0x01,0x50,0x3D,0x50, +0x25,0x50,0x24,0x40,0x3C,0xA0,0x25,0x10,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x28,0x40,0x44,0x80,0x03,0xF0,0x7D,0x10,0x01,0x50,0x7D,0x50, +0x45,0x50,0x44,0x40,0x7C,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x25,0xF0,0x28,0x40,0x30,0x80,0x25,0xF0,0x1D,0x10,0x09,0x50,0x0B,0x50,0x6D,0x50, +0x29,0x50,0x2C,0x40,0x4A,0xA0,0x19,0x10,0x00,0x00, +/* */ +0x10,0x00,0x09,0xF0,0x7E,0x40,0x10,0x80,0x23,0xF0,0x7D,0x10,0x09,0x50,0x13,0x50, +0x65,0x50,0x08,0x40,0x14,0xA0,0x63,0x10,0x00,0x00, +/* */ +0x08,0x00,0x15,0xF0,0x22,0x40,0x50,0x80,0x09,0xF0,0x3D,0x10,0x05,0x50,0x09,0x50, +0x3D,0x50,0x24,0x40,0x3C,0xA0,0x25,0x10,0x00,0x00, +/* */ +0x77,0x70,0x55,0x20,0x77,0x40,0x00,0x70,0x3E,0x50,0x00,0x50,0x7F,0x50,0x20,0x50, +0x3E,0x00,0x02,0x20,0x02,0x20,0x0C,0x50,0x00,0x00, +/* */ +0x08,0x70,0x49,0x20,0x49,0x40,0x7F,0x70,0x00,0x50,0x7F,0x50,0x08,0x50,0x7F,0x50, +0x55,0x00,0x55,0x20,0x55,0x20,0x43,0x50,0x00,0x00, +/* */ +0x7E,0x00,0x25,0xF0,0x3C,0x40,0x24,0x80,0x3D,0xF0,0x27,0x10,0x7D,0x50,0x05,0x50, +0x7D,0x50,0x54,0x40,0x28,0xA0,0x55,0x10,0x00,0x00, +/* */ +0x22,0x70,0x7F,0x20,0x22,0x40,0x00,0x70,0x7F,0x50,0x14,0x50,0x7F,0x50,0x55,0x50, +0x55,0x00,0x6B,0x20,0x41,0x20,0x43,0x50,0x00,0x00, +/* */ +0x3E,0x70,0x22,0x20,0x1C,0x40,0x22,0x70,0x77,0x50,0x55,0x50,0x22,0x50,0x55,0x50, +0x08,0x00,0x7F,0x20,0x2A,0x20,0x49,0x50,0x00,0x00, +/* */ +0x3D,0xF0,0x24,0x40,0x3C,0x80,0x25,0xF0,0x3D,0x10,0x11,0x50,0x7F,0x50,0x25,0x50, +0x3D,0x50,0x08,0x40,0x2A,0xA0,0x59,0x10,0x00,0x00, +/* */ +0x3E,0x70,0x08,0x20,0x7F,0x40,0x49,0x70,0x2A,0x50,0x00,0x50,0x7F,0x50,0x08,0x50, +0x7F,0x00,0x55,0x20,0x55,0x20,0x43,0x50,0x00,0x00, +/* */ +0x2D,0xF0,0x28,0x80,0x7F,0xF0,0x29,0x50,0x4D,0xF0,0x12,0xA0,0x7F,0xD0,0x12,0x40, +0x1F,0xC0,0x14,0x40,0x7F,0xF0,0x01,0x00,0x00,0x00, +/* */ +0x02,0x00,0x03,0xE0,0x02,0x00,0x3F,0xF0,0x20,0x10,0x22,0x00,0x22,0x00,0x23,0xE0, +0x3E,0x00,0x22,0x10,0x22,0x10,0x41,0xF0,0x00,0x00, +/* */ +0x03,0xE0,0x02,0x00,0x3F,0xF0,0x22,0x10,0x23,0xC0,0x3E,0x10,0x21,0xF0,0x21,0x00, +0x3F,0xF0,0x24,0x40,0x23,0x80,0x5C,0x70,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x11,0x00,0x7D,0x00,0x55,0x00,0x55,0x00,0x7D,0x00,0x11,0x00, +0x15,0x10,0x1D,0x10,0x65,0x10,0x00,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x11,0xC0,0x11,0x40,0x7D,0x40,0x55,0x40,0x55,0x40,0x7D,0x40,0x11,0x40, +0x15,0x40,0x1D,0x50,0x62,0x50,0x04,0x30,0x00,0x00, +/* */ +0x7F,0xF0,0x08,0x00,0x0F,0xE0,0x08,0x20,0x10,0x20,0x60,0xC0,0x02,0x00,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x7C,0x80,0x2B,0xE0,0x2A,0xA0,0x2A,0xA0,0x2B,0xE0,0x28,0x80,0x28,0xA0, +0x28,0xE0,0x2B,0x20,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0xF0,0x7E,0x00,0x54,0x00,0x55,0xE0,0x7C,0x20,0x10,0x40, +0x14,0x80,0x1D,0x10,0x65,0x10,0x00,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x10,0x00,0x7D,0xF0,0x54,0x80,0x54,0x80,0x54,0x80,0x7C,0x80, +0x10,0x80,0x14,0x80,0x1C,0x80,0x64,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x10,0x80,0x7D,0xE0,0x54,0x80,0x54,0x80,0x7F,0xF0,0x10,0x80, +0x15,0x40,0x1D,0x40,0x62,0x20,0x04,0x10,0x00,0x00, +/* */ +0x11,0x40,0x11,0x40,0x11,0x40,0x7D,0x40,0x55,0xD0,0x55,0x60,0x7D,0x40,0x11,0x40, +0x15,0x40,0x1D,0x50,0x65,0xD0,0x01,0x30,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x11,0xF0,0x7D,0x50,0x55,0x50,0x55,0x50,0x55,0x50,0x7D,0xB0, +0x11,0x10,0x15,0x10,0x1D,0x10,0x65,0x30,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x11,0x10,0x7D,0x50,0x55,0x50,0x55,0x50,0x7D,0x50,0x11,0x50, +0x14,0x80,0x1C,0xC0,0x65,0x50,0x02,0x30,0x00,0x00, +/* */ +0x10,0x60,0x13,0x80,0x10,0x80,0x7C,0xE0,0x57,0x80,0x54,0x80,0x7C,0xF0,0x13,0x80, +0x14,0x80,0x1C,0x90,0x64,0x90,0x00,0x70,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0x40,0x7E,0x20,0x54,0x10,0x55,0x20,0x7D,0x20,0x11,0x20, +0x15,0x20,0x1D,0x20,0x65,0x20,0x02,0x20,0x00,0x00, +/* */ +0x10,0xA0,0x10,0xA0,0x10,0xA0,0x7D,0x10,0x55,0x10,0x56,0x40,0x7C,0x40,0x10,0x80, +0x14,0xA0,0x1D,0x10,0x65,0xF0,0x00,0x10,0x00,0x00, +/* */ +0x10,0x20,0x11,0x20,0x10,0xA0,0x7C,0x20,0x55,0x20,0x54,0xA0,0x7C,0x20,0x10,0x30, +0x15,0xE0,0x1C,0x20,0x64,0x20,0x00,0x20,0x00,0x00, +/* */ +0x10,0x10,0x11,0xD0,0x10,0x50,0x7C,0x50,0x55,0xD0,0x55,0x10,0x7D,0x10,0x11,0xD0, +0x14,0x50,0x1C,0x50,0x64,0x50,0x01,0x90,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00,0x02,0x00,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x11,0x20,0x11,0x20,0x13,0xF0,0x7D,0x20,0x55,0x20,0x55,0x20,0x7D,0xE0,0x11,0x20, +0x15,0x20,0x1D,0x20,0x65,0xE0,0x01,0x20,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x10,0x40,0x7D,0xF0,0x54,0x40,0x54,0x40,0x7D,0xF0,0x11,0x10, +0x15,0x10,0x1D,0x10,0x65,0xF0,0x01,0x10,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x10,0x20,0x7C,0x20,0x55,0xE0,0x55,0x60,0x7D,0x60,0x11,0x60, +0x15,0xE0,0x1D,0x20,0x64,0x20,0x00,0xE0,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x11,0x00,0x7D,0xF0,0x55,0x40,0x55,0x40,0x7D,0x70,0x11,0x50, +0x15,0x50,0x1D,0x50,0x62,0x90,0x05,0x30,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x10,0x40,0x7D,0xF0,0x55,0x50,0x55,0x50,0x55,0xF0,0x7D,0x50, +0x11,0x50,0x15,0x50,0x1D,0xF0,0x65,0x10,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x11,0xF0,0x7D,0x50,0x55,0x50,0x55,0xF0,0x7D,0x50,0x11,0x50, +0x17,0xF0,0x1D,0x10,0x65,0x10,0x01,0x30,0x00,0x00, +/* */ +0x11,0x00,0x11,0x00,0x11,0xF0,0x7E,0x80,0x54,0x80,0x54,0xE0,0x7C,0x80,0x10,0x80, +0x14,0xF0,0x1C,0x80,0x64,0x80,0x00,0x80,0x00,0x00, +/* */ +0x10,0x30,0x11,0xC0,0x11,0x00,0x7D,0x00,0x55,0x00,0x55,0xF0,0x7D,0x20,0x11,0x20, +0x15,0x20,0x1D,0x20,0x65,0x20,0x03,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x11,0x40,0x7D,0x20,0x56,0x90,0x54,0x40,0x7D,0xE0,0x10,0x20, +0x14,0x40,0x1D,0x40,0x64,0x80,0x00,0x40,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x11,0x10,0x7C,0xA0,0x54,0x40,0x54,0xA0,0x7D,0x10,0x10,0x40, +0x15,0xF0,0x1C,0x40,0x64,0x40,0x03,0xF0,0x00,0x00, +/* */ +0x12,0x40,0x12,0x40,0x12,0x40,0x7C,0xF0,0x55,0x50,0x57,0x50,0x7E,0x50,0x12,0x50, +0x15,0x50,0x1F,0x90,0x64,0x90,0x01,0x30,0x00,0x00, +/* */ +0x3B,0xC0,0x12,0x40,0x13,0x40,0x1A,0xC0,0x62,0x50,0x04,0x30,0x02,0x00,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x11,0xF0,0x7C,0x40,0x55,0x50,0x54,0xE0,0x7C,0x40,0x11,0xF0, +0x14,0x40,0x1C,0xA0,0x65,0x20,0x02,0x10,0x00,0x00, +/* */ +0x11,0x00,0x11,0xE0,0x13,0x00,0x7D,0x50,0x54,0x90,0x57,0x70,0x54,0x00,0x7F,0xF0, +0x11,0x40,0x15,0x40,0x1E,0x50,0x64,0x30,0x00,0x00, +/* */ +0x10,0x00,0x11,0xF0,0x10,0x40,0x7C,0x80,0x55,0x10,0x55,0xF0,0x7C,0x40,0x10,0x40, +0x15,0xF0,0x1C,0x40,0x64,0x40,0x03,0xF0,0x00,0x00, +/* */ +0x14,0x00,0x15,0xF0,0x14,0x40,0x7C,0x40,0x55,0xF0,0x55,0x50,0x7D,0x50,0x15,0x50, +0x15,0x50,0x1D,0x70,0x64,0x40,0x08,0x40,0x00,0x00, +/* */ +0x11,0x40,0x11,0x40,0x17,0xF0,0x7D,0x50,0x55,0x50,0x55,0x50,0x7F,0xF0,0x15,0x50, +0x15,0x50,0x1D,0x50,0x67,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x10,0x10,0x13,0x60,0x11,0x20,0x7D,0x20,0x56,0x70,0x57,0xA0,0x7C,0xA0,0x12,0xA0, +0x16,0xA0,0x1D,0x70,0x61,0x00,0x02,0xF0,0x00,0x00, +/* */ +0x10,0x30,0x11,0xC0,0x10,0x40,0x7C,0x40,0x55,0xF0,0x54,0x40,0x7C,0x40,0x11,0xF0, +0x15,0x10,0x1D,0x10,0x65,0xF0,0x01,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x13,0xF0,0x7D,0x20,0x54,0xC0,0x55,0x20,0x7E,0x10,0x11,0x20, +0x15,0x20,0x1D,0x20,0x65,0x20,0x02,0x20,0x00,0x00, +/* */ +0x10,0x80,0x10,0x40,0x11,0xF0,0x7C,0x00,0x54,0xA0,0x55,0x10,0x7E,0xA0,0x10,0xA0, +0x14,0xA0,0x1C,0x40,0x64,0xA0,0x01,0x10,0x00,0x00, +/* */ +0x11,0x10,0x10,0xA0,0x11,0xF0,0x7C,0x40,0x54,0x40,0x55,0xF0,0x7C,0x40,0x10,0x40, +0x15,0xF0,0x1C,0x40,0x64,0x40,0x00,0x40,0x00,0x00, +/* */ +0x10,0x40,0x10,0x80,0x11,0x10,0x7D,0xF0,0x54,0x40,0x55,0x40,0x7D,0xF0,0x12,0x40, +0x14,0x40,0x1F,0xF0,0x64,0x40,0x00,0x40,0x00,0x00, +/* */ +0x3F,0xF0,0x20,0x00,0x3F,0xF0,0x29,0x20,0x28,0xC0,0x2C,0x30,0x21,0x00,0x2F,0xE0, +0x29,0x20,0x2F,0xE0,0x21,0x10,0x5F,0xF0,0x00,0x00, +/* */ +0x10,0x60,0x7B,0x80,0x12,0x00,0x7B,0xF0,0x12,0x40,0x34,0x40,0x02,0x00,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x11,0x50,0x10,0xE0,0x7C,0x40,0x55,0xF0,0x55,0x10,0x55,0xF0,0x7D,0x10, +0x11,0xF0,0x15,0x10,0x1D,0x10,0x65,0x30,0x00,0x00, +/* */ +0x13,0xE0,0x12,0x20,0x12,0x20,0x7F,0xE0,0x54,0x00,0x57,0xE0,0x7C,0x80,0x10,0x80, +0x17,0xF0,0x1D,0x40,0x62,0x20,0x04,0x10,0x00,0x00, +/* */ +0x10,0x90,0x13,0x10,0x11,0x50,0x7D,0x50,0x57,0xD0,0x55,0x50,0x7D,0x50,0x13,0xD0, +0x15,0x50,0x1D,0x10,0x65,0x10,0x01,0x30,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x10,0xA0,0x7D,0x10,0x54,0xE0,0x54,0x40,0x7D,0xF0,0x10,0x40, +0x15,0x60,0x1D,0x50,0x66,0x50,0x00,0xC0,0x00,0x00, +/* */ +0x10,0x30,0x13,0xC0,0x10,0x90,0x7E,0x50,0x55,0x20,0x57,0xF0,0x7C,0x20,0x10,0x40, +0x17,0xF0,0x1C,0x40,0x64,0x40,0x00,0xC0,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x13,0xF0,0x7C,0x80,0x55,0xF0,0x54,0x80,0x7F,0xF0,0x11,0x40, +0x15,0x40,0x1E,0x40,0x62,0x50,0x04,0x30,0x00,0x00, +/* */ +0x10,0x40,0x13,0xF0,0x10,0x40,0x7D,0xE0,0x54,0x40,0x57,0xF0,0x7D,0x20,0x11,0xE0, +0x15,0x20,0x1D,0xE0,0x65,0x20,0x01,0x60,0x00,0x00, +/* */ +0x11,0x20,0x11,0x20,0x13,0xF0,0x7D,0x20,0x55,0xE0,0x55,0x20,0x7D,0xE0,0x11,0x20, +0x17,0xF0,0x1C,0x00,0x65,0x20,0x02,0x10,0x00,0x00, +/* */ +0x12,0x10,0x12,0xE0,0x12,0x80,0x7F,0x80,0x52,0xF0,0x56,0xA0,0x7B,0xA0,0x12,0xA0, +0x12,0xA0,0x1A,0xA0,0x63,0x20,0x02,0x20,0x00,0x00, +/* */ +0x10,0x50,0x10,0x40,0x17,0xF0,0x78,0x40,0x57,0x40,0x55,0x50,0x7D,0x50,0x17,0x60, +0x10,0x60,0x19,0x50,0x66,0xB0,0x01,0x10,0x00,0x00, +/* */ +0x08,0x80,0x78,0xF0,0x08,0x80,0x38,0xE0,0x08,0x80,0x78,0xF0,0x0A,0x80,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x11,0xF0,0x11,0x50,0x11,0xF0,0x7D,0x50,0x55,0xF0,0x54,0x40,0x7D,0xF0,0x10,0x40, +0x14,0xE0,0x1D,0x50,0x66,0x40,0x00,0x40,0x00,0x00, +/* */ +0x11,0xF0,0x11,0x10,0x11,0xF0,0x7D,0x50,0x55,0x50,0x55,0xF0,0x7D,0x50,0x11,0x70, +0x15,0x50,0x1D,0xF0,0x65,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x11,0xF0,0x11,0x10,0x11,0xF0,0x7D,0x10,0x55,0xF0,0x54,0x80,0x7D,0xF0,0x12,0xB0, +0x15,0x50,0x1E,0x50,0x64,0x90,0x01,0x60,0x00,0x00, +/* */ +0x10,0x40,0x10,0x80,0x11,0xF0,0x7D,0x50,0x55,0xF0,0x55,0x50,0x7D,0xF0,0x10,0x80, +0x15,0x40,0x1F,0xF0,0x64,0x40,0x00,0x40,0x00,0x00, +/* */ +0x11,0xF0,0x11,0x10,0x11,0x50,0x7D,0xF0,0x55,0x50,0x55,0xF0,0x7D,0x10,0x11,0xF0, +0x15,0xB0,0x1D,0xF0,0x65,0x10,0x02,0x70,0x00,0x00, +/* */ +0x12,0xA0,0x10,0x80,0x13,0xE0,0x7C,0x80,0x57,0xF0,0x55,0x20,0x7E,0x10,0x11,0xE0, +0x15,0x20,0x1D,0x60,0x65,0x10,0x00,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x10,0x7A,0x00,0x53,0x70,0x55,0x50,0x7D,0x50,0x1B,0x70, +0x11,0x40,0x1A,0x50,0x62,0x50,0x04,0x30,0x00,0x00, +/* */ +0x14,0x00,0x12,0x70,0x17,0x50,0x7D,0x50,0x57,0x60,0x55,0x60,0x7F,0x50,0x14,0x50, +0x16,0x50,0x1D,0x60,0x66,0xC0,0x04,0x40,0x00,0x00, +/* */ +0x13,0xE0,0x10,0x40,0x10,0x80,0x7F,0xF0,0x54,0x80,0x55,0x80,0x7C,0x00,0x17,0xF0, +0x15,0x50,0x1D,0x50,0x65,0x50,0x0F,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x13,0xF0,0x10,0x40,0x7D,0xE0,0x54,0x80,0x57,0xF0,0x7D,0x20,0x13,0xF0, +0x15,0x20,0x1D,0xE0,0x65,0x20,0x01,0xE0,0x00,0x00, +/* */ +0x10,0xA0,0x11,0xF0,0x10,0xA0,0x7C,0x00,0x55,0xF0,0x55,0x10,0x54,0x40,0x7D,0xF0, +0x10,0x40,0x14,0xE0,0x1D,0x50,0x64,0x40,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x7F,0xF0,0x55,0x50,0x54,0x90,0x7D,0xD0,0x14,0x90, +0x17,0xF0,0x1C,0x90,0x64,0x90,0x04,0x30,0x00,0x00, +/* */ +0x11,0xF0,0x10,0x00,0x11,0xF0,0x7D,0x10,0x55,0xF0,0x54,0x00,0x7D,0xF0,0x11,0x50, +0x15,0xF0,0x1D,0x50,0x65,0xF0,0x01,0x10,0x00,0x00, +/* */ +0x10,0x80,0x13,0xF0,0x11,0x40,0x7E,0x20,0x54,0x90,0x57,0xE0,0x7C,0x80,0x13,0xF0, +0x14,0x80,0x1D,0xE0,0x64,0x80,0x03,0xF0,0x00,0x00, +/* */ +0x10,0xA0,0x13,0xA0,0x11,0x60,0x7D,0x20,0x57,0xA0,0x55,0x60,0x7D,0xA0,0x13,0x30, +0x15,0xE0,0x1D,0x20,0x65,0x20,0x01,0x20,0x00,0x00, +/* */ +0x11,0xF0,0x12,0x00,0x11,0xE0,0x7D,0x20,0x55,0xE0,0x55,0x20,0x7D,0xE0,0x10,0x80, +0x15,0xE0,0x1F,0x20,0x64,0xC0,0x03,0x30,0x00,0x00, +/* */ +0x10,0x80,0x11,0xB0,0x12,0x90,0x7F,0xB0,0x56,0x90,0x57,0xF0,0x7C,0x80,0x13,0xF0, +0x15,0x10,0x1C,0xA0,0x60,0xC0,0x03,0x30,0x00,0x00, +/* */ +0x10,0x80,0x11,0x40,0x12,0x20,0x7D,0xD0,0x50,0x00,0x57,0x10,0x7D,0x50,0x17,0x50, +0x15,0x50,0x1F,0x50,0x65,0x10,0x05,0x30,0x00,0x00, +/* */ +0x12,0x40,0x11,0x40,0x10,0x70,0x7F,0x80,0x52,0x00,0x52,0x70,0x7B,0x90,0x12,0xA0, +0x12,0xF0,0x1A,0xA0,0x64,0xA0,0x0B,0x60,0x00,0x00, +/* */ +0x11,0x50,0x10,0x40,0x11,0xF0,0x7C,0xE0,0x55,0x50,0x54,0x40,0x7C,0x80,0x13,0xF0, +0x14,0xA0,0x1D,0x20,0x64,0xC0,0x01,0x20,0x00,0x00, +/* */ +0x12,0x20,0x11,0x40,0x17,0xF0,0x79,0x40,0x57,0xF0,0x55,0x50,0x7E,0x70,0x14,0x10, +0x17,0xF0,0x1C,0x10,0x67,0xF0,0x04,0x10,0x00,0x00, +/* */ +0x10,0x40,0x11,0xF0,0x11,0x10,0x7D,0xF0,0x55,0x00,0x55,0xF0,0x7D,0x50,0x13,0x50, +0x15,0xF0,0x1D,0x50,0x65,0x50,0x01,0x30,0x00,0x00, +/* */ +0x3C,0x80,0x14,0xF0,0x09,0xA0,0x7E,0x40,0x2A,0xA0,0x59,0x10,0x02,0x00,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x11,0xF0,0x10,0x40,0x7D,0xE0,0x54,0x80,0x57,0xF0,0x7D,0x20,0x12,0xF0, +0x14,0x40,0x1D,0xF0,0x60,0xE0,0x01,0x50,0x00,0x00, +/* */ +0x08,0x80,0x3E,0xF0,0x09,0x20,0x7E,0xA0,0x10,0x40,0x3C,0xA0,0x47,0x10,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x12,0x20,0x78,0x00,0x57,0xF0,0x51,0x40,0x7F,0xF0,0x15,0x50, +0x15,0x50,0x1E,0xB0,0x64,0x10,0x04,0x30,0x00,0x00, +/* */ +0x11,0x20,0x13,0xF0,0x11,0x20,0x7C,0x90,0x57,0xF0,0x55,0x20,0x7E,0x10,0x11,0x20, +0x17,0xF0,0x1D,0x20,0x65,0x20,0x02,0x20,0x00,0x00, +/* */ +0x10,0xA0,0x11,0xF0,0x10,0xA0,0x7D,0xF0,0x55,0x10,0x55,0xF0,0x7D,0x10,0x11,0xF0, +0x14,0x40,0x1D,0xF0,0x64,0xA0,0x01,0x10,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x14,0x40,0x7D,0xF0,0x55,0x10,0x55,0xF0,0x7D,0x10,0x15,0xF0, +0x14,0x40,0x1D,0x60,0x66,0x50,0x08,0xC0,0x00,0x00, +/* */ +0x10,0x40,0x11,0xF0,0x11,0x10,0x7D,0xF0,0x55,0x10,0x55,0xF0,0x7D,0x10,0x11,0xF0, +0x14,0x40,0x1D,0x10,0x66,0xA0,0x00,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x11,0x40,0x7C,0x90,0x55,0x50,0x57,0xF0,0x78,0x80,0x17,0xF0, +0x14,0x90,0x1D,0x50,0x65,0xD0,0x04,0x30,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x14,0x80,0x7D,0xE0,0x54,0xA0,0x57,0xF0,0x7C,0xA0,0x15,0xE0, +0x14,0x80,0x1D,0xE0,0x65,0x20,0x09,0xE0,0x00,0x00, +/* */ +0x10,0x40,0x11,0xF0,0x10,0xA0,0x7C,0x40,0x55,0xF0,0x55,0x10,0x7C,0x40,0x11,0xF0, +0x14,0x80,0x1C,0xF0,0x64,0x90,0x01,0x30,0x00,0x00, +/* */ +0x08,0x80,0x3E,0xF0,0x09,0x20,0x7E,0xA0,0x15,0x40,0x54,0xA0,0x27,0x10,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x02,0x10,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0xA0,0x11,0xF0,0x10,0xA0,0x7D,0xF0,0x54,0x40,0x55,0xF0,0x7D,0x50,0x11,0xF0, +0x15,0x50,0x1D,0xF0,0x64,0xA0,0x01,0x10,0x00,0x00, +/* */ +0x11,0x40,0x17,0xF0,0x11,0x40,0x7F,0xF0,0x55,0x50,0x57,0xF0,0x7D,0x50,0x17,0xF0, +0x12,0x20,0x1B,0xE0,0x62,0x20,0x03,0xE0,0x00,0x00, +/* */ +0x17,0xF0,0x11,0x40,0x17,0xF0,0x7D,0x50,0x57,0xF0,0x54,0x00,0x7D,0xE0,0x10,0x00, +0x17,0xF0,0x1C,0x80,0x62,0xA0,0x05,0x90,0x00,0x00, +/* */ +0x11,0x50,0x10,0x40,0x11,0xF0,0x7D,0x10,0x54,0xE0,0x54,0xA0,0x7C,0xA0,0x10,0xE0, +0x14,0x40,0x1C,0xE0,0x64,0x40,0x01,0xF0,0x00,0x00, +/* */ +0x10,0x30,0x13,0xC0,0x11,0x50,0x7C,0x40,0x57,0xF0,0x55,0x60,0x7E,0x50,0x11,0x00, +0x14,0xA0,0x1D,0x10,0x65,0x50,0x08,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x11,0xE0,0x12,0x20,0x7D,0xF0,0x55,0x50,0x55,0xF0,0x7C,0x80,0x11,0x50, +0x14,0xA0,0x1D,0x70,0x64,0xA0,0x01,0x60,0x00,0x00, +/* */ +0x08,0x00,0x1F,0xC0,0x28,0x40,0x07,0x80,0x79,0x70,0x04,0x80,0x12,0x40,0x7D,0xF0, +0x55,0x50,0x7D,0xF0,0x14,0x50,0x7D,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x11,0xF0,0x10,0xA0,0x7F,0xF0,0x55,0x10,0x55,0xF0,0x7D,0x10,0x11,0xF0, +0x14,0x40,0x1F,0xF0,0x64,0x40,0x00,0x40,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x7D,0x40,0x55,0xD0,0x56,0xA0,0x7D,0x50,0x11,0xC0, +0x14,0x80,0x1F,0xF0,0x60,0x80,0x00,0x80,0x00,0x00, +/* */ +0x1F,0xC0,0x04,0x80,0x03,0x00,0x7F,0xF0,0x09,0x10,0x73,0x00,0x10,0x40,0x7D,0xF0, +0x55,0x50,0x7D,0xF0,0x14,0x50,0x7D,0xF0,0x00,0x00, +/* */ +0x10,0x90,0x11,0xD0,0x10,0xA0,0x7D,0xC0,0x54,0x10,0x55,0xD0,0x7D,0x60,0x11,0xC0, +0x14,0x10,0x1D,0x50,0x64,0xE0,0x03,0x40,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x10,0x80,0x7B,0xE0,0x52,0xA0,0x53,0xE0,0x7A,0xA0,0x17,0xF0, +0x11,0x00,0x18,0xA0,0x63,0x50,0x05,0xD0,0x00,0x00, +/* */ +0x10,0x30,0x13,0xC0,0x11,0x50,0x7C,0xE0,0x57,0xF0,0x55,0x50,0x7E,0x00,0x11,0xF0, +0x15,0x50,0x1D,0xF0,0x65,0x50,0x01,0xF0,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x10,0x80,0x7B,0xE0,0x50,0x80,0x57,0xF0,0x7A,0xA0,0x17,0xF0, +0x10,0x00,0x1B,0xE0,0x62,0x20,0x03,0xE0,0x00,0x00, +/* */ +0x10,0xA0,0x13,0xF0,0x10,0xA0,0x7D,0x40,0x57,0xF0,0x55,0x40,0x7D,0xF0,0x11,0x40, +0x17,0xF0,0x1D,0x20,0x64,0xC0,0x03,0x30,0x00,0x00, +/* */ +0x11,0x20,0x13,0xF0,0x11,0x20,0x7F,0xF0,0x56,0x10,0x55,0xE0,0x7D,0x10,0x12,0xA0, +0x15,0x40,0x1E,0xE0,0x65,0x50,0x02,0xC0,0x00,0x00, +/* */ +0x10,0xE0,0x11,0x20,0x11,0xF0,0x7D,0x50,0x55,0xA0,0x55,0x70,0x7D,0x00,0x11,0x70, +0x15,0x00,0x1D,0x70,0x65,0x50,0x02,0x70,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x15,0x20,0x7F,0xF0,0x55,0x40,0x57,0xF0,0x7D,0x50,0x17,0xF0, +0x15,0x50,0x1F,0xF0,0x6B,0x60,0x15,0x50,0x00,0x00, +/* */ +0x12,0x20,0x17,0xF0,0x12,0x20,0x7F,0xF0,0x55,0x50,0x57,0xF0,0x78,0xA0,0x17,0xF0, +0x14,0x80,0x1E,0xA0,0x65,0x50,0x08,0xB0,0x00,0x00, +/* */ +0x0F,0xC0,0x10,0x40,0x7F,0xE0,0x0C,0x00,0x32,0xA0,0x05,0x40,0x3B,0x30,0x7D,0xF0, +0x55,0x50,0x7D,0xF0,0x10,0x40,0x7D,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x48,0x10,0x3F,0xC0,0x10,0x40,0x7F,0xF0, +0x55,0x50,0x7D,0xF0,0x10,0x40,0x7D,0xF0,0x00,0x00, +/* */ +0x17,0x70,0x15,0x50,0x17,0x70,0x7D,0x50,0x57,0x70,0x52,0x40,0x7F,0xF0,0x1A,0x40, +0x13,0xF0,0x1A,0x20,0x61,0xC0,0x06,0x30,0x00,0x00, +/* */ +0x10,0x00,0x10,0x00,0x1F,0xE0,0x22,0x00,0x42,0x00,0x02,0x00,0x7F,0xF0,0x02,0x00, +0x22,0x20,0x22,0x20,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x7D,0xF0,0x45,0x10,0x55,0x50,0x55,0x50,0x28,0xA0,0x45,0x10,0x08,0x00,0x1F,0xC0, +0x22,0x00,0x7F,0xF0,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x08,0xE0,0x7E,0xB0,0x09,0x00,0x3E,0xE0,0x2A,0xA0,0x3E,0x40,0x28,0xA0,0x5F,0xD0, +0x22,0x00,0x7F,0xF0,0x22,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x20,0xE0,0x3C,0x80,0x57,0xF0,0x14,0x90,0x14,0xE0,0x7F,0x90,0x14,0x70,0x57,0xC0, +0x55,0x50,0x5F,0xF0,0x64,0x40,0x08,0xC0,0x00,0x00, +/* */ +0x0C,0x30,0x71,0xC0,0x11,0x40,0x11,0x40,0x7D,0x40,0x11,0xF0,0x11,0x40,0x7D,0x40, +0x45,0x40,0x45,0x50,0x7D,0xB0,0x45,0x10,0x00,0x00, +/* */ +0x10,0x80,0x1E,0xF0,0x29,0x40,0x44,0x20,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0, +0x02,0x00,0x02,0x00,0x02,0x00,0x0E,0x00,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x3F,0xC0,0x08,0x80,0x08,0xE0,0x0A,0x20, +0x11,0x40,0x10,0x80,0x23,0x40,0x4C,0x30,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x3F,0xC0,0x00,0x40,0x10,0x40,0x1F,0xF0, +0x00,0x10,0x7F,0x90,0x00,0x10,0x00,0x60,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x3F,0xE0,0x08,0x80,0x08,0x80,0x7F,0xF0, +0x08,0x80,0x10,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x3F,0xE0,0x22,0x20,0x22,0x20,0x22,0x20, +0x25,0x20,0x09,0x10,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x00,0xE0,0x3F,0x80,0x24,0x80,0x24,0x80, +0x24,0x40,0x24,0x40,0x24,0x20,0x44,0x10,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x0A,0x20,0x03,0xC0,0x3E,0x00,0x22,0x00,0x3F,0xE0, +0x06,0x20,0x1A,0x20,0x62,0x60,0x02,0x00,0x00,0x00, +/* */ +0x10,0x80,0x1E,0xF0,0x29,0x40,0x44,0x20,0x10,0x00,0x1F,0xF0,0x24,0x90,0x44,0x90, +0x08,0x90,0x11,0x10,0x66,0x10,0x18,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x00,0x00,0x7D,0xF0,0x11,0x10,0x11,0x20, +0x11,0x10,0x1D,0x10,0x71,0x60,0x01,0x00,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x3F,0xF0,0x20,0x00,0x27,0xC0,0x24,0x40, +0x24,0x40,0x27,0xC0,0x20,0x00,0x3F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x0A,0x20,0x12,0x00,0x3F,0xE0,0x42,0x00,0x02,0x00, +0x1F,0xC0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x08,0x00,0x1F,0xF0,0x24,0x00,0x47,0xE0, +0x04,0x00,0x07,0xF0,0x04,0x00,0x04,0x00,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x10,0x00,0x1F,0xF0,0x20,0x10,0x5F,0x90,0x10,0x90, +0x10,0x90,0x1F,0x90,0x10,0x10,0x00,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x1E,0xF0,0x29,0x40,0x44,0x20,0x02,0x00,0x3F,0xE0,0x00,0x00,0x10,0x40, +0x08,0x40,0x08,0x80,0x01,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x3F,0xE0,0x00,0x20,0x7F,0xA0,0x00,0x20, +0x3F,0x20,0x21,0x20,0x3F,0x20,0x20,0xC0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x00,0x00,0x3F,0xE0,0x08,0x20,0x10,0xC0,0x60,0x00, +0x1F,0xE0,0x10,0x20,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x10,0x00,0x7E,0xF0,0x12,0x90,0x12,0x90, +0x12,0x90,0x22,0x90,0x22,0xF0,0x4C,0x90,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x21,0x00,0x17,0xE0,0x01,0x20,0x71,0x20, +0x12,0x20,0x14,0xC0,0x30,0x00,0x4F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x10,0x00,0x20,0x20,0x7F,0xF0,0x00,0x10, +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x10,0x00,0x7B,0xE0,0x12,0x20,0x1A,0x20, +0x72,0x20,0x12,0x20,0x13,0xE0,0x32,0x20,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x21,0x20,0x3D,0x40,0x21,0x80,0x2D,0x10,0x30,0xF0, +0x02,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x12,0x00,0x1F,0xE0,0x22,0x00,0x02,0x00,0x7F,0xF0, +0x08,0x80,0x08,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x60,0x77,0x80,0x10,0x80,0x24,0xE0,0x74,0x80, +0x14,0x80,0x57,0xF0,0x20,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x0A,0x20,0x05,0x00,0x18,0xC0,0x60,0x30,0x1F,0xC0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x1F,0xA0,0x20,0x80,0x5F,0xE0,0x02,0x20,0x7F,0xF0, +0x02,0x20,0x3F,0xE0,0x02,0x20,0x0E,0x00,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x12,0x00,0x13,0xF0,0x7C,0x10,0x11,0x10,0x10,0x90, +0x10,0x50,0x18,0x90,0x63,0x10,0x00,0x60,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x00,0x00,0x3F,0xE0,0x02,0x00,0x12,0x40, +0x12,0x40,0x2A,0xA0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x0C,0x00,0x73,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x13,0xE0,0x7A,0xA0,0x12,0xA0,0x1B,0xE0, +0x72,0x00,0x12,0x10,0x12,0x10,0x31,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x49,0x20,0x12,0x40,0x0A,0x80,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x49,0x20,0x10,0x80,0x11,0x00,0x29,0xF0,0x6A,0x20,0x29,0x20, +0x29,0x40,0x28,0x80,0x21,0x40,0x26,0x30,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x3F,0xE0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x10,0xC0,0x00,0x00, +/* */ +0x3D,0xF0,0x4A,0x40,0x3F,0xE0,0x02,0x00,0x1F,0xC0,0x02,0x00,0x7F,0xF0,0x00,0x00, +0x3F,0xE0,0x22,0x20,0x0D,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x3F,0xF0,0x21,0x00,0x2F,0xE0,0x25,0x40, +0x3F,0xF0,0x22,0x80,0x24,0x40,0x3F,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x1F,0x40,0x02,0x80,0x7F,0xF0,0x04,0x00,0x1F,0xE0, +0x70,0x20,0x1F,0xE0,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x52,0x40,0x08,0x80,0x7F,0xF0,0x08,0x80,0x04,0x00,0x7F,0xF0, +0x10,0x00,0x3F,0xE0,0x50,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x51,0x40,0x08,0x20,0x12,0x20,0x7F,0xF0,0x12,0x20,0x1A,0x20, +0x73,0xE0,0x12,0x20,0x12,0x20,0x33,0xE0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x17,0xE0,0x12,0x20,0x79,0xC0,0x16,0x30,0x18,0x80, +0x73,0xE0,0x10,0x80,0x17,0xF0,0x30,0x80,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x00,0x00,0x7F,0xF0,0x10,0x40,0x20,0x40,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x52,0x40,0x08,0x80,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x02,0x00,0x7F,0xF0,0x48,0x90,0x10,0x40,0x00,0x00, +0x3F,0xE0,0x02,0x00,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x02,0x00,0x7F,0xF0,0x50,0x10,0x1D,0xE0,0x25,0x20, +0x55,0x20,0x09,0x60,0x11,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x3F,0xE0,0x02,0x20,0x7F,0xF0,0x02,0x20,0x3F,0xE0, +0x02,0x00,0x27,0x20,0x2A,0xA0,0x42,0x20,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x00,0xA0,0x3F,0xF0,0x20,0x80,0x2E,0xA0,0x20,0xA0, +0x2E,0x40,0x2A,0x50,0x2E,0xB0,0x41,0x10,0x00,0x00, +/* */ +0x3D,0xF0,0x4A,0x40,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +0x3F,0xE0,0x22,0x20,0x0D,0xC0,0x70,0x30,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x56,0x40,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x7F,0xF0, +0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3C,0xF0,0x49,0x20,0x13,0xC0,0x10,0x40,0x2F,0xF0,0x22,0x00,0x63,0xE0, +0x24,0x80,0x2F,0xF0,0x21,0x40,0x26,0x30,0x00,0x00, +/* */ +0x3D,0xF0,0x52,0x40,0x08,0x80,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x7F,0xF0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x3F,0xF0,0x22,0x80,0x3E,0xF0,0x22,0x80,0x2E,0xE0, +0x22,0x80,0x3E,0xF0,0x22,0x80,0x3F,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x7F,0xF0,0x05,0x00,0x3F,0xE0,0x25,0x20,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x0A,0x80,0x72,0x70,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x3F,0xE0,0x28,0xA0,0x27,0x20,0x28,0xA0,0x3F,0xE0, +0x21,0x20,0x3D,0xC0,0x21,0x10,0x3C,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x1F,0xE0,0x21,0x00,0x2F,0xF0,0x29,0x50,0x2F,0xA0, +0x28,0xE0,0x2B,0xC0,0x2A,0x50,0x54,0x30,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x52,0x40,0x08,0x80,0x3E,0xF0,0x08,0x90,0x3F,0x10,0x2A,0x40, +0x3E,0x40,0x1C,0xA0,0x2A,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x3F,0xE0,0x25,0x20,0x3F,0xE0,0x02,0x80,0x3F,0xF0, +0x22,0x20,0x31,0x40,0x28,0x90,0x43,0x70,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x24,0x30,0x4F,0x90,0x48,0x90,0x4F,0x90,0x48,0x90, +0x6F,0xB0,0x05,0x00,0x09,0x10,0x70,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x3F,0xF0,0x24,0x80,0x3F,0xE0,0x24,0xA0,0x3F,0xE0, +0x28,0x90,0x2E,0xE0,0x28,0x90,0x4E,0x70,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x52,0x40,0x08,0x10,0x6A,0xE0,0x58,0x80,0x7E,0xF0,0x48,0xA0, +0x6A,0xA0,0x48,0xA0,0x7E,0xA0,0x01,0x20,0x00,0x00, +/* */ +0x3D,0xF0,0x4A,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x11,0x20, +0x18,0xC0,0x3F,0xF0,0x25,0x20,0x7F,0xF0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x7F,0xF0,0x05,0x00,0x3F,0xE0,0x25,0x20,0x3F,0xE0, +0x12,0x40,0x11,0x40,0x7F,0xF0,0x02,0x00,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x3C,0xF0,0x51,0x40,0x7D,0xF0,0x28,0xA0,0x4D,0x30, +0x3F,0xE0,0x22,0x20,0x21,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x52,0x40,0x39,0x20,0x08,0xC0,0x57,0x50,0x20,0x20,0x5F,0xD0, +0x10,0x40,0x1F,0xC0,0x08,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x3D,0xF0,0x52,0x40,0x28,0x40,0x7F,0xF0,0x2A,0x50,0x3A,0x40,0x2B,0xE0,0x3A,0xA0, +0x2A,0xA0,0x7E,0x40,0x2A,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x21,0x00,0x3D,0xF0,0x4A,0x40,0x10,0x80,0x7C,0xE0,0x11,0x20,0x7D,0xF0,0x55,0x10, +0x7D,0x50,0x39,0x50,0x54,0xA0,0x11,0x10,0x00,0x00, +/* */ +0x3D,0xF0,0x4A,0x40,0x11,0x00,0x16,0xF0,0x7D,0x50,0x16,0xB0,0x10,0x00,0x1F,0xF0, +0x74,0x90,0x17,0xF0,0x14,0x90,0x37,0xF0,0x00,0x00, +/* */ +0x0A,0x00,0x32,0xE0,0x22,0x20,0x22,0x20,0x3A,0xE0,0x22,0x20,0x22,0x20,0x3F,0xE0, +0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x30,0x00,0x00, +/* */ +0x04,0x00,0x39,0xE0,0x20,0x20,0x3D,0xE0,0x20,0x20,0x3F,0xE0,0x08,0x80,0x08,0x80, +0x7F,0xF0,0x08,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x02,0x00,0x3F,0xE0,0x04,0x00,0x1F,0xC0,0x08,0x00,0x7F,0xF0,0x10,0x40,0x2D,0xE0, +0x50,0x50,0x1D,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x04,0x00,0x39,0xE0,0x20,0x20,0x3D,0xE0,0x20,0x20,0x3F,0xE0,0x10,0x00,0x3F,0xF0, +0x40,0x10,0x2A,0x90,0x2A,0x90,0x40,0x60,0x00,0x00, +/* */ +0x04,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x20,0x20,0x3F,0xE0, +0x02,0x00,0x7F,0xF0,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x10,0x00,0x10,0xF0,0x20,0x50,0x7F,0x50,0x55,0x50,0x55,0xF0,0x55,0x50,0x55,0x50, +0x55,0x50,0x57,0xD0,0x78,0x50,0x00,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x3D,0xF0,0x24,0x40,0x34,0x40,0x2C,0x40,0x24,0x40,0x7C,0x40,0x24,0x40, +0x34,0x40,0x2C,0x40,0x24,0x40,0x4D,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x3C,0x40,0x24,0x40,0x35,0x50,0x2D,0x50,0x25,0x50,0x7D,0x50,0x25,0x50, +0x35,0x50,0x2D,0x50,0x25,0xF0,0x4C,0x10,0x00,0x00, +/* */ +0x10,0x80,0x3C,0x40,0x24,0x50,0x35,0x10,0x2D,0x10,0x25,0x10,0x7C,0xA0,0x24,0xA0, +0x34,0x40,0x2C,0x40,0x24,0xA0,0x4D,0x10,0x00,0x00, +/* */ +0x12,0x40,0x3A,0x40,0x2A,0x50,0x3A,0x50,0x2B,0xE0,0x7A,0x40,0x2A,0x40,0x3A,0x40, +0x2A,0x40,0x2A,0xD0,0x2B,0x50,0x5A,0x30,0x00,0x00, +/* */ +0x10,0x40,0x3C,0x40,0x24,0x40,0x35,0xF0,0x2D,0x50,0x25,0x50,0x7D,0x50,0x25,0xF0, +0x35,0x50,0x2C,0x40,0x24,0x40,0x4C,0x40,0x00,0x00, +/* */ +0x10,0x30,0x3D,0xC0,0x25,0x00,0x35,0x00,0x2D,0xF0,0x25,0x50,0x7D,0x50,0x25,0x50, +0x35,0x50,0x2D,0x20,0x26,0x50,0x4C,0x90,0x00,0x00, +/* */ +0x10,0x80,0x3C,0x40,0x25,0xF0,0x34,0x80,0x2C,0x80,0x24,0xF0,0x7C,0x90,0x24,0x90, +0x34,0x90,0x2C,0x90,0x24,0x90,0x4D,0x30,0x00,0x00, +/* */ +0x10,0x00,0x3B,0xF0,0x28,0x20,0x38,0x20,0x2B,0xA0,0x7A,0xA0,0x2A,0xA0,0x3A,0xA0, +0x2B,0xA0,0x2A,0x20,0x28,0x20,0x58,0xE0,0x00,0x00, +/* */ +0x10,0x40,0x3C,0x70,0x24,0x40,0x34,0x40,0x2D,0xF0,0x25,0x10,0x7D,0x10,0x25,0xF0, +0x35,0x10,0x2D,0x00,0x25,0x00,0x4E,0x00,0x00,0x00, +/* */ +0x10,0x40,0x3C,0x40,0x24,0x40,0x35,0xF0,0x2D,0x50,0x25,0x50,0x7D,0xF0,0x25,0x50, +0x35,0x50,0x2D,0x50,0x25,0xF0,0x4D,0x10,0x00,0x00, +/* */ +0x11,0x00,0x3D,0x00,0x25,0xF0,0x36,0x80,0x2C,0x80,0x24,0xE0,0x7C,0x80,0x24,0x80, +0x34,0xF0,0x2C,0x80,0x24,0x80,0x4C,0x80,0x00,0x00, +/* */ +0x08,0x00,0x17,0xF0,0x3D,0x40,0x25,0x40,0x37,0xF0,0x2D,0x50,0x7D,0x50,0x25,0x70, +0x36,0x10,0x2C,0x10,0x27,0xF0,0x4C,0x10,0x00,0x00, +/* */ +0x10,0x40,0x3D,0x50,0x24,0xE0,0x34,0x40,0x2D,0xF0,0x25,0x10,0x7D,0xF0,0x25,0x10, +0x35,0xF0,0x2D,0x10,0x25,0x10,0x4D,0x30,0x00,0x00, +/* */ +0x13,0xF0,0x3A,0x10,0x2B,0xF0,0x3A,0x00,0x2A,0x30,0x7B,0xC0,0x2A,0x70,0x3B,0xC0, +0x2A,0x70,0x2B,0xC0,0x2A,0x50,0x5C,0x30,0x00,0x00, +/* */ +0x13,0xE0,0x3C,0x40,0x24,0x80,0x37,0xF0,0x2C,0x80,0x25,0x80,0x7C,0x00,0x27,0xF0, +0x35,0x50,0x2D,0x50,0x25,0x50,0x4F,0xF0,0x00,0x00, +/* */ +0x12,0x20,0x39,0x40,0x2B,0xF0,0x38,0x80,0x2B,0xE0,0x7A,0x20,0x2B,0xE0,0x3A,0x20, +0x2B,0xE0,0x2A,0x20,0x2B,0xE0,0x5A,0x20,0x00,0x00, +/* */ +0x11,0x40,0x3B,0xF0,0x29,0x40,0x3F,0xF0,0x2D,0x50,0x7F,0xF0,0x2D,0x50,0x3F,0xF0, +0x2A,0x20,0x2B,0xE0,0x2A,0x20,0x5B,0xE0,0x00,0x00, +/* */ +0x10,0x80,0x3B,0xE0,0x29,0x40,0x3F,0xF0,0x2A,0xA0,0x7B,0xE0,0x2A,0xA0,0x3B,0xE0, +0x28,0x80,0x2B,0xE0,0x28,0x80,0x5F,0xF0,0x00,0x00, +/* */ +0x11,0x20,0x3B,0xF0,0x29,0x20,0x3B,0xF0,0x2A,0x10,0x79,0xE0,0x29,0x10,0x3A,0xA0, +0x29,0x40,0x2A,0xE0,0x29,0x50,0x5A,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x18,0xC0,0x62,0x30,0x1F,0xC0,0x00,0x80,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x08,0x00,0x3F,0x80,0x28,0x80,0x25,0x80,0x3F,0xE0,0x00,0x20,0x02,0xC0,0x7F,0xF0, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x10,0x00,0x7E,0xF0,0x12,0x90,0x12,0x90,0x22,0x90,0x4C,0xF0,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x02,0x40,0x7F,0xF0,0x12,0x40,0x0B,0x80,0x32,0x60,0x00,0x00,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x10,0x80,0x4A,0xA0,0x22,0x90,0x04,0x80,0x20,0xE0,0x4F,0x00,0x02,0x00,0x7F,0xF0, +0x05,0x00,0x18,0xA0,0x6A,0x40,0x0C,0x30,0x00,0x00, +/* */ +0x3C,0x40,0x25,0xF0,0x3C,0xA0,0x21,0xF0,0x3C,0x40,0x54,0xE0,0x1C,0x40,0x02,0x00, +0x7F,0xF0,0x05,0x20,0x18,0xC0,0x6C,0x30,0x00,0x00, +/* */ +0x44,0x30,0x2B,0xC0,0x02,0x40,0x7A,0x40,0x12,0x40,0x3B,0xF0,0x12,0x40,0x7A,0x40, +0x12,0x40,0x12,0x50,0x23,0x30,0x42,0x90,0x00,0x00, +/* */ +0x44,0x00,0x2B,0xE0,0x00,0x40,0x78,0x80,0x11,0x40,0x3A,0x20,0x14,0x10,0x7B,0xE0, +0x10,0x80,0x10,0x80,0x20,0x80,0x47,0xF0,0x00,0x00, +/* */ +0x51,0x00,0x22,0x20,0x77,0xF0,0x20,0x10,0x22,0x20,0x75,0x10,0x21,0xE0,0x22,0x20, +0x75,0x40,0x20,0x80,0x21,0x40,0x46,0x30,0x00,0x00, +/* */ +0x47,0xE0,0x2A,0x20,0x03,0xE0,0x7A,0x20,0x13,0xE0,0x39,0x00,0x11,0xF0,0x7A,0x90, +0x15,0x50,0x12,0x10,0x23,0xD0,0x40,0x60,0x00,0x00, +/* */ +0x50,0x80,0x24,0x90,0x77,0xF0,0x21,0x00,0x27,0xF0,0x71,0x00,0x21,0x40,0x22,0x50, +0x72,0xE0,0x25,0x40,0x24,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x02,0x00,0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x08,0xA0,0x7F,0xF0, +0x2A,0xA0,0x5D,0x50,0x04,0xB0,0x19,0x10,0x00,0x00, +/* */ +0x10,0x40,0x10,0x40,0x54,0x40,0x39,0x50,0x11,0x50,0x7D,0x50,0x11,0x50,0x39,0x50, +0x55,0x50,0x11,0x50,0x11,0xF0,0x10,0x10,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x55,0x00,0x39,0xF0,0x12,0x20,0x7D,0x20,0x11,0x20,0x39,0x40, +0x54,0x80,0x11,0x40,0x12,0x20,0x14,0x10,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x56,0x90,0x3A,0x90,0x12,0x90,0x7A,0x90,0x13,0xF0,0x3A,0x00, +0x56,0x00,0x12,0x10,0x12,0x10,0x11,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x13,0xF0,0x56,0x00,0x3B,0xF0,0x12,0x80,0x7A,0x80,0x12,0xF0,0x3A,0x90, +0x56,0x90,0x12,0x90,0x15,0x10,0x1A,0x60,0x00,0x00, +/* */ +0x02,0x00,0x22,0x20,0x3F,0xE0,0x42,0x10,0x7F,0xF0,0x00,0x00,0x12,0x40,0x0A,0x80, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x10,0x00,0x17,0xF0,0x59,0x40,0x31,0x40,0x17,0xF0,0x7D,0x50,0x15,0x50,0x35,0x70, +0x5E,0x10,0x14,0x10,0x17,0xF0,0x14,0x10,0x00,0x00, +/* */ +0x22,0x00,0x13,0xF0,0x04,0x90,0x11,0x40,0x62,0x20,0x04,0x10,0x12,0x40,0x0A,0x80, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x0E,0xE0,0x28,0x20,0x3E,0xA0,0x54,0x40,0x18,0xA0,0x61,0x10,0x12,0x40,0x0A,0x80, +0x7F,0xF0,0x0A,0x80,0x12,0x40,0x62,0x30,0x00,0x00, +/* */ +0x49,0x50,0x2A,0x50,0x7F,0x50,0x2A,0xA0,0x49,0x20,0x22,0x40,0x37,0x40,0x52,0xA0, +0x5A,0xA0,0x2F,0x50,0x22,0x50,0x42,0x50,0x00,0x00, +/* */ +0x10,0x80,0x17,0xF0,0x5C,0x10,0x30,0x00,0x13,0xE0,0x78,0x00,0x10,0x00,0x37,0xF0, +0x58,0x80,0x12,0xA0,0x14,0x90,0x11,0x80,0x00,0x00, +/* */ +0x10,0x80,0x11,0x20,0x5B,0xF0,0x30,0x80,0x17,0xF0,0x79,0x40,0x12,0xA0,0x35,0x50, +0x58,0x80,0x13,0x20,0x10,0xC0,0x17,0x00,0x00,0x00, +/* */ +0x11,0x00,0x11,0x60,0x5A,0x20,0x33,0xF0,0x16,0x80,0x7A,0xE0,0x13,0x40,0x32,0x40, +0x5B,0xF0,0x12,0x40,0x12,0xA0,0x13,0x10,0x00,0x00, +/* */ +0x12,0x20,0x13,0xA0,0x5C,0xB0,0x32,0xA0,0x11,0x20,0x7A,0xF0,0x14,0x00,0x33,0xF0, +0x5A,0x10,0x13,0xF0,0x12,0x10,0x13,0xF0,0x00,0x00, +/* */ +0x12,0x20,0x11,0x20,0x58,0x40,0x37,0xF0,0x12,0x20,0x7C,0x40,0x15,0x50,0x36,0x60, +0x5A,0x20,0x15,0x50,0x17,0x70,0x11,0x10,0x00,0x00, +/* */ +0x17,0xF0,0x10,0x90,0x5A,0xE0,0x32,0x80,0x15,0xF0,0x78,0x00,0x13,0xE0,0x32,0x20, +0x5B,0xE0,0x12,0x20,0x12,0x20,0x12,0x60,0x00,0x00, +/* */ +0x13,0xE0,0x11,0x20,0x58,0xC0,0x37,0xF0,0x11,0x50,0x7A,0x40,0x14,0xC0,0x30,0x80, +0x5F,0xF0,0x11,0xC0,0x12,0xA0,0x14,0x90,0x00,0x00, +/* */ +0x11,0x00,0x13,0xE0,0x5A,0x20,0x33,0xE0,0x12,0x20,0x7B,0xE0,0x12,0x20,0x33,0xE0, +0x58,0x90,0x13,0xF0,0x11,0x40,0x16,0x30,0x00,0x00, +/* */ +0x16,0xE0,0x12,0xA0,0x5A,0xE0,0x36,0x40,0x15,0xF0,0x7D,0x50,0x17,0x50,0x33,0xF0, +0x5A,0x40,0x12,0x50,0x13,0xF0,0x16,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x20,0x20,0x20,0x20,0x3F,0xE0,0x24,0x10, +0x22,0x20,0x21,0x40,0x28,0xC0,0x30,0x30,0x00,0x00, +/* */ +0x7B,0xE0,0x48,0x80,0x7A,0x80,0x4B,0xF0,0x79,0x40,0x52,0x50,0x6C,0x30,0x1F,0xC0, +0x10,0x40,0x1F,0xC0,0x10,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x3D,0xE0,0x04,0x20,0x25,0x20,0x14,0xA0,0x25,0x20,0x08,0x80,0x08,0x80,0x7F,0xF0, +0x08,0x80,0x08,0x80,0x10,0x80,0x20,0x80,0x00,0x00, +/* */ +0x11,0xB0,0x10,0x90,0x28,0x90,0x46,0xD0,0x11,0xB0,0x08,0x90,0x7C,0x90,0x05,0xB0, +0x0A,0xD0,0x28,0x90,0x10,0x90,0x09,0xB0,0x00,0x00, +/* */ +0x02,0x00,0x05,0x00,0x1F,0xC0,0x60,0x30,0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x00,0x00, +0x7D,0xF0,0x24,0x90,0x14,0x50,0x6D,0xB0,0x00,0x00, +/* */ +0x04,0x20,0x1F,0x40,0x04,0x80,0x7F,0xF0,0x08,0x40,0x1F,0xC0,0x68,0x40,0x0F,0xC0, +0x7D,0xF0,0x24,0x90,0x14,0x50,0x6D,0xB0,0x00,0x00, +/* */ +0x05,0x00,0x7D,0xF0,0x05,0x00,0x3D,0xE0,0x05,0x00,0x7D,0xF0,0x05,0x00,0x00,0x00, +0x7D,0xF0,0x24,0x90,0x14,0x50,0x6D,0xB0,0x00,0x00, +/* */ +0x08,0x80,0x7F,0xF0,0x22,0x20,0x3E,0xA0,0x22,0xA0,0x3E,0xA0,0x22,0x20,0x26,0x60, +0x7D,0xF0,0x24,0x90,0x14,0x50,0x6D,0xB0,0x00,0x00, +/* */ +0x09,0xB0,0x3E,0x90,0x22,0x90,0x3E,0xD0,0x21,0xB0,0x3E,0x90,0x2A,0x90,0x6B,0xB0, +0x3E,0xD0,0x2A,0x90,0x2A,0x90,0x27,0xB0,0x00,0x00, +/* */ +0x7D,0xB0,0x00,0x90,0x38,0x90,0x2A,0xD0,0x39,0xB0,0x00,0x90,0x7C,0x90,0x6D,0xB0, +0x56,0xD0,0x7C,0x90,0x54,0x90,0x4D,0xB0,0x00,0x00, +/* */ +0x7E,0xE0,0x50,0xB0,0x5D,0x00,0x68,0xE0,0x7E,0xA0,0x54,0x40,0x7E,0xB0,0x00,0x00, +0x7D,0xF0,0x24,0x90,0x14,0x50,0x6D,0xB0,0x00,0x00, +/* */ +0x02,0x00,0x04,0x00,0x08,0x40,0x1F,0x80,0x03,0x00,0x0C,0x40,0x3F,0xE0,0x02,0x00, +0x12,0x40,0x22,0x20,0x42,0x10,0x06,0x00,0x00,0x00, +/* */ +0x11,0x00,0x7B,0xC0,0x11,0x40,0x7B,0x50,0x12,0xB0,0x34,0x10,0x08,0x80,0x1F,0x00, +0x04,0x40,0x3F,0xE0,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x10,0x40,0x3F,0xE0,0x10,0x40,0x1F,0xC0,0x10,0x40,0x7F,0xF0,0x14,0xC0,0x2F,0x20, +0x42,0x50,0x1F,0xE0,0x0A,0x80,0x16,0x40,0x00,0x00, +/* */ +0x08,0x80,0x3E,0xF0,0x23,0x20,0x3E,0xA0,0x24,0x40,0x28,0xA0,0x5F,0x10,0x04,0x40, +0x3F,0xE0,0x02,0x00,0x12,0x40,0x26,0x20,0x00,0x00, +/* */ +0x04,0x30,0x79,0xC0,0x54,0x40,0x28,0x90,0x3D,0xE0,0x50,0x40,0x10,0x90,0x7D,0xF0, +0x10,0x40,0x55,0x60,0x5E,0x50,0x64,0xC0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x02,0x00,0x1F,0xC0,0x12,0x40,0x7F,0xF0,0x14,0x40,0x3F,0xC0, +0x2A,0xA0,0x7E,0x40,0x29,0xF0,0x5A,0x50,0x00,0x00, +/* */ +0x10,0x80,0x78,0x80,0x10,0x80,0x3B,0xE0,0x10,0x80,0x78,0x80,0x27,0xF0,0x38,0x80, +0x69,0x40,0x11,0x40,0x2A,0x20,0x44,0x10,0x00,0x00, +/* */ +0x11,0x00,0x7D,0xF0,0x12,0x10,0x38,0x90,0x56,0xB0,0x10,0x90,0x2B,0xF0,0x54,0x90, +0x39,0xD0,0x6A,0xB0,0x10,0x90,0x68,0x60,0x00,0x00, +/* */ +0x08,0x20,0x09,0x20,0x3D,0x20,0x09,0x20,0x09,0x20,0x7D,0x20,0x09,0x60,0x29,0xA0, +0x2D,0x20,0x28,0x20,0x38,0x00,0x4F,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x09,0xE0,0x3D,0x20,0x09,0x20,0x09,0xE0,0x7D,0x20,0x09,0xE0,0x29,0x20, +0x2D,0x20,0x2B,0xF0,0x38,0x00,0x4F,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x17,0x90,0x7A,0x50,0x13,0x50,0x15,0x50,0x7D,0x50,0x13,0x50,0x59,0x50, +0x52,0x10,0x54,0x30,0x70,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x14,0x80,0x7A,0xF0,0x10,0x90,0x11,0x10,0x78,0x40,0x11,0x40,0x5A,0x40, +0x54,0xA0,0x51,0x10,0x70,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x15,0x20,0x17,0xF0,0x79,0x20,0x17,0xF0,0x13,0x60,0x7D,0xB0,0x13,0xE0,0x52,0x20, +0x5A,0xA0,0x51,0x40,0x72,0x20,0x5F,0xF0,0x00,0x00, +/* */ +0x08,0x00,0x09,0xF0,0x3D,0x10,0x09,0x10,0x09,0x60,0x7F,0x00,0x15,0xF0,0x35,0x50, +0x57,0x50,0x15,0x20,0x25,0x50,0x4D,0x90,0x00,0x00, +/* */ +0x10,0x80,0x10,0x80,0x39,0xD0,0x10,0xA0,0x13,0xF0,0x7C,0x80,0x29,0xE0,0x2B,0x20, +0x6D,0xE0,0x29,0x20,0x29,0xE0,0x59,0x20,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x00,0x80,0x78,0x80,0x48,0x80,0x48,0x80,0x78,0x80,0x00,0x80, +0x48,0x80,0x50,0x80,0x18,0x80,0x67,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x07,0xF0,0x78,0x80,0x48,0x80,0x4F,0xE0,0x7A,0x20,0x02,0x20, +0x49,0x40,0x50,0x80,0x19,0x40,0x66,0x30,0x00,0x00, +/* */ +0x00,0x00,0x7F,0x70,0x14,0x20,0x7F,0x20,0x55,0x20,0x55,0x20,0x63,0x20,0x41,0x20, +0x7F,0x20,0x41,0x20,0x7F,0x20,0x41,0x60,0x00,0x00, +/* */ +0x00,0x00,0x7F,0x70,0x14,0x20,0x7F,0x20,0x55,0x20,0x55,0x20,0x63,0x70,0x41,0x20, +0x7F,0x20,0x41,0x20,0x7F,0x20,0x41,0x20,0x00,0x00, +/* */ +0x00,0x20,0x7F,0x20,0x14,0x20,0x7F,0xF0,0x55,0x20,0x55,0xA0,0x63,0x60,0x41,0x20, +0x7F,0x20,0x41,0x20,0x7F,0x20,0x41,0x60,0x00,0x00, +/* */ +0x00,0x40,0x7C,0x40,0x11,0x50,0x7D,0x70,0x55,0xD0,0x57,0x50,0x6D,0x50,0x45,0x70, +0x7D,0x40,0x45,0x10,0x7D,0x10,0x44,0xF0,0x00,0x00, +/* */ +0x00,0x20,0x7F,0x20,0x14,0x20,0x7F,0x70,0x55,0x20,0x55,0x20,0x63,0x70,0x41,0x50, +0x7F,0x50,0x41,0x50,0x7F,0x70,0x41,0x50,0x00,0x00, +/* */ +0x00,0x40,0x7F,0x40,0x14,0x70,0x7F,0xC0,0x55,0x40,0x55,0x70,0x63,0x40,0x41,0x40, +0x7F,0x70,0x41,0x40,0x7F,0x40,0x41,0x40,0x00,0x00, +/* */ +0x00,0x40,0x7F,0x20,0x14,0xF0,0x7F,0x90,0x55,0x00,0x55,0x40,0x63,0x50,0x41,0x60, +0x7F,0x40,0x41,0x50,0x7F,0x50,0x41,0x30,0x00,0x00, +/* */ +0x00,0x40,0x7D,0x40,0x11,0x40,0x7D,0xE0,0x56,0x40,0x54,0x40,0x6F,0xF0,0x45,0x40, +0x7D,0x40,0x45,0x40,0x7E,0x50,0x44,0x30,0x00,0x00, +/* */ +0x00,0x40,0x7F,0x40,0x14,0x70,0x7F,0x90,0x55,0x50,0x55,0x20,0x63,0x40,0x41,0xF0, +0x7F,0x50,0x41,0x50,0x7F,0x70,0x41,0x50,0x00,0x00, +/* */ +0x00,0x50,0x7F,0x60,0x14,0x40,0x7F,0x50,0x55,0x30,0x55,0x00,0x63,0x70,0x41,0x50, +0x7F,0x70,0x41,0x50,0x7F,0x70,0x41,0x50,0x00,0x00, +/* */ +0x00,0x00,0x7D,0xF0,0x10,0xA0,0x7D,0xB0,0x54,0xA0,0x54,0xA0,0x6D,0xF0,0x45,0x00, +0x7D,0x00,0x45,0x00,0x7D,0x00,0x46,0x00,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x10,0x00,0x7F,0x70,0x55,0x50,0x55,0x50,0x6D,0x50,0x47,0x70, +0x7D,0x50,0x45,0x50,0x7D,0x50,0x45,0x50,0x00,0x00, +/* */ +0x00,0x70,0x7F,0x50,0x14,0x50,0x7F,0x70,0x55,0x00,0x55,0x70,0x63,0x20,0x41,0x20, +0x7F,0x70,0x41,0x20,0x7F,0x20,0x41,0x70,0x00,0x00, +/* */ +0x00,0x40,0x7C,0x40,0x10,0xA0,0x7D,0x10,0x54,0xE0,0x54,0x40,0x6D,0xF0,0x44,0x40, +0x7D,0x60,0x45,0x50,0x7E,0x50,0x44,0xC0,0x00,0x00, +/* */ +0x00,0x30,0x7D,0xC0,0x10,0x50,0x7D,0x20,0x54,0x80,0x54,0x20,0x6D,0xF0,0x44,0x20, +0x7D,0x20,0x44,0xA0,0x7C,0x20,0x44,0x60,0x00,0x00, +/* */ +0x7D,0xE0,0x11,0x20,0x7D,0xE0,0x55,0x20,0x55,0xE0,0x6C,0x00,0x45,0x50,0x7D,0x60, +0x45,0xC0,0x45,0x50,0x7D,0x50,0x45,0xB0,0x00,0x00, +/* */ +0x00,0x20,0x7F,0x70,0x14,0x00,0x7F,0x50,0x55,0x20,0x55,0x70,0x63,0x00,0x41,0x70, +0x7F,0x50,0x41,0x50,0x7F,0x70,0x41,0x50,0x00,0x00, +/* */ +0x01,0x00,0x7D,0x70,0x13,0xD0,0x7D,0x50,0x55,0x70,0x57,0xD0,0x6E,0xD0,0x46,0xF0, +0x7E,0xD0,0x47,0xD0,0x7E,0x50,0x44,0xB0,0x00,0x00, +/* */ +0x7D,0xF0,0x11,0x10,0x7D,0xF0,0x55,0x10,0x55,0xF0,0x6C,0x00,0x47,0xF0,0x7C,0x40, +0x45,0x70,0x45,0x40,0x7D,0x40,0x46,0xF0,0x00,0x00, +/* */ +0x03,0xF0,0x7C,0x50,0x11,0x60,0x7D,0x40,0x56,0xF0,0x54,0x00,0x6D,0xE0,0x45,0x20, +0x7D,0xE0,0x45,0x20,0x7D,0x20,0x45,0x60,0x00,0x00, +/* */ +0x00,0x40,0x7D,0xF0,0x10,0x80,0x7D,0xF0,0x57,0x10,0x55,0xF0,0x6C,0x00,0x45,0xF0, +0x7D,0x50,0x45,0x50,0x7D,0x50,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x40,0x7D,0xF0,0x11,0x40,0x7D,0xF0,0x55,0x50,0x55,0xF0,0x6D,0x50,0x45,0xF0, +0x7D,0x40,0x45,0xF0,0x7E,0x90,0x44,0xF0,0x00,0x00, +/* */ +0x03,0xB0,0x7E,0xD0,0x11,0xB0,0x7E,0xD0,0x54,0x40,0x54,0xA0,0x6D,0x50,0x46,0xA0, +0x7C,0x40,0x45,0x90,0x7C,0x20,0x45,0xC0,0x00,0x00, +/* */ +0x00,0xA0,0x7D,0xB0,0x10,0xA0,0x7D,0xF0,0x54,0xA0,0x55,0xF0,0x6C,0x40,0x45,0xF0, +0x7C,0x40,0x45,0xF0,0x7C,0xA0,0x45,0x10,0x00,0x00, +/* */ +0x00,0xA0,0x7C,0x90,0x11,0xF0,0x7F,0x20,0x55,0xF0,0x55,0x20,0x6D,0xF0,0x45,0x20, +0x7D,0xF0,0x44,0x00,0x7D,0x50,0x45,0x50,0x00,0x00, +/* */ +0x00,0x40,0x7D,0xF0,0x10,0xA0,0x7D,0xF0,0x54,0x00,0x55,0x50,0x6D,0x50,0x46,0x50, +0x7C,0x00,0x45,0xF0,0x7D,0x50,0x47,0xF0,0x00,0x00, +/* */ +0x00,0xE0,0x78,0x80,0x13,0xF0,0x7A,0x90,0x53,0xE0,0x52,0x90,0x6B,0xF0,0x42,0x80, +0x7B,0x50,0x44,0xE0,0x7B,0x50,0x40,0xC0,0x00,0x00, +/* */ +0x01,0x40,0x7F,0xF0,0x15,0x50,0x7F,0xF0,0x55,0x50,0x57,0xF0,0x68,0x00,0x47,0xF0, +0x7A,0x20,0x43,0xE0,0x79,0x40,0x47,0xF0,0x00,0x00, +/* */ +0x00,0x30,0x7D,0xC0,0x10,0x40,0x7D,0xF0,0x55,0x50,0x55,0xF0,0x6D,0x50,0x45,0xF0, +0x7C,0x40,0x45,0xF0,0x7C,0x00,0x45,0x50,0x00,0x00, +/* */ +0x00,0x00,0x7F,0xF0,0x04,0x00,0x1A,0x20,0x63,0x40,0x05,0x80,0x19,0x40,0x63,0x40, +0x05,0x20,0x19,0x10,0x61,0x00,0x06,0x00,0x00,0x00, +/* */ +0x11,0x10,0x1C,0xA0,0x11,0xF0,0x7C,0x40,0x45,0xF0,0x6C,0x80,0x57,0xF0,0x55,0x00, +0x6D,0xF0,0x46,0x40,0x7C,0x40,0x45,0xF0,0x00,0x00, +/* */ +0x7F,0xF0,0x08,0x00,0x0F,0xE0,0x10,0x20,0x60,0xC0,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x02,0x00,0x13,0xC0,0x12,0x00,0x6F,0xF0,0x00,0x00, +/* */ +0x3B,0xC0,0x12,0x40,0x13,0x40,0x1A,0xD0,0x64,0x30,0x1F,0xC0,0x10,0x40,0x1F,0xC0, +0x02,0x00,0x13,0xC0,0x12,0x00,0x6F,0xF0,0x00,0x00, +/* */ +0x10,0x60,0x7B,0x80,0x12,0x00,0x7B,0xF0,0x12,0x40,0x34,0x40,0x00,0x00,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x12,0x00,0x6F,0xF0,0x00,0x00, +/* */ +0x00,0xA0,0x3F,0xF0,0x24,0x80,0x3F,0xA0,0x24,0x50,0x56,0xB0,0x2D,0x10,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x12,0x00,0x6F,0xF0,0x00,0x00, +/* */ +0x4A,0x80,0x2C,0xF0,0x7F,0x20,0x4A,0xA0,0x5E,0x40,0x6A,0xA0,0x41,0x10,0x3F,0xE0, +0x20,0x20,0x3F,0xE0,0x12,0x00,0x6F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3D,0x00,0x25,0xF0,0x26,0x10,0x3C,0x10,0x09,0x10,0x08,0x90,0x2C,0x90, +0x28,0x10,0x28,0x10,0x2C,0x10,0x70,0x60,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x49,0x20,0x49,0x20,0x79,0x40,0x11,0x70,0x19,0x10,0x51,0x10, +0x52,0xA0,0x5A,0x40,0x64,0xA0,0x01,0x10,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x49,0x20,0x49,0x20,0x79,0x20,0x13,0xF0,0x19,0x20,0x51,0x20, +0x51,0x20,0x5A,0x20,0x62,0x20,0x04,0x20,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x48,0x80,0x4B,0xE0,0x78,0x80,0x10,0x80,0x17,0xF0,0x58,0x80, +0x51,0x40,0x51,0x40,0x5A,0x20,0x64,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x49,0x40,0x4A,0x20,0x7C,0x10,0x13,0xE0,0x12,0x20,0x5A,0x20, +0x52,0x60,0x52,0x00,0x5A,0x10,0x61,0xF0,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xF0,0x48,0x80,0x48,0x80,0x79,0x00,0x11,0xF0,0x1B,0x10,0x55,0x10, +0x51,0x10,0x59,0x10,0x61,0xF0,0x01,0x10,0x00,0x00, +/* */ +0x01,0x20,0x79,0x20,0x4A,0x20,0x4A,0xF0,0x7E,0x20,0x12,0x20,0x12,0xA0,0x5A,0x60, +0x52,0x20,0x52,0x20,0x5A,0x20,0x62,0x60,0x00,0x00, +/* */ +0x00,0x00,0x7B,0xE0,0x4A,0xA0,0x4A,0xA0,0x7A,0xA0,0x17,0xF0,0x1A,0xA0,0x52,0xA0, +0x52,0xA0,0x5A,0xA0,0x62,0xA0,0x04,0x60,0x00,0x00, +/* */ +0x00,0x60,0x7B,0x80,0x4A,0x00,0x4A,0x80,0x7A,0x80,0x13,0xF0,0x18,0x80,0x52,0xA0, +0x52,0x90,0x5C,0x90,0x60,0x80,0x01,0x80,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x4B,0xF0,0x4A,0x10,0x78,0x00,0x11,0x10,0x11,0x20,0x59,0x40, +0x51,0x80,0x51,0x10,0x59,0x10,0x60,0xF0,0x00,0x00, +/* */ +0x04,0x00,0x74,0x00,0x54,0x70,0x5F,0x50,0x75,0x50,0x15,0x50,0x1D,0x50,0x55,0x50, +0x55,0x50,0x5D,0x50,0x69,0x70,0x13,0x50,0x00,0x00, +/* */ +0x00,0x40,0x78,0x40,0x4B,0xF0,0x4A,0x50,0x7A,0x40,0x13,0xE0,0x1A,0xA0,0x52,0xA0, +0x52,0xA0,0x5A,0x40,0x64,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x49,0x00,0x4A,0x20,0x7B,0xF0,0x10,0x10,0x13,0xE0,0x5A,0x20, +0x52,0x20,0x52,0x20,0x5B,0xE0,0x62,0x20,0x00,0x00, +/* */ +0x00,0x80,0x78,0x80,0x4B,0xE0,0x48,0x80,0x78,0x80,0x17,0xF0,0x10,0x00,0x58,0x80, +0x53,0xE0,0x50,0x80,0x58,0x80,0x67,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x79,0xE0,0x4F,0x00,0x49,0x50,0x78,0x90,0x13,0x70,0x18,0x00,0x57,0xF0, +0x51,0x40,0x59,0x40,0x62,0x50,0x04,0x30,0x00,0x00, +/* */ +0x02,0x40,0x7A,0x50,0x4B,0xE0,0x4A,0x40,0x7A,0xD0,0x13,0x30,0x10,0x80,0x58,0x80, +0x53,0xF0,0x50,0x80,0x58,0x80,0x60,0x80,0x00,0x00, +/* */ +0x00,0x80,0x7A,0x80,0x4A,0x80,0x4B,0xE0,0x7C,0x80,0x10,0x80,0x17,0xF0,0x59,0x40, +0x51,0x40,0x51,0x40,0x5A,0x50,0x64,0x30,0x00,0x00, +/* */ +0x04,0x20,0x7A,0xC0,0x48,0x40,0x48,0x40,0x79,0xF0,0x16,0x40,0x12,0x40,0x5A,0x40, +0x52,0x40,0x52,0x40,0x5A,0x00,0x65,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x4B,0xF0,0x49,0x20,0x78,0xC0,0x11,0x20,0x12,0x10,0x59,0x20, +0x51,0x20,0x51,0x20,0x59,0x20,0x62,0x20,0x00,0x00, +/* */ +0x01,0x00,0x78,0x80,0x4B,0xF0,0x48,0x00,0x79,0x40,0x12,0x20,0x15,0x50,0x59,0x40, +0x51,0x40,0x50,0x80,0x59,0x40,0x66,0x30,0x00,0x00, +/* */ +0x01,0x00,0x78,0x80,0x4B,0xE0,0x4A,0x20,0x7B,0xE0,0x12,0x20,0x13,0xE0,0x5A,0x90, +0x52,0xA0,0x52,0x40,0x5B,0x20,0x62,0x10,0x00,0x00, +/* */ +0x7B,0xE0,0x48,0x20,0x48,0x20,0x7B,0xE0,0x12,0x00,0x12,0x10,0x59,0xF0,0x51,0x00, +0x50,0xA0,0x5A,0x10,0x65,0x50,0x01,0xC0,0x00,0x00, +/* */ +0x00,0x80,0x78,0xF0,0x48,0x80,0x4B,0xF0,0x7A,0x10,0x13,0xF0,0x12,0x10,0x5B,0xF0, +0x50,0x80,0x57,0xF0,0x58,0x80,0x60,0x80,0x00,0x00, +/* */ +0x7B,0xE0,0x4A,0xA0,0x4B,0xE0,0x7A,0xA0,0x13,0xE0,0x10,0x80,0x5B,0xF0,0x50,0x80, +0x51,0xC0,0x5A,0xA0,0x64,0x90,0x00,0x80,0x00,0x00, +/* */ +0x04,0x00,0x74,0x70,0x57,0x50,0x5A,0x50,0x72,0x50,0x12,0x50,0x1F,0xD0,0x52,0x50, +0x52,0x50,0x5D,0x70,0x65,0x50,0x08,0x00,0x00,0x00, +/* */ +0x00,0x30,0x77,0xC0,0x54,0x40,0x57,0xF0,0x74,0x40,0x15,0xF0,0x1D,0x10,0x55,0x50, +0x55,0x50,0x5D,0x50,0x64,0xA0,0x09,0x10,0x00,0x00, +/* */ +0x00,0x80,0x78,0x40,0x4B,0xF0,0x4A,0x40,0x7A,0x40,0x12,0x70,0x1A,0x40,0x52,0xF0, +0x52,0x90,0x5A,0x90,0x62,0xF0,0x04,0x90,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xE0,0x48,0x00,0x4A,0x20,0x79,0x40,0x17,0xF0,0x18,0x00,0x53,0xE0, +0x52,0x20,0x5A,0x20,0x63,0xE0,0x02,0x20,0x00,0x00, +/* */ +0x05,0x00,0x7A,0x70,0x48,0x50,0x4F,0x50,0x7A,0x60,0x12,0x60,0x1F,0xD0,0x52,0x50, +0x52,0x50,0x5D,0x60,0x65,0x40,0x08,0x40,0x00,0x00, +/* */ +0x00,0x40,0x78,0xF0,0x4E,0x50,0x4B,0xF0,0x7A,0x50,0x14,0xF0,0x16,0x40,0x5B,0xF0, +0x52,0x40,0x57,0xF0,0x5A,0x40,0x65,0xF0,0x00,0x00, +/* */ +0x00,0xA0,0x7A,0xA0,0x4F,0xF0,0x4A,0xA0,0x7A,0xE0,0x12,0x00,0x1B,0xF0,0x50,0x80, +0x57,0xF0,0x59,0xC0,0x62,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x00,0x80,0x74,0x90,0x54,0x90,0x57,0xF0,0x70,0x00,0x17,0xF0,0x18,0x80,0x57,0xF0, +0x55,0x50,0x5D,0x50,0x65,0x50,0x04,0x30,0x00,0x00, +/* */ +0x00,0x60,0x7B,0x80,0x48,0x80,0x4F,0xF0,0x7A,0xA0,0x13,0xE0,0x12,0xA0,0x5B,0xE0, +0x50,0x80,0x53,0xE0,0x58,0x80,0x67,0xF0,0x00,0x00, +/* */ +0x00,0x60,0x7B,0x80,0x48,0x80,0x4B,0xE0,0x7A,0xA0,0x13,0xE0,0x18,0x80,0x57,0xF0, +0x54,0x90,0x5D,0xD0,0x64,0x50,0x04,0x30,0x00,0x00, +/* */ +0x00,0x40,0x7B,0xF0,0x4A,0xA0,0x4B,0xF0,0x7A,0xA0,0x12,0xE0,0x1A,0x00,0x53,0xF0, +0x52,0x90,0x5A,0xA0,0x62,0x40,0x05,0xB0,0x00,0x00, +/* */ +0x02,0x20,0x79,0x40,0x4F,0xF0,0x48,0x80,0x7B,0xE0,0x11,0x00,0x17,0xF0,0x5A,0x00, +0x53,0xE0,0x54,0x80,0x58,0x80,0x67,0xF0,0x00,0x00, +/* */ +0x00,0x80,0x77,0xF0,0x54,0x10,0x57,0xF0,0x74,0x00,0x17,0xF0,0x1D,0x50,0x55,0x50, +0x57,0xF0,0x5D,0x50,0x65,0x50,0x04,0x30,0x00,0x00, +/* */ +0x79,0xE0,0x48,0xA0,0x48,0x40,0x7B,0xF0,0x10,0xD0,0x11,0x40,0x5A,0xC0,0x50,0x80, +0x53,0xF0,0x59,0xC0,0x62,0xA0,0x04,0x90,0x00,0x00, +/* */ +0x07,0xF0,0x7A,0x20,0x4B,0xE0,0x4A,0x20,0x7B,0xE0,0x12,0x30,0x17,0xE0,0x58,0x20, +0x57,0x70,0x55,0x50,0x5A,0x20,0x65,0x50,0x00,0x00, +/* */ +0x7A,0x20,0x4F,0xF0,0x4A,0x20,0x78,0x00,0x17,0xF0,0x11,0x40,0x5F,0xF0,0x55,0x50, +0x55,0x50,0x5E,0xB0,0x64,0x10,0x04,0x30,0x00,0x00, +/* */ +0x00,0x70,0x77,0x90,0x55,0x20,0x52,0x80,0x71,0x20,0x13,0xC0,0x19,0x20,0x57,0xF0, +0x50,0x80,0x5F,0xF0,0x61,0x40,0x06,0x30,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x54,0x20,0x57,0xA0,0x74,0x70,0x17,0xA0,0x1C,0xE0,0x57,0xA0, +0x56,0xA0,0x5D,0x20,0x67,0xA0,0x08,0x60,0x00,0x00, +/* */ +0x00,0x00,0x77,0xF0,0x54,0x20,0x56,0xA0,0x75,0x30,0x17,0xD0,0x1D,0x20,0x55,0x60, +0x57,0xE0,0x5D,0x20,0x65,0x50,0x0A,0x90,0x00,0x00, +/* */ +0x05,0x50,0x79,0x40,0x4F,0xF0,0x4A,0x20,0x79,0x40,0x17,0xF0,0x10,0x80,0x5B,0xE0, +0x50,0x80,0x57,0xF0,0x59,0x40,0x66,0x30,0x00,0x00, +/* */ +0x00,0x60,0x7B,0x80,0x4A,0xA0,0x49,0xC0,0x7B,0xF0,0x12,0xA0,0x14,0x10,0x5B,0xE0, +0x52,0xA0,0x53,0xE0,0x5A,0xA0,0x63,0xE0,0x00,0x00, +/* */ +0x02,0x40,0x77,0x60,0x50,0x50,0x57,0x40,0x75,0xF0,0x15,0x40,0x1F,0x40,0x52,0x40, +0x57,0x50,0x5A,0xD0,0x62,0x50,0x06,0xB0,0x00,0x00, +/* */ +0x07,0xF0,0x75,0x50,0x57,0xF0,0x52,0x00,0x77,0xF0,0x19,0x10,0x1F,0xD0,0x55,0x50, +0x57,0xD0,0x59,0x10,0x67,0xD0,0x00,0x60,0x00,0x00, +/* */ +0x01,0x40,0x77,0xF0,0x51,0x40,0x55,0xF0,0x70,0x90,0x15,0x50,0x1D,0xF0,0x57,0x50, +0x55,0xF0,0x5D,0x50,0x65,0xF0,0x05,0x10,0x00,0x00, +/* */ +0x00,0x80,0x7B,0xF0,0x4A,0xA0,0x4B,0xE0,0x7A,0xA0,0x13,0xE0,0x1A,0x80,0x53,0xF0, +0x52,0xA0,0x5B,0xD0,0x64,0x80,0x0B,0xE0,0x00,0x00, +/* */ +0x01,0x50,0x7A,0xA0,0x49,0x50,0x4B,0xF0,0x7A,0xB0,0x12,0x50,0x12,0xB0,0x5B,0xF0, +0x52,0xA0,0x53,0xE0,0x5A,0xB0,0x63,0x50,0x00,0x00, +/* */ +0x05,0x20,0x77,0xF0,0x59,0x20,0x57,0xF0,0x73,0x60,0x15,0xB0,0x18,0x00,0x57,0xF0, +0x54,0x90,0x5C,0x90,0x61,0x60,0x06,0x10,0x00,0x00, +/* */ +0x01,0x20,0x7B,0xA0,0x48,0x60,0x4B,0xB0,0x78,0x20,0x13,0xA0,0x1A,0xD0,0x53,0x80, +0x57,0xE0,0x5A,0x20,0x61,0xC0,0x06,0x30,0x00,0x00, +/* */ +0x03,0x00,0x0C,0x00,0x32,0x40,0x09,0x80,0x06,0x00,0x39,0x00,0x02,0x80,0x0C,0x80, +0x31,0x80,0x06,0x80,0x18,0x80,0x03,0x00,0x00,0x00, +/* */ +0x10,0x00,0x21,0xF0,0x54,0x90,0x28,0x90,0x11,0x10,0x6A,0x60,0x14,0x00,0x6D,0xF0, +0x15,0x10,0x65,0x10,0x05,0xF0,0x19,0x10,0x00,0x00, +/* */ +0x10,0x00,0x23,0xF0,0x50,0x40,0x28,0x80,0x13,0xF0,0x6A,0x10,0x1A,0x10,0x6B,0xF0, +0x1A,0x10,0x6A,0x10,0x0B,0xF0,0x32,0x10,0x00,0x00, +/* */ +0x11,0x40,0x21,0x40,0x52,0x40,0x2B,0xF0,0x16,0x40,0x6A,0x40,0x1A,0xE0,0x6B,0x50, +0x1A,0x40,0x6A,0x40,0x0A,0x40,0x32,0x40,0x00,0x00, +/* */ +0x11,0x40,0x27,0xF0,0x51,0x40,0x2B,0xE0,0x12,0x20,0x6B,0xE0,0x1A,0x20,0x6B,0xE0, +0x18,0x80,0x6F,0xF0,0x09,0x40,0x36,0x30,0x00,0x00, +/* */ +0x10,0x80,0x23,0xF0,0x53,0x50,0x2A,0x90,0x13,0x50,0x6B,0xF0,0x18,0x00,0x6A,0x50, +0x1B,0x60,0x6A,0x40,0x0A,0x50,0x33,0x30,0x00,0x00, +/* */ +0x10,0x20,0x1D,0x20,0x24,0xA0,0x48,0x20,0x3F,0x20,0x2A,0xA0,0x3E,0x30,0x2B,0xE0, +0x3E,0x20,0x2A,0x20,0x2A,0x20,0x46,0x20,0x00,0x00, +/* */ +0x20,0x80,0x38,0x80,0x4B,0xE0,0x10,0xA0,0x7C,0xA0,0x54,0xA0,0x7F,0xF0,0x54,0x80, +0x7C,0x80,0x55,0x40,0x55,0x20,0x0E,0x10,0x00,0x00, +/* */ +0x21,0x00,0x39,0xF0,0x4A,0x00,0x11,0xE0,0x7C,0x40,0x54,0x80,0x7D,0xF0,0x55,0x50, +0x7E,0x50,0x54,0x90,0x55,0x10,0x0C,0x60,0x00,0x00, +/* */ +0x20,0x10,0x39,0xE0,0x49,0x50,0x11,0x50,0x7D,0x50,0x55,0x50,0x7D,0x50,0x55,0x50, +0x7D,0x40,0x55,0x60,0x56,0x50,0x0C,0x70,0x00,0x00, +/* */ +0x08,0x90,0x2E,0xA0,0x28,0xC0,0x2E,0x90,0x70,0x70,0x0F,0x80,0x11,0x00,0x3F,0xE0, +0x52,0x20,0x1F,0xE0,0x12,0x20,0x20,0x60,0x00,0x00, +/* */ +0x20,0x80,0x38,0x80,0x4A,0x90,0x11,0xA0,0x7C,0x80,0x57,0xF0,0x7D,0x40,0x55,0x40, +0x7D,0x40,0x55,0x50,0x56,0x50,0x0C,0x30,0x00,0x00, +/* */ +0x20,0x40,0x38,0x40,0x49,0xF0,0x10,0x40,0x7D,0xF0,0x55,0x50,0x7D,0x50,0x55,0xF0, +0x7C,0x40,0x54,0xE0,0x55,0x50,0x0C,0x40,0x00,0x00, +/* */ +0x21,0x10,0x38,0xA0,0x49,0xF0,0x11,0x50,0x7D,0xF0,0x55,0x50,0x7D,0x50,0x55,0xF0, +0x7C,0x40,0x55,0xF0,0x54,0x40,0x0C,0x40,0x00,0x00, +/* */ +0x09,0x20,0x2D,0xC0,0x29,0x10,0x7C,0xF0,0x02,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0, +0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x08,0xE0,0x7E,0xB0,0x09,0x00,0x3E,0xE0,0x2A,0xA0,0x3E,0x40,0x44,0xA0,0x7F,0xF0, +0x00,0x00,0x3F,0xE0,0x10,0x40,0x1F,0xC0,0x00,0x00, +/* */ +0x10,0x00,0x7D,0xF0,0x11,0x10,0x39,0x50,0x11,0x50,0x7D,0x50,0x29,0x50,0x39,0x50, +0x28,0x80,0x38,0xC0,0x29,0x50,0x2A,0x30,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x00,0x00,0x1F,0xC0,0x00,0x00,0x7F,0xF0, +0x10,0x00,0x1F,0xE0,0x00,0x20,0x00,0xC0,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x5A,0xD0,0x02,0x00,0x3A,0xE0,0x00,0x00,0x3F,0xF0, +0x22,0x00,0x2F,0xE0,0x22,0x20,0x4C,0xC0,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x5A,0xD0,0x02,0x00,0x38,0xE0,0x02,0x00,0x7F,0xF0, +0x10,0x40,0x08,0x80,0x07,0x00,0x78,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x4A,0x90,0x00,0x20,0x3B,0xC0,0x08,0x80,0x13,0xE0, +0x48,0x80,0x2B,0xE0,0x10,0x00,0x6F,0xF0,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x38,0xE0,0x02,0x00,0x7F,0xF0,0x10,0x40, +0x0F,0x80,0x70,0x70,0x08,0x80,0x10,0x80,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x5A,0xD0,0x02,0x00,0x3A,0xE0,0x20,0x80,0x17,0xF0, +0x40,0x80,0x27,0xF0,0x14,0x90,0x24,0xB0,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x42,0x10,0x3A,0xE0,0x05,0x00,0x7D,0xF0,0x05,0x00, +0x3D,0xE0,0x05,0x00,0x7D,0xF0,0x05,0x00,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x3F,0xE0,0x08,0x80,0x7F,0xF0,0x04,0x00, +0x7F,0xF0,0x18,0x80,0x07,0x00,0x78,0xE0,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x20,0xC0,0x17,0x20,0x45,0x40,0x2F,0xE0, +0x01,0x00,0x1F,0xF0,0x21,0x00,0x4F,0xE0,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x27,0xE0,0x14,0x20,0x07,0xE0,0x64,0x20, +0x27,0xF0,0x28,0x90,0x35,0x50,0x27,0xB0,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x14,0x80,0x3E,0x80,0x14,0xF0,0x7F,0x20, +0x22,0xA0,0x3E,0x40,0x22,0xA0,0x27,0x10,0x00,0x00, +/* */ +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x52,0x50,0x18,0x00,0x69,0xF0,0x2D,0x50,0x71,0xF0, +0x19,0x50,0x6D,0xF0,0x14,0x40,0x6D,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x5C,0x80,0x50,0x90,0x50,0x90,0x7C,0xA0,0x00,0xC0,0x54,0x80,0x55,0x80, +0x6E,0x80,0x44,0x90,0x7C,0x90,0x04,0x70,0x00,0x00, +/* */ +0x10,0x00,0x5D,0xE0,0x51,0x20,0x51,0x20,0x7D,0xE0,0x01,0x20,0x55,0x20,0x55,0xE0, +0x6D,0x20,0x45,0x20,0x7D,0x20,0x07,0xF0,0x00,0x00, +/* */ +0x10,0x80,0x5C,0x80,0x51,0xF0,0x52,0x10,0x7D,0xD0,0x01,0x50,0x55,0x50,0x55,0xD0, +0x6D,0x30,0x45,0x00,0x7D,0x10,0x04,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x5D,0xF0,0x50,0x90,0x50,0x90,0x7C,0x90,0x01,0x30,0x56,0x00,0x55,0xF0, +0x6D,0x10,0x45,0x10,0x7D,0xF0,0x05,0x10,0x00,0x00, +/* */ +0x11,0x40,0x5D,0x40,0x51,0x40,0x55,0x50,0x7D,0x60,0x05,0xC0,0x55,0x40,0x55,0x40, +0x6D,0x40,0x45,0x50,0x7D,0xD0,0x07,0x30,0x00,0x00, +/* */ +0x11,0xE0,0x5D,0x20,0x51,0x20,0x51,0xE0,0x7D,0x20,0x01,0x20,0x55,0xE0,0x55,0x40, +0x6D,0x50,0x45,0x20,0x7D,0xA0,0x05,0x10,0x00,0x00, +/* */ +0x11,0xE0,0x5C,0x80,0x53,0xE0,0x51,0x20,0x7D,0x20,0x03,0xF0,0x54,0x00,0x55,0xE0, +0x6D,0x20,0x45,0x20,0x7D,0xE0,0x05,0x20,0x00,0x00, +/* */ +0x11,0xF0,0x5D,0x10,0x51,0x10,0x51,0x10,0x7D,0xF0,0x00,0x40,0x55,0x40,0x55,0x70, +0x6D,0x40,0x45,0x40,0x7E,0xC0,0x04,0x70,0x00,0x00, +/* */ +0x11,0xF0,0x5D,0x10,0x51,0xF0,0x51,0x00,0x7D,0x70,0x01,0x20,0x55,0x50,0x55,0x70, +0x6D,0x20,0x45,0x70,0x7E,0x20,0x04,0xF0,0x00,0x00, +/* */ +0x1F,0xC0,0x10,0x40,0x1F,0xC0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0,0x22,0x20, +0x3F,0xE0,0x22,0x00,0x02,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x1F,0xC0,0x00,0x00,0x7F,0xE0,0x10,0x90,0x2F,0xF0,0x48,0x80,0x1F,0xC0,0x12,0x40, +0x1F,0xC0,0x12,0x50,0x1F,0xD0,0x01,0xF0,0x00,0x00, +/* */ +0x7D,0xF0,0x45,0x10,0x7D,0xF0,0x1F,0xC0,0x12,0x40,0x7F,0xF0,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x22,0x10,0x01,0xF0,0x00,0x00, +/* */ +0x09,0x00,0x08,0x80,0x1F,0xF0,0x11,0x00,0x31,0x00,0x5F,0xE0,0x11,0x00,0x11,0x00, +0x1F,0xE0,0x11,0x00,0x11,0x00,0x1F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x1F,0xF0,0x31,0x00,0x5F,0xE0,0x11,0x00,0x1F,0xE0,0x11,0x00,0x1F,0xF0, +0x12,0x00,0x7F,0xF0,0x02,0x00,0x02,0x00,0x00,0x00, +/* */ +0x08,0x80,0x1F,0xF0,0x31,0x00,0x5F,0xE0,0x11,0x00,0x1F,0xF0,0x10,0x00,0x3F,0xE0, +0x08,0x40,0x08,0xF0,0x10,0x10,0x20,0xE0,0x00,0x00, +/* */ +0x01,0x40,0x39,0x20,0x2B,0xF0,0x2A,0x40,0x3E,0x40,0x2B,0xF0,0x2A,0x40,0x3B,0xF0, +0x2A,0x40,0x2E,0x40,0x73,0xF0,0x02,0x00,0x00,0x00, +/* */ +0x20,0xA0,0x38,0x80,0x49,0xF0,0x29,0x40,0x13,0x40,0x29,0xF0,0x45,0x40,0x39,0x40, +0x29,0xF0,0x29,0x40,0x39,0x40,0x29,0xF0,0x00,0x00, +/* */ +0x3D,0xE0,0x25,0x20,0x3D,0xE0,0x25,0x20,0x3D,0xE0,0x08,0x80,0x1F,0xF0,0x31,0x00, +0x5F,0xE0,0x11,0x00,0x1F,0xF0,0x10,0x00,0x00,0x00, +/* */ +0x28,0x50,0x22,0x40,0x78,0xF0,0x56,0xA0,0x53,0xA0,0x7A,0xF0,0x52,0xA0,0x52,0xA0, +0x7A,0xF0,0x53,0xA0,0x52,0xA0,0x78,0xF0,0x00,0x00, +/* */ +0x3B,0xC0,0x12,0x40,0x13,0x40,0x1A,0xC0,0x62,0x50,0x05,0x30,0x18,0xC0,0x6F,0xB0, +0x02,0x00,0x3F,0xE0,0x12,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x08,0x80,0x28,0xA0,0x4A,0x90,0x05,0x00,0x18,0xC0,0x6F,0xB0, +0x02,0x00,0x3F,0xE0,0x12,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x27,0xE0,0x11,0x00,0x4F,0xF0,0x22,0x80,0x14,0x40,0x2A,0x20,0x45,0x00,0x1F,0xC0, +0x62,0x30,0x1F,0xC0,0x0A,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x10,0x60,0x7D,0x80,0x29,0x00,0x3D,0xF0,0x09,0x20,0x7A,0x20,0x0D,0x20,0x1F,0xC0, +0x62,0x30,0x1F,0xC0,0x0A,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x3C,0x80,0x14,0xF0,0x7F,0x20,0x2A,0xC0,0x5B,0x30,0x05,0x00,0x18,0xC0,0x6F,0xB0, +0x02,0x00,0x3F,0xE0,0x12,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x08,0x80,0x3E,0xF0,0x09,0x20,0x7E,0xA0,0x10,0x40,0x3E,0xA0,0x45,0x10,0x1F,0xC0, +0x62,0x30,0x1F,0xC0,0x0A,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x17,0xF0,0x42,0x20,0x27,0xF0,0x12,0xA0,0x22,0xB0,0x45,0x10,0x1F,0xC0, +0x62,0x30,0x1F,0xC0,0x0A,0x80,0x7F,0xF0,0x00,0x00, +/* */ +0x3C,0x40,0x25,0xF0,0x3C,0xA0,0x21,0xF0,0x3C,0x40,0x56,0xE0,0x1D,0x40,0x0F,0xC0, +0x72,0x30,0x1F,0xC0,0x0A,0x80,0x3F,0xE0,0x00,0x00, +/* */ +0x02,0x00,0x0D,0x80,0x70,0x70,0x1F,0xC0,0x0A,0x80,0x3F,0xE0,0x10,0x40,0x28,0xA0, +0x45,0x10,0x38,0xE0,0x55,0x50,0x7D,0xF0,0x00,0x00, +/* */ +0x21,0x40,0x39,0x20,0x49,0x00,0x13,0xF0,0x7D,0x40,0x55,0x40,0x7D,0x40,0x55,0x40, +0x7D,0x40,0x02,0x50,0x1A,0x50,0x64,0x30,0x00,0x00, +/* */ +0x21,0x00,0x38,0x80,0x4B,0xF0,0x11,0x00,0x7D,0x00,0x55,0xF0,0x7D,0x10,0x55,0x10, +0x7D,0x10,0x02,0x10,0x1A,0x10,0x64,0x60,0x00,0x00, +/* */ +0x20,0xA0,0x38,0x90,0x48,0x80,0x11,0xF0,0x7C,0x80,0x54,0xF0,0x7D,0x50,0x55,0x50, +0x7D,0x50,0x01,0x20,0x1A,0x50,0x60,0x90,0x00,0x00, +/* */ +0x20,0x00,0x39,0xF0,0x48,0x40,0x12,0x50,0x7D,0x50,0x55,0x60,0x7C,0x40,0x55,0xF0, +0x7C,0x40,0x00,0x40,0x1C,0x40,0x60,0x40,0x00,0x00, +/* */ +0x20,0x40,0x38,0x40,0x48,0x40,0x10,0x70,0x7C,0x40,0x54,0x40,0x7D,0xF0,0x55,0x10, +0x7D,0x10,0x01,0x10,0x1D,0xF0,0x61,0x10,0x00,0x00, +/* */ +0x20,0x40,0x38,0x70,0x48,0x40,0x10,0x40,0x7D,0xF0,0x55,0x10,0x7D,0x10,0x55,0xF0, +0x7D,0x10,0x01,0x00,0x1D,0x00,0x62,0x00,0x00,0x00, +/* */ +0x20,0x60,0x39,0xC0,0x48,0x40,0x10,0x40,0x7D,0xF0,0x54,0x40,0x7C,0x40,0x54,0xE0, +0x7D,0x50,0x00,0x40,0x1C,0x40,0x60,0x40,0x00,0x00, +/* */ +0x20,0xA0,0x38,0xA0,0x49,0x20,0x11,0xF0,0x7F,0x20,0x55,0x20,0x7D,0xA0,0x55,0x60, +0x7D,0x20,0x01,0x20,0x1D,0x20,0x61,0x60,0x00,0x00, +/* */ +0x12,0x40,0x7F,0xF0,0x48,0x10,0x1F,0x80,0x20,0x80,0x7F,0xE0,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x40,0x38,0x40,0x48,0x80,0x11,0x10,0x7D,0xF0,0x54,0x00,0x7D,0xF0,0x55,0x10, +0x7D,0x10,0x01,0x10,0x1D,0xF0,0x61,0x10,0x00,0x00, +/* */ +0x20,0x80,0x38,0x80,0x4B,0xE0,0x10,0x80,0x7C,0x80,0x57,0xF0,0x7C,0x00,0x54,0x80, +0x7F,0xE0,0x00,0x80,0x18,0x80,0x67,0xF0,0x00,0x00, +/* */ +0x20,0x40,0x38,0x40,0x4B,0xF0,0x10,0x40,0x7C,0x40,0x55,0xF0,0x7C,0x00,0x55,0xF0, +0x7D,0x10,0x01,0x10,0x1D,0xF0,0x61,0x10,0x00,0x00, +/* */ +0x20,0x40,0x38,0x40,0x4B,0xF0,0x10,0x80,0x7D,0xF0,0x57,0x10,0x7D,0xF0,0x55,0x10, +0x7D,0xF0,0x01,0x10,0x1D,0x10,0x61,0x30,0x00,0x00, +/* */ +0x20,0x00,0x3B,0xF0,0x48,0x80,0x11,0x00,0x7F,0xF0,0x55,0x50,0x7D,0x50,0x55,0x50, +0x7D,0x50,0x05,0x50,0x1D,0x50,0x64,0x30,0x00,0x00, +/* */ +0x20,0x80,0x38,0x40,0x4B,0xF0,0x11,0x20,0x7C,0xC0,0x55,0x20,0x7E,0x10,0x55,0x20, +0x7D,0x20,0x01,0x20,0x1D,0x20,0x62,0x20,0x00,0x00, +/* */ +0x21,0x00,0x38,0x80,0x4B,0xF0,0x10,0x00,0x7D,0x40,0x56,0x20,0x7D,0x50,0x55,0x40, +0x7D,0x40,0x00,0x80,0x1D,0x40,0x62,0x30,0x00,0x00, +/* */ +0x12,0x40,0x3F,0xE0,0x04,0x00,0x7F,0xF0,0x14,0x40,0x2F,0xA0,0x51,0x10,0x3F,0xC0, +0x12,0x40,0x1F,0xC0,0x12,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x00,0x3B,0xF0,0x48,0x10,0x13,0xF0,0x7C,0x10,0x57,0xF0,0x7C,0x20,0x57,0xF0, +0x7D,0x20,0x00,0xA0,0x1C,0x20,0x60,0x60,0x00,0x00, +/* */ +0x20,0x00,0x39,0xF0,0x48,0x40,0x11,0xF0,0x7D,0x50,0x55,0xF0,0x7D,0x50,0x55,0xF0, +0x7C,0x40,0x01,0x40,0x1C,0x80,0x61,0x70,0x00,0x00, +/* */ +0x20,0x00,0x3B,0xF0,0x48,0x00,0x17,0x70,0x7D,0x50,0x55,0x50,0x7D,0x50,0x57,0x70, +0x7D,0x50,0x05,0x50,0x1D,0x50,0x65,0x50,0x00,0x00, +/* */ +0x22,0x20,0x39,0x20,0x48,0xF0,0x10,0x40,0x7F,0xA0,0x55,0xF0,0x7D,0x20,0x55,0x20, +0x7D,0xF0,0x01,0x20,0x1B,0x20,0x64,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3A,0xF0,0x4A,0x90,0x12,0xD0,0x7E,0xA0,0x54,0xD0,0x7C,0x00,0x54,0x40, +0x7D,0xF0,0x00,0x40,0x1C,0x40,0x63,0xF0,0x00,0x00, +/* */ +0x20,0x20,0x3B,0xA0,0x4A,0xA0,0x12,0xF0,0x7E,0xA0,0x57,0xA0,0x7E,0xE0,0x56,0xA0, +0x7E,0xA0,0x03,0xA0,0x1A,0xA0,0x60,0x60,0x00,0x00, +/* */ +0x20,0x80,0x38,0xE0,0x49,0xA0,0x10,0x40,0x7C,0xA0,0x55,0x50,0x7C,0x40,0x55,0xF0, +0x7C,0x40,0x00,0xE0,0x1D,0x50,0x60,0xC0,0x00,0x00, +/* */ +0x20,0x30,0x39,0xC0,0x48,0x40,0x10,0x90,0x7D,0xE0,0x54,0x40,0x7C,0x90,0x55,0xF0, +0x7C,0x40,0x01,0x60,0x1A,0x50,0x60,0xC0,0x00,0x00, +/* */ +0x10,0x80,0x4A,0xA0,0x22,0x90,0x04,0x80,0x24,0xE0,0x4F,0x80,0x11,0x00,0x3F,0xC0, +0x12,0x40,0x1F,0xC0,0x12,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x38,0x40,0x4B,0xF0,0x12,0x10,0x7D,0xE0,0x54,0x00,0x7F,0xF0,0x55,0x40, +0x7D,0x40,0x01,0x40,0x1A,0x50,0x64,0x30,0x00,0x00, +/* */ +0x20,0x00,0x3F,0x70,0x4D,0x50,0x15,0x50,0x7F,0x50,0x55,0x50,0x7D,0x50,0x57,0x50, +0x7C,0x70,0x05,0x40,0x1E,0xC0,0x64,0x40,0x00,0x00, +/* */ +0x20,0x40,0x3B,0xF0,0x48,0x40,0x11,0xE0,0x7C,0x40,0x57,0xF0,0x7D,0x20,0x55,0xE0, +0x7D,0x20,0x01,0xE0,0x1D,0x20,0x61,0x60,0x00,0x00, +/* */ +0x20,0x80,0x39,0xE0,0x48,0x80,0x13,0xF0,0x7D,0x20,0x56,0x90,0x7C,0xE0,0x55,0x20, +0x7E,0xA0,0x00,0x40,0x1C,0xA0,0x63,0x10,0x00,0x00, +/* */ +0x20,0x00,0x3F,0x80,0x4D,0x70,0x15,0x50,0x7F,0x50,0x55,0x50,0x7F,0x50,0x55,0x50, +0x7D,0xA0,0x07,0x20,0x19,0x50,0x61,0x90,0x00,0x00, +/* */ +0x20,0xA0,0x38,0xA0,0x49,0xB0,0x10,0xA0,0x7C,0xA0,0x55,0xB0,0x7C,0xA0,0x54,0xA0, +0x7D,0xB0,0x00,0xA0,0x1C,0xA0,0x60,0xA0,0x00,0x00, +/* */ +0x21,0xE0,0x39,0x20,0x49,0xE0,0x11,0x20,0x7D,0xE0,0x54,0x00,0x7D,0x50,0x55,0x60, +0x7D,0xC0,0x01,0x50,0x1D,0x50,0x61,0xB0,0x00,0x00, +/* */ +0x21,0xE0,0x39,0x20,0x49,0xE0,0x11,0x20,0x7D,0xE0,0x54,0x00,0x7F,0xF0,0x56,0x10, +0x7F,0xF0,0x02,0x10,0x1B,0xF0,0x62,0x10,0x00,0x00, +/* */ +0x20,0x00,0x3F,0xF0,0x4C,0x90,0x14,0x90,0x7D,0xD0,0x54,0x90,0x7D,0xD0,0x55,0x50, +0x7D,0xD0,0x04,0x10,0x1F,0xF0,0x64,0x10,0x00,0x00, +/* */ +0x20,0x80,0x3B,0x60,0x4A,0x20,0x12,0x20,0x7F,0x60,0x56,0x20,0x7E,0x20,0x57,0xE0, +0x7D,0x40,0x01,0x40,0x1A,0x50,0x64,0x30,0x00,0x00, +/* */ +0x20,0x80,0x39,0x40,0x4A,0x20,0x15,0x10,0x7C,0x80,0x57,0xE0,0x7C,0x20,0x55,0x40, +0x7C,0x80,0x02,0x20,0x1D,0x50,0x61,0xC0,0x00,0x00, +/* */ +0x21,0xF0,0x39,0x10,0x49,0x50,0x11,0xF0,0x7D,0x50,0x55,0xF0,0x7D,0x10,0x55,0xF0, +0x7D,0xB0,0x01,0xF0,0x1D,0x10,0x62,0x70,0x00,0x00, +/* */ +0x20,0x00,0x3B,0xE0,0x48,0xA0,0x13,0x20,0x7D,0x20,0x57,0xE0,0x7D,0x60,0x57,0xE0, +0x7D,0x20,0x01,0x60,0x1B,0xD0,0x60,0x50,0x00,0x00, +/* */ +0x21,0x50,0x39,0x50,0x4A,0xA0,0x11,0x50,0x7D,0x50,0x54,0x00,0x7D,0xF0,0x55,0x50, +0x7D,0xF0,0x01,0x50,0x1D,0xF0,0x61,0x10,0x00,0x00, +/* */ +0x20,0x40,0x39,0xF0,0x48,0x40,0x10,0xA0,0x7D,0xF0,0x54,0xA0,0x7D,0xF0,0x55,0x10, +0x7D,0x50,0x01,0x50,0x1C,0xA0,0x61,0x10,0x00,0x00, +/* */ +0x20,0xA0,0x3A,0xA0,0x4F,0xF0,0x12,0xA0,0x7E,0xE0,0x56,0x00,0x7F,0xF0,0x54,0x80, +0x7F,0xF0,0x01,0xC0,0x1A,0xA0,0x64,0x90,0x00,0x00, +/* */ +0x27,0x70,0x3D,0x50,0x4F,0x70,0x10,0x00,0x7D,0xE0,0x54,0x00,0x7F,0xF0,0x55,0x00, +0x7D,0xE0,0x00,0x20,0x1C,0x20,0x60,0xC0,0x00,0x00, +/* */ +0x20,0xA0,0x3B,0x20,0x49,0x20,0x11,0x60,0x7F,0xB0,0x55,0x20,0x7D,0xA0,0x57,0x20, +0x7D,0x50,0x01,0x50,0x1D,0x50,0x61,0x80,0x00,0x00, +/* */ +0x21,0xF0,0x3A,0x00,0x49,0xE0,0x11,0x20,0x7D,0xE0,0x55,0x20,0x7D,0xE0,0x54,0x80, +0x7D,0xE0,0x03,0x20,0x18,0xC0,0x63,0x30,0x00,0x00, +/* */ +0x20,0x80,0x39,0xF0,0x49,0x10,0x11,0xF0,0x7D,0x10,0x55,0xF0,0x7C,0x00,0x55,0xF0, +0x7C,0x40,0x01,0xF0,0x1C,0x40,0x61,0xF0,0x00,0x00, +/* */ +0x20,0x40,0x39,0xF0,0x49,0x10,0x11,0xF0,0x7D,0x00,0x55,0xF0,0x7D,0x50,0x57,0x50, +0x7D,0xF0,0x01,0x50,0x1D,0x50,0x61,0x30,0x00,0x00, +/* */ +0x21,0xF0,0x39,0x50,0x48,0xA0,0x10,0x40,0x7D,0xB0,0x54,0x40,0x7D,0xF0,0x55,0x50, +0x7D,0xF0,0x00,0x40,0x1D,0xF0,0x60,0x10,0x00,0x00, +/* */ +0x08,0x80,0x3E,0xF0,0x09,0x20,0x7E,0xA0,0x14,0x40,0x2F,0xA0,0x51,0x10,0x3F,0xC0, +0x12,0x40,0x1F,0xC0,0x12,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x3B,0xD0,0x48,0xA0,0x13,0xF0,0x7C,0xA0,0x55,0xD0,0x7E,0x70,0x55,0xE0, +0x7D,0x20,0x01,0xE0,0x1D,0x20,0x61,0xE0,0x00,0x00, +/* */ +0x21,0xF0,0x39,0x10,0x49,0xF0,0x11,0x10,0x7D,0xF0,0x54,0x00,0x7D,0xB0,0x54,0x90, +0x7E,0xD0,0x01,0xB0,0x1A,0xD0,0x61,0xB0,0x00,0x00, +/* */ +0x27,0xF0,0x3D,0x50,0x4D,0x50,0x17,0xF0,0x7C,0x80,0x55,0xA0,0x7E,0x90,0x54,0x80, +0x7D,0xA0,0x02,0x90,0x18,0x80,0x60,0x80,0x00,0x00, +/* */ +0x20,0x30,0x3B,0xC0,0x49,0x50,0x10,0xA0,0x7D,0x00,0x55,0xF0,0x7E,0x40,0x54,0x40, +0x7D,0xF0,0x00,0x40,0x1D,0x50,0x61,0xF0,0x00,0x00, +/* */ +0x25,0x40,0x3F,0xC0,0x4D,0x40,0x17,0xF0,0x7A,0x50,0x57,0xD0,0x7A,0xD0,0x57,0xD0, +0x7A,0x50,0x07,0x50,0x1A,0x50,0x62,0xB0,0x00,0x00, +/* */ +0x27,0xF0,0x39,0x40,0x4F,0xF0,0x15,0x50,0x7F,0xF0,0x54,0x00,0x7D,0xE0,0x54,0x00, +0x7F,0xF0,0x02,0xA0,0x1C,0x90,0x61,0x80,0x00,0x00, +/* */ +0x21,0xF0,0x38,0x40,0x49,0xF0,0x11,0x50,0x7C,0x40,0x55,0xB0,0x7C,0x00,0x55,0xF0, +0x7C,0x10,0x01,0xF0,0x1C,0x10,0x61,0xF0,0x00,0x00, +/* */ +0x23,0xE0,0x3A,0x20,0x4B,0xE0,0x12,0x20,0x7F,0xF0,0x55,0x50,0x7F,0xF0,0x54,0x00, +0x7F,0xE0,0x02,0x20,0x19,0xC0,0x66,0x30,0x00,0x00, +/* */ +0x20,0x80,0x3E,0xF0,0x6B,0x20,0x3E,0xA0,0x2A,0x40,0x3F,0xA0,0x11,0x10,0x3F,0xC0, +0x12,0x40,0x1F,0xC0,0x12,0x40,0x7F,0xF0,0x00,0x00, +/* */ +0x20,0x40,0x3F,0xF0,0x4C,0x40,0x15,0xF0,0x7C,0x50,0x57,0xF0,0x7C,0x50,0x55,0xF0, +0x7D,0x50,0x05,0xF0,0x1D,0x50,0x69,0x30,0x00,0x00, +/* */ +0x20,0x00,0x3F,0xF0,0x4C,0x20,0x16,0xA0,0x7D,0x30,0x57,0xD0,0x7D,0x20,0x55,0x60, +0x7F,0xE0,0x05,0x20,0x1D,0x50,0x6A,0x90,0x00,0x00, +/* */ +0x21,0x10,0x3B,0xF0,0x48,0x40,0x11,0xF0,0x7C,0x40,0x57,0xF0,0x7D,0x50,0x57,0xF0, +0x7C,0x00,0x01,0xF0,0x1D,0x10,0x61,0xF0,0x00,0x00, +/* */ +0x22,0x20,0x3F,0xF0,0x49,0x40,0x17,0xF0,0x7D,0x50,0x56,0x70,0x7D,0x90,0x57,0xF0, +0x78,0x20,0x07,0xF0,0x1A,0x20,0x61,0x60,0x00,0x00, +/* */ +0x21,0x40,0x3F,0xF0,0x4D,0x50,0x17,0xF0,0x7D,0x50,0x57,0xF0,0x78,0x00,0x57,0xF0, +0x7A,0x20,0x03,0xE0,0x19,0x40,0x67,0xF0,0x00,0x00, +/* */ +0x28,0x00,0x7D,0xE0,0x29,0x20,0x39,0x20,0x11,0xE0,0x7D,0x20,0x55,0x20,0x7D,0x20, +0x11,0xE0,0x7C,0x00,0x10,0x00,0x13,0xF0,0x00,0x00, +/* */ +0x28,0x80,0x7C,0x80,0x2B,0xE0,0x3A,0xA0,0x12,0xA0,0x7E,0xA0,0x56,0xA0,0x7F,0xF0, +0x10,0x80,0x7D,0x40,0x11,0x40,0x12,0x20,0x00,0x00, +/* */ +0x2A,0x20,0x7D,0x20,0x28,0x20,0x38,0x70,0x13,0x20,0x7D,0x20,0x55,0x20,0x7D,0x50, +0x11,0x50,0x7D,0x90,0x11,0x00,0x12,0xF0,0x00,0x00, +/* */ +0x28,0x60,0x7F,0x80,0x28,0x80,0x3B,0xF0,0x11,0x40,0x7E,0x20,0x54,0x10,0x7D,0x20, +0x11,0x20,0x7D,0x20,0x11,0x20,0x12,0x20,0x00,0x00, +/* */ +0x29,0x00,0x7D,0xE0,0x2A,0x20,0x3C,0x40,0x11,0xF0,0x7D,0x50,0x55,0x50,0x7D,0xF0, +0x10,0xC0,0x7D,0x40,0x11,0x50,0x12,0x30,0x00,0x00, +/* */ +0x28,0xA0,0x7D,0xF0,0x28,0xA0,0x38,0x40,0x13,0xF0,0x7C,0x80,0x55,0x70,0x7F,0x10, +0x11,0x20,0x7D,0x70,0x11,0x20,0x11,0x60,0x00,0x00, +/* */ +0x29,0x00,0x7D,0xF0,0x2A,0x90,0x39,0xD0,0x10,0x10,0x7D,0xD0,0x54,0x10,0x7D,0xD0, +0x10,0x10,0x7D,0xD0,0x11,0x50,0x11,0xF0,0x00,0x00, +/* */ +0x29,0xE0,0x7C,0xA0,0x28,0x40,0x3B,0xF0,0x10,0xD0,0x7D,0x40,0x56,0xC0,0x7C,0x80, +0x13,0xF0,0x7D,0xC0,0x12,0xA0,0x14,0x90,0x00,0x00, +/* */ +0x28,0xA0,0x7D,0xF0,0x28,0xA0,0x3B,0xF0,0x10,0x40,0x7D,0xF0,0x55,0x50,0x7D,0xF0, +0x11,0x50,0x7F,0xF0,0x11,0x10,0x11,0x30,0x00,0x00, +/* */ +0x28,0xA0,0x7D,0xF0,0x28,0xA0,0x39,0xF0,0x10,0x80,0x7D,0xF0,0x57,0x50,0x7D,0xF0, +0x11,0x50,0x7D,0xF0,0x11,0x50,0x11,0x30,0x00,0x00, +/* */ +0x3C,0x40,0x24,0x40,0x24,0xA0,0x7E,0xA0,0x43,0x10,0x3C,0xA0,0x24,0xA0,0x3C,0xA0, +0x24,0xA0,0x3C,0xA0,0x24,0xA0,0x2D,0x20,0x00,0x00, +/* */ +0x3C,0xE0,0x24,0xA0,0x24,0xA0,0x7E,0xA0,0x43,0x30,0x3C,0x00,0x25,0xE0,0x3C,0xA0, +0x24,0xA0,0x3C,0x40,0x24,0xA0,0x2D,0x10,0x00,0x00, +/* */ +0x3C,0x40,0x24,0x40,0x24,0x40,0x7F,0xF0,0x42,0x40,0x3C,0x40,0x25,0xF0,0x3D,0x10, +0x25,0x10,0x3D,0x10,0x25,0xF0,0x2D,0x10,0x00,0x00, +/* */ +0x3C,0x40,0x24,0xF0,0x24,0x90,0x7E,0xD0,0x42,0x90,0x3C,0xB0,0x24,0x80,0x3C,0xF0, +0x24,0x10,0x3D,0xD0,0x24,0x10,0x2C,0x30,0x00,0x00, +/* */ +0x3C,0x30,0x25,0xC0,0x25,0x40,0x7F,0x40,0x43,0x40,0x3D,0xF0,0x25,0x40,0x3D,0x40, +0x25,0x40,0x3D,0x50,0x25,0xB0,0x2D,0x50,0x00,0x00, +/* */ +0x38,0x60,0x2B,0x80,0x2A,0x00,0x7E,0x00,0x47,0xF0,0x3A,0x00,0x2A,0x00,0x3A,0xF0, +0x2A,0x90,0x3A,0x90,0x2A,0xF0,0x2C,0x90,0x00,0x00, +/* */ +0x39,0x00,0x29,0xE0,0x2A,0x20,0x7D,0x20,0x44,0xC0,0x39,0x20,0x2A,0x10,0x39,0xE0, +0x29,0x20,0x39,0x20,0x29,0xE0,0x29,0x20,0x00,0x00, +/* */ +0x3B,0xE0,0x2A,0xA0,0x2B,0xE0,0x7E,0xA0,0x47,0xE0,0x38,0x80,0x2B,0xF0,0x38,0x80, +0x29,0xC0,0x3A,0xA0,0x2C,0x90,0x28,0x80,0x00,0x00, +/* */ +0x3C,0x40,0x24,0x80,0x25,0xF0,0x7F,0x50,0x43,0xF0,0x3D,0x50,0x25,0xF0,0x3C,0x80, +0x25,0x40,0x3F,0xF0,0x24,0x40,0x2C,0x40,0x00,0x00, +/* */ +0x3D,0x50,0x24,0x40,0x25,0xF0,0x7E,0xE0,0x43,0x50,0x3C,0x40,0x24,0x80,0x3F,0xF0, +0x24,0xA0,0x3D,0x20,0x24,0xC0,0x2D,0x20,0x00,0x00, +/* */ +0x38,0x40,0x2B,0xF0,0x2A,0x90,0x7C,0xE0,0x45,0x20,0x38,0xC0,0x2B,0x30,0x38,0x00, +0x29,0xE0,0x39,0x20,0x29,0xE0,0x29,0x20,0x00,0x00, +/* */ +0x38,0x80,0x2B,0xF0,0x2A,0x10,0x7D,0x40,0x47,0xF0,0x39,0x40,0x2B,0xE0,0x3A,0x20, +0x2A,0xA0,0x3A,0xA0,0x29,0x50,0x2A,0x30,0x00,0x00, +/* */ +0x38,0x80,0x2B,0xF0,0x2A,0x10,0x7D,0xC0,0x45,0x00,0x39,0xF0,0x29,0x40,0x39,0x40, +0x2B,0xF0,0x38,0x00,0x29,0x20,0x2A,0x10,0x00,0x00, +/* */ +0x3D,0xF0,0x25,0x50,0x25,0xF0,0x7E,0x80,0x43,0xF0,0x3E,0x50,0x25,0xF0,0x3D,0x50, +0x25,0xF0,0x3C,0x50,0x25,0xF0,0x2C,0x30,0x00,0x00, +/* */ +0x10,0x40,0x20,0x40,0x7C,0xE0,0x54,0x40,0x7D,0xF0,0x54,0x40,0x7C,0xE0,0x15,0x50, +0x2A,0x40,0x2E,0x40,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x10,0xA0,0x20,0x80,0x7D,0xF0,0x54,0x80,0x7C,0xF0,0x54,0x90,0x7D,0x50,0x15,0x20, +0x2A,0x50,0x2E,0x80,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x3F,0xF0,0x21,0x20,0x3F,0xF0,0x24,0x40,0x39,0x30,0x2F,0xE0,0x29,0x20,0x2F,0xE0, +0x2A,0x20,0x2F,0xE0,0x25,0x50,0x58,0xF0,0x00,0x00, +/* */ +0x17,0xF0,0x21,0x40,0x7D,0x40,0x57,0xF0,0x7D,0x50,0x55,0x50,0x7E,0xB0,0x14,0x10, +0x2A,0x30,0x2E,0x00,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x11,0x50,0x20,0x40,0x7D,0xF0,0x55,0x10,0x7D,0xF0,0x55,0x10,0x7D,0xF0,0x15,0x10, +0x2B,0x30,0x2E,0x00,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x00,0x27,0xF0,0x7D,0x50,0x57,0xF0,0x7C,0x90,0x57,0xF0,0x7D,0x10,0x15,0xD0, +0x2A,0x30,0x2E,0x00,0x28,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x10,0x40,0x21,0xF0,0x7C,0xA0,0x55,0x50,0x7D,0xB0,0x55,0xF0,0x7C,0x40,0x15,0xF0, +0x2B,0x50,0x2F,0x70,0x29,0x10,0x47,0xF0,0x00,0x00, +/* */ +0x20,0x80,0x21,0x40,0x4A,0x20,0x7C,0x90,0x13,0xE0,0x22,0x20,0x4B,0xE0,0x7A,0x20, +0x0B,0xE0,0x12,0x50,0x23,0x20,0x42,0x10,0x00,0x00, +/* */ +0x3F,0xF0,0x22,0x40,0x3F,0xF0,0x24,0x40,0x39,0x30,0x26,0xC0,0x39,0x30,0x2F,0xE0, +0x29,0x20,0x2F,0xE0,0x29,0x40,0x4C,0xF0,0x00,0x00, +/* */ +0x7C,0x80,0x21,0x40,0x3A,0xA0,0x69,0x50,0x12,0xA0,0x65,0x40,0x1A,0xC0,0x7F,0xF0, +0x12,0x40,0x1F,0xD0,0x10,0xA0,0x18,0x70,0x00,0x00, +/* */ +0x38,0xE0,0x28,0x80,0x7F,0xF0,0x12,0x90,0x3A,0xE0,0x0D,0x30,0x1A,0xC0,0x7F,0xF0, +0x12,0x40,0x1F,0xD0,0x10,0xA0,0x18,0x70,0x00,0x00, +/* */ +0x02,0x00,0x7F,0xF0,0x12,0x40,0x27,0xF0,0x7A,0x40,0x13,0xF0,0x65,0x00,0x1A,0xC0, +0x7F,0xB0,0x12,0x80,0x1F,0x80,0x18,0xE0,0x00,0x00, +/* */ +0x3E,0x10,0x20,0x20,0x3C,0x40,0x20,0x80,0x3C,0x10,0x20,0x20,0x7E,0x40,0x10,0x80, +0x24,0x10,0x42,0x20,0x7E,0x40,0x01,0x80,0x00,0x00, +/* */ +0x3C,0x40,0x20,0x80,0x3D,0x20,0x20,0x40,0x7E,0x90,0x24,0x20,0x7E,0x40,0x00,0x00, +0x7F,0xF0,0x08,0x80,0x10,0x90,0x60,0x70,0x00,0x00, +/* */ +0x24,0x20,0x28,0x40,0x7E,0x90,0x24,0x20,0x7E,0x40,0x03,0x80,0x3C,0x00,0x07,0x80, +0x3C,0x00,0x07,0xC0,0x7C,0x10,0x03,0xF0,0x00,0x00, +/* */ +0x28,0x10,0x7E,0xE0,0x24,0x10,0x7E,0xE0,0x02,0x00,0x3F,0xE0,0x22,0x20,0x3F,0xE0, +0x22,0x20,0x7F,0xF0,0x20,0x20,0x20,0x60,0x00,0x00, +/* */ +0x24,0x20,0x28,0x40,0x7E,0x90,0x24,0x20,0x7E,0x40,0x00,0x00,0x7F,0xF0,0x10,0x10, +0x20,0x30,0x5F,0xE0,0x10,0x20,0x1F,0xE0,0x00,0x00, +/* */ +0x28,0x10,0x7E,0xE0,0x24,0x10,0x7E,0xE0,0x02,0x00,0x7F,0xF0,0x02,0x00,0x3F,0xE0, +0x00,0x00,0x3F,0xE0,0x20,0x20,0x3F,0xE0,0x00,0x00, +/* */ +0x3C,0x40,0x20,0x80,0x3D,0x20,0x20,0x40,0x7E,0x90,0x24,0x20,0x7E,0x40,0x08,0x90, +0x2E,0xA0,0x28,0xC0,0x2E,0x90,0x70,0x70,0x00,0x00, +/* */ +0x24,0x20,0x28,0x40,0x7E,0x90,0x24,0x20,0x7E,0x40,0x08,0x80,0x10,0x80,0x37,0xF0, +0x51,0xC0,0x12,0xA0,0x14,0x90,0x10,0x80,0x00,0x00, +/* */ +0x28,0x10,0x7E,0xE0,0x24,0x10,0x7E,0xE0,0x00,0x00,0x12,0x40,0x7F,0xF0,0x08,0x80, +0x1F,0xC0,0x68,0xB0,0x09,0xA0,0x07,0xE0,0x00,0x00, +/* */ +0x28,0x10,0x7E,0xE0,0x24,0x10,0x7E,0xE0,0x08,0x00,0x30,0x40,0x11,0x50,0x7D,0x60, +0x11,0x40,0x38,0x40,0x54,0xA0,0x11,0x10,0x00,0x00, +/* */ +0x24,0x20,0x28,0x40,0x7E,0x90,0x24,0x20,0x7E,0x40,0x02,0x00,0x3F,0xE0,0x28,0x20, +0x0F,0xC0,0x08,0x80,0x7F,0xF0,0x10,0x40,0x00,0x00, +/* */ +0x24,0x20,0x28,0x40,0x7E,0x90,0x24,0x20,0x7E,0x40,0x00,0x00,0x3F,0xE0,0x25,0x20, +0x7F,0xF0,0x0A,0x40,0x19,0x80,0x6C,0x70,0x00,0x00, +/* */ +0x24,0x20,0x28,0x40,0x7E,0x90,0x24,0x20,0x7E,0x40,0x12,0x40,0x24,0x80,0x3F,0xE0, +0x22,0x40,0x3B,0x50,0x22,0x30,0x33,0x10,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3E,0xF0,0x2D,0x60,0x34,0x50,0x20,0x00,0x22,0x80, +0x24,0x80,0x29,0x00,0x22,0x20,0x47,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3E,0xF0,0x2D,0x60,0x34,0xD0,0x27,0x00,0x21,0xC0, +0x27,0x00,0x21,0xE0,0x2F,0x10,0x40,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x40,0x3E,0xF0,0x2D,0x60,0x34,0x50,0x24,0x40,0x2F,0x80, +0x22,0x20,0x3F,0xF0,0x29,0x20,0x53,0x10,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x80,0x3F,0xE0,0x24,0xA0,0x3F,0xE0,0x28,0x90,0x2E,0xF0, +0x20,0x00,0x27,0x80,0x24,0xA0,0x48,0x60,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x80,0x3F,0xE0,0x24,0xA0,0x3F,0xE0,0x20,0x20,0x2F,0xC0, +0x21,0x00,0x3F,0xF0,0x25,0x40,0x59,0x30,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x80,0x3F,0xE0,0x24,0xA0,0x3F,0xE0,0x21,0x00,0x2F,0xE0, +0x21,0x00,0x2F,0xE0,0x21,0x00,0x5F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x80,0x3F,0xE0,0x24,0xA0,0x3F,0xE0,0x20,0x00,0x29,0x20, +0x25,0x40,0x3F,0xF0,0x25,0x40,0x49,0x20,0x00,0x00, +/* */ +0x08,0xA0,0x3E,0xA0,0x29,0xF0,0x3E,0xA0,0x2A,0xE0,0x3E,0xA0,0x28,0xE0,0x2C,0xA0, +0x29,0xF0,0x2A,0x00,0x2C,0xA0,0x49,0x10,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x80,0x3F,0xE0,0x24,0xA0,0x3F,0xE0,0x26,0xC0,0x3B,0xB0, +0x21,0x00,0x2F,0xE0,0x25,0x40,0x5F,0xF0,0x00,0x00, +/* */ +0x01,0x00,0x3F,0xF0,0x24,0x80,0x3F,0xE0,0x24,0xA0,0x3F,0xE0,0x2A,0x20,0x2E,0xF0, +0x2A,0x20,0x3E,0xA0,0x2A,0x20,0x56,0x60,0x00,0x00, +/* */ +0x12,0x50,0x7D,0x60,0x53,0xF0,0x7D,0x60,0x56,0x50,0x7D,0x20,0x51,0xF0,0x5A,0xA0, +0x52,0xA0,0x55,0x70,0x59,0x20,0x12,0x20,0x00,0x00, +/* */ +0x09,0x40,0x11,0x20,0x31,0x70,0x57,0x80,0x10,0x50,0x3F,0xF0,0x22,0x20,0x2A,0xA0, +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x25,0x20,0x00,0x00, +/* */ +0x7C,0x40,0x54,0x40,0x7D,0x50,0x55,0x50,0x7D,0x50,0x11,0xF0,0x7C,0x40,0x11,0x50, +0x1D,0x50,0x61,0x50,0x15,0xF0,0x54,0x10,0x00,0x00, +/* */ +0x7D,0x40,0x56,0x40,0x7E,0xF0,0x55,0x50,0x7F,0x50,0x11,0x50,0x7A,0x50,0x15,0x50, +0x1F,0x50,0x60,0x90,0x14,0x90,0x55,0x60,0x00,0x00, +/* */ +0x7C,0x40,0x54,0x40,0x7D,0xF0,0x54,0x40,0x7C,0x40,0x11,0xF0,0x7C,0x00,0x11,0xF0, +0x1D,0x10,0x61,0x10,0x15,0xF0,0x55,0x10,0x00,0x00, +/* */ +0x7C,0x80,0x54,0xE0,0x7D,0x20,0x54,0xA0,0x7C,0x40,0x10,0xA0,0x7D,0x70,0x10,0x90, +0x1D,0x50,0x60,0x20,0x14,0x40,0x55,0x80,0x00,0x00, +/* */ +0x7C,0x80,0x55,0x20,0x7D,0xF0,0x54,0x10,0x7D,0x20,0x12,0x90,0x7C,0xE0,0x11,0x20, +0x1E,0xA0,0x60,0x40,0x14,0xA0,0x55,0x10,0x00,0x00, +/* */ +0x7C,0x40,0x55,0xF0,0x7C,0x40,0x55,0xF0,0x7C,0x10,0x10,0xA0,0x7D,0x60,0x10,0xA0, +0x1D,0xF0,0x60,0x40,0x14,0xA0,0x55,0x10,0x00,0x00, +/* */ +0x3D,0x00,0x09,0xF0,0x7E,0x50,0x2A,0x90,0x49,0x30,0x3F,0xE0,0x22,0x20,0x2A,0xA0, +0x3F,0xE0,0x02,0x00,0x7F,0xF0,0x25,0x20,0x00,0x00, +/* */ +0x7C,0x80,0x54,0x40,0x7D,0xF0,0x54,0x00,0x7D,0xF0,0x11,0x10,0x7D,0x10,0x11,0xF0, +0x1C,0x40,0x61,0x60,0x16,0x50,0x54,0xC0,0x00,0x00, +/* */ +0x7C,0x40,0x54,0xA0,0x7D,0xF0,0x54,0x40,0x7D,0xF0,0x10,0xA0,0x7D,0x50,0x10,0xA0, +0x1C,0x40,0x61,0x90,0x14,0x60,0x55,0x80,0x00,0x00, +/* */ +0x7C,0x40,0x55,0xF0,0x7D,0x10,0x54,0xA0,0x7D,0xF0,0x10,0x00,0x7D,0xF0,0x11,0x10, +0x1D,0xF0,0x61,0x10,0x15,0xF0,0x55,0x10,0x00,0x00, +/* */ +0x2C,0xA0,0x44,0xA0,0x6D,0x10,0x45,0x10,0x7E,0x00,0x01,0xF0,0x54,0x90,0x7C,0x90, +0x54,0x90,0x7D,0x10,0x55,0x10,0x6A,0x60,0x00,0x00, +/* */ +0x2C,0x40,0x44,0x40,0x6C,0x40,0x45,0xF0,0x7D,0x50,0x01,0x50,0x55,0xF0,0x7D,0x50, +0x55,0x50,0x7D,0x50,0x55,0xF0,0x6B,0x10,0x00,0x00, +/* */ +0x2D,0xF0,0x44,0x40,0x6D,0xE0,0x44,0xA0,0x7C,0xA0,0x01,0xF0,0x54,0x00,0x7D,0xE0, +0x55,0x20,0x7D,0x20,0x55,0xE0,0x6B,0x20,0x00,0x00, +/* */ +0x2D,0xE0,0x45,0x20,0x6D,0xE0,0x45,0x20,0x7F,0xF0,0x02,0x10,0x54,0x80,0x7D,0xF0, +0x54,0xA0,0x7D,0x20,0x54,0xC0,0x6B,0x30,0x00,0x00, +/* */ +0x2C,0x70,0x47,0x80,0x6D,0x50,0x44,0x80,0x7D,0x20,0x01,0xC0,0x54,0x90,0x7D,0xF0, +0x54,0x40,0x7D,0xF0,0x54,0xA0,0x6B,0x10,0x00,0x00, +/* */ +0x11,0x00,0x39,0x00,0x29,0x00,0x7F,0xC0,0x55,0x40,0x7D,0x40,0x55,0x40,0x7D,0x40, +0x01,0x40,0x7D,0x50,0x2A,0x50,0x4C,0x30,0x00,0x00, +/* */ +0x08,0x00,0x1C,0xE0,0x14,0x40,0x3E,0x40,0x2A,0x40,0x3E,0x40,0x2B,0xF0,0x3E,0x40, +0x00,0x40,0x7F,0x40,0x14,0x40,0x24,0x40,0x00,0x00, +/* */ +0x10,0x40,0x3B,0xF0,0x28,0xE0,0x7D,0x50,0x56,0x40,0x7D,0xF0,0x55,0x10,0x7D,0xF0, +0x01,0x10,0x7D,0xF0,0x28,0x00,0x4B,0xF0,0x00,0x00, +}; + + +static px_uchar const AsciiLib[95][16] = { + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/ + + {0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00},/*"!",1*/ + + {0x00,0x00,0x00,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/ + + {0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,0x36,0x7F,0x36,0x36,0x00,0x00,0x00,0x00},/*"#",3*/ + + {0x00,0x18,0x18,0x3C,0x66,0x60,0x30,0x18,0x0C,0x06,0x66,0x3C,0x18,0x18,0x00,0x00},/*"$",4*/ + + {0x00,0x00,0x70,0xD8,0xDA,0x76,0x0C,0x18,0x30,0x6E,0x5B,0x1B,0x0E,0x00,0x00,0x00},/*"%",5*/ + + {0x00,0x00,0x00,0x38,0x6C,0x6C,0x38,0x60,0x6F,0x66,0x66,0x3B,0x00,0x00,0x00,0x00},/*"&",6*/ + + {0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/ + + {0x00,0x00,0x00,0x0C,0x18,0x18,0x30,0x30,0x30,0x30,0x30,0x18,0x18,0x0C,0x00,0x00},/*"(",8*/ + + {0x00,0x00,0x00,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x18,0x30,0x00,0x00},/*")",9*/ + + {0x00,0x00,0x00,0x00,0x00,0x36,0x1C,0x7F,0x1C,0x36,0x00,0x00,0x00,0x00,0x00,0x00},/*"*",10*/ + + {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00},/*"+",11*/ + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x0C,0x18,0x00,0x00},/*",",12*/ + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/ + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00},/*".",14*/ + + {0x00,0x00,0x00,0x06,0x06,0x0C,0x0C,0x18,0x18,0x30,0x30,0x60,0x60,0x00,0x00,0x00},/*"/",15*/ + + {0x00,0x00,0x00,0x1E,0x33,0x37,0x37,0x33,0x3B,0x3B,0x33,0x1E,0x00,0x00,0x00,0x00},/*"0",16*/ + + {0x00,0x00,0x00,0x0C,0x1C,0x7C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00},/*"1",17*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x00,0x00},/*"2",18*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x1C,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"3",19*/ + + {0x00,0x00,0x00,0x30,0x30,0x36,0x36,0x36,0x66,0x7F,0x06,0x06,0x00,0x00,0x00,0x00},/*"4",20*/ + + {0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00},/*"5",21*/ + + {0x00,0x00,0x00,0x1C,0x18,0x30,0x7C,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"6",22*/ + + {0x00,0x00,0x00,0x7E,0x06,0x0C,0x0C,0x18,0x18,0x30,0x30,0x30,0x00,0x00,0x00,0x00},/*"7",23*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x76,0x3C,0x6E,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"8",24*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3E,0x0C,0x18,0x38,0x00,0x00,0x00,0x00},/*"9",25*/ + + {0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00},/*":",26*/ + + {0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x1C,0x1C,0x0C,0x18,0x00,0x00},/*";",27*/ + + {0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00},/*"<",28*/ + + {0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"=",29*/ + + {0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00},/*">",30*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x0C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00},/*"?",31*/ + + {0x00,0x00,0x00,0x7E,0xC3,0xC3,0xCF,0xDB,0xDB,0xCF,0xC0,0x7F,0x00,0x00,0x00,0x00},/*"@",32*/ + + {0x00,0x00,0x00,0x18,0x3C,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"A",33*/ + + {0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},/*"B",34*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x60,0x60,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"C",35*/ + + {0x00,0x00,0x00,0x78,0x6C,0x66,0x66,0x66,0x66,0x66,0x6C,0x78,0x00,0x00,0x00,0x00},/*"D",36*/ + + {0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00},/*"E",37*/ + + {0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00},/*"F",38*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x60,0x6E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},/*"G",39*/ + + {0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"H",40*/ + + {0x00,0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00},/*"I",41*/ + + {0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"J",42*/ + + {0x00,0x00,0x00,0x66,0x66,0x6C,0x6C,0x78,0x6C,0x6C,0x66,0x66,0x00,0x00,0x00,0x00},/*"K",43*/ + + {0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00},/*"L",44*/ + + {0x00,0x00,0x00,0x63,0x63,0x77,0x6B,0x6B,0x6B,0x63,0x63,0x63,0x00,0x00,0x00,0x00},/*"M",45*/ + + {0x00,0x00,0x00,0x63,0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x63,0x00,0x00,0x00,0x00},/*"N",46*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"O",47*/ + + {0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00},/*"P",48*/ + + {0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x0C,0x06,0x00,0x00},/*"Q",49*/ + + {0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,0x6C,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"R",50*/ + + {0x00,0x00,0x00,0x3C,0x66,0x60,0x30,0x18,0x0C,0x06,0x66,0x3C,0x00,0x00,0x00,0x00},/*"S",51*/ + + {0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00},/*"T",52*/ + + {0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"U",53*/ + + {0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00},/*"V",54*/ + + {0x00,0x00,0x00,0x63,0x63,0x63,0x6B,0x6B,0x6B,0x36,0x36,0x36,0x00,0x00,0x00,0x00},/*"W",55*/ + + {0x00,0x00,0x00,0x66,0x66,0x34,0x18,0x18,0x2C,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"X",56*/ + + {0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00},/*"Y",57*/ + + {0x00,0x00,0x00,0x7E,0x06,0x06,0x0C,0x18,0x30,0x60,0x60,0x7E,0x00,0x00,0x00,0x00},/*"Z",58*/ + + {0x00,0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00},/*"[",59*/ + + {0x00,0x00,0x00,0x60,0x60,0x30,0x30,0x18,0x18,0x0C,0x0C,0x06,0x06,0x00,0x00,0x00},/*"\",60*/ + + {0x00,0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00},/*"]",61*/ + + {0x00,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/ + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00},/*"_",63*/ + + {0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",64*/ + + {0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x06,0x3E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},/*"a",65*/ + + {0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},/*"b",66*/ + + {0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x60,0x60,0x60,0x66,0x3C,0x00,0x00,0x00,0x00},/*"c",67*/ + + {0x00,0x00,0x00,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},/*"d",68*/ + + {0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x7E,0x60,0x60,0x3C,0x00,0x00,0x00,0x00},/*"e",69*/ + + {0x00,0x00,0x00,0x1E,0x30,0x30,0x30,0x7E,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00},/*"f",70*/ + + {0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,0x7C,0x00},/*"g",71*/ + + {0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"h",72*/ + + {0x00,0x00,0x18,0x18,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00},/*"i",73*/ + + {0x00,0x00,0x0C,0x0C,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x78,0x00},/*"j",74*/ + + {0x00,0x00,0x00,0x60,0x60,0x66,0x66,0x6C,0x78,0x6C,0x66,0x66,0x00,0x00,0x00,0x00},/*"k",75*/ + + {0x00,0x00,0x00,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00},/*"l",76*/ + + {0x00,0x00,0x00,0x00,0x00,0x7E,0x6B,0x6B,0x6B,0x6B,0x6B,0x63,0x00,0x00,0x00,0x00},/*"m",77*/ + + {0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},/*"n",78*/ + + {0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},/*"o",79*/ + + {0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x00},/*"p",80*/ + + {0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x00},/*"q",81*/ + + {0x00,0x00,0x00,0x00,0x00,0x66,0x6E,0x70,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00},/*"r",82*/ + + {0x00,0x00,0x00,0x00,0x00,0x3E,0x60,0x60,0x3C,0x06,0x06,0x7C,0x00,0x00,0x00,0x00},/*"s",83*/ + + {0x00,0x00,0x00,0x30,0x30,0x7E,0x30,0x30,0x30,0x30,0x30,0x1E,0x00,0x00,0x00,0x00},/*"t",84*/ + + {0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},/*"u",85*/ + + {0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00},/*"v",86*/ + + {0x00,0x00,0x00,0x00,0x00,0x63,0x6B,0x6B,0x6B,0x6B,0x36,0x36,0x00,0x00,0x00,0x00},/*"w",87*/ + + {0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x3C,0x18,0x3C,0x66,0x66,0x00,0x00,0x00,0x00},/*"x",88*/ + + {0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x0C,0x18,0xF0,0x00},/*"y",89*/ + + {0x00,0x00,0x00,0x00,0x00,0x7E,0x06,0x0C,0x18,0x30,0x60,0x7E,0x00,0x00,0x00,0x00},/*"z",90*/ + + {0x00,0x00,0x00,0x0C,0x18,0x18,0x18,0x30,0x60,0x30,0x18,0x18,0x18,0x0C,0x00,0x00},/*"{",91*/ + + {0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00},/*"|",92*/ + + {0x00,0x00,0x00,0x30,0x18,0x18,0x18,0x0C,0x06,0x0C,0x18,0x18,0x18,0x30,0x00,0x00},/*"}",93*/ + + {0x00,0x00,0x00,0x71,0xDB,0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/ +}; + +px_void PX_GetASCIICode(px_uchar* pBuffer,px_uchar ASCII) +{ + if(ASCII-32<95) + PX_memcpy(pBuffer,(px_void *)AsciiLib[(ASCII - 32)] ,16); + else + PX_memset(pBuffer,0xff,16); +} + + +px_void PX_GetGBKCode(px_uchar* pBuffer,px_uchar * c) +{ + px_uchar High8bit,Low8bit; + High8bit=*c; + Low8bit=*(c+1); + + if(((High8bit-0xb0)*94+Low8bit-0xa1)*26+25> (15-j) ) & 0x01 ) + { + PX_SurfaceDrawPixel(psurface,x+j,y+i,Color); + } + } + } +} + +px_void PX_FontDrawASCII(px_surface *psurface, px_int x,px_int y,px_uchar ASCI,px_color Color ) +{ + unsigned short i, j; + px_uchar buffer[16], tmp_char; + + if (ASCI==' ') + { + return; + } + PX_GetASCIICode(buffer,ASCI); + + for( i=0; i<16; i++ ) + { + tmp_char = buffer[i]; + for( j=0; j<8; j++ ) + { + if( (tmp_char >> (7 - j)) & 0x01 ) + { + PX_SurfaceDrawPixel(psurface,x+j,y+i,Color); + } + } + } +} + +px_void PX_FontDrawText(px_surface *psurface,px_int x,px_int y,const px_char *Text,px_color Color,PX_FONT_ALIGN align) +{ + px_uchar TempChar; + px_int resX=x,dx=0,dy=0; + px_int xlen=0; + const px_char *CalcText=Text; + switch(align) + { + case PX_FONT_ALIGN_XCENTER: + case PX_FONT_ALIGN_XRIGHT: + { + while(*CalcText!=0) + { + if (*CalcText=='\r'||*CalcText=='\n') + { + dy+=__PX_FONT_HEIGHT+4; + dx=resX; + CalcText++; + if (dx>xlen) + { + xlen=dx; + } + continue; + } + + if((*CalcText)&0x80) + { + //Offset 2 byte + CalcText+=2; + //x Offset + dx += __PX_FONT_GBKSIZE; + if (dx>xlen) + { + xlen=dx; + } + continue; + } + + if (*CalcText==' ') + { + CalcText++; + dx += __PX_FONT_ASCSIZE; + if (dx>xlen) + { + xlen=dx; + } + continue; + } + + if (!((*CalcText)&0x80)) + { + TempChar = *CalcText++; + dx += __PX_FONT_ASCSIZE; + if (dx>xlen) + { + xlen=dx; + } + continue; + } + + } + if (align==PX_FONT_ALIGN_XCENTER) + { + x-=xlen/2; + } + if (align==PX_FONT_ALIGN_XRIGHT) + { + x-=xlen; + } + } + break; + case PX_FONT_ALIGN_XLEFT: + default: + break; + } + + while(*Text!=0) + { + if (*Text=='\r'||*Text=='\n') + { + y+=__PX_FONT_HEIGHT+4; + x=resX; + Text++; + continue; + } + + if((*Text)&0x80) + { + //Draw GBK + PX_FontDrawGBK(psurface,x,y,(px_uchar *)Text,Color); + //Offset 2 byte + Text+=2; + //x Offset + x += __PX_FONT_GBKSIZE; + continue; + } + + if (*Text==' ') + { + Text++; + x += __PX_FONT_ASCSIZE; + + continue; + } + + if (!((*Text)&0x80)) + { + TempChar = *Text++; + PX_FontDrawASCII(psurface, x, y, TempChar, Color); + x += __PX_FONT_ASCSIZE; + continue; + } + } +} + +px_void PX_FontDrawChar(px_surface *psurface,int x,int y,const px_char *Text,px_color Color) +{ + px_uchar TempChar; + + if(*Text!=0) + { + if (*Text=='\r'||*Text=='\n'||*Text==' ') + { + return; + } + + if((*Text)&0x80) + { + //Draw GBK + PX_FontDrawGBK(psurface,x,y,(px_uchar *)Text,Color); + } + + if (!((*Text)&0x80)) + { + TempChar = *Text++; + PX_FontDrawASCII(psurface, x, y, TempChar, Color); + x += __PX_FONT_ASCSIZE; + } + } +} + +px_int PX_GetFontTextPixelsWidth( px_char *Text ) +{ + px_int Size=0; + while((*Text)) + { + if ((*Text)&0x80) + { + Size+=__PX_FONT_GBKSIZE; + Text+=2; + } + else + { + Size+=__PX_FONT_ASCSIZE; + Text++; + } + } + return Size; +} + + +px_void PX_FontModule_atow(const char *a,px_word *w) +{ + while (*a) + { + *w++=*a++; + } + *w=0; +} + + +px_void PX_FontModule_wastrcat(px_word *src,const px_char *cat) +{ + px_int len=PX_strlen(cat); + while(*src)src++; + while(len--)*src++=*cat++; + *src='\0'; +} + +px_bool PX_FontModuleInitialize(px_memorypool *mp,PX_FontModule *module) +{ + module->mp=mp; + module->xspacer=__PX_FONT_MODULE_XSPACE_SIZE; + module->yspacer=__PX_FONT_MODULE_YSPACE_SIZE; + return PX_MapInit(mp,&module->characters_map); +} + +px_bool PX_FontModuleLoad(PX_FontModule *module,px_byte *buffer,px_int size) +{ + px_int offset=0; + PX_FontModule_Charactor *cpy; + while (offsetc_magic[0]!='P') + goto _ERROR; + if(pcHeader->c_magic[1]!='X') + goto _ERROR; + if(pcHeader->c_magic[2]!='F') + goto _ERROR; + if(pcHeader->c_magic[3]!='M') + goto _ERROR; + + PX_itoa(pcHeader->charactor_code,hex,sizeof(hex),16); + if (PX_MapGet(&module->characters_map,hex)) + { + offset+=pcHeader->Font_Width*pcHeader->Font_Height; + continue; + } + + cpy=(PX_FontModule_Charactor *)MP_Malloc(module->mp,sizeof(PX_FontModule_Charactor)); + + if (!cpy) + { + goto _ERROR; + } + + PX_memcpy(cpy,pcHeader,sizeof(PX_FontModule_Charactor_Header)); + + if(!PX_ShapeCreate(module->mp,&cpy->shape,cpy->header.Font_Width,cpy->header.Font_Height)) + { + goto _ERROR; + } + PX_memcpy(cpy->shape.alpha,pData,cpy->header.Font_Width*cpy->header.Font_Height); + offset+=cpy->header.Font_Width*cpy->header.Font_Height; + PX_MapPut(&module->characters_map,hex,cpy); + } + return PX_TRUE; +_ERROR: + PX_FontModuleFree(module); + return PX_FALSE; +} + +px_void PX_FontModuleFree(PX_FontModule *module) +{ + px_map_element *pme; + pme=PX_MapFirst(&module->characters_map); + while (pme) + { + PX_FontModule_Charactor *pmc=(PX_FontModule_Charactor *)pme->Ptr; + PX_ShapeFree(&pmc->shape); + MP_Free(module->mp,pmc); + pme=PX_MapNext(&module->characters_map,pme); + } + PX_MapFree(&module->characters_map); +} + + +px_int PX_FontModuleGetTextPixelsWidth(PX_FontModule *mod,px_word *Text) +{ + px_int dx,dy; + px_word *pTextPointer=Text; + + if (!Text) + { + PX_ASSERT(); + return 0; + } + + dx=0; + dy=0; + while (PX_TRUE) + { + px_dword unicode_code=0; + px_char hex[5]; + PX_FontModule_Charactor *pChar; + + unicode_code=*pTextPointer; + pTextPointer++; + + if (unicode_code==0) + { + break; + } + + if (unicode_code!=' ') + { + PX_itoa(unicode_code,hex,sizeof(hex),16); + pChar=(PX_FontModule_Charactor *)PX_MapGet(&mod->characters_map,hex); + if (pChar) + { + dx+=pChar->header.Advance; + } + else + { + dx+=mod->xspacer; + } + } + else + { + if (unicode_code==' ') + { + dx+=mod->xspacer; + } + if (unicode_code=='\n') + { + dy+=mod->yspacer; + } + } + } + return dx; +} + +//utf-16 le +px_void PX_FontModuleDrawText(px_surface *psurface,int x,int y,const px_word *Text,px_color Color,PX_FontModule *mod,PX_FONT_ALIGN align) +{ + px_int dx,dy; + px_word *pTextPointer=(px_word *)Text; + + if (!Text) + { + PX_ASSERT(); + return; + } + + + switch(align) + { + case PX_FONT_ALIGN_XRIGHT: + case PX_FONT_ALIGN_XCENTER: + { + dx=0; + dy=0; + while (PX_TRUE) + { + px_dword unicode_code=0; + px_char hex[5]; + PX_FontModule_Charactor *pChar; + + unicode_code=*pTextPointer; + pTextPointer++; + + if (unicode_code==0) + { + break; + } + + if (unicode_code!=' ') + { + PX_itoa(unicode_code,hex,sizeof(hex),16); + pChar=(PX_FontModule_Charactor *)PX_MapGet(&mod->characters_map,hex); + if (pChar) + { + dx+=pChar->header.Advance; + } + else + { + dx+=mod->xspacer; + } + } + else + { + if (unicode_code==' ') + { + dx+=mod->xspacer; + } + if (unicode_code=='\n') + { + dy+=mod->yspacer; + dx=x; + } + } + } + if(align==PX_FONT_ALIGN_XCENTER) x-=dx/2; + if(align==PX_FONT_ALIGN_XRIGHT) x-=dx; + } + break; + + default: + case PX_FONT_ALIGN_XLEFT: + break; + } + + + dx=x; + dy=y; + + while (PX_TRUE) + { + px_dword unicode_code=0; + px_char hex[5]; + PX_FontModule_Charactor *pChar; + + unicode_code=*Text; + Text++; + if (unicode_code==0) + { + return; + } + + if (unicode_code!=' ') + { + PX_itoa(unicode_code,hex,sizeof(hex),16); + pChar=(PX_FontModule_Charactor *)PX_MapGet(&mod->characters_map,hex); + if (pChar) + { + PX_ShapeRender(psurface,&pChar->shape,dx+pChar->header.BearingX,dy-pChar->header.BearingY,PX_TEXTURERENDER_REFPOINT_LEFTTOP,Color); + dx+=pChar->header.Advance; + } + else + { + dx+=mod->xspacer; + } + } + else + { + if (unicode_code==' ') + { + dx+=mod->xspacer; + } + if (unicode_code=='\n') + { + dy+=mod->yspacer; + dx=x; + } + } + + } +} + +px_void PX_FontModuleSetXYSpace(PX_FontModule *module,int x,int y) +{ + module->xspacer=x; + module->yspacer=y; +} diff --git a/code/PainterEngine/Core/PX_Font.h b/code/PainterEngine/Core/PX_Font.h new file mode 100644 index 0000000000000000000000000000000000000000..e18e6c2517c023df173c87db6e744557adfb3271 --- /dev/null +++ b/code/PainterEngine/Core/PX_Font.h @@ -0,0 +1,76 @@ +#ifndef PIXELSES_FONT +#define PIXELSES_FONT + +#include "../Core/PX_Surface.h" +#include "../Core/PX_Texture.h" +#include "PX_Hashmap.h" + +#define __PX_FONT_GBKSIZE 13 +#define __PX_FONT_ASCSIZE 8 +#define __PX_FONT_HEIGHT 15 +#define __PX_FONT_MODULE_XSPACE_SIZE 8 +#define __PX_FONT_MODULE_YSPACE_SIZE 8 +//////////////////////////////////////////////////////////////////////////////////////////// +/////// Private function //// +////// //// +//////////////////////////////////////////////////////////////////////////////////////////// + +#define PX_FontGetCharactorHeight() (__PX_FONT_HEIGHT) +#define PX_FontGetAscCharactorWidth() (__PX_FONT_ASCSIZE) +#define PX_FontGetGbkCharactorWidth() (__PX_FONT_GBKSIZE) + +typedef struct +{ + union + { + px_char c_magic[4];//PXFM + px_dword magic; + }; + px_dword charactor_code; + px_dword BearingX; + px_dword BearingY; + px_dword Advance; + px_dword Font_Width; + px_dword Font_Height; + px_dword align_dummy; +}PX_FontModule_Charactor_Header; + +typedef struct +{ + PX_FontModule_Charactor_Header header; + px_shape shape; +}PX_FontModule_Charactor; + +typedef struct +{ + px_memorypool *mp; + px_map characters_map; + px_int xspacer; + px_int yspacer; +}PX_FontModule; + +typedef enum +{ + PX_FONT_ALIGN_XLEFT, + PX_FONT_ALIGN_XCENTER, + PX_FONT_ALIGN_XRIGHT, +}PX_FONT_ALIGN; + +px_void PX_FontDrawGBK(px_surface *psurface,px_int x,px_int y, px_uchar *str,px_color Color); +px_void PX_FontDrawASCII(px_surface *psurface,px_int x,px_int y, px_uchar ASCI,px_color Color); +px_void PX_FontDrawText(px_surface *psurface,int x,int y,const px_char *Text,px_color Color,PX_FONT_ALIGN align); +px_void PX_FontDrawChar(px_surface *psurface,int x,int y,const px_char *Text,px_color Color); +px_int PX_GetFontTextPixelsWidth(px_char *Text); + +px_void PX_FontModule_atow(const char *a,px_word *w); +px_void PX_FontModule_wstrcat(px_word *dst,const px_word *str); +px_void PX_FontModule_wastrcat(px_word *dst,const px_char *str); +px_bool PX_FontModuleInitialize(px_memorypool *mp,PX_FontModule *module); +px_bool PX_FontModuleLoad(PX_FontModule *module,px_byte *buffer,px_int size); +px_void PX_FontModuleFree(PX_FontModule *module); +px_int PX_FontModuleGetTextPixelsWidth(PX_FontModule *mod,px_word *Text); +px_void PX_FontModuleDrawText(px_surface *psurface,int x,int y,const px_word *Text,px_color Color,PX_FontModule *mod,PX_FONT_ALIGN align); +px_void PX_FontModuleSetXYSpace(PX_FontModule *module,int x,int y); + +#endif + diff --git a/code/PainterEngine/Core/PX_Hashmap.c b/code/PainterEngine/Core/PX_Hashmap.c new file mode 100644 index 0000000000000000000000000000000000000000..3d0d61001bec9f1d4909932e57a157d726cd7c9e --- /dev/null +++ b/code/PainterEngine/Core/PX_Hashmap.c @@ -0,0 +1,185 @@ +/* + * Generic map implementation. + */ +#include "PX_Hashmap.h" + + +px_bool PX_MapInit(px_memorypool *mp,px_map *m) +{ + m->mp=mp; + m->root.rb_node = PX_NULL; + m->size = 0; + + return PX_TRUE; +} + + + + +px_map_element * px_rbtree_search(struct px_rb_root *root,const char string[]) +{ + struct px_rb_node *node = root->rb_node; + + while (node) { + px_map_element *data =(px_map_element *)node; + int result; + + result = PX_strcmp(string, data->string); + + if (result < 0) + node = node->rb_left; + else if (result > 0) + node = node->rb_right; + else + return data; + } + return PX_NULL; +} + +px_bool px_rbtree_insert(struct px_rb_root *root, px_map_element *data) +{ + struct px_rb_node **newnode = &(root->rb_node), *parent = PX_NULL; + + /* Figure out where to put new node */ + while (*newnode) { + px_map_element *__this = (px_map_element *)(*newnode); + int result = PX_strcmp(data->string, __this->string); + + parent = *newnode; + if (result < 0) + newnode = &((*newnode)->rb_left); + else if (result > 0) + newnode = &((*newnode)->rb_right); + else + return PX_FALSE; + } + + /* Add new node and rebalance tree. */ + rb_link_node(&data->node, parent, newnode); + rb_insert_color(&data->node, root); + + return PX_TRUE; +} + + + +PX_HASHMAP_RETURN PX_MapPut(px_map * m,const px_char stringkey[], px_void * value) +{ + px_map_element *newnode = (px_map_element *)MP_Malloc(m->mp,sizeof(px_map_element)); + newnode->Ptr=value; + PX_strcpy(newnode->string,stringkey,sizeof(newnode->string)); + if(px_rbtree_insert(&m->root,newnode)) + { + m->size++; + return PX_HASHMAP_RETURN_OK; + } + else + return PX_HASHMAP_RETURN_NULL; +} + +PX_HASHMAP_RETURN PX_MapPutInt(px_map * m,const px_char stringkey[], px_int value) +{ + px_map_element *newnode = (px_map_element *)MP_Malloc(m->mp,sizeof(px_map_element)); + newnode->_int=value; + PX_strcpy(newnode->string,stringkey,sizeof(newnode->string)); + if(px_rbtree_insert(&m->root,newnode)) + { + m->size++; + return PX_HASHMAP_RETURN_OK; + } + else + return PX_HASHMAP_RETURN_NULL; +} + +PX_HASHMAP_RETURN PX_MapPutFloat(px_map * m,const px_char stringkey[], px_float value) +{ + px_map_element *newnode = (px_map_element *)MP_Malloc(m->mp,sizeof(px_map_element)); + newnode->_float=value; + PX_strcpy(newnode->string,stringkey,sizeof(newnode->string)); + if(px_rbtree_insert(&m->root,newnode)) + { + m->size++; + return PX_HASHMAP_RETURN_OK; + } + else + return PX_HASHMAP_RETURN_NULL; +} + +px_void * PX_MapGet(px_map * m, const px_char stringkey[]) +{ + px_map_element *p=px_rbtree_search(&m->root,stringkey); + if (p) + { + return p->Ptr; + } + return PX_NULL; +} + +px_void PX_MapFree(px_map * m) +{ + struct px_rb_node *node; + m->size=0; + node = rb_first(&m->root); + while (node) + { + struct px_rb_node *p_delete_node; + p_delete_node=node; + node = rb_next(node); + rb_erase(p_delete_node,&m->root); + MP_Free(m->mp,p_delete_node); + } + m->size=0; +} + +px_int PX_MapGetSize(px_map * m) +{ + return m->size; +} + +PX_HASHMAP_RETURN PX_MapErase(px_map * m,const px_char stringkey[]) +{ + px_map_element *data = px_rbtree_search(&m->root,stringkey); + if (data) { + m->size--; + rb_erase(&data->node, &m->root); + MP_Free(m->mp,data); + return PX_HASHMAP_RETURN_OK; + } + return PX_HASHMAP_RETURN_NULL; +} + +px_map_element * PX_MapFirst(px_map * m) +{ + struct px_rb_node *node; + m->size=0; + node = rb_first(&m->root); + return (px_map_element *)node; +} + +px_map_element * PX_MapNext(px_map * m,px_map_element *node) +{ + return (px_map_element *)rb_next((struct px_rb_node *)node); +} + +px_bool PX_MapGetInt(px_map * m, const px_char stringkey[],px_int *v) +{ + px_map_element *p=px_rbtree_search(&m->root,stringkey); + if (p) + { + *v= p->_int; + return PX_TRUE; + } + return PX_FALSE; +} + + +px_bool PX_MapGetFloat(px_map * m, const px_char stringkey[],px_float *v) +{ + px_map_element *p=px_rbtree_search(&m->root,stringkey); + if (p) + { + *v= p->_float; + return PX_TRUE; + } + return PX_FALSE; +} diff --git a/code/PainterEngine/Core/PX_Hashmap.h b/code/PainterEngine/Core/PX_Hashmap.h new file mode 100644 index 0000000000000000000000000000000000000000..a509bd3ebb70534ce7f26d9b29d11d40211ff7f5 --- /dev/null +++ b/code/PainterEngine/Core/PX_Hashmap.h @@ -0,0 +1,59 @@ + +#ifndef PX_HASHMAP_H__ +#define PX_HASHMAP_H__ + +#include "PX_MemoryPool.h" +#include "PX_rbtree.h" + +#define PX_HASHMAP_STRINGKEY_LEN 64 + + +typedef enum +{ + PX_HASHMAP_RETURN_OK, + PX_HASHMAP_RETURN_NULL, + PX_HASHMAP_RETURN_KEYEXIST, + PX_HASHMAP_RETURN_OUTOFMEMORY, + PX_HASHMAP_RETURN_FULL, +}PX_HASHMAP_RETURN; + + + +typedef struct +{ + px_memorypool *mp; + px_int size; + struct px_rb_root root; +}px_map; + +typedef struct __px_map_element +{ + struct px_rb_node node;//must be first member + px_char string[PX_HASHMAP_STRINGKEY_LEN]; + union + { + px_void *Ptr; + px_int _int; + px_float _float; + }; + +}px_map_element; + + + +px_bool PX_MapInit(px_memorypool *mp,px_map *hashmap); + +PX_HASHMAP_RETURN PX_MapPut(px_map * m,const px_char stringkey[], px_void * value); +PX_HASHMAP_RETURN PX_MapPutInt(px_map * m,const px_char stringkey[], px_int value); +PX_HASHMAP_RETURN PX_MapPutFloat(px_map * m,const px_char stringkey[], px_float value); +PX_HASHMAP_RETURN PX_MapErase(px_map * m,const px_char stringkey[]); +px_map_element * PX_MapFirst(px_map * m); +px_map_element * PX_MapNext(px_map * m,px_map_element *node); +px_void *PX_MapGet(px_map * m, const px_char stringkey[]); +px_bool PX_MapGetInt(px_map * m, const px_char stringkey[],px_int *_int); +px_bool PX_MapGetFloat(px_map * m, const px_char stringkey[],px_float *_float); +px_void PX_MapFree(px_map * m); +px_int PX_MapGetSize(px_map * m); + + +#endif \ No newline at end of file diff --git a/code/PainterEngine/Core/PX_Huffman.c b/code/PainterEngine/Core/PX_Huffman.c new file mode 100644 index 0000000000000000000000000000000000000000..1cac850a9ee1830ff7c40645d6009c768ff761e9 --- /dev/null +++ b/code/PainterEngine/Core/PX_Huffman.c @@ -0,0 +1,268 @@ +#include "PX_Huffman.h" + +struct _huffman_node +{ + px_word left,right; + px_uint weight; + px_byte data; +}; +typedef struct _huffman_node huffman_node; + +typedef struct +{ + union + { + px_word left; + px_word bNode; + }; + union + { + px_word right; + px_byte data; + }; +}huffman_snode; + +typedef struct +{ + px_dword len; + px_byte encode[32]; +}huffman_map; + +px_void px_huffmanTraversalTree(huffman_node *pNodeHead,huffman_node *node,huffman_map map,huffman_map *pTable) +{ + huffman_map genMap; + if (node->left) + { + genMap=map; + genMap.len++; + px_huffmanTraversalTree(pNodeHead,&pNodeHead[node->left],genMap,pTable); + genMap=map; + genMap.encode[genMap.len/8]|=(1<<(genMap.len%8)); + genMap.len++; + px_huffmanTraversalTree(pNodeHead,&pNodeHead[node->right],genMap,pTable); + } + else + { + pTable[node->data]=map; + } +} + +px_void PX_huffmanCompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size) +{ + px_uint i,j; + huffman_node nodes[511]; + huffman_snode snodes[511]; + px_uint sortCursor=255; + huffman_map huffmanMap[256]={0}; + px_uint encodeNecessaryNodeCount; + px_uint sortIndex; + px_uint w_size=0; + huffman_map mapnode; + px_byte w_byte=0; + px_uchar w_byte_offset=0; + + PX_memset(nodes,0,sizeof(nodes)); + for (i=0;i<256;i++) + { + nodes[i].data=(px_byte)i; + } + for (i=0;i0) + { + huffman_node newNode; + //move node to end + nodes[sortCursor*2]=nodes[sortCursor]; + nodes[sortCursor*2-1]=nodes[sortCursor-1]; + newNode.left=sortCursor*2; + newNode.right=sortCursor*2-1; + newNode.data=0; + newNode.weight=nodes[sortCursor*2].weight+nodes[sortCursor*2-1].weight; + nodes[sortCursor-1]=newNode; + sortCursor--; + //re-sort + sortIndex=sortCursor; + while (sortIndex>0) + { + if (nodes[sortIndex].weight>nodes[sortIndex-1].weight) + { + huffman_node temp=nodes[sortIndex-1]; + nodes[sortIndex-1]=nodes[sortIndex]; + nodes[sortIndex]=temp; + } + else + { + break; + } + sortIndex--; + } + } + + PX_memset(snodes,0,sizeof(snodes)); + for (i=0;i=8) + { + w_byte_offset=0; + if(_out) + _out[w_size]=w_byte; + w_byte=0; + w_size++; + } + } + } + //last + if(_out) + _out[w_size]=w_byte; + w_size++; + *out_size=w_size; +} + +px_void PX_huffmanDecompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size) +{ + px_uint r_offset/*read*/,w_offset; + px_uchar leaf; + px_uint bit_offset; + px_uint bit; + px_dword datasize; + huffman_snode *pheader,*pNode; + *out_size=*(px_dword *)(_in+1); + if (!_out) + { + return; + } + + datasize=*(px_dword *)(_in+1); + pheader=(huffman_snode *)(_in+1+4); + if (!pheader->bNode) + { + //only one node + if(_out) + PX_memset(_out,pheader->data,datasize); + } + + leaf=_in[0]; + bit_offset=0; + w_offset=0; + pNode=pheader; + r_offset=1+4+((leaf+1)*2-1)*sizeof(huffman_snode); + + while (r_offsetright]; + if (!pNode->bNode) + { + _out[w_offset]=pNode->data; + w_offset++; + pNode=pheader; + if (w_offset>=datasize) + { + return; + } + } + + } + else + { + pNode=&pheader[pNode->left]; + if (!pNode->bNode) + { + _out[w_offset]=pNode->data; + w_offset++; + pNode=pheader; + if (w_offset>=datasize) + { + return; + } + } + } + + bit_offset++; + if (bit_offset>=8) + { + r_offset++; + bit_offset=0; + } + } + //error + PX_ASSERT(); +} + diff --git a/code/PainterEngine/Core/PX_Huffman.h b/code/PainterEngine/Core/PX_Huffman.h new file mode 100644 index 0000000000000000000000000000000000000000..7575245732f54bfffcab080afd8c25117d3878b4 --- /dev/null +++ b/code/PainterEngine/Core/PX_Huffman.h @@ -0,0 +1,7 @@ +#ifndef PX_HUFFMAN_H +#define PX_HUFFMAN_H +#include "PX_Quicksort.h" + +px_void PX_huffmanCompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size); +px_void PX_huffmanDecompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size); +#endif diff --git a/code/PainterEngine/Core/PX_KalmanFilter.c b/code/PainterEngine/Core/PX_KalmanFilter.c new file mode 100644 index 0000000000000000000000000000000000000000..cc7a648b1e32641a460acdc69f1559784ae433bf --- /dev/null +++ b/code/PainterEngine/Core/PX_KalmanFilter.c @@ -0,0 +1,28 @@ +#include "PX_KalmanFilter.h" + +px_void PX_KalmanFilterInitialize(PX_KalmanFilter *filter,px_double A,px_double B,px_double Q,px_double H,px_double R) +{ + filter->A=A; + filter->B=B; + filter->H=H; + filter->Kk=0; + filter->Pk=1; + filter->Q=Q; + filter->R=R; + filter->Xk=0; +} + +px_void PX_KalmanFilterUpdate(PX_KalmanFilter *filter,px_double Zk,px_double uk,px_double wk) +{ + filter->Xk=filter->A*filter->Xk+filter->B*uk; + filter->Pk=filter->A*filter->Pk*filter->A+filter->Q; + + filter->Kk=filter->Pk/(filter->H*filter->Pk*filter->H+filter->R); + filter->Xk=filter->Xk+filter->Kk*(Zk-filter->Xk); + filter->Pk=(1-filter->Kk*filter->H)*filter->Pk; +} + +px_double PX_KalmanFilterGetGuess(PX_KalmanFilter *filter) +{ + return filter->Xk; +} diff --git a/code/PainterEngine/Core/PX_KalmanFilter.h b/code/PainterEngine/Core/PX_KalmanFilter.h new file mode 100644 index 0000000000000000000000000000000000000000..f193b6e849f110e0178103e0e26ac6a017ac4ecf --- /dev/null +++ b/code/PainterEngine/Core/PX_KalmanFilter.h @@ -0,0 +1,15 @@ +#ifndef PX_KALMANFILTER_H +#define PX_KALMANFILTER_H +#include "PX_Typedef.h" + +typedef struct +{ + px_double Xk,Kk,Pk; + px_double A,B,Q,H,R; +}PX_KalmanFilter; + +px_void PX_KalmanFilterInitialize(PX_KalmanFilter *filter,px_double A,px_double B,px_double Q,px_double H,px_double R); +px_void PX_KalmanFilterUpdate(PX_KalmanFilter *filter,px_double Zk,px_double uk,px_double wk); +px_double PX_KalmanFilterGetGuess(PX_KalmanFilter *filter); + +#endif diff --git a/code/PainterEngine/Core/PX_Linker.c b/code/PainterEngine/Core/PX_Linker.c new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/code/PainterEngine/Core/PX_Linker.h b/code/PainterEngine/Core/PX_Linker.h new file mode 100644 index 0000000000000000000000000000000000000000..3f38c8a417ab86b5ff5430db76d4efa9685a459a --- /dev/null +++ b/code/PainterEngine/Core/PX_Linker.h @@ -0,0 +1,6 @@ +#ifndef __PX_LINKER_H +#define __PX_LINKER_H + + + +#endif diff --git a/code/PainterEngine/Core/PX_List.c b/code/PainterEngine/Core/PX_List.c new file mode 100644 index 0000000000000000000000000000000000000000..de5567d3ab323f8d5762b1e97399ede7e3980f94 --- /dev/null +++ b/code/PainterEngine/Core/PX_List.c @@ -0,0 +1,126 @@ +#include "PX_List.h" + +px_void PX_ListInit(px_memorypool *mp,px_list *list) +{ + list->end=PX_NULL; + list->head=PX_NULL; + list->size=0; + list->mp=mp; +} + +px_void *PX_ListPush(px_list *list,px_void *data,px_int size) +{ + px_list_node *node; + if (list->head==PX_NULL) + { + list->head=(px_list_node *)MP_Malloc(list->mp,sizeof(px_list_node)); + list->head->pdata=MP_Malloc(list->mp,size); + PX_memcpy(list->head->pdata,data,size); + list->head->pnext=PX_NULL; + list->head->ppre=PX_NULL; + list->end=list->head; + list->size++; + return list->head->pdata; + } + else + { + node=(px_list_node *)MP_Malloc(list->mp,sizeof(px_list_node)); + node->pdata=MP_Malloc(list->mp,size); + PX_memcpy(node->pdata,data,size); + node->pnext=PX_NULL; + node->ppre=list->end; + list->end->pnext=node; + list->end=node; + list->size++; + return node->pdata; + } +} + +px_bool PX_ListPop(px_list *list,px_list_node *node) +{ + if (!node) + { + PX_ERROR("Error List node pop"); + return PX_FALSE; + } + MP_Free(list->mp,node->pdata); + if (node==list->head) + { + list->head=list->head->pnext; + if (list->head) + { + list->head->ppre=PX_NULL; + } + MP_Free(list->mp,node); + list->size--; + if (list->size==0) + { + list->head=PX_NULL; + list->end=PX_NULL; + } + return PX_TRUE; + } + + if (node==list->end) + { + list->end=list->end->ppre; + if (list->end) + { + list->end->pnext=PX_NULL; + } + MP_Free(list->mp,node); + list->size--; + if (list->size==0) + { + list->head=PX_NULL; + list->end=PX_NULL; + } + return PX_TRUE; + } + node->ppre->pnext=node->pnext; + node->pnext->ppre=node->ppre; + MP_Free(list->mp,node); + list->size--; + + return PX_TRUE; +} + +px_list_node* PX_ListAt(px_list *list,px_int index) +{ + px_list_node *node=list->head; + if (index>=list->size) + { + return PX_NULL; + } + while (index--) + { + node=node->pnext; + } + return node; +} + +px_int PX_ListSize(px_list *list) +{ + return list->size; +} + +px_void PX_ListClear(px_list *list) +{ + px_list_node *node=list->head; + px_list_node *pn; + while (node) + { + pn=node; + node=node->pnext; + MP_Free(list->mp,pn->pdata); + MP_Free(list->mp,pn); + } + list->end=PX_NULL; + list->head=PX_NULL; + list->size=0; +} + +px_void PX_ListFree(px_list *list) +{ + PX_ListClear(list); +} diff --git a/code/PainterEngine/Core/PX_List.h b/code/PainterEngine/Core/PX_List.h new file mode 100644 index 0000000000000000000000000000000000000000..edc6bb4bdeeff1eec8cf295cc18b599940054d15 --- /dev/null +++ b/code/PainterEngine/Core/PX_List.h @@ -0,0 +1,31 @@ +#ifndef __PX_LIST_H +#define __PX_LIST_H +#include "PX_MemoryPool.h" +typedef struct __px_list_node +{ + px_void *pdata; + struct __px_list_node *pnext; + struct __px_list_node *ppre; +}px_list_node; + +typedef struct __px_list +{ + px_memorypool *mp; + px_int size; + struct __px_list_node *head; + struct __px_list_node *end; +}px_list; + +////////////////////////////////////////////////////////////////////////// +//List +px_void PX_ListInit(px_memorypool *mp,px_list *list); +px_void *PX_ListPush(px_list *list,px_void *data,px_int size); +px_bool PX_ListPop(px_list *list,px_list_node *node); +px_list_node* PX_ListAt(px_list *list,px_int index); +px_int PX_ListSize(px_list *list); +px_void PX_ListClear(px_list *list); +px_void PX_ListFree(px_list *list); + +#define PX_LIST_NODEDATA(x) ((x)->pdata) +#define PX_LISTAT(t,x,i) ((t *)(PX_ListAt(x,i)->pdata)) +#endif diff --git a/code/PainterEngine/Core/PX_Log.c b/code/PainterEngine/Core/PX_Log.c new file mode 100644 index 0000000000000000000000000000000000000000..c6d812c23d7fd8bb045b6d22722c53d4a2fd885a --- /dev/null +++ b/code/PainterEngine/Core/PX_Log.c @@ -0,0 +1,25 @@ +#include "PX_Typedef.h" + +void PX_ASSERT() +{ +#ifdef PX_DEBUG_MODE + __debugbreak(); +#endif +} + +void PX_ERROR(px_char fmt[]) +{ + PX_ASSERT(); +} + + +px_char * PX_GETLOG() +{ + return ""; +} + +void PX_LOG(px_char fmt[]) +{ + + //while(1); +} diff --git a/code/PainterEngine/Core/PX_Log.h b/code/PainterEngine/Core/PX_Log.h new file mode 100644 index 0000000000000000000000000000000000000000..5f36884aa55892d9a9a65a79e1e6745cc3838018 --- /dev/null +++ b/code/PainterEngine/Core/PX_Log.h @@ -0,0 +1,7 @@ +#ifndef __PX_LOG_H +#define __PX_LOG_H +void PX_LOG(px_char fmt[]); +void PX_ERROR(px_char fmt[]); +px_char *PX_GETLOG(); +void PX_ASSERT(); +#endif diff --git a/code/PainterEngine/Core/PX_MFCC.c b/code/PainterEngine/Core/PX_MFCC.c new file mode 100644 index 0000000000000000000000000000000000000000..b3bc7e9c810e2f86b1973fd70a203503e116fedf --- /dev/null +++ b/code/PainterEngine/Core/PX_MFCC.c @@ -0,0 +1,138 @@ +#include "PX_MFCC.h" + + +static px_double PX_HzToMel(px_double freq) +{ + return 1127*PX_log(1.0 + freq/700); +} + +static px_double PX_MelToHz(px_double freq) +{ + return 700 * (PX_exp(freq/1127) - 1); +} + + +void PX_liftwindow(px_double* p, int m) +{ + int i; + px_double max_value = 0.0f; + for(i = 1; i <= m; i++) + { + p[i-1] = 1+ 0.5 * m * PX_sind( PX_PI * i/m ); + if( p[i-1] > max_value) + { + max_value = p[i-1]; + } + } + for(i = 1; i <= m; i++) + { + p[i-1] /= max_value; + } +} + +px_void PX_MFCCInitialize(PX_MFCC *mfcc,px_int framesize,px_int sampleRate,px_int low,px_int high) +{ + px_int i,j; + px_double fre_bin = (px_double)sampleRate / framesize; + px_double low_mel = PX_HzToMel(low); + px_double high_mel = PX_HzToMel(high); + px_double mel_bw = (high_mel - low_mel)/(PX_MFCC_DCT_FACTOR_SIZE + 1); + px_int valid_nfft = framesize/2 + 1; + + mfcc->N=framesize; + PX_memset(mfcc->filter,0,sizeof(mfcc->filter)); + + for(j = 1; j <= PX_MFCC_DCT_FACTOR_SIZE; j++) + { + px_double mel_cent = j * mel_bw + low_mel; + px_double mel_left = mel_cent - mel_bw; + px_double mel_right = mel_cent + mel_bw; + px_double freq_cent = PX_MelToHz(mel_cent); + px_double freq_left = PX_MelToHz(mel_left); + px_double freq_bw_left = freq_cent - freq_left; + px_double freq_right = PX_MelToHz(mel_right); + px_double freq_bw_right = freq_right - freq_cent; + for(i = 1; i <= valid_nfft; i++) + { + px_double freq = (i-1) * fre_bin ; + if( freq > freq_left && freq < freq_right ) + { + if( freq <= freq_cent) + { + mfcc->filter[j-1].w[i-1] = (freq - freq_left) / freq_bw_left; + } + else + { + mfcc->filter[j-1].w[i-1] = (freq_right - freq) / freq_bw_right; + } + } + } + } + +} + +px_bool PX_MFCCParse(PX_MFCC *mfcc,px_double *data,PX_MFCC_FEATURE *out) +{ + px_int i,j; + px_complex cal[PX_MFCC_FRAME_MAX_SIZE]; + px_double window[PX_MFCC_FRAME_MAX_SIZE]; + px_double dct_data[PX_MFCC_DCT_FACTOR_SIZE]; + px_double dct_rdata[PX_MFCC_DCT_FACTOR_SIZE]; + + PX_WindowFunction_hamming(window,mfcc->N); + + for(i = mfcc->N - 1; i >= 1; i--) + { + cal[i].re = data[i] - 0.9375 * data[i-1]; + cal[i].im=0; + } + cal[0].re = data[0]; + cal[0].im=0; + + for (i=0;iN;i++) + { + cal[i].re*=window[i]; + } + + PX_FFT(cal,cal,mfcc->N); + + //re,im->power,phase + for (i=0;iN;i++) + { + px_double pw,phase; + pw=(cal[i].re*cal[i].re+cal[i].im*cal[i].im)/mfcc->N; + phase=PX_atan2(cal[i].re,cal[i].im); + cal[i].re=pw; + cal[i].im=phase; + } + + PX_memset(dct_data,0,sizeof(dct_data)); + + //filter bank + for (i=0;iN;j++) + { + dct_data[i]+=cal[i].re*mfcc->filter[i].w[j]; + } + if (dct_data[i]>1) + { + dct_data[i]=PX_ln(dct_data[i]); + } + else + { + dct_data[i]=0; + } + } + + + //dct + PX_DCT(dct_data,dct_rdata,PX_MFCC_DCT_FACTOR_SIZE); + + for (i=0;ifactor[i]=dct_rdata[i]; + } + + return PX_TRUE; +} diff --git a/code/PainterEngine/Core/PX_MFCC.h b/code/PainterEngine/Core/PX_MFCC.h new file mode 100644 index 0000000000000000000000000000000000000000..8980dbafff430edc81fda6513cc889efdc6e8943 --- /dev/null +++ b/code/PainterEngine/Core/PX_MFCC.h @@ -0,0 +1,28 @@ +#ifndef PX_MFCC_H +#define PX_MFCC_H +#include "PX_MemoryPool.h" + +#define PX_MFCC_FRAME_MAX_SIZE 2048 +#define PX_MFCC_DCT_FACTOR_SIZE 32 +typedef struct +{ + px_double w[PX_MFCC_FRAME_MAX_SIZE]; +}PX_MFCC_Filter; + + +typedef struct +{ + PX_MFCC_Filter filter[PX_MFCC_DCT_FACTOR_SIZE]; + px_int N; +}PX_MFCC; + +typedef struct +{ + px_double factor[PX_MFCC_DCT_FACTOR_SIZE]; +}PX_MFCC_FEATURE; + +px_void PX_MFCCInitialize(PX_MFCC *mfcc,px_int framesize,px_int sampleRate,px_int low,px_int high); +px_bool PX_MFCCParse(PX_MFCC *mfcc,px_double *data,PX_MFCC_FEATURE *out); +#endif + + diff --git a/code/PainterEngine/Core/PX_MathTable.h b/code/PainterEngine/Core/PX_MathTable.h new file mode 100644 index 0000000000000000000000000000000000000000..a31b2e06159d71eb3cfe13c4326e051b3c0de23a --- /dev/null +++ b/code/PainterEngine/Core/PX_MathTable.h @@ -0,0 +1,35 @@ +#ifndef __PX_MATH_TABLE_H +#define __PX_MATH_TABLE_H +static int const px_hex_to_dex_table[]={0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,0,0,1,2,3,4,5,6, + 7,8,9,0,0,0,0,0,0, + 0,10,11,12,13,14,15,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,10, + 11,12,13,14,15}; + +static float const px_sinx_radius[]={0.000000f,\ + 0.001000f,0.002000f,0.003000f,0.004000f,0.005000f,0.006000f,0.007000f,0.008000f,0.009000f,0.010000f,0.011000f,0.012000f,0.013000f,0.014000f,0.014999f,0.015999f,0.016999f,0.017999f,0.018999f,0.019999f,0.020998f,0.021998f,0.022998f,0.023998f,0.024997f,0.025997f,0.026997f,0.027996f,0.028996f,0.029996f,0.030995f,0.031995f,0.032994f,0.033993f,0.034993f,0.035992f,0.036992f,0.037991f,0.038990f,0.039989f,0.040989f,0.041988f,0.042987f,0.043986f,0.044985f,0.045984f,0.046983f,0.047982f,0.048980f,0.049979f,0.050978f,0.051977f,0.052975f,0.053974f,0.054972f,0.055971f,0.056969f,0.057967f,0.058966f,0.059964f,0.060962f,0.061960f,0.062958f,0.063956f,0.064954f,0.065952f,0.066950f,0.067948f,0.068945f,0.069943f,0.070940f,0.071938f,0.072935f,0.073932f,0.074930f,0.075927f,0.076924f,0.077921f,0.078918f,0.079915f,0.080911f,0.081908f,0.082905f,0.083901f,0.084898f,0.085894f,0.086890f,0.087886f,0.088883f,0.089879f,0.090874f,0.091870f,0.092866f,0.093862f,0.094857f,0.095853f,0.096848f,0.097843f,0.098838f,0.099833f,\ + 0.100828f,0.101823f,0.102818f,0.103813f,0.104807f,0.105802f,0.106796f,0.107790f,0.108784f,0.109778f,0.110772f,0.111766f,0.112760f,0.113753f,0.114747f,0.115740f,0.116733f,0.117726f,0.118719f,0.119712f,0.120705f,0.121698f,0.122690f,0.123682f,0.124675f,0.125667f,0.126659f,0.127651f,0.128643f,0.129634f,0.130626f,0.131617f,0.132608f,0.133599f,0.134590f,0.135581f,0.136572f,0.137562f,0.138553f,0.139543f,0.140533f,0.141523f,0.142513f,0.143503f,0.144492f,0.145482f,0.146471f,0.147460f,0.148449f,0.149438f,0.150427f,0.151415f,0.152404f,0.153392f,0.154380f,0.155368f,0.156356f,0.157343f,0.158331f,0.159318f,0.160305f,0.161292f,0.162279f,0.163266f,0.164252f,0.165239f,0.166225f,0.167211f,0.168197f,0.169182f,0.170168f,0.171153f,0.172138f,0.173123f,0.174108f,0.175093f,0.176077f,0.177062f,0.178046f,0.179030f,0.180013f,0.180997f,0.181980f,0.182964f,0.183947f,0.184929f,0.185912f,0.186895f,0.187877f,0.188859f,0.189841f,0.190823f,0.191804f,0.192785f,0.193767f,0.194747f,0.195728f,0.196709f,0.197689f,0.198669f,\ + 0.199649f,0.200629f,0.201609f,0.202588f,0.203567f,0.204546f,0.205525f,0.206503f,0.207482f,0.208460f,0.209438f,0.210416f,0.211393f,0.212370f,0.213347f,0.214324f,0.215301f,0.216277f,0.217254f,0.218230f,0.219205f,0.220181f,0.221156f,0.222131f,0.223106f,0.224081f,0.225056f,0.226030f,0.227004f,0.227978f,0.228951f,0.229924f,0.230897f,0.231870f,0.232843f,0.233815f,0.234788f,0.235759f,0.236731f,0.237703f,0.238674f,0.239645f,0.240616f,0.241586f,0.242556f,0.243526f,0.244496f,0.245466f,0.246435f,0.247404f,0.248373f,0.249341f,0.250310f,0.251278f,0.252245f,0.253213f,0.254180f,0.255147f,0.256114f,0.257081f,0.258047f,0.259013f,0.259979f,0.260944f,0.261909f,0.262874f,0.263839f,0.264803f,0.265768f,0.266731f,0.267695f,0.268658f,0.269622f,0.270584f,0.271547f,0.272509f,0.273471f,0.274433f,0.275394f,0.276356f,0.277317f,0.278277f,0.279238f,0.280198f,0.281157f,0.282117f,0.283076f,0.284035f,0.284994f,0.285952f,0.286910f,0.287868f,0.288826f,0.289783f,0.290740f,0.291697f,0.292653f,0.293609f,0.294565f,0.295520f,\ + 0.296475f,0.297430f,0.298385f,0.299339f,0.300293f,0.301247f,0.302200f,0.303153f,0.304106f,0.305059f,0.306011f,0.306963f,0.307914f,0.308866f,0.309816f,0.310767f,0.311717f,0.312667f,0.313617f,0.314567f,0.315516f,0.316464f,0.317413f,0.318361f,0.319309f,0.320256f,0.321203f,0.322150f,0.323097f,0.324043f,0.324989f,0.325934f,0.326880f,0.327825f,0.328769f,0.329713f,0.330657f,0.331601f,0.332544f,0.333487f,0.334430f,0.335372f,0.336314f,0.337255f,0.338197f,0.339138f,0.340078f,0.341018f,0.341958f,0.342898f,0.343837f,0.344776f,0.345714f,0.346653f,0.347590f,0.348528f,0.349465f,0.350402f,0.351338f,0.352274f,0.353210f,0.354145f,0.355080f,0.356015f,0.356949f,0.357883f,0.358817f,0.359750f,0.360683f,0.361615f,0.362548f,0.363479f,0.364411f,0.365342f,0.366273f,0.367203f,0.368133f,0.369062f,0.369992f,0.370920f,0.371849f,0.372777f,0.373705f,0.374632f,0.375559f,0.376486f,0.377412f,0.378338f,0.379263f,0.380188f,0.381113f,0.382037f,0.382961f,0.383885f,0.384808f,0.385731f,0.386653f,0.387575f,0.388497f,0.389418f,\ + 0.390339f,0.391260f,0.392180f,0.393099f,0.394019f,0.394938f,0.395856f,0.396774f,0.397692f,0.398609f,0.399526f,0.400443f,0.401359f,0.402275f,0.403190f,0.404105f,0.405019f,0.405933f,0.406847f,0.407760f,0.408673f,0.409586f,0.410498f,0.411410f,0.412321f,0.413232f,0.414142f,0.415052f,0.415962f,0.416871f,0.417780f,0.418688f,0.419596f,0.420503f,0.421410f,0.422317f,0.423223f,0.424129f,0.425034f,0.425939f,0.426844f,0.427748f,0.428652f,0.429555f,0.430458f,0.431360f,0.432262f,0.433164f,0.434065f,0.434966f,0.435866f,0.436766f,0.437665f,0.438564f,0.439462f,0.440360f,0.441258f,0.442155f,0.443052f,0.443948f,0.444844f,0.445739f,0.446634f,0.447529f,0.448423f,0.449316f,0.450210f,0.451102f,0.451994f,0.452886f,0.453778f,0.454669f,0.455559f,0.456449f,0.457338f,0.458228f,0.459116f,0.460004f,0.460892f,0.461779f,0.462666f,0.463552f,0.464438f,0.465323f,0.466208f,0.467093f,0.467977f,0.468860f,0.469743f,0.470626f,0.471508f,0.472390f,0.473271f,0.474151f,0.475032f,0.475911f,0.476791f,0.477669f,0.478548f,0.479426f,\ + 0.480303f,0.481180f,0.482056f,0.482932f,0.483807f,0.484682f,0.485557f,0.486431f,0.487304f,0.488177f,0.489050f,0.489922f,0.490793f,0.491664f,0.492535f,0.493405f,0.494274f,0.495144f,0.496012f,0.496880f,0.497748f,0.498615f,0.499481f,0.500347f,0.501213f,0.502078f,0.502943f,0.503807f,0.504670f,0.505533f,0.506396f,0.507258f,0.508119f,0.508981f,0.509841f,0.510701f,0.511561f,0.512420f,0.513278f,0.514136f,0.514993f,0.515850f,0.516707f,0.517563f,0.518418f,0.519273f,0.520127f,0.520981f,0.521834f,0.522687f,0.523539f,0.524391f,0.525242f,0.526093f,0.526943f,0.527793f,0.528642f,0.529491f,0.530339f,0.531186f,0.532033f,0.532880f,0.533726f,0.534571f,0.535416f,0.536260f,0.537104f,0.537947f,0.538790f,0.539632f,0.540474f,0.541315f,0.542155f,0.542995f,0.543835f,0.544674f,0.545512f,0.546350f,0.547187f,0.548024f,0.548860f,0.549696f,0.550531f,0.551365f,0.552199f,0.553033f,0.553866f,0.554698f,0.555530f,0.556361f,0.557192f,0.558022f,0.558851f,0.559680f,0.560509f,0.561337f,0.562164f,0.562991f,0.563817f,0.564642f,\ + 0.565468f,0.566292f,0.567116f,0.567939f,0.568762f,0.569584f,0.570406f,0.571227f,0.572048f,0.572867f,0.573687f,0.574506f,0.575324f,0.576141f,0.576959f,0.577775f,0.578591f,0.579406f,0.580221f,0.581035f,0.581849f,0.582662f,0.583474f,0.584286f,0.585097f,0.585908f,0.586718f,0.587528f,0.588336f,0.589145f,0.589952f,0.590760f,0.591566f,0.592372f,0.593177f,0.593982f,0.594786f,0.595590f,0.596393f,0.597195f,0.597997f,0.598798f,0.599599f,0.600399f,0.601198f,0.601997f,0.602795f,0.603593f,0.604390f,0.605186f,0.605982f,0.606777f,0.607572f,0.608366f,0.609159f,0.609952f,0.610744f,0.611536f,0.612327f,0.613117f,0.613907f,0.614696f,0.615484f,0.616272f,0.617059f,0.617846f,0.618632f,0.619417f,0.620202f,0.620986f,0.621769f,0.622552f,0.623335f,0.624116f,0.624897f,0.625678f,0.626457f,0.627237f,0.628015f,0.628793f,0.629570f,0.630347f,0.631123f,0.631898f,0.632673f,0.633447f,0.634221f,0.634993f,0.635766f,0.636537f,0.637308f,0.638078f,0.638848f,0.639617f,0.640385f,0.641153f,0.641920f,0.642687f,0.643453f,0.644218f,\ + 0.644982f,0.645746f,0.646509f,0.647272f,0.648034f,0.648795f,0.649556f,0.650316f,0.651075f,0.651834f,0.652592f,0.653349f,0.654106f,0.654862f,0.655617f,0.656372f,0.657126f,0.657880f,0.658633f,0.659385f,0.660136f,0.660887f,0.661637f,0.662387f,0.663135f,0.663884f,0.664631f,0.665378f,0.666124f,0.666870f,0.667614f,0.668359f,0.669102f,0.669845f,0.670587f,0.671329f,0.672069f,0.672810f,0.673549f,0.674288f,0.675026f,0.675763f,0.676500f,0.677236f,0.677972f,0.678707f,0.679441f,0.680174f,0.680907f,0.681639f,0.682370f,0.683101f,0.683831f,0.684560f,0.685289f,0.686017f,0.686744f,0.687470f,0.688196f,0.688921f,0.689646f,0.690370f,0.691093f,0.691815f,0.692537f,0.693258f,0.693978f,0.694698f,0.695417f,0.696135f,0.696853f,0.697570f,0.698286f,0.699001f,0.699716f,0.700430f,0.701144f,0.701856f,0.702568f,0.703279f,0.703990f,0.704700f,0.705409f,0.706117f,0.706825f,0.707532f,0.708239f,0.708944f,0.709649f,0.710353f,0.711057f,0.711760f,0.712462f,0.713163f,0.713864f,0.714564f,0.715263f,0.715961f,0.716659f,0.717356f,\ + 0.718052f,0.718748f,0.719443f,0.720137f,0.720831f,0.721523f,0.722215f,0.722907f,0.723597f,0.724287f,0.724976f,0.725665f,0.726352f,0.727039f,0.727726f,0.728411f,0.729096f,0.729780f,0.730463f,0.731146f,0.731828f,0.732509f,0.733189f,0.733869f,0.734548f,0.735226f,0.735903f,0.736580f,0.737256f,0.737931f,0.738606f,0.739280f,0.739953f,0.740625f,0.741297f,0.741967f,0.742637f,0.743307f,0.743975f,0.744643f,0.745310f,0.745977f,0.746642f,0.747307f,0.747971f,0.748634f,0.749297f,0.749959f,0.750620f,0.751280f,0.751940f,0.752599f,0.753257f,0.753914f,0.754571f,0.755227f,0.755882f,0.756536f,0.757190f,0.757843f,0.758495f,0.759146f,0.759796f,0.760446f,0.761095f,0.761744f,0.762391f,0.763038f,0.763684f,0.764329f,0.764973f,0.765617f,0.766260f,0.766902f,0.767543f,0.768184f,0.768824f,0.769463f,0.770101f,0.770739f,0.771376f,0.772012f,0.772647f,0.773281f,0.773915f,0.774548f,0.775180f,0.775811f,0.776442f,0.777072f,0.777701f,0.778329f,0.778956f,0.779583f,0.780209f,0.780834f,0.781459f,0.782082f,0.782705f,0.783327f,\ + 0.783948f,0.784569f,0.785188f,0.785807f,0.786425f,0.787042f,0.787659f,0.788275f,0.788890f,0.789504f,0.790117f,0.790730f,0.791341f,0.791952f,0.792563f,0.793172f,0.793781f,0.794388f,0.794995f,0.795602f,0.796207f,0.796812f,0.797415f,0.798019f,0.798621f,0.799222f,0.799823f,0.800423f,0.801022f,0.801620f,0.802217f,0.802814f,0.803410f,0.804005f,0.804599f,0.805192f,0.805785f,0.806377f,0.806968f,0.807558f,0.808147f,0.808736f,0.809324f,0.809911f,0.810497f,0.811082f,0.811667f,0.812250f,0.812833f,0.813416f,0.813997f,0.814577f,0.815157f,0.815736f,0.816314f,0.816891f,0.817467f,0.818043f,0.818618f,0.819192f,0.819765f,0.820337f,0.820908f,0.821479f,0.822049f,0.822618f,0.823186f,0.823753f,0.824320f,0.824886f,0.825451f,0.826015f,0.826578f,0.827140f,0.827702f,0.828263f,0.828823f,0.829382f,0.829940f,0.830497f,0.831054f,0.831610f,0.832165f,0.832719f,0.833272f,0.833825f,0.834376f,0.834927f,0.835477f,0.836026f,0.836574f,0.837122f,0.837668f,0.838214f,0.838759f,0.839303f,0.839846f,0.840389f,0.840930f,0.841471f,\ + 0.842011f,0.842550f,0.843088f,0.843625f,0.844162f,0.844698f,0.845232f,0.845766f,0.846300f,0.846832f,0.847363f,0.847894f,0.848424f,0.848953f,0.849481f,0.850008f,0.850534f,0.851060f,0.851584f,0.852108f,0.852631f,0.853153f,0.853674f,0.854195f,0.854714f,0.855233f,0.855751f,0.856268f,0.856784f,0.857299f,0.857813f,0.858327f,0.858840f,0.859351f,0.859862f,0.860372f,0.860882f,0.861390f,0.861898f,0.862404f,0.862910f,0.863415f,0.863919f,0.864422f,0.864925f,0.865426f,0.865927f,0.866426f,0.866925f,0.867423f,0.867920f,0.868417f,0.868912f,0.869407f,0.869900f,0.870393f,0.870885f,0.871376f,0.871866f,0.872355f,0.872844f,0.873331f,0.873818f,0.874304f,0.874789f,0.875273f,0.875756f,0.876239f,0.876720f,0.877200f,0.877680f,0.878159f,0.878637f,0.879114f,0.879590f,0.880065f,0.880540f,0.881013f,0.881486f,0.881958f,0.882429f,0.882899f,0.883368f,0.883836f,0.884303f,0.884770f,0.885235f,0.885700f,0.886164f,0.886627f,0.887089f,0.887550f,0.888010f,0.888470f,0.888928f,0.889386f,0.889843f,0.890298f,0.890753f,0.891207f,\ + 0.891661f,0.892113f,0.892564f,0.893015f,0.893464f,0.893913f,0.894361f,0.894808f,0.895254f,0.895699f,0.896143f,0.896586f,0.897029f,0.897470f,0.897911f,0.898351f,0.898789f,0.899227f,0.899664f,0.900100f,0.900536f,0.900970f,0.901403f,0.901836f,0.902268f,0.902698f,0.903128f,0.903557f,0.903985f,0.904412f,0.904838f,0.905264f,0.905688f,0.906112f,0.906534f,0.906956f,0.907377f,0.907797f,0.908215f,0.908633f,0.909051f,0.909467f,0.909882f,0.910297f,0.910710f,0.911123f,0.911534f,0.911945f,0.912355f,0.912764f,0.913172f,0.913579f,0.913985f,0.914391f,0.914795f,0.915198f,0.915601f,0.916003f,0.916403f,0.916803f,0.917202f,0.917600f,0.917997f,0.918393f,0.918788f,0.919183f,0.919576f,0.919968f,0.920360f,0.920751f,0.921140f,0.921529f,0.921917f,0.922304f,0.922690f,0.923075f,0.923459f,0.923842f,0.924225f,0.924606f,0.924986f,0.925366f,0.925745f,0.926122f,0.926499f,0.926875f,0.927250f,0.927624f,0.927997f,0.928369f,0.928740f,0.929110f,0.929480f,0.929848f,0.930216f,0.930582f,0.930948f,0.931313f,0.931676f,0.932039f,\ + 0.932401f,0.932762f,0.933122f,0.933481f,0.933839f,0.934196f,0.934553f,0.934908f,0.935263f,0.935616f,0.935969f,0.936320f,0.936671f,0.937021f,0.937369f,0.937717f,0.938064f,0.938410f,0.938755f,0.939099f,0.939443f,0.939785f,0.940126f,0.940466f,0.940806f,0.941144f,0.941482f,0.941818f,0.942154f,0.942489f,0.942823f,0.943155f,0.943487f,0.943818f,0.944148f,0.944477f,0.944805f,0.945132f,0.945459f,0.945784f,0.946108f,0.946432f,0.946754f,0.947076f,0.947396f,0.947716f,0.948034f,0.948352f,0.948669f,0.948985f,0.949299f,0.949613f,0.949926f,0.950238f,0.950549f,0.950859f,0.951169f,0.951477f,0.951784f,0.952090f,0.952396f,0.952700f,0.953004f,0.953306f,0.953607f,0.953908f,0.954208f,0.954506f,0.954804f,0.955101f,0.955397f,0.955692f,0.955985f,0.956278f,0.956570f,0.956861f,0.957151f,0.957440f,0.957729f,0.958016f,0.958302f,0.958587f,0.958872f,0.959155f,0.959437f,0.959719f,0.959999f,0.960279f,0.960557f,0.960835f,0.961112f,0.961387f,0.961662f,0.961936f,0.962209f,0.962480f,0.962751f,0.963021f,0.963290f,0.963558f,\ + 0.963825f,0.964091f,0.964356f,0.964620f,0.964884f,0.965146f,0.965407f,0.965667f,0.965927f,0.966185f,0.966442f,0.966699f,0.966954f,0.967209f,0.967462f,0.967715f,0.967966f,0.968217f,0.968466f,0.968715f,0.968963f,0.969209f,0.969455f,0.969700f,0.969944f,0.970187f,0.970429f,0.970670f,0.970909f,0.971148f,0.971386f,0.971623f,0.971859f,0.972095f,0.972329f,0.972562f,0.972794f,0.973025f,0.973255f,0.973485f,0.973713f,0.973940f,0.974166f,0.974392f,0.974616f,0.974840f,0.975062f,0.975283f,0.975504f,0.975723f,0.975942f,0.976159f,0.976376f,0.976592f,0.976806f,0.977020f,0.977233f,0.977444f,0.977655f,0.977865f,0.978073f,0.978281f,0.978488f,0.978694f,0.978899f,0.979102f,0.979305f,0.979507f,0.979708f,0.979908f,0.980107f,0.980305f,0.980502f,0.980698f,0.980893f,0.981087f,0.981280f,0.981472f,0.981663f,0.981854f,0.982043f,0.982231f,0.982418f,0.982604f,0.982789f,0.982974f,0.983157f,0.983339f,0.983521f,0.983701f,0.983880f,0.984058f,0.984236f,0.984412f,0.984588f,0.984762f,0.984935f,0.985108f,0.985279f,0.985450f,\ + 0.985619f,0.985788f,0.985955f,0.986122f,0.986287f,0.986452f,0.986615f,0.986778f,0.986939f,0.987100f,0.987260f,0.987418f,0.987576f,0.987733f,0.987888f,0.988043f,0.988197f,0.988349f,0.988501f,0.988652f,0.988801f,0.988950f,0.989098f,0.989245f,0.989391f,0.989535f,0.989679f,0.989822f,0.989964f,0.990105f,0.990244f,0.990383f,0.990521f,0.990658f,0.990794f,0.990929f,0.991063f,0.991195f,0.991327f,0.991458f,0.991588f,0.991717f,0.991845f,0.991972f,0.992098f,0.992223f,0.992347f,0.992470f,0.992592f,0.992713f,0.992833f,0.992952f,0.993070f,0.993187f,0.993303f,0.993418f,0.993532f,0.993645f,0.993757f,0.993868f,0.993978f,0.994088f,0.994196f,0.994303f,0.994409f,0.994514f,0.994618f,0.994721f,0.994823f,0.994924f,0.995025f,0.995124f,0.995222f,0.995319f,0.995415f,0.995510f,0.995604f,0.995697f,0.995790f,0.995881f,0.995971f,0.996060f,0.996148f,0.996236f,0.996322f,0.996407f,0.996491f,0.996574f,0.996657f,0.996738f,0.996818f,0.996897f,0.996975f,0.997053f,0.997129f,0.997204f,0.997278f,0.997352f,0.997424f,0.997495f,\ + 0.997565f,0.997634f,0.997703f,0.997770f,0.997836f,0.997901f,0.997966f,0.998029f,0.998091f,0.998152f,0.998213f,0.998272f,0.998330f,0.998388f,0.998444f,0.998499f,0.998553f,0.998607f,0.998659f,0.998710f,0.998760f,0.998810f,0.998858f,0.998905f,0.998952f,0.998997f,0.999041f,0.999084f,0.999127f,0.999168f,0.999208f,0.999247f,0.999286f,0.999323f,0.999359f,0.999395f,0.999429f,0.999462f,0.999495f,0.999526f,0.999556f,0.999585f,0.999614f,0.999641f,0.999667f,0.999693f,0.999717f,0.999740f,0.999762f,0.999784f,0.999804f,0.999823f,0.999842f,0.999859f,0.999875f,0.999891f,0.999905f,0.999918f,0.999930f,0.999942f,0.999952f,0.999961f,0.999970f,0.999977f,0.999983f,0.999988f,0.999993f,0.999996f,0.999998f,1.000000f,1.000000f}; + + +#endif \ No newline at end of file diff --git a/code/PainterEngine/Core/PX_Memory.c b/code/PainterEngine/Core/PX_Memory.c new file mode 100644 index 0000000000000000000000000000000000000000..a3aaf432c451666e16fe481c51fffd4d07f1b83e --- /dev/null +++ b/code/PainterEngine/Core/PX_Memory.c @@ -0,0 +1,133 @@ +#include "PX_Memory.h" +px_void PX_MemoryInit(px_memorypool *mp,px_memory *memory) +{ + memory->buffer=PX_NULL; + memory->allocsize=0; + memory->usedsize=0; + memory->mp=mp; +} + +px_bool PX_MemoryCat(px_memory *memory,px_void *buffer,px_int size) +{ + px_byte *old; + px_int length,shl; + + if (memory->usedsize+size>memory->allocsize) + { + shl=0; + old=memory->buffer; + length=memory->usedsize+size; + while ((px_int)(1<<++shl)<=length); + memory->allocsize=(1<buffer=(px_byte*)MP_Malloc(memory->mp,memory->allocsize); + if(!memory->buffer) return PX_FALSE; + if(old) + PX_memcpy(memory->buffer,old,memory->usedsize); + + PX_memcpy(memory->buffer+memory->usedsize,buffer,size); + + if(old) + MP_Free(memory->mp,old); + } + else + { + PX_memcpy(memory->buffer+memory->usedsize,buffer,size); + } + memory->usedsize+=size; + return PX_TRUE; +} + +px_void PX_MemoryFree(px_memory *memory) +{ + if (memory->allocsize==0||memory->buffer==PX_NULL) + { + return; + } + MP_Free(memory->mp,memory->buffer); + memory->buffer=PX_NULL; + memory->usedsize=0; + memory->allocsize=0; +} + +px_byte * PX_MemoryData(px_memory *memory) +{ + return memory->buffer; +} + +px_bool PX_MemoryAlloc(px_memory *memory,px_int size) +{ + PX_MemoryFree(memory); + memory->allocsize=size; + memory->usedsize=0; + return (memory->buffer=(px_byte *)MP_Malloc(memory->mp,size))!=0; +} + +px_bool PX_MemoryResize(px_memory *memory,px_int size) +{ + return PX_MemoryAlloc(memory,size); +} + + +px_byte *PX_MemoryFine(px_memory *memory,px_void *buffer,px_int size) +{ + px_int offest; + if (memory->usedsizeusedsize-size+1;offest++) + { + if (PX_memequ(memory->buffer+offest,buffer,size)) + { + return (memory->buffer+offest); + } + } + return PX_NULL; +} + +px_void PX_MemoryClear(px_memory *memory) +{ + memory->usedsize=0; +} + +px_bool PX_MemoryCopy(px_memory *memory,px_void *buffer,px_int startoffset,px_int size) +{ + px_byte *old; + px_int length,shl; + + if (startoffset+size>memory->allocsize) + { + shl=0; + old=memory->buffer; + length=startoffset+size; + while ((px_int)(1<<++shl)<=length); + memory->allocsize=(1<buffer=(px_byte*)MP_Malloc(memory->mp,memory->allocsize); + if (!memory->buffer) + { + MP_Free(memory->mp,old); + return PX_FALSE; + } + if(old) + PX_memcpy(memory->buffer,old,memory->usedsize); + + PX_memcpy(memory->buffer+startoffset,buffer,size); + + if(old) + MP_Free(memory->mp,old); + + memory->usedsize=startoffset+size; + } + else + { + if (startoffset+size>memory->usedsize) + { + memory->usedsize=startoffset+size; + } + + PX_memcpy(memory->buffer+startoffset,buffer,size); + + } + return PX_TRUE; +} + diff --git a/code/PainterEngine/Core/PX_Memory.h b/code/PainterEngine/Core/PX_Memory.h new file mode 100644 index 0000000000000000000000000000000000000000..f8f358bf03a356d60e12d6532a7ec4605bf22278 --- /dev/null +++ b/code/PainterEngine/Core/PX_Memory.h @@ -0,0 +1,24 @@ +#ifndef __PX_MEMORY_H +#define __PX_MEMORY_H + +#include "PX_MemoryPool.h" + +typedef struct __PX_memroy +{ + px_byte *buffer; + px_memorypool *mp; + px_int usedsize; + px_int allocsize; +}px_memory; + +px_void PX_MemoryInit(px_memorypool *mp,px_memory *memory); +px_void PX_MemoryClear(px_memory *memory); +px_bool PX_MemoryAlloc(px_memory *memory,px_int size); +px_bool PX_MemoryResize(px_memory *memory,px_int size); +px_bool PX_MemoryCat(px_memory *memory,px_void *buffer,px_int size); +px_bool PX_MemoryCopy(px_memory *memory,px_void *buffer,px_int startoffset,px_int size); +px_byte *PX_MemoryFine(px_memory *memory,px_void *buffer,px_int size); +px_void PX_MemoryFree(px_memory *memory); +px_byte *PX_MemoryData(px_memory *memory); + +#endif diff --git a/code/PainterEngine/Core/PX_MemoryPool.c b/code/PainterEngine/Core/PX_MemoryPool.c new file mode 100644 index 0000000000000000000000000000000000000000..b39bdb1c05728bec14cc7a8ec55091e6e970393b --- /dev/null +++ b/code/PainterEngine/Core/PX_MemoryPool.c @@ -0,0 +1,537 @@ +#include "PX_MemoryPool.h" + +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + +#include "stdio.h" +static px_int DEBUG_i; +static px_int DEBUG_assert; +px_void MP_UnreleaseInfo(px_memorypool *mp) +{ + px_int i; + for (i=0;iDEBUG_allocdata)/sizeof(mp->DEBUG_allocdata[0]);i++) + { + if(mp->DEBUG_allocdata[i].addr) + printf("Warning:Unreleased memory in MID %p\n",mp->DEBUG_allocdata[i].addr); + + } +} + +#endif + + +typedef struct _MemoryNode +{ + px_void *StartAddr; + px_void *EndAddr; +}MemoryNode; + + + + + MemoryNode * PX_MemoryPool_GetFreeTableAddr(px_memorypool *MP) +{ + return (MemoryNode *)((px_uchar *)MP->EndAddr-(sizeof(MemoryNode)*MP->FreeTableCount)+1); +} + + MemoryNode *PX_MemoryPool_GetFreeTable(px_memorypool *MP,px_uint Index) +{ + Index++; + return (MemoryNode *)((px_uchar *)MP->EndAddr-(sizeof(MemoryNode)*Index)+1); +} + +MemoryNode *PX_AllocFromFree(px_memorypool *MP,px_uint Size) +{ + MemoryNode *Node; + if (Size+2*sizeof(MemoryNode)>MP->FreeSize) + { + return 0; + } + Node=(MemoryNode *)MP->AllocAddr; + (*Node).StartAddr=(px_uchar *)MP->AllocAddr+sizeof(MemoryNode); + (*Node).EndAddr=(px_uchar *)Node->StartAddr+Size-1; + + + MP->FreeSize-=(Size+2*sizeof(MemoryNode)); + MP->AllocAddr=(px_char *)MP->AllocAddr+Size+sizeof(MemoryNode); + + return Node; +} + + + + +px_void PX_MemoryPoolRemoveFreeNode(px_memorypool *MP,px_uint Index) +{ + px_uint i; + MemoryNode *pFreeNode=PX_MemoryPool_GetFreeTable(MP,Index); + + + for (i=Index;iFreeTableCount;i++) + { + (*pFreeNode)=*(pFreeNode-1); + pFreeNode--; + } + + MP->FreeTableCount--; + if (MP->FreeTableCount==0) + { + MP->MaxMemoryfragSize=0; + } + +} + +MemoryNode *PX_AllocFreeMemoryNode(px_memorypool *MP) +{ + MP->FreeTableCount++; + return PX_MemoryPool_GetFreeTable(MP,MP->FreeTableCount-1); +} + +px_void PX_UpdateMaxFreqSize(px_memorypool *MP) +{ + MemoryNode *itNode; + px_uint i,Size; + + MP->MaxMemoryfragSize=0; + + for(i=0;iFreeTableCount;i++) + { + itNode=PX_MemoryPool_GetFreeTable(MP,i); + if ((Size=(px_uint)(((px_char *)itNode->EndAddr-(px_char *)itNode->StartAddr)+1))>MP->MaxMemoryfragSize) + { + MP->MaxMemoryfragSize=Size; + } + } +} + +MemoryNode *PX_AllocFromFreq(px_memorypool *MP,px_uint Size) +{ + px_uint i,fSize; + MemoryNode *itNode,*allocNode; + + Size+=sizeof(MemoryNode); + + if (MP->MaxMemoryfragSize>=Size) + { + + for(i=0;iFreeTableCount;i++) + { + itNode=PX_MemoryPool_GetFreeTable(MP,i); + fSize=(px_uint)((px_char *)itNode->EndAddr-(px_char *)itNode->StartAddr+1); + + if (Size<=fSize&&(Size+sizeof(MemoryNode)>fSize)) + { + allocNode=(MemoryNode *)itNode->StartAddr; + + + allocNode->StartAddr=(px_char *)itNode->StartAddr+sizeof(MemoryNode); + allocNode->EndAddr=itNode->EndAddr; + + + PX_MemoryPoolRemoveFreeNode(MP,i); + PX_UpdateMaxFreqSize(MP); + return allocNode; + } + else + { + if(SizeFreeSizeStartAddr; + allocNode->StartAddr=(px_char *)itNode->StartAddr+sizeof(MemoryNode); + allocNode->EndAddr=(px_char *)itNode->StartAddr+Size-1; + + itNode->StartAddr=(px_char *)allocNode->EndAddr+1; + MP->FreeSize-=sizeof(MemoryNode); + PX_UpdateMaxFreqSize(MP); + return allocNode; + } + } + + } + return 0; + } + else + { + return 0; + } +} + + + + + +px_memorypool MP_Create( px_void *MemoryAddr,px_uint MemorySize ) +{ + px_uint Index=0; + px_memorypool MP; + MP.StartAddr=MemoryAddr; + MP.AllocAddr=MemoryAddr; + if(MemorySize) + MP.EndAddr=((px_uchar*)MemoryAddr)+MemorySize-1; + else + MP.EndAddr=MP.StartAddr; + + MP.Size=MemorySize; + MP.FreeSize=MemorySize; + MP.FreeTableCount=0; + MP.MaxMemoryfragSize=0; + MP.nodeCount=0; + MP.ErrorCall_Ptr=PX_NULL; + PX_memset(MemoryAddr,0,MemorySize); + +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + + for (DEBUG_i=0;DEBUG_iDEBUG_allocdata)/sizeof(MP->DEBUG_allocdata[0]);DEBUG_i++) + { + if (MP->DEBUG_allocdata[DEBUG_i].addr!=PX_NULL) + { + MP_Append_data *pAppend; + pAppend=(MP_Append_data *)((px_uchar *)MP->DEBUG_allocdata[DEBUG_i].endAddr-sizeof(MP_Append_data)+1); + itNode=(MemoryNode *)((px_uchar *)MP->DEBUG_allocdata[DEBUG_i].addr-sizeof(MemoryNode)); + if(MP->DEBUG_allocdata[DEBUG_i].startAddr!=itNode->StartAddr) + { + PX_ASSERT(); + return PX_NULL; + } + if(MP->DEBUG_allocdata[DEBUG_i].endAddr!=itNode->EndAddr) + { + PX_ASSERT(); + return PX_NULL; + } + if(pAppend->append!=MP_APPENDDATA_MAGIC) + { + PX_ASSERT(); + return PX_NULL; + } + } + } + +#endif + if (Size==0) + { + return PX_NULL; + } +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + Size+=sizeof(MP_Append_data); +#endif + if (Size%__PX_MEMORYPOOL_ALIGN_BYTES) + { + Size=(Size/__PX_MEMORYPOOL_ALIGN_BYTES+1)*__PX_MEMORYPOOL_ALIGN_BYTES; + } + //Allocate from freq + + MemNode=PX_AllocFromFreq(MP,Size); + if (MemNode!=0) + { +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + for (DEBUG_i=0;DEBUG_iDEBUG_allocdata)/sizeof(MP->DEBUG_allocdata[0]);DEBUG_i++) + { + if(MP->DEBUG_allocdata[DEBUG_i].addr==0) + { + MP->DEBUG_allocdata[DEBUG_i].addr=MemNode->StartAddr; + MP->DEBUG_allocdata[DEBUG_i].startAddr=MemNode->StartAddr; + MP->DEBUG_allocdata[DEBUG_i].endAddr=MemNode->EndAddr; + break; + } + } + pAppend=(MP_Append_data *)((px_uchar *)MemNode->EndAddr-sizeof(MP_Append_data)+1); + pAppend->append=MP_APPENDDATA_MAGIC; + #endif + MP->nodeCount++; + return MemNode->StartAddr; + } + + //Allocate from free + + MemNode=PX_AllocFromFree(MP,Size); + if (MemNode!=0) + { +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + for (DEBUG_i=0;DEBUG_iDEBUG_allocdata)/sizeof(MP->DEBUG_allocdata[0]);DEBUG_i++) + { + if(MP->DEBUG_allocdata[DEBUG_i].addr==0) + { + MP->DEBUG_allocdata[DEBUG_i].addr=MemNode->StartAddr; + MP->DEBUG_allocdata[DEBUG_i].startAddr=MemNode->StartAddr; + MP->DEBUG_allocdata[DEBUG_i].endAddr=MemNode->EndAddr; + break; + } + } + pAppend=(MP_Append_data *)((px_uchar *)MemNode->EndAddr-sizeof(MP_Append_data)+1); + pAppend->append=MP_APPENDDATA_MAGIC; + #endif + MP->nodeCount++; + return MemNode->StartAddr; + } + + if(MP->ErrorCall_Ptr==PX_NULL) + PX_ERROR("MemoryPool Out Of Memory!"); + else + MP->ErrorCall_Ptr(PX_MEMORYPOOL_ERROR_OUTOFMEMORY); + + return PX_NULL; + +} + + + +px_void MP_Free(px_memorypool *MP, px_void *pAddress ) +{ + px_uint32 i,sIndex; + MemoryNode *itNode; + MemoryNode FreeNode; + px_uchar *pcTempStart,*pcTempEnd; + px_uchar bExist; + px_void *TempPointer; + MemoryNode *TempNode; + MP->nodeCount--; + bExist=0; + #if defined(PX_DEBUG_MODE) + if (!pAddress) + { + PX_ASSERT(); + return; + } + #endif + //Get Memory node information + TempPointer=(px_uchar *)pAddress-sizeof(MemoryNode); + TempNode=(MemoryNode *)TempPointer; + FreeNode.StartAddr=TempNode->StartAddr; + FreeNode.EndAddr=TempNode->EndAddr; + + +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + if(FreeNode.StartAddr!=pAddress) PX_ASSERT(); + + for (DEBUG_i=0;DEBUG_iDEBUG_allocdata)/sizeof(MP->DEBUG_allocdata[0]);DEBUG_i++) + { + if(MP->DEBUG_allocdata[DEBUG_i].addr==pAddress) + { + MP_Append_data *pAppend; + pAppend=(MP_Append_data *)((px_uchar *)MP->DEBUG_allocdata[DEBUG_i].endAddr-sizeof(MP_Append_data)+1); + if(MP->DEBUG_allocdata[DEBUG_i].startAddr!=FreeNode.StartAddr) PX_ASSERT(); + if(MP->DEBUG_allocdata[DEBUG_i].endAddr!=FreeNode.EndAddr) PX_ASSERT(); + if(pAppend->append!=MP_APPENDDATA_MAGIC)PX_ASSERT(); + MP->DEBUG_allocdata[DEBUG_i].addr=PX_NULL; + MP->DEBUG_allocdata[DEBUG_i].startAddr=PX_NULL; + MP->DEBUG_allocdata[DEBUG_i].endAddr=PX_NULL; + break; + } + } + + if (MP->DEBUG_allocdata[PX_COUNTOF(MP->DEBUG_allocdata)-1].addr==PX_NULL) + { + if(DEBUG_i==sizeof(MP->DEBUG_allocdata)/sizeof(MP->DEBUG_allocdata[0])) + { + if(MP->ErrorCall_Ptr==PX_NULL) + PX_LOG("Invalid address free"); + else + MP->ErrorCall_Ptr(PX_MEMORYPOOL_ERROR_INVALID_ADDRESS); + + PX_ASSERT(); + goto _END; + } + } + + + + +#endif + + //px_memset(FreeNode.StartAddr,0xff,(px_int)FreeNode.EndAddr-(px_int)FreeNode.StartAddr+1); + //Reset address + FreeNode.StartAddr=(px_uchar *)FreeNode.StartAddr-sizeof(MemoryNode); + + //If this memory node is last + if ((px_char *)FreeNode.EndAddr+1==(px_char *)MP->AllocAddr) + { + for(i=0;iFreeTableCount;i++) + { + itNode=PX_MemoryPool_GetFreeTable(MP,i); + if ((px_char *)itNode->EndAddr+1==(px_char *)FreeNode.StartAddr) + { + MP->AllocAddr=itNode->StartAddr; + MP->FreeSize+=(px_uint32)((px_char *)FreeNode.EndAddr-(px_char *)FreeNode.StartAddr+sizeof(MemoryNode)+1); + MP->FreeSize+=(px_uint32)((px_char *)itNode->EndAddr-(px_char *)itNode->StartAddr+1+sizeof(MemoryNode)); + PX_MemoryPoolRemoveFreeNode(MP,i); + goto _END; + + } + } + + //just reset allocAddr to release this memory node + MP->AllocAddr=(px_char *)FreeNode.StartAddr; + MP->FreeSize+=(px_uint32)((px_char *)FreeNode.EndAddr-(px_char *)FreeNode.StartAddr+sizeof(MemoryNode)+1); + + goto _END; + } + + + + //Search memory node which can be combine + sIndex=0xffffffff; + for(i=0;iFreeTableCount;i++) + { + itNode=PX_MemoryPool_GetFreeTable(MP,i); + pcTempStart=(px_uchar *)itNode->StartAddr; + pcTempEnd=(px_uchar *)itNode->EndAddr; + + + if (pcTempStart==(px_uchar *)FreeNode.EndAddr+1) + { + if(sIndex==0xffffffff) + { + sIndex=i; + //Refresh this node + itNode->StartAddr=FreeNode.StartAddr; + FreeNode=*itNode; + MP->FreeSize+=sizeof(MemoryNode); + } + else + { + MP->FreeSize+=sizeof(MemoryNode); + itNode->StartAddr=FreeNode.StartAddr; + PX_MemoryPoolRemoveFreeNode(MP,sIndex); + } + bExist=1; + } + + + if (pcTempEnd+1==(px_uchar *)FreeNode.StartAddr) + { + if(sIndex==0xffffffff) + { + sIndex=i; + //Refresh this node + itNode->EndAddr=FreeNode.EndAddr; + FreeNode=*itNode; + MP->FreeSize+=sizeof(MemoryNode); + } + else + { + itNode->EndAddr=FreeNode.EndAddr; + MP->FreeSize+=sizeof(MemoryNode); + PX_MemoryPoolRemoveFreeNode(MP,sIndex); + + } + bExist=1; + } + } + if(bExist==0) + { +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + for(i=0;iFreeTableCount;i++) + { + itNode=PX_MemoryPool_GetFreeTable(MP,i); + if (FreeNode.StartAddr>=itNode->StartAddr&&FreeNode.StartAddr<=itNode->EndAddr) + { + //alloc error + PX_ASSERT(); + goto _END; + } + if (FreeNode.EndAddr>=itNode->StartAddr&&FreeNode.EndAddr<=itNode->EndAddr) + { + PX_ASSERT(); + goto _END; + } + } +#endif + *PX_AllocFreeMemoryNode(MP)=FreeNode; + } + + PX_UpdateMaxFreqSize(MP); +_END: +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + for (DEBUG_i=0;DEBUG_iDEBUG_allocdata)/sizeof(MP->DEBUG_allocdata[0]);DEBUG_i++) + { + if(MP->DEBUG_allocdata[DEBUG_i].addr!=PX_NULL) + { + for(i=0;iFreeTableCount;i++) + { + itNode=PX_MemoryPool_GetFreeTable(MP,i); + if (MP->DEBUG_allocdata[DEBUG_i].startAddr>=itNode->StartAddr&&MP->DEBUG_allocdata[DEBUG_i].startAddr<=itNode->EndAddr) + { + //error free + PX_ASSERT(); + } + if (MP->DEBUG_allocdata[DEBUG_i].endAddr>=itNode->StartAddr&&MP->DEBUG_allocdata[DEBUG_i].endAddr<=itNode->EndAddr) + { + PX_ASSERT(); + } + } + } + } +#endif + return; +} + +px_void MP_Release(px_memorypool *Node) +{ + //free(G_MemoryPool.StartAddr); +} + +px_void MP_ErrorCatch(px_memorypool *Pool,PX_MP_ErrorCall ErrorCall) +{ + Pool->ErrorCall_Ptr=ErrorCall; +} + +px_uint MP_Size(px_memorypool *Pool,px_void *pAddress) +{ + px_void *TempPointer; + MemoryNode *TempNode; + //Get Memory node information + if (pAddress==PX_NULL) + { + PX_ASSERT(); + return 0; + } + TempPointer=(px_uchar *)pAddress-sizeof(MemoryNode); + TempNode=(MemoryNode *)TempPointer; +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) +return (px_uint)(((px_char *)(TempNode->EndAddr)-(px_char *)(TempNode->StartAddr))+1-sizeof(MP_Append_data)); +#else + return (px_uint32)((px_char *)(TempNode->EndAddr)-(px_char *)(TempNode->StartAddr))+1; +#endif + +} + +px_void MP_Reset(px_memorypool *Pool) +{ + Pool->AllocAddr=Pool->StartAddr; + Pool->EndAddr=((px_uchar*)Pool->StartAddr)+Pool->Size-1; + Pool->FreeSize=Pool->Size; + Pool->FreeTableCount=0; + Pool->MaxMemoryfragSize=0; + Pool->nodeCount=0; +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + PX_memset(Pool->DEBUG_allocdata,0,sizeof(Pool->DEBUG_allocdata)); +#endif +} + diff --git a/code/PainterEngine/Core/PX_MemoryPool.h b/code/PainterEngine/Core/PX_MemoryPool.h new file mode 100644 index 0000000000000000000000000000000000000000..7723280bcce370ce4d253ab825397e8ae512eec1 --- /dev/null +++ b/code/PainterEngine/Core/PX_MemoryPool.h @@ -0,0 +1,88 @@ +#ifndef PIXELSES_MEMORYPOOL +#define PIXELSES_MEMORYPOOL +#include "PX_Typedef.h" + +#define __PX_MEMORYPOOL_ALIGN_BYTES (sizeof(void *)) +#define PX_MEMORYPOOL_DEBUG_CHECK + + +typedef enum +{ + PX_MEMORYPOOL_ERROR_OUTOFMEMORY, + PX_MEMORYPOOL_ERROR_INVALID_ACCESS, + PX_MEMORYPOOL_ERROR_INVALID_ADDRESS +}PX_MEMORYPOOL_ERROR; + +typedef px_void (*PX_MP_ErrorCall)(PX_MEMORYPOOL_ERROR); + +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) +typedef struct +{ + px_void *addr; + px_void *startAddr; + px_void *endAddr; +}MP_alloc_debug; + + +typedef struct +{ + px_dword append; +}MP_Append_data; +#define MP_APPENDDATA_MAGIC 0x31415926 +#endif + +typedef struct _memoryPool +{ + px_void *AllocAddr; + px_void *StartAddr; + px_void *EndAddr; + px_uint32 Size; + px_uint32 FreeSize; + px_uint32 nodeCount; + px_uint32 FreeTableCount; + px_uint32 MaxMemoryfragSize; + PX_MP_ErrorCall ErrorCall_Ptr; +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) + MP_alloc_debug DEBUG_allocdata[1024]; +#endif +}px_memorypool; + + +#if defined(PX_DEBUG_MODE) && defined(PX_MEMORYPOOL_DEBUG_CHECK) +px_void MP_UnreleaseInfo(px_memorypool *mp); +#define MP_DEBUG_AID(x) MP_UnreleaseInfo(x) +#else +#define MP_DEBUG_AID(x) +#endif + + +//Create a memory pool & return a MemoryPool structure +//MemoryAddr :Start address of memory +//MemorySize :Size of memory pool +px_memorypool MP_Create (px_void *MemoryAddr,px_uint MemorySize); + +//Get memory size of Ptr +//Pool: Pool MemoryPool structure pointer +//Ptr: memory pointer +//Return - if succeeded return the size of Ptr,else return zero +px_uint MP_Size(px_memorypool *Pool,px_void *Ptr); + +//Alloc a memory from memory pool +//Pool: Pool MemoryPool structure pointer +//Size: Size of alloc +//Return - if succeeded return the begin address of memories +// if faith return null +px_void *MP_Malloc (px_memorypool *Pool,px_uint Size); + +//Free the memory from memory pool +//Pool: Pool MemoryPool structure pointer +//pAddress: Pointer memory need to be free +px_void MP_Free (px_memorypool *Pool,px_void *pAddress); +px_void MP_Release (px_memorypool *Pool); +px_void MP_Reset (px_memorypool *Pool); + + +//Register memoryPool error +px_void MP_ErrorCatch(px_memorypool *Pool,PX_MP_ErrorCall ErrorCall); + +#endif \ No newline at end of file diff --git a/code/PainterEngine/Core/PX_Packet.c b/code/PainterEngine/Core/PX_Packet.c new file mode 100644 index 0000000000000000000000000000000000000000..0577f3e2dbbced93866abdeb74dabd7cbbf8bb0a --- /dev/null +++ b/code/PainterEngine/Core/PX_Packet.c @@ -0,0 +1,100 @@ +#include "PX_Packet.h" + + +px_bool PX_PacketCompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size,px_dword algorithm) +{ + PX_Packet_Header *pHeader=(PX_Packet_Header *)_out; + px_byte *pw=PX_NULL; + + if (!_out) + { + switch (algorithm) + { + case PX_PACKET_ALOGRITHM_HUFFMAN: + { + PX_huffmanCompress(_in,input_size,_out,out_size); + *out_size+=sizeof(PX_Packet_Header); + } + break; + case PX_PACKET_ALOGRITHM_ARLE: + { + PX_ArleCompress(_in,input_size,_out,out_size); + *out_size+=sizeof(PX_Packet_Header); + } + break; + } + return PX_TRUE; + } + + pHeader->algorithm=algorithm; + PX_memcpy(pHeader->magic,"PACK",4); + pHeader->CRC=PX_crc32(_in,input_size); + + switch (algorithm) + { + case PX_PACKET_ALOGRITHM_HUFFMAN: + { + PX_huffmanCompress(_in,input_size,_out+sizeof(PX_Packet_Header),out_size); + *out_size+=sizeof(PX_Packet_Header); + } + break; + case PX_PACKET_ALOGRITHM_ARLE: + { + PX_ArleCompress(_in,input_size,_out+sizeof(PX_Packet_Header),out_size); + *out_size+=sizeof(PX_Packet_Header); + } + break; + } + return PX_TRUE; +} + +px_bool PX_PacketDecompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size) +{ + PX_Packet_Header *pHeader=(PX_Packet_Header *)_in; + px_byte *pw=PX_NULL; + + if (!_out) + { + switch (pHeader->algorithm) + { + case PX_PACKET_ALOGRITHM_HUFFMAN: + { + PX_huffmanDecompress(_in+sizeof(PX_Packet_Header),input_size-sizeof(PX_Packet_Header),_out,out_size); + } + break; + case PX_PACKET_ALOGRITHM_ARLE: + { + PX_ArleDecompress(_in+sizeof(PX_Packet_Header),input_size-sizeof(PX_Packet_Header),_out,out_size); + } + break; + } + return PX_TRUE; + } + + + switch (pHeader->algorithm) + { + case PX_PACKET_ALOGRITHM_HUFFMAN: + { + PX_huffmanDecompress(_in+sizeof(PX_Packet_Header),input_size-sizeof(PX_Packet_Header),_out,out_size); + if (PX_crc32(_out,*out_size)!=pHeader->CRC) + { + return PX_FALSE; + } + return PX_TRUE; + } + break; + case PX_PACKET_ALOGRITHM_ARLE: + { + PX_ArleDecompress(_in+sizeof(PX_Packet_Header),input_size-sizeof(PX_Packet_Header),_out,out_size); + if (PX_crc32(_out,*out_size)!=pHeader->CRC) + { + return PX_FALSE; + } + return PX_TRUE; + } + break; + } + return PX_FALSE; +} + diff --git a/code/PainterEngine/Core/PX_Packet.h b/code/PainterEngine/Core/PX_Packet.h new file mode 100644 index 0000000000000000000000000000000000000000..30ca642ca46143ef8837feaa66bd229dfd7cd78f --- /dev/null +++ b/code/PainterEngine/Core/PX_Packet.h @@ -0,0 +1,20 @@ +#ifndef PX_PACKET_H +#define PX_PACKET_H + +#include "PX_Arle.h" +#include "PX_Huffman.h" + +#define PX_PACKET_ALOGRITHM_HUFFMAN 0 +#define PX_PACKET_ALOGRITHM_ARLE 1 + + +typedef struct +{ + px_char magic[4];//PACK + px_dword algorithm; + px_dword CRC; +}PX_Packet_Header; + +px_bool PX_PacketCompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size,px_dword algotithm); +px_bool PX_PacketDecompress(px_byte *_in,px_uint input_size,px_byte *_out,px_uint *out_size); +#endif diff --git a/code/PainterEngine/Core/PX_ParallelCore.c b/code/PainterEngine/Core/PX_ParallelCore.c new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/code/PainterEngine/Core/PX_ParallelCore.h b/code/PainterEngine/Core/PX_ParallelCore.h new file mode 100644 index 0000000000000000000000000000000000000000..82dc3d2d9130ecb0bc36474af20ad67762f86d77 --- /dev/null +++ b/code/PainterEngine/Core/PX_ParallelCore.h @@ -0,0 +1,5 @@ +#ifndef PX_PARALLELCORE_H +#define PX_PARALLELCORE_H + + +#endif diff --git a/code/PainterEngine/Core/PX_Quadtree.c b/code/PainterEngine/Core/PX_Quadtree.c new file mode 100644 index 0000000000000000000000000000000000000000..b8e3e8c20515d553482ef3fc028eb64659465ff3 --- /dev/null +++ b/code/PainterEngine/Core/PX_Quadtree.c @@ -0,0 +1,256 @@ +#include "PX_Quadtree.h" + +//#include "stdio.h" + +static px_bool PX_Quadtree_InitAABB(px_memorypool *mp,px_int PX_AABB_MAX_DEEP,PX_Quadtree_AABB *aabb) +{ + if (aabb) + { + if (aabb->deep>=PX_AABB_MAX_DEEP) + { + PX_ListInit(mp,&aabb->dataList); + return PX_TRUE; + } + else + { + aabb->Area1=(PX_Quadtree_AABB *)MP_Malloc(mp,sizeof(PX_Quadtree_AABB)); + aabb->Area1->deep=aabb->deep+1; + aabb->Area1->Left=aabb->Left; + aabb->Area1->Right=(aabb->Left+aabb->Right)/2; + aabb->Area1->Top=aabb->Top; + aabb->Area1->Bottom=(aabb->Top+aabb->Bottom)/2; + aabb->Area1->objectCount=0; + aabb->Area1->Area1=PX_NULL; + aabb->Area1->Area2=PX_NULL; + aabb->Area1->Area3=PX_NULL; + aabb->Area1->Area4=PX_NULL; + aabb->Area1->dataList.size=0; + aabb->Area1->dataList.head=PX_NULL; + aabb->Area1->dataList.end=PX_NULL; + aabb->Area1->dataList.mp=PX_NULL; + if(!PX_Quadtree_InitAABB(mp,PX_AABB_MAX_DEEP,aabb->Area1)) return PX_FALSE; + + aabb->Area2=(PX_Quadtree_AABB *)MP_Malloc(mp,sizeof(PX_Quadtree_AABB)); + aabb->Area2->deep=aabb->deep+1; + aabb->Area2->Left=aabb->Area1->Left+(aabb->Right-aabb->Left)/2; + aabb->Area2->Right=aabb->Area1->Right+(aabb->Right-aabb->Left)/2; + aabb->Area2->Top=aabb->Area1->Top; + aabb->Area2->Bottom=aabb->Area1->Bottom; + aabb->Area2->objectCount=0; + aabb->Area2->Area1=PX_NULL; + aabb->Area2->Area2=PX_NULL; + aabb->Area2->Area3=PX_NULL; + aabb->Area2->Area4=PX_NULL; + aabb->Area2->dataList.size=0; + aabb->Area2->dataList.head=PX_NULL; + aabb->Area2->dataList.end=PX_NULL; + aabb->Area2->dataList.mp=PX_NULL; + if(!PX_Quadtree_InitAABB(mp,PX_AABB_MAX_DEEP,aabb->Area2)) return PX_FALSE; + + aabb->Area3=(PX_Quadtree_AABB *)MP_Malloc(mp,sizeof(PX_Quadtree_AABB)); + aabb->Area3->deep=aabb->deep+1; + aabb->Area3->Left=aabb->Area1->Left; + aabb->Area3->Right=aabb->Area1->Right; + aabb->Area3->Top=aabb->Area1->Top+(aabb->Bottom-aabb->Top)/2; + aabb->Area3->Bottom=aabb->Area1->Bottom+(aabb->Bottom-aabb->Top)/2;; + aabb->Area3->objectCount=0; + aabb->Area3->Area1=PX_NULL; + aabb->Area3->Area2=PX_NULL; + aabb->Area3->Area3=PX_NULL; + aabb->Area3->Area4=PX_NULL; + aabb->Area3->dataList.size=0; + aabb->Area3->dataList.head=PX_NULL; + aabb->Area3->dataList.end=PX_NULL; + aabb->Area3->dataList.mp=PX_NULL; + if(!PX_Quadtree_InitAABB(mp,PX_AABB_MAX_DEEP,aabb->Area3)) return PX_FALSE; + + aabb->Area4=(PX_Quadtree_AABB *)MP_Malloc(mp,sizeof(PX_Quadtree_AABB)); + aabb->Area4->deep=aabb->deep+1; + aabb->Area4->Left=aabb->Area1->Left+(aabb->Right-aabb->Left)/2; + aabb->Area4->Right=aabb->Area1->Right+(aabb->Right-aabb->Left)/2; + aabb->Area4->Top=aabb->Area1->Top+(aabb->Bottom-aabb->Top)/2; + aabb->Area4->Bottom=aabb->Area1->Bottom+(aabb->Bottom-aabb->Top)/2; + aabb->Area4->objectCount=0; + aabb->Area4->Area1=PX_NULL; + aabb->Area4->Area2=PX_NULL; + aabb->Area4->Area3=PX_NULL; + aabb->Area4->Area4=PX_NULL; + aabb->Area4->dataList.size=0; + aabb->Area4->dataList.head=PX_NULL; + aabb->Area4->dataList.end=PX_NULL; + aabb->Area4->dataList.mp=PX_NULL; + if(!PX_Quadtree_InitAABB(mp,PX_AABB_MAX_DEEP,aabb->Area4)) return PX_FALSE; + + return PX_TRUE; + } + } + return PX_FALSE; +} + +px_bool PX_QuadtreeCreate(px_memorypool *mp,PX_Quadtree *pQuadtree,px_float mapStartX,px_float mapStartY,px_float mapWidth,px_float mapHeight,px_int ObjectsCount,px_int deep) +{ + pQuadtree->mp=mp; + pQuadtree->PX_AABB_MAX_DEEP=deep; + if(!PX_VectorInit(mp,&pQuadtree->boxes,sizeof(PX_Quadtree_AABB),ObjectsCount)) + { + PX_ASSERT(); + return PX_FALSE; + } + if(!PX_VectorInit(mp,&pQuadtree->Impacts,sizeof(PX_Quadtree_UserData),ObjectsCount)) + { + PX_ASSERT(); + PX_VectorFree(&pQuadtree->boxes); + return PX_FALSE; + } + pQuadtree->AABB=(PX_Quadtree_AABB *)MP_Malloc(mp,sizeof(PX_Quadtree_AABB)); + pQuadtree->AABB->deep=0; + pQuadtree->AABB->Area1=PX_NULL; + pQuadtree->AABB->Area2=PX_NULL; + pQuadtree->AABB->Area3=PX_NULL; + pQuadtree->AABB->Area4=PX_NULL; + pQuadtree->AABB->Left=mapStartX; + pQuadtree->AABB->Right=mapStartX+mapWidth; + pQuadtree->AABB->Top=mapStartY; + pQuadtree->AABB->Bottom=mapStartY+mapHeight; + pQuadtree->AABB->objectCount=0; + pQuadtree->AABB->dataList.size=0; + pQuadtree->AABB->dataList.head=PX_NULL; + pQuadtree->AABB->dataList.end=PX_NULL; + pQuadtree->AABB->dataList.mp=PX_NULL; + return PX_Quadtree_InitAABB(mp,pQuadtree->PX_AABB_MAX_DEEP,pQuadtree->AABB); +} + +static px_void PX_QuadtreeTest(PX_Quadtree *pQuadtree,PX_Quadtree_AABB *aabb,PX_Quadtree_AABB_BOX testBox) +{ + px_list_node *pnode=aabb->dataList.head; + px_rect r1,r2; + PX_Quadtree_AABB_BOX *pBox; + + + while (pnode) + { + pBox=PX_VECTORAT(PX_Quadtree_AABB_BOX,&pQuadtree->boxes,*(px_int *)pnode->pdata); + if (pBox->userdata.ptr!=testBox.userdata.ptr) + { + r1.x=pBox->x-pBox->width/2; + r1.y=pBox->y-pBox->height/2; + r1.width=pBox->width; + r1.height=pBox->height; + + r2.x=testBox.x-testBox.width/2; + r2.y=testBox.y-testBox.height/2; + r2.width=testBox.width; + r2.height=testBox.height; + + if (PX_isRectCrossRect(r1,r2)) + { + px_int i; + for (i=0;iImpacts.size;i++) + { + if (PX_VECTORAT(PX_Quadtree_UserData,&pQuadtree->Impacts,i)->ptr==pBox->userdata.ptr) + { + break; + } + } + + if(i==pQuadtree->Impacts.size) + PX_VectorPushback(&pQuadtree->Impacts,&pBox->userdata); + + } + } + pnode=pnode->pnext; + } + +} + +static px_void PX_QuadtreeSortBox(PX_Quadtree *pQuadtree,PX_Quadtree_AABB *aabb,px_int index) +{ + px_rect r1,r2; + PX_Quadtree_AABB_BOX *pBox; + pBox=PX_VECTORAT(PX_Quadtree_AABB_BOX,&pQuadtree->boxes,index); + r1.x=pBox->x-pBox->width/2; + r1.y=pBox->y-pBox->height/2; + r1.width=pBox->width; + r1.height=pBox->height; + + r2.x=aabb->Left; + r2.y=aabb->Top; + r2.width=aabb->Right-aabb->Left+1; + r2.height=aabb->Bottom-aabb->Top+1; + if (PX_isRectCrossRect(r1,r2)) + { + if (aabb->deep>=pQuadtree->PX_AABB_MAX_DEEP) + { + PX_ListPush(&aabb->dataList,&index,sizeof(px_int)); + } + else + { + PX_QuadtreeSortBox(pQuadtree,aabb->Area1,index); + PX_QuadtreeSortBox(pQuadtree,aabb->Area2,index); + PX_QuadtreeSortBox(pQuadtree,aabb->Area3,index); + PX_QuadtreeSortBox(pQuadtree,aabb->Area4,index); + } + } +} + + +static px_void PX_QuadtreeTestBox(PX_Quadtree *pQuadtree,PX_Quadtree_AABB *aabb,PX_Quadtree_AABB_BOX Box) +{ + px_rect r1,r2; + r1.x=Box.x-Box.width/2; + r1.y=Box.y-Box.height/2; + r1.width=Box.width; + r1.height=Box.height; + + r2.x=aabb->Left; + r2.y=aabb->Top; + r2.width=aabb->Right-aabb->Left+1; + r2.height=aabb->Bottom-aabb->Top+1; + if (PX_isRectCrossRect(r1,r2)) + { + if (aabb->deep>=pQuadtree->PX_AABB_MAX_DEEP) + { + PX_QuadtreeTest(pQuadtree,aabb,Box); + } + else + { + PX_QuadtreeTestBox(pQuadtree,aabb->Area1,Box); + PX_QuadtreeTestBox(pQuadtree,aabb->Area2,Box); + PX_QuadtreeTestBox(pQuadtree,aabb->Area3,Box); + PX_QuadtreeTestBox(pQuadtree,aabb->Area4,Box); + } + } +} + + +px_void PX_QuadtreeAddNode(PX_Quadtree *pQuadtree,px_float x,px_float y,px_float width,px_float height,PX_Quadtree_UserData userData) +{ + PX_Quadtree_AABB_BOX box; + box.height=height; + box.width=width; + box.x=x; + box.y=y; + box.userdata=userData; + PX_VectorPushback(&pQuadtree->boxes,&box); + + PX_QuadtreeSortBox(pQuadtree,pQuadtree->AABB,pQuadtree->boxes.size-1); +} + +px_void PX_QuadtreeTestNode(PX_Quadtree *pQuadtree,px_float x,px_float y,px_float width,px_float height,PX_Quadtree_UserData userData) +{ + PX_Quadtree_AABB_BOX box; + box.height=height; + box.width=width; + box.x=x; + box.y=y; + box.userdata=userData; + if (pQuadtree->boxes.size) + { + PX_QuadtreeTestBox(pQuadtree,pQuadtree->AABB,box); + } +} + +px_void PX_QuadtreeResetTest(PX_Quadtree *pQuadtree) +{ + PX_VectorClear(&pQuadtree->Impacts); +} diff --git a/code/PainterEngine/Core/PX_Quadtree.h b/code/PainterEngine/Core/PX_Quadtree.h new file mode 100644 index 0000000000000000000000000000000000000000..66fa202476f530002b73f9f4504b61cbf09b38e1 --- /dev/null +++ b/code/PainterEngine/Core/PX_Quadtree.h @@ -0,0 +1,44 @@ +#ifndef PX_QUADTREE_H +#define PX_QUADTREE_H +#include "PX_List.h" +#include "PX_Vector.h" + +#define PX_AABB_TEST_COUNT 32 + +typedef struct _PX_AABB +{ + px_float Left,Right,Bottom,Top; + px_int objectCount; + px_int deep; + px_list dataList; + struct _PX_AABB *Area1; + struct _PX_AABB *Area2; + struct _PX_AABB *Area3; + struct _PX_AABB *Area4; +}PX_Quadtree_AABB; + +typedef struct +{ + px_void *ptr; +}PX_Quadtree_UserData; +typedef struct +{ + px_float x,y,height,width; + PX_Quadtree_UserData userdata; +}PX_Quadtree_AABB_BOX; + + +typedef struct +{ + px_memorypool *mp; + px_int PX_AABB_MAX_DEEP; + PX_Quadtree_AABB *AABB; + px_vector boxes; + px_vector Impacts; +}PX_Quadtree; + +px_bool PX_QuadtreeCreate(px_memorypool *mp,PX_Quadtree *pQuadtree,px_float mapStartX,px_float mapStartY,px_float mapWidth,px_float mapHeight,px_int ObjectsCount,px_int deep); +px_void PX_QuadtreeAddNode(PX_Quadtree *pQuadtree,px_float CenterX,px_float CenterY,px_float width,px_float height,PX_Quadtree_UserData userData); +px_void PX_QuadtreeTestNode(PX_Quadtree *pQuadtree,px_float CenterX,px_float CenterY,px_float width,px_float height,PX_Quadtree_UserData user); +px_void PX_QuadtreeResetTest(PX_Quadtree *pQuadtree); +#endif diff --git a/code/PainterEngine/Core/PX_Quicksort.c b/code/PainterEngine/Core/PX_Quicksort.c new file mode 100644 index 0000000000000000000000000000000000000000..8a8ceb9399643b0486ad54250eeec5638f3e632e --- /dev/null +++ b/code/PainterEngine/Core/PX_Quicksort.c @@ -0,0 +1,74 @@ +#include "PX_Quicksort.h" + +static void swap(PX_QuickSortAtom array[], px_int left, px_int right) +{ + PX_QuickSortAtom temp; + temp = array[left]; + array[left] = array[right]; + array[right] = temp; +} + + +static px_int partition_l(PX_QuickSortAtom array[], px_int left, px_int right, px_int pivot_index) +{ + px_float pivot_value = array[pivot_index].power; + px_int store_index = left; + px_int i; + + swap(array, pivot_index, right); + for (i = left; i < right; i++) + if (array[i].power < pivot_value) { + swap(array, i, store_index); + ++store_index; + } + swap(array, store_index, right); + return store_index; +} + +static px_int partition_m(PX_QuickSortAtom array[], px_int left, px_int right, px_int pivot_index) +{ + px_float pivot_value = array[pivot_index].power; + px_int store_index = left; + px_int i; + + swap(array, pivot_index, right); + for (i = left; i < right; i++) + if (array[i].power > pivot_value) { + swap(array, i, store_index); + ++store_index; + } + swap(array, store_index, right); + return store_index; +} + +void PX_Quicksort_MinToMax(PX_QuickSortAtom array[], px_int left, px_int right) +{ + px_int pivot_index = left; + px_int pivot_new_index; + + + while (right > left) + { + pivot_new_index = partition_l(array, left, right, pivot_index); + PX_Quicksort_MinToMax(array, left, pivot_new_index - 1); + pivot_index = left = pivot_new_index + 1; + + } +} + +void PX_Quicksort_MaxToMin(PX_QuickSortAtom array[], px_int left, px_int right) +{ + px_int pivot_index = left; + px_int pivot_new_index; + + + while (right > left) + { + pivot_new_index = partition_m(array, left, right, pivot_index); + PX_Quicksort_MaxToMin(array, left, pivot_new_index - 1); + pivot_index = left = pivot_new_index + 1; + + } +} + + diff --git a/code/PainterEngine/Core/PX_Quicksort.h b/code/PainterEngine/Core/PX_Quicksort.h new file mode 100644 index 0000000000000000000000000000000000000000..ddee9154d70c553c77bdbf962f12c4f4a2b44e1d --- /dev/null +++ b/code/PainterEngine/Core/PX_Quicksort.h @@ -0,0 +1,13 @@ +#ifndef PX_QUICKSORT_H +#define PX_QUICKSORT_H + +#include "PX_Typedef.h" + +typedef struct +{ + px_float power; + px_void *pData; +}PX_QuickSortAtom; +void PX_Quicksort_MinToMax(PX_QuickSortAtom array[], px_int left, px_int right); +void PX_Quicksort_MaxToMin(PX_QuickSortAtom array[], px_int left, px_int right); +#endif diff --git a/code/PainterEngine/Core/PX_Sha256.c b/code/PainterEngine/Core/PX_Sha256.c new file mode 100644 index 0000000000000000000000000000000000000000..936ad252593b28829b7a90c51b147720e0efe2f2 --- /dev/null +++ b/code/PainterEngine/Core/PX_Sha256.c @@ -0,0 +1,311 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PX_Sha256 +// +// Implementation of SHA256 hash function. +// Original author: Tom St Denis, tomstdenis@gmail.com, http://libtom.org +// Modified by WaterJuice retaining Public Domain license. +// +// This is free and unencumbered software released into the public domain - June 2013 waterjuice.org +// Modified by DBinary retaining Public Domain license. 2019-3-11 matrixcascade@gmail.com 0-0i.com +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IMPORTS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#include "PX_Sha256.h" + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// MACROS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#define ror(value, bits) (((value) >> (bits)) | ((value) << (32 - (bits)))) + +#define MIN(x, y) ( ((x)<(y))?(x):(y) ) + +#define STORE32H(x, y) \ + { (y)[0] = (px_uchar)(((x)>>24)&255); (y)[1] = (px_uchar)(((x)>>16)&255); \ + (y)[2] = (px_uchar)(((x)>>8)&255); (y)[3] = (px_uchar)((x)&255); } + +#define LOAD32H(x, y) \ + { x = ((px_uint32)((y)[0] & 255)<<24) | \ + ((px_uint32)((y)[1] & 255)<<16) | \ + ((px_uint32)((y)[2] & 255)<<8) | \ + ((px_uint32)((y)[3] & 255)); } + +#define STORE64H(x, y) \ + { (y)[0] = (px_uchar)(((x)>>56)&255); (y)[1] = (px_uchar)(((x)>>48)&255); \ + (y)[2] = (px_uchar)(((x)>>40)&255); (y)[3] = (px_uchar)(((x)>>32)&255); \ + (y)[4] = (px_uchar)(((x)>>24)&255); (y)[5] = (px_uchar)(((x)>>16)&255); \ + (y)[6] = (px_uchar)(((x)>>8)&255); (y)[7] = (px_uchar)((x)&255); } + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// CONSTANTS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// The K array +static const px_uint32 K[64] = { + 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL, + 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL, + 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, + 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, + 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL, + 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL, + 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, + 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, + 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL, + 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL, + 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, + 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, + 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL +}; + +#define BLOCK_SIZE 64 + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// INTERNAL FUNCTIONS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Various logical functions +#define Ch( x, y, z ) (z ^ (x & (y ^ z))) +#define Maj( x, y, z ) (((x | y) & z) | (x & y)) +#define S( x, n ) ror((x),(n)) +#define R( x, n ) (((x)&0xFFFFFFFFUL)>>(n)) +#define Sigma0( x ) (S(x, 2) ^ S(x, 13) ^ S(x, 22)) +#define Sigma1( x ) (S(x, 6) ^ S(x, 11) ^ S(x, 25)) +#define Gamma0( x ) (S(x, 7) ^ S(x, 18) ^ R(x, 3)) +#define Gamma1( x ) (S(x, 17) ^ S(x, 19) ^ R(x, 10)) + +#define Sha256Round( a, b, c, d, e, f, g, h, i ) \ + t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ + t1 = Sigma0(a) + Maj(a, b, c); \ + d += t0; \ + h = t0 + t1; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// TransformFunction +// +// Compress 512-bits +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +static +void + TransformFunction + ( + PX_Sha256Context* Context, + px_uchar const* Buffer + ) +{ + px_uint32 S[8]; + px_uint32 W[64]; + px_uint32 t0; + px_uint32 t1; + px_uint32 t; + int i; + + // Copy state into S + for( i=0; i<8; i++ ) + { + S[i] = Context->state[i]; + } + + // Copy the state into 512-bits into W[0..15] + for( i=0; i<16; i++ ) + { + LOAD32H( W[i], Buffer + (4*i) ); + } + + // Fill W[16..63] + for( i=16; i<64; i++ ) + { + W[i] = Gamma1( W[i-2]) + W[i-7] + Gamma0( W[i-15] ) + W[i-16]; + } + + // Compress + for( i=0; i<64; i++ ) + { + Sha256Round( S[0], S[1], S[2], S[3], S[4], S[5], S[6], S[7], i ); + t = S[7]; + S[7] = S[6]; + S[6] = S[5]; + S[5] = S[4]; + S[4] = S[3]; + S[3] = S[2]; + S[2] = S[1]; + S[1] = S[0]; + S[0] = t; + } + + // Feedback + for( i=0; i<8; i++ ) + { + Context->state[i] = Context->state[i] + S[i]; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC FUNCTIONS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Sha256Initialise +// +// Initialises a SHA256 Context. Use this to initialise/reset a context. +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +void + PX_Sha256Initialise + ( + PX_Sha256Context* Context // [out] + ) +{ + Context->curlen = 0; + Context->length = 0; + Context->state[0] = 0x6A09E667UL; + Context->state[1] = 0xBB67AE85UL; + Context->state[2] = 0x3C6EF372UL; + Context->state[3] = 0xA54FF53AUL; + Context->state[4] = 0x510E527FUL; + Context->state[5] = 0x9B05688CUL; + Context->state[6] = 0x1F83D9ABUL; + Context->state[7] = 0x5BE0CD19UL; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Sha256Update +// +// Adds data to the SHA256 context. This will process the data and update the internal state of the context. Keep on +// calling this function until all the data has been added. Then call Sha256Finalise to calculate the hash. +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +void + PX_Sha256Update + ( + PX_Sha256Context* Context, // [in out] + void * Buffer, // [in] + px_uint32 BufferSize // [in] + ) +{ + px_uint32 n; + + if( Context->curlen > sizeof(Context->buf) ) + { + return; + } + + while( BufferSize > 0 ) + { + if( Context->curlen == 0 && BufferSize >= BLOCK_SIZE ) + { + TransformFunction( Context, (px_uchar*)Buffer ); + Context->length += BLOCK_SIZE * 8; + Buffer = (px_uchar*)Buffer + BLOCK_SIZE; + BufferSize -= BLOCK_SIZE; + } + else + { + n = MIN( BufferSize, (BLOCK_SIZE - Context->curlen) ); + PX_memcpy( Context->buf + Context->curlen, (px_void *)Buffer, (px_int)n ); + Context->curlen += n; + Buffer = (px_uchar*)Buffer + n; + BufferSize -= n; + if( Context->curlen == BLOCK_SIZE ) + { + TransformFunction( Context, Context->buf ); + Context->length += 8*BLOCK_SIZE; + Context->curlen = 0; + } + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Sha256Finalise +// +// Performs the final calculation of the hash and returns the digest (32 byte buffer containing 256bit hash). After +// calling this, Sha256Initialised must be used to reuse the context. +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +void + PX_Sha256Finalise + ( + PX_Sha256Context* Context, // [in out] + PX_SHA256_HASH* Digest // [out] + ) +{ + int i; + + if( Context->curlen >= sizeof(Context->buf) ) + { + return; + } + + // Increase the length of the message + Context->length += Context->curlen * 8; + + // Append the '1' bit + Context->buf[Context->curlen++] = (px_uchar)0x80; + + // if the length is currently above 56 bytes we append zeros + // then compress. Then we can fall back to padding zeros and length + // encoding like normal. + if( Context->curlen > 56 ) + { + while( Context->curlen < 64 ) + { + Context->buf[Context->curlen++] = (px_uchar)0; + } + TransformFunction(Context, Context->buf); + Context->curlen = 0; + } + + // Pad up to 56 bytes of zeroes + while( Context->curlen < 56 ) + { + Context->buf[Context->curlen++] = (px_uchar)0; + } + + // Store length + STORE64H( Context->length, Context->buf+56 ); + TransformFunction( Context, Context->buf ); + + // Copy output + for( i=0; i<8; i++ ) + { + STORE32H( Context->state[i], Digest->bytes+(4*i) ); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Sha256Calculate +// +// Combines Sha256Initialise, Sha256Update, and Sha256Finalise into one function. Calculates the SHA256 hash of the +// buffer. +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +void + PX_Sha256Calculate + ( + px_void* Buffer, // [in] + px_uint32 BufferSize, // [in] + PX_SHA256_HASH* Digest // [in] + ) +{ + PX_Sha256Context context; + + PX_Sha256Initialise( &context ); + PX_Sha256Update( &context, Buffer, BufferSize ); + PX_Sha256Finalise( &context, Digest ); +} + +void PX_Sha256CalculateHashString(px_void *buffer,px_uint32 bufferSize,px_char stringKey[32]) +{ + px_int i; + PX_SHA256_HASH hash; + PX_Sha256Calculate(buffer,bufferSize,&hash); + for (i=0;i<31;i++) + { + if (hash.bytes[i]==0) + { + hash.bytes[i]=1; + } + } + hash.bytes[31]=0; + PX_memcpy(stringKey,hash.bytes,sizeof(hash.bytes)); +} diff --git a/code/PainterEngine/Core/PX_Sha256.h b/code/PainterEngine/Core/PX_Sha256.h new file mode 100644 index 0000000000000000000000000000000000000000..b1582db91452b5e033a11c116c1dc0bb24dea331 --- /dev/null +++ b/code/PainterEngine/Core/PX_Sha256.h @@ -0,0 +1,54 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// WjCryptLib_Sha256 +// +// Implementation of SHA256 hash function. +// Original author: Tom St Denis, tomstdenis@gmail.com, http://libtom.org +// Modified by WaterJuice retaining Public Domain license. +// +// This is free and unencumbered software released into the public domain - June 2013 waterjuice.org +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#pragma once + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// IMPORTS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#include "PX_Typedef.h" + +typedef struct +{ + px_uint64 length; + px_uint32 state[8]; + px_uint32 curlen; + px_uchar buf[64]; +} PX_Sha256Context; + +#define SHA256_HASH_SIZE ( 256 / 8 ) + +typedef struct +{ + px_uchar bytes [SHA256_HASH_SIZE]; +} PX_SHA256_HASH; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// PUBLIC FUNCTIONS +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Sha256Calculate +// +// Combines Sha256Initialise, Sha256Update, and Sha256Finalise into one function. Calculates the SHA256 hash of the +// buffer. +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +void + PX_Sha256Calculate + ( + void* Buffer, // [in] + px_uint32 BufferSize, // [in] + PX_SHA256_HASH* Digest // [in] + ); + +void PX_Sha256CalculateHashString(px_void *buffer,px_uint32 bufferSize,px_char stringKey[32]); \ No newline at end of file diff --git a/code/PainterEngine/Core/PX_Sound.c b/code/PainterEngine/Core/PX_Sound.c new file mode 100644 index 0000000000000000000000000000000000000000..5d0b6c84b32c8b4dd24e600ebb7a9748fe114d36 --- /dev/null +++ b/code/PainterEngine/Core/PX_Sound.c @@ -0,0 +1,314 @@ +#include "PX_Sound.h" + +px_bool PX_SoundPlayInit(px_memorypool *mp,PX_SoundPlay *pSound) +{ + pSound->mp=mp; + pSound->bLock=PX_FALSE; + pSound->mix_mode=PX_SOUND_MIX_MODE_PARALLEL; + pSound->parallel=PX_SOUND_DEFAULT_PARALLEL; + pSound->pause=PX_FALSE; + PX_memset(pSound->Sounds,0,sizeof(pSound->Sounds)); + return PX_TRUE; +} + + +px_void PX_SoundPlayPause(PX_SoundPlay *pSoundPlay,px_bool pause) +{ + pSoundPlay->pause=pause; +} + +px_bool PX_SoundPlayAdd(PX_SoundPlay *pSound,PX_Sound sounddata) +{ + px_int i; + px_int min_size=0,index; + while(pSound->bLock); + pSound->bLock=PX_TRUE; + + for (i=0;iSounds);i++) + { + if (pSound->Sounds[i].data==PX_NULL) + { + index=i; + break; + } + else + { + if (min_size==0&&!pSound->Sounds[i].loop) + { + min_size=pSound->Sounds[i].data->size-pSound->Sounds[i].offset; + index=i; + } + else + { + if (!pSound->Sounds[i].loop && pSound->Sounds[i].data->size-pSound->Sounds[i].offsetSounds[i].data->size-pSound->Sounds[i].offset; + index=i; + } + } + } + } + if (indexSounds)) + { + pSound->Sounds[index]=sounddata; + pSound->bLock=PX_FALSE; + return PX_TRUE; + } + else + { + pSound->bLock=PX_FALSE; + return PX_FALSE; + } + +} + + +px_bool PX_SoundPlayRead(PX_SoundPlay *pSoundPlay,px_byte *pBuffer,px_int readSize) +{ + px_int i,j,CpySize,ReadblockSize,SourceblockLen; + PX_Sound *pSound; + px_short *pSourcePCM16,*pTargetPCM16=(px_short *)pBuffer; + px_short div; + if (readSize%4) + { + return PX_FALSE; + } + + while(pSoundPlay->bLock); + pSoundPlay->bLock=PX_TRUE; + + PX_memset(pBuffer,0,readSize); + + if (pSoundPlay->pause) + { + pSoundPlay->bLock=PX_FALSE; + return PX_TRUE; + } + + div=PX_COUNTOF(pSoundPlay->Sounds); + + for (j=0;jSounds);j++) + { + pSound=pSoundPlay->Sounds+j; + if (!pSound->data) + { + continue; + } + + pSourcePCM16=(px_short *)pSound->data->buffer; + + if (!pSound->loop) + { + px_int resvSize=pSound->data->size-pSound->offset; + if (pSound->data->channel==PX_SOUND_CHANNEL_ONE) + { + if (resvSize*2>readSize) + { + CpySize=readSize; + } + else + { + CpySize=resvSize*2; + } + } + else + { + if (resvSize>readSize) + { + CpySize=readSize; + } + else + { + CpySize=resvSize; + } + } + } + else + { + CpySize=readSize; + } + + ReadblockSize=CpySize/2; + SourceblockLen=pSound->data->size/2; + + if (pSound->data->channel==PX_SOUND_CHANNEL_ONE) + { + for (i=0;imix_mode) + { + case PX_SOUND_MIX_MODE_PARALLEL: + pTargetPCM16[i]+=pSourcePCM16[pSound->offset/2]/pSoundPlay->parallel; + pTargetPCM16[i+1]+=pSourcePCM16[pSound->offset/2]/pSoundPlay->parallel; + pSound->offset+=2; + break; + case PX_SOUND_MIX_MODE_AVG: + pTargetPCM16[i]+=pSourcePCM16[pSound->offset/2]/div; + pTargetPCM16[i+1]+=pSourcePCM16[pSound->offset/2+1]/div; + pSound->offset+=2; + break; + } + + if (pSound->offset>=pSound->data->size) + { + if (pSound->loop) + { + pSound->offset=0; + } + else + { + break; + } + } + } + } + else + { + for (i=0;imix_mode) + { + case PX_SOUND_MIX_MODE_PARALLEL: + pTargetPCM16[i]+=pSourcePCM16[pSound->offset/2]/pSoundPlay->parallel; + pSound->offset+=2; + break; + case PX_SOUND_MIX_MODE_AVG: + pTargetPCM16[i]+=pSourcePCM16[pSound->offset/2]/div; + pSound->offset+=2; + break; + } + if (pSound->offset>=pSound->data->size) + { + if (pSound->loop) + { + pSound->offset=0; + } + else + { + break; + } + } + } + } + + if (pSound->offset>=pSound->data->size) + { + if (!pSoundPlay->Sounds[j].loop) + { + pSoundPlay->Sounds[j].data=PX_NULL; + } + continue; + } + } + + pSoundPlay->bLock=PX_FALSE; + return PX_TRUE; +} + +px_void PX_SoundPlayFree(PX_SoundPlay *pSoundPlay) +{ + +} + + +px_void PX_SoundPlayClear(PX_SoundPlay *pSoundPlay) +{ + px_int count=0,j; + for (j=0;jSounds);j++) + { + pSoundPlay->Sounds[j].data=PX_NULL; + pSoundPlay->Sounds[j].offset=0; + } +} + +px_bool PX_SoundPlayGetDataCount(PX_SoundPlay *pSoundPlay) +{ + px_int count=0,j; + for (j=0;jSounds);j++) + { + if (pSoundPlay->Sounds[j].data) + { + count++; + } + } + return count; +} + +PX_Sound PX_SoundCreate(PX_SoundData *data,px_bool loop) +{ + PX_Sound sound; + sound.data=data; + sound.offset=0; + sound.loop=loop; + return sound; +} + +px_bool PX_SoundStaticDataCreate(PX_SoundData *sounddata,px_memorypool *mp,px_byte *data,px_int datasize) +{ + if (PX_WaveVerify(data,datasize)) + { + px_uint offset=0,pcmSize,woffset; + + pcmSize=PX_WaveGetPCMSize(data,datasize); + + if (pcmSize!=0) + { + PX_WAVE_DATA_BLOCK *pBlock; + PX_WAVE_RIFF_HEADER *pHeader=(PX_WAVE_RIFF_HEADER *)data; + PX_WAVE_FMT_BLOCK *pfmt_block; + sounddata->buffer=(px_byte *)MP_Malloc(mp,pcmSize); + sounddata->size=pcmSize; + sounddata->channel=PX_WaveGetChannel(data,pcmSize)==1?PX_SOUND_CHANNEL_ONE:PX_SOUND_CHANNEL_DOUBLE; + if (!sounddata->buffer) + { + goto _ERROR; + } + pfmt_block=(PX_WAVE_FMT_BLOCK *)(data+sizeof(PX_WAVE_RIFF_HEADER)); + offset+=sizeof(PX_WAVE_RIFF_HEADER); + offset+=8; + offset+=pfmt_block->dwFmtSize; + + pcmSize=0; + woffset=0; + while (offset<(px_uint)datasize) + { + pBlock=(PX_WAVE_DATA_BLOCK*)(data+offset); + if(!PX_memequ(pBlock->szDataID,"data",4)) + { + offset+=pBlock->dwDataSize+sizeof(PX_WAVE_DATA_BLOCK); + continue; + } + offset+=sizeof(PX_WAVE_DATA_BLOCK); + PX_memcpy(sounddata->buffer+woffset,data+offset,pBlock->dwDataSize); + offset+=pBlock->dwDataSize; + woffset+=pBlock->dwDataSize; + } + } + else + goto _ERROR; + } + else + { + goto _ERROR; + } + sounddata->mp=mp; + return PX_TRUE; +_ERROR: + sounddata->mp=PX_NULL; + sounddata->size=0; + sounddata->buffer=PX_NULL; + return PX_FALSE; +} + +px_void PX_SoundStaticDataFree(PX_SoundData *sounddata) +{ + if (sounddata->mp) + { + MP_Free(sounddata->mp,sounddata->buffer); + sounddata->buffer=PX_NULL; + sounddata->size=0; + sounddata->mp=PX_NULL; + } + +} + diff --git a/code/PainterEngine/Core/PX_Sound.h b/code/PainterEngine/Core/PX_Sound.h new file mode 100644 index 0000000000000000000000000000000000000000..36d62d2d474a2620ea498c086f018e77af39f320 --- /dev/null +++ b/code/PainterEngine/Core/PX_Sound.h @@ -0,0 +1,59 @@ +#ifndef PX_SOUND_H +#define PX_SOUND_H +//painter engine sound-mixer +//44100HZ +//16bit +//1/2-channel supported +#include "PX_Wave.h" +#include "PX_Vector.h" +#include "PX_Tuning.h" + +#define PX_SOUND_DEFAULT_PARALLEL 8 +typedef enum +{ + PX_SOUND_CHANNEL_ONE, + PX_SOUND_CHANNEL_DOUBLE +}PX_SOUND_CHANNEL; + +typedef enum +{ + PX_SOUND_MIX_MODE_AVG, + PX_SOUND_MIX_MODE_PARALLEL, +}PX_SOUND_MIX_MODE; + +typedef struct +{ + px_memorypool *mp; + px_byte *buffer; + px_int size; + PX_SOUND_CHANNEL channel; +}PX_SoundData; + +typedef struct +{ + px_int offset; + px_bool loop; + PX_SoundData *data; +}PX_Sound; + +typedef struct +{ + px_memorypool *mp; + px_int parallel; + px_bool pause; + volatile px_bool bLock; + PX_SOUND_MIX_MODE mix_mode; + PX_Sound Sounds[PX_SOUND_DEFAULT_PARALLEL]; +}PX_SoundPlay; + +px_bool PX_SoundPlayInit(px_memorypool *mp,PX_SoundPlay *pSoundPlay); +px_void PX_SoundPlayPause(PX_SoundPlay *pSoundPlay,px_bool pause); +px_bool PX_SoundPlayAdd(PX_SoundPlay *pSoundPlay,PX_Sound sound); +px_bool PX_SoundPlayRead(PX_SoundPlay *pSoundPlay,px_byte *pBuffer,px_int readSize); +px_void PX_SoundPlayFree(PX_SoundPlay *pSoundPlay); +px_void PX_SoundPlayClear(PX_SoundPlay *pSoundPlay); +px_bool PX_SoundPlayGetDataCount(PX_SoundPlay *pSoundPlay); +PX_Sound PX_SoundCreate(PX_SoundData *data,px_bool loop); +px_bool PX_SoundStaticDataCreate(PX_SoundData *sounddata,px_memorypool *mp,px_byte *data,px_int datasize); +px_void PX_SoundStaticDataFree(PX_SoundData *sounddata); +#endif diff --git a/code/PainterEngine/Core/PX_SoundModule.c b/code/PainterEngine/Core/PX_SoundModule.c new file mode 100644 index 0000000000000000000000000000000000000000..408cfcfe1c4a538cbf1e24f4d7c333adb86ff625 --- /dev/null +++ b/code/PainterEngine/Core/PX_SoundModule.c @@ -0,0 +1,250 @@ +#include "PX_SoundModule.h" + +px_void PX_SoundModuleSortSpectrum(PX_SoundModule *SoundModule,px_complex AnalysisFrame[]) +{ + px_int i; + px_double amplitude=0,phase=0; + PX_FFT(AnalysisFrame,AnalysisFrame,PX_SOUNDMODULE_N); + + //re,im to amplitude,phase + + //DC sort + if (AnalysisFrame[0].re>0) + { + AnalysisFrame[0].im=0; + } + else + { + AnalysisFrame[0].re=PX_ABS(AnalysisFrame[0].re); + AnalysisFrame[0].im=PX_PI; + } + + //others + for (i=1;i0) + { + AnalysisFrame[PX_SOUNDMODULE_N/2].im=0; + } + else + { + AnalysisFrame[PX_SOUNDMODULE_N/2].re=PX_ABS(AnalysisFrame[0].re); + AnalysisFrame[PX_SOUNDMODULE_N/2].im=PX_PI; + } +} + + +px_void PX_SoundModuleInitialize(px_memorypool *mp,PX_SoundModule *SoundModule,px_int SampleRate,px_double pitchShift,PX_SoundModule_Formant Formant[],px_int FormantCount) +{ + PX_memset(SoundModule,0,sizeof(PX_SoundModule)); + if (FormantCount>PX_COUNTOF(SoundModule->Formant)) + { + return; + } + PX_memcpy(SoundModule->Formant,Formant,FormantCount*sizeof(PX_SoundModule_Formant)); + SoundModule->mp=mp; + SoundModule->pitchShift=pitchShift; + SoundModule->SampleRate=SampleRate; + SoundModule->searchHzW=PX_SOUNDMODULE_DEFALUT_SEARCH_HZ; + SoundModule->ZCR_High=100; + SoundModule->Pitch_threshold_High=800; + SoundModule->amp_max=32768.0; +} + +px_int PX_SoundModuleFilter(PX_SoundModule *SoundModule,_IN px_double _in[],px_int count,_OUT px_double _out[]) +{ + px_complex Frame[PX_SOUNDMODULE_N]; + px_double InstantaneousPhase[PX_SOUNDMODULE_N]; + px_double sincWindow[PX_SOUNDMODULE_N]; + px_double ModuleAmplitude[PX_SOUNDMODULE_FORMANT_COUNT]; + px_double Pitch; + px_double ZCR; + px_double *Data; + px_double durHZ=SoundModule->SampleRate*1.0/PX_SOUNDMODULE_N; + px_int blkCount,dataCount,remian; + px_int blk; + px_int blkSize=PX_SOUNDMODULE_N/2; + + dataCount=count+SoundModule->remainCount; + + Data=(px_double *)MP_Malloc(SoundModule->mp,dataCount*sizeof(px_double)); + + PX_memcpy(Data,SoundModule->remian,SoundModule->remainCount*sizeof(px_double)); + PX_memcpy(Data+SoundModule->remainCount,_in,count*sizeof(px_double)); + + blkCount=dataCount/(blkSize); + + if (blkCount>1) + { + remian=dataCount%(blkSize)+blkSize; + PX_memcpy(SoundModule->remian,Data+(blkCount-1)*blkSize,remian*sizeof(px_double)); + SoundModule->remainCount=remian; + } + else + { + remian=dataCount; + PX_memcpy(SoundModule->remian,Data,remian*sizeof(px_double)); + MP_Free(SoundModule->mp,Data); + return 0; + } + + PX_WindowFunction_sinc(sincWindow,PX_SOUNDMODULE_N); + + for (blk=0;blkSampleRate,100,300); + + for (i=0;iamp_max*sincWindow[i]; + Frame[i].im=0; + } + + if (Pitch!=0&&!(ZCRZCR_Low||ZCR>SoundModule->ZCR_High||PitchPitch_threshold_Low||Pitch>SoundModule->Pitch_threshold_High)) + { + PX_SoundModuleSortSpectrum(SoundModule,Frame); + + //Instantaneous frequency + for (i=0;ilastPhase[i]; + SoundModule->lastPhase[i]=Frame[i].im; + } + + //Build sound module + for (i=0;isearchHzW/2)/durHZ); + + if (HZindex<0) + { + HZindex=0; + } + + max=Frame[HZindex].re; + + while (PX_TRUE) + { + HZindex++; + if (HZindex>=PX_SOUNDMODULE_FORMANT_COUNT) + { + break; + } + if (HZindex*durHZ>Pitch*i+SoundModule->searchHzW/2) + { + break; + } + if (Frame[HZindex].re>max) + { + max=Frame[HZindex].re; + } + } + + ModuleAmplitude[HZindex]=max; + } + + //now rebuild signal + + PX_memset(Frame,0,sizeof(Frame)); + for (i=0;isearchHzW/2)/durHZ); + if (HZindex<0) + { + HZindex=0; + } + + while (PX_TRUE) + { + px_double distanceHZ; + if (HZindex>=PX_SOUNDMODULE_FORMANT_COUNT) + { + break; + } + if (HZindex*durHZ>Pitch*i+SoundModule->Formant[i].W/2) + { + break; + } + distanceHZ=PX_ABS(HZindex*durHZ-Pitch*i); + Frame[HZindex].re=SoundModule->Formant[i].A*PX_sind(PX_PI/2*(1-PX_ABS(distanceHZ-Pitch*i)/SoundModule->Formant[i].W*2)); + + HZindex++; + } + } + + //rebuild instantaneous phase + for (i=0;ire im + for (i=0;ire,im + Frame[i].re=amp*PX_cosd(phase); + Frame[i].im=amp*PX_sind(phase); + } + + PX_FT_Symmetry(Frame,Frame,PX_SOUNDMODULE_N); + PX_IFFT(Frame,Frame,PX_SOUNDMODULE_N); + } + + for (i=0;ihalfRebuild[i]; + if ((_out+blk*blkSize)[i]<-1) + { + (_out+blk*blkSize)[i]=-1; + } + if ((_out+blk*blkSize)[i]>1) + { + (_out+blk*blkSize)[i]=1; + } + (_out+blk*blkSize)[i]*=SoundModule->amp_max; + SoundModule->halfRebuild[i]=Frame[i+blkSize].re*sincWindow[i+blkSize]; + } + } + + MP_Free(SoundModule->mp,Data); + + return blkCount*blkSize; +} + +px_void PX_SoundModulePitchShift(PX_SoundModule *SoundModule,px_double pitchShift) +{ + SoundModule->pitchShift=pitchShift; +} + +px_void PX_SoundModuleSetZCR(PX_SoundModule *SoundModule,px_double low,px_double high) +{ + SoundModule->ZCR_Low=low; + SoundModule->ZCR_High=high; +} diff --git a/code/PainterEngine/Core/PX_SoundModule.h b/code/PainterEngine/Core/PX_SoundModule.h new file mode 100644 index 0000000000000000000000000000000000000000..6cdd7936bca09983be3e68e9c68479f24fe0525b --- /dev/null +++ b/code/PainterEngine/Core/PX_SoundModule.h @@ -0,0 +1,39 @@ +#ifndef PX_SOUNDMODULE +#define PX_SOUNDMODULE + +#include "../Core/PX_Core.h" + +#define PX_SOUNDMODULE_N 1024 +#define PX_SOUNDMODULE_FORMANT_COUNT 32 +#define PX_SOUNDMODULE_DEFALUT_SEARCH_HZ 90 + +typedef struct +{ + px_double A,W; +}PX_SoundModule_Formant; + +typedef struct +{ + px_memorypool *mp; + px_double lastPhase[PX_SOUNDMODULE_N/2]; + px_double remian[PX_SOUNDMODULE_N*2]; + px_double halfRebuild[PX_SOUNDMODULE_N/2]; + PX_SoundModule_Formant Formant[PX_SOUNDMODULE_FORMANT_COUNT]; + + px_int remainCount; + px_int SampleRate; + px_double searchHzW; + px_double pitchShift; + px_double ZCR_Low,ZCR_High; + px_double amp_threshold; + px_double amp_max; + px_double Pitch_threshold_Low,Pitch_threshold_High; +}PX_SoundModule; + + +px_void PX_SoundModuleInitialize(px_memorypool *mp,PX_SoundModule *SoundModule,px_int SampleRate,px_double pitchShift,PX_SoundModule_Formant Formant[],px_int FormantCount); +px_int PX_SoundModuleFilter(PX_SoundModule *SoundModule,_IN px_double _in[],px_int count,_OUT px_double _out[]); +px_void PX_SoundModulePitchShift(PX_SoundModule *SoundModule,px_double pitchShift); +px_void PX_SoundModuleSetZCR(PX_SoundModule *SoundModule,px_double low,px_double high); + +#endif diff --git a/code/PainterEngine/Core/PX_String.c b/code/PainterEngine/Core/PX_String.c new file mode 100644 index 0000000000000000000000000000000000000000..8fa2ac847375d5c14e0538d240b50e759c96b4da --- /dev/null +++ b/code/PainterEngine/Core/PX_String.c @@ -0,0 +1,651 @@ +#include "PX_String.h" + +px_int PX_StringToInteger(px_string *str) +{ + if (str->buffer[0]=='0'&&(str->buffer[1]=='x'||str->buffer[1]=='X')) + { + return PX_htoi(str->buffer+2); + } + else + return PX_atoi(str->buffer); +} + +px_void PX_StringTrim(px_string *str) +{ + if (str->buffer) + { + px_int loft=0; + px_int i; + while (str->buffer[loft]==' ') + { + loft++; + } + i=0; + while(PX_TRUE) + { + if (str->buffer[loft]=='\0'||loft>=str->bufferlen) + { + break; + } + str->buffer[i++]=str->buffer[loft++]; + } + str->buffer[i]='\0'; + i=PX_strlen(str->buffer); + if (i) + { + i--; + } + else + return; + + while (i&&str->buffer[i]==' ') + { + str->buffer[i--]='\0'; + } + } +} + +px_void PX_StringTrimLeft(px_string *str,px_int leftCount) +{ + px_int i; + if (leftCount==0) + { + return; + } + if (leftCount>=PX_strlen(str->buffer)) + { + PX_StringClear(str); + } + else + { + for (i=0;str->buffer[i+leftCount];i++) + { + str->buffer[i]=str->buffer[i+leftCount]; + } + str->buffer[i]='\0'; + } +} + +px_void PX_StringTrimRight(px_string *str,px_int RightCount) +{ + if (RightCount==0) + { + return; + } + if (RightCount>=PX_strlen(str->buffer)) + { + PX_StringClear(str); + } + else + { + str->buffer[PX_strlen(str->buffer)-RightCount]='\0'; + } +} + +px_void PX_StringFree(px_string *str) +{ + if(str->buffer&&str->bufferlen) + MP_Free(str->mp,str->buffer); + + str->buffer=PX_NULL; + str->bufferlen=0; +} + +px_bool PX_StringInit(px_memorypool *mp,px_string *str) +{ + str->buffer=(px_char *)MP_Malloc(mp,16); + if(!str->buffer)return PX_FALSE; + str->bufferlen=16; + PX_memset(str->buffer,0,16); + str->mp=mp; + return PX_TRUE; +} + +px_void PX_StringInitAlloc(px_memorypool *mp,px_string *str,px_int allocSize) +{ + int size=16; + while(sizebuffer=(px_char *)MP_Malloc(mp,allocSize); + str->bufferlen=allocSize; + PX_memset(str->buffer,0,size); + str->mp=mp; +} + +//%s %d %f +// px_void PX_StringFormat(px_string *str,px_char fmt[],...) +// { +// _px_va_list ap; +// px_char *p, *sval,*oldptr; +// px_int ival,oft=0; +// px_uint finalLen=0; +// px_double dval; +// px_char dat[32]; +// px_uchar shl=0; +// +// _px_va_start(ap, fmt); +// for (p = fmt; *p; p++) { +// if(*p != '%') { +// finalLen++; +// continue; +// } +// switch(*++p) { +// case 'd': +// ival = _px_va_arg(ap, px_int); +// finalLen +=PX_itoa(ival,dat,sizeof dat,10); +// break; +// case 'f': +// dval = _px_va_arg(ap, px_double); +// finalLen +=PX_ftoa((px_float)dval,dat,sizeof dat,6); +// break; +// case 's': +// sval = _px_va_arg(ap, char *); +// finalLen +=PX_strcpy(sval); +// break; +// default: +// finalLen+=1; +// break; +// } +// } +// _px_va_end(ap); +// finalLen++; +// +// +// oldptr=str->buffer; +// while ((px_uint)(1<<++shl)<=finalLen); +// str->bufferlen=(1<buffer=(px_char *)MP_Malloc(str->mp,str->bufferlen); +// px_memset(str->buffer,0,str->bufferlen); +// _px_va_start(ap, fmt); +// for (p = fmt; *p; p++) { +// if(*p != '%') { +// str->buffer[oft++]=*p; +// continue; +// } +// switch(*++p) { +// case 'd': +// ival = _px_va_arg(ap, px_int); +// oft+=PX_itoa(ival,dat,sizeof dat,10); +// PX_strcat(str->buffer,dat); +// break; +// case 'f': +// dval = _px_va_arg(ap, px_double); +// oft+=PX_ftoa((px_float)dval,dat,sizeof dat,6); +// PX_strcat(str->buffer,dat); +// break; +// case 's': +// sval = _px_va_arg(ap, char *); +// oft+=PX_strcpy(sval); +// PX_strcat(str->buffer,sval); +// break; +// default: +// str->buffer[oft++]=*p; +// break; +// } +// } +// _px_va_end(ap); +// str->buffer[oft]='\0'; +// +// if(oldptr) +// MP_Free(str->mp,oldptr); +// } + + +px_bool PX_StringFormat8(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6, px_stringformat _7, px_stringformat _8) +{ + px_char *oldptr; + px_uint finalLen=0; + px_uchar shl=0; + + finalLen=PX_sprintf8(PX_NULL,0,fmt,_1,_2,_3,_4,_5,_6,_7,_8); + + oldptr=str->buffer; + + while ((px_uint)(1<<++shl)<=finalLen); + str->bufferlen=(1<buffer=(px_char *)MP_Malloc(str->mp,str->bufferlen); + if (!str->buffer) + { + return PX_FALSE; + } + + finalLen=PX_sprintf8(str->buffer,str->bufferlen,fmt,_1,_2,_3,_4,_5,_6,_7,_8); + + if(oldptr) + MP_Free(str->mp,oldptr); + + return PX_TRUE; +} +px_bool PX_StringFormat7(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6, px_stringformat _7) +{ + return PX_StringFormat8(str,fmt,_1,_2,_3,_4,_5,_6,_7,PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringFormat6(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6) +{ + return PX_StringFormat8(str,fmt,_1,_2,_3,_4,_5,_6,PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringFormat5(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5) +{ + return PX_StringFormat8(str,fmt,_1,_2,_3,_4,_5,PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringFormat4(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4) +{ + return PX_StringFormat8(str,fmt,_1,_2,_3,_4,PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringFormat3(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3) +{ + return PX_StringFormat8(str,fmt,_1,_2,_3,PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringFormat2(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2) +{ + return PX_StringFormat8(str,fmt,_1,_2,PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringFormat1(px_string *str,const px_char fmt[],px_stringformat _1) +{ + return PX_StringFormat8(str,fmt,_1,PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0),PX_STRINGFORMAT_INT(0)); +} + +px_bool PX_StringSet(px_string *str,const px_char fmt[]) +{ + px_char *oldptr; + px_uint finalLen=0; + px_uchar shl=0; + + finalLen=PX_strlen(fmt); + + if (finalLen<(px_uint)str->bufferlen) + { + PX_strset(str->buffer,fmt); + return PX_TRUE; + } + + oldptr=str->buffer; + + while ((px_uint)(1<<++shl)<=finalLen); + str->bufferlen=(1<buffer=(px_char *)MP_Malloc(str->mp,str->bufferlen); + if (!str->buffer) + { + return PX_FALSE; + } + PX_strset(str->buffer,fmt); + + if(oldptr) + MP_Free(str->mp,oldptr); + return PX_TRUE; +} + +px_float PX_StringToFloat(px_string *str) +{ + return PX_atof(PX_STRING_DATA(str)); +} + +px_bool PX_StringIsNumeric(px_string *str) +{ + return PX_strIsNumeric(str->buffer); +} + +px_bool PX_StringIsFloat(px_string *str) +{ + return PX_strIsFloat(str->buffer); +} + +px_bool PX_StringCat(px_string *str,const px_char *str2) +{ + px_uchar shl=0; + px_char *old=str->buffer; + px_int length=PX_strlen(str->buffer)+PX_strlen(str2); + if (lengthbufferlen) + { + PX_strcat(str->buffer,str2); + return PX_TRUE; + } + + while ((px_int)(1<<++shl)<=length); + str->bufferlen=(1<buffer=(px_char *)MP_Malloc(str->mp,str->bufferlen); + if(!str->buffer)return PX_FALSE; + str->buffer[0]='\0'; + PX_strcat(str->buffer,old); + PX_strcat(str->buffer,str2); + if(old) + MP_Free(str->mp,old); + return PX_TRUE; +} + +px_void PX_StringClear(px_string *str) +{ + str->buffer[0]='\0'; +} + +px_bool PX_StringCatChar(px_string *str,px_char ch) +{ + px_uchar shl=0; + px_char *old=str->buffer; + px_int length=PX_strlen(str->buffer)+1; + if (lengthbufferlen) + { + str->buffer[length-1]=ch; + str->buffer[length]='\0'; + return PX_TRUE; + } + + while ((px_int)(1<<++shl)<=length); + str->bufferlen=(1<buffer=(px_char *)MP_Malloc(str->mp,str->bufferlen); + if(!str->buffer)return PX_FALSE; + str->buffer[0]='\0'; + PX_strcat(str->buffer,old); + str->buffer[length-1]=ch; + str->buffer[length]='\0'; + if(old) + MP_Free(str->mp,old); + return PX_TRUE; +} + +px_int PX_StringLen(px_string *str) +{ + return PX_strlen(str->buffer); +} + +px_bool PX_StringCopy(px_string *dest,px_string *res) +{ + if (res==dest) + { + PX_ERROR("px_sting Self-copied error"); + return PX_FALSE; + } + dest->buffer[0]='\0'; + return PX_StringCat(dest,res->buffer); +} + +px_bool PX_StringInsertChar(px_string *str,px_int index,px_char ch) +{ + px_int cpysize=PX_strlen(str->buffer+index); + if (PX_StringCatChar(str,' ')) + { + PX_memcpy(str->buffer+index+1,str->buffer+index,cpysize); + str->buffer[index]=ch; + } + return PX_FALSE; +} + +px_bool PX_StringRemoveChar(px_string *str,px_int index) +{ + if (index>=0&&indexbuffer)) + { + PX_memcpy(str->buffer+index,str->buffer+index+1,PX_strlen(str->buffer+index)); + return PX_TRUE; + } + return PX_FALSE; +} + +px_void PX_StringReplace(px_string *str,px_char *source,px_char *replaceto) +{ + px_string tempstr; + int i; + if (PX_StringLen(str)==0) + { + return; + } + PX_StringInit(str->mp,&tempstr); + PX_StringCopy(&tempstr,str); + PX_StringClear(str); + + for (i=0;i<=PX_StringLen(&tempstr)-PX_strlen(source);i++) + { + if (PX_memequ(tempstr.buffer+i,source,PX_strlen(source))) + { + PX_StringCat(str,replaceto); + i+=PX_strlen(source)-1; + } + else + { + PX_StringCatChar(str,tempstr.buffer[i]); + } + } + PX_StringCat(str,tempstr.buffer+i); + PX_StringFree(&tempstr); +} + +px_void PX_StringReplaceRange(px_string *str,px_int startindex,px_int endindex,px_char *replaceto) +{ + px_string tempStr; + + if (startindex>endindex) + { + PX_ERROR("string trim error"); + return; + } + + if (endindex>=PX_strlen(str->buffer)) + { + PX_ERROR("string trim error"); + return; + } + + PX_StringInit(str->mp,&tempStr); + PX_StringCopy(&tempStr,str); + + PX_StringClear(str); + + tempStr.buffer[startindex]=0; + PX_StringCat(str,tempStr.buffer); + PX_StringCat(str,replaceto); + PX_StringCat(str,tempStr.buffer+endindex+1); + PX_StringFree(&tempStr); +} + +#define PX_STRING_TRIMER_REG_COUNT 16 + +px_bool PX_StringTrimer_Solve(px_string *pstring,px_char *parseCode,px_char *ReplaceCode) +{ + px_int oft,j,k,resi,repj,regindex; + px_char regbuf[3]; + px_char endc; + px_bool ret; + px_string reg[PX_STRING_TRIMER_REG_COUNT],matchedString,replaceString; + px_bool mark[PX_STRING_TRIMER_REG_COUNT],matchd; + ret=PX_FALSE; + for (oft=0;oftmp,reg+oft); + mark[oft]=PX_FALSE; + } + + PX_StringInit(pstring->mp,&matchedString); + + oft=0; + + while(pstring->buffer[oft]) + { + repj=0; + resi=oft; + matchd=PX_FALSE; + + while(PX_TRUE) + { + + if (parseCode[repj]=='%') + { + j=0; + repj++; + + PX_StringClear(&matchedString); + + while(PX_TRUE) + { + if (parseCode[repj]>='0'&&parseCode[repj]<='9') + { + regbuf[j++]=parseCode[repj++]; + if (j>2) + { + goto _DONE; + } + regbuf[j]=0; + + } + else + break; + + } + if (j==0) + { + goto _DONE; + } + regindex=PX_atoi(regbuf); + if (regindex>=PX_STRING_TRIMER_REG_COUNT) + { + goto _DONE; + } + endc=parseCode[repj]; + + while (PX_TRUE) + { + if (pstring->buffer[resi]==endc) + { + break; + } + if (pstring->buffer[resi]=='\0') + { + goto _DONE; + } + PX_StringCatChar(&matchedString,pstring->buffer[resi]); + resi++; + } + + if (mark[regindex]) + { + //reg 0 as wildcard + if (PX_strequ(reg[regindex].buffer,matchedString.buffer)||!regindex) + { + matchd=PX_TRUE; + } + else + { + matchd=PX_FALSE; + break; + } + } + else + { + PX_StringCopy(®[regindex],&matchedString); + mark[regindex]=PX_TRUE; + } + + } + else + { + if (parseCode[repj]=='\0') + { + matchd=PX_TRUE; + break; + } + if (pstring->buffer[resi]=='\0') + { + break; + } + if (pstring->buffer[resi]==parseCode[repj]) + { + resi++; + repj++; + } + else + break; + } + } + + + + if (matchd) + { + PX_StringInit(pstring->mp,&replaceString); + j=0; + k=0; + while(PX_TRUE) + { + if (ReplaceCode[j]==0) + { + break; + } + if (ReplaceCode[j]=='%') + { + j++; + k=0; + while(PX_TRUE) + { + if (ReplaceCode[j]>='0'&&ReplaceCode[j]<='9') + { + regbuf[k++]=ReplaceCode[j++]; + + if (k>2) + { + PX_StringFree(&replaceString); + goto _DONE; + } + + regbuf[k]='\0'; + + regindex=PX_atoi(regbuf); + if (regindex>=PX_STRING_TRIMER_REG_COUNT) + { + PX_StringFree(&replaceString); + goto _DONE; + } + PX_StringCat(&replaceString,reg[regindex].buffer); + } + else + break; + } + } + else + { + PX_StringCatChar(&replaceString,ReplaceCode[j++]); + } + } + + + PX_StringReplaceRange(pstring,oft,resi-1,replaceString.buffer); + ret=PX_TRUE; + + oft+=PX_strlen(replaceString.buffer); + + PX_StringFree(&replaceString); + } + else + { + oft++; + } + + for (k=0;kbuffer=(px_char *)constchar; + str->mp=PX_NULL; + str->bufferlen=0; + +} + + diff --git a/code/PainterEngine/Core/PX_String.h b/code/PainterEngine/Core/PX_String.h new file mode 100644 index 0000000000000000000000000000000000000000..95ee365e13737c07ac1cc960a92e8b7ba624ccc3 --- /dev/null +++ b/code/PainterEngine/Core/PX_String.h @@ -0,0 +1,50 @@ +#ifndef __PX_STRING_H +#define __PX_STRING_H +#include "PX_MemoryPool.h" + +typedef struct __px_string +{ + px_char *buffer; + px_memorypool *mp; + px_int bufferlen; +}px_string; + + +#define PX_STRING_DATA(x) (x->buffer) + +px_bool PX_StringInit(px_memorypool *mp,px_string *str); +px_void PX_StringInitFromConst(px_string *str,const px_char *constchar); +px_int PX_StringToInteger(px_string *str); +px_float PX_StringToFloat(px_string *str); +px_void PX_StringTrim(px_string *str); +px_bool PX_StringCat(px_string *str,const px_char *str2); +px_void PX_StringClear(px_string *str); +px_bool PX_StringCatChar(px_string *str,px_char ch); +px_int PX_StringLen(px_string *str); +px_void PX_StringFree(px_string *str); +px_bool PX_StringCopy(px_string *dest,px_string *res); +px_bool PX_StringInsertChar(px_string *str,px_int index,px_char ch); +px_bool PX_StringRemoveChar(px_string *str,px_int index); +px_void PX_StringReplaceRange(px_string *str,px_int startindex,px_int endindex,px_char *replaceto); +px_void PX_StringTrimLeft(px_string *str,px_int leftCount); +px_void PX_StringTrimRight(px_string *str,px_int RightCount); + +px_bool PX_StringIsNumeric(px_string *str); +px_bool PX_StringIsFloat(px_string *str); + +//px_void PX_StringFormat(px_string *str,px_char fmt[],...); +px_void PX_StringReplace(px_string *str,px_char *source,px_char *replaceto); +px_bool PX_StringTrimer_Solve(px_string *pstring,px_char *parseCode,px_char *ReplaceCode); +px_void PX_StringInitAlloc(px_memorypool *mp,px_string *str,px_int allocSize); + +px_bool PX_StringFormat8(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6, px_stringformat _7, px_stringformat _8); +px_bool PX_StringFormat7(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6, px_stringformat _7); +px_bool PX_StringFormat6(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6); +px_bool PX_StringFormat5(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5); +px_bool PX_StringFormat4(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4); +px_bool PX_StringFormat3(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2, px_stringformat _3); +px_bool PX_StringFormat2(px_string *str,const px_char fmt[],px_stringformat _1, px_stringformat _2); +px_bool PX_StringFormat1(px_string *str,const px_char fmt[],px_stringformat _1); +px_bool PX_StringSet(px_string *str,const px_char fmt[]); + +#endif diff --git a/code/PainterEngine/Core/PX_Surface.c b/code/PainterEngine/Core/PX_Surface.c new file mode 100644 index 0000000000000000000000000000000000000000..afc3aa50d26ad5d02bb0221a1395f8c46e17619b --- /dev/null +++ b/code/PainterEngine/Core/PX_Surface.c @@ -0,0 +1,130 @@ +#include "PX_Surface.h" + +px_bool PX_SurfaceCreate(px_memorypool *mp,px_uint width,px_uint height,px_surface *surface) +{ + px_void *p=MP_Malloc(mp,height*width*sizeof(px_color)); + if (p!=PX_NULL) + { + surface->height=height; + surface->width=width; + surface->surfaceBuffer=(px_color *)p; + surface->MP=mp; + PX_memdwordset(p,0,height*width); + return PX_TRUE; + } + return PX_FALSE; +} + +px_void PX_SurfaceFree(px_surface *psurface) +{ + MP_Free(psurface->MP,psurface->surfaceBuffer); + psurface->surfaceBuffer=PX_NULL; + psurface->MP=0; + psurface->height=0; + psurface->width=0; +} + +px_void PX_SurfaceDrawPixel(px_surface *psurface,px_int X,px_int Y,px_color COLOR) +{ + px_color c; + if (COLOR._argb.a==0) + { + return; + } + if(Xwidth&&X>=0&&Yheight&&Y>=0) + { + if(COLOR._argb.a==0xff) + { + psurface->surfaceBuffer[X+psurface->width*Y]=COLOR; + } + else + { + c=psurface->surfaceBuffer[X+psurface->width*Y]; + c._argb.r=(px_uchar)(((255-COLOR._argb.a)*c._argb.r+COLOR._argb.r*COLOR._argb.a)/255); + c._argb.g=(px_uchar)(((255-COLOR._argb.a)*c._argb.g+COLOR._argb.g*COLOR._argb.a)/255); + c._argb.b=(px_uchar)(((255-COLOR._argb.a)*c._argb.b+COLOR._argb.b*COLOR._argb.a)/255); + c._argb.a=255-(255-c._argb.a)*(255-COLOR._argb.a)/255; + psurface->surfaceBuffer[X+psurface->width*Y]=c; + } + } +} + +px_void PX_SurfaceDrawPixelFaster(px_surface *psurface,px_int X,px_int Y,px_color COLOR) +{ + px_color c; + if (COLOR._argb.a==0) + { + return; + } + +#ifdef PX_DEBUG_MODE + if(!(Xwidth&&X>=0&&Yheight&&Y>=0)) PX_ASSERT(); +#endif + + if(COLOR._argb.a==0xff) + { + psurface->surfaceBuffer[X+psurface->width*Y]=COLOR; + } + else + { + c=psurface->surfaceBuffer[X+psurface->width*Y]; + c._argb.r=(unsigned char)(((255-COLOR._argb.a)*c._argb.r+COLOR._argb.r*COLOR._argb.a)/255); + c._argb.g=(unsigned char)(((255-COLOR._argb.a)*c._argb.g+COLOR._argb.g*COLOR._argb.a)/255); + c._argb.b=(unsigned char)(((255-COLOR._argb.a)*c._argb.b+COLOR._argb.b*COLOR._argb.a)/255); + c._argb.a=255-(255-c._argb.a)*(255-COLOR._argb.a)/255; + psurface->surfaceBuffer[X+psurface->width*Y]=c; + } +} + +px_void PX_SurfaceClear(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_color color) +{ + px_int i,mid; + + if (left>right) + { + mid=left; + left=right; + right=mid; + } + if (top>bottom) + { + mid=top; + top=bottom; + bottom=mid; + } + if (left<0) + { + left=0; + } + if (top<0) + { + top=0; + } + + if (left>psurface->width-1) + { + return; + } + + if (bottom<0) + { + return; + } + + if (right>psurface->width-1) + { + right=psurface->width-1; + } + + if (bottom>psurface->height-1) + { + bottom=psurface->height-1; + } + + + for (i=top;i<=bottom;i++) + { + PX_memdwordset(psurface->surfaceBuffer+i*psurface->width+left,color._argb.ucolor,right-left+1); + } + +} diff --git a/code/PainterEngine/Core/PX_Surface.h b/code/PainterEngine/Core/PX_Surface.h new file mode 100644 index 0000000000000000000000000000000000000000..0e87695d77edd70767a97d01c51b1784727eae1e --- /dev/null +++ b/code/PainterEngine/Core/PX_Surface.h @@ -0,0 +1,20 @@ +#ifndef __PX_SURFACE_H +#define __PX_SURFACE_H +#include "PX_MemoryPool.h" + +typedef struct _PX_Surface +{ + px_color *surfaceBuffer; + px_int height; + px_int width; + px_memorypool *MP; +}px_surface; +#define PX_SURFACECOLOR(main_pSurface,X,Y) ((main_pSurface)->surfaceBuffer[(X)+(main_pSurface)->width*(Y)]) +#define PX_SurfaceGetPixel(main_pSurface,X,Y) PX_SURFACECOLOR(main_pSurface,X,Y) +#define PX_SurfaceSetPixel(main_pSurface,X,Y,COLOR) ((main_pSurface)->surfaceBuffer[(X)+(main_pSurface)->width*(Y)]=COLOR) +px_void PX_SurfaceDrawPixel(px_surface *ps,px_int x,px_int y,px_color color); +px_void PX_SurfaceDrawPixelFaster(px_surface *psurface,px_int X,px_int Y,px_color COLOR); +px_bool PX_SurfaceCreate(px_memorypool *mp,px_uint width,px_uint height,_OUT px_surface *surface); +px_void PX_SurfaceClear(px_surface *ps, px_int left, px_int top, px_int right, px_int bottom,px_color color); +px_void PX_SurfaceFree(px_surface *psurface); +#endif diff --git a/code/PainterEngine/Core/PX_TRaw.c b/code/PainterEngine/Core/PX_TRaw.c new file mode 100644 index 0000000000000000000000000000000000000000..d627e3c99f02648e1811bea70d96e66d8d84e1b7 --- /dev/null +++ b/code/PainterEngine/Core/PX_TRaw.c @@ -0,0 +1,103 @@ +#include "PX_TRaw.h" + +px_bool PX_TRawVerify(px_void *data,px_int size) +{ + PX_TRaw_Header *pHeader=(PX_TRaw_Header *)data; + if (sizeMagic[0]!='T'||pHeader->Magic[1]!='R'||pHeader->Magic[2]!='A'||pHeader->Magic[3]!='W') + { + return PX_FALSE; + } + + if (size-sizeof(PX_TRaw_Header)Height*pHeader->Width*sizeof(px_color)) + { + return PX_FALSE; + } + + return PX_TRUE; +} + +px_int PX_TRawGetWidth(px_void *data) +{ + PX_TRaw_Header *pHeader=(PX_TRaw_Header *)data; + return pHeader->Width; +} + +px_int PX_TRawGetHeight(px_void *data) +{ + PX_TRaw_Header *pHeader=(PX_TRaw_Header *)data; + return pHeader->Height; +} + +px_void PX_TRawRender(px_surface *psurface,px_void *data,px_int x,px_int y) +{ + px_int i,j; + px_int Height; + px_int Width; + px_color *pdataColor=(px_color *)((px_char *)data+sizeof(PX_TRaw_Header)); + if (x>psurface->width||y>psurface->height) + { + return; + } + + Height=PX_TRawGetHeight(data); + Width=PX_TRawGetWidth(data); + + if (Height>0&&Width>0) + { + if (x<-Width||y<-Height) + { + return; + } + } + else + { + return; + } + + for (i=0;iheight*psurface->width*sizeof(px_color)+sizeof(header); + *size=_outsize; + header.Magic[0]='T'; + header.Magic[1]='R'; + header.Magic[2]='A'; + header.Magic[3]='W'; + + header.Height=psurface->height; + header.Width=psurface->width; + + if (TRawBuffer) + { + PX_memcpy(TRawBuffer,&header,sizeof(header)); + PX_memcpy(TRawBuffer+sizeof(header),psurface->surfaceBuffer,psurface->height*psurface->width*sizeof(px_color)); + return PX_TRUE; + } + else + return PX_FALSE; +} + +px_uint PX_TRawGetSize(PX_TRaw_Header *header) +{ + return header->Height*header->Width*sizeof(px_color)+sizeof(PX_TRaw_Header); +} diff --git a/code/PainterEngine/Core/PX_TRaw.h b/code/PainterEngine/Core/PX_TRaw.h new file mode 100644 index 0000000000000000000000000000000000000000..d2869f1e6f5d4342fd40095819974159b4aa274b --- /dev/null +++ b/code/PainterEngine/Core/PX_TRaw.h @@ -0,0 +1,19 @@ +#ifndef _PX_TRAW_H +#define _PX_TRAW_H + +#include "../Core/PX_Surface.h" + +typedef struct _PX_TRaw_Header +{ + px_byte Magic[4];//TRAW 0x57415254 + px_int32 Width; + px_int32 Height; +}PX_TRaw_Header; + +px_bool PX_TRawVerify(px_void *data,px_int size); +px_int PX_TRawGetWidth(px_void *data); +px_int PX_TRawGetHeight(px_void *data); +px_uint PX_TRawGetSize(PX_TRaw_Header *header); +px_void PX_TRawRender(px_surface *psurface,px_void *data,px_int x,px_int y); +px_bool PX_TRawBuild(px_surface *psurface,px_byte *TRawBuffer,px_int *size); +#endif diff --git a/code/PainterEngine/Core/PX_Texture.c b/code/PainterEngine/Core/PX_Texture.c new file mode 100644 index 0000000000000000000000000000000000000000..2a5250f85aea138c14be2e86c3bbbe7b7c0885d1 --- /dev/null +++ b/code/PainterEngine/Core/PX_Texture.c @@ -0,0 +1,2348 @@ +#include "PX_Texture.h" + +px_bool PX_TextureCreate(px_memorypool *mp,px_texture *tex,px_int width,px_int height) +{ + return PX_SurfaceCreate(mp,width,height,tex); +} + + +px_bool PX_TextureCreateFromMemory(px_memorypool *mp,px_void *data,px_int size,px_texture *tex) +{ + px_int width; + px_int height; + if (PX_BitmapVerify(data,size)) + { + width=PX_BitmapGetWidth(data); + height=PX_BitmapGetHeight(data); + if(PX_TextureCreate(mp,tex,width,height)) + { + PX_BitmapRender(tex,data,size,0,0); + } + else + { + return PX_FALSE; + } + + } + + if (PX_TRawVerify(data,size)) + { + width=PX_TRawGetWidth(data); + height=PX_TRawGetHeight(data); + if(PX_TextureCreate(mp,tex,width,height)) + { + PX_TRawRender(tex,data,0,0); + } + else + { + return PX_FALSE; + } + } + + return PX_TRUE; +} + +typedef struct +{ + px_surface *psurface; + px_texture *Server; + px_int x,y,top,bottom,left,right; + PX_TEXTURERENDER_REFPOINT refPoint; + PX_TEXTURERENDER_BLEND *blend; +}PX_TEXTURERENDER_PARALLEL_DATA; + + +static px_int PX_TextureRenderParallel(px_void *parallel_data) +{ + PX_TEXTURERENDER_PARALLEL_DATA *param_data=(PX_TEXTURERENDER_PARALLEL_DATA *)parallel_data; + px_int i,j; + px_int bR,bG,bB,bA; + px_color clr; + + px_color *pdata=(px_color *)param_data->Server->surfaceBuffer; + if (param_data->blend) + { + for (j=param_data->top;j<=param_data->bottom;j++) + { + for (i=param_data->left;i<=param_data->right;i++) + { + clr=pdata[j*param_data->Server->width+i]; + bA=(px_int)(clr._argb.a*param_data->blend->alpha); + bR=(px_int)(clr._argb.r*param_data->blend->hdr_R); + bG=(px_int)(clr._argb.g*param_data->blend->hdr_G); + bB=(px_int)(clr._argb.b*param_data->blend->hdr_B); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceDrawPixel(param_data->psurface,param_data->x+i,param_data->y+j,clr); + } + } + } + else + { + for (j=param_data->top;j<=param_data->bottom;j++) + { + for (i=param_data->left;i<=param_data->right;i++) + { + clr=pdata[j*param_data->Server->width+i]; + PX_SurfaceDrawPixel(param_data->psurface,param_data->x+i,param_data->y+j,clr); + } + } + } + return 0; +} + +px_void PX_TextureRender(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_int left,right,top,bottom,i,j; + px_int bR,bG,bB,bA; + px_color *pdata; + px_color clr; + + pdata=(px_color *)tex->surfaceBuffer; + switch (refPoint) + { + case PX_TEXTURERENDER_REFPOINT_LEFTTOP: + break; + case PX_TEXTURERENDER_REFPOINT_MIDTOP: + x-=tex->width/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTTOP: + x-=tex->width; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTMID: + y-=tex->height/2; + break; + case PX_TEXTURERENDER_REFPOINT_CENTER: + y-=tex->height/2; + x-=tex->width/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTMID: + y-=tex->height/2; + x-=tex->width; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTBOTTOM: + y-=tex->height; + break; + case PX_TEXTURERENDER_REFPOINT_MIDBOTTOM: + y-=tex->height; + x-=tex->width/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTBOTTOM: + y-=tex->height; + x-=tex->width; + break; + } + + + if (x<-tex->width) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-tex->height) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+tex->width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=tex->width-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+tex->height>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=tex->height-1; + } + + + if (blend) + { + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + clr=pdata[j*tex->width+i]; + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + } + } + else + { + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + clr=pdata[j*tex->width+i]; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + } + } + +} + + + +px_void PX_TextureCover(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint) +{ + px_int left,right,top,bottom,j; + + switch (refPoint) + { + case PX_TEXTURERENDER_REFPOINT_LEFTTOP: + break; + case PX_TEXTURERENDER_REFPOINT_MIDTOP: + x-=tex->width/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTTOP: + x-=tex->width; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTMID: + y-=tex->height/2; + break; + case PX_TEXTURERENDER_REFPOINT_CENTER: + y-=tex->height/2; + x-=tex->width/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTMID: + y-=tex->height/2; + x-=tex->width; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTBOTTOM: + y-=tex->height; + break; + case PX_TEXTURERENDER_REFPOINT_MIDBOTTOM: + y-=tex->height; + x-=tex->width/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTBOTTOM: + y-=tex->height; + x-=tex->width; + break; + } + + + if (x<-tex->width) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-tex->height) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+tex->width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=tex->width-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+tex->height>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=tex->height-1; + } + + + for (j=top;j<=bottom;j++) + { + PX_memcpy(&psurface->surfaceBuffer[x+left+psurface->width*(y+j)],&tex->surfaceBuffer[tex->width*(j)+left],sizeof(px_color)*(right-left+1)); + } + + +} + +px_void PX_TextureRenderRotation(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_int Angle) +{ + PX_TextureRenderRotation_sincos(psurface,tex,x,y,refPoint,blend,PX_sin_angle((px_float)Angle),PX_cos_angle((px_float)Angle)); +} + +px_void PX_TextureRenderRotation_vector(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_point p_vector) +{ + PX_TextureRenderRotation_sincos(psurface,tex,x,y,refPoint,blend,PX_Point_sin(p_vector),PX_Point_cos(p_vector)); +} + +px_void PX_TextureRenderRotation_sincos(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_float sinx,px_float cosx) +{ + px_int newheight,newwidth,i,j,resHeight,resWidth; + px_point CornerPoint[4]; + px_matrix rotMat; + px_double SampleX,SampleY,mapX,mapY; + px_double mixa,mixr,mixg,mixb,Weight; + px_float invCosAgl,invSinAgl; + px_color sampleColor; + px_int left,right,top,bottom; + + + + resHeight=tex->height; + resWidth=tex->width; + + CornerPoint[0].x=-tex->width/2.f; + CornerPoint[0].y=-tex->height/2.f; + CornerPoint[0].z=0; + + CornerPoint[1].x=tex->width/2.f; + CornerPoint[1].y=-tex->height/2.f; + CornerPoint[1].z=0; + + CornerPoint[2].x=-tex->width/2.f; + CornerPoint[2].y=tex->height/2.f; + CornerPoint[2].z=0; + + CornerPoint[3].x=tex->width/2.f; + CornerPoint[3].y=tex->height/2.f; + CornerPoint[3].z=0; + + rotMat._11=cosx; rotMat._12=sinx; rotMat._13=0.0f; rotMat._14=0.0f; + rotMat._21=-sinx; rotMat._22=cosx; rotMat._23=0.0f; rotMat._24=0.0f; + rotMat._31=0.0f; rotMat._32=0.0f; rotMat._33=1.0f; rotMat._34=0.0f; + rotMat._41=0.0f; rotMat._42=0.0f; rotMat._43=0.0f; rotMat._44=1.0f; + + + CornerPoint[0]=PX_PointMulMatrix(CornerPoint[0],rotMat); + CornerPoint[1]=PX_PointMulMatrix(CornerPoint[1],rotMat); + CornerPoint[2]=PX_PointMulMatrix(CornerPoint[2],rotMat); + CornerPoint[3]=PX_PointMulMatrix(CornerPoint[3],rotMat); + + newheight=0; + newwidth=0; + for (i=0;i<4;i++) + { + if (CornerPoint[i].y>newheight) + { + newheight=(px_int)CornerPoint[i].y; + } + if (CornerPoint[i].x>newwidth) + { + newwidth=(px_int)CornerPoint[i].x; + } + } + newheight=PX_TRUNC(newheight*2+2); + newwidth=PX_TRUNC(newwidth*2+2); + + + switch (refPoint) + { + case PX_TEXTURERENDER_REFPOINT_LEFTTOP: + break; + case PX_TEXTURERENDER_REFPOINT_MIDTOP: + x-=newwidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTTOP: + x-=newwidth; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTMID: + y-=newheight/2; + break; + case PX_TEXTURERENDER_REFPOINT_CENTER: + y-=newheight/2; + x-=newwidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTMID: + y-=newheight/2; + x-=newwidth; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTBOTTOM: + y-=newheight; + break; + case PX_TEXTURERENDER_REFPOINT_MIDBOTTOM: + y-=newheight; + x-=newwidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTBOTTOM: + y-=newheight; + x-=newwidth; + break; + } + + + if (x<-newwidth) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-newheight) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+newwidth>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=newwidth-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+newheight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newheight-1; + } + + + + + + invCosAgl=cosx; + invSinAgl=-sinx; + + + for (j=top;jresWidth+0.5) + { + continue; + } + if (mapY<-0.5||mapY>resHeight+0.5) + { + continue; + } + mixa=0; + mixr=0; + mixg=0; + mixb=0; + //Sample 4 points + //lt + + SampleX=(mapX-0.5f); + SampleY=(mapY-0.5f); + + if (SampleX>0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)255?mixa=255:0; + mixr>255?mixr=255:0; + mixg>255?mixg=255:0; + mixb>255?mixb=255:0; + if (blend) + { + px_int bA,bR,bG,bB; + px_color clr=PX_COLOR((px_uchar)mixa,(px_uchar)mixr,(px_uchar)mixg,(px_uchar)mixb); + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + + PX_SurfaceDrawPixel(psurface,i+x,j+y,clr); + } + else + { + PX_SurfaceDrawPixel(psurface,i+x,j+y,PX_COLOR((px_uchar)mixa,(px_uchar)mixr,(px_uchar)mixg,(px_uchar)mixb)); + } + + } + } + return; +} + +px_void PX_TextureRenderMask(px_surface *psurface,px_texture *mask_tex,px_texture *map_tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_int left,right,top,bottom,i,j; + px_int bR,bG,bB,bA; + px_color *pmapdata,*pmaskdata; + px_color clr; + + pmaskdata=(px_color *)mask_tex->surfaceBuffer; + pmapdata=(px_color *)map_tex->surfaceBuffer; + + switch (refPoint) + { + case PX_TEXTURERENDER_REFPOINT_LEFTTOP: + break; + case PX_TEXTURERENDER_REFPOINT_MIDTOP: + x-=mask_tex->width/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTTOP: + x-=mask_tex->width; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTMID: + y-=mask_tex->height/2; + break; + case PX_TEXTURERENDER_REFPOINT_CENTER: + y-=mask_tex->height/2; + x-=mask_tex->width/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTMID: + y-=mask_tex->height/2; + x-=mask_tex->width; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTBOTTOM: + y-=mask_tex->height; + break; + case PX_TEXTURERENDER_REFPOINT_MIDBOTTOM: + y-=mask_tex->height; + x-=mask_tex->width/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTBOTTOM: + y-=mask_tex->height; + x-=mask_tex->width; + break; + } + + if (mask_tex->width>map_tex->width) + { + if (x<-map_tex->width) + { + return; + } + } + else + { + if (x<-mask_tex->width) + { + return; + } + } + + if (x>psurface->width-1) + { + return; + } + if (mask_tex->height>map_tex->height) + { + if (y<-map_tex->height) + { + return; + } + } + else + { + if (y<-mask_tex->height) + { + return; + } + } + + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + if (mask_tex->width>map_tex->width) + { + if (x+mask_tex->width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=mask_tex->width-1; + } + } + else + { + if (x+map_tex->width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=map_tex->width-1; + } + } + + + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + if (mask_tex->height>map_tex->height) + { + if (y+mask_tex->height>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=mask_tex->height-1; + } + } + else + { + if (y+map_tex->height>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=map_tex->height-1; + } + } + + if (blend) + { + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + clr=pmapdata[j*map_tex->width+i]; + clr._argb.a=1*clr._argb.a*pmaskdata[j*mask_tex->width+i]._argb.a/255; + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + } + } + else + { + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + clr=pmapdata[j*map_tex->width+i]; + clr._argb.a=1*clr._argb.a*pmaskdata[j*mask_tex->width+i]._argb.a/255; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + } + } + +} + + +px_bool PX_TextureCreateScale(px_memorypool *mp,px_texture *resTexture,px_int newWidth,px_int newHeight,px_texture *out) +{ + px_double SampleWidth=(px_double)(resTexture->width)/(newWidth); + px_double SampleHeight=(px_double)(resTexture->height)/(newHeight); + px_double SampleX,SampleY,SampleArea,u,v,cellw,cellh,mixa,mixr,mixg,mixb; + px_color *Dst,*Src=(px_color *)resTexture->surfaceBuffer; + px_color SampleColor,MixColor; + px_int xoft,yoft,horz,vcl; + + if (newWidth<0||newHeight<0) + { + return PX_FALSE; + } + if (!(newHeight&&newWidth)) + { + return PX_FALSE; + } + + if (!PX_TextureCreate(mp,out,newWidth,newHeight)) + { + return PX_FALSE; + } + + Dst=(px_color *)out->surfaceBuffer; + + SampleArea=SampleHeight*SampleWidth; + + for (yoft=0;yoftwidth&&vclheight) + SampleColor=PX_SURFACECOLOR(resTexture,horz,vcl); + else + SampleColor._argb.ucolor=0; + + mixa+=SampleColor._argb.a*cellh*cellw/SampleArea; + mixr+=SampleColor._argb.r*cellh*cellw/SampleArea; + mixg+=SampleColor._argb.g*cellh*cellw/SampleArea; + mixb+=SampleColor._argb.b*cellh*cellw/SampleArea; + + + vcl++; + v=(px_double)vcl; + } + horz++; + u=(px_double)horz; + } + mixa>255?mixa=255:0; + mixr>255?mixr=255:0; + mixg>255?mixg=255:0; + mixb>255?mixb=255:0; + Dst[xoft+yoft*newWidth]=PX_COLOR((px_uchar)PX_APO(mixa),(px_uchar)mixr,(px_uchar)mixg,(px_uchar)mixb);; + } + } + return PX_TRUE; +} + +px_bool PX_TextureCreateRotationRadian(px_memorypool *mp,px_texture *resTexture,px_float radian,px_texture *out) +{ + return PX_TextureCreateRotationAngle(mp,resTexture,(px_float)(radian*180/PX_PI),out); +} + +px_bool PX_TextureCreateRotationAngle(px_memorypool *mp,px_texture *resTexture,px_float Angle,px_texture *out) +{ + px_int height,width,i,j,resHeight,resWidth; + px_point CornerPoint[4]; + px_matrix rotMat; + px_double SampleX,SampleY,mapX,mapY; + px_double mixa,mixr,mixg,mixb,Weight; + px_float invCosAgl,invSinAgl; + px_color sampleColor; + + resHeight=resTexture->height; + resWidth=resTexture->width; + CornerPoint[0].x=-resTexture->width/2.f; + CornerPoint[0].y=-resTexture->height/2.f; + CornerPoint[0].z=0; + + CornerPoint[1].x=resTexture->width/2.f; + CornerPoint[1].y=-resTexture->height/2.f; + CornerPoint[1].z=0; + + CornerPoint[2].x=-resTexture->width/2.f; + CornerPoint[2].y=resTexture->height/2.f; + CornerPoint[2].z=0; + + CornerPoint[3].x=resTexture->width/2.f; + CornerPoint[3].y=resTexture->height/2.f; + CornerPoint[3].z=0; + + PX_MatrixRotateZ(&rotMat,Angle); + CornerPoint[0]=PX_PointMulMatrix(CornerPoint[0],rotMat); + CornerPoint[1]=PX_PointMulMatrix(CornerPoint[1],rotMat); + CornerPoint[2]=PX_PointMulMatrix(CornerPoint[2],rotMat); + CornerPoint[3]=PX_PointMulMatrix(CornerPoint[3],rotMat); + + height=0; + width=0; + for (i=0;i<4;i++) + { + if (CornerPoint[i].y>height) + { + height=(px_int)CornerPoint[i].y; + } + if (CornerPoint[i].x>width) + { + width=(px_int)CornerPoint[i].x; + } + } + height=PX_TRUNC(height*2+2); + width=PX_TRUNC(width*2+2); + if (!PX_TextureCreate(mp,out,width,height)) + { + return PX_FALSE; + } + invCosAgl=PX_cos_angle(-Angle); + invSinAgl=PX_sin_angle(-Angle); + for (j=0;jresWidth+0.5) + { + continue; + } + if (mapY<-0.5||mapY>resHeight+0.5) + { + continue; + } + mixa=0; + mixr=0; + mixg=0; + mixb=0; + //Sample 4 points + //lt + + SampleX=(mapX-0.5f); + SampleY=(mapY-0.5f); + + if (SampleX>0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)255?mixa=255:0; + mixr>255?mixr=255:0; + mixg>255?mixg=255:0; + mixb>255?mixb=255:0; + + PX_SurfaceSetPixel(out,i,j,PX_COLOR((px_uchar)mixa,(px_uchar)mixr,(px_uchar)mixg,(px_uchar)mixb)); + + } + } + return PX_TRUE; +} + +px_bool PX_TextureRotationAngleToTexture(px_texture *resTexture,px_float Angle,px_texture *out) +{ + px_int height,width,i,j,resHeight,resWidth; + px_double SampleX,SampleY,mapX,mapY; + px_double mixa,mixr,mixg,mixb,Weight; + px_float invCosAgl,invSinAgl; + px_color sampleColor; + + resHeight=resTexture->height; + resWidth=resTexture->width; + + height=out->height; + width=out->width; + + invCosAgl=PX_cos_angle(-Angle); + invSinAgl=PX_sin_angle(-Angle); + for (j=0;jresWidth+0.5) + { + continue; + } + if (mapY<-0.5||mapY>resHeight+0.5) + { + continue; + } + mixa=0; + mixr=0; + mixg=0; + mixb=0; + //Sample 4 points + //lt + + SampleX=(mapX-0.5f); + SampleY=(mapY-0.5f); + + if (SampleX>0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)0&&(SampleX)0&&(SampleY)255?mixa=255:0; + mixr>255?mixr=255:0; + mixg>255?mixg=255:0; + mixb>255?mixb=255:0; + + PX_SurfaceSetPixel(out,i,j,PX_COLOR((px_uchar)mixa,(px_uchar)mixr,(px_uchar)mixg,(px_uchar)mixb)); + + } + } + return PX_TRUE; +} + +px_void PX_TextureFree(px_texture *tex) +{ + PX_SurfaceFree(tex); +} + +px_void PX_SurfaceRender(px_surface *psurface,px_surface *surface,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + PX_TextureRender(psurface,surface,x,y,refPoint,blend); +} + +px_void PX_SurfaceCover(px_surface *pdestSurface,px_surface *pResSurface,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint) +{ + PX_TextureCover(pdestSurface,pResSurface,x,y,refPoint); +} + +px_void PX_SurfaceSetRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_color color) +{ + px_int i,mid; + + if (left>right) + { + mid=left; + left=right; + right=mid; + } + if (top>bottom) + { + mid=top; + top=bottom; + bottom=mid; + } + if (left<0) + { + left=0; + } + if (top<0) + { + top=0; + } + if (left>psurface->width-1) + { + return; + } + + if (bottom>psurface->height-1) + { + return; + } + + if (right>psurface->width-1) + { + right=psurface->width-1; + } + + if (bottom>psurface->height-1) + { + right=psurface->height-1; + } + + for (i=top;i<=bottom;i++) + { + PX_memdwordset(psurface->surfaceBuffer+i*psurface->width+left,color._argb.ucolor,right-left+1); + } +} + + + +px_void PX_TextureRenderEx(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_float Angle) +{ + px_int newWidth,newHeight; + + px_int i,j,resHeight,resWidth; + + px_float invCosAgl,invSinAgl; + + px_double ref_x,ref_y; + px_int mapX,mapY; + + px_color clr; + px_int bA,bR,bG,bB; + + ////////////////////////////////////////////////////////////////////////// + px_int left,right,top,bottom; + + + ////////////////////////////////////////////////////////////////////////// + + resHeight=resTexture->height; + resWidth=resTexture->width; + + newHeight=PX_TRUNC(resHeight*scale); + newWidth=PX_TRUNC(resWidth*scale); + + ////////////////////////////////////////////////////////////////////////// + switch (refPoint) + { + case PX_TEXTURERENDER_REFPOINT_LEFTTOP: + break; + case PX_TEXTURERENDER_REFPOINT_MIDTOP: + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTTOP: + x-=newWidth; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTMID: + y-=newHeight/2; + break; + case PX_TEXTURERENDER_REFPOINT_CENTER: + y-=newHeight/2; + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTMID: + y-=newHeight/2; + x-=newWidth; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTBOTTOM: + y-=newHeight; + break; + case PX_TEXTURERENDER_REFPOINT_MIDBOTTOM: + y-=newHeight; + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTBOTTOM: + y-=newHeight; + x-=newWidth; + break; + } + + + if (x<-newWidth) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-newHeight) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+newWidth>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=newWidth-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+newHeight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newHeight-1; + } + ////////////////////////////////////////////////////////////////////////// + + + + invCosAgl=PX_cos_angle(-Angle); + invSinAgl=PX_sin_angle(-Angle); + + if (blend) + { + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + + clr=PX_SURFACECOLOR(resTexture,mapX,mapY); + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceDrawPixelFaster(psurface,x+i,y+j,clr); + } + + } + + } + else + { + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + + PX_SurfaceDrawPixelFaster(psurface,x+i,y+j,PX_SURFACECOLOR(resTexture,mapX,mapY)); + } + + } + } +} + +px_void PX_TextureRenderMaskEx(px_surface *psurface,px_texture *mask_tex,px_texture *map_tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_float Angle) +{ + px_int newWidth,newHeight; + + px_int i,j,resHeight,resWidth; + px_int bA,bB,bG,bR; + px_float invCosAgl,invSinAgl; + + px_double ref_x,ref_y; + px_int mapX,mapY; + + px_color *pmapdata,*pmaskdata; + px_color clr; + + + ////////////////////////////////////////////////////////////////////////// + px_int left,right,top,bottom; + + + ////////////////////////////////////////////////////////////////////////// + + + pmaskdata=(px_color *)mask_tex->surfaceBuffer; + pmapdata=(px_color *)map_tex->surfaceBuffer; + + resHeight=mask_tex->height; + resWidth=mask_tex->width; + + newHeight=PX_TRUNC(resHeight*scale); + newWidth=PX_TRUNC(resWidth*scale); + + ////////////////////////////////////////////////////////////////////////// + switch (refPoint) + { + case PX_TEXTURERENDER_REFPOINT_LEFTTOP: + break; + case PX_TEXTURERENDER_REFPOINT_MIDTOP: + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTTOP: + x-=newWidth; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTMID: + y-=newHeight/2; + break; + case PX_TEXTURERENDER_REFPOINT_CENTER: + y-=newHeight/2; + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTMID: + y-=newHeight/2; + x-=newWidth; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTBOTTOM: + y-=newHeight; + break; + case PX_TEXTURERENDER_REFPOINT_MIDBOTTOM: + y-=newHeight; + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTBOTTOM: + y-=newHeight; + x-=newWidth; + break; + } + + + if (x<-newWidth) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-newHeight) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (newWidth>map_tex->width) + { + if (x+map_tex->width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=map_tex->width-1; + } + } + else + { + if (x+newWidth>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=newWidth-1; + } + } + + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (newHeight>map_tex->height) + { + if (y+newHeight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newHeight-1; + } + } + else + { + if (y+newHeight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newHeight-1; + } + } + + ////////////////////////////////////////////////////////////////////////// + + + invCosAgl=PX_cos_angle(-Angle); + invSinAgl=PX_sin_angle(-Angle); + + if (blend) + { + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + + clr=pmapdata[j*map_tex->width+i]; + clr._argb.a=1*clr._argb.a*pmaskdata[j*mask_tex->width+i]._argb.a/255; + + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceDrawPixelFaster(psurface,x+i,y+j,clr); + } + + } + + } + else + { + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + clr=pmapdata[j*map_tex->width+i]; + clr._argb.a=1*clr._argb.a*pmaskdata[j*mask_tex->width+i]._argb.a/255; + + PX_SurfaceDrawPixelFaster(psurface,x+i,y+j,clr); + } + + } + } + +} + + + +px_bool PX_ShapeCreate(px_memorypool *mp,px_shape *shape,px_int width,px_int height) +{ + px_void *p=MP_Malloc(mp,height*width*sizeof(px_uchar)); + if (p!=PX_NULL) + { + shape->height=height; + shape->width=width; + shape->alpha=(px_uchar *)p; + shape->MP=mp; + PX_memset(p,0,height*width); + return PX_TRUE; + } + return PX_FALSE; +} + + + +px_bool PX_ShapeCreateFromTexture(px_memorypool *mp,px_shape *shape,px_texture *texture) +{ + px_int x,y; + px_void *p=MP_Malloc(mp,texture->height*texture->width*sizeof(px_uchar)); + if (p!=PX_NULL) + { + shape->height=texture->height; + shape->width=texture->width; + shape->alpha=(px_uchar *)p; + shape->MP=mp; + PX_memdwordset(p,0,texture->height*texture->width); + + //Map texture to shape + for (y=0;yheight;y++) + { + for (x=0;xwidth;x++) + { + shape->alpha[y*shape->width+x]=((px_color *)texture->surfaceBuffer)[y*texture->width+x]._argb.a; + } + } + return PX_TRUE; + } + return PX_FALSE; +} + +px_void PX_ShapeFree(px_shape *shape) +{ + MP_Free(shape->MP,shape->alpha); +} + +px_void PX_ShapeRender(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,px_color blendColor) +{ + px_int left,right,top,bottom,i,j; + px_uchar *pdata; + px_color clr; + + pdata=(px_uchar *)shape->alpha; + + switch (refPoint) + { + case PX_TEXTURERENDER_REFPOINT_LEFTTOP: + break; + case PX_TEXTURERENDER_REFPOINT_MIDTOP: + x-=shape->width/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTTOP: + x-=shape->width; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTMID: + y-=shape->height/2; + break; + case PX_TEXTURERENDER_REFPOINT_CENTER: + y-=shape->height/2; + x-=shape->width/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTMID: + y-=shape->height/2; + x-=shape->width; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTBOTTOM: + y-=shape->height; + break; + case PX_TEXTURERENDER_REFPOINT_MIDBOTTOM: + y-=shape->height; + x-=shape->width/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTBOTTOM: + y-=shape->height; + x-=shape->width; + break; + } + + + if (x<-shape->width) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-shape->height) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+shape->width>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=shape->width-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+shape->height>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=shape->height-1; + } + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + if (pdata[j*shape->width+i]!=0) + { + clr=blendColor; + clr._argb.a=1*clr._argb.a*pdata[j*shape->width+i]/255; + PX_SurfaceDrawPixel(psurface,x+i,y+j,clr); + } + + } + } + +} + + + +px_void PX_ShapeRenderEx(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,px_color blendColor,px_float scale,px_float Angle) +{ + px_int newWidth,newHeight; + + px_int i,j,resHeight,resWidth; + + px_float invCosAgl,invSinAgl; + + px_double ref_x,ref_y; + px_int mapX,mapY; + + px_color clr; + + ////////////////////////////////////////////////////////////////////////// + px_int left,right,top,bottom; + + + ////////////////////////////////////////////////////////////////////////// + + resHeight=shape->height; + resWidth=shape->width; + + newHeight=PX_TRUNC(resHeight*scale); + newWidth=PX_TRUNC(resWidth*scale); + + ////////////////////////////////////////////////////////////////////////// + switch (refPoint) + { + case PX_TEXTURERENDER_REFPOINT_LEFTTOP: + break; + case PX_TEXTURERENDER_REFPOINT_MIDTOP: + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTTOP: + x-=newWidth; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTMID: + y-=newHeight/2; + break; + case PX_TEXTURERENDER_REFPOINT_CENTER: + y-=newHeight/2; + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTMID: + y-=newHeight/2; + x-=newWidth; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTBOTTOM: + y-=newHeight; + break; + case PX_TEXTURERENDER_REFPOINT_MIDBOTTOM: + y-=newHeight; + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTBOTTOM: + y-=newHeight; + x-=newWidth; + break; + } + + + if (x<-newWidth) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-newHeight) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+newWidth>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=newWidth-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+newHeight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newHeight-1; + } + ////////////////////////////////////////////////////////////////////////// + + + + invCosAgl=PX_cos_angle(-Angle); + invSinAgl=PX_sin_angle(-Angle); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + clr=blendColor; + clr._argb.a=1*clr._argb.a*shape->alpha[mapY*shape->width+mapX]/255; + PX_SurfaceDrawPixelFaster(psurface,x+i,y+j,clr); + } + + } + +} + +px_bool PX_ShapeCreateFromMemory(px_memorypool *mp,px_void *data,px_int size,px_shape *shape) +{ + px_int width; + px_int height; + if (PX_BitmapVerify(data,size)) + { + return PX_FALSE; + } + + if (PX_TRawVerify(data,size)) + { + width=PX_TRawGetWidth(data); + height=PX_TRawGetHeight(data); + if(PX_ShapeCreate(mp,shape,width,height)) + { + px_int i,j; + px_color *pdataColor=(px_color *)((px_char *)data+sizeof(PX_TRaw_Header)); + + for (i=0;ialpha[width*i+j]=pdataColor[width*i+j]._argb.a; + } + } + } + else + { + return PX_FALSE; + } + } + + return PX_TRUE; +} + +px_void PX_ShapeRenderEx_sincos(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,px_color blendColor,px_float scale,px_float sinx,px_float cosx) +{ + px_int newWidth,newHeight; + + px_int i,j,resHeight,resWidth; + + px_float invCosAgl,invSinAgl; + + px_double ref_x,ref_y; + px_int mapX,mapY; + + px_color clr; + + ////////////////////////////////////////////////////////////////////////// + px_int left,right,top,bottom; + + + ////////////////////////////////////////////////////////////////////////// + + resHeight=shape->height; + resWidth=shape->width; + + newHeight=PX_TRUNC(resHeight*scale); + newWidth=PX_TRUNC(resWidth*scale); + + ////////////////////////////////////////////////////////////////////////// + switch (refPoint) + { + case PX_TEXTURERENDER_REFPOINT_LEFTTOP: + break; + case PX_TEXTURERENDER_REFPOINT_MIDTOP: + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTTOP: + x-=newWidth; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTMID: + y-=newHeight/2; + break; + case PX_TEXTURERENDER_REFPOINT_CENTER: + y-=newHeight/2; + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTMID: + y-=newHeight/2; + x-=newWidth; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTBOTTOM: + y-=newHeight; + break; + case PX_TEXTURERENDER_REFPOINT_MIDBOTTOM: + y-=newHeight; + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTBOTTOM: + y-=newHeight; + x-=newWidth; + break; + } + + + if (x<-newWidth) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-newHeight) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+newWidth>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=newWidth-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+newHeight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newHeight-1; + } + ////////////////////////////////////////////////////////////////////////// + + + + invCosAgl=cosx; + invSinAgl=sinx; + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + clr=blendColor; + clr._argb.a=1*clr._argb.a*shape->alpha[shape->width*mapY+mapX]/255; + PX_SurfaceDrawPixelFaster(psurface,x+i,y+j,clr); + } + + } +} + +px_void PX_ShapeRenderEx_vector(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,px_color blendColor,px_float scale,px_point p_vector) +{ + PX_ShapeRenderEx_sincos(psurface,shape,x,y,refPoint,blendColor,scale,PX_Point_sin(p_vector),PX_Point_cos(p_vector)); +} + +px_void PX_TextureRenderEx_sincos(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_float sinx,px_float cosx) +{ + px_int newWidth,newHeight; + + px_int i,j,resHeight,resWidth; + + px_float invCosAgl,invSinAgl; + + px_double ref_x,ref_y; + px_int mapX,mapY; + + px_color clr; + px_int bA,bR,bG,bB; + + ////////////////////////////////////////////////////////////////////////// + px_int left,right,top,bottom; + + + ////////////////////////////////////////////////////////////////////////// + + resHeight=resTexture->height; + resWidth=resTexture->width; + + newHeight=PX_TRUNC(resHeight*scale); + newWidth=PX_TRUNC(resWidth*scale); + + ////////////////////////////////////////////////////////////////////////// + switch (refPoint) + { + case PX_TEXTURERENDER_REFPOINT_LEFTTOP: + break; + case PX_TEXTURERENDER_REFPOINT_MIDTOP: + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTTOP: + x-=newWidth; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTMID: + y-=newHeight/2; + break; + case PX_TEXTURERENDER_REFPOINT_CENTER: + y-=newHeight/2; + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTMID: + y-=newHeight/2; + x-=newWidth; + break; + case PX_TEXTURERENDER_REFPOINT_LEFTBOTTOM: + y-=newHeight; + break; + case PX_TEXTURERENDER_REFPOINT_MIDBOTTOM: + y-=newHeight; + x-=newWidth/2; + break; + case PX_TEXTURERENDER_REFPOINT_RIGHTBOTTOM: + y-=newHeight; + x-=newWidth; + break; + } + + + if (x<-newWidth) + { + return; + } + if (x>psurface->width-1) + { + return; + } + if (y<-newHeight) + { + return; + } + if (y>psurface->height-1) + { + return; + } + + if (x<0) + { + left=-x; + } + else + { + left=0; + } + + if (x+newWidth>psurface->width) + { + right=psurface->width-x-1; + } + else + { + right=newWidth-1; + } + + if (y<0) + { + top=-y; + } + else + { + top=0; + } + + if (y+newHeight>psurface->height) + { + bottom=psurface->height-y-1; + } + else + { + bottom=newHeight-1; + } + ////////////////////////////////////////////////////////////////////////// + + + + invCosAgl=cosx; + invSinAgl=-sinx; + + if (blend) + { + px_int Ab=(px_int)(blend->alpha*1000); + px_int Rb=(px_int)(blend->hdr_R*1000); + px_int Gb=(px_int)(blend->hdr_G*1000); + px_int Bb=(px_int)(blend->hdr_B*1000); + + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + + clr=PX_SURFACECOLOR(resTexture,mapX,mapY); + bA=(px_int)(clr._argb.a*Ab/1000); + bR=(px_int)(clr._argb.r*Rb/1000); + bG=(px_int)(clr._argb.g*Gb/1000); + bB=(px_int)(clr._argb.b*Bb/1000); + + clr._argb.a=bA>255?255:(px_uchar)bA; + clr._argb.r=bR>255?255:(px_uchar)bR; + clr._argb.g=bG>255?255:(px_uchar)bG; + clr._argb.b=bB>255?255:(px_uchar)bB; + PX_SurfaceDrawPixelFaster(psurface,x+i,y+j,clr); + } + + } + + } + else + { + for (j=top;j<=bottom;j++) + { + for (i=left;i<=right;i++) + { + ref_x=i*1.0/newWidth-0.5; + ref_y=j*1.0/newHeight-0.5; + + mapX=(px_int)((ref_x*invCosAgl-ref_y*invSinAgl)*resWidth+resWidth/2); + mapY=(px_int)((ref_x*invSinAgl+ref_y*invCosAgl)*resHeight+resHeight/2); + + if (mapX<0||mapX>=resWidth) + { + continue; + } + + if (mapY<0||mapY>=resHeight) + { + continue; + } + + PX_SurfaceDrawPixelFaster(psurface,x+i,y+j,PX_SURFACECOLOR(resTexture,mapX,mapY)); + } + + } + } +} + + +px_void PX_TextureRenderEx_vector(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_point p_vector) +{ + PX_TextureRenderEx_sincos(psurface,resTexture,x,y,refPoint,blend,scale,PX_Point_sin(p_vector),PX_Point_cos(p_vector)); +} + + + +px_bool PX_TextureCopy(px_memorypool *mp,px_texture *restexture,px_texture *dest) +{ + if(!PX_TextureCreate(mp,dest,restexture->width,restexture->height)) return PX_FALSE; + PX_memcpy(dest->surfaceBuffer,restexture->surfaceBuffer,restexture->width*restexture->height*sizeof(px_color)); + return PX_TRUE; +} + diff --git a/code/PainterEngine/Core/PX_Texture.h b/code/PainterEngine/Core/PX_Texture.h new file mode 100644 index 0000000000000000000000000000000000000000..7fe05596c5c083cd993df1be9ddd86804aff48ca --- /dev/null +++ b/code/PainterEngine/Core/PX_Texture.h @@ -0,0 +1,71 @@ +#ifndef __PX_TEXTURE_H +#define __PX_TEXTURE_H + +#include "PX_Surface.h" +#include "PX_Bitmap.h" +#include "PX_TRaw.h" + +typedef px_surface px_texture; + +typedef enum +{ + PX_TEXTURERENDER_REFPOINT_LEFTTOP, + PX_TEXTURERENDER_REFPOINT_MIDTOP, + PX_TEXTURERENDER_REFPOINT_RIGHTTOP, + PX_TEXTURERENDER_REFPOINT_LEFTMID, + PX_TEXTURERENDER_REFPOINT_CENTER, + PX_TEXTURERENDER_REFPOINT_RIGHTMID, + PX_TEXTURERENDER_REFPOINT_LEFTBOTTOM, + PX_TEXTURERENDER_REFPOINT_MIDBOTTOM, + PX_TEXTURERENDER_REFPOINT_RIGHTBOTTOM, +}PX_TEXTURERENDER_REFPOINT; + +typedef struct +{ + float hdr_R; + float hdr_G; + float hdr_B; + float alpha; +}PX_TEXTURERENDER_BLEND; + +typedef struct +{ + px_uchar *alpha; + px_int height; + px_int width; + px_memorypool *MP; +}px_shape; + +px_bool PX_TextureCreate(px_memorypool *mp,px_texture *tex,px_int width,px_int height); +px_bool PX_TextureCreateFromMemory(px_memorypool *mp,px_void *data,px_int size,px_texture *tex); +px_bool PX_TextureCopy(px_memorypool *mp,px_texture *restexture,px_texture *dest); +px_bool PX_TextureCreateScale(px_memorypool *mp,px_texture *resTexture,px_int newWidth,px_int newHeight,px_texture *out); +px_void PX_TextureRender(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_TextureCover(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint); +px_void PX_TextureRenderRotation(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_int Angle); +px_void PX_TextureRenderRotation_vector(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_point p_vector); +px_void PX_TextureRenderRotation_sincos(px_surface *psurface,px_texture *tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_float sin,px_float cos); + +px_void PX_TextureRenderEx(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_float Angle); +px_void PX_TextureRenderEx_sincos(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_float sin,px_float cos); +px_void PX_TextureRenderEx_vector(px_surface *psurface,px_texture *resTexture,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_point p_vector); +px_void PX_TextureRenderMask(px_surface *psurface,px_texture *mask_tex,px_texture *map_tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_TextureRenderMaskEx(px_surface *psurface,px_texture *mask_tex,px_texture *map_tex,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend,px_float scale,px_float Angle); + +px_void PX_SurfaceRender(px_surface *pdestSurface,px_surface *pResSurface,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_SurfaceCover(px_surface *pdestSurface,px_surface *pResSurface,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint); +px_void PX_SurfaceSetRect(px_surface *psurface, px_int left, px_int top, px_int right, px_int bottom,px_color color); +px_bool PX_TextureCreateRotationAngle(px_memorypool *mp,px_texture *resTexture,px_float Angle,px_texture *out); +px_bool PX_TextureRotationAngleToTexture(px_texture *resTexture,px_float Angle,px_texture *out); +px_bool PX_TextureCreateRotationRadian(px_memorypool *mp,px_texture *resTexture,px_float Angle,px_texture *out); +px_void PX_TextureFree(px_texture *tex); + +px_bool PX_ShapeCreate(px_memorypool *mp,px_shape *shape,px_int width,px_int height); +px_bool PX_ShapeCreateFromTexture(px_memorypool *mp,px_shape *shape,px_texture *texture); +px_bool PX_ShapeCreateFromMemory(px_memorypool *mp,px_void *data,px_int size,px_shape *shape); +px_void PX_ShapeRender(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,px_color blendColor); +px_void PX_ShapeRenderEx(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,px_color blendColor,px_float scale,px_float Angle); +px_void PX_ShapeRenderEx_sincos(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,px_color blendColor,px_float scale,px_float sinx,px_float cosx); +px_void PX_ShapeRenderEx_vector(px_surface *psurface,px_shape *shape,px_int x,px_int y,PX_TEXTURERENDER_REFPOINT refPoint,px_color blendcolor,px_float scale,px_point p_vector); +px_void PX_ShapeFree(px_shape *shape); +#endif diff --git a/code/PainterEngine/Core/PX_Tuning.c b/code/PainterEngine/Core/PX_Tuning.c new file mode 100644 index 0000000000000000000000000000000000000000..986e2dfe98199e972ce6c359818f1a698498daa1 --- /dev/null +++ b/code/PainterEngine/Core/PX_Tuning.c @@ -0,0 +1,713 @@ +#include "PX_Tuning.h" + + +px_void PX_TuningInitialize(px_memorypool *mp,PX_Tuning *tuning,px_int SampleRate,px_double pitchShift,px_double timeShift,px_double window[],px_double filter[],px_double fix[],PX_TUNING_WINDOW_SIZE windowsize) +{ + px_int i; + px_int N; + + switch (windowsize) + { + case PX_TUNING_WINDOW_SIZE_8: + N=8; + break; + case PX_TUNING_WINDOW_SIZE_128: + N=128; + break; + case PX_TUNING_WINDOW_SIZE_256: + N=256; + break; + case PX_TUNING_WINDOW_SIZE_512: + N=512; + break; + case PX_TUNING_WINDOW_SIZE_1024: + N=1024; + break; + case PX_TUNING_WINDOW_SIZE_2048: + N=2048; + break; + default: + PX_ASSERT(); + return; + } + + tuning->mp=mp; + tuning->pitchShift=pitchShift; + tuning->timeScale=timeShift; + tuning->N=N; + tuning->remainCount=0; + tuning->previousInterpolationOffset=0; + tuning->previousInterpolationValue=0; + tuning->spectrumInterpolationOffset=2; + tuning->spectrumInterpolationFactor=1/(pitchShift*timeShift); + tuning->interpolationFactor=pitchShift; + tuning->ZCR_Low=0; + tuning->ZCR_High=1; + tuning->amp_threshold=0; + tuning->SampleRate=SampleRate; + PX_memset(tuning->lastphase,0,sizeof(tuning->lastphase)); + PX_memset(tuning->previous_frame,0,sizeof(tuning->previous_frame)); + PX_memset(tuning->half_previous_out,0,sizeof(tuning->half_previous_out)); + PX_memset(tuning->remian,0,sizeof(tuning->remian)); + + if(filter) + { + PX_memcpy(tuning->filter,filter,sizeof(px_double)*N); + } + else + { + for (i=0;ifilter[i]=1; + } + } + + if(window) + { + PX_memcpy(tuning->window,window,sizeof(px_double)*N); + } + else + { + PX_WindowFunction_sinc(tuning->window,N); + } + + if(fix) + { + PX_memcpy(tuning->fix,fix,sizeof(px_double)*N); + } + else + { + PX_memset(tuning->fix,0,sizeof(px_double)*PX_TUNING_MAX_FRAME_SIZE); + } + + +} + +px_void PX_TuningSortSpectrum(PX_Tuning *tuning,px_complex AnalysisFrame[]) +{ + px_int i; + px_double amplitude=0,phase=0; + PX_FFT(AnalysisFrame,AnalysisFrame,tuning->N); + + //re,im to amplitude,phase + + //DC sort + if (AnalysisFrame[0].re>0) + { + AnalysisFrame[0].im=0; + } + else + { + AnalysisFrame[0].re=PX_ABS(AnalysisFrame[0].re); + AnalysisFrame[0].im=PX_PI; + } + + //others + for (i=1;iN;i++) + { + amplitude=PX_sqrtd(AnalysisFrame[i].re*AnalysisFrame[i].re+AnalysisFrame[i].im*AnalysisFrame[i].im); + phase=PX_atan2(AnalysisFrame[i].im,AnalysisFrame[i].re); + AnalysisFrame[i].re=amplitude; + AnalysisFrame[i].im=phase; + } + + if (AnalysisFrame[tuning->N/2].re>0) + { + AnalysisFrame[tuning->N/2].im=0; + } + else + { + AnalysisFrame[tuning->N/2].re=PX_ABS(AnalysisFrame[0].re); + AnalysisFrame[tuning->N/2].im=PX_PI; + } +} + + + +px_int PX_TuningFilter(PX_Tuning *tuning,_IN px_double frame_unit[],px_int Size,_OUT px_double out_unit[]) +{ + px_int oft=0,i=0,remainCount=0,outSize=0,resampleAllocSize=0; + px_double AmpAvg; + px_double ZCR; + px_int blockCount; + px_int blocksize; + px_complex *AnalysisFrame; + px_complex *Frame0; + px_complex *Frame1; + px_complex *Frame2; + + px_double *resampledFrame; + + blocksize=tuning->N/2; + AnalysisFrame=(px_complex *)MP_Malloc(tuning->mp,tuning->N*sizeof(px_complex)); + + Frame0=(px_complex *)MP_Malloc(tuning->mp,tuning->N*sizeof(px_complex)); + Frame1=(px_complex *)MP_Malloc(tuning->mp,tuning->N*sizeof(px_complex)); + Frame2=(px_complex *)MP_Malloc(tuning->mp,tuning->N*sizeof(px_complex)); + + if (tuning->pitchShift<1) + { + resampleAllocSize+=(px_int)(Size/tuning->pitchShift); + } + else + { + resampleAllocSize+=(Size); + } + + resampleAllocSize+=tuning->remainCount; + resampleAllocSize+=blocksize*3; + resampleAllocSize+=(px_int)((1-PX_FRAC(tuning->previousInterpolationOffset))/tuning->interpolationFactor); + resampleAllocSize+=1; + resampleAllocSize*=sizeof(px_double); + resampledFrame=(px_double *)MP_Malloc(tuning->mp,resampleAllocSize); + + //copy previous + PX_memcpy(resampledFrame+oft,tuning->previous_frame,sizeof(px_double)*blocksize*3); + oft+=blocksize*3; + + //copy remain + PX_memcpy(resampledFrame+oft,tuning->remian,sizeof(px_double)*tuning->remainCount); + oft+=tuning->remainCount; + + ZCR=PX_ZeroCrossingRate(frame_unit,Size); + AmpAvg=0; + for (i=0;iZCR_Low||ZCR>tuning->ZCR_High||AmpAvgamp_threshold) + { + for (i=0;ipreviousInterpolationOffset+=tuning->interpolationFactor; + + if (tuning->previousInterpolationOffset>Size) + { + tuning->previousInterpolationOffset-=tuning->interpolationFactor; + tuning->previousInterpolationOffset=tuning->previousInterpolationOffset-Size; + break; + } + + if (oft>PX_TUNING_MAX_EXECUTE_SIZE-1) + { + break; + } + + index=(px_int)tuning->previousInterpolationOffset; + + if (index) + { + d1=frame_unit[index-1]; + } + else + { + d1=tuning->previousInterpolationValue; + } + + d2=frame_unit[index]; + + fraction=tuning->previousInterpolationOffset-(px_int)tuning->previousInterpolationOffset; + + dm=d1+fraction*(d2-d1); + + resampledFrame[oft]=dm; + + oft++; + } + } + + + tuning->previousInterpolationValue=frame_unit[Size-1]; + + + //spectrum + blockCount=oft/blocksize; + remainCount=oft%blocksize; + + //save remain + PX_memcpy(tuning->remian,resampledFrame+oft-remainCount,remainCount*sizeof(px_double)); + tuning->remainCount=remainCount; + + while (PX_TRUE) + { + px_double d1=0,d2=0,dm,fraction=0; + px_int index; + px_double unitMaxAmp=0; + + if (tuning->spectrumInterpolationOffset>=blockCount-1) + { + PX_memcpy(tuning->previous_frame,resampledFrame+(blockCount-3)*blocksize,blocksize*3*sizeof(px_double)); + tuning->spectrumInterpolationOffset=tuning->spectrumInterpolationOffset+3-blockCount; + break; + } + + index=(px_int)tuning->spectrumInterpolationOffset; + + //frame0 + + for (i=0;iN;i++) + { + AnalysisFrame[i].re=*(resampledFrame+(index-2)*blocksize+i); + //apply window + AnalysisFrame[i].re*=tuning->window[i]; + AnalysisFrame[i].im=0; + } + + PX_TuningSortSpectrum(tuning,AnalysisFrame); + PX_memcpy(Frame0,AnalysisFrame,tuning->N*sizeof(px_complex)); + + //frame1 + + for (i=0;iN;i++) + { + AnalysisFrame[i].re=*(resampledFrame+(index-1)*blocksize+i); + //apply window + AnalysisFrame[i].re*=tuning->window[i]; + AnalysisFrame[i].im=0; + } + + PX_TuningSortSpectrum(tuning,AnalysisFrame); + PX_memcpy(Frame1,AnalysisFrame,tuning->N*sizeof(px_complex)); + + //frame2 + for (i=0;iN;i++) + { + AnalysisFrame[i].re=*(resampledFrame+(index)*blocksize+i); + //apply window + AnalysisFrame[i].re*=tuning->window[i]; + AnalysisFrame[i].im=0; + } + + PX_TuningSortSpectrum(tuning,AnalysisFrame); + PX_memcpy(Frame2,AnalysisFrame,tuning->N*sizeof(px_complex)); + + + //instantaneous frequency + for (i=0;i<=tuning->N/2;i++) + { + Frame2[i].im-=Frame1[i].im; + if (Frame2[i].im>PX_PI) + { + Frame2[i].im-=PX_PI*2; + } + else if(Frame2[i].im<-PX_PI) + { + Frame2[i].im+=PX_PI*2; + } + + Frame1[i].im-=Frame0[i].im; + + if (Frame1[i].im>PX_PI) + { + Frame1[i].im-=PX_PI*2; + } + else if(Frame1[i].im<-PX_PI) + { + Frame1[i].im+=PX_PI*2; + } + } + + fraction=tuning->spectrumInterpolationOffset-(px_int)tuning->spectrumInterpolationOffset; + + for (i=0;i<=tuning->N/2;i++) + { + px_double distance; + + //amplitude + d1=Frame1[i].re; + d2=Frame2[i].re; + dm=d1+fraction*(d2-d1); + AnalysisFrame[i].re=dm; + + //phase + d1=Frame1[i].im; + d2=Frame2[i].im; + + distance=d2-d1; + + if (distance<-PX_PI) + { + d2+=PX_PI*2; + } + else if (distance>PX_PI) + { + d2-=PX_PI*2; + } + + + dm=d1+fraction*(d2-d1); + dm=tuning->lastphase[i]+dm; + + if (dm>PX_PI) + { + dm-=PX_PI*2; + } + else if(dm<-PX_PI) + { + dm+=PX_PI*2; + } + + + //rebuild signal + AnalysisFrame[i].im=dm; + + //update last phase + tuning->lastphase[i]=dm; + } + + AmpAvg=0; + + for (i=0;i<=tuning->N/2;i++) + { + AmpAvg+=AnalysisFrame[i].re; + } + + AmpAvg/=(tuning->N/2+1); + + + + + //filter & fix + for (i=0;i<=tuning->N/2;i++) + { + px_double amp,phase; + amp=AnalysisFrame[i].re; + phase=AnalysisFrame[i].im; + + //filter + amp*=tuning->filter[i]; + amp+=(tuning->fix[i]*AmpAvg); + + + if (amp<0) + { + amp=0; + } + + //amp,phase->re,im + AnalysisFrame[i].re=amp*PX_cosd(phase); + AnalysisFrame[i].im=amp*PX_sind(phase); + } + + + AnalysisFrame[0].im=0; + AnalysisFrame[tuning->N/2].im=0; + PX_FT_Symmetry(AnalysisFrame,AnalysisFrame,tuning->N); + PX_IFFT(AnalysisFrame,AnalysisFrame,tuning->N); + + for (i=0;iwindow[i]+tuning->half_previous_out[i]*tuning->window[i+blocksize]; + outSize++; + tuning->half_previous_out[i]=AnalysisFrame[i+tuning->N/2].re; + } + + tuning->spectrumInterpolationOffset+=tuning->spectrumInterpolationFactor; + } + + MP_Free(tuning->mp,Frame0); + MP_Free(tuning->mp,resampledFrame); + MP_Free(tuning->mp,Frame1); + MP_Free(tuning->mp,Frame2); + MP_Free(tuning->mp,AnalysisFrame); + return outSize; +} + +px_void PX_TuningTimeScale(px_double timescale,px_double in[],px_int count,px_memory *out) +{ + px_int i,index,blockcount,blocksize; + px_double d1,d2,dm,fraction; + px_double amplitude,phase,lastphase[PX_TUNING_DEFAULT_FRAME_SIZE]; + px_double lastwindow[PX_TUNING_DEFAULT_FRAME_SIZE/2]; + px_complex Frame0[PX_TUNING_DEFAULT_FRAME_SIZE]; + px_complex Frame1[PX_TUNING_DEFAULT_FRAME_SIZE]; + px_complex Frame2[PX_TUNING_DEFAULT_FRAME_SIZE]; + px_complex AnalysisFrame[PX_TUNING_DEFAULT_FRAME_SIZE]; + px_double window[PX_TUNING_DEFAULT_FRAME_SIZE]; + px_double step=0; + px_double offset=0;; + + PX_memset(lastphase,0,sizeof(lastphase)); + PX_memset(lastwindow,0,sizeof(lastwindow)); + PX_memset(Frame0,0,sizeof(Frame0)); + PX_memset(Frame1,0,sizeof(Frame1)); + PX_memset(Frame2,0,sizeof(Frame2)); + PX_memset(AnalysisFrame,0,sizeof(AnalysisFrame)); + + PX_WindowFunction_sinc(window,PX_TUNING_DEFAULT_FRAME_SIZE); + + + + step=1/timescale; + offset=2.0; + blocksize=PX_TUNING_DEFAULT_FRAME_SIZE/2; + blockcount=count/blocksize; + + while (PX_TRUE) + { + index=(px_int)offset; + if (index>=blockcount-1) + { + break; + } + + //Frame 0 + for (i=0;iamplitude phase + if (Frame0[0].re>=0) + { + Frame0[0].im=0; + } + else + { + Frame0[0].re=-Frame0[0].re; + Frame0[0].im=PX_PI; + } + + for (i=1;i=0) + { + Frame0[i].im=0; + } + else + { + Frame0[i].re=-Frame0[i].re; + Frame0[i].im=PX_PI; + } + + + + + Frame1[0].im=0; + if (Frame1[0].re>=0) + { + Frame1[0].im=0; + } + else + { + Frame1[0].re=-Frame1[0].re; + Frame1[0].im=PX_PI; + } + + for (i=1;i=0) + { + Frame1[i].im=0; + } + else + { + Frame1[i].re=-Frame1[i].re; + Frame1[i].im=PX_PI; + } + + + + Frame2[0].im=0; + if (Frame2[0].re>=0) + { + Frame2[0].im=0; + } + else + { + Frame2[0].re=-Frame2[0].re; + Frame2[0].im=PX_PI; + } + + for (i=1;i=0) + { + Frame2[i].im=0; + } + else + { + Frame2[i].re=-Frame2[i].re; + Frame2[i].im=PX_PI; + } + + //Instantaneous Frequency + for (i=0;i<=blocksize;i++) + { + Frame2[i].im-=Frame1[i].im; + if (Frame2[i].im<-PX_PI) + { + Frame2[i].im+=PX_PI*2; + } + else if (Frame2[i].im>PX_PI) + { + Frame2[i].im-=PX_PI*2; + } + + Frame1[i].im-=Frame0[i].im; + if (Frame1[i].im<-PX_PI) + { + Frame1[i].im+=PX_PI*2; + } + else if (Frame1[i].im>PX_PI) + { + Frame1[i].im-=PX_PI*2; + } + } + + fraction=PX_FRAC(offset); + + for (i=0;i<=blocksize;i++) + { + px_double distance; + px_double amp,phase; + + //amplitude + d1=Frame1[i].re; + d2=Frame2[i].re; + dm=d1+fraction*(d2-d1); + AnalysisFrame[i].re=dm; + + //phase + d1=Frame1[i].im; + d2=Frame2[i].im; + + distance=d2-d1; + + if (distance<-PX_PI) + { + d2+=PX_PI*2; + } + else if (distance>PX_PI) + { + d2-=PX_PI*2; + } + + + dm=d1+fraction*(d2-d1); + dm=lastphase[i]+dm; + + if (dm>PX_PI) + { + dm-=PX_PI*2; + } + else if(dm<-PX_PI) + { + dm+=PX_PI*2; + } + + + //rebuild signal + AnalysisFrame[i].im=dm; + + //update last phase + lastphase[i]=dm; + + amp=AnalysisFrame[i].re; + phase=AnalysisFrame[i].im; + + + //amplitude phase->real imaginary + AnalysisFrame[i].re=amp*PX_cosd(phase); + AnalysisFrame[i].im=amp*PX_sind(phase); + + } + AnalysisFrame[0].im=0; + AnalysisFrame[blocksize].im=0; + PX_FT_Symmetry(AnalysisFrame,AnalysisFrame,PX_TUNING_DEFAULT_FRAME_SIZE); + + PX_IFFT(AnalysisFrame,AnalysisFrame,PX_TUNING_DEFAULT_FRAME_SIZE); + + for (i=0;i=0.999999) + { + val=0.999999; + } + PX_MemoryCat(out,&val,sizeof(px_double)); + } + + offset+=step; + } + +} + +px_void PX_TuningSetPitchShift(PX_Tuning *tuning,px_double pitchShift) +{ + tuning->pitchShift=pitchShift; + tuning->spectrumInterpolationFactor=1/(pitchShift*tuning->timeScale); + tuning->interpolationFactor=pitchShift; +} + +px_void PX_TuningSetTimeScale(PX_Tuning *tuning,px_double TimeScale) +{ + tuning->timeScale=TimeScale; +} + +px_void PX_TuningSetFilter(PX_Tuning *tuning,px_double filter[]) +{ + PX_memcpy(tuning->filter,filter,sizeof(px_double)*tuning->N); +} + +px_void PX_TuningSetFix(PX_Tuning *tuning,px_double fix[]) +{ + PX_memcpy(tuning->fix,fix,sizeof(px_double)*tuning->N); +} + +px_void PX_TuningSetZCR(PX_Tuning *tuning,px_double low,px_double high) +{ + tuning->ZCR_Low=low; + tuning->ZCR_High=high; +} diff --git a/code/PainterEngine/Core/PX_Tuning.h b/code/PainterEngine/Core/PX_Tuning.h new file mode 100644 index 0000000000000000000000000000000000000000..12f54aa6a113e4d9ca73b4476ad204c70b5b7167 --- /dev/null +++ b/code/PainterEngine/Core/PX_Tuning.h @@ -0,0 +1,52 @@ +#ifndef PX_TUNING +#define PX_TUNING + +#include "../Core/PX_Core.h" + +#define PX_TUNING_MAX_EXECUTE_SIZE 8192 +#define PX_TUNING_DEFAULT_FRAME_SIZE 1024 +#define PX_TUNING_MAX_FRAME_SIZE 2048 + + +typedef struct +{ + px_memorypool *mp; + px_double previous_frame[PX_TUNING_MAX_FRAME_SIZE/2*3]; + px_double half_previous_out[PX_TUNING_MAX_FRAME_SIZE/2]; + px_double filter[PX_TUNING_MAX_FRAME_SIZE]; + px_double window[PX_TUNING_MAX_FRAME_SIZE]; + px_double fix[PX_TUNING_MAX_FRAME_SIZE]; + px_double remian[PX_TUNING_MAX_EXECUTE_SIZE]; + px_int SampleRate; + px_int remainCount; + px_double pitchShift,timeScale; + px_double previousInterpolationValue; + px_double previousInterpolationOffset; + px_double spectrumInterpolationOffset; + px_double spectrumInterpolationFactor; + px_double interpolationFactor; + px_double ZCR_Low,ZCR_High; + px_double amp_threshold; + px_double lastphase[PX_TUNING_MAX_FRAME_SIZE]; + px_int N; +}PX_Tuning; + +typedef enum +{ + PX_TUNING_WINDOW_SIZE_8, + PX_TUNING_WINDOW_SIZE_128, + PX_TUNING_WINDOW_SIZE_256, + PX_TUNING_WINDOW_SIZE_512, + PX_TUNING_WINDOW_SIZE_1024, + PX_TUNING_WINDOW_SIZE_2048, +}PX_TUNING_WINDOW_SIZE; + +px_void PX_TuningInitialize(px_memorypool *mp,PX_Tuning *tuning,px_int SampleRate,px_double pitchShift,px_double timeShift,px_double window[],px_double filter[],px_double fix[],PX_TUNING_WINDOW_SIZE windowsize); +px_int PX_TuningFilter(PX_Tuning *tuning,_IN px_double frame_unit[],px_int Size,_OUT px_double out_unit[]); +px_void PX_TuningTimeScale(px_double timescale,px_double in[],px_int count,px_memory *out); +px_void PX_TuningSetPitchShift(PX_Tuning *tuning,px_double pitchShift); +px_void PX_TuningSetTimeScale(PX_Tuning *tuning,px_double TimeScale); +px_void PX_TuningSetFilter(PX_Tuning *tuning,px_double filter[]); +px_void PX_TuningSetFix(PX_Tuning *tuning,px_double fix[]); +px_void PX_TuningSetZCR(PX_Tuning *tuning,px_double low,px_double high); +#endif diff --git a/code/PainterEngine/Core/PX_Typedef.c b/code/PainterEngine/Core/PX_Typedef.c new file mode 100644 index 0000000000000000000000000000000000000000..74da8947601c6d36fa8d4131a6502f0ed663e686 --- /dev/null +++ b/code/PainterEngine/Core/PX_Typedef.c @@ -0,0 +1,3994 @@ +#include "PX_Typedef.h" + +static px_bool PX_isBigEndianCPU() +{ + union{ + px_dword i; + unsigned char s[4]; + }c; + c.i = 0x12345678; + return (0x12 == c.s[0]); + +} + +px_uint PX_htoi(const px_char hex_str[]) +{ + px_char ch; + px_uint iret=0; + while(ch=*hex_str++) + { + iret=(iret<<4)|px_hex_to_dex_table[ch]; + } + return iret; +} + + +px_int PX_atoi(const px_char s[]) +{ + px_int i,n,sign=1; + for(i=0;s[i]==' ';i++); + if(s[i]=='+'||s[i]=='-') + { + sign=(s[i]=='-')?-1:1; + i++; + } + for(n=0;s[i]>='0'&&s[i]<='9';i++) + n=10*n+(s[i]-'0'); + return sign *n; +} + + +px_float PX_atof(px_char fstr[]) +{ + px_float temp=10; + px_bool ispnum=PX_TRUE; + px_float ans=0; + if(*fstr=='-') + { + ispnum=PX_FALSE; + fstr++; + } + else if(*fstr=='+') + { + fstr++; + } + + while(*fstr!='\0') + { + if(*fstr=='.'){ fstr++;break;} + ans=ans*10+(*fstr-'0'); + fstr++; + } + while(*fstr!='\0') + { + ans=ans+(*fstr-'0')/temp; + temp*=10; + fstr++; + } + if(ispnum) return ans; + else return ans*(-1); +} + + +PX_RETURN_STRING PX_ftos(px_float f, px_int precision) +{ + PX_RETURN_STRING str; + PX_ftoa(f,str.data,sizeof(str.data),precision); + return str; +} + + +PX_RETURN_STRING PX_itos(px_int num,px_int radix) +{ + PX_RETURN_STRING str; + PX_itoa(num,str.data,sizeof(str.data),radix); + return str; +} + + +px_void PX_AscToWord(const px_char *asc,px_word *u16) +{ + while(*asc) + { + *u16=*asc; + u16++; + asc++; + + } + *u16=0; +} + +px_int PX_ftoa(px_float f, char *outbuf, px_int maxlen, px_int precision) +{ + px_int i_value; + px_int f_value; + px_int shl=10; + px_int len; + px_int zero_oft=0; + if (maxlen==0) + { + return 0; + } + shl=PX_pow_ii(shl,precision); + i_value=(px_int)f; + f_value=(px_int)PX_ABS(shl*(f-(px_int)f)); + if (i_value==0&&f<0) + { + outbuf[0]='-'; + PX_itoa(i_value,outbuf+1,maxlen-1,10); + } + else + { + PX_itoa(i_value,outbuf,maxlen,10); + } + + len=PX_strlen(outbuf); + + if (precision==0) + { + return len; + } + + if (len>maxlen-3) + { + return len; + } + outbuf[len]='.'; + outbuf[len+1]='\0'; + + while (f_value> 8)&0x00FF00FF); + return (val << 16)|(val >> 16); +} + +static px_int64 PX_i64SwapEndian(px_int64 val) +{ + px_int32 u32_host_h, u32_host_l; + px_int64 u64_net; + u32_host_l = val & 0xffffffff; + u32_host_h = (val >> 32) & 0xffffffff; + + u64_net = PX_i32SwapEndian(u32_host_l); + u64_net = ( u64_net << 32 ) | PX_i32SwapEndian(u32_host_h); + return u64_net; +} + + + +px_float PX_sqrt( px_float number ) +{ + px_int32 i; + px_float x2, y; + const px_float threehalfs = 1.5F; + x2 = number * 0.5F; + y = number; + i = * ( px_int32 * ) &y; + + if (PX_isBigEndianCPU()) + { + i=PX_i32SwapEndian(i); + } + + i = 0x5f375a86 - ( i >> 1 ); + y = * ( px_float * ) &i; + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + return number*y; +} + +//0x5fe6ec85e7de30da + +px_double PX_sqrtd( px_double number ) +{ + px_int64 i; + px_double x2, y; + const px_double threehalfs = 1.5; + x2 = number * 0.5; + y = number; + i = * ( px_int64 * ) &y; + + if (PX_isBigEndianCPU()) + { + i=PX_i64SwapEndian(i); + } + + i = 0x5fe6ec85e7de30da - ( i / 2 ); + y = * ( px_double * ) &i; + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + return number*y; +} + +px_float PX_SqrtRec( px_float number ) +{ + px_int i; + px_float x2, y; + const px_float threehalfs = 1.5F; + + x2 = number * 0.5F; + y = number; + i = * ( px_int * ) &y; + if (PX_isBigEndianCPU()) + { + i=PX_i32SwapEndian(i); + } + i = 0x5f375a86 - ( i >> 1 ); + y = * ( px_float * ) &i; + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + y = y * ( threehalfs - ( x2 * y * y ) ); + return y; +} + +px_double PX_fast_exp(px_double x) { + x = 1.0 + x / (65536); + x *= x; x *= x; x *= x; x *= x; + x *= x; x *= x; x *= x; x *= x; + x *= x; x *= x; x *= x; x *= x; + x *= x; x *= x; x *= x; x *= x; + return x; +} + +px_double PX_exp(px_double x) +{ + return PX_pow_dd(PX_e,x); +} + +px_double PX_tanh(px_double x) +{ + px_double ex,eix; + ex=PX_exp(x); + eix=1/ex; + return (ex-eix)/(ex+eix); +} + + +px_double PX_sigmoid(px_double x) +{ + px_double eix; + eix=PX_exp(-x); + return 1/(1+eix); +} + +px_double PX_ReLU(px_double x) +{ + return x<=0?0:x; +} + +px_double PX_sind(px_double x) +{ + px_double it; + px_double term; + px_double result; + + it=x/(2*PX_PI); + x=x-(2*PX_PI)*PX_TRUNC(it); + + term=x; + result=0; + + result+=term; + term*=(-x*x)/(2*3); + result+=term; + term*=(-x*x)/(4*5); + result+=term; + term*=(-x*x)/(6*7); + result+=term; + term*=(-x*x)/(8*9); + result+=term; + term*=(-x*x)/(10*11); + result+=term; + term*=(-x*x)/(12*13); + result+=term; + term*=(-x*x)/(14*15); + result+=term; + term*=(-x*x)/(16*17); + result+=term; + term*=(-x*x)/(18*19); + result+=term; + term*=(-x*x)/(20*21); + result+=term; + term*=(-x*x)/(22*23); + result+=term; + term*=(-x*x)/(24*25); + result+=term; + term*=(-x*x)/(26*27); + result+=term; + term*=(-x*x)/(28*29); + result+=term; + term*=(-x*x)/(30*31); + result+=term; + term*=(-x*x)/(32*33); + return result; + +} + +px_double PX_cosd(px_double radius) +{ + return PX_sind((PX_PI/2-radius)); +} + +px_float PX_sin_radian(px_float radius) +{ + px_int radIndex; + radIndex=PX_TRUNC(radius*1000)%6282; + if (radIndex<0) + { + radIndex+=6282; + } + if (radIndex>3141) + { + radIndex-=3141; + if(radIndex<1571) + { + return -px_sinx_radius[radIndex%1572]; + } + else + { + return -px_sinx_radius[1570-(radIndex%1571)]; + } + } + + if(radIndex<1571) + { + return px_sinx_radius[radIndex%1572]; + } + else + { + return px_sinx_radius[1570-(radIndex%1571)]; + } +} + + +px_float PX_cos_radian(px_float radius) +{ + return PX_sin_radian((px_float)(PX_PI/2-radius)); +} + +px_float PX_tan_radian(px_float radius) +{ + return PX_sin_radian(radius)/PX_cos_radian(radius); +} + +px_float PX_sin_angle(px_float angle) +{ + angle-=((px_int)angle/360)*360; + return PX_sin_radian((angle*0.0174532925f)); +} +px_float PX_cos_angle(px_float angle) +{ + angle-=((px_int)angle/360)*360; + return PX_cos_radian((angle*0.0174532925f)); +} + + +px_float PX_tan_angle(px_float angle) +{ + return PX_sin_angle(angle)/PX_cos_angle(angle); +} + +px_float PX_Point_sin(px_point v) +{ + return v.y/PX_sqrt(v.x*v.x+v.y*v.y); +} + + +px_float PX_Point_cos(px_point v) +{ + return v.x/PX_sqrt(v.x*v.x+v.y*v.y); +} + +static volatile const px_double Tiny =(px_double)2.225073858507201383e-308 ; + +static px_double Tail(px_double x) +{ + static const px_double HalfPi = PX_PI/2; + static const px_double p03 = (px_double)(-0.3333333333331767734); + static const px_double p05 = (px_double)(0.1999999999714804158); + static const px_double p07 = (px_double)(-0.1428571408980792989); + static const px_double p09 = (px_double)(0.1111110405917124038); + static const px_double p11 = (px_double)(-0.09090757063599989862); + static const px_double p13 = (px_double)(0.07690189054748748643); + static const px_double p15 = (px_double)(-0.06646850218576683123); + static const px_double p17 = (px_double)(0.0575572605769638368); + static const px_double p19 = (px_double)(-0.04709779890322960544); + static const px_double p21 = (px_double)(0.03130684024963894391); + static const px_double p23 = (px_double)(-0.01183640847691868649); + + static const px_double p000 = (px_double)(1.570796326794896558); + static const px_double p001 = (px_double)(6.123233995736766036e-17); + px_double y ; + // Square y. + px_double y2 ; + + if ((9007199254740992.0) <= x) + return HalfPi + Tiny; + + y = 1 / x; + y2 = y * y; + + return p001 - (((((((((((( + +p23) * y2 + + p21) * y2 + + p19) * y2 + + p17) * y2 + + p15) * y2 + + p13) * y2 + + p11) * y2 + + p09) * y2 + + p07) * y2 + + p05) * y2 + + p03) * y2 * y + y) + p000; +} + +static px_double atani0(px_double x) +{ + static const px_double p03 = (px_double)(-0.3333333333333300952); + static const px_double p05 = (px_double)(0.1999999999990851318); + static const px_double p07 = (px_double)(-0.1428571427670465022); + static const px_double p09 = (px_double)(0.11111111066822130927); + static const px_double p11 = (px_double)(-0.09090896357643575565); + static const px_double p13 = (px_double)(0.07692074439069175595); + static const px_double p15 = (px_double)(-0.06663806168831017118); + static const px_double p17 = (px_double)(0.058582174411949621); + static const px_double p19 = (px_double)(-0.05121467553745503998); + static const px_double p21 = (px_double)(0.0418461372066637749); + static const px_double p23 = (px_double)(-0.02739990312425184121); + static const px_double p25 = (px_double)(0.01008979802853119875); + + // Square x. + px_double x2 = x * x; + + return (((((((((((( + +p25) * x2 + + p23) * x2 + + p21) * x2 + + p19) * x2 + + p17) * x2 + + p15) * x2 + + p13) * x2 + + p11) * x2 + + p09) * x2 + + p07) * x2 + + p05) * x2 + + p03) * x2 * x + x; +} + +static px_double atani1(px_double x) +{ + static const px_double p00 = (px_double)(0.5585993153435655501); + static const px_double p01 = (px_double)(0.7191011235955026004); + static const px_double p02 = (px_double)(-0.3231915162226940974); + static const px_double p03 = (px_double)(0.02130401005855760144); + static const px_double p04 = (px_double)(0.1018414372498045034); + static const px_double p05 = (px_double)(-0.08242613472076004699); + static const px_double p06 = (px_double)(0.01291956298376459658); + static const px_double p07 = (px_double)(0.03238363329851735167); + static const px_double p08 = (px_double)(-0.03243829816327323257); + static const px_double p09 = (px_double)(0.00780078683156177656); + static const px_double p10 = (px_double)(0.01236133736686602196); + static const px_double p11 = (px_double)(-0.01442112851466732272); + static const px_double p12 = (px_double)(0.004164927187425533986); + + px_double y = x - (px_double)(0.6250000000000043299); + + return (((((((((((( + +p12) * y + + p11) * y + + p10) * y + + p09) * y + + p08) * y + + p07) * y + + p06) * y + + p05) * y + + p04) * y + + p03) * y + + p02) * y + + p01) * y + + p00; +} + +static px_double atani2(px_double x) +{ + static const px_double p00 = (px_double)(0.7188299996845015638); + static const px_double p01 = (px_double)(0.5663716813536087136); + static const px_double p02 = (px_double)(-0.2806797712949650192); + static const px_double p03 = (px_double)(0.07853829253223243434); + static const px_double p04 = (px_double)(0.02110208940610767275); + static const px_double p05 = (px_double)(-0.04342139500642782507); + static const px_double p06 = (px_double)(0.0278965408671968812); + static const px_double p07 = (px_double)(-0.006133549533512984951); + static const px_double p08 = (px_double)(-0.006532089191404124792); + static const px_double p09 = (px_double)(0.008457549704878185304); + static const px_double p10 = (px_double)(-0.004491743889132696586); + static const px_double p11 = (px_double)(0.0001093120021936477832); + + px_double y = x - (px_double)(0.8750000001110173065); + + return ((((((((((( + +p11) * y + + p10) * y + + p09) * y + + p08) * y + + p07) * y + + p06) * y + + p05) * y + + p04) * y + + p03) * y + + p02) * y + + p01) * y + + p00; +} + +static px_double atani3(px_double x) +{ + static const px_double p00 = (px_double)(0.8621700546672244059); + static const px_double p01 = (px_double)(0.4235294117647077639); + static const px_double p02 = (px_double)(-0.2092733564013857794); + static const px_double p03 = (px_double)(0.07808182373302373358); + static const px_double p04 = (px_double)(-0.0135556997637514675); + static const px_double p05 = (px_double)(-0.009124992591382986157); + static const px_double p06 = (px_double)(0.01134219138389198391); + static const px_double p07 = (px_double)(-0.00684699873146459112); + static const px_double p08 = (px_double)(0.002317836143188779178); + static const px_double p09 = (px_double)(0.0002192642833474152939); + static const px_double p10 = (px_double)(-0.0009808674228592557075); + static const px_double p11 = (px_double)(0.0008098046818543229095); + static const px_double p12 = (px_double)(-0.0003740695734151908039); + + px_double y = x - (px_double)(1.16666666666662078); + + return (((((((((((( + +p12) * y + + p11) * y + + p10) * y + + p09) * y + + p08) * y + + p07) * y + + p06) * y + + p05) * y + + p04) * y + + p03) * y + + p02) * y + + p01) * y + + p00; +} + +static px_double atani4(px_double x) +{ + static const px_double p00 = (px_double)(0.9827937232473292761); + static const px_double p01 = (px_double)(0.3076923076923072653); + static const px_double p02 = (px_double)(-0.142011834319542396); + static const px_double p03 = (px_double)(0.05583371263871451939); + static const px_double p04 = (px_double)(-0.01680613422985677979); + static const px_double p05 = (px_double)(0.002102921348931583931); + static const px_double p06 = (px_double)(0.0018297786863776509); + static const px_double p07 = (px_double)(-0.001909912753511534573); + static const px_double p08 = (px_double)(0.001120490304029380041); + static const px_double p09 = (px_double)(-0.0004624685412818255181); + static const px_double p10 = (px_double)(0.0001041619583992129452); + static const px_double p11 = (px_double)(3.081575322765031172e-05); + + px_double y = x - 1.50000000000000666; + + return ((((((((((( + +p11) * y + + p10) * y + + p09) * y + + p08) * y + + p07) * y + + p06) * y + + p05) * y + + p04) * y + + p03) * y + + p02) * y + + p01) * y + + p00; +} + +static px_double atani5(px_double x) +{ + static const px_double p00 = (px_double)(1.071449605063853356); + static const px_double p01 = (px_double)(0.2292993631001272459); + static const px_double p02 = (px_double)(-0.09639336283821990647); + static const px_double p03 = (px_double)(0.03650333485983356385); + static const px_double p04 = (px_double)(-0.01196655808839080896); + static const px_double p05 = (px_double)(0.003026728804287181791); + static const px_double p06 = (px_double)(-0.0002913554434445434329); + static const px_double p07 = (px_double)(-0.0002857253601689876445); + static const px_double p08 = (px_double)(0.0002603252202535161078); + static const px_double p09 = (px_double)(-0.0001450883505235225923); + static const px_double p10 = (px_double)(6.120525496089561119e-05); + + px_double y = x - (px_double)(1.833333333111296204); + + return (((((((((( + +p10) * y + + p09) * y + + p08) * y + + p07) * y + + p06) * y + + p05) * y + + p04) * y + + p03) * y + + p02) * y + + p01) * y + + p00; +} + +// See documentation above. +px_double PX_atan(px_double x) +{ + if (x < 0) + if (x < -1) + if (x < -5 / 3.) + if (x < -2) + return -Tail(-x); + else + return -atani5(-x); + else + if (x < -4 / 3.) + return -atani4(-x); + else + return -atani3(-x); + else + if (x < -.5) + if (x < -.75) + return -atani2(-x); + else + return -atani1(-x); + else + if (x < (px_double)(1.353860343122586362e-8)) + return atani0(x); + else + if (x <= (px_double)(2.225073858507201383e-308)) + // Generate inexact and return x. + return (Tiny + 1) * x; + else + if (x == 0) + return x; + else + // Generate underflow and return x. + return x * Tiny + x; + else + if (x <= +1) + if (x <= +.5) + if (x <= (px_double)(1.353860343122586362e-8)) + if (x < (px_double)(2.225073858507201383e-308)) + if (x == 0) + return x; + else + // Generate underflow and return x. + return x * Tiny + x; + else + // Generate inexact and return x. + return (Tiny + 1) * x; + else + return atani0(x); + else + if (x <= +.75) + return +atani1(+x); + else + return +atani2(+x); + else + if (x <= +5 / 3.) + if (x <= +4 / 3.) + return +atani3(+x); + else + return +atani4(+x); + else + if (x <= +2) + return +atani5(+x); + else + return +Tail(+x); +} + +px_double PX_atan2(px_double y, px_double x) +{ + if (x>0) + { + return PX_atan(y/x);; + } + else if (y >= 0 && x < 0) + { + return PX_atan(y/x) + PX_PI; + } + else if (y < 0 && x < 0) + { + return PX_atan(y/x) - PX_PI; + } + else if (y > 0 && x == 0) + { + return PX_PI / 2; + } + else if (y < 0 && x == 0) + { + return -1 * PX_PI / 2; + } + else + { + return 0; + } + +} +px_stringformat PX_STRINGFORMAT_INT(px_int _i) +{ + px_stringformat fmt; + fmt.type=PX_STRINGFORMAT_TYPE_INT; + fmt._int=_i; + return fmt; +} + + +px_stringformat PX_STRINGFORMAT_FLOAT(px_float _f) +{ + px_stringformat fmt; + fmt.type=PX_STRINGFORMAT_TYPE_FLOAT; + fmt._float=_f; + return fmt; +} + + +px_stringformat PX_STRINGFORMAT_STRING(const px_char *_s) +{ + px_stringformat fmt; + fmt.type=PX_STRINGFORMAT_TYPE_STRING; + fmt._pstring=_s; + return fmt; +} + + +px_int PX_sprintf8(px_char *_out_str,px_int str_size,const px_char fmt[], px_stringformat _1, px_stringformat _2, px_stringformat _3, px_stringformat _4,px_stringformat _5, px_stringformat _6, px_stringformat _7, px_stringformat _8) +{ + px_int length=0; + const px_char *p=PX_NULL; + PX_RETURN_STRING tret; + px_stringformat pstringfmt; + px_int precision=3; + + if (!_out_str||!str_size) + { + for (p = fmt;*p; p++) + { + if(*p != '%') { + length++; + continue; + } + switch(*(p+1)) + { + case '1': pstringfmt=_1; break; + case '2': pstringfmt=_2; break; + case '3': pstringfmt=_3; break; + case '4': pstringfmt=_4; break; + case '5': pstringfmt=_5; break; + case '6': pstringfmt=_6; break; + case '7': pstringfmt=_7; break; + case '8': pstringfmt=_8; break; + default: + length++; + continue; + } + + if (*(p+2)=='.') + { + precision=*(p+3)-'0'; + p+=3; + } + else + { + p++; + } + + switch (pstringfmt.type) + { + case PX_STRINGFORMAT_TYPE_INT: + length+=PX_strlen(PX_itos(pstringfmt._int,10).data); + break; + case PX_STRINGFORMAT_TYPE_FLOAT: + length+=PX_strlen(PX_ftos(pstringfmt._float,3).data); + break; + case PX_STRINGFORMAT_TYPE_STRING: + length+=PX_strlen(pstringfmt._pstring); + break; + default: + return 0; + } + + } + return length; + } + PX_memset(_out_str,0,str_size); + for (p = fmt;*p; p++) + { + if(*p != '%') { + _out_str[length]=*p; + length++; + continue; + } + switch(*(p+1)) + { + case '1': pstringfmt=_1; break; + case '2': pstringfmt=_2; break; + case '3': pstringfmt=_3; break; + case '4': pstringfmt=_4; break; + case '5': pstringfmt=_5; break; + case '6': pstringfmt=_6; break; + case '7': pstringfmt=_7; break; + case '8': pstringfmt=_8; break; + default: + _out_str[length]=*p; + length++; + continue; + } + + if (*(p+2)=='.') + { + precision=*(p+3)-'0'; + p+=3; + } + else + { + p++; + } + + switch (pstringfmt.type) + { + case PX_STRINGFORMAT_TYPE_INT: + tret=PX_itos(pstringfmt._int,10); + if(length+PX_strlen(tret.data)m[0][0]=0;Mat->m[0][1]=0;Mat->m[0][2]=0;Mat->m[0][3]=0; + Mat->m[1][0]=0;Mat->m[1][1]=0;Mat->m[1][2]=0;Mat->m[1][3]=0; + Mat->m[2][0]=0;Mat->m[2][1]=0;Mat->m[2][2]=0;Mat->m[2][3]=0; + Mat->m[3][0]=0;Mat->m[3][1]=0;Mat->m[3][2]=0;Mat->m[3][3]=0; +} + +void PX_MatrixIdentity(px_matrix *Mat) +{ + Mat->_11=1.0f; Mat->_12=0.0f; Mat->_13=0.0f; Mat->_14=0.0f; + Mat->_21=0.0f; Mat->_22=1.0f; Mat->_23=0.0f; Mat->_24=0.0f; + Mat->_31=0.0f; Mat->_32=0.0f; Mat->_33=1.0f; Mat->_34=0.0f; + Mat->_41=0.0f; Mat->_42=0.0f; Mat->_43=0.0f; Mat->_44=1.0f; +} + +px_matrix PX_MatrixMultiply(px_matrix Mat1,px_matrix Mat2) +{ + px_matrix ptmat; + ptmat.m[0][0]=Mat1.m[0][0]*Mat2.m[0][0]/**/+Mat1.m[0][1]*Mat2.m[1][0]/**/+Mat1.m[0][2]*Mat2.m[2][0]/**/+Mat1.m[0][3]*Mat2.m[3][0]; + ptmat.m[0][1]=Mat1.m[0][0]*Mat2.m[0][1]/**/+Mat1.m[0][1]*Mat2.m[1][1]/**/+Mat1.m[0][2]*Mat2.m[2][1]/**/+Mat1.m[0][3]*Mat2.m[3][1]; + ptmat.m[0][2]=Mat1.m[0][0]*Mat2.m[0][2]/**/+Mat1.m[0][1]*Mat2.m[1][2]/**/+Mat1.m[0][2]*Mat2.m[2][2]/**/+Mat1.m[0][3]*Mat2.m[3][2]; + ptmat.m[0][3]=Mat1.m[0][0]*Mat2.m[0][3]/**/+Mat1.m[0][1]*Mat2.m[1][3]/**/+Mat1.m[0][2]*Mat2.m[2][3]/**/+Mat1.m[0][3]*Mat2.m[3][3]; + + ptmat.m[1][0]=Mat1.m[1][0]*Mat2.m[0][0]/**/+Mat1.m[1][1]*Mat2.m[1][0]/**/+Mat1.m[1][2]*Mat2.m[2][0]/**/+Mat1.m[1][3]*Mat2.m[3][0]; + ptmat.m[1][1]=Mat1.m[1][0]*Mat2.m[0][1]/**/+Mat1.m[1][1]*Mat2.m[1][1]/**/+Mat1.m[1][2]*Mat2.m[2][1]/**/+Mat1.m[1][3]*Mat2.m[3][1]; + ptmat.m[1][2]=Mat1.m[1][0]*Mat2.m[0][2]/**/+Mat1.m[1][1]*Mat2.m[1][2]/**/+Mat1.m[1][2]*Mat2.m[2][2]/**/+Mat1.m[1][3]*Mat2.m[3][2]; + ptmat.m[1][3]=Mat1.m[1][0]*Mat2.m[0][3]/**/+Mat1.m[1][1]*Mat2.m[1][3]/**/+Mat1.m[1][2]*Mat2.m[2][3]/**/+Mat1.m[1][3]*Mat2.m[3][3]; + + ptmat.m[2][0]=Mat1.m[2][0]*Mat2.m[0][0]/**/+Mat1.m[2][1]*Mat2.m[1][0]/**/+Mat1.m[2][2]*Mat2.m[2][0]/**/+Mat1.m[2][3]*Mat2.m[3][0]; + ptmat.m[2][1]=Mat1.m[2][0]*Mat2.m[0][1]/**/+Mat1.m[2][1]*Mat2.m[1][1]/**/+Mat1.m[2][2]*Mat2.m[2][1]/**/+Mat1.m[2][3]*Mat2.m[3][1]; + ptmat.m[2][2]=Mat1.m[2][0]*Mat2.m[0][2]/**/+Mat1.m[2][1]*Mat2.m[1][2]/**/+Mat1.m[2][2]*Mat2.m[2][2]/**/+Mat1.m[2][3]*Mat2.m[3][2]; + ptmat.m[2][3]=Mat1.m[2][0]*Mat2.m[0][3]/**/+Mat1.m[2][1]*Mat2.m[1][3]/**/+Mat1.m[2][2]*Mat2.m[2][3]/**/+Mat1.m[2][3]*Mat2.m[3][3]; + + ptmat.m[3][0]=Mat1.m[3][0]*Mat2.m[0][0]/**/+Mat1.m[3][1]*Mat2.m[1][0]/**/+Mat1.m[3][2]*Mat2.m[2][0]/**/+Mat1.m[3][3]*Mat2.m[3][0]; + ptmat.m[3][1]=Mat1.m[3][0]*Mat2.m[0][1]/**/+Mat1.m[3][1]*Mat2.m[1][1]/**/+Mat1.m[3][2]*Mat2.m[2][1]/**/+Mat1.m[3][3]*Mat2.m[3][1]; + ptmat.m[3][2]=Mat1.m[3][0]*Mat2.m[0][2]/**/+Mat1.m[3][1]*Mat2.m[1][2]/**/+Mat1.m[3][2]*Mat2.m[2][2]/**/+Mat1.m[3][3]*Mat2.m[3][2]; + ptmat.m[3][3]=Mat1.m[3][0]*Mat2.m[0][3]/**/+Mat1.m[3][1]*Mat2.m[1][3]/**/+Mat1.m[3][2]*Mat2.m[2][3]/**/+Mat1.m[3][3]*Mat2.m[3][3]; + return ptmat; +} + +px_matrix PX_MatrixAdd(px_matrix Mat1,px_matrix Mat2) +{ + px_matrix ptmat; + ptmat._11=Mat1._11+Mat2._11;ptmat._12=Mat1._12+Mat2._12;ptmat._13=Mat1._13+Mat2._13;ptmat._14=Mat1._14+Mat2._14; + ptmat._21=Mat1._21+Mat2._21;ptmat._22=Mat1._22+Mat2._22;ptmat._23=Mat1._23+Mat2._23;ptmat._24=Mat1._24+Mat2._24; + ptmat._31=Mat1._31+Mat2._31;ptmat._32=Mat1._32+Mat2._32;ptmat._33=Mat1._33+Mat2._33;ptmat._34=Mat1._34+Mat2._34; + ptmat._41=Mat1._41+Mat2._41;ptmat._42=Mat1._42+Mat2._42;ptmat._43=Mat1._43+Mat2._43;ptmat._44=Mat1._44+Mat2._44; + return ptmat; +} + +px_matrix PX_MatrixSub(px_matrix Mat1,px_matrix Mat2) +{ + px_matrix ptmat; + ptmat._11=Mat1._11-Mat2._11;ptmat._12=Mat1._12-Mat2._12;ptmat._13=Mat1._13-Mat2._13;ptmat._14=Mat1._14-Mat2._14; + ptmat._21=Mat1._21-Mat2._21;ptmat._22=Mat1._22-Mat2._22;ptmat._23=Mat1._23-Mat2._23;ptmat._24=Mat1._24-Mat2._24; + ptmat._31=Mat1._31-Mat2._31;ptmat._32=Mat1._32-Mat2._32;ptmat._33=Mat1._33-Mat2._33;ptmat._34=Mat1._34-Mat2._34; + ptmat._41=Mat1._41-Mat2._41;ptmat._42=Mat1._42-Mat2._42;ptmat._43=Mat1._43-Mat2._43;ptmat._44=Mat1._44-Mat2._44; + return ptmat; +} + +px_bool PX_MatrixEqual(px_matrix Mat1,px_matrix Mat2) +{ + px_int i,j; + for (i=0;i<4;i++) + { + for (j=0;j<4;j++) + { + if (Mat1.m[i][j]!=Mat2.m[i][j]) + { + return PX_FALSE; + } + } + } + return PX_TRUE; +} + +px_void PX_MatrixTranslation(px_matrix *mat,px_float x,px_float y,px_float z) +{ + mat->_11=1.0f; mat->_12=0.0f; mat->_13=0.0f; mat->_14=0.0f; + mat->_21=0.0f; mat->_22=1.0f; mat->_23=0.0f; mat->_24=0.0f; + mat->_31=0.0f; mat->_32=0.0f; mat->_33=1.0f; mat->_34=0.0f; + mat->_41=x; mat->_42=y; mat->_43=z; mat->_44=1.0f; +} + +px_void PX_MatrixRotateX(px_matrix *mat,px_float Angle) +{ + mat->_11=1.0f; mat->_12=0; mat->_13=0.0f; mat->_14=0.0f; + mat->_21=0.0f; mat->_22=PX_cos_angle(Angle); mat->_23=PX_sin_angle(Angle); mat->_24=0.0f; + mat->_31=0.0f; mat->_32=-PX_sin_angle(Angle); mat->_33=PX_cos_angle(Angle); mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + +px_void PX_MatrixRotateY(px_matrix *mat,px_float Angle) +{ + mat->_11=PX_cos_angle(Angle); mat->_12=0.0f; mat->_13=PX_sin_angle(Angle); mat->_14=0.0f; + mat->_21=0.0f; mat->_22=1.0f; mat->_23=0.0f; mat->_24=0.0f; + mat->_31=-PX_sin_angle(Angle); mat->_32=0.0f; mat->_33=PX_cos_angle(Angle); mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + +px_void PX_MatrixRotateZ(px_matrix *mat,px_float Angle) +{ + + mat->_11=PX_cos_angle(Angle); mat->_12=PX_sin_angle(Angle); mat->_13=0.0f; mat->_14=0.0f; + mat->_21=-PX_sin_angle(Angle); mat->_22=PX_cos_angle(Angle); mat->_23=0.0f; mat->_24=0.0f; + mat->_31=0.0f; mat->_32=0.0f; mat->_33=1.0f; mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + + +px_void PX_MatrixRotateXRadian(px_matrix *mat,px_float rad) +{ + mat->_11=1.0f; mat->_12=0; mat->_13=0.0f; mat->_14=0.0f; + mat->_21=0.0f; mat->_22=PX_cos_radian(rad); mat->_23=PX_sin_radian(rad); mat->_24=0.0f; + mat->_31=0.0f; mat->_32=-PX_sin_radian(rad); mat->_33=PX_cos_radian(rad); mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + +px_void PX_MatrixRotateYRadian(px_matrix *mat,px_float rad) +{ + mat->_11=PX_cos_radian(rad); mat->_12=0.0f; mat->_13=PX_sin_radian(rad); mat->_14=0.0f; + mat->_21=0.0f; mat->_22=1.0f; mat->_23=0.0f; mat->_24=0.0f; + mat->_31=-PX_sin_radian(rad); mat->_32=0.0f; mat->_33=PX_cos_radian(rad); mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + +px_void PX_MatrixRotateZRadian(px_matrix *mat,px_float rad) +{ + + mat->_11=PX_cos_radian(rad); mat->_12=PX_sin_radian(rad); mat->_13=0.0f; mat->_14=0.0f; + mat->_21=-PX_sin_radian(rad); mat->_22=PX_cos_radian(rad); mat->_23=0.0f; mat->_24=0.0f; + mat->_31=0.0f; mat->_32=0.0f; mat->_33=1.0f; mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + +px_void PX_MatrixScale(px_matrix *mat,px_float x,px_float y,px_float z) +{ + mat->_11=x; mat->_12=0.0f; mat->_13=0.0f; mat->_14=0.0f; + mat->_21=0.0f; mat->_22=y; mat->_23=0.0f; mat->_24=0.0f; + mat->_31=0.0f; mat->_32=0.0f; mat->_33=z; mat->_34=0.0f; + mat->_41=0.0f; mat->_42=0.0f; mat->_43=0.0f; mat->_44=1.0f; +} + +static px_float ptabs(px_float x){return x>0?x:-x;} +static px_bool Gauss(px_float A[][4], px_float B[][4]) +{ + + px_int i, j, k; + px_float max, temp; + px_float t[4][4]; + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + { + t[i][j] = A[i][j]; + } + } + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + { + B[i][j] = (i == j) ? (px_float)1 : 0; + } + } + for (i = 0; i < 4; i++) + { + max = t[i][i]; + k = i; + for (j = i+1; j < 4; j++) + { + if (ptabs(t[j][i]) > ptabs(max)) + { + max = t[j][i]; + k = j; + } + } + if (k != i) + { + for (j = 0; j < 4; j++) + { + temp = t[i][j]; + t[i][j] = t[k][j]; + t[k][j] = temp; + temp = B[i][j]; + B[i][j] = B[k][j]; + B[k][j] = temp; + } + } + if (t[i][i] == 0) + { + return PX_FALSE; + } + temp = t[i][i]; + for (j = 0; j < 4; j++) + { + t[i][j] = t[i][j] / temp; + B[i][j] = B[i][j] / temp; + } + for (j = 0; j < 4; j++) + { + if (j != i) + { + temp = t[j][i]; + for (k = 0; k < 4; k++) + { + t[j][k] = t[j][k] - t[i][k]*temp; + B[j][k] = B[j][k] - B[i][k]*temp; + } + } + } + } + return PX_TRUE; +} + + +px_bool PX_MatrixInverse(px_matrix *mat) +{ + return Gauss(mat->m,mat->m); +} + +px_void PX_MatrixTranspose(px_matrix *matrix) +{ + px_matrix mat=*matrix; + matrix->_11=mat._11; matrix->_12=mat._21; matrix->_13=mat._31; matrix->_14=mat._41; + matrix->_21=mat._12; matrix->_22=mat._22; matrix->_23=mat._32; matrix->_24=mat._42; + matrix->_31=mat._13; matrix->_32=mat._23; matrix->_33=mat._33; matrix->_34=mat._43; + matrix->_41=mat._14; matrix->_42=mat._24; matrix->_43=mat._34; matrix->_44=mat._44; +} + + +px_color PX_COLOR(px_uchar a,px_uchar r,px_uchar g,px_uchar b) +{ + px_color color; + color._argb.a=a; + color._argb.r=r; + color._argb.g=g; + color._argb.b=b; + return color; +} + + +px_void PX_ColorIncrease(px_color *color,px_uchar inc) +{ + if(color->_argb.r+inc>=0xff) + { + color->_argb.r=0xff; + } + else + { + color->_argb.r+=inc; + } + + if(color->_argb.g+inc>=0xff) + { + color->_argb.g=0xff; + } + else + { + color->_argb.g+=inc; + } + + if(color->_argb.b+inc>=0xff) + { + color->_argb.b=0xff; + } + else + { + color->_argb.b+=inc; + } +}; + +px_color PX_ColorAdd(px_color color1,px_color color2) +{ + if(color1._argb.r+color2._argb.r>=0xff) + { + color1._argb.r=0xff; + } + else + { + color1._argb.r+=color2._argb.r; + } + + if(color1._argb.g+color2._argb.g>=0xff) + { + color1._argb.g=0xff; + } + else + { + color1._argb.g+=color2._argb.g; + } + + if(color1._argb.b+color2._argb.b>=0xff) + { + color1._argb.b=0xff; + } + else + { + color1._argb.b+=color2._argb.b; + } + + if(color1._argb.a+color2._argb.a>=0xff) + { + color1._argb.a=0xff; + } + else + { + color1._argb.a+=color2._argb.a; + } + return color1; +}; + +px_color PX_ColorSub(px_color color1,px_color color2) +{ + if(color1._argb.r-color2._argb.r<0) + { + color1._argb.r=0; + } + else + { + color1._argb.r-=color2._argb.r; + } + + if(color1._argb.g-color2._argb.g<0) + { + color1._argb.g=0; + } + else + { + color1._argb.g-=color2._argb.g; + } + + if(color1._argb.b-color2._argb.b<0) + { + color1._argb.b=0; + } + else + { + color1._argb.b-=color2._argb.b; + } + + if(color1._argb.a-color2._argb.a<0) + { + color1._argb.a=0; + } + else + { + color1._argb.a-=color2._argb.a; + } + return color1; +} + +px_bool PX_ColorEqual(px_color color1,px_color color2) +{ + return color1._argb.ucolor==color2._argb.ucolor; +} + +px_color PX_ColorMul(px_color color1,px_double muls) +{ + color1._argb.a=(px_uchar)(color1._argb.a*muls); + color1._argb.r=(px_uchar)(color1._argb.r*muls); + color1._argb.g=(px_uchar)(color1._argb.g*muls); + color1._argb.b=(px_uchar)(color1._argb.b*muls); + return color1; +} + + + +px_point PX_PointAdd(px_point p1,px_point p2) +{ + p1.x+=p2.x; + p1.y+=p2.y; + p1.z+=p2.z; + return p1; +} + + + +px_point PX_PointSub(px_point p1,px_point p2) +{ + p1.x-=p2.x; + p1.y-=p2.y; + p1.z-=p2.z; + return p1; +} + + +px_point4D PX_Point4DSub(px_point4D p1,px_point4D p2) +{ + px_point4D v; + v.x=p1.x-p2.x; + v.y=p1.y-p2.y; + v.z=p1.z-p2.z; + v.w=1; + return v; +} + +px_point PX_PointMul(px_point p1,px_float m) +{ + p1.x*=m; + p1.y*=m; + p1.z*=m; + return p1; +} +px_point PX_PointDiv(px_point p1,px_float m) +{ + p1.x/=m; + p1.y/=m; + p1.z/=m; + return p1; +} + +px_float PX_PointDot(px_point p1,px_point p2) +{ + return p1.x*p2.x+p1.y*p2.y+p1.z*p2.z; +} + +px_float PX_Point4DDot(px_point4D p1,px_point4D p2) +{ + return p1.x*p2.x+p1.y*p2.y+p1.z*p2.z; +} + +px_point PX_PointCross(px_point p1,px_point p2) +{ + px_point pt; + pt.x=p1.y*p2.z-p2.y*p1.z; + pt.y=p1.z*p2.x-p2.z*p1.x; + pt.z=p1.x*p2.y-p2.x*p1.y; + return pt; +} + +px_point4D PX_Point4DCross(px_point4D p1,px_point4D p2) +{ + px_point4D pt; + pt.x=p1.y*p2.z-p2.y*p1.z; + pt.y=p1.z*p2.x-p2.z*p1.x; + pt.z=p1.x*p2.y-p2.x*p1.y; + pt.w=1; + return pt; +} + +px_point PX_PointInverse(px_point p1) +{ + return PX_POINT(-p1.x,-p1.y,-p1.z); +} + +px_float PX_PointMod(px_point p) +{ + return PX_sqrt(p.x*p.x+p.y*p.y+p.z*p.z); +} + +px_float PX_PointSquare(px_point p) +{ + return (p.x*p.x+p.y*p.y+p.z*p.z); +} + +px_point PX_PointUnit(px_point p) +{ + if (p.x||p.y||p.z) + { + return PX_PointDiv(p,PX_PointMod(p)); + } + return p; +} + + +px_point4D PX_Point4DUnit(px_point4D p) +{ + px_point4D pt; + if (p.x||p.y||p.z) + { + px_float sqare=PX_sqrt(p.x*p.x+p.y*p.y+p.z*p.z); + pt.x=p.x/sqare; + pt.y=p.y/sqare; + pt.z=p.z/sqare; + pt.w=1; + return pt; + } + return p; +} + +px_point PX_PointReflectX(px_point vector_refer,px_point respoint) +{ + px_point ret; + px_float cosx,sinx; + px_float mod=PX_PointMod(vector_refer); + cosx=vector_refer.x/mod; + sinx=-vector_refer.y/mod; + + ret.x=respoint.x*cosx+respoint.y*sinx; + ret.y=respoint.y*cosx-respoint.x*sinx; + ret.z=respoint.z; + return ret; +} + +px_bool PX_isRectCrossRect(px_rect rect1,px_rect rect2) +{ + px_float disx,disy; + disx=PX_ABS(rect1.x+rect1.width/2-rect2.x-rect2.width/2); + disy=PX_ABS(rect1.y+rect1.height/2-rect2.y-rect2.height/2); + if (disx*2rect.x+rect.width) + { + return PX_FALSE; + } + if (p.yrect.y+rect.height) + { + return PX_FALSE; + } + return PX_TRUE; +} + + +px_bool PX_isXYInRegion(px_float x,px_float y,px_float rectx,px_float recty,px_float width,px_float height) +{ + if (xrectx+width) + { + return PX_FALSE; + } + if (yrecty+height) + { + return PX_FALSE; + } + return PX_TRUE; +} + + +px_bool PX_isLineCrossRect(px_point p1,px_point p2,px_rect rect,px_point *cp1,px_point *cp2) +{ + px_float k,b; + px_float calx,caly; + px_bool bcross=PX_FALSE; + + if (!cp1||!cp2) + { + return PX_FALSE; + } + if (cp1&&cp2) + { + *cp1=p1; + *cp2=p2; + } + + if (PX_isPointInRect(p1,rect)&&PX_isPointInRect(p2,rect)) + { + return PX_TRUE; + } + + if (PX_ABS(p1.x-p2.x)<0.000001f) + { + if (p2.yrect.x&&p1.xrect.y+rect.height) + { + return PX_FALSE; + } + if (p2.yy=rect.y; + } + if (p2.y>rect.y+rect.height) + { + cp2->y=rect.y+rect.height; + } + return PX_TRUE; + } + return PX_FALSE; + } + + + if (PX_ABS(p1.y-p2.y)<0.000001f) + { + if (p2.xrect.y&&p1.yrect.x+rect.width) + { + return PX_FALSE; + } + if (p2.xx=rect.x; + } + if (p2.x>rect.x+rect.width) + { + cp2->x=rect.x+rect.width; + } + return PX_TRUE; + } + return PX_FALSE; + } + + + if (p2.xp1.x&&calxx=calx; + cp1->y=caly; + bcross=PX_TRUE; + } + } + + calx=rect.x+rect.width; + caly=calx*k+b; + if (PX_isPointInRect(PX_POINT(calx,caly,0),rect)) + { + if (calx>p1.x&&calxx=calx; + cp2->y=caly; + } + bcross=PX_TRUE; + } + } + + caly=rect.y; + calx=(caly-b)/k; + if (PX_isPointInRect(PX_POINT(calx,caly,0),rect)) + { + if (calx>p1.x&&calx0) + { + if (cp1) + { + cp1->x=calx; + cp1->y=caly; + } + } + else + { + if (cp2) + { + cp2->x=calx; + cp2->y=caly; + } + } + + + bcross=PX_TRUE; + } + } + + caly=rect.y+rect.height; + calx=(caly-b)/k; + if (PX_isPointInRect(PX_POINT(calx,caly,0),rect)) + { + if (calx>p1.x&&calx0) + { + if (cp2) + { + cp2->x=calx; + cp2->y=caly; + } + } + else + { + if (cp1) + { + cp1->x=calx; + cp1->y=caly; + } + } + + bcross=PX_TRUE; + } + } + + return bcross; +} + +void PX_memset(void *dst,px_byte byte,px_int size) +{ + px_dword dw=byte?(byte<<24)|(byte<<16)|(byte<<8)|byte:0; + px_dword *_4byteMovDst=(px_dword *)dst; + px_uchar *pdst=(px_uchar *)dst+(size&~3); + px_uint _movTs=size>>2; + while (_movTs--) + { + *_4byteMovDst++=dw; + } + _movTs=size&3; + while (_movTs--) + *(pdst++)=byte; +} + + +void PX_memdwordset(void *dst,px_dword dw,px_int count) +{ + px_dword *p=(px_dword *)dst; + while(count--)*p++=dw; +} + + +px_bool PX_memequ(const void *dst,const void *src,px_int size) +{ + px_dword *_4byteMovSrc=(px_dword *)src; + px_dword *_4byteMovDst=(px_dword *)dst; + px_uchar *psrc=(px_uchar *)src+(size&~3); + px_uchar *pdst=(px_uchar *)dst+(size&~3); + px_uint _movTs=size>>2; + if (dst==PX_NULL||src==PX_NULL) + { + PX_ASSERT(); + return PX_FALSE; + } + while (_movTs--) + { + if(*_4byteMovDst++!=*_4byteMovSrc++) + return PX_FALSE; + } + _movTs=size&3; + while (_movTs--) + if(*(pdst++)!=*(psrc++)) + return PX_FALSE; + return PX_TRUE; +} + + +px_void PX_memcpy(px_void *dst,const px_void *src,px_int size) +{ + typedef struct + { + px_byte m[16]; + }PX_MEMCPY_16; + + typedef struct + { + px_byte m[32]; + }PX_MEMCPY_32; + + typedef struct + { + px_byte m[64]; + }PX_MEMCPY_64; + + typedef struct + { + px_byte m[128]; + }PX_MEMCPY_128; + + typedef struct + { + px_byte m[256]; + }PX_MEMCPY_256; + + typedef struct + { + px_byte m[512]; + }PX_MEMCPY_512; + + typedef struct + { + px_byte m[1024]; + }PX_MEMCPY_1024; + + typedef struct + { + px_byte m[2048]; + }PX_MEMCPY_2048; + + typedef struct + { + px_byte m[4096]; + }PX_MEMCPY_4096; + + + px_dword *_4byteMovSrc; + px_dword *_4byteMovDst; + px_uchar *psrc; + px_uchar *pdst; + PX_MEMCPY_4096 *_4kbyteMovSrc,*_4kbyteMovDst; + PX_MEMCPY_2048 *_2kbyteMovSrc,*_2kbyteMovDst; + PX_MEMCPY_1024 *_1kbyteMovSrc,*_1kbyteMovDst; + PX_MEMCPY_512 *_512byteMovSrc,*_512byteMovDst; + PX_MEMCPY_256 *_256byteMovSrc,*_256byteMovDst; + PX_MEMCPY_128 *_128byteMovSrc,*_128byteMovDst; + PX_MEMCPY_64 *_64byteMovSrc,*_64byteMovDst; + PX_MEMCPY_32 *_32byteMovSrc,*_32byteMovDst; + PX_MEMCPY_16 *_16byteMovSrc,*_16byteMovDst; + px_uint _movTs; + +// if (!src||!dst) +// { +// PX_ASSERT(); +// return; +// } + + if (dst>src&&(px_char *)dst<=(px_char *)src+size) + { + //backward overlap + psrc=(px_uchar *)src+size-1; + pdst=(px_uchar *)dst+size-1; + + _movTs=size&3; + + while (_movTs--) + *(pdst--)=*(psrc--); + + pdst-=3; + psrc-=3; + _4byteMovDst=(px_dword *)pdst; + _4byteMovSrc=(px_dword *)psrc; + _movTs=size>>2; + while (_movTs--) + { + *_4byteMovDst--=*_4byteMovSrc--; + } + } + else + { + //high->low + _movTs=size>>12; + if(_movTs) + { + _4kbyteMovSrc=(PX_MEMCPY_4096 *)src; + _4kbyteMovDst=(PX_MEMCPY_4096 *)dst; + while(_movTs--)*_4kbyteMovDst++=*_4kbyteMovSrc++; + src=_4kbyteMovSrc; + dst=_4kbyteMovDst; + } + + _movTs=size&(1<<11); + if(_movTs) + { + _2kbyteMovSrc=(PX_MEMCPY_2048 *)src; + _2kbyteMovDst=(PX_MEMCPY_2048 *)dst; + *_2kbyteMovDst++=*_2kbyteMovSrc++; + src=_2kbyteMovSrc; + dst=_2kbyteMovDst; + } + + _movTs=size&(1<<10); + if(_movTs) + { + _1kbyteMovSrc=(PX_MEMCPY_1024 *)src; + _1kbyteMovDst=(PX_MEMCPY_1024 *)dst; + *_1kbyteMovDst++=*_1kbyteMovSrc++; + src=_1kbyteMovSrc; + dst=_1kbyteMovDst; + } + + _movTs=size&(1<<9); + if(_movTs) + { + _512byteMovSrc=(PX_MEMCPY_512 *)src; + _512byteMovDst=(PX_MEMCPY_512 *)dst; + *_512byteMovDst++=*_512byteMovSrc++; + src=_512byteMovSrc; + dst=_512byteMovDst; + } + + _movTs=size&(1<<8); + if(_movTs) + { + _256byteMovSrc=(PX_MEMCPY_256 *)src; + _256byteMovDst=(PX_MEMCPY_256 *)dst; + *_256byteMovDst++=*_256byteMovSrc++; + src=_256byteMovSrc; + dst=_256byteMovDst; + } + + _movTs=size&(1<<7); + if(_movTs) + { + _128byteMovSrc=(PX_MEMCPY_128 *)src; + _128byteMovDst=(PX_MEMCPY_128 *)dst; + *_128byteMovDst++=*_128byteMovSrc++; + src=_128byteMovSrc; + dst=_128byteMovDst; + } + + _movTs=size&(1<<6); + if(_movTs) + { + _64byteMovSrc=(PX_MEMCPY_64 *)src; + _64byteMovDst=(PX_MEMCPY_64 *)dst; + *_64byteMovDst++=*_64byteMovSrc++; + src=_64byteMovSrc; + dst=_64byteMovDst; + } + + _movTs=size&(1<<5); + if(_movTs) + { + _32byteMovSrc=(PX_MEMCPY_32 *)src; + _32byteMovDst=(PX_MEMCPY_32 *)dst; + *_32byteMovDst++=*_32byteMovSrc++; + src=_32byteMovSrc; + dst=_32byteMovDst; + } + + _movTs=size&(1<<4); + if(_movTs) + { + _16byteMovSrc=(PX_MEMCPY_16 *)src; + _16byteMovDst=(PX_MEMCPY_16 *)dst; + *_16byteMovDst++=*_16byteMovSrc++; + src=_16byteMovSrc; + dst=_16byteMovDst; + } + + _movTs=size&0x0F; + if(_movTs>=12) + { + _4byteMovSrc=(px_dword *)src; + _4byteMovDst=(px_dword *)dst; + *_4byteMovDst++=*_4byteMovSrc++; + *_4byteMovDst++=*_4byteMovSrc++; + *_4byteMovDst++=*_4byteMovSrc++; + _movTs-=12; + psrc=(px_uchar *)_4byteMovSrc; + pdst=(px_uchar *)_4byteMovDst; + while(_movTs--)*pdst++=*psrc++; + } + else if(_movTs>=8) + { + _4byteMovSrc=(px_dword *)src; + _4byteMovDst=(px_dword *)dst; + *_4byteMovDst++=*_4byteMovSrc++; + *_4byteMovDst++=*_4byteMovSrc++; + _movTs-=8; + psrc=(px_uchar *)_4byteMovSrc; + pdst=(px_uchar *)_4byteMovDst; + while(_movTs--)*pdst++=*psrc++; + } + else if(_movTs>=4) + { + _4byteMovSrc=(px_dword *)src; + _4byteMovDst=(px_dword *)dst; + *_4byteMovDst++=*_4byteMovSrc++; + _movTs-=4; + psrc=(px_uchar *)_4byteMovSrc; + pdst=(px_uchar *)_4byteMovDst; + while(_movTs--)*pdst++=*psrc++; + } + else + { + psrc=(px_uchar *)src; + pdst=(px_uchar *)dst; + while(_movTs--)*pdst++=*psrc++; + } + + } +} + + + +px_void PX_strcpy(px_char *dst,const px_char *src,px_int size) +{ + while(size--) + if(*src) + *(dst++)=*(src++); + else + { + *dst='\0'; + return; + } + *(dst-1)='\0'; +} + +px_void PX_wstrcpy(px_word *dst,const px_word *src,px_int size) +{ + while(size--) + if(*src) + *(dst++)=*(src++); + else + { + *dst='\0'; + return; + } + *(dst-1)='\0'; +} + +px_void PX_strcat(px_char *src,const px_char *cat) +{ + px_int len=PX_strlen(cat); + while(*src)src++; + while(len--)*src++=*cat++; + *src='\0'; +} + +px_void PX_wstrcat(px_word *src,const px_word *cat) +{ + px_int len=PX_wstrlen(cat); + while(*src)src++; + while(len--)*src++=*cat++; + *src='\0'; +} + +px_void PX_strset(px_char *dst,const px_char*src) +{ + dst[0]=0; + PX_strcat(dst,src); +} + + +px_int PX_strlen(const px_char *dst) +{ + px_int len=0; + if(!dst) + { + PX_ERROR("NULL pointer assert!"); + return 0; + } + while(dst[len++]); + return len-1; +} + +px_int PX_wstrlen(const px_word *dst) +{ + px_int len=0; + if(!dst) + { + PX_ERROR("NULL pointer assert!"); + return 0; + } + while(dst[len++]); + return len-1; +} + + +px_void PX_strupr(px_char *src) +{ + while (*src != '\0') + { + if (*src >= 'a' && *src <= 'z') + *src -= 32; + src++; + } +} + +px_void PX_strlwr(px_char *src) +{ + while (*src != '\0') + { + if (*src > 'A' && *src <= 'Z'){ + *src += 32; + } + src++; + } +} + + +px_point PX_PointMulMatrix(px_point p,px_matrix mat) +{ + px_point point; + point.x=p.x*mat._11+p.y*mat._21+p.z*mat._31+1*mat._41; + point.y=p.x*mat._12+p.y*mat._22+p.z*mat._32+1*mat._42; + point.z=p.x*mat._13+p.y*mat._23+p.z*mat._33+1*mat._43; + return point; +} + + +px_point4D PX_Point4DMulMatrix(px_point4D p,px_matrix mat) +{ + px_point4D point; + point.x=p.x*mat._11+p.y*mat._21+p.z*mat._31+1*mat._41; + point.y=p.x*mat._12+p.y*mat._22+p.z*mat._32+1*mat._42; + point.z=p.x*mat._13+p.y*mat._23+p.z*mat._33+1*mat._43; + point.w=p.x*mat._14+p.y*mat._24+p.z*mat._34+1*mat._44; + return point; +} + + +px_plane PX_PLANE(px_point3D p,px_vector3D n) +{ + px_plane pl; + pl.n=n; + pl.p0=p; + return pl; +} + +px_rect PX_RECT(px_float x,px_float y,px_float width,px_float height) +{ + px_rect rect; + rect.x=x; + rect.y=y; + rect.width=width; + rect.height=height; + + if (width<0) + { + rect.width=-width; + rect.x+=width; + } + + if (height<0) + { + rect.height=-height; + rect.y+=height; + } + return rect; +} + + +px_rect PX_RECTPOINT2(px_point p1,px_point p2) +{ + px_rect rect; + rect.width=PX_ABS(p2.x-p1.x); + rect.height=PX_ABS(p2.y-p1.y); + + if (p1.x>2) + { + // x[] 4 base odd/even Sort + exbase=1; + exrang=0; + while (exrang>1); + FFT_Base2(x+(N>>1),N>>1); + + for(k=0;k>1;k++) + { + Wnk.re=(px_float)PX_cosd((-2*PX_PI*k/N)); + Wnk.im=(px_float)PX_sind((-2*PX_PI*k/N)); + cx0=x[k]; + cx1=x[k+(N>>1)]; + x[k]=PX_complexAdd(cx0,PX_complexMult(Wnk,cx1)); + Wnk.re=-Wnk.re; + Wnk.im=-Wnk.im; + x[k+(N>>1)]=PX_complexAdd(cx0,PX_complexMult(Wnk,cx1)); + } + } + else + { + //2 dot DFT + cx0=x[0]; + cx1=x[1]; + x[0]=PX_complexAdd(cx0,cx1); + cx1.im=-cx1.im; + cx1.re=-cx1.re; + x[1]=PX_complexAdd(cx0,cx1); + } + + +} +void PX_FFT(_IN px_complex x[],_OUT px_complex X[],px_int N) +{ + PX_memcpy(X,x,sizeof(px_complex)*N); + FFT_Base2(X,N); +} + +void IFFT_Base2(_IN _OUT px_complex X[],px_int N) +{ + px_int exbase,exrang,i,j,n; + px_complex excomplex,Wnnk,cx0,cx1; + if (N>>2) + { + // x[] 4 base odd/even Sort + exbase=1; + exrang=0; + while (exrang>1); + IFFT_Base2(X+(N>>1),N>>1); + + for(n=0;n>1;n++) + { + Wnnk.re=(px_float)PX_cosd((2*PX_PI*n/N)); + Wnnk.im=(px_float)PX_sind((2*PX_PI*n/N)); + cx0=X[n]; + cx1=X[n+(N>>1)]; + X[n]=PX_complexAdd(cx0,PX_complexMult(Wnnk,cx1)); + + Wnnk.re=-Wnnk.re; + Wnnk.im=-Wnnk.im; + X[n+(N>>1)]=PX_complexAdd(cx0,PX_complexMult(Wnnk,cx1)); + + } + } + else + { + //2 dot IDFT + cx0=X[0]; + cx1=X[1]; + X[0]=PX_complexAdd(cx0,cx1); + + cx1.im=-cx1.im; + cx1.re=-cx1.re; + X[1]=PX_complexAdd(cx0,cx1); + + } +} +void PX_IFFT(_IN px_complex X[],_OUT px_complex x[],px_int N) +{ + px_int i; + PX_memcpy(X,x,sizeof(px_complex)*N); + IFFT_Base2(X,N); + // 1/N operate + for (i=0;i0.15) + { + return 0; + } + + PX_Cepstrum(x,x,N,PX_CEPTRUM_TYPE_REAL); + + if (high>=N||high==low) + { + return 0; + } + + for (i=low;i<=high;i++) + { + if(x[i].re>max) + { + max=x[i].re; + idx=i; + } + } + if (idx==0) + { + return 0; + } + return sampleRate/idx; +} + +void PX_PreEmphasise(const px_double *data, int len, px_double *out, px_double preF)//0.9= 1; i--) + { + out[i] = data[i] - preF * data[i-1]; + } + out[0] = data[0]; +} + +void PX_LinearInterpolationResample(_IN px_double x[],_OUT px_double X[],px_int N,px_int M) +{ + px_int k,m=0; + px_double d1=0,d2=0; + px_double freqscale=N*1.0/M; + for (k=0;k=1.0){ + m+=(px_int)(d2); + d2-=(px_int)(d2); + + } + X[k]=d1; + } +} + +void PX_UpSampled(_IN px_complex x[],_OUT px_complex X[],px_int N,px_int L) +{ + px_int i,j; + for (i=0;i=('0')&&chr<=('9')) + { + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_strIsInt(const px_char *str) +{ + if (PX_strIsNumeric(str)) + { + if (PX_strIsFloat(str)) + { + return PX_FALSE; + } + return PX_TRUE; + } + return PX_FALSE; +} + +static px_double __px_pow_i(px_double num,px_int n) +{ + px_double powint=1; + px_int i; + for(i=1;i<=n;i++) + { + powint*=num; + if (powint==0) + { + break; + } + if (powint>0) + { + if (powint>=PX_DBL_POSITIVE_MAX||powint<=PX_DBL_POSITIVE_MIN) + { + PX_ASSERT(); + break; + } + } + else + { + if (powint<=PX_DBL_NEGATIVE_MIN||powint>=PX_DBL_NEGATIVE_MAX) + { + PX_ASSERT(); + break; + } + } + } + return powint; +} + +static px_double __px_pow_f(px_double num,px_double m) +{ + px_int i,j; + px_double powd=0,x,tmpm=1; + x=num-1; + for(i=1;tmpm>0.0000000001 || tmpm<-0.0000000001;i++) + { + for(j=1,tmpm=1;j<=i;j++) + { + tmpm*=(m-j+1)*x/j; + } + powd+=tmpm; + + if (powd==0) + { + break; + } + if (powd>0) + { + if (powd>=PX_DBL_POSITIVE_MAX||powd<=PX_DBL_POSITIVE_MIN) + { + PX_ASSERT(); + break; + } + } + else + { + if (powd<=PX_DBL_NEGATIVE_MIN||powd>=PX_DBL_NEGATIVE_MAX) + { + PX_ASSERT(); + break; + } + } + } + return powd+1; +} + +px_double PX_pow_dd(px_double num,px_double m) +{ + while (num>2) + { + num=PX_sqrtd(num); + m*=2; + } + if(num==0 && m!=0) return 0; + else if(num==0 && m==0) return 1; + else if(num<0 && m-(px_int)(m)!=0) return 0; + if(num>2) + { + num=1/num; + m=-m; + } + if(m<0) return 1/PX_pow_dd(num,-m); + if(m-(px_int)(m)==0) + return __px_pow_i(num,(px_int)m); + else + return __px_pow_f(num,m-(px_int)(m))*__px_pow_i(num,(px_int)(m)); + //return __px_pow_f(num,m); +} + +px_int PX_pow_ii(px_int i,px_int n) +{ + px_int fin=1; + if (n==0) + { + return 1; + } + if (n<0) + { + return 0; + } + while(n--) + fin*=i; + return fin; +} + + +px_double PX_ln(px_double __x) +{ + px_int N = 128; + px_int k,nk; + px_double x,xx,y; + px_double m=1; + while (__x>PX_e) + { + __x=PX_sqrtd(__x); + m*=2; + } + x = (__x-1)/(__x+1); + xx = x*x; + nk = 2*N+1; + y = 1.0/nk; + for(k=N;k>0;k--) + { + nk = nk - 2; + y = 1.0/nk+xx*y; + } + return 2.0*x*y*m; +} + +px_double PX_log(px_double __x) +{ + return PX_ln(__x); +} + +px_double PX_lg(px_double __x) +{ + return PX_log10(__x); +} + +px_double PX_log10(px_double __x) +{ + return PX_ln(__x)/2.30258509299404568401799145468; +} + + + +static px_uint64 px_srand_seed=0x31415926; + +px_void PX_srand(px_uint64 seed) +{ + seed = (seed*16807)%(0xefffffff); + px_srand_seed=seed; +} + +px_uint32 PX_rand() +{ + return ((px_uint32)(px_srand_seed = (px_srand_seed*764261123)%(0xefffffff)))&PX_RAND_MAX; +} + + +px_double PX_randRange(px_double min,px_double max) +{ + return min+PX_rand()*1.0/PX_RAND_MAX*(max-min); +} + +px_uint32 PX_randEx(px_uint64 seed) +{ + return (px_uint32)(seed = (seed*764261123)%(0xefffffff)); +} + + +px_double PX_GaussRand() +{ + px_double u ; + px_double v; + px_double r; + px_double c; + while (PX_TRUE) + { + u = ((px_double) PX_rand() / (PX_RAND_MAX)) * 2 - 1; + v = ((px_double) PX_rand() / (PX_RAND_MAX)) * 2 - 1; + r = u * u + v * v; + if (r == 0 || r > 1) continue; + c = (px_double)PX_sqrt((px_float)(-2 * PX_ln(r) / r)); + return u * c; + } +} + +px_double PX_Ceil(px_double v) +{ + return v-(px_int)v?(px_double)((px_int)(v+1)):v; +} + +static const px_uint32 crc32tab[] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, + 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, + 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, + 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, + 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, + 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, + 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, + 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, + 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, + 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, + 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, + 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, + 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, + 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, + 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, + 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, + 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, + 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, + 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, + 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, + 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, + 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, + 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, + 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, + 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, + 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, + 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, + 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, + 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, + 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, + 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, + 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, + 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, + 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, + 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d +}; + + +px_uint32 PX_crc32( px_void *buffer, px_uint size) +{ + px_uint32 i, crc; + crc = 0xFFFFFFFF; + + + for (i = 0; i < size; i++) + crc = crc32tab[(crc ^ ((px_byte *)buffer)[i]) & 0xff] ^ (crc >> 8); + + return crc^0xFFFFFFFF; +} + + + + + + +px_char *PX_strchr(const char *s,px_int ch) +{ + + while(*s!='\0') + { + if(*s-ch==0) + return (px_char*)s; + s++; + } + return PX_NULL; +} + +px_int PX_strcmp(const px_char *str1, const px_char *str2) +{ + px_int ret=0; + while( !(ret = *(px_uchar*)str1 - *(px_uchar*)str2 ) && *str1 ) + { + str1++; + str2++; + } + return ret; +} + +px_char* PX_strstr(const char* dest, const char* src) +{ + px_char* start = (px_char*)dest; + px_char* substart = (px_char*)src; + px_char* cp = (px_char*)dest; + while (*cp) + { + start = cp; + while (*start != '\0' && *substart !='\0' && *start == *substart) + { + start++; + substart++; + } + if (*substart == '\0') + { + return cp; + } + substart = (px_char*)src; + cp++; + } + return PX_NULL; +} + + + +px_bool PX_isPointInCircle(px_point p,px_point circle,px_float radius) +{ + if ((p.x-circle.x)*(p.x-circle.x)+(p.y-circle.y)*(p.y-circle.y)<=radius*radius) + { + return PX_TRUE; + } + return PX_FALSE; +} + +px_dword PX_inet_addr( const px_char cp[] ) +{ + px_uchar ipBytes[4]={0}; + px_int i; + for( i=0; i<4; i++, cp++ ){ + ipBytes[i] = (px_uchar)PX_atoi( cp ); + if( !(cp = PX_strchr( cp, '.' )) ){ break; } + } + return *(px_dword*)ipBytes; +} + + +px_char* PX_inet_ntoa(px_dword ipv4) +{ + px_int b[4]; + static px_char a[17]; + a[0]='\0'; + b[0]=((ipv4 & 0xff000000)>>24); + b[1]=((ipv4 & 0x00ff0000)>>16); + b[2]=((ipv4 & 0x0000ff00)>>8); + b[3]=((ipv4 & 0x000000ff)>>0); + + PX_itoa(b[3],a+PX_strlen(a),5,10); + PX_strcat(a,"."); + PX_itoa(b[2],a+PX_strlen(a),5,10); + PX_strcat(a,"."); + PX_itoa(b[1],a+PX_strlen(a),5,10); + PX_strcat(a,"."); + PX_itoa(b[0],a+PX_strlen(a),5,10); + return a; +} + +px_dword PX_htonl(px_dword h) +{ + return PX_isBigEndianCPU() ? h : BigLittleSwap32(h); +} + + +px_dword PX_ntohl(px_dword n) +{ + return PX_isBigEndianCPU() ? n : BigLittleSwap32(n); +} + +px_word PX_htons(px_word h) +{ + return PX_isBigEndianCPU() ? h : BigLittleSwap16(h); +} + +px_word PX_ntohs(px_word n) +{ + return PX_isBigEndianCPU() ? n : BigLittleSwap16(n); +} + +px_uint32 PX_sum32(px_void *buffer, px_uint size) +{ + px_uint32 _sum32=0; + px_uint i; + px_byte *pbuffer=(px_byte *)buffer; + for (i=0;i0;i--) + { + re=br; + im=bi; + br=(re+b[i])*zr-im*zi; + bi=(re+b[i])*zi+im*zr; + } + ar=0.0; + ai=0; + for(i=n;i>0;i--) + { + re=ar; + im=ai; + ar=(re+a[i])*zr-im*zi; + ai=(re+a[i])*zi+im*zr; + } + br=br+b[0]; + ar=ar+1.0; + numr=ar*br+ai*bi; + numi=ar*bi-ai*br; + den=ar*ar+ai*ai; + x[k]=numr/den; + y[k]=numi/den; + switch(sign) + { + case 1: + { + temp=PX_sqrtd(x[k]*x[k]+y[k]*y[k]); + y[k]=PX_atan2(y[k],x[k]); + x[k]=temp; + } + break; + case 2: + { + temp=(x[k]*x[k]+y[k]*y[k]); + y[k]=PX_atan2(y[k],x[k]); + x[k]=10*PX_log10(temp); + } + break; + } + + } +} + +px_void PX_gainc(px_double b[],px_double a[],px_int n,px_int ns,px_double x[],px_double y[],px_int len,px_int sign) +{ + px_int i,j,k,nl; + px_double ar,ai,br,bi,zr,zi,im,re,den,numr,numi,freq,temp; + px_double hr,hi,tr,ti; + nl=n+1; + for (k=0;k0;i--) + { + re=br; + im=bi; + br=(re+b[j*nl+i])*zr-im*zi; + bi=(re+b[j*nl+i])*zi+im*zr; + } + ar=0; + ai=0; + for (i=n;i>0;i--) + { + re=ar; + im=ai; + ar=(re+a[j*nl+i])*zr-im*zi; + ai=(re+b[j*nl+i])*zi+im*zr; + } + br=br+b[j*nl+0]; + ar=ar+1.0; + numr=ar*br+ai*bi; + numi=ar*bi-ai*br; + den=ar*ar+ai*ai; + hr=numr/den; + hi=numi/den; + tr=x[k]*hr-y[k]*hi; + ti=x[k]*hi+y[k]*hr; + x[k]=tr; + y[k]=ti; + } + switch(sign) + { + case 1: + { + temp=PX_sqrtd(x[k]*x[k]+y[k]*y[k]); + if (temp!=0) + { + y[k]=PX_atan2(y[k],x[k]); + } + else + { + y[k]=0; + } + x[k]=temp; + } + break; + case 2: + { + temp=(x[k]*x[k]+y[k]*y[k]); + if (temp!=0) + { + y[k]=PX_atan2(y[k],x[k]); + } + else + { + temp=1.0e-40; + y[k]=0; + } + x[k]=10*PX_log10(temp); + } + break; + } + } +} + + + +px_void PX_WindowFunction_blackMan(px_double data[],px_int N) +{ + px_int n; + for(n=0;n=0; i--) + p=p*y+a[i]; + } + else + { + y=3.75/t; p=c[8]; + for (i=7; i>=0; i--) + p=p*y+c[i]; + p=p*PX_exp(t)/PX_sqrtd(t); + } + } + if (n==0) return(p); + q=p; + if (t<3.75) + { + y=(x/3.75)*(x/3.75); p=b[6]; + for (i=5; i>=0; i--) p=p*y+b[i]; + p=p*t; + } + else + { + y=3.75/t; p=d[8]; + for (i=7; i>=0; i--) p=p*y+d[i]; + p=p*PX_exp(t)/PX_sqrtd(t); + } + if (x<0.0) p=-p; + if (n==1) return(p); + if (x==0.0) return(0.0); + y=2.0/t; t=0.0; b1=1.0; b0=0.0; + m=n+(px_int)PX_sqrtd(40.0*n); + m=2*m; + + for (i=m; i>0; i--) + { + p=b0+i*y*b1; b0=b1; b1=p; + if (PX_ABS(b1)>1.0e+10) + { + t=t*1.0e-10; b0=b0*1.0e-10; + b1=b1*1.0e-10; + } + if (i==n) t=b0; + } + p=t*q/b1; + if ((x<0.0)&&(n%2==1)) p=-p; + return(p); +} + +px_void PX_WindowFunction_tukey(px_double data[],px_int N) +{ + px_int n; + if (N<16) + { + return; + } + for (n=0;n<=(N-2)/10;n++) + { + data[n]=0.5*(1-PX_cosd((px_float)(10*PX_PI*n/(N+8)))); + } + for (n=(N-2)/10;n<=9*(N-2)/10;n++) + { + data[n]=1; + } + for (n=9*(N-2)/10;n<=N-1;n++) + { + data[n]=0.5*(1-PX_cosd((px_float)(10*PX_PI*(N-n-1)/(N+8))));; + } +} + +px_void PX_WindowFunction_hanning(px_double data[],px_int N) +{ + px_int n; + for(n=0;nn-k-2) + { + w=0.5*((px_float)(1.0-PX_cos_radian((px_float)((n-i-1)*pi/(k+1))))); + } + break; + } + case PX_FIRFILTER_WINDOW_TYPE_TRIANGULAR: + { + w=1.0-PX_ABS(1.0-2*i/(n-1.0)); + break; + } + case PX_FIRFILTER_WINDOW_TYPE_HANNING: + { + w=0.5*(1.0-PX_cos_radian((px_float)(2*i*pi/(n-1)))); + break; + } + case PX_FIRFILTER_WINDOW_TYPE_HAMMING: + { + w=0.54-0.46*PX_cos_radian((px_float)(2*i*pi/(n-1))); + break; + } + case PX_FIRFILTER_WINDOW_TYPE_BLACKMAN: + { + w=0.42-0.5*PX_cos_radian((px_float)(2*i*pi/(n-1)))+0.08*PX_cos_radian((px_float)(4*i*pi/(n-1))); + break; + } + case PX_FIRFILTER_WINDOW_TYPE_KAISER: + { + w=PX_FIRKaiser(i,n,beta); + break; + } + } + return w; +} + +px_sine PX_SINE(px_double A,px_double P,px_double F) +{ + px_sine s; + s.A=A; + s.p=P; + s.f=F; + return s; +} + +px_sine PX_InstantaneousFrequency(px_sine src,px_double p2,px_double delta_t) +{ + px_double delta=(p2-src.p); + delta=delta-(px_int)delta-1/2; + delta/=delta_t; + src.f+=delta; + return src; +} + + +px_void PX_FIRFilterBuild(PX_FIRFILTER_TYPE bandtype,px_double fln,px_double fhn,PX_FIRFILTER_WINDOW_TYPE wn,px_double h[],px_int n,px_double beta) +{ + px_int i,n2,mid; + px_double s,pi,wc1,wc2,delay; + + pi=4.0*PX_atan(1.0); + if ((n%2)==0) + { + n2=n/2-1; + mid=1; + } + else + { + n2=n/2; + mid=0; + } + delay=n/2.0; + wc1=2.0*pi*fln; + if (bandtype>=3) + { + wc2=2.0*pi*fhn; + } + switch(bandtype) + { + case PX_FIRFILTER_TYPE_LOWPASS: + { + for (i=0;i<=n2;i++) + { + s=i-delay; + h[i]=(PX_sind((wc1*s))/(pi*s))*PX_FIRWindow(wn,n+1,i,beta); + h[n-i]=h[i]; + } + if (mid==1) + { + h[n/2]=wc1/pi; + } + } + break; + case PX_FIRFILTER_TYPE_HIGHPASS: + { + for (i=0;i<=n2;i++) + { + s=i-delay; + h[i]=(PX_sind((pi*s))-PX_sind((wc1*s)))/(pi*s); + h[i]=h[i]*PX_FIRWindow(wn,n+1,i,beta); + h[n-i]=h[i]; + } + if (mid==1) + { + h[n/2]=1.0-wc1/pi; + } + } + break; + case PX_FIRFILTER_TYPE_BANDPASS: + { + for (i=0;i<=n2;i++) + { + s=i-delay; + h[i]=(PX_sind((wc2*s))-PX_sind((wc1*s)))/(pi*s); + h[i]=h[i]*PX_FIRWindow(wn,n+1,i,beta); + h[n-i]=h[i]; + } + if (mid==1) + { + h[n/2]=(wc2-wc1)/pi; + } + } + break; + case PX_FIRFILTER_TYPE_STOPBANDFILTER: + { + for (i=0;i<=n2;i++) + { + s=i-delay; + h[i]=(PX_sind((wc1*s))-PX_sind((wc2*s)))/(pi*s); + h[i]=h[i]*PX_FIRWindow(wn,n+1,i,beta); + h[n-i]=h[i]; + } + if (mid==1) + { + h[n/2]=(wc1+pi-wc2)/pi; + } + } + break; + } +} diff --git a/code/PainterEngine/Core/PX_Typedef.h b/code/PainterEngine/Core/PX_Typedef.h new file mode 100644 index 0000000000000000000000000000000000000000..c62d88ed2a1e025ddd7cad40057183d699ac87c7 --- /dev/null +++ b/code/PainterEngine/Core/PX_Typedef.h @@ -0,0 +1,556 @@ +#ifndef __PX_TYPEDEF_H +#define __PX_TYPEDEF_H + +#include "PX_MathTable.h" + +#define PX_DBL_POSITIVE_MAX 1.7976931348623158e+308 +#define PX_DBL_POSITIVE_MIN 4.94065645841246544e-324 + +#define PX_DBL_NEGATIVE_MIN -1.79769313486231570E+308 +#define PX_DBL_NEGATIVE_MAX -4.94065645841246544E-324 + +#define _IN +#define _OUT +#define _LIMIT +#define PX_FALSE 0 +#define PX_TRUE 1 +#define PX_NULL 0 +#define PX_PI 3.141592653589793238462 +#define PX_e (2.7182818284590452353602) +#define PX_e2 (PX_e*PX_e) +#define PX_RAND_MAX (0xffff) + + +#ifdef _DEBUG +#define PX_DEBUG_MODE _DEBUG +#endif + +// +// typedef char * _px_va_list; +// +// #define __PX_INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) +// #define _px_va_start(ap,v) ( ap = (_px_va_list)&v + __PX_INTSIZEOF(v) ) +// #define _px_va_arg(ap,t) ( *(t *)((ap += __PX_INTSIZEOF(t)) - __PX_INTSIZEOF(t)) ) +// #define _px_va_end(ap) ( ap = (_px_va_list)0 ) + + + + +#define PX_COUNTOF(x) (sizeof(x)/sizeof(x[0])) + + + +typedef void px_void; +typedef int px_bool; +typedef unsigned int px_dword;//typedef uint32_t px_dword; +typedef short px_short; +typedef short px_int16; +typedef unsigned short px_word; //typedef uint16_t px_word; +typedef unsigned short px_ushort; +typedef unsigned int px_uint; +typedef unsigned int px_uint32;//typedef uint32_t px_uint32; +typedef int px_int; +typedef int px_int32;//typedef int32_t px_int32; +typedef char px_char; +typedef unsigned char px_byte; +typedef unsigned char px_uchar; +typedef unsigned long px_ulong; +typedef long px_long; +typedef float px_float; +typedef double px_double; +typedef unsigned long long px_qword; +typedef unsigned long long px_uint64;//typedef uint64_t px_uint64; +typedef long long px_int64;//typedef int64_t px_int64; + + + +typedef struct +{ + union + { + px_char data[256]; + px_word wdata[128]; + }; + +}PX_RETURN_STRING; + +#include "PX_Log.h" + + +#define PX_STRUCT_OFFSET(t,m) ((((t *)0)->m-(px_byte *)0)) +#define BigLittleSwap16(A) ((((px_word)(A) & 0xff00) >> 8)|(((px_word)(A) & 0x00ff) << 8)) +#define BigLittleSwap32(A) ((((px_dword)(A) & 0xff000000) >> 24)|(((px_dword)(A) & 0x00ff0000) >> 8)|(((px_dword)(A) & 0x0000ff00) << 8)|(((px_dword)(A) & 0x000000ff)<<24)) + + +typedef struct _px_matrix +{ + union { + struct { + px_float _11, _12, _13, _14; + px_float _21, _22, _23, _24; + px_float _31, _32, _33, _34; + px_float _41, _42, _43, _44; + }; + px_float m[4][4]; + }; +}px_matrix; + +typedef struct _px_color +{ + union + { + struct + { + px_uchar r; + px_uchar g; + px_uchar b; + px_uchar a; + }; + px_dword ucolor; + }_argb; +}px_color; + +typedef struct _px_point +{ + px_float x; + px_float y; + px_float z; +}px_point; + +typedef struct _px_wpoint +{ + px_double x; + px_double y; + px_double z; +}px_wpoint; + +typedef px_point px_point3D; +typedef px_point px_vector3D; + +typedef struct _px_point4 +{ + px_float x; + px_float y; + px_float z; + px_float w; +}px_point4D; + +typedef px_point4D px_vertex; +typedef px_point4D px_vector4D; + +typedef struct +{ + px_point3D p0; // point on the plane + px_vector3D n; // normal to the plane +}px_plane; + +typedef struct _px_rect +{ + px_float x,y,width,height; +}px_rect; + +typedef struct __px_complex +{ + px_double re;// really + px_double im;// imaginary +}px_complex; + + + +////////////////////////////////////////////////////////////////////////// +//endian + +px_dword PX_htonl(px_dword h); +px_dword PX_ntohl(px_dword n); +px_word PX_htons(px_word h); +px_word PX_ntohs(px_word n); + + +////////////////////////////////////////////////////////////////////////// +// +px_double PX_exp(px_double x); + +////////////////////////////////////////////////////////////////////////// +//functions +px_double PX_tanh(px_double x); +px_double PX_sigmoid(px_double x); +px_double PX_ReLU(px_double x); + +////////////////////////////////////////////////////////////////////////// +//PMMCLCG +px_void PX_srand(px_uint64 seed); +px_uint32 PX_rand(); +px_double PX_randRange(px_double min,px_double max); +px_uint32 PX_randEx(px_uint64 seed); +//gauss rand +px_double PX_GaussRand(); + +//ceil +px_double PX_Ceil(px_double v); + + +////////////////////////////////////////////////////////////////////////// +//CRC +px_uint32 PX_crc32( px_void *buffer, px_uint size); + +////////////////////////////////////////////////////////////////////////// +//Sum +px_uint32 PX_sum32(px_void *buffer, px_uint size); + +////////////////////////////////////////////////////////////////////////// +//maths +px_int PX_pow_ii(px_int i,px_int n); +px_double PX_pow_dd(px_double num,px_double m); +px_float PX_sqrt( px_float number ); +px_double PX_sqrtd( px_double number ); +px_float PX_SqrtRec( px_float number ); +px_double PX_ln(px_double __x); +px_double PX_log(px_double __x); +px_double PX_lg(px_double __x); +px_double PX_log10(px_double __x); + +#define PX_RadianToAngle(angle) ((angle)*PX_PI/180) +#define PX_AngleToRadian(radian) ((radian)*180/PX_PI) + +px_double PX_sind(px_double radius); +px_double PX_cosd(px_double radius); +px_float PX_sin_radian(px_float radius); +px_float PX_cos_radian(px_float radius); +px_float PX_tan_radian(px_float radius); +px_float PX_sin_angle(px_float angle); +px_float PX_cos_angle(px_float angle); +px_float PX_tan_angle(px_float angle); +px_double PX_atan(px_double x); +px_double PX_atan2(px_double y, px_double x); + +px_float PX_Point_sin(px_point v); +px_float PX_Point_cos(px_point v); + +#define PX_APO(x) ((px_int)((x)+0.5f)) +#define PX_ABS(x) ((x)>0?(x):-(x)) +#define PX_SGN(x) ((x)?((x)>0?1:-1):0) +#define PX_FRAC(x) ((x)-(px_int)(x)) +#define PX_TRUNC(x) ((px_int)(x)) + +////////////////////////////////////////////////////////////////////////// +//string to others + +px_uint PX_htoi(const px_char hex_str[]); +px_int PX_atoi(const px_char str[]); +px_float PX_atof(px_char fstr[]); +PX_RETURN_STRING PX_ftos(px_float f, int precision); +PX_RETURN_STRING PX_itos(px_int num,px_int radix); +px_void PX_AscToWord(const px_char *asc,px_word *u16); +px_int PX_ftoa(px_float f, char *outbuf, int maxlen, int precision); +px_int PX_itoa(px_int num,px_char *str,px_int MaxStrSize,px_int radix); +px_char *PX_strchr(const char *s,int ch); +px_char* PX_strstr(const char* dest, const char* src); + +/////////////////////////////////////////////////////////////////////////// +//rectangle circle +px_bool PX_isPointInCircle(px_point p,px_point circle,px_float radius); +px_bool PX_isPointInRect(px_point p,px_rect rect); +px_bool PX_isXYInRegion(px_float x,px_float y,px_float rectx,px_float recty,px_float width,px_float height); +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +//cross +px_bool PX_isLineCrossRect(px_point p1,px_point p2,px_rect rect,px_point *cp1,px_point *cp2); +px_bool PX_isRectCrossRect(px_rect rect1,px_rect rect2); +px_bool PX_isRectCrossCircle(px_rect rect1,px_point center,px_float radius); +px_bool PX_isCircleCrossCircle(px_point center1,px_float radius1,px_point center2,px_float radius2); + +////////////////////////////////////////////////////////////////////////// +px_double PX_Covariance(px_double x[],px_double y[],px_int n); +px_double PX_Variance(px_double x[],px_int n); + +////////////////////////////////////////////////////////////////////////// +//memory +void PX_memset(void *dst,px_byte byte,px_int size); +void PX_memdwordset(void *dst,px_dword dw,px_int count); +px_bool PX_memequ(const void *dst,const void *src,px_int size); +px_void PX_memcpy(px_void *dst,const px_void *src,px_int size); +px_void PX_strcpy(px_char *dst,const px_char *src,px_int size); +px_void PX_wstrcpy(px_word *dst,const px_word *src,px_int size); +px_void PX_strcat(px_char *src,const px_char *cat); +px_void PX_wstrcat(px_word *src,const px_word *cat); +px_void PX_strset(px_char *dst,const px_char *src); +px_int PX_strlen(const px_char *dst); +px_int PX_wstrlen(const px_word *dst); +px_int PX_strcmp(const px_char *str1, const px_char *str2); +px_bool PX_strequ(const px_char *src,const char *dst); +px_void PX_strupr(px_char *src); +px_void PX_strlwr(px_char *src); +px_bool PX_strIsNumeric(const px_char *str); +px_bool PX_strIsFloat(const px_char *str); +px_bool PX_strIsInt(const px_char *str); +px_bool PX_charIsNumeric(px_char ch); + +typedef enum +{ + PX_STRINGFORMAT_TYPE_INT, + PX_STRINGFORMAT_TYPE_FLOAT, + PX_STRINGFORMAT_TYPE_STRING, +}PX_STRINGFORMAT_TYPE; + +typedef struct +{ + PX_STRINGFORMAT_TYPE type; + union + { + px_int _int; + px_float _float; + const px_char *_pstring; + }; +}px_stringformat; + + +px_stringformat PX_STRINGFORMAT_INT(px_int _i); +px_stringformat PX_STRINGFORMAT_FLOAT(px_float _f); +px_stringformat PX_STRINGFORMAT_STRING(const px_char *_s); +px_int PX_sprintf8(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2,\ + px_stringformat _3,\ + px_stringformat _4,\ + px_stringformat _5,\ + px_stringformat _6,\ + px_stringformat _7,\ + px_stringformat _8\ + ); +px_int PX_sprintf7(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2,\ + px_stringformat _3,\ + px_stringformat _4,\ + px_stringformat _5,\ + px_stringformat _6,\ + px_stringformat _7 + ); +px_int PX_sprintf6(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2,\ + px_stringformat _3,\ + px_stringformat _4,\ + px_stringformat _5,\ + px_stringformat _6\ + ); +px_int PX_sprintf5(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2,\ + px_stringformat _3,\ + px_stringformat _4,\ + px_stringformat _5\ + ); +px_int PX_sprintf4(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2,\ + px_stringformat _3,\ + px_stringformat _4\ + ); +px_int PX_sprintf3(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2,\ + px_stringformat _3\ + ); +px_int PX_sprintf2(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1,\ + px_stringformat _2\ + ); +px_int PX_sprintf1(px_char *str,px_int str_size,const px_char fmt[],\ + px_stringformat _1\ + ); +px_int PX_sprintf0(px_char *str,px_int str_size,const px_char fmt[]); +/*px_int px_sprintf(px_char *str,px_int str_size,px_char fmt[],...);*/ +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +//matrix +void PX_MatrixZero(px_matrix *Mat); +void PX_MatrixIdentity(px_matrix *Mat); +px_matrix PX_MatrixMultiply(px_matrix Mat1,px_matrix Mat2); +px_matrix PX_MatrixAdd(px_matrix Mat1,px_matrix Mat2); +px_matrix PX_MatrixSub(px_matrix Mat1,px_matrix Mat2); +px_bool PX_MatrixEqual(px_matrix Mat1,px_matrix Mat2); +px_void PX_MatrixTranslation(px_matrix *mat,px_float x,px_float y,px_float z); +px_void PX_MatrixRotateX(px_matrix *mat,px_float Angle); +px_void PX_MatrixRotateY(px_matrix *mat,px_float Angle); +px_void PX_MatrixRotateZ(px_matrix *mat,px_float Angle); +px_void PX_MatrixRotateXRadian(px_matrix *mat,px_float rad); +px_void PX_MatrixRotateYRadian(px_matrix *mat,px_float rad); +px_void PX_MatrixRotateZRadian(px_matrix *mat,px_float rad); +px_void PX_MatrixScale(px_matrix *mat,px_float x,px_float y,px_float z); +px_bool PX_MatrixInverse(px_matrix *mat); +px_void PX_MatrixTranspose(px_matrix *matrix); +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +//color +px_color PX_COLOR(px_uchar a,px_uchar r,px_uchar g,px_uchar b); +px_void PX_ColorIncrease(px_color *color,px_uchar inc); +px_color PX_ColorAdd(px_color color1,px_color color2); +px_color PX_ColorSub(px_color color1,px_color color2); +px_color PX_ColorMul(px_color color1,px_double muls); +px_bool PX_ColorEqual(px_color color1,px_color color2); +////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////// +//point +px_point PX_POINT(px_float x,px_float y,px_float z); +px_point4D PX_POINT4D(px_float x,px_float y,px_float z); +px_point PX_PointRotate(px_point p,px_float angle); +px_float PX_PointDistance(px_point p1,px_point p2); + + +px_point PX_PointAdd(px_point p1,px_point p2); +px_point PX_PointSub(px_point p1,px_point p2); +px_point4D PX_Point4DSub(px_point4D p1,px_point4D p2); +px_point PX_PointMul(px_point p1,px_float m); +px_point PX_PointDiv(px_point p1,px_float m); +px_float PX_PointDot(px_point p1,px_point p2); +px_float PX_Point4DDot(px_point4D p1,px_point4D p2); +px_point PX_PointCross(px_point p1,px_point p2); +px_point4D PX_Point4DCross(px_point4D p1,px_point4D p2); +px_point PX_PointInverse(px_point p1); +px_float PX_PointMod(px_point p); +px_float PX_PointSquare(px_point p); +px_point PX_PointUnit(px_point p); +px_point4D PX_Point4DUnit(px_point4D p); +px_point PX_PointReflectX(px_point vector_refer,px_point respoint); + +px_point PX_PointMulMatrix(px_point p,px_matrix m); +px_point4D PX_Point4DMulMatrix(px_point4D p,px_matrix m); + + +////////////////////////////////////////////////////////////////////////// +//plane +px_plane PX_PLANE(px_point3D p,px_vector3D n); + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +//Rect +px_rect PX_RECT(px_float x,px_float y,px_float width,px_float height); +px_rect PX_RECTPOINT2(px_point p1,px_point p2); + + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +//complex +px_complex PX_complexBuild(px_float re,px_float im); +px_complex PX_complexAdd(px_complex a,px_complex b); +px_complex PX_complexMult(px_complex a,px_complex b); +px_double PX_complexMod(px_complex a); +px_complex PX_complexLog(px_complex a); +px_complex PX_complexExp(px_complex a); +px_complex PX_complexSin(px_complex a); + +////////////////////////////////////////////////////////////////////////// +//DFT/FFT +void PX_DFT(_IN px_complex x[],_OUT px_complex X[],px_int N); +void PX_DCT(_IN px_double x[],_OUT px_double X[],px_int N); +void PX_IDFT(_IN px_complex X[],_OUT px_complex x[],px_int N); +void PX_IDCT(_IN px_double x[],_OUT px_double X[],px_int N); +void PX_FFT(_IN px_complex x[],_OUT px_complex X[],px_int N); +void PX_IFFT(_IN px_complex X[],_OUT px_complex x[],px_int N); +void PX_FFT_2(_IN px_complex x[],_OUT px_complex X[],px_int N_N); +void PX_IFFT_2(_IN px_complex X[],_OUT px_complex x[],px_int N_N); +void PX_FFT_2_Shift(_IN px_complex _in[],_OUT px_complex _out[],px_int N_N); +void PX_FT_Symmetry(_IN px_complex x[],_OUT px_complex X[],px_int N); + +////////////////////////////////////////////////////////////////////////// +//cepstrum +typedef enum +{ + PX_CEPTRUM_TYPE_REAL, + PX_CEPSTRUM_TYPE_COMPLEX, +}PX_CEPSTRUM_TYPE; +void PX_Cepstrum(_IN px_complex x[],_OUT px_complex X[],px_int N,PX_CEPSTRUM_TYPE type); + +////////////////////////////////////////////////////////////////////////// +//zero-crossing rate,ZCR +px_double PX_ZeroCrossingRate(_IN px_double x[],px_int N); +px_double PX_ZeroCrossingRateComplex(_IN px_complex x[],px_int N); +////////////////////////////////////////////////////////////////////////// +//PitchEstimation +px_int PX_PitchEstimation(_IN px_complex x[],px_int N,px_int sampleRate,px_int low_Hz,px_int high_Hz); +////////////////////////////////////////////////////////////////////////// +//PreEmphasise +void PX_PreEmphasise(const px_double *data, int len, px_double *out, px_double preF);//0.9allocsize=init_size; + vec->nodesize=nodeSize; + vec->size=0; + vec->mp=mp; + + + if (init_size==0) + { + vec->data=PX_NULL; + return PX_TRUE; + } + + if(!(vec->data=MP_Malloc(mp,init_size*nodeSize))) + return PX_FALSE; + + return PX_TRUE; +} + + +px_bool PX_VectorSet(px_vector *vec,px_uint index,px_void *data) +{ + px_void *old; + px_uint allocsize=1; + if (index>(px_uint)vec->allocsize-1) + { + while(allocsize<=(px_uint)index) allocsize<<=1; + + old=vec->data; + vec->data=MP_Malloc(vec->mp,allocsize*vec->nodesize); + if (vec->data==PX_NULL) + { + return PX_FALSE; + } + PX_memcpy(vec->data,old,vec->allocsize*vec->nodesize); + vec->allocsize=allocsize; + MP_Free(vec->mp,old); + } + if (index>(px_uint)vec->size-1) + { + vec->size=index+1; + } + PX_memcpy((px_byte *)vec->data+index*vec->nodesize,data,vec->nodesize); + return PX_TRUE; +} + + +px_bool PX_VectorPushback(px_vector *vec,px_void *data) +{ + px_void *old; + if (vec->sizeallocsize) + { + PX_memcpy((px_byte *)vec->data+vec->size*vec->nodesize,data,vec->nodesize); + vec->size++; + } + else + { + px_int allocSize=vec->allocsize; + if (allocSize==0) + { + allocSize=2; + } + else + { + allocSize=vec->allocsize*2; + } + + old=vec->data; + vec->data=MP_Malloc(vec->mp,allocSize*vec->nodesize); + if (vec->data==PX_NULL) + { + return PX_FALSE; + } + PX_memcpy(vec->data,old,vec->allocsize*vec->nodesize); + vec->allocsize=allocSize; + PX_memcpy((px_byte *)vec->data+vec->size*vec->nodesize,data,vec->nodesize); + vec->size++; + if(old) + MP_Free(vec->mp,old); + } + return PX_TRUE; +} + +px_bool PX_VectorErase(px_vector *vec,px_int index) +{ + if (index>=vec->size) + { + PX_ERROR("Vector Erase Error!"); + return PX_FALSE; + } + PX_memcpy((px_byte *)vec->data+index*vec->nodesize,(px_byte *)vec->data+(index+1)*vec->nodesize,(vec->size-index-1)*vec->nodesize); + vec->size--; + return PX_TRUE; +} + +px_bool PX_VectorPop(px_vector *vec) +{ + vec->size--; + return PX_TRUE; +} + +px_bool PX_VectorAllocSize(px_vector *vec,px_int size) +{ + if (sizesize) + { + return PX_FALSE; + } + vec->size=size; + return PX_TRUE; +} + + diff --git a/code/PainterEngine/Core/PX_Vector.h b/code/PainterEngine/Core/PX_Vector.h new file mode 100644 index 0000000000000000000000000000000000000000..799d5d7bb25654c026c6434ab7fc46ba00804fab --- /dev/null +++ b/code/PainterEngine/Core/PX_Vector.h @@ -0,0 +1,25 @@ +#ifndef __PX_VECTOR_H +#define __PX_VECTOR_H +#include "PX_MemoryPool.h" +typedef struct __px_vector +{ + px_void *data; + px_int nodesize; + px_int size; + px_int allocsize; + px_memorypool *mp; +}px_vector; + +px_bool PX_VectorInit(px_memorypool *mp,px_vector *vec,px_int nodeSize,px_int init_size); +px_bool PX_VectorSet(px_vector *vec,px_uint index,px_void *data); +px_bool PX_VectorAllocSize(px_vector *vec,px_int size); +px_bool PX_VectorPushback(px_vector *vec,px_void *data); +px_bool PX_VectorErase(px_vector *vec,px_int index); +px_bool PX_VectorPop(px_vector *vec); +#define PX_VectorSize(x) ((x)->size) +#define PX_VECTORAT(t,vec,i) ((t *)((px_byte *)((vec)->data)+(vec)->nodesize*(i))) +#define PX_VECTORLAST(t,vec) PX_VECTORAT(t,vec,(vec)->size-1) +#define PX_VectorFree(x) (MP_Free((x)->mp,(x)->data)) +#define PX_VectorClear(vec) ((vec)->size=0) + +#endif diff --git a/code/PainterEngine/Core/PX_WAVE.h b/code/PainterEngine/Core/PX_WAVE.h new file mode 100644 index 0000000000000000000000000000000000000000..e722e1f10ff0ed226e0ee283c452ef329fe12a3d --- /dev/null +++ b/code/PainterEngine/Core/PX_WAVE.h @@ -0,0 +1,44 @@ +#ifndef PX_WAVE_H +#define PX_WAVE_H +#include "PX_Typedef.h" + +typedef struct +{ + px_byte szRiffId[4]; + px_dword dwRiffSize; + px_byte szRiffFormat[4]; +}PX_WAVE_RIFF_HEADER; + +typedef struct +{ + px_word wFormatTag; + px_word wChannels; + px_dword dwSamplesPerSec; + px_dword dwAvgBytesPerSec; + px_word wBlockAlign; + px_word wBitsPerSample; +}PX_WAVE_FORMAT; + +typedef struct +{ + px_byte szFmtID[4]; // 'f','m','t',' ' please note the + // space character at the fourth location. + px_dword dwFmtSize; + PX_WAVE_FORMAT wavFormat; +}PX_WAVE_FMT_BLOCK; + + +typedef struct +{ + px_byte szDataID[4]; + px_dword dwDataSize; +}PX_WAVE_DATA_BLOCK; + +px_uint PX_WaveGetChannel(px_byte *buffer,px_int size); +px_bool PX_WaveVerify(px_byte *buffer,px_int size); +px_uint PX_WaveGetPCMSize(px_byte *buffer,px_int size); +px_byte* PX_WaveGetPCMDataPtr(px_int index,px_byte *buffer,px_int size); + +#endif + + diff --git a/code/PainterEngine/Core/PX_Wave.c b/code/PainterEngine/Core/PX_Wave.c new file mode 100644 index 0000000000000000000000000000000000000000..b76876cd3256a65225b231f6be96d1ceb6512fdf --- /dev/null +++ b/code/PainterEngine/Core/PX_Wave.c @@ -0,0 +1,130 @@ +#include "PX_WAVE.h" + +px_uint PX_WaveGetPCMSize(px_byte *buffer,px_int size) +{ + px_int offset=0,pcmSize; + PX_WAVE_DATA_BLOCK *pBlock; + PX_WAVE_RIFF_HEADER *pHeader=(PX_WAVE_RIFF_HEADER *)buffer; + PX_WAVE_FMT_BLOCK *pfmt_block; + if (!PX_WaveVerify(buffer,size)) + { + return 0; + } + offset+=sizeof(PX_WAVE_RIFF_HEADER); + pfmt_block=(PX_WAVE_FMT_BLOCK *)(buffer+sizeof(PX_WAVE_RIFF_HEADER)); + offset+=8; + offset+=pfmt_block->dwFmtSize; + pcmSize=0; + while (offset+(px_int)sizeof(PX_WAVE_DATA_BLOCK)szDataID,"data",4)) + { + offset+=pBlock->dwDataSize+sizeof(PX_WAVE_DATA_BLOCK); + continue; + } + offset+=sizeof(PX_WAVE_DATA_BLOCK); + offset+=pBlock->dwDataSize; + pcmSize+=pBlock->dwDataSize; + } + return pcmSize; +} + +px_byte* PX_WaveGetPCMDataPtr(px_int index,px_byte *data,px_int datasize) +{ + if (PX_WaveVerify(data,datasize)) + { + px_uint offset=0,pcmSize; + pcmSize=PX_WaveGetPCMSize(data,datasize); + + if (pcmSize!=0) + { + PX_WAVE_DATA_BLOCK *pBlock; + PX_WAVE_RIFF_HEADER *pHeader=(PX_WAVE_RIFF_HEADER *)data; + PX_WAVE_FMT_BLOCK *pfmt_block; + + pfmt_block=(PX_WAVE_FMT_BLOCK *)(data+sizeof(PX_WAVE_RIFF_HEADER)); + offset+=sizeof(PX_WAVE_RIFF_HEADER); + offset+=8; + offset+=pfmt_block->dwFmtSize; + pcmSize=0; + + while (offset<(px_uint)datasize) + { + pBlock=(PX_WAVE_DATA_BLOCK*)(data+offset); + if(!PX_memequ(pBlock->szDataID,"data",4)) + { + offset+=pBlock->dwDataSize+sizeof(PX_WAVE_DATA_BLOCK); + continue; + } + offset+=sizeof(PX_WAVE_DATA_BLOCK); + if (index==0) + { + return data+offset; + } + else + { + offset+=pBlock->dwDataSize; + } + } + return PX_NULL; + } + else + return PX_NULL; + } + else + { + return PX_NULL; + } +} + +px_bool PX_WaveVerify(px_byte *buffer,px_int size) +{ + PX_WAVE_RIFF_HEADER *pHeader=(PX_WAVE_RIFF_HEADER *)buffer; + PX_WAVE_FMT_BLOCK *pfmt_block; + if (sizeszRiffId,"RIFF",4)) + { + return PX_FALSE; + } + if (!PX_memequ(pHeader->szRiffFormat,"WAVE",4)) + { + return PX_FALSE; + } + pfmt_block=(PX_WAVE_FMT_BLOCK *)(buffer+sizeof(PX_WAVE_RIFF_HEADER)); + if (!PX_memequ(pfmt_block->szFmtID,"fmt",3)) + { + return PX_FALSE; + } + if (pfmt_block->wavFormat.wChannels!=1&&pfmt_block->wavFormat.wChannels!=2) + { + return PX_FALSE; + } + if (pfmt_block->wavFormat.wBitsPerSample!=16) + { + return PX_FALSE; + } + if (pfmt_block->wavFormat.dwSamplesPerSec!=44100) + { + return PX_FALSE; + } + if (pfmt_block->wavFormat.wFormatTag!=0x0001) + { + return PX_FALSE; + } + return PX_TRUE; +} + +px_uint PX_WaveGetChannel(px_byte *buffer,px_int size) +{ + PX_WAVE_FMT_BLOCK *pfmt_block; + if (!PX_WaveVerify(buffer,size)) + { + return 0; + } + pfmt_block=(PX_WAVE_FMT_BLOCK *)(buffer+sizeof(PX_WAVE_RIFF_HEADER)); + return pfmt_block->wavFormat.wChannels; +} diff --git a/code/PainterEngine/Core/PX_curve25519.c b/code/PainterEngine/Core/PX_curve25519.c new file mode 100644 index 0000000000000000000000000000000000000000..2122e56ce218e3a4570d64b83bc3aa292ee13692 --- /dev/null +++ b/code/PainterEngine/Core/PX_curve25519.c @@ -0,0 +1,867 @@ +/* Copyright 2008, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * curve25519-donna: Curve25519 elliptic curve, public key function + * + * http://code.google.com/p/curve25519-donna/ + * + * Adam Langley + * + * Derived from public domain C code by Daniel J. Bernstein + * + * More information about curve25519 can be found here + * http://cr.yp.to/ecdh.html + * + * djb's sample implementation of curve25519 is written in a special assembly + * language called qhasm and uses the floating point registers. + * + * This is, almost, a clean room reimplementation from the curve25519 paper. It + * uses many of the tricks described therein. Only the crecip function is taken + * from the sample implementation. + + To generate a private key, generate 32 random bytes and: + px_byte mysecret[32]; + mysecret[0] &= 248; + mysecret[31] &= 127; + mysecret[31] |= 64; + To generate the public key, just do: + + static const uint8_t basepoint[32] = {9}; + curve25519_donna(mypublic, mysecret, basepoint); + To generate a shared key do: + + uint8_t shared_key[32]; + curve25519_donna(shared_key, mysecret, theirpublic); + + + */ + +#include "PX_curve25519.h" + +typedef px_int64 limb; + +/* Field element representation: + * + * Field elements are written as an array of signed, 64-bit limbs, least + * significant first. The value of the field element is: + * x[0] + 2^26·x[1] + x^51·x[2] + 2^102·x[3] + ... + * + * i.e. the limbs are 26, 25, 26, 25, ... bits wide. */ + +/* Sum two numbers: output += in */ +static void fsum(limb *output, const limb *in) { + unsigned i; + for (i = 0; i < 10; i += 2) { + output[0+i] = output[0+i] + in[0+i]; + output[1+i] = output[1+i] + in[1+i]; + } +} + +/* Find the difference of two numbers: output = in - output + * (note the order of the arguments!). */ +static void fdifference(limb *output, const limb *in) { + unsigned i; + for (i = 0; i < 10; ++i) { + output[i] = in[i] - output[i]; + } +} + +/* Multiply a number by a scalar: output = in * scalar */ +static void fscalar_product(limb *output, const limb *in, const limb scalar) { + unsigned i; + for (i = 0; i < 10; ++i) { + output[i] = in[i] * scalar; + } +} + +/* Multiply two numbers: output = in2 * in + * + * output must be distinct to both inputs. The inputs are reduced coefficient + * form, the output is not. + * + * output[x] <= 14 * the largest product of the input limbs. */ +static void fproduct(limb *output, const limb *in2, const limb *in) { + output[0] = ((limb) ((px_int32) in2[0])) * ((px_int32) in[0]); + output[1] = ((limb) ((px_int32) in2[0])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[0]); + output[2] = 2 * ((limb) ((px_int32) in2[1])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[0]); + output[3] = ((limb) ((px_int32) in2[1])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[0]); + output[4] = ((limb) ((px_int32) in2[2])) * ((px_int32) in[2]) + + 2 * (((limb) ((px_int32) in2[1])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[1])) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[0]); + output[5] = ((limb) ((px_int32) in2[2])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[0]); + output[6] = 2 * (((limb) ((px_int32) in2[3])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[1])) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[0]); + output[7] = ((limb) ((px_int32) in2[3])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[0]); + output[8] = ((limb) ((px_int32) in2[4])) * ((px_int32) in[4]) + + 2 * (((limb) ((px_int32) in2[3])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[1])) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[0]); + output[9] = ((limb) ((px_int32) in2[4])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in2[0])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[0]); + output[10] = 2 * (((limb) ((px_int32) in2[5])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[1])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[1])) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[2]); + output[11] = ((limb) ((px_int32) in2[5])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in2[2])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[2]); + output[12] = ((limb) ((px_int32) in2[6])) * ((px_int32) in[6]) + + 2 * (((limb) ((px_int32) in2[5])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[3])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[3])) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[4]); + output[13] = ((limb) ((px_int32) in2[6])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[7])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in2[4])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[4]); + output[14] = 2 * (((limb) ((px_int32) in2[7])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[5])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[5])) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[6]); + output[15] = ((limb) ((px_int32) in2[7])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in2[8])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in2[6])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[6]); + output[16] = ((limb) ((px_int32) in2[8])) * ((px_int32) in[8]) + + 2 * (((limb) ((px_int32) in2[7])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[7])); + output[17] = ((limb) ((px_int32) in2[8])) * ((px_int32) in[9]) + + ((limb) ((px_int32) in2[9])) * ((px_int32) in[8]); + output[18] = 2 * ((limb) ((px_int32) in2[9])) * ((px_int32) in[9]); +} + +/* Reduce a long form to a short form by taking the input mod 2^255 - 19. + * + * On entry: |output[i]| < 14*2^54 + * On exit: |output[0..8]| < 280*2^54 */ +static void freduce_degree(limb *output) { + /* Each of these shifts and adds ends up multiplying the value by 19. + * + * For output[0..8], the absolute entry value is < 14*2^54 and we add, at + * most, 19*14*2^54 thus, on exit, |output[0..8]| < 280*2^54. */ + output[8] += output[18] << 4; + output[8] += output[18] << 1; + output[8] += output[18]; + output[7] += output[17] << 4; + output[7] += output[17] << 1; + output[7] += output[17]; + output[6] += output[16] << 4; + output[6] += output[16] << 1; + output[6] += output[16]; + output[5] += output[15] << 4; + output[5] += output[15] << 1; + output[5] += output[15]; + output[4] += output[14] << 4; + output[4] += output[14] << 1; + output[4] += output[14]; + output[3] += output[13] << 4; + output[3] += output[13] << 1; + output[3] += output[13]; + output[2] += output[12] << 4; + output[2] += output[12] << 1; + output[2] += output[12]; + output[1] += output[11] << 4; + output[1] += output[11] << 1; + output[1] += output[11]; + output[0] += output[10] << 4; + output[0] += output[10] << 1; + output[0] += output[10]; +} + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +/* return v / 2^26, using only shifts and adds. + * + * On entry: v can take any value. */ +static limb div_by_2_26(const limb v) +{ + /* High word of v; no shift needed. */ + const px_dword highword = (px_dword) (((px_uint64) v) >> 32); + /* Set to all 1s if v was negative; else set to 0s. */ + const px_int32 sign = ((px_int32) highword) >> 31; + /* Set to 0x3ffffff if v was negative; else set to 0. */ + const px_int32 roundoff = ((px_dword) sign) >> 6; + /* Should return v / (1<<26) */ + return (v + roundoff) >> 26; +} + +/* return v / (2^25), using only shifts and adds. + * + * On entry: v can take any value. */ +static limb div_by_2_25(const limb v) +{ + /* High word of v; no shift needed*/ + const px_dword highword = (px_dword) (((px_uint64) v) >> 32); + /* Set to all 1s if v was negative; else set to 0s. */ + const px_int32 sign = ((px_int32) highword) >> 31; + /* Set to 0x1ffffff if v was negative; else set to 0. */ + const px_int32 roundoff = ((px_dword) sign) >> 7; + /* Should return v / (1<<25) */ + return (v + roundoff) >> 25; +} + +/* Reduce all coefficients of the short form input so that |x| < 2^26. + * + * On entry: |output[i]| < 280*2^54 */ +static void freduce_coefficients(limb *output) { + unsigned i; + + output[10] = 0; + + for (i = 0; i < 10; i += 2) { + limb over = div_by_2_26(output[i]); + /* The entry condition (that |output[i]| < 280*2^54) means that over is, at + * most, 280*2^28 in the first iteration of this loop. This is added to the + * next limb and we can approximate the resulting bound of that limb by + * 281*2^54. */ + output[i] -= over << 26; + output[i+1] += over; + + /* For the first iteration, |output[i+1]| < 281*2^54, thus |over| < + * 281*2^29. When this is added to the next limb, the resulting bound can + * be approximated as 281*2^54. + * + * For subsequent iterations of the loop, 281*2^54 remains a conservative + * bound and no overflow occurs. */ + over = div_by_2_25(output[i+1]); + output[i+1] -= over << 25; + output[i+2] += over; + } + /* Now |output[10]| < 281*2^29 and all other coefficients are reduced. */ + output[0] += output[10] << 4; + output[0] += output[10] << 1; + output[0] += output[10]; + + output[10] = 0; + + /* Now output[1..9] are reduced, and |output[0]| < 2^26 + 19*281*2^29 + * So |over| will be no more than 2^16. */ + { + limb over = div_by_2_26(output[0]); + output[0] -= over << 26; + output[1] += over; + } + + /* Now output[0,2..9] are reduced, and |output[1]| < 2^25 + 2^16 < 2^26. The + * bound on |output[1]| is sufficient to meet our needs. */ +} + +/* A helpful wrapper around fproduct: output = in * in2. + * + * On entry: |in[i]| < 2^27 and |in2[i]| < 2^27. + * + * output must be distinct to both inputs. The output is reduced degree + * (indeed, one need only provide storage for 10 limbs) and |output[i]| < 2^26. */ +static void +fmul(limb *output, const limb *in, const limb *in2) { + limb t[19]; + fproduct(t, in, in2); + /* |t[i]| < 14*2^54 */ + freduce_degree(t); + freduce_coefficients(t); + /* |t[i]| < 2^26 */ + PX_memcpy(output, t, sizeof(limb) * 10); +} + +/* Square a number: output = in**2 + * + * output must be distinct from the input. The inputs are reduced coefficient + * form, the output is not. + * + * output[x] <= 14 * the largest product of the input limbs. */ +static void fsquare_inner(limb *output, const limb *in) { + output[0] = ((limb) ((px_int32) in[0])) * ((px_int32) in[0]); + output[1] = 2 * ((limb) ((px_int32) in[0])) * ((px_int32) in[1]); + output[2] = 2 * (((limb) ((px_int32) in[1])) * ((px_int32) in[1]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[2])); + output[3] = 2 * (((limb) ((px_int32) in[1])) * ((px_int32) in[2]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[3])); + output[4] = ((limb) ((px_int32) in[2])) * ((px_int32) in[2]) + + 4 * ((limb) ((px_int32) in[1])) * ((px_int32) in[3]) + + 2 * ((limb) ((px_int32) in[0])) * ((px_int32) in[4]); + output[5] = 2 * (((limb) ((px_int32) in[2])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in[1])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[5])); + output[6] = 2 * (((limb) ((px_int32) in[3])) * ((px_int32) in[3]) + + ((limb) ((px_int32) in[2])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[6]) + + 2 * ((limb) ((px_int32) in[1])) * ((px_int32) in[5])); + output[7] = 2 * (((limb) ((px_int32) in[3])) * ((px_int32) in[4]) + + ((limb) ((px_int32) in[2])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in[1])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[7])); + output[8] = ((limb) ((px_int32) in[4])) * ((px_int32) in[4]) + + 2 * (((limb) ((px_int32) in[2])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[8]) + + 2 * (((limb) ((px_int32) in[1])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[3])) * ((px_int32) in[5]))); + output[9] = 2 * (((limb) ((px_int32) in[4])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in[3])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in[2])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[1])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in[0])) * ((px_int32) in[9])); + output[10] = 2 * (((limb) ((px_int32) in[5])) * ((px_int32) in[5]) + + ((limb) ((px_int32) in[4])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in[2])) * ((px_int32) in[8]) + + 2 * (((limb) ((px_int32) in[3])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[1])) * ((px_int32) in[9]))); + output[11] = 2 * (((limb) ((px_int32) in[5])) * ((px_int32) in[6]) + + ((limb) ((px_int32) in[4])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[3])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in[2])) * ((px_int32) in[9])); + output[12] = ((limb) ((px_int32) in[6])) * ((px_int32) in[6]) + + 2 * (((limb) ((px_int32) in[4])) * ((px_int32) in[8]) + + 2 * (((limb) ((px_int32) in[5])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[3])) * ((px_int32) in[9]))); + output[13] = 2 * (((limb) ((px_int32) in[6])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[5])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in[4])) * ((px_int32) in[9])); + output[14] = 2 * (((limb) ((px_int32) in[7])) * ((px_int32) in[7]) + + ((limb) ((px_int32) in[6])) * ((px_int32) in[8]) + + 2 * ((limb) ((px_int32) in[5])) * ((px_int32) in[9])); + output[15] = 2 * (((limb) ((px_int32) in[7])) * ((px_int32) in[8]) + + ((limb) ((px_int32) in[6])) * ((px_int32) in[9])); + output[16] = ((limb) ((px_int32) in[8])) * ((px_int32) in[8]) + + 4 * ((limb) ((px_int32) in[7])) * ((px_int32) in[9]); + output[17] = 2 * ((limb) ((px_int32) in[8])) * ((px_int32) in[9]); + output[18] = 2 * ((limb) ((px_int32) in[9])) * ((px_int32) in[9]); +} + +/* fsquare sets output = in^2. + * + * On entry: The |in| argument is in reduced coefficients form and |in[i]| < + * 2^27. + * + * On exit: The |output| argument is in reduced coefficients form (indeed, one + * need only provide storage for 10 limbs) and |out[i]| < 2^26. */ +static void +fsquare(limb *output, const limb *in) { + limb t[19]; + fsquare_inner(t, in); + /* |t[i]| < 14*2^54 because the largest product of two limbs will be < + * 2^(27+27) and fsquare_inner adds together, at most, 14 of those + * products. */ + freduce_degree(t); + freduce_coefficients(t); + /* |t[i]| < 2^26 */ + PX_memcpy(output, t, sizeof(limb) * 10); +} + +/* Take a little-endian, 32-byte number and expand it into polynomial form */ +static void +fexpand(limb *output, const px_byte *input) { +#define F(n,start,shift,mask) \ + output[n] = ((((limb) input[start + 0]) | \ + ((limb) input[start + 1]) << 8 | \ + ((limb) input[start + 2]) << 16 | \ + ((limb) input[start + 3]) << 24) >> shift) & mask; + F(0, 0, 0, 0x3ffffff); + F(1, 3, 2, 0x1ffffff); + F(2, 6, 3, 0x3ffffff); + F(3, 9, 5, 0x1ffffff); + F(4, 12, 6, 0x3ffffff); + F(5, 16, 0, 0x1ffffff); + F(6, 19, 1, 0x3ffffff); + F(7, 22, 3, 0x1ffffff); + F(8, 25, 4, 0x3ffffff); + F(9, 28, 6, 0x1ffffff); +#undef F +} + +#if (-32 >> 1) != -16 +#error "This code only works when >> does sign-extension on negative numbers" +#endif + +/* s32_eq returns 0xffffffff iff a == b and zero otherwise. */ +static px_int32 s32_eq(px_int32 a, px_int32 b) { + a = ~(a ^ b); + a &= a << 16; + a &= a << 8; + a &= a << 4; + a &= a << 2; + a &= a << 1; + return a >> 31; +} + +/* s32_gte returns 0xffffffff if a >= b and zero otherwise, where a and b are + * both non-negative. */ +static px_int32 s32_gte(px_int32 a, px_int32 b) { + a -= b; + /* a >= 0 iff a >= b. */ + return ~(a >> 31); +} + +/* Take a fully reduced polynomial form number and contract it into a + * little-endian, 32-byte array. + * + * On entry: |input_limbs[i]| < 2^26 */ +static void +fcontract(px_byte *output, limb *input_limbs) { + px_int i; + px_int j; + px_int32 input[10]; + px_int32 mask; + + /* |input_limbs[i]| < 2^26, so it's valid to convert to an s32. */ + for (i = 0; i < 10; i++) { + input[i] = (px_int32)input_limbs[i]; + } + + for (j = 0; j < 2; ++j) { + for (i = 0; i < 9; ++i) { + if ((i & 1) == 1) { + /* This calculation is a time-invariant way to make input[i] + * non-negative by borrowing from the next-larger limb. */ + const px_int32 mask = input[i] >> 31; + const px_int32 carry = -((input[i] & mask) >> 25); + input[i] = input[i] + (carry << 25); + input[i+1] = input[i+1] - carry; + } else { + const px_int32 mask = input[i] >> 31; + const px_int32 carry = -((input[i] & mask) >> 26); + input[i] = input[i] + (carry << 26); + input[i+1] = input[i+1] - carry; + } + } + + /* There's no greater limb for input[9] to borrow from, but we can multiply + * by 19 and borrow from input[0], which is valid mod 2^255-19. */ + { + const px_int32 mask = input[9] >> 31; + const px_int32 carry = -((input[9] & mask) >> 25); + input[9] = input[9] + (carry << 25); + input[0] = input[0] - (carry * 19); + } + + /* After the first iteration, input[1..9] are non-negative and fit within + * 25 or 26 bits, depending on position. However, input[0] may be + * negative. */ + } + + /* The first borrow-propagation pass above ended with every limb + except (possibly) input[0] non-negative. + + If input[0] was negative after the first pass, then it was because of a + carry from input[9]. On entry, input[9] < 2^26 so the carry was, at most, + one, since (2**26-1) >> 25 = 1. Thus input[0] >= -19. + + In the second pass, each limb is decreased by at most one. Thus the second + borrow-propagation pass could only have wrapped around to decrease + input[0] again if the first pass left input[0] negative *and* input[1] + through input[9] were all zero. In that case, input[1] is now 2^25 - 1, + and this last borrow-propagation step will leave input[1] non-negative. */ + { + const px_int32 mask = input[0] >> 31; + const px_int32 carry = -((input[0] & mask) >> 26); + input[0] = input[0] + (carry << 26); + input[1] = input[1] - carry; + } + + /* All input[i] are now non-negative. However, there might be values between + * 2^25 and 2^26 in a limb which is, nominally, 25 bits wide. */ + for (j = 0; j < 2; j++) { + for (i = 0; i < 9; i++) { + if ((i & 1) == 1) { + const px_int32 carry = input[i] >> 25; + input[i] &= 0x1ffffff; + input[i+1] += carry; + } else { + const px_int32 carry = input[i] >> 26; + input[i] &= 0x3ffffff; + input[i+1] += carry; + } + } + + { + const px_int32 carry = input[9] >> 25; + input[9] &= 0x1ffffff; + input[0] += 19*carry; + } + } + + /* If the first carry-chain pass, just above, ended up with a carry from + * input[9], and that caused input[0] to be out-of-bounds, then input[0] was + * < 2^26 + 2*19, because the carry was, at most, two. + * + * If the second pass carried from input[9] again then input[0] is < 2*19 and + * the input[9] -> input[0] carry didn't push input[0] out of bounds. */ + + /* It still remains the case that input might be between 2^255-19 and 2^255. + * In this case, input[1..9] must take their maximum value and input[0] must + * be >= (2^255-19) & 0x3ffffff, which is 0x3ffffed. */ + mask = s32_gte(input[0], 0x3ffffed); + for (i = 1; i < 10; i++) { + if ((i & 1) == 1) { + mask &= s32_eq(input[i], 0x1ffffff); + } else { + mask &= s32_eq(input[i], 0x3ffffff); + } + } + + /* mask is either 0xffffffff (if input >= 2^255-19) and zero otherwise. Thus + * this conditionally subtracts 2^255-19. */ + input[0] -= mask & 0x3ffffed; + + for (i = 1; i < 10; i++) { + if ((i & 1) == 1) { + input[i] -= mask & 0x1ffffff; + } else { + input[i] -= mask & 0x3ffffff; + } + } + + input[1] <<= 2; + input[2] <<= 3; + input[3] <<= 5; + input[4] <<= 6; + input[6] <<= 1; + input[7] <<= 3; + input[8] <<= 4; + input[9] <<= 6; +#define F(i, s) \ + output[s+0] |= input[i] & 0xff; \ + output[s+1] = (input[i] >> 8) & 0xff; \ + output[s+2] = (input[i] >> 16) & 0xff; \ + output[s+3] = (input[i] >> 24) & 0xff; + output[0] = 0; + output[16] = 0; + F(0,0); + F(1,3); + F(2,6); + F(3,9); + F(4,12); + F(5,16); + F(6,19); + F(7,22); + F(8,25); + F(9,28); +#undef F +} + +/* Input: Q, Q', Q-Q' + * Output: 2Q, Q+Q' + * + * x2 z3: long form + * x3 z3: long form + * x z: short form, destroyed + * xprime zprime: short form, destroyed + * qmqp: short form, preserved + * + * On entry and exit, the absolute value of the limbs of all inputs and outputs + * are < 2^26. */ +static void fmonty(limb *x2, limb *z2, /* output 2Q */ + limb *x3, limb *z3, /* output Q + Q' */ + limb *x, limb *z, /* input Q */ + limb *xprime, limb *zprime, /* input Q' */ + const limb *qmqp /* input Q - Q' */) { + limb origx[10], origxprime[10], zzz[19], xx[19], zz[19], xxprime[19], + zzprime[19], zzzprime[19], xxxprime[19]; + + PX_memcpy(origx, x, 10 * sizeof(limb)); + fsum(x, z); + /* |x[i]| < 2^27 */ + fdifference(z, origx); /* does x - z */ + /* |z[i]| < 2^27 */ + + PX_memcpy(origxprime, xprime, sizeof(limb) * 10); + fsum(xprime, zprime); + /* |xprime[i]| < 2^27 */ + fdifference(zprime, origxprime); + /* |zprime[i]| < 2^27 */ + fproduct(xxprime, xprime, z); + /* |xxprime[i]| < 14*2^54: the largest product of two limbs will be < + * 2^(27+27) and fproduct adds together, at most, 14 of those products. + * (Approximating that to 2^58 doesn't work out.) */ + fproduct(zzprime, x, zprime); + /* |zzprime[i]| < 14*2^54 */ + freduce_degree(xxprime); + freduce_coefficients(xxprime); + /* |xxprime[i]| < 2^26 */ + freduce_degree(zzprime); + freduce_coefficients(zzprime); + /* |zzprime[i]| < 2^26 */ + PX_memcpy(origxprime, xxprime, sizeof(limb) * 10); + fsum(xxprime, zzprime); + /* |xxprime[i]| < 2^27 */ + fdifference(zzprime, origxprime); + /* |zzprime[i]| < 2^27 */ + fsquare(xxxprime, xxprime); + /* |xxxprime[i]| < 2^26 */ + fsquare(zzzprime, zzprime); + /* |zzzprime[i]| < 2^26 */ + fproduct(zzprime, zzzprime, qmqp); + /* |zzprime[i]| < 14*2^52 */ + freduce_degree(zzprime); + freduce_coefficients(zzprime); + /* |zzprime[i]| < 2^26 */ + PX_memcpy(x3, xxxprime, sizeof(limb) * 10); + PX_memcpy(z3, zzprime, sizeof(limb) * 10); + + fsquare(xx, x); + /* |xx[i]| < 2^26 */ + fsquare(zz, z); + /* |zz[i]| < 2^26 */ + fproduct(x2, xx, zz); + /* |x2[i]| < 14*2^52 */ + freduce_degree(x2); + freduce_coefficients(x2); + /* |x2[i]| < 2^26 */ + fdifference(zz, xx); // does zz = xx - zz + /* |zz[i]| < 2^27 */ + PX_memset(zzz + 10, 0, sizeof(limb) * 9); + fscalar_product(zzz, zz, 121665); + /* |zzz[i]| < 2^(27+17) */ + /* No need to call freduce_degree here: + fscalar_product doesn't increase the degree of its input. */ + freduce_coefficients(zzz); + /* |zzz[i]| < 2^26 */ + fsum(zzz, xx); + /* |zzz[i]| < 2^27 */ + fproduct(z2, zz, zzz); + /* |z2[i]| < 14*2^(26+27) */ + freduce_degree(z2); + freduce_coefficients(z2); + /* |z2|i| < 2^26 */ +} + +/* Conditionally swap two reduced-form limb arrays if 'iswap' is 1, but leave + * them unchanged if 'iswap' is 0. Runs in data-invariant time to avoid + * side-channel attacks. + * + * NOTE that this function requires that 'iswap' be 1 or 0; other values give + * wrong results. Also, the two limb arrays must be in reduced-coefficient, + * reduced-degree form: the values in a[10..19] or b[10..19] aren't swapped, + * and all all values in a[0..9],b[0..9] must have magnitude less than + * INT32_MAX. */ +static void +swap_conditional(limb a[19], limb b[19], limb iswap) { + unsigned i; + const px_int32 swap = (px_int32) -iswap; + + for (i = 0; i < 10; ++i) { + const px_int32 x = swap & ( ((px_int32)a[i]) ^ ((px_int32)b[i]) ); + a[i] = ((px_int32)a[i]) ^ x; + b[i] = ((px_int32)b[i]) ^ x; + } +} + +/* Calculates nQ where Q is the x-coordinate of a point on the curve + * + * resultx/resultz: the x coordinate of the resulting curve point (short form) + * n: a little endian, 32-byte number + * q: a point of the curve (short form) */ +static void +cmult(limb *resultx, limb *resultz, const px_byte *n, const limb *q) { + limb a[19] = {0}, b[19] = {1}, c[19] = {1}, d[19] = {0}; + limb *nqpqx = a, *nqpqz = b, *nqx = c, *nqz = d, *t; + limb e[19] = {0}, f[19] = {1}, g[19] = {0}, h[19] = {1}; + limb *nqpqx2 = e, *nqpqz2 = f, *nqx2 = g, *nqz2 = h; + + unsigned i, j; + + PX_memcpy(nqpqx, (void *)q, sizeof(limb) * 10); + + for (i = 0; i < 32; ++i) { + px_byte byte = n[31 - i]; + for (j = 0; j < 8; ++j) { + const limb bit = byte >> 7; + + swap_conditional(nqx, nqpqx, bit); + swap_conditional(nqz, nqpqz, bit); + fmonty(nqx2, nqz2, + nqpqx2, nqpqz2, + nqx, nqz, + nqpqx, nqpqz, + q); + swap_conditional(nqx2, nqpqx2, bit); + swap_conditional(nqz2, nqpqz2, bit); + + t = nqx; + nqx = nqx2; + nqx2 = t; + t = nqz; + nqz = nqz2; + nqz2 = t; + t = nqpqx; + nqpqx = nqpqx2; + nqpqx2 = t; + t = nqpqz; + nqpqz = nqpqz2; + nqpqz2 = t; + + byte <<= 1; + } + } + + PX_memcpy(resultx, nqx, sizeof(limb) * 10); + PX_memcpy(resultz, nqz, sizeof(limb) * 10); +} + +// ----------------------------------------------------------------------------- +// Shamelessly copied from djb's code +// ----------------------------------------------------------------------------- +static void +crecip(limb *out, const limb *z) { + limb z2[10]; + limb z9[10]; + limb z11[10]; + limb z2_5_0[10]; + limb z2_10_0[10]; + limb z2_20_0[10]; + limb z2_50_0[10]; + limb z2_100_0[10]; + limb t0[10]; + limb t1[10]; + px_int i; + + /* 2 */ fsquare(z2,z); + /* 4 */ fsquare(t1,z2); + /* 8 */ fsquare(t0,t1); + /* 9 */ fmul(z9,t0,z); + /* 11 */ fmul(z11,z9,z2); + /* 22 */ fsquare(t0,z11); + /* 2^5 - 2^0 = 31 */ fmul(z2_5_0,t0,z9); + + /* 2^6 - 2^1 */ fsquare(t0,z2_5_0); + /* 2^7 - 2^2 */ fsquare(t1,t0); + /* 2^8 - 2^3 */ fsquare(t0,t1); + /* 2^9 - 2^4 */ fsquare(t1,t0); + /* 2^10 - 2^5 */ fsquare(t0,t1); + /* 2^10 - 2^0 */ fmul(z2_10_0,t0,z2_5_0); + + /* 2^11 - 2^1 */ fsquare(t0,z2_10_0); + /* 2^12 - 2^2 */ fsquare(t1,t0); + /* 2^20 - 2^10 */ for (i = 2;i < 10;i += 2) { fsquare(t0,t1); fsquare(t1,t0); } + /* 2^20 - 2^0 */ fmul(z2_20_0,t1,z2_10_0); + + /* 2^21 - 2^1 */ fsquare(t0,z2_20_0); + /* 2^22 - 2^2 */ fsquare(t1,t0); + /* 2^40 - 2^20 */ for (i = 2;i < 20;i += 2) { fsquare(t0,t1); fsquare(t1,t0); } + /* 2^40 - 2^0 */ fmul(t0,t1,z2_20_0); + + /* 2^41 - 2^1 */ fsquare(t1,t0); + /* 2^42 - 2^2 */ fsquare(t0,t1); + /* 2^50 - 2^10 */ for (i = 2;i < 10;i += 2) { fsquare(t1,t0); fsquare(t0,t1); } + /* 2^50 - 2^0 */ fmul(z2_50_0,t0,z2_10_0); + + /* 2^51 - 2^1 */ fsquare(t0,z2_50_0); + /* 2^52 - 2^2 */ fsquare(t1,t0); + /* 2^100 - 2^50 */ for (i = 2;i < 50;i += 2) { fsquare(t0,t1); fsquare(t1,t0); } + /* 2^100 - 2^0 */ fmul(z2_100_0,t1,z2_50_0); + + /* 2^101 - 2^1 */ fsquare(t1,z2_100_0); + /* 2^102 - 2^2 */ fsquare(t0,t1); + /* 2^200 - 2^100 */ for (i = 2;i < 100;i += 2) { fsquare(t1,t0); fsquare(t0,t1); } + /* 2^200 - 2^0 */ fmul(t1,t0,z2_100_0); + + /* 2^201 - 2^1 */ fsquare(t0,t1); + /* 2^202 - 2^2 */ fsquare(t1,t0); + /* 2^250 - 2^50 */ for (i = 2;i < 50;i += 2) { fsquare(t0,t1); fsquare(t1,t0); } + /* 2^250 - 2^0 */ fmul(t0,t1,z2_50_0); + + /* 2^251 - 2^1 */ fsquare(t1,t0); + /* 2^252 - 2^2 */ fsquare(t0,t1); + /* 2^253 - 2^3 */ fsquare(t1,t0); + /* 2^254 - 2^4 */ fsquare(t0,t1); + /* 2^255 - 2^5 */ fsquare(t1,t0); + /* 2^255 - 21 */ fmul(out,t1,z11); +} + +px_void PX_Curve25519(px_byte *mypublic, const px_byte *secret, const px_byte *basepoint) +{ + limb bp[10], x[10], z[11], zmone[10]; + px_byte e[32]; + px_int i; + + for (i = 0; i < 32; ++i) e[i] = secret[i]; + e[0] &= 248; + e[31] &= 127; + e[31] |= 64; + + fexpand(bp, basepoint); + cmult(x, z, e, bp); + crecip(zmone, z); + fmul(z, x, zmone); + fcontract(mypublic, z); +} diff --git a/code/PainterEngine/Core/PX_curve25519.h b/code/PainterEngine/Core/PX_curve25519.h new file mode 100644 index 0000000000000000000000000000000000000000..116511a07cc5ed60807d4bf9d39e1b47d92baa5b --- /dev/null +++ b/code/PainterEngine/Core/PX_curve25519.h @@ -0,0 +1,20 @@ +#ifndef PX_CURVE25519_H +#define PX_CURVE25519_H +#include "PX_MemoryPool.h" +/* +To generate a private key, generate 32 random bytes and: +px_byte mysecret[32]; +mysecret[0] &= 248; +mysecret[31] &= 127; +mysecret[31] |= 64; +To generate the public key, just do: + +static const uint8_t basepoint[32] = {9}; +curve25519_donna(mypublic, mysecret, basepoint); +To generate a shared key do: + +uint8_t shared_key[32]; +curve25519_donna(shared_key, mysecret, theirpublic); +*/ +px_void PX_Curve25519(px_byte *mypublic, const px_byte *secret, const px_byte *basepoint); +#endif diff --git a/code/PainterEngine/Core/PX_rbtree.c b/code/PainterEngine/Core/PX_rbtree.c new file mode 100644 index 0000000000000000000000000000000000000000..c7e55255f909e5fdf07d3f44b86f0f24d98e9807 --- /dev/null +++ b/code/PainterEngine/Core/PX_rbtree.c @@ -0,0 +1,453 @@ +/* + Red Black Trees + (C) 1999 Andrea Arcangeli + (C) 2002 David Woodhouse + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + linux/lib/rbtree.c +*/ + +#include "PX_rbtree.h" + +static void __rb_rotate_left(struct px_rb_node *node, struct px_rb_root *root) +{ + struct px_rb_node *right = node->rb_right; + struct px_rb_node *parent = rb_parent(node); + + if ((node->rb_right = right->rb_left)) + rb_set_parent(right->rb_left, node); + right->rb_left = node; + + rb_set_parent(right, parent); + + if (parent) + { + if (node == parent->rb_left) + parent->rb_left = right; + else + parent->rb_right = right; + } + else + root->rb_node = right; + rb_set_parent(node, right); +} + +static void __rb_rotate_right(struct px_rb_node *node, struct px_rb_root *root) +{ + struct px_rb_node *left = node->rb_left; + struct px_rb_node *parent = rb_parent(node); + + if ((node->rb_left = left->rb_right)) + rb_set_parent(left->rb_right, node); + left->rb_right = node; + + rb_set_parent(left, parent); + + if (parent) + { + if (node == parent->rb_right) + parent->rb_right = left; + else + parent->rb_left = left; + } + else + root->rb_node = left; + rb_set_parent(node, left); +} + +void rb_insert_color(struct px_rb_node *node, struct px_rb_root *root) +{ + struct px_rb_node *parent, *gparent; + + while ((parent = rb_parent(node)) && rb_is_red(parent)) + { + gparent = rb_parent(parent); + + if (parent == gparent->rb_left) + { + { + register struct px_rb_node *uncle = gparent->rb_right; + if (uncle && rb_is_red(uncle)) + { + rb_set_black(uncle); + rb_set_black(parent); + rb_set_red(gparent); + node = gparent; + continue; + } + } + + if (parent->rb_right == node) + { + register struct px_rb_node *tmp; + __rb_rotate_left(parent, root); + tmp = parent; + parent = node; + node = tmp; + } + + rb_set_black(parent); + rb_set_red(gparent); + __rb_rotate_right(gparent, root); + } else { + { + register struct px_rb_node *uncle = gparent->rb_left; + if (uncle && rb_is_red(uncle)) + { + rb_set_black(uncle); + rb_set_black(parent); + rb_set_red(gparent); + node = gparent; + continue; + } + } + + if (parent->rb_left == node) + { + register struct px_rb_node *tmp; + __rb_rotate_right(parent, root); + tmp = parent; + parent = node; + node = tmp; + } + + rb_set_black(parent); + rb_set_red(gparent); + __rb_rotate_left(gparent, root); + } + } + + rb_set_black(root->rb_node); +} + +static void __rb_erase_color(struct px_rb_node *node, struct px_rb_node *parent, + struct px_rb_root *root) +{ + struct px_rb_node *other; + + while ((!node || rb_is_black(node)) && node != root->rb_node) + { + if (parent->rb_left == node) + { + other = parent->rb_right; + if (rb_is_red(other)) + { + rb_set_black(other); + rb_set_red(parent); + __rb_rotate_left(parent, root); + other = parent->rb_right; + } + if ((!other->rb_left || rb_is_black(other->rb_left)) && + (!other->rb_right || rb_is_black(other->rb_right))) + { + rb_set_red(other); + node = parent; + parent = rb_parent(node); + } + else + { + if (!other->rb_right || rb_is_black(other->rb_right)) + { + rb_set_black(other->rb_left); + rb_set_red(other); + __rb_rotate_right(other, root); + other = parent->rb_right; + } + rb_set_color(other, rb_color(parent)); + rb_set_black(parent); + rb_set_black(other->rb_right); + __rb_rotate_left(parent, root); + node = root->rb_node; + break; + } + } + else + { + other = parent->rb_left; + if (rb_is_red(other)) + { + rb_set_black(other); + rb_set_red(parent); + __rb_rotate_right(parent, root); + other = parent->rb_left; + } + if ((!other->rb_left || rb_is_black(other->rb_left)) && + (!other->rb_right || rb_is_black(other->rb_right))) + { + rb_set_red(other); + node = parent; + parent = rb_parent(node); + } + else + { + if (!other->rb_left || rb_is_black(other->rb_left)) + { + rb_set_black(other->rb_right); + rb_set_red(other); + __rb_rotate_left(other, root); + other = parent->rb_left; + } + rb_set_color(other, rb_color(parent)); + rb_set_black(parent); + rb_set_black(other->rb_left); + __rb_rotate_right(parent, root); + node = root->rb_node; + break; + } + } + } + if (node) + rb_set_black(node); +} + +void rb_erase(struct px_rb_node *node, struct px_rb_root *root) +{ + struct px_rb_node *child, *parent; + int color; + + if (!node->rb_left) + child = node->rb_right; + else if (!node->rb_right) + child = node->rb_left; + else + { + struct px_rb_node *old = node, *left; + + node = node->rb_right; + while ((left = node->rb_left) != PX_RB_NULL) + node = left; + + if (rb_parent(old)) { + if (rb_parent(old)->rb_left == old) + rb_parent(old)->rb_left = node; + else + rb_parent(old)->rb_right = node; + } else + root->rb_node = node; + + child = node->rb_right; + parent = rb_parent(node); + color = rb_color(node); + + if (parent == old) { + parent = node; + } else { + if (child) + rb_set_parent(child, parent); + parent->rb_left = child; + + node->rb_right = old->rb_right; + rb_set_parent(old->rb_right, node); + } + + //node->rb_parent_color = old->rb_parent_color; + node->parent=old->parent; + node->color=old->color; + node->rb_left = old->rb_left; + rb_set_parent(old->rb_left, node); + + goto color; + } + + parent = rb_parent(node); + color = rb_color(node); + + if (child) + rb_set_parent(child, parent); + if (parent) + { + if (parent->rb_left == node) + parent->rb_left = child; + else + parent->rb_right = child; + } + else + root->rb_node = child; + + color: + if (color == RB_BLACK) + __rb_erase_color(child, parent, root); +} + +static void rb_augment_path(struct px_rb_node *node, rb_augment_f func, void *data) +{ + struct px_rb_node *parent; + +up: + func(node, data); + parent = rb_parent(node); + if (!parent) + return; + + if (node == parent->rb_left && parent->rb_right) + func(parent->rb_right, data); + else if (parent->rb_left) + func(parent->rb_left, data); + + node = parent; + goto up; +} + +/* + * after inserting @node into the tree, update the tree to account for + * both the new entry and any damage done by rebalance + */ +void rb_augment_insert(struct px_rb_node *node, rb_augment_f func, void *data) +{ + if (node->rb_left) + node = node->rb_left; + else if (node->rb_right) + node = node->rb_right; + + rb_augment_path(node, func, data); +} + +/* + * before removing the node, find the deepest node on the rebalance path + * that will still be there after @node gets removed + */ +struct px_rb_node *rb_augment_erase_begin(struct px_rb_node *node) +{ + struct px_rb_node *deepest; + + if (!node->rb_right && !node->rb_left) + deepest = rb_parent(node); + else if (!node->rb_right) + deepest = node->rb_left; + else if (!node->rb_left) + deepest = node->rb_right; + else { + deepest = rb_next(node); + if (deepest->rb_right) + deepest = deepest->rb_right; + else if (rb_parent(deepest) != node) + deepest = rb_parent(deepest); + } + + return deepest; +} + +/* + * after removal, update the tree to account for the removed entry + * and any rebalance damage. + */ +void rb_augment_erase_end(struct px_rb_node *node, rb_augment_f func, void *data) +{ + if (node) + rb_augment_path(node, func, data); +} + +/* + * This function returns the first node (in sort order) of the tree. + */ +struct px_rb_node *rb_first(const struct px_rb_root *root) +{ + struct px_rb_node *n; + + n = root->rb_node; + if (!n) + return PX_RB_NULL; + while (n->rb_left) + n = n->rb_left; + return n; +} + +struct px_rb_node *rb_last(const struct px_rb_root *root) +{ + struct px_rb_node *n; + + n = root->rb_node; + if (!n) + return PX_RB_NULL; + while (n->rb_right) + n = n->rb_right; + return n; +} + +struct px_rb_node *rb_next(const struct px_rb_node *node) +{ + struct px_rb_node *parent; + + if (rb_parent(node) == node) + return PX_RB_NULL; + + /* If we have a right-hand child, go down and then left as far + as we can. */ + if (node->rb_right) { + node = node->rb_right; + while (node->rb_left) + node=node->rb_left; + return (struct px_rb_node *)node; + } + + /* No right-hand children. Everything down and left is + smaller than us, so any 'next' node must be in the general + direction of our parent. Go up the tree; any time the + ancestor is a right-hand child of its parent, keep going + up. First time it's a left-hand child of its parent, said + parent is our 'next' node. */ + while ((parent = rb_parent(node)) && node == parent->rb_right) + node = parent; + + return parent; +} + +struct px_rb_node *rb_prev(const struct px_rb_node *node) +{ + struct px_rb_node *parent; + + if (rb_parent(node) == node) + return PX_RB_NULL; + + /* If we have a left-hand child, go down and then right as far + as we can. */ + if (node->rb_left) { + node = node->rb_left; + while (node->rb_right) + node=node->rb_right; + return (struct px_rb_node *)node; + } + + /* No left-hand children. Go up till we find an ancestor which + is a right-hand child of its parent */ + while ((parent = rb_parent(node)) && node == parent->rb_left) + node = parent; + + return parent; +} + +void rb_replace_node(struct px_rb_node *victim, struct px_rb_node *newnode, + struct px_rb_root *root) +{ + struct px_rb_node *parent = rb_parent(victim); + + /* Set the surrounding nodes to point to the replacement */ + if (parent) { + if (victim == parent->rb_left) + parent->rb_left = newnode; + else + parent->rb_right = newnode; + } else { + root->rb_node = newnode; + } + if (victim->rb_left) + rb_set_parent(victim->rb_left, newnode); + if (victim->rb_right) + rb_set_parent(victim->rb_right, newnode); + + /* Copy the pointers/colour from the victim to the replacement */ + *newnode = *victim; +} diff --git a/code/PainterEngine/Core/PX_rbtree.h b/code/PainterEngine/Core/PX_rbtree.h new file mode 100644 index 0000000000000000000000000000000000000000..9cf836d3908030c144780bcfc81adac3ce2e6f25 --- /dev/null +++ b/code/PainterEngine/Core/PX_rbtree.h @@ -0,0 +1,135 @@ + +/* + Red Black Trees + (C) 1999 Andrea Arcangeli + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + linux/include/linux/rbtree.h + + To use rbtrees you'll have to implement your own insert and search cores. + This will avoid us to use callbacks and to drop drammatically performances. + I know it's not the cleaner way, but in C (not in C++) to get + performances and genericity... + + Some example of insert and search follows here. The search is a plain + normal search over an ordered tree. The insert instead must be implemented + in two steps: First, the code must insert the element in order as a red leaf + in the tree, and then the support library function rb_insert_color() must + be called. Such function will do the not trivial work to rebalance the + rbtree, if necessary. + +----------------------------------------------------------------------- +*/ + +#ifndef _PX_RBTREE_H +#define _PX_RBTREE_H + +#undef PX_RB_NULL +#if defined(__cplusplus) + #define PX_RB_NULL 0 +#else + #define PX_RB_NULL ((void *)0) +#endif + +struct px_rb_node +{ +#define RB_RED 0 +#define RB_BLACK 1 + struct px_rb_node *parent; + unsigned long color; + struct px_rb_node *rb_right; + struct px_rb_node *rb_left; +}; + /* The alignment might seem pointless, but allegedly CRIS needs it */ + +struct px_rb_root +{ + struct px_rb_node *rb_node; +}; + + +//#define rb_parent(r) ((struct px_rb_node *)((r)->rb_parent_color & ~3)) +#define rb_parent(r) ((struct px_rb_node *)((r)->parent)) +//#define rb_color(r) ((r)->rb_parent_color & 1) +#define rb_color(r) ((r)->color) +#define rb_is_red(r) (!rb_color(r)) +#define rb_is_black(r) rb_color(r) +// #define rb_set_red(r) do { (r)->rb_parent_color &= ~1; } while (0) +// #define rb_set_black(r) do { (r)->rb_parent_color |= 1; } while (0) +#define rb_set_red(r) do { (r)->color = 0; } while (0) +#define rb_set_black(r) do { (r)->color = 1; } while (0) +static void rb_set_parent(struct px_rb_node *rb, struct px_rb_node *p) +{ + //rb->rb_parent_color = (rb->rb_parent_color & 3) | (unsigned long)p; + rb->parent = p; +} +static void rb_set_color(struct px_rb_node *rb, int color) +{ + //rb->rb_parent_color = (rb->rb_parent_color & ~1) | color; + rb->color = color; +} + +#define RB_ROOT (struct px_rb_root) { PX_RB_NULL, } + +#define RB_EMPTY_ROOT(root) ((root)->px_rb_node == PX_RB_NULL) +#define RB_EMPTY_NODE(node) (rb_parent(node) == node) +#define RB_CLEAR_NODE(node) (rb_set_parent(node, node)) + +static void rb_init_node(struct px_rb_node *rb) +{ + //rb->rb_parent_color = 0; + rb->parent=0; + rb->color=0; + rb->rb_right = PX_RB_NULL; + rb->rb_left = PX_RB_NULL; + RB_CLEAR_NODE(rb); +} + +extern void rb_insert_color(struct px_rb_node *, struct px_rb_root *); +extern void rb_erase(struct px_rb_node *, struct px_rb_root *); + +typedef void (*rb_augment_f)(struct px_rb_node *node, void *data); + +extern void rb_augment_insert(struct px_rb_node *node, + rb_augment_f func, void *data); +extern struct px_rb_node *rb_augment_erase_begin(struct px_rb_node *node); +extern void rb_augment_erase_end(struct px_rb_node *node, + rb_augment_f func, void *data); + +/* Find logical next and previous nodes in a tree */ +extern struct px_rb_node *rb_next(const struct px_rb_node *); +extern struct px_rb_node *rb_prev(const struct px_rb_node *); +extern struct px_rb_node *rb_first(const struct px_rb_root *); +extern struct px_rb_node *rb_last(const struct px_rb_root *); + +/* Fast replacement of a single node without remove/rebalance/add/rebalance */ +extern void rb_replace_node(struct px_rb_node *victim, struct px_rb_node *newnode, + struct px_rb_root *root); + +static void rb_link_node(struct px_rb_node * node, struct px_rb_node * parent, + struct px_rb_node ** rb_link) +{ +// node->rb_parent_color = (unsigned long )parent; + node->parent=parent; + node->color=0; + + node->rb_left = node->rb_right = PX_RB_NULL; + + *rb_link = node; +} + +#endif /* _LINUX_RBTREE_H */ + diff --git a/code/PainterEngine/Kernel/PX_2dxCommon.h b/code/PainterEngine/Kernel/PX_2dxCommon.h new file mode 100644 index 0000000000000000000000000000000000000000..fdc1bec24f6bf33c9037ab7d1abad1c1e846bd0d --- /dev/null +++ b/code/PainterEngine/Kernel/PX_2dxCommon.h @@ -0,0 +1,40 @@ +#ifndef PX_2DXCOMMON_H +#define PX_2DXCOMMON_H +#include "../Core/PX_Core.h" +typedef struct +{ + px_dword magic; + px_dword framecount; + px_dword animationCount; +}PX_2DX_Header; + + +typedef struct +{ + px_dword size; +}PX_2DX_CODE_Header; + +typedef enum +{ + PX_2DX_OPCODE_FRAME =1, + PX_2DX_OPCODE_SLEEP, + PX_2DX_OPCODE_GOTO, + PX_2DX_OPCODE_LOOP, + PX_2DX_OPCODE_END, +}PX_2DX_OPCODE; + +//Instrument format +//opcode 1byte +//other 3byte + +typedef struct +{ + px_word opcode; + px_word param; +}PX_2DX_INSTR; + +//frame [index] //opcode 1 byte //param 3 byte +//sleep [index] //opcode 1 byte //param 3 byte +//goto [index] //jmp addr 3 byte //loop times 4 byte + +#endif diff --git a/code/PainterEngine/Kernel/PX_3D_ObjData.c b/code/PainterEngine/Kernel/PX_3D_ObjData.c new file mode 100644 index 0000000000000000000000000000000000000000..a23dfbfa5161d5badd5766675af80bc90cf85377 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_3D_ObjData.c @@ -0,0 +1,344 @@ +#include "PX_3D_ObjData.h" + +static PX_LEXER_LEXEME_TYPE PX_3D_ObjectDataNextTokenSN(px_lexer *lexer) +{ + PX_LEXER_LEXEME_TYPE type; + while ((type= PX_LexerGetNextLexeme(lexer))==PX_LEXER_LEXEME_TYPE_SPACER||type==PX_LEXER_LEXEME_TYPE_NEWLINE); + + return type; +} + +px_bool PX_3D_ObjectDataInitialize(px_memorypool *mp,PX_3D_ObjectData *ObjectData) +{ + ObjectData->mp=mp; + + if(!PX_VectorInit(mp,&ObjectData->v,sizeof(PX_3D_ObjectData_v),8)) return PX_FALSE; + if(!PX_VectorInit(mp,&ObjectData->vt,sizeof(PX_3D_ObjectData_vt),8)) return PX_FALSE; + if(!PX_VectorInit(mp,&ObjectData->vn,sizeof(PX_3D_ObjectData_vn),8)) return PX_FALSE; + if(!PX_VectorInit(mp,&ObjectData->face,sizeof(PX_3D_ObjectDataFace),8)) return PX_FALSE; + if(!PX_VectorInit(mp,&ObjectData->mtlFile,sizeof(px_string),8)) return PX_FALSE; + if(!PX_VectorInit(mp,&ObjectData->mtlName,sizeof(px_string),8)) return PX_FALSE; + return PX_TRUE; +} + +px_bool PX_3D_ObjectDataLoad(PX_3D_ObjectData *ObjectData,const px_byte *data,px_int size) +{ + PX_LEXER_STATE state; + px_lexer Lexer; + PX_LEXER_LEXEME_TYPE type; + PX_LexerInit(&Lexer,ObjectData->mp); + PX_LexerRegisterSpacer(&Lexer,' '); + PX_LexerRegisterSpacer(&Lexer,'\t'); + PX_LexerRegisterComment(&Lexer,"#","\n"); + PX_LexerRegisterDelimiter(&Lexer,'/'); + PX_LexerSetTokenCase(&Lexer,PX_LEXER_LEXEME_CASE_LOWER); + + if(!PX_LexerLoadSourceFromMemory(&Lexer,(const char *)data)) return PX_FALSE; + + while (PX_TRUE) + { + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + //g s o note:The flag is useless,we register it but not solve it + + if (PX_strequ(Lexer.CurLexeme.buffer,"g")\ + ||PX_strequ(Lexer.CurLexeme.buffer,"s")\ + ||PX_strequ(Lexer.CurLexeme.buffer,"o")) + { + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + + } + else + { + goto _ERROR; + } + continue; + } + + + if (PX_strequ(Lexer.CurLexeme.buffer,"mtllib")) + { + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + px_string strName; + if(!PX_StringInit(ObjectData->mp,&strName)) + { + goto _ERROR; + } + PX_StringSet(&strName,Lexer.CurLexeme.buffer); + if(!PX_VectorPushback(&ObjectData->mtlFile,&strName)) goto _ERROR; + } + else + { + goto _ERROR; + } + continue; + } + + //usemtl + if (PX_strequ(Lexer.CurLexeme.buffer,"usemtl")) + { + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + px_string strName; + if(!PX_StringInit(ObjectData->mp,&strName)) + { + goto _ERROR; + } + PX_StringSet(&strName,Lexer.CurLexeme.buffer); + if(!PX_VectorPushback(&ObjectData->mtlName,&strName)) goto _ERROR; + } + else + { + goto _ERROR; + } + continue; + } + + //v + if (PX_strequ(Lexer.CurLexeme.buffer,"v")) + { + px_int i; + px_float v[3]; + PX_3D_ObjectData_v ov; + + for (i=0;i<3;i++) + { + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (!PX_LexerIsLememeIsNumeric(&Lexer)) + { + PX_LOG(" Numeric block is expected but not found"); + goto _ERROR; + } + v[i]=(px_float)PX_atof(Lexer.CurLexeme.buffer); + + } + ov.x=v[0]; + ov.y=v[1]; + ov.z=v[2]; + if(!PX_VectorPushback(&ObjectData->v,&ov)) goto _ERROR; + continue; + } + + //vn // + if (PX_strequ(Lexer.CurLexeme.buffer,"vn")) + { + px_int i; + px_float v[3]; + PX_3D_ObjectData_vn ov; + for (i=0;i<3;i++) + { + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (!PX_LexerIsLememeIsNumeric(&Lexer)) + { + PX_LOG(" Numeric block is expected but not found"); + goto _ERROR; + } + v[i]=(px_float)PX_atof(Lexer.CurLexeme.buffer); + } + ov.x=v[0]; + ov.y=v[1]; + ov.z=v[2]; + if(!PX_VectorPushback(&ObjectData->vn,&ov)) goto _ERROR; + continue; + } + + //vt // + if (PX_strequ(Lexer.CurLexeme.buffer,"vt")) + { + px_int i; + px_float v[2]; + PX_3D_ObjectData_vt ov; + for (i=0;i<2;i++) + { + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (!PX_LexerIsLememeIsNumeric(&Lexer)) + { + PX_LOG(" Numeric block is expected but not found"); + goto _ERROR; + } + v[i]=(px_float)PX_atof(Lexer.CurLexeme.buffer); + } + ov.u=v[0]; + ov.v=v[1]; + if(!PX_VectorPushback(&ObjectData->vt,&ov)) goto _ERROR; + continue; + } + + //f + PX_LexerGetState(&Lexer); + if (PX_strequ(Lexer.CurLexeme.buffer,"f")) + { + PX_3D_ObjectDataFace Face; + px_int v; + px_int i; + int oft=0; + // Face.mtlFileNameIndex=GetMtlFileIndex(); + Face.mtlNameIndex=ObjectData->mtlName.size-1; + Face.mtlFileNameIndex=ObjectData->mtlFile.size-1; + + for (i=0;i<3;i++) + { + Face.v[i].v=-1; + Face.v[i].vt=-1; + Face.v[i].vn=-1; + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (!PX_LexerIsLememeIsNumeric(&Lexer)) + { + PX_LOG(" Numeric block is expected but not found"); + goto _ERROR; + } + v=PX_atoi(Lexer.CurLexeme.buffer); + + if(v>ObjectData->v.size) + goto _ERROR; + + Face.v[i].v=v; + + state=PX_LexerGetState(&Lexer); + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + + // vt + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&Lexer.Symbol=='/') + { + state=PX_LexerGetState(&Lexer); + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (PX_LexerIsLememeIsNumeric(&Lexer)) + { + v=PX_atoi(Lexer.CurLexeme.buffer); + if(v>ObjectData->vt.size) + goto _ERROR; + Face.v[i].vt=v; + } + else + { + PX_LexerSetState(state); + } + } + else + { + PX_LexerSetState(state); + continue; + } + + // vn + state=PX_LexerGetState(&Lexer); + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&Lexer.Symbol=='/') + { + state=PX_LexerGetState(&Lexer); + type=PX_3D_ObjectDataNextTokenSN(&Lexer); + if (PX_LexerIsLememeIsNumeric(&Lexer)) + { + v=PX_atoi(Lexer.CurLexeme.buffer); + if(v>ObjectData->vn.size) + goto _ERROR; + Face.v[i].vn=v; + } + else + { + PX_LexerSetState(state); + } + } + else + { + PX_LexerSetState(state); + continue; + } + + } + if(!PX_VectorPushback(&ObjectData->face,&Face)) goto _ERROR; + continue; + } + } + + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + + goto _ERROR; + + } + PX_LexerFree(&Lexer); + return PX_TRUE; +_ERROR: + PX_3D_ObjectDataFree(ObjectData); + PX_LexerFree(&Lexer); + return PX_FALSE; +} + +px_bool PX_3D_ObjectDataToRenderList(PX_3D_ObjectData *ObjectData,PX_3D_RenderList *renderList) +{ + px_int i,j; + PX_3D_Face face; + PX_3D_ObjectDataFace *pObjFace; + for (i=0;iface.size;i++) + { + pObjFace=PX_VECTORAT(PX_3D_ObjectDataFace,&ObjectData->face,i); + PX_memset(&face,0,sizeof(PX_3D_Face)); + for (j=0;j<3;j++) + { + if(pObjFace->v[j].v>0&&pObjFace->v[j].v<=ObjectData->v.size) + { + PX_3D_ObjectData_v *pv=PX_VECTORAT(PX_3D_ObjectData_v,&ObjectData->v,pObjFace->v[j].v-1); + face.vertex[j].position=PX_POINT4D(pv->x,pv->y,pv->z); + } + else + goto _ERROR; + + if(pObjFace->v[j].vn>0&&pObjFace->v[j].vn<=ObjectData->vn.size) + { + PX_3D_ObjectData_vn *pvn=PX_VECTORAT(PX_3D_ObjectData_vn,&ObjectData->vn,pObjFace->v[j].vn-1); + face.vertex[j].normal=PX_POINT4D(pvn->x,pvn->y,pvn->z); + } + else + goto _ERROR; + + if(pObjFace->v[j].vt>0&&pObjFace->v[j].vt<=ObjectData->vt.size) + { + PX_3D_ObjectData_vt *pvt=PX_VECTORAT(PX_3D_ObjectData_vt,&ObjectData->vt,pObjFace->v[j].vt-1); + face.vertex[j].u=pvt->u; + face.vertex[j].v=pvt->v; + } + else + goto _ERROR; + + face.vertex[j].clr=PX_COLOR(255,0,0,0); + } + if(!PX_3D_RenderListPush(renderList,face)) + goto _ERROR; + } + return PX_TRUE; +_ERROR: + PX_3D_RenderListReset(renderList); + return PX_FALSE; +} + +px_void PX_3D_ObjectDataFree(PX_3D_ObjectData *ObjectData) +{ + px_int i; + PX_VectorFree(&ObjectData->v); + PX_VectorFree(&ObjectData->vt); + PX_VectorFree(&ObjectData->vn); + PX_VectorFree(&ObjectData->face); + for (i=0;imtlName.size;i++) + { + PX_StringFree(PX_VECTORAT(px_string,&ObjectData->mtlName,i)); + } + PX_VectorFree(&ObjectData->mtlName); + + for (i=0;imtlFile.size;i++) + { + PX_StringFree(PX_VECTORAT(px_string,&ObjectData->mtlFile,i)); + } + PX_VectorFree(&ObjectData->mtlFile); + +} + diff --git a/code/PainterEngine/Kernel/PX_3D_ObjData.h b/code/PainterEngine/Kernel/PX_3D_ObjData.h new file mode 100644 index 0000000000000000000000000000000000000000..c1b05d7e23d64bc63a8c020f7ac4976968778585 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_3D_ObjData.h @@ -0,0 +1,50 @@ +#ifndef PX_3D_OBJDATA_H +#define PX_3D_OBJDATA_H +#include "PX_Lexer.h" + +typedef struct +{ + px_int v,vn,vt; +}PX_3D_ObjectDataVertex; + + +typedef struct +{ + px_uint mtlFileNameIndex; + px_uint mtlNameIndex; + PX_3D_ObjectDataVertex v[3]; +}PX_3D_ObjectDataFace; + + +typedef struct +{ + px_float x,y,z; +}PX_3D_ObjectData_v; + +typedef struct +{ + px_float x,y,z; +}PX_3D_ObjectData_vn; + +typedef struct +{ + px_float u,v; +}PX_3D_ObjectData_vt; + +typedef struct +{ + px_memorypool *mp; + px_vector v; + px_vector vt; + px_vector vn; + px_vector face; + px_vector mtlFile; + px_vector mtlName; +}PX_3D_ObjectData; + +px_bool PX_3D_ObjectDataInitialize(px_memorypool *mp,PX_3D_ObjectData *ObjectData); +px_bool PX_3D_ObjectDataLoad(PX_3D_ObjectData *ObjectData,const px_byte *data,px_int size); +px_bool PX_3D_ObjectDataToRenderList(PX_3D_ObjectData *ObjectData,PX_3D_RenderList *renderList); +px_void PX_3D_ObjectDataFree(PX_3D_ObjectData *ObjectData); + +#endif \ No newline at end of file diff --git a/code/PainterEngine/Kernel/PX_Animation.c b/code/PainterEngine/Kernel/PX_Animation.c new file mode 100644 index 0000000000000000000000000000000000000000..7c855386a07744bb61d000c797246d1c0597adf3 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Animation.c @@ -0,0 +1,439 @@ +#include "PX_Animation.h" + +px_bool PX_AnimationLibraryCreateFromMemory(px_memorypool *mp,PX_Animationlibrary *panimation,px_byte *_2dxBuffer,px_uint size) +{ + PX_2DX_Header _header; + PX_TRaw_Header _trawheader; + px_int i; + px_byte *pbuffer; + px_uint reservedSize=size; + px_texture texture; + PX_2DX_CODE_Header _codeheader; + + _header=*(PX_2DX_Header *)_2dxBuffer; + if (!PX_memequ(&_header.magic,"2DX",sizeof(_header.magic))) + { + return PX_FALSE; + } + reservedSize-=sizeof(_header); + pbuffer=_2dxBuffer+sizeof(_header); + PX_VectorInit(mp,&panimation->animation,sizeof(PX_Animationlibrary_tagInfo),_header.animationCount); + for (i=0;i<(px_int)_header.animationCount;i++) + { + PX_Animationlibrary_tagInfo tag; + tag.ip=*(px_dword *)pbuffer; + pbuffer+=sizeof(px_dword); + PX_StringInit(mp,&tag.name); + PX_StringCat(&tag.name,(px_char *)pbuffer); + pbuffer+=PX_strlen((px_char *)pbuffer)+1; + PX_VectorPushback(&panimation->animation,&tag); + } + + + PX_VectorInit(mp,&panimation->frames,sizeof(px_texture),_header.framecount); + PX_MemoryInit(mp,&panimation->code); + for (i=0;i<(px_int)_header.framecount;i++) + { + _trawheader=*(PX_TRaw_Header *)pbuffer; + + if (!PX_TextureCreateFromMemory(mp,pbuffer,reservedSize,&texture)) + { + goto _ERROR; + } + PX_VectorPushback(&panimation->frames,&texture); + pbuffer+=PX_TRawGetSize(&_trawheader); + reservedSize-=PX_TRawGetSize(&_trawheader); + } + + if (reservedSizecode,pbuffer,_codeheader.size); + + return PX_TRUE; + + +_ERROR: + for (i=0;iframes.size;i++) + { + PX_TextureFree(PX_VECTORAT(px_texture,&panimation->frames,i)); + } + PX_VectorFree(&panimation->frames); + PX_MemoryFree(&panimation->code); + return PX_FALSE; +} + +px_void PX_AnimationLibraryFree(PX_Animationlibrary *panimation) +{ + px_int i; + for (i=0;ianimation.size;i++) + { + PX_Animationlibrary_tagInfo *tagInfo=PX_VECTORAT(PX_Animationlibrary_tagInfo,&panimation->animation,i); + PX_StringFree(&tagInfo->name); + } + PX_VectorFree(&panimation->animation); + for (i=0;iframes.size;i++) + { + PX_TextureFree(PX_VECTORAT(px_texture,&panimation->frames,i)); + } + PX_VectorFree(&panimation->frames); + PX_MemoryFree(&panimation->code); +} + +px_void PX_AnimationUpdate(PX_Animation *panimation,px_uint elpased) +{ + PX_2DX_INSTR *pInstr; + + if (!panimation->linker) + { + return; + } + if (panimation->reg_reservedTime>=elpased) + { + panimation->reg_reservedTime-=elpased; + return; + } + else + { + elpased-=panimation->reg_reservedTime; + } + + while(elpased) + { + if (panimation->ip>panimation->linker->code.usedsize-sizeof(PX_2DX_INSTR)) + { + PX_ERROR("2dx code error"); + return; + } + pInstr=(PX_2DX_INSTR *)(panimation->linker->code.buffer+panimation->ip); + switch(pInstr->opcode) + { + case PX_2DX_OPCODE_END: + return; + case PX_2DX_OPCODE_FRAME: + if(pInstr->paramlinker->frames.size) + panimation->reg_currentFrameIndex=pInstr->param; + else + { + PX_ERROR("2dx code error"); + return; + } + panimation->ip+=sizeof(PX_2DX_INSTR); + break; + case PX_2DX_OPCODE_GOTO: + + if(panimation->reg_loopTimes!=0) + { + panimation->ip=pInstr->param; + if(panimation->reg_loopTimes!=0xffff) + { + panimation->reg_loopTimes--; + } + } + else + panimation->ip+=sizeof(PX_2DX_INSTR); + + break; + case PX_2DX_OPCODE_LOOP: + panimation->reg_loopTimes=pInstr->param; + panimation->ip+=sizeof(PX_2DX_INSTR); + break; + case PX_2DX_OPCODE_SLEEP: + + if (pInstr->param>elpased) + { + panimation->reg_reservedTime=pInstr->param-elpased; + panimation->ip+=sizeof(PX_2DX_INSTR); + return; + } + else + { + elpased-=pInstr->param; + panimation->ip+=sizeof(PX_2DX_INSTR); + } + break; + } + } +} + +px_void PX_AnimationRender(px_surface *psurface,PX_Animation *animation,px_point pos,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_texture *pTexture; + if (!animation->linker) + { + return; + } + if(animation->reg_currentFrameIndex>=0&&animation->reg_currentFrameIndexlinker->frames.size) + { + pTexture=PX_VECTORAT(px_texture,&animation->linker->frames,animation->reg_currentFrameIndex); + PX_TextureRender(psurface,pTexture,(px_int)pos.x,(px_int)pos.y,refPoint,blend); + } +} + +px_void PX_AnimationRenderEx(px_surface *psurface,PX_Animation *animation,px_point pos,px_float scale,px_point direction,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_texture *pTexture; + if (!animation->linker) + { + return; + } + if(animation->reg_currentFrameIndex>=0&&animation->reg_currentFrameIndexlinker->frames.size) + { + pTexture=PX_VECTORAT(px_texture,&animation->linker->frames,animation->reg_currentFrameIndex); + + if (scale!=1) + { + PX_TextureRenderEx_vector(psurface,pTexture,(px_int)pos.x,(px_int)pos.y,refPoint,blend,scale,direction); + } + else + { + PX_TextureRenderRotation_vector(psurface,pTexture,(px_int)pos.x,(px_int)pos.y,refPoint,blend,direction); + } + } +} + +px_void PX_AnimationRender_scale(px_surface *psurface,PX_Animation *animation,px_point pos,px_float scale,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_texture *pTexture; + if (!animation->linker) + { + return; + } + if(animation->reg_currentFrameIndex>=0&&animation->reg_currentFrameIndexlinker->frames.size) + { + pTexture=PX_VECTORAT(px_texture,&animation->linker->frames,animation->reg_currentFrameIndex); + PX_TextureRenderEx(psurface,pTexture,(px_int)pos.x,(px_int)pos.y,refPoint,blend,scale,0); + } +} + + +px_void PX_AnimationRender_vector(px_surface *psurface,PX_Animation *animation,px_point pos,px_point direction,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_texture *pTexture; + if (!animation->linker) + { + return; + } + if(animation->reg_currentFrameIndex>=0&&animation->reg_currentFrameIndexlinker->frames.size) + { + pTexture=PX_VECTORAT(px_texture,&animation->linker->frames,animation->reg_currentFrameIndex); + PX_TextureRenderRotation_vector(psurface,pTexture,(px_int)pos.x,(px_int)pos.y,refPoint,blend,direction); + } +} + +px_bool PX_AnimationCreate(PX_Animation *animation,PX_Animationlibrary *linker) +{ + animation->elpased=0; + animation->linker=linker; + animation->reg_currentFrameIndex=-1; + animation->reg_loopTimes=0; + animation->reg_reservedTime=0; + animation->ip=0; + return PX_TRUE; +} + +px_bool PX_AnimationSetLibrary(PX_Animation *animation,PX_Animationlibrary *linker) +{ + PX_AnimationFree(animation); + animation->elpased=0; + animation->linker=linker; + animation->reg_currentFrameIndex=-1; + animation->reg_loopTimes=0; + animation->reg_reservedTime=0; + animation->ip=0; + return PX_TRUE; +} + + + +px_void PX_AnimationFree(PX_Animation *animation) +{ + +} + +px_void PX_AnimationReset(PX_Animation *animation) +{ + animation->elpased=0; + animation->reg_currentFrameIndex=-1; + animation->reg_loopTimes=0; + animation->reg_reservedTime=0; + animation->ip=0; +} + +px_bool PX_AnimationLibrary_CreateEffect_JumpVertical(px_memorypool *mp,PX_Animationlibrary *panimation,px_texture *effectTexture) +{ + px_int i; + px_int volume=effectTexture->width*effectTexture->height; + px_int eff_height[6],eff_width[6]; + px_texture tex; + + PX_VectorInit(mp,&panimation->frames,sizeof(px_texture),6); + PX_MemoryInit(mp,&panimation->code); + PX_MemoryResize(&panimation->code,sizeof(PX_2DX_INSTR)*13); + + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_FRAME,0); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_SLEEP,50); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_FRAME,1); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_SLEEP,50); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_FRAME,2); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_SLEEP,50); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_FRAME,3); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_SLEEP,50); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_FRAME,4); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_SLEEP,50); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_FRAME,5); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_SLEEP,50); + PX_AnimationLibraryAddInstr(panimation,PX_2DX_OPCODE_END,0); + + eff_height[0]=(px_int)(effectTexture->height*0.2); + eff_height[1]=(px_int)(effectTexture->height*0.25); + eff_height[2]=(px_int)(effectTexture->height*0.45); + eff_height[3]=(px_int)(effectTexture->height*1.25); + eff_height[4]=(px_int)(effectTexture->height*1.15); + eff_height[5]=(px_int)(effectTexture->height*1); + + for(i=0;i<6;i++) + { + eff_width[i]=volume/eff_height[i]; + if (eff_width[i]>effectTexture->width*2) + { + eff_width[i]=(px_int)(eff_width[i]*0.4); + } + if(!PX_TextureCreateScale(mp,effectTexture,eff_width[i],eff_height[i],&tex)) + { + PX_AnimationLibraryFree(panimation); + return PX_FALSE; + } + PX_VectorPushback(&panimation->frames,&tex); + } + return PX_TRUE; +} + +px_void PX_AnimationLibraryAddInstr(PX_Animationlibrary *panimationLib,PX_2DX_OPCODE opcode,px_word param) +{ + PX_2DX_INSTR instr; + instr.opcode=opcode; + instr.param=param; + PX_MemoryCat(&panimationLib->code,&instr,sizeof(PX_2DX_INSTR)); +} + +px_bool PX_AnimationIsEnd(PX_Animation *panimation) +{ + if (!panimation->linker) + { + return PX_TRUE; + } + return (((PX_2DX_INSTR *)(panimation->linker->code.buffer+panimation->ip))->opcode==PX_2DX_OPCODE_END); +} + + +px_rect PX_AnimationGetSize(PX_Animation *panimation) +{ + px_rect rect; + px_int i,w=0,h=0; + px_texture *pTexture; + if (!panimation->linker) + { + rect.x=0; + rect.y=0; + rect.height=0; + rect.width=0; + return rect; + } + for (i=0;ilinker->frames.size;i++) + { + pTexture=PX_VECTORAT(px_texture,&panimation->linker->frames,i); + if (wwidth) + { + w=pTexture->width; + } + if (hheight) + { + h=pTexture->height; + } + } + rect.x=0; + rect.y=0; + rect.height=(px_float)h; + rect.width=(px_float)w; + return rect; +} + + +px_void PX_AnimationRenderRotation(px_surface *psurface,PX_Animation *animation,px_point position,px_int angle,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend) +{ + px_texture *pTexture; + if (!animation->linker) + { + return; + } + if(animation->reg_currentFrameIndex>=0&&animation->reg_currentFrameIndexlinker->frames.size) + { + pTexture=PX_VECTORAT(px_texture,&animation->linker->frames,animation->reg_currentFrameIndex); + PX_TextureRenderRotation(psurface,pTexture,(px_int)position.x,(px_int)position.y,refPoint,blend,angle); + } +} + +px_int PX_AnimationGetAnimationsCount(PX_Animation *animation) +{ + if(animation->linker) + return animation->linker->frames.size; + else + return 0; +} + +px_bool PX_AnimationSetCurrentPlayAnimation(PX_Animation *animation,px_int i) +{ + if(animation->linker) + if (ilinker->animation.size) + { + PX_Animationlibrary_tagInfo *tag=PX_VECTORAT(PX_Animationlibrary_tagInfo,&animation->linker->animation,i); + animation->ip=tag->ip; + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_AnimationSetCurrentPlayAnimationByName(PX_Animation *animation,px_char *name) +{ + px_int i; + if(animation->linker) + for (i=0;ilinker->animation.size;i++) + { + PX_Animationlibrary_tagInfo *tag=PX_VECTORAT(PX_Animationlibrary_tagInfo,&animation->linker->animation,i); + if (PX_strequ(name,tag->name.buffer)) + { + animation->ip=tag->ip; + animation->reg_reservedTime=0; + return PX_TRUE; + } + } + return PX_FALSE; +} + + +px_int PX_AnimationGetPlayAnimationIndexByName(PX_Animation *animation,px_char *name) +{ + px_int i; + if(animation->linker) + for (i=0;ilinker->animation.size;i++) + { + PX_Animationlibrary_tagInfo *tag=PX_VECTORAT(PX_Animationlibrary_tagInfo,&animation->linker->animation,i); + if (PX_strequ(name,tag->name.buffer)) + { + return i; + } + } + return -1; +} diff --git a/code/PainterEngine/Kernel/PX_Animation.h b/code/PainterEngine/Kernel/PX_Animation.h new file mode 100644 index 0000000000000000000000000000000000000000..aceeed3195efbb6700cafa945d6548dcbedfe926 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Animation.h @@ -0,0 +1,49 @@ +#ifndef PX_ANIMATION_H +#define PX_ANIMATION_H +#include "PX_2dxCommon.h" +typedef struct +{ + px_vector frames; //vector frames + px_vector animation; + px_memory code; +}PX_Animationlibrary; + +typedef struct +{ + px_uint elpased; + px_uint ip; + px_uint reg_loopTimes; + px_uint reg_reservedTime; + px_int reg_currentFrameIndex; + PX_Animationlibrary *linker; +}PX_Animation; + +typedef struct +{ + px_dword ip; + px_string name; //image file path +}PX_Animationlibrary_tagInfo; + +px_bool PX_AnimationCreate(PX_Animation *animation,PX_Animationlibrary *linker); +px_bool PX_AnimationSetLibrary(PX_Animation *animation,PX_Animationlibrary *linker); +px_void PX_AnimationLibraryAddInstr(PX_Animationlibrary *panimationLib,PX_2DX_OPCODE opcode,px_word param); +px_void PX_AnimationLibraryFree(PX_Animationlibrary *panimationLib); +px_int PX_AnimationGetAnimationsCount(PX_Animation *animation); +px_bool PX_AnimationSetCurrentPlayAnimation(PX_Animation *animation,px_int i); +px_bool PX_AnimationSetCurrentPlayAnimationByName(PX_Animation *animation,px_char *name); +px_int PX_AnimationGetPlayAnimationIndexByName(PX_Animation *animation,px_char *name); +px_void PX_AnimationFree(PX_Animation *animation); +px_void PX_AnimationReset(PX_Animation *animation); +px_void PX_AnimationUpdate(PX_Animation *panimation,px_uint elpased); +px_bool PX_AnimationIsEnd(PX_Animation *panimation); +px_rect PX_AnimationGetSize(PX_Animation *panimation); +px_void PX_AnimationRenderRotation(px_surface *psurface,PX_Animation *animation,px_point position,px_int angle,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_AnimationRender(px_surface *psurface,PX_Animation *animation,px_point position,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_AnimationRenderEx(px_surface *psurface,PX_Animation *animation,px_point pos,px_float scale,px_point direction,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_AnimationRender_scale(px_surface *psurface,PX_Animation *animation,px_point pos,px_float scale,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend); +px_void PX_AnimationRender_vector(px_surface *psurface,PX_Animation *animation,px_point pos,px_point direction,PX_TEXTURERENDER_REFPOINT refPoint,PX_TEXTURERENDER_BLEND *blend); + +//Create Animation from 2dx data +px_bool PX_AnimationLibraryCreateFromMemory(px_memorypool *mp,PX_Animationlibrary *panimationLib,px_byte *_2dxBuffer,px_uint size); +px_bool PX_AnimationLibrary_CreateEffect_JumpVertical(px_memorypool *mp,PX_Animationlibrary *panimation,px_texture *effectTexture); +#endif \ No newline at end of file diff --git a/code/PainterEngine/Kernel/PX_Json.c b/code/PainterEngine/Kernel/PX_Json.c new file mode 100644 index 0000000000000000000000000000000000000000..6416000fd919e703ef376f5b0b7e4b64625b39d3 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Json.c @@ -0,0 +1,595 @@ +#include "PX_Json.h" +static px_uint json_quotes; + +px_bool PX_JsonInterpret_Object(PX_Json *pjson,px_lexer *lexer,PX_Json_Object *json_Object); +px_bool PX_JsonInterpret_Value(PX_Json *pjson,px_lexer *lexer,PX_Json_Value *_value,px_bool arrayElement); +px_void PX_JsonFreeValue(PX_Json *pjson,PX_Json_Value *json_Value); + +PX_LEXER_LEXEME_TYPE PX_JsonNextToken(px_lexer *lexer) +{ + PX_LEXER_LEXEME_TYPE type; + while ((type= PX_LexerGetNextLexeme(lexer))==PX_LEXER_LEXEME_TYPE_SPACER||type==PX_LEXER_LEXEME_TYPE_NEWLINE); + + return type; +} + +PX_Json_Value * PX_JsonGetObjectValue(PX_Json_Value *json_value,const px_char name[]) +{ + px_int i; + if (json_value->type!=PX_JSON_VALUE_TYPE_OBJECT) + { + return PX_NULL; + } + for (i=0;ijson_Object.values.size;i++) + { + PX_Json_Value *pValue=PX_LISTAT(PX_Json_Value,&json_value->json_Object.values,i); + if (PX_strequ(name,pValue->name.buffer)) + { + return pValue; + } + } + return PX_NULL; +} + +PX_Json_Value * PX_JsonGetValue(PX_Json *json,const px_char _payload[]) +{ + px_int r_offset=0; + px_int s_offset=0; + px_char payload[256]={0}; + px_char *lexeme=PX_NULL; + px_int i=0,array=0; + + PX_Json_Value * it=&json->rootValue; + if (PX_strlen(_payload)>=sizeof(payload)) + { + return PX_NULL; + } + PX_strset(payload,_payload); + + while (payload[r_offset]!=0) + { + while (PX_TRUE) + { + if (payload[s_offset]=='.') + { + payload[s_offset]='\0'; + s_offset++; + break; + } + if (payload[s_offset]=='\0') + { + break; + } + s_offset++; + } + + lexeme=payload+r_offset; + i=PX_strlen(lexeme); + //array? + if (lexeme[i-1]==']') + { + lexeme[i-1]='\0'; + i--; + while (i>0) + { + if (lexeme[i]=='[') + { + lexeme[i]='\0'; + array=PX_atoi(lexeme+i+1); + } + i--; + } + } + if (array) + { + it=PX_JsonGetObjectValue(it,lexeme); + if (it->type==PX_JSON_VALUE_TYPE_ARRAY) + { + it=PX_JsonGetArrayValue(it,array); + } + else + { + return PX_NULL; + } + + } + else + { + it=PX_JsonGetObjectValue(it,lexeme); + } + + r_offset=s_offset; + if (!it) + { + break; + } + + } + return it; +} + +PX_Json_Value * PX_JsonGetArrayValue(PX_Json_Value *value,px_int i) +{ + if (value->type!=PX_JSON_VALUE_TYPE_ARRAY) + { + return PX_NULL; + } + if (i_Array.size) + { + return PX_LISTAT(PX_Json_Value,&value->_Array,i); + } + return PX_NULL; +} + +px_bool PX_JsonInitialize(px_memorypool *mp,PX_Json *pjson) +{ + pjson->mp=mp; + pjson->rootValue.type=PX_JSON_VALUE_TYPE_OBJECT; + return PX_TRUE; +} + + + +static px_bool PX_JsonInterpret_Value_Array(PX_Json *pjson,px_lexer *lexer,PX_Json_Value *_value) +{ + PX_LEXER_LEXEME_TYPE type; + PX_Json_Value array_value; + PX_LEXER_STATE state; + px_int i; + type=PX_JsonNextToken(lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||lexer->Symbol!='[') + goto _ERROR; + + while (PX_TRUE) + { + state=PX_LexerGetState(lexer); + type=PX_JsonNextToken(lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER) + { + if(lexer->Symbol!=']') + goto _ERROR; + else + return PX_TRUE; + } + else + { + PX_LexerSetState(state); + if (!PX_JsonInterpret_Value(pjson,lexer,&array_value,PX_TRUE)) + { + goto _ERROR; + } + + if(!PX_ListPush(&_value->_Array,&array_value,sizeof(array_value))) + goto _ERROR; + + type=PX_JsonNextToken(lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER) + { + if (lexer->Symbol==',') + { + continue; + } + + if (lexer->Symbol==']') + { + return PX_TRUE; + } + goto _ERROR; + } + else + { + goto _ERROR; + } + } + } +_ERROR: + for (i=0;i<_value->_Array.size;i++) + { + PX_JsonFreeValue(pjson,PX_LISTAT(PX_Json_Value,&_value->_Array,i)); + } + PX_ListFree(&_value->_Array); + return PX_FALSE; +} + + + + + + +px_bool PX_JsonInterpret_Value(PX_Json *pjson,px_lexer *lexer,PX_Json_Value *_value,px_bool arrayElement) +{ + PX_LEXER_STATE state; + PX_LEXER_LEXEME_TYPE type; + + + PX_memset(_value,0,sizeof(PX_Json_Value)); + PX_StringInit(pjson->mp,&_value->name); + if (!arrayElement) + { + type=PX_JsonNextToken(lexer); + if (type!=PX_LEXER_LEXEME_TYPE_CONATINER)//{name + { + goto _ERROR; + } + PX_LexerGetIncludedString(lexer,&lexer->CurLexeme); + PX_StringCopy(&_value->name,&lexer->CurLexeme); + + type=PX_JsonNextToken(lexer); + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||lexer->Symbol!=':')//{\spacer name : + { + goto _ERROR; + } + } + + state=PX_LexerGetState(lexer); + type=PX_JsonNextToken(lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER) + { + if(lexer->Symbol=='[') + { + PX_LexerSetState(state); + _value->type=PX_JSON_VALUE_TYPE_ARRAY; + PX_ListInit(pjson->mp,&_value->_Array); + if(!PX_JsonInterpret_Value_Array(pjson,lexer,_value)) + { + + goto _ERROR; + } + else + return PX_TRUE; + } + + if(lexer->Symbol=='{') + { + PX_LexerSetState(state); + _value->type=PX_JSON_VALUE_TYPE_OBJECT; + if(!PX_JsonInterpret_Object(pjson,lexer,&_value->json_Object)) + { + return PX_FALSE; + } + return PX_TRUE; + + } + + goto _ERROR; + + } + else + { + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + if(PX_StringIsNumeric(&lexer->CurLexeme)) + { + _value->type=PX_JSON_VALUE_TYPE_NUMBER; + _value->_number=PX_atof(lexer->CurLexeme.buffer); + return PX_TRUE; + } + + if(PX_strequ(lexer->CurLexeme.buffer,"true")) + { + _value->type=PX_JSON_VALUE_TYPE_BOOLEAN; + _value->_boolean=PX_TRUE; + return PX_TRUE; + } + + if(PX_strequ(lexer->CurLexeme.buffer,"false")) + { + _value->type=PX_JSON_VALUE_TYPE_BOOLEAN; + _value->_boolean=PX_FALSE; + return PX_TRUE; + } + + if(PX_strequ(lexer->CurLexeme.buffer,"null")) + { + _value->type=PX_JSON_VALUE_TYPE_NULL; + return PX_TRUE; + } + } + else if(type==PX_LEXER_LEXEME_TYPE_CONATINER&&lexer->CurrentContainerType==json_quotes) + { + _value->type=PX_JSON_VALUE_TYPE_STRING; + if(!PX_StringInit(pjson->mp,&_value->_string))goto _ERROR;; + PX_LexerGetIncludedString(lexer,&lexer->CurLexeme); + if(!PX_StringCopy(&_value->_string,&lexer->CurLexeme)) + { + PX_StringFree(&_value->_string); + goto _ERROR; + } + return PX_TRUE; + } + + goto _ERROR; + + } +_ERROR: + PX_StringFree(&_value->name); + return PX_FALSE; +} + +px_bool PX_JsonInterpret_Object(PX_Json *pjson,px_lexer *lexer,PX_Json_Object *json_Object) +{ + PX_LEXER_LEXEME_TYPE type; + PX_Json_Value _value; + PX_LEXER_STATE state; + px_int i; + PX_memset(json_Object,0,sizeof(PX_Json_Object)); + + PX_ListInit(pjson->mp,&json_Object->values); + + while (PX_TRUE) + { + type=PX_JsonNextToken(lexer); + if (type==PX_LEXER_LEXEME_TYPE_END) + { + goto _ERROR; + } + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer->Symbol=='{')//{ + { + state=PX_LexerGetState(lexer); + type=PX_JsonNextToken(lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer->Symbol=='}')//{} + { + return PX_TRUE; + } + else + { + PX_LexerSetState(state); + while (PX_TRUE) + { + + + if (!PX_JsonInterpret_Value(pjson,lexer,&_value,PX_FALSE)) + { + goto _ERROR; + } + + if(!PX_ListPush(&json_Object->values,&_value,sizeof(_value))) + goto _ERROR; + + type=PX_JsonNextToken(lexer); + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + goto _ERROR; + } + + if (lexer->Symbol=='}') + { + return PX_TRUE; + } + else if(lexer->Symbol==',') + { + continue; + } + else + { + PX_StringFree(&_value.name); + goto _ERROR; + } + } + } + } + } +_ERROR: + ////////////////////////////////////////////////////////////////////////// + //remove object + + for (i=0;ivalues.size;i++) + { + PX_JsonFreeValue(pjson,PX_LISTAT(PX_Json_Value,&json_Object->values,i)); + } + PX_ListFree(&json_Object->values); + + return PX_FALSE; +} + +px_bool PX_JsonParse(PX_Json *pjson,const px_char *json_content) +{ + px_lexer lexer; + + PX_LexerInit(&lexer,pjson->mp); + PX_LexerRegisterDelimiter(&lexer,','); + PX_LexerRegisterDelimiter(&lexer,':'); + PX_LexerRegisterDelimiter(&lexer,'{'); + PX_LexerRegisterDelimiter(&lexer,'}'); + PX_LexerRegisterDelimiter(&lexer,'['); + PX_LexerRegisterDelimiter(&lexer,']'); + PX_LexerRegisterSpacer(&lexer,' '); + PX_LexerRegisterSpacer(&lexer,'\t'); + PX_LexerRegisterComment(&lexer,"//","\n"); + json_quotes=PX_LexerRegisterContainer(&lexer,"\"","\""); + if(!PX_LexerLoadSourceFromMemory(&lexer,json_content)) goto _ERROR; + + if(!PX_JsonInterpret_Object(pjson,&lexer,&pjson->rootValue.json_Object)) + goto _ERROR; + PX_LexerFree(&lexer); + return PX_TRUE; +_ERROR: + PX_LexerFree(&lexer); + return PX_FALSE; +} + +px_bool PX_JsonBuild_Value(PX_Json_Value *pValue,px_string *_out,px_bool bArrayValue) +{ + if (!bArrayValue) + { + //name + if(!PX_StringCatChar(_out,'"'))return PX_FALSE; + if(!PX_StringCat(_out,pValue->name.buffer)) return PX_FALSE; + if(!PX_StringCatChar(_out,'"'))return PX_FALSE; + //: + if(!PX_StringCatChar(_out,':')) return PX_FALSE; + } + + switch(pValue->type) + { + case PX_JSON_VALUE_TYPE_ARRAY: + { + px_int i; + if(!PX_StringCatChar(_out,'['))return PX_FALSE; + for (i=0;i_Array.size;i++) + { + PX_Json_Value *pv=PX_LISTAT(PX_Json_Value,&pValue->_Array,i); + if(!PX_JsonBuild_Value(pv,_out,PX_TRUE))return PX_FALSE; + if(i!=pValue->_Array.size-1)if(!PX_StringCatChar(_out,','))return PX_FALSE; + } + if(!PX_StringCatChar(_out,']'))return PX_FALSE; + } + break; + case PX_JSON_VALUE_TYPE_BOOLEAN: + { + if (pValue->_boolean) + { + if(!PX_StringCat(_out,"true"))return PX_FALSE; + } + else + { + if(!PX_StringCat(_out,"false"))return PX_FALSE; + } + } + break; + case PX_JSON_VALUE_TYPE_NULL: + { + if(!PX_StringCat(_out,"null"))return PX_FALSE; + } + break; + case PX_JSON_VALUE_TYPE_NUMBER: + { + if(!PX_StringCat(_out,PX_ftos((px_float)pValue->_number,6).data))return PX_FALSE; + } + break; + case PX_JSON_VALUE_TYPE_STRING: + { + if(!PX_StringCat(_out,"\""))return PX_FALSE; + if(!PX_StringCat(_out,pValue->_string.buffer))return PX_FALSE; + if(!PX_StringCat(_out,"\""))return PX_FALSE; + } + break; + case PX_JSON_VALUE_TYPE_OBJECT: + { + px_int i; + if(!PX_StringCat(_out,"{\n")) return PX_FALSE; + for (i=0;ijson_Object.values.size;i++) + { + PX_Json_Value *ptmpValue=PX_LISTAT(PX_Json_Value,&pValue->json_Object.values,i); + if(!PX_JsonBuild_Value(ptmpValue,_out,PX_FALSE))return PX_FALSE; + if(i!=pValue->json_Object.values.size-1)if(!PX_StringCat(_out,",")) return PX_FALSE; + if(!PX_StringCat(_out,"\n")) return PX_FALSE; + } + if(!PX_StringCat(_out,"}")) return PX_FALSE; + } + break; + } + return PX_TRUE; +} + + +px_bool PX_JsonBuild(PX_Json *pjson,px_string *_out) +{ + return PX_JsonBuild_Value(&pjson->rootValue,_out,PX_TRUE); +} + +px_void PX_JsonFreeValue(PX_Json *pjson,PX_Json_Value *json_Value) +{ + PX_StringFree(&json_Value->name); + switch (json_Value->type) + { + case PX_JSON_VALUE_TYPE_ARRAY: + { + px_int i; + for (i=0;i_Array.size;i++) + { + PX_JsonFreeValue(pjson,PX_LISTAT(PX_Json_Value,&json_Value->_Array,i)); + } + PX_ListFree(&json_Value->_Array); + } + break; + case PX_JSON_VALUE_TYPE_STRING: + PX_StringFree(&json_Value->_string); + break; + case PX_JSON_VALUE_TYPE_OBJECT: + { + px_int i; + for (i=0;ijson_Object.values.size;i++) + { + PX_JsonFreeValue(pjson,PX_LISTAT(PX_Json_Value,&json_Value->json_Object.values,i)); + } + PX_ListFree(&json_Value->json_Object.values); + } + break; + case PX_JSON_VALUE_TYPE_BOOLEAN: + case PX_JSON_VALUE_TYPE_NULL: + case PX_JSON_VALUE_TYPE_NUMBER: + default: + break; + } +} + +px_void PX_JsonFree(PX_Json *pjson) +{ + PX_JsonFreeValue(pjson,&pjson->rootValue); +} + +px_bool PX_JsonCreateObjectValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[]) +{ + PX_memset(pValue,0,sizeof(PX_Json_Value)); + pValue->type=PX_JSON_VALUE_TYPE_OBJECT; + + if (!PX_StringInit(mp,&pValue->name)) + { + return PX_FALSE; + } + if(!PX_StringSet(&pValue->name,name)) return PX_FALSE; + PX_ListInit(mp,&pValue->json_Object.values); + return PX_TRUE; +} + +px_bool PX_JsonCreateStringValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[],const px_char text[]) +{ + PX_memset(pValue,0,sizeof(PX_Json_Value)); + pValue->type=PX_JSON_VALUE_TYPE_STRING; + + if (!PX_StringInit(mp,&pValue->name)) + { + return PX_FALSE; + } + PX_StringSet(&pValue->name,name); + + if (!PX_StringInit(mp,&pValue->_string)) + { + return PX_FALSE; + } + if(!PX_StringSet(&pValue->_string,text)) return PX_FALSE; + return PX_TRUE; +} + +px_bool PX_JsonCreateNumberValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[],px_double value) +{ + PX_memset(pValue,0,sizeof(PX_Json_Value)); + pValue->type=PX_JSON_VALUE_TYPE_STRING; + + if (!PX_StringInit(mp,&pValue->name)) + { + return PX_FALSE; + } + if(!PX_StringSet(&pValue->name,name)) return PX_FALSE; + + pValue->_number=value; + return PX_TRUE; +} + +px_bool PX_JsonCreateArrayValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[]) +{ + PX_memset(pValue,0,sizeof(PX_Json_Value)); + pValue->type=PX_JSON_VALUE_TYPE_STRING; + + if (!PX_StringInit(mp,&pValue->name)) + { + return PX_FALSE; + } + if(!PX_StringSet(&pValue->name,name)) return PX_FALSE; + PX_ListInit(mp,&pValue->_Array); + return PX_TRUE; +} diff --git a/code/PainterEngine/Kernel/PX_Json.h b/code/PainterEngine/Kernel/PX_Json.h new file mode 100644 index 0000000000000000000000000000000000000000..9b4c9bb28c03c587b415e61f1f559ae3844eff08 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Json.h @@ -0,0 +1,62 @@ +#ifndef PX_JSON_H +#define PX_JSON_H +#include "PX_Lexer.h" + + + +typedef enum +{ + PX_JSON_VALUE_TYPE_STRING, + PX_JSON_VALUE_TYPE_NUMBER, + PX_JSON_VALUE_TYPE_BOOLEAN, + PX_JSON_VALUE_TYPE_NULL, + PX_JSON_VALUE_TYPE_OBJECT, + PX_JSON_VALUE_TYPE_ARRAY, +}PX_JSON_VALUE_TYPE; + +typedef struct _PX_Json_Object +{ + px_list values; +}PX_Json_Object; + +typedef struct +{ + PX_JSON_VALUE_TYPE type; + px_string name; + union + { + px_string _string; + px_double _number; + px_bool _boolean; + PX_Json_Object json_Object; + px_list _Array; + }; +}PX_Json_Value; + +typedef struct _PX_Json_Object PX_Json_Object; + +typedef struct +{ + px_memorypool *mp; + PX_Json_Value rootValue; +}PX_Json; + + +PX_Json_Value *PX_JsonGetObjectValue(PX_Json_Value *json_value,const px_char name[]); +PX_Json_Value * PX_JsonGetValue(PX_Json *json,const px_char payload[]); +PX_Json_Value * PX_JsonGetArrayValue(PX_Json_Value *value,px_int i); + + +px_bool PX_JsonInitialize(px_memorypool *mp,PX_Json *pjson); + +px_bool PX_JsonParse(PX_Json *pjson,const px_char *json_content); +px_bool PX_JsonBuild_Value(PX_Json_Value *pValue,px_string *_out,px_bool bArrayValue); +px_bool PX_JsonBuild(PX_Json *pjson,px_string *_out); +px_void PX_JsonFree(PX_Json *pjson); + + +px_bool PX_JsonCreateObjectValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[]); +px_bool PX_JsonCreateStringValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[],const px_char text[]); +px_bool PX_JsonCreateNumberValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[],px_double value); +px_bool PX_JsonCreateArrayValue(px_memorypool *mp,PX_Json_Value *pValue,const px_char name[]); +#endif \ No newline at end of file diff --git a/code/PainterEngine/Kernel/PX_Kernel.h b/code/PainterEngine/Kernel/PX_Kernel.h new file mode 100644 index 0000000000000000000000000000000000000000..e863879efe152c3542f3f4189cd573c8809ba11d --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Kernel.h @@ -0,0 +1,23 @@ +////////////////////////////////////////////////////////////////////////// +/* + PainterEngine Kernel + (C)2019 DBinary + + This program is free software; you can redistribute it and/or modify + it under the terms of the BSD General Public License +*/ +////////////////////////////////////////////////////////////////////////// +#ifndef _PX_KERNEL_H +#define _PX_KERNEL_H +#include "PX_Script_Interpreter.h" +#include "PX_Script_ASMCompiler.h" +#include "PX_Script_VM.h" +#include "PX_Partical.h" +#include "PX_Animation.h" +#include "PX_World.h" +#include "PX_Sync.h" +#include "PX_Object.h" +#include "PX_Json.h" +#include "PX_3D_ObjData.h" +#include "PX_MODBUS.h" +#endif diff --git a/code/PainterEngine/Kernel/PX_Lexer.c b/code/PainterEngine/Kernel/PX_Lexer.c new file mode 100644 index 0000000000000000000000000000000000000000..e44fc537d328e9d443a19c44b082d4ad44bd9da3 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Lexer.c @@ -0,0 +1,702 @@ +#include "./PX_Lexer.h" + +static px_char * PX_LexerIsCommentStart(px_lexer *lexer,const px_char ch[]); +static px_char * PX_LexerIsCommentEnd(px_lexer *lexer,const px_char startch[],const px_char ch[]); +static px_char* PX_LexerIsContainerStart(px_lexer *lexer,const px_char ch[]); +static char* PX_LexerIsContainerEnd(px_lexer *lexer,const px_char startch[],const px_char ch[]); +static px_bool PX_LexerIsContainerTransfer(px_lexer *lexer,const px_char startch[],px_char ch); + +static px_int PX_LexerIsSpacer(px_lexer *lexer,px_char chr); +static px_int PX_LexerIsDelimiter(px_lexer *lexer,px_char chr); +static px_int PX_LexerFilterChar(px_lexer *lexer,px_char ch); +static px_int PX_LexerIsSourcsEnd(px_lexer *lexer); +static px_int PX_LexerIsNewLine(px_char ch); + +//CA_Token *GetToken(px_lexer *lexer,pt_string Mnemonic); +//px_void RegisterToken(pt_string Mnemonic,px_uint Type); + + + +//---------------------------------------------------------------------------------- + +//-------------------------------------------Lexer---------------------------------- + +px_bool PX_LexerIsCharNumeric(px_char chr) +{ + if (chr>=('0')&&chr<=('9')) + { + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_LexerIsStringNumeric(px_string *pString) +{ + return PX_StringIsNumeric(pString); +} + + + +// -------------------------------------------New Line------------------------------- +px_bool PX_LexerIsNewLine(px_char ch) +{ + return ch=='\r'||ch=='\n'; +} + +//-------------------------------------------Comment---------------------------------- + + +px_char * PX_LexerIsCommentStart(px_lexer *lexer,const px_char ch[]) +{ + px_int i=0; + for (i=0;iCommentCount;i++) + { + if(PX_memequ(ch,lexer->Comment[i].CommentBegin,PX_strlen(lexer->Comment[i].CommentBegin))) + return lexer->Comment[i].CommentBegin; + } + return PX_NULL; +} + +px_char * PX_LexerIsCommentEnd(px_lexer *lexer,const px_char startch[],const px_char ch[]) +{ + px_int i=0; + for (i=0;iCommentCount;i++) + { + if(PX_memequ(startch,lexer->Comment[i].CommentBegin,PX_strlen(lexer->Comment[i].CommentBegin))&&PX_memequ(ch,lexer->Comment[i].CommentEnd,PX_strlen(lexer->Comment[i].CommentEnd))) + { + lexer->CurrentCommentType=i; + return lexer->Comment[i].CommentEnd; + } + } + return PX_NULL; +} + + +//--------------------------------------------Spacer----------------------------------- + + +px_void PX_LexerRegisterSpacer(px_lexer *lexer,px_char Spacer) +{ + px_int i; + if (lexer->SpacerCountSpacerCount;i++) + { + if (lexer->Spacer[i]==Spacer) + { + return; + } + } + lexer->Spacer[lexer->SpacerCount++]=Spacer; + } +} + +px_bool PX_LexerIsSpacer(px_lexer *lexer,px_char chr) +{ + px_int i; + for (i=0;iSpacerCount;i++) + { + if (lexer->Spacer[i]==chr) + { + return PX_TRUE; + } + } + return PX_FALSE; +} +//--------------------------------------------Delimiter-------------------------------- + + +px_uint PX_LexerRegisterDelimiter(px_lexer *lexer,px_char Delimiter) +{ + px_int i; + if (lexer->DelimiterCountDelimiterCount;i++) + { + if (lexer->Delimiter[i]==Delimiter) + { + return i; + } + } + lexer->Delimiter[lexer->DelimiterCount++]=Delimiter; + return lexer->DelimiterCount-1; + } + return -1; +} + + + + + +px_int PX_LexerIsDelimiter(px_lexer *lexer,px_char chr) +{ + px_int i; + for (i=0;iDelimiterCount;i++) + { + if (lexer->Delimiter[i]==chr) + { + return PX_TRUE; + } + } + return PX_FALSE; +} + +px_uint PX_LexerGetDelimiterType(px_lexer *lexer,px_char Delimiter) +{ + px_int i; + for (i=0;iDelimiterCount;i++) + { + if (lexer->Delimiter[i]==Delimiter) + { + return i; + } + } + return -1; +} + +//--------------------------------------------Container--------------------------------- + + + +px_uint PX_LexerRegisterContainer(px_lexer *lexer,const px_char Begin[],const px_char End[]) +{ + px_int i; + if (lexer->ContainerCountContainerCount;i++) + { + if (lexer->Container[i].ContainerBegin==Begin&&lexer->Container[i].ContainerEnd==End) + { + return i; + } + } + PX_strcpy(lexer->Container[lexer->ContainerCount].ContainerBegin,Begin,sizeof(lexer->Container[lexer->ContainerCount].ContainerBegin)); + PX_strcpy(lexer->Container[lexer->ContainerCount].ContainerEnd,End,sizeof(lexer->Container[lexer->ContainerCount].ContainerEnd)); + lexer->ContainerCount++; + return lexer->ContainerCount-1; + } + return -1; +} + + +px_void PX_LexerRegisterContainerTransfer(px_lexer *lexer,px_uint containerIndex,px_char transfer) +{ + if(containerIndexContainer[containerIndex].transfer=transfer; +} + +px_uint PX_LexerGetContainerType(px_lexer *lexer,px_char *pContainerText) +{ + return lexer->CurrentContainerType; +} + +px_char * PX_LexerIsContainerStart(px_lexer *lexer,const px_char chr[]) +{ + px_int i=0; + for (i=0;iContainerCount;i++) + { + if(PX_memequ(chr,lexer->Container[i].ContainerBegin,PX_strlen(lexer->Container[i].ContainerBegin))) + return lexer->Container[i].ContainerBegin; + } + return PX_NULL; +} + +px_char * PX_LexerIsContainerEnd(px_lexer *lexer,const px_char startch[],const px_char ch[]) +{ + px_int i=0; + for (i=0;iContainerCount;i++) + { + if(PX_memequ(startch,lexer->Container[i].ContainerBegin,PX_strlen(startch))&&PX_memequ(ch,lexer->Container[i].ContainerEnd,PX_strlen(lexer->Container[i].ContainerEnd))) + { + lexer->CurrentContainerType=i; + return lexer->Container[i].ContainerEnd; + } + } + return PX_NULL; +} + + +//--------------------------------------------TOKEN------------------------------------- +// +// +// CA_Token *Pt_Lexer::GetToken(pt_string Mnemonic) +// { +// for (px_uint i=0;iTokens.size();i++) +// { +// if (strcmp(Mnemonic,lexer->Tokens[i].Mnemonic)==0) +// { +// return &lexer->Tokens[i]; +// } +// } +// return NULL; +// } +// +// +// px_void Pt_Lexer::RegisterToken(pt_string Mnemonic,px_uint Type) +// { +// +// if (GetToken(Mnemonic)!=NULL) +// { +// return; +// } +// +// CA_Token Token; +// PT_STRING_COPY(Token.Mnemonic,sizeof(Token.Mnemonic),Mnemonic); +// Token.Type=Type; +// +// lexer->Tokens.push_back(Token); +// +// } +px_void PX_LexerInit(px_lexer *lexer,px_memorypool *mp) +{ + lexer->CommentCount=0; + lexer->SpacerCount=0; + lexer->DelimiterCount=0; + lexer->ContainerCount=0; + lexer->SourceOffset=0; + lexer->Sources=PX_NULL; + lexer->mp=mp; + lexer->lexemeTokenCase=PX_LEXER_LEXEME_CASE_NORMAL; + lexer->NumericMath=PX_FALSE; + PX_StringInit(mp,&lexer->CurLexeme); + PX_memset(lexer->Delimiter,0,sizeof(lexer->Delimiter)); + PX_memset(lexer->Spacer,0,sizeof(lexer->Spacer)); + PX_memset(lexer->Container,0,sizeof(lexer->Container)); + PX_memset(lexer->Comment,0,sizeof(lexer->Comment)); +} + + + +px_int PX_LexerFilterChar(px_lexer *lexer,px_char ch) +{ + + switch(lexer->SortStatus) + { + case PX_LEXERSORT_STATUS_NORMAL: + if (PX_LexerIsSpacer(lexer,ch)) + { + lexer->SortStatus=PX_LEXER_SORT_STATUS_SPACER; + return PX_TRUE; + } + if (PX_LexerIsNewLine(ch)) + { + lexer->SortStatus=PX_LEXER_SORT_STATUS_NEWLINE; + return PX_TRUE; + } + return PX_TRUE; + break; + case PX_LEXER_SORT_STATUS_SPACER: + if (PX_LexerIsSpacer(lexer,ch)) + { + return PX_FALSE; + } + if (PX_LexerIsNewLine(ch)) + { + lexer->SortStatus=PX_LEXER_SORT_STATUS_NEWLINE; + return PX_TRUE; + } + lexer->SortStatus=PX_LEXERSORT_STATUS_NORMAL; + return PX_TRUE; + break; + case PX_LEXER_SORT_STATUS_NEWLINE: + if (PX_LexerIsSpacer(lexer,ch)||PX_LexerIsNewLine(ch)) + { + return PX_FALSE; + } + lexer->SortStatus=PX_LEXERSORT_STATUS_NORMAL; + return PX_TRUE; + } + return PX_TRUE; +} + +px_bool PX_LexerSortText(px_lexer *lexer,const px_char *SourceText) +{ + px_char *chrst,*chred; + px_char *pNewSourceText; + unsigned long Offset=0; + if (lexer->Sources) + { + MP_Free(lexer->mp,lexer->Sources); + lexer->SourceOffset=0; + lexer->SortStatus=PX_LEXERSORT_STATUS_NORMAL; + } + if ((lexer->Sources=(px_char *)MP_Malloc(lexer->mp,PX_strlen(SourceText)+1))==PX_NULL) + { + return PX_FALSE; + } + PX_memset(lexer->Sources,0,PX_strlen(SourceText)+1); + lexer->SortStatus=PX_LEXER_SORT_STATUS_NEWLINE; + + while(*SourceText) + { + //Comment trim + if (chrst=PX_LexerIsCommentStart(lexer,SourceText)) + { + SourceText+=PX_strlen(chrst); + while (!(chred=PX_LexerIsCommentEnd(lexer,chrst,SourceText))) + { + if (!*SourceText) + { + return PX_FALSE; + } + SourceText++; + } + //special end '\n' + if(*SourceText=='\n') + SourceText+=PX_strlen(chred)-1; + else + SourceText+=PX_strlen(chred); + continue; + } + + //container skip + if (chrst=PX_LexerIsContainerStart(lexer,SourceText)) + { + PX_memcpy(lexer->Sources+Offset,chrst,PX_strlen(chrst)); + Offset+=PX_strlen(chrst);; + SourceText+=PX_strlen(chrst); + + while (!(chred=PX_LexerIsContainerEnd(lexer,chrst,SourceText))) + { + if (*SourceText=='\0') + { + return PX_FALSE; + } + + if(PX_LexerIsContainerTransfer(lexer,chrst,*SourceText)&&PX_memequ(SourceText+1,chrst,PX_strlen(chrst))) + { + lexer->Sources[Offset++]=*(SourceText++); + lexer->Sources[Offset++]=*(SourceText++); + } + else + lexer->Sources[Offset++]=*(SourceText++); + } + PX_memcpy(lexer->Sources+Offset,chred,PX_strlen(chred)); + Offset+=PX_strlen(chred);; + SourceText+=PX_strlen(chred); + continue; + } + + + if (PX_LexerFilterChar(lexer,*SourceText)) + { + if(Offset>0)//forward trim + { + if(PX_LexerIsNewLine(*SourceText)&&PX_LexerIsSpacer(lexer,lexer->Sources[Offset-1])) + Offset--; + if(PX_LexerIsDelimiter(lexer,*SourceText)&&PX_LexerIsSpacer(lexer,lexer->Sources[Offset-1])) + Offset--; + } + lexer->Sources[Offset++]=*(SourceText); + } + SourceText++; + } + lexer->Sources[Offset]='\0'; + pNewSourceText=lexer->Sources; + + while (*pNewSourceText) + { + //replace \r + if(*pNewSourceText=='\r') + *pNewSourceText='\n'; + pNewSourceText++; + } + + return PX_TRUE; +} + + + + +px_int PX_LexerIsSourcsEnd(px_lexer *lexer) +{ + return !lexer->Sources[lexer->SourceOffset]; +} + + +PX_LEXER_LEXEME_TYPE PX_LexerGetNextLexeme(px_lexer *lexer) +{ + px_char *chrst,*chred; + px_uint i,oft; + px_bool match; + PX_StringClear(&lexer->CurLexeme); + lexer->Symbol=0; + if (lexer->Sources[lexer->SourceOffset]=='\0') + { + //printf("\n"); + lexer->Symbol='0'; + PX_StringCatChar(&lexer->CurLexeme,'\0'); + lexer->CurrentLexemeFlag=PX_LEXER_LEXEME_TYPE_END; + return PX_LEXER_LEXEME_TYPE_END; + } + if (chrst=PX_LexerIsContainerStart(lexer,(&lexer->Sources[lexer->SourceOffset]))) + { + PX_StringCat(&lexer->CurLexeme,chrst); + lexer->SourceOffset+=PX_strlen(chrst); + while (!(chred=PX_LexerIsContainerEnd(lexer,chrst,&lexer->Sources[lexer->SourceOffset]))) + { + if (PX_LexerIsSourcsEnd(lexer)) + { + return PX_LEXER_LEXEME_TYPE_ERR; + } + if(PX_LexerIsContainerTransfer(lexer,chrst,lexer->Sources[lexer->SourceOffset])&&PX_memequ(&lexer->Sources[lexer->SourceOffset+1],chrst,PX_strlen(chrst))) + { + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + } + else + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + } + PX_StringCat(&lexer->CurLexeme,chred); + lexer->SourceOffset+=PX_strlen(chred); + + //printf(" %s\n",lexer->CurLexeme); + lexer->CurrentLexemeFlag=PX_LEXER_LEXEME_TYPE_CONATINER; + return PX_LEXER_LEXEME_TYPE_CONATINER; + } + + if (PX_LexerIsSpacer(lexer,lexer->Sources[lexer->SourceOffset])) + { + lexer->Symbol=lexer->Sources[lexer->SourceOffset]; + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset]); + lexer->SourceOffset++; + //printf("\n"); + lexer->CurrentLexemeFlag=PX_LEXER_LEXEME_TYPE_SPACER; + return PX_LEXER_LEXEME_TYPE_SPACER; + } + + if (PX_LexerIsNewLine(lexer->Sources[lexer->SourceOffset])) + { + lexer->Symbol=lexer->Sources[lexer->SourceOffset]; + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset]); + lexer->SourceOffset++; + //printf("\n"); + lexer->CurrentLexemeFlag=PX_LEXER_LEXEME_TYPE_NEWLINE; + return PX_LEXER_LEXEME_TYPE_NEWLINE; + } + + + if (PX_LexerIsDelimiter(lexer,lexer->Sources[lexer->SourceOffset])) + { + lexer->Symbol=lexer->Sources[lexer->SourceOffset]; + for (i=0;(px_int)iDelimiterCount;i++) + { + if (lexer->Symbol==lexer->Delimiter[i]) + { + lexer->CurrentDelimiterType=i; + break; + } + } + + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset]); + //printf(" %c\n",lexer->Sources[lexer->SourceOffset]); + lexer->SourceOffset++; + lexer->CurrentLexemeFlag=PX_LEXER_LEXEME_TYPE_DELIMITER; + return PX_LEXER_LEXEME_TYPE_DELIMITER; + } + PX_StringClear(&lexer->CurLexeme); + lexer->Symbol='\0'; + while (!PX_LexerIsSourcsEnd(lexer)&&!PX_LexerIsDelimiter(lexer,lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsSpacer(lexer,lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsNewLine(lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsContainerStart(lexer,&lexer->Sources[lexer->SourceOffset])) + { + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + oft=lexer->SourceOffset; + + if (lexer->NumericMath&&lexer->Sources[lexer->SourceOffset]=='.'&&PX_LexerIsDelimiter(lexer,'.')) + { + match=PX_TRUE; + if (PX_StringIsNumeric(&lexer->CurLexeme)&&lexer->Sources[lexer->SourceOffset]=='.') + { + lexer->SourceOffset++; + while (!PX_LexerIsSourcsEnd(lexer)&&!PX_LexerIsDelimiter(lexer,lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsSpacer(lexer,lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsNewLine(lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsContainerStart(lexer,&lexer->Sources[lexer->SourceOffset])) + { + if(lexer->Sources[lexer->SourceOffset]>='0'&&lexer->Sources[lexer->SourceOffset]<='9') + { + lexer->SourceOffset++; + continue; + } + else + { + match=PX_FALSE; + break; + } + } + } + else + match=PX_FALSE; + + if (lexer->SourceOffset==oft+1) + { + match=PX_FALSE; + } + + lexer->SourceOffset=oft; + if (match) + { + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + while (!PX_LexerIsSourcsEnd(lexer)&&!PX_LexerIsDelimiter(lexer,lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsSpacer(lexer,lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsNewLine(lexer->Sources[lexer->SourceOffset])&&!PX_LexerIsContainerStart(lexer,&lexer->Sources[lexer->SourceOffset])) + PX_StringCatChar(&lexer->CurLexeme,lexer->Sources[lexer->SourceOffset++]); + } + } + + } + //printf(" %s\n",m_CurLexeme); + if (lexer->lexemeTokenCase==PX_LEXER_LEXEME_CASE_UPPER) + { + PX_strupr(lexer->CurLexeme.buffer); + } + + if (lexer->lexemeTokenCase==PX_LEXER_LEXEME_CASE_LOWER) + { + PX_strlwr(lexer->CurLexeme.buffer); + } + lexer->CurrentLexemeFlag=PX_LEXER_LEXEME_TYPE_TOKEN; + return PX_LEXER_LEXEME_TYPE_TOKEN; +} + +px_bool PX_LexerReadString(px_lexer *lexer,px_string *str,px_uint size) +{ + PX_StringClear(str); + while (size) + { + if (PX_LexerIsSourcsEnd(lexer)) + { + return PX_FALSE; + } + PX_StringCatChar(str,lexer->Sources[lexer->SourceOffset++]); + size--; + } + return PX_TRUE; +} + +px_void PX_LexerGetIncludedString(px_lexer *lexer,px_string *str) +{ + px_int left,right; + if(str!=&lexer->CurLexeme) + PX_StringCopy(str,&lexer->CurLexeme); + + if (lexer->CurrentLexemeFlag==PX_LEXER_LEXEME_TYPE_CONATINER) + { + left=PX_strlen(lexer->Container[lexer->CurrentContainerType].ContainerBegin); + right=PX_strlen(lexer->Container[lexer->CurrentContainerType].ContainerEnd); + PX_StringTrimRight(str,right); + PX_StringTrimLeft(str,left); + } +} + + +PX_LEXER_LEXEME_TYPE PX_LexerGetCurrentLexeme(px_lexer *lexer) +{ + return lexer->CurrentLexemeFlag; +} + +px_void PX_LexerRegisterComment(px_lexer *lexer,const px_char Begin[],const px_char End[] ) +{ + px_int i; + if (lexer->CommentCountCommentCount;i++) + { + if (lexer->Comment[i].CommentBegin==Begin&&lexer->Comment[i].CommentEnd==End) + { + return; + } + } + PX_strcpy(lexer->Comment[lexer->CommentCount].CommentBegin,Begin,sizeof(lexer->Comment[lexer->CommentCount].CommentBegin)); + PX_strcpy(lexer->Comment[lexer->CommentCount].CommentEnd,End,sizeof(lexer->Comment[lexer->CommentCount].CommentEnd)); + lexer->CommentCount++; + } +} + + +px_int PX_LexerLoadSourceFromMemory(px_lexer *lexer,const px_char *buffer) +{ + return PX_LexerSortText(lexer,buffer); +} + + +px_void PX_LexerFree(px_lexer *lexer) +{ + if(lexer->Sources) + MP_Free(lexer->mp,lexer->Sources); + + + PX_StringFree(&lexer->CurLexeme); + lexer->Sources=PX_NULL; +} + +px_void PX_LexerGetLexemeString(px_lexer *lexer,px_string *str) +{ + PX_StringCopy(str,&lexer->CurLexeme); +} + +px_char PX_LexerGetSymbol(px_lexer *lexer) +{ + return lexer->Symbol; +} + +PX_LEXER_STATE PX_LexerGetState(px_lexer *lexer) +{ + PX_LEXER_STATE state; + state.lexer=lexer; + state.offset=lexer->SourceOffset; + return state; +} + +px_void PX_LexerSetState(PX_LEXER_STATE state) +{ + state.lexer->SourceOffset=state.offset; +} + +px_char PX_LexerGetNextChar(px_lexer *lexer) +{ + char ch; + PX_StringClear(&lexer->CurLexeme); + ch=lexer->Sources[lexer->SourceOffset]; + lexer->SourceOffset++; + return ch; +} + +px_bool PX_LexerIsLememeIsNumeric(px_lexer *lexer) +{ + return PX_StringIsNumeric(&lexer->CurLexeme); +} + +px_void PX_LexerSetTokenCase(px_lexer *lexer,PX_LEXER_LEXEME_CASE _case) +{ + lexer->lexemeTokenCase=_case; +} + +px_bool PX_LexerSetSourcePointer(px_lexer *lexer,const px_char *buffer) +{ + lexer->Sources=(px_char *)buffer; + return PX_TRUE; +} + +px_uint PX_LexerGetCurrentContainerType(px_lexer *lexer) +{ + return lexer->CurrentContainerType; +} + +px_uint PX_LexerGetCurrentDelimiterType(px_lexer *lexer) +{ + return lexer->CurrentDelimiterType; +} + +px_void PX_LexerSetNumericMatch(px_lexer *lexer,px_bool b) +{ + lexer->NumericMath=b; +} + +px_bool PX_LexerIsContainerTransfer(px_lexer *lexer,const px_char startch[],px_char ch) +{ + px_int i=0; + for (i=0;iContainerCount;i++) + { + if(PX_memequ(startch,lexer->Container[i].ContainerBegin,PX_strlen(startch))&&lexer->Container[i].transfer&&lexer->Container[i].transfer==ch) + { + return PX_TRUE; + } + } + return PX_FALSE; +} + diff --git a/code/PainterEngine/Kernel/PX_Lexer.h b/code/PainterEngine/Kernel/PX_Lexer.h new file mode 100644 index 0000000000000000000000000000000000000000..4b0f444bf977c238d4388e49bf7a4604336dda9a --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Lexer.h @@ -0,0 +1,116 @@ +#ifndef __PX_LEXER_H +#define __PX_LEXER_H +#include "../Core/PX_Core.h" + +#define PX_LEXER_CA_COMMENT_MAX_COUNT 32 +#define PX_LEXER_CA_SPACER_MAX_COUNT 32 +#define PX_LEXER_CA_DELIMITER_MAX_COUNT 32 +#define PX_LEXER_CA_CONTAINER_MAX_COUNT 32 + +typedef enum __PX_LEXER_SORT_STATUS +{ + PX_LEXERSORT_STATUS_NORMAL= 0, + PX_LEXER_SORT_STATUS_SPACER= 1, + PX_LEXER_SORT_STATUS_COMMENT= 2, + PX_LEXER_SORT_STATUS_NEWLINE= 3, +}PX_LEXER_SORT_STATUS; + +typedef enum __PX_LEXER_LEXEME_CASE +{ + PX_LEXER_LEXEME_CASE_NORMAL, + PX_LEXER_LEXEME_CASE_LOWER, + PX_LEXER_LEXEME_CASE_UPPER, + +}PX_LEXER_LEXEME_CASE; + + +typedef struct PX_LEXER_CA_Container +{ + px_char ContainerBegin[8]; + px_char ContainerEnd[8]; + px_char transfer; +}PX_LEXER_CA_Container; + + +typedef struct PX_LEXER_CA_COMMENT +{ + px_char CommentBegin[8]; + px_char CommentEnd[8]; +}PX_LEXER_CA_Comment; + + +typedef enum __PX_LEXER_LEXEME_TYPE +{ + PX_LEXER_LEXEME_TYPE_END =0, + PX_LEXER_LEXEME_TYPE_SPACER =1, + PX_LEXER_LEXEME_TYPE_DELIMITER =2, + PX_LEXER_LEXEME_TYPE_CONATINER =3, + PX_LEXER_LEXEME_TYPE_NEWLINE =4, + PX_LEXER_LEXEME_TYPE_TOKEN =5, + PX_LEXER_LEXEME_TYPE_ERR = -1, +}PX_LEXER_LEXEME_TYPE; + +typedef struct __Pt_Lexer +{ + px_int ContainerCount; + px_int DelimiterCount; + px_int CommentCount; + px_char *Sources; + px_char SortComment; + px_ulong SourceOffset; + px_int SpacerCount; + px_char Symbol; + px_bool NumericMath; + px_uint CurrentDelimiterType; + px_uint CurrentContainerType; + px_uint CurrentCommentType; + + PX_LEXER_LEXEME_TYPE CurrentLexemeFlag; + PX_LEXER_SORT_STATUS SortStatus; + PX_LEXER_LEXEME_CASE lexemeTokenCase; + + px_string CurLexeme; + px_memorypool *mp; + + PX_LEXER_CA_Comment Comment[PX_LEXER_CA_COMMENT_MAX_COUNT]; + PX_LEXER_CA_Container Container[PX_LEXER_CA_CONTAINER_MAX_COUNT]; + px_char Spacer[PX_LEXER_CA_SPACER_MAX_COUNT]; + px_char Delimiter[PX_LEXER_CA_DELIMITER_MAX_COUNT]; + +}px_lexer; + +typedef struct __PX_LEXER_START +{ + px_int offset; + px_lexer *lexer; +}PX_LEXER_STATE; + +px_void PX_LexerInit(px_lexer *lexer,px_memorypool *mp); +px_void PX_LexerRegisterComment(px_lexer *lexer,const px_char Begin[],const px_char End[]); +px_uint PX_LexerRegisterContainer(px_lexer *lexer,const px_char Begin[],const px_char End[]); +px_void PX_LexerRegisterContainerTransfer(px_lexer *lexer,px_uint containerIndex,px_char transfer); + +px_void PX_LexerRegisterSpacer(px_lexer *lexer,px_char Spacer); +px_uint PX_LexerRegisterDelimiter(px_lexer *lexer,px_char Delimiter); +px_uint PX_LexerGetDelimiterType(px_lexer *lexer,px_char Delimiter); +px_uint PX_LexerGetContainerType(px_lexer *lexer,px_char *pContainerText); +px_uint PX_LexerGetCurrentContainerType(px_lexer *lexer); +px_uint PX_LexerGetCurrentDelimiterType(px_lexer *lexer); +px_void PX_LexerFree(px_lexer *lexer); +px_bool PX_LexerSortText(px_lexer *lexer,const px_char *SourceText); +px_bool PX_LexerLoadSourceFromMemory(px_lexer *lexer,const px_char *buffer); +px_bool PX_LexerSetSourcePointer(px_lexer *lexer,const px_char *buffer); +px_bool PX_LexerReadString(px_lexer *lexer,px_string *str,px_uint size); +px_char PX_LexerGetSymbol(px_lexer *lexer); +px_void PX_LexerGetLexemeString(px_lexer *lexer,px_string *str); +px_void PX_LexerGetIncludedString(px_lexer *lexer,px_string *str); +px_void PX_LexerSetTokenCase(px_lexer *lexer,PX_LEXER_LEXEME_CASE _case); +px_void PX_LexerSetNumericMatch(px_lexer *lexer,px_bool b); + +PX_LEXER_STATE PX_LexerGetState(px_lexer *lexer); +px_void PX_LexerSetState(PX_LEXER_STATE state); +px_bool PX_LexerIsLememeIsNumeric(px_lexer *lexer); +px_char PX_LexerGetNextChar(px_lexer *lexer); +PX_LEXER_LEXEME_TYPE PX_LexerGetNextLexeme(px_lexer *lexer); +PX_LEXER_LEXEME_TYPE PX_LexerGetCurrentLexeme(px_lexer *lexer); +#endif diff --git a/code/PainterEngine/Kernel/PX_MODBUS.c b/code/PainterEngine/Kernel/PX_MODBUS.c new file mode 100644 index 0000000000000000000000000000000000000000..b3c49b5cf6b1bed550d38edefce98f8a338ad3ae --- /dev/null +++ b/code/PainterEngine/Kernel/PX_MODBUS.c @@ -0,0 +1,27 @@ +#include "PX_MODBUS.h" + +px_int PX_ModbusPacketBuild(PX_ModbusPacket *packet,px_byte opcode,px_word startAddr,px_word regcount, px_byte *buffer,px_int size) +{ + packet->magic=0; + packet->protocol=0; + packet->size=size+6; + packet->startAddress[0]=0xff&(startAddr>>8); + packet->startAddress[1]=0xff&(startAddr); + packet->regcount[0]=0xff&(regcount>>8); + packet->regcount[1]=0xff&(regcount); + packet->opcode=opcode; + packet->unit=1; + if(size) + PX_memcpy(packet->data,buffer,size); + return size+9; +} + +px_int PX_ModbusWrite(PX_ModbusPacket *packet,px_word startAddr,px_word regcount, px_word *buffer,px_int size) +{ + return PX_ModbusPacketBuild(packet,0x06,startAddr,regcount,(px_byte *)buffer,size*2); +} + +px_int PX_ModbusRead(PX_ModbusPacket *packet,px_word startAddr,px_word regcount) +{ + return PX_ModbusPacketBuild(packet,0x03,startAddr,regcount,"",0); +} diff --git a/code/PainterEngine/Kernel/PX_MODBUS.h b/code/PainterEngine/Kernel/PX_MODBUS.h new file mode 100644 index 0000000000000000000000000000000000000000..78c543e366dd63c86a6508f97ceb6b3051adb69f --- /dev/null +++ b/code/PainterEngine/Kernel/PX_MODBUS.h @@ -0,0 +1,26 @@ +//Modbus RTU +//Code by DBinary 2019-11-25 for PainterEngine + +#ifndef PX_MODBUS_H +#define PX_MODBUS_H +#include "../core/PX_Core.h" + + +typedef struct +{ + px_word protocol; + px_word magic; + px_byte size; + px_byte unit; + px_byte opcode; + px_byte startAddress[2]; + px_byte regcount[2]; + px_byte data[247]; +}PX_ModbusPacket; + +px_int PX_ModbusPacketBuild(PX_ModbusPacket *packet,px_byte opcode,px_word startAddr,px_word regcount, px_byte *buffer,px_int size); +px_int PX_ModbusWrite(PX_ModbusPacket *packet,px_word startAddr,px_word regcount, px_word *buffer,px_int size); +px_int PX_ModbusRead(PX_ModbusPacket *packet,px_word startAddr,px_word regcount); + +#endif + diff --git a/code/PainterEngine/Kernel/PX_Object.c b/code/PainterEngine/Kernel/PX_Object.c new file mode 100644 index 0000000000000000000000000000000000000000..e9dde596b115c34416166486ec6e3459d11a6a2c --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Object.c @@ -0,0 +1,7209 @@ +#include "PX_Object.h" + + +PX_Object * PX_ObjectGetChild( PX_Object *Object,px_int Index ) +{ + PX_Object *pObject; + if (!Object) + { + return PX_NULL; + } + pObject=Object->pChilds; + while (Index>0&&pObject) + { + pObject=pObject->pNextBrother; + Index--; + } + return pObject; + +} + +PX_Object * PX_ObjectCreate(px_memorypool *mp,PX_Object *Parent,px_float x,px_float y,px_float z,px_float Width,px_float Height,px_float Lenght) +{ + + PX_Object *pObject=(PX_Object *)MP_Malloc(mp,sizeof(PX_Object)); + + if (pObject==PX_NULL) + { + return PX_NULL; + } + PX_ObjectInit(mp,pObject,Parent,x,y,z,Width,Height,Lenght); + + return pObject; +} + + + +PX_Object * PX_ObjectCreateEx(px_memorypool *mp,PX_Object *Parent,px_float x,px_float y,px_float z,px_float Width,px_float Height,px_float Lenght,px_int type,Function_ObjectUpdate Func_ObjectUpdate,Function_ObjectRender Func_ObjectRender,Function_ObjectFree Func_ObjectFree,px_void *desc,px_int size) +{ + PX_Object *pObject=PX_ObjectCreate(mp,Parent,x,y,z,Width,Height,Lenght); + if (pObject) + { + pObject->pObject=MP_Malloc(mp,size); + if (!pObject->pObject) + { + MP_Free(mp,pObject); + return PX_NULL; + } + PX_memcpy(pObject->pObject,desc,size); + pObject->Type=type; + pObject->Func_ObjectFree=Func_ObjectFree; + pObject->Func_ObjectRender=Func_ObjectRender; + pObject->Func_ObjectUpdate=Func_ObjectUpdate; + } + return pObject; +} + +static px_void PX_Object_ObjectEventFree( PX_Object **Object ) +{ + PX_OBJECT_EventAction *pNext,*pCur;; + //PX_Object_Free Events linker + pCur=(*Object)->pEventActions; + while (pCur) + { + pNext=pCur->pNext; + MP_Free((*Object)->mp,pCur); + pCur=pNext; + } + + (*Object)->pEventActions=PX_NULL; +} + + + +static px_void PX_Object_ObjectFree( PX_Object *Object ) +{ + PX_Object_ObjectEventFree(&Object); + if (Object->Func_ObjectFree!=0) + { + Object->Func_ObjectFree(Object); + } + if(Object->pObject) + MP_Free(Object->mp,Object->pObject); + + MP_Free(Object->mp,Object); +} + + +static px_void PX_Object_DeleteLinkerObject( PX_Object **ppObject ) +{ + PX_Object *Object=(*ppObject); + + if (Object==PX_NULL) + { + return; + } + PX_Object_DeleteLinkerObject(&Object->pNextBrother); + PX_Object_DeleteLinkerObject(&Object->pChilds); + + PX_Object_ObjectFree(Object); + + (*ppObject)=PX_NULL; +} + +px_void PX_ObjectDelete( PX_Object *pObject ) +{ + if (pObject==PX_NULL) + { + return; + } + + if (pObject->pChilds!=PX_NULL) + { + PX_Object_DeleteLinkerObject(&pObject->pChilds); + } + + if (pObject->pParent!=PX_NULL) + { + if (pObject->pParent->pChilds==pObject) + { + pObject->pParent->pChilds=pObject->pNextBrother; + if(pObject->pNextBrother) + { + pObject->pNextBrother->pParent=pObject->pParent; + pObject->pNextBrother->pPreBrother=PX_NULL; + } + } + else + { + if (pObject->pPreBrother!=PX_NULL) + { + pObject->pPreBrother->pNextBrother=pObject->pNextBrother; + if(pObject->pNextBrother) + pObject->pNextBrother->pPreBrother=pObject->pPreBrother; + } + else + { + PX_ERROR("Invalid GUI Object struct"); + } + } + } + else + { + if (pObject->pPreBrother!=PX_NULL) + { + pObject->pPreBrother=pObject->pNextBrother; + } + } + + + PX_Object_ObjectFree(pObject); + +} + + +px_void PX_ObjectDeleteChilds( PX_Object *pObject ) +{ + if (pObject==PX_NULL) + { + return; + } + + if (pObject->pChilds!=PX_NULL) + { + PX_Object_DeleteLinkerObject(&pObject->pChilds); + } +} + +px_void PX_Object_ObjectLinkerUpdate( PX_Object *Object,px_uint elpased) +{ + if (Object==PX_NULL) + { + return; + } + if (Object->Visible!=PX_FALSE) + { + if (Object->Func_ObjectUpdate!=0) + { + Object->Func_ObjectUpdate(Object,elpased); + } + PX_Object_ObjectLinkerUpdate(Object->pChilds,elpased); + } + PX_Object_ObjectLinkerUpdate(Object->pNextBrother,elpased); +} + + +px_void PX_ObjectUpdate(PX_Object *Object,px_uint elpased ) +{ + if (Object==PX_NULL) + { + PX_ASSERT(); + return; + } + if (Object->Visible==PX_FALSE||Object->Enabled==PX_FALSE) + { + return; + } + if (Object->Func_ObjectUpdate!=0) + { + Object->Func_ObjectUpdate(Object,elpased); + } + if (Object->pChilds!=PX_NULL) + { + PX_Object_ObjectLinkerUpdate(Object->pChilds,elpased); + } +} + + + + +px_void PX_Object_ObjectLinkerRender(px_surface *pSurface, PX_Object *Object,px_uint elpased) +{ + if (Object==PX_NULL) + { + return; + } + if (Object->Visible!=PX_FALSE) + { + if (Object->Func_ObjectRender!=0) + { + Object->Func_ObjectRender(pSurface,Object,elpased); + } + PX_Object_ObjectLinkerRender(pSurface,Object->pChilds,elpased); + } + PX_Object_ObjectLinkerRender(pSurface,Object->pNextBrother,elpased); +} + + +px_void PX_ObjectRender(px_surface *pSurface, PX_Object *Object,px_uint elpased ) +{ + if (Object==PX_NULL) + { + return; + } + if (Object->Visible==PX_FALSE) + { + return; + } + if (Object->Func_ObjectRender!=0) + { + Object->Func_ObjectRender(pSurface,Object,elpased); + } + if (Object->pChilds!=PX_NULL) + { + PX_Object_ObjectLinkerRender(pSurface,Object->pChilds,elpased); + } +} + + + +px_bool PX_ObjectIsPointInRegion( PX_Object *Object,px_float x,px_float y ) +{ + return PX_isXYInRegion(x,y,Object->x,Object->y,Object->Width,Object->Height); +} + +px_bool PX_ObjectIsCursorInRegion(PX_Object *Object,PX_Object_Event e) +{ + return PX_ObjectIsPointInRegion(Object,(px_float)e.Param_int[0],(px_float)e.Param_int[1]); +} + +px_float PX_ObjectGetHeight(PX_Object *Object) +{ + return Object->Height; +} + +px_float PX_ObjectGetWidth(PX_Object *Object) +{ + return Object->Width; +} + + +px_void PX_ObjectInit(px_memorypool *mp,PX_Object *pObject,PX_Object *Parent,px_float x,px_float y,px_float z,px_float Width,px_float Height,px_float Lenght ) +{ + PX_Object *pLinker; + pObject->pParent=Parent; + + + pObject->x=x; + pObject->y=y; + pObject->z=z; + pObject->Width=Width; + pObject->Height=Height; + + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->pChilds=PX_NULL; + pObject->pObject=PX_NULL; + pObject->pNextBrother=PX_NULL; + pObject->pPreBrother=PX_NULL; + pObject->Type=PX_OBJECT_TYPE_NULL; + pObject->ReceiveEvents=PX_TRUE; + pObject->impact_test_type=0; + pObject->impact_Object_type=0; + pObject->pEventActions=PX_NULL; + pObject->world_index=-1; + pObject->User_int=0; + pObject->diameter=0; + pObject->User_ptr=PX_NULL; + + pObject->mp=mp; + pObject->Func_ObjectFree=PX_NULL; + pObject->Func_ObjectRender=PX_NULL; + + if (Parent!=PX_NULL) + { + if(Parent->pChilds==PX_NULL) + { + Parent->pChilds=pObject; + } + else + { + pLinker=Parent->pChilds; + while (pLinker->pNextBrother) + { + pLinker=pLinker->pNextBrother; + } + pLinker->pNextBrother=pObject; + pObject->pPreBrother=pLinker; + } + } +} + + + +px_void PX_ObjectSetRenderLinker(PX_Object *pObject) +{ + if (pObject) + { + + PX_ObjectSetRenderLinker(pObject->pNextBrother); + PX_ObjectSetRenderLinker(pObject->pChilds); + } +} + + + +px_void PX_ObjectSetVisible( PX_Object *Object,px_bool visible ) +{ + if(Object!=PX_NULL) + { + if (visible==Object->Visible) + { + return; + } + + if (visible==PX_FALSE&&Object->Visible==PX_TRUE) + { + //PX_Object_ObjectClear(Object); + } + else + { + if (visible==PX_TRUE&&Object->Visible==PX_FALSE) + { + + PX_ObjectSetRenderLinker(Object->pChilds); + } + } + Object->Visible=visible; + } +} + + + + + + + +px_int PX_ObjectRegisterEvent( PX_Object *Object,px_uint Event,px_void (*ProcessFunc)(PX_Object *,PX_Object_Event e,px_void *user_ptr),px_void *user) +{ + PX_OBJECT_EventAction *pPoint; + PX_OBJECT_EventAction *pAction=(PX_OBJECT_EventAction *)MP_Malloc(Object->mp,sizeof(PX_OBJECT_EventAction)); + if (pAction==PX_NULL) + { + return PX_FALSE; + } + pAction->pNext=PX_NULL; + pAction->pPre=PX_NULL; + pAction->EventAction=Event; + pAction->EventActionFunc=ProcessFunc; + + pAction->user_ptr=user; + + pPoint=Object->pEventActions; + if (pPoint==PX_NULL) + { + Object->pEventActions=pAction; + return PX_TRUE; + } + + while(pPoint->pNext) + { + pPoint=pPoint->pNext; + } + pAction->pPre=pPoint; + pPoint->pNext=pAction; + + return PX_TRUE; +} + + +px_void PX_ObjectExecuteEvent(PX_Object *pPost,PX_Object_Event Event) +{ + PX_OBJECT_EventAction *EventAction; + if (pPost==PX_NULL) + { + return; + } + + EventAction=pPost->pEventActions; + while(EventAction) + { + if (EventAction->EventAction==Event.Event) + { + EventAction->EventActionFunc(pPost,Event,EventAction->user_ptr); + } + EventAction=EventAction->pNext; + } +} + + +px_void PX_ObjectPostEvent( PX_Object *pPost,PX_Object_Event Event ) +{ + PX_OBJECT_EventAction *EventAction; + + if (pPost==PX_NULL) + { + return; + } + + if (pPost->Visible==PX_FALSE||pPost->Enabled==PX_FALSE||pPost->ReceiveEvents==PX_FALSE) + { + PX_ObjectPostEvent(pPost->pNextBrother,Event); + return; + } + + + EventAction=pPost->pEventActions; + while(EventAction) + { + if (EventAction->EventAction==PX_OBJECT_EVENT_ANY||EventAction->EventAction==Event.Event) + { + EventAction->EventActionFunc(pPost,Event,EventAction->user_ptr); + } + EventAction=EventAction->pNext; + } + + PX_ObjectPostEvent(pPost->pNextBrother,Event); + PX_ObjectPostEvent(pPost->pChilds,Event); +} + + + + + +PX_Object* PX_Object_LabelCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const px_char *Text,px_color Color ) +{ + px_int TextLen; + PX_Object *pObject; + PX_Object_Label *pLable=(PX_Object_Label *)MP_Malloc(mp,sizeof(PX_Object_Label)); + if (pLable==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + + if (pObject==PX_NULL) + { + return PX_NULL; + } + + if (!pObject) + { + MP_Free(mp,pLable); + return PX_NULL; + } + pObject->pObject=pLable; + pObject->Type=PX_OBJECT_TYPE_LABEL; + pObject->ReceiveEvents=PX_FALSE; + pObject->Func_ObjectFree=PX_Object_LabelFree; + pObject->Func_ObjectRender=PX_Object_LabelRender; + + TextLen=PX_strlen(Text); + + pLable->Text=(px_char *)MP_Malloc(mp,TextLen+1); + if (pLable->Text==PX_NULL) + { + MP_Free(pObject->mp,pObject); + MP_Free(pObject->mp,pLable); + return PX_NULL; + } + + PX_strcpy(pLable->Text,Text,TextLen+1); + + pLable->TextColor=Color; + pLable->BackgroundColor=PX_COLOR(0,0,0,0); + pLable->Border=PX_FALSE; + pLable->Align=PX_OBJECT_ALIGN_HCENTER|PX_OBJECT_ALIGN_VCENTER; + + return pObject; +} + + +PX_Object_Label * PX_Object_GetLabel( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_LABEL) + return (PX_Object_Label *)Object->pObject; + else + return PX_NULL; +} + +px_char * PX_Object_LabelGetText( PX_Object *Label ) +{ + PX_Object_Label *pLabel=PX_Object_GetLabel(Label); + if (pLabel!=PX_NULL) + { + return pLabel->Text; + } + return PX_NULL; +} +px_void PX_Object_LabelSetText( PX_Object *pObject,px_char *Text ) +{ + PX_Object_Label *pLabel; + px_int TextLen; + if (pObject==PX_NULL||Text==PX_NULL) + { + return; + } + if (pObject->Type!=PX_OBJECT_TYPE_LABEL) + { + return; + } + + TextLen=PX_strlen(Text); + pLabel=(PX_Object_Label *)pObject->pObject; + if(TextLen>PX_strlen(pLabel->Text)) + { + MP_Free(pObject->mp,pLabel->Text); + pLabel->Text=(px_char *)MP_Malloc(pObject->mp,TextLen+1); + if (!pLabel->Text) + { + PX_ERROR("Text create out of memories"); + } + PX_strcpy(pLabel->Text,Text,TextLen+1); + } + else + { + PX_strcpy(pLabel->Text,Text,TextLen+1); + } +} + + +px_void PX_Object_LabelSetTextColor(PX_Object *pObject,px_color Color) +{ + PX_Object_Label * pLabel=PX_Object_GetLabel(pObject); + if (pLabel) + { + pLabel->TextColor=Color; + } +} + + +px_void PX_Object_LabelSetBackgroundColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_Label * pLabel=PX_Object_GetLabel(pObject); + if (pLabel) + { + pLabel->BackgroundColor=Color; + } +} +px_void PX_Object_LabelSetAlign( PX_Object *pObject,px_dword Align ) +{ + PX_Object_Label * pLabel=PX_Object_GetLabel(pObject); + if (pLabel) + { + + pLabel->Align=Align; + } +} +px_void PX_Object_LabelSetBorder( PX_Object *pLabel,px_bool Border ) +{ + PX_Object_Label *Label=PX_Object_GetLabel(pLabel); + if (Label) + { + Label->Border=Border; + } +} + +px_void PX_Object_LabelRender(px_surface *psurface, PX_Object *pObject,px_uint elpased) +{ + px_int TextLen,i; + px_int x,y; + PX_Object_Label *pLabel=(PX_Object_Label *)pObject->pObject; + if (pLabel==PX_NULL) + { + return; + } + + if (!pObject->Visible) + { + return; + } + + TextLen=0; + for (i=0;iText);i++) + { + if (pLabel->Text[i]&0x80) + { + TextLen+=__PX_FONT_GBKSIZE; + i++; + continue; + } + else + { + TextLen+=__PX_FONT_ASCSIZE; + } + } + x=(px_int)pObject->x; + y=(px_int)pObject->y; + + if (pLabel->Align&PX_OBJECT_ALIGN_HCENTER) + { + x=(px_int)pObject->x; + x=x+(px_int)(pObject->Width-TextLen)/2; + } + + if (pLabel->Align&PX_OBJECT_ALIGN_VCENTER) + { + y=(px_int)pObject->y; + y=y+(px_int)(pObject->Height-__PX_FONT_HEIGHT)/2; + } + + + if (pLabel->Align&PX_OBJECT_ALIGN_LEFT) + { + x=(px_int)pObject->x; + } + + if (pLabel->Align&PX_OBJECT_ALIGN_RIGHT) + { + x=(px_int)pObject->x+(px_int)pObject->Width-TextLen; + } + + if (pLabel->Align&PX_OBJECT_ALIGN_TOP) + { + y=(px_int)pObject->y; + } + + if (pLabel->Align&PX_OBJECT_ALIGN_BOTTOM) + { + y=(px_int)pObject->y+(px_int)pObject->Height-__PX_FONT_HEIGHT; + } + + + PX_GeoDrawRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pLabel->BackgroundColor); + + if (pLabel->Border) + { + PX_GeoDrawBorder(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,1,pLabel->TextColor); + } + + PX_FontDrawText(psurface,x,y,pLabel->Text,pLabel->TextColor,PX_FONT_ALIGN_XLEFT); +} + +px_void PX_Object_LabelFree( PX_Object *pLabel ) +{ + PX_Object_Label *Label=PX_Object_GetLabel(pLabel); + if (pLabel!=PX_NULL) + { + MP_Free(pLabel->mp,Label->Text); + } +} + + +PX_Object * PX_Object_ProcessBarCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height ) +{ + PX_Object *pObject; + PX_Object_ProcessBar *ProcessBar=(PX_Object_ProcessBar *)MP_Malloc(mp,sizeof(PX_Object_ProcessBar)); + if (ProcessBar==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,ProcessBar); + return PX_NULL; + } + + pObject->pObject=ProcessBar; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_PROCESSBAR; + pObject->ReceiveEvents=PX_FALSE; + pObject->Func_ObjectFree=PX_Object_ProcessBarFree; + pObject->Func_ObjectRender=PX_Object_ProcessBarRender; + + ProcessBar->MAX=100; + ProcessBar->Value=0; + ProcessBar->Color=PX_COLOR(255,0,0,128); + ProcessBar->BackgroundColor=PX_COLOR(0,0,0,0); + return pObject; +} + +px_void PX_Object_ProcessBarSetColor( PX_Object *pProcessBar,px_color Color) +{ + PX_Object_ProcessBar *pProcess=PX_Object_GetProcessBar(pProcessBar); + if (pProcess!=PX_NULL) + { + + pProcess->Color=Color; + } +} + +px_void PX_Object_ProcessBarSetValue( PX_Object *pProcessBar,px_int Value ) +{ + PX_Object_ProcessBar *pProcess=PX_Object_GetProcessBar(pProcessBar); + if (pProcess!=PX_NULL) + { + pProcess->Value=Value; + } +} + +px_void PX_Object_ProcessBarSetMax( PX_Object *pProcessBar,px_int Max ) +{ + PX_Object_ProcessBar *pProcess=PX_Object_GetProcessBar(pProcessBar); + if (pProcess!=PX_NULL) + { + + pProcess->MAX=Max; + } +} + +px_void PX_Object_ProcessBarRender(px_surface *psurface, PX_Object *pObject,px_uint elpased) +{ + px_int px,py,pl;//Processing start X,Processing Start Y &Processing length + + PX_Object_ProcessBar *pProcessBar=(PX_Object_ProcessBar *)pObject->pObject; + + px=(px_int)pObject->x+2; //increase line width + py=(px_int)pObject->y+2; + + if (pProcessBar->Value<0) + { + pProcessBar->Value=0; + } + if (pProcessBar->Value>pProcessBar->MAX) + { + pProcessBar->Value=pProcessBar->MAX; + } + + if (pObject->Width<=4) + { + return; + } + if(pProcessBar->ValueMAX) + pl=(px_int)((pObject->Width-4)*((pProcessBar->Value*1.0)/pProcessBar->MAX)); + else + pl=(px_int)pObject->Width-2; + //Draw BackGround + PX_SurfaceClear( + psurface, + (px_int)pObject->x, + (px_int)pObject->y, + (px_int)pObject->x+(px_int)pObject->Width-1, + (px_int)pObject->y+(px_int)pObject->Height-1, + pProcessBar->BackgroundColor + ); + //Draw border + PX_GeoDrawBorder( + psurface, + (px_int)pObject->x, + (px_int)pObject->y, + (px_int)pObject->x+(px_int)pObject->Width-1, + (px_int)pObject->y+(px_int)pObject->Height-1, + 1, + pProcessBar->Color + ); + + PX_GeoDrawRect(psurface,px,py,px+pl-2-1,py+(px_int)pObject->Height-4-1,pProcessBar->Color); + +} + +PX_Object_ProcessBar * PX_Object_GetProcessBar( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_PROCESSBAR) + return (PX_Object_ProcessBar *)Object->pObject; + else + return PX_NULL; +} + + + +px_int PX_Object_ProcessBarGetValue( PX_Object *pProcessBar ) +{ + if (pProcessBar->Type!=PX_OBJECT_TYPE_PROCESSBAR) + { + return 0; + } + return PX_Object_GetProcessBar(pProcessBar)->Value; +} + + + +PX_Object * PX_Object_RadiusICOCreate(px_memorypool *mp,PX_Object*Parent,px_int x,px_int y,px_int Radius ) +{ + PX_Object *pObject; + PX_Object_RadiusICO *RadiusICO=(PX_Object_RadiusICO *)MP_Malloc(mp,sizeof(PX_Object_RadiusICO)); + if (RadiusICO==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)(x-Radius),(px_float)(y-Radius),0,(px_float)(2*Radius),(px_float)(2*Radius),0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,RadiusICO); + return PX_NULL; + } + + pObject->pObject=RadiusICO; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_RADIUSICO; + pObject->ReceiveEvents=PX_FALSE; + pObject->Func_ObjectFree=PX_Object_RadiusICOFree; + pObject->Func_ObjectRender=PX_Object_RadiusICORender; + RadiusICO->Radius=Radius; + RadiusICO->Color=PX_COLOR(255,0,255,0); + return pObject; +} + +PX_Object_RadiusICO * PX_Object_GetRadiusICO( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_RADIUSICO) + return (PX_Object_RadiusICO *)Object->pObject; + else + return PX_NULL; +} + +px_void PX_Object_RadiusICOSetColor( PX_Object *RadiusICO,px_color Color ) +{ + PX_Object_RadiusICO *pRadius=PX_Object_GetRadiusICO(RadiusICO); + if (pRadius!=PX_NULL) + { + + pRadius->Color=Color; + } +} + +px_void PX_Object_RadiusICORender(px_surface *psurface, PX_Object *RadiusICO,px_uint elpased) +{ + px_int x,y,r; + px_color BorderColor; + PX_Object_RadiusICO *pRadius=PX_Object_GetRadiusICO(RadiusICO); + if (pRadius==PX_NULL) + { + return; + } + if(pRadius->Radius<=2) + { + return; + } + BorderColor=pRadius->Color; + BorderColor._argb.a=32; + r=pRadius->Radius; + x=(px_int)RadiusICO->x+r; + y=(px_int)RadiusICO->y+r; + PX_GeoDrawSolidCircle(psurface,x,y,r,BorderColor); + PX_GeoDrawSolidCircle(psurface,x,y,r-2,pRadius->Color); +} + + +PX_Object * PX_Object_ImageCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_texture *ptex ) +{ + PX_Object *pObject; + PX_Object_Image *pImage=(PX_Object_Image *)MP_Malloc(mp,sizeof(PX_Object_Image)); + if (pImage==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,0,0,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pImage); + return PX_NULL; + } + + pObject->pObject=pImage; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_IMAGE; + pObject->ReceiveEvents=PX_FALSE; + pObject->Func_ObjectFree=PX_Object_ImageFree; + pObject->Func_ObjectRender=PX_Object_ImageRender; + pImage->pTexture=ptex; + pImage->pmask=PX_NULL; + pImage->Align=PX_OBJECT_ALIGN_HCENTER|PX_OBJECT_ALIGN_VCENTER; + return pObject; +} + + +PX_Object_Image * PX_Object_GetImage( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_IMAGE) + return (PX_Object_Image *)Object->pObject; + else + return PX_NULL; +} + +px_void PX_Object_ImageSetAlign( PX_Object *pImage,px_dword Align) +{ + PX_Object_Image *Bitmap=PX_Object_GetImage(pImage); + if (Bitmap) + { + Bitmap->Align=Align; + } +} + + +px_void PX_Object_ImageSetMask(PX_Object *pObject,px_texture *pmask) +{ + PX_Object_Image *pImg=PX_Object_GetImage(pObject); + if (pImg) + { + pImg->pmask=pmask; + } +} + + +px_void PX_Object_ImageRender(px_surface *psurface, PX_Object *im,px_uint elpased) +{ + px_int x; + px_int y; + PX_Object_Image *pImage=PX_Object_GetImage(im); + + if (!pImage->pTexture) + { + return; + } + + x=(px_int)im->x; + y=(px_int)im->y; + + if (pImage->Align&PX_OBJECT_ALIGN_BOTTOM) + { + y=(px_int)im->y+(px_int)im->Height-pImage->pTexture->height; + } + if (pImage->Align&PX_OBJECT_ALIGN_TOP) + { + y=(px_int)im->y; + } + if (pImage->Align&PX_OBJECT_ALIGN_LEFT) + { + x=(px_int)im->x; + } + if (pImage->Align&PX_OBJECT_ALIGN_RIGHT) + { + x=(px_int)im->x+(px_int)im->Width-pImage->pTexture->width; + } + + if (pImage->Align&PX_OBJECT_ALIGN_HCENTER) + { + x=(px_int)im->x+((px_int)im->Width-pImage->pTexture->width)/2; + } + if (pImage->Align&PX_OBJECT_ALIGN_VCENTER) + { + y=(px_int)im->y+((px_int)im->Height-pImage->pTexture->height)/2; + } + + if (pImage!=PX_NULL) + { + if(pImage->pmask) + PX_TextureRenderMask(psurface,pImage->pmask,pImage->pTexture,x,y,PX_TEXTURERENDER_REFPOINT_LEFTTOP,PX_NULL); + else + PX_TextureRender(psurface,pImage->pTexture,x,y,PX_TEXTURERENDER_REFPOINT_LEFTTOP,PX_NULL); + } +} + +px_void PX_Object_SliderBarOnMouseLButtonDown(PX_Object *pObject,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_SliderBar *pSliderBar=PX_Object_GetSliderBar(pObject); + px_int x,y; + px_int SliderBtnLen,Sx,Sy; + px_rect rect; + x=e.Param_int[0]; + y=e.Param_int[1]; + + + if (pSliderBar) + { + + if(PX_ObjectIsPointInRegion(pObject,(px_float)x,(px_float)y)) + { + if (pSliderBar==PX_NULL) + { + return; + } + + if (pObject->Width<=10) + { + return; + } + + if (pObject->Height<10) + { + return; + } + + SliderBtnLen=pSliderBar->SliderButtonLength; + + + if(pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL) + { + switch(pSliderBar->style) + { + case PX_OBJECT_SLIDERBAR_STYLE_LINER: + { + Sx=(px_int)pObject->x+(px_int)((pObject->Width-4-pSliderBar->SliderButtonLength)*(1.0f)*pSliderBar->Value/pSliderBar->Max); + + + rect.x=(px_float)Sx; + rect.y=(px_float)pObject->y; + rect.width=(px_float)pSliderBar->SliderButtonLength; + + rect.height=(px_float)pObject->Height; + + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),rect)) + { + pSliderBar->btnDownX=x; + pSliderBar->btnDownY=y; + pSliderBar->status=PX_OBJECT_SLIDERBAR_STATUS_ONDRAG; + } + } + break; + case PX_OBJECT_SLIDERBAR_STYLE_BOX: + { + Sx=(px_int)pObject->x+(px_int)((pObject->Width-4-pSliderBar->SliderButtonLength)*(1.0f)*pSliderBar->Value/pSliderBar->Max); + + rect.x=(px_float)Sx; + rect.y=(px_float)pObject->y+2; + rect.width=(px_float)pSliderBar->SliderButtonLength; + rect.height=(px_float)pObject->Height-2; + + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),rect)) + { + pSliderBar->btnDownX=x; + pSliderBar->btnDownY=y; + pSliderBar->status=PX_OBJECT_SLIDERBAR_STATUS_ONDRAG; + } + else if(x>rect.x) + { + pSliderBar->Value+=pSliderBar->Max*pSliderBar->SliderButtonLength/((px_int)pObject->Width-4); + if (pSliderBar->Value>pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + } + else + { + pSliderBar->Value-=pSliderBar->Max*pSliderBar->SliderButtonLength/((px_int)pObject->Width-4); + if (pSliderBar->Value<0) + { + pSliderBar->Value=0; + } + } + + } + break; + } + + + } + + if (pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_VERTICAL) + { + switch(pSliderBar->style) + { + case PX_OBJECT_SLIDERBAR_STYLE_LINER: + { + Sx=(px_int)pObject->x; + Sy=(px_int)pObject->y+((px_int)pObject->Height-pSliderBar->SliderButtonLength)*pSliderBar->Value/pSliderBar->Max; + + rect.x=(px_float)Sx; + rect.y=(px_float)Sy; + rect.width=(px_float)pObject->Height; + rect.height=(px_float)pSliderBar->SliderButtonLength; + + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),rect)) + { + pSliderBar->btnDownX=x; + pSliderBar->btnDownY=y; + pSliderBar->status=PX_OBJECT_SLIDERBAR_STATUS_ONDRAG; + } + } + break; + case PX_OBJECT_SLIDERBAR_STYLE_BOX: + { + Sy=(px_int)pObject->y+(px_int)((pObject->Height-4-pSliderBar->SliderButtonLength)*(1.0f)*pSliderBar->Value/pSliderBar->Max); + + + rect.x=(px_float)pObject->x+2; + rect.y=(px_float)Sy; + + rect.width=(px_float)pObject->Width-4; + rect.height=(px_float)pSliderBar->SliderButtonLength; + + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),rect)) + { + pSliderBar->btnDownX=x; + pSliderBar->btnDownY=y; + pSliderBar->status=PX_OBJECT_SLIDERBAR_STATUS_ONDRAG; + } + else if(y>rect.y) + { + pSliderBar->Value+=pSliderBar->Max*pSliderBar->SliderButtonLength/((px_int)pObject->Height-4); + if (pSliderBar->Value>pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + } + else + { + pSliderBar->Value-=pSliderBar->Max*pSliderBar->SliderButtonLength/((px_int)pObject->Height-4); + if (pSliderBar->Value<0) + { + pSliderBar->Value=0; + } + } + } + break; + } + + } + } + } +} + + +px_void PX_Object_SliderBarOnCursorNormal(PX_Object *pObject,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_SliderBar *pSliderBar=PX_Object_GetSliderBar(pObject); + + if (pSliderBar) + { + pSliderBar->status=PX_OBJECT_SLIDERBAR_STATUS_NORMAL; + } +} + +px_void PX_Object_SliderBarOnCursorDrag(PX_Object *pObject,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_SliderBar *pSliderBar=PX_Object_GetSliderBar(pObject); + px_int x,y; + + x=e.Param_int[0]; + y=e.Param_int[1]; + + if (pSliderBar) + { + if (pSliderBar->status!=PX_OBJECT_SLIDERBAR_STATUS_ONDRAG) + { + return; + } + + if(pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL) + { + pSliderBar->DargButtonX+=(x-pSliderBar->btnDownX); + pSliderBar->btnDownX=x; + if (pSliderBar->DargButtonX<0) + { + pSliderBar->DargButtonX=0; + } + if (pSliderBar->DargButtonX>=pObject->Width-pSliderBar->SliderButtonLength-2) + { + pSliderBar->DargButtonX=(px_int)pObject->Width-pSliderBar->SliderButtonLength-2; + } + + } + + if (pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_VERTICAL) + { + + pSliderBar->DargButtonY+=(y-pSliderBar->btnDownY); + pSliderBar->btnDownY=y; + + if (pSliderBar->DargButtonY<0) + { + pSliderBar->DargButtonY=0; + } + if (pSliderBar->DargButtonY>=pObject->Height-pSliderBar->SliderButtonLength-2) + { + pSliderBar->DargButtonY=(px_int)pObject->Height-pSliderBar->SliderButtonLength-2; + } + } + + } +} + + +PX_Object * PX_Object_SliderBarCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,enum PX_OBJECT_SLIDERBAR_TYPE Type,enum PX_OBJECT_SLIDERBAR_STYLE style) +{ + PX_Object *pObject; + PX_Object_SliderBar *pSliderbar=(PX_Object_SliderBar *)MP_Malloc(mp,sizeof(PX_Object_SliderBar)); + if (pSliderbar==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pSliderbar); + return PX_NULL; + } + + pObject->pObject=pSliderbar; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_SLIDERBAR; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_Object_SliderBarFree; + pObject->Func_ObjectRender=PX_Object_SliderBarRender; + pSliderbar->Max=100; + pSliderbar->Value=0; + pSliderbar->SliderButtonLength=10; + pSliderbar->style=style; + pSliderbar->status=PX_OBJECT_SLIDERBAR_STATUS_NORMAL; + pSliderbar->Type=Type; + pSliderbar->color=PX_COLOR(255,80,80,80); + pSliderbar->BackgroundColor=PX_COLOR(0,0,0,0); + pSliderbar->btnDownX=0; + pSliderbar->btnDownY=0; + pSliderbar->DargButtonX=0; + pSliderbar->DargButtonY=0; + + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_SliderBarOnMouseLButtonDown,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_SliderBarOnCursorNormal,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_SliderBarOnCursorNormal,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_SliderBarOnCursorDrag,PX_NULL); + return pObject; +} + +PX_Object_SliderBar * PX_Object_GetSliderBar( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_SLIDERBAR) + return (PX_Object_SliderBar *)Object->pObject; + else + return PX_NULL; +} + +px_void PX_Object_SliderBarSetValue( PX_Object *pSliderBar,px_int Value ) +{ + PX_Object_SliderBar *SliderBar=PX_Object_GetSliderBar(pSliderBar); + if (SliderBar!=PX_NULL) + { + + SliderBar->Value=Value; + } +} + +px_void PX_Object_SliderBarSetMax( PX_Object *pSliderBar,px_int Max ) +{ + PX_Object_SliderBar *SliderBar=PX_Object_GetSliderBar(pSliderBar); + if (SliderBar!=PX_NULL) + { + + SliderBar->Max=Max; + } +} + +px_int PX_Object_SliderBarGetValue( PX_Object *pSliderBar ) +{ + PX_Object_SliderBar *SliderBar=PX_Object_GetSliderBar(pSliderBar); + if (SliderBar!=PX_NULL) + { + return SliderBar->Value; + } + return 0; +} + +px_void PX_Object_SliderBarRender(px_surface *psurface, PX_Object *pObject,px_uint elpased) +{ + PX_Object_SliderBar *pSliderBar=PX_Object_GetSliderBar(pObject); + PX_Object_Event e; + px_int SliderBtnLen,Sx,Sy; + if (pSliderBar==PX_NULL) + { + return; + } + + if (pObject->Width<=10) + { + return; + } + + if (pObject->Height<10) + { + return; + } + + SliderBtnLen=pSliderBar->SliderButtonLength; + + if (pSliderBar->Value>=pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + + if (pSliderBar->Value<0) + { + pSliderBar->Value=0; + } + + //Clear + PX_SurfaceClear( + psurface, + (px_int)pObject->x, + (px_int)pObject->y, + (px_int)pObject->x+(px_int)pObject->Width-1, + (px_int)pObject->y+(px_int)pObject->Height-1, + pSliderBar->BackgroundColor + ); + + switch(pSliderBar->status) + { + case PX_OBJECT_SLIDERBAR_STATUS_NORMAL: + { + if (pSliderBar->Value>pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + if (pSliderBar->Value<0) + { + pSliderBar->Value=0; + } + + if(pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL) + { + switch(pSliderBar->style) + { + case PX_OBJECT_SLIDERBAR_STYLE_LINER: + { + Sx=((px_int)pObject->Width-pSliderBar->SliderButtonLength)*pSliderBar->Value/pSliderBar->Max; + pSliderBar->DargButtonX=Sx; + Sx+=(px_int)pObject->x; + Sy=(px_int)pObject->y; + //Draw Line + PX_GeoDrawRect( + psurface, + (px_int)pObject->x, + (px_int)pObject->y+(px_int)pObject->Height/2, + (px_int)pObject->x+(px_int)pObject->Width-1, + (px_int)pObject->y+(px_int)pObject->Height/2, + pSliderBar->color + ); + //Draw Slider button + PX_GeoDrawRect(psurface,(px_int)Sx,(px_int)Sy,Sx+SliderBtnLen-1,Sy+(px_int)pObject->Height-1,pSliderBar->color); + } + break; + case PX_OBJECT_SLIDERBAR_STYLE_BOX: + { + //draw border + PX_GeoDrawBorder(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,1,pSliderBar->color); + Sx=(px_int)((pObject->Width-4-pSliderBar->SliderButtonLength)*(1.0f)*pSliderBar->Value/pSliderBar->Max); + pSliderBar->DargButtonX=Sx; + Sx+=SliderBtnLen/2; + //draw slider bar + PX_GeoDrawRect(psurface,(px_int)pObject->x+Sx-SliderBtnLen/2+2,(px_int)pObject->y+2,(px_int)pObject->x+Sx-SliderBtnLen/2+SliderBtnLen-1,(px_int)pObject->y+(px_int)pObject->Height-3,pSliderBar->color); + } + break; + } + + + } + + if (pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_VERTICAL) + { + switch(pSliderBar->style) + { + case PX_OBJECT_SLIDERBAR_STYLE_LINER: + { + Sx=(px_int)pObject->x; + Sy=(px_int)(pObject->Height-pSliderBar->SliderButtonLength)*pSliderBar->Value/pSliderBar->Max; + pSliderBar->DargButtonY=Sy; + Sy+=(px_int)pObject->y; + //Draw Line + PX_GeoDrawRect( + psurface, + (px_int)pObject->x+(px_int)pObject->Width/2, + (px_int)pObject->y, + (px_int)pObject->x+(px_int)pObject->Width/2, + (px_int)pObject->y+(px_int)pObject->Height-1, + pSliderBar->color + ); + //Draw Slider button + PX_GeoDrawRect(psurface,Sx,Sy,Sx+(px_int)pObject->Width-1,Sy+SliderBtnLen-1,pSliderBar->color); + } + break; + case PX_OBJECT_SLIDERBAR_STYLE_BOX: + { + //draw border + PX_GeoDrawBorder(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,1,pSliderBar->color); + Sy=(px_int)((pObject->Height-4-pSliderBar->SliderButtonLength)*(1.0f)*pSliderBar->Value/pSliderBar->Max); + pSliderBar->DargButtonY=Sy; + Sy+=SliderBtnLen/2; + //draw slider bar + PX_GeoDrawRect(psurface,(px_int)pObject->x+2,(px_int)pObject->y+Sy-SliderBtnLen/2+2,(px_int)pObject->x+(px_int)pObject->Width-1-2,(px_int)pObject->y+Sy+SliderBtnLen/2-1+1,pSliderBar->color); + } + break; + } + + } + } + break; + case PX_OBJECT_SLIDERBAR_STATUS_ONDRAG: + { + if(pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL) + { + switch(pSliderBar->style) + { + case PX_OBJECT_SLIDERBAR_STYLE_LINER: + { + Sx=pSliderBar->DargButtonX; + Sy=(px_int)pObject->y; + + pSliderBar->Value=pSliderBar->Max*(Sx)/((px_int)pObject->Width-pSliderBar->SliderButtonLength); + + //Draw Line + PX_GeoDrawRect( + psurface, + (px_int)pObject->x, + (px_int)pObject->y+(px_int)pObject->Height/2, + (px_int)pObject->x+(px_int)pObject->Width-1, + (px_int)pObject->y+(px_int)pObject->Height/2, + pSliderBar->color + ); + //Draw Slider button + PX_GeoDrawRect(psurface,Sx,Sy,Sx+SliderBtnLen-1,Sy+(px_int)pObject->Height-1,pSliderBar->color); + } + break; + case PX_OBJECT_SLIDERBAR_STYLE_BOX: + { + //draw border + PX_GeoDrawBorder(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,1,pSliderBar->color); + + Sx=pSliderBar->DargButtonX; + + pSliderBar->Value=pSliderBar->Max*(Sx)/((px_int)pObject->Width-pSliderBar->SliderButtonLength-4); + if (pSliderBar->Value>pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + if (pSliderBar->Value<0) + { + pSliderBar->Value=0; + } + Sx+=SliderBtnLen/2; + //draw slider bar + PX_GeoDrawRect(psurface,(px_int)pObject->x+Sx-SliderBtnLen/2+2,(px_int)pObject->y+2,(px_int)pObject->x+Sx-SliderBtnLen/2+SliderBtnLen-1,(px_int)pObject->y+(px_int)pObject->Height-3,pSliderBar->color); + } + break; + } + + + } + + if (pSliderBar->Type==PX_OBJECT_SLIDERBAR_TYPE_VERTICAL) + { + switch(pSliderBar->style) + { + case PX_OBJECT_SLIDERBAR_STYLE_LINER: + { + pSliderBar->Value=pSliderBar->Max*(pSliderBar->DargButtonY)/((px_int)pObject->Height-pSliderBar->SliderButtonLength); + if (pSliderBar->Value>pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + if (pSliderBar->Value<0) + { + pSliderBar->Value=0; + } + + Sy=pSliderBar->DargButtonY; + Sx=(px_int)pObject->x; + + + + //Draw Line + PX_GeoDrawRect( + psurface, + (px_int)pObject->x+(px_int)pObject->Width/2, + (px_int)pObject->y, + (px_int)pObject->x+(px_int)pObject->Width/2, + (px_int)pObject->y+(px_int)pObject->Height-1, + pSliderBar->color + ); + //Draw Slider button + PX_GeoDrawRect(psurface,Sx,Sy,Sx+(px_int)pObject->Width-1,Sy+SliderBtnLen-1,pSliderBar->color); + } + break; + case PX_OBJECT_SLIDERBAR_STYLE_BOX: + { + //draw border + PX_GeoDrawBorder(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,1,pSliderBar->color); + + pSliderBar->Value=pSliderBar->Max*(pSliderBar->DargButtonY-2)/((px_int)pObject->Height-pSliderBar->SliderButtonLength-4); + + Sy=pSliderBar->DargButtonY; + Sx=(px_int)pObject->x; + Sy+=SliderBtnLen/2; + + //draw slider bar + PX_GeoDrawRect(psurface,(px_int)pObject->x+2,(px_int)pObject->y+Sy-SliderBtnLen/2+2,(px_int)pObject->x+(px_int)pObject->Width-1-2,(px_int)pObject->y+Sy+SliderBtnLen/2-1+2,pSliderBar->color); + } + break; + } + + } + } + break; + } + + if (pSliderBar->Value>=pSliderBar->Max) + { + pSliderBar->Value=pSliderBar->Max; + } + + if (pSliderBar->Value<0) + { + pSliderBar->Value=0; + } + + + if (pSliderBar->lastValue!=pSliderBar->Value) + { + e.Event=PX_OBJECT_EVENT_VALUECHAGE; + e.Param_uint[0]=pSliderBar->Value; + e.Param_uint[1]=pSliderBar->Value; + e.Param_uint[2]=pSliderBar->Value; + e.Param_uint[3]=pSliderBar->Value; + pSliderBar->lastValue=pSliderBar->Value; + PX_ObjectExecuteEvent(pObject,e); + } +} + + +px_void PX_Object_SliderBarSetBackgroundColor(PX_Object *pSliderBar,px_color color) +{ + PX_Object_SliderBar *SliderBar=PX_Object_GetSliderBar(pSliderBar); + if (SliderBar!=PX_NULL) + { + SliderBar->BackgroundColor=color; + } +} + + +px_void PX_Object_SliderBarFree( PX_Object *pSliderBar ) +{ + +} + +px_void PX_Object_SliderBarSetColor(PX_Object *pSliderBar,px_color color) +{ + PX_Object_SliderBar *SliderBar=PX_Object_GetSliderBar(pSliderBar); + if (SliderBar!=PX_NULL) + { + SliderBar->color=color; + } +} + +px_void PX_Object_SliderBarSetSliderButtonLength(PX_Object *pSliderBar,px_int length) +{ + PX_Object_SliderBar *SliderBar=PX_Object_GetSliderBar(pSliderBar); + if (SliderBar!=PX_NULL) + { + SliderBar->SliderButtonLength=length; + } +} + +px_void PX_Object_ProcessBarFree(PX_Object *pProcessBar) +{ + +} + +px_void PX_Object_RadiusICOFree( PX_Object *pRadiusICO ) +{ + +} + +px_void PX_Object_ImageFree( PX_Object *pBitmap ) +{ + +} + + +px_void PX_Object_ImageFreeWithTexture(PX_Object *pBitmap) +{ + PX_Object_Image *pImage; + pImage=PX_Object_GetImage(pBitmap); + if (pImage) + { + PX_TextureFree(pImage->pTexture); + } +} + + + + + + +px_void PX_ObjectSetPosition( PX_Object *Object,px_float x,px_float y,px_float z) +{ + if (Object==PX_NULL) + { + PX_ASSERT(); + return; + } + + Object->x=x; + Object->y=y; + Object->z=z; +} + + + + +px_void PX_ObjectSetSize( PX_Object *Object,px_float Width,px_float Height,px_float length) +{ + if (Object!=PX_NULL) + { + Object->Width=Width; + Object->Height=Height; + + } + else + { + PX_ASSERT(); + } +} + + +px_void PX_Object_PushButtonOnMouseMove(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_PushButton *pPushButton=PX_Object_GetPushButton(Object); + px_int x,y; + x=e.Param_int[0]; + y=e.Param_int[1]; + + if (pPushButton) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + { + if (pPushButton->state!=PX_OBJECT_BUTTON_STATE_ONPUSH) + { + if (pPushButton->state!=PX_OBJECT_BUTTON_STATE_ONCURSOR) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSOROVER; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + e.Param_ptr[0]=PX_NULL; + PX_ObjectExecuteEvent(Object,e); + } + pPushButton->state=PX_OBJECT_BUTTON_STATE_ONCURSOR; + } + } + else + { + if (pPushButton->state!=PX_OBJECT_BUTTON_STATE_NORMAL) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSOROUT; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + PX_ObjectExecuteEvent(Object,e); + } + pPushButton->state=PX_OBJECT_BUTTON_STATE_NORMAL; + } + } +} + +px_void PX_Object_PushButtonOnMouseLButtonDown(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_PushButton *pPushButton=PX_Object_GetPushButton(Object); + px_int x,y; + + x=e.Param_int[0]; + y=e.Param_int[1]; + + if (pPushButton) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + pPushButton->state=PX_OBJECT_BUTTON_STATE_ONPUSH; + } +} + +px_void PX_Object_PushButtonOnMouseLButtonUp(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_PushButton *pPushButton=PX_Object_GetPushButton(Object); + + px_int x,y; + + x=e.Param_uint[0]; + y=e.Param_uint[1]; + + if (pPushButton) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + if(pPushButton->state==PX_OBJECT_BUTTON_STATE_ONPUSH) + { + pPushButton->state=PX_OBJECT_BUTTON_STATE_ONCURSOR; + e.Event=PX_OBJECT_EVENT_EXECUTE; + PX_ObjectExecuteEvent(Object,e); + } + } +} + + + +PX_Object * PX_Object_PushButtonCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const px_char *Text,px_color Color) +{ + px_int TextLen; + PX_Object *pObject; + PX_Object_PushButton *pPushButton=(PX_Object_PushButton *)MP_Malloc(mp,sizeof(PX_Object_PushButton)); + if (pPushButton==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + + if (pObject==PX_NULL) + { + return PX_NULL; + } + + if (!pObject) + { + MP_Free(mp,pPushButton); + } + pObject->pObject=pPushButton; + pObject->Type=PX_OBJECT_TYPE_PUSHBUTTON; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_Object_PushButtonFree; + pObject->Func_ObjectRender=PX_Object_PushButtonRender; + + TextLen=PX_strlen(Text)+1; + + pPushButton->Text=(px_char *)MP_Malloc(mp,TextLen); + + if (pPushButton->Text==PX_NULL) + { + MP_Free(pObject->mp,pObject); + MP_Free(pObject->mp,pPushButton); + return PX_NULL; + } + + PX_strcpy(pPushButton->Text,Text,TextLen); + + pPushButton->TextColor=Color; + pPushButton->CursorColor=PX_COLOR(255,192,192,192); + pPushButton->PushColor=PX_COLOR(255,128,128,128); + pPushButton->BackgroundColor=PX_COLOR(255,255,255,255); + pPushButton->BorderColor=PX_COLOR(255,0,0,0); + pPushButton->Border=PX_TRUE; + pPushButton->Align=PX_OBJECT_ALIGN_HCENTER|PX_OBJECT_ALIGN_VCENTER; + pPushButton->state=PX_OBJECT_BUTTON_STATE_NORMAL; + pPushButton->Border=PX_TRUE; + pPushButton->style=PX_OBJECT_PUSHBUTTON_STYLE_RECT; + pPushButton->roundradius=PX_OBJECT_PUSHBUTTON_ROUNDRADIUS; + pPushButton->shape=PX_NULL; + pPushButton->Texture=PX_NULL; + + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_PushButtonOnMouseMove,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_PushButtonOnMouseMove,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_PushButtonOnMouseLButtonDown,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_PushButtonOnMouseLButtonUp,PX_NULL); + + return pObject; +} + +PX_Object_PushButton * PX_Object_GetPushButton( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_PUSHBUTTON) + return (PX_Object_PushButton *)Object->pObject; + else + return PX_NULL; +} + +px_char * PX_Object_PushButtonGetText( PX_Object *PushButton ) +{ + PX_Object_PushButton *pPushButton=PX_Object_GetPushButton(PushButton); + if (pPushButton!=PX_NULL) + { + return pPushButton->Text; + } + return PX_NULL; +} + +px_void PX_Object_PushButtonSetText( PX_Object *pObject,const px_char *Text ) +{ + PX_Object_PushButton *pPushButton; + px_int TextLen; + if (pObject==PX_NULL||Text==PX_NULL) + { + return; + } + if (pObject->Type!=PX_OBJECT_TYPE_PUSHBUTTON) + { + return; + } + + TextLen=PX_strlen(Text); + pPushButton=(PX_Object_PushButton *)pObject->pObject; + + if (TextLen>PX_strlen(pPushButton->Text)) + { + MP_Free(pObject->mp,pPushButton->Text); + + pPushButton->Text=(px_char *)MP_Malloc(pObject->mp,TextLen+1); + if (!pPushButton->Text) + { + return; + } + } + PX_strcpy(pPushButton->Text,Text,TextLen+1); + +} + + +px_void PX_Object_PushButtonSetBackgroundColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + pPushButton->BackgroundColor=Color; + } +} + +px_void PX_Object_PushButtonSetTextColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + + pPushButton->TextColor=Color; + } +} + + + +px_void PX_Object_PushButtonSetTexture(PX_Object *pObject,px_texture *texture) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + pPushButton->Texture=texture; + } +} + + +px_void PX_Object_PushButtonSetShape(PX_Object *pObject,px_shape *pshape) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + pPushButton->shape=pshape; + } +} + +px_void PX_Object_PushButtonSetBorderColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + + pPushButton->BorderColor=Color; + } +} + +px_void PX_Object_PushButtonSetCursorColor(PX_Object *pObject,px_color Color) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + + pPushButton->CursorColor=Color; + } +} + + +px_void PX_Object_PushButtonSetStyle(PX_Object *pObject,PX_OBJECT_PUSHBUTTON_STYLE style) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + pPushButton->style=style; + } +} + +px_void PX_Object_PushButtonSetPushColor(PX_Object *pObject,px_color Color) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + + pPushButton->PushColor=Color; + } +} + +px_void PX_Object_PushButtonSetAlign( PX_Object *pObject,px_dword Align ) +{ + PX_Object_PushButton * pPushButton=PX_Object_GetPushButton(pObject); + if (pPushButton) + { + + pPushButton->Align=Align; + } +} +px_void PX_Object_PushButtonSetBorder( PX_Object *Object,px_bool Border ) +{ + PX_Object_PushButton *PushButton=PX_Object_GetPushButton(Object); + if (PushButton) + { + + PushButton->Border=Border; + } +} + +px_void PX_Object_PushButtonRender(px_surface *psurface, PX_Object *pObject,px_uint elpased) +{ + px_int TextLen,i; + px_int fx,fy; + PX_Object_PushButton *pPushButton=PX_Object_GetPushButton(pObject); + + if (pPushButton==PX_NULL) + { + return; + } + + if (!pObject->Visible) + { + return; + } + + TextLen=0; + for (i=0;iText);i++) + { + if (pPushButton->Text[i]&0x80) + { + TextLen+=__PX_FONT_GBKSIZE; + i++; + continue; + } + else + { + TextLen+=__PX_FONT_ASCSIZE; + } + } + + if (pPushButton->Align&PX_OBJECT_ALIGN_HCENTER) + { + fx=(px_int)pObject->x; + fx=fx+((px_int)pObject->Width-TextLen)/2; + } + + if (pPushButton->Align&PX_OBJECT_ALIGN_VCENTER) + { + fy=(px_int)pObject->y; + fy=fy+((px_int)pObject->Height-__PX_FONT_HEIGHT)/2; + } + + + if (pPushButton->Align&PX_OBJECT_ALIGN_LEFT) + { + fx=(px_int)pObject->x; + } + + if (pPushButton->Align&PX_OBJECT_ALIGN_RIGHT) + { + fx=(px_int)pObject->x+(px_int)pObject->Width-TextLen; + } + + if (pPushButton->Align&PX_OBJECT_ALIGN_TOP) + { + fy=(px_int)pObject->y; + } + + if (pPushButton->Align&PX_OBJECT_ALIGN_BOTTOM) + { + fy=(px_int)pObject->y+(px_int)pObject->Height-__PX_FONT_HEIGHT; + } + + switch(pPushButton->style) + { + case PX_OBJECT_PUSHBUTTON_STYLE_RECT: + PX_GeoDrawRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pPushButton->BackgroundColor); + switch (pPushButton->state) + { + case PX_OBJECT_BUTTON_STATE_NORMAL: + PX_GeoDrawRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pPushButton->BackgroundColor); + break; + case PX_OBJECT_BUTTON_STATE_ONPUSH: + PX_GeoDrawRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pPushButton->PushColor); + break; + case PX_OBJECT_BUTTON_STATE_ONCURSOR: + PX_GeoDrawRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pPushButton->CursorColor); + break; + } + break; + case PX_OBJECT_PUSHBUTTON_STYLE_ROUNDRECT: + PX_GeoDrawSolidRoundRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pPushButton->roundradius,pPushButton->BackgroundColor); + switch (pPushButton->state) + { + case PX_OBJECT_BUTTON_STATE_NORMAL: + PX_GeoDrawSolidRoundRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pPushButton->roundradius,pPushButton->BackgroundColor); + break; + case PX_OBJECT_BUTTON_STATE_ONPUSH: + PX_GeoDrawSolidRoundRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pPushButton->roundradius,pPushButton->PushColor); + break; + case PX_OBJECT_BUTTON_STATE_ONCURSOR: + PX_GeoDrawSolidRoundRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pPushButton->roundradius,pPushButton->CursorColor); + break; + } + break; + } + + + + + if (pPushButton->Texture) + { + PX_TextureRender(psurface,pPushButton->Texture,(px_int)pObject->x+(px_int)pObject->Width/2,(px_int)pObject->y+(px_int)pObject->Height/2,PX_TEXTURERENDER_REFPOINT_CENTER,PX_NULL); + } + else if (pPushButton->shape) + { + PX_ShapeRender(psurface,pPushButton->shape,(px_int)pObject->x+(px_int)pObject->Width/2,(px_int)pObject->y+(px_int)pObject->Height/2,PX_TEXTURERENDER_REFPOINT_CENTER,pPushButton->TextColor); + } + + if (pPushButton->Border) + { + switch(pPushButton->style) + { + case PX_OBJECT_PUSHBUTTON_STYLE_RECT: + PX_GeoDrawBorder(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,1,pPushButton->BorderColor); + break; + case PX_OBJECT_PUSHBUTTON_STYLE_ROUNDRECT: + PX_GeoDrawRoundRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pPushButton->roundradius,0.6f,pPushButton->BorderColor); + break; + } + } + + + PX_FontDrawText(psurface,fx,fy,pPushButton->Text,pPushButton->TextColor,PX_FONT_ALIGN_XLEFT); + +} + +px_void PX_Object_PushButtonFree( PX_Object *Obj ) +{ + PX_Object_PushButton *PushButton=PX_Object_GetPushButton(Obj); + if (Obj!=PX_NULL) + { + MP_Free(Obj->mp,PushButton->Text); + } +} + +px_void PX_Object_RotationFree(PX_Object *Obj) +{ +} + + +px_void PX_Object_RotationRender(px_surface *psurface, PX_Object *Obj,px_uint elpased) +{ + PX_Object_Rotation *pRot=PX_Object_GetRotation(Obj); + if (pRot) + { + if(!pRot->bstop) + pRot->angle+=(pRot->angle_per_second*(elpased/1000.0f)); + PX_TextureRenderRotation(psurface,pRot->pTexture,(px_int)Obj->x,(px_int)Obj->y,PX_TEXTURERENDER_REFPOINT_CENTER,PX_NULL,(px_int)pRot->angle); + } + +} + + + +PX_Object * PX_Object_RotationCreate(px_memorypool *mp,PX_Object *Parent,px_int angle_per_second,px_int x,px_int y,px_texture *ptexture) +{ + PX_Object *pObject; + PX_Object_Rotation *pRotation=(PX_Object_Rotation *)MP_Malloc(mp,sizeof(PX_Object_Rotation)); + if (pRotation==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,0,0,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pRotation); + return PX_NULL; + } + + + pRotation->angle=0; + pRotation->angle_per_second=angle_per_second; + + pObject->pObject=pRotation; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_ROTATION; + pObject->ReceiveEvents=PX_FALSE; + pObject->Func_ObjectFree=PX_Object_RotationFree; + pObject->Func_ObjectRender=PX_Object_RotationRender; + pRotation->pTexture=ptexture; + return pObject; +} + +PX_Object_Rotation * PX_Object_GetRotation(PX_Object *Object) +{ + if (Object->Type==PX_OBJECT_TYPE_ROTATION) + { + return (PX_Object_Rotation *)Object->pObject; + } + return PX_NULL; +} + +px_void PX_Object_RotationSetSpeed(PX_Object *rot,px_int Angle_per_second) +{ + PX_Object_Rotation *pRot; + pRot=PX_Object_GetRotation(rot); + if (pRot) + { + pRot->angle_per_second=Angle_per_second; + } +} + +px_void PX_Object_RotationStop(PX_Object *rot,px_bool bstop) +{ + PX_Object_Rotation *pRot; + pRot=PX_Object_GetRotation(rot); + if (pRot) + { + pRot->bstop=bstop; + } +} + +px_void PX_Object_EditOnMouseMove(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(Object); + px_int x,y; + x=e.Param_int[0]; + y=e.Param_int[1]; + + if (pEdit) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + { + pEdit->state=PX_OBJECT_EDIT_STATE_ONCURSOR; + } + else + { + pEdit->state=PX_OBJECT_EDIT_STATE_NORMAL; + } + } +} + +px_void PX_Object_EditUpdateCursorOnDown(PX_Object *pObject,px_int cx,px_int cy); +px_void PX_Object_EditOnMouseLButtonDown(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(Object); + px_int x,y; + + x=e.Param_int[0]; + y=e.Param_int[1]; + + if (pEdit) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + { + PX_Object_EditSetFocus(Object,PX_TRUE); + PX_Object_EditUpdateCursorOnDown(Object,x-(px_int)Object->x,y-(px_int)Object->y); + } + else + PX_Object_EditSetFocus(Object,PX_FALSE); + } +} + +px_void PX_Object_EditOnKeyboardString(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(Object); + + if (pEdit->onFocus) + { + PX_Object_EditAddString(Object,(px_char *)e.Param_ptr[0]); + } +} + +static px_void PX_Object_EditCheckCursor(PX_Object_Edit*pedit) +{ + if (pedit->cursor_index<0) + { + pedit->cursor_index=0; + } + if (pedit->cursor_index>PX_strlen(pedit->text.buffer)) + { + pedit->cursor_index=PX_strlen(pedit->text.buffer); + } +} + +PX_Object* PX_Object_EditCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,px_color TextColor ) +{ + PX_Object *pObject; + PX_Object_Edit *pEdit=(PX_Object_Edit *)MP_Malloc(mp,sizeof(PX_Object_Edit)); + if (pEdit==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + + if (pObject==PX_NULL) + { + return PX_NULL; + } + + if (!pObject) + { + MP_Free(mp,pEdit); + return PX_NULL; + } + + if(!PX_SurfaceCreate(mp,Width,Height,&pEdit->EditSurface)) + { + MP_Free(mp,pEdit); + MP_Free(mp,pObject); + return PX_NULL; + } + + pObject->pObject=pEdit; + pObject->Type=PX_OBJECT_TYPE_EDIT; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_Object_EditFree; + pObject->Func_ObjectRender=PX_Object_EditRender; + + + + PX_StringInit(mp,&pEdit->text); + + + pEdit->TextColor=TextColor; + + pEdit->CursorColor=PX_COLOR(255,0,0,0); + pEdit->BorderColor=PX_COLOR(255,0,0,0); + pEdit->BackgroundColor=PX_COLOR(0,0,0,0); + pEdit->XOffset=0; + pEdit->YOffset=0; + pEdit->Border=PX_TRUE; + pEdit->Password=PX_FALSE; + pEdit->onFocus=PX_FALSE; + pEdit->state=PX_OBJECT_EDIT_STATE_NORMAL; + pEdit->AutoNewline=PX_FALSE; + pEdit->xSpacing=0; + pEdit->ySpacing=0; + pEdit->HorizontalOffset=3; + pEdit->VerticalOffset=3; + pEdit->cursor_index=0; + pEdit->max_length=-1; + + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_EditOnMouseMove,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_EditOnMouseLButtonDown,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_STRING,PX_Object_EditOnKeyboardString,PX_NULL); + + return pObject; +} + + +PX_Object_Edit * PX_Object_GetEdit( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_EDIT) + return (PX_Object_Edit *)Object->pObject; + else + return PX_NULL; +} + +px_char * PX_Object_EditGetText( PX_Object *Object ) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(Object); + if (pEdit!=PX_NULL) + { + return pEdit->text.buffer; + } + return PX_NULL; +} + + +px_void PX_Object_EditSetMaxTextLength(PX_Object *pObject,px_int max_length) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if (pEdit!=PX_NULL) + { + pEdit->max_length=max_length; + } +} + + +px_void PX_Object_EditSetText( PX_Object *pObject,const px_char *Text ) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if(pEdit) + { + PX_StringClear(&pEdit->text); + PX_StringCat(&pEdit->text,Text); + pEdit->cursor_index=PX_strlen(Text); + } +} + +px_void PX_Object_EditSetFocus(PX_Object *pObject,px_bool OnFocus) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if(pEdit) + { + if (pEdit->onFocus!=OnFocus) + { + PX_Object_Event e; + pEdit->onFocus=OnFocus; + e.Event=PX_OBJECT_EVENT_ONFOCUSCHANGED; + e.Param_bool[0]=OnFocus; + PX_ObjectPostEvent(pObject,e); + } + + } +} + + +px_void PX_Object_EditSetPasswordStyle( PX_Object *pLabel,px_uchar Enabled ) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pLabel); + if (pEdit) + { + pEdit->Password=Enabled; + } +} +px_void PX_Object_EditSetBackgroundColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_Edit * pEdit=PX_Object_GetEdit(pObject); + if (pEdit) + { + pEdit->BackgroundColor=Color; + } +} + +px_void PX_Object_EditSetBorderColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_Edit * pEdit=PX_Object_GetEdit(pObject); + if (pEdit) + { + + pEdit->BorderColor=Color; + } +} + + +px_void PX_Object_EditSetCursorColor( PX_Object *pObject,px_color Color ) +{ + PX_Object_Edit * pEdit=PX_Object_GetEdit(pObject); + if (pEdit) + { + + pEdit->CursorColor=Color; + } +} + + +px_void PX_Object_EditSetTextColor(PX_Object *pObject,px_color Color) +{ + PX_Object_Edit * pEdit=PX_Object_GetEdit(pObject); + if (pEdit) + { + pEdit->TextColor=Color; + } +} + + + +px_void PX_Object_EditSetLimit(PX_Object *pObject,const px_char *Limit) +{ + PX_Object_Edit * pEdit=PX_Object_GetEdit(pObject); + if (pEdit) + { + pEdit->Limit=Limit; + } +} + +px_void PX_Object_EditSetBorder( PX_Object *pObj,px_bool Border ) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObj); + if (pEdit) + { + + pEdit->Border=Border; + } +} + +px_void PX_Object_EditUpdateCursorOnDown(PX_Object *pObject,px_int cx,px_int cy) +{ + px_int charIndex; + px_int textLen,x,y; + PX_Object_Edit *pEdit=(PX_Object_Edit *)pObject->pObject; + if (pEdit==PX_NULL) + { + return; + } + + x=pEdit->HorizontalOffset; + y=pEdit->VerticalOffset; + cx+=pEdit->XOffset; + cy+=pEdit->YOffset; + + textLen=PX_strlen(pEdit->text.buffer); + + for (charIndex=0;charIndextext.buffer[charIndex]&0x80) + { + if (cx>=x&&cx<=x+__PX_FONT_GBKSIZE+pEdit->xSpacing) + { + if (cx<=x+(__PX_FONT_GBKSIZE+pEdit->xSpacing)/2) + { + if (cy>=y&&cy<=y+__PX_FONT_HEIGHT+pEdit->YOffset) + { + pEdit->cursor_index=charIndex; + return; + } + } + else + { + if (cy>=y&&cy<=y+__PX_FONT_HEIGHT+pEdit->YOffset) + { + if (pEdit->text.buffer[charIndex+1]) + { + pEdit->cursor_index=charIndex+2; + return; + } + return; + } + } + } + } + else + { + if (cx>=x&&cx<=x+__PX_FONT_ASCSIZE+pEdit->xSpacing) + { + if (cx<=x+(__PX_FONT_ASCSIZE+pEdit->xSpacing)/2) + { + if (cy>=y&&cy<=y+__PX_FONT_HEIGHT+pEdit->YOffset) + { + pEdit->cursor_index=charIndex; + return; + } + } + else + { + if (cy>=y&&cy<=y+__PX_FONT_HEIGHT+pEdit->YOffset) + { + pEdit->cursor_index=charIndex+1; + return; + } + } + } + } + + if(pEdit->text.buffer[charIndex]=='\r'||pEdit->text.buffer[charIndex]=='\n') + { + x=pEdit->HorizontalOffset; + y+=__PX_FONT_HEIGHT+pEdit->ySpacing; + } + else if(pEdit->text.buffer[charIndex]=='\t') + { + x+=__PX_FONT_ASCSIZE+pEdit->xSpacing; + } + else + { + if (pEdit->text.buffer[charIndex]&0x80) + { + if (pEdit->Password) + { + x+=__PX_FONT_ASCSIZE+pEdit->xSpacing; + charIndex++; + } + else + { + x+=__PX_FONT_GBKSIZE+pEdit->xSpacing; + charIndex++; + } + } + else + { + x+=__PX_FONT_ASCSIZE+pEdit->xSpacing; + } + } + + if (pEdit->AutoNewline) + { + if (x>=pObject->Width-__PX_FONT_GBKSIZE-pEdit->xSpacing-pEdit->HorizontalOffset) + { + x=pEdit->HorizontalOffset; + y+=__PX_FONT_HEIGHT+pEdit->ySpacing; + } + } + } + + pEdit->cursor_index=textLen; + +} + +px_void PX_Object_EditUpdateCursorViewRegion(PX_Object *pObject) +{ + px_int charIndex; + px_int textLen,x,y; + PX_Object_Edit *pEdit=(PX_Object_Edit *)pObject->pObject; + if (pEdit==PX_NULL) + { + return; + } + + x=pEdit->HorizontalOffset; + y=pEdit->VerticalOffset; + + textLen=PX_strlen(pEdit->text.buffer); + + for (charIndex=0;charIndexonFocus&&pEdit->cursor_index==charIndex) + { + break; + } + + if(pEdit->text.buffer[charIndex]=='\r'||pEdit->text.buffer[charIndex]=='\n') + { + x=pEdit->HorizontalOffset; + y+=__PX_FONT_HEIGHT+pEdit->ySpacing; + } + else if(pEdit->text.buffer[charIndex]=='\t') + { + x+=__PX_FONT_ASCSIZE+pEdit->xSpacing; + } + else + { + if (pEdit->text.buffer[charIndex]&0x80) + { + if (pEdit->Password) + { + x+=__PX_FONT_ASCSIZE+pEdit->xSpacing; + charIndex++; + } + else + { + x+=__PX_FONT_GBKSIZE+pEdit->xSpacing; + charIndex++; + } + } + else + { + x+=__PX_FONT_ASCSIZE+pEdit->xSpacing; + } + } + + if (pEdit->AutoNewline) + { + if (x>=pObject->Width-__PX_FONT_GBKSIZE-pEdit->xSpacing-pEdit->HorizontalOffset) + { + x=pEdit->HorizontalOffset; + y+=__PX_FONT_HEIGHT+pEdit->ySpacing; + } + } + } + + + if (x!=pEdit->XOffset+(px_int)pObject->Width-pEdit->HorizontalOffset-__PX_FONT_ASCSIZE) + { + pEdit->XOffset=x-((px_int)pObject->Width-pEdit->HorizontalOffset-__PX_FONT_ASCSIZE); + if (pEdit->XOffset<0) + { + pEdit->XOffset=0; + } + } + + if (x!=pEdit->YOffset+(px_int)pObject->Height-pEdit->VerticalOffset-__PX_FONT_HEIGHT) + { + pEdit->YOffset=y-((px_int)pObject->Height-pEdit->VerticalOffset-__PX_FONT_HEIGHT); + if (pEdit->YOffset<0) + { + pEdit->YOffset=0; + } + } + +} +px_void PX_Object_EditRender(px_surface *psurface, PX_Object *pObject,px_uint elpased) +{ + px_int charIndex; + px_int x_draw_oft,y_draw_oft,textLen,x,y; + PX_Object_Edit *pEdit=(PX_Object_Edit *)pObject->pObject; + if (pEdit==PX_NULL) + { + return; + } + + if (!pObject->Visible) + { + return; + } + + //clear + PX_SurfaceClear(&pEdit->EditSurface,0,0,(px_int)pObject->Width-1,(px_int)pObject->Height-1,pEdit->BackgroundColor); + + if (pEdit->Border) + { + if(pEdit->state==PX_OBJECT_EDIT_STATE_NORMAL) + PX_GeoDrawBorder(&pEdit->EditSurface,0,0,(px_int)pObject->Width-1,(px_int)pObject->Height-1,1,pEdit->BorderColor); + else + PX_GeoDrawBorder(&pEdit->EditSurface,0,0,(px_int)pObject->Width-1,(px_int)pObject->Height-1,1,pEdit->CursorColor); + } + + x=pEdit->HorizontalOffset; + y=pEdit->VerticalOffset; + + textLen=PX_strlen(pEdit->text.buffer); + + + + for (charIndex=0;charIndexXOffset; + y_draw_oft=y-pEdit->YOffset; + + if (pEdit->onFocus&&pEdit->cursor_index==charIndex) + { + pEdit->elpased+=elpased; + if ((pEdit->elpased/200)&1) + { + PX_GeoDrawRect(&pEdit->EditSurface,x_draw_oft,y_draw_oft,x_draw_oft+1,y_draw_oft+__PX_FONT_HEIGHT-1,pEdit->CursorColor); + } + } + + if(pEdit->text.buffer[charIndex]=='\r'||pEdit->text.buffer[charIndex]=='\n') + { + x=pEdit->HorizontalOffset; + y+=__PX_FONT_HEIGHT+pEdit->ySpacing; + } + else if(pEdit->text.buffer[charIndex]=='\t') + { + x+=__PX_FONT_ASCSIZE+pEdit->xSpacing; + } + else + { + //draw Text + + if (y_draw_oft>pObject->Height) + { + break; + } + + if (x_draw_oft+__PX_FONT_GBKSIZE>0&&y_draw_oft+__PX_FONT_HEIGHT>0) + { + if (pEdit->Password) + { + PX_FontDrawChar(&pEdit->EditSurface,x_draw_oft,y_draw_oft,"*",pEdit->TextColor); + } + else + { + PX_FontDrawChar(&pEdit->EditSurface,x_draw_oft,y_draw_oft,pEdit->text.buffer+charIndex,pEdit->TextColor); + } + } + + + if (pEdit->text.buffer[charIndex]&0x80) + { + if (pEdit->Password) + { + x+=__PX_FONT_ASCSIZE+pEdit->xSpacing; + charIndex++; + } + else + { + x+=__PX_FONT_GBKSIZE+pEdit->xSpacing; + charIndex++; + } + } + else + { + x+=__PX_FONT_ASCSIZE+pEdit->xSpacing; + } + } + + if (pEdit->AutoNewline) + { + if (x>=pObject->Width-__PX_FONT_GBKSIZE-pEdit->xSpacing-pEdit->HorizontalOffset) + { + x=pEdit->HorizontalOffset; + y+=__PX_FONT_HEIGHT+pEdit->ySpacing; + } + } + } + if (textLen==0) + { + //just draw cursor + if (pEdit->onFocus) + { + pEdit->elpased+=elpased; + if ((pEdit->elpased/200)&1) + { + PX_GeoDrawRect(&pEdit->EditSurface,x,y,x+__PX_FONT_ASCSIZE-1,y+__PX_FONT_HEIGHT-1,pEdit->CursorColor); + } + } + } + else + if (pEdit->onFocus&&pEdit->cursor_index==charIndex) + { + x_draw_oft=x-pEdit->XOffset; + y_draw_oft=y-pEdit->YOffset; + + pEdit->elpased+=elpased; + if ((pEdit->elpased/200)&1) + { + PX_GeoDrawRect(&pEdit->EditSurface,x_draw_oft,y_draw_oft,x_draw_oft+__PX_FONT_ASCSIZE-1,y_draw_oft+__PX_FONT_HEIGHT-1,pEdit->CursorColor); + } + } + + PX_SurfaceRender(psurface,&pEdit->EditSurface,(px_int)pObject->x,(px_int)pObject->y,PX_TEXTURERENDER_REFPOINT_LEFTTOP,PX_NULL); +} + + +px_void PX_Object_EditFree( PX_Object *pObject ) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if (pObject!=PX_NULL) + { + PX_StringFree(&pEdit->text); + PX_TextureFree(&pEdit->EditSurface); + } +} + +px_void PX_Object_EditAddString(PX_Object *pObject,px_char *Text) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + PX_Object_Event e; + if (pObject!=PX_NULL) + { + PX_Object_EditCheckCursor(pEdit); + while (*Text) + { + + if(*Text!=8) + { + if (pEdit->Limit) + { + px_bool bMatch=PX_FALSE; + const px_char *limitFilter=pEdit->Limit; + while (*limitFilter) + { + if (*limitFilter==*Text) + { + bMatch=PX_TRUE; + break; + } + limitFilter++; + } + if (!bMatch) + { + Text++; + continue; + } + } + + if (pEdit->max_length>0) + { + if (PX_StringLen(&pEdit->text)max_length) + { + PX_StringInsertChar(&pEdit->text,pEdit->cursor_index,*Text); + pEdit->cursor_index++; + } + } + else + { + PX_StringInsertChar(&pEdit->text,pEdit->cursor_index,*Text); + pEdit->cursor_index++; + } + + } + else + { + PX_Object_EditBackspace(pObject); + } + Text++; + } + } + PX_Object_EditUpdateCursorViewRegion(pObject); + e.Event=PX_OBJECT_EVENT_VALUECHAGE; + e.Param_ptr[0]=(px_void *)(pEdit->text.buffer); + PX_ObjectExecuteEvent(pObject,e); +} + +px_void PX_Object_EditBackspace(PX_Object *pObject) +{ + px_int oft; + PX_Object_Event e; + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if (pObject!=PX_NULL&&pEdit->onFocus) + { + oft=pEdit->cursor_index-1; + if(oft>=0) + { + if(pEdit->text.buffer[oft]&0x80) + { + if (PX_StringRemoveChar(&pEdit->text,oft)) + { + pEdit->cursor_index--; + oft--; + } + } + if (PX_StringRemoveChar(&pEdit->text,oft)) + { + pEdit->cursor_index--; + oft--; + } + e.Event=PX_OBJECT_EVENT_VALUECHAGE; + e.Param_ptr[0]=(px_void *)(pEdit->text.buffer); + PX_ObjectExecuteEvent(pObject,e); + } + } +} + +px_void PX_Object_EditCursorBack(PX_Object *pObject) +{ + px_int oft; + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if (pObject!=PX_NULL&&pEdit->onFocus) + { + oft=pEdit->cursor_index-1; + if(oft>=0) + { + if(pEdit->text.buffer[oft]&0x80) + { + pEdit->cursor_index--; + oft--; + } + pEdit->cursor_index--; + oft--; + } + } + PX_Object_EditUpdateCursorViewRegion(pObject); +} + +px_void PX_Object_EditCursorForward(PX_Object *pObject) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + + if (pObject!=PX_NULL&&pEdit->onFocus) + { + if (pEdit->text.buffer[pEdit->cursor_index]==0) + { + return; + } + if(pEdit->text.buffer[pEdit->cursor_index]&0x80) + { + pEdit->cursor_index++; + } + if (pEdit->text.buffer[pEdit->cursor_index]==0) + { + return; + } + pEdit->cursor_index++; + } + PX_Object_EditUpdateCursorViewRegion(pObject); +} + + +px_void PX_Object_EditAutoNewLine(PX_Object *pObject,px_bool b) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if (pObject!=PX_NULL) + { + pEdit->AutoNewline=b; + } +} + + + +px_void PX_Object_EditSetOffset(PX_Object *pObject,px_int TopOffset,px_int LeftOffset) +{ + PX_Object_Edit *pEdit=PX_Object_GetEdit(pObject); + if (pObject!=PX_NULL) + { + pEdit->VerticalOffset=TopOffset; + pEdit->HorizontalOffset=LeftOffset; + } +} + +// +// PX_Object * PX_Object_StaticImageCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_texture tex ) +// { +// PX_Object *pObject; +// PX_Object_StaticImage *pImage=(PX_Object_StaticImage *)MP_Malloc(mp,sizeof(PX_Object_StaticImage)); +// if (pImage==PX_NULL) +// { +// return PX_NULL; +// } +// pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,0,0,0); +// if (pObject==PX_NULL) +// { +// MP_Free(pObject->mp,pImage); +// return PX_NULL; +// } +// +// pObject->pObject=pImage; +// pObject->Enabled=PX_TRUE; +// pObject->Visible=PX_TRUE; +// pObject->Type=PX_OBJECT_TYPE_STATICIMAGE; +// pObject->ReceiveEvents=PX_FALSE; +// pObject->Func_ObjectFree=PX_Object_StaticImageFree; +// pObject->Func_ObjectRender=PX_Object_StaticImageRender; +// pImage->Texture=tex; +// pImage->Align=PX_OBJECT_ALIGN_LEFT|PX_OBJECT_ALIGN_TOP; +// return pObject; +// } +// +// +// PX_Object_StaticImage * PX_Object_GetStaticImage( PX_Object *Object ) +// { +// if(Object->Type==PX_OBJECT_TYPE_STATICIMAGE) +// return (PX_Object_StaticImage *)Object->pObject; +// else +// return PX_NULL; +// } +// +// px_void PX_Object_StaticImageSetAlign( PX_Object *pImage,px_dword Align) +// { +// PX_Object_StaticImage *Bitmap=PX_Object_GetStaticImage(pImage); +// if (Bitmap) +// { +// Bitmap->Align=Align; +// } +// } +// +// +// px_void PX_Object_StaticImageRender(px_surface *psurface, PX_Object *im,px_uint elpased) +// { +// px_int x; +// px_int y; +// PX_Object_StaticImage *pImage=PX_Object_GetStaticImage(im); +// x=(px_int)im->x; +// y=(px_int)im->y; +// +// if (pImage->Align&PX_OBJECT_ALIGN_BOTTOM) +// { +// y=(px_int)im->y+(px_int)im->Height-pImage->Texture.height; +// } +// if (pImage->Align&PX_OBJECT_ALIGN_TOP) +// { +// y=(px_int)im->y; +// } +// if (pImage->Align&PX_OBJECT_ALIGN_LEFT) +// { +// x=(px_int)im->x; +// } +// if (pImage->Align&PX_OBJECT_ALIGN_RIGHT) +// { +// x=(px_int)im->x+(px_int)im->Width-pImage->Texture.width; +// } +// +// if (pImage->Align&PX_OBJECT_ALIGN_HCENTER) +// { +// x=(px_int)im->x+((px_int)im->Width-pImage->Texture.width)/2; +// } +// if (pImage->Align&PX_OBJECT_ALIGN_VCENTER) +// { +// y=(px_int)im->y+((px_int)im->Height-pImage->Texture.height)/2; +// } +// +// if (pImage!=PX_NULL) +// { +// PX_TextureRender(psurface,&pImage->Texture,x,y,PX_TEXTURERENDER_REFPOINT_LEFTTOP,PX_NULL); +// } +// } +// +// px_void PX_Object_StaticImageFree(PX_Object *pObj) +// { +// PX_Object_StaticImage *pImage; +// pImage=PX_Object_GetStaticImage(pObj); +// if (pImage) +// { +// PX_TextureFree(&pImage->Texture); +// } +// } + +px_void PX_Object_ScrollArea_EventDispatcher(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_ScrollArea *pSA=PX_Object_GetScrollArea(Object); + if (!pSA) + { + return; + } + + if (e.Event==PX_OBJECT_EVENT_EXECUTE||e.Event==PX_OBJECT_EVENT_CURSORDRAG||e.Event==PX_OBJECT_EVENT_CURSORDOWN||e.Event==PX_OBJECT_EVENT_CURSORUP||e.Event==PX_OBJECT_EVENT_CURSORMOVE) + { + + if (!PX_ObjectIsPointInRegion(Object,(px_float)e.Param_uint[0],(px_float)e.Param_uint[1])) + { + return; + } + e.Param_uint[0]-=((px_int)Object->x-pSA->oftx); + e.Param_uint[1]-=((px_int)Object->y-pSA->ofty); + } + PX_ObjectPostEvent(pSA->Object,e); +} + + + +PX_Object * PX_Object_ScrollAreaCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height) +{ + PX_Object *pObject; + PX_Object_ScrollArea *pSA=(PX_Object_ScrollArea *)MP_Malloc(mp,sizeof(PX_Object_ScrollArea)); + + if (pSA==PX_NULL) + { + return PX_NULL; + } + + if (Height<=24||Width<=24) + { + return PX_NULL; + } + + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + + if (pObject==PX_NULL) + { + return PX_NULL; + } + + if (!pObject) + { + MP_Free(mp,pSA); + return PX_NULL; + } + + pObject->pObject=pSA; + pObject->Type=PX_OBJECT_TYPE_SCROLLAREA; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_Object_ScrollAreaFree; + pObject->Func_ObjectRender=PX_Object_ScrollAreaRender; + + pSA->BackgroundColor=PX_COLOR(0,0,0,0); + pSA->bBorder=PX_TRUE; + pSA->borderColor=PX_COLOR(255,0,0,0); + //root + pSA->Object=PX_ObjectCreate(pObject->mp,0,0,0,0,0,0,0); + pSA->oftx=0; + pSA->ofty=0; + + if(!PX_SurfaceCreate(mp,Width,Height,&pSA->surface)) + { + MP_Free(mp,pSA); + MP_Free(mp,pObject); + return PX_NULL; + } + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_ANY,PX_Object_ScrollArea_EventDispatcher,PX_NULL); + + return pObject; +} + +PX_Object * PX_Object_ScrollAreaGetIncludedObjects(PX_Object *pObj) +{ + PX_Object_ScrollArea *pSA; + pSA=PX_Object_GetScrollArea(pObj); + if (pSA) + { + return pSA->Object; + } + return PX_NULL; +} + +px_void PX_Object_ScrollAreaMoveToBottom(PX_Object *pObject) +{ + px_int w,h; + PX_Object_ScrollArea *psa=PX_Object_GetScrollArea(pObject); + if(psa) + { + PX_Object_ScrollAreaGetWidthHeight(psa->Object,&w,&h); + if (h>=pObject->Height) + { + psa->ofty=h-(px_int)pObject->Height+1; + } + else + { + psa->ofty=0; + } + } + +} + +px_void PX_Object_ScrollAreaMoveToTop(PX_Object *pObject) +{ + PX_Object_ScrollArea *psa=PX_Object_GetScrollArea(pObject); + if(psa) + psa->ofty=0; +} + + +static px_void PX_Object_ScrollAreaUpdateObjectPositionOffset(PX_Object *pObject,px_int oftX,px_int oftY) +{ + if (pObject==PX_NULL) + { + return; + } + pObject->x+=oftX; + pObject->y+=oftY; + PX_Object_ScrollAreaUpdateObjectPositionOffset(pObject->pNextBrother,oftX,oftY); + PX_Object_ScrollAreaUpdateObjectPositionOffset(pObject->pChilds,oftX,oftY); +} + +px_void PX_Object_ScrollAreaGetWidthHeight(PX_Object *pObject,px_int *Width,px_int *Height) +{ + if (pObject==PX_NULL) + { + return; + } + if (pObject->x+pObject->Width-1>*Width) + { + *Width=(px_int)pObject->x+(px_int)pObject->Width; + } + + if (pObject->y+pObject->Height-1>*Height) + { + *Height=(px_int)pObject->y+(px_int)pObject->Height; + } + + PX_Object_ScrollAreaGetWidthHeight(pObject->pNextBrother,Width,Height); + PX_Object_ScrollAreaGetWidthHeight(pObject->pChilds,Width,Height); +} + +px_void PX_Object_ScrollAreaRender(px_surface *psurface, PX_Object *pObject,px_uint elpased) +{ + PX_Object_ScrollArea *pSA; + + pSA=PX_Object_GetScrollArea(pObject); + if (!pSA) + { + return; + } + + PX_SurfaceClear(&pSA->surface,0,0,(px_int)pObject->Width-1,(px_int)pObject->Height-1,pSA->BackgroundColor); + + //draw + PX_Object_ScrollAreaUpdateObjectPositionOffset(pSA->Object,-pSA->oftx,-pSA->ofty); + PX_ObjectRender(&pSA->surface,pSA->Object,elpased); + PX_Object_ScrollAreaUpdateObjectPositionOffset(pSA->Object,pSA->oftx,pSA->ofty); + PX_SurfaceRender(psurface,&pSA->surface,(px_int)pObject->x,(px_int)pObject->y,PX_TEXTURERENDER_REFPOINT_LEFTTOP,PX_NULL); + + //Draw Border + if(pSA->bBorder) + PX_GeoDrawBorder(&pSA->surface,0,0,(px_int)pObject->Width-1,(px_int)pObject->Height-1,1,pSA->borderColor); + PX_SurfaceRender(psurface,&pSA->surface,(px_int)pObject->x,(px_int)pObject->y,PX_TEXTURERENDER_REFPOINT_LEFTTOP,PX_NULL); +} + + + +px_void PX_Object_ScrollAreaFree(PX_Object *pObj) +{ + PX_Object_ScrollArea *pSA; + pSA=PX_Object_GetScrollArea(pObj); + if (pSA) + { + PX_ObjectDelete(pSA->Object); + PX_SurfaceFree(&pSA->surface); + } +} + +px_void PX_Object_ScrollAreaSetBkColor(PX_Object *pObj,px_color bkColor) +{ + PX_Object_ScrollArea *pSA; + pSA=PX_Object_GetScrollArea(pObj); + if (pSA) + { + pSA->BackgroundColor=bkColor; + } +} + + +px_void PX_Object_ScrollAreaSetBorder(PX_Object *pObj,px_bool Border) +{ + PX_Object_ScrollArea *pSA; + pSA=PX_Object_GetScrollArea(pObj); + if (pSA) + { + pSA->bBorder=Border; + } +} + + +px_void PX_Object_ScrollAreaSetBorderColor(PX_Object *pObj,px_color borderColor) +{ + PX_Object_ScrollArea *pSA; + pSA=PX_Object_GetScrollArea(pObj); + if (pSA) + { + pSA->borderColor=borderColor; + } +} + +PX_Object_ScrollArea * PX_Object_GetScrollArea(PX_Object *Object) +{ + if(Object->Type==PX_OBJECT_TYPE_SCROLLAREA) + return (PX_Object_ScrollArea *)Object->pObject; + else + return PX_NULL; +} + +PX_Object * PX_Object_AutoTextCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int width) +{ + PX_Object *pObject; + + PX_Object_AutoText *pAt=(PX_Object_AutoText *)MP_Malloc(mp,sizeof(PX_Object_AutoText)); + PX_StringInit(mp,&pAt->text); + if (pAt==PX_NULL) + { + return PX_NULL; + } + + if (width<=0) + { + return PX_NULL; + } + + + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)width,0,0); + + if (pObject==PX_NULL) + { + return PX_NULL; + } + + if (!pObject) + { + MP_Free(mp,pAt); + return PX_NULL; + } + + pObject->pObject=pAt; + pObject->Type=PX_OBJECT_TYPE_AUTOTEXT; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_Object_AutoTextFree; + pObject->Func_ObjectRender=PX_Object_AutoTextRender; + + pAt->TextColor=PX_COLOR(255,0,0,0); + return pObject; +} + +px_void PX_Object_AutoTextRender(px_surface *psurface, PX_Object *pObject,px_uint elpased) +{ + px_int i; + px_int w=0; + px_int h=0; + PX_Object_AutoText * pAt=PX_Object_GetAutoText(pObject); + + if (!pAt) + { + return; + } + for (i=0;itext.buffer);i++) + { + if (pAt->text.buffer[i]=='\n') + { + w=0; + h+=PX_FontGetCharactorHeight(); + continue; + } + if (pAt->text.buffer[i]=='\r') + { + continue; + } + + if (pAt->text.buffer[i]=='\t') + { + w+=PX_FontGetGbkCharactorWidth(); + continue; + } + + + if (pAt->text.buffer[i]&0x80) + { + if(w+PX_FontGetGbkCharactorWidth()>pObject->Width) + { + w=0; + h+=PX_FontGetCharactorHeight(); + PX_FontDrawGBK(psurface,(px_int)pObject->x+w,(px_int)pObject->y+h,(px_uchar *)pAt->text.buffer+i,pAt->TextColor); + w+=PX_FontGetGbkCharactorWidth(); + } + else + { + PX_FontDrawGBK(psurface,(px_int)pObject->x+w,(px_int)pObject->y+h,(px_uchar *)pAt->text.buffer+i,pAt->TextColor); + w+=PX_FontGetGbkCharactorWidth(); + } + i++; + } + else + { + if(w+PX_FontGetAscCharactorWidth()>pObject->Width) + { + w=0; + h+=PX_FontGetCharactorHeight(); + PX_FontDrawASCII(psurface,(px_int)pObject->x+w,(px_int)pObject->y+h,pAt->text.buffer[i],pAt->TextColor); + w+=PX_FontGetAscCharactorWidth(); + } + else + { + PX_FontDrawASCII(psurface,(px_int)pObject->x+w,(px_int)pObject->y+h,pAt->text.buffer[i],pAt->TextColor); + w+=PX_FontGetAscCharactorWidth(); + } + } + } +} + +px_void PX_Object_AutoTextFree(PX_Object *Obj) +{ + PX_Object_AutoText * pAt=PX_Object_GetAutoText(Obj); + if (!pAt) + { + return; + } + PX_StringFree(&pAt->text); +} + + + +px_int PX_Object_AutoTextGetHeight(PX_Object *pObject) +{ + px_int i; + px_int w=0; + px_int h=0; + PX_Object_AutoText * pAt=PX_Object_GetAutoText(pObject); + + if (!pAt) + { + return 0; + } + for (i=0;itext.buffer);i++) + { + if (pAt->text.buffer[i]=='\n') + { + w=0; + h+=PX_FontGetCharactorHeight(); + continue; + } + if (pAt->text.buffer[i]=='\r') + { + continue; + } + + if (pAt->text.buffer[i]=='\t') + { + w+=PX_FontGetGbkCharactorWidth(); + continue; + } + + if (pAt->text.buffer[i]&0x80) + { + if(w+PX_FontGetGbkCharactorWidth()>pObject->Width) + { + w=0; + h+=PX_FontGetCharactorHeight(); + w+=PX_FontGetGbkCharactorWidth(); + } + else + { + w+=PX_FontGetGbkCharactorWidth(); + } + i++; + } + else + { + if(w+PX_FontGetAscCharactorWidth()>pObject->Width) + { + w=0; + h+=PX_FontGetCharactorHeight(); + w+=PX_FontGetAscCharactorWidth(); + } + else + { + w+=PX_FontGetAscCharactorWidth(); + } + } + } + return h+PX_FontGetCharactorHeight(); +} + +PX_Object_AutoText * PX_Object_GetAutoText(PX_Object *Object) +{ + if(Object->Type==PX_OBJECT_TYPE_AUTOTEXT) + return (PX_Object_AutoText *)Object->pObject; + else + return PX_NULL; +} + + +px_void PX_Object_AutoTextSetTextColor(PX_Object *pObject,px_color Color) +{ + PX_Object_AutoText * pAt=PX_Object_GetAutoText(pObject); + if (!pAt) + { + return; + } + pAt->TextColor=Color; +} + + +px_void PX_Object_AutoTextSetText(PX_Object *Obj,const px_char *Text) +{ + PX_Object_AutoText * pAt=PX_Object_GetAutoText(Obj); + if (!pAt) + { + return; + } + PX_StringClear(&pAt->text); + PX_StringCat(&pAt->text,Text); + Obj->Height=(px_float)PX_Object_AutoTextGetHeight(Obj); +} + +PX_Object * PX_Object_AnimationCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,PX_Animationlibrary *lib) +{ + PX_Object *pObject; + PX_Object_Animation *pAnimation=(PX_Object_Animation *)MP_Malloc(mp,sizeof(PX_Object_Animation)); + if (pAnimation==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,0,0,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pAnimation); + return PX_NULL; + } + + pObject->pObject=pAnimation; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_ANIMATION; + pObject->ReceiveEvents=PX_FALSE; + pObject->Func_ObjectFree=PX_Object_AnimationFree; + pObject->Func_ObjectRender=PX_Object_AnimationRender; + PX_AnimationCreate(&pAnimation->animation,lib); + pAnimation->Align=PX_OBJECT_ALIGN_HCENTER|PX_OBJECT_ALIGN_VCENTER; + return pObject; +} + +px_void PX_Object_AnimationSetLibrary(PX_Object *Object,PX_Animationlibrary *lib) +{ + PX_Object_Animation *pA=PX_Object_GetAnimation(Object); + if (pA) + { + PX_AnimationSetLibrary(&pA->animation,lib); + } +} + +PX_Object_Animation * PX_Object_GetAnimation(PX_Object *Object) +{ + if(Object->Type==PX_OBJECT_TYPE_ANIMATION) + return (PX_Object_Animation *)Object->pObject; + else + return PX_NULL; +} + +px_void PX_Object_AnimationSetAlign(PX_Object *panimation,px_dword Align) +{ + PX_Object_Animation *pA=PX_Object_GetAnimation(panimation); + if (pA) + { + pA->Align=Align; + } +} + +px_void PX_Object_AnimationRender(px_surface *psurface,PX_Object *pObj,px_uint elpased) +{ + PX_Object_Animation *pA=PX_Object_GetAnimation(pObj); + PX_TEXTURERENDER_REFPOINT ref; + if (pA) + { + if ((pA->Align&PX_OBJECT_ALIGN_LEFT)&&(pA->Align&PX_OBJECT_ALIGN_TOP)) + { + ref=PX_TEXTURERENDER_REFPOINT_LEFTTOP; + } + if ((pA->Align&PX_OBJECT_ALIGN_LEFT)&&(pA->Align&PX_OBJECT_ALIGN_VCENTER)) + { + ref=PX_TEXTURERENDER_REFPOINT_LEFTMID; + } + if ((pA->Align&PX_OBJECT_ALIGN_LEFT)&&(pA->Align&PX_OBJECT_ALIGN_BOTTOM)) + { + ref=PX_TEXTURERENDER_REFPOINT_LEFTBOTTOM; + } + + if ((pA->Align&PX_OBJECT_ALIGN_HCENTER)&&(pA->Align&PX_OBJECT_ALIGN_TOP)) + { + ref=PX_TEXTURERENDER_REFPOINT_MIDTOP; + } + + if ((pA->Align&PX_OBJECT_ALIGN_HCENTER)&&(pA->Align&PX_OBJECT_ALIGN_VCENTER)) + { + ref=PX_TEXTURERENDER_REFPOINT_CENTER; + } + + if ((pA->Align&PX_OBJECT_ALIGN_HCENTER)&&(pA->Align&PX_OBJECT_ALIGN_BOTTOM)) + { + ref=PX_TEXTURERENDER_REFPOINT_MIDBOTTOM; + } + + if ((pA->Align&PX_OBJECT_ALIGN_RIGHT)&&(pA->Align&PX_OBJECT_ALIGN_TOP)) + { + ref=PX_TEXTURERENDER_REFPOINT_RIGHTTOP; + } + + if ((pA->Align&PX_OBJECT_ALIGN_RIGHT)&&(pA->Align&PX_OBJECT_ALIGN_VCENTER)) + { + ref=PX_TEXTURERENDER_REFPOINT_RIGHTMID; + } + + if ((pA->Align&PX_OBJECT_ALIGN_RIGHT)&&(pA->Align&PX_OBJECT_ALIGN_BOTTOM)) + { + ref=PX_TEXTURERENDER_REFPOINT_RIGHTBOTTOM; + } + PX_AnimationUpdate(&pA->animation,elpased); + PX_AnimationRender(psurface,&pA->animation,PX_POINT((px_float)pObj->x,(px_float)pObj->y,0),ref,PX_NULL); + } + +} + +px_void PX_Object_AnimationFree(PX_Object *pObj) +{ + PX_Object_Animation *pA=PX_Object_GetAnimation(pObj); + if (pA) + PX_AnimationFree(&pA->animation); +} + +PX_Object * PX_Object_ParticalCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int z,px_texture *pTexture,PX_ScriptVM_Instance *pIns,px_char *Initfunc,px_char *_create,px_char *_update) +{ + PX_Object *pObject; + PX_Object_Partical *pPartical=(PX_Object_Partical *)MP_Malloc(mp,sizeof(PX_Object_Partical)); + if (pPartical==PX_NULL) + { + return PX_NULL; + } + + if(!PX_ParticalLauncherCreate(&pPartical->launcher,mp,pTexture,pIns,Initfunc,_create,_update)) + { + MP_Free(mp,pPartical); + } + + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,0,0,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pPartical); + return PX_NULL; + } + + pObject->pObject=pPartical; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_PARTICAL; + pObject->ReceiveEvents=PX_FALSE; + pObject->Func_ObjectFree=PX_Object_ParticalFree; + pObject->Func_ObjectRender=PX_Object_ParticalRender; + + return pObject; +} + + +PX_Object * PX_Object_ParticalCreateEx(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int z,PX_ParticalLauncher_InitializeInfo info) +{ + PX_Object *pObject; + PX_Object_Partical *pPartical=(PX_Object_Partical *)MP_Malloc(mp,sizeof(PX_Object_Partical)); + if (pPartical==PX_NULL) + { + return PX_NULL; + } + + if(!PX_ParticalLauncherCreateEx(&pPartical->launcher,mp,info)) + { + MP_Free(mp,pPartical); + } + + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,0,0,0); + + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pPartical); + return PX_NULL; + } + + pObject->pObject=pPartical; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_PARTICAL; + pObject->ReceiveEvents=PX_FALSE; + pObject->Func_ObjectFree=PX_Object_ParticalFree; + pObject->Func_ObjectRender=PX_Object_ParticalRender; + + return pObject; +} + +PX_Object_Partical * PX_Object_GetPartical(PX_Object *Object) +{ + if (Object->Type==PX_OBJECT_TYPE_PARTICAL) + { + return (PX_Object_Partical *)Object->pObject; + } + PX_ASSERT(); + return PX_NULL; +} + +px_void PX_Object_ParticalRender(px_surface *psurface,PX_Object *pObject,px_uint elpased) +{ + PX_Object_Partical * pPartical=PX_Object_GetPartical(pObject); + if (pPartical) + { + PX_ParticalLauncherUpdate(&pPartical->launcher,elpased); + PX_ParticalLauncherRender(psurface,&pPartical->launcher,PX_POINT((px_float)pObject->x,(px_float)pObject->y,1)); + } +} + +px_void PX_Object_ParticalFree(PX_Object *pObject) +{ + PX_Object_Partical * pPartical=PX_Object_GetPartical(pObject); + if (pPartical) + { + PX_ParticalLauncherFree(&pPartical->launcher); + } +} + +px_void PX_Object_ParticalSetDirection(PX_Object *pObject,px_point direction) +{ + PX_Object_Partical * pPartical=PX_Object_GetPartical(pObject); + if (pPartical) + { + pPartical->launcher.direction=direction; + } +} + +px_void PX_ObjectSetUserCode(PX_Object *pObject,px_int user) +{ + pObject->User_int=user; +} + +px_void PX_ObjectSetUserPointer(PX_Object *pObject,px_void *user_ptr) +{ + pObject->User_ptr=user_ptr; +} + + +px_void PX_Object_RoundCursor_Mousemove(PX_Object *pobject,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_RoundCursorSetDirection(pobject,PX_POINT((px_float)e.Param_uint[0],(px_float)e.Param_uint[1],0)); +} + +PX_Object * PX_Object_RoundCursorCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_shape *pShape,px_color blendColor) +{ + PX_Object *pObject; + PX_Object_RoundCursor *pRoundCursor=(PX_Object_RoundCursor *)MP_Malloc(mp,sizeof(PX_Object_RoundCursor)); + if (pRoundCursor==PX_NULL) + { + return PX_NULL; + } + + pRoundCursor->shape=pShape; + pRoundCursor->blendColor=blendColor; + pRoundCursor->cursorPoint=PX_POINT(0,0,0); + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,0,0,0); + + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pRoundCursor); + return PX_NULL; + } + + pObject->pObject=pRoundCursor; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_ROUNDCURSOR; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_Object_RoundCursorFree; + pObject->Func_ObjectRender=PX_Object_RoundCursorRender; + pObject->Func_ObjectUpdate=PX_NULL; + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_RoundCursor_Mousemove,PX_NULL); + return pObject; +} + + + +px_void PX_Object_RoundCursorRender(px_surface *psurface,PX_Object *pObject,px_uint elpased) +{ + px_float vector_x,vector_y,sqrt_rec; + PX_Object_RoundCursor * pRoundCursor=PX_Object_GetRoundCursor(pObject); + if (pRoundCursor) + { + vector_x=pRoundCursor->cursorPoint.x-pObject->x; + vector_y=pRoundCursor->cursorPoint.y-pObject->y; + if (vector_x*vector_x+vector_y*vector_y) + { + sqrt_rec=PX_SqrtRec(vector_x*vector_x+vector_y*vector_y); + vector_x*=sqrt_rec; + vector_y*=sqrt_rec; + PX_ShapeRenderEx_sincos(psurface,pRoundCursor->shape,(px_int)pObject->x,(px_int)pObject->y,PX_TEXTURERENDER_REFPOINT_CENTER,pRoundCursor->blendColor,1.0f,-vector_x,-vector_y); + } + + } + + +} + +px_void PX_Object_RoundCursorFree(PX_Object *pObject) +{ + +} + +PX_Object_RoundCursor * PX_Object_GetRoundCursor(PX_Object *Object) +{ + if (Object->Type==PX_OBJECT_TYPE_ROUNDCURSOR) + { + return (PX_Object_RoundCursor *)Object->pObject; + } + PX_ASSERT(); + return PX_NULL; +} + +px_void PX_Object_RoundCursorSetDirection(PX_Object *Object,px_point cursor_point) +{ + PX_Object_RoundCursor * pRoundCursor=PX_Object_GetRoundCursor(Object); + if (pRoundCursor) + { + pRoundCursor->cursorPoint=cursor_point; + } +} + +px_void PX_Object_RoundCursorSetColor(PX_Object *Object,px_color clr) +{ + PX_Object_RoundCursor * pRoundCursor=PX_Object_GetRoundCursor(Object); + if (pRoundCursor) + { + pRoundCursor->blendColor=clr; + } +} + +PX_Object * PX_Object_ShapeCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_shape *pshape ) +{ + PX_Object *pObject; + PX_Object_Shape *pShape=(PX_Object_Shape *)MP_Malloc(mp,sizeof(PX_Object_Shape)); + if (pShape==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,0,0,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pShape); + return PX_NULL; + } + + pObject->pObject=pShape; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_SHAPE; + pObject->ReceiveEvents=PX_FALSE; + pObject->Func_ObjectFree=PX_NULL; + pObject->Func_ObjectRender=PX_Object_ShapeRender; + pShape->pShape=pshape; + pShape->Align=PX_OBJECT_ALIGN_HCENTER|PX_OBJECT_ALIGN_VCENTER; + return pObject; +} + + +PX_Object_Shape * PX_Object_GetShape( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_SHAPE) + return (PX_Object_Shape *)Object->pObject; + else + return PX_NULL; +} + +px_void PX_Object_ShapeSetAlign( PX_Object *pShape,px_dword Align) +{ + PX_Object_Shape *Bitmap=PX_Object_GetShape(pShape); + if (Bitmap) + { + Bitmap->Align=Align; + } +} + + +px_void PX_Object_ShapeRender(px_surface *psurface, PX_Object *im,px_uint elpased) +{ + px_int x; + px_int y; + PX_Object_Shape *pShape=PX_Object_GetShape(im); + x=(px_int)im->x; + y=(px_int)im->y; + + if (pShape->Align&PX_OBJECT_ALIGN_BOTTOM) + { + y=(px_int)im->y+(px_int)im->Height-pShape->pShape->height; + } + if (pShape->Align&PX_OBJECT_ALIGN_TOP) + { + y=(px_int)im->y; + } + if (pShape->Align&PX_OBJECT_ALIGN_LEFT) + { + x=(px_int)im->x; + } + if (pShape->Align&PX_OBJECT_ALIGN_RIGHT) + { + x=(px_int)im->x+(px_int)im->Width-pShape->pShape->width; + } + + if (pShape->Align&PX_OBJECT_ALIGN_HCENTER) + { + x=(px_int)im->x+((px_int)im->Width-pShape->pShape->width)/2; + } + if (pShape->Align&PX_OBJECT_ALIGN_VCENTER) + { + y=(px_int)im->y+((px_int)im->Height-pShape->pShape->height)/2; + } + + if (pShape!=PX_NULL) + { + PX_ShapeRender(psurface,pShape->pShape,x,y,PX_TEXTURERENDER_REFPOINT_LEFTTOP,pShape->blendcolor); + } +} + +px_void PX_Object_ShapeSetBlendColor(PX_Object *pShape,px_color blendcolor) +{ + PX_Object_Shape *Bitmap=PX_Object_GetShape(pShape); + if (Bitmap) + { + Bitmap->blendcolor=blendcolor; + } +} + +px_void PX_Object_CursorButtonRender(px_surface *psurface, PX_Object *pObject,px_uint elpased) +{ + px_float w,h,_x,_y; + px_uchar alpha; + PX_Object_CursorButton *pcb; + w=pObject->Width/4.f; + h=pObject->Height/4.f; + pcb=PX_Object_GetCursorButton(pObject); + if (!pcb) + { + return; + } + pcb->pushbutton->x=pObject->x; + pcb->pushbutton->y=pObject->y; + pcb->pushbutton->z=pObject->z; + if(pcb->enter) + { + if(PX_ABS(pcb->c_distance-pcb->c_distance_near)>=1) + pcb->c_distance+=(pcb->c_distance_near-pcb->c_distance)*(elpased*1.f/200); + else + pcb->c_distance=pcb->c_distance_near; + } + else + { + if(PX_ABS(pcb->c_distance-pcb->c_distance_far)>=1) + pcb->c_distance+=(pcb->c_distance_far-pcb->c_distance)*(elpased*1.f/200); + else + pcb->c_distance=pcb->c_distance_far; + } + alpha=(px_uchar)(PX_ABS(pcb->c_distance-pcb->c_distance_far)/PX_ABS(pcb->c_distance_far-pcb->c_distance_near)*255); + pcb->c_color._argb.a=alpha; + //left top + _x=pObject->x-pcb->c_distance-1; + _y=pObject->y-pcb->c_distance-1; + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y,(px_int)(_x+w),(px_int)_y+pcb->c_width,pcb->c_color); + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y+pcb->c_width+1,(px_int)_x+pcb->c_width,(px_int)(_y+h),pcb->c_color); + + //left bottom + _x=pObject->x-pcb->c_distance-1; + _y=pObject->y+pObject->Height+pcb->c_distance; + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y,(px_int)(_x+w),(px_int)_y-pcb->c_width,pcb->c_color); + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y-pcb->c_width-1,(px_int)_x+pcb->c_width,(px_int)(_y-h),pcb->c_color); + + //right top + _x=pObject->x+pObject->Width+pcb->c_distance; + _y=pObject->y-pcb->c_distance-1; + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y,(px_int)(_x-w),(px_int)_y+pcb->c_width,pcb->c_color); + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y+pcb->c_width+1,(px_int)_x-pcb->c_width,(px_int)(_y+h),pcb->c_color); + + //right bottom + _x=pObject->x+pObject->Width+pcb->c_distance; + _y=pObject->y+pObject->Height+pcb->c_distance; + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y,(px_int)(_x-w),(px_int)_y-pcb->c_width,pcb->c_color); + PX_GeoDrawRect(psurface,(px_int)_x,(px_int)_y-pcb->c_width-1,(px_int)_x-pcb->c_width,(px_int)(_y-h),pcb->c_color); +} + +px_void PX_Object_CursorButtonFree( PX_Object *Obj ) +{ + +} +px_void PX_Object_CursorButtonOnMouseMove(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + + PX_Object_CursorButton *pCB=PX_Object_GetCursorButton(Object); + px_int x,y; + x=e.Param_int[0]; + y=e.Param_int[1]; + + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + { + if (!pCB->enter) + { + pCB->enter=PX_TRUE; + //pCB->c_distance=pCB->c_distance_far; + } + } + else + { + if (pCB->enter) + { + pCB->enter=PX_FALSE; + //pCB->c_distance=pCB->c_distance_near; + } + } +} + + + +PX_Object *PX_Object_CursorButtonCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const px_char *Text,px_color Color) +{ + PX_Object *pObject; + PX_Object_CursorButton *pCb=(PX_Object_CursorButton *)MP_Malloc(mp,sizeof(PX_Object_CursorButton)); + if (pCb==PX_NULL) + { + return PX_NULL; + } + pObject=PX_ObjectCreate(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0); + if (pObject==PX_NULL) + { + MP_Free(pObject->mp,pCb); + return PX_NULL; + } + pObject->pObject=pCb; + pObject->Enabled=PX_TRUE; + pObject->Visible=PX_TRUE; + pObject->Type=PX_OBJECT_TYPE_CURSORBUTTON; + pObject->ReceiveEvents=PX_TRUE; + pObject->Func_ObjectFree=PX_NULL; + pObject->Func_ObjectUpdate=PX_NULL; + pObject->Func_ObjectRender=PX_Object_CursorButtonRender; + + + pCb->pushbutton=PX_Object_PushButtonCreate(mp,pObject,x,y,Width,Height,Text,Color); + pCb->c_color=PX_COLOR(255,0,0,0); + pCb->c_distance=0; + pCb->c_distance_far=(px_float)(Width>Height?Height/4:Width/4); + pCb->c_distance_near=3; + pCb->enter=PX_FALSE; + if (Height<16) + { + pCb->c_width=1; + } + else + pCb->c_width=Height/16; + + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_CursorButtonOnMouseMove,PX_NULL); + return pObject; +} +PX_Object_CursorButton * PX_Object_GetCursorButton( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_CURSORBUTTON) + return (PX_Object_CursorButton *)Object->pObject; + else + return PX_NULL; +} + +PX_Object * PX_Object_GetCursorButtonPushButton(PX_Object *Object) +{ + PX_Object_CursorButton *pcb; + pcb=PX_Object_GetCursorButton(Object); + if (!pcb) + { + return PX_NULL; + } + return pcb->pushbutton; +} + + + +PX_Object_List * PX_Object_GetList( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_LIST) + return (PX_Object_List *)Object->pObject; + else + return PX_NULL; +} + +PX_Object_ListItem * PX_Object_GetListItem( PX_Object *Object ) +{ + if(Object->Type==PX_OBJECT_TYPE_LISTITEM) + return (PX_Object_ListItem *)Object->pObject; + else + return PX_NULL; +} + +px_void PX_Object_ListOnButtonDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_List *pList= PX_Object_GetList(pObject); + + if (!PX_isPointInRect(PX_POINT((px_float)e.Param_int[0],(px_float)e.Param_int[1],0),PX_RECT(pObject->x,pObject->y,pObject->Width,pObject->Height))) + { + return; + } + + pList->currentSelectedId=(px_int)(e.Param_int[1]+pList->offsety-pObject->y)/pList->ItemHeight; + if(pList->currentSelectedId<0||pList->currentSelectedId>=pList->pData.size) + { + pList->currentSelectedId=-1; + } + +} + +px_void PX_Object_ListOnWheel(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + PX_Object_List *pList= PX_Object_GetList(pObject); + + if (!PX_ObjectIsPointInRegion(pObject,(px_float)e.Param_int[0],(px_float)e.Param_int[1])) + { + return; + } + pList->offsety-=e.Param_int[2]/5; + + + if (pList->offsety>(pList->ItemHeight)*pList->pData.size-pObject->Height) + { + pList->offsety=(pList->ItemHeight)*pList->pData.size-(px_int)pObject->Height; + } + + if (pList->offsety<0) + { + pList->offsety=0; + } + + PX_Object_SliderBarSetValue(pList->SliderBar,pList->offsety); +} + + + +px_void PX_Object_ListUpdate(PX_Object *pObject,px_uint elpased) +{ + PX_Object *pItemObject; + PX_Object_ListItem *pItem; + px_int iy; + px_int i; + PX_Object_List *pList= PX_Object_GetList(pObject); + if (!pList) + { + return; + } + + if (pList->ItemHeight*pList->pData.size>pObject->Height) + { + PX_Object_SliderBar *pSliderBar=PX_Object_GetSliderBar(pList->SliderBar); + pList->SliderBar->Visible=PX_TRUE; + pList->SliderBar->y=pObject->y; + pList->SliderBar->x=pObject->x+pObject->Width-32; + pSliderBar->SliderButtonLength=(px_int)(pList->SliderBar->Height*pObject->Height/(pList->ItemHeight*pList->pData.size)); + if(pSliderBar->SliderButtonLength<32) pSliderBar->SliderButtonLength=32; + pSliderBar->Max=(pList->ItemHeight)*pList->pData.size-(px_int)pObject->Height; + PX_Object_SliderBarSetBackgroundColor(pList->SliderBar,pList->BackgroundColor); + PX_Object_SliderBarSetColor(pList->SliderBar,pList->BorderColor); + } + else + { + pList->SliderBar->Visible=PX_FALSE; + } + + + if (pList->offsety<0) + { + iy=-pList->offsety; + } + else + { + iy=-(pList->offsety%pList->ItemHeight); + } + + for (i=0;iItems.size;i++) + { + + pItemObject=*PX_VECTORAT(PX_Object *,&pList->Items,i); + pItemObject->x=0; + pItemObject->y=(px_float)iy; + pItem=PX_Object_GetListItem(pItemObject); + pItem->status=PX_LISTITEM_STATUS_NORMAL; + if (pList->offsety<0) + { + if(ipData.size) + { + pItem->pdata=*PX_VECTORAT(px_void *,&pList->pData,i); + PX_ObjectUpdate(pItemObject,elpased); + } + else + { + pItem->pdata=PX_NULL; + } + } + else + { + if(i+pList->offsety/pList->ItemHeightpData.size) + { + if (i+pList->offsety/pList->ItemHeight==pList->currentSelectedId) + { + pItem->status=PX_LISTITEM_STATUS_SELECTED; + } + pItem->pdata=*PX_VECTORAT(px_void *,&pList->pData,i+pList->offsety/pList->ItemHeight); + PX_ObjectUpdate(pItemObject,elpased); + } + else + { + pItem->pdata=PX_NULL; + } + } + + + iy+=(px_int)pItemObject->Height; + + + } +} + +px_void PX_Object_ListRender(px_surface *psurface, PX_Object *pObject,px_uint elpased) +{ + PX_Object *pItemObject; + px_int offsetX=0,drawXCenter=0; + px_int i; + PX_Object_List *pList= PX_Object_GetList(pObject); + PX_Object_ListItem *pItem; + PX_SurfaceClear(&pList->renderSurface,0,0,pList->renderSurface.width-1,pList->renderSurface.height-1,pList->BackgroundColor); + for (i=0;iItems.size;i++) + { + pItemObject=*PX_VECTORAT(PX_Object *,&pList->Items,i); + pItem=PX_Object_GetListItem(pItemObject); + if (pItem->pdata) + { + PX_ObjectRender(&pList->renderSurface,pItemObject,elpased); + } + } + PX_GeoDrawBorder(&pList->renderSurface,0,0,pList->renderSurface.width-1,pList->renderSurface.height-1,1,pList->BorderColor); + PX_SurfaceCover(psurface,&pList->renderSurface,(px_int)pObject->x,(px_int)pObject->y,PX_TEXTURERENDER_REFPOINT_LEFTTOP); + +} + +px_void PX_Object_ListClear(PX_Object *pListObj) +{ + PX_Object_List *pList=PX_Object_GetList(pListObj); + if(pList) + PX_VectorClear(&pList->pData); +} + +px_void PX_Object_ListAdd(PX_Object *pListObj,px_void *ptr) +{ + PX_Object_List *pList=PX_Object_GetList(pListObj); + if(pList) + { + PX_VectorPushback(&pList->pData,&ptr); + } +} + +px_void PX_Object_ListFree(PX_Object *pListObj) +{ + PX_Object_List *pList=PX_Object_GetList(pListObj); + if (!pList) + { + PX_ASSERT(); + return; + } + PX_Object_ListClear(pListObj); + PX_SurfaceFree(&pList->renderSurface); + PX_VectorFree(&pList->Items); +} + +px_void PX_Object_ListOnSliderValueChanged(PX_Object *Object,PX_Object_Event e,px_void *ptr) +{ + px_int value=PX_Object_SliderBarGetValue(Object); + PX_Object_List *pList=PX_Object_GetList((PX_Object *)ptr); + pList->offsety=value; +} + +px_void PX_Object_ListOnEvent(PX_Object *Object,PX_Object_Event e,px_void *ptr) +{ + px_int i; + PX_Object_List *pList=PX_Object_GetList(Object); + + switch (e.Event) + { + case PX_OBJECT_EVENT_CURSORWHEEL: + if (!PX_ObjectIsPointInRegion(Object,(px_float)e.Param_int[0],(px_float)e.Param_int[1])) + { + return; + } + case PX_OBJECT_EVENT_CURSORDRAG: + case PX_OBJECT_EVENT_CURSORRDOWN: + case PX_OBJECT_EVENT_CURSORDOWN: + case PX_OBJECT_EVENT_CURSORUP: + case PX_OBJECT_EVENT_CURSORRUP: + case PX_OBJECT_EVENT_CURSORMOVE: + e.Param_int[0]-=(px_int)Object->x; + e.Param_int[1]-=(px_int)Object->y; + break; + } + + for (i=0;iItems.size;i++) + { + PX_Object *pItem=*PX_VECTORAT(PX_Object *,&pList->Items,i); + PX_ObjectPostEvent(pItem,e); + } +} + +PX_Object * PX_Object_ListCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,px_int ItemHeight,PX_Object_ListItemOnCreate _CreateFunc) +{ + px_int i; + PX_Object_List List,*pList; + PX_Object_ListItem Item; + PX_Object *pListObject,*pItemObject; + Item.status=PX_LISTITEM_STATUS_NORMAL; + List.mp=mp; + List.ItemWidth=Width-32; + List.ItemHeight=ItemHeight; + List.CreateFunctions=_CreateFunc; + List.BorderColor=PX_COLOR(255,0,0,0); + List.BackgroundColor=PX_COLOR(255,255,255,255); + List.offsetx=0; + List.currentSelectedId=-1; + List.offsety=0; + PX_VectorInit(mp,&List.Items,sizeof(PX_Object *),64); + PX_VectorInit(mp,&List.pData,sizeof(px_void *),32); + if(!PX_SurfaceCreate(mp,Width,Height,&List.renderSurface)) return PX_NULL; + + if(!(pListObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0,PX_OBJECT_TYPE_LIST,PX_Object_ListUpdate,PX_Object_ListRender,PX_Object_ListFree,&List,sizeof(PX_Object_List)))) return PX_NULL; + + pList=PX_Object_GetList(pListObject); + pList->SliderBar=PX_Object_SliderBarCreate(mp,pListObject,(px_int)pListObject->Width-32,0,32,(px_int)pListObject->Height,PX_OBJECT_SLIDERBAR_TYPE_VERTICAL,PX_OBJECT_SLIDERBAR_STYLE_BOX); + + for (i=0;iWidth-32,(px_float)ItemHeight,0,PX_OBJECT_TYPE_LISTITEM,PX_NULL,PX_NULL,PX_NULL,&Item,sizeof(PX_Object_ListItem)); + if(!_CreateFunc(mp,pItemObject)) return PX_FALSE; + if(!PX_VectorPushback(&pList->Items,&pItemObject))return PX_FALSE; + } + + + + PX_ObjectRegisterEvent(pListObject,PX_OBJECT_EVENT_CURSORWHEEL,PX_Object_ListOnWheel,pListObject); + PX_ObjectRegisterEvent(pListObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_ListOnButtonDown,pListObject); + PX_ObjectRegisterEvent(pList->SliderBar,PX_OBJECT_EVENT_VALUECHAGE,PX_Object_ListOnSliderValueChanged,pListObject); + PX_ObjectRegisterEvent(pListObject,PX_OBJECT_EVENT_ANY,PX_Object_ListOnEvent,pListObject); + return pListObject; +} + +px_void PX_Object_ListSetBackgroundColor(PX_Object *pListObject,px_color color) +{ + PX_Object_List *pList=PX_Object_GetList(pListObject); + if (pList) + { + pList->BackgroundColor=color; + } +} + +px_void PX_Object_ListSetBorderColor(PX_Object *pListObject,px_color color) +{ + PX_Object_List *pList=PX_Object_GetList(pListObject); + if (pList) + { + pList->BorderColor=color; + } +} + +px_int PX_Object_ListAddItemDesc(PX_Object *pListObject,px_void *desc) +{ + PX_Object_List *pList=PX_Object_GetList(pListObject); + if (!PX_VectorPushback(&pList->pData,desc)) + { + return -1; + } + return pList->pData.size-1; +} + +px_void * PX_Object_ListGetItemDesc(PX_Object *pListObject,px_int index) +{ + PX_Object_List *pList=PX_Object_GetList(pListObject); + if (index>0&&indexpData.size) + { + return PX_VECTORAT(px_void *,&pList->pData,index); + } + return PX_NULL; +} + +px_void PX_Object_ListRemoveItemDesc(PX_Object *pListObject,px_int index) +{ + PX_Object_List *pList=PX_Object_GetList(pListObject); + if (index>0&&indexpData.size) + { + PX_VectorErase(&pList->pData,index); + } + return ; +} + + +PX_Object_VirtualKeyBoard *PX_Object_GetVirtualKeyBoard(PX_Object *pObject) +{ + if (!pObject) + { + return PX_NULL; + } + if (pObject->Type==PX_OBJECT_TYPE_VKEYBOARD) + { + return (PX_Object_VirtualKeyBoard *)pObject->pObject; + } + return PX_NULL; +} + +px_void PX_Object_VirtualKeyBoardRender(px_surface *psurface, PX_Object *pObject,px_uint elpased) +{ + px_int i; + px_int oftx=(px_int)pObject->x; + px_int ofty=(px_int)pObject->y; + PX_Object_VirtualKeyBoard *keyBoard=(PX_Object_VirtualKeyBoard *)pObject->pObject; + //clear background + PX_SurfaceClear(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)(pObject->x+pObject->Width),(px_int)(pObject->y+pObject->Height),keyBoard->backgroundColor); + + for (i=0;iKeys);i++) + { + //draw rect + + if (keyBoard->Keys[i].bDown||keyBoard->Keys[i].bhold) + { + PX_GeoDrawRect(psurface,oftx+keyBoard->Keys[i].x,ofty+keyBoard->Keys[i].y,oftx+keyBoard->Keys[i].x+keyBoard->Keys[i].width,ofty+keyBoard->Keys[i].y+keyBoard->Keys[i].height,keyBoard->pushColor); + } + else if (keyBoard->Keys[i].bCursor) + { + PX_GeoDrawRect(psurface,oftx+keyBoard->Keys[i].x,ofty+keyBoard->Keys[i].y,oftx+keyBoard->Keys[i].x+keyBoard->Keys[i].width,ofty+keyBoard->Keys[i].y+keyBoard->Keys[i].height,keyBoard->cursorColor); + } + + PX_GeoDrawBorder(psurface,oftx+keyBoard->Keys[i].x,ofty+keyBoard->Keys[i].y,oftx+keyBoard->Keys[i].x+keyBoard->Keys[i].width,ofty+keyBoard->Keys[i].y+keyBoard->Keys[i].height,1,keyBoard->borderColor); + + if (keyBoard->bShift||keyBoard->bUpper) + { + PX_FontDrawText(psurface,oftx+keyBoard->Keys[i].x+2,ofty+keyBoard->Keys[i].y+2,keyBoard->Keys[i].u_key,keyBoard->borderColor,PX_FONT_ALIGN_XLEFT); + } + else + { + PX_FontDrawText(psurface,oftx+keyBoard->Keys[i].x+2,ofty+keyBoard->Keys[i].y+2,keyBoard->Keys[i].d_key,keyBoard->borderColor,PX_FONT_ALIGN_XLEFT); + } + } + +} + +px_void PX_Object_VirtualKeyBoardOnCursorUp(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_int x=(px_int)(e.Param_int[0]); + px_int y=(px_int)(e.Param_int[1]); + px_int i; + PX_Object_VirtualKeyBoard *pkb=(PX_Object_VirtualKeyBoard *)pObject->pObject; + if (!PX_ObjectIsPointInRegion(pObject,(px_float)x,(px_float)y)) + { + return; + } + + for (i=0;iKeys);i++) + { + + pkb->Keys[i].bDown=PX_FALSE; + } +} + +px_void PX_Object_VirtualKeyBoardOnCursorMove(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_int x=(px_int)(e.Param_int[0]); + px_int y=(px_int)(e.Param_int[1]); + px_int i; + px_int kh=(px_int)(pObject->Height/5); + PX_Object_VirtualKeyBoard *pkb=(PX_Object_VirtualKeyBoard *)pObject->pObject; + if (!PX_ObjectIsPointInRegion(pObject,(px_float)x,(px_float)y)) + { + return; + } + + x=(px_int)(e.Param_int[0]-pObject->x); + y=(px_int)(e.Param_int[1]-pObject->y); + + + for (i=0;iKeys);i++) + { + if(!pkb->Keys[i].bDown) + { + pkb->Keys[i].bCursor=PX_FALSE; + } + else + { + if (!PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + pkb->Keys[i].bDown=PX_FALSE; + } + } + + if (yKeys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + else if (y<2*kh) + { + for (i=14;i<=27;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + else if (y<3*kh) + { + for (i=28;i<=40;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + else if (y<4*kh) + { + for (i=41;i<=52;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + else + { + for (i=53;i<=55;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bCursor=PX_TRUE; + break; + } + } + } + + + +} + +px_void PX_Object_VirtualKeyBoardOnCursorDown(PX_Object *pObject,PX_Object_Event e,px_void *ptr) +{ + px_int x=(px_int)(e.Param_int[0]); + px_int y=(px_int)(e.Param_int[1]); + px_int i; + px_int kh=(px_int)(pObject->Height/5); + PX_Object_VirtualKeyBoard *pkb=(PX_Object_VirtualKeyBoard *)pObject->pObject; + if (!PX_ObjectIsPointInRegion(pObject,(px_float)x,(px_float)y)) + { + return; + } + + x=(px_int)(e.Param_int[0]-pObject->x); + y=(px_int)(e.Param_int[1]-pObject->y); + + + if (yKeys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bDown=PX_TRUE; + break; + } + } + } + else if (y<2*kh) + { + for (i=14;i<=27;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bDown=PX_TRUE; + break; + } + } + } + else if (y<3*kh) + { + for (i=28;i<=40;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bDown=PX_TRUE; + break; + } + } + } + else if (y<4*kh) + { + for (i=41;i<=52;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bDown=PX_TRUE; + break; + } + } + } + else + { + for (i=53;i<=55;i++) + { + if (PX_isPointInRect(PX_POINT((px_float)x,(px_float)y,0),PX_RECT((px_float)pkb->Keys[i].x,(px_float)pkb->Keys[i].y,(px_float)pkb->Keys[i].width,(px_float)pkb->Keys[i].height))) + { + pkb->Keys[i].bDown=PX_TRUE; + break; + } + } + } + if (i==13) + { + pkb->functionCode=8; + } + else if(i==14) + { + pkb->functionCode='\t'; + } + else if(i==28) + { + pkb->bUpper=!pkb->bUpper; + if (pkb->bUpper) + { + pkb->Keys[28].bhold=PX_TRUE; + } + else + { + pkb->Keys[28].bhold=PX_FALSE; + } + pkb->functionCode=0; + } + else if(i==40) + { + pkb->functionCode='\r'; + } + else if(i==41) + { + pkb->bShift=!pkb->bShift; + if (pkb->bShift) + { + pkb->Keys[41].bhold=PX_TRUE; + } + else + { + pkb->Keys[41].bhold=PX_FALSE; + } + pkb->functionCode=0; + } + else if(i==52) + { + pkb->bShift=!pkb->bShift; + if (pkb->bShift) + { + pkb->Keys[52].bhold=PX_TRUE; + } + else + { + pkb->Keys[52].bhold=PX_FALSE; + } + pkb->functionCode=0; + } + else if(i==53) + { + pkb->bCtrl=!pkb->bCtrl; + if (pkb->bCtrl) + { + pkb->Keys[53].bhold=PX_TRUE; + } + else + { + pkb->Keys[53].bhold=PX_FALSE; + } + pkb->functionCode=0; + } + else if(i==54) + { + pkb->bAlt=!pkb->bAlt; + if (pkb->bAlt) + { + pkb->Keys[54].bhold=PX_TRUE; + } + else + { + pkb->Keys[54].bhold=PX_FALSE; + } + pkb->functionCode=0; + } + else if(i==55) + { + pkb->functionCode=' '; + } + else + { + if (pkb->bUpper||pkb->bShift) + { + pkb->functionCode=pkb->Keys[i].u_key[0]; + } + else + { + pkb->functionCode=pkb->Keys[i].d_key[0]; + } + + pkb->bShift=PX_FALSE; + pkb->Keys[52].bhold=PX_FALSE; + pkb->Keys[41].bhold=PX_FALSE; + } + + +} + + + +PX_Object* PX_Object_VirtualKeyBoardCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int width,px_int height) +{ + px_int i; + px_int kw,kh; + px_int xoffset,yoffset; + PX_Object_VirtualKeyBoard keyboard; + px_char line1_upper[]="~!@#$%^&*()_+"; + px_char line1_lower[]="`1234567890-="; + px_char line2_upper[]="QWERTYUIOP{}|"; + px_char line2_lower[]="qwertyuiop[]\\"; + px_char line3_upper[]="ASDFGHJKL:\""; + px_char line3_lower[]="asdfghjkl;'"; + px_char line4_upper[]="ZXCVBNM<>?"; + px_char line4_lower[]="zxcvbnm,./"; + + + PX_Object *keyboardObject; + + if (width<24*15||height<16*5) + { + return PX_NULL; + } + PX_memset(&keyboard,0,sizeof(PX_Object_VirtualKeyBoard)); + + kw=width/15; + kh=height/5; + + xoffset=0; + yoffset=0; + for (i=0;i<=12;i++) + { + keyboard.Keys[i].d_key[0]=line1_lower[i]; + keyboard.Keys[i].u_key[0]=line1_upper[i]; + keyboard.Keys[i].x=xoffset; + keyboard.Keys[i].y=yoffset; + keyboard.Keys[i].width=kw; + keyboard.Keys[i].height=kh; + xoffset+=kw; + } + + PX_strset(keyboard.Keys[13].d_key,"Back"); + PX_strset(keyboard.Keys[13].u_key,"Back"); + keyboard.Keys[13].x=xoffset; + keyboard.Keys[13].y=0; + keyboard.Keys[13].width=kw*2; + keyboard.Keys[13].height=kh; + + + xoffset=0; + yoffset=kh; + + PX_strset(keyboard.Keys[14].d_key,"Tab"); + PX_strset(keyboard.Keys[14].u_key,"Tab"); + + keyboard.Keys[14].x=xoffset; + keyboard.Keys[14].y=kh; + keyboard.Keys[14].width=(px_int)(kw*1.5); + keyboard.Keys[14].height=kh; + + xoffset+=keyboard.Keys[14].width; + + for (i=15;i<=26;i++) + { + keyboard.Keys[i].d_key[0]=line2_lower[i-15]; + keyboard.Keys[i].u_key[0]=line2_upper[i-15]; + keyboard.Keys[i].x=xoffset; + keyboard.Keys[i].y=yoffset; + keyboard.Keys[i].width=kw; + keyboard.Keys[i].height=kh; + xoffset+=keyboard.Keys[i].width; + } + PX_strset(keyboard.Keys[27].d_key,"\\"); + PX_strset(keyboard.Keys[27].u_key,"|"); + keyboard.Keys[27].x=xoffset; + keyboard.Keys[27].y=yoffset; + keyboard.Keys[27].width=(px_int)(kw*1.5);; + keyboard.Keys[27].height=kh; + + xoffset=0; + yoffset=2*kh; + + PX_strset(keyboard.Keys[28].d_key,"Upper"); + PX_strset(keyboard.Keys[28].u_key,"Upper"); + keyboard.Keys[28].x=xoffset; + keyboard.Keys[28].y=yoffset; + keyboard.Keys[28].width=(px_int)(kw*2); + keyboard.Keys[28].height=kh; + xoffset+=keyboard.Keys[28].width; + + for (i=29;i<=39;i++) + { + keyboard.Keys[i].d_key[0]=line3_lower[i-29]; + keyboard.Keys[i].u_key[0]=line3_upper[i-29]; + keyboard.Keys[i].x=xoffset; + keyboard.Keys[i].y=yoffset; + keyboard.Keys[i].width=kw; + keyboard.Keys[i].height=kh; + xoffset+=keyboard.Keys[i].width; + } + + PX_strset(keyboard.Keys[40].d_key,"Enter"); + PX_strset(keyboard.Keys[40].u_key,"Enter"); + keyboard.Keys[40].x=xoffset; + keyboard.Keys[40].y=yoffset; + keyboard.Keys[40].width=(px_int)(kw*2);; + keyboard.Keys[40].height=kh; + xoffset+=keyboard.Keys[40].width; + + xoffset=0; + yoffset=3*kh; + + PX_strset(keyboard.Keys[41].d_key,"Shift"); + PX_strset(keyboard.Keys[41].u_key,"Shift"); + keyboard.Keys[41].x=xoffset; + keyboard.Keys[41].y=yoffset; + keyboard.Keys[41].width=(px_int)(kw*2.5);; + keyboard.Keys[41].height=kh; + xoffset+=keyboard.Keys[41].width; + + for (i=42;i<=51;i++) + { + keyboard.Keys[i].d_key[0]=line4_lower[i-42]; + keyboard.Keys[i].u_key[0]=line4_upper[i-42]; + keyboard.Keys[i].x=xoffset; + keyboard.Keys[i].y=yoffset; + keyboard.Keys[i].width=kw; + keyboard.Keys[i].height=kh; + xoffset+=keyboard.Keys[i].width; + } + + PX_strset(keyboard.Keys[52].d_key,"Shift"); + PX_strset(keyboard.Keys[52].u_key,"Shift"); + keyboard.Keys[52].x=xoffset; + keyboard.Keys[52].y=yoffset; + keyboard.Keys[52].width=(px_int)(kw*2.5);; + keyboard.Keys[52].height=kh; + xoffset+=keyboard.Keys[52].width; + + xoffset=0; + yoffset=4*kh; + PX_strset(keyboard.Keys[53].d_key,"Ctrl"); + PX_strset(keyboard.Keys[53].u_key,"Ctrl"); + keyboard.Keys[53].x=xoffset; + keyboard.Keys[53].y=yoffset; + keyboard.Keys[53].width=(px_int)(kw*1.5);; + keyboard.Keys[53].height=kh; + xoffset+=keyboard.Keys[53].width; + + PX_strset(keyboard.Keys[54].d_key,"Alt"); + PX_strset(keyboard.Keys[54].u_key,"Alt"); + keyboard.Keys[54].x=xoffset; + keyboard.Keys[54].y=yoffset; + keyboard.Keys[54].width=(px_int)(kw*1.5);; + keyboard.Keys[54].height=kh; + xoffset+=keyboard.Keys[54].width; + + PX_strset(keyboard.Keys[55].d_key,""); + PX_strset(keyboard.Keys[55].u_key,""); + keyboard.Keys[55].x=xoffset; + keyboard.Keys[55].y=yoffset; + keyboard.Keys[55].width=(px_int)(kw*12);; + keyboard.Keys[55].height=kh; + xoffset+=keyboard.Keys[55].width; + + keyboard.cursorColor=PX_COLOR(255,192,192,192); + keyboard.pushColor=PX_COLOR(255,128,128,128); + keyboard.backgroundColor=PX_COLOR(255,255,255,255); + keyboard.borderColor=PX_COLOR(255,0,0,0); + + keyboardObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)width,(px_float)height,0,PX_OBJECT_TYPE_VKEYBOARD,PX_NULL,PX_Object_VirtualKeyBoardRender,PX_NULL,&keyboard,sizeof(PX_Object_VirtualKeyBoard)); + + PX_ObjectRegisterEvent(keyboardObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_VirtualKeyBoardOnCursorMove,PX_NULL); + PX_ObjectRegisterEvent(keyboardObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_VirtualKeyBoardOnCursorMove,PX_NULL); + PX_ObjectRegisterEvent(keyboardObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_VirtualKeyBoardOnCursorDown,PX_NULL); + PX_ObjectRegisterEvent(keyboardObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_VirtualKeyBoardOnCursorUp,PX_NULL); + return keyboardObject; +} + +px_void PX_Object_VirtualKeyBoardSetBackgroundColor(PX_Object *pObject,px_color Color) +{ + PX_Object_VirtualKeyBoard *pkb=PX_Object_GetVirtualKeyBoard(pObject); + if (pkb) + { + pkb->backgroundColor=Color; + } +} + +px_void PX_Object_VirtualKeyBoardSetBorderColor(PX_Object *pObject,px_color Color) +{ + PX_Object_VirtualKeyBoard *pkb=PX_Object_GetVirtualKeyBoard(pObject); + if (pkb) + { + pkb->borderColor=Color; + } +} + +px_void PX_Object_VirtualKeyBoardCursorColor(PX_Object *pObject,px_color Color) +{ + PX_Object_VirtualKeyBoard *pkb=PX_Object_GetVirtualKeyBoard(pObject); + if (pkb) + { + pkb->cursorColor=Color; + } +} + +px_void PX_Object_VirtualKeyBoardPushColor(PX_Object *pObject,px_color Color) +{ + PX_Object_VirtualKeyBoard *pkb=PX_Object_GetVirtualKeyBoard(pObject); + if (pkb) + { + pkb->pushColor=Color; + } +} + +px_char PX_Object_VirtualKeyBoardGetCode(PX_Object *pObject) +{ + PX_Object_VirtualKeyBoard *pkb=PX_Object_GetVirtualKeyBoard(pObject); + if (pkb) + { + px_char ch= pkb->functionCode; + pkb->functionCode=0; + return ch; + } + return 0; +} + + +////////////////////////////////////////////////////////////////////////// +// +static px_int PX_Object_CoordinatesDichotomy(px_double *p,px_int Size,px_double Mark) +{ + px_int Minx,Maxx; + px_int Index; + if (Mark<=p[0]) + { + return 0; + } + if (Mark>=p[Size-1]) + { + return Size-1; + } + + Minx=0; + Maxx=Size-1; + + + + while (Maxx-Minx>1) + { + Index=(Maxx+Minx)/2; + if (p[Index]>=Mark) + { + Maxx=Index; + } + else + { + Minx=Index; + } + } + + if (Index==Size-1) + { + return Minx; + } + + + if (Mark-p[Index]Type==PX_OBJECT_TYPE_COORDINATE) + { + return (PX_Object_Coordinates *)pObject->pObject; + } + return PX_NULL; +} + +px_void PX_Object_CoordinatesSetMinVerticalPixelDividing(PX_Object *pObj,px_int val) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObj); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->MinVerticalPixelDividing=val; +} + +px_void PX_Object_CoordinatesSetMinHorizontalPixelDividing(PX_Object *pObj,px_int val) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObj); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->MinHorizontalPixelDividing=val; +} + +px_void PX_Object_CoordinatesSetHorizontalDividing(PX_Object *pObj,px_int Count) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObj); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->HorizontalDividing=Count; +} + +px_void PX_Object_CoordinatesSetLeftVerticalDividing(PX_Object *pObj,px_int Count) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObj); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->LeftVerticalDividing=Count; +} + +px_void PX_Object_CoordinatesSetRightVerticalDividing(PX_Object *pObj,px_int Count) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObj); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->RightVerticalDividing=Count; +} + + + +px_void PX_Object_CoordinatesSetStyle(PX_Object *pObj,PX_OBJECT_COORDINATES_LINEMODE mode) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObj); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->LineMode=mode; +} + + + +px_void PX_Object_CoordinatesSetScaleEnabled(PX_Object *pObject,px_bool Enabled) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->ScaleEnabled=Enabled; +} + +px_void PX_Object_CoordinatesSetGuidesVisible(PX_Object *pObject,px_bool Visible) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->ShowGuides=Visible; +} + +px_void PX_Object_CoordinatesSetGuidesShowMode(PX_Object *pObject,PX_OBJECT_COORDINATES_GUIDESSHOWMODE mode) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->guidesShowMode=mode; +} + + +px_void PX_Object_CoordinatesShowHelpLine(PX_Object *pObject,px_bool show) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->ShowHelpLine=show; +} + +px_void PX_Object_CoordinatesSetDataLineWidth(PX_Object *pObject,px_float linewidth) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->DataLineWidth=linewidth; +} + +void PX_Object_CoordinatesSetDataShow(PX_Object *pObject,px_int index,px_bool show) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + PX_Object_CoordinateData *pData; + if (!pcd) + { + PX_ASSERT(); + return; + } + if (index>=pcd->vData.size) + { + return; + } + pData=PX_VECTORAT(PX_Object_CoordinateData,&pcd->vData,index); + pData->Visibled=show; +} + +px_void PX_Object_CoordinatesSetGuidesLineWidth(PX_Object *pObject,px_float linewidth) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->GuidesLineWidth=linewidth; +} + +px_void PX_Object_CoordinatesSetTitleFontSize(PX_Object *pObject,px_int size) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->FontSize=size; +} + +px_void PX_Object_CoordinatesSetTitleFontColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->FontColor=clr; +} + +px_void PX_Object_CoordinatesSetDashLineColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->DashColor=clr; +} + +px_void PX_Object_CoordinatesSetTitleLeftShow(PX_Object *pObject,px_bool bshow) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->LeftTitleShow=bshow; +} + +px_void PX_Object_CoordinatesSetTitleRightShow(PX_Object *pObject,px_bool bshow) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->RightTitleShow=bshow; +} + +px_void PX_Object_CoordinatesSetHorizontalShow(PX_Object *pObject,px_bool bshow) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->HorizontalShow=bshow; +} + +px_void PX_Object_CoordinatesSetFloatFlagFormatHorizontal(PX_Object *pObject,const char *fmt) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->FloatFlagFormat_H=fmt; +} + +px_void PX_Object_CoordinatesSetIntFlagFormatHorizontal(PX_Object *pObject,const char *fmt) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->IntFlagFormat_H=fmt; +} + +px_void PX_Object_CoordinatesSetFloatFlagFormatVerticalLeft(PX_Object *pObject,const char *fmt) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->FloatFlagFormat_L=fmt; +} + +px_void PX_Object_CoordinatesSetIntFlagFormatVerticalLeft(PX_Object *pObject,const char *fmt) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->IntFlagFormat_L=fmt; +} + +px_void PX_Object_CoordinatesSetFloatFlagFormatVerticalRight(PX_Object *pObject,const char *fmt) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->FloatFlagFormat_R=fmt; +} + +px_void PX_Object_CoordinatesSetIntFlagFormatVericalRight(PX_Object *pObject,const char *fmt) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->IntFlagFormat_R=fmt; +} + +px_void PX_Object_CoordinatesSetHorizontalMin(PX_Object *pObject,px_double Min) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->HorizontalRangeMin=Min; +} + +px_void PX_Object_CoordinatesSetHorizontalMax(PX_Object *pObject,px_double Max) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->HorizontalRangeMax=Max; +} + +px_void PX_Object_CoordinatesSetLeftVerticalMin(PX_Object *pObject,px_double Min) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->LeftVerticalRangeMin=Min; +} + +px_void PX_Object_CoordinatesSetLeftVerticalMax(PX_Object *pObject,px_double Max) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->LeftVerticalRangeMax=Max; +} + +px_void PX_Object_CoordinatesSetRightVerticalMax(PX_Object *pObject,px_double Max) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->RightVerticalRangeMax=Max; +} + +px_void PX_Object_CoordinatesSetRightVerticalMin(PX_Object *pObject,px_double Min) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + pcd->RightVerticalRangeMin=Min; +} + +px_void PX_Object_CoordinatesSetBorderColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (pcd) + { + pcd->borderColor=clr; + } +} + +PX_Object_CoordinateData * PX_Object_CoordinatesGetCoordinateData(PX_Object *pObject,px_int index) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (index>pcd->vData.size-1) + { + return PX_NULL; + } + return PX_VECTORAT(PX_Object_CoordinateData,&pcd->vData,index); +} + +px_int PX_Object_CoordinatesGetCoordinateWidth(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + return (px_int)(pObject->Width-pcd->LeftSpacer-pcd->RightSpacer); +} + +px_int PX_Object_CoordinatesGetCoordinateHeight(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + return (px_int)(pObject->Height-pcd->TopSpacer-pcd->BottomSpacer); +} + +void PX_Object_CoordinatesSetTitleTop(PX_Object *pObject,const px_char * title) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (pcd) + { + pcd->TopTitle=title; + } +} + +void PX_Object_CoordinatesSetTitleBottom(PX_Object *pObject,const px_char * title) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (pcd) + { + pcd->BottomTitle=title; + } +} + +void PX_Object_CoordinatesSetMarkValueEnabled(PX_Object *pObject,px_bool Enabled) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + pcd->MarkValueEnabled=Enabled; +} + +void PX_Object_CoordinatesSetFontColor(PX_Object *pObject,px_color clr) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (pcd) + { + pcd->FontColor=clr; + } +} + +void PX_Object_CoordinatesClearContext(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + PX_Object_CoordinatesRestoreCoordinates(pObject); + PX_VectorClear(&pcd->vData); +} + +void PX_Object_CoordinatesClearFlagLine(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + PX_VectorClear(&pcd->vFlagLine); +} + +void PX_Object_CoordinatesAddData(PX_Object *pObject,PX_Object_CoordinateData data) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + PX_VectorPushback(&pcd->vData,&data); +} + +void PX_Object_CoordinatesAddCoordinateFlagLine(PX_Object *pObject,PX_Object_CoordinateFlagLine Line) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + PX_VectorPushback(&pcd->vFlagLine,&Line); +} + + +px_void PX_Object_CoordinatesSetMargin(PX_Object_Coordinates *pcd,px_int Left,px_int Right,px_int Top,px_int Bottom) +{ + pcd->LeftSpacer=Left; + pcd->RightSpacer=Right; + pcd->TopSpacer=Top; + pcd->BottomSpacer=Bottom; +} + +px_int PX_Object_CoordinatesMapHorizontalValueToPixel(PX_Object *pObject,px_double val) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_double scale=PX_Object_CoordinatesGetCoordinateWidth(pObject)/(pcd->HorizontalRangeMax-pcd->HorizontalRangeMin); + return (px_int)((val-pcd->HorizontalRangeMin)*scale)+pcd->LeftSpacer; +} + +px_int PX_Object_CoordinatesMapVerticalValueToPixel(PX_Object *pObject,px_double val,px_int Map) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_double scale; + + if(Map==PX_OBJECT_COORDINATEDATA_MAP_LEFT) + { + scale=PX_Object_CoordinatesGetCoordinateHeight(pObject)/(pcd->LeftVerticalRangeMax-pcd->LeftVerticalRangeMin); + return (px_int)(pObject->Height-pcd->BottomSpacer-(px_int)((val-pcd->LeftVerticalRangeMin)*scale)); + } + else if(Map==PX_OBJECT_COORDINATEDATA_MAP_RIGHT) + { + scale=PX_Object_CoordinatesGetCoordinateHeight(pObject)/(pcd->RightVerticalRangeMax-pcd->RightVerticalRangeMin); + return (px_int)(pObject->Height-pcd->BottomSpacer-(px_int)((val-pcd->RightVerticalRangeMin)*scale)); + } + + return 0; + +} + +px_double PX_Object_CoordinatesMapPixelValueToHorizontal(PX_Object *pObject,px_int Pixel) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_int XDisten=Pixel-pcd->LeftSpacer; + return pcd->HorizontalRangeMin+XDisten*(pcd->HorizontalRangeMax-pcd->HorizontalRangeMin)/PX_Object_CoordinatesGetCoordinateWidth(pObject); + +} + +px_double PX_Object_CoordinatesMapPixelValueToVertical(PX_Object *pObject,px_int Pixel,px_int Map) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_double Min,Max; + if (Map==PX_OBJECT_COORDINATEDATA_MAP_LEFT) + { + Max=pcd->LeftVerticalRangeMax; + Min=pcd->LeftVerticalRangeMin; + return pcd->LeftVerticalRangeMin+(pObject->Height-pcd->BottomSpacer-Pixel)*(Max-Min)/PX_Object_CoordinatesGetCoordinateHeight(pObject); + } + + if (Map==PX_OBJECT_COORDINATEDATA_MAP_RIGHT) + { + Max=pcd->RightVerticalRangeMax; + Min=pcd->RightVerticalRangeMin; + return pcd->RightVerticalRangeMin+(pObject->Height-pcd->BottomSpacer-Pixel)*(Max-Min)/PX_Object_CoordinatesGetCoordinateHeight(pObject); + } + + if (Map==PX_OBJECT_COORDINATEDATA_MAP_HORIZONTAL) + { + Max=pcd->HorizontalRangeMax; + Min=pcd->HorizontalRangeMin; + return pcd->HorizontalRangeMin+(Pixel-pcd->LeftSpacer)*(Max-Min)/PX_Object_CoordinatesGetCoordinateWidth(pObject); + } + return 0; +} + + +px_void PX_Object_CoordinatesUpdate(PX_Object *pObject,px_uint elpased) +{ + +} + + +static px_void PX_Object_CoordinatesDrawFrameLine(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_int offsetx=(px_int)pObject->x; + px_int offsety=(px_int)pObject->y; + + PX_GeoDrawLine(psurface,offsetx+pcd->LeftSpacer,offsety+pcd->TopSpacer,offsetx+(px_int)(pObject->Width-pcd->RightSpacer),offsety+pcd->TopSpacer,PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH,pcd->borderColor); + PX_GeoDrawLine(psurface,offsetx+pcd->LeftSpacer,offsety+pcd->TopSpacer,offsetx+pcd->LeftSpacer,offsety+(px_int)(pObject->Height-pcd->BottomSpacer),PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH,pcd->borderColor); + PX_GeoDrawLine(psurface,(px_int)(offsetx+pObject->Width-pcd->RightSpacer),offsety+(px_int)(pObject->Height-pcd->BottomSpacer),offsetx+(pcd->LeftSpacer),offsety+(px_int)pObject->Height-pcd->BottomSpacer,PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH,pcd->borderColor); + PX_GeoDrawLine(psurface,(px_int)(offsetx+pObject->Width-pcd->RightSpacer),offsety+(px_int)(pObject->Height-pcd->BottomSpacer),offsetx+(px_int)(pObject->Width-pcd->RightSpacer),offsety+pcd->TopSpacer,PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH,pcd->borderColor); +} + +static px_void PX_Object_CoordinatesDrawDashed(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_double HorizontalInc=0; + px_int i; + px_double VerticalInc=0; + px_int offsetx=(px_int)pObject->x; + px_int offsety=(px_int)pObject->y; + + px_int Divid=PX_Object_CoordinatesGetCoordinateWidth(pObject)/pcd->MinHorizontalPixelDividing; + + + if (Divid>pcd->HorizontalDividing) + { + Divid=pcd->HorizontalDividing; + } + + + if(Divid>1) + { + HorizontalInc=(px_double)PX_Object_CoordinatesGetCoordinateWidth(pObject)/Divid; + if(pcd->guidesShowMode==PX_OBJECT_COORDINATES_GUIDESSHOWMODE_ALL||pcd->guidesShowMode==PX_OBJECT_COORDINATES_GUIDESSHOWMODE_HORIZONTAL) + { + for (i=1;i<=Divid;i++) + { + PX_GeoDrawLine(psurface,\ + offsetx+(px_int)(pcd->LeftSpacer+i*HorizontalInc),offsety+pcd->TopSpacer,\ + offsetx+(px_int)(pcd->LeftSpacer+i*HorizontalInc),offsety+pcd->TopSpacer+PX_Object_CoordinatesGetCoordinateHeight(pObject),\ + 1,\ + pcd->DashColor + ); + } + } + } + + + + Divid=PX_Object_CoordinatesGetCoordinateHeight(pObject)/pcd->MinVerticalPixelDividing; + if (pcd->LeftVerticalDividing>=pcd->RightVerticalDividing) + { + if (Divid>pcd->LeftVerticalDividing) + { + Divid=pcd->LeftVerticalDividing; + } + } + else + { + if (Divid>pcd->RightVerticalDividing) + { + Divid=pcd->RightVerticalDividing; + } + } + + if(Divid>1) + { + VerticalInc=(px_double)PX_Object_CoordinatesGetCoordinateHeight(pObject)/Divid; + if(pcd->guidesShowMode==PX_OBJECT_COORDINATES_GUIDESSHOWMODE_ALL||pcd->guidesShowMode==PX_OBJECT_COORDINATES_GUIDESSHOWMODE_VERTICAL) + { + for (i=1;i<=Divid;i++) + { + PX_GeoDrawLine(psurface,\ + offsetx+(px_int)pcd->LeftSpacer,\ + offsety+(px_int)(pObject->Height-pcd->BottomSpacer-i*VerticalInc),\ + offsetx+(px_int)(pcd->LeftSpacer+PX_Object_CoordinatesGetCoordinateWidth(pObject)),\ + offsety+(px_int)(pObject->Height-pcd->BottomSpacer-i*VerticalInc),\ + 1,\ + PX_COLOR(PX_OBJECT_COORDINATES_DEFAULT_DASH_RGB)\ + ); + } + } + } +} + +static px_void PX_Object_CoordinatesDrawFlagText(px_surface *psurface,PX_Object *pObject) +{ + + px_double HorizontalInc=0; + px_double VerticalInc=0; + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_double ValInc; + px_int IsFloat; + px_int i; + px_int offsetx=(px_int)pObject->x; + px_int offsety=(px_int)pObject->y; + + px_int Divid=PX_Object_CoordinatesGetCoordinateWidth(pObject)/pcd->MinHorizontalPixelDividing; + + + if (Divid>pcd->HorizontalDividing) + { + Divid=pcd->HorizontalDividing; + } + + + + if(Divid>0){ + HorizontalInc=(px_double)PX_Object_CoordinatesGetCoordinateWidth(pObject)/Divid; + ValInc=(pcd->HorizontalRangeMax-pcd->HorizontalRangeMin)/Divid; + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + //paint for horizontal coordinates text + for (i=0;i<=Divid;i++) + { + px_char text[32]={0}; + + if(IsFloat) + PX_sprintf1(text,sizeof(text),pcd->FloatFlagFormat_H,PX_STRINGFORMAT_FLOAT((px_float)(pcd->HorizontalRangeMin+i*ValInc))); + else + PX_sprintf1(text,sizeof(text),pcd->IntFlagFormat_H,PX_STRINGFORMAT_INT((px_int)(pcd->HorizontalRangeMin+i*ValInc))); + + PX_FontDrawText(psurface,offsetx+(px_int)(pcd->LeftSpacer+(i)*HorizontalInc),offsety+(px_int)(pObject->Height-pcd->BottomSpacer+PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER+2),text,pcd->FontColor,PX_FONT_ALIGN_XCENTER); + } + } + + Divid=PX_Object_CoordinatesGetCoordinateHeight(pObject)/pcd->MinVerticalPixelDividing; + if (pcd->LeftVerticalDividing>=pcd->RightVerticalDividing) + { + if (Divid>pcd->LeftVerticalDividing) + { + Divid=pcd->LeftVerticalDividing; + } + } + else + { + if (Divid>pcd->RightVerticalDividing) + { + Divid=pcd->RightVerticalDividing; + } + } + + if(Divid>0) + { + VerticalInc=(px_double)PX_Object_CoordinatesGetCoordinateHeight(pObject)/Divid; + + + //paint for Left vertical coordinates text + if(pcd->LeftTitleShow) + { + ValInc=(pcd->LeftVerticalRangeMax-pcd->LeftVerticalRangeMin)/Divid; + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + + for (i=0;i<=Divid;i++) + { + px_char text[32]={0}; + if(IsFloat) + PX_sprintf1(text,sizeof(text),pcd->FloatFlagFormat_L,PX_STRINGFORMAT_FLOAT((px_float)(pcd->LeftVerticalRangeMin+i*ValInc))); + else + PX_sprintf1(text,sizeof(text),pcd->IntFlagFormat_L,PX_STRINGFORMAT_INT((px_int)(pcd->LeftVerticalRangeMin+i*ValInc))); + + PX_FontDrawText(psurface,offsetx+pcd->LeftSpacer-6,offsety+(px_int)(pObject->Height-pcd->BottomSpacer-(i)*VerticalInc-6),text,pcd->FontColor,PX_FONT_ALIGN_XRIGHT); + } + } + //paint for Right vertical coordinates text + if(pcd->RightTitleShow) + { + ValInc=(pcd->RightVerticalRangeMax-pcd->RightVerticalRangeMin)/Divid; + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + + for (i=0;i<=Divid;i++) + { + + px_char text[32]={0}; + if(IsFloat) + PX_sprintf1(text,sizeof(text),pcd->FloatFlagFormat_L,PX_STRINGFORMAT_FLOAT((px_float)(pcd->LeftVerticalRangeMin+i*ValInc))); + else + PX_sprintf1(text,sizeof(text),pcd->IntFlagFormat_L,PX_STRINGFORMAT_INT((px_int)(pcd->LeftVerticalRangeMin+i*ValInc))); + + PX_FontDrawText(psurface,offsetx+(px_int)(pObject->Width-pcd->RightSpacer+PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER),offsety+(px_int)(pObject->Height-pcd->BottomSpacer-(i)*VerticalInc-6),text,pcd->FontColor,PX_FONT_ALIGN_XLEFT); + } + } + } +} + +static px_void PX_Object_CoordinatesDrawTitle(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_int offsetx=(px_int)pObject->x; + px_int offsety=(px_int)pObject->y; + if (pcd->TopTitle[0]) + { + PX_FontDrawText(psurface,offsetx+(px_int)(pObject->Width/2),offsety,pcd->TopTitle,pcd->FontColor,PX_FONT_ALIGN_XCENTER); + } + + if (pcd->BottomTitle[0]) + { + PX_FontDrawText(psurface,offsetx+(px_int)(pObject->Width/2),offsety+(px_int)(pObject->Height-pcd->BottomSpacer+32),pcd->BottomTitle,pcd->FontColor,PX_FONT_ALIGN_XCENTER); + } + + +// px_int x = this->width()-20; +// +// px_int y = ( this->height()/ 2); +// painter.rotate(90); +// painter.drawText(y-30, -x+12,m_RightTitle ); +// +// painter.rotate(180); +// painter.drawText(-y-70, 45,m_LeftTitle); +} + +static px_void PX_Object_CoordinatesDrawDataInfo(px_surface *psurface,PX_Object *pObject,px_double *Horizontal,px_double *Vertical,px_int linewidth,px_int Size,px_int Map,px_color Color) +{ + px_double RangeMin,RangeMax; + px_double x,y,w,btm,zeroy; + px_int dx1,dy1,dx2,dy2; + px_int i; + px_int offsetx=(px_int)pObject->x; + px_int offsety=(px_int)pObject->y; + + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + if (Map==PX_OBJECT_COORDINATEDATA_MAP_LEFT) + { + RangeMin=pcd->LeftVerticalRangeMin; + RangeMax=pcd->LeftVerticalRangeMax; + } + + if (Map==PX_OBJECT_COORDINATEDATA_MAP_RIGHT) + { + RangeMin=pcd->RightVerticalRangeMin; + RangeMax=pcd->RightVerticalRangeMax; + } + + switch(pcd->LineMode) + { + case PX_OBJECT_COORDINATES_LINEMODE_PILLAR: + { + zeroy=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,0,Map); + for (i=0;i=pcd->HorizontalRangeMin) + { + + x=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,Horizontal[i-1])-pcd->DataPillarWidth/2; + y=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,Vertical[i],Map); + + w=pcd->DataPillarWidth; + btm=zeroy; + + if (y>btm) + { + double tem; + tem=btm; + btm=y; + y=tem; + } + + if (!(btmTopSpacer||y>pObject->Height-pcd->BottomSpacer)) + { + if (yTopSpacer) + { + y=pcd->TopSpacer; + } + if (btm>pObject->Height-pcd->BottomSpacer) + { + btm=pObject->Height-pcd->BottomSpacer; + } + if (x-(px_int)x>0.1) + { + PX_GeoDrawRect(psurface,offsetx+(px_int)x,offsety+(px_int)y,offsetx+(px_int)(x+w),offsety+(px_int)(btm),Color); + } + else + { + PX_GeoDrawRect(psurface,offsetx+(px_int)x,offsety+(px_int)y,offsetx+(px_int)(x+w),offsety+(px_int)(btm),Color); + } + } + + + + } + if(Horizontal[i]>pcd->HorizontalRangeMax) + break; + } + } + break; + case PX_OBJECT_COORDINATES_LINEMODE_LINES: + default: + { + for (i=0;i=pcd->HorizontalRangeMin) + { + + if(i>0){ + px_point pt1,pt2; + + dx1=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,Horizontal[i-1]); + dy1=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,Vertical[i-1],Map); + dx2=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,Horizontal[i]); + dy2=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,Vertical[i],Map); + + if(PX_isLineCrossRect(PX_POINT((px_float)dx1,(px_float)dy1,0),PX_POINT((px_float)dx2,(px_float)dy2,0),PX_RECT((px_float)pcd->LeftSpacer,(px_float)pcd->TopSpacer,(px_float)PX_Object_CoordinatesGetCoordinateWidth(pObject),(px_float)PX_Object_CoordinatesGetCoordinateHeight(pObject)),&pt1,&pt2)) + { + PX_GeoDrawLine(psurface,(px_int)(offsetx+pt1.x),(px_int)(offsety+pt1.y),(px_int)(offsetx+pt2.x),(px_int)(offsety+pt2.y),linewidth,Color); + } + + } + } + if(Horizontal[i]>pcd->HorizontalRangeMax) + { + if(i>0){ + px_point pt1,pt2; + + dx1=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,Horizontal[i-1]); + dy1=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,Vertical[i-1],Map); + dx2=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,Horizontal[i]); + dy2=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,Vertical[i],Map); + if(PX_isLineCrossRect(PX_POINT((px_float)dx1,(px_float)dy1,0),PX_POINT((px_float)dx2,(px_float)dy2,0),PX_RECT((px_float)pcd->TopSpacer,(px_float)pcd->LeftSpacer,(px_float)PX_Object_CoordinatesGetCoordinateWidth(pObject),(px_float)PX_Object_CoordinatesGetCoordinateHeight(pObject)),&pt1,&pt2)) + PX_GeoDrawLine(psurface,(px_int)(offsetx+pt1.x),(px_int)(offsety+pt1.y),(px_int)(offsetx+pt2.x),(px_int)(offsety+pt2.y),linewidth,Color); + } + break; + } + } + } + break; + + } +} + + +static px_void PX_Object_CoordinatesDrawData(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_int i; + if(pcd->bDataUpdatePainter) + { + for ( i=0;ivData.size;i++) + { + PX_Object_CoordinateData *pData=PX_VECTORAT(PX_Object_CoordinateData,&pcd->vData,i); + if(pData->Visibled) + PX_Object_CoordinatesDrawDataInfo(psurface,pObject,pData->MapHorizontalArray,pData->MapVerticalArray,pData->linewidth,pData->Size,pData->Map,pData->Color); + + } + } +} +static px_void PX_Object_CoordinatesDrawScaleDraging(px_surface *psurface,PX_Object *pObject) +{ + px_int offsetx=(px_int)pObject->x; + px_int offsety=(px_int)pObject->y; + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + if (!pcd->bScaleDrag) + { + return; + } + + if(pcd->DragingPoint.yDragStartPoint.y&&pcd->DragingPoint.xDragStartPoint.x) + PX_GeoDrawRect(psurface,offsetx+(px_int)pcd->DragStartPoint.x,offsety+(px_int)pcd->DragStartPoint.y,offsetx+(px_int)pcd->DragingPoint.x,offsety+(px_int)pcd->DragingPoint.y,PX_COLOR(96,171,81,128)); + else + PX_GeoDrawRect(psurface,offsetx+(px_int)pcd->DragStartPoint.x,offsety+(px_int)pcd->DragStartPoint.y,offsetx+(px_int)pcd->DragingPoint.x,offsety+(px_int)pcd->DragingPoint.y,PX_COLOR(96,167,233,128)); + +} + +static px_void PX_Object_CoordinatesDrawHelpLine(px_surface *psurface,PX_Object *pObject) +{ + px_int x,y; + px_double value; + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + if (!pcd->ShowHelpLine) + { + return; + } + //Draw X line + + if(pcd->HorizontalShow) + { + value=PX_Object_CoordinatesMapPixelValueToVertical(pObject,pcd->helpLineX,PX_OBJECT_COORDINATEDATA_MAP_HORIZONTAL); + + if (value>pcd->HorizontalRangeMin&&valueHorizontalRangeMax) + { + px_int IsFloat; + px_int X,Y; + px_double ValInc=value; + px_char text[16]; + x=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,value); + + PX_GeoDrawLine(psurface,(px_int)pObject->x+x,(px_int)(pObject->y+pObject->Height-pcd->BottomSpacer),(px_int)pObject->x+x,(px_int)pObject->y+pcd->TopSpacer,(px_int)1,pcd->helpLineColor); + //Draw text + + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + + X=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,value); + Y=(px_int)(pObject->Height-pcd->BottomSpacer); + + if(IsFloat) + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_FLOAT((px_float)ValInc)); + else + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_INT((px_int)ValInc)); + + PX_FontDrawText(psurface,(px_int)(pObject->x+X-PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER*1.5),(px_int)pObject->y+Y,text,pcd->helpLineColor,PX_FONT_ALIGN_XLEFT); + } + } + + + //Draw YL line + + if(pcd->LeftTitleShow) + { + value=PX_Object_CoordinatesMapPixelValueToVertical(pObject,pcd->helpLineY,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + + if (value>pcd->LeftVerticalRangeMin&&valueLeftVerticalRangeMax) + { + px_int IsFloat; + px_int X,Y; + px_double ValInc=value; + px_char text[16]; + + y=pcd->helpLineY;//PX_Object_CoordinatesMapVerticalValueToPixel(pObject,value,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + + PX_GeoDrawLine(psurface,(px_int)pObject->x+pcd->LeftSpacer,(px_int)pObject->y+y,(px_int)(pObject->x+pObject->Width-pcd->RightSpacer),(px_int)pObject->y+y,1,pcd->helpLineColor); + //Draw text + + if (PX_ABS(ValInc-(px_int)ValInc)<0.000000001) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + + X=pcd->LeftSpacer; + Y=y;//PX_Object_CoordinatesMapVerticalValueToPixel(pObject,ValInc,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + + if(IsFloat) + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_FLOAT((px_float)ValInc)); + else + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_INT((px_int)ValInc)); + + PX_FontDrawText(psurface,(px_int)pObject->x+X,(px_int)pObject->y+Y-PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER*2-1,text,pcd->helpLineColor,PX_FONT_ALIGN_XLEFT); + } + } + + + //Draw YR line + if(pcd->RightTitleShow) + { + value=PX_Object_CoordinatesMapPixelValueToVertical(pObject,pcd->helpLineY,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + + if (value>pcd->RightVerticalRangeMin&&valueRightVerticalRangeMax) + { + px_int IsFloat; + px_int X,Y; + px_double ValInc=value; + px_char text[16]; + + y=pcd->helpLineY;//PX_Object_CoordinatesMapVerticalValueToPixel(pObject,pflgl->Y,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + PX_GeoDrawLine(psurface,(px_int)pObject->x+pcd->LeftSpacer,(px_int)pObject->y+y,(px_int)(pObject->x+pObject->Width-pcd->RightSpacer),(px_int)pObject->y+y,(px_int)(1),pcd->helpLineColor); + + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + X=(px_int)(pObject->Width-pcd->RightSpacer); + Y=y;//PX_Object_CoordinatesMapVerticalValueToPixel(pObject,ValInc,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + + PX_FontDrawText(psurface,(px_int)pObject->x+X,(px_int)pObject->y+Y-PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER*2-1,text,pcd->helpLineColor,PX_FONT_ALIGN_XLEFT); + } + } +} + + + +static px_void PX_Object_CoordinatesDrawFlagLine(px_surface *psurface,PX_Object *pObject) +{ + px_int x,y,i; + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + for (i=0;ivFlagLine.size;i++) + { + //Draw X line + PX_Object_CoordinateFlagLine *pflgl=PX_VECTORAT(PX_Object_CoordinateFlagLine,&pcd->vFlagLine,i); + if(pflgl->XYshow&PX_OBJECT_COORDINATEFLAGLINE_XSHOW) + { + if (pflgl->X>=pcd->HorizontalRangeMin&&pflgl->X<=pcd->HorizontalRangeMax) + { + px_int IsFloat; + px_int X,Y; + px_double ValInc=pflgl->X; + px_char text[16]; + x=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,pflgl->X); + + PX_GeoDrawLine(psurface,(px_int)pObject->x+x,(px_int)((px_int)pObject->y+pObject->Height-pcd->BottomSpacer),(px_int)pObject->x+x,(px_int)pObject->y+pcd->TopSpacer,(px_int)pflgl->LineWidth,pflgl->color); + //Draw text + + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + + X=PX_Object_CoordinatesMapHorizontalValueToPixel(pObject,pflgl->X); + Y=(px_int)(pObject->Height-pcd->BottomSpacer); + + if(IsFloat) + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_FLOAT((px_float)ValInc)); + else + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_INT((px_int)ValInc)); + + PX_FontDrawText(psurface,(px_int)((px_int)pObject->x+X-PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER*1.5),(px_int)pObject->y+Y,text,pcd->FontColor,PX_FONT_ALIGN_XLEFT); + } + } + + + //Draw YL line + + if(pflgl->XYshow&PX_OBJECT_COORDINATEFLAGLINE_XSHOW) + { + if (pflgl->Y>=pcd->LeftVerticalRangeMin&&pflgl->Y<=pcd->LeftVerticalRangeMax) + { + px_int IsFloat; + px_int X,Y; + px_double ValInc=pflgl->Y; + px_char text[16]; + y=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,pflgl->Y,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + + PX_GeoDrawLine(psurface,(px_int)pObject->x+pcd->LeftSpacer,(px_int)pObject->y+y,(px_int)((px_int)pObject->x+pObject->Width-pcd->RightSpacer),(px_int)pObject->y+y,(px_int)(pflgl->LineWidth),pflgl->color); + //Draw text + + if (PX_ABS(ValInc-(px_int)ValInc)<0.000000001) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + + X=pcd->LeftSpacer; + Y=y;//PX_Object_CoordinatesMapVerticalValueToPixel(pObject,ValInc,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + + if(IsFloat) + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_FLOAT((px_float)ValInc)); + else + PX_sprintf1(text,sizeof(text),"%1",PX_STRINGFORMAT_INT((px_int)ValInc)); + + PX_FontDrawText(psurface,(px_int)pObject->x+X-4*PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER,(px_int)pObject->y+Y-PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER,text,pcd->FontColor,PX_FONT_ALIGN_XLEFT); + } + } + + + //Draw YR line + if(pflgl->XYshow&PX_OBJECT_COORDINATEFLAGLINE_YRSHOW) + { + if (pflgl->Y>=pcd->RightVerticalRangeMin&&pflgl->Y<=pcd->RightVerticalRangeMax) + { + px_int IsFloat; + px_int X,Y; + px_double ValInc=pflgl->Y; + px_char text[16]; + + y=PX_Object_CoordinatesMapVerticalValueToPixel(pObject,pflgl->Y,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + PX_GeoDrawLine(psurface,(px_int)pObject->x+pcd->LeftSpacer,(px_int)pObject->y+y,(px_int)((px_int)pObject->x+pObject->Width-pcd->RightSpacer),(px_int)pObject->y+y,(px_int)(pflgl->LineWidth),pflgl->color); + + if (PX_ABS(ValInc-(px_int)ValInc)<0.000001f) + { + IsFloat=PX_FALSE; + } + else + { + IsFloat=PX_TRUE; + } + + X=(px_int)(pObject->Width-pcd->RightSpacer); + Y=y;//PX_Object_CoordinatesMapVerticalValueToPixel(pObject,ValInc,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + + PX_FontDrawText(psurface,(px_int)pObject->x+X,(px_int)pObject->y+Y-PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER,text,pcd->FontColor,PX_FONT_ALIGN_XLEFT); + } + } + } +} + + +px_void PX_Object_CoordinatesDrawMarkLine(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + if (pcd->MarkValueEnabled&&pcd->OnMarkStatus) + { + if(pcd->MarkLineX!=-1) + { + PX_GeoDrawLine(psurface,pcd->MarkLineX,pcd->TopSpacer,pcd->MarkLineX,(px_int)(pObject->Height-pcd->BottomSpacer),1,PX_COLOR(255,255,0,0)); + } + } +} + + + +px_void PX_Object_CoordinatesRestoreCoordinates(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd->bScaling) + { + return; + } + PX_Object_CoordinatesSetHorizontalMin(pObject,pcd->ResHorizontalRangeMin); + PX_Object_CoordinatesSetHorizontalMax(pObject,pcd->ResHorizontalRangeMax); + PX_Object_CoordinatesSetLeftVerticalMin(pObject,pcd->ResLeftVerticalRangeMin); + PX_Object_CoordinatesSetLeftVerticalMax(pObject,pcd->ResLeftVerticalRangeMax); + PX_Object_CoordinatesSetRightVerticalMin(pObject,pcd->ResRightVerticalRangeMin); + PX_Object_CoordinatesSetRightVerticalMax(pObject,pcd->ResRightVerticalRangeMax); + pcd->bScaling=PX_FALSE; +} +px_void PX_Object_CoordinatesScaleCoordinates(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + px_double Min,Max; + px_double dMin; + px_double dMax; + if(!pcd->ScaleEnabled) + { + return; + } + + if (pcd->DragingPoint.x==pcd->DragStartPoint.x) + { + return; + } + if (pcd->DragingPoint.y==pcd->DragStartPoint.y) + { + return; + } + if (!pcd->bScaling) + { + pcd->ResHorizontalRangeMax=pcd->HorizontalRangeMax; + pcd->ResHorizontalRangeMin=pcd->HorizontalRangeMin; + + pcd->ResLeftVerticalRangeMax=pcd->LeftVerticalRangeMax; + pcd->ResLeftVerticalRangeMin=pcd->LeftVerticalRangeMin; + pcd->ResRightVerticalRangeMin=pcd->RightVerticalRangeMin; + pcd->ResRightVerticalRangeMax=pcd->RightVerticalRangeMax; + + pcd->bScaling=PX_TRUE; + } + + + if (pcd->DragStartPoint.xDragingPoint.x) + { + Min=pcd->DragStartPoint.x; + Max=pcd->DragingPoint.x; + } + else + { + Max=pcd->DragStartPoint.x; + Min=pcd->DragingPoint.x; + } + dMin=PX_Object_CoordinatesMapPixelValueToHorizontal(pObject,(px_int)Min); + dMax=PX_Object_CoordinatesMapPixelValueToHorizontal(pObject,(px_int)Max); + + PX_Object_CoordinatesSetHorizontalMin(pObject,dMin); + PX_Object_CoordinatesSetHorizontalMax(pObject,dMax); + + if (pcd->DragStartPoint.yDragingPoint.y) + { + Max=pcd->DragStartPoint.y; + Min=pcd->DragingPoint.y; + } + else + { + Min=pcd->DragStartPoint.y; + Max=pcd->DragingPoint.y; + } + + dMin=PX_Object_CoordinatesMapPixelValueToVertical(pObject,(px_int)Min,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + dMax=PX_Object_CoordinatesMapPixelValueToVertical(pObject,(px_int)Max,PX_OBJECT_COORDINATEDATA_MAP_LEFT); + PX_Object_CoordinatesSetLeftVerticalMin(pObject,dMin); + PX_Object_CoordinatesSetLeftVerticalMax(pObject,dMax); + + dMin=PX_Object_CoordinatesMapPixelValueToVertical(pObject,(px_int)Min,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + dMax=PX_Object_CoordinatesMapPixelValueToVertical(pObject,(px_int)Max,PX_OBJECT_COORDINATEDATA_MAP_RIGHT); + + PX_Object_CoordinatesSetRightVerticalMin(pObject,dMin); + PX_Object_CoordinatesSetRightVerticalMax(pObject,dMax); +} + + +px_void PX_Object_CoordinatesRender(px_surface *psurface, PX_Object *pObject,px_uint elpased) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + if (!pcd) + { + PX_ASSERT(); + return; + } + +// +// PX_Object_CoordinatesDrawMarkLine(psurface,pObject); + + if(pcd->ShowGuides) + PX_Object_CoordinatesDrawDashed(psurface,pObject); + + if(pcd->HorizontalShow) + PX_Object_CoordinatesDrawFlagText(psurface,pObject); + + PX_Object_CoordinatesDrawTitle(psurface,pObject); + + PX_Object_CoordinatesDrawData(psurface,pObject); + + PX_Object_CoordinatesDrawFrameLine(psurface,pObject); + + if(pcd->ScaleEnabled) + PX_Object_CoordinatesDrawScaleDraging(psurface,pObject); + + PX_Object_CoordinatesDrawHelpLine(psurface,pObject); + + PX_Object_CoordinatesDrawFlagLine(psurface,pObject); +} + +px_void PX_Object_CoordinatesFree(PX_Object *pObject) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + PX_VectorFree(&pcd->vData); + PX_VectorFree(&pcd->vFlagLine); +} + +px_void PX_Object_CoordinatesCursorPressEvent(PX_Object *pObject, PX_Object_Event e,px_void *ptr) +{ + px_int x=(px_int)(e.Param_int[0]-pObject->x); + px_int y=(px_int)(e.Param_int[1]-pObject->y); + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + if(!PX_ObjectIsPointInRegion(pObject,(px_float)e.Param_int[0],(px_float)e.Param_int[1])) + { + return; + } + + if (xLeftSpacer) + { + x=pcd->LeftSpacer; + } + if (x>pObject->Width-pcd->RightSpacer) + { + x=(px_int)(pObject->Width-pcd->RightSpacer); + } + if (yTopSpacer) + { + y=pcd->TopSpacer; + } + if (y>pObject->Height-pcd->BottomSpacer) + { + y=(px_int)(pObject->Height-pcd->BottomSpacer); + } + + pcd->DragStartPoint.x=(px_float)(x); + pcd->DragStartPoint.y=(px_float)(y); + + pcd->DragingPoint=pcd->DragStartPoint; + + pcd->bScaleDrag=PX_TRUE; +} + +px_void PX_Object_CoordinatesCursorReleaseEvent( PX_Object *pObject, PX_Object_Event e,px_void *ptr ) +{ + + px_int x=e.Param_int[0]; + px_int y=e.Param_int[1]; + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + pcd->OnMarkStatus=PX_FALSE; + pcd->MarkLineX=-1; + + if (pcd->bScaleDrag) + { + pcd->bScaleDrag=PX_FALSE; + pcd->DragingPoint.x=(px_float)(e.Param_int[0]-pObject->x); + pcd->DragingPoint.y=(px_float)(e.Param_int[1]-pObject->y); + + if(pcd->DragingPoint.yDragStartPoint.y&&pcd->DragingPoint.xDragStartPoint.x) + { + PX_Object_CoordinatesRestoreCoordinates(pObject); + } + else + { + PX_Object_CoordinatesScaleCoordinates(pObject); + } + } + +} + +px_void PX_Object_CoordinatesCursorDragEvent(PX_Object *pObject, PX_Object_Event e,px_void *ptr ) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + + if (pcd->bScaleDrag) + { + int x=(px_int)(e.Param_int[0]-pObject->x); + int y=(px_int)(e.Param_int[1]-pObject->y); + + pcd->OnMarkStatus=PX_FALSE; + pcd->MarkLineX=-1; + + // emit SignalOnMousePosition(this->MapPixelValueToHorizontal(e->x()), + // e->x(), + // this->MapPixelValueToVertical(e->y(),COORDINATEDATA_MAP_RIGHT)); + if (xLeftSpacer) + { + x=pcd->LeftSpacer; + } + if (x>pObject->Width-pcd->RightSpacer) + { + x=(px_int)(pObject->Width-pcd->RightSpacer); + } + if (yTopSpacer) + { + y=pcd->TopSpacer; + } + if (y>pObject->Height-pcd->BottomSpacer) + { + y=(px_int)(pObject->Height-pcd->BottomSpacer); + } + + pcd->DragingPoint.x=(px_float)(x); + pcd->DragingPoint.y=(px_float)(y); + } + +} + +px_void PX_Object_CoordinatesCursorMoveEvent(PX_Object *pObject, PX_Object_Event e,px_void *ptr ) +{ + PX_Object_Coordinates *pcd=PX_Object_GetCoordinates(pObject); + + if (pcd->ShowHelpLine) + { + int x=(px_int)(e.Param_int[0]-pObject->x); + int y=(px_int)(e.Param_int[1]-pObject->y); + + pcd->OnMarkStatus=PX_FALSE; + pcd->MarkLineX=-1; + + // emit SignalOnMousePosition(this->MapPixelValueToHorizontal(e->x()), + // e->x(), + // this->MapPixelValueToVertical(e->y(),COORDINATEDATA_MAP_RIGHT)); + if (xLeftSpacer) + { + x=pcd->LeftSpacer; + } + if (x>pObject->Width-pcd->RightSpacer) + { + x=(px_int)(pObject->Width-pcd->RightSpacer); + } + if (yTopSpacer) + { + y=pcd->TopSpacer; + } + if (y>pObject->Height-pcd->BottomSpacer) + { + y=(px_int)(pObject->Height-pcd->BottomSpacer); + } + + if (pcd->bScaleDrag) + { + pcd->DragingPoint.x=(px_float)(x); + pcd->DragingPoint.y=(px_float)(y); + } + + pcd->helpLineX=(x); + pcd->helpLineY=(y); + } +} + + + + +PX_Object *PX_Object_CoordinatesCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height) +{ + PX_Object *pObject; + PX_Object_Coordinates Coordinates; + PX_memset(&Coordinates,0,sizeof(Coordinates)); + Coordinates.mp=mp; + Coordinates.MinHorizontalPixelDividing=PX_OBJECT_COORDINATES_DEFAULE_MINHORIZONTALPIXELDIVIDING; + Coordinates.MinVerticalPixelDividing=PX_OBJECT_COORDINATES_DEFAULE_MINVERTICALPIXELDIVIDING; + Coordinates.HorizontalDividing=PX_OBJECT_COORDINATES_DEFAULE_DIVIDING; + Coordinates.LeftVerticalDividing=PX_OBJECT_COORDINATES_DEFAULE_DIVIDING; + Coordinates.RightVerticalDividing=PX_OBJECT_COORDINATES_DEFAULE_DIVIDING; + Coordinates.bScaleDrag=PX_FALSE; + Coordinates.guidesShowMode=PX_OBJECT_COORDINATES_GUIDESSHOWMODE_ALL; + Coordinates.helpLineColor=PX_COLOR(255,255,0,0); + Coordinates.ShowHelpLine=PX_TRUE; + PX_Object_CoordinatesSetMargin(&Coordinates,(px_int)(1.5f*PX_OBJECT_COORDINATES_DEFAULT_SPACER),(px_int)(1.5*PX_OBJECT_COORDINATES_DEFAULT_SPACER),PX_OBJECT_COORDINATES_DEFAULT_SPACER,PX_OBJECT_COORDINATES_DEFAULT_SPACER); + + Coordinates.HorizontalRangeMin=-150; + Coordinates.HorizontalRangeMax=150; + + Coordinates.LeftVerticalRangeMin=0; + Coordinates.LeftVerticalRangeMax=100; + + Coordinates.RightVerticalRangeMax=1.0; + Coordinates.RightVerticalRangeMin=0; + + Coordinates.FloatFlagFormat_H=PX_OBJECT_COORDINATES_DEFAULT_FLOAT_FLAGFORMAT_H; + Coordinates.IntFlagFormat_H=PX_OBJECT_COORDINATES_DEFAULT_INT_FLAGFORMAT_H; + + Coordinates.FloatFlagFormat_L=PX_OBJECT_COORDINATES_DEFAULT_FLOAT_FLAGFORMAT_L; + Coordinates.IntFlagFormat_L=PX_OBJECT_COORDINATES_DEFAULT_INT_FLAGFORMAT_L; + + Coordinates.FloatFlagFormat_R=PX_OBJECT_COORDINATES_DEFAULT_FLOAT_FLAGFORMAT_R; + Coordinates.IntFlagFormat_R=PX_OBJECT_COORDINATES_DEFAULT_INT_FLAGFORMAT_R; + + + Coordinates.bScaling=PX_FALSE; + + Coordinates.FontSize=PX_OBJECT_COORDINATES_DEFAULT_FONT_SIZE; + Coordinates.DataLineWidth=PX_OBJECT_COORDINATES_DEFAULT_LINE_WIDTH; + Coordinates.FontColor=PX_COLOR(255,0,0,0); + Coordinates.borderColor=PX_COLOR(255,0,0,0); + Coordinates.DashColor=PX_COLOR(PX_OBJECT_COORDINATES_DEFAULT_DASH_RGB); + Coordinates.OnMarkStatus=PX_FALSE; + Coordinates.MarkValueEnabled=PX_TRUE; + Coordinates.MarkLineX=-1; + + Coordinates.bDataUpdatePainter=PX_TRUE; + + Coordinates.LineMode=PX_OBJECT_COORDINATES_LINEMODE_LINES; + + Coordinates.LeftTitleShow=PX_TRUE; + Coordinates.RightTitleShow=PX_TRUE; + Coordinates.HorizontalShow=PX_TRUE; + Coordinates.ScaleEnabled=PX_TRUE; + Coordinates.ShowGuides=PX_TRUE; + + Coordinates.LeftTitle=""; + Coordinates.RightTitle=""; + Coordinates.TopTitle=""; + Coordinates.BottomTitle=""; + PX_VectorInit(mp,&Coordinates.vData,sizeof(PX_Object_CoordinateData),16); + PX_VectorInit(mp,&Coordinates.vFlagLine,sizeof(PX_Object_CoordinateFlagLine),16); + + pObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0,PX_OBJECT_TYPE_COORDINATE,PX_Object_CoordinatesUpdate,PX_Object_CoordinatesRender,PX_Object_CoordinatesFree,&Coordinates,sizeof(PX_Object_Coordinates)); + + //PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_CoordinatesCursorMoveEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_CoordinatesCursorMoveEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_CoordinatesCursorDragEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_CoordinatesCursorPressEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_CoordinatesCursorReleaseEvent,PX_NULL); + + return pObject; +} + +PX_Object_FilterEditor * PX_Object_GetFilterEditor(PX_Object *Object) +{ + if (Object->Type==PX_OBJECT_TYPE_FILTEREDITOR) + { + return (PX_Object_FilterEditor *)Object->pObject; + } + return PX_NULL; +} + +static px_void PX_Object_FilterEditorDrawFrameLine(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_int offsetx=(px_int)pObject->x; + px_int offsety=(px_int)pObject->y; + + PX_GeoDrawLine(psurface,offsetx,offsety,offsetx+(px_int)(pObject->Width-1),offsety,PX_OBJECT_FILTEREDITOR_DEFAULT_FRAMELINE_WIDTH,pfe->borderColor); + PX_GeoDrawLine(psurface,offsetx,offsety,offsetx,offsety+(px_int)(pObject->Height-1),PX_OBJECT_FILTEREDITOR_DEFAULT_FRAMELINE_WIDTH,pfe->borderColor); + PX_GeoDrawLine(psurface,(px_int)(offsetx+pObject->Width-1),offsety+(px_int)(pObject->Height-1),offsetx,offsety+(px_int)pObject->Height-1,PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH,pfe->borderColor); + PX_GeoDrawLine(psurface,(px_int)(offsetx+pObject->Width-1),offsety+(px_int)(pObject->Height-1),offsetx+(px_int)(pObject->Width-1),offsety,PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH,pfe->borderColor); +} + +static px_void PX_Object_FilterEditorDrawSelectDraging(px_surface *psurface,PX_Object *pObject) +{ + px_float offsetx=pObject->x; + px_float offsety=pObject->y; + + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + + if (!pfe->bSelectDrag) + { + return; + } + + PX_GeoDrawRect(psurface,(px_int)(offsetx+pfe->DragStartPoint.x),(px_int)(offsety+(px_int)pfe->DragStartPoint.y),(px_int)(offsetx+(px_int)pfe->DragingPoint.x),(px_int)(offsety+(px_int)pfe->DragingPoint.y),PX_COLOR(96,171,81,128)); +} + +static px_void PX_Object_FilterEditorDrawPt(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_int i; + px_float oftx=pObject->x; + px_float ofty=pObject->y; + for (i=0;iopCount;i++) + { + PX_GeoDrawSolidCircle(psurface,(px_int)(oftx+pfe->pt[i].x),(px_int)(ofty+pfe->pt[i].y),pfe->radius,pfe->ptColor); + if (pfe->pt[i].bselect||pfe->pt[i].bCursor) + { + PX_GeoDrawCircle(psurface,(px_int)(oftx+pfe->pt[i].x),(px_int)(ofty+pfe->pt[i].y),pfe->radius+2,1,pfe->ptColor); + } + } + + for (i=0;iopCount-1;i++) + { + PX_GeoDrawLine(psurface,(px_int)(oftx+pfe->pt[i].x),(px_int)(ofty+pfe->pt[i].y),(px_int)(oftx+pfe->pt[i+1].x),(px_int)(ofty+pfe->pt[i+1].y),2,pfe->ptColor); + } + +} + +static px_void PX_Object_FilterEditorDrawHelpLine(px_surface *psurface,PX_Object *pObject) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_char text[16]; + px_double midy,incx,incy,x,y,val; + px_double oftx,ofty; + if (!pfe->ShowHelpLine) + { + return; + } + oftx=pObject->x; + ofty=pObject->y; + midy=pObject->Height/2; + incy=pObject->Height/2/(pfe->VerticalDividing/2); + + //up + for (y=midy;y>=0;y-=incy) + { + //line + PX_GeoDrawLine(psurface,(px_int)(oftx),(px_int)(ofty+y),(px_int)(oftx+pObject->Width),(px_int)(ofty+y),1,pfe->helpLineColor); + val=(midy-y)/(pObject->Height/2)*pfe->rangedb; + switch (pfe->FilterType) + { + case PX_OBJECT_FILTER_TYPE_dB: + PX_sprintf1(text,sizeof(text),"+%1.2db",PX_STRINGFORMAT_FLOAT((px_float)val)); + break; + case PX_OBJECT_FILTER_TYPE_Liner: + PX_sprintf1(text,sizeof(text),"+%1.2",PX_STRINGFORMAT_FLOAT((px_float)val)); + break; + } + + //text + PX_FontDrawText(psurface,(px_int)(oftx-1),(px_int)(ofty+y-5),text,pfe->FontColor,PX_FONT_ALIGN_XRIGHT); + } + //down + for (y=midy;y<=pObject->Height;y+=incy) + { + //line + PX_GeoDrawLine(psurface,(px_int)(oftx),(px_int)(ofty+y),(px_int)(oftx+pObject->Width),(px_int)(ofty+y),1,pfe->helpLineColor); + val=(midy-y)/(pObject->Height/2)*pfe->rangedb; + switch (pfe->FilterType) + { + case PX_OBJECT_FILTER_TYPE_dB: + PX_sprintf1(text,sizeof(text),"%1.2db",PX_STRINGFORMAT_FLOAT((px_float)val)); + break; + case PX_OBJECT_FILTER_TYPE_Liner: + PX_sprintf1(text,sizeof(text),"%1.2",PX_STRINGFORMAT_FLOAT((px_float)val)); + break; + } + //text + PX_FontDrawText(psurface,(px_int)(oftx-1),(px_int)(ofty+y-5),text,pfe->FontColor,PX_FONT_ALIGN_XRIGHT); + } + + //horizontal + incx=pObject->Width/pfe->HorizontalDividing; + for (x=0;xWidth;x+=incx) + { + //line + PX_GeoDrawLine(psurface,(px_int)(oftx+x),(px_int)(ofty+0),(px_int)(oftx+x),(px_int)(ofty+pObject->Height-1),1,pfe->helpLineColor); + val=x/pObject->Width; + //text + if (pfe->showHorizontal) + { + PX_sprintf1(text,sizeof(text),"%1.2",PX_STRINGFORMAT_FLOAT((px_float)val)); + PX_FontDrawText(psurface,(px_int)(oftx+x-1),(px_int)(ofty+pObject->Height+3),text,pfe->FontColor,PX_FONT_ALIGN_XCENTER); + } + } + +} + +px_void PX_Object_FilterEditorCursorReleaseEvent( PX_Object *pObject, PX_Object_Event e,px_void *ptr ) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + + pfe->bSelectDrag=PX_FALSE; + pfe->bAdjust=PX_FALSE; +} + + +px_void PX_Object_FilterEditorRender(px_surface *psurface, PX_Object *pObject,px_uint elpased) +{ + PX_Object_FilterEditorDrawFrameLine(psurface,pObject); + PX_Object_FilterEditorDrawHelpLine(psurface,pObject); + PX_Object_FilterEditorDrawPt(psurface,pObject); + PX_Object_FilterEditorDrawSelectDraging(psurface,pObject); +} + +px_void PX_Object_FilterEditorCursorPressEvent(PX_Object *pObject, PX_Object_Event e,px_void *ptr) +{ + px_int i,j; + px_bool bSelectlge1=PX_FALSE; + px_float x=(e.Param_int[0]-pObject->x); + px_float y=(e.Param_int[1]-pObject->y); + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + + if(!PX_ObjectIsPointInRegion(pObject,(px_float)e.Param_int[0],(px_float)e.Param_int[1])) + { + return; + } + + for (i=0;iopCount;i++) + { + if(PX_isPointInCircle(PX_POINT(x,y,0),PX_POINT((px_float)pfe->pt[i].x,(px_float)pfe->pt[i].y,0),(px_float)pfe->radius)) + { + if (!pfe->pt[i].bselect) + { + for (j=0;jopCount;j++) + { + pfe->pt[j].bselect=PX_FALSE; + } + pfe->pt[i].bselect=PX_TRUE; + } + bSelectlge1=PX_TRUE; + } + + } + + if (bSelectlge1) + { + pfe->bSelectDrag=PX_FALSE; + pfe->bAdjust=PX_TRUE; + pfe->lastAdjustPoint.x=(x); + pfe->lastAdjustPoint.y=(y); + } + else + { + for (i=0;iopCount;i++) + { + pfe->pt[i].bselect=PX_FALSE; + } + pfe->DragStartPoint.x=(x); + pfe->DragStartPoint.y=(y); + pfe->DragingPoint=pfe->DragStartPoint; + pfe->bSelectDrag=PX_TRUE; + pfe->bAdjust=PX_FALSE; + } + +} + +px_void PX_Object_FilterEditorCursorMoveEvent(PX_Object *pObject, PX_Object_Event e,px_void *ptr ) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_int i; + px_float x=(e.Param_int[0]-pObject->x); + px_float y=(e.Param_int[1]-pObject->y); + + if(!PX_ObjectIsPointInRegion(pObject,(px_float)e.Param_int[0],(px_float)e.Param_int[1])) + { + return; + } + + for (i=0;iopCount;i++) + { + if(PX_isPointInCircle(PX_POINT(x,y,0),PX_POINT((px_float)pfe->pt[i].x,(px_float)pfe->pt[i].y,0),(px_float)pfe->radius)) + { + pfe->pt[i].bCursor=PX_TRUE; + } + else + { + pfe->pt[i].bCursor=PX_FALSE; + } + } + +} + + +px_void PX_Object_FilterEditorCursorDragEvent(PX_Object *pObject, PX_Object_Event e,px_void *ptr ) +{ + px_int i; + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_float x=(e.Param_int[0]-pObject->x); + px_float y=(e.Param_int[1]-pObject->y); + + + if (pfe->bSelectDrag) + { + px_rect rect; + + if (x<0) + { + x=0; + } + if (x>pObject->Width) + { + x=(pObject->Width); + } + if (y<0) + { + y=0; + } + if (y>pObject->Height) + { + y=(pObject->Height); + } + + pfe->DragingPoint.x=(px_float)(x); + pfe->DragingPoint.y=(px_float)(y); + rect=PX_RECT(pfe->DragStartPoint.x,pfe->DragStartPoint.y,x-pfe->DragStartPoint.x,y-pfe->DragStartPoint.y); + for (i=0;iopCount;i++) + { + if(PX_isPointInRect(PX_POINT((px_float)pfe->pt[i].x,(px_float)pfe->pt[i].y,0),rect)) + { + pfe->pt[i].bselect=PX_TRUE; + } + else + { + pfe->pt[i].bselect=PX_FALSE; + } + } + } + + else if (pfe->bAdjust) + { + for (i=0;iopCount;i++) + { + if(pfe->pt[i].bselect==PX_TRUE) + { + pfe->pt[i].y+=(px_int)(y-pfe->lastAdjustPoint.y); + if (pfe->pt[i].y<0) + { + pfe->pt[i].y=0; + } + if (pfe->pt[i].y>pObject->Height-1) + { + pfe->pt[i].y=(px_int)pObject->Height-1; + } + } + } + pfe->lastAdjustPoint=PX_POINT(x,y,0); + } +} + + +px_void PX_Object_FilterEditorSetOperateCount(PX_Object *pObject,px_int count) +{ + px_int i; + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(pObject); + px_float Inc; + px_int y; + if (count<2) + { + count=2; + } + if (count>PX_COUNTOF(pfe->pt)) + { + count=PX_COUNTOF(pfe->pt); + } + Inc=pObject->Width/(count-1); + y=(px_int)(pObject->Height/2); + for (i=0;ipt[i].x=(px_int)(Inc*i); + pfe->pt[i].y=y; + } + pfe->opCount=count; +} + +px_void PX_Object_FilterEditorSetType(PX_Object *Object,PX_OBJECT_FILTER_TYPE type) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->FilterType=type; + } +} + +px_void PX_Object_FilterEditorSetHorizontalShow(PX_Object *Object,px_bool HorizontalShow) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->showHorizontal=HorizontalShow; + } +} + +px_void PX_Object_FilterEditorReset(PX_Object *Object) +{ + px_int i,y; + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + y=(px_int)(Object->Height/2); + for (i=0;iopCount;i++) + { + pfe->pt[i].y=y; + } +} + +px_void PX_Object_FilterEditorSetRange(PX_Object *Object,px_double range) +{ + + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->rangedb=range; + } +} + +px_void PX_Object_FilterEditorSetFontColor(PX_Object *Object,px_color clr) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->FontColor=clr; + } +} + +px_void PX_Object_FilterEditorSetBorderColor(PX_Object *Object,px_color clr) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->borderColor=clr; + } +} + +px_void PX_Object_FilterEditorSethelpLineColor(PX_Object *Object,px_color clr) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->helpLineColor=clr; + } +} + +px_void PX_Object_FilterEditorSetFontSize(PX_Object *Object,px_int size) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->FontSize=size; + } +} + +px_void PX_Object_FilterEditorSetHorizontalDividing(PX_Object *Object,px_int div) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->HorizontalDividing=div; + } +} + +px_void PX_Object_FilterEditorSetVerticalDividing(PX_Object *Object,px_int div) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (pfe) + { + pfe->VerticalDividing=div; + } +} + +px_void PX_Object_FilterEditorMapData(PX_Object *Object,px_double data[],px_int size) +{ + px_int i,mapIndex; + px_double ptValue[PX_OBJECT_FILTER_EDITOR_MAX_PT]; + px_double step,frac,d2,d1,dm; + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (!pfe) + { + return; + } + //pt to value + for (i=0;iopCount;i++) + { + if (pfe->pt[i].y>Object->Height-10) + { + ptValue[i]=-1000; + } + else + { + ptValue[i]=((Object->Height/2)-pfe->pt[i].y)/(Object->Height/2)*pfe->rangedb; + } + } + + step=1.0/(pfe->opCount-1); + + for (i=0;iFilterType) + { + case PX_OBJECT_FILTER_TYPE_dB: + dm=PX_pow_dd(10,dm/20.0); + break; + case PX_OBJECT_FILTER_TYPE_Liner: + break; + } + data[i]=dm; + } +} + +px_double PX_Object_FilterEditorMapValue(PX_Object *Object,px_double precent) +{ + px_int mapIndex; + px_double step,frac,d2,d1,dm; + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + if (!pfe) + { + return 1; + } + + step=1.0/(pfe->opCount-1); + mapIndex=(px_int)(precent/step); + if (mapIndex>pfe->opCount-1) + { + return 1; + } + frac=(precent-mapIndex*step)/step; + d2=((Object->Height/2)-pfe->pt[mapIndex+1].y)/(Object->Height/2)*pfe->rangedb; + d1=((Object->Height/2)-pfe->pt[mapIndex].y)/(Object->Height/2)*pfe->rangedb; + dm=d1+frac*(d2-d1); + switch(pfe->FilterType) + { + case PX_OBJECT_FILTER_TYPE_dB: + dm=PX_pow_dd(10,dm/20.0); + break; + case PX_OBJECT_FILTER_TYPE_Liner: + break; + } + return dm; +} + +PX_Object * PX_Object_FilterEditorCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,PX_OBJECT_FILTER_TYPE type) +{ + PX_Object *pObject; + PX_Object_FilterEditor FilterEditor; + PX_memset(&FilterEditor,0,sizeof(FilterEditor)); + FilterEditor.showHorizontal=PX_TRUE; + FilterEditor.borderColor=PX_COLOR(255,0,0,0); + FilterEditor.FontColor=PX_COLOR(255,0,0,0); + FilterEditor.bSelectDrag=PX_FALSE; + FilterEditor.bAdjust=PX_FALSE; + FilterEditor.DragingPoint=PX_POINT(0,0,0); + FilterEditor.DragStartPoint=PX_POINT(0,0,0); + FilterEditor.FontSize=16; + FilterEditor.helpLineColor=PX_COLOR(255,0,0,0); + FilterEditor.ptColor=PX_COLOR(255,0,0,0); + FilterEditor.HorizontalDividing=16; + FilterEditor.VerticalDividing=16; + FilterEditor.ShowHelpLine=PX_TRUE; + FilterEditor.showHorizontal=PX_FALSE; + FilterEditor.FilterType=type; + FilterEditor.rangedb=6; + FilterEditor.radius=PX_OBJECT_FILTER_EDITOR_DEFAULT_RADIUS; + pObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0,PX_OBJECT_TYPE_FILTEREDITOR,PX_NULL,PX_Object_FilterEditorRender,PX_NULL,&FilterEditor,sizeof(PX_Object_FilterEditor)); + PX_Object_FilterEditorSetOperateCount(pObject,8); + + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_FilterEditorCursorMoveEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDRAG,PX_Object_FilterEditorCursorDragEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_FilterEditorCursorPressEvent,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_FilterEditorCursorReleaseEvent,PX_NULL); + return pObject; +} + +px_void PX_Object_FilterEditorSetborderColor(PX_Object *Object,px_color clr) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + pfe->borderColor=clr; +} + + + +px_void PX_Object_FilterEditorSetptColor(PX_Object *Object,px_color clr) +{ + PX_Object_FilterEditor *pfe=PX_Object_GetFilterEditor(Object); + pfe->ptColor=clr; +} + + +PX_Object_CheckBox * PX_Object_GetCheckBox(PX_Object *Object) +{ + PX_Object_CheckBox *pcb=(PX_Object_CheckBox *)Object->pObject; + if (Object->Type==PX_OBJECT_TYPE_CHECKBOX) + { + return pcb; + } + return PX_NULL; +} + + +px_void PX_Object_CheckBoxOnMouseMove(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_CheckBox *pcb=PX_Object_GetCheckBox(Object); + px_int x,y; + x=e.Param_int[0]; + y=e.Param_int[1]; + + if (pcb) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + { + if (pcb->state!=PX_OBJECT_BUTTON_STATE_ONPUSH) + { + if (pcb->state!=PX_OBJECT_BUTTON_STATE_ONCURSOR) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSOROVER; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + e.Param_ptr[0]=PX_NULL; + PX_ObjectExecuteEvent(Object,e); + } + pcb->state=PX_OBJECT_CHECKBOX_STATE_ONCURSOR; + } + } + else + { + if (pcb->state!=PX_OBJECT_BUTTON_STATE_NORMAL) + { + PX_Object_Event e; + e.Event=PX_OBJECT_EVENT_CURSOROUT; + e.Param_uint[0]=0; + e.Param_uint[1]=0; + e.Param_uint[2]=0; + e.Param_uint[3]=0; + PX_ObjectExecuteEvent(Object,e); + } + pcb->state=PX_OBJECT_CHECKBOX_STATE_NORMAL; + } + } +} + +px_void PX_Object_CheckBoxOnMouseLButtonDown(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_CheckBox *pcb=PX_Object_GetCheckBox(Object); + px_int x,y; + + x=e.Param_int[0]; + y=e.Param_int[1]; + + if (pcb) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + pcb->state=PX_OBJECT_CHECKBOX_STATE_ONPUSH; + } +} + +px_void PX_Object_CheckBoxOnMouseLButtonUp(PX_Object *Object,PX_Object_Event e,px_void *user_ptr) +{ + PX_Object_CheckBox *pcb=PX_Object_GetCheckBox(Object); + + px_int x,y; + + x=e.Param_uint[0]; + y=e.Param_uint[1]; + + if (pcb) + { + if(PX_ObjectIsPointInRegion(Object,(px_float)x,(px_float)y)) + if(pcb->state==PX_OBJECT_CHECKBOX_STATE_ONPUSH) + { + pcb->state=PX_OBJECT_CHECKBOX_STATE_ONCURSOR; + pcb->bCheck=!pcb->bCheck; + } + } +} + +px_void PX_Object_CheckBoxRender(px_surface *psurface, PX_Object *pObject,px_uint elpased) +{ + px_int TextLen,i; + px_int fx,fy; + PX_Object_CheckBox *pcb=PX_Object_GetCheckBox(pObject); + + if (pcb==PX_NULL) + { + return; + } + + if (!pObject->Visible) + { + return; + } + + TextLen=0; + for (i=0;iText);i++) + { + if (pcb->Text[i]&0x80) + { + TextLen+=__PX_FONT_GBKSIZE; + i++; + continue; + } + else + { + TextLen+=__PX_FONT_ASCSIZE; + } + } + + if (pcb->Align&PX_OBJECT_ALIGN_HCENTER) + { + fx=(px_int)pObject->x; + fx=fx+((px_int)pObject->Width-TextLen)/2; + } + + if (pcb->Align&PX_OBJECT_ALIGN_VCENTER) + { + fy=(px_int)pObject->y; + fy=fy+((px_int)pObject->Height-__PX_FONT_HEIGHT)/2; + } + + + if (pcb->Align&PX_OBJECT_ALIGN_LEFT) + { + fx=(px_int)pObject->x+18; + } + + if (pcb->Align&PX_OBJECT_ALIGN_RIGHT) + { + fx=(px_int)pObject->x+(px_int)pObject->Width-TextLen; + } + + if (pcb->Align&PX_OBJECT_ALIGN_TOP) + { + fy=(px_int)pObject->y; + } + + if (pcb->Align&PX_OBJECT_ALIGN_BOTTOM) + { + fy=(px_int)pObject->y+(px_int)pObject->Height-__PX_FONT_HEIGHT; + } + + PX_GeoDrawRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pcb->BackgroundColor); + switch (pcb->state) + { + case PX_OBJECT_BUTTON_STATE_NORMAL: + PX_GeoDrawRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pcb->BackgroundColor); + break; + case PX_OBJECT_BUTTON_STATE_ONPUSH: + PX_GeoDrawRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pcb->PushColor); + break; + case PX_OBJECT_BUTTON_STATE_ONCURSOR: + PX_GeoDrawRect(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,pcb->CursorColor); + break; + } + + if (pcb->Border) + { + PX_GeoDrawBorder(psurface,(px_int)pObject->x,(px_int)pObject->y,(px_int)pObject->x+(px_int)pObject->Width-1,(px_int)pObject->y+(px_int)pObject->Height-1,1,pcb->BorderColor); + } + + PX_FontDrawText(psurface,fx,fy,pcb->Text,pcb->TextColor,PX_FONT_ALIGN_XLEFT); + + //draw CheckState + PX_GeoDrawBorder(psurface,(px_int)pObject->x+1,(px_int)pObject->y+1,(px_int)pObject->x+14,(px_int)pObject->y+14,1,pcb->BorderColor); + if (pcb->bCheck) + { + PX_GeoDrawRect(psurface,(px_int)pObject->x+3,(px_int)pObject->y+3,(px_int)pObject->x+12,(px_int)pObject->y+12,pcb->BorderColor); + } + +} + +PX_Object * PX_Object_CheckBoxCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const char text[]) +{ + PX_Object *pObject; + PX_Object_CheckBox cbx; + cbx.Align=PX_OBJECT_ALIGN_VCENTER|PX_OBJECT_ALIGN_LEFT; + cbx.BackgroundColor=PX_COLOR(0,0,0,0); + cbx.bCheck=PX_FALSE; + cbx.Border=PX_FALSE; + cbx.BorderColor=PX_COLOR(255,0,0,0); + cbx.CursorColor=PX_COLOR(255,204,204,204); + cbx.PushColor=PX_COLOR(255,192,192,192); + cbx.state=PX_OBJECT_CHECKBOX_STATE_NORMAL; + PX_strset(cbx.Text,text); + cbx.TextColor=PX_COLOR(255,0,0,0); + pObject=PX_ObjectCreateEx(mp,Parent,(px_float)x,(px_float)y,0,(px_float)Width,(px_float)Height,0,PX_OBJECT_TYPE_CHECKBOX,PX_NULL,PX_Object_CheckBoxRender,PX_NULL,&cbx,sizeof(cbx)); + if (!pObject) + { + return PX_NULL; + } + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORMOVE,PX_Object_CheckBoxOnMouseMove,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORDOWN,PX_Object_CheckBoxOnMouseLButtonDown,PX_NULL); + PX_ObjectRegisterEvent(pObject,PX_OBJECT_EVENT_CURSORUP,PX_Object_CheckBoxOnMouseLButtonUp,PX_NULL); + return pObject; +} + +px_void PX_Object_CheckBoxSetBackgroundColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetCheckBox(Object)->BackgroundColor=clr; +} + +px_void PX_Object_CheckBoxSetBorderColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetCheckBox(Object)->BorderColor=clr; +} + +px_void PX_Object_CheckBoxSetPushColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetCheckBox(Object)->PushColor=clr; +} + +px_void PX_Object_CheckBoxSetCursorColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetCheckBox(Object)->CursorColor=clr; +} + +px_void PX_Object_CheckBoxSetTextColor(PX_Object *Object,px_color clr) +{ + PX_Object_GetCheckBox(Object)->TextColor=clr; +} + diff --git a/code/PainterEngine/Kernel/PX_Object.h b/code/PainterEngine/Kernel/PX_Object.h new file mode 100644 index 0000000000000000000000000000000000000000..6fade464120dd3d4bd73675e14b0ca9f16435b63 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Object.h @@ -0,0 +1,939 @@ +#ifndef PIXELSES_OBJECT_H +#define PIXELSES_OBJECT_H + +#include "../Core/PX_Core.h" +#include "PX_Animation.h" +#include "PX_Partical.h" + +////////////////////////////////////////////////////////////////////////// +/// Common Events +////////////////////////////////////////////////////////////////////////// +#define PX_OBJECT_EVENT_ANY 0 +#define PX_OBJECT_EVENT_CURSORMOVE 1 +#define PX_OBJECT_EVENT_CURSORUP 2 +#define PX_OBJECT_EVENT_CURSORRDOWN 3 +#define PX_OBJECT_EVENT_CURSORDOWN 4 +#define PX_OBJECT_EVENT_CURSORRUP 5 +#define PX_OBJECT_EVENT_CURSOROVER 6 +#define PX_OBJECT_EVENT_CURSOROUT 7 +#define PX_OBJECT_EVENT_CURSORWHEEL 8 +#define PX_OBJECT_EVENT_STRING 9 +#define PX_OBJECT_EVENT_EXECUTE 10 +#define PX_OBJECT_EVENT_CURSORCLICK 11 +#define PX_OBJECT_EVENT_CURSORDRAG 12 +#define PX_OBJECT_EVENT_VALUECHAGE 13 +#define PX_OBJECT_EVENT_DRAGFILE 14 +#define PX_OBJECT_EVENT_KEYDOWN 15 +#define PX_OBJECT_EVENT_IMPACT 16 +#define PX_OBJECT_EVENT_ONFOCUSCHANGED 17 +#define PX_OBJECT_EVENT_SCALE 18 + + +////////////////////////////////////////////////////////////////////////////// +// Type of Controls +///////////////////////////////////////////////////////////////////////////// + +enum PX_OBJECT_TYPE +{ + PX_OBJECT_TYPE_NULL , + PX_OBJECT_TYPE_LABEL , + PX_OBJECT_TYPE_PROCESSBAR , + PX_OBJECT_TYPE_RADIUSICO , + PX_OBJECT_TYPE_IMAGE , + PX_OBJECT_TYPE_SHAPE , + PX_OBJECT_TYPE_SLIDERBAR , + PX_OBJECT_TYPE_LIST , + PX_OBJECT_TYPE_LISTITEM , + PX_OBJECT_TYPE_PUSHBUTTON , + PX_OBJECT_TYPE_ROTATION , + PX_OBJECT_TYPE_EDIT , + PX_OBJECT_TYPE_STATICIMAGE , + PX_OBJECT_TYPE_SCROLLAREA , + PX_OBJECT_TYPE_AUTOTEXT , + PX_OBJECT_TYPE_ANIMATION , + PX_OBJECT_TYPE_PARTICAL , + PX_OBJECT_TYPE_ROUNDCURSOR , + PX_OBJECT_TYPE_CURSORBUTTON , + PX_OBJECT_TYPE_VKEYBOARD , + PX_OBJECT_TYPE_COORDINATE , + PX_OBJECT_TYPE_FILTEREDITOR , + PX_OBJECT_TYPE_CHECKBOX , +}; + + +#define PX_OBJECT_ALIGN_HCENTER 1 +#define PX_OBJECT_ALIGN_VCENTER 2 +#define PX_OBJECT_ALIGN_LEFT 4 +#define PX_OBJECT_ALIGN_RIGHT 8 +#define PX_OBJECT_ALIGN_TOP 16 +#define PX_OBJECT_ALIGN_BOTTOM 32 + +#define PX_OBJECT_ALIGN_CENTER (PX_OBJECT_ALIGN_HCENTER|PX_OBJECT_ALIGN_VCENTER) + +////////////////////////////////////////////////////////////////////////// +// Label Control +////////////////////////////////////////////////////////////////////////// + +enum PX_OBJECT_SLIDERBAR_TYPE +{ + PX_OBJECT_SLIDERBAR_TYPE_HORIZONTAL , + PX_OBJECT_SLIDERBAR_TYPE_VERTICAL , +}; + +enum PX_OBJECT_SLIDERBAR_STYLE +{ + PX_OBJECT_SLIDERBAR_STYLE_BOX , + PX_OBJECT_SLIDERBAR_STYLE_LINER , +}; + +enum PX_OBJECT_SLIDERBAR_STATUS +{ + PX_OBJECT_SLIDERBAR_STATUS_ONDRAG , + PX_OBJECT_SLIDERBAR_STATUS_NORMAL , +}; + +#define PX_OBJECT_IMAGE_LISTITEM_STYLE_NONE 0 +#define PX_OBJECT_IMAGE_LISTITEM_STYLE_BORDER 1 + +#define PX_OBJECT_IMAGE_LISTBOX_ITEMHEIGHT 18 +#define PX_OBJECT_IMAGE_LISTBOX_SLIDERWITDH 8 + +#define PX_OBJECT_IMAGE_LISTBOX_STYLE_ITEMBORDER 1 +#define PX_OBJECT_IMAGE_LISTBOX_STYLE_SELECT 2 + + +#define PX_OBJECT_COORDINATEDATA_MAP_LEFT 0 +#define PX_OBJECT_COORDINATEDATA_MAP_RIGHT 1 +#define PX_OBJECT_COORDINATEDATA_MAP_HORIZONTAL 2 + +#define PX_OBJECT_COORDINATES_DEFAULE_MINHORIZONTALPIXELDIVIDING 48 +#define PX_OBJECT_COORDINATES_DEFAULE_MINVERTICALPIXELDIVIDING 20 +#define PX_OBJECT_COORDINATES_DEFAULE_DIVIDING 10 +#define PX_OBJECT_COORDINATES_DEFAULT_SPACER 64 +#define PX_OBJECT_COORDINATES_DEFAULT_VERTICALFLAG_OFFSET 8 +#define PX_OBJECT_COORDINATES_DEFAULT_FLAGTEXT_SPACER 8 + +#define PX_OBJECT_COORDINATES_DEFAULT_FRAMELINE_WIDTH 2 +#define PX_OBJECT_COORDINATES_DEFAULT_FONT_SIZE 16 +#define PX_OBJECT_COORDINATES_DEFAULT_DASH_RGB 255,100,100,255 +#define PX_OBJECT_COORDINATES_DEFAULT_LINE_WIDTH 2.0f + + +#define PX_OBJECT_COORDINATES_DEFAULT_FLOAT_FLAGFORMAT_H "%1.2" +#define PX_OBJECT_COORDINATES_DEFAULT_INT_FLAGFORMAT_H "%1" + +#define PX_OBJECT_COORDINATES_DEFAULT_FLOAT_FLAGFORMAT_L "%1.2" +#define PX_OBJECT_COORDINATES_DEFAULT_INT_FLAGFORMAT_L "%1" + +#define PX_OBJECT_COORDINATES_DEFAULT_FLOAT_FLAGFORMAT_R "%1.2" +#define PX_OBJECT_COORDINATES_DEFAULT_INT_FLAGFORMAT_R "%1" + + + + + +#define PX_OBJECT_FILTEREDITOR_DEFAULE_HORIZONTALPIXELDIVIDING 48 +#define PX_OBJECT_FILTEREDITOR_DEFAULE_VERTICALPIXELDIVIDING 20 +#define PX_OBJECT_FILTEREDITOR_DEFAULT_FRAMELINE_WIDTH 2 + + +/////////////////////////////////////////////////////////////////////////// +//// PixelsES Object +////////////////////////////////////////////////////////////////////////// +struct _PX_Object; +typedef struct _PX_Object PX_Object; + +typedef px_void (*Function_ObjectUpdate)(PX_Object *,px_uint elpased); +typedef px_void (*Function_ObjectRender)(px_surface *psurface,PX_Object *,px_uint elpased); +typedef px_void (*Function_ObjectFree)(PX_Object *); + +struct _PX_Object +{ + px_float x; + px_float y; + px_float z; + px_float Width; + px_float Height; + px_float Length; + px_float diameter;//if the member is not zero,The Object is round shape + px_bool Enabled; + px_bool Visible; + px_bool ReceiveEvents; + px_int Type; + union + { + px_int User_int; + px_void *User_ptr; + }; + px_int world_index; + px_dword impact_Object_type; + px_dword impact_test_type; + px_void *pObject; + px_memorypool *mp; + struct _PX_Object *pChilds; + struct _PX_Object *pParent; + struct _PX_Object *pPreBrother; + struct _PX_Object *pNextBrother; + + struct _PX_Object_EventAction *pEventActions; + Function_ObjectUpdate Func_ObjectUpdate; + Function_ObjectRender Func_ObjectRender; + Function_ObjectFree Func_ObjectFree; + +}; + + +////////////////////////////////////////////////////////////////////////// +/// Controllers +////////////////////////////////////////////////////////////////////////// +typedef struct +{ + px_dword Align; + px_bool Border; + px_color TextColor; + px_color BackgroundColor; + px_char *Text; +}PX_Object_Label; + + +typedef struct +{ + px_int Value; + px_int MAX; + px_color Color; + px_color BackgroundColor; +}PX_Object_ProcessBar; + +typedef struct +{ + px_int Radius; + px_color Color; +}PX_Object_RadiusICO; + + +typedef struct +{ + px_dword Align; + px_texture *pTexture; + px_texture *pmask; +}PX_Object_Image; + +typedef struct +{ + px_dword Align; + px_color blendcolor; + px_shape *pShape; +}PX_Object_Shape; + +typedef struct +{ + enum PX_OBJECT_SLIDERBAR_TYPE Type; + enum PX_OBJECT_SLIDERBAR_STYLE style; + enum PX_OBJECT_SLIDERBAR_STATUS status; + px_int btnDownX,btnDownY; + px_int DargButtonX,DargButtonY; + px_int Max; + px_int lastValue; + px_int Value; + px_int SliderButtonLength; + px_color color; + px_color BackgroundColor; +}PX_Object_SliderBar; + + +typedef struct +{ + px_texture *Texture; + px_uchar Selected; +}PX_Object_SelectButton; + +typedef struct +{ + px_dword Align; + px_texture Texture; +}PX_Object_StaticImage; + + +typedef px_bool (*PX_Object_ListItemOnCreate)(px_memorypool *mp,PX_Object *ItemObject); + + +typedef enum +{ + PX_LISTITEM_STATUS_NORMAL, + PX_LISTITEM_STATUS_SELECTED, +}PX_LISTITEM_STATUS; + +typedef struct +{ + PX_LISTITEM_STATUS status; + px_void *pdata; +}PX_Object_ListItem; + +typedef struct +{ + px_memorypool *mp; + px_int ItemWidth; + px_int ItemHeight; + px_int offsetx; + px_int offsety; + px_int currentSelectedId; + px_color BorderColor; + px_color BackgroundColor; + px_surface renderSurface; + px_vector Items; + px_vector pData; + PX_Object *SliderBar; + PX_Object_ListItemOnCreate CreateFunctions; +}PX_Object_List; + +#define PX_OBJECT_PUSHBUTTON_ROUNDRADIUS 8.0f +typedef enum +{ + PX_OBJECT_BUTTON_STATE_ONCURSOR, + PX_OBJECT_BUTTON_STATE_ONPUSH, + PX_OBJECT_BUTTON_STATE_NORMAL, +}PX_Object_PUSHBUTTON_STATE; + + +typedef enum +{ + PX_OBJECT_PUSHBUTTON_STYLE_RECT, + PX_OBJECT_PUSHBUTTON_STYLE_ROUNDRECT, +}PX_OBJECT_PUSHBUTTON_STYLE; + +typedef struct +{ + px_dword Align; + px_bool Border; + px_color TextColor; + px_color BorderColor; + px_color BackgroundColor; + px_color CursorColor; + px_color PushColor; + px_char *Text; + px_texture *Texture; + px_shape *shape; + px_float roundradius; + PX_OBJECT_PUSHBUTTON_STYLE style; + PX_Object_PUSHBUTTON_STATE state; +}PX_Object_PushButton; + +typedef struct +{ + PX_Object *pushbutton; + px_float c_distance; + px_float c_distance_far; + px_float c_distance_near; + px_color c_color; + px_int c_width; + px_bool enter; +}PX_Object_CursorButton; + +typedef enum +{ + PX_OBJECT_EDIT_STATE_ONCURSOR, + PX_OBJECT_EDIT_STATE_NORMAL, +}PX_OBJECT_EDIT_STATE; + +typedef struct +{ + px_int angle_per_second; + px_float angle; + px_bool bstop; + px_texture *pTexture; +}PX_Object_Rotation; + +typedef struct +{ + px_string text; + px_bool onFocus; + px_bool Border; + px_color TextColor; + px_color BorderColor; + px_color CursorColor; + px_color BackgroundColor; + px_uint elpased; + px_bool Password; + px_bool AutoNewline; + px_int XOffset,YOffset; + px_int VerticalOffset,HorizontalOffset; + px_int xSpacing,ySpacing; + px_int cursor_index; + px_int max_length; + px_surface EditSurface; + const px_char *Limit; + PX_OBJECT_EDIT_STATE state; +}PX_Object_Edit; + + + +typedef struct +{ + px_int oftx,ofty; + px_bool bBorder; + px_surface surface; + px_color BackgroundColor; + px_color borderColor; + PX_Object *Object; +}PX_Object_ScrollArea; + +typedef struct +{ + px_dword Align; + PX_Animation animation; +}PX_Object_Animation; + +typedef struct +{ + px_color TextColor; + px_string text; +}PX_Object_AutoText; + + +typedef struct +{ + PX_Partical_Launcher launcher; +}PX_Object_Partical; + + + +typedef struct +{ + px_shape *shape; + px_point cursorPoint; + px_color blendColor; +}PX_Object_RoundCursor; + +typedef struct +{ + px_int x,y,width,height; + px_char u_key[8]; + px_char d_key[8]; + px_bool bCursor; + px_bool bDown; + px_bool bhold; +}PX_Object_VirtualKey; + + + +typedef struct +{ + PX_Object_VirtualKey Keys[14+14+13+12+3]; + px_color backgroundColor; + px_color borderColor; + px_color cursorColor; + px_color pushColor; + PX_Quadtree quadTree; + px_char functionCode; + px_bool bTab,bUpper,bShift,bCtrl,bAlt; +}PX_Object_VirtualKeyBoard; + + + + + +typedef struct _PX_Object_Event +{ + px_uint Event; + union + { + px_char Param_char[16]; + px_uint Param_uint[4]; + px_int Param_int[4]; + px_float Param_float[4]; + px_void *Param_ptr[4]; + px_bool Param_bool[4]; + }; +}PX_Object_Event; + + + +struct _PX_Object_EventAction +{ + px_uint EventAction; + px_void (*EventActionFunc)(PX_Object *,PX_Object_Event e,px_void *user_ptr); + px_void *user_ptr; + struct _PX_Object_EventAction *pNext; + struct _PX_Object_EventAction *pPre; +}; + +typedef struct _PX_Object_EventAction PX_OBJECT_EventAction; + + +PX_Object *PX_ObjectCreate(px_memorypool *mp,PX_Object *Parent,px_float x,px_float y,px_float z,px_float Width,px_float Height,px_float Lenght); +PX_Object *PX_ObjectCreateEx(px_memorypool *mp,PX_Object *Parent,\ + px_float x,px_float y,px_float z,px_float Width,px_float Height,px_float Lenght,\ + px_int type,\ + Function_ObjectUpdate Func_ObjectUpdate,\ + Function_ObjectRender Func_ObjectRender,\ + Function_ObjectFree Func_ObjectFree,\ + px_void *desc,\ + px_int size + ); + +px_void PX_ObjectInit(px_memorypool *mp,PX_Object *Object,PX_Object *Parent,px_float x,px_float y,px_float z,px_float Width,px_float Height,px_float Lenght); +px_void PX_ObjectSetUserCode(PX_Object *pObject,px_int user_int); +px_void PX_ObjectSetUserPointer(PX_Object *pObject,px_void *user_ptr); +px_void PX_ObjectDelete(PX_Object *pObject); +px_void PX_ObjectDeleteChilds( PX_Object *pObject ); +px_void PX_ObjectSetPosition(PX_Object *Object,px_float x,px_float y,px_float z); +px_void PX_ObjectSetSize(PX_Object *Object,px_float Width,px_float Height,px_float length); +px_void PX_ObjectSetVisible(PX_Object *Object,px_bool visible); +PX_Object *PX_ObjectGetChild(PX_Object *Object,px_int Index); +px_bool PX_ObjectIsPointInRegion(PX_Object *Object,px_float x,px_float y); +px_bool PX_ObjectIsCursorInRegion(PX_Object *Object,PX_Object_Event e); +px_float PX_ObjectGetHeight(PX_Object *Object); +px_float PX_ObjectGetWidth(PX_Object *Object); + +px_void PX_ObjectUpdate(PX_Object *Object,px_uint elpased ); +px_void PX_ObjectRender(px_surface *pSurface,PX_Object *Object,px_uint elpased); + +px_int PX_ObjectRegisterEvent(PX_Object *Object,px_uint Event,px_void (*ProcessFunc)(PX_Object *,PX_Object_Event e,px_void *user_ptr),px_void *ptr); +px_void PX_ObjectPostEvent(PX_Object *pPost,PX_Object_Event Event); +px_void PX_ObjectExecuteEvent(PX_Object *pPost,PX_Object_Event Event); + + + + +PX_Object * PX_Object_LabelCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const px_char *Text,px_color Color); +PX_Object_Label * PX_Object_GetLabel(PX_Object *Object); +px_char * PX_Object_LabelGetText(PX_Object *Label); +px_void PX_Object_LabelSetText(PX_Object *pLabel,px_char *Text); +px_void PX_Object_LabelSetTextColor(PX_Object *pLabel,px_color Color); +px_void PX_Object_LabelSetBackgroundColor(PX_Object *pLabel,px_color Color); +px_void PX_Object_LabelSetAlign(PX_Object *pLabel,px_dword Align); +px_void PX_Object_LabelSetBorder(PX_Object *pLabel,px_bool Border); +px_void PX_Object_LabelRender(px_surface *psurface,PX_Object *pLabel,px_uint elpased); +px_void PX_Object_LabelFree(PX_Object *pLabel); + +PX_Object * PX_Object_ProcessBarCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height); +PX_Object_ProcessBar *PX_Object_GetProcessBar(PX_Object *Object); +px_void PX_Object_ProcessBarSetColor(PX_Object *pProcessBar,px_color Color); +px_void PX_Object_ProcessBarSetValue(PX_Object *pProcessBar,px_int Value); +px_void PX_Object_ProcessBarSetMax(PX_Object *pProcessBar,px_int Max); +px_void PX_Object_ProcessBarRender(px_surface *psurface,PX_Object *pProcessBar,px_uint elpased); +px_int PX_Object_ProcessBarGetValue(PX_Object *pProcessBar); +px_void PX_Object_ProcessBarFree(PX_Object *pProcessBar); + +PX_Object * PX_Object_RadiusICOCreate(px_memorypool *mp,PX_Object*Parent,px_int x,px_int y,px_int Radius); +PX_Object_RadiusICO *PX_Object_GetRadiusICO(PX_Object *Object); +px_void PX_Object_RadiusICOSetColor(PX_Object *pRadiusICO,px_color Color); +px_void PX_Object_RadiusICORender(px_surface *psurface,PX_Object *pRadiusICO,px_uint elpased); +px_void PX_Object_RadiusICOFree(PX_Object *pRadiusICO); + +PX_Object *PX_Object_ImageCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_texture *ptex); +PX_Object_Image *PX_Object_GetImage(PX_Object *Object); +px_void PX_Object_ImageSetAlign(PX_Object *pImage,px_dword Align); +px_void PX_Object_ImageSetMask(PX_Object *pImage,px_texture *pmask); +px_void PX_Object_ImageRender(px_surface *psurface,PX_Object *pImage,px_uint elpased); +px_void PX_Object_ImageFree(PX_Object *pImage); +px_void PX_Object_ImageFreeWithTexture(PX_Object *pImage); + +PX_Object *PX_Object_SliderBarCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,enum PX_OBJECT_SLIDERBAR_TYPE Type,enum PX_OBJECT_SLIDERBAR_STYLE style); +PX_Object_SliderBar *PX_Object_GetSliderBar(PX_Object *Object); +px_void PX_Object_SliderBarSetValue(PX_Object *pSliderBar,px_int Value); +px_void PX_Object_SliderBarSetMax(PX_Object *pSliderBar,px_int Max); +px_int PX_Object_SliderBarGetValue(PX_Object *pSliderBar); +px_void PX_Object_SliderBarRender(px_surface *psurface,PX_Object *pSliderBar,px_uint elpased); +px_void PX_Object_SliderBarSetBackgroundColor(PX_Object *pSliderBar,px_color color); +px_void PX_Object_SliderBarFree(PX_Object *pSliderBar); +px_void PX_Object_SliderBarSetColor(PX_Object *pSliderBar,px_color color); +px_void PX_Object_SliderBarSetSliderButtonLength(PX_Object *pSliderBar,px_int length); + + + + +PX_Object *PX_Object_PushButtonCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const px_char *Text,px_color Color); +PX_Object_PushButton * PX_Object_GetPushButton( PX_Object *Object ); +px_char * PX_Object_PushButtonGetText( PX_Object *PushButton ); +px_void PX_Object_PushButtonSetText( PX_Object *pObject,const px_char *Text ); +px_void PX_Object_PushButtonSetBackgroundColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_PushButtonSetCursorColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_PushButtonSetStyle(PX_Object *pObject,PX_OBJECT_PUSHBUTTON_STYLE style); +px_void PX_Object_PushButtonSetPushColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_PushButtonSetBorderColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_PushButtonSetAlign( PX_Object *pObject,px_dword Align ); +px_void PX_Object_PushButtonSetBorder( PX_Object *Object,px_bool Border ); +px_void PX_Object_PushButtonRender(px_surface *psurface, PX_Object *pObject,px_uint elpased); +px_void PX_Object_PushButtonSetTextColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_PushButtonSetTexture(PX_Object *pObject,px_texture *texture); +px_void PX_Object_PushButtonSetShape(PX_Object *pObject,px_shape *pshape); +px_void PX_Object_PushButtonFree( PX_Object *Obj ); + +PX_Object* PX_Object_EditCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,px_color TextColor ); +PX_Object_Edit * PX_Object_GetEdit( PX_Object *Object ); +px_char * PX_Object_EditGetText( PX_Object *pObject ); +px_void PX_Object_EditSetMaxTextLength(PX_Object *pObject,px_int max_length); +px_void PX_Object_EditSetText( PX_Object *pObject,const px_char *Text ); +px_void PX_Object_EditSetFocus( PX_Object *pObject,px_bool OnFocus); +px_void PX_Object_EditSetPasswordStyle( PX_Object *pObject,px_uchar Enabled ); +px_void PX_Object_EditSetBackgroundColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_EditSetBorderColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_EditSetCursorColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_EditSetTextColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_EditSetLimit(PX_Object *pObject,const px_char *Limit); +px_void PX_Object_EditSetBorder( PX_Object *pObj,px_bool Border ); +px_void PX_Object_EditRender(px_surface *psurface, PX_Object *pObject,px_uint elpased); +px_void PX_Object_EditFree( PX_Object *pObject ); +px_void PX_Object_EditAddString(PX_Object *pObject,px_char *Text); +px_void PX_Object_EditBackspace(PX_Object *pObject); +px_void PX_Object_EditAutoNewLine(PX_Object *pObject,px_bool b); +px_void PX_Object_EditSetOffset(PX_Object *pObject,px_int TopOffset,px_int LeftOffset); +px_void PX_Object_EditCursorBack(PX_Object *pObject); +px_void PX_Object_EditCursorForward(PX_Object *pObject); + +// PX_Object * PX_Object_StaticImageCreate( PX_Object *Parent,px_int x,px_int y,px_texture tex); +// PX_Object_StaticImage * PX_Object_GetStaticImage( PX_Object *Object ); +// px_void PX_Object_StaticImageSetAlign( PX_Object *pImage,px_dword Align); +// px_void PX_Object_StaticImageRender(px_surface *psurface, PX_Object *im,px_uint elpased); +// px_void PX_Object_StaticImageFree(PX_Object *pObj); + + +PX_Object *PX_Object_ScrollAreaCreate(px_memorypool *mp,PX_Object *Parent,int x,int y,int height,int width); +PX_Object_ScrollArea * PX_Object_GetScrollArea( PX_Object *Object ); +PX_Object * PX_Object_ScrollAreaGetIncludedObjects(PX_Object *pObj); +px_void PX_Object_ScrollAreaMoveToBottom(PX_Object *pObject); +px_void PX_Object_ScrollAreaMoveToTop(PX_Object *pObject); +px_void PX_Object_ScrollAreaGetWidthHeight(PX_Object *pObject,px_int *Width,px_int *Height); +px_void PX_Object_ScrollAreaRender(px_surface *psurface, PX_Object *pObject,px_uint elpased); +px_void PX_Object_ScrollAreaSetBkColor(PX_Object *pObj,px_color bkColor); +px_void PX_Object_ScrollAreaSetBorder( PX_Object *pObj,px_bool Border ); +px_void PX_Object_ScrollAreaSetBorderColor(PX_Object *pObj,px_color borderColor); +px_void PX_Object_ScrollAreaFree(PX_Object *pObj); + + +PX_Object *PX_Object_RotationCreate(px_memorypool *mp,PX_Object *Parent,px_int angle_per_second,px_int x,px_int y,px_texture *ptexture); +PX_Object_Rotation * PX_Object_GetRotation( PX_Object *Object ); +px_void PX_Object_RotationSetSpeed(PX_Object *rot,px_int Angle_per_second); +px_void PX_Object_RotationStop(PX_Object *rot,px_bool bstop); +px_void PX_Object_RotationRender(px_surface *psurface, PX_Object *Obj,px_uint elpased); + +PX_Object *PX_Object_AutoTextCreate(px_memorypool *mp,PX_Object *Parent,int x,int y,int limit_width); +PX_Object_AutoText * PX_Object_GetAutoText( PX_Object *Object ); +px_void PX_Object_AutoTextSetTextColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_AutoTextSetText(PX_Object *Obj,const px_char *Text); +px_void PX_Object_AutoTextRender(px_surface *psurface, PX_Object *pObject,px_uint elpased); +px_void PX_Object_AutoTextFree(PX_Object *Obj); +px_int PX_Object_AutoTextGetHeight(PX_Object *Obj); + + +PX_Object *PX_Object_AnimationCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,PX_Animationlibrary *lib); +px_void PX_Object_AnimationSetLibrary(PX_Object *Object,PX_Animationlibrary *lib); +PX_Object_Animation *PX_Object_GetAnimation(PX_Object *Object); +px_void PX_Object_AnimationSetAlign(PX_Object *pObject,px_dword Align); +px_void PX_Object_AnimationRender(px_surface *psurface,PX_Object *pImage,px_uint elpased); +px_void PX_Object_AnimationFree(PX_Object *pObject); + + +PX_Object *PX_Object_ParticalCreateEx(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int z,PX_ParticalLauncher_InitializeInfo info); +PX_Object *PX_Object_ParticalCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int z,px_texture *pTexture,PX_ScriptVM_Instance *pIns,px_char *_init,px_char *_create,px_char *_update); +PX_Object_Partical *PX_Object_GetPartical(PX_Object *Object); +px_void PX_Object_ParticalSetDirection(PX_Object *pObject,px_point direction); +px_void PX_Object_ParticalRender(px_surface *psurface,PX_Object *pObject,px_uint elpased); +px_void PX_Object_ParticalFree(PX_Object *pObject); + + +PX_Object *PX_Object_RoundCursorCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_shape *pShape,px_color blendColor); +PX_Object_RoundCursor *PX_Object_GetRoundCursor(PX_Object *Object); +px_void PX_Object_RoundCursorSetDirection(PX_Object *Object,px_point cursor_point); +px_void PX_Object_RoundCursorRender(px_surface *psurface,PX_Object *pObject,px_uint elpased); +px_void PX_Object_RoundCursorSetColor(PX_Object *Object,px_color clr); +px_void PX_Object_RoundCursorFree(PX_Object *pObject); + +PX_Object * PX_Object_ShapeCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_shape *pshape ); +PX_Object_Shape * PX_Object_GetShape( PX_Object *Object ); +px_void PX_Object_ShapeSetAlign( PX_Object *pShape,px_dword Align); +px_void PX_Object_ShapeSetBlendColor( PX_Object *pShape,px_color blendcolor); +px_void PX_Object_ShapeRender(px_surface *psurface, PX_Object *im,px_uint elpased); +px_void PX_Object_RoundCursor_Mousemove(PX_Object *pobject,PX_Object_Event e,px_void *user_ptr); + +//use pushbutton function to operate cursor-button +PX_Object *PX_Object_CursorButtonCreate(px_memorypool *mp,PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const px_char *Text,px_color Color); +PX_Object_CursorButton * PX_Object_GetCursorButton( PX_Object *Object ); +PX_Object * PX_Object_GetCursorButtonPushButton(PX_Object *Object); + + +PX_Object_ListItem * PX_Object_GetListItem( PX_Object *Object ); +PX_Object * PX_Object_ListCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,px_int ItemHeight,PX_Object_ListItemOnCreate _CreateFunc); +px_void PX_Object_ListClear(PX_Object *pListObj); +px_void PX_Object_ListAdd(PX_Object *pListObj,px_void *ptr); +px_void PX_Object_ListSetBackgroundColor(PX_Object *pListObject,px_color color); +px_void PX_Object_ListSetBorderColor(PX_Object *pListObject,px_color color); +px_int PX_Object_ListAddItemDesc(PX_Object *pListObject,px_void *desc); +px_void *PX_Object_ListGetItemDesc(PX_Object *pListObject,px_int index); +px_void PX_Object_ListRemoveItemDesc(PX_Object *pListObject,px_int index); + + + +PX_Object* PX_Object_VirtualKeyBoardCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int width,px_int height); +px_void PX_Object_VirtualKeyBoardSetBackgroundColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_VirtualKeyBoardSetBorderColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_VirtualKeyBoardCursorColor( PX_Object *pObject,px_color Color ); +px_void PX_Object_VirtualKeyBoardPushColor( PX_Object *pObject,px_color Color ); +px_char PX_Object_VirtualKeyBoardGetCode(PX_Object *pObject); + +#define PX_OBJECT_COORDINATEFLAGLINE_XSHOW 1 +#define PX_OBJECT_COORDINATEFLAGLINE_YLSHOW 2 +#define PX_OBJECT_COORDINATEFLAGLINE_YRSHOW 4 + +typedef enum +{ + PX_OBJECT_COORDINATES_LINEMODE_LINES=0, + PX_OBJECT_COORDINATES_LINEMODE_PILLAR=1, +}PX_OBJECT_COORDINATES_LINEMODE; + +typedef enum +{ + PX_OBJECT_COORDINATES_GUIDESSHOWMODE_ALL=0, + PX_OBJECT_COORDINATES_GUIDESSHOWMODE_HORIZONTAL=1, + PX_OBJECT_COORDINATES_GUIDESSHOWMODE_VERTICAL=2 +}PX_OBJECT_COORDINATES_GUIDESSHOWMODE; + +typedef enum +{ + PX_OBJECT_COORDINATES_COORDINATEDATA_MAP_LEFT, + PX_OBJECT_COORDINATES_COORDINATEDATA_MAP_RIGHT, +}PX_OBJECT_COORDINATES_COORDINATEDATA_MAP; + + +typedef struct +{ + px_double X,Y; + px_color color; + px_float LineWidth; + px_uchar XYshow; +}PX_Object_CoordinateFlagLine; + +typedef struct +{ + px_double *MapHorizontalArray; + px_double *MapVerticalArray; + px_color Color; + PX_OBJECT_COORDINATES_COORDINATEDATA_MAP Map; + px_int linewidth; + px_int ID; + px_int Visibled; + px_int Size; +}PX_Object_CoordinateData; + + +typedef struct +{ + px_memorypool *mp; + px_double HorizontalRangeMin; + px_double HorizontalRangeMax; + px_double LeftVerticalRangeMin,LeftVerticalRangeMax; + px_double RightVerticalRangeMin,RightVerticalRangeMax; + + px_double ResHorizontalRangeMin; + px_double ResHorizontalRangeMax; + px_double ResLeftVerticalRangeMin,ResLeftVerticalRangeMax; + px_double ResRightVerticalRangeMin,ResRightVerticalRangeMax; + + + px_int MinVerticalPixelDividing; + px_int MinHorizontalPixelDividing; + px_int HorizontalDividing; + px_int LeftVerticalDividing; + px_int RightVerticalDividing; + + px_int LeftSpacer,RightSpacer,TopSpacer,BottomSpacer; + + const px_char *FloatFlagFormat_H; + const px_char *IntFlagFormat_H; + const px_char *FloatFlagFormat_L; + const px_char *IntFlagFormat_L; + const px_char *FloatFlagFormat_R; + const px_char *IntFlagFormat_R; + const px_char *LeftTitle,*RightTitle,*TopTitle,*BottomTitle; + + px_point DragStartPoint; + px_point DragingPoint; + px_int bScaleDrag; + px_int bScaling; + px_int MarkLineX; + + px_bool ScaleEnabled; + px_bool ShowGuides; + px_bool MarkValueEnabled; + px_bool OnMarkStatus; + px_bool bDataUpdatePainter; + px_bool ShowHelpLine; + + px_bool LeftTitleShow,RightTitleShow,HorizontalShow; + + px_color DashColor; + px_color FontColor; + px_color borderColor; + px_color helpLineColor; + int FontSize; + + PX_OBJECT_COORDINATES_LINEMODE LineMode; + PX_OBJECT_COORDINATES_GUIDESSHOWMODE guidesShowMode; + + px_float DataLineWidth; + px_float DataPillarWidth; + + px_float GuidesLineWidth; + px_vector vData; + px_vector vFlagLine; + + px_int helpLineX,helpLineY; +}PX_Object_Coordinates; + + +PX_Object_Coordinates *PX_Object_GetCoordinates(PX_Object *pObject); +// +px_void PX_Object_CoordinatesSetMinVerticalPixelDividing(PX_Object *pObject,int val); +px_void PX_Object_CoordinatesSetMinHorizontalPixelDividing(PX_Object *pObject,int val); +px_void PX_Object_CoordinatesSetHorizontalDividing(PX_Object *pObject,int Count); +px_void PX_Object_CoordinatesSetLeftVerticalDividing(PX_Object *pObject,int Count); +px_void PX_Object_CoordinatesSetRightVerticalDividing(PX_Object *pObject,int Count); +px_void PX_Object_CoordinatesSetStyle(PX_Object *pObject,PX_OBJECT_COORDINATES_LINEMODE mode); +px_void PX_Object_CoordinatesSetScaleEnabled(PX_Object *pObject,px_bool Enabled); +px_void PX_Object_CoordinatesSetGuidesVisible(PX_Object *pObject,px_bool Visible); +px_void PX_Object_CoordinatesSetGuidesShowMode(PX_Object *pObject,PX_OBJECT_COORDINATES_GUIDESSHOWMODE mode); +px_void PX_Object_CoordinatesShowHelpLine(PX_Object *pObject,px_bool show); + +px_void PX_Object_CoordinatesSetDataLineWidth(PX_Object *pObject,px_float linewidth ); +px_void PX_Object_CoordinatesSetDataShow(PX_Object *pObject,px_int index,px_bool show ); +px_void PX_Object_CoordinatesSetGuidesLineWidth(PX_Object *pObject,px_float linewidth); +px_void PX_Object_CoordinatesSetTitleFontSize(PX_Object *pObject,int size); +px_void PX_Object_CoordinatesSetTitleFontColor(PX_Object *pObject,px_color clr); +px_void PX_Object_CoordinatesSetDashLineColor(PX_Object *pObject,px_color clr); +px_void PX_Object_CoordinatesSetTitleLeftShow(PX_Object *pObject,px_bool bshow); +px_void PX_Object_CoordinatesSetTitleRightShow(PX_Object *pObject,px_bool bshow); +px_void PX_Object_CoordinatesSetHorizontalShow(PX_Object *pObject,px_bool bshow); +px_void PX_Object_CoordinatesSetFloatFlagFormatHorizontal(PX_Object *pObject,const char *fmt); +px_void PX_Object_CoordinatesSetIntFlagFormatHorizontal(PX_Object *pObject,const char *fmt); +px_void PX_Object_CoordinatesSetFloatFlagFormatVerticalLeft(PX_Object *pObject,const char *fmt); +px_void PX_Object_CoordinatesSetIntFlagFormatVerticalLeft(PX_Object *pObject,const char *fmt); +px_void PX_Object_CoordinatesSetFloatFlagFormatVerticalRight(PX_Object *pObject,const char *fmt); +px_void PX_Object_CoordinatesSetIntFlagFormatVericalRight(PX_Object *pObject,const char *fmt); + + + +px_void PX_Object_CoordinatesSetHorizontalMin(PX_Object *pObject,double Min); +px_void PX_Object_CoordinatesSetHorizontalMax(PX_Object *pObject,double Max); +px_void PX_Object_CoordinatesSetLeftVerticalMin(PX_Object *pObject,double Min); +px_void PX_Object_CoordinatesSetLeftVerticalMax(PX_Object *pObject,double Max); +px_void PX_Object_CoordinatesSetRightVerticalMax(PX_Object *pObject,double Max); +px_void PX_Object_CoordinatesSetRightVerticalMin(PX_Object *pObject,double Min); + +px_void PX_Object_CoordinatesSetBorderColor(PX_Object *pObject,px_color clr); +PX_Object_CoordinateData *PX_Object_CoordinatesGetCoordinateData(PX_Object *pObject,px_int index); +int PX_Object_CoordinatesGetCoordinateWidth(PX_Object *pObject); +int PX_Object_CoordinatesGetCoordinateHeight(PX_Object *pObject); +//px_void PX_Object_CoordinatesSetTitleLeft(PX_Object *pObject,const px_char * title); +//px_void PX_Object_CoordinatesSetTitleRight(PX_Object *pObject,const px_char * title); +px_void PX_Object_CoordinatesSetTitleTop(PX_Object *pObject,const px_char * title); +px_void PX_Object_CoordinatesSetTitleBottom(PX_Object *pObject,const px_char * title); + + +px_void PX_Object_CoordinatesSetMarkValueEnabled(PX_Object *pObject,px_bool Enabled); +px_void PX_Object_CoordinatesSetFontColor(PX_Object *pObject,px_color clr); +px_void PX_Object_CoordinatesClearContext(PX_Object *pObject); +px_void PX_Object_CoordinatesClearFlagLine(PX_Object *pObject); +px_void PX_Object_CoordinatesAddData(PX_Object *pObject,PX_Object_CoordinateData data); +px_void PX_Object_CoordinatesAddCoordinateFlagLine(PX_Object *pObject,PX_Object_CoordinateFlagLine Line); +// +px_void PX_Object_CoordinatesSetMargin(PX_Object_Coordinates *pcd,int Left,int Right,int Top,int Bottom); +px_void PX_Object_CoordinatesRestoreCoordinates(PX_Object *pObject); +PX_Object *PX_Object_CoordinatesCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height); + + +#define PX_OBJECT_FILTER_EDITOR_MAX_PT 256 +#define PX_OBJECT_FILTER_EDITOR_DEFAULT_RADIUS 6 + +typedef enum +{ + PX_OBJECT_FILTER_TYPE_Liner, + PX_OBJECT_FILTER_TYPE_dB, +}PX_OBJECT_FILTER_TYPE; + + +typedef struct +{ + px_int x,y; + px_bool bselect; + px_bool bCursor; +}PX_Object_FilterEditor_OperatorPoint; + + +typedef struct +{ + px_bool ShowHelpLine; + px_color FontColor; + px_color borderColor; + px_color helpLineColor; + px_color ptColor; + px_bool showHorizontal; + int FontSize; + px_int HorizontalDividing; + px_int VerticalDividing; + px_point DragStartPoint; + px_point lastAdjustPoint; + px_point DragingPoint; + px_int bSelectDrag; + px_int bAdjust; + px_int opCount; + px_int radius; + px_double rangedb; + PX_OBJECT_FILTER_TYPE FilterType; + PX_Object_FilterEditor_OperatorPoint pt[PX_OBJECT_FILTER_EDITOR_MAX_PT]; +}PX_Object_FilterEditor; + +PX_Object_FilterEditor *PX_Object_GetFilterEditor(PX_Object *Object); + +PX_Object *PX_Object_FilterEditorCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,PX_OBJECT_FILTER_TYPE type); +px_void PX_Object_FilterEditorSethelpLineColor(PX_Object *Object,px_color clr); +px_void PX_Object_FilterEditorSetptColor(PX_Object *Object,px_color clr); + +px_void PX_Object_FilterEditorSetOperateCount(PX_Object *Object,px_int opcount); +px_void PX_Object_FilterEditorSetType(PX_Object *Object,PX_OBJECT_FILTER_TYPE type); +px_void PX_Object_FilterEditorSetHorizontalShow(PX_Object *Object,px_bool HorizontalShow); +px_void PX_Object_FilterEditorReset(PX_Object *Object); +px_void PX_Object_FilterEditorSetRange(PX_Object *Object,px_double range); +px_void PX_Object_FilterEditorSetFontColor(PX_Object *Object,px_color clr); +px_void PX_Object_FilterEditorSetBorderColor(PX_Object *Object,px_color clr); +px_void PX_Object_FilterEditorSethelpLineColor(PX_Object *Object,px_color clr); +px_void PX_Object_FilterEditorSetFontSize(PX_Object *Object,px_int size); +px_void PX_Object_FilterEditorSetHorizontalDividing(PX_Object *Object,px_int div); +px_void PX_Object_FilterEditorSetVerticalDividing(PX_Object *Object,px_int div); +px_void PX_Object_FilterEditorMapData(PX_Object *Object,px_double data[],px_int size); +px_double PX_Object_FilterEditorMapValue(PX_Object *Object,px_double precent); + + +#define PX_OBJECT_CHECKBOX_MAX_CONTENT 64 + + +typedef enum +{ + PX_OBJECT_CHECKBOX_STATE_ONCURSOR, + PX_OBJECT_CHECKBOX_STATE_ONPUSH, + PX_OBJECT_CHECKBOX_STATE_NORMAL, +}PX_Object_CHECKBOX_STATE; + +typedef struct +{ + px_dword Align; + px_bool Border; + px_color TextColor; + px_color BorderColor; + px_color BackgroundColor; + px_color CursorColor; + px_color PushColor; + px_char Text[PX_OBJECT_CHECKBOX_MAX_CONTENT]; + px_bool bCheck; + PX_Object_CHECKBOX_STATE state; +}PX_Object_CheckBox; + +PX_Object_CheckBox *PX_Object_GetCheckBox(PX_Object *Object); +PX_Object * PX_Object_CheckBoxCreate(px_memorypool *mp, PX_Object *Parent,px_int x,px_int y,px_int Width,px_int Height,const char text[]); +px_bool PX_Object_CheckBoxGetCheck(PX_Object *Object); +px_void PX_Object_CheckBoxSetBackgroundColor(PX_Object *Object,px_color clr); +px_void PX_Object_CheckBoxSetBorderColor(PX_Object *Object,px_color clr); +px_void PX_Object_CheckBoxSetPushColor(PX_Object *Object,px_color clr); +px_void PX_Object_CheckBoxSetCursorColor(PX_Object *Object,px_color clr); +px_void PX_Object_CheckBoxSetTextColor(PX_Object *Object,px_color clr); +#endif \ No newline at end of file diff --git a/code/PainterEngine/Kernel/PX_Partical.c b/code/PainterEngine/Kernel/PX_Partical.c new file mode 100644 index 0000000000000000000000000000000000000000..6bc7d15b07456e16715d69171413a9187135965a --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Partical.c @@ -0,0 +1,616 @@ +#include "PX_Partical.h" +/* +set Partical_Init_Info +{ +int generateDuration; +0 +int maxCount; +1 +float forceX +2 ,forceY +3,forceZ +4; +float resistanceK +5; +int launchCount +6; +} +*/ + +static px_bool PX_Partical_Rand(PX_ScriptVM_Instance *ins) +{ + PX_ScriptVM_RET(ins,PX_ScriptVM_Variable_float(PX_rand()*1.0f/PX_RAND_MAX)); + return PX_TRUE; +} + +px_int PX_ParticalVM_ConvertToInt(PX_SCRIPTVM_VARIABLE var) +{ + if (var.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + return var._int; + } + else if(var.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + return (px_int)var._float; + } + else if(var.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + return PX_atoi(var._string.buffer); + } + else + return 0; +} + +px_float PX_ParticalVM_ConvertToFloat(PX_SCRIPTVM_VARIABLE var) +{ + if (var.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + return (px_float)var._int; + } + else if(var.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + return var._float; + } + else if(var.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + return PX_atof(var._string.buffer); + } + else + return 0; +} + +px_bool PX_ParticalLauncherCreateEx(PX_Partical_Launcher *env,px_memorypool *mp,PX_ParticalLauncher_InitializeInfo Info) +{ + env->VM_Instance=PX_NULL; + + env->mp=mp; + env->genIndex=0; + env->texture=Info.tex; + env->generateDuration=Info.generateDuration; + env->elpased=0; + env->maxCount=Info.maxCount; + env->force=Info.force; + env->resistanceK=Info.resistanceK; + env->launchCount=Info.launchCount; + env->Create_func=Info.Create_func; + env->Update_func=Info.Update_func; + env->launcherVelocity=PX_POINT(0,0,0); + env->launcherPosition=PX_POINT(0,0,0); + env->user=PX_NULL; + env->velocity.x=0; + env->velocity.y=0; + env->velocity.z=0; + env->direction.x=1; + env->direction.y=0; + env->direction.z=0; + env->CreateParticalFuncIndex=-1; + env->UpdateParitcalFuncIndex=-1; + env->user=Info.user; + + env->ParticalPool=(PX_Partical_Atom *)MP_Malloc(mp,sizeof(PX_Partical_Atom)*env->maxCount); + PX_memset(env->ParticalPool,0,sizeof(PX_Partical_Atom)*env->maxCount); + return PX_TRUE; +} + +px_bool PX_ParticalLauncherCreate(PX_Partical_Launcher *env,px_memorypool *mp,px_texture *tex,PX_ScriptVM_Instance *pIns,px_char *Initfunc,px_char *_createfunc,px_char *_updatefunc) +{ + px_int vm_ptr; + + env->VM_Instance=pIns; + env->mp=mp; + env->genIndex=0; + env->texture=tex; + + env->Create_func=PX_NULL; + env->Update_func=PX_NULL; + + if (!PX_ScriptVM_InstanceRunFunction(env->VM_Instance,0,PX_NULL,Initfunc,PX_NULL,0)) + { + PX_ScriptVM_InstanceFree(env->VM_Instance); + return PX_FALSE; + } + + if(PX_ScriptVM_REG_RETURN(env->VM_Instance).type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + PX_ScriptVM_InstanceFree(env->VM_Instance); + return PX_FALSE; + } + vm_ptr=PX_ScriptVM_REG_RETURN(env->VM_Instance)._int; + + + + env->generateDuration=PX_ParticalVM_ConvertToInt(PX_ScriptVM_GLOBAL(env->VM_Instance,vm_ptr+0)); + + env->elpased=0; + + env->maxCount=PX_ParticalVM_ConvertToInt(PX_ScriptVM_GLOBAL(env->VM_Instance,vm_ptr+1)); + + env->force.x=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,vm_ptr+2)); + + env->force.y=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,vm_ptr+3)); + + env->force.z=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,vm_ptr+4)); + + env->resistanceK=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,vm_ptr+5)); + + env->launchCount=PX_ParticalVM_ConvertToInt(PX_ScriptVM_GLOBAL(env->VM_Instance,vm_ptr+6)); + + env->velocity.x=0; + env->velocity.y=0; + env->velocity.z=0; + + env->direction.x=1; + env->direction.y=0; + env->direction.z=0; + + env->launcherPosition.x=0; + env->launcherPosition.y=0; + env->launcherPosition.z=0; + + env->launcherVelocity.x=0; + env->launcherVelocity.y=0; + env->launcherVelocity.z=0; + + env->CreateParticalFuncIndex=PX_ScriptVM_GetFunctionIndex(env->VM_Instance,_createfunc); + env->UpdateParitcalFuncIndex=PX_ScriptVM_GetFunctionIndex(env->VM_Instance,_updatefunc); + + env->ParticalPool=(PX_Partical_Atom *)MP_Malloc(mp,sizeof(PX_Partical_Atom)*env->maxCount); + PX_memset(env->ParticalPool,0,sizeof(PX_Partical_Atom)*env->maxCount); + + PX_ScriptVM_RegistryHostFunction(env->VM_Instance,"PARTICAL_RAND",PX_Partical_Rand); + + return PX_TRUE; +} + +px_void PX_ParticalLauncherSetLauncherPosition(PX_Partical_Launcher *launcher,px_point position) +{ + launcher->launcherPosition=position; +} + +/* +set PARTICAL_ATOM_INFO +{ +float size; +0 +float rotation; +1 +float mass;+2 +float alpha;+3 +int aliveTime;+4 +float x +5,y +6,z +7; +float vx +8,vy +9,vz +10; +float hdrR +11,hdrG +12,hdrB +13; +float rotationSpeed +14; +float alphaIncrement +15; +float sizeIncrement +16; +}; + +void Partical_Atom_Create(PARTICAL_ATOM_INFO *atomInfo) +{ + +} + +void Partical_Atom_Update(PARTICAL_ATOM_INFO *atomInfo) +{ + +} +*/ +px_void PX_ParticalAtomUpdate(PX_Partical_Launcher *env,PX_Partical_Atom *pAtom,px_dword elpased) +{ + px_int updateTime; + px_int atomTime; + px_float vx,vy,vz,rX,rY,rZ; + px_float resisForceX,resisForceY,resisForceZ; + PX_SCRIPTVM_MEMORY_PTR memptr; + PX_SCRIPTVM_VARIABLE var; + if (elpased==0) + { + return; + } + if (pAtom->aliveTime) + { + if (pAtom->aliveTimealiveTime=0; + return; + } + else + { + pAtom->aliveTime-=elpased; + pAtom->elpasedTime+=elpased; + } + + updateTime=elpased; + + while (updateTime) + { + if (updateTime>PX_PARTICAL_ATOM_TIME) + { + atomTime=PX_PARTICAL_ATOM_TIME; + updateTime-=PX_PARTICAL_ATOM_TIME; + } + else + { + atomTime=updateTime; + updateTime=0; + } + + pAtom->size+=pAtom->sizeIncrement*atomTime/1000; + pAtom->alpha+=pAtom->alphaIncrement*atomTime/1000; + pAtom->rotation+=pAtom->roatationSpeed*atomTime/1000; + + vx=pAtom->velocity.x*atomTime/1000+env->force.x/pAtom->mass*0.5f*atomTime*atomTime/1000000; + vy=pAtom->velocity.y*atomTime/1000+env->force.y/pAtom->mass*0.5f*atomTime*atomTime/1000000; + vz=pAtom->velocity.z*atomTime/1000+env->force.z/pAtom->mass*0.5f*atomTime*atomTime/1000000; + + resisForceX=(env->resistanceK*pAtom->velocity.x); + resisForceY=(env->resistanceK*pAtom->velocity.y); + resisForceZ=(env->resistanceK*pAtom->velocity.z); + + rX=resisForceX/pAtom->mass*0.5f*atomTime*atomTime/1000000; + rY=resisForceY/pAtom->mass*0.5f*atomTime*atomTime/1000000; + rZ=resisForceZ/pAtom->mass*0.5f*atomTime*atomTime/1000000; + + + if (vx*vx+vy*vy+vz*vzvelocity.x=0; + pAtom->velocity.y=0; + pAtom->velocity.z=0; + } + else + { + pAtom->position.x+=vx-rX; + pAtom->position.y+=vy-rY; + pAtom->position.z+=vz-rZ; + + pAtom->velocity.x+=(env->force.x-resisForceX)/pAtom->mass*PX_PARTICAL_ATOM_TIME/1000; + pAtom->velocity.y+=(env->force.y-resisForceY)/pAtom->mass*PX_PARTICAL_ATOM_TIME/1000; + pAtom->velocity.z+=(env->force.z-resisForceZ)/pAtom->mass*PX_PARTICAL_ATOM_TIME/1000; + } + } + + /* + set PARTICAL_ATOM_INFO + { + float size; +0 + float rotation; +1 + float mass;+2 + float alpha;+3 + int aliveTime;+4 + float x +5,y +6,z +7; + float vx +8,vy +9,vz +10; + float hdrR; + float hdrG; + float hdrB; + float RotationSpeed; + float sizeIncrement; + float alphaIncrement; + }; + */ + if (env->Update_func) + { + env->Update_func(env,pAtom); + } + else if(env->UpdateParitcalFuncIndex!=-1) + { + if(!PX_ScriptVM_LocalAlloc(env->VM_Instance,18,&memptr)) + return; + + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+0)=PX_ScriptVM_Variable_float(pAtom->size); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+1)=PX_ScriptVM_Variable_float(pAtom->rotation); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+2)=PX_ScriptVM_Variable_float(pAtom->mass); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+3)=PX_ScriptVM_Variable_float(pAtom->alpha); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+4)=PX_ScriptVM_Variable_int(pAtom->aliveTime); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+5)=PX_ScriptVM_Variable_int(pAtom->elpasedTime); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+6)=PX_ScriptVM_Variable_float(pAtom->position.x); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+7)=PX_ScriptVM_Variable_float(pAtom->position.y); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+8)=PX_ScriptVM_Variable_float(pAtom->position.z); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+9)=PX_ScriptVM_Variable_float(pAtom->velocity.x); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+10)=PX_ScriptVM_Variable_float(pAtom->velocity.y); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+11)=PX_ScriptVM_Variable_float(pAtom->velocity.z); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+12)=PX_ScriptVM_Variable_float(pAtom->hdrR); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+13)=PX_ScriptVM_Variable_float(pAtom->hdrG); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+14)=PX_ScriptVM_Variable_float(pAtom->hdrB); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+15)=PX_ScriptVM_Variable_float(pAtom->roatationSpeed); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+16)=PX_ScriptVM_Variable_float(pAtom->sizeIncrement); + PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+17)=PX_ScriptVM_Variable_float(pAtom->alphaIncrement); + var=PX_ScriptVM_Variable_int(memptr.ptr); + if(PX_ScriptVM_InstanceRunFunctionIndex(env->VM_Instance,0,PX_NULL,env->UpdateParitcalFuncIndex,&var,1)) + { + pAtom->size=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+0)); + pAtom->rotation=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+1)); + pAtom->mass=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+2)); + pAtom->alpha=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+3)); + pAtom->aliveTime=PX_ParticalVM_ConvertToInt(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+4)); + pAtom->elpasedTime=PX_ParticalVM_ConvertToInt(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+5)); + pAtom->position.x=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+6)); + pAtom->position.y=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+7)); + pAtom->position.z=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+8)); + pAtom->velocity.x=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+9)); + pAtom->velocity.y=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+10)); + pAtom->velocity.z=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+11)); + pAtom->hdrR=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+12)); + pAtom->hdrG=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+13)); + pAtom->hdrB=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+14)); + pAtom->roatationSpeed=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+15)); + pAtom->sizeIncrement=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+16)); + pAtom->alphaIncrement=PX_ParticalVM_ConvertToFloat(PX_ScriptVM_GLOBAL(env->VM_Instance,memptr.ptr+17)); + } + + PX_ScriptVM_LocalFree(env->VM_Instance,&memptr); + } + + if (pAtom->size<0) + { + pAtom->size=0; + } + + if (pAtom->hdrR<0) + { + pAtom->hdrR=0; + } + + if (pAtom->hdrG<0) + { + pAtom->hdrG=0; + } + + if (pAtom->hdrB<0) + { + pAtom->hdrB=0; + } + + if (pAtom->alpha<0) + { + pAtom->alpha=0; + } + } + + +} + +px_bool PX_ParticalLauncherUpdate(PX_Partical_Launcher *env,px_dword elpased) +{ + px_int i,j; + px_uint redTime; + px_int gencount=0; + PX_Partical_Atom *pAtom; + PX_SCRIPTVM_VARIABLE var; + env->lefttopX=0; + env->leftTopY=0; + env->rightBottomX=0; + env->rightBottomY=0; + + for (i=0;i<(px_int)env->maxCount;i++) + { + pAtom=&env->ParticalPool[i]; + PX_ParticalAtomUpdate(env,pAtom,elpased); + if (pAtom->aliveTime!=0) + { + if (env->ParticalPool[i].position.xlefttopX) + { + env->lefttopX=env->ParticalPool[i].position.x; + } + if (env->ParticalPool[i].position.x>env->rightBottomX) + { + env->rightBottomX=env->ParticalPool[i].position.x; + } + if (env->ParticalPool[i].position.yleftTopY) + { + env->leftTopY=env->ParticalPool[i].position.y; + } + if (env->ParticalPool[i].position.y>env->rightBottomY) + { + env->rightBottomY=env->ParticalPool[i].position.y; + } + } + } + if(env->launchCount!=0) + { + if (env->generateDuration!=0) + { + if (env->elpased/env->generateDuration<((env->elpased+elpased)/env->generateDuration)) + { + gencount=(env->elpased+elpased)/env->generateDuration-env->elpased/env->generateDuration; + redTime=env->elpased+elpased-(env->elpased+env->generateDuration)/env->generateDuration*env->generateDuration; + } + else + gencount=0; + } + else + { + gencount=env->maxCount; + redTime=elpased; + } + + + for (i=0;ilaunchCount!=0) + { + for (j=0;j<(px_int)env->maxCount;j++) + { + if (env->ParticalPool[j].aliveTime==0) + { + if (env->Create_func) + { + env->ParticalPool[j]=env->Create_func(env,env->genIndex); + } + else if (env->CreateParticalFuncIndex!=-1) + { + var=PX_ScriptVM_Variable_int(env->genIndex); + if(PX_ScriptVM_InstanceRunFunctionIndex(env->VM_Instance,0,PX_NULL,env->CreateParticalFuncIndex,&var,1)) + { + /* + set PARTICAL_ATOM_INFO + { + float size; +0 + float rotation; +1 + float mass;+2 + float alpha;+3 + int aliveTime;+4 + int elpased;+5 + float x +6,y +7,z +8; + float vx +9,vy +10,vz +11; + float hdrR +12,hdrG +13,hdrB +14; + }; + */ + env->ParticalPool[j].size=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,0)._float; + env->ParticalPool[j].rotation=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,1)._float; + env->ParticalPool[j].mass=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,2)._float; + env->ParticalPool[j].alpha=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,3)._float; + env->ParticalPool[j].aliveTime=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,4)._int; + env->ParticalPool[j].elpasedTime=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,5)._int; + env->ParticalPool[j].position.x=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,6)._float; + env->ParticalPool[j].position.y=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,7)._float; + env->ParticalPool[j].position.z=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,8)._float; + env->ParticalPool[j].velocity.x=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,9)._float+env->velocity.x; + env->ParticalPool[j].velocity.y=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,10)._float+env->velocity.y; + env->ParticalPool[j].velocity.z=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,11)._float+env->velocity.z; + env->ParticalPool[j].hdrR=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,12)._float; + env->ParticalPool[j].hdrG=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,13)._float; + env->ParticalPool[j].hdrB=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,14)._float; + env->ParticalPool[j].roatationSpeed=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,15)._float; + env->ParticalPool[j].sizeIncrement=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,16)._float; + env->ParticalPool[j].alphaIncrement=PX_ScriptVM_RETURN_POINTER(env->VM_Instance,17)._float; + } + } + //apply direction & launch postion + env->ParticalPool[j].velocity=PX_PointReflectX(env->direction,env->ParticalPool[j].velocity); + env->ParticalPool[j].velocity=PX_PointAdd(env->ParticalPool[j].velocity,env->launcherVelocity); + env->ParticalPool[j].position=PX_PointReflectX(env->direction,env->ParticalPool[j].position); + env->ParticalPool[j].position=PX_PointAdd(env->ParticalPool[j].position,env->launcherPosition); + + + PX_ParticalAtomUpdate(env,&env->ParticalPool[j],redTime); + + if (env->ParticalPool[j].position.xlefttopX) + { + env->lefttopX=env->ParticalPool[j].position.x; + } + if (env->ParticalPool[j].position.x>env->rightBottomX) + { + env->rightBottomX=env->ParticalPool[j].position.x; + } + if (env->ParticalPool[j].position.yleftTopY) + { + env->leftTopY=env->ParticalPool[j].position.y; + } + if (env->ParticalPool[j].position.y>env->rightBottomY) + { + env->rightBottomY=env->ParticalPool[j].position.y; + } + if(redTime>env->generateDuration) + { + redTime-=env->generateDuration; + } + else + { + redTime=0; + } + + env->genIndex++; + if (env->launchCount>0) + { + env->launchCount--; + } + break; + } + } + } + + } + } + env->elpased+=elpased; + return PX_TRUE; +} + +px_bool PX_ParticalIsInSurfaceRegion(px_point atomPoint,px_int atomWidth,px_int atomHeight,px_float scale,px_int surfaceWidth,px_int surfaceHeight) +{ + px_rect atomRect; + px_rect surfaceRect; + atomRect.x=atomPoint.x; + atomRect.y=atomPoint.y; + atomRect.width=atomWidth*scale; + atomRect.height=atomHeight*scale; + + surfaceRect.x=0; + surfaceRect.y=0; + surfaceRect.height=(px_float)surfaceHeight; + surfaceRect.width=(px_float)surfaceWidth; + + return PX_isRectCrossRect(atomRect,surfaceRect); +} + +px_void PX_ParticalLauncherRender(px_surface *surface,PX_Partical_Launcher *env,px_point offset) +{ + px_int i; + PX_TEXTURERENDER_BLEND blend; + + if (!PX_isRectCrossRect(PX_RECT(0,0,(px_float)surface->width,(px_float)surface->height),\ + PX_RECT(env->lefttopX+offset.x,env->leftTopY+offset.y,env->rightBottomX-env->lefttopX+1,env->rightBottomY-env->leftTopY+1))) + { + return; + } + + if (env->texture==PX_NULL) + { + PX_ASSERT(); + } + + for (i=0;i<(px_int)env->maxCount;i++) + { + + px_point pos=env->ParticalPool[i].position; + pos=PX_PointAdd(pos,offset); + + if (env->ParticalPool[i].aliveTime!=0&&env->ParticalPool[i].size!=0) + { + if (env->ParticalPool[i].size!=1.0||env->ParticalPool[i].rotation!=0) + { + if (env->ParticalPool[i].size<0) + { + env->ParticalPool[i].size=0; + continue; + } + if(env->ParticalPool[i].alpha==1.0&&env->ParticalPool[i].hdrR==1.0f&&env->ParticalPool[i].hdrG==1.0f&&env->ParticalPool[i].hdrB==1.0f) + PX_TextureRenderEx(surface,env->texture,(px_int)(pos.x),(px_int)(pos.y),PX_TEXTURERENDER_REFPOINT_CENTER,PX_NULL,env->ParticalPool[i].size,env->ParticalPool[i].rotation); + else + { + blend.alpha=env->ParticalPool[i].alpha; + blend.hdr_R=env->ParticalPool[i].hdrR; + blend.hdr_G=env->ParticalPool[i].hdrG; + blend.hdr_B=env->ParticalPool[i].hdrB; + PX_TextureRenderEx(surface,env->texture,(px_int)(pos.x),(px_int)(pos.y),PX_TEXTURERENDER_REFPOINT_CENTER,&blend,env->ParticalPool[i].size,env->ParticalPool[i].rotation); + } + } + else + { + if(env->ParticalPool[i].alpha==1.0&&env->ParticalPool[i].hdrR==1.0f&&env->ParticalPool[i].hdrG==1.0f&&env->ParticalPool[i].hdrB==1.0f) + PX_TextureRender(surface,env->texture,(px_int)(pos.x),(px_int)(pos.y),PX_TEXTURERENDER_REFPOINT_CENTER,PX_NULL); + else + { + blend.alpha=env->ParticalPool[i].alpha; + blend.hdr_R=env->ParticalPool[i].hdrR; + blend.hdr_G=env->ParticalPool[i].hdrG; + blend.hdr_B=env->ParticalPool[i].hdrB; + PX_TextureRender(surface,env->texture,(px_int)(pos.x),(px_int)(pos.y),PX_TEXTURERENDER_REFPOINT_CENTER,&blend); + } + } + } + } + +} + +px_void PX_ParticalLauncherFree(PX_Partical_Launcher *env) +{ + MP_Free(env->mp,env->ParticalPool); +} + +px_bool PX_ParticalLauncherSetCreateFuncIndex(PX_Partical_Launcher *launcher,px_char *func_Name) +{ + return launcher->CreateParticalFuncIndex=PX_ScriptVM_GetFunctionIndex(launcher->VM_Instance,func_Name)!=-1; +} + +px_bool PX_ParticalLauncherSetUpdateFuncIndex(PX_Partical_Launcher *launcher,px_char *func_Name) +{ + return launcher->UpdateParitcalFuncIndex=PX_ScriptVM_GetFunctionIndex(launcher->VM_Instance,func_Name)!=-1; +} + +px_void PX_ParticalLauncherSetDirection(PX_Partical_Launcher *launcher,px_point direction) +{ + launcher->direction=direction; +} + diff --git a/code/PainterEngine/Kernel/PX_Partical.h b/code/PainterEngine/Kernel/PX_Partical.h new file mode 100644 index 0000000000000000000000000000000000000000..03369aa150bcba75fce98afd97fc51a209033d6b --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Partical.h @@ -0,0 +1,81 @@ +#ifndef PX_PARTICAL_H +#define PX_PARTICAL_H +#include "PX_Script_VM.h" + +#define PX_PARTICAL_ATOM_TIME 8 //8ms for partical atom +#define PX_PARTICAL_ONETIME_GENMAX 65535 +#define PX_PARTICAL_TRANSFORM_CACHE (8*1024*1024+16)//8M for transform + + +typedef struct +{ + px_float size; + px_float rotation; + px_float mass; + px_float alpha; + px_dword aliveTime; + px_dword elpasedTime; + px_point position; + px_point velocity; + px_float hdrR,hdrG,hdrB; + float roatationSpeed; + float sizeIncrement; + float alphaIncrement; + px_void *User; +}PX_Partical_Atom; +struct _PX_Partical_Launcher; +typedef PX_Partical_Atom (* PX_ParticalLauncher_CreateAtom)(struct _PX_Partical_Launcher *launcher,px_int index); +typedef px_void (* PX_ParticalLauncher_UpdateAtom)(struct _PX_Partical_Launcher *launcher,PX_Partical_Atom *pAtom); + +typedef struct _PX_Partical_Launcher +{ + px_point launcherPosition; + px_point launcherVelocity; + + px_dword generateDuration; + px_dword elpased; + px_uint maxCount; + px_int launchCount; + px_uint genIndex; + px_point force; + px_float resistanceK; + px_void *user; + px_point velocity; + px_point direction; + px_uint CreateParticalFuncIndex; + px_uint UpdateParitcalFuncIndex; + px_float lefttopX,leftTopY,rightBottomX,rightBottomY; + + PX_ParticalLauncher_CreateAtom Create_func; + PX_ParticalLauncher_UpdateAtom Update_func; + + px_memorypool *mp; + px_texture *texture; + PX_Partical_Atom *ParticalPool; + PX_ScriptVM_Instance *VM_Instance; +}PX_Partical_Launcher; + +typedef struct +{ + px_texture *tex; + px_void *user; + px_int generateDuration; + px_int maxCount; + px_point force; + px_float resistanceK; + px_int launchCount; + PX_ParticalLauncher_CreateAtom Create_func; + PX_ParticalLauncher_UpdateAtom Update_func; +}PX_ParticalLauncher_InitializeInfo; + +px_bool PX_ParticalLauncherCreateEx(PX_Partical_Launcher *launcher,px_memorypool *mp,PX_ParticalLauncher_InitializeInfo Info); +px_bool PX_ParticalLauncherCreate(PX_Partical_Launcher *launcher,px_memorypool *mp,px_texture *tex,PX_ScriptVM_Instance *pIns,px_char *Initfunc,px_char *_createfunc,px_char *_updatefunc); +px_void PX_ParticalLauncherSetLauncherPosition(PX_Partical_Launcher *launcher,px_point position); +px_bool PX_ParticalLauncherSetCreateFuncIndex(PX_Partical_Launcher *launcher,px_char *func_Name); +px_bool PX_ParticalLauncherSetUpdateFuncIndex(PX_Partical_Launcher *launcher,px_char *func_Name); +px_void PX_ParticalLauncherSetDirection(PX_Partical_Launcher *launcher,px_point direction); + +px_bool PX_ParticalLauncherUpdate(PX_Partical_Launcher *launcher,px_dword elpased); +px_void PX_ParticalLauncherRender(px_surface *surface,PX_Partical_Launcher *launcher,px_point position); +px_void PX_ParticalLauncherFree(PX_Partical_Launcher *launcher); +#endif diff --git a/code/PainterEngine/Kernel/PX_Resource.c b/code/PainterEngine/Kernel/PX_Resource.c new file mode 100644 index 0000000000000000000000000000000000000000..d338aaac6097236d02504b3cdee60c8c8683d9e0 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Resource.c @@ -0,0 +1,306 @@ +#include "PX_Resource.h" + +px_bool PX_ResourceLibraryInit(px_memorypool *mp,PX_ResourceLibrary *lib) +{ + lib->mp=mp; + PX_MapInit(mp,&lib->map); + PX_ListInit(mp,&lib->resources); + return PX_TRUE; +} + +px_bool PX_ResourceLibraryLoad(PX_ResourceLibrary *lib,PX_RESOURCE_TYPE type,px_byte *data,px_uint datasize,const px_char key[]) +{ + PX_Resource res; + res.Type=type; + + if (PX_ResourceLibraryGet(lib,key)) + { + PX_ResourceLibraryDelete(lib,key); + } + + switch (type) + { + case PX_RESOURCE_TYPE_NULL: + break; + case PX_RESOURCE_TYPE_TEXTURE: + if(!PX_TextureCreateFromMemory(lib->mp,data,datasize,&res.texture)) + return PX_FALSE; + break; + case PX_RESOURCE_TYPE_SHAPE: + if(!PX_ShapeCreateFromMemory(lib->mp,data,datasize,&res.shape)) + return PX_FALSE; + break; + case PX_RESOURCE_TYPE_SCRIPT: + /* + if (data[0]!='P'||data[1]!='A'||data[2]!='S'||data[3]!='M') + { + PX_SCRIPT_LIBRARY compilelib; + px_string asmcodeString; + px_memory bin; + MP_Reset(mptemp); + if(!PX_ScriptCompilerInit(&compilelib,mptemp)) + { + return PX_FALSE; + } + + if(!PX_ScriptCompilerLoad(&compilelib,(px_char *)data)) + { + PX_ScriptCompilerFree(&compilelib); + return PX_FALSE; + } + + PX_StringInit(mptemp,&asmcodeString); + + + if(PX_ScriptCompilerCompile(&compilelib,"main",&asmcodeString,256)) + { + PX_ScriptCompilerFree(&compilelib); + + PX_ScriptAsmOptimization(&asmcodeString); + PX_MemoryInit(mptemp,&bin); + + if(!PX_ScriptAsmCompile(mptemp,asmcodeString.buffer,&bin)) + { + PX_MemoryFree(&bin); + PX_StringFree(&asmcodeString); + PX_ScriptCompilerFree(&compilelib); + return PX_FALSE; + } + + if(!PX_ScriptVM_InstanceInit(&res.Script,lib->mp,bin.buffer,bin.usedsize)) + { + PX_MemoryFree(&bin); + PX_StringFree(&asmcodeString); + PX_ScriptCompilerFree(&compilelib); + return PX_FALSE; + } + + PX_MemoryFree(&bin); + } + else + { + PX_StringFree(&asmcodeString); + PX_ScriptCompilerFree(&compilelib); + MP_Reset(mptemp); + return PX_FALSE; + } + + PX_StringFree(&asmcodeString); + + MP_Reset(mptemp); + } + else + */ + if(!PX_ScriptVM_InstanceInit(&res.Script,lib->mp,data,datasize)) + return PX_FALSE; + break; + case PX_RESOURCE_TYPE_ANIMATIONLIBRARY: + if(!PX_AnimationLibraryCreateFromMemory(lib->mp,&res.animationlibrary,data,datasize)) + return PX_FALSE; + break; + case PX_RESOURCE_TYPE_SOUND: + if (PX_WaveVerify(data,datasize)) + { + px_uint offset=0,pcmSize,woffset; + pcmSize=PX_WaveGetPCMSize(data,datasize); + + if (pcmSize!=0) + { + PX_WAVE_DATA_BLOCK *pBlock; + PX_WAVE_RIFF_HEADER *pHeader=(PX_WAVE_RIFF_HEADER *)data; + PX_WAVE_FMT_BLOCK *pfmt_block; + res.sound.mp=lib->mp; + res.sound.buffer=(px_byte *)MP_Malloc(lib->mp,pcmSize); + res.sound.size=pcmSize; + res.sound.channel=PX_WaveGetChannel(data,pcmSize)==1?PX_SOUND_CHANNEL_ONE:PX_SOUND_CHANNEL_DOUBLE; + if (!res.sound.buffer) + { + return PX_FALSE; + } + pfmt_block=(PX_WAVE_FMT_BLOCK *)(data+sizeof(PX_WAVE_RIFF_HEADER)); + offset+=sizeof(PX_WAVE_RIFF_HEADER); + offset+=8; + offset+=pfmt_block->dwFmtSize; + + pcmSize=0; + woffset=0; + while (offsetszDataID,"data",4)) + { + offset+=pBlock->dwDataSize+sizeof(PX_WAVE_DATA_BLOCK); + continue; + } + offset+=sizeof(PX_WAVE_DATA_BLOCK); + PX_memcpy(res.sound.buffer+woffset,data+offset,pBlock->dwDataSize); + offset+=pBlock->dwDataSize; + woffset+=pBlock->dwDataSize; + } + } + else + return PX_FALSE; + } + else + { + return PX_FALSE; + } + break; + case PX_RESOURCE_TYPE_DATA: + PX_MemoryInit(lib->mp,&res.data); + if (!PX_MemoryCat(&res.data,data,datasize)) + { + PX_MemoryFree(&res.data); + return PX_FALSE; + } + break; + } + + PX_MapPut(&lib->map,key,PX_ListPush(&lib->resources,&res,sizeof(res))); + return PX_TRUE; +} + +px_void PX_ResourceLibraryFree(PX_ResourceLibrary *lib) +{ + PX_Resource *pres; + px_list_node *pNode=lib->resources.head; + while (pNode) + { + pres=(PX_Resource *)pNode->pdata; + switch(pres->Type) + { + case PX_RESOURCE_TYPE_NULL: + break; + case PX_RESOURCE_TYPE_TEXTURE: + PX_TextureFree(&pres->texture); + break; + case PX_RESOURCE_TYPE_SCRIPT: + PX_ScriptVM_InstanceFree(&pres->Script); + break; + case PX_RESOURCE_TYPE_ANIMATIONLIBRARY: + PX_AnimationLibraryFree(&pres->animationlibrary); + break; + case PX_RESOURCE_TYPE_DATA: + PX_MemoryFree(&pres->data); + break; + } + pNode=pNode->pnext; + } + PX_ListFree(&lib->resources); + PX_MapFree(&lib->map); + +} + +PX_Resource * PX_ResourceLibraryGet(PX_ResourceLibrary *lib,const px_char key[]) +{ + return (PX_Resource *)PX_MapGet(&lib->map,key); +} + +px_bool PX_ResourceLibraryAddTexture(PX_ResourceLibrary *lib,const px_char key[],px_texture *pTexture) +{ + PX_Resource res; + res.Type=PX_RESOURCE_TYPE_TEXTURE; + if(!PX_TextureCopy(lib->mp,pTexture,&res.texture))return PX_FALSE; + PX_MapPut(&lib->map,key,PX_ListPush(&lib->resources,&res,sizeof(res))); + return PX_TRUE; +} + +px_void PX_ResourceLibraryDelete(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource * pres,*pnodeRes; + + pres=(PX_Resource *)PX_MapGet(&lib->map,key); + if (pres) + { + px_list_node *pNode=lib->resources.head; + while (pNode) + { + pnodeRes=(PX_Resource *)pNode->pdata; + if (pnodeRes==pres) + { + switch(pres->Type) + { + case PX_RESOURCE_TYPE_NULL: + break; + case PX_RESOURCE_TYPE_TEXTURE: + PX_TextureFree(&pres->texture); + break; + case PX_RESOURCE_TYPE_SCRIPT: + PX_ScriptVM_InstanceFree(&pres->Script); + break; + case PX_RESOURCE_TYPE_ANIMATIONLIBRARY: + PX_AnimationLibraryFree(&pres->animationlibrary); + break; + case PX_RESOURCE_TYPE_DATA: + PX_MemoryFree(&pres->data); + break; + } + PX_ListPop(&lib->resources,pNode); + PX_MapErase(&lib->map,key); + return; + } + pNode=pNode->pnext; + } + } +} + +px_texture * PX_ResourceLibraryGetTexture(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource *pres=PX_ResourceLibraryGet(lib,key); + if (pres&&pres->Type==PX_RESOURCE_TYPE_TEXTURE) + { + return &pres->texture; + } + return PX_NULL; +} + +px_shape * PX_ResourceLibraryGetShape(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource *pres=PX_ResourceLibraryGet(lib,key); + if (pres&&pres->Type==PX_RESOURCE_TYPE_SHAPE) + { + return &pres->shape; + } + return PX_NULL; +} + +PX_Animationlibrary * PX_ResourceLibraryGetAnimationLibrary(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource *pres=PX_ResourceLibraryGet(lib,key); + if (pres&&pres->Type==PX_RESOURCE_TYPE_ANIMATIONLIBRARY) + { + return &pres->animationlibrary; + } + return PX_NULL; +} + +PX_ScriptVM_Instance * PX_ResourceLibraryGetScript(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource *pres=PX_ResourceLibraryGet(lib,key); + if (pres&&pres->Type==PX_RESOURCE_TYPE_SCRIPT) + { + return &pres->Script; + } + return PX_NULL; +} + +px_memory * PX_ResourceLibraryGetData(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource *pres=PX_ResourceLibraryGet(lib,key); + if (pres&&pres->Type==PX_RESOURCE_TYPE_DATA) + { + return &pres->data; + } + return PX_NULL; +} + +PX_SoundData * PX_ResourceLibraryGetSound(PX_ResourceLibrary *lib,const px_char key[]) +{ + PX_Resource *pres=PX_ResourceLibraryGet(lib,key); + if (pres&&pres->Type==PX_RESOURCE_TYPE_SOUND) + { + return &pres->sound; + } + return PX_NULL; +} + diff --git a/code/PainterEngine/Kernel/PX_Resource.h b/code/PainterEngine/Kernel/PX_Resource.h new file mode 100644 index 0000000000000000000000000000000000000000..f0551753a107e7ccaf03ede3fda783916b6d6766 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Resource.h @@ -0,0 +1,63 @@ +#ifndef PX_RESOURCE_H +#define PX_RESOURCE_H + +#include "../Core/PX_Core.h" +#include "PX_Script_VM.h" +#include "PX_Animation.h" +#include "PX_Partical.h" +#include "PX_Script_Interpreter.h" +#include "PX_Script_ASMCompiler.h" + +typedef enum +{ + PX_RESOURCE_TYPE_NULL, + PX_RESOURCE_TYPE_ANIMATIONLIBRARY, + PX_RESOURCE_TYPE_SCRIPT, + PX_RESOURCE_TYPE_TEXTURE, + PX_RESOURCE_TYPE_SHAPE, + PX_RESOURCE_TYPE_SOUND, + PX_RESOURCE_TYPE_DATA, +}PX_RESOURCE_TYPE; + + +typedef struct +{ + PX_RESOURCE_TYPE Type; + union + { + px_texture texture; + px_shape shape; + PX_Animationlibrary animationlibrary; + PX_ScriptVM_Instance Script; + PX_SoundData sound; + px_memory data; + }; +}PX_Resource; + +typedef struct +{ + px_memorypool *mp; + px_list resources; + px_map map; +}PX_ResourceLibrary; + + + +px_bool PX_ResourceLibraryInit(px_memorypool *mp,PX_ResourceLibrary *lib); +px_bool PX_ResourceLibraryLoad(PX_ResourceLibrary *lib,PX_RESOURCE_TYPE type,px_byte *data,px_uint datasize,const px_char key[]); +px_bool PX_ResourceLibraryAddTexture(PX_ResourceLibrary *lib,const px_char key[],px_texture *pTexture); +PX_Resource * PX_ResourceLibraryGet(PX_ResourceLibrary *lib,const px_char key[]); +px_texture *PX_ResourceLibraryGetTexture(PX_ResourceLibrary *lib,const px_char key[]); +px_shape *PX_ResourceLibraryGetShape(PX_ResourceLibrary *lib,const px_char key[]); +PX_Animationlibrary *PX_ResourceLibraryGetAnimationLibrary(PX_ResourceLibrary *lib,const px_char key[]); +PX_ScriptVM_Instance *PX_ResourceLibraryGetScript(PX_ResourceLibrary *lib,const px_char key[]); +PX_SoundData *PX_ResourceLibraryGetSound(PX_ResourceLibrary *lib,const px_char key[]); +px_memory *PX_ResourceLibraryGetData(PX_ResourceLibrary *lib,const px_char key[]); + +px_void PX_ResourceLibraryDelete(PX_ResourceLibrary *lib,const px_char key[]); +px_void PX_ResourceLibraryFree(PX_ResourceLibrary *lib); + + +#endif + + diff --git a/code/PainterEngine/Kernel/PX_ScriptCore.h b/code/PainterEngine/Kernel/PX_ScriptCore.h new file mode 100644 index 0000000000000000000000000000000000000000..3178094a35376536a70617fdb7a4386d7df712fb --- /dev/null +++ b/code/PainterEngine/Kernel/PX_ScriptCore.h @@ -0,0 +1,339 @@ +#ifndef __PX_SCRIPT_H +#define __PX_SCRIPT_H +#include "../Core/PX_Core.h" +#include "PX_Lexer.h" + +//special register IP,SP,BP,rRET + +//register r0~r15 + + + +//Pretreatment +//#include [name] + +//special +//ASSUME [name] [name] +//.GLOBAL [int] +//.STACK [int] +//.THREAD [int] + +//instructions + + +//mov [reg,local,global],[num,string,reg,local,global] + +//add [reg,local,global],[num,reg,local,global] +//sub [reg,local,global],[num,reg,local,global] +//div [reg,local,global],[num,reg,local,global] +//mul [reg,local,global],[num,reg,local,global] +//mod [reg,local,global],[int,reg,local,global] +//shl [reg,local,global],[int,reg,local,global] +//shr [reg,local,global],[int,reg,local,global] +//or [reg,local,global],[num,reg,local,global] +//xor [reg,local,global],[num,reg,local,global] +//pow [reg,local,global],[num,reg,local,global] +//sin [reg,local,global],[num,reg,local,global] +//cos [reg,local,global],[num,reg,local,global] +//int [reg,local,global] +//flt [reg,local,global] + +//strlen [reg,local,global],[reg,local,global,string] +//strcat [reg,local,global],[reg,local,global,string] +//strrep [reg,local,global],[reg,local,global,string],[reg,local,global,string] +//strchr [reg,local,global],[reg,local,global,string],[reg,local,global,int] +//strtoi [reg,local,global],[reg,local,global,string] +//strtof [reg,local,global],[reg,local,global,string] +//strfri [reg,local,global],[reg,local,global,int] +//strfrf [reg,local,global],[reg,local,global,float] +//strset [reg,local,global],[reg,local,global,int],[reg,local,global,string,int] +//strtmem [reg,local,global] +//asc [reg,local,global],[reg,local,global,string] + + +//membyte [reg,local,global],[reg,local,global,int],[reg,local,global,memory] +//memset [reg,local,global],[reg,local,global,int],[reg,local,global,memory] +//memcpy [reg,local,global],[reg,local,global,int],[reg,local,global,memory] +//memfind [reg,local,global],[reg,local,global,memory],[reg,local,global,memory] +//memlen [reg,local,global],[reg,local,global,memory] +//memcat [reg,local,global],[reg,local,global,memory] +//memtstr [reg,local,global] + +//not [reg,local,global] +//inv [reg,local,global] + +//jmp [reg,num,local,global,label] +//je [num,string,reg,local,global],[num,string,reg,local,global],[reg,int,local,global,label] +//jne [num,string,reg,local,global],[num,string,reg,local,global],[reg,int,local,global,label] +//jl [num,string,reg,local,global],[num,string,reg,local,global],[reg,int,local,global,label] +//jle [num,string,reg,local,global],[num,string,reg,local,global],[reg,int,local,global,label] +//jg [num,string,reg,local,global],[num,string,reg,local,global],[reg,int,local,global,label] +//jge [num,string,reg,local,global],[num,string,reg,local,global],[reg,int,local,global,label] + +//call [reg,int,local,global,label,host] + +//push [num,reg,local,global] +//pop [reg,local,global] + +//ret + +//binary format +//opcode 1 byte +//optype 3 byte +//operand [0,3] byte + +#define PX_SCRIPT_MAX_FUNC_NAME_SIZE 32 + +enum PX_SCRIPT_ASM_INSTR_OPCODE +{ + PX_SCRIPT_ASM_INSTR_OPCODE_MOV=1, + PX_SCRIPT_ASM_INSTR_OPCODE_ADD, + PX_SCRIPT_ASM_INSTR_OPCODE_SUB, + PX_SCRIPT_ASM_INSTR_OPCODE_DIV, + PX_SCRIPT_ASM_INSTR_OPCODE_MUL, + PX_SCRIPT_ASM_INSTR_OPCODE_MOD, + PX_SCRIPT_ASM_INSTR_OPCODE_SHL, + PX_SCRIPT_ASM_INSTR_OPCODE_SHR, + PX_SCRIPT_ASM_INSTR_OPCODE_AND, + PX_SCRIPT_ASM_INSTR_OPCODE_OR, + PX_SCRIPT_ASM_INSTR_OPCODE_XOR, + PX_SCRIPT_ASM_INSTR_OPCODE_ANDL, + PX_SCRIPT_ASM_INSTR_OPCODE_ORL, + PX_SCRIPT_ASM_INSTR_OPCODE_POW, + PX_SCRIPT_ASM_INSTR_OPCODE_SIN, + PX_SCRIPT_ASM_INSTR_OPCODE_COS, + PX_SCRIPT_ASM_INSTR_OPCODE_INT, + PX_SCRIPT_ASM_INSTR_OPCODE_FLT, + PX_SCRIPT_ASM_INSTR_OPCODE_STRLEN, + PX_SCRIPT_ASM_INSTR_OPCODE_STRCAT, + PX_SCRIPT_ASM_INSTR_OPCODE_STRREP, + PX_SCRIPT_ASM_INSTR_OPCODE_STRCHR, + PX_SCRIPT_ASM_INSTR_OPCODE_STRTOI, + PX_SCRIPT_ASM_INSTR_OPCODE_STRTOF, + PX_SCRIPT_ASM_INSTR_OPCODE_STRFRI, + PX_SCRIPT_ASM_INSTR_OPCODE_STRFRF, + PX_SCRIPT_ASM_INSTR_OPCODE_STRSET, + PX_SCRIPT_ASM_INSTR_OPCODE_STRFIND, + PX_SCRIPT_ASM_INSTR_OPCODE_STRTMEM, + PX_SCRIPT_ASM_INSTR_OPCODE_ASC, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMBYTE, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMSET, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMFIND, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMLEN, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMTRM, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMCAT, + PX_SCRIPT_ASM_INSTR_OPCODE_MEMTSTR, + PX_SCRIPT_ASM_INSTR_OPCODE_DATACPY, + PX_SCRIPT_ASM_INSTR_OPCODE_INV, + PX_SCRIPT_ASM_INSTR_OPCODE_NOT, + PX_SCRIPT_ASM_INSTR_OPCODE_NEG, + PX_SCRIPT_ASM_INSTR_OPCODE_JMP, + PX_SCRIPT_ASM_INSTR_OPCODE_JE, + PX_SCRIPT_ASM_INSTR_OPCODE_JNE, + PX_SCRIPT_ASM_INSTR_OPCODE_JGE, + PX_SCRIPT_ASM_INSTR_OPCODE_JLE, + PX_SCRIPT_ASM_INSTR_OPCODE_JG, + PX_SCRIPT_ASM_INSTR_OPCODE_JL, + + PX_SCRIPT_ASM_INSTR_OPCODE_LGE, + PX_SCRIPT_ASM_INSTR_OPCODE_LGNE, + PX_SCRIPT_ASM_INSTR_OPCODE_LGZ, + PX_SCRIPT_ASM_INSTR_OPCODE_LGGZ, + PX_SCRIPT_ASM_INSTR_OPCODE_LGGEZ, + PX_SCRIPT_ASM_INSTR_OPCODE_LGLZ, + PX_SCRIPT_ASM_INSTR_OPCODE_LGLEZ, + + PX_SCRIPT_ASM_INSTR_OPCODE_CALL, + PX_SCRIPT_ASM_INSTR_OPCODE_PUSH, + PX_SCRIPT_ASM_INSTR_OPCODE_POP, + PX_SCRIPT_ASM_INSTR_OPCODE_POPN, + PX_SCRIPT_ASM_INSTR_OPCODE_ADR, + PX_SCRIPT_ASM_INSTR_OPCODE_RET, + + PX_SCRIPT_ASM_INSTR_OPCODE_NOP, + PX_SCRIPT_ASM_INSTR_OPCODE_BPX, + PX_SCRIPT_ASM_INSTR_OPCODE_WAIT, + PX_SCRIPT_ASM_INSTR_OPCODE_SIGNAL, +}; + +enum PX_SCRIPT_ASM_OPTYPE +{ + PX_SCRIPT_ASM_OPTYPE_INT, + PX_SCRIPT_ASM_OPTYPE_FLOAT, + PX_SCRIPT_ASM_OPTYPE_REG, + PX_SCRIPT_ASM_OPTYPE_LOCAL,//mnemonic + PX_SCRIPT_ASM_OPTYPE_LOCAL_CONST, + PX_SCRIPT_ASM_OPTYPE_LOCAL_REGREF, + PX_SCRIPT_ASM_OPTYPE_LOCAL_GLOBALREF, + PX_SCRIPT_ASM_OPTYPE_LOCAL_LOCALREF, + PX_SCRIPT_ASM_OPTYPE_GLOBAL,//mnemonic + PX_SCRIPT_ASM_OPTYPE_GLOBAL_CONST, + PX_SCRIPT_ASM_OPTYPE_GLOBAL_REGREF, + PX_SCRIPT_ASM_OPTYPE_GLOBAL_GLOBALREF, + PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF, + PX_SCRIPT_ASM_OPTYPE_GLOBAL_SPREF, + PX_SCRIPT_ASM_OPTYPE_STRING, + PX_SCRIPT_ASM_OPTYPE_LABEL,//mnemonic + PX_SCRIPT_ASM_OPTYPE_HOST,//mnemonic + PX_SCRIPT_ASM_OPTYPE_MEMORY, + PX_SCRIPT_ASM_OPTYPE_BP, + PX_SCRIPT_ASM_OPTYPE_SP, + PX_SCRIPT_ASM_OPTYPE_IP, +}; +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_UNKNOW 0 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT 1 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_FLOAT 2 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM 3 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG 4 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL 8 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL 16 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING 32 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL 64 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_HOST 128 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY 256 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP 512 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP 1024 +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP 2048 + +#define PX_SCRIPT_ASM_OPERAND_ACC_TYPE_TOKEN 0xffffffff + + +#define __PX_SCRIPT_ASM_MNEMONIC_NAME_LEN 48 +#define __PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN 16 + +typedef struct __PX_SCRIPT_EXPORT_FUNCTION +{ + px_char name[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + px_int Addr; +}PX_SCRIPT_EXPORT_FUNCTION; + +typedef struct __PX_SCRIPT_ASM_LABEL_NODE +{ + px_char mnemonic[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + px_bool bfunction; + px_int binaddr; +}PX_SCRIPT_ASM_LABEL_NODE; + + +typedef struct __PX_SCRIPT_ASM_ASSUME_NODE +{ + px_string name; + px_string assume; + +}PX_SCRIPT_ASM_ASSUME_NODE; + + +typedef struct __PX_SCRIPT_ASM_STRING_NODE +{ + px_string str; + px_int addr; +}PX_SCRIPT_ASM_STRING_NODE; + +typedef struct __PX_SCRIPT_ASM_MEMORY_NODE +{ + px_memory mem; + px_int addr; +}PX_SCRIPT_ASM_MEMORY_NODE; + +typedef struct __PX_SCRIPT_ASM_HOST_NODE +{ + px_char name[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + const px_void *map; +}PX_SCRIPT_ASM_HOST_NODE; + +typedef struct __PX_SCRIPT_ASM_GRAMMAR_INSTR +{ + px_char mnemonic[__PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN]; + px_char opcode; + px_char paramCount; + px_int operandAccTypes[3]; +}PX_SCRIPT_ASM_GRAMMAR_INSTR; + +typedef struct __PX_SCRIPT_ASM_INSTR_BIN +{ + px_char opCode; + px_char optype[3]; + px_dword param[3]; + px_dword addr; + px_int opcount; +}PX_SCRIPT_ASM_INSTR_BIN; + + +typedef struct __PX_SCRIPT_ASM_COMPILER +{ + px_lexer lexer; + px_vector StreamTable; + px_list LabelTable; + px_list assumeTable; + px_list StringTable; + px_list memoriesTable; + px_list HostTable; + px_list GrammarInstrTable; + px_int globalsize; + px_int stacksize; + px_int threadcount; + px_memorypool *mp; + +}PX_SCRIPT_ASM_COMPILER; + + +typedef struct __PX_SCRIPT_ASM_HEADER +{ + ////////////////////////////////////////////////////////////////////////// + //8 bytes check + px_dword magic; + px_dword CRC; + ////////////////////////////////////////////////////////////////////////// + px_dword stacksize; + px_dword globalsize; + px_dword threadcount; + px_dword oftbin; + px_dword oftfunc; + px_dword funcCount; + px_dword ofthost; + px_dword oftmem; + px_dword memsize; + px_dword hostCount; + px_dword oftString; + px_dword stringSize; + px_dword binsize; + px_dword reserved[6]; +}PX_SCRIPT_ASM_HEADER; + +typedef enum __PX_SCRIPT_VM_VARIABLE_TYPE +{ + PX_SCRIPTVM_VARIABLE_TYPE_INT, + PX_SCRIPTVM_VARIABLE_TYPE_FLOAT, + PX_SCRIPTVM_VARIABLE_TYPE_STRING, + PX_SCRIPTVM_VARIABLE_TYPE_MEMORY, +}PX_SCRIPTVM_VARIABLE_TYPE; + +typedef struct __PX_SCRIPT_VM_VARIABLE +{ + px_int type; + union + { + px_char _byte; + px_char _char; + px_word _word; + px_dword _dword; + px_short _short; + px_int _int; + px_uint _uint; + px_float _float; + px_string _string; + px_memory _memory; + }; +}PX_SCRIPTVM_VARIABLE; + +typedef struct __PX_ASM_GRAMMAR +{ + px_lexer *lexer; + px_memorypool *mp; + px_bool bSkipSpacer; + px_bool bSkipNewline; + px_bool bLowercase; + px_vector V_SentenceMatcher; +}PX_ASM_Grammar; + +#endif \ No newline at end of file diff --git a/code/PainterEngine/Kernel/PX_Script_ASMCompiler.c b/code/PainterEngine/Kernel/PX_Script_ASMCompiler.c new file mode 100644 index 0000000000000000000000000000000000000000..39d6ce95f8429158bf25f2b68df301a7a202a51f --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Script_ASMCompiler.c @@ -0,0 +1,1993 @@ +#include "PX_Script_ASMCompiler.h" + +static px_char PX_Script_ASMError[128]; + +static px_void PX_ScriptAsmError(px_lexer *lexer,px_char *err) +{ + lexer->Sources[lexer->SourceOffset]='\0'; + + PX_Script_ASMError[0]='\0'; + if (lexer->SourceOffset>96) + { + PX_strcpy(PX_Script_ASMError,lexer->Sources+lexer->SourceOffset-96,96); + } + else + { + PX_strcpy(PX_Script_ASMError,lexer->Sources,96); + } + + PX_LOG(err); +} + +px_int PX_ScriptAsm_atoi(px_char *str) +{ + if (str[0]=='0'&&str[1]=='X') + { + return PX_htoi(str); + } + return PX_atoi(str); +} + +px_bool PX_ScriptAsm_isInt(px_char token[]) +{ + px_int i; + if (token[0]=='0'&&(token[1]=='X')) + { + i=2; + while (token[i]) + { + if ((token[i]>='0'&&token[i]<='9')||(token[i]>='A'&&token[i]<='F')) + { + i++; + continue; + } + else + { + return PX_FALSE; + } + + if (i>10) + { + return PX_FALSE; + } + } + return PX_TRUE; + } + return PX_strIsInt(token); +} + +static px_void PX_ScriptAsmRegistInstr(PX_SCRIPT_ASM_COMPILER *compiler,px_char mnemonic[__PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN],px_char opcode,px_int accType[],px_char paramcout) +{ + px_int i=0; + PX_SCRIPT_ASM_GRAMMAR_INSTR instr; + + PX_strcpy(instr.mnemonic,mnemonic,sizeof(instr.mnemonic)); + instr.opcode=opcode; + instr.paramCount=paramcout; + + for (i=0;iGrammarInstrTable,&instr,sizeof(instr)); +} +static px_void PX_ScriptAsmStringConvert(px_string *str) +{ + px_int i,j; + for (i=0;ibuffer);i++) + { + if (str->buffer[i]=='\\') + { + switch (str->buffer[i+1]) + { + case '\\': + for(j=i+1;str->buffer[j];j++) + str->buffer[j]=str->buffer[j+1]; + str->buffer[j-1]=0; + break; + case 'r': + case 'R': + str->buffer[i]='\r'; + for(j=i+1;str->buffer[j];j++) + str->buffer[j]=str->buffer[j+1]; + str->buffer[j-1]=0; + break; + case 'n': + case 'N': + str->buffer[i]='\n'; + for(j=i+1;str->buffer[j];j++) + str->buffer[j]=str->buffer[j+1]; + str->buffer[j-1]=0; + break; + case 't': + case 'T': + str->buffer[i]='\t'; + for(j=i+1;str->buffer[j];j++) + str->buffer[j]=str->buffer[j+1]; + str->buffer[j-1]=0; + break; + case '"': + str->buffer[i]='"'; + for(j=i+1;str->buffer[j];j++) + str->buffer[j]=str->buffer[j+1]; + str->buffer[j-1]=0; + break; + default: + break; + } + } + } +} + + +PX_LEXER_LEXEME_TYPE PX_ScriptAsmNexLexeme(px_lexer *lexer) +{ + PX_LEXER_LEXEME_TYPE type; + while (PX_LEXER_LEXEME_TYPE_SPACER==(type=PX_LexerGetNextLexeme(lexer))); + if (PX_strlen(lexer->CurLexeme.buffer)>__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN-1) + { + if(type!=PX_LEXER_LEXEME_TYPE_CONATINER) + { + PX_ScriptAsmError(lexer,"Script ASM Compiler:Token too long error"); + return PX_LEXER_LEXEME_TYPE_ERR; + } + } + return type; + +} + +px_bool PX_ScriptAsmIsValidToken(px_char *token) +{ + if (token[0]=='\0'||PX_charIsNumeric(token[0])) + { + return PX_FALSE; + } + while (*token) + { + if ((*token>='A'&&*token<='Z')||*token=='_'||PX_charIsNumeric(*token)) + { + token++; + continue; + } + return PX_FALSE; + } + return PX_TRUE; +} + +px_int PX_ScriptAsmGetGlobalIndex(px_char * mne) +{ + px_char data[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + PX_strcpy(data,mne,sizeof(data)); + data[PX_strlen(data)-1]='\0'; + return PX_ScriptAsm_atoi(data+sizeof("GLOBAL[")); +} + +px_int PX_ScriptAsmGetStackIndex(px_char * mne) +{ + px_char data[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + PX_strcpy(data,mne,sizeof(data)); + data[PX_strlen(data)-1]='\0'; + return PX_ScriptAsm_atoi(data+sizeof("STACK[")); +} + +px_int PX_ScriptAsmTokenType(PX_SCRIPT_ASM_COMPILER *compiler,px_char *token) +{ + px_bool bfound; + px_int matchIteration=256,i; + while (--matchIteration) + { + bfound=PX_FALSE; + for (i=0;iassumeTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_ASSUME_NODE *)(PX_ListAt(&compiler->assumeTable,i)->pdata))->name.buffer,token)) + { + token=((PX_SCRIPT_ASM_ASSUME_NODE *)(PX_ListAt(&compiler->assumeTable,i)->pdata))->assume.buffer; + bfound=PX_TRUE; + break; + } + } + if (bfound==PX_FALSE) + { + break; + } + } + if (matchIteration==0) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME too much iteration"); + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_UNKNOW; + } + if (PX_strequ(token,"SP")) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP; + } + + if (PX_strequ(token,"IP")) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP; + } + + if (PX_strequ(token,"BP")) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP; + } + + if (PX_memequ(token,"GLOBAL[",sizeof("GLOBAL[")-1)&&token[PX_strlen(token)-1]==']') + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL; + } + + if (PX_memequ(token,"LOCAL[",sizeof("LOCAL[")-1)&&token[PX_strlen(token)-1]==']') + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL; + } + + if (token[0]=='R'&&PX_strIsInt(token+1)) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG; + } + + if (token[0]=='$'&&PX_ScriptAsmIsValidToken(token+1)) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_HOST; + } + + if (token[0]=='\"'&&token[PX_strlen(token)-1]=='\"') + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING; + } + + if (token[0]=='\''&&token[PX_strlen(token)-1]=='\'') + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT; + } + + if (token[0]=='@'&&token[PX_strlen(token)-1]=='@') + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY; + } + + + + if (PX_ScriptAsm_isInt(token)) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT; + } + + if (PX_strIsFloat(token)) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_FLOAT; + } + + for (i=0;iLabelTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_LABEL_NODE *)(PX_ListAt(&compiler->LabelTable,i)->pdata))->mnemonic,token)) + { + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL; + } + } + + return PX_SCRIPT_ASM_OPERAND_ACC_TYPE_UNKNOW; +} + + +px_char PX_ScriptAsmTokenTypeToOpType(px_int TokenType) +{ + switch(TokenType) + { + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT: + return PX_SCRIPT_ASM_OPTYPE_INT; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_FLOAT: + return PX_SCRIPT_ASM_OPTYPE_FLOAT; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG: + return PX_SCRIPT_ASM_OPTYPE_REG; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL: + { + return PX_SCRIPT_ASM_OPTYPE_LOCAL; + } + break; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL: + { + return PX_SCRIPT_ASM_OPTYPE_GLOBAL; + } + break; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING: + return PX_SCRIPT_ASM_OPTYPE_STRING; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL: + return PX_SCRIPT_ASM_OPTYPE_LABEL; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_HOST: + return PX_SCRIPT_ASM_OPTYPE_HOST; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY: + return PX_SCRIPT_ASM_OPTYPE_MEMORY; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP: + return PX_SCRIPT_ASM_OPTYPE_BP; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP: + return PX_SCRIPT_ASM_OPTYPE_SP; + case PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP: + return PX_SCRIPT_ASM_OPTYPE_IP; + default: + return 0; + } +} + +static px_bool PX_ScriptASMMapAssume(PX_SCRIPT_ASM_COMPILER *compiler,px_string *mnenonic) +{ + px_bool bfound; + px_int matchIteration=256,i; + + while (--matchIteration) + { + bfound=PX_FALSE; + for (i=0;iassumeTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_ASSUME_NODE *)(PX_ListAt(&compiler->assumeTable,i)->pdata))->name.buffer,mnenonic->buffer)) + { + + PX_StringCopy(mnenonic,&(((PX_SCRIPT_ASM_ASSUME_NODE *)PX_ListAt(&compiler->assumeTable,i)->pdata)->assume)); + + bfound=PX_TRUE; + break; + } + } + if (bfound==PX_FALSE) + { + break; + } + } + if (matchIteration==0) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME too much iteration"); + return PX_FALSE; + } + return PX_TRUE; +} + +static px_bool PX_ScriptAsmLocalType(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Token,px_char *type,px_dword *index) +{ + px_string TempTokenString; + PX_StringInit(compiler->mp,&TempTokenString); + PX_StringCat(&TempTokenString,Token); + + PX_StringTrimLeft(&TempTokenString,PX_strlen("LOCAL[")); + PX_StringTrimRight(&TempTokenString,1); + + PX_ScriptASMMapAssume(compiler,&TempTokenString); + + if (PX_memequ(TempTokenString.buffer,"GLOBAL[",sizeof("GLOBAL[")-1)&&TempTokenString.buffer[PX_strlen(TempTokenString.buffer)-1]==']') + { + PX_StringTrimLeft(&TempTokenString,PX_strlen("GLOBAL[")); + PX_StringTrimRight(&TempTokenString,1); + PX_ScriptASMMapAssume(compiler,&TempTokenString); + if (!PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + PX_StringFree(&TempTokenString); + return PX_FALSE; + } + *type=PX_SCRIPT_ASM_OPTYPE_LOCAL_GLOBALREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + if (PX_memequ(TempTokenString.buffer,"LOCAL[",sizeof("LOCAL[")-1)&&TempTokenString.buffer[PX_strlen(TempTokenString.buffer)-1]==']') + { + PX_StringTrimLeft(&TempTokenString,PX_strlen("LOCAL[")); + PX_StringTrimRight(&TempTokenString,1); + PX_ScriptASMMapAssume(compiler,&TempTokenString); + + if (!PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + PX_StringFree(&TempTokenString); + return PX_FALSE; + } + *type=PX_SCRIPT_ASM_OPTYPE_LOCAL_LOCALREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + if (TempTokenString.buffer[0]=='R'&&PX_strIsInt(TempTokenString.buffer+1)) + { + *type=PX_SCRIPT_ASM_OPTYPE_LOCAL_REGREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer+1); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + if (PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + *type=PX_SCRIPT_ASM_OPTYPE_LOCAL_CONST; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + PX_StringFree(&TempTokenString); + return PX_FALSE; +} + +static px_bool PX_ScriptAsmGlobalType(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Token,px_char *type,px_dword *index) +{ + px_string TempTokenString; + PX_StringInit(compiler->mp,&TempTokenString); + + PX_StringCat(&TempTokenString,Token); + + PX_StringTrimLeft(&TempTokenString,PX_strlen("GLOBAL[")); + PX_StringTrimRight(&TempTokenString,1); + + PX_ScriptASMMapAssume(compiler,&TempTokenString); + + if (PX_memequ(TempTokenString.buffer,"GLOBAL[",sizeof("GLOBAL[")-1)&&TempTokenString.buffer[PX_strlen(TempTokenString.buffer)-1]==']') + { + PX_StringTrimLeft(&TempTokenString,PX_strlen("GLOBAL[")); + PX_StringTrimRight(&TempTokenString,1); + PX_ScriptASMMapAssume(compiler,&TempTokenString); + if (!PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + PX_StringFree(&TempTokenString); + return PX_FALSE; + } + + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_GLOBALREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + if (PX_memequ(TempTokenString.buffer,"LOCAL[",sizeof("LOCAL[")-1)&&TempTokenString.buffer[PX_strlen(TempTokenString.buffer)-1]==']') + { + PX_StringTrimLeft(&TempTokenString,PX_strlen("LOCAL[")); + PX_StringTrimRight(&TempTokenString,1); + PX_ScriptASMMapAssume(compiler,&TempTokenString); + if (!PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + PX_StringFree(&TempTokenString); + return PX_FALSE; + } + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + if (PX_memequ(TempTokenString.buffer,"BP+",sizeof("BP+")-1)&&PX_ScriptAsm_isInt(TempTokenString.buffer+sizeof("BP+")-1)) + { + PX_StringTrimLeft(&TempTokenString,PX_strlen("BP+")); + + PX_ScriptASMMapAssume(compiler,&TempTokenString); + if (!PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + PX_StringFree(&TempTokenString); + return PX_FALSE; + } + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + else if (PX_strequ(TempTokenString.buffer,"BP")) + { + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF; + *index=0; + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + + if (PX_memequ(TempTokenString.buffer,"SP+",sizeof("SP+")-1)&&PX_ScriptAsm_isInt(TempTokenString.buffer+sizeof("SP+")-1)) + { + PX_StringTrimLeft(&TempTokenString,PX_strlen("SP+")); + PX_ScriptASMMapAssume(compiler,&TempTokenString); + if (!PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + PX_StringFree(&TempTokenString); + return PX_FALSE; + } + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_SPREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + else if (PX_strequ(TempTokenString.buffer,"SP")) + { + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_SPREF; + *index=0; + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + + if (TempTokenString.buffer[0]=='R'&&PX_strIsInt(TempTokenString.buffer+1)) + { + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_REGREF; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer+1); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + + + if (PX_ScriptAsm_isInt(TempTokenString.buffer)) + { + *type=PX_SCRIPT_ASM_OPTYPE_GLOBAL_CONST; + *index=PX_ScriptAsm_atoi(TempTokenString.buffer); + PX_StringFree(&TempTokenString); + return PX_TRUE; + } + PX_StringFree(&TempTokenString); + return PX_FALSE; +} + + +px_void PX_ScriptAsmUpdateAssumeTable(PX_SCRIPT_ASM_COMPILER *compiler,px_char *name,px_char *assume) +{ + px_int i; + PX_SCRIPT_ASM_ASSUME_NODE newNode; + for (i=0;iassumeTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_ASSUME_NODE *)(PX_ListAt(&compiler->assumeTable,i)->pdata))->name.buffer,name)) + { + PX_StringClear(&PX_LISTAT(PX_SCRIPT_ASM_ASSUME_NODE,&compiler->assumeTable,i)->assume); + PX_StringCat(&PX_LISTAT(PX_SCRIPT_ASM_ASSUME_NODE,&compiler->assumeTable,i)->assume,assume); + return; + } + } + PX_StringInit(compiler->mp,&newNode.assume); + PX_StringInit(compiler->mp,&newNode.name); + PX_StringCat(&newNode.assume,assume); + PX_StringCat(&newNode.name,name); + + PX_ListPush(&compiler->assumeTable,&newNode,sizeof(PX_SCRIPT_ASM_ASSUME_NODE)); +} + +px_bool PX_ScriptAsmAddSourceLabel(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Name,px_bool bFunction) +{ + px_int i; + PX_SCRIPT_ASM_LABEL_NODE label; + for (i=0;iLabelTable.size;i++) + { + if (PX_strequ(PX_LISTAT(PX_SCRIPT_ASM_LABEL_NODE,&compiler->LabelTable,i)->mnemonic,Name)) + { + PX_ScriptAsmError(&compiler->lexer,"Label name redefined."); + return PX_FALSE; + } + } + PX_strcpy(label.mnemonic,Name,sizeof(label.mnemonic)); + label.bfunction=bFunction; + PX_ListPush(&compiler->LabelTable,&label,sizeof(label)); + return PX_TRUE; +} + +px_bool PX_ScriptAsmUpdateLabelAddr(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Name,px_int addr) +{ + px_int i; + for (i=0;iLabelTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_LABEL_NODE *)(PX_ListAt(&compiler->LabelTable,i)->pdata))->mnemonic,Name)) + { + ((PX_SCRIPT_ASM_LABEL_NODE *)(PX_ListAt(&compiler->LabelTable,i)->pdata))->binaddr=addr; + return PX_TRUE; + } + } + return PX_FALSE; +} + +px_int PX_ScriptAsmGetLabelIndex(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Name) +{ + px_int i; + for (i=0;iLabelTable.size;i++) + { + if (PX_strequ(PX_LISTAT(PX_SCRIPT_ASM_LABEL_NODE,&compiler->LabelTable,i)->mnemonic,Name)) + { + return i; + } + } + return -1; +} + +px_int PX_ScriptAsmGetFuncCount(PX_SCRIPT_ASM_COMPILER *compiler) +{ + px_int i; + px_int count=0; + for (i=0;iLabelTable.size;i++) + { + if (PX_LISTAT(PX_SCRIPT_ASM_LABEL_NODE,&compiler->LabelTable,i)->bfunction) + { + count++; + } + } + return count; +} + +px_int PX_ScriptAsmStringSize(PX_SCRIPT_ASM_COMPILER *compiler) +{ + px_int i; + px_int size=0; + for (i=0;iStringTable.size;i++) + { + size+= (PX_strlen(((PX_SCRIPT_ASM_STRING_NODE *)(PX_ListAt(&compiler->StringTable,i)->pdata))->str.buffer))+1; + } + return size; +} + +px_int PX_ScriptAsmMemorySize(PX_SCRIPT_ASM_COMPILER *compiler) +{ + px_int i; + px_int size=0; + for (i=0;imemoriesTable.size;i++) + { + size+=PX_LISTAT(PX_SCRIPT_ASM_MEMORY_NODE,&compiler->memoriesTable,i)->mem.usedsize+4; + } + return size; +} + +px_void PX_ScriptAsmAddStringConst(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Str) +{ + px_int i; + PX_SCRIPT_ASM_STRING_NODE stringNode,*pLastNode; + for (i=0;iStringTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_STRING_NODE *)(PX_ListAt(&compiler->StringTable,i)->pdata))->str.buffer,Str)) + { + return; + } + } + PX_StringInit(compiler->mp,&stringNode.str); + if(compiler->StringTable.size!=0) + { + pLastNode=(PX_SCRIPT_ASM_STRING_NODE *)(PX_ListAt(&compiler->StringTable,compiler->StringTable.size-1)->pdata); + stringNode.addr=pLastNode->addr+PX_strlen(pLastNode->str.buffer)+1; + } + else + stringNode.addr=0; + PX_StringCat(&stringNode.str,Str); + PX_ListPush(&compiler->StringTable,&stringNode,sizeof(stringNode)); +} + +px_bool PX_ScriptAsmAddMemoryConst(PX_SCRIPT_ASM_COMPILER *compiler,px_char *StringMap) +{ + px_char hex[3]; + px_char _byte; + PX_SCRIPT_ASM_MEMORY_NODE memoryNode,*pLastNode; + if (PX_strlen(StringMap)==0) + { + return PX_FALSE; + } + if (PX_strlen(StringMap)&1) + { + PX_ScriptAsmError(&compiler->lexer,"Invalid binary stream map"); + return PX_FALSE; + } + + PX_MemoryInit(compiler->mp,&memoryNode.mem); + + if(!PX_MemoryAlloc(&memoryNode.mem,PX_strlen(StringMap)>>1)) + return PX_FALSE; + + while (*StringMap) + { + hex[0]=*StringMap; + hex[1]=*(StringMap+1); + hex[2]=0; + + _byte=(px_char)PX_htoi(hex); + PX_MemoryCat(&memoryNode.mem,&_byte,1); + StringMap+=2; + } + + if(compiler->memoriesTable.size!=0) + { + pLastNode=PX_LISTAT(PX_SCRIPT_ASM_MEMORY_NODE,&compiler->memoriesTable,compiler->memoriesTable.size-1); + memoryNode.addr=pLastNode->addr+pLastNode->mem.usedsize+sizeof(px_dword); + } + else + memoryNode.addr=0; + + PX_ListPush(&compiler->memoriesTable,&memoryNode,sizeof(memoryNode)); + return PX_TRUE; +} + +px_dword PX_ScriptAsmGetStringAddr(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Str) +{ + px_int i; + for (i=0;iStringTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_STRING_NODE *)(PX_ListAt(&compiler->StringTable,i)->pdata))->str.buffer,Str)) + { + return ((PX_SCRIPT_ASM_STRING_NODE *)(PX_ListAt(&compiler->StringTable,i)->pdata))->addr; + } + } + return 0; +} + +px_dword PX_ScriptAsmGetMemoryAddr(PX_SCRIPT_ASM_COMPILER *compiler,px_char *StringMap) +{ + px_int i; + px_char hex[3]; + px_char _byte; + PX_SCRIPT_ASM_MEMORY_NODE memoryNode; + + if (PX_strlen(StringMap)&1) + { + PX_ScriptAsmError(&compiler->lexer,"Invalid binary stream map"); + return PX_FALSE; + } + + PX_MemoryInit(compiler->mp,&memoryNode.mem); + PX_MemoryAlloc(&memoryNode.mem,PX_strlen(StringMap)>>1); + while (*StringMap) + { + hex[0]=*StringMap; + hex[1]=*(StringMap+1); + hex[2]=0; + + _byte=(px_char)PX_htoi(hex); + PX_MemoryCat(&memoryNode.mem,&_byte,1); + StringMap+=2; + } + + + for (i=0;imemoriesTable.size;i++) + { + if (PX_LISTAT(PX_SCRIPT_ASM_MEMORY_NODE,&compiler->memoriesTable,i)->mem.buffer==PX_NULL) + { + continue; + } + + if (PX_memequ(PX_LISTAT(PX_SCRIPT_ASM_MEMORY_NODE,&compiler->memoriesTable,i)->mem.buffer,memoryNode.mem.buffer,memoryNode.mem.usedsize)) + { + PX_MemoryFree(&memoryNode.mem); + return PX_LISTAT(PX_SCRIPT_ASM_MEMORY_NODE,&compiler->memoriesTable,i)->addr; + } + } + PX_MemoryFree(&memoryNode.mem); + return 0; +} + +px_void PX_ScriptAsmAddHost(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Str) +{ + px_int i; + PX_SCRIPT_ASM_HOST_NODE Host; + for (i=0;iHostTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_HOST_NODE *)(PX_ListAt(&compiler->HostTable,i)->pdata))->name,Str)) + { + return; + } + } + PX_strcpy(Host.name,Str,sizeof(Host.name)); + Host.map=PX_NULL; + PX_ListPush(&compiler->HostTable,&Host,sizeof(Host)); +} + +px_int PX_ScriptAsmGetHostIndex(PX_SCRIPT_ASM_COMPILER *compiler,px_char *Str) +{ + px_int i; + for (i=0;iHostTable.size;i++) + { + if (PX_strequ(((PX_SCRIPT_ASM_HOST_NODE *)(PX_ListAt(&compiler->HostTable,i)->pdata))->name,Str)) + { + return i; + } + } + return -1; +} +px_bool PX_ScriptAsmScan(PX_SCRIPT_ASM_COMPILER *compiler) +{ + PX_LEXER_STATE state=PX_LexerGetState(&compiler->lexer); + PX_LEXER_LEXEME_TYPE type; + PX_SCRIPT_ASM_GRAMMAR_INSTR *pinstr; + px_string assumeString,assumeName; + px_string includeStr; + px_int i,j; + px_bool hasMatched; + px_char *pLexeme; + + PX_StringInit(compiler->mp,&assumeName); + PX_StringInit(compiler->mp,&assumeString); + + while ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_END) + { + pLexeme=compiler->lexer.CurLexeme.buffer; + switch(type) + { + case PX_LEXER_LEXEME_TYPE_SPACER: + case PX_LEXER_LEXEME_TYPE_NEWLINE: + continue; + break; + case PX_LEXER_LEXEME_TYPE_TOKEN: + { + //special + + //ASSUME + pLexeme=compiler->lexer.CurLexeme.buffer; + if (PX_strequ("ASSUME",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME first token should be token!"); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + if (PX_strIsNumeric(pLexeme)) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME first token should not be numeric!"); + goto _ERROR; + } + + PX_StringClear(&assumeName); + PX_StringCat(&assumeName,pLexeme); + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME second token should be token!"); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + PX_StringClear(&assumeString); + PX_StringCat(&assumeString,pLexeme); + + if (PX_strequ(assumeString.buffer,assumeName.buffer)) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME token should not equal."); + goto _ERROR; + } + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptAsmError(&compiler->lexer,"New line is expected but not found."); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + PX_ScriptAsmUpdateAssumeTable(compiler,assumeName.buffer,assumeString.buffer); + continue; + } + + //Function or Lable + if (pLexeme[PX_strlen(pLexeme)-1]==':') + { + pLexeme[PX_strlen(pLexeme)-1]='\0'; + if (PX_ScriptAsmIsValidToken(pLexeme)) + { + if (!PX_ScriptAsmAddSourceLabel(compiler,pLexeme,PX_FALSE)) + { + PX_ScriptAsmError(&compiler->lexer,"Add label error."); + goto _ERROR; + } + } + continue; + } + + + if (PX_strequ("EXPORT",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"Mnemonic \"Function\" not found!"); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + + if (!PX_strequ(pLexeme,"FUNCTION")) + { + PX_ScriptAsmError(&compiler->lexer,"Mnemonic \"Function\" not found!"); + goto _ERROR; + } + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"Function name expected but not found!"); + goto _ERROR; + } + + pLexeme=compiler->lexer.CurLexeme.buffer; + + if (pLexeme[PX_strlen(pLexeme)-1]!=':') + { + PX_ScriptAsmError(&compiler->lexer,"Function name colon expected but not found!"); + goto _ERROR; + } + pLexeme[PX_strlen(pLexeme)-1]='\0'; + if (PX_ScriptAsmIsValidToken(pLexeme)) + { + if (!PX_ScriptAsmAddSourceLabel(compiler,pLexeme,PX_TRUE)) + { + PX_ScriptAsmError(&compiler->lexer,"Add label error."); + goto _ERROR; + } + } + + continue; + } + + if (PX_strequ("FUNCTION",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"Function name expected but not found!"); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + + if (pLexeme[PX_strlen(pLexeme)-1]!=':') + { + PX_ScriptAsmError(&compiler->lexer,"Function name colon expected but not found!"); + goto _ERROR; + } + pLexeme[PX_strlen(pLexeme)-1]='\0'; + if (PX_ScriptAsmIsValidToken(pLexeme)) + { + if (!PX_ScriptAsmAddSourceLabel(compiler,pLexeme,PX_FALSE)) + { + PX_ScriptAsmError(&compiler->lexer,"Add label error."); + goto _ERROR; + } + } + + continue; + } + + //.Global + if (PX_strequ(".GLOBAL",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"Global size should be integer(const)!"); + goto _ERROR; + } + + pLexeme=compiler->lexer.CurLexeme.buffer; + if(!PX_ScriptAsm_isInt(pLexeme)) + { + PX_ScriptAsmError(&compiler->lexer,"Global size should be integer(const)!"); + goto _ERROR; + } + compiler->globalsize=PX_ScriptAsm_atoi(pLexeme); + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptAsmError(&compiler->lexer,"New line is expected but not found."); + goto _ERROR; + } + continue; + } + + //.STACK + if (PX_strequ(".STACK",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"Stack size should be integer(const)!"); + goto _ERROR; + } + + pLexeme=compiler->lexer.CurLexeme.buffer; + + if(!PX_ScriptAsm_isInt(pLexeme)) + { + PX_ScriptAsmError(&compiler->lexer,"Stack size should be integer(const)!"); + goto _ERROR; + } + compiler->stacksize=PX_ScriptAsm_atoi(pLexeme); + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptAsmError(&compiler->lexer,"New line is expected but not found."); + goto _ERROR; + } + continue; + } + + //.THREAD + if (PX_strequ(".THREAD",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"thread count should be integer(const)!"); + goto _ERROR; + } + + pLexeme=compiler->lexer.CurLexeme.buffer; + + if(!PX_ScriptAsm_isInt(pLexeme)) + { + PX_ScriptAsmError(&compiler->lexer,"thread count should be integer(const)!"); + goto _ERROR; + } + compiler->threadcount=PX_ScriptAsm_atoi(pLexeme); + + if(compiler->threadcount<=0) + { + PX_ScriptAsmError(&compiler->lexer,"thread count should not less than 1!"); + goto _ERROR; + } + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptAsmError(&compiler->lexer,"New line is expected but not found."); + goto _ERROR; + } + continue; + } + + //normal + hasMatched=PX_FALSE; + state=PX_LexerGetState(&compiler->lexer); + for (i=0;iGrammarInstrTable.size;i++) + { + pinstr=PX_LISTAT(PX_SCRIPT_ASM_GRAMMAR_INSTR,&compiler->GrammarInstrTable,i); + if (PX_strequ(pinstr->mnemonic,pLexeme)) + { + if (pinstr->paramCount==0) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_LexerSetState(state); + continue; + } + hasMatched=PX_TRUE; + break; + } + + for (j=0;jparamCount;j++) + { + type=PX_ScriptAsmNexLexeme (&compiler->lexer); + pLexeme=compiler->lexer.CurLexeme.buffer; + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN&&type!=PX_LEXER_LEXEME_TYPE_CONATINER) + { + PX_LexerSetState(state); + continue; + } + else + { + + if (PX_ScriptAsmTokenType(compiler,compiler->lexer.CurLexeme.buffer)==PX_SCRIPT_ASM_OPERAND_ACC_TYPE_UNKNOW) + { + if (!PX_ScriptAsmIsValidToken(compiler->lexer.CurLexeme.buffer)) + { + PX_ScriptAsmError(&compiler->lexer,"Unknow token type"); + goto _ERROR; + } + } + + if (PX_ScriptAsmTokenType(compiler,compiler->lexer.CurLexeme.buffer)==PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING) + { + PX_StringInit(compiler->mp,&includeStr); + PX_LexerGetIncludedString(&compiler->lexer,&includeStr); + PX_ScriptAsmStringConvert(&includeStr); + PX_ScriptAsmAddStringConst(compiler,includeStr.buffer); + PX_StringFree(&includeStr); + } + + if (PX_ScriptAsmTokenType(compiler,compiler->lexer.CurLexeme.buffer)==PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY) + { + PX_StringInit(compiler->mp,&includeStr); + PX_LexerGetIncludedString(&compiler->lexer,&includeStr); + if(!PX_ScriptAsmAddMemoryConst(compiler,includeStr.buffer)) + { + PX_ScriptAsmError(&compiler->lexer,"Invalid memories const!"); + goto _ERROR; + } + PX_StringFree(&includeStr); + } + + if (PX_ScriptAsmTokenType(compiler,compiler->lexer.CurLexeme.buffer)==PX_SCRIPT_ASM_OPERAND_ACC_TYPE_HOST) + { + PX_ScriptAsmAddHost(compiler,compiler->lexer.CurLexeme.buffer); + } + + if(jparamCount-1) + { + type=PX_ScriptAsmNexLexeme (&compiler->lexer); + pLexeme=compiler->lexer.CurLexeme.buffer; + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptAsmError(&compiler->lexer,"Parameters error."); + goto _ERROR; + } + } + } + } + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_LexerSetState(state); + continue; + } + hasMatched=PX_TRUE; + break; + } + } + if (!hasMatched) + { + PX_ScriptAsmError(&compiler->lexer,"Instr not match."); + PX_LexerSetState(state); + goto _ERROR; + } + + } + break; + } + } + PX_StringFree(&assumeName); + PX_StringFree(&assumeString); + return PX_TRUE; +_ERROR: + PX_StringFree(&assumeName); + PX_StringFree(&assumeString); + return PX_FALSE; + +} + + + + +px_bool PX_ScriptAsmCc(PX_SCRIPT_ASM_COMPILER *compiler) +{ + px_string ParamMne; + PX_LEXER_STATE state=PX_LexerGetState(&compiler->lexer); + PX_LEXER_LEXEME_TYPE type; + PX_SCRIPT_ASM_GRAMMAR_INSTR *pinstr; + PX_SCRIPT_ASM_INSTR_BIN instrbin; + px_string assumeString,assumeName; + px_int i,j,TokenType,InstrBinOffset=0; + px_float itf; + px_bool hasMatched; + px_char *pLexeme; + px_string strInc; + + PX_StringInit(compiler->mp,&ParamMne); + PX_StringInit(compiler->mp,&assumeName); + PX_StringInit(compiler->mp,&assumeString); + + + while ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_END) + { + pLexeme=compiler->lexer.CurLexeme.buffer; + switch(type) + { + case PX_LEXER_LEXEME_TYPE_SPACER: + case PX_LEXER_LEXEME_TYPE_NEWLINE: + continue; + break; + case PX_LEXER_LEXEME_TYPE_TOKEN: + { + //special + + //ASSUME + pLexeme=compiler->lexer.CurLexeme.buffer; + if (PX_strequ("ASSUME",pLexeme)) + { + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME first token should be token!"); + goto _ERROR; + } + + if (PX_strIsNumeric(pLexeme)) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME first token should not be numeric!"); + goto _ERROR; + } + + PX_StringSet(&assumeName,pLexeme); + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME second token should be token!"); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + PX_StringSet(&assumeString,pLexeme); + + if (PX_strequ(assumeString.buffer,assumeName.buffer)) + { + PX_ScriptAsmError(&compiler->lexer,"ASSUME token should not equal."); + goto _ERROR; + } + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptAsmError(&compiler->lexer,"New line is expected but not found."); + goto _ERROR; + } + pLexeme=compiler->lexer.CurLexeme.buffer; + PX_ScriptAsmUpdateAssumeTable(compiler,assumeName.buffer,assumeString.buffer); + continue; + } + + //Function or Lable + if (pLexeme[PX_strlen(pLexeme)-1]==':') + { + pLexeme[PX_strlen(pLexeme)-1]='\0'; + if (PX_ScriptAsmIsValidToken(pLexeme)) + { + if (!PX_ScriptAsmUpdateLabelAddr(compiler,pLexeme,InstrBinOffset)) + { + goto _ERROR; + } + } + continue; + } + + if (PX_strequ("EXPORT",pLexeme)) + { + PX_ScriptAsmNexLexeme (&compiler->lexer); + PX_ScriptAsmNexLexeme (&compiler->lexer); + pLexeme=compiler->lexer.CurLexeme.buffer; + pLexeme[PX_strlen(pLexeme)-1]='\0'; + if (PX_ScriptAsmIsValidToken(pLexeme)) + { + if (!PX_ScriptAsmUpdateLabelAddr(compiler,pLexeme,InstrBinOffset)) + { + goto _ERROR; + } + } + continue; + } + + if (PX_strequ("FUNCTION",pLexeme)) + { + PX_ScriptAsmNexLexeme (&compiler->lexer); + pLexeme=compiler->lexer.CurLexeme.buffer; + pLexeme[PX_strlen(pLexeme)-1]='\0'; + if (PX_ScriptAsmIsValidToken(pLexeme)) + { + if (!PX_ScriptAsmUpdateLabelAddr(compiler,pLexeme,InstrBinOffset)) + { + goto _ERROR; + } + } + continue; + } + + //.Global + if (PX_strequ(".GLOBAL",pLexeme)) + { + PX_ScriptAsmNexLexeme (&compiler->lexer); + PX_ScriptAsmNexLexeme (&compiler->lexer); + continue; + } + + //.Stack + if (PX_strequ(".STACK",pLexeme)) + { + PX_ScriptAsmNexLexeme (&compiler->lexer); + PX_ScriptAsmNexLexeme (&compiler->lexer); + continue; + } + + //.Thread + if (PX_strequ(".THREAD",pLexeme)) + { + PX_ScriptAsmNexLexeme (&compiler->lexer); + PX_ScriptAsmNexLexeme (&compiler->lexer); + continue; + } + + //normal + hasMatched=PX_FALSE; + state=PX_LexerGetState(&compiler->lexer); + for (i=0;iGrammarInstrTable.size;i++) + { + PX_memset(&instrbin,0,sizeof(instrbin)); + pinstr=(PX_SCRIPT_ASM_GRAMMAR_INSTR *)PX_ListAt(&compiler->GrammarInstrTable,i)->pdata; + if (PX_strequ(pinstr->mnemonic,pLexeme)) + { + instrbin.opCode=pinstr->opcode; + + for (j=0;jparamCount;j++) + { + type=PX_ScriptAsmNexLexeme (&compiler->lexer); + pLexeme=compiler->lexer.CurLexeme.buffer; + PX_StringClear(&ParamMne); + PX_StringCat(&ParamMne,pLexeme); + + PX_ScriptASMMapAssume(compiler,&ParamMne); + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN&&type!=PX_LEXER_LEXEME_TYPE_CONATINER) + { + PX_LexerSetState(state); + continue; + } + else + { + if (((TokenType=PX_ScriptAsmTokenType(compiler,ParamMne.buffer))&pinstr->operandAccTypes[j])==0) + { + PX_LexerSetState(state); + continue; + } + if (TokenType==PX_SCRIPT_ASM_OPERAND_ACC_TYPE_UNKNOW) + { + PX_ScriptAsmError(&compiler->lexer,"illegal Token Type"); + return PX_FALSE; + } + instrbin.optype[j]=PX_ScriptAsmTokenTypeToOpType(TokenType); + switch(instrbin.optype[j]) + { + case PX_SCRIPT_ASM_OPTYPE_BP: + case PX_SCRIPT_ASM_OPTYPE_SP: + case PX_SCRIPT_ASM_OPTYPE_IP: + instrbin.param[j]=0; + break; + + case PX_SCRIPT_ASM_OPTYPE_MEMORY: + PX_StringInit(compiler->mp,&strInc); + PX_StringCat(&strInc,ParamMne.buffer); + PX_LexerGetIncludedString(&compiler->lexer,&strInc); + instrbin.param[j]=PX_ScriptAsmGetMemoryAddr(compiler,strInc.buffer); + PX_StringFree(&strInc); + break; + case PX_SCRIPT_ASM_OPTYPE_STRING: + PX_StringInit(compiler->mp,&strInc); + PX_StringCat(&strInc,ParamMne.buffer); + PX_LexerGetIncludedString(&compiler->lexer,&strInc); + PX_ScriptAsmStringConvert(&strInc); + instrbin.param[j]=PX_ScriptAsmGetStringAddr(compiler,strInc.buffer); + PX_StringFree(&strInc); + break; + case PX_SCRIPT_ASM_OPTYPE_LABEL: + instrbin.param[j]=PX_ScriptAsmGetLabelIndex(compiler,ParamMne.buffer); + break; + case PX_SCRIPT_ASM_OPTYPE_FLOAT: + itf=PX_atof(ParamMne.buffer); + instrbin.param[j]=*((int *)&itf); + break; + case PX_SCRIPT_ASM_OPTYPE_INT: + if(ParamMne.buffer[0]!='\'') + instrbin.param[j]=PX_ScriptAsm_atoi(ParamMne.buffer); + else + instrbin.param[j]=ParamMne.buffer[1]; + break; + case PX_SCRIPT_ASM_OPTYPE_REG: + instrbin.param[j]=PX_ScriptAsm_atoi(ParamMne.buffer+1); + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL: + if (!PX_ScriptAsmLocalType(compiler,ParamMne.buffer,&instrbin.optype[j],&instrbin.param[j])) + { + PX_ScriptAsmError(&compiler->lexer,"illegal local referenced"); + return PX_FALSE; + } + + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL: + if (!PX_ScriptAsmGlobalType(compiler,ParamMne.buffer,&instrbin.optype[j],&instrbin.param[j])) + { + PX_ScriptAsmError(&compiler->lexer,"illegal local referenced"); + return PX_FALSE; + } + break; + case PX_SCRIPT_ASM_OPTYPE_HOST: + instrbin.param[j]=PX_ScriptAsmGetHostIndex(compiler,ParamMne.buffer); + break; + default: + { + PX_ScriptAsmError(&compiler->lexer,"Instrutment not match."); + PX_LexerSetState(state); + return PX_FALSE; + } + } + + } + if (j!=pinstr->paramCount-1) + { + PX_ScriptAsmNexLexeme (&compiler->lexer); + } + } + + if ((type=PX_ScriptAsmNexLexeme (&compiler->lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE&&type!=PX_LEXER_LEXEME_TYPE_END) + { + PX_LexerSetState(state); + continue; + } + hasMatched=PX_TRUE; + instrbin.addr=InstrBinOffset; + instrbin.opcount=pinstr->paramCount; + PX_VectorPushback(&compiler->StreamTable,&instrbin); + InstrBinOffset+=(4+sizeof(px_dword)*pinstr->paramCount); + break; + } + } + if (!hasMatched) + { + PX_ScriptAsmError(&compiler->lexer,"Instr not match."); + PX_LexerSetState(state); + return PX_FALSE; + } + + } + break; + } + } + PX_StringFree(&ParamMne); + PX_StringFree(&assumeName); + PX_StringFree(&assumeString); + return PX_TRUE; +_ERROR: + PX_StringFree(&ParamMne); + PX_StringFree(&assumeName); + PX_StringFree(&assumeString); + return PX_FALSE; +} + +px_void PX_ScriptAsmLink(PX_SCRIPT_ASM_COMPILER *compiler) +{ + px_int i,j; + PX_SCRIPT_ASM_INSTR_BIN *pbin=(PX_SCRIPT_ASM_INSTR_BIN *)compiler->StreamTable.data; + for (i=0;iStreamTable.size;i++) + { + for (j=0;j<3;j++) + { + if (pbin[i].optype[j]==PX_SCRIPT_ASM_OPTYPE_LABEL) + { + pbin[i].param[j]=PX_LISTAT(PX_SCRIPT_ASM_LABEL_NODE,&compiler->LabelTable,pbin[i].param[j])->binaddr; + pbin[i].optype[j]=PX_SCRIPT_ASM_OPTYPE_INT; + } + } + } +} + +static px_void PX_ScriptAsmRegistInstr_0(PX_SCRIPT_ASM_COMPILER *compiler,px_char mnemonic[__PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN],px_char opcode) +{ + PX_ScriptAsmRegistInstr(compiler,mnemonic,opcode,PX_NULL,0); +} + +static px_void PX_ScriptAsmRegistInstr_1(PX_SCRIPT_ASM_COMPILER *compiler,px_char mnemonic[__PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN],px_char opcode,px_int accType1) +{ + PX_ScriptAsmRegistInstr(compiler,mnemonic,opcode,&accType1,1); +} + +static px_void PX_ScriptAsmRegistInstr_2(PX_SCRIPT_ASM_COMPILER *compiler,px_char mnemonic[__PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN],px_char opcode,px_int accType1,px_int accType2) +{ + px_int accType[2]; + accType[0]=accType1; + accType[1]=accType2; + PX_ScriptAsmRegistInstr(compiler,mnemonic,opcode,accType,2); +} + +static px_void PX_ScriptAsmRegistInstr_3(PX_SCRIPT_ASM_COMPILER *compiler,px_char mnemonic[__PX_SCRIPT_ASM_INSTR_MNEMONIC_NAME_LEN],px_char opcode,px_int accType1,px_int accType2,px_int accType3) +{ + px_int accType[3]; + accType[0]=accType1; + accType[1]=accType2; + accType[2]=accType3; + PX_ScriptAsmRegistInstr(compiler,mnemonic,opcode,accType,3); +} + + +px_bool PX_ScriptAsmCompile(px_memorypool *mp,px_char *asmcode,px_memory *binmemory) +{ + + PX_SCRIPT_ASM_COMPILER compiler; + PX_SCRIPT_ASM_HEADER header,*pheader; + PX_SCRIPT_EXPORT_FUNCTION expFunc; + PX_SCRIPT_ASM_HOST_NODE host; + PX_SCRIPT_ASM_INSTR_BIN *pinstrs; + PX_LEXER_STATE lexerstate; + px_uint quotes; + px_int i; + px_char *pbuf; + px_dword woffset; + px_dword binsize,bufsize; + + + ////////////////////////////////////////////////////////////////////////// + //test + + compiler.mp=mp; + + PX_LexerInit(&compiler.lexer,mp); + PX_LexerRegisterComment(&compiler.lexer,";","\n"); + PX_LexerRegisterComment(&compiler.lexer,";","\r"); + PX_LexerRegisterDelimiter(&compiler.lexer,','); + PX_LexerRegisterSpacer(&compiler.lexer,' '); + PX_LexerRegisterSpacer(&compiler.lexer,'\t'); + quotes=PX_LexerRegisterContainer(&compiler.lexer,"\"","\""); + PX_LexerRegisterContainerTransfer(&compiler.lexer,quotes,'\\'); + PX_LexerRegisterContainer(&compiler.lexer,"\'","\'"); + PX_LexerRegisterContainer(&compiler.lexer,"@","@"); + + PX_VectorInit(mp,&compiler.StreamTable,sizeof(PX_SCRIPT_ASM_INSTR_BIN),256); + PX_ListInit(mp,&compiler.assumeTable); + PX_ListInit(mp,&compiler.GrammarInstrTable); + PX_ListInit(mp,&compiler.HostTable); + PX_ListInit(mp,&compiler.LabelTable); + PX_ListInit(mp,&compiler.StringTable); + PX_ListInit(mp,&compiler.memoriesTable); + + compiler.threadcount=1; + + //binary format + //opcode 1 byte + //optype 3 byte + //operand [0,3]4 byte + + PX_ScriptAsmRegistInstr_2(&compiler,"MOV",PX_SCRIPT_ASM_INSTR_OPCODE_MOV, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + + PX_ScriptAsmRegistInstr_2(&compiler,"ADD",PX_SCRIPT_ASM_INSTR_OPCODE_ADD, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"SUB",PX_SCRIPT_ASM_INSTR_OPCODE_SUB, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_IP, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"DIV",PX_SCRIPT_ASM_INSTR_OPCODE_DIV, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"MUL",PX_SCRIPT_ASM_INSTR_OPCODE_MUL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"MOD",PX_SCRIPT_ASM_INSTR_OPCODE_MOD, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"SHL",PX_SCRIPT_ASM_INSTR_OPCODE_SHL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"SHR",PX_SCRIPT_ASM_INSTR_OPCODE_SHR, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"AND",PX_SCRIPT_ASM_INSTR_OPCODE_AND, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"ANDL",PX_SCRIPT_ASM_INSTR_OPCODE_ANDL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"ORL",PX_SCRIPT_ASM_INSTR_OPCODE_ORL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"OR",PX_SCRIPT_ASM_INSTR_OPCODE_OR, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"XOR",PX_SCRIPT_ASM_INSTR_OPCODE_XOR, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"POW",PX_SCRIPT_ASM_INSTR_OPCODE_POW, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + PX_ScriptAsmRegistInstr_2(&compiler,"SIN",PX_SCRIPT_ASM_INSTR_OPCODE_SIN, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"COS",PX_SCRIPT_ASM_INSTR_OPCODE_COS, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"INT",PX_SCRIPT_ASM_INSTR_OPCODE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"FLT",PX_SCRIPT_ASM_INSTR_OPCODE_FLT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + + PX_ScriptAsmRegistInstr_2(&compiler,"STRLEN",PX_SCRIPT_ASM_INSTR_OPCODE_STRLEN, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"STRCAT",PX_SCRIPT_ASM_INSTR_OPCODE_STRCAT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"STRREP",PX_SCRIPT_ASM_INSTR_OPCODE_STRREP, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"STRCHR",PX_SCRIPT_ASM_INSTR_OPCODE_STRCHR, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"STRTOI",PX_SCRIPT_ASM_INSTR_OPCODE_STRTOI, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"STRTOF",PX_SCRIPT_ASM_INSTR_OPCODE_STRTOF, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"STRFRI",PX_SCRIPT_ASM_INSTR_OPCODE_STRFRI, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"STRFRF",PX_SCRIPT_ASM_INSTR_OPCODE_STRFRF, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_FLOAT + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"STRTMEM",PX_SCRIPT_ASM_INSTR_OPCODE_STRTMEM, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"STRSET",PX_SCRIPT_ASM_INSTR_OPCODE_STRSET, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"STRFIND",PX_SCRIPT_ASM_INSTR_OPCODE_STRFIND, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"ASC",PX_SCRIPT_ASM_INSTR_OPCODE_ASC, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"MEMBYTE",PX_SCRIPT_ASM_INSTR_OPCODE_MEMBYTE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"MEMSET",PX_SCRIPT_ASM_INSTR_OPCODE_MEMSET, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + PX_ScriptAsmRegistInstr_3(&compiler,"MEMTRM",PX_SCRIPT_ASM_INSTR_OPCODE_MEMTRM, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"MEMFIND",PX_SCRIPT_ASM_INSTR_OPCODE_MEMFIND, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"MEMLEN",PX_SCRIPT_ASM_INSTR_OPCODE_MEMLEN, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"MEMCAT",PX_SCRIPT_ASM_INSTR_OPCODE_MEMCAT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_MEMORY + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"MEMTSTR",PX_SCRIPT_ASM_INSTR_OPCODE_MEMTSTR, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"MEMTRM",PX_SCRIPT_ASM_INSTR_OPCODE_MEMTRM, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"DATACPY",PX_SCRIPT_ASM_INSTR_OPCODE_DATACPY, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"NEG",PX_SCRIPT_ASM_INSTR_OPCODE_NEG, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"INV",PX_SCRIPT_ASM_INSTR_OPCODE_INV, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"NOT",PX_SCRIPT_ASM_INSTR_OPCODE_NOT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"JMP",PX_SCRIPT_ASM_INSTR_OPCODE_JMP, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"JE",PX_SCRIPT_ASM_INSTR_OPCODE_JE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"JNE",PX_SCRIPT_ASM_INSTR_OPCODE_JNE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"JLE",PX_SCRIPT_ASM_INSTR_OPCODE_JLE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"JGE",PX_SCRIPT_ASM_INSTR_OPCODE_JGE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"JL",PX_SCRIPT_ASM_INSTR_OPCODE_JL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"JG",PX_SCRIPT_ASM_INSTR_OPCODE_JG, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"LGE",PX_SCRIPT_ASM_INSTR_OPCODE_LGE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + PX_ScriptAsmRegistInstr_3(&compiler,"LGNE",PX_SCRIPT_ASM_INSTR_OPCODE_LGNE, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING + ); + + + PX_ScriptAsmRegistInstr_1(&compiler,"LGZ",PX_SCRIPT_ASM_INSTR_OPCODE_LGZ, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"LGGZ",PX_SCRIPT_ASM_INSTR_OPCODE_LGGZ, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"LGGEZ",PX_SCRIPT_ASM_INSTR_OPCODE_LGGEZ, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"LGLZ",PX_SCRIPT_ASM_INSTR_OPCODE_LGLZ, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"LGLEZ",PX_SCRIPT_ASM_INSTR_OPCODE_LGLEZ, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"CALL",PX_SCRIPT_ASM_INSTR_OPCODE_CALL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_HOST + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"PUSH",PX_SCRIPT_ASM_INSTR_OPCODE_PUSH, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_NUM|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LABEL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_STRING|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"POP",PX_SCRIPT_ASM_INSTR_OPCODE_POP, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_BP|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_SP + ); + + PX_ScriptAsmRegistInstr_1(&compiler,"POPN",PX_SCRIPT_ASM_INSTR_OPCODE_POPN, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"ADR",PX_SCRIPT_ASM_INSTR_OPCODE_ADR, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL + ); + + PX_ScriptAsmRegistInstr_0(&compiler,"RET",PX_SCRIPT_ASM_INSTR_OPCODE_RET); + PX_ScriptAsmRegistInstr_0(&compiler,"NOP",PX_SCRIPT_ASM_INSTR_OPCODE_NOP); + PX_ScriptAsmRegistInstr_0(&compiler,"BPX",PX_SCRIPT_ASM_INSTR_OPCODE_BPX); + + PX_ScriptAsmRegistInstr_1(&compiler,"WAIT",PX_SCRIPT_ASM_INSTR_OPCODE_WAIT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + PX_ScriptAsmRegistInstr_2(&compiler,"SIGNAL",PX_SCRIPT_ASM_INSTR_OPCODE_SIGNAL, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT, + PX_SCRIPT_ASM_OPERAND_ACC_TYPE_REG|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_LOCAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_GLOBAL|PX_SCRIPT_ASM_OPERAND_ACC_TYPE_INT + ); + + if(!PX_LexerLoadSourceFromMemory(&compiler.lexer,asmcode)) + { + goto __ERROR; + } + + PX_LexerSetTokenCase(&compiler.lexer,PX_LEXER_LEXEME_CASE_UPPER); + + lexerstate=PX_LexerGetState(&compiler.lexer); + if(!PX_ScriptAsmScan(&compiler)) + goto __ERROR; + PX_LexerSetState(lexerstate); + if(!PX_ScriptAsmCc(&compiler)) + goto __ERROR; + + PX_ScriptAsmLink(&compiler); + + //Header + woffset=sizeof(PX_SCRIPT_ASM_HEADER); + PX_memset(&header,0,sizeof(header)); + header.magic=*((px_dword *)"PASM"); + header.stacksize=compiler.stacksize; + header.globalsize=compiler.globalsize; + header.threadcount=compiler.threadcount; + header.oftfunc=woffset; + header.funcCount=PX_ScriptAsmGetFuncCount(&compiler); + woffset+=header.funcCount*sizeof(PX_SCRIPT_EXPORT_FUNCTION); + header.ofthost=woffset; + header.hostCount=compiler.HostTable.size; + woffset+=header.hostCount*sizeof(PX_SCRIPT_ASM_HOST_NODE); + header.oftString=woffset; + header.stringSize=PX_ScriptAsmStringSize(&compiler); + woffset+=header.stringSize; + header.oftmem=woffset; + header.memsize=PX_ScriptAsmMemorySize(&compiler); + woffset+=header.memsize; + header.oftbin=woffset; + + PX_MemoryCat(binmemory,&header,sizeof(header)); + for (i=0;ibfunction) + { + PX_memset(expFunc.name,0,sizeof(expFunc.name)); + PX_strcpy(expFunc.name,PX_LISTAT(PX_SCRIPT_ASM_LABEL_NODE,&compiler.LabelTable,i)->mnemonic,sizeof(expFunc.name)); + expFunc.Addr=PX_LISTAT(PX_SCRIPT_ASM_LABEL_NODE,&compiler.LabelTable,i)->binaddr; + PX_MemoryCat(binmemory,&expFunc,sizeof(expFunc)); + } + } + + for (i=0;iname,sizeof(host.name)); + host.map=PX_NULL; + expFunc.Addr=0; + PX_MemoryCat(binmemory,&host,sizeof(host)); + } + + for (i=0;istr.buffer; + PX_MemoryCat(binmemory,pbuf,PX_strlen(pbuf)+1); + } + + for (i=0;imem.usedsize; + pbuf=(px_char *)PX_LISTAT(PX_SCRIPT_ASM_MEMORY_NODE,&compiler.memoriesTable,i)->mem.buffer; + PX_MemoryCat(binmemory,&bufsize,sizeof(px_dword)); + PX_MemoryCat(binmemory,pbuf,bufsize); + } + + + binsize=0; + for (i=0;iopCode,1); + PX_MemoryCat(binmemory,pinstrs->optype,3); + PX_MemoryCat(binmemory,pinstrs->param,pinstrs->opcount*sizeof(px_dword)); + binsize+=pinstrs->opcount*sizeof(px_dword)+4; + } + pheader=(PX_SCRIPT_ASM_HEADER *)binmemory->buffer; + pheader->binsize=binsize; + + pheader->CRC=PX_crc32(binmemory->buffer+8,binmemory->usedsize-8); + + //pTexpfunc=(PX_SCRIPT_EXPORT_FUNCTION *)(binmemory->buffer+header.oftfunc); + + PX_LexerFree(&compiler.lexer); + //link + PX_ListFree(&compiler.LabelTable); + PX_ListFree(&compiler.HostTable); + for (i=0;iname); + PX_StringFree(&PX_LISTAT(PX_SCRIPT_ASM_ASSUME_NODE,&compiler.assumeTable,i)->assume); + } + PX_ListFree(&compiler.assumeTable); + for (i=0;istr); + } + PX_ListFree(&compiler.StringTable); + for (i=0;imem); + } + PX_ListFree(&compiler.memoriesTable); + + PX_ListFree(&compiler.GrammarInstrTable); + PX_VectorFree(&compiler.StreamTable); + + return PX_TRUE; + + __ERROR: + //free compiler + //lexer + PX_LexerFree(&compiler.lexer); + //link + PX_ListFree(&compiler.LabelTable); + PX_ListFree(&compiler.HostTable); + for (i=0;iname); + PX_StringFree(&PX_LISTAT(PX_SCRIPT_ASM_ASSUME_NODE,&compiler.assumeTable,i)->assume); + } + PX_ListFree(&compiler.assumeTable); + for (i=0;istr); + } + PX_ListFree(&compiler.StringTable); + for (i=0;imem); + } + PX_ListFree(&compiler.memoriesTable); + + PX_ListFree(&compiler.GrammarInstrTable); + PX_VectorFree(&compiler.StreamTable); + return PX_FALSE; + +} + +px_bool PX_ScriptAsmOptimization(px_string *asmcode) +{ + px_bool opt=PX_FALSE; + + + do{ + opt=PX_FALSE; + opt=opt|PX_StringTrimer_Solve(asmcode,"SUB SP,0\n",""); + opt=opt|PX_StringTrimer_Solve(asmcode,"SUB %1,0\n",""); + opt=opt|PX_StringTrimer_Solve(asmcode,"ADD %1,0\n",""); + opt=opt|PX_StringTrimer_Solve(asmcode,"MUL %1,1\n",""); + opt=opt|PX_StringTrimer_Solve(asmcode,"PUSH %1\nPOP %1\n",""); + opt=opt|PX_StringTrimer_Solve(asmcode,"RET\nRET\n","RET\n"); + opt=opt|PX_StringTrimer_Solve(asmcode,"PUSH %1\nPOP %2\n","MOV %2,%1\n"); + opt=opt|PX_StringTrimer_Solve(asmcode,"MOV R%1,%2\nMOV %3,R%1\n","MOV %3,%2\n"); + opt=opt|PX_StringTrimer_Solve(asmcode,"MOV R2,0\nFLT R2\n","MOV R2,0.0\n"); + opt=opt|PX_StringTrimer_Solve(asmcode,"PUSH R1\nMOV R2,%1\nPOP R1\n","MOV R2,%1\n"); + }while(opt); + + return PX_TRUE; +} + +px_char * PX_ScriptASMCompilerError() +{ + return PX_Script_ASMError; +} diff --git a/code/PainterEngine/Kernel/PX_Script_ASMCompiler.h b/code/PainterEngine/Kernel/PX_Script_ASMCompiler.h new file mode 100644 index 0000000000000000000000000000000000000000..a2702c33a18b081d73b2dc4dda65603231847946 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Script_ASMCompiler.h @@ -0,0 +1,7 @@ +#ifndef PX_SCRIPT_ASM_COMPILER_H +#define PX_SCRIPT_ASM_COMPILER_H +#include "PX_ScriptCore.h" +px_bool PX_ScriptAsmCompile(px_memorypool *mp,px_char *asmcode,px_memory *binmemory); +px_bool PX_ScriptAsmOptimization(px_string *asmcode); +px_char * PX_ScriptASMCompilerError(); +#endif diff --git a/code/PainterEngine/Kernel/PX_Script_Interpreter.c b/code/PainterEngine/Kernel/PX_Script_Interpreter.c new file mode 100644 index 0000000000000000000000000000000000000000..0cbda185b18098cf4138b38b7108a8741278f3b6 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Script_Interpreter.c @@ -0,0 +1,10753 @@ +#include "PX_Script_Interpreter.h" + +static px_char *PX_Script_Keywords[]={"IF","ELSE","COMPARE","WITH","WHILE","FOR","BREAK","RETURN","SET","FUNCTION","EXPORT","HOST","INT","FLOAT","STRING","MEMORY","_BOOT","RETURN","SIZEOF","_ASM"}; +static px_char PX_Script_InterpreterError[256]; +px_void PX_ScriptParserClearStackVariables(PX_SCRIPT_Analysis *analysis) +{ + int i; + PX_SCRIPT_VARIABLES *pvar; + for (i=0;iv_variableStackTable.size;i++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variableStackTable,i); + if(pvar->bInitialized) + PX_StringFree(&pvar->GlobalInitializeValue); + + PX_StringFree(&pvar->Mnemonic); + } + PX_VectorClear(&analysis->v_variableStackTable); +} +px_void PX_ScriptTranslatorError(px_lexer *lexer,px_char *info) +{ + if (lexer) + { + lexer->Sources[lexer->SourceOffset]='\0'; + PX_Script_InterpreterError[0]='\0'; + if (lexer->SourceOffset>200) + { + PX_strcpy(PX_Script_InterpreterError,lexer->Sources+lexer->SourceOffset-200,200); + } + else + { + PX_strcpy(PX_Script_InterpreterError,lexer->Sources,200); + } + } + PX_LOG(info); +} +PX_LEXER_LEXEME_TYPE PX_ScriptTranslatorNextToken(px_lexer *lexer) +{ + PX_LEXER_LEXEME_TYPE type; + while ((type= PX_LexerGetNextLexeme(lexer))==PX_LEXER_LEXEME_TYPE_SPACER); + return type; +} +PX_LEXER_LEXEME_TYPE PX_ScriptTranslatorNextTokenSN(px_lexer *lexer) +{ + PX_LEXER_LEXEME_TYPE type; + while ((type= PX_LexerGetNextLexeme(lexer))==PX_LEXER_LEXEME_TYPE_SPACER||type==PX_LEXER_LEXEME_TYPE_NEWLINE); + + return type; +} +px_bool PX_ScriptCompilerInit(PX_SCRIPT_LIBRARY *lib,px_memorypool *mp) +{ + lib->mp=mp; + PX_VectorInit(mp,&lib->codeLibraries,sizeof(PX_SCRIPT_CODE),1); + return PX_TRUE; +} +px_void PX_ScriptCompilerFree(PX_SCRIPT_LIBRARY *lib) +{ + int i; + for (i=0;icodeLibraries.size;i++) + { + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->name); + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->code); + } + PX_VectorFree(&lib->codeLibraries); +} +px_bool PX_ScriptCompilerLoad(PX_SCRIPT_LIBRARY *lib,px_char *code) +{ + px_lexer lexer; + PX_SCRIPT_CODE scode; + int i; + scode.bInclude=PX_FALSE; + + + PX_LexerInit(&lexer,lib->mp); + PX_LexerRegisterComment(&lexer,"//","\n"); + PX_LexerRegisterComment(&lexer,"/*","*/"); + PX_LexerRegisterDelimiter(&lexer,','); + PX_LexerRegisterSpacer(&lexer,' '); + PX_LexerRegisterSpacer(&lexer,'\t'); + PX_LexerRegisterContainer(&lexer,"\"","\""); + PX_LexerSetTokenCase(&lexer,PX_LEXER_LEXEME_CASE_UPPER); + + if(!PX_LexerLoadSourceFromMemory(&lexer,code)) + { + PX_LexerFree(&lexer); + return PX_FALSE; + } + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_LexerFree(&lexer); + return PX_FALSE; + } + if (!PX_strequ(lexer.CurLexeme.buffer,"#NAME")) + { + PX_LexerFree(&lexer); + return PX_FALSE; + } + + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_SPACER) + { + PX_LexerFree(&lexer); + return PX_FALSE; + } + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_CONATINER) + { + PX_LexerFree(&lexer); + return PX_FALSE; + } + PX_StringInit(lib->mp,&scode.code); + PX_StringInit(lib->mp,&scode.name); + + + PX_StringCat(&scode.name,lexer.CurLexeme.buffer); + PX_LexerGetIncludedString(&lexer,&scode.name); + + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_NEWLINE) + { + PX_StringFree(&scode.name); + PX_StringFree(&scode.code); + PX_LexerFree(&lexer); + return PX_FALSE; + } + + PX_StringCat(&scode.code,lexer.Sources+lexer.SourceOffset); + PX_LexerFree(&lexer); + + + for (i=0;icodeLibraries.size;i++) + { + if (PX_strequ(scode.name.buffer,PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->name.buffer)) + { + PX_StringFree(&scode.name); + PX_StringFree(&scode.code); + return PX_FALSE; + } + } + + PX_VectorPushback(&lib->codeLibraries,&scode); + + return PX_TRUE; +} +static px_bool PX_ScriptParseInclude(px_string *codes,PX_SCRIPT_LIBRARY *lib,px_char *name) +{ + px_lexer lexer; + PX_LEXER_STATE lexerState; + px_int allocsize; + px_int quotes,singleQuotes,i; + px_bool bfound; + px_char *exchangeBuffer; + PX_LEXER_LEXEME_TYPE type; + + PX_LexerInit(&lexer,lib->mp); + PX_LexerRegisterDelimiter(&lexer,','); + PX_LexerRegisterDelimiter(&lexer,';'); + PX_LexerRegisterDelimiter(&lexer,'+'); + PX_LexerRegisterDelimiter(&lexer,'-'); + PX_LexerRegisterDelimiter(&lexer,'*'); + PX_LexerRegisterDelimiter(&lexer,'/'); + PX_LexerRegisterDelimiter(&lexer,'%'); + PX_LexerRegisterDelimiter(&lexer,'&'); + PX_LexerRegisterDelimiter(&lexer,'^'); + PX_LexerRegisterDelimiter(&lexer,'~'); + PX_LexerRegisterDelimiter(&lexer,'('); + PX_LexerRegisterDelimiter(&lexer,')'); + PX_LexerRegisterDelimiter(&lexer,'!'); + PX_LexerRegisterDelimiter(&lexer,'='); + PX_LexerRegisterDelimiter(&lexer,'>'); + PX_LexerRegisterDelimiter(&lexer,'<'); + PX_LexerRegisterDelimiter(&lexer,'{'); + PX_LexerRegisterDelimiter(&lexer,'}'); + PX_LexerRegisterDelimiter(&lexer,'['); + PX_LexerRegisterDelimiter(&lexer,']'); + PX_LexerRegisterSpacer(&lexer,' '); + PX_LexerRegisterSpacer(&lexer,'\t'); + quotes=PX_LexerRegisterContainer(&lexer,"\"","\""); + PX_LexerRegisterContainerTransfer(&lexer,quotes,'\\'); + singleQuotes=PX_LexerRegisterContainer(&lexer,"\'","\'"); + PX_LexerSetTokenCase(&lexer,PX_LEXER_LEXEME_CASE_UPPER); + + + if(!PX_LexerSetSourcePointer(&lexer,codes->buffer)) + goto _ERROR; + + while (PX_TRUE) + { + + lexerState=PX_LexerGetState(&lexer); + type=PX_ScriptTranslatorNextToken(&lexer); + if (type==PX_LEXER_LEXEME_TYPE_ERR) + { + PX_ScriptTranslatorError(&lexer,"lexer error."); + goto _ERROR; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + if (PX_strequ(lexer.CurLexeme.buffer,"#INCLUDE")) + { + if (PX_ScriptTranslatorNextToken(&lexer)==PX_LEXER_LEXEME_TYPE_CONATINER) + { + if (PX_LexerGetCurrentContainerType(&lexer)!=quotes) + { + PX_ScriptTranslatorError(&lexer,"syntactic error: include \"name\" expected but not found."); + goto _ERROR; + } + PX_LexerGetIncludedString(&lexer,&lexer.CurLexeme); + bfound=PX_FALSE; + for (i=0;icodeLibraries.size;i++) + { + if (PX_strequ(lexer.CurLexeme.buffer,PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->name.buffer)) + { + if (PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->bInclude!=PX_FALSE) + { + PX_ScriptTranslatorError(&lexer,"syntactic error: reduplicate included-name."); + goto _ERROR; + } + PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->bInclude=PX_TRUE; + bfound=PX_TRUE; + + + if ((type=PX_ScriptTranslatorNextToken(&lexer))!=PX_LEXER_LEXEME_TYPE_NEWLINE) + { + if (type==PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptTranslatorError(&lexer,"syntactic error:include on last line without newline"); + goto _ERROR; + } + else + { + PX_ScriptTranslatorError(&lexer,"syntactic error:new line expected but not found."); + goto _ERROR; + } + + } + allocsize=lexerState.offset+PX_strlen(PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->code.buffer)+PX_strlen(lexer.Sources+PX_LexerGetState(&lexer).offset-1)+1; + exchangeBuffer=(px_char *)MP_Malloc(lib->mp,allocsize); + + if (exchangeBuffer==PX_NULL) + { + PX_ScriptTranslatorError(&lexer,"memory error."); + goto _ERROR; + } + + PX_memcpy(exchangeBuffer,codes->buffer,lexerState.offset); + exchangeBuffer[lexerState.offset]=0; + PX_strcat(exchangeBuffer,PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->code.buffer); + PX_strcat(exchangeBuffer,lexer.Sources+PX_LexerGetState(&lexer).offset-1); + + PX_StringClear(codes); + PX_StringCat(codes,exchangeBuffer); + + PX_LexerSetSourcePointer(&lexer,codes->buffer); + PX_LexerSetState(lexerState); + + MP_Free(lib->mp,exchangeBuffer); + + break; + + } + } + if (!bfound) + { + PX_ScriptTranslatorError(&lexer,"include error: source not found."); + goto _ERROR; + } + } + else + { + PX_ScriptTranslatorError(&lexer,"syntactic error:include-name expected but not found."); + goto _ERROR; + } + } + } + } + PX_LexerSetSourcePointer(&lexer,PX_NULL); + PX_LexerFree(&lexer); + return PX_TRUE; +_ERROR: + PX_LexerFree(&lexer); + PX_LexerSetSourcePointer(&lexer,PX_NULL); + return PX_FALSE; + +} +typedef struct +{ + px_string name; + px_string token; +}PX_SCRIPT_TRANSLATOR_DEFINE_ST; +static px_bool PX_ScriptParseDefine(px_string *codes,PX_SCRIPT_LIBRARY *lib,px_char *name) +{ + px_lexer lexer; + px_int startIndex; + px_int quotes,singleQuotes,i; + PX_LEXER_LEXEME_TYPE type; + px_vector defines; + PX_SCRIPT_TRANSLATOR_DEFINE_ST defst; + + PX_VectorInit(lib->mp,&defines,sizeof(PX_SCRIPT_TRANSLATOR_DEFINE_ST),32); + + PX_LexerInit(&lexer,lib->mp); + PX_LexerRegisterDelimiter(&lexer,','); + PX_LexerRegisterDelimiter(&lexer,';'); + PX_LexerRegisterDelimiter(&lexer,'+'); + PX_LexerRegisterDelimiter(&lexer,'-'); + PX_LexerRegisterDelimiter(&lexer,'*'); + PX_LexerRegisterDelimiter(&lexer,'/'); + PX_LexerRegisterDelimiter(&lexer,'%'); + PX_LexerRegisterDelimiter(&lexer,'&'); + PX_LexerRegisterDelimiter(&lexer,'^'); + PX_LexerRegisterDelimiter(&lexer,'~'); + PX_LexerRegisterDelimiter(&lexer,'('); + PX_LexerRegisterDelimiter(&lexer,')'); + PX_LexerRegisterDelimiter(&lexer,'!'); + PX_LexerRegisterDelimiter(&lexer,'='); + PX_LexerRegisterDelimiter(&lexer,'>'); + PX_LexerRegisterDelimiter(&lexer,'<'); + PX_LexerRegisterDelimiter(&lexer,'{'); + PX_LexerRegisterDelimiter(&lexer,'}'); + PX_LexerRegisterDelimiter(&lexer,'['); + PX_LexerRegisterDelimiter(&lexer,']'); + PX_LexerRegisterSpacer(&lexer,' '); + PX_LexerRegisterSpacer(&lexer,'\t'); + quotes=PX_LexerRegisterContainer(&lexer,"\"","\""); + PX_LexerRegisterContainerTransfer(&lexer,quotes,'\\'); + singleQuotes=PX_LexerRegisterContainer(&lexer,"\'","\'"); + PX_LexerSetTokenCase(&lexer,PX_LEXER_LEXEME_CASE_UPPER); + + + if(!PX_LexerSetSourcePointer(&lexer,codes->buffer)) + goto _ERROR; + + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&lexer); + if (type==PX_LEXER_LEXEME_TYPE_ERR) + { + PX_ScriptTranslatorError(&lexer,"lexer error."); + goto _ERROR; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + if (PX_strequ(lexer.CurLexeme.buffer,"#DEFINE")) + { + startIndex=lexer.SourceOffset-7; + if (PX_ScriptTranslatorNextToken(&lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptTranslatorError(&lexer,"syntactic error:include-name expected but not found."); + goto _ERROR; + } + + + + PX_StringInit(lib->mp,&defst.name); + PX_StringCat(&defst.name,lexer.CurLexeme.buffer); + + if (PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_SPACER) + { + PX_ScriptTranslatorError(&lexer,"syntactic error:spacer expected but not found."); + goto _ERROR; + } + + PX_StringInit(lib->mp,&defst.token); + + if (lexer.Sources[lexer.SourceOffset]==' ') + { + lexer.SourceOffset++; + } + + while (PX_TRUE) + { + if (lexer.Sources[lexer.SourceOffset]!='\n'&&lexer.Sources[lexer.SourceOffset]!='\0'&&lexer.Sources[lexer.SourceOffset]!='\r') + { + PX_StringCatChar(&defst.token,lexer.Sources[lexer.SourceOffset]); + lexer.SourceOffset++; + } + else + break; + } + PX_VectorPushback(&defines,&defst); + + PX_StringReplaceRange(codes,startIndex,lexer.SourceOffset,""); + PX_LexerSetSourcePointer(&lexer,codes->buffer); + lexer.SourceOffset=startIndex; + } + } + } + + lexer.SourceOffset=0; + + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&lexer); + if (type==PX_LEXER_LEXEME_TYPE_ERR) + { + PX_ScriptTranslatorError(&lexer,"lexer error."); + goto _ERROR; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + for (i=0;iname.buffer)) + { + startIndex=lexer.SourceOffset-PX_strlen(lexer.CurLexeme.buffer); + PX_StringReplaceRange(codes,startIndex,lexer.SourceOffset-1,PX_VECTORAT(PX_SCRIPT_TRANSLATOR_DEFINE_ST,&defines,i)->token.buffer); + PX_LexerSetSourcePointer(&lexer,codes->buffer); + lexer.SourceOffset=startIndex+PX_strlen(PX_VECTORAT(PX_SCRIPT_TRANSLATOR_DEFINE_ST,&defines,i)->token.buffer); + break; + } + } + } + } + PX_LexerSetSourcePointer(&lexer,PX_NULL); + PX_LexerFree(&lexer); + for (i=0;iname); + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_TRANSLATOR_DEFINE_ST,&defines,i)->token); + } + PX_VectorFree(&defines); + return PX_TRUE; +_ERROR: + PX_LexerFree(&lexer); + for (i=0;iname); + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_TRANSLATOR_DEFINE_ST,&defines,i)->token); + } + PX_LexerSetSourcePointer(&lexer,PX_NULL); + PX_VectorFree(&defines); + return PX_FALSE; +} +static px_bool PX_ScriptParsePretreatment(px_string *codes,PX_SCRIPT_LIBRARY *lib,px_char *name) +{ + + if(!PX_ScriptParseInclude(codes,lib,name)) + goto _ERROR; + + if(!PX_ScriptParseDefine(codes,lib,name)) + goto _ERROR; + + return PX_TRUE; +_ERROR: + return PX_FALSE; +} +static px_bool PX_ScriptParseIsValidToken(px_char *token) +{ + px_int i; + if (token[0]=='\0'||PX_charIsNumeric(token[0])) + { + return PX_FALSE; + } + + for(i=0;i='A'&&*token<='Z')||(*token>='a'&&*token<='z')||*token=='_'||*token==':'||PX_charIsNumeric(*token)) + { + token++; + continue; + } + return PX_FALSE; + } + return PX_TRUE; +} +static px_bool PX_ScriptParseCheckBrackets(px_char *pstr) +{ + px_int big=0,mid=0,lit=0; + while (*pstr) + { + if (*pstr=='{') + { + big++; + } + + if (*pstr=='}') + { + big--; + } + + if (*pstr=='[') + { + mid++; + } + + if (*pstr==']') + { + mid--; + } + + if (*pstr=='(') + { + lit++; + } + + if (*pstr==')') + { + lit--; + } + if (big<0||lit<0) + { + return PX_FALSE; + } + pstr++; + } + if (big||mid||lit) + { + return PX_FALSE; + } + return PX_TRUE; +} +static PX_SCRIPT_SET *PX_ScriptParseGetSetByIndex(PX_SCRIPT_Analysis *analysis,px_int index) +{ + if (index>=analysis->v_sets.size||index<0) + { + return PX_NULL; + } + + return PX_VECTORAT(PX_SCRIPT_SET,&analysis->v_sets,index); +} +static px_char PX_ScriptParseGetOpLevel(px_char *op,px_bool binary) +{ + if (PX_strlen(op)==1) + { + switch(*op) + { + case '(': + case ')': + case '[': + case ']': + case '.': + return 1; + case '!': + case '~': + return 2; + case '+': + case '-': + { + if (binary) + return 4; + else + return 2; + } + break; + case '>': + return 6; + case '<': + return 6; + case '*': + if(!binary) return 2; + case '/': + case '%': + return 3; + case '&': + if(!binary) return 2; + return 8; + case '^': + return 9; + case '|': + return 10; + + case '=': + return 14; + case ',': + return 15; + + } + } + else + { + if (PX_strequ(op,">=")) + { + return 6; + } + if (PX_strequ(op,"<=")) + { + return 6; + } + if (PX_strequ(op,"<<")) + { + return 5; + } + if (PX_strequ(op,">>")) + { + return 5; + } + if (PX_strequ(op,"&&")) + { + return 11; + } + if (PX_strequ(op,"||")) + { + return 12; + } + if (PX_strequ(op,"==")) + { + return 7; + } + if (PX_strequ(op,"!=")) + { + return 7; + } + if (PX_strequ(op,"++")) + { + return 2; + } + if (PX_strequ(op,"--")) + { + return 2; + } + } + return -1; +} +static px_bool PX_ScriptParse_AST_PushToken(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,PX_SCRIPT_EXPR_STREAM atom,PX_SCRIPT_SET *_inset,PX_SCRIPT_SET **_outset) +{ + px_int i; + PX_SCRIPT_VARIABLES *pvar; + PX_SCRIPT_AST_OPERAND operand; + PX_SCRIPT_SETMEMBER *psetmem; + + //Set offset + if (_inset!=PX_NULL) + { + for (i=0;i<_inset->members.size;i++) + { + psetmem=PX_VECTORAT(PX_SCRIPT_SETMEMBER,&_inset->members,i); + if (PX_strequ(psetmem->defvar.Mnemonic.buffer,atom.code.buffer)) + { + *_outset=PX_NULL; + switch(psetmem->defvar.type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_SET: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET; + operand._oft=psetmem->offset; + operand.pSet=PX_ScriptParseGetSetByIndex(analysis,psetmem->defvar.setIndex); + *_outset=operand.pSet; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_SET_ARRAY: + { + + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + operand._oft=psetmem->offset; + operand.pSet=PX_ScriptParseGetSetByIndex(analysis,psetmem->defvar.setIndex); + *_outset=operand.pSet; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR; + operand._oft=psetmem->offset; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR; + operand._oft=psetmem->offset; + operand.pSet=PX_ScriptParseGetSetByIndex(analysis,psetmem->defvar.setIndex); + *_outset=operand.pSet; + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + break; + } + + } + } + return PX_FALSE; + } + + + + if (atom.opclass==PX_SCRIPT_TRANSLATOR_OP_CLASS_VAR) + { + + for (i=0;iv_variableStackTable.size;i++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variableStackTable,i); + if (PX_strequ(pvar->Mnemonic.buffer,atom.code.buffer)) + { + operand.region=PX_SCRIPT_VARIABLE_REGION_LOCAL; + goto _CONTINUE; + } + } + + for (i=0;iv_variablesGlobalTable.size;i++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesGlobalTable,i); + if (PX_strequ(pvar->Mnemonic.buffer,atom.code.buffer)) + { + operand.region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + goto _CONTINUE; + } + } + return PX_FALSE; + + _CONTINUE: + switch (pvar->type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_SET: + { + *_outset=PX_ScriptParseGetSetByIndex(analysis,pvar->setIndex); + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_ScriptParseGetSetByIndex(analysis,pvar->setIndex); + PX_VectorPushback(tk,&operand); + } + break; + + case PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_ARRAY: + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_SET_ARRAY: + { + *_outset=PX_ScriptParseGetSetByIndex(analysis,pvar->setIndex); + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_ScriptParseGetSetByIndex(analysis,pvar->setIndex); + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR: + { + *_outset=PX_NULL; + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR: + { + *_outset=PX_NULL; + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR: + { + *_outset=PX_NULL; + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR: + { + *_outset=PX_NULL; + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_NULL; + PX_VectorPushback(tk,&operand); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR: + { + *_outset=PX_ScriptParseGetSetByIndex(analysis,pvar->setIndex); + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR; + operand._oft=pvar->BeginIndex; + operand.pSet=PX_ScriptParseGetSetByIndex(analysis,pvar->setIndex); + PX_VectorPushback(tk,&operand); + } + break; + } + + return PX_TRUE; + } + else if(atom.opclass==PX_SCRIPT_TRANSLATOR_OP_CLASS_CONST) + { + //Hexadecimal + if (atom.code.buffer[0]=='0'&&atom.code.buffer[1]=='X') + { + operand.region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + operand._int=PX_htoi(atom.code.buffer+2); + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + else + { + if (!PX_strIsNumeric(atom.code.buffer)) + { + return PX_FALSE; + } + operand.region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + if (PX_strIsFloat(atom.code.buffer)) + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + operand._float=PX_atof(atom.code.buffer); + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + else + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + operand._int=PX_atoi(atom.code.buffer); + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + } + + } + else if(atom.opclass==PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER) + { + operand.region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + if(atom.code.buffer[0]=='"') + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST; + operand._contaniner=atom.code.buffer; + } + else if(atom.code.buffer[0]=='\'') + { + if (atom.code.buffer[2]!='\'') + { + return PX_FALSE; + } + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + operand._int=atom.code.buffer[1]; + } + else + { + operand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST; + operand._contaniner=atom.code.buffer; + } + PX_VectorPushback(tk,&operand); + return PX_TRUE; + } + else + { + return PX_FALSE; + } +} +static px_bool PX_ScriptParseAST_PushOpcode(PX_SCRIPT_Analysis *analysis,px_vector *op,PX_SCRIPT_EXPR_STREAM atom) +{ + PX_SCRIPT_AST_OPCODE opc; + switch(atom.type) + { + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADD: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_ADD; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INC: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_INC; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_POSITIVE: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_POSITIVE; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SUB: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_SUB; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DEC: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_DEC; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NEGATIVE: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_NEGATIVE; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MUL: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_MUL; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DIV: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_DIV; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_AND: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_AND; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OR: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_OR; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NOT: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_NOT; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_XOR: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_XOR; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INV: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_INV; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MOD: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_MOD; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHL: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_SHL; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHR: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_SHR; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DOT: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_DOT; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COMMA: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_COMMA; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETBEGIN: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_IDX; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN: + return PX_TRUE; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGE: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LARGE; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGEEUQ: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LARGEEQU; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESS: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LESS; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESSEQU: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LESSEQU; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_UNEQU: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_UNEQU; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_EQU: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_EQU; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LGEQU: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LGEQU; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LAND: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LAND; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LOR: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_LOR; + break; + + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_PTR: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_PTR; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADR: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_ADR; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OFT: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_OFT; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INT: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_INT; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FLOAT: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_FLOAT; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRING: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_STRING; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMORY: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_MEMORY; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRLEN: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_STRLEN; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMLEN: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_MEMLEN; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COS: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_COS; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SIN: + opc.operandType=PX_SCRIPT_AST_OPCODE_TYPE_SIN; + break; + default: + return PX_FALSE; + } + opc.level=atom.oplevel; + PX_VectorPushback(op,&opc); + return PX_TRUE; +} +static px_bool PX_ScriptParseIsOperandNumericType(PX_SCRIPT_AST_OPERAND ope) +{ + if (ope.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT||ope.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST) + { + return PX_TRUE; + } + if (ope.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||ope.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + { + return PX_TRUE; + } + if (ope.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX||ope.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX) + { + return PX_TRUE; + } + return PX_FALSE; +} +static PX_SCRIPT_SET *PX_ScriptParseGetSetInfo(PX_SCRIPT_Analysis *analysis,px_char *name) +{ + px_int i; + PX_SCRIPT_SET *pset; + for (i=0;iv_sets.size;i++) + { + pset=PX_VECTORAT(PX_SCRIPT_SET,&analysis->v_sets,i); + if (PX_strequ(name,pset->Name.buffer)) + { + return pset; + } + } + return PX_NULL; +} +static px_int PX_ScriptParseGetSetIndex(PX_SCRIPT_Analysis *analysis,px_char *name) +{ + px_int i; + PX_SCRIPT_SET *pset; + for (i=0;iv_sets.size;i++) + { + pset=PX_VECTORAT(PX_SCRIPT_SET,&analysis->v_sets,i); + if (PX_strequ(name,pset->Name.buffer)) + { + return i; + } + } + return -1; +} +static px_bool PX_ScriptParseIsCompareAbleOperand(PX_SCRIPT_AST_OPERAND operand1,PX_SCRIPT_AST_OPERAND operand2) +{ + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + return PX_TRUE; + break; + default: + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + return PX_TRUE; + break; + default: + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_SET: + return PX_FALSE; + default: + if (operand1.operandType!=operand2.operandType) + { + return PX_FALSE; + } + } + } + return PX_TRUE; +} +static px_bool PX_ScriptParseAST_MapTokenToR2(PX_SCRIPT_Analysis *analysis,PX_SCRIPT_AST_OPERAND operand,px_string *out) +{ + px_string fmrString; + + switch(operand.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_VOID: + PX_StringCat(out,"MOV R2,0\n"); + break; + ////////////////////////////////////////////////////////////////////////// + //R2 + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: //string var + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY://memory var + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: //int var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR://float var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR://string var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR://memory var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR://set xx var[x] + { + PX_StringInit(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R2,LOCAL[%1]\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"MOV R2,GLOBAL[R2]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + PX_StringFree(&fmrString); + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_SET: + { + return PX_FALSE; + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringCat(out,"ADD R2,BP\n"); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operand._int)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + PX_StringFree(&fmrString); + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_FLOAT(operand._float)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + { + ////////////////////////////////////////////////////////////////////////// + + PX_StringInit(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_STRING(operand._contaniner)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + + //Check operand + ////////////////////////////////////////////////////////////////////////// + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + switch(operand.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRCHR R2,LOCAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRCHR R2,LOCAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRCHR R2,GLOBAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRCHR R2,GLOBAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"STRCHR R2,GLOBAL[R1],R3\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"STRCHR R2,STRSET GLOBAL[R1],%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + + switch(operand.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMBYTE R2,LOCAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMBYTE R2,LOCAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMBYTE R2,GLOBAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMBYTE R2,GLOBAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"MEMBYTE R2,GLOBAL[R1],R3\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMBYTE R2,STRSET GLOBAL[R1],%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + + } + break; + + default: + return PX_FALSE; + } + return PX_TRUE; +} +static px_bool PX_ScriptParseAST_MapTokenToR1(PX_SCRIPT_Analysis *analysis,PX_SCRIPT_AST_OPERAND operand,px_string *out) +{ + px_string fmrString; + + switch(operand.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_VOID: + PX_StringCat(out,"MOV R1,0\n"); + break; + ////////////////////////////////////////////////////////////////////////// + //R2 + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: //string var + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY://memory var + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: //int var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR://float var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR://string var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR://memory var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR://set xx var[x] + { + PX_StringInit(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R1,LOCAL[%1]\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R1,GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"MOV R1,GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + PX_StringFree(&fmrString); + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_SET: + { + return PX_FALSE; + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R1,%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringCat(out,"ADD R2,BP\n"); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R1,%1\n",PX_STRINGFORMAT_INT(operand._int)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + PX_StringFree(&fmrString); + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R1,%1\n",PX_STRINGFORMAT_FLOAT(operand._float)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + { + ////////////////////////////////////////////////////////////////////////// + + PX_StringInit(analysis->mp,&fmrString); + + if(operand.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R1,%1\n",PX_STRINGFORMAT_STRING(operand._contaniner)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + + //Check operand + ////////////////////////////////////////////////////////////////////////// + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + switch(operand.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRCHR R1,LOCAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRCHR R1,LOCAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRCHR R1,GLOBAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRCHR R1,GLOBAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"STRCHR R1,GLOBAL[R1],R3\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"STRCHR R1,STRSET GLOBAL[R1],%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + + switch(operand.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMBYTE R1,LOCAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMBYTE R1,LOCAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMBYTE R1,GLOBAL[%1],R3\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMBYTE R1,GLOBAL[%1],%2\n",PX_STRINGFORMAT_INT(operand._oft),PX_STRINGFORMAT_INT(operand.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operand.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"MEMBYTE R1,GLOBAL[R1],R3\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMBYTE R1,STRSET GLOBAL[R1],%1\n",PX_STRINGFORMAT_INT(operand._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_DOT(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + px_string fmrString; + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + + if (operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_SET) + { + return PX_FALSE; + } + + if (operand1.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"POP R1\nADD R1,%1\nPUSH R1\n",PX_STRINGFORMAT_INT(operand2._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + operand2._oft=0; + operand2.region=operand1.region; + } + else + { + operand2._oft+=operand1._oft; + operand2.region=operand1.region; + } + + + PX_VectorPop(tk); + + pTop=(PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1); + *pTop=operand2; + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_EQUAL(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operandLeft,operandRight,*pTop; + px_string fmrString; + if (tk->size<2) + { + return PX_FALSE; + } + operandLeft=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operandRight=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + + + switch(operandRight.operandType) + { + ////////////////////////////////////////////////////////////////////////// + //R2 + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + { + if (!PX_ScriptParseAST_MapTokenToR2(analysis,operandRight,out)) + { + return PX_FALSE; + } + + //Check operand1 + switch (operandLeft.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + { + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + else + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + PX_StringCat(out,"FLT R2\n"); + + } + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV LOCAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH LOCAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"STRSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"MEMSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + default: + return PX_FALSE; + + } + + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operandRight,out)) return PX_FALSE; + + //Check operand1 + switch (operandLeft.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + { + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + else + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + + if(operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT) + PX_StringCat(out,"INT R2\n"); + + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + default: + return PX_FALSE; + } + + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: //string var + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY://memory var + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: //int var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR://float var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR://string var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR://memory var[x] + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR://set xx var[x] + { + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST; + } + else if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST; + } + else if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + } + else if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + } + else if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + } + else if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + } + else + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + } + + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=operandLeft.pSet; + + if (operandLeft.operandType!=operandRight.operandType) + { + return PX_FALSE; + } + + PX_StringInit(analysis->mp,&fmrString); + + if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R2,LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandRight._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandRight._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"MOV R2,GLOBAL[R2]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + return PX_FALSE; + } + + PX_StringFree(&fmrString); + + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + PX_ScriptTranslatorError(&analysis->lexer,"Invalid left-value."); + return PX_FALSE; + } + + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_SET: + { + if (operandLeft.operandType!=operandRight.operandType) + { + return PX_FALSE; + } + if (operandLeft.pSet!=operandRight.pSet) + { + return PX_FALSE; + } + PX_StringInit(analysis->mp,&fmrString); + switch(operandRight.region) + { + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operandRight._int)); + PX_StringCat(out,fmrString.buffer); + } + break; + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringFormat1(&fmrString,"MOV R2,%1\nADD R2,BP\n",PX_STRINGFORMAT_INT(operandRight._int)); + PX_StringCat(out,fmrString.buffer); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + break; + default: + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + } + + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringFormat1(&fmrString,"MOV R1,%1\n",PX_STRINGFORMAT_INT(operandLeft._int)); + PX_StringCat(out,fmrString.buffer); + } + break; + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringFormat1(&fmrString,"MOV R1,%1\nADD R1,BP\n",PX_STRINGFORMAT_INT(operandLeft._int)); + PX_StringCat(out,fmrString.buffer); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(out,fmrString.buffer); + } + break; + default: + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + } + + PX_StringFormat1(&fmrString,"DATACPY R1,R2,%1\n",PX_STRINGFORMAT_INT(operandLeft.pSet->size)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH R1\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=operandLeft.pSet; + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + { + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR) + { + return PX_FALSE; + } + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR) + { + return PX_FALSE; + } + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR) + { + return PX_FALSE; + } + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR) + { + return PX_FALSE; + } + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR) + { + return PX_FALSE; + } + + + PX_StringInit(analysis->mp,&fmrString); + + if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operandRight._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operandRight._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringCat(out,"ADD R2,BP\n"); + } + else if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV LOCAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH LOCAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + break; + default: + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid left-value."); + PX_StringFree(&fmrString); + return PX_FALSE; + } + } + PX_StringFree(&fmrString); + pTop->operandType=operandRight.operandType; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=operandLeft.pSet; + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + { + if (!PX_ScriptParseAST_MapTokenToR2(analysis,operandRight,out)) + { + return PX_FALSE; + } + + //Check operand1 + switch (operandLeft.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + { + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + PX_StringCat(out,"FLT R2\n"); + } + else + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"STRSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.AtomIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"MEMSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + default: + return PX_FALSE; + + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + { + if (!PX_ScriptParseAST_MapTokenToR2(analysis,operandRight,out)) + { + return PX_FALSE; + } + + //Check operand1 + switch (operandLeft.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + { + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT) + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + else + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + + if(operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT) + PX_StringCat(out,"INT R2\n"); + + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + { + pTop->operandType=operandRight.operandType; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + ////////////////////////////////////////////////////////////////////////// + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING) + { + return PX_FALSE; + } + + if (operandRight.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY) + { + return PX_FALSE; + } + + PX_StringInit(analysis->mp,&fmrString); + + if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_STRING(operandRight._contaniner)); + PX_StringCat(out,fmrString.buffer); + } + else if(operandRight.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringSet(&fmrString,"POP R2\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + PX_StringFree(&fmrString); + + //Check operand1 + + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + ////////////////////////////////////////////////////////////////////////// + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX) + { + return PX_FALSE; + } + + if (!PX_ScriptParseAST_MapTokenToR2(analysis,operandRight,out)) + { + return PX_FALSE; + } + + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT) + { + ////////////////////////////////////////////////////////////////////////// + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + ////////////////////////////////////////////////////////////////////////// + } + else if(operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX) + { + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"STRSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + else + { + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"MEMSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX&&operandLeft.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX) + { + return PX_FALSE; + } + + if (!PX_ScriptParseAST_MapTokenToR2(analysis,operandRight,out)) + { + return PX_FALSE; + } + + if (operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT) + { + ////////////////////////////////////////////////////////////////////////// + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV LOCAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"MOV GLOBAL[R1],R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + ////////////////////////////////////////////////////////////////////////// + } + else if(operandLeft.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX) + { + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"MEMSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"MEMSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + else + { + switch(operandLeft.region) + { + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET LOCAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET LOCAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH LOCAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R3\n"); + PX_StringFormat1(&fmrString,"STRSET GLOBAL[%1],R3,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFormat2(&fmrString,"STRSET GLOBAL[%1],%2,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft),PX_STRINGFORMAT_INT(operandLeft.bAtomPopIndex)); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"PUSH GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + + if(operandLeft.bAtomPopIndex) + { + PX_StringCat(out,"POP R1\n"); + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"STRSET GLOBAL[R1],R3,R2\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringCat(out,"POP R1\n"); + PX_StringFormat1(&fmrString,"MEMSET GLOBAL[R1],%1,R2\n",PX_STRINGFORMAT_INT(operandLeft._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH GLOBAL[R1]\n"); + PX_StringCat(out,fmrString.buffer); + } + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + } + + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_IDX(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,resOperand; + px_string fmrString; + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + PX_VectorPop(tk); + + PX_StringInit(analysis->mp,&fmrString); + + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if (!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) + { + return PX_FALSE; + } + } + break; + default: + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + } + + switch (operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR: + { + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET; + resOperand.pSet=operand1.pSet; + PX_StringFormat1(&fmrString,"MUL R2,%1\n",PX_STRINGFORMAT_INT(operand1.pSet->size)); + PX_StringCat(out,fmrString.buffer); + } + + if (operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"ADD R2,GLOBAL[%1]\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"ADD R2,LOCAL[%1]\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringCat(out,"ADD R2,BP\n"); + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"ADD R2,GLOBAL[R3]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + { + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY; + resOperand.pSet=PX_NULL; + } + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET; + resOperand.pSet=operand1.pSet; + PX_StringFormat1(&fmrString,"MUL R2,%1\n",PX_STRINGFORMAT_INT(operand1.pSet->size)); + PX_StringCat(out,fmrString.buffer); + + } + + if (operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"ADD R2,%1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringSet(&fmrString,"ADD R2,BP\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFormat1(&fmrString,"ADD R2,%1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringCat(out,"POP R3\n"); + PX_StringSet(&fmrString,"ADD R2,GLOBAL[R3]\n"); + PX_StringCat(out,fmrString.buffer); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + { + PX_StringCat(out,"PUSH R2\n"); + resOperand.bAtomPopIndex=PX_TRUE; + + if(operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY) + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX; + else + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX; + + if (operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringFormat1(&fmrString,"MOV R2,%1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"ADD R2,BP\n"); + PX_StringCat(out,fmrString.buffer); + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + PX_StringCat(out,"POP R2\n"); + } + else + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + } + break; + default: + { + PX_StringFree(&fmrString); + return PX_FALSE; + } + } + PX_StringCat(out,"PUSH R2\n"); + + resOperand.region=PX_SCRIPT_VARIABLE_REGION_POP; + resOperand._int=0; + resOperand._oft=0; + PX_VectorPushback(tk,&resOperand); + + PX_StringFree(&fmrString); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_OFT(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + px_string fmrString; + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"ADD R1,%1\nPUSH R1\n",PX_STRINGFORMAT_INT(operand2._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + + pTop=(PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1); + *pTop=operand2; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_PTR(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,resOperand; + px_string fmrString; + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + + PX_StringInit(analysis->mp,&fmrString); + + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET; + resOperand.pSet=operand1.pSet; + } + + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY; + resOperand.pSet=PX_NULL; + } + else if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST) + { + resOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET; + resOperand.pSet=operand1.pSet; + + } + else + { + return PX_FALSE; + } + + if (!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) + { + return PX_FALSE; + } + + PX_StringCat(out,"PUSH R1\n"); + resOperand.region=PX_SCRIPT_VARIABLE_REGION_POP; + resOperand._oft=0; + resOperand._int=0; + PX_VectorPushback(tk,&resOperand); + + PX_StringFree(&fmrString); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_ADR(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + px_string fmrString; + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + + pTop=((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + break; + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + break; + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + break; + case PX_SCRIPT_AST_OPERAND_TYPE_SET: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + break; + default: + return PX_FALSE; + } + + if(operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop->_int=operand1._int; + pTop->region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + return PX_TRUE; + } + else if(operand1.region==PX_SCRIPT_VARIABLE_REGION_LOCAL) + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MOV R1,%1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"ADD R1,BP\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringSet(&fmrString,"PUSH R1\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + + pTop->_int=operand1._int; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + else if (operand1.region==PX_SCRIPT_VARIABLE_REGION_POP) + { + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + else + { + return PX_FALSE; + } + + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_ADD(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + px_string fmrString; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int+operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._int+operand2._float; + return PX_TRUE; + } + } + + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._float+operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_float=operand1._float+operand2._float; + return PX_TRUE; + } + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + if(operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + else + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"STRCAT R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"MEMCAT R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"STRCAT R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=operand1.operandType; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"MEMCAT R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=operand1.operandType; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"MUL R2,%1\n",PX_STRINGFORMAT_INT(operand1.pSet->size)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"ADD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_INC(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1; + px_string fmrString; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + if (operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR) + { + return PX_FALSE; + } + switch(operand1.region) + { + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"ADD GLOBAL[%1],1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"ADD LOCAL[%1],1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"ADD GLOBAL[R1],1\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringCat(out,"PUSH R1\n"); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_POSITIVE(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + break; + default: + return PX_FALSE; + } + PX_VectorPop(op); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_SUB(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int-operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._int-operand2._float; + return PX_TRUE; + } + } + + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._float-operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_float=operand1._float-operand2._float; + return PX_TRUE; + } + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + if(operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + else + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + + + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SUB R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_DEC(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1; + px_string fmrString; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + + if (operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR&&operand1.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR) + { + return PX_FALSE; + } + switch(operand1.region) + { + case PX_SCRIPT_VARIABLE_REGION_GLOBAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"SUB GLOBAL[%1],1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_LOCAL: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"SUB LOCAL[%1],1\n",PX_STRINGFORMAT_INT(operand1._oft)); + PX_StringCat(out,fmrString.buffer); + PX_StringFree(&fmrString); + } + break; + case PX_SCRIPT_VARIABLE_REGION_POP: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringCat(out,"POP R1\n"); + PX_StringSet(&fmrString,"SUB GLOBAL[R1],1\n"); + PX_StringCat(out,fmrString.buffer); + PX_StringCat(out,"PUSH R1\n"); + PX_StringFree(&fmrString); + } + break; + default: + return PX_FALSE; + } + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_NEGATIVE(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=-operand1._int; + return PX_TRUE; + } + + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_float=-operand1._float; + return PX_TRUE; + } + + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + break; + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + break; + default: + return PX_FALSE; + } + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"NEG R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_MUL(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + pTop->_int=operand1._int*operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._int*operand2._float; + return PX_TRUE; + } + } + + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._float*operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_float=operand1._float*operand2._float; + return PX_TRUE; + } + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"MUL R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + if(operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + else + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"MUL R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_DIV(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2._int==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Divide by zero error."); + return PX_FALSE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int/operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._int/operand2._float; + return PX_TRUE; + } + } + + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2._int==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Divide by zero error."); + return PX_FALSE; + } + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->_float=operand1._float/operand2._int; + return PX_TRUE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_float=operand1._float/operand2._float; + return PX_TRUE; + } + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"DIV R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + if(operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + else + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"DIV R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_AND(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int&operand2._int; + return PX_TRUE; + } + } + + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"AND R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_OR(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int|operand2._int; + return PX_TRUE; + } + } + + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"OR R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_NOT(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=(operand1._int==0); + return PX_TRUE; + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + break; + default: + return PX_FALSE; + } + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"NOT R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_XOR(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int^operand2._int; + return PX_TRUE; + } + } + + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"XOR R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_INV(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=(~operand1._int); + return PX_TRUE; + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + break; + default: + return PX_FALSE; + } + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"INV R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_MOD(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2._int==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"mod by zero error."); + return PX_FALSE; + } + + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int%operand2._int; + return PX_TRUE; + } + } + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"MOD R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_SHL(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int<operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_SHR(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + if (operand1.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand1.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + if (operand2.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&operand2.region==PX_SCRIPT_VARIABLE_REGION_GLOBAL) + { + + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->_int=operand1._int>>operand2._int; + return PX_TRUE; + } + } + + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + { + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"SHR R1,R2\nPUSH R1\n"); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + } + break; + default: + return PX_FALSE; + } + } + break; + + default: + return PX_FALSE; + } + + return PX_TRUE; + +} +static px_bool PX_ScriptParseLastInstr_INT(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + PX_StringCat(out,"INT R1\n"); + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + PX_StringCat(out,"STRTOI R1,R1\n"); + break; + default: + return PX_FALSE; + } + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_FLOAT(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + PX_StringCat(out,"FLT R1\n"); + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + PX_StringCat(out,"STRTOF R1,R1\n"); + break; + default: + return PX_FALSE; + } + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_STRING(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST; + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: + PX_StringCat(out,"STRFRI R1,R1\n"); + break; + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + PX_StringCat(out,"STRFRF R1,R1\n"); + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + break; + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + PX_StringCat(out,"MEMTSTR R1\n"); + break; + default: + return PX_FALSE; + } + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_MEMORY(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST; + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + PX_StringCat(out,"STRTMEM R1\n"); + break; + default: + return PX_FALSE; + } + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_STRLEN(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + PX_StringCat(out,"STRLEN R1\n"); + break; + default: + return PX_FALSE; + } + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_MEMLEN(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + PX_StringCat(out,"MEMLEN R1\n"); + break; + default: + return PX_FALSE; + } + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_SIN(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + if (PX_ScriptParseIsOperandNumericType(operand1)) + { + PX_StringCat(out,"SIN R1,R2\n"); + } + else + return PX_FALSE; + + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_COS(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,*pTop; + + if (tk->size<1) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + PX_VectorPop(op); + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + pTop->pSet=PX_NULL; + pTop->_int=0; + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand1,out)) return PX_FALSE; + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + + if (PX_ScriptParseIsOperandNumericType(operand1)) + { + PX_StringCat(out,"COS R1,R2\n"); + } + else + return PX_FALSE; + + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_LARGE(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + return PX_FALSE; + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"SUB R1,R2\n"); + PX_StringCat(out,"LGGZ R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_LARGEEQU(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + return PX_FALSE; + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"SUB R1,R2\n"); + PX_StringCat(out,"LGGEZ R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_LESS(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + return PX_FALSE; + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"SUB R1,R2\n"); + PX_StringCat(out,"LGLZ R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_LAND(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + return PX_FALSE; + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"ANDL R1,R2\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_LOR(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + return PX_FALSE; + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"ORL R1,R2\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_LESSEQU(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + return PX_FALSE; + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + + PX_StringCat(out,"SUB R1,R2\n"); + PX_StringCat(out,"LGLEZ R1\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_LGEQU(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + break; + default: + PX_ScriptTranslatorError(&analysis->lexer,"Matched-type difference."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + break; + default: + PX_ScriptTranslatorError(&analysis->lexer,"Matched-type difference."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_SET: + PX_ScriptTranslatorError(&analysis->lexer,"Set-type could not be compared."); + return PX_FALSE; + default: + if (operand1.operandType!=operand2.operandType) + { + PX_ScriptTranslatorError(&analysis->lexer,"Matched-type difference."); + return PX_FALSE; + } + } + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"LGE R1,R1,R2\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr_UNEQU(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + PX_SCRIPT_AST_OPERAND operand1,operand2,*pTop; + + if (tk->size<2) + { + return PX_FALSE; + } + operand1=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-2)); + operand2=*((PX_SCRIPT_AST_OPERAND *)PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,tk->size-1)); + + PX_VectorPop(op); + PX_VectorPop(tk); + pTop=PX_VECTORLAST(PX_SCRIPT_AST_OPERAND,tk); + pTop->operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + pTop->region=PX_SCRIPT_VARIABLE_REGION_POP; + pTop->_oft=0; + if (!PX_ScriptParseIsOperandNumericType(operand1)||!PX_ScriptParseIsOperandNumericType(operand2)) + { + switch(operand1.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + break; + default: + PX_ScriptTranslatorError(&analysis->lexer,"Matched-type difference."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + { + switch(operand2.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + break; + default: + PX_ScriptTranslatorError(&analysis->lexer,"Matched-type difference."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_SET: + PX_ScriptTranslatorError(&analysis->lexer,"Set-type could not be compared."); + return PX_FALSE; + default: + if (operand1.operandType!=operand2.operandType) + { + PX_ScriptTranslatorError(&analysis->lexer,"Matched-type difference."); + return PX_FALSE; + } + } + } + if(!PX_ScriptParseAST_MapTokenToR2(analysis,operand2,out)) return PX_FALSE; + if(!PX_ScriptParseAST_MapTokenToR1(analysis,operand1,out)) return PX_FALSE; + PX_StringCat(out,"LGNE R1,R1,R2\n"); + PX_StringCat(out,"PUSH R1\n"); + return PX_TRUE; +} +static px_bool PX_ScriptParseLastInstr(PX_SCRIPT_Analysis *analysis,px_vector *op,px_vector *tk,px_string *out) +{ + + PX_SCRIPT_AST_OPCODE opcode; + opcode=*((PX_SCRIPT_AST_OPCODE *)PX_VECTORAT(PX_SCRIPT_AST_OPCODE,op,op->size-1)); + + if (tk->size==1&&op->size==0)//(const) + { + return PX_TRUE; + } + + switch(opcode.operandType) + { + case PX_SCRIPT_AST_OPCODE_TYPE_EQU: + { + if(!PX_ScriptParseLastInstr_EQUAL(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_DOT: + { + if(!PX_ScriptParseLastInstr_DOT(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_IDX: + { + if(!PX_ScriptParseLastInstr_IDX(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_OFT: + { + if(!PX_ScriptParseLastInstr_OFT(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_PTR: + { + if(!PX_ScriptParseLastInstr_PTR(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_ADR: + { + if(!PX_ScriptParseLastInstr_ADR(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_ADD: + { + if(!PX_ScriptParseLastInstr_ADD(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_INC: + { + if(!PX_ScriptParseLastInstr_INC(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_POSITIVE: + { + if(!PX_ScriptParseLastInstr_POSITIVE(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_SUB: + { + if(!PX_ScriptParseLastInstr_SUB(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_DEC: + { + if(!PX_ScriptParseLastInstr_DEC(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_NEGATIVE: + { + if(!PX_ScriptParseLastInstr_NEGATIVE(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_MUL: + { + if(!PX_ScriptParseLastInstr_MUL(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_DIV: + { + if(!PX_ScriptParseLastInstr_DIV(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_AND: + { + if(!PX_ScriptParseLastInstr_AND(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_OR: + { + if(!PX_ScriptParseLastInstr_OR(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_NOT: + { + if(!PX_ScriptParseLastInstr_NOT(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_XOR: + { + if(!PX_ScriptParseLastInstr_XOR(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_INV: + { + if(!PX_ScriptParseLastInstr_INV(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_MOD: + { + if(!PX_ScriptParseLastInstr_MOD(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_SHL: + { + if(!PX_ScriptParseLastInstr_SHL(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_SHR: + { + if(!PX_ScriptParseLastInstr_SHR(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LARGE: + { + if(!PX_ScriptParseLastInstr_LARGE(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LARGEEQU: + { + if(!PX_ScriptParseLastInstr_LARGEEQU(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LESS: + { + if(!PX_ScriptParseLastInstr_LESS(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LESSEQU: + { + if(!PX_ScriptParseLastInstr_LESSEQU(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LGEQU: + { + if(!PX_ScriptParseLastInstr_LGEQU(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_UNEQU: + { + if(!PX_ScriptParseLastInstr_UNEQU(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LAND: + { + if(!PX_ScriptParseLastInstr_LAND(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_LOR: + { + if(!PX_ScriptParseLastInstr_LOR(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_INT: + { + if(!PX_ScriptParseLastInstr_INT(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_FLOAT: + { + if(!PX_ScriptParseLastInstr_FLOAT(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_STRING: + { + if(!PX_ScriptParseLastInstr_STRING(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_MEMORY: + { + if(!PX_ScriptParseLastInstr_MEMORY(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_STRLEN: + { + if(!PX_ScriptParseLastInstr_STRLEN(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_MEMLEN: + { + if(!PX_ScriptParseLastInstr_MEMLEN(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_SIN: + { + if(!PX_ScriptParseLastInstr_SIN(analysis,op,tk,out)) return PX_FALSE; + } + break; + case PX_SCRIPT_AST_OPCODE_TYPE_COS: + { + if(!PX_ScriptParseLastInstr_COS(analysis,op,tk,out)) return PX_FALSE; + } + break; + default: + return PX_FALSE; + } + return PX_TRUE; +} +static px_bool PX_ScriptParseExpressionStream(PX_SCRIPT_Analysis *analysis,px_vector *stream,px_int *offset,PX_SCRIPT_AST_OPERAND *pretOperand,PX_SCRIPT_TRANSLATOR_EXPRESSION_TYPE expectedEndl,px_string *out) +{ + px_vector vOp; + px_vector vTk; + px_vector *op=&vOp; + px_vector *tk=&vTk; + PX_SCRIPT_AST_OPERAND retOperand; + PX_SCRIPT_AST_OPCODE *plastop=PX_NULL; + PX_SCRIPT_SET *pcurrentSet=PX_NULL; + px_int level=PX_SCRIPT_OPCODE_LEVEL_BOTTOM; + PX_SCRIPT_EXPR_STREAM *pVec=(PX_SCRIPT_EXPR_STREAM *)(stream->data); + PX_SCRIPT_FUNCTION *pfunc=PX_NULL; + px_int i,LBracketBalance,MBracketBalance,paramBeginIndex[16],paramcount=0; + px_string fmrString; + PX_VectorInit(analysis->mp,op,sizeof(PX_SCRIPT_AST_OPCODE),16); + PX_VectorInit(analysis->mp,tk,sizeof(PX_SCRIPT_AST_OPERAND),16); + + + + while(*offsetsize) + { + if (pVec[*offset].type==expectedEndl) + { + while(op->size) + { + if(!PX_ScriptParseLastInstr(analysis,op,tk,out)) + goto _ERROR; + } + *pretOperand=*(PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,0)); + + break; + } + switch(pVec[*offset].type) + { + case PX_SCRIPT_TRANSLATOR_EXPRESSION_TOKEN: + { + if(!PX_ScriptParse_AST_PushToken(analysis,op,tk,pVec[*offset],pcurrentSet,&pcurrentSet)) + goto _ERROR; + } + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FUNCTION: + { + //call func + PX_StringCat(out,"PUSH BP\n"); + for (i=0;iv_functions.size;i++) + { + pfunc=PX_VECTORAT(PX_SCRIPT_FUNCTION,&analysis->v_functions,i); + if (PX_strequ(pfunc->name,pVec[*offset].code.buffer)) + { + break; + } + } + if (i==analysis->v_functions.size) + { + PX_ScriptTranslatorError(&analysis->lexer,"Function name undefined."); + goto _ERROR; + } + + //( + (*offset)++; + if (pVec[*offset].type!=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN) + { + PX_ScriptTranslatorError(&analysis->lexer,"'(' expected but not found."); + goto _ERROR; + } + (*offset)++; + LBracketBalance=1; + paramcount=0; + paramBeginIndex[paramcount]=*offset; + + if(pVec[*offset].type==PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND) + { + paramBeginIndex[paramcount]++; + } + else + while (PX_TRUE) + { + if (!LBracketBalance&&pVec[*offset].type==PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND) + { + break; + } + MBracketBalance=0; + while (PX_TRUE) + { + if (*offset==stream->size) + { + goto _ERROR; + } + switch(pVec[*offset].type) + { + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN: + LBracketBalance++; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND: + LBracketBalance--; + if (LBracketBalance==0) + { + goto _EXPR_OUT; + } + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETBEGIN: + MBracketBalance++; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETEND: + MBracketBalance--; + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COMMA: + if (LBracketBalance==1&&MBracketBalance==0) + { + goto _EXPR_OUT; + } + break; + } + (*offset)++; + } +_EXPR_OUT: + if (pVec[*offset].type==PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND) + { + (*offset)++; + paramcount++; + paramBeginIndex[paramcount]=*offset; + break; + } + else + { + (*offset)++; + paramcount++; + paramBeginIndex[paramcount]=*offset; + } + + } + if (paramcount!=pfunc->parametersCount) + { + goto _ERROR; + } + + if(paramcount) + { + if (!PX_ScriptParseExpressionStream(analysis,stream,¶mBeginIndex[paramcount-1],&retOperand,PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND,out)) + { + goto _ERROR; + } + + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST) + { + pcurrentSet=retOperand.pSet; + } + + i=paramcount-1; + + switch (retOperand.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: +// if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_INT) +// { +// PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); +// goto _ERROR; +// } +// break; + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_INT) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_STRING) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_ARRAY&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_STRING_ARRAY&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_ARRAY&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR||PX_ScriptParseGetSetByIndex(analysis,pfunc->parameters[i].setIndex)!=retOperand.pSet) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + default: + goto _ERROR; + } + + if(retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_SET) + { + if (!PX_ScriptParseAST_MapTokenToR1(analysis,retOperand,out)) + { + goto _ERROR; + } + + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + { + if (pfunc->parameters[i].type==PX_SCRIPT_PARSER_VAR_TYPE_INT) + { + PX_StringCat(out,"INT R1\n"); + } + } + + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST\ + ||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX) + { + if (pfunc->parameters[i].type==PX_SCRIPT_PARSER_VAR_TYPE_FLOAT) + { + PX_StringCat(out,"FLT R1\n"); + } + } + + PX_StringCat(out,"PUSH R1\n"); + } + + } + + + for (i=paramcount-2;i>=0;i--) + { + if (!PX_ScriptParseExpressionStream(analysis,stream,¶mBeginIndex[i],&retOperand,PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COMMA,out)) + { + goto _ERROR; + } + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST) + { + pcurrentSet=retOperand.pSet; + } + + switch (retOperand.operandType) + { + case PX_SCRIPT_AST_OPERAND_TYPE_INT: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX: +// if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_INT) +// { +// PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); +// goto _ERROR; +// } +// break; + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_INT) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_STRING) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_ARRAY&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_STRING_ARRAY&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_ARRAY&&pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR: + case PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST: + if (pfunc->parameters[i].type!=PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR||PX_ScriptParseGetSetByIndex(analysis,pfunc->parameters[i].setIndex)!=retOperand.pSet) + { + PX_ScriptTranslatorError(&analysis->lexer,"Parameter not matched."); + goto _ERROR; + } + break; + default: + goto _ERROR; + } + if (!PX_ScriptParseAST_MapTokenToR1(analysis,retOperand,out)) + { + goto _ERROR; + } + + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + { + if (pfunc->parameters[i].type==PX_SCRIPT_PARSER_VAR_TYPE_INT) + { + PX_StringCat(out,"INT R1\n"); + } + } + + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST\ + ||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX) + { + if (pfunc->parameters[i].type==PX_SCRIPT_PARSER_VAR_TYPE_FLOAT) + { + PX_StringCat(out,"FLT R1\n"); + } + } + + PX_StringCat(out,"PUSH R1\n"); + + } + + //call + switch(pfunc->type) + { + case PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_EXPORT: + case PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_CUSTOM: + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"CALL %1\n",PX_STRINGFORMAT_STRING(pfunc->name)); + PX_StringCat(out,fmrString.buffer); + + if(pfunc->parametersCount) + { + PX_StringFormat1(&fmrString,"POPN %1\n",PX_STRINGFORMAT_INT(pfunc->parametersSize)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringCat(out,"POP BP\n"); + + PX_StringFree(&fmrString); + break; + case PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_HOST: + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"CALL $%1\n",PX_STRINGFORMAT_STRING(pfunc->name)); + PX_StringCat(out,fmrString.buffer); + if(pfunc->parametersCount) + { + PX_StringFormat1(&fmrString,"POPN %1\n",PX_STRINGFORMAT_INT(pfunc->parametersSize)); + PX_StringCat(out,fmrString.buffer); + } + PX_StringCat(out,"POP BP\n"); + PX_StringFree(&fmrString); + break; + } + + retOperand.region=PX_SCRIPT_VARIABLE_REGION_POP; + retOperand._oft=0; + + switch (pfunc->retType) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST; + retOperand.pSet=PX_ScriptParseGetSetByIndex(analysis,pfunc->retSetIndex); + break; + case PX_SCRIPT_PARSER_VAR_TYPE_VOID: + retOperand.operandType=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST; + retOperand._int=0; + break; + default: + goto _ERROR; + } + + + + PX_StringCat(out,"PUSH R1\n"); + PX_VectorPushback(tk,&retOperand); + + + + (*offset)=paramBeginIndex[paramcount]-1; + + + } + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN: + { + (*offset)++; + + if(!PX_ScriptParseExpressionStream(analysis,stream,offset,&retOperand,PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND,out)) + goto _ERROR; + + PX_VectorPushback(tk,&retOperand); + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST) + { + pcurrentSet=retOperand.pSet; + } + } + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETBEGIN: + { + + if (level>pVec[*offset].oplevel) + { + level=pVec[*offset].oplevel; + if(!PX_ScriptParseAST_PushOpcode(analysis,op,pVec[*offset])) goto _ERROR; + } + else + { + level=pVec[*offset].oplevel; + do{ + if(op->size>0) + { + if(!PX_ScriptParseLastInstr(analysis,op,tk,out)) goto _ERROR; + if(op->size) + plastop=PX_VECTORAT(PX_SCRIPT_AST_OPCODE,op,op->size-1); + } + else + break; + }while(op->size&&plastop->level<=level); + if(!PX_ScriptParseAST_PushOpcode(analysis,op,pVec[*offset])) goto _ERROR; + } + + (*offset)++; + if(!PX_ScriptParseExpressionStream(analysis,stream,offset,&retOperand,PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETEND,out)) + goto _ERROR; + + PX_VectorPushback(tk,&retOperand); + + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST) + { + pcurrentSet=retOperand.pSet; + } + } + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COMMA: + { + while(op->size) + { + if(!PX_ScriptParseLastInstr(analysis,op,tk,out)) + goto _ERROR; + } + *pretOperand=*(PX_VECTORAT(PX_SCRIPT_AST_OPERAND,tk,0)); + if(!PX_ScriptParseAST_MapTokenToR1(analysis,*pretOperand,out)) goto _ERROR; + + if (tk->size!=1) + { + goto _ERROR; + } + + level=PX_SCRIPT_OPCODE_LEVEL_BOTTOM; + PX_VectorPop(tk); + break; + } + break; + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADD: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INC: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_POSITIVE: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SUB: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DEC: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NEGATIVE: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MUL: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DIV: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_AND: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OR: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NOT: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_XOR: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INV: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MOD: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHL: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHR: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DOT: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGE: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGEEUQ: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESS: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESSEQU: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_UNEQU: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_EQU: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LGEQU: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LAND: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LOR: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADR: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OFT: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_PTR: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INT: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FLOAT: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRING: + case PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMORY: + { + if (pVec[*offset].type==PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DOT||pVec[*offset].type==PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OFT) + { + if (pcurrentSet==PX_NULL) + { + goto _ERROR; + } + } + else + { + pcurrentSet=PX_NULL; + } + if (level>pVec[*offset].oplevel) + { + level=pVec[*offset].oplevel; + if(!PX_ScriptParseAST_PushOpcode(analysis,op,pVec[*offset])) goto _ERROR;; + } + else + { + level=pVec[*offset].oplevel; + do{ + if(op->size>0) + { + if(!PX_ScriptParseLastInstr(analysis,op,tk,out)) goto _ERROR;; + if(op->size) + plastop=PX_VECTORAT(PX_SCRIPT_AST_OPCODE,op,op->size-1); + } + else + break; + }while(op->size&&plastop->level<=level); + if(!PX_ScriptParseAST_PushOpcode(analysis,op,pVec[*offset])) goto _ERROR;; + } + } + break; + default: + { + goto _ERROR; + } + } + (*offset)++; + } + + PX_VectorFree(op); + PX_VectorFree(tk); + return PX_TRUE; +_ERROR: + PX_VectorFree(op); + PX_VectorFree(tk); + return PX_FALSE; +} +#define PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE 1 +#define PX_SCRIPT_EXPRESSION_ACCEPT_BINARY 2 +#define PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN 4 +#define PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START 8 +#define PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_END 16 +#define PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_START 32 +#define PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_END 16 +#define PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_START (PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_START) +#define PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END (PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_END|PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_END) +static px_bool PX_ScriptParseExpression(PX_SCRIPT_Analysis *analysis,px_char *expr,px_string *out,PX_SCRIPT_AST_OPERAND *retOperand) +{ + px_int i; + px_uint quotes; + px_vector stream,opStack,tkStack; + px_lexer lexer; + PX_LEXER_STATE state; + PX_LEXER_LEXEME_TYPE type; + px_int streamOft=1; + px_int accept_type; + PX_SCRIPT_AST_OPERAND operand; + + px_bool ret=PX_TRUE; + + PX_SCRIPT_EXPR_STREAM Op; + + if (PX_strlen(expr)==0) + { + retOperand->operandType=PX_SCRIPT_AST_OPERAND_TYPE_VOID; + retOperand->region=PX_SCRIPT_VARIABLE_REGION_GLOBAL; + return PX_TRUE; + } + + PX_StringClear(out); + + + PX_LexerInit(&lexer,analysis->mp); + PX_LexerRegisterDelimiter(&lexer,','); + PX_LexerRegisterDelimiter(&lexer,';'); + PX_LexerRegisterDelimiter(&lexer,'+'); + PX_LexerRegisterDelimiter(&lexer,'-'); + PX_LexerRegisterDelimiter(&lexer,'*'); + PX_LexerRegisterDelimiter(&lexer,'/'); + PX_LexerRegisterDelimiter(&lexer,'%'); + PX_LexerRegisterDelimiter(&lexer,'&'); + PX_LexerRegisterDelimiter(&lexer,'|'); + PX_LexerRegisterDelimiter(&lexer,'^'); + PX_LexerRegisterDelimiter(&lexer,'~'); + PX_LexerRegisterDelimiter(&lexer,'('); + PX_LexerRegisterDelimiter(&lexer,')'); + PX_LexerRegisterDelimiter(&lexer,'!'); + PX_LexerRegisterDelimiter(&lexer,'='); + PX_LexerRegisterDelimiter(&lexer,'>'); + PX_LexerRegisterDelimiter(&lexer,'<'); + PX_LexerRegisterDelimiter(&lexer,'{'); + PX_LexerRegisterDelimiter(&lexer,'}'); + PX_LexerRegisterDelimiter(&lexer,'['); + PX_LexerRegisterDelimiter(&lexer,']'); + PX_LexerRegisterDelimiter(&lexer,'.'); + PX_LexerRegisterSpacer(&lexer,' '); + PX_LexerRegisterSpacer(&lexer,'\t'); + quotes=PX_LexerRegisterContainer(&lexer,"\"","\""); + PX_LexerRegisterContainerTransfer(&lexer,quotes,'\\'); + PX_LexerRegisterContainer(&lexer,"\'","\'"); + PX_LexerRegisterContainer(&lexer,"@","@"); + PX_LexerSetTokenCase(&lexer,PX_LEXER_LEXEME_CASE_UPPER); + + PX_LexerSetNumericMatch(&lexer,PX_TRUE); + + + if(!PX_LexerLoadSourceFromMemory(&lexer,expr)) + return PX_FALSE; + + PX_VectorInit(analysis->mp,&stream,sizeof(PX_SCRIPT_EXPR_STREAM),32); + PX_VectorInit(analysis->mp,&opStack,sizeof(PX_SCRIPT_AST_OPCODE),32); + PX_VectorInit(analysis->mp,&tkStack,sizeof(PX_SCRIPT_AST_OPERAND),32); + + // + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_START; + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=0; + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&lexer); + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + + if (type==PX_LEXER_LEXEME_TYPE_TOKEN) + { + ////////////////////////////////////////////////////////////////////////// + //key word + if (PX_strequ(lexer.CurLexeme.buffer,"STRLEN")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRLEN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_strequ(lexer.CurLexeme.buffer,"MEMLEN")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMLEN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_strequ(lexer.CurLexeme.buffer,"SIN")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SIN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_strequ(lexer.CurLexeme.buffer,"COS")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COS; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_strequ(lexer.CurLexeme.buffer,"INT")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INT; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_strequ(lexer.CurLexeme.buffer,"FLOAT")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FLOAT; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_strequ(lexer.CurLexeme.buffer,"STRING")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRING; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_strequ(lexer.CurLexeme.buffer,"MEMORY")) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + else + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMORY; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=1; + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if (PX_ScriptParseIsValidToken(lexer.CurLexeme.buffer)) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + + state=PX_LexerGetState(&lexer); + type=PX_ScriptTranslatorNextToken(&lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer.Symbol=='(') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FUNCTION; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_FUNC; + Op.oplevel=0; + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + else + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_TOKEN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_VAR; + Op.oplevel=0; + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + } + PX_VectorPushback(&stream,&Op); + + PX_LexerSetState(state); + + } + else if(PX_strIsNumeric(lexer.CurLexeme.buffer)) + { + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_TOKEN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONST; + Op.oplevel=0; + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else if(lexer.CurLexeme.buffer[0]=='0'&&lexer.CurLexeme.buffer[1]=='X') + { + for (i=2;lexer.CurLexeme.buffer[i];i++) + { + if (lexer.CurLexeme.buffer[i]>='0'&&lexer.CurLexeme.buffer[i]<='F') + { + continue; + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Illegal hexadecimal."); + goto _CLEAR; + } + } + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_TOKEN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONST; + Op.oplevel=0; + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + } + else if (type==PX_LEXER_LEXEME_TYPE_CONATINER) + { + if (lexer.CurrentContainerType==quotes) + { + PX_StringReplace(&lexer.CurLexeme,"\n","\\n"); + PX_StringReplace(&lexer.CurLexeme,"\r","\\r"); + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_TOKEN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=0; + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + } + else if (type==PX_LEXER_LEXEME_TYPE_DELIMITER) + { + switch(lexer.Symbol) + { + case '+': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0&&(accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + state=PX_LexerGetState(&lexer); + + if(PX_LexerGetNextLexeme(&lexer)==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer.Symbol=='+') + { + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INC; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("++",PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"++"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + } + else + { + ret=PX_FALSE; + goto _CLEAR; + } + } + else + { + PX_LexerSetState(state); + + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADD; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("+",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"+"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_POSITIVE; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("+",PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"+"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + } + + + } + break; + + case '-': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0&&(accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + + state=PX_LexerGetState(&lexer); + type=PX_LexerGetNextLexeme(&lexer); + if(type==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer.Symbol=='>') + { + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OFT; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("->",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"->"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN; + } + else + { + ret=PX_FALSE; + goto _CLEAR; + } + } + else if(type==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer.Symbol=='-') + { + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DEC; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("--",PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"--"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + } + else + { + ret=PX_FALSE; + goto _CLEAR; + } + } + else + { + PX_LexerSetState(state); + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SUB; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("-",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"-"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NEGATIVE; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("-",PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"-"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + } + + } + break; + + case '*': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0&&(accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MUL; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("*",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"*"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_PTR; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("*",PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"*"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START; + } + + } + break; + + case '/': + { + + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DIV; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("/",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"/"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + break; + + case '[': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_START)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETBEGIN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=PX_ScriptParseGetOpLevel("[",PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"["); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + break; + + case ']': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_END)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETEND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=PX_ScriptParseGetOpLevel("]",PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"]"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END; + } + break; + + case '(': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=PX_ScriptParseGetOpLevel("(",PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"("); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_END|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + break; + + case ')': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_END)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=PX_ScriptParseGetOpLevel(")",PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,")"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_BINARY|PX_SCRIPT_EXPRESSION_ACCEPT_BRACKET_END|PX_SCRIPT_EXPRESSION_ACCEPT_MBRACKET_START; + } + break; + + case '.': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DOT; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel(lexer.CurLexeme.buffer,PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"."); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN; + } + break; + + case '!': + { + state=PX_LexerGetState(&lexer); + type=PX_LexerGetNextLexeme(&lexer); + if(type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_LexerSetState(state); + + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NOT; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("!",PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"!"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN; + } + else if (lexer.Symbol=='=') + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_UNEQU; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("!=",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"!="); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='(') + { + PX_LexerSetState(state); + + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NOT; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("!",PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"!"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN; + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + } + break; + + case '~': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INV; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("~",PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"~"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN; + } + break; + + case '^': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_XOR; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("^",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"^"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + break; + + case '%': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MOD; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel(lexer.CurLexeme.buffer,PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"%"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + break; + + + case '<': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + state=PX_LexerGetState(&lexer); + + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_LexerSetState(state); + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESS; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("<",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"<"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='<') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHL; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("<<",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"<<"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='=') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESSEQU; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("<=",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"<="); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + } + break; + + case '>': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + state=PX_LexerGetState(&lexer); + + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_LexerSetState(state); + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGE; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel(">",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,">"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='>') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHR; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel(">>",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,">>"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='=') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGEEUQ; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel(">=",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,">="); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + } + break; + + case '=': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + state=PX_LexerGetState(&lexer); + + if(PX_LexerGetNextLexeme(&lexer)==PX_LEXER_LEXEME_TYPE_DELIMITER&&lexer.Symbol=='=') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LGEQU; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("==",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"=="); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + PX_LexerSetState(state); + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_EQU; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("=",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"="); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + continue; + } + } + break; + + + case '&': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0&&(accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + + if (accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY) + { + state=PX_LexerGetState(&lexer); + + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + + PX_LexerSetState(state); + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_AND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("&",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"&"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='&') + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LAND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("&&",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"&&"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='(') + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + goto _CLEAR; + } + + PX_LexerSetState(state); + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_AND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("&",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"&"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + } + else + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADR; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE; + Op.oplevel=PX_ScriptParseGetOpLevel("&",PX_FALSE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"&"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN; + } + + + } + break; + + case '|': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + state=PX_LexerGetState(&lexer); + + if(PX_LexerGetNextLexeme(&lexer)!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_LexerSetState(state); + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OR; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("|",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"|"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='|') + { + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LAND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("||",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"||"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else if (lexer.Symbol=='(') + { + PX_LexerSetState(state); + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OR; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel("|",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,"|"); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + else + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + } + break; + + case ',': + { + if ((accept_type&PX_SCRIPT_EXPRESSION_ACCEPT_BINARY)==0) + { + ret=PX_FALSE; + PX_ScriptTranslatorError(&analysis->lexer,"Unexpected opcode."); + goto _CLEAR; + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COMMA; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY; + Op.oplevel=PX_ScriptParseGetOpLevel(",",PX_TRUE); + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,","); + PX_VectorPushback(&stream,&Op); + accept_type=PX_SCRIPT_EXPRESSION_ACCEPT_LBRACKET_START|PX_SCRIPT_EXPRESSION_ACCEPT_TOKEN|PX_SCRIPT_EXPRESSION_ACCEPT_SINGLE; + } + break; + } + } + } + + Op.type=PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND; + Op.opclass=PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER; + Op.oplevel=0; + PX_StringInit(analysis->mp,&Op.code); + PX_StringCat(&Op.code,lexer.CurLexeme.buffer); + PX_VectorPushback(&stream,&Op); + PX_StringCat(out,";--------"); + + for(i=0;icode); + } + PX_VectorFree(&stream); + + for (i=0;icode); + } + PX_VectorFree(&opStack); + + for (i=0;ilexer); + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)) + { + resType=PX_SCRIPT_PARSER_VAR_TYPE_INT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)) + { + resType=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)) + { + resType=PX_SCRIPT_PARSER_VAR_TYPE_STRING; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY)) + { + resType=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY; + } + else + { + goto _ERROR; + } + + while(PX_TRUE) + { + PX_memset(&variable,0,sizeof(variable)); + variable.bParam=PX_FALSE; + variable.bInitialized=PX_FALSE; + variable.BeginIndex=-1; + variable.size=-1; + variable.type=resType; + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='*') + { + switch(variable.type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR; + } + break; + default: + goto _ERROR; + } + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + goto _ERROR; + } + + PX_StringInit(analysis->mp,&variable.Mnemonic); + PX_StringCat(&variable.Mnemonic,analysis->lexer.CurLexeme.buffer); + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + + if (analysis->lexer.Symbol=='[') + { + + switch(variable.type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_ARRAY; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING_ARRAY; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + { + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_ARRAY; + } + break; + + default: + goto _ERROR; + } + + if(PX_ScriptTranslatorNextToken(&analysis->lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + if(!PX_strIsNumeric(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + } + + variable.size=PX_atoi(analysis->lexer.CurLexeme.buffer); + + if (variable.size==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid array"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis->lexer.Symbol!=']') + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + else if(analysis->lexer.Symbol=='=') + { + variable.size=1; + variable.bInitialized=PX_TRUE; + PX_StringInit(analysis->mp,&variable.GlobalInitializeValue); + while(PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol==';') + { + break; + } + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol==',') + { + break; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + PX_ScriptTranslatorError(&analysis->lexer,"Error Expression."); + PX_StringFree(&variable.Mnemonic); + PX_StringFree(&variable.GlobalInitializeValue); + goto _ERROR; + } + PX_StringCat(&variable.GlobalInitializeValue,analysis->lexer.CurLexeme.buffer); + } + + if (PX_strlen(variable.GlobalInitializeValue.buffer)==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Error Expression."); + PX_StringFree(&variable.Mnemonic); + PX_StringFree(&variable.GlobalInitializeValue); + goto _ERROR; + } + } + else + { + variable.size=1; + } + + + if (analysis->functionInside) + { + + for (i=0;iv_variableStackTable.size;i++) + { + if (PX_strequ(variable.Mnemonic.buffer,PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variableStackTable,i)->Mnemonic.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"variable redefined."); + PX_StringFree(&variable.Mnemonic); + if(variable.bInitialized) + PX_StringFree(&variable.GlobalInitializeValue); + goto _ERROR; + } + } + + PX_VectorPushback(&analysis->v_variableStackTable,&variable); + } + else + { + for (i=0;iv_variablesGlobalTable.size;i++) + { + if (PX_strequ(variable.Mnemonic.buffer,PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesGlobalTable,i)->Mnemonic.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"variable redefined."); + PX_StringFree(&variable.Mnemonic); + if(variable.bInitialized) + PX_StringFree(&variable.GlobalInitializeValue); + goto _ERROR; + } + } + + if (analysis->v_variablesGlobalTable.size==0) + { + variable.BeginIndex=0; + } + else + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesGlobalTable,analysis->v_variablesGlobalTable.size-1); + variable.BeginIndex=pvar->BeginIndex+pvar->size; + } + + + PX_VectorPushback(&analysis->v_variablesGlobalTable,&variable); + } + + if(analysis->lexer.Symbol==',') + { + continue; + } + else if(analysis->lexer.Symbol==';') + { + break; + } + else + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + } + + return PX_TRUE; +_ERROR: + return PX_FALSE; +} +static px_bool PX_ScriptParseSet(PX_SCRIPT_Analysis *analysis) +{ + PX_LEXER_LEXEME_TYPE type; + PX_SCRIPT_VARIABLES variable,*pvar; + PX_SCRIPT_SET *pset; + PX_LEXER_STATE state; + px_int i; + variable.bParam=PX_FALSE; + variable.bInitialized=PX_FALSE; + variable.BeginIndex=-1; + variable.size=-1; + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_SET; + + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid set name"); + goto _ERROR; + } + + if (!(pset=PX_ScriptParseGetSetInfo(analysis,analysis->lexer.CurLexeme.buffer))) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid set type"); + goto _ERROR; + } + + variable.setIndex=PX_ScriptParseGetSetIndex(analysis,analysis->lexer.CurLexeme.buffer); + + while(PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='*') + { + variable.size=1; + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR; + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid set name"); + goto _ERROR; + } + + PX_StringInit(analysis->mp,&variable.Mnemonic); + PX_StringCat(&variable.Mnemonic,analysis->lexer.CurLexeme.buffer); + + + state=PX_LexerGetState(&analysis->lexer); + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + + if (analysis->lexer.Symbol=='[') + { + if (variable.type==PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Array of set pointers is not support."); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + variable.type=PX_SCRIPT_PARSER_VAR_TYPE_SET_ARRAY; + + if(PX_ScriptTranslatorNextToken(&analysis->lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + if(!PX_strIsNumeric(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + } + + + if(variable.type==PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR) + variable.size=PX_atoi(analysis->lexer.CurLexeme.buffer); + else + variable.size=PX_atoi(analysis->lexer.CurLexeme.buffer)*pset->size; + + if (variable.size==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid array"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis->lexer.Symbol!=']') + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + } + else + { + if(variable.type==PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR) + variable.size=1; + else + variable.size=pset->size; + } + + + if (analysis->functionInside) + { + + for (i=0;iv_variableStackTable.size;i++) + { + if (PX_strequ(variable.Mnemonic.buffer,PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variableStackTable,i)->Mnemonic.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"variable redefined."); + PX_StringFree(&variable.Mnemonic); + if(variable.bInitialized) + PX_StringFree(&variable.GlobalInitializeValue); + goto _ERROR; + } + } + + if (analysis->v_variableStackTable.size==0) + { + variable.BeginIndex=0; + } + else + { + variable.BeginIndex=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variableStackTable,analysis->v_variableStackTable.size-1)->BeginIndex+\ + PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variableStackTable,analysis->v_variableStackTable.size-1)->size; + } + + PX_VectorPushback(&analysis->v_variableStackTable,&variable); + } + else + { + for (i=0;iv_variablesGlobalTable.size;i++) + { + if (PX_strequ(variable.Mnemonic.buffer,PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesGlobalTable,i)->Mnemonic.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"variable redefined."); + PX_StringFree(&variable.Mnemonic); + if(variable.bInitialized) + PX_StringFree(&variable.GlobalInitializeValue); + goto _ERROR; + } + } + + if (analysis->v_variablesGlobalTable.size==0) + { + variable.BeginIndex=0; + } + else + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesGlobalTable,analysis->v_variablesGlobalTable.size-1); + variable.BeginIndex=pvar->BeginIndex+pvar->size; + } + + + PX_VectorPushback(&analysis->v_variablesGlobalTable,&variable); + } + + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"\";\" is expected but not found."); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + + if(analysis->lexer.Symbol==',') + { + continue; + } + else if(analysis->lexer.Symbol==';') + { + break; + } + else + { + PX_ScriptTranslatorError(&analysis->lexer,"\";\" is expected but not found."); + PX_StringFree(&variable.Mnemonic); + goto _ERROR; + } + } + + return PX_TRUE; +_ERROR: + return PX_FALSE; +} +px_bool PX_ScriptParseSetDefine(PX_SCRIPT_Analysis *analysis) +{ + PX_SCRIPT_SETMEMBER member,*pmember; + PX_SCRIPT_SET vSet,*pSet; + PX_LEXER_LEXEME_TYPE type; + px_int i; + + member.defvar.BeginIndex=-1; + + vSet.size=0; + + if ((PX_ScriptTranslatorNextToken(&analysis->lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + return PX_FALSE; + } + + PX_StringInit(analysis->mp,&vSet.Name); + PX_StringCat(&vSet.Name,analysis->lexer.CurLexeme.buffer); + PX_VectorInit(analysis->mp,&vSet.members,sizeof(PX_SCRIPT_SETMEMBER),1); + + if ((PX_ScriptTranslatorNextTokenSN(&analysis->lexer))!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + goto _ERROR; + } + if (analysis->lexer.Symbol!='{') + { + goto _ERROR; + } + + while(PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_NEWLINE) + { + continue; + } + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='}') + { + break; + } + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + + if((pSet=PX_ScriptParseGetSetInfo(analysis,analysis->lexer.CurLexeme.buffer))!=PX_NULL) + { + member.defvar.setIndex=PX_ScriptParseGetSetIndex(analysis,analysis->lexer.CurLexeme.buffer); + + ////////////////////////////////////////////////////////////////////////// + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='*') + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR; + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + goto _ERROR; + } + + PX_StringInit(analysis->mp,&member.defvar.Mnemonic); + PX_StringCat(&member.defvar.Mnemonic,analysis->lexer.CurLexeme.buffer); + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + + if (analysis->lexer.Symbol=='[') + { + if (member.defvar.type==PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR) + { + PX_ScriptTranslatorError(&analysis->lexer,"Array of set is not support."); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_SET_ARRAY; + + if(PX_ScriptTranslatorNextToken(&analysis->lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + if(!PX_strIsNumeric(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + member.offset=vSet.size; + vSet.size+=PX_atoi(analysis->lexer.CurLexeme.buffer)*pSet->size; + + if (vSet.size==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid array"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis->lexer.Symbol!=']') + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"\";\" is expected but not found."); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + if(analysis->lexer.Symbol==',') + { + PX_VectorPushback(&vSet.members,&member); + continue; + } + else if(analysis->lexer.Symbol==';') + { + PX_VectorPushback(&vSet.members,&member); + break; + } + else + { + PX_ScriptTranslatorError(&analysis->lexer,"\";\" is expected but not found."); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + break; + } + else if(analysis->lexer.Symbol==';') + { + member.offset=vSet.size; + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_SET; + vSet.size+=pSet->size; + PX_VectorPushback(&vSet.members,&member); + break; + } + else if(analysis->lexer.Symbol==',') + { + member.offset=vSet.size; + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_SET; + vSet.size+=pSet->size; + PX_VectorPushback(&vSet.members,&member); + continue; + } + else + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + } + ////////////////////////////////////////////////////////////////////////// + + } + else + { + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)) + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_INT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)) + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)) + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY)) + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY; + } + else + { + goto _ERROR; + } + + ////////////////////////////////////////////////////////////////////////// + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='*') + { + switch(member.defvar.type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR; + } + break; + default: + goto _ERROR; + } + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + goto _ERROR; + } + + PX_StringInit(analysis->mp,&member.defvar.Mnemonic); + PX_StringCat(&member.defvar.Mnemonic,analysis->lexer.CurLexeme.buffer); + member.defvar.bInitialized=PX_FALSE; + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + + if (analysis->lexer.Symbol=='[') + { + switch(member.defvar.type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_ARRAY; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING_ARRAY; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + { + member.defvar.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_ARRAY; + } + break; + + default: + goto _ERROR; + } + + if(PX_ScriptTranslatorNextToken(&analysis->lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + if(!PX_strIsNumeric(analysis->lexer.CurLexeme.buffer)) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + member.offset=vSet.size; + member.defvar.size=PX_atoi(analysis->lexer.CurLexeme.buffer); + vSet.size+=PX_atoi(analysis->lexer.CurLexeme.buffer); + + if (member.defvar.size==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid array"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis->lexer.Symbol!=']') + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if(analysis->lexer.Symbol=='=') + { + PX_ScriptTranslatorError(&analysis->lexer,"Initialize of array is not support."); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER) + { + PX_ScriptTranslatorError(&analysis->lexer,"\";\" is expected but not found."); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + + if(analysis->lexer.Symbol==',') + { + PX_VectorPushback(&vSet.members,&member); + continue; + } + else if(analysis->lexer.Symbol==';') + { + PX_VectorPushback(&vSet.members,&member); + break; + } + else + { + PX_ScriptTranslatorError(&analysis->lexer,"\";\" is expected but not found."); + PX_StringFree(&member.defvar.Mnemonic); + PX_VectorPushback(&vSet.members,&member); + goto _ERROR; + } + break; + } + else if(analysis->lexer.Symbol==';') + { + member.offset=vSet.size; + member.defvar.size=1; + member.defvar.setIndex=-1; + vSet.size+=1; + + PX_VectorPushback(&vSet.members,&member); + break; + } + else if(analysis->lexer.Symbol==',') + { + member.offset=vSet.size; + member.defvar.size=1; + member.defvar.setIndex=-1; + vSet.size+=1; + PX_VectorPushback(&vSet.members,&member); + continue; + } + else + { + PX_ScriptTranslatorError(&analysis->lexer,"Invalid var token"); + PX_StringFree(&member.defvar.Mnemonic); + goto _ERROR; + } + } + ////////////////////////////////////////////////////////////////////////// + } + + } + if (vSet.size==0) + { + PX_ScriptTranslatorError(&analysis->lexer,"Zero size of set"); + goto _ERROR; + } + PX_VectorPushback(&analysis->v_sets,&vSet); + return PX_TRUE; +_ERROR: + PX_StringFree(&vSet.Name); + PX_VectorFree(&vSet.members); + for (i=0;idefvar.Mnemonic); + if (pmember->defvar.bInitialized) + { + PX_StringFree(&pmember->defvar.GlobalInitializeValue); + } + } + PX_VectorFree(&vSet.members); + return PX_FALSE; +} +px_bool PX_ScriptParseFunctionDefined(PX_SCRIPT_Analysis *analysis,PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE functype) +{ + PX_SCRIPT_FUNCTION func,*pfunc=PX_NULL; + PX_SCRIPT_VARIABLES fvar; + px_int count=0,i,j; + PX_LEXER_LEXEME_TYPE type; + fvar.bParam=PX_TRUE; + func.retSetIndex=-1; + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + + if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)) + { + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_INT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)) + { + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)) + { + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_STRING; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY)) + { + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_VOID)) + { + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_VOID; + } + else if ((func.retSetIndex=PX_ScriptParseGetSetIndex(analysis,analysis->lexer.CurLexeme.buffer))!=-1) + { + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_SET; + } + else + { + goto _ERROR; + } + + //function Name + PX_ScriptParserClearStackVariables(analysis); + func.parametersSize=0; + func.LocalSize=0; + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='*') + { + switch(func.retType) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_SET: + func.retType=PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR; + break; + default: + goto _ERROR; + } + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + if (func.retType==PX_SCRIPT_PARSER_VAR_TYPE_SET) + { + PX_ScriptTranslatorError(&analysis->lexer,"Could not return a set-type"); + goto _ERROR; + } + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + return PX_FALSE; + } + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + return PX_FALSE; + } + + if (PX_StringLen(&analysis->lexer.CurLexeme)>PX_SCRIPT_FUNCTION_NAME_MAX_LEN) + { + return PX_FALSE; + } + PX_strcpy(func.name,analysis->lexer.CurLexeme.buffer,PX_SCRIPT_FUNCTION_NAME_MAX_LEN); + if ((PX_ScriptTranslatorNextToken(&analysis->lexer))!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis->lexer.Symbol!='(') + { + goto _ERROR; + } + + while (PX_TRUE) + { + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol==')') + { + break; + } + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + fvar.size=1; + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)) + { + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_INT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)) + { + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)) + { + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING; + } + else if (PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY)) + { + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY; + } + else if (PX_ScriptParseGetSetInfo(analysis,analysis->lexer.CurLexeme.buffer)) + { + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_SET; + + if ((fvar.setIndex=PX_ScriptParseGetSetIndex(analysis,analysis->lexer.CurLexeme.buffer))==-1) + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + + ////////////////////////////////////////////////////////////////////////// + + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='*') + { + switch(fvar.type) + { + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR; + break; + case PX_SCRIPT_PARSER_VAR_TYPE_SET: + fvar.type=PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR; + break; + default: + goto _ERROR; + } + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + } + + if (fvar.type==PX_SCRIPT_PARSER_VAR_TYPE_SET) + { + PX_ScriptTranslatorError(&analysis->lexer,"Could not use a set for parameter.consider use a set pointer."); + goto _ERROR; + } + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + if (!PX_ScriptParseIsValidToken(analysis->lexer.CurLexeme.buffer)) + { + goto _ERROR; + } + + fvar.bInitialized=PX_FALSE; + fvar.BeginIndex=0; + PX_StringInit(analysis->mp,&fvar.Mnemonic); + PX_StringCat(&fvar.Mnemonic,analysis->lexer.CurLexeme.buffer); + + + if (count==PX_SCRIPT_FUNCTION_MAX_PARAM) + { + goto _ERROR; + } + + func.parameters[count]=fvar; + PX_VectorPushback(&analysis->v_variableStackTable,&fvar); + count++; + + if ((PX_ScriptTranslatorNextToken(&analysis->lexer))!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis->lexer.Symbol!=',') + { + if (analysis->lexer.Symbol==')') + { + break; + } + goto _ERROR; + } + } + func.parametersCount=count; + func.type=functype; + + for (i=0;iv_functions.size;i++) + { + pfunc=PX_VECTORAT(PX_SCRIPT_FUNCTION,&analysis->v_functions,i); + if (PX_strequ(pfunc->name,func.name)) + { + if (pfunc->parametersCount!=func.parametersCount) + { + PX_ScriptTranslatorError(&analysis->lexer,"Function redefined error."); + goto _ERROR; + } + for (j=0;jparameters[j].type) + { + PX_ScriptTranslatorError(&analysis->lexer,"Function parameters are not compatible"); + goto _ERROR; + } + } + analysis->currentFunc=*pfunc; + return PX_TRUE; + } + } + for (i=0;icurrentFunc=func; + PX_VectorPushback(&analysis->v_functions,&func); + return PX_TRUE; +_ERROR: + return PX_FALSE; +} +px_bool PX_ScriptParseFunctionGuiderCode(PX_SCRIPT_Analysis *analysis) +{ + int stacksize,i,j,oftIndex; + PX_SCRIPT_VARIABLES *pvar; + px_string code; + px_string exprgen; + PX_SCRIPT_AST_OPERAND retOperand; + PX_SCRIPT_SET *pset; + oftIndex=0; + stacksize=0; + for (i=0;iv_variableStackTable.size;i++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variableStackTable,i); + stacksize+=pvar->size; + } + stacksize+=1;//for CALL IP + //ip + oftIndex=stacksize-analysis->currentFunc.parametersSize-1; + //param + oftIndex=stacksize-analysis->currentFunc.parametersSize; + + for (i=0;icurrentFunc.parametersCount;i++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variableStackTable,i); + pvar->BeginIndex=oftIndex; + oftIndex+=pvar->size; + } + + //stack + oftIndex=0; + for (i=analysis->currentFunc.parametersCount;iv_variableStackTable.size;i++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variableStackTable,i); + pvar->BeginIndex=oftIndex; + oftIndex+=pvar->size; + } + + if (analysis->currentFunc.type==PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_EXPORT) + { + PX_StringCat(&analysis->code,"EXPORT "); + } + + PX_StringCat(&analysis->code,"FUNCTION "); + PX_StringCat(&analysis->code,analysis->currentFunc.name); + PX_StringCat(&analysis->code,":\n"); + + //generate codes + PX_StringInit(analysis->mp,&code); + if(stacksize-analysis->currentFunc.parametersCount!=0) + { + PX_StringFormat1(&code,"SUB SP,%1\n",PX_STRINGFORMAT_INT(stacksize-analysis->currentFunc.parametersCount-1)); + PX_StringCat(&analysis->code,code.buffer); + } + PX_StringSet(&code,"MOV BP,SP\n"); + PX_StringCat(&analysis->code,code.buffer); + + for (i=0;iv_variableStackTable.size;i++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variableStackTable,i); + if (!pvar->bParam&&pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_STRING) + { + PX_StringFormat1(&code,"MOV LOCAL[%1],\"\"\n",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(&analysis->code,code.buffer); + } + if (!pvar->bParam&&pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_MEMORY) + { + PX_StringFormat1(&code,"MOV LOCAL[%1],@00@\n",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(&analysis->code,code.buffer); + } + if (!pvar->bParam&&pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_SET) + { + pset=PX_ScriptParseGetSetByIndex(analysis,pvar->setIndex); + if (pset) + { + for (j=0;jmembers.size;j++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&pset->members,j); + + if (!pvar->bParam&&pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_STRING) + { + PX_StringFormat1(&code,"MOV LOCAL[%1],\"\"\n",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(&analysis->code,code.buffer); + } + if (!pvar->bParam&&pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_MEMORY) + { + PX_StringFormat1(&code,"MOV LOCAL[%1],@00@\n",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(&analysis->code,code.buffer); + } + } + } + } + } + + PX_StringFree(&code); + analysis->currentFunc.LocalSize=stacksize-analysis->currentFunc.parametersSize-1; + + //Local variables initialize + for (i=0;iv_variableStackTable.size;i++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variableStackTable,i); + if(pvar->bInitialized) + { + PX_StringInit(analysis->mp,&code); + PX_StringInit(analysis->mp,&exprgen); + PX_StringFormat2(&code,"%1=%2",PX_STRINGFORMAT_STRING(pvar->Mnemonic.buffer),PX_STRINGFORMAT_STRING(pvar->GlobalInitializeValue.buffer)); + if (!PX_ScriptParseExpression(analysis,code.buffer,&exprgen,&retOperand)) + { + PX_StringFree(&code); + PX_StringFree(&exprgen); + return PX_FALSE; + } + PX_StringCat(&analysis->code,exprgen.buffer); + PX_StringFree(&exprgen); + PX_StringFree(&code); + } + } + return PX_TRUE; +} +px_bool PX_ScriptParseBootCode(PX_SCRIPT_Analysis *analysis) +{ + px_int i; + PX_SCRIPT_VARIABLES *pvar; + px_string code; + px_string exprgen; + PX_SCRIPT_AST_OPERAND retOperand; + for (i=0;iv_variablesGlobalTable.size;i++) + { + pvar=PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis->v_variablesGlobalTable,i); + if(pvar->bInitialized) + { + PX_StringInit(analysis->mp,&code); + PX_StringInit(analysis->mp,&exprgen); + PX_StringFormat2(&code,"%1=%2\n",PX_STRINGFORMAT_STRING(pvar->Mnemonic.buffer),PX_STRINGFORMAT_STRING(pvar->GlobalInitializeValue.buffer)); + if (!PX_ScriptParseExpression(analysis,code.buffer,&exprgen,&retOperand)) + { + PX_StringFree(&code); + PX_StringFree(&exprgen); + return PX_FALSE; + } + PX_StringCat(&analysis->bootCode,exprgen.buffer); + PX_StringFree(&exprgen); + PX_StringFree(&code); + } + } + return PX_TRUE; +} +px_bool PX_ScriptParseFunctionReturn(PX_SCRIPT_Analysis *analysis) +{ + px_string code; + PX_StringInit(analysis->mp,&code); + + if(analysis->currentFunc.LocalSize!=0) + { + PX_StringFormat1(&code,"POPN %1\n",PX_STRINGFORMAT_INT(analysis->currentFunc.LocalSize)); + PX_StringCat(&analysis->code,code.buffer); + } + PX_StringCat(&analysis->code,"RET\n"); + PX_StringFree(&code); + return PX_TRUE; +} +px_bool PX_ScriptParsePopAstStructure(PX_SCRIPT_Analysis *analysis) +{ + PX_SCRIPT_AST_STRUCTURE *plast; + if (analysis->v_astStructure.size==0) + { + return PX_FALSE; + } + plast=PX_VECTORLAST(PX_SCRIPT_AST_STRUCTURE,&analysis->v_astStructure); + PX_VectorPop(&analysis->v_astStructure); + return PX_TRUE; +} +px_bool PX_ScriptParseLastCodeblockEnd(PX_SCRIPT_Analysis *analysis); + +px_bool PX_ScriptParseLastBlockEnd(PX_SCRIPT_Analysis *analysis) +{ + PX_SCRIPT_AST_STRUCTURE astStruct; + + astStruct=*PX_VECTORLAST(PX_SCRIPT_AST_STRUCTURE,&analysis->v_astStructure); + switch(astStruct.type) + { + case PX_SCRIPT_AST_STRUCTURE_TYPE_IF: + { + if (astStruct._if.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_ELSE: + { + if (astStruct._else.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_FOR: + { + if (astStruct._for.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE: + { + if (astStruct._while.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_COMPARE: + { + if (astStruct._compare.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_WITH: + { + if (astStruct._with.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + } + return PX_TRUE; +} +px_bool PX_ScriptParseLastCodeblockEnd(PX_SCRIPT_Analysis *analysis) +{ + PX_LEXER_STATE state; + PX_LEXER_LEXEME_TYPE type; + PX_SCRIPT_AST_STRUCTURE buildastStruct; + PX_SCRIPT_AST_STRUCTURE astStruct; + px_string fmrString; + + if (analysis->v_astStructure.size==0) + { + return PX_FALSE; + } + + astStruct=*PX_VECTORLAST(PX_SCRIPT_AST_STRUCTURE,&analysis->v_astStructure); + + if(!PX_ScriptParsePopAstStructure(analysis))return PX_FALSE; + + switch(astStruct.type) + { + case PX_SCRIPT_AST_STRUCTURE_TYPE_FUNCTION: + { + if(!PX_ScriptParseFunctionReturn(analysis)) return PX_FALSE; + analysis->functionInside=PX_FALSE; + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_IF: + { + // + //if() + //{ + //}<---here + + //else + state=PX_LexerGetState(&analysis->lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis->lexer); + if (type==PX_LEXER_LEXEME_TYPE_TOKEN&&PX_strequ(analysis->lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_ELSE)) + { + //generate code + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _ELSE_%1\n",PX_STRINGFORMAT_INT(astStruct._if.elseflag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFree(&fmrString); + + buildastStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_ELSE; + buildastStruct._else.elseflag=astStruct._if.elseflag; + + state=PX_LexerGetState(&analysis->lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis->lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol=='{') + { + buildastStruct._else.oneline_expr=PX_FALSE; + } + else + { + PX_LexerSetState(state); + buildastStruct._else.oneline_expr=PX_TRUE; + } + PX_VectorPushback(&analysis->v_astStructure,&buildastStruct); + + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"_IF_%1:\n",PX_STRINGFORMAT_INT(astStruct._if.ifflag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFree(&fmrString); + } + else + { + PX_LexerSetState(state); + + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"_IF_%1:\n",PX_STRINGFORMAT_INT(astStruct._if.ifflag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFree(&fmrString); + + if (!PX_ScriptParseLastBlockEnd(analysis)) + { + return PX_FALSE; + } + + } + + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_ELSE: + { + // + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"_ELSE_%1:\n",PX_STRINGFORMAT_INT(astStruct._else.elseflag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFree(&fmrString); + + if (!PX_ScriptParseLastBlockEnd(analysis)) + { + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _WHILE_%1\n",PX_STRINGFORMAT_INT(astStruct._while.loopflag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFormat1(&fmrString,"_WHILE_%1:\n",PX_STRINGFORMAT_INT(astStruct._while.endflag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFree(&fmrString); + + if (!PX_ScriptParseLastBlockEnd(analysis)) + { + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_FOR: + { + PX_StringInit(analysis->mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _FOR_%1\n",PX_STRINGFORMAT_INT(astStruct._for.additionFlag)); + PX_StringCat(&analysis->code,fmrString.buffer); + //endflag + PX_StringFormat1(&fmrString,"_FOR_%1:\n",PX_STRINGFORMAT_INT(astStruct._for.endFlag)); + PX_StringCat(&analysis->code,fmrString.buffer); + PX_StringFree(&fmrString); + + if (!PX_ScriptParseLastBlockEnd(analysis)) + { + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_STRUCTURE_TYPE_COMPARE: + { + PX_StringInit(analysis->mp,&fmrString); + //endflag + PX_StringFormat1(&fmrString,"_COMPARE_%1:\n",PX_STRINGFORMAT_INT(astStruct._compare.endFlag)); + PX_StringCat(&analysis->code,fmrString.buffer); + //pop + PX_StringSet(&fmrString,"POP R1\n"); + PX_StringCat(&analysis->code,fmrString.buffer); + + PX_StringFree(&fmrString); + + if (!PX_ScriptParseLastBlockEnd(analysis)) + { + return PX_FALSE; + } + } + break; + + case PX_SCRIPT_AST_STRUCTURE_TYPE_WITH: + { + PX_StringInit(analysis->mp,&fmrString); + //endflag + PX_StringFormat1(&fmrString,"_WITH_%1:\n",PX_STRINGFORMAT_INT(astStruct._compare.endFlag)); + PX_StringCat(&analysis->code,fmrString.buffer); + + PX_StringFree(&fmrString); + + if (!PX_ScriptParseLastBlockEnd(analysis)) + { + return PX_FALSE; + } + } + break; + default: + PX_ERROR("Assert Error:FSM Error"); + } + + return PX_TRUE; +} +px_bool PX_ScriptParseIfLastAST(PX_SCRIPT_Analysis *analysis) +{ + PX_SCRIPT_AST_STRUCTURE astStruct; + + + if(analysis->v_astStructure.size) + { + astStruct=*PX_VECTORLAST(PX_SCRIPT_AST_STRUCTURE,&analysis->v_astStructure); + switch(astStruct.type) + { + case PX_SCRIPT_AST_STRUCTURE_TYPE_IF: + { + if (astStruct._if.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_ELSE: + { + if (astStruct._else.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE: + { + if (astStruct._while.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_FOR: + { + if (astStruct._for.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_COMPARE: + { + if (astStruct._compare.oneline_expr) + { + PX_ScriptTranslatorError(&analysis->lexer,"expression in useless compared."); + return PX_FALSE; + } + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_WITH: + { + if (astStruct._with.oneline_expr) + { + return PX_ScriptParseLastCodeblockEnd(analysis); + } + } + break; + } + } + else + return PX_FALSE; + + return PX_TRUE; +} +px_bool PX_ScriptParseGetExpression(PX_SCRIPT_Analysis *analysis,px_string *expr,px_char end) +{ + int mBracket=0,lBracket=0; + PX_LEXER_LEXEME_TYPE type; + + PX_StringClear(expr); + + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis->lexer); + + if (type==PX_LEXER_LEXEME_TYPE_NEWLINE) + { + continue; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + return PX_FALSE; + } + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis->lexer.Symbol==end&&!mBracket&&!lBracket) + { + break; + } + + if (analysis->lexer.Symbol=='(') + { + lBracket++; + } + if (analysis->lexer.Symbol==')') + { + lBracket--; + if(lBracket<0) + return PX_FALSE; + } + if (analysis->lexer.Symbol=='[') + { + mBracket++; + } + if (analysis->lexer.Symbol==']') + { + mBracket--; + if(mBracket<0) + return PX_FALSE; + } + + if (type==PX_LEXER_LEXEME_TYPE_SPACER) + { + continue; + } + + PX_StringCat(expr,analysis->lexer.CurLexeme.buffer); + } + return PX_TRUE; +} +px_bool PX_ScriptCompilerCompile(PX_SCRIPT_LIBRARY *lib,px_char *name,px_string *ASM,px_int LocalStackSize) +{ + PX_SCRIPT_SETMEMBER *psetmem; + PX_SCRIPT_SET *pset; + px_string codes; + PX_LEXER_STATE state; + px_int i,j,globalSize; + px_uint quotes; + PX_LEXER_LEXEME_TYPE type; + PX_SCRIPT_Analysis analysis; + PX_SCRIPT_AST_STRUCTURE buildAstStruct; + PX_SCRIPT_AST_STRUCTURE astStruct; + px_string expression,fmrString,condCodes; + px_string expCode; + px_bool isBeginExpression=PX_FALSE,hasLastReturn=PX_FALSE; + PX_SCRIPT_AST_OPERAND retOperand; + int mBracket=0,lBracket=0; + PX_SCRIPT_VARIABLES *pvar; + px_int thread=1; + px_bool withEnd; + ////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////// + + PX_StringInit(lib->mp,&codes); + + for (i=0;icodeLibraries.size;i++) + { + if (PX_strequ(name,PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->name.buffer)) + { + PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->bInclude=PX_TRUE; + PX_StringCopy(&codes,&PX_VECTORAT(PX_SCRIPT_CODE,&lib->codeLibraries,i)->code); + break; + } + } + + if (i==lib->codeLibraries.size) + { + PX_ScriptTranslatorError(PX_NULL,"Code of name was not existed"); + return PX_FALSE; + } + + if(!PX_ScriptParsePretreatment(&codes,lib,name)) + return PX_FALSE; + + analysis.functionInside=PX_FALSE; + analysis.functionReturn=PX_FALSE; + analysis._jFlag=0; + + PX_LexerInit(&analysis.lexer,lib->mp); + PX_LexerRegisterDelimiter(&analysis.lexer,','); + PX_LexerRegisterDelimiter(&analysis.lexer,';'); + PX_LexerRegisterDelimiter(&analysis.lexer,'+'); + PX_LexerRegisterDelimiter(&analysis.lexer,'-'); + PX_LexerRegisterDelimiter(&analysis.lexer,'*'); + PX_LexerRegisterDelimiter(&analysis.lexer,'/'); + PX_LexerRegisterDelimiter(&analysis.lexer,'%'); + PX_LexerRegisterDelimiter(&analysis.lexer,'&'); + PX_LexerRegisterDelimiter(&analysis.lexer,'^'); + PX_LexerRegisterDelimiter(&analysis.lexer,'~'); + PX_LexerRegisterDelimiter(&analysis.lexer,'('); + PX_LexerRegisterDelimiter(&analysis.lexer,')'); + PX_LexerRegisterDelimiter(&analysis.lexer,'!'); + PX_LexerRegisterDelimiter(&analysis.lexer,'='); + PX_LexerRegisterDelimiter(&analysis.lexer,'>'); + PX_LexerRegisterDelimiter(&analysis.lexer,'<'); + PX_LexerRegisterDelimiter(&analysis.lexer,'{'); + PX_LexerRegisterDelimiter(&analysis.lexer,'}'); + PX_LexerRegisterDelimiter(&analysis.lexer,'['); + PX_LexerRegisterDelimiter(&analysis.lexer,']'); + PX_LexerRegisterSpacer(&analysis.lexer,' '); + PX_LexerRegisterSpacer(&analysis.lexer,'\t'); + quotes=PX_LexerRegisterContainer(&analysis.lexer,"\"","\""); + PX_LexerRegisterContainerTransfer(&analysis.lexer,quotes,'\\'); + PX_LexerRegisterContainer(&analysis.lexer,"\'","\'"); + PX_LexerRegisterContainer(&analysis.lexer,"@","@"); + PX_LexerSetTokenCase(&analysis.lexer,PX_LEXER_LEXEME_CASE_UPPER); + + + PX_LexerLoadSourceFromMemory(&analysis.lexer,codes.buffer); + PX_StringFree(&codes); + + PX_VectorInit(lib->mp,&analysis.v_variablesGlobalTable,sizeof(PX_SCRIPT_VARIABLES),1); + PX_VectorInit(lib->mp,&analysis.v_variableStackTable,sizeof(PX_SCRIPT_VARIABLES),1); + PX_VectorInit(lib->mp,&analysis.v_sets,sizeof(PX_SCRIPT_SET),1); + PX_VectorInit(lib->mp,&analysis.v_functions,sizeof(PX_SCRIPT_FUNCTION),1); + PX_VectorInit(lib->mp,&analysis.v_astStructure,sizeof(PX_SCRIPT_AST_STRUCTURE),1); + + analysis.mp=lib->mp; + PX_StringInit(analysis.mp,&analysis.bootCode); + PX_StringInit(analysis.mp,&analysis.code); + + + ////////////////////////////////////////////////////////////////////////// + //Handle codes to stream + + + while (PX_TRUE) + { + state=PX_LexerGetState(&analysis.lexer); + if ((type=PX_ScriptTranslatorNextToken(&analysis.lexer))==PX_LEXER_LEXEME_TYPE_ERR) + { + goto _ERROR; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + + if (type==PX_LEXER_LEXEME_TYPE_NEWLINE) + { + continue; + } + ////////////////////////////////////////////////////////////////////////// + ///Runtime + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_RUNTIME)) + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_STACK)) + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + if (!PX_strIsInt(analysis.lexer.CurLexeme.buffer)) + { + goto _ERROR; + } + LocalStackSize=PX_atoi(analysis.lexer.CurLexeme.buffer); + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + if (type!=PX_LEXER_LEXEME_TYPE_NEWLINE) + { + goto _ERROR; + } + } + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_THREAD)) + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + if (!PX_strIsInt(analysis.lexer.CurLexeme.buffer)) + { + goto _ERROR; + } + thread=PX_atoi(analysis.lexer.CurLexeme.buffer); + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + if (type!=PX_LEXER_LEXEME_TYPE_NEWLINE) + { + goto _ERROR; + } + } + + continue; + } + + ////////////////////////////////////////////////////////////////////////// + ///VAR + ////////////////////////////////////////////////////////////////////////// + if ((pset=PX_ScriptParseGetSetInfo(&analysis,analysis.lexer.CurLexeme.buffer))!=PX_NULL||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_VOID)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY) + ) + { + if (isBeginExpression&&analysis.functionInside) + { + goto _ERROR; + } + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='*') + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + } + + if (type!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + if (!PX_ScriptParseIsValidToken(analysis.lexer.CurLexeme.buffer)) + { + goto _ERROR; + } + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='(') + { + //custom function + PX_LexerSetState(state); + ////////////////////////////////////////////////////////////////////////// + if (analysis.functionInside) + { + goto _ERROR; + } + + if(!PX_ScriptParseFunctionDefined(&analysis,PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_CUSTOM)) + goto _ERROR; + + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + analysis.functionInside=PX_TRUE; + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_FUNCTION; + PX_strcpy(buildAstStruct._func.name,analysis.currentFunc.name,sizeof(analysis.currentFunc.name)); + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + isBeginExpression=PX_FALSE; + continue; + } + else if (analysis.lexer.Symbol==';') + { + continue; + } + else + { + goto _ERROR; + } + ////////////////////////////////////////////////////////////////////////// + } + else + { + + if (pset) + { + ////////////////////////////////////////////////////////////////////////// + //SET VARIALBE + ////////////////////////////////////////////////////////////////////////// + if (isBeginExpression) + { + goto _ERROR; + } + + PX_LexerSetState(state); + if(!PX_ScriptParseSet(&analysis)) goto _ERROR; + } + else + { + //var + PX_LexerSetState(state); + + if (isBeginExpression) + { + PX_ScriptTranslatorError(&analysis.lexer,"Define variable before expression"); + goto _ERROR; + } + if(!PX_ScriptParseVar(&analysis)) goto _ERROR; + } + continue; + } + + } + ////////////////////////////////////////////////////////////////////////// + + + ////////////////////////////////////////////////////////////////////////// + ///SET DEFINE + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_SET)) + { + if (analysis.functionInside) + { + goto _ERROR; + } + + state=PX_LexerGetState(&analysis.lexer); + if (PX_ScriptTranslatorNextToken(&analysis.lexer)!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + + if ((type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer))==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + PX_LexerSetState(state); + {if(!PX_ScriptParseSetDefine(&analysis)) goto _ERROR;} + } + else + { + goto _ERROR; + } + continue; + } + ////////////////////////////////////////////////////////////////////////// + + + ////////////////////////////////////////////////////////////////////////// + // Host function define + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_HOST)) + { + if (analysis.functionInside) + { + goto _ERROR; + } + state=PX_LexerGetState(&analysis.lexer); + if ((type=PX_ScriptTranslatorNextToken(&analysis.lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_VOID)||\ + PX_ScriptParseGetSetInfo(&analysis,analysis.lexer.CurLexeme.buffer)!=PX_NULL + ) + { + PX_LexerSetState(state); + if(!PX_ScriptParseFunctionDefined(&analysis,PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_HOST)) + goto _ERROR; + } + else + { + goto _ERROR; + } + + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + PX_ScriptTranslatorError(&analysis.lexer,"Could not implement host function."); + goto _ERROR; + } + else if (analysis.lexer.Symbol==';') + { + continue; + } + else + { + goto _ERROR; + } + + } + ////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////// + // Export function define + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_EXPORT)) + { + state=PX_LexerGetState(&analysis.lexer); + + if (analysis.functionInside) + { + goto _ERROR; + } + if ((type=PX_ScriptTranslatorNextToken(&analysis.lexer))!=PX_LEXER_LEXEME_TYPE_TOKEN) + { + goto _ERROR; + } + + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY)||\ + PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_VOID)||\ + PX_ScriptParseGetSetInfo(&analysis,analysis.lexer.CurLexeme.buffer)!=PX_NULL + ) + { + PX_LexerSetState(state); + if(!PX_ScriptParseFunctionDefined(&analysis,PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_EXPORT)) + goto _ERROR; + } + else + { + goto _ERROR; + } + + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + analysis.functionInside=PX_TRUE; + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_FUNCTION; + PX_strcpy(buildAstStruct._func.name,analysis.currentFunc.name,sizeof(analysis.currentFunc.name)); + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + isBeginExpression=PX_FALSE; + continue; + } + else if (analysis.lexer.Symbol==';') + { + continue; + } + else + { + goto _ERROR; + } + } + ////////////////////////////////////////////////////////////////////////// + + + + ////////////////////////////////////////////////////////////////////////// + //Expression + ////////////////////////////////////////////////////////////////////////// + if (analysis.functionInside) + { + if (!isBeginExpression) + { + isBeginExpression=PX_TRUE; + if(!PX_ScriptParseFunctionGuiderCode(&analysis)) goto _ERROR; + } + } + + + ////////////////////////////////////////////////////////////////////////// + //IF + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_IF)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!='(') + { + goto _ERROR; + } + + //condition expression + PX_StringInit(analysis.mp,&expression); + PX_StringInit(analysis.mp,&expCode); + + if(!PX_ScriptParseGetExpression(&analysis,&expression,')')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + PX_StringCat(&analysis.code,";--------IF (CONDITION) \n"); + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + PX_StringCat(&analysis.code,expCode.buffer); + PX_StringFree(&expression); + PX_StringFree(&expCode); + ////////////////////////////////////////////////////////////////////////// + + if (!PX_ScriptParseIsOperandNumericType(retOperand)) + { + goto _ERROR; + } + + + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_IF; + buildAstStruct._if.ifflag=analysis._jFlag++; + buildAstStruct._if.elseflag=analysis._jFlag++; + + state=PX_LexerGetState(&analysis.lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + buildAstStruct._if.oneline_expr=PX_FALSE; + } + else + { + PX_LexerSetState(state); + buildAstStruct._if.oneline_expr=PX_TRUE; + } + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + + PX_StringInit(analysis.mp,&expression); + PX_StringFormat1(&expression,"JE R1,0,_IF_%1\n",PX_STRINGFORMAT_INT(buildAstStruct._if.ifflag)); + PX_StringCat(&analysis.code,expression.buffer); + PX_StringFree(&expression); + continue; + } + + ////////////////////////////////////////////////////////////////////////// + //WHILE + ////////////////////////////////////////////////////////////////////////// + + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_WHILE)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!='(') + { + goto _ERROR; + } + + //condition expression + PX_StringInit(analysis.mp,&expression); + PX_StringInit(analysis.mp,&expCode); + + if(!PX_ScriptParseGetExpression(&analysis,&expression,')')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + PX_StringCat(&analysis.code,";--------WHILE (CONDITION) \n"); + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE; + buildAstStruct._while.loopflag=analysis._jFlag++; + buildAstStruct._while.endflag=analysis._jFlag++; + + PX_StringInit(analysis.mp,&fmrString); + PX_StringFormat1(&fmrString,"_WHILE_%1:\n",PX_STRINGFORMAT_INT(buildAstStruct._while.loopflag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringFree(&fmrString); + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + PX_StringCat(&analysis.code,expCode.buffer); + PX_StringFree(&expression); + PX_StringFree(&expCode); + ////////////////////////////////////////////////////////////////////////// + + if (!PX_ScriptParseIsOperandNumericType(retOperand)) + { + goto _ERROR; + } + + + + + state=PX_LexerGetState(&analysis.lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + buildAstStruct._while.oneline_expr=PX_FALSE; + } + else + { + PX_LexerSetState(state); + buildAstStruct._while.oneline_expr=PX_TRUE; + } + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + + PX_StringInit(analysis.mp,&expression); + PX_StringFormat1(&expression,"JE R1,0,_WHILE_%1\n",PX_STRINGFORMAT_INT(buildAstStruct._while.endflag)); + PX_StringCat(&analysis.code,expression.buffer); + PX_StringFree(&expression); + continue; + } + ////////////////////////////////////////////////////////////////////////// + //_ASM + ////////////////////////////////////////////////////////////////////////// + + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_ASM)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!='{') + { + goto _ERROR; + } + + PX_StringInit(analysis.mp,&codes); + PX_StringInit(analysis.mp,&fmrString); + while (PX_TRUE) + { + type=PX_LexerGetNextLexeme(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='}') + { + PX_StringCat(&codes,"\n"); + break; + } + + for (i=0;itype==PX_SCRIPT_PARSER_VAR_TYPE_INT||pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_FLOAT||pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_STRING||pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_MEMORY) + if (PX_strequ(pvar->Mnemonic.buffer,analysis.lexer.CurLexeme.buffer)) + { + PX_StringFormat1(&fmrString,"LOCAL[%1]",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(&codes,fmrString.buffer); + goto _CONTINUE; + } + } + + for (i=0;itype==PX_SCRIPT_PARSER_VAR_TYPE_INT||pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_FLOAT||pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_STRING||pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_MEMORY) + if (PX_strequ(pvar->Mnemonic.buffer,analysis.lexer.CurLexeme.buffer)) + { + PX_StringFormat1(&fmrString,"GLOBAL[%1]",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(&codes,fmrString.buffer); + goto _CONTINUE; + } + } + + PX_StringCat(&codes,analysis.lexer.CurLexeme.buffer); +_CONTINUE: + PX_StringClear(&fmrString); + } + PX_StringCat(&analysis.code,codes.buffer); + PX_StringFree(&codes); + PX_StringFree(&fmrString); + continue; + } + + + ////////////////////////////////////////////////////////////////////////// + //FOR + ////////////////////////////////////////////////////////////////////////// + + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_FOR)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!='(') + { + goto _ERROR; + } + + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_FOR; + buildAstStruct._for.additionFlag=analysis._jFlag++; + buildAstStruct._for.conditionFlag=analysis._jFlag++; + buildAstStruct._for.endFlag=analysis._jFlag++; + + //condition expression + PX_StringCat(&analysis.code,";--------FOR (INIT;CONDITION;ADDITION) \n"); + + PX_StringInit(analysis.mp,&expression); + PX_StringInit(analysis.mp,&expCode); + PX_StringInit(analysis.mp,&fmrString); + PX_StringInit(analysis.mp,&condCodes); + //INIT code + if(!PX_ScriptParseGetExpression(&analysis,&expression,';')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + goto _ERROR; + } + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + goto _ERROR; + } + PX_StringCat(&analysis.code,expCode.buffer); + + //Jump to condition + + PX_StringFormat1(&fmrString,"JMP _FOR_%1\n",PX_STRINGFORMAT_INT(buildAstStruct._for.conditionFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + + + //Condition + if(!PX_ScriptParseGetExpression(&analysis,&expression,';')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + goto _ERROR; + } + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + goto _ERROR; + } + PX_StringCat(&condCodes,expCode.buffer); + + + //Addition + //Addition flag + PX_StringFormat1(&fmrString,"_FOR_%1:\n",PX_STRINGFORMAT_INT(buildAstStruct._for.additionFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + + if(!PX_ScriptParseGetExpression(&analysis,&expression,')')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + goto _ERROR; + } + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + goto _ERROR; + } + PX_StringCat(&analysis.code,expCode.buffer); + + //condition + //condition flag + PX_StringFormat1(&fmrString,"_FOR_%1:\n",PX_STRINGFORMAT_INT(buildAstStruct._for.conditionFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringCat(&analysis.code,condCodes.buffer); + + //jump to end + PX_StringFormat1(&fmrString,"JE R1,0,_FOR_%1\n",PX_STRINGFORMAT_INT(buildAstStruct._for.endFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_StringFree(&fmrString); + PX_StringFree(&condCodes); + + + ////////////////////////////////////////////////////////////////////////// + + if (!PX_ScriptParseIsOperandNumericType(retOperand)) + { + goto _ERROR; + } + + + state=PX_LexerGetState(&analysis.lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + buildAstStruct._for.oneline_expr=PX_FALSE; + } + else + { + PX_LexerSetState(state); + buildAstStruct._for.oneline_expr=PX_TRUE; + } + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + continue; + } + + + ////////////////////////////////////////////////////////////////////////// + //COMPARE + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_COMPARE)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_COMPARE; + buildAstStruct._compare.endFlag=analysis._jFlag++; + + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!='(') + { + goto _ERROR; + } + + PX_StringCat(&analysis.code,";--------COMPARE (ORIGINAL) \n"); + + //condition expression + PX_StringInit(analysis.mp,&expression); + PX_StringInit(analysis.mp,&expCode); + + if(!PX_ScriptParseGetExpression(&analysis,&expression,')')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + + buildAstStruct._compare.OriginOperand=retOperand; + + PX_StringCat(&analysis.code,expCode.buffer); + PX_StringCat(&analysis.code,"PUSH R1\n"); + PX_StringFree(&expression); + PX_StringFree(&expCode); + ////////////////////////////////////////////////////////////////////////// + + state=PX_LexerGetState(&analysis.lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + buildAstStruct._compare.oneline_expr=PX_FALSE; + } + else + { + PX_LexerSetState(state); + buildAstStruct._compare.oneline_expr=PX_TRUE; + } + + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + continue; + } + + + + ////////////////////////////////////////////////////////////////////////// + //WITH + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_WITH)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + withEnd=PX_FALSE; + for (i=analysis.v_astStructure.size-1;i>=0;i--) + { + astStruct=*PX_VECTORAT(PX_SCRIPT_AST_STRUCTURE,&analysis.v_astStructure,i); + if (astStruct.type==PX_SCRIPT_AST_STRUCTURE_TYPE_COMPARE) + { + break; + } + } + if (i<=0) //0 is function AST structure + { + goto _ERROR; + } + + + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!='(') + { + goto _ERROR; + } + + buildAstStruct.type=PX_SCRIPT_AST_STRUCTURE_TYPE_WITH; + buildAstStruct._with.endFlag=analysis._jFlag++; + + PX_StringCat(&analysis.code,";--------WITH (CONDITION) \n"); + + //condition expression + PX_StringInit(analysis.mp,&expression); + PX_StringInit(analysis.mp,&expCode); + + PX_StringCat(&analysis.code,"MOV R3,0\n"); + PX_StringCat(&analysis.code,"MOV R2,GLOBAL[SP]\n"); + + while(PX_TRUE) + { + +// if(!PX_ScriptParseGetExpression(&analysis,&expression,';')) +// { +// PX_StringFree(&expression); +// PX_StringFree(&expCode); +// goto _ERROR; +// } + ////////////////////////////////////////////////////////////////////////// + PX_StringClear(&expression); + mBracket=0,lBracket=0; + + while (PX_TRUE) + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + + if (type==PX_LEXER_LEXEME_TYPE_NEWLINE) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + if (type==PX_LEXER_LEXEME_TYPE_END) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol==';'&&!mBracket&&!lBracket) + { + break; + } + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol==')'&&!mBracket&&!lBracket) + { + withEnd=PX_TRUE; + break; + } + + if (analysis.lexer.Symbol=='(') + { + lBracket++; + } + if (analysis.lexer.Symbol==')') + { + lBracket--; + if(lBracket<0) + return PX_FALSE; + } + if (analysis.lexer.Symbol=='[') + { + mBracket++; + } + if (analysis.lexer.Symbol==']') + { + mBracket--; + if(mBracket<0) + return PX_FALSE; + } + + if (type==PX_LEXER_LEXEME_TYPE_SPACER) + { + continue; + } + + PX_StringCat(&expression,analysis.lexer.CurLexeme.buffer); + } + ////////////////////////////////////////////////////////////////////////// + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + + if (!PX_ScriptParseIsCompareAbleOperand(retOperand,astStruct._compare.OriginOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + PX_ScriptTranslatorError(&analysis.lexer,"Invalid operand-type."); + goto _ERROR; + } + + PX_StringCat(&analysis.code,expCode.buffer); + PX_StringCat(&analysis.code,"LGE R1,R1,R2\n"); + PX_StringCat(&analysis.code,"OR R3,R1\n"); + state=PX_LexerGetState(&analysis.lexer); + + if (withEnd) + { + break; + } + + } + PX_StringFormat1(&expCode,"JE R3,0,_WITH_%1\n",PX_STRINGFORMAT_INT(buildAstStruct._with.endFlag)); + PX_StringCat(&analysis.code,expCode.buffer); + + PX_StringFree(&expression); + PX_StringFree(&expCode); + + ////////////////////////////////////////////////////////////////////////// + + + state=PX_LexerGetState(&analysis.lexer); + type=PX_ScriptTranslatorNextTokenSN(&analysis.lexer); + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='{') + { + buildAstStruct._with.oneline_expr=PX_FALSE; + } + else + { + PX_LexerSetState(state); + buildAstStruct._with.oneline_expr=PX_TRUE; + } + + PX_VectorPushback(&analysis.v_astStructure,&buildAstStruct); + continue; + } + /////////////////////////////////////////////////////////////////////////// + //break + ////////////////////////////////////////////////////////////////////////// + + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_BREAK)) + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!=';') + { + goto _ERROR; + } + for (i=analysis.v_astStructure.size-1;i>=0;i--) + { + astStruct=*PX_VECTORAT(PX_SCRIPT_AST_STRUCTURE,&analysis.v_astStructure,i); + switch(astStruct.type) + { + case PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE: + { + PX_StringInit(analysis.mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _WHILE_%1\n",PX_STRINGFORMAT_INT(astStruct._while.endflag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringFree(&fmrString); + goto _BREAKOUT; + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_FOR: + { + PX_StringInit(analysis.mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _FOR_%1\n",PX_STRINGFORMAT_INT(astStruct._for.endFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringFree(&fmrString); + goto _BREAKOUT; + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_COMPARE: + { + PX_StringInit(analysis.mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _COMPARE_%1\n",PX_STRINGFORMAT_INT(astStruct._compare.endFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringFree(&fmrString); + goto _BREAKOUT; + } + break; + } + } + _BREAKOUT: + if (i<0) + { + PX_ScriptTranslatorError(&analysis.lexer,"Could not matched break to block."); + goto _ERROR; + } + if(!PX_ScriptParseIfLastAST(&analysis)) goto _ERROR; + continue; + } + + + /////////////////////////////////////////////////////////////////////////// + //continue + ////////////////////////////////////////////////////////////////////////// + + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_CONTINUE)) + { + type=PX_ScriptTranslatorNextToken(&analysis.lexer); + + if (type!=PX_LEXER_LEXEME_TYPE_DELIMITER||analysis.lexer.Symbol!=';') + { + goto _ERROR; + } + for (i=analysis.v_astStructure.size-1;i>=0;i--) + { + astStruct=*PX_VECTORAT(PX_SCRIPT_AST_STRUCTURE,&analysis.v_astStructure,i); + switch(astStruct.type) + { + case PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE: + { + PX_StringInit(analysis.mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _WHILE_%1\n",PX_STRINGFORMAT_INT(astStruct._while.loopflag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringFree(&fmrString); + goto _CONTINUEOUT; + } + break; + case PX_SCRIPT_AST_STRUCTURE_TYPE_FOR: + { + PX_StringInit(analysis.mp,&fmrString); + PX_StringFormat1(&fmrString,"JMP _FOR_%1\n",PX_STRINGFORMAT_INT(astStruct._for.additionFlag)); + PX_StringCat(&analysis.code,fmrString.buffer); + PX_StringFree(&fmrString); + goto _CONTINUEOUT; + } + break; + } + } +_CONTINUEOUT: + if (i<0) + { + PX_ScriptTranslatorError(&analysis.lexer,"Could not matched break to block."); + goto _ERROR; + } + if(!PX_ScriptParseIfLastAST(&analysis)) goto _ERROR; + continue; + } + + /////////////////////////////////////////////////////////////////////////// + //Return + ////////////////////////////////////////////////////////////////////////// + if (PX_strequ(analysis.lexer.CurLexeme.buffer,PX_SCRIPT_TRANSLATOR_KEYWORD_RETURN)) + { + if (!analysis.functionInside) + { + goto _ERROR; + } + //custom expression + PX_StringInit(analysis.mp,&expression); + PX_StringInit(analysis.mp,&expCode); + + if(!PX_ScriptParseGetExpression(&analysis,&expression,';')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + PX_StringCat(&analysis.code,";RETURN (EXPRESSION)\n"); + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + + + PX_StringCat(&analysis.code,expCode.buffer); + PX_StringFree(&expression); + PX_StringFree(&expCode); + + switch (analysis.currentFunc.retType) + { + case PX_SCRIPT_PARSER_VAR_TYPE_VOID: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_VOID) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_INT: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&\ + retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&\ + retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT||retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST) + { + PX_StringCat(&analysis.code,"INT R1\n"); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST&&\ + retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST&&\ + retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + if (retOperand.operandType==PX_SCRIPT_AST_OPERAND_TYPE_INT||PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST) + { + PX_StringCat(&analysis.code,"FLT R1\n"); + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + case PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR: + if (retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR&&retOperand.operandType!=PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + if (retOperand.pSet!=PX_ScriptParseGetSetByIndex(&analysis,analysis.currentFunc.retSetIndex)) + { + PX_ScriptTranslatorError(&analysis.lexer,"Return-type not matched."); + goto _ERROR; + } + break; + } + + if (!PX_ScriptParseFunctionReturn(&analysis)) + { + goto _ERROR; + } + + if(!PX_ScriptParseIfLastAST(&analysis)) goto _ERROR; + continue; + } + + + //Expression parse + + if(analysis.functionInside) + { + + if (type==PX_LEXER_LEXEME_TYPE_DELIMITER&&analysis.lexer.Symbol=='}') + { + if(!PX_ScriptParseLastCodeblockEnd(&analysis)) goto _ERROR; + + if (!analysis.functionInside) + { + isBeginExpression=PX_FALSE; + } + } + else + { + //custom expression + PX_LexerSetState(state); + + PX_StringInit(analysis.mp,&expression); + PX_StringInit(analysis.mp,&expCode); + + if(!PX_ScriptParseGetExpression(&analysis,&expression,';')) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + + if(!PX_ScriptParseExpression(&analysis,expression.buffer,&expCode,&retOperand)) + { + PX_StringFree(&expression); + PX_StringFree(&expCode); + goto _ERROR; + } + + PX_StringCat(&analysis.code,expCode.buffer); + + PX_StringFree(&expression); + PX_StringFree(&expCode); + + if(!PX_ScriptParseIfLastAST(&analysis)) goto _ERROR; + } + continue; + } + ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + // + + PX_ScriptTranslatorError(&analysis.lexer,"Invalid expression."); + goto _ERROR; + + } + ////////////////////////////////////////////////////////////////////////// + //Output + if (!PX_ScriptParseBootCode(&analysis)) + { + goto _ERROR; + } + //.Global .Local + globalSize=0; + for (i=0;isize; + } + + PX_StringInit(analysis.mp,&fmrString); + PX_StringFormat3(&fmrString,".GLOBAL %1\n.STACK %2\n.THREAD %3\n",PX_STRINGFORMAT_INT(globalSize),PX_STRINGFORMAT_INT(LocalStackSize),PX_STRINGFORMAT_INT(thread)); + PX_StringCat(ASM,fmrString.buffer); + PX_StringFree(&fmrString); + + PX_StringCat(ASM,"EXPORT FUNCTION _BOOT:\n"); + + PX_StringInit(analysis.mp,&fmrString); + for (i=0;ibParam&&pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_STRING) + { + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],\"\"\n",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(ASM,fmrString.buffer); + } + if (!pvar->bParam&&pvar->type==PX_SCRIPT_PARSER_VAR_TYPE_MEMORY) + { + PX_StringFormat1(&fmrString,"MOV GLOBAL[%1],@00@\n",PX_STRINGFORMAT_INT(pvar->BeginIndex)); + PX_StringCat(ASM,fmrString.buffer); + } + } + PX_StringFree(&fmrString); + + PX_StringCat(ASM,analysis.bootCode.buffer); + PX_StringCat(ASM,"RET\n"); + + PX_StringCat(ASM,analysis.code.buffer); + + if (analysis.v_astStructure.size) + { + while(analysis.v_astStructure.size) + { + PX_ScriptParsePopAstStructure(&analysis); + } + goto _ERROR; + } + + for (i=0;iMnemonic); + if (PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis.v_variablesGlobalTable,i)->bInitialized) + { + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis.v_variablesGlobalTable,i)->GlobalInitializeValue); + } + } + + for (i=0;iMnemonic); + if (pvar->bInitialized) + { + PX_StringFree(&pvar->GlobalInitializeValue); + } + } + + //set + for (i=0;imembers.size;j++) + { + psetmem=PX_VECTORAT(PX_SCRIPT_SETMEMBER,&pset->members,j); + PX_StringFree(&psetmem->defvar.Mnemonic); + if (psetmem->defvar.bInitialized) + { + PX_StringFree(&psetmem->defvar.GlobalInitializeValue); + } + } + PX_StringFree(&pset->Name); + PX_VectorFree(&pset->members); + } + + //ast structure + + + PX_VectorFree(&analysis.v_astStructure); + PX_VectorFree(&analysis.v_variablesGlobalTable); + PX_VectorFree(&analysis.v_variableStackTable); + PX_VectorFree(&analysis.v_sets); + PX_VectorFree(&analysis.v_functions); + + PX_StringFree(&analysis.bootCode); + PX_StringFree(&analysis.code); + PX_LexerFree(&analysis.lexer); + return PX_TRUE; +_ERROR: + PX_ScriptTranslatorError(&analysis.lexer,"ERROR:Compile terminated."); + + if (analysis.v_astStructure.size) + { + while(analysis.v_astStructure.size) + { + PX_ScriptParsePopAstStructure(&analysis); + } + goto _ERROR; + } + + for (i=0;iMnemonic); + if (PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis.v_variablesGlobalTable,i)->bInitialized) + { + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis.v_variablesGlobalTable,i)->GlobalInitializeValue); + } + } + + for (i=0;iMnemonic); + if (PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis.v_variableStackTable,i)->bInitialized) + { + PX_StringFree(&PX_VECTORAT(PX_SCRIPT_VARIABLES,&analysis.v_variableStackTable,i)->GlobalInitializeValue); + } + } + + //set + for (i=0;imembers.size;j++) + { + psetmem=PX_VECTORAT(PX_SCRIPT_SETMEMBER,&pset->members,j); + PX_StringFree(&psetmem->defvar.Mnemonic); + if (psetmem->defvar.bInitialized) + { + PX_StringFree(&psetmem->defvar.GlobalInitializeValue); + } + } + PX_StringFree(&pset->Name); + PX_VectorFree(&pset->members); + } + + //ast structure + + + PX_VectorFree(&analysis.v_astStructure); + PX_VectorFree(&analysis.v_variablesGlobalTable); + PX_VectorFree(&analysis.v_variableStackTable); + PX_VectorFree(&analysis.v_sets); + PX_VectorFree(&analysis.v_functions); + + PX_StringFree(&analysis.bootCode); + PX_StringFree(&analysis.code); + PX_LexerFree(&analysis.lexer); + + + return PX_FALSE; +} + +px_char * PX_ScriptCompilerError() +{ + return PX_Script_InterpreterError; +} + +px_bool PX_ScriptInterpreterExpression(PX_SCRIPT_Analysis *analysis,px_char *expr,px_string *out,PX_SCRIPT_AST_OPERAND *retOperand) +{ + return PX_ScriptParseExpression(analysis,expr,out,retOperand); +} + + + diff --git a/code/PainterEngine/Kernel/PX_Script_Interpreter.h b/code/PainterEngine/Kernel/PX_Script_Interpreter.h new file mode 100644 index 0000000000000000000000000000000000000000..d3d5ed776bcc928b1ab87c6530bbbe8ea801bc9d --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Script_Interpreter.h @@ -0,0 +1,428 @@ +////////////////////////////////////////////////////////////////////////// +//Painter Engine Interpreter +//code by DBinary, matrixcascade@gmail.com +//QQ:477608346,tel-18959060883 +//include script compiler & parser & AST + +#ifndef _PX_SCRIPT_TRANSLATOR_H +#define _PX_SCRIPT_TRANSLATOR_H +#include "PX_ScriptCore.h" + +#define PX_SCRIPT_TRANSLATOR_FLOAT_PRECISION 6 +#define PX_SCRIPT_OPCODE_LEVEL_BOTTOM 255 +#define PX_SCRIPT_FUNCTION_MAX_PARAM 16 +#define PX_SCRIPT_FUNCTION_NAME_MAX_LEN 48 + + + +typedef enum +{ + PX_SCRIPT_PARSER_VAR_TYPE_INT, + PX_SCRIPT_PARSER_VAR_TYPE_STRING, + PX_SCRIPT_PARSER_VAR_TYPE_FLOAT, + PX_SCRIPT_PARSER_VAR_TYPE_MEMORY, + PX_SCRIPT_PARSER_VAR_TYPE_VOID, + PX_SCRIPT_PARSER_VAR_TYPE_SET, + + PX_SCRIPT_PARSER_VAR_TYPE_INT_ARRAY, + PX_SCRIPT_PARSER_VAR_TYPE_STRING_ARRAY, + PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_ARRAY, + PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_ARRAY, + PX_SCRIPT_PARSER_VAR_TYPE_SET_ARRAY, + + PX_SCRIPT_PARSER_VAR_TYPE_INT_PTR, + PX_SCRIPT_PARSER_VAR_TYPE_STRING_PTR, + PX_SCRIPT_PARSER_VAR_TYPE_FLOAT_PTR, + PX_SCRIPT_PARSER_VAR_TYPE_MEMORY_PTR, + PX_SCRIPT_PARSER_VAR_TYPE_SET_PTR, + +}PX_SCRIPT_PARSER_VAR_TYPE; + +typedef enum +{ + //// + PX_SCRIPT_TRANSLATOR_EXPRESSION_TOKEN, + //// + + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FUNCTION, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADD, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INC, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_POSITIVE, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SUB, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DEC, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NEGATIVE, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MUL, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DIV, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_AND, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OR, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_NOT, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_XOR, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INV, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MOD, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHL, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SHR, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_DOT, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COMMA, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETBEGIN, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LBRACKETEND, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETBEGIN, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MBRACKETEND, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGE, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LARGEEUQ, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESS, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LESSEQU, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_UNEQU, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_EQU, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LGEQU, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LAND, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_LOR, + //pointer + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_PTR, //* + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_ADR, //& + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_OFT, //-> + + //transfer + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_INT, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_FLOAT, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRING, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMORY, + + //key word + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_STRLEN, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_MEMLEN, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_SIN, + PX_SCRIPT_TRANSLATOR_EXPRESSION_OP_COS, +}PX_SCRIPT_TRANSLATOR_EXPRESSION_TYPE; + +typedef enum +{ + PX_SCRIPT_AST_OPCODE_TYPE_ADD, + PX_SCRIPT_AST_OPCODE_TYPE_INC, + PX_SCRIPT_AST_OPCODE_TYPE_POSITIVE, + PX_SCRIPT_AST_OPCODE_TYPE_SUB, + PX_SCRIPT_AST_OPCODE_TYPE_DEC, + PX_SCRIPT_AST_OPCODE_TYPE_NEGATIVE, + PX_SCRIPT_AST_OPCODE_TYPE_MUL, + PX_SCRIPT_AST_OPCODE_TYPE_DIV, + PX_SCRIPT_AST_OPCODE_TYPE_AND, + PX_SCRIPT_AST_OPCODE_TYPE_OR, + PX_SCRIPT_AST_OPCODE_TYPE_NOT, + PX_SCRIPT_AST_OPCODE_TYPE_XOR, + PX_SCRIPT_AST_OPCODE_TYPE_INV, + PX_SCRIPT_AST_OPCODE_TYPE_MOD, + PX_SCRIPT_AST_OPCODE_TYPE_SHL, + PX_SCRIPT_AST_OPCODE_TYPE_SHR, + + PX_SCRIPT_AST_OPCODE_TYPE_COMMA, + PX_SCRIPT_AST_OPCODE_TYPE_LARGE, + PX_SCRIPT_AST_OPCODE_TYPE_LARGEEQU, + PX_SCRIPT_AST_OPCODE_TYPE_LESS, + PX_SCRIPT_AST_OPCODE_TYPE_LESSEQU, + PX_SCRIPT_AST_OPCODE_TYPE_UNEQU, + PX_SCRIPT_AST_OPCODE_TYPE_EQU, + PX_SCRIPT_AST_OPCODE_TYPE_LGEQU, + PX_SCRIPT_AST_OPCODE_TYPE_LAND, + PX_SCRIPT_AST_OPCODE_TYPE_LOR, + //pointer + PX_SCRIPT_AST_OPCODE_TYPE_PTR, //* + PX_SCRIPT_AST_OPCODE_TYPE_ADR, //& + PX_SCRIPT_AST_OPCODE_TYPE_DOT, //. + PX_SCRIPT_AST_OPCODE_TYPE_IDX, //[] + PX_SCRIPT_AST_OPCODE_TYPE_OFT, //-> + //transfer + PX_SCRIPT_AST_OPCODE_TYPE_INT, + PX_SCRIPT_AST_OPCODE_TYPE_STRING, + PX_SCRIPT_AST_OPCODE_TYPE_FLOAT, + PX_SCRIPT_AST_OPCODE_TYPE_MEMORY, + PX_SCRIPT_AST_OPCODE_TYPE_STRLEN, + PX_SCRIPT_AST_OPCODE_TYPE_MEMLEN, + PX_SCRIPT_AST_OPCODE_TYPE_SIN, + PX_SCRIPT_AST_OPCODE_TYPE_COS, +}PX_SCRIPT_AST_OPCODE_TYPE; + +typedef enum +{ + PX_SCRIPT_AST_OPERAND_TYPE_VOID, + + PX_SCRIPT_AST_OPERAND_TYPE_INT, //int var //region G/L/ + PX_SCRIPT_AST_OPERAND_TYPE_FLOAT, //float var + PX_SCRIPT_AST_OPERAND_TYPE_STRING, //string var + PX_SCRIPT_AST_OPERAND_TYPE_MEMORY,//memory var + PX_SCRIPT_AST_OPERAND_TYPE_SET, //set xx var + + PX_SCRIPT_AST_OPERAND_TYPE_INT_CONST,//int const + PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_CONST,//float const + PX_SCRIPT_AST_OPERAND_TYPE_STRING_CONST,//string const + PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_CONST,//memory const + + PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR, //int var[x] + PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR,//float var[x] + PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR,//string var[x] + PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR,//memory var[x] + PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR,//set xx var[x] + + PX_SCRIPT_AST_OPERAND_TYPE_INT_PTR_CONST, //int var[] + PX_SCRIPT_AST_OPERAND_TYPE_FLOAT_PTR_CONST,//float var[] + PX_SCRIPT_AST_OPERAND_TYPE_STRING_PTR_CONST,//string var[] + PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_PTR_CONST,//memory var[] + PX_SCRIPT_AST_OPERAND_TYPE_SET_PTR_CONST,//set xx var[] + + PX_SCRIPT_AST_OPERAND_TYPE_STRING_IDX, + PX_SCRIPT_AST_OPERAND_TYPE_MEMORY_IDX, +}PX_SCRIPT_AST_OPERAND_TYPE; + +typedef enum +{ + PX_SCRIPT_TRANSLATOR_OP_CLASS_SINGLE, + PX_SCRIPT_TRANSLATOR_OP_CLASS_BINARY, + PX_SCRIPT_TRANSLATOR_OP_CLASS_CONTAINER, + PX_SCRIPT_TRANSLATOR_OP_CLASS_CONST, + PX_SCRIPT_TRANSLATOR_OP_CLASS_VAR, + PX_SCRIPT_TRANSLATOR_OP_CLASS_FUNC, + PX_SCRIPT_TRANSLATOR_OP_CLASS_UNDEFINED, +}PX_SCRIPT_TRANSLATOR_OP_CLASS; + + +typedef enum +{ + PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_HOST, + PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_EXPORT, + PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE_CUSTOM, +}PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE; + +typedef enum +{ + PX_SCRIPT_VARIABLE_REGION_LOCAL, + PX_SCRIPT_VARIABLE_REGION_GLOBAL, + PX_SCRIPT_VARIABLE_REGION_POP, +}PX_SCRIPT_VARIABLE_REGION; + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_RUNTIME "#RUNTIME" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_STACK "STACK" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_THREAD "THREAD" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_INT "INT" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_STRING "STRING" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_MEMORY "MEMORY" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_FLOAT "FLOAT" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_VOID "VOID" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_SET "SET" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_RETURN "RETURN" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_VAR_SIZEOF "SIZEOF" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_IF "IF" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_ELSE "ELSE" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_WHILE "WHILE" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_FOR "FOR" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_ASM "_ASM" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_BREAK "BREAK" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_CONTINUE "CONTINUE" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_COMPARE "COMPARE" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_WITH "WITH" + +#define PX_SCRIPT_TRANSLATOR_KEYWORD_HOST "HOST" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_FUNCTION "FUNCTION" +#define PX_SCRIPT_TRANSLATOR_KEYWORD_EXPORT "EXPORT" + + + +typedef struct +{ + px_string name; + px_string code; + px_bool bInclude; +}PX_SCRIPT_CODE; + +typedef struct +{ + px_string Name; + px_vector members; + px_int size; +}PX_SCRIPT_SET; + +typedef struct +{ + px_string Mnemonic; + PX_SCRIPT_PARSER_VAR_TYPE type; + px_int setIndex; + px_int BeginIndex; + px_int size; + px_bool bParam; + px_bool bInitialized; + px_string GlobalInitializeValue; +}PX_SCRIPT_VARIABLES; + +typedef struct +{ + px_int offset; + PX_SCRIPT_VARIABLES defvar; +}PX_SCRIPT_SETMEMBER; + +typedef struct +{ + px_memorypool *mp; + px_vector codeLibraries;//PX_SCRIPT_CODE vector +}PX_SCRIPT_LIBRARY; + + +typedef struct +{ + PX_SCRIPT_AST_OPCODE_TYPE operandType; + px_int level; +}PX_SCRIPT_AST_OPCODE; + +typedef struct +{ + PX_SCRIPT_AST_OPERAND_TYPE operandType; + PX_SCRIPT_VARIABLE_REGION region; + PX_SCRIPT_SET *pSet; + union + { + px_int _oft; + px_int _int; + px_float _float; + px_char *_contaniner; + }; + px_bool bAtomPopIndex; + px_int AtomIndex; +}PX_SCRIPT_AST_OPERAND; + + + + +typedef struct +{ + PX_SCRIPT_TRANSLATOR_EXPRESSION_TYPE type; + PX_SCRIPT_TRANSLATOR_OP_CLASS opclass; + px_int oplevel; + px_string code; + +}PX_SCRIPT_EXPR_STREAM; + + +typedef struct +{ + PX_SCRIPT_TRANSLATOR_FUNCTION_TYPE type; + px_char name[48]; + PX_SCRIPT_VARIABLES parameters[PX_SCRIPT_FUNCTION_MAX_PARAM]; + px_int parametersCount; + px_int parametersSize; + px_int LocalSize; + PX_SCRIPT_PARSER_VAR_TYPE retType; + px_int retSetIndex; +}PX_SCRIPT_FUNCTION; + + + +typedef struct +{ + px_char name[48]; +}PX_SCRIPT_AST_STRUCTURE_FUNCTION; + +typedef struct +{ + px_int ifflag; + px_int elseflag; + px_bool oneline_expr; +}PX_SCRIPT_AST_STRUCTURE_IF; + +typedef struct +{ + px_int elseflag; + px_bool oneline_expr; +}PX_SCRIPT_AST_STRUCTURE_ELSE; + +typedef struct +{ + px_int loopflag; + + px_int endflag; + px_bool oneline_expr; +}PX_SCRIPT_AST_STRUCTURE_WHILE; + +typedef struct +{ + px_int additionFlag; + px_int conditionFlag; + px_int endFlag; + px_bool oneline_expr; +}PX_SCRIPT_AST_STRUCTURE_FOR; + +typedef struct +{ + px_int endFlag; + px_bool oneline_expr; + PX_SCRIPT_AST_OPERAND OriginOperand; +}PX_SCRIPT_AST_STRUCTURE_COMPARE; + +typedef struct +{ + px_int endFlag; + px_bool oneline_expr; +}PX_SCRIPT_AST_STRUCTURE_WITH; + + +typedef enum +{ + PX_SCRIPT_AST_STRUCTURE_TYPE_FUNCTION, + PX_SCRIPT_AST_STRUCTURE_TYPE_IF, + PX_SCRIPT_AST_STRUCTURE_TYPE_ELSE, + PX_SCRIPT_AST_STRUCTURE_TYPE_WHILE, + PX_SCRIPT_AST_STRUCTURE_TYPE_FOR, + PX_SCRIPT_AST_STRUCTURE_TYPE_COMPARE, + PX_SCRIPT_AST_STRUCTURE_TYPE_WITH +}PX_SCRIPT_AST_STRUCTURE_TYPE; + +typedef struct +{ + PX_SCRIPT_AST_STRUCTURE_TYPE type; + union + { + PX_SCRIPT_AST_STRUCTURE_FUNCTION _func; + PX_SCRIPT_AST_STRUCTURE_IF _if; + PX_SCRIPT_AST_STRUCTURE_ELSE _else; + PX_SCRIPT_AST_STRUCTURE_WHILE _while; + PX_SCRIPT_AST_STRUCTURE_FOR _for; + PX_SCRIPT_AST_STRUCTURE_COMPARE _compare; + PX_SCRIPT_AST_STRUCTURE_WITH _with; + }; +}PX_SCRIPT_AST_STRUCTURE; + +typedef enum +{ + PX_SCRIPT_AST_SET_TREE_NODE_TYPE_STRUCT, + PX_SCRIPT_AST_SET_TREE_NODE_TYPE_MEMBER, +}PX_SCRIPT_AST_SET_TREE_NODE_TYPE; + + + + +typedef struct +{ + px_memorypool *mp; + px_string bootCode; + px_string code; + px_lexer lexer; + px_bool functionInside; + px_bool functionReturn; + px_int functionlable; + PX_SCRIPT_FUNCTION currentFunc; + px_vector v_sets; + px_vector v_functions; + px_vector v_variablesGlobalTable; + px_vector v_variableStackTable; + px_vector v_astStructure; + px_int _jFlag; +}PX_SCRIPT_Analysis; + +px_bool PX_ScriptCompilerInit(PX_SCRIPT_LIBRARY *lib,px_memorypool *mp); +px_bool PX_ScriptCompilerLoad(PX_SCRIPT_LIBRARY *lib,px_char *code); +px_bool PX_ScriptCompilerCompile(PX_SCRIPT_LIBRARY *lib,px_char *name,px_string *ASM,px_int StackSize); +px_void PX_ScriptCompilerFree(PX_SCRIPT_LIBRARY *lib); +px_char *PX_ScriptCompilerError(); +px_bool PX_ScriptInterpreterExpression(PX_SCRIPT_Analysis *analysis,px_char *expr,px_string *out,PX_SCRIPT_AST_OPERAND *retOperand); +#endif diff --git a/code/PainterEngine/Kernel/PX_Script_VM.c b/code/PainterEngine/Kernel/PX_Script_VM.c new file mode 100644 index 0000000000000000000000000000000000000000..b811a8a581482749c9c04fc00672d4ffd9c95c0b --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Script_VM.c @@ -0,0 +1,4521 @@ +#include "PX_Script_VM.h" + + +static px_void PX_ScriptVM_Error(PX_ScriptVM_Instance *Ins,px_char *log) +{ + PX_ERROR(log); +} + +static px_void PX_ScriptVM_LOG(px_char *log) +{ + PX_LOG(log); +} +#ifdef PX_DEBUG_MODE +#include "stdio.h" +#define PX_SCRIPT_VM_LOG printf +#else +#define PX_SCRIPT_VM_LOG +#endif + +static PX_ScriptVM_DebuggerPrint g_scriptVM_printFunc=PX_NULL; +static PX_ScriptVM_DebuggerCommand g_scriptVM_cmdFunc=PX_NULL; + +px_bool PX_ScriptVM_InstanceInit(PX_ScriptVM_Instance *Ins,px_memorypool *mp,px_byte *code,px_int size) +{ + PX_SCRIPT_ASM_HEADER *header; + PX_SCRIPT_EXPORT_FUNCTION *pfunc; + PX_SCRIPT_ASM_HOST_NODE *phost; + px_int i,j; + if (sizeuser_ptr=PX_NULL; + Ins->mp=mp; + header=(PX_SCRIPT_ASM_HEADER *)code; + Ins->debug=PX_FALSE; + Ins->VM_Globalsize=header->globalsize; + Ins->VM_Stacksize=header->stacksize; + Ins->VM_memsize=header->globalsize+header->stacksize*header->threadcount; + Ins->maxThreadCount=header->threadcount; + Ins->T=0; + + if (header->threadcount<1) + { + return PX_FALSE; + } + + if (!PX_memequ(header,"PASM",4)) + { + PX_SCRIPT_VM_LOG("Invalid Header"); + return PX_FALSE; + } + + if (PX_crc32(code+8,size-8)!=header->CRC) + { + PX_SCRIPT_VM_LOG("CRC Error!"); + return PX_FALSE; + } + + + if ((Ins->_mem=(PX_SCRIPTVM_VARIABLE *)MP_Malloc(mp,sizeof(PX_SCRIPTVM_VARIABLE)*Ins->VM_memsize))==PX_NULL) + { + return PX_FALSE; + } + + + if ((Ins->pThread=(PX_ScriptVM_InstanceThread *)MP_Malloc(mp,sizeof(PX_ScriptVM_InstanceThread)*Ins->maxThreadCount))==PX_NULL) + { + return PX_FALSE; + } + + for (i=0;imaxThreadCount;i++) + { + PX_memset(Ins->pThread,0,sizeof(PX_ScriptVM_InstanceThread)*Ins->maxThreadCount); + Ins->pThread[i].Activated=PX_FALSE; + Ins->pThread[i].suspend=PX_FALSE; + Ins->pThread[i].user_runtime_data=PX_NULL; + for (j=0;jpThread[i].R[j],0,sizeof(PX_SCRIPTVM_VARIABLE)); + Ins->pThread[i].R[j].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + } + } + + for (i=0;iVM_memsize;i++) + { + PX_memset(&Ins->_mem[i],0,sizeof(PX_SCRIPTVM_VARIABLE)); + Ins->_mem[i].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + } + + + Ins->funcCount=header->funcCount; + Ins->hostCount=header->hostCount; + Ins->_func=PX_NULL; + Ins->_host=PX_NULL; + PX_memset(Ins->signal,0,sizeof(Ins->signal)); + + if (Ins->funcCount!=0) + { + if ((Ins->_func=(PX_SCRIPT_EXPORT_FUNCTION *)MP_Malloc(mp,sizeof(PX_SCRIPT_EXPORT_FUNCTION)*Ins->funcCount))==PX_NULL) + { + return PX_FALSE; + } + //read export functions + pfunc=(PX_SCRIPT_EXPORT_FUNCTION *)(code+header->oftfunc); + for (i=0;ifuncCount;i++) + { + PX_memcpy(&Ins->_func[i],&pfunc[i],sizeof(PX_SCRIPT_EXPORT_FUNCTION)); + } + } + + if(Ins->hostCount!=0) + { + if ((Ins->_host=(PX_SCRIPT_ASM_HOST_NODE *)MP_Malloc(mp,sizeof(PX_SCRIPT_ASM_HOST_NODE)*Ins->hostCount))==PX_NULL) + { + PX_SCRIPT_VM_LOG("Out of Memory"); + return PX_FALSE; + } + PX_memset(Ins->_host,0,sizeof(PX_SCRIPT_ASM_HOST_NODE)*Ins->hostCount); + phost=(PX_SCRIPT_ASM_HOST_NODE *)(code+header->ofthost); + for (i=0;ihostCount;i++) + { + PX_memcpy(&Ins->_host[i],&phost[i],sizeof(PX_SCRIPT_ASM_HOST_NODE)); + Ins->_host[i].map=PX_NULL; + } + } + + + Ins->stringsize=header->stringSize; + Ins->memorysize=header->memsize; + Ins->binsize=header->binsize; + Ins->Suspend=PX_FALSE; + + + + Ins->_string=(px_char *)MP_Malloc(mp,header->stringSize); + PX_memcpy(Ins->_string,code+header->oftString,header->stringSize); + + Ins->_memory=(px_byte *)MP_Malloc(mp,header->memsize); + PX_memcpy(Ins->_memory,code+header->oftmem,header->memsize); + + Ins->_bin=(px_byte *)MP_Malloc(mp,header->binsize); + PX_memcpy(Ins->_bin,code+header->oftbin,header->binsize); + + + + return PX_TRUE; +} + +PX_SCRIPTVM_VARIABLE PX_SCRIPTVM_VaribaleCopy(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE var,px_bool *bOutOfMemory) +{ + PX_SCRIPTVM_VARIABLE cpyVar; + cpyVar=var; + *bOutOfMemory=PX_FALSE; + + if (var.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + if(!PX_StringInit(Ins->mp,&cpyVar._string)) + { + cpyVar.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + *bOutOfMemory=PX_TRUE; + } + else + { + if(!PX_StringCopy(&cpyVar._string,&var._string)) + { + cpyVar.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + *bOutOfMemory=PX_TRUE; + } + } + } + else if (var.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryInit(Ins->mp,&cpyVar._memory); + if(!PX_MemoryCat(&cpyVar._memory,var._memory.buffer,var._memory.usedsize)) + { + cpyVar.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + *bOutOfMemory=PX_TRUE; + } + } + return cpyVar; +} + +static px_void PX_SCRIPTVM_VaribaleFree(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE *var) +{ + if (var->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&var->_memory); + } + else if (var->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&var->_string); + } + var->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + var->_int=0; +} + + +static PX_SCRIPTVM_VARIABLE PX_SCRIPT_VM_GetParamConst(PX_ScriptVM_Instance *Ins,px_char optype,px_int param,px_bool *bOutofMemory) +{ + PX_SCRIPTVM_VARIABLE rVar,ret; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + *bOutofMemory=PX_FALSE; + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + ret._int=0; + switch (optype) + { + case PX_SCRIPT_ASM_OPTYPE_IP: + { + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + ret._int=pT->IP; + return ret; + } + break; + + case PX_SCRIPT_ASM_OPTYPE_SP: + { + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + ret._int=pT->SP; + return ret; + } + break; + + case PX_SCRIPT_ASM_OPTYPE_BP: + { + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + ret._int=pT->BP; + return ret; + } + break; + case PX_SCRIPT_ASM_OPTYPE_HOST: + case PX_SCRIPT_ASM_OPTYPE_INT: + { + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + ret._int=param; + return ret; + } + break; + case PX_SCRIPT_ASM_OPTYPE_FLOAT: + { + //Must be IEEE 754 format + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + ret._int=param; + return ret; + } + break; + case PX_SCRIPT_ASM_OPTYPE_STRING: + { + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + ret._string.buffer=Ins->_string+param; + ret._string.bufferlen=0; + ret._string.mp=PX_NULL; + return ret; + } + break; + + case PX_SCRIPT_ASM_OPTYPE_MEMORY: + { + ret.type=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY; + ret._memory.buffer=Ins->_memory+param+4; + ret._memory.allocsize=0; + ret._memory.usedsize=*(px_int *)(Ins->_memory+param); + ret._memory.mp=PX_NULL; + return ret; + } + break; + + case PX_SCRIPT_ASM_OPTYPE_REG: + { + if (paramR[param],bOutofMemory); + } + else + { + PX_ScriptVM_Error(Ins,"Variable parameter error."); + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_CONST: + { + if(pT->BP+paramVM_memsize) + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[pT->BP+param],bOutofMemory); + else + goto _ERROR; + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_REGREF: + { + if (paramR[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._int+pT->BPVM_memsize) + { + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[pT->BP+rVar._int],bOutofMemory); + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_GLOBALREF: + { + if (paramVM_memsize) + { + rVar=Ins->_mem[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._int+pT->BPVM_memsize) + { + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[pT->BP+rVar._int],bOutofMemory); + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_LOCALREF: + { + if (param+pT->BPVM_memsize) + { + rVar=Ins->_mem[pT->BP+param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._int+pT->BPVM_memsize) + { + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[pT->BP+rVar._int],bOutofMemory); + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_CONST: + { + if(paramVM_memsize) + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[param],bOutofMemory); + else + goto _ERROR; + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_SPREF: + { + if(pT->SP+paramVM_memsize) + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[pT->SP+param],bOutofMemory); + else + goto _ERROR; + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_REGREF: + { + if (paramR[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._intVM_memsize) + { + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[rVar._int],bOutofMemory); + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_GLOBALREF: + { + if (paramVM_memsize) + { + rVar=Ins->_mem[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._intVM_memsize) + { + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[rVar._int],bOutofMemory); + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF: + { + if (param+pT->BPVM_memsize) + { + rVar=Ins->_mem[pT->BP+param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._intVM_memsize) + { + return PX_SCRIPTVM_VaribaleCopy(Ins,Ins->_mem[rVar._int],bOutofMemory); + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + + + default: + { + goto _ERROR; + } + } +_ERROR: + PX_ScriptVM_Error(Ins,"Virtual Machine Runtime error"); + return ret; + +} +static PX_SCRIPTVM_VARIABLE * PX_SCRIPT_VM_GetVariablePointer(PX_ScriptVM_Instance *Ins,px_char optype,px_int param) +{ + PX_SCRIPTVM_VARIABLE rVar; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + switch (optype) + { + case PX_SCRIPT_ASM_OPTYPE_REG: + { + if (paramR[param]; + } + else + { + PX_ScriptVM_Error(Ins,"Variable parameter error."); + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_CONST: + { + if(pT->BP+paramVM_memsize) + return &Ins->_mem[pT->BP+param]; + else + goto _ERROR; + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_REGREF: + { + if (paramR[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._int+pT->BPVM_memsize) + { + return &Ins->_mem[pT->BP+rVar._int]; + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_GLOBALREF: + { + if (paramVM_memsize) + { + rVar=Ins->_mem[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._int+pT->BPVM_memsize) + { + return &Ins->_mem[pT->BP+rVar._int]; + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_LOCALREF: + { + if (param+pT->BPVM_memsize) + { + rVar=Ins->_mem[pT->BP+param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._int+pT->BPVM_memsize) + { + return &Ins->_mem[pT->BP+rVar._int]; + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_CONST: + { + if(paramVM_memsize) + return &Ins->_mem[param]; + else + goto _ERROR; + } + break; + + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_SPREF: + { + if(pT->SP+paramVM_memsize) + return &Ins->_mem[pT->SP+param]; + else + goto _ERROR; + } + break; + + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_REGREF: + { + if (paramR[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._intVM_memsize) + { + return &Ins->_mem[rVar._int]; + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_GLOBALREF: + { + if (paramVM_memsize) + { + rVar=Ins->_mem[param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._intVM_memsize) + { + return &Ins->_mem[rVar._int]; + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF: + { + if (param+pT->BPVM_memsize) + { + rVar=Ins->_mem[pT->BP+param]; + if (rVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if (rVar._intVM_memsize) + { + return &Ins->_mem[rVar._int]; + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + else + { + goto _ERROR; + } + } + break; + + default: + { + goto _ERROR; + } + } + return PX_NULL; +_ERROR: + PX_ScriptVM_Error(Ins,"Variable parameter error."); + return PX_NULL; + +} + +#define PX_SCRIPT_VM_PARAM(i) (*(((px_int32 *)(Ins->_bin+pT->IP+4))+i)) +#define PX_SCRIPT_VM_IP_PARAM(i) (*(((px_int32 *)(Ins->_bin+IP+4))+i)) + +px_void PX_ScriptVM_DebuggerInterrupt(PX_ScriptVM_Instance *Ins); +px_bool PX_ScriptVM_DebuggerCurrentInstruction(PX_ScriptVM_Instance *Ins,px_int IP); + +PX_SCRIPTVM_RUNRETURN PX_ScriptVM_InstanceRunThread(PX_ScriptVM_Instance *Ins,px_int tick) +{ + px_char opCode,opType[3],numOut[32],lastchar,*pchar; + px_float p1,p2; + PX_SCRIPTVM_VARIABLE *pVar,cVar,sVar,tVar; + px_string newString; + px_byte *newBuffer; + px_bool bOutofMemory; + int i,j; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + + while(PX_TRUE) + { + if(Ins->debug) + { + PX_ScriptVM_DebuggerInterrupt(Ins); + } + + if (!pT->Activated) + { + return PX_SCRIPTVM_RUNRETURN_END; + } + + if (Ins->Suspend||pT->suspend) + { + return PX_SCRIPTVM_RUNRETURN_SUSPEND; + } + + + pVar=PX_NULL; + cVar.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + sVar.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + tVar.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + cVar._int=-1; + sVar._int=-1; + tVar._int=-1; + + + if(tick==0) + { + PX_SCRIPTVM_VaribaleFree(Ins,&cVar); + PX_SCRIPTVM_VaribaleFree(Ins,&sVar); + PX_SCRIPTVM_VaribaleFree(Ins,&tVar); + return PX_SCRIPTVM_RUNRETURN_TIMEOUT; + } + + if(tick>0) + { + tick--; + } + + + if (pT->IP>Ins->binsize||pT->IP<0) + { + goto _ERROR; + } + + if (pT->SP>Ins->VM_memsize||pT->SP<0) + { + goto _ERROR; + } + + opCode=*(Ins->_bin+pT->IP); + opType[0]=*(Ins->_bin+pT->IP+1); + opType[1]=*(Ins->_bin+pT->IP+2); + opType[2]=*(Ins->_bin+pT->IP+3); + + if (opCode!=PX_SCRIPT_ASM_INSTR_OPCODE_MOV&&opCode!=PX_SCRIPT_ASM_INSTR_OPCODE_ADD&&opCode!=PX_SCRIPT_ASM_INSTR_OPCODE_SUB&&opCode!=PX_SCRIPT_ASM_INSTR_OPCODE_PUSH&&opCode!=PX_SCRIPT_ASM_INSTR_OPCODE_POP) + { + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_IP||opType[0]==PX_SCRIPT_ASM_OPTYPE_SP||opType[0]==PX_SCRIPT_ASM_OPTYPE_BP) + { + goto _ERROR; + } + } + switch(opCode) + { + case PX_SCRIPT_ASM_INSTR_OPCODE_MOV: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_IP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pT->IP=cVar._int; + break; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_SP) + { + + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pT->SP=cVar._int; + pT->IP+=(4+2*4); + break; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_BP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pT->BP=cVar._int; + pT->IP+=(4+2*4); + break; + } + + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + if(!PX_StringInit(Ins->mp,&pVar->_string)) goto _ERROR; + if(!PX_StringCat(&pVar->_string,cVar._string.buffer)) goto _ERROR; + pVar->type=cVar.type; + } + else if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryInit(Ins->mp,&pVar->_memory); + if(!PX_MemoryAlloc(&pVar->_memory,cVar._memory.usedsize)) goto _ERROR; + if(!PX_MemoryCat(&pVar->_memory,cVar._memory.buffer,cVar._memory.usedsize)) + { + goto _ERROR; + } + pVar->type=cVar.type; + } + else + { + *pVar=cVar; + } + + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ADD: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_IP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pT->IP+=cVar._int; + break; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_SP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pT->SP+=cVar._int; + pT->IP+=(4+2*4); + break; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_BP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pT->BP+=cVar._int; + pT->IP+=(4+2*4); + break; + } + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_int+=cVar._int; + pT->IP+=(4+2*4); + break; + } + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_int+cVar._float; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + pT->IP+=(4+2*4); + break; + } + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_float+cVar._float; + pT->IP+=(4+2*4); + break; + } + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=pVar->_float+cVar._int; + pT->IP+=(4+2*4); + break; + } + goto _ERROR; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SUB: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_IP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pT->IP-=cVar._int; + break; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_SP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pT->SP-=cVar._int; + if (pT->SP<0) + { + goto _ERROR; + } + pT->IP+=(4+2*4); + break; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_BP) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pT->BP-=cVar._int; + pT->IP+=(4+2*4); + break; + } + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_int-=cVar._int; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_int-cVar._float; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_float-cVar._float; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=pVar->_float-cVar._int; + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_DIV: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar._int==0) + { + PX_ScriptVM_Error(Ins,"Divide by zero error"); + goto _ERROR; + } + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_int/=cVar._int; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_int/cVar._float; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_float/cVar._float; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=pVar->_float/cVar._int; + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_MUL: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_int*=cVar._int; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_int*cVar._float; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=pVar->_float*cVar._float; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=pVar->_float*cVar._int; + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_MOD: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pVar->_int%=cVar._int; + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SHL: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pVar->_int<<=cVar._int; + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SHR: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pVar->_int>>=cVar._int; + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_AND: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pVar->_int&=cVar._int; + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ANDL: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=(pVar->_int&&cVar._int); + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ORL: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=(pVar->_int||cVar._int); + pT->IP+=(4+2*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_OR: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + pVar->_int|=cVar._int; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_XOR: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + pVar->_int^=cVar._int; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_POW: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_int=PX_pow_ii(pVar->_int,cVar._int); + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=(px_float)PX_pow_dd(pVar->_int,cVar._float); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=(px_float)PX_pow_dd(pVar->_float,cVar._float); + } + else if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=(px_float)PX_pow_dd(pVar->_float,cVar._int); + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SIN: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=PX_sin_angle(cVar._float); + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=PX_sin_angle((px_float)cVar._int); + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_COS: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=PX_cos_angle(cVar._float); + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=PX_cos_angle((px_float)cVar._int); + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_INT: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_int=(px_int)(pVar->_float); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + } + + pT->IP+=(4+1*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_FLT: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_float=(px_float)(pVar->_int); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + } + + pT->IP+=(4+1*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRLEN: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=PX_strlen(cVar._string.buffer); + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRCAT: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + if(!PX_StringCat(&pVar->_string,cVar._string.buffer)) goto _ERROR; + } + else if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + if(!PX_StringCatChar(&pVar->_string,(px_char)cVar._int)) goto _ERROR; + } + else + { + goto _ERROR; + } + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRREP: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + PX_StringReplace(&pVar->_string,cVar._string.buffer,sVar._string.buffer); + pT->IP+=(4+3*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRCHR: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + + if(sVar._int_int=(px_uchar)cVar._string.buffer[sVar._int]; + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRTOI: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=PX_atoi(cVar._string.buffer); + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRTOF: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + pVar->_int=(px_int)PX_atof(cVar._string.buffer); + pT->IP+=(4+2*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRFRI: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + PX_StringInit(Ins->mp,&pVar->_string); + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + PX_itoa(cVar._int,numOut,sizeof(numOut),10); + else + PX_itoa((px_int)cVar._float,numOut,sizeof(numOut),10); + + if(!PX_StringCat(&pVar->_string,numOut)) goto _ERROR; + pT->IP+=(4+2*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRFRF: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + PX_StringInit(Ins->mp,&pVar->_string); + numOut[0]=0; + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + PX_ftoa((px_float)cVar._int,numOut,sizeof(numOut),PX_SCRIPTVM_DEFALUT_FLOAT_PRECCISION); + else + PX_ftoa(cVar._float,numOut,sizeof(numOut),PX_SCRIPTVM_DEFALUT_FLOAT_PRECCISION); + + PX_StringCat(&pVar->_string,numOut); + pT->IP+=(4+2*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRTMEM: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_MemoryInit(Ins->mp,&cVar._memory); + if(!PX_MemoryCat(&cVar._memory,pVar->_string.buffer,pVar->_string.bufferlen)) goto _ERROR; + PX_StringFree(&pVar->_string); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY; + pVar->_memory=cVar._memory; + } + else + { + goto _ERROR; + } + pT->IP+=(4+1*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRSET: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + if(pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + goto _ERROR; + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + PX_StringInit(Ins->mp,&pVar->_string); + } + } + + + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT||(tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT)) + { + goto _ERROR; + } + + if (sVar._int>=pVar->_string.bufferlen-1) + { + i=8; + while(imp,&newString,i); + PX_memset(newString.buffer,0,i); + PX_strcat(newString.buffer,pVar->_string.buffer); + PX_StringFree(&pVar->_string); + pVar->_string=newString; + } + + if(tVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + pVar->_string.buffer[sVar._int]=(px_char)tVar._int; + else + goto _ERROR; + + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRFIND: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING||tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + pVar->_int=-1; + pchar=PX_strstr(sVar._string.buffer,tVar._string.buffer); + if (pchar) + { + pVar->_int=(px_uint)(pchar-sVar._string.buffer); + } + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_ASC: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=cVar._string.buffer[0]; + pT->IP+=(4+2*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMBYTE: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=tVar._memory.buffer[sVar._int]; + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMSET: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if(pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + goto _ERROR; + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY; + PX_MemoryInit(Ins->mp,&pVar->_memory); + } + } + + + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT||tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (sVar._int_memory.allocsize) + { + i=1; + while(imp,i); + PX_memcpy(newBuffer,pVar->_memory.buffer,pVar->_memory.usedsize); + MP_Free(Ins->mp,pVar->_memory.buffer); + pVar->_memory.buffer=newBuffer; + pVar->_memory.allocsize=i; + } + + pVar->_memory.buffer[sVar._int]=tVar._char; + if(sVar._int>pVar->_memory.usedsize-1) + pVar->_memory.usedsize=sVar._int+1; + + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMTRM: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + goto _ERROR; + } + + + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT||tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (sVar._int+tVar._int>pVar->_memory.usedsize) + { + goto _ERROR; + } + j=0; + for (i=sVar._int;i_memory.buffer[j]=pVar->_memory.buffer[i]; + j++; + } + pVar->_memory.usedsize=tVar._int; + + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMFIND: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + goto _ERROR; + } + pVar->_int=-1; + for(i=0;i_int=i; + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + break; + } + } + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMLEN: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=sVar._memory.usedsize; + + pT->IP+=(4+2*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMCAT: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + else + { + if(!PX_MemoryCat(&pVar->_memory,&sVar._int,1)) goto _ERROR; + pT->IP+=(4+2*4); + } + } + else + { + if(!PX_MemoryCat(&pVar->_memory,sVar._memory.buffer,sVar._memory.usedsize)) goto _ERROR; + pT->IP+=(4+2*4); + } + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMTSTR: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if (pVar->_memory.usedsize==0) + { + PX_StringInit(Ins->mp,&cVar._string); + PX_MemoryFree(&pVar->_memory); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + pVar->_string=cVar._string; + } + else + { + lastchar=pVar->_memory.buffer[pVar->_memory.usedsize-1]; + + pVar->_memory.buffer[pVar->_memory.usedsize-1]=0; + + PX_StringInit(Ins->mp,&cVar._string); + + if(!PX_StringCat(&cVar._string,(px_char *)pVar->_memory.buffer)) goto _ERROR; + + if(PX_strlen((px_char *)pVar->_memory.buffer)==pVar->_memory.usedsize-1) + PX_StringCatChar(&cVar._string,lastchar); + + PX_MemoryFree(&pVar->_memory); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + pVar->_string=cVar._string; + } + + } + else + { + goto _ERROR; + } + pT->IP+=(4+1*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_DATACPY: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT||sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT||tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + if (cVar._int+tVar._int>Ins->VM_memsize||cVar._int<0||sVar._int+tVar._int>Ins->VM_memsize||sVar._int<0) + { + PX_ScriptVM_Error(Ins,"Out of memory access"); + goto _ERROR; + } + PX_memcpy(&Ins->_mem[cVar._int],&Ins->_mem[sVar._int],sizeof(PX_SCRIPTVM_VARIABLE)*tVar._int); + + pT->IP+=(4+3*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_NEG: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pVar->_int=-pVar->_int; + } + else if(pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + pVar->_float=-pVar->_float; + } + else + { + goto _ERROR; + } + + pT->IP+=(4+1*4); + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_INV: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + pVar->_int=~pVar->_int; + + pT->IP+=(4+1*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_NOT: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + pVar->_int=!pVar->_int; + + pT->IP+=(4+1*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JMP: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + pT->IP=cVar._int; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JE: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (cVar.type==sVar.type) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if (cVar._int==sVar._int) + { + pT->IP=tVar._int; + break; + } + } + else + { + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + if (PX_strequ(cVar._string.buffer,sVar._string.buffer)) + { + pT->IP=tVar._int; + break; + } + + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + if (PX_memequ(cVar._memory.buffer,sVar._memory.buffer,cVar._memory.usedsize)) + { + pT->IP=tVar._int; + break; + } + } + } + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JNE: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (cVar.type==sVar.type) + { + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING&&cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if (cVar._int!=sVar._int) + { + pT->IP=tVar._int; + break; + } + } + else + { + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + if (!PX_strequ(cVar._string.buffer,sVar._string.buffer)) + { + pT->IP=tVar._int; + break; + } + + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + if (!PX_memequ(cVar._memory.buffer,sVar._memory.buffer,cVar._memory.usedsize)) + { + pT->IP=tVar._int; + break; + } + } + } + pT->IP+=(4+3*4); + + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JL: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p1=(px_float)cVar._int; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p1=cVar._float; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p2=(px_float)sVar._int; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p2=sVar._float; + } + + if (p1IP=tVar._int; + } + else + { + pT->IP+=(4+3*4); + } + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JLE: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p1=(px_float)cVar._int; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p1=cVar._float; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p2=(px_float)sVar._int; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p2=sVar._float; + } + + if (p1<=p2) + { + pT->IP=tVar._int; + } + else + { + pT->IP+=(4+3*4); + } + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JG: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p1=(px_float)cVar._int; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p1=cVar._float; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p2=(px_float)sVar._int; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p2=sVar._float; + } + + if (p1>p2) + { + pT->IP=tVar._int; + } + else + { + pT->IP+=(4+3*4); + } + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JGE: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + + if (tVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY||sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + goto _ERROR; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p1=(px_float)cVar._int; + } + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p1=cVar._float; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + p2=(px_float)sVar._int; + } + if (sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + p2=sVar._float; + } + + if (p1>=p2) + { + pT->IP=tVar._int; + } + else + { + pT->IP+=(4+3*4); + } + + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGE: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=0; + + if (sVar.type==tVar.type) + { + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING&&sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if (sVar._int==tVar._int) + { + pVar->_int=1; + pT->IP+=(4+3*4); + break; + } + } + else + { + if(sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + if (PX_strequ(sVar._string.buffer,tVar._string.buffer)) + { + pVar->_int=1; + pT->IP+=(4+3*4); + break; + } + + + if(sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + if ((sVar._memory.usedsize==tVar._memory.usedsize)&&PX_memequ(sVar._memory.buffer,tVar._memory.buffer,sVar._memory.usedsize)) + { + pVar->_int=1; + pT->IP+=(4+3*4); + break; + } + } + } + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_LGNE: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + tVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[2],PX_SCRIPT_VM_PARAM(2),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=1; + + if (sVar.type==tVar.type) + { + if (sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_STRING&&sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + if (sVar._int==tVar._int) + { + pVar->_int=0; + pT->IP+=(4+3*4); + break; + } + } + else + { + if(sVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + if (PX_strequ(sVar._string.buffer,tVar._string.buffer)) + { + pVar->_int=0; + pT->IP+=(4+3*4); + break; + } + + + if(cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + if ((sVar._memory.usedsize==tVar._memory.usedsize)&&PX_memequ(sVar._memory.buffer,tVar._memory.buffer,sVar._memory.usedsize)) + { + pVar->_int=0; + pT->IP+=(4+3*4); + break; + } + } + } + pT->IP+=(4+3*4); + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_LGZ: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + + if (pVar->_int==0) + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=1; + } + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=0; + } + pT->IP+=(4+1*4); + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_LGGZ: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + + if (pVar->_int>0) + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=1; + } + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=0; + } + pT->IP+=(4+1*4); + + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGGEZ: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + + if (pVar->_int>=0) + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=1; + } + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=0; + } + pT->IP+=(4+1*4); + + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGLZ: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + + if (pVar->_int<0) + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=1; + } + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=0; + } + pT->IP+=(4+1*4); + + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGLEZ: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_INT&&pVar->type!=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT) + { + goto _ERROR; + } + + if (pVar->_int<=0) + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=1; + } + else + { + pVar->type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + pVar->_int=0; + } + pT->IP+=(4+1*4); + + } + break; + + + case PX_SCRIPT_ASM_INSTR_OPCODE_CALL: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_HOST) + { + if (Ins->_host[cVar._int].map!=PX_NULL) + { + if (!((PX_ScriptVM_Function_Modules)(Ins->_host[cVar._int].map))(Ins)) + { + PX_SCRIPT_VM_LOG("Function error!"); + } + } + pT->IP+=8; + } + else + { + //push IP+8 + if (pT->SP>0) + { + pT->SP-=1; + } + else + { + goto _ERROR; + } + + + pVar=&Ins->_mem[pT->SP]; + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + + Ins->_mem[pT->SP].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + Ins->_mem[pT->SP]._int=pT->IP+8; + pT->IP=cVar._int; + } + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_PUSH: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if(pT->SP>0) + pT->SP-=1; + else + goto _ERROR; + + pVar=&Ins->_mem[pT->SP]; + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + if(!PX_StringInit(Ins->mp,&pVar->_string)) goto _ERROR; + if(!PX_StringCat(&pVar->_string,cVar._string.buffer)) goto _ERROR; + pVar->type=cVar.type; + } + else if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryInit(Ins->mp,&pVar->_memory); + if(!PX_MemoryAlloc(&pVar->_memory,cVar._memory.usedsize)) goto _ERROR; + if(!PX_MemoryCat(&pVar->_memory,cVar._memory.buffer,cVar._memory.usedsize)) goto _ERROR; + pVar->type=cVar.type; + } + else + { + *pVar=cVar; + } + + pT->IP+=8; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_POP: + { + if (opType[0]==PX_SCRIPT_ASM_OPTYPE_IP) + { + if(Ins->_mem[pT->SP].type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pT->IP=Ins->_mem[pT->SP]._int; + pT->SP+=1; + } + else + goto _ERROR; + } + else if (opType[0]==PX_SCRIPT_ASM_OPTYPE_SP) + { + goto _ERROR; + } + else if (opType[0]==PX_SCRIPT_ASM_OPTYPE_BP) + { + if(Ins->_mem[pT->SP].type==PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + pT->BP=Ins->_mem[pT->SP]._int; + pT->SP+=1; + pT->IP+=8; + } + else + goto _ERROR; + } + else + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + *pVar=Ins->_mem[pT->SP]; + + Ins->_mem[pT->SP].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + Ins->_mem[pT->SP]._int=0; + + pT->SP+=1; + pT->IP+=8; + } + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_POPN: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + for (i=0;i_mem[pT->SP+i]; + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + + Ins->_mem[pT->SP+i].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + Ins->_mem[pT->SP+i]._int=0; + } + pT->SP+=cVar._int; + pT->IP+=8; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ADR: + { + pVar=PX_SCRIPT_VM_GetVariablePointer(Ins,opType[0],PX_SCRIPT_VM_PARAM(0)); + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + switch(opType[1]) + { + case PX_SCRIPT_ASM_OPTYPE_GLOBAL: + pVar->_int=PX_SCRIPT_VM_PARAM(1); + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL: + pVar->_int=pT->BP+PX_SCRIPT_VM_PARAM(1); + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_REGREF: + if (pT->R[PX_SCRIPT_VM_PARAM(1)].type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pVar->_int=pT->R[PX_SCRIPT_VM_PARAM(1)]._int; + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_GLOBALREF: + if (Ins->_mem[PX_SCRIPT_VM_PARAM(1)].type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pVar->_int=Ins->_mem[PX_SCRIPT_VM_PARAM(1)]._int; + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF: + if (Ins->_mem[pT->BP+PX_SCRIPT_VM_PARAM(1)].type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pVar->_int=Ins->_mem[pT->BP+PX_SCRIPT_VM_PARAM(1)]._int; + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_REGREF: + if (Ins->_mem[PX_SCRIPT_VM_PARAM(1)].type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pVar->_int=pT->BP+pT->R[PX_SCRIPT_VM_PARAM(1)]._int; + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_GLOBALREF: + if (Ins->_mem[PX_SCRIPT_VM_PARAM(1)].type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pVar->_int=pT->BP+Ins->_mem[PX_SCRIPT_VM_PARAM(1)]._int; + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_LOCALREF: + if (Ins->_mem[pT->BP+PX_SCRIPT_VM_PARAM(1)].type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pVar->_int=pT->BP+Ins->_mem[pT->BP+PX_SCRIPT_VM_PARAM(1)]._int; + break; + + } + pT->IP+=8; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_RET: + { + cVar=Ins->_mem[pT->SP]; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + pT->SP+=1; + pT->IP=cVar._int; + if (pT->IP==-1) + { + PX_SCRIPTVM_VaribaleFree(Ins,&cVar); + PX_SCRIPTVM_VaribaleFree(Ins,&sVar); + PX_SCRIPTVM_VaribaleFree(Ins,&tVar); + + PX_ScriptVM_ThreadStop(Ins,Ins->T); + return PX_SCRIPTVM_RUNRETURN_END; + } + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_NOP: + { + pT->IP+=4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_BPX: + { + if (Ins->debug) + { + g_scriptVM_printFunc("Story Script Debugger Interrupt.\n"); + PX_ScriptVM_DebuggerInterrupt(Ins); + + } + pT->IP+=4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_WAIT: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + if (Ins->signal[cVar._int]) + { + PX_SCRIPTVM_VaribaleFree(Ins,&cVar); + PX_SCRIPTVM_VaribaleFree(Ins,&sVar); + PX_SCRIPTVM_VaribaleFree(Ins,&tVar); + return PX_SCRIPTVM_RUNRETURN_WAIT; + } + else + { + pT->IP+=8; + if (tick==0) + { + tick=1; + } + } + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SIGNAL: + { + cVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[0],PX_SCRIPT_VM_PARAM(0),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + sVar=PX_SCRIPT_VM_GetParamConst(Ins,opType[1],PX_SCRIPT_VM_PARAM(1),&bOutofMemory); + if(bOutofMemory) goto _ERROR; + if (cVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT||sVar.type!=PX_SCRIPTVM_VARIABLE_TYPE_INT) + { + goto _ERROR; + } + Ins->signal[cVar._int]=sVar._int; + pT->IP+=4+4*2; + } + break; + default: + goto _ERROR; + } + + PX_SCRIPTVM_VaribaleFree(Ins,&cVar); + PX_SCRIPTVM_VaribaleFree(Ins,&sVar); + PX_SCRIPTVM_VaribaleFree(Ins,&tVar); + + if (pT->IP==-1) + { + break; + } + } + return PX_SCRIPTVM_RUNRETURN_END; +_ERROR: + + PX_SCRIPTVM_VaribaleFree(Ins,&cVar); + PX_SCRIPTVM_VaribaleFree(Ins,&sVar); + PX_SCRIPTVM_VaribaleFree(Ins,&tVar); + + PX_ScriptVM_Error(Ins,"Virtual Machine runtime error"); + return PX_SCRIPTVM_RUNRETURN_ERROR; +} + +px_bool PX_ScriptVM_InstanceRunFunction(PX_ScriptVM_Instance *Ins,px_int threadID,px_void *runParam,px_char *func,PX_SCRIPTVM_VARIABLE args[],px_int paramcount) +{ + int i,j,ip; + px_char uprname[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + px_int old_T; + if (paramcount>16||threadID>=Ins->maxThreadCount) + { + return PX_FALSE; + } + + if (PX_strlen(func)>=__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN) + { + return PX_FALSE; + } + + for (i=0;ifuncCount;i++) + { + PX_strcpy(uprname,func,sizeof(uprname)); + PX_strupr(uprname); + if(PX_strequ(Ins->_func[i].name,uprname)) + { + ip=Ins->_func[i].Addr; + break; + } + } + + if (i==Ins->funcCount) + { + return PX_FALSE; + } + + if (Ins->pThread[threadID].Activated==PX_FALSE) + { + Ins->pThread[threadID].suspend=PX_FALSE; + Ins->pThread[threadID].Activated=PX_TRUE; + Ins->pThread[threadID].SP=Ins->VM_memsize-Ins->VM_Stacksize*threadID; + Ins->pThread[threadID].BP=Ins->pThread[threadID].SP; + Ins->pThread[threadID].IP=ip; + Ins->pThread[threadID].user_runtime_data=runParam; + for(j=0;jpThread[threadID].R)/sizeof(Ins->pThread[threadID].R[0]);j++) + { + PX_SCRIPTVM_VaribaleFree(Ins,&Ins->pThread[threadID].R[j]); + } + } + else + { + return PX_FALSE; + } + + old_T=Ins->T; + if(!PX_ScriptVM_InstanceThreadSwitch(Ins,threadID)) + { + return PX_FALSE; + } + + for (i=paramcount-1;i>=0;i--) + { + PX_ScriptVM_PUSH(Ins,args[i]); + } + + PX_ScriptVM_PUSH(Ins,PX_ScriptVM_Variable_int(-1)); + + PX_ScriptVM_InstanceRunThread(Ins,-1); + + Ins->T=old_T; + return PX_TRUE; +} + +px_bool PX_ScriptVM_InstanceRunFunctionIndex(PX_ScriptVM_Instance *Ins,px_int threadID,px_void *runParam,px_int funcIndex,PX_SCRIPTVM_VARIABLE args[],px_int paramcount) +{ + int i,j,ip; + px_int old_T; + if (paramcount>16||threadID>=Ins->maxThreadCount) + { + return PX_FALSE; + } + + ip=Ins->_func[funcIndex].Addr; + + if (Ins->pThread[threadID].Activated==PX_FALSE) + { + Ins->pThread[threadID].suspend=PX_FALSE; + Ins->pThread[threadID].Activated=PX_TRUE; + Ins->pThread[threadID].SP=Ins->VM_memsize-Ins->VM_Stacksize*threadID; + Ins->pThread[threadID].BP=Ins->pThread[threadID].SP; + Ins->pThread[threadID].IP=ip; + Ins->pThread[threadID].user_runtime_data=runParam; + for(j=0;jpThread[threadID].R)/sizeof(Ins->pThread[threadID].R[0]);j++) + { + PX_SCRIPTVM_VaribaleFree(Ins,&Ins->pThread[threadID].R[j]); + } + } + else + { + return PX_FALSE; + } + + old_T=Ins->T; + if(!PX_ScriptVM_InstanceThreadSwitch(Ins,threadID)) + { + return PX_FALSE; + } + + for (i=paramcount-1;i>=0;i--) + { + PX_ScriptVM_PUSH(Ins,args[i]); + } + + PX_ScriptVM_PUSH(Ins,PX_ScriptVM_Variable_int(-1)); + + PX_ScriptVM_InstanceRunThread(Ins,-1); + Ins->T=old_T; + return PX_TRUE; +} + + +px_bool PX_ScriptVM_InstanceBeginThreadFunction(PX_ScriptVM_Instance *Ins,px_int threadID,px_void *runParam,px_char *func,PX_SCRIPTVM_VARIABLE args[],px_int paramcount) +{ + int i,j,ip; + px_int old_T; + px_char uprname[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + + if (paramcount>16||threadID>=Ins->maxThreadCount) + { + return PX_FALSE; + } + + + for (i=0;ifuncCount;i++) + { + PX_strcpy(uprname,func,sizeof(uprname)); + PX_strupr(uprname); + if(PX_strequ(Ins->_func[i].name,uprname)) + { + ip=Ins->_func[i].Addr; + break; + } + } + + if (i==Ins->funcCount) + { + return PX_FALSE; + } + + if (Ins->pThread[threadID].Activated==PX_FALSE) + { + Ins->pThread[threadID].suspend=PX_FALSE; + Ins->pThread[threadID].Activated=PX_TRUE; + Ins->pThread[threadID].SP=Ins->VM_memsize-Ins->VM_Stacksize*threadID; + Ins->pThread[threadID].BP=Ins->pThread[threadID].SP; + Ins->pThread[threadID].IP=ip; + Ins->pThread[threadID].user_runtime_data=runParam; + for(j=0;jpThread[threadID].R)/sizeof(Ins->pThread[threadID].R[0]);j++) + { + PX_SCRIPTVM_VaribaleFree(Ins,&Ins->pThread[threadID].R[j]); + } + } + else + { + return PX_FALSE; + } + + old_T=Ins->T; + if(!PX_ScriptVM_InstanceThreadSwitch(Ins,threadID)) + { + return PX_FALSE; + } + + for (i=paramcount-1;i>=0;i--) + { + PX_ScriptVM_PUSH(Ins,args[i]); + } + + PX_ScriptVM_PUSH(Ins,PX_ScriptVM_Variable_int(-1)); + + if(!PX_ScriptVM_InstanceThreadSwitch(Ins,old_T)) + { + return PX_FALSE; + } + return PX_TRUE; +} + +px_bool PX_ScriptVM_InstanceBeginThreadFunctionIndex(PX_ScriptVM_Instance *Ins,px_int threadID,px_void *runParam,px_int funcIndex,PX_SCRIPTVM_VARIABLE args[],px_int paramcount) +{ + int i,j,ip; + px_int old_T; + if (paramcount>16||threadID>=Ins->maxThreadCount) + { + return PX_FALSE; + } + + ip=Ins->_func[funcIndex].Addr; + + if (Ins->pThread[threadID].Activated==PX_FALSE) + { + Ins->pThread[threadID].suspend=PX_FALSE; + Ins->pThread[threadID].Activated=PX_TRUE; + Ins->pThread[threadID].SP=Ins->VM_memsize-Ins->VM_Stacksize*threadID; + Ins->pThread[threadID].BP=Ins->pThread[threadID].SP; + Ins->pThread[threadID].IP=ip; + Ins->pThread[threadID].user_runtime_data=runParam; + for(j=0;jpThread[threadID].R[j]); + } + } + else + { + return PX_FALSE; + } + + old_T=Ins->T; + if(!PX_ScriptVM_InstanceThreadSwitch(Ins,threadID)) + { + return PX_FALSE; + } + + + for (i=paramcount-1;i>=0;i--) + { + PX_ScriptVM_PUSH(Ins,args[i]); + } + + + PX_ScriptVM_PUSH(Ins,PX_ScriptVM_Variable_int(-1)); + + if(!PX_ScriptVM_InstanceThreadSwitch(Ins,old_T)) + { + return PX_FALSE; + } + return PX_TRUE; +} + +px_bool PX_ScriptVM_InstanceFree(PX_ScriptVM_Instance *Ins) +{ + px_int i,j; + for (i=0;iVM_memsize;i++) + { + if (Ins->_mem[i].type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&Ins->_mem[i]._string); + } + if (Ins->_mem[i].type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&Ins->_mem[i]._memory); + } + } + + + if (Ins->pThread) + { + //Free Thread + for (i=0;imaxThreadCount;i++) + { + for (j=0;jpThread[i].R[j].type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&Ins->pThread[i].R[j]._string); + } + if (Ins->pThread[i].R[j].type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&Ins->pThread[i].R[j]._memory); + } + } + } + MP_Free(Ins->mp,Ins->pThread); + } + + + if(Ins->_mem) + MP_Free(Ins->mp,Ins->_mem); + + if(Ins->_func) + MP_Free(Ins->mp,Ins->_func); + + if(Ins->_host) + MP_Free(Ins->mp,Ins->_host); + + if(Ins->_string) + MP_Free(Ins->mp,Ins->_string); + + if(Ins->_bin) + MP_Free(Ins->mp,Ins->_bin); + + if(Ins->_memory) + MP_Free(Ins->mp,Ins->_memory); + + return PX_TRUE; +} + +px_bool PX_ScriptVM_RegistryHostFunction(PX_ScriptVM_Instance *Ins,px_char *name,PX_ScriptVM_Function_Modules funcModules) +{ + px_int i; + px_char uprname[__PX_SCRIPT_ASM_MNEMONIC_NAME_LEN]; + PX_strset(uprname,name); + PX_strupr(uprname); + for (i=0;ihostCount;i++) + { + if (PX_strequ(uprname,Ins->_host[i].name+1)) + { + Ins->_host[i].map=(px_void *)funcModules; + return PX_TRUE; + } + } + return PX_FALSE; +} + +px_void PX_ScriptVM_RET(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE cVar) +{ + PX_SCRIPTVM_VARIABLE *pVar; + pVar=&Ins->pThread[Ins->T].R[1]; + + PX_SCRIPTVM_VaribaleFree(Ins,pVar); + + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringInit(Ins->mp,&pVar->_string); + PX_StringCat(&pVar->_string,cVar._string.buffer); + pVar->type=cVar.type; + } + else if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryInit(Ins->mp,&pVar->_memory); + PX_MemoryAlloc(&pVar->_memory,cVar._memory.usedsize); + PX_MemoryCat(&pVar->_memory,cVar._memory.buffer,cVar._memory.usedsize); + pVar->type=cVar.type; + } + else + { + *pVar=cVar; + } +} + +px_void PX_ScriptVM_PUSH(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE cVar) +{ + PX_SCRIPTVM_VARIABLE *pVar; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + if (pT->SP>0) + { + pT->SP-=1; + } + else + return; + + pVar=&Ins->_mem[pT->SP]; + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + + + if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringInit(Ins->mp,&pVar->_string); + PX_StringCat(&pVar->_string,cVar._string.buffer); + pVar->type=cVar.type; + } + else if (cVar.type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryInit(Ins->mp,&pVar->_memory); + PX_MemoryAlloc(&pVar->_memory,cVar._memory.usedsize); + PX_MemoryCat(&pVar->_memory,cVar._memory.buffer,cVar._memory.usedsize); + pVar->type=cVar.type; + } + else + { + *pVar=cVar; + } + +} + +px_void PX_ScriptVM_POPN(PX_ScriptVM_Instance *Ins,px_int T,px_int n) +{ + PX_SCRIPTVM_VARIABLE *pVar; + px_int i; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[T]; + + for (i=0;i_mem[pT->SP+i]; + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&pVar->_string); + } + + if (pVar->type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&pVar->_memory); + } + + Ins->_mem[pT->SP+i].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + Ins->_mem[pT->SP+i]._int=0; + } + pT->SP+=n; + if (pT->SP>Ins->VM_memsize) + { + PX_ScriptVM_Error(Ins,"host call Stack overflow!"); + } +} + +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_int(px_int _int) +{ + PX_SCRIPTVM_VARIABLE var; + var.type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + var._int=_int; + return var; +} + +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_float(px_float _float) +{ + PX_SCRIPTVM_VARIABLE var; + var.type=PX_SCRIPTVM_VARIABLE_TYPE_FLOAT; + var._float=_float; + return var; +} + +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_string(px_string _string) +{ + PX_SCRIPTVM_VARIABLE var; + var.type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + var._string=_string; + return var; +} + +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_const_string(px_char *buffer) +{ + PX_SCRIPTVM_VARIABLE var; + var.type=PX_SCRIPTVM_VARIABLE_TYPE_STRING; + var._string.buffer=buffer; + var._string.bufferlen=0; + var._string.mp=PX_NULL; + return var; +} + +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_const_memory(px_byte *buffer,px_int _size) +{ + PX_SCRIPTVM_VARIABLE var; + var.type=PX_SCRIPTVM_VARIABLE_TYPE_MEMORY; + var._memory.allocsize=0; + var._memory.buffer=buffer; + var._memory.usedsize=_size; + return var; +} + + +px_bool PX_ScriptVM_DebuggerEnable(PX_ScriptVM_Instance *Ins,PX_ScriptVM_DebuggerPrint _printFunc,PX_ScriptVM_DebuggerCommand _cmdFunc) +{ + if (g_scriptVM_printFunc&&_printFunc!=g_scriptVM_printFunc) + { + return PX_FALSE; + } + if (g_scriptVM_cmdFunc&&_cmdFunc!=g_scriptVM_cmdFunc) + { + return PX_FALSE; + } + g_scriptVM_cmdFunc=_cmdFunc; + g_scriptVM_printFunc=_printFunc; + Ins->bp_IP=-1; + Ins->bp_next=PX_TRUE; + Ins->debug=PX_TRUE; + + g_scriptVM_printFunc("Story Script debugger enabled.\n"); + return PX_TRUE; +} + + +px_int PX_ScriptVM_GetFunctionIndex(PX_ScriptVM_Instance *Ins,px_char *func) +{ + int i; + px_char cmpName[sizeof(Ins->_func[0].name)]; + if (func==PX_NULL) + { + return -1; + } + if (PX_strlen(func)>=sizeof(cmpName)) + { + return -1; + } + PX_strcpy(cmpName,func,sizeof(cmpName)); + PX_strupr(cmpName); + + for (i=0;ifuncCount;i++) + { + if(PX_strequ(Ins->_func[i].name,cmpName)) + { + return i; + } + } + + return -1; +} + +px_bool PX_ScriptVM_LocalAlloc(PX_ScriptVM_Instance *Ins,int size,PX_SCRIPTVM_MEMORY_PTR *mem_ptr) +{ + px_int i; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + + if (size>pT->SP-Ins->VM_Globalsize) + { + return PX_FALSE; + } + pT->SP-=size; + for (i=pT->SP;iSP+size;i++) + { + if (Ins->_mem[i].type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&Ins->_mem[i]._memory); + } + if (Ins->_mem[i].type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&Ins->_mem[i]._string); + } + Ins->_mem[i].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + } + mem_ptr->ptr= pT->SP; + mem_ptr->size=size; + return PX_TRUE; +} + +px_bool PX_ScriptVM_LocalFree(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_MEMORY_PTR *mem_ptr) +{ + px_int i; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + + if (pT->SP!=mem_ptr->ptr) + { + return PX_FALSE; + } + for (i=pT->SP;iSP+mem_ptr->size;i++) + { + if (Ins->_mem[i].type==PX_SCRIPTVM_VARIABLE_TYPE_MEMORY) + { + PX_MemoryFree(&Ins->_mem[i]._memory); + } + if (Ins->_mem[i].type==PX_SCRIPTVM_VARIABLE_TYPE_STRING) + { + PX_StringFree(&Ins->_mem[i]._string); + } + Ins->_mem[i].type=PX_SCRIPTVM_VARIABLE_TYPE_INT; + } + pT->SP+=mem_ptr->size; + return PX_TRUE; +} + +static px_void PX_ScriptVM_DebuggerGetParamName(PX_ScriptVM_Instance *Ins,px_char optype,px_int param) +{ + px_int i; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + + switch (optype) + { + case PX_SCRIPT_ASM_OPTYPE_IP: + { + g_scriptVM_printFunc("IP"); + } + break; + + case PX_SCRIPT_ASM_OPTYPE_SP: + { + g_scriptVM_printFunc("SP"); + } + break; + + case PX_SCRIPT_ASM_OPTYPE_BP: + { + g_scriptVM_printFunc("BP"); + } + break; + case PX_SCRIPT_ASM_OPTYPE_HOST: + case PX_SCRIPT_ASM_OPTYPE_INT: + { + g_scriptVM_printFunc("%d",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_FLOAT: + { + //Must be IEEE 754 format + g_scriptVM_printFunc("%f",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_STRING: + { + g_scriptVM_printFunc("%d",Ins->_string+param); + } + break; + + case PX_SCRIPT_ASM_OPTYPE_MEMORY: + { + g_scriptVM_printFunc("@"); + for (i=0;i<*(px_int *)(Ins->_memory+param);i++) + { + g_scriptVM_printFunc("%x",*(Ins->_memory+param+4+i)); + } + g_scriptVM_printFunc("@"); + } + break; + + case PX_SCRIPT_ASM_OPTYPE_REG: + { + g_scriptVM_printFunc("R%d",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_CONST: + { + g_scriptVM_printFunc("LOCAL[%d]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_REGREF: + { + g_scriptVM_printFunc("LOCAL[R%d]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_GLOBALREF: + { + g_scriptVM_printFunc("GLOBAL[LOCAL[%d]]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_LOCAL_LOCALREF: + { + g_scriptVM_printFunc("LOCAL[LOCAL[%d]]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_CONST: + { + g_scriptVM_printFunc("GLOBAL[%d]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_SPREF: + { + g_scriptVM_printFunc("GLOBAL[%d]",pT->SP+param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_REGREF: + { + g_scriptVM_printFunc("GLOBAL[R%d]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_GLOBALREF: + { + g_scriptVM_printFunc("GLOBAL[GLOBAL[%d]]",param); + } + break; + case PX_SCRIPT_ASM_OPTYPE_GLOBAL_LOCALREF: + { + g_scriptVM_printFunc("GLOBAL[LOCAL[%d]]",param); + } + break; + + default: + { + PX_ScriptVM_Error(Ins,"Unknow parameter"); + } + } +} + +px_void PX_ScriptVM_DebuggerDisplayBinary(PX_ScriptVM_Instance *Ins,px_int IP,px_int size) +{ + px_int i; + px_byte *buffer=(Ins->_bin+IP); + for (i=0;i=Ins->binsize) + { + return 0; + } + opCode=*(Ins->_bin+IP); + opType[0]=*(Ins->_bin+IP+1); + opType[1]=*(Ins->_bin+IP+2); + opType[2]=*(Ins->_bin+IP+3); + + + switch(opCode) + { + case PX_SCRIPT_ASM_INSTR_OPCODE_MOV: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MOV "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ADD: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("ADD "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SUB: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("SUB "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_DIV: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("DIV "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_MUL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MUL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_MOD: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MOD "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SHL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("SHL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SHR: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("SHR "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_AND: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("AND "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ANDL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("ANDL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ORL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("ORL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_OR: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("OR "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_XOR: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("XOR "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_POW: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("POW "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SIN: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("SIN "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_COS: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("COS "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_INT: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("INT "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_FLT: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("FLT "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRLEN: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRLEN "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRCAT: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRCAT "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRREP: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRREP "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRCHR: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRCHR "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRTOI: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRTOI "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRTOF: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRTOF "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRFRI: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRFRI "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRFRF: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRFRF "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_STRTMEM: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRMEM "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRSET: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRSET "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_STRFIND: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("STRFIND "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_ASC: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("ASC "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMBYTE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMBYTE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMSET: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMSET "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMTRM: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMCPY "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMFIND: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMFIND "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMLEN: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMLEN "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMCAT: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMCAT "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_MEMTSTR: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("MEMSTR "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_DATACPY: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("DATACPY "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_NEG: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("NEG "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_INV: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("INV "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_NOT: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("NOT "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JMP: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JMP "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JNE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JNE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JLE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JLE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JG: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JG "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_JGE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("JGE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_LGNE: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+3*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGNE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[2],PX_SCRIPT_VM_IP_PARAM(2)); + return 4+3*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_LGZ: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGZ "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_LGGZ: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGGZ "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGGEZ: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGGEZ "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGLZ: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGLZ "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_LGLEZ: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("LGLZE "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + + case PX_SCRIPT_ASM_INSTR_OPCODE_CALL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("CALL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_PUSH: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("PUSH "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_POP: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("POP "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_POPN: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("POPN "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_ADR: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+1*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("ADR "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 4+1*4; + } + break; + + case PX_SCRIPT_ASM_INSTR_OPCODE_RET: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("RET"); + return 4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_NOP: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("NOP"); + return 4; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_BPX: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("BPX"); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 8; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_WAIT: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("WAIT"); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + return 8; + } + break; + case PX_SCRIPT_ASM_INSTR_OPCODE_SIGNAL: + { + PX_ScriptVM_DebuggerDisplayBinary(Ins,IP,4+2*4); + g_scriptVM_printFunc(" "); + g_scriptVM_printFunc("SIGNAL "); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[0],PX_SCRIPT_VM_IP_PARAM(0)); + g_scriptVM_printFunc(","); + PX_ScriptVM_DebuggerGetParamName(Ins,opType[1],PX_SCRIPT_VM_IP_PARAM(1)); + return 4+2*4; + } + break; + default: + PX_ScriptVM_Error(Ins,"unknow instruction"); + } + + PX_ScriptVM_Error(Ins,"unknow instruction"); + return 0; +} +px_void PX_ScriptVM_DebuggerDisplayVariable(PX_ScriptVM_Instance *Ins,px_int index) +{ + PX_SCRIPTVM_VARIABLE var; + if (index>=Ins->VM_memsize) + { + g_scriptVM_printFunc("Variable illegal.\n"); + return; + } + var=Ins->_mem[index]; + + switch(var.type) + { + case PX_SCRIPTVM_VARIABLE_TYPE_INT: + g_scriptVM_printFunc("memptr %d [INT] %d\n",index,var._int); + break; + case PX_SCRIPTVM_VARIABLE_TYPE_FLOAT: + g_scriptVM_printFunc("memptr %d [FLOAT] %f\n",index,var._float); + break; + case PX_SCRIPTVM_VARIABLE_TYPE_MEMORY: + g_scriptVM_printFunc("memptr %d [MEMORY]\n",index); + break; + case PX_SCRIPTVM_VARIABLE_TYPE_STRING: + g_scriptVM_printFunc("memptr %d [STRING] %s\n",index,var._string.buffer); + break; + } +} + +px_void PX_ScriptVM_DebuggerDisplayReg(PX_ScriptVM_Instance *Ins,px_int index) +{ + PX_SCRIPTVM_VARIABLE var; + if (index>=PX_SCRIPTVM_REG_COUNT) + { + g_scriptVM_printFunc("Register illegal.\n"); + return; + } + var=Ins->pThread[Ins->T].R[index]; + + switch(var.type) + { + case PX_SCRIPTVM_VARIABLE_TYPE_INT: + g_scriptVM_printFunc("Thread %d R%d [INT] %d\n",Ins->T,index,var._int); + break; + case PX_SCRIPTVM_VARIABLE_TYPE_FLOAT: + g_scriptVM_printFunc("Thread %d R%d [FLOAT] %f\n",Ins->T,index,var._float); + break; + case PX_SCRIPTVM_VARIABLE_TYPE_MEMORY: + g_scriptVM_printFunc("Thread %d R%d [MEMORY]\n",Ins->T,index); + break; + case PX_SCRIPTVM_VARIABLE_TYPE_STRING: + g_scriptVM_printFunc("Thread %d R%d [STRING] %s\n",Ins->T,index,var._string.buffer); + break; + } +} + +static px_bool PX_ScriptVM_DebuggerSolveCmd(PX_ScriptVM_Instance *Ins,px_char *cmd) +{ + + PX_LEXER_LEXEME_TYPE type; + px_lexer lexer; + px_int u,i,oft,instrLen; + px_bool bContinue=PX_FALSE; + + PX_LexerInit(&lexer,Ins->mp); + PX_LexerRegisterSpacer(&lexer,' '); + PX_LexerRegisterSpacer(&lexer,'\t'); + + PX_LexerLoadSourceFromMemory(&lexer,cmd); + + /////////////////////////////////////////////////////////////////////////// + // + //b break Point + //n next instruction + //r run + //u disassembly + //global global[] + //local local[] + + while (PX_TRUE) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type==PX_LEXER_LEXEME_TYPE_END) + { + break; + } + if (PX_strequ(lexer.CurLexeme.buffer,"B")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_SPACER) + { + break; + } + type=PX_LexerGetNextLexeme(&lexer); + if(PX_strIsInt(lexer.CurLexeme.buffer)) + Ins->bp_IP=PX_atoi(lexer.CurLexeme.buffer); + else + break; + + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + Ins->bp_IP=-1; + break; + } + } + else if(PX_strequ(lexer.CurLexeme.buffer,"N")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + break; + } + Ins->bp_next=PX_TRUE; + bContinue=PX_TRUE; + } + else if(PX_strequ(lexer.CurLexeme.buffer,"C")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + break; + } + Ins->bp_next=PX_FALSE; + bContinue=PX_TRUE; + } + else if(PX_strequ(lexer.CurLexeme.buffer,"U")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_SPACER) + { + break; + } + + type=PX_LexerGetNextLexeme(&lexer); + if(PX_strIsInt(lexer.CurLexeme.buffer)) + u=PX_atoi(lexer.CurLexeme.buffer); + else + break; + + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + break; + } + + oft=0; + for (i=0;ipThread[Ins->T].IP+oft); + oft+=instrLen; + if(instrLen) + g_scriptVM_printFunc("\n"); + } + break; + } + else if(PX_strequ(lexer.CurLexeme.buffer,"R")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_SPACER) + { + break; + } + + type=PX_LexerGetNextLexeme(&lexer); + if(PX_strIsInt(lexer.CurLexeme.buffer)) + u=PX_atoi(lexer.CurLexeme.buffer); + else + break; + + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + break; + } + + PX_ScriptVM_DebuggerDisplayReg(Ins,u); + + break; + } + else if(PX_strequ(lexer.CurLexeme.buffer,"G")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_SPACER) + { + break; + } + + type=PX_LexerGetNextLexeme(&lexer); + if(PX_strIsInt(lexer.CurLexeme.buffer)) + u=PX_atoi(lexer.CurLexeme.buffer); + else + break; + + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + break; + } + + PX_ScriptVM_DebuggerDisplayVariable(Ins,u); + + break; + } + else if(PX_strequ(lexer.CurLexeme.buffer,"L")) + { + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_SPACER) + { + break; + } + + type=PX_LexerGetNextLexeme(&lexer); + if(PX_strIsInt(lexer.CurLexeme.buffer)) + u=PX_atoi(lexer.CurLexeme.buffer); + else + break; + + PX_ScriptVM_DebuggerDisplayVariable(Ins,Ins->pThread[Ins->T].BP+u); + + + type=PX_LexerGetNextLexeme(&lexer); + if (type!=PX_LEXER_LEXEME_TYPE_END) + { + break; + } + break; + } + else if(PX_strequ(lexer.CurLexeme.buffer,"D")) + { + g_scriptVM_printFunc("IP:%d SP:%d BP:%d\n",Ins->pThread[Ins->T].IP,Ins->pThread[Ins->T].SP,Ins->pThread[Ins->T].BP); + } + + } + + PX_LexerFree(&lexer); + + return bContinue; +} +px_void PX_ScriptVM_DebuggerInterrupt(PX_ScriptVM_Instance *Ins) +{ + + px_char cmd[PX_SCRIPTVM_DEBUGGER_CMD_LEN]; + PX_ScriptVM_InstanceThread *pT=&Ins->pThread[Ins->T]; + + px_byte *pInstrs=Ins->_bin+pT->IP; + + if (!Ins->debug) + { + return; + } + if ((Ins->bp_IP==pT->IP)||Ins->bp_next) + { + if(Ins->bp_next) + Ins->bp_IP=PX_FALSE; + } + else + { + return; + } + PX_ScriptVM_DebuggerCurrentInstruction(Ins,pT->IP); + g_scriptVM_printFunc("\n"); + do + { + PX_SCRIPT_VM_LOG("debug:>"); + g_scriptVM_cmdFunc(cmd,PX_SCRIPTVM_DEBUGGER_CMD_LEN); + PX_strupr(cmd); + } while (!PX_ScriptVM_DebuggerSolveCmd(Ins,cmd)); + + + +} + +px_bool PX_ScriptVM_InstanceThreadSwitch(PX_ScriptVM_Instance *Ins,px_int T) +{ + if (TmaxThreadCount&&Ins->pThread[T].Activated) + { + Ins->T=T; + return PX_TRUE; + } + return PX_FALSE; +} + +px_void PX_ScriptVM_ThreadStop(PX_ScriptVM_Instance *Ins,px_int ThreadId) +{ + px_int popn; + if (ThreadIdmaxThreadCount) + { + if (Ins->pThread[ThreadId].Activated) + { + popn=Ins->VM_memsize-Ins->VM_Stacksize*ThreadId-Ins->pThread[ThreadId].SP; + PX_ScriptVM_POPN(Ins,ThreadId,popn); + Ins->pThread[ThreadId].Activated=PX_FALSE; + } + } +} + + +px_void PX_ScriptVM_ThreadClear(PX_ScriptVM_Instance *Ins,px_int ThreadId) +{ + px_int i,popn; + if (ThreadIdmaxThreadCount) + { + //clear stack + popn=Ins->VM_memsize-Ins->VM_Stacksize*ThreadId-Ins->pThread[ThreadId].SP; + PX_ScriptVM_POPN(Ins,ThreadId,popn); + //Clear registers + for (i=0;ipThread[ThreadId].R[i]); + } + Ins->pThread[ThreadId].Activated=PX_FALSE; + } +} + +px_void PX_ScriptVM_ThreadSuspend(PX_ScriptVM_Instance *Ins,px_int ThreadId) +{ + if (ThreadIdmaxThreadCount) + { + if (Ins->pThread[ThreadId].Activated) + { + Ins->pThread[ThreadId].suspend=PX_TRUE; + } + } +} + +px_void PX_ScriptVM_ThreadResume(PX_ScriptVM_Instance *Ins,px_int ThreadId) +{ + if (ThreadIdmaxThreadCount) + { + if (Ins->pThread[ThreadId].Activated) + { + Ins->pThread[ThreadId].suspend=PX_FALSE; + } + } +} + +px_void PX_ScriptVM_InstanceRun(PX_ScriptVM_Instance *Ins,px_int tick) +{ + px_int i,activating=0; + for (i=0;imaxThreadCount;i++) + { + if (Ins->pThread[i].Activated) + { + activating++; + } + } + if (!activating) + { + return; + } + + if (tickmaxThreadCount;i++) + if (Ins->pThread[i].Activated) + { + PX_ScriptVM_InstanceThreadSwitch(Ins,i); + PX_ScriptVM_InstanceRunThread(Ins,PX_SCRIPTVM_ATOM_INSTRUCTMENTS); + tick-=PX_SCRIPTVM_ATOM_INSTRUCTMENTS; + if (tick<=0) + { + return; + } + } + } + +} + + + + + + diff --git a/code/PainterEngine/Kernel/PX_Script_VM.h b/code/PainterEngine/Kernel/PX_Script_VM.h new file mode 100644 index 0000000000000000000000000000000000000000..cbe8b02ab245318ed5dedbe681718dffd620056b --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Script_VM.h @@ -0,0 +1,122 @@ +#ifndef __PX_SCRIPT_VM_H +#define __PX_SCRIPT_VM_H +#include "PX_ScriptCore.h" +#define PX_SCRIPTVM_DEFALUT_FLOAT_PRECCISION 4 +#define PX_SCRIPTVM_REG_COUNT 8 +#define PX_SCRIPTVM_SIGNAL_COUNT 16 +#define PX_SCRIPTVM_DEBUGGER_CMD_LEN 128 +#define PX_SCRIPTVM_ATOM_INSTRUCTMENTS 64 +#define PX_SCRIPTVM_TICK_INFINITE (-1) +typedef struct +{ + px_bool Activated; + px_bool suspend; + px_uint sleep; + px_int IP,SP,BP; + px_void *user_runtime_data; + PX_SCRIPTVM_VARIABLE R[PX_SCRIPTVM_REG_COUNT]; +}PX_ScriptVM_InstanceThread; + +typedef struct +{ + px_int VM_Globalsize; + px_int VM_Stacksize; + px_int VM_memsize; + + px_int stringsize; + px_int memorysize; + px_int binsize; + px_int funcCount; + px_int hostCount; + px_int maxThreadCount; + + px_bool signal[PX_SCRIPTVM_SIGNAL_COUNT]; + px_bool Suspend; + + px_int T; + + px_byte * _bin; + px_byte *_memory; + px_char *_string; + px_memorypool *mp; + + union + { + px_void *user_ptr; + px_int user_int; + px_float user_float; + }; + + + PX_SCRIPT_EXPORT_FUNCTION *_func; + PX_SCRIPT_ASM_HOST_NODE *_host; + PX_SCRIPTVM_VARIABLE *_mem; + PX_ScriptVM_InstanceThread *pThread; + + px_bool debug; + px_bool bp_next; + px_int bp_IP; + +}PX_ScriptVM_Instance; + +typedef struct +{ + px_int ptr; + px_int size; +}PX_SCRIPTVM_MEMORY_PTR; + +typedef enum +{ + PX_SCRIPTVM_RUNRETURN_ERROR =0, + PX_SCRIPTVM_RUNRETURN_TIMEOUT, + PX_SCRIPTVM_RUNRETURN_END, + PX_SCRIPTVM_RUNRETURN_SUSPEND, + PX_SCRIPTVM_RUNRETURN_WAIT, +}PX_SCRIPTVM_RUNRETURN; + +typedef px_bool (*PX_ScriptVM_Function_Modules)(PX_ScriptVM_Instance *Ins); + +px_int PX_ScriptVM_GetFunctionIndex(PX_ScriptVM_Instance *Ins,px_char *func); + +px_bool PX_ScriptVM_InstanceThreadSwitch(PX_ScriptVM_Instance *Ins,px_int T); +px_bool PX_ScriptVM_InstanceRunFunction(PX_ScriptVM_Instance *Ins,px_int threadID,px_void *runParam,px_char *func,PX_SCRIPTVM_VARIABLE args[],px_int paramcount); +px_bool PX_ScriptVM_InstanceRunFunctionIndex(PX_ScriptVM_Instance *Ins,px_int threadID,px_void *runParam,px_int funcIndex,PX_SCRIPTVM_VARIABLE args[],px_int paramcount); +px_bool PX_ScriptVM_InstanceBeginThreadFunction(PX_ScriptVM_Instance *Ins,px_int threadID,px_void *runParam,px_char *func,PX_SCRIPTVM_VARIABLE args[],px_int paramcount); +px_bool PX_ScriptVM_InstanceBeginThreadFunctionIndex(PX_ScriptVM_Instance *Ins,px_int threadID,px_void *runParam,px_int funcIndex,PX_SCRIPTVM_VARIABLE args[],px_int paramcount); +PX_SCRIPTVM_RUNRETURN PX_ScriptVM_InstanceRunThread(PX_ScriptVM_Instance *Ins,px_int tick); +px_void PX_ScriptVM_InstanceRun(PX_ScriptVM_Instance *Ins,px_int tick); +px_void PX_ScriptVM_ThreadStop(PX_ScriptVM_Instance *Ins,px_int ThreadId); +px_void PX_ScriptVM_ThreadClear(PX_ScriptVM_Instance *Ins,px_int ThreadId); +px_void PX_ScriptVM_ThreadSuspend(PX_ScriptVM_Instance *Ins,px_int ThreadId); +px_void PX_ScriptVM_ThreadResume(PX_ScriptVM_Instance *Ins,px_int ThreadId); + +px_bool PX_ScriptVM_InstanceInit(PX_ScriptVM_Instance *Ins,px_memorypool *mp,px_byte *code,px_int size); +px_bool PX_ScriptVM_LocalAlloc(PX_ScriptVM_Instance *Ins,int size,PX_SCRIPTVM_MEMORY_PTR *mem_ptr); +px_bool PX_ScriptVM_LocalFree(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_MEMORY_PTR *mem_ptr); +px_bool PX_ScriptVM_RegistryHostFunction(PX_ScriptVM_Instance *Ins,px_char *name,PX_ScriptVM_Function_Modules funcModules); +px_bool PX_ScriptVM_InstanceFree(PX_ScriptVM_Instance *Ins); + +#define PX_ScriptVM_STACK(Ins,i) ((Ins)->_mem[(Ins)->pThread[(Ins)->T].SP+i]) +#define PX_ScriptVM_HOSTPARAM(Ins,i) ((Ins)->_mem[(Ins)->pThread[(Ins)->T].SP+i]) +#define PX_ScriptVM_LOCALPARAM(Ins,i) ((Ins)->_mem[(Ins)->pThread[(Ins)->T].BP+i]) +#define PX_ScriptVM_GLOBAL(Ins,i) ((Ins)->_mem[i]) +#define PX_ScriptVM_RETURN_POINTER(Ins,oft) ((Ins)->_mem[((Ins)->pThread[(Ins)->T].R[1])._int+(oft)]) +#define PX_ScriptVM_REG_RETURN(Ins) ((Ins)->pThread[(Ins)->T].R[1]) + +px_void PX_ScriptVM_POPN(PX_ScriptVM_Instance *Ins,px_int n,px_int Threadid); +px_void PX_ScriptVM_RET(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE ret); +px_void PX_ScriptVM_PUSH(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE val); +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_int(px_int _int); +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_float(px_float _float); +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_string(px_string _ref_string); +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_memory(px_memory _ref_memory); +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_const_string(px_char *buffer); +PX_SCRIPTVM_VARIABLE PX_ScriptVM_Variable_const_memory(px_byte *buffer,px_int _size); +PX_SCRIPTVM_VARIABLE PX_SCRIPTVM_VaribaleCopy(PX_ScriptVM_Instance *Ins,PX_SCRIPTVM_VARIABLE var,px_bool *bOutofMemory); +typedef px_int (* PX_ScriptVM_DebuggerPrint)(px_char fmr[],...); +typedef px_int (* PX_ScriptVM_DebuggerCommand)(px_char cmd[],px_int size); + +px_int PX_ScriptVM_DebuggerEnable(PX_ScriptVM_Instance *Ins,PX_ScriptVM_DebuggerPrint _printFunc,PX_ScriptVM_DebuggerCommand _cmdFunc); + + +#endif diff --git a/code/PainterEngine/Kernel/PX_SoundLab.c b/code/PainterEngine/Kernel/PX_SoundLab.c new file mode 100644 index 0000000000000000000000000000000000000000..da53df77de66b752c05396892361c7b41f0db455 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_SoundLab.c @@ -0,0 +1 @@ +#include "PX_SoundLab.h" \ No newline at end of file diff --git a/code/PainterEngine/Kernel/PX_SoundLab.h b/code/PainterEngine/Kernel/PX_SoundLab.h new file mode 100644 index 0000000000000000000000000000000000000000..4d2bdab63363bcee7425061324abb965f13aa20b --- /dev/null +++ b/code/PainterEngine/Kernel/PX_SoundLab.h @@ -0,0 +1,23 @@ +#ifndef PX_SOUNDLAB_H +#define PX_SOUNDLAB_H + +#include "PX_Script_VM.h" + +typedef enum +{ + PX_SOUNDLAB_STFT_WINDOW_SIZE_256, + PX_SOUNDLAB_STFT_WINDOW_SIZE_512, + PX_SOUNDLAB_STFT_WINDOW_SIZE_1024, + PX_SOUNDLAB_STFT_WINDOW_SIZE_2048, + PX_SOUNDLAB_STFT_WINDOW_SIZE_4096, + PX_SOUNDLAB_STFT_WINDOW_SIZE_8192, +}PX_SOUNDLAB_STFT_WINDOW_SIZE; + +typedef struct +{ + px_memorypool *mp; + PX_SoundData SoundData; + PX_SOUNDLAB_STFT_WINDOW_SIZE STFT_WINDOW; +}PX_SoundLab; + +#endif diff --git a/code/PainterEngine/Kernel/PX_Sync.c b/code/PainterEngine/Kernel/PX_Sync.c new file mode 100644 index 0000000000000000000000000000000000000000..e05fb6905eb35fd40154a336375343c1d6572cdb --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Sync.c @@ -0,0 +1,1213 @@ +#include "PX_Sync.h" + +#ifdef PX_DEBUG_MODE +#include "stdio.h" +#define PX_SYNC_LOG printf +#else +#define PX_SYNC_LOG +#endif + +typedef struct +{ + px_dword param[4]; +}PX_Sync_IO_Info; + +px_bool PX_SyncFrameServerInit(PX_SyncFrame_Server *sync,px_memorypool *mp,px_dword updateDuration,px_syncframe_server_read read,px_syncframe_server_write write,px_void *user) +{ + sync->mp=mp; + sync->read=read; + sync->write=write; + sync->time=0; + sync->updateDuration=updateDuration; + sync->status=PX_SYNC_SERVER_STATUS_END; + sync->user=user; + sync->instr_once_maxsize=PX_SYNC_DEFAULT_INSTR_ONCE_MAX_SIZE; + sync->unique=0; + sync->version=0; + PX_VectorInit(mp,&sync->clients,sizeof(PX_SyncFrame_Server_Clients),32); + PX_VectorInit(mp,&sync->stampsIndexTable,sizeof(PX_SyncFrame_InstrStream_StampIndex),PX_SYNC_INSTRS_SIZE); + PX_MemoryInit(mp,&sync->stampsInstrStream); + return PX_MemoryResize(&sync->stampsInstrStream,PX_SYNC_INSTRS_BYTES_SIZE); +} + +px_void PX_SyncFrameServerSetVersion(PX_SyncFrame_Server *sync,px_dword version) +{ + sync->version=version; +} + +static px_bool PX_SyncFrameServer_Write(PX_SyncFrame_Server *sync_server,PX_SyncFrame_Server_Clients *pClient,px_void *data,px_uint size) +{ + PX_Sync_IO_Packet *packet=(PX_Sync_IO_Packet *)data; + packet->verify_id=pClient->client_id; + return (sync_server->write(sync_server,pClient->port,data,size)); +} +static px_bool PX_SyncFrameServer_Read(PX_SyncFrame_Server *server,PX_Sync_Port *port,PX_SyncFrame_Server_Clients **ppclient) +{ + PX_SyncFrame_Server_Clients *pClient=PX_NULL; + PX_Sync_IO_Packet *packet=PX_NULL; + +__RE_RECV: + + while (server->read(server,port,server->recv_cache_buffer,sizeof(server->recv_cache_buffer),&server->recv_cache_size)) + { + int i; + packet=(PX_Sync_IO_Packet *)(server->recv_cache_buffer); + for (i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncFrame_Server_Clients,&server->clients,i); + if (pClient->server_id==packet->verify_id) + { + if(packet->unique==0) + { + *ppclient=pClient; + return PX_TRUE; + } + else + { + px_int j; + for (j=0;junique==pClient->acceptuniqueQueue[j]) + { + goto __RE_RECV; + } + } + if (pClient->uniqueQueuewIndex>=PX_SYNC_UNIQUE_ARRAY_SIZE) + { + pClient->uniqueQueuewIndex=0; + } + pClient->acceptuniqueQueue[pClient->uniqueQueuewIndex]=packet->unique; + pClient->uniqueQueuewIndex++; + *ppclient=pClient; + return PX_TRUE; + } + + } + } + + } + return PX_FALSE; +} + +static px_void PX_SyncFrameServerHandle_StatusConnect(PX_SyncFrame_Server *sync_server,px_dword elpased) +{ + PX_SyncFrame_Server_Clients *pClient=PX_NULL; + PX_Sync_IO_Packet *recv_packet,*send_packet; + PX_Sync_Port port; + px_int i; + + PX_memset(&port,0,sizeof(PX_Sync_Port)); + + while (PX_SyncFrameServer_Read(sync_server,&port,&pClient)) + { + recv_packet=(PX_Sync_IO_Packet *)(sync_server->recv_cache_buffer); + + if (recv_packet->type==PX_SYNC_IO_TYPE_CONNECT) + { + if (recv_packet->param1==sync_server->version) + { + if(pClient->status==PX_SYNC_SERVERCLIENT_STATUS_CONNECT) + { + pClient->status=PX_SYNC_SERVERCLIENT_STATUS_PROCESSING; + pClient->timeIndexOffset=0; + pClient->timeStreamOffset; + pClient->port=port; + pClient->sendDurationTick=PX_SYNC_SERVER_SEND_DURATION; + PX_SYNC_LOG("connected\n"); + } + } + + send_packet=(PX_Sync_IO_Packet *)(sync_server->send_cache_buffer); + send_packet->verify_id=0; + send_packet->type=PX_SYNC_IO_TYPE_CONNECTACK; + send_packet->unique=0; + send_packet->param1=pClient->c_id; + send_packet->param2=0; + port=pClient->port; + PX_SyncFrameServer_Write(sync_server,pClient,send_packet,sizeof(PX_Sync_IO_Packet)); + + for(i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncFrame_Server_Clients,&sync_server->clients,i); + if (pClient->status!=PX_SYNC_SERVERCLIENT_STATUS_PROCESSING) + { + break; + } + } + + if (i>=sync_server->clients.size) + { + sync_server->status=PX_SYNC_SERVER_STATUS_PROCESSING; + return; + } + } + else if(recv_packet->type==PX_SYNC_IO_TYPE_QUERYSTATE) + { + px_int count=0; + for(i=0;iclients.size;i++) + { + PX_SyncFrame_Server_Clients *pEnumClient=PX_VECTORAT(PX_SyncFrame_Server_Clients,&sync_server->clients,i); + if (pEnumClient->status==PX_SYNC_SERVERCLIENT_STATUS_PROCESSING) + { + count++; + } + } + + send_packet=(PX_Sync_IO_Packet *)(sync_server->send_cache_buffer); + send_packet->verify_id=0; + send_packet->type=PX_SYNC_IO_TYPE_QUERYSTATEACK; + send_packet->unique=0; + send_packet->param1=count; + send_packet->param2=sync_server->clients.size; + port=pClient->port; + PX_SyncFrameServer_Write(sync_server,pClient,send_packet,sizeof(PX_Sync_IO_Packet)); + } + } +} + + +static px_void PX_SyncFrameServerHandle_StatusProcess(PX_SyncFrame_Server *sync_server,px_dword updateelpased) +{ + px_int i,datasize=0,dataoffset; + PX_SyncFrame_Server_Clients *pClient=PX_NULL; + PX_Sync_IO_Packet *send_packet,*recv_packet; + PX_Sync_Port port; + px_dword elpased; + PX_memset(&port,0,sizeof(PX_Sync_Port)); + sync_server->time+=updateelpased; + + for (i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncFrame_Server_Clients,&sync_server->clients,i); + pClient->lastInstrElpased+=updateelpased; + } + + do + { + if (updateelpased>=PX_SYNC_SERVER_SEND_DURATION) + { + elpased=PX_SYNC_SERVER_SEND_DURATION; + updateelpased-=elpased; + } + else + { + elpased=updateelpased; + updateelpased=0; + } + + + //nop timestamp + if ((sync_server->time+elpased)/sync_server->updateDuration>=(px_dword)sync_server->stampsIndexTable.size) + { + PX_SyncFrame_InstrStream_StampIndex newStamp; + newStamp.oft=sync_server->stampsInstrStream.usedsize; + newStamp.size=0; + //PX_SYNC_LOG("Time thunk %d sum32 %d\n",sync_server->stampsIndexTable.size,PX_SyncFrameServerSum32(sync_server)); + + PX_VectorPushback(&sync_server->stampsIndexTable,&newStamp); + for (i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncFrame_Server_Clients,&sync_server->clients,i); + pClient->onceRecvSize=0; + } + } + + while (PX_SyncFrameServer_Read(sync_server,&port,&pClient)) + { + recv_packet=(PX_Sync_IO_Packet *)(sync_server->recv_cache_buffer); + pClient->lastInstrElpased=0; + + switch (recv_packet->type) + { + case PX_SYNC_IO_TYPE_CONNECT: + { + if (recv_packet->param1==sync_server->version) + { + send_packet=(PX_Sync_IO_Packet *)(sync_server->send_cache_buffer); + send_packet->verify_id=0; + send_packet->type=PX_SYNC_IO_TYPE_CONNECTACK; + send_packet->unique=0; + send_packet->param1=pClient->c_id;; + send_packet->param2=0; + pClient->port=port; + PX_SyncFrameServer_Write(sync_server,pClient,send_packet,sizeof(PX_Sync_IO_Packet)); + } + } + break; + case PX_SYNC_IO_TYPE_QUERYSTATE: + { + send_packet=(PX_Sync_IO_Packet *)(sync_server->send_cache_buffer); + send_packet->verify_id=0; + send_packet->type=PX_SYNC_IO_TYPE_QUERYSTATEACK; + send_packet->unique=0; + send_packet->param1=sync_server->clients.size; + send_packet->param2=sync_server->clients.size; + port=pClient->port; + PX_SyncFrameServer_Write(sync_server,pClient,send_packet,sizeof(PX_Sync_IO_Packet)); + } + break; + case PX_SYNC_IO_TYPE_REQUEST: + { + pClient->timeIndexOffset=recv_packet->param1; + pClient->timeStreamOffset=recv_packet->param2; + pClient->sendTimes=0; + pClient->sendDurationTick=PX_SYNC_SERVER_SEND_DURATION; + } + break; + case PX_SYNC_IO_TYPE_OPCODE: + { + px_int max_size=0; + PX_SyncFrame_InstrStream_StampIndex *plastStamp=PX_VECTORLAST(PX_SyncFrame_InstrStream_StampIndex,&sync_server->stampsIndexTable); + + //check size + if (sync_server->recv_cache_size<(px_int)((PX_STRUCT_OFFSET(PX_Sync_IO_Packet,data)+sizeof(px_dword)*2))) + { + break; + } + + //check size + if (pClient->onceRecvSize+sync_server->recv_cache_size>sync_server->instr_once_maxsize) + { + break; + } + pClient->onceRecvSize+=sync_server->recv_cache_size; + datasize=sync_server->recv_cache_size-(px_int)PX_STRUCT_OFFSET(PX_Sync_IO_Packet,data); + + PX_MemoryCat(&sync_server->stampsInstrStream,&pClient->c_id,sizeof(pClient->c_id));//id + PX_MemoryCat(&sync_server->stampsInstrStream,&datasize,sizeof(px_dword));//size + PX_MemoryCat(&sync_server->stampsInstrStream,&recv_packet->data,datasize); + + plastStamp->size+=sizeof(pClient->c_id)+sizeof(px_dword)+datasize; + + } + break; + } + } + + //send instrument + + if(sync_server->stampsIndexTable.size) + { + for (i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncFrame_Server_Clients,&sync_server->clients,i); + + if (((px_int)pClient->timeIndexOffset>=sync_server->stampsIndexTable.size)&&((px_int)pClient->timeStreamOffset>=sync_server->stampsInstrStream.usedsize)) + { + continue; + } + + if (pClient->sendDurationTick>=PX_SYNC_SERVER_SEND_DURATION) + { + pClient->sendDurationTick=0; + + if (pClient->sendTimes<=0) + { + px_uint reserve_size; + px_dword stream_size=0,indexTableSize=0; + px_dword wstream_size=0,windexTableSize=0; + + + send_packet=(PX_Sync_IO_Packet *)(pClient->send_cache_instr_buffer); + PX_memset(pClient->send_cache_instr_buffer,0,sizeof(pClient->send_cache_instr_buffer)); + + + send_packet->type=PX_SYNC_IO_TYPE_OPCODE; + send_packet->verify_id=0; + + reserve_size=sizeof(pClient->send_cache_instr_buffer)- (px_int)PX_STRUCT_OFFSET(PX_Sync_IO_Packet,data); + + wstream_size=sync_server->stampsInstrStream.usedsize-pClient->timeStreamOffset; + + if (wstream_size>reserve_size-sizeof(pClient->timeStreamOffset)-sizeof(wstream_size))//<--- start offset dword and size dword + { + wstream_size=reserve_size-sizeof(pClient->timeStreamOffset)-sizeof(wstream_size); + } + + datasize=0; + dataoffset=0; + + //stream start-offset 4bytes + PX_memcpy(pClient->send_cache_instr_buffer+(sizeof(sync_server->recv_cache_buffer)-reserve_size),&pClient->timeStreamOffset,sizeof(pClient->timeStreamOffset)); + reserve_size-=sizeof(pClient->timeStreamOffset); + //stream size 4bytes + PX_memcpy(pClient->send_cache_instr_buffer+(sizeof(sync_server->recv_cache_buffer)-reserve_size),&wstream_size,sizeof(wstream_size)); + reserve_size-=sizeof(wstream_size); + + //Instr stream + if (wstream_size>reserve_size){wstream_size=reserve_size;} + PX_memcpy(pClient->send_cache_instr_buffer+(sizeof(sync_server->recv_cache_buffer)-reserve_size),sync_server->stampsInstrStream.buffer+pClient->timeStreamOffset,wstream_size); + datasize+=wstream_size; + reserve_size-=wstream_size; + + + if (reserve_size>=sizeof(PX_SyncFrame_InstrStream_StampIndex)+sizeof(px_dword)*2) + { + if (sync_server->stampsIndexTable.size-pClient->timeIndexOffset>1) //last stamp is not ready + { + windexTableSize=(sync_server->stampsIndexTable.size-pClient->timeIndexOffset-1); + + if (windexTableSize>(reserve_size-sizeof(px_dword)*2)/sizeof(PX_SyncFrame_InstrStream_StampIndex)) + { + windexTableSize=(reserve_size-sizeof(px_dword)*2)/sizeof(PX_SyncFrame_InstrStream_StampIndex); + } + if (windexTableSize) + { + //Index start-offset + PX_memcpy(pClient->send_cache_instr_buffer+(sizeof(sync_server->recv_cache_buffer)-reserve_size),&pClient->timeIndexOffset,sizeof(pClient->timeIndexOffset)); + reserve_size-=sizeof(pClient->timeIndexOffset); + //Index Size + PX_memcpy(pClient->send_cache_instr_buffer+(sizeof(sync_server->recv_cache_buffer)-reserve_size),&windexTableSize,sizeof(windexTableSize)); + reserve_size-=sizeof(windexTableSize); + //data + PX_memcpy(pClient->send_cache_instr_buffer+(sizeof(sync_server->recv_cache_buffer)-reserve_size),(px_byte *)sync_server->stampsIndexTable.data+pClient->timeIndexOffset*sizeof(PX_SyncFrame_InstrStream_StampIndex),windexTableSize*sizeof(PX_SyncFrame_InstrStream_StampIndex)); + reserve_size-=(windexTableSize*sizeof(PX_SyncFrame_InstrStream_StampIndex)); + datasize+=(windexTableSize*sizeof(PX_SyncFrame_InstrStream_StampIndex)); + } + } + } + + + pClient->timeStreamOffset+=wstream_size; + pClient->timeIndexOffset+=windexTableSize; + pClient->send_cache_instr_size=sizeof(sync_server->recv_cache_buffer)-reserve_size; + //send cache + + if(datasize) + { + //alloc unique + send_packet->unique=(++sync_server->unique); + if (send_packet->unique==0) + { + send_packet->unique=1; + } + // PX_SYNC_LOG("id %d Update ms %d\n",pClient->c_id,sync_server->time-pClient->lastsendtime); + pClient->lastsendtime=sync_server->time; + PX_SyncFrameServer_Write(sync_server,pClient,pClient->send_cache_instr_buffer,pClient->send_cache_instr_size); + ////////////////////////////////////////////////////////////////////////// + pClient->sendTimes=PX_SYNC_SERVER_SEND_TIMES; + ////////////////////////////////////////////////////////////////////////// + } + else + { + pClient->send_cache_instr_size=0; + pClient->sendTimes=0; + } + + } + else + { + pClient->sendTimes--; + send_packet=(PX_Sync_IO_Packet *)(pClient->send_cache_instr_buffer); + if (pClient->send_cache_instr_size) + { + PX_SyncFrameServer_Write(sync_server,pClient,pClient->send_cache_instr_buffer,pClient->send_cache_instr_size); + } + } + } + else + { + pClient->sendDurationTick+=elpased; + } + + } + } + + }while (updateelpased); +} +px_void PX_SyncFrameServerUpdate(PX_SyncFrame_Server *sync_server,px_dword elpased) +{ + switch(sync_server->status) + { + case PX_SYNC_SERVER_STATUS_CONNECT: + { + PX_SyncFrameServerHandle_StatusConnect(sync_server,elpased); + } + break; + case PX_SYNC_SERVER_STATUS_PROCESSING: + { + PX_SyncFrameServerHandle_StatusProcess(sync_server,elpased); + } + break; + case PX_SYNC_SERVER_STATUS_END: + break; + default: + break; + + } +} +px_bool PX_SyncFrameServerAddClient(PX_SyncFrame_Server *sync,px_dword server_verify_id,px_dword client_id,px_dword c_id) +{ + PX_SyncFrame_Server_Clients client; + px_int i; + PX_memset(client.port.byte_atom,0,sizeof(client.port.byte_atom)); + client.timeIndexOffset=0; + client.timeStreamOffset=0; + client.sendDurationTick=PX_SYNC_SERVER_SEND_DURATION; + client.status=PX_SYNC_SERVERCLIENT_STATUS_CONNECT; + for(i=0;iclients,&client); +} + + +px_void PX_SyncFrameServerSetInstrOnceMaxSize(PX_SyncFrame_Server *sync,px_int maxsize) +{ + sync->instr_once_maxsize=maxsize; +} + +px_bool PX_SyncFrameClientInit(PX_SyncFrame_Client *client,px_memorypool *mp,px_dword updateDuration,PX_Sync_Port serverport,px_dword server_verify_id,px_dword client_id,px_syncframe_client_read read,px_syncframe_client_write write,px_void *user) +{ + px_int i; + client->serverport=serverport; + client->mp=mp; + client->read=read; + client->write=write; + client->server_verify_id=server_verify_id; + client->client_id=client_id; + client->updateDuration=updateDuration; + client->time=0; + client->unique=0; + client->delayms=0; + client->user=user; + client->c_id=0; + client->connectCount=0; + client->connectSumCount=0; + client->version=0; + + for(i=0;iacceptuniqueQueue[i]=0; + client->uniqueQueuewIndex=0; + client->status=PX_SYNC_CLIENT_STATUS_CONNECTING; + client->send_cache_Instr_size=0; + client->send_repeat_times=0; + PX_VectorInit(mp,&client->stampsIndexTable,sizeof(PX_SyncFrame_InstrStream_StampIndex),PX_SYNC_INSTRS_SIZE); + PX_MemoryInit(mp,&client->Input_InstrStream); + PX_MemoryInit(mp,&client->stampsInstrStream); + return PX_MemoryResize(&client->stampsInstrStream,2*PX_SYNC_INSTRS_SIZE); + +} +static px_bool PX_SyncFrameClient_Read(PX_SyncFrame_Client *client) +{ + PX_Sync_Port port; + px_bool repeat; + PX_memset(&port,0,sizeof(PX_Sync_Port)); + while (client->read(client,&port,client->recv_cache_buffer,sizeof(client->recv_cache_buffer),&client->recv_cache_buffer_size)) + { + if (PX_memequ(port.byte_atom,client->serverport.byte_atom,sizeof(port.byte_atom))) + { + PX_Sync_IO_Packet *packet=(PX_Sync_IO_Packet *)(client->recv_cache_buffer); + if (packet->verify_id!=client->client_id) + { + return PX_FALSE; + } + + if(packet->unique==0) + { + return PX_TRUE; + } + else + { + px_int j; + repeat=PX_FALSE; + for (j=0;junique==client->acceptuniqueQueue[j]) + { + repeat=PX_TRUE; + break; + } + } + if (repeat) + { + continue; + } + if (client->uniqueQueuewIndex>=PX_SYNC_UNIQUE_ARRAY_SIZE) + { + client->uniqueQueuewIndex=0; + } + client->acceptuniqueQueue[client->uniqueQueuewIndex]=packet->unique; + client->uniqueQueuewIndex++; + return PX_TRUE; + } + + } + else + { + continue; + } + } + return PX_FALSE; +} +static px_bool PX_SyncFrameClient_Write(PX_SyncFrame_Client *client,px_void *data,px_uint size) +{ + PX_Sync_IO_Packet *packet=(PX_Sync_IO_Packet *)(data); + if (!data) + { + return PX_FALSE; + } + packet->verify_id=client->server_verify_id; + return (client->write(client,client->serverport,data,size)); +} + +static px_void PX_SyncFrame_ClientHandle_StatusConneting(PX_SyncFrame_Client *client,px_dword elpased) +{ + //read + PX_Sync_IO_Packet *packet; + + while (PX_SyncFrameClient_Read(client)) + { + PX_Sync_IO_Packet *packet=(PX_Sync_IO_Packet *)(client->recv_cache_buffer); + if (packet->type==PX_SYNC_IO_TYPE_CONNECTACK) + { + client->status=PX_SYNC_CLIENT_STATUS_WAITING; + client->c_id=packet->param1; + while (PX_SyncFrameClient_Read(client));//clear buffer + return; + } + } + + if (elpased) + { + packet=(PX_Sync_IO_Packet *)(client->send_cache_buffer); + packet->verify_id=0; + packet->type=PX_SYNC_IO_TYPE_CONNECT; + packet->unique=0; + packet->param1=client->version; + packet->param2=0; + PX_SyncFrameClient_Write(client,packet,sizeof(PX_Sync_IO_Packet)); + } + +} + +static px_void PX_SyncFrame_ClientHandle_StatusWaiting(PX_SyncFrame_Client *client,px_dword elpased) +{ + //read + PX_Sync_IO_Packet *packet; + + while (PX_SyncFrameClient_Read(client)) + { + PX_Sync_IO_Packet *packet=(PX_Sync_IO_Packet *)(client->recv_cache_buffer); + if (packet->type==PX_SYNC_IO_TYPE_QUERYSTATEACK) + { + client->connectCount=packet->param1; + client->connectSumCount=packet->param2; + while (PX_SyncFrameClient_Read(client));//clear buffer + if (client->connectCount>=client->connectSumCount) + { + client->status=PX_SYNC_CLIENT_STATUS_PROCESSING; + } + return; + } + } + + if (elpased) + { + packet=(PX_Sync_IO_Packet *)(client->send_cache_buffer); + packet->verify_id=0; + packet->type=PX_SYNC_IO_TYPE_QUERYSTATE; + packet->unique=0; + packet->param1=0; + packet->param2=0; + PX_SyncFrameClient_Write(client,packet,sizeof(PX_Sync_IO_Packet)); + } + +} + +static px_void PX_SyncFrame_ClientHandle_Request(PX_SyncFrame_Client *client) +{ + PX_Sync_IO_Packet *packet; + + packet=(PX_Sync_IO_Packet *)(client->send_cache_buffer); + + packet->unique=0; + packet->type=PX_SYNC_IO_TYPE_REQUEST; + packet->verify_id=0; + packet->param1=client->stampsIndexTable.size; + packet->param2=client->stampsInstrStream.usedsize; + + PX_SyncFrameClient_Write(client,packet,sizeof(PX_Sync_IO_Packet)); + +} + +static px_void PX_SyncFrame_ClientHandle_StatusProcessing(PX_SyncFrame_Client *client,px_dword elpased) +{ + PX_Sync_IO_Packet *recv_packet,*send_packet; + px_int i; + client->time+=elpased; + //write + //update send cache + if (client->send_repeat_times==0) + { + //read instr to send_repeat_times + + if (client->Input_InstrStream.usedsize) + { + px_int sendsize=0; + + send_packet=(PX_Sync_IO_Packet *)(client->send_cache_Instr_buffer); + send_packet->type=PX_SYNC_IO_TYPE_OPCODE; + send_packet->verify_id=0; + if (client->unique==0) + { + client->unique=1; + } + send_packet->unique=(client->unique++); + + sendsize+=sizeof(recv_packet->type)+sizeof(recv_packet->verify_id); + + if((px_uint)client->Input_InstrStream.usedsizesend_cache_Instr_buffer)- (px_int)PX_STRUCT_OFFSET(PX_Sync_IO_Packet,data)) + { + client->send_cache_Instr_size=client->Input_InstrStream.usedsize+ (px_int)PX_STRUCT_OFFSET(PX_Sync_IO_Packet,data); + PX_memcpy(send_packet->data,client->Input_InstrStream.buffer,client->Input_InstrStream.usedsize); + } + else + { + PX_MemoryClear(&client->Input_InstrStream); + client->send_cache_Instr_size=0; + } + PX_MemoryClear(&client->Input_InstrStream); + + client->send_repeat_times=PX_SYNC_CLIENT_SEND_TIMES-1; + + + PX_SyncFrameClient_Write(client,client->send_cache_Instr_buffer,client->send_cache_Instr_size); + } + } + else + { + + if (client->sendDurationTick+elpased>=PX_SYNC_CLIENT_SEND_DURATION) + { + client->sendDurationTick=0; + client->send_repeat_times--; + if(client->send_cache_Instr_size) + { + PX_SyncFrameClient_Write(client,client->send_cache_Instr_buffer,client->send_cache_Instr_size); + } + } + else + { + client->sendDurationTick+=elpased; + } + } + + + + + + //recv + while (PX_SyncFrameClient_Read(client)) + { + recv_packet=(PX_Sync_IO_Packet *)(client->recv_cache_buffer); + + if (recv_packet->type==PX_SYNC_IO_TYPE_OPCODE) + { + px_int streamStart,streamSize,stampStartIndex,stampSize,reserve_size; + px_byte *streamdata; + PX_SyncFrame_InstrStream_StampIndex *pStamps; + streamStart=*(px_dword *)recv_packet->data; + streamSize=*(px_dword *)(recv_packet->data+sizeof(px_dword)); + streamdata=recv_packet->data+sizeof(px_dword)*2; + if (streamStart>client->stampsInstrStream.usedsize) + { + PX_SyncFrame_ClientHandle_Request(client); + return; + } + + if (streamStartstampsInstrStream.usedsize) + { + continue; + } + + + if (streamSize) + { + PX_MemoryCat(&client->stampsInstrStream,streamdata,streamSize); + } + reserve_size=client->recv_cache_buffer_size-streamSize-sizeof(px_dword)*2- (px_int)PX_STRUCT_OFFSET(PX_Sync_IO_Packet,data); + if (reserve_size>=sizeof(PX_SyncFrame_InstrStream_StampIndex)+sizeof(px_dword)*2) + { + stampStartIndex=*(px_dword *)(recv_packet->data+sizeof(px_dword)*2+streamSize); + stampSize=*(px_dword *)(recv_packet->data+sizeof(px_dword)*2+streamSize+sizeof(px_dword)); + pStamps=(PX_SyncFrame_InstrStream_StampIndex *)(recv_packet->data+sizeof(px_dword)*2+streamSize+sizeof(px_dword)*2); + } + else + { + continue; + } + + if (stampStartIndex>client->stampsIndexTable.size) + { + PX_SyncFrame_ClientHandle_Request(client); + return; + } + + if (stampStartIndexstampsIndexTable.size) + { + continue; + } + + + for(i=0;istampsIndexTable,&pStamps[i]); + } + //PX_SYNC_LOG("Sync %d delay %d ms sum32:%d\n",client->stampsIndexTable.size,client->time-client->delayms,PX_SyncFrameClientSum32(client)); + client->delayms=client->time; + } + } + + + +} +px_void PX_SyncFrameClientUpdate(PX_SyncFrame_Client *client,px_dword elpased) +{ + switch (client->status) + { + case PX_SYNC_CLIENT_STATUS_CONNECTING: + { + PX_SyncFrame_ClientHandle_StatusConneting(client,elpased); + } + break; + case PX_SYNC_CLIENT_STATUS_WAITING: + { + PX_SyncFrame_ClientHandle_StatusWaiting(client,elpased); + } + break; + case PX_SYNC_CLIENT_STATUS_PROCESSING: + { + PX_SyncFrame_ClientHandle_StatusProcessing(client,elpased); + } + break; + } +} + + +px_int PX_SyncFrameClientGetReadyFrameCount(PX_SyncFrame_Client *sync) +{ + return sync->stampsIndexTable.size; +} + +px_void PX_SyncFrameClientAddInstr(PX_SyncFrame_Client *client,px_void *instr,px_int size) +{ + if (client->status==PX_SYNC_CLIENT_STATUS_PROCESSING) + { + PX_MemoryCat(&client->Input_InstrStream,instr,size); + } + +} + + +px_void PX_SyncFrameClientSetVersion(PX_SyncFrame_Client *sync,px_dword version) +{ + sync->version=version; +} + +px_void PX_SyncFrameServerStop(PX_SyncFrame_Server *sync) +{ + sync->status=PX_SYNC_SERVER_STATUS_END; +} +px_void PX_SyncFrameServerRun(PX_SyncFrame_Server *sync) +{ + sync->status=PX_SYNC_SERVER_STATUS_CONNECT; +} +px_void PX_SyncFrameServerFree(PX_SyncFrame_Server *sync) +{ + PX_VectorFree(&sync->clients); + PX_VectorFree(&sync->stampsIndexTable); + PX_MemoryFree(&sync->stampsInstrStream); +} + +px_int PX_SyncFrameServerGetReadyFrameCount(PX_SyncFrame_Server *sync) +{ + return sync->stampsIndexTable.size-1; +} + +px_void PX_SyncFrameClientFree(PX_SyncFrame_Client *sync) +{ + PX_VectorFree(&sync->stampsIndexTable); + PX_MemoryFree(&sync->stampsInstrStream); + PX_MemoryFree(&sync->Input_InstrStream); +} + + + + +px_uint32 PX_SyncFrameServerSum32(PX_SyncFrame_Server *sync) +{ + px_uint32 sum=0; + sum+=PX_sum32(sync->stampsIndexTable.data,sync->stampsIndexTable.nodesize*sync->stampsIndexTable.size); + sum+=PX_sum32(sync->stampsInstrStream.buffer,sync->stampsInstrStream.usedsize); + return sum; +} + +px_uint32 PX_SyncFrameClientSum32(PX_SyncFrame_Client *sync) +{ + px_uint32 sum=0; + sum+=PX_sum32(sync->stampsIndexTable.data,sync->stampsIndexTable.nodesize*sync->stampsIndexTable.size); + sum+=PX_sum32(sync->stampsInstrStream.buffer,sync->stampsInstrStream.usedsize); + return sum; +} + + + +////////////////////////////////////////////////////////////////////////// +//SyncData + +static px_int PX_SyncDataCalculateBlockCount(px_int size) +{ + return size%PX_SYNCDATA_BLOCK_SIZE?size/PX_SYNCDATA_BLOCK_SIZE+1:size/PX_SYNCDATA_BLOCK_SIZE; +} + +px_bool PX_SyncDataServerInit(PX_SyncData_Server *syncdata_server,px_memorypool *mp,px_dword serverID,px_syncdata_server_read read,px_syncdata_server_write write,px_void *user) +{ + PX_memset(syncdata_server,0,sizeof(PX_SyncData_Server)); + syncdata_server->serverID=serverID; + syncdata_server->read=read; + syncdata_server->write=write; + syncdata_server->user=user; + if(!PX_VectorInit(mp,&syncdata_server->clients,sizeof(PX_SyncData_Server_Client),16)) return PX_FALSE; + return PX_TRUE; +} + + + +px_bool PX_SyncDataServerSetSyncData(PX_SyncData_Server *s,px_void *data,px_dword size) +{ + s->data=(px_byte *)data; + s->size=size; + + return PX_TRUE; +} + +px_bool PX_SyncDataServer_ReadBlock(PX_SyncData_Server *s,PX_Sync_Port *port,px_byte *data,px_int bufferSize,px_int *readsize) +{ + if (s->read(s,port,data,bufferSize,readsize)) + { + if (*readsize>bufferSize) + { + return PX_FALSE; + } + + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_SyncDataServer_WriteBlock(PX_SyncData_Server *s,PX_Sync_Port port,px_byte *data,px_int bufferSize) +{ + if (bufferSize>PX_SYNCDATA_DATAGRAM_MAX_SIZE) + { + return PX_FALSE; + } + if (s->write(s,port,data,bufferSize)) + { + return PX_TRUE; + } + return PX_FALSE; +} + + + +px_bool PX_SyncDataServerUpdate(PX_SyncData_Server *s,px_int elpased) +{ + PX_Sync_Port port; + px_int readSize,i; + PX_SyncData_Server_Client *pClient=PX_NULL; + PX_SyncData_Datagram R_datagram; + + PX_memset(&port,0,sizeof(port)); + + while (PX_SyncDataServer_ReadBlock(s,&port,(px_byte *)&R_datagram,sizeof(R_datagram),&readSize)) + { + if (R_datagram.header.serverID==s->serverID) + { + if (R_datagram.header.opcode==PX_SYNCDATA_OPCODE_QUERY) + { + if (s->clients.size>s->clients.size) + { + continue; + } + //searching data + for (i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncData_Server_Client,&s->clients,i); + if (pClient->clientID==R_datagram.query.clientID) + { + PX_SyncData_QueryAck queryAck; + if (!PX_memequ(&pClient->port,&port,sizeof(port))) + { + PX_memcpy(&pClient->port,&port,sizeof(port)); + } + queryAck.opcode=PX_SYNCDATA_OPCODE_QUERYACK; + queryAck.serverID=s->serverID; + queryAck.reserved=0; + queryAck.size=s->size; + PX_SyncDataServer_WriteBlock(s,port,(px_byte *)&queryAck,sizeof(queryAck)); + break; + } + } + } + + if (R_datagram.header.opcode==PX_SYNCDATA_OPCODE_REQUEST) + { + for (i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncData_Server_Client,&s->clients,i); + + if (PX_memequ(&pClient->port,&port,sizeof(port))) + { + int j=0; + if ((px_int)R_datagram.request.blockIndexsize)) + { + pClient->status=PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZING; + pClient->ProcessIndex=R_datagram.request.blockIndex; + } + else + { + pClient->status=PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZED; + pClient->ProcessIndex=R_datagram.request.blockIndex; + } + + } + } + } + + } + } + + for (i=0;iclients.size;i++) + { + pClient=PX_VECTORAT(PX_SyncData_Server_Client,&s->clients,i); + if (pClient->status!=PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZING) + { + continue; + } + if (pClient->ProcessIndexsize)) + { + if(pClient->send_elpased>=PX_SYNCDATA_SENDING_DURATION) + { + px_int size; + PX_SyncData_RequestAck QuestAck; + pClient->send_elpased=0; + QuestAck.blockIndex=pClient->ProcessIndex; + QuestAck.opcode=PX_SYNCDATA_OPCODE_REQUESTACK; + QuestAck.reserved=0; + QuestAck.serverID=s->serverID; + size=s->size-pClient->ProcessIndex*PX_SYNCDATA_BLOCK_SIZE; + size=(size>PX_SYNCDATA_BLOCK_SIZE?PX_SYNCDATA_BLOCK_SIZE:size); + PX_memcpy(QuestAck.data,s->data+pClient->ProcessIndex*PX_SYNCDATA_BLOCK_SIZE,size); + PX_SyncDataServer_WriteBlock(s,pClient->port,(px_byte *)&QuestAck,sizeof(QuestAck)); + pClient->ProcessIndex++; + } + else + { + pClient->send_elpased+=elpased; + } + } + } + return PX_TRUE; +} + +px_bool PX_SyncDataServerAddClient(PX_SyncData_Server *syncdata_server,px_dword clientID) +{ + PX_SyncData_Server_Client newClient; + PX_memset(&newClient,0,sizeof(newClient)); + newClient.ProcessIndex=0; + newClient.send_elpased=0; + newClient.status=PX_SYNCDATA_CLIENT_STATUS_QUERY; + newClient.clientID=clientID; + return PX_VectorPushback(&syncdata_server->clients,&newClient); +} + +px_void PX_SyncDataServerFree(PX_SyncData_Server *syncdata_server) +{ + PX_VectorFree(&syncdata_server->clients); +} + +px_bool PX_SyncDataClientInit(PX_SyncData_Client *syncdata_client,px_memorypool *mp,px_dword serverID,px_dword clientID,PX_Sync_Port server_port,px_syncdata_client_read read,px_syncdata_client_write write,px_void *user) +{ + PX_memset(syncdata_client,0,sizeof(PX_SyncData_Client)); + syncdata_client->clientID=clientID; + syncdata_client->mp=mp; + syncdata_client->port=server_port; + syncdata_client->read=read; + syncdata_client->serverID=serverID; + syncdata_client->status=PX_SYNCDATA_CLIENT_STATUS_QUERY; + syncdata_client->user=user; + syncdata_client->write=write; + return PX_TRUE; +} + + + +px_bool PX_SyncDataClientIsCompleted(PX_SyncData_Client *syncdata_client) +{ + return (syncdata_client->status==PX_SYNC_SERVERCLIENT_STATUS_END); +} + +px_bool PX_SyncDataClient_ReadBlock(PX_SyncData_Client *s,PX_Sync_Port *port,px_byte *data,px_int bufferSize,px_int *readsize) +{ + if (s->read(s,port,data,bufferSize,readsize)) + { + if (*readsize>bufferSize) + { + return PX_FALSE; + } + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_SyncDataClient_WriteBlock(PX_SyncData_Client *s,PX_Sync_Port port,px_byte *data,px_int bufferSize) +{ + if (bufferSize>PX_SYNCDATA_DATAGRAM_MAX_SIZE) + { + return PX_FALSE; + } + if (s->write(s,port,data,bufferSize)) + { + return PX_TRUE; + } + return PX_FALSE; +} + +px_bool PX_SyncDataClientResetData(PX_SyncData_Client *syncdata_client,px_uint size) +{ + if (syncdata_client->data) + { + MP_Free(syncdata_client->mp,syncdata_client->data); + } + syncdata_client->data=(px_byte *)MP_Malloc(syncdata_client->mp,size); + syncdata_client->datasize=size; + syncdata_client->blockCount=PX_SyncDataCalculateBlockCount(size); + syncdata_client->acceptBlock=0; + + return syncdata_client->data!=PX_NULL; +} + +px_bool PX_SyncDataClientUpdate(PX_SyncData_Client *syncdata_client,px_int elpased) +{ + PX_Sync_Port port; + px_int readSize; + PX_SyncData_Datagram R_datagram; + + syncdata_client->last_recv_elpased+=elpased; + + switch (syncdata_client->status) + { + case PX_SYNCDATA_CLIENT_STATUS_QUERY: + { + if (syncdata_client->query_elpased>PX_SYNCDATA_QUERY_DURATION) + { + PX_SyncData_Query query; + syncdata_client->query_elpased=0; + query.opcode=PX_SYNCDATA_OPCODE_QUERY; + query.reserved=0; + query.serverID=syncdata_client->serverID; + query.clientID=syncdata_client->clientID; + PX_SyncDataClient_WriteBlock(syncdata_client,syncdata_client->port,(px_byte *)&query,sizeof(query)); + } + else + { + syncdata_client->query_elpased+=elpased; + } + + if (PX_SyncDataClient_ReadBlock(syncdata_client,&port,(px_byte *)&R_datagram,sizeof(R_datagram),&readSize)) + { + if (R_datagram.header.serverID==syncdata_client->serverID) + { + if (R_datagram.header.opcode==PX_SYNCDATA_OPCODE_QUERYACK) + { + syncdata_client->last_recv_elpased=0; + if (!PX_SyncDataClientResetData(syncdata_client,R_datagram.queryack.size)) + { + return PX_FALSE; + } + syncdata_client->status=PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZING; + } + } + + } + } + break; + case PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZING: + { + syncdata_client->last_recv_elpased+=elpased; + + if (PX_SyncDataClient_ReadBlock(syncdata_client,&port,(px_byte *)&R_datagram,sizeof(R_datagram),&readSize)) + { + if (R_datagram.requestAck.serverID==syncdata_client->serverID&&R_datagram.header.opcode==PX_SYNCDATA_OPCODE_REQUESTACK) + { + px_int size; + px_int index=R_datagram.requestAck.blockIndex; + if (index==syncdata_client->acceptBlock) + { + syncdata_client->last_recv_elpased=0; + syncdata_client->query_elpased=0; + size=syncdata_client->datasize-index*PX_SYNCDATA_BLOCK_SIZE; + size=(size>PX_SYNCDATA_BLOCK_SIZE?PX_SYNCDATA_BLOCK_SIZE:size); + PX_memcpy(syncdata_client->data+index*PX_SYNCDATA_BLOCK_SIZE,R_datagram.requestAck.data,size); + syncdata_client->acceptBlock++; + } + else + { + syncdata_client->query_elpased=PX_SYNCDATA_REQUEST_DURATION; + } + + } + } + + if (syncdata_client->acceptBlockblockCount) + { + if (syncdata_client->query_elpased>=PX_SYNCDATA_REQUEST_DURATION) + { + px_int o=0; + PX_SyncData_Request request; + syncdata_client->query_elpased=0; + request.blockIndex=syncdata_client->acceptBlock; + request.serverID=syncdata_client->serverID; + request.opcode=PX_SYNCDATA_OPCODE_REQUEST; + request.reserved=0; + PX_SyncDataClient_WriteBlock(syncdata_client,syncdata_client->port,(px_byte *)&request,sizeof(request)); + } + else + { + syncdata_client->query_elpased+=elpased; + } + } + else + { + syncdata_client->status=PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZED; + + } + } + break; + case PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZED: + break; + } + return PX_TRUE; +} + +px_void PX_SyncDataClientFree(PX_SyncData_Client *syncdata_client) +{ + if (syncdata_client->data) + { + MP_Free(syncdata_client->mp,syncdata_client->data); + syncdata_client->data=PX_NULL; + } +} + + + + diff --git a/code/PainterEngine/Kernel/PX_Sync.h b/code/PainterEngine/Kernel/PX_Sync.h new file mode 100644 index 0000000000000000000000000000000000000000..581ef9d895cf84c6957c734ff004066eb0a8329a --- /dev/null +++ b/code/PainterEngine/Kernel/PX_Sync.h @@ -0,0 +1,356 @@ +#ifndef PX_SYNC_H +#define PX_SYNC_H + +#include "../Core/PX_Core.h" + + +#define PX_SYNC_SERVER_ID 0 +#define PX_SYNC_SERVER_SEND_DURATION 3 +#define PX_SYNC_SERVER_SEND_TIMES 3 + +#define PX_SYNC_CLIENT_SEND_TIMES 3 +#define PX_SYNC_DEFAULT_INSTR_ONCE_MAX_SIZE 256 +#define PX_SYNC_UNIQUE_ARRAY_SIZE 64 +#define PX_SYNC_CACHESIZE 1420 +#define PX_SYNC_INSTRS_SIZE 128*1024 +#define PX_SYNC_INSTRS_BYTES_SIZE 1024*1024 +#define PX_SYNC_CLIENT_SEND_DURATION 3 + +typedef enum +{ + PX_SYNC_IO_TYPE_CONNECT, + PX_SYNC_IO_TYPE_CONNECTACK, + PX_SYNC_IO_TYPE_QUERYSTATE, + PX_SYNC_IO_TYPE_QUERYSTATEACK, + PX_SYNC_IO_TYPE_REQUEST, + PX_SYNC_IO_TYPE_OPCODE, +}PX_SYNC_IO_TYPE; + +typedef enum +{ + PX_SYNC_SERVER_STATUS_CONNECT, + PX_SYNC_SERVER_STATUS_PROCESSING, + PX_SYNC_SERVER_STATUS_END, +}PX_SYNC_SERVER_STATUS; + +typedef enum +{ + PX_SYNC_SERVERCLIENT_STATUS_CONNECT, + PX_SYNC_SERVERCLIENT_STATUS_PROCESSING, + PX_SYNC_SERVERCLIENT_STATUS_END, +}PX_SYNC_SERVERCLIENT_STATUS; + +typedef enum +{ + PX_SYNC_CLIENT_STATUS_CONNECTING, + PX_SYNC_CLIENT_STATUS_WAITING, + PX_SYNC_CLIENT_STATUS_PROCESSING, + PX_SYNC_CLIENT_STATUS_END, +}PX_SYNC_CLIENT_STATUS; + +////////////////////////////////////////////////////////////////////////// +// +//SyncID +typedef struct +{ + union + { + px_void *ptr[4]; + px_dword dw_atom[4]; + px_byte byte_atom[16]; + }; +}PX_Sync_Port; +//id for ipv4 +//ip addr 4bytes +//port 2bytes +//dummy 2bytes +// +//10 bytes dummy +////////////////////////////////////////////////////////////////////////// + +struct _PX_SyncFrame_Server; +struct _PX_SyncFrame_Client; + +typedef px_bool (*px_syncframe_client_write)(struct _PX_SyncFrame_Client *client,PX_Sync_Port port,px_void *data,px_int size); +typedef px_bool (*px_syncframe_client_read)(struct _PX_SyncFrame_Client *client,PX_Sync_Port *port,px_void *data,px_int buffersize,px_int *readsize); + +typedef px_bool (*px_syncframe_server_write)(struct _PX_SyncFrame_Server *server,PX_Sync_Port port,px_void *data,px_int size); +typedef px_bool (*px_syncframe_server_read)(struct _PX_SyncFrame_Server *server,PX_Sync_Port *port,px_void *data,px_int buffersize,px_int *readsize); + + +typedef struct +{ + px_dword c_id; + px_dword size; + px_byte data[1]; +}PX_SyncFrame_InstrStream_Stamp; + + +typedef struct +{ + px_dword oft; + px_dword size; +}PX_SyncFrame_InstrStream_StampIndex; + +typedef struct +{ + px_dword client_id; + px_dword server_id; + px_dword c_id; + PX_Sync_Port port; + px_dword timeIndexOffset; + px_dword timeStreamOffset; + px_dword uniqueQueuewIndex; + px_dword acceptuniqueQueue[PX_SYNC_UNIQUE_ARRAY_SIZE]; + px_dword unique; + px_dword sendDurationTick; + px_dword sendTimes; + px_dword onceRecvSize; + px_dword lastsendtime; + px_dword lastInstrElpased; + PX_SYNC_SERVERCLIENT_STATUS status; + px_int send_cache_instr_size; + px_byte send_cache_instr_buffer[PX_SYNC_CACHESIZE]; +}PX_SyncFrame_Server_Clients; + + +typedef struct +{ + px_dword verify_id; + px_dword type; + px_dword unique; + union + { + struct + { + px_dword param1; + px_dword param2; + }; + px_byte data[1]; + }; +}PX_Sync_IO_Packet; + + +typedef struct _PX_SyncFrame_Server +{ + px_memorypool *mp; + px_dword time; + px_dword updateDuration; + px_dword unique; + px_dword version; + px_memory stampsInstrStream; + px_vector stampsIndexTable;//PX_Sync_Server_StampIndex * + px_vector clients;//PX_Sync_Server_Clients * + PX_SYNC_SERVER_STATUS status; + px_void *user; + px_syncframe_server_write write; + px_syncframe_server_read read; + px_int recv_cache_size; + px_uint instr_once_maxsize; + px_byte recv_cache_buffer[PX_SYNC_CACHESIZE]; + px_byte send_cache_buffer[PX_SYNC_CACHESIZE]; +}PX_SyncFrame_Server; + + + + +typedef struct _PX_SyncFrame_Client +{ + px_memorypool *mp; + PX_Sync_Port serverport; + px_dword c_id; + px_dword client_id; + px_dword server_verify_id; + px_int connectCount; + px_int connectSumCount; + px_dword version; + px_dword time; + px_dword delayms; + px_dword sendDurationTick; + px_dword updateDuration; + px_dword uniqueQueuewIndex; + px_dword acceptuniqueQueue[PX_SYNC_UNIQUE_ARRAY_SIZE]; + px_dword unique; + px_memory stampsInstrStream;//instrments + px_vector stampsIndexTable;//PX_Sync_Server_StampIndex * + px_memory Input_InstrStream; + px_void *user; + px_syncframe_client_write write; + px_syncframe_client_read read; + PX_SYNC_CLIENT_STATUS status; + px_int send_repeat_times; + px_byte send_cache_buffer[PX_SYNC_CACHESIZE]; + px_int recv_cache_buffer_size; + px_byte recv_cache_buffer[PX_SYNC_CACHESIZE]; + px_int send_cache_Instr_size; + px_byte send_cache_Instr_buffer[PX_SYNC_CACHESIZE]; +}PX_SyncFrame_Client; + + + + +px_bool PX_SyncFrameServerInit(PX_SyncFrame_Server *sync,px_memorypool *mp,px_dword updateDuration,px_syncframe_server_read read,px_syncframe_server_write write,px_void *user); +px_void PX_SyncFrameServerSetVersion(PX_SyncFrame_Server *sync,px_dword version); +px_bool PX_SyncFrameServerAddClient(PX_SyncFrame_Server *sync,px_dword server_verify_id,px_dword client_id,px_dword c_id); +px_void PX_SyncFrameServerSetInstrOnceMaxSize(PX_SyncFrame_Server *sync,px_int maxsize); +px_void PX_SyncFrameServerRun(PX_SyncFrame_Server *sync); +px_void PX_SyncFrameServerStop(PX_SyncFrame_Server *sync); +px_void PX_SyncFrameServerUpdate(PX_SyncFrame_Server *sync,px_dword elpased); +px_void PX_SyncFrameServerFree(PX_SyncFrame_Server *sync); +px_int PX_SyncFrameServerGetReadyFrameCount(PX_SyncFrame_Server *sync); +px_uint32 PX_SyncFrameServerSum32(PX_SyncFrame_Server *sync); + + +px_bool PX_SyncFrameClientInit(PX_SyncFrame_Client *client,px_memorypool *mp,px_dword updateDuration,PX_Sync_Port serverport,px_dword server_verify_id,px_dword client_id,px_syncframe_client_read read,px_syncframe_client_write write,px_void *user); +px_void PX_SyncFrameClientAddInstr(PX_SyncFrame_Client *client,px_void *instr,px_int size); +px_void PX_SyncFrameClientSetVersion(PX_SyncFrame_Client *sync,px_dword version); +px_void PX_SyncFrameClientUpdate(PX_SyncFrame_Client *sync,px_dword elpased); +px_int PX_SyncFrameClientGetReadyFrameCount(PX_SyncFrame_Client *sync); +px_void PX_SyncFrameClientFree(PX_SyncFrame_Client *sync); +px_uint32 PX_SyncFrameClientSum32(PX_SyncFrame_Client *sync); + + +#define PX_SYNCDATA_DATAGRAM_MAX_SIZE 1460 +#define PX_SYNCDATA_BLOCK_SIZE 1408 +#define PX_SYNCDATA_SENDING_DURATION 20 +#define PX_SYNCDATA_QUERY_DURATION 500 +#define PX_SYNCDATA_REQUEST_DURATION 100 + +struct _PX_SyncData_Server; +struct _PX_SyncData_Client; + +typedef px_bool (*px_syncdata_client_write)(struct _PX_SyncData_Client *client,PX_Sync_Port port,px_void *data,px_int size); +typedef px_bool (*px_syncdata_client_read)(struct _PX_SyncData_Client *client,PX_Sync_Port *port,px_void *data,px_int buffersize,px_int *readsize); + +typedef px_bool (*px_syncdata_server_write)(struct _PX_SyncData_Server *server,PX_Sync_Port port,px_void *data,px_int size); +typedef px_bool (*px_syncdata_server_read)(struct _PX_SyncData_Server *server,PX_Sync_Port *port,px_void *data,px_int buffersize,px_int *readsize); + + +typedef struct +{ + px_int blockIndex; +}PX_SyncDataBlock; + +typedef enum +{ + PX_SYNCDATA_CLIENT_STATUS_QUERY, + PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZING, + PX_SYNCDATA_CLIENT_STATUS_SYNCHRONIZED, + PX_SYNCDATA_STATUS_ERROR, +}PX_SYNCDATA_STATUS; + +typedef px_bool (*PX_SyncData_Encode)(px_byte *data,px_int size); +typedef px_bool (*PX_SyncData_Decode)(px_byte *data,px_int size); + +typedef struct _PX_SyncData_Server_Client +{ + PX_Sync_Port port; + px_dword clientID; + PX_SYNCDATA_STATUS status; + px_int ProcessIndex; + px_dword send_elpased; +}PX_SyncData_Server_Client; + +typedef struct _PX_SyncData_Server +{ + px_syncdata_server_write write; + px_syncdata_server_read read; + + px_dword serverID; + px_byte *data; + px_dword size; + + px_void *user; + px_vector clients;// vector for PX_SyncData_Server_Client +}PX_SyncData_Server; + +typedef struct _PX_SyncData_Client +{ + px_syncdata_client_write write; + px_syncdata_client_read read; + + px_memorypool *mp; + + PX_Sync_Port port; + px_dword clientID,serverID; + + px_byte *data; + px_dword datasize; + + px_int blockCount; + px_int acceptBlock; + + px_void *user; + + PX_SYNCDATA_STATUS status; + + px_dword query_elpased; + px_dword last_recv_elpased; +}PX_SyncData_Client; + +#define PX_SYNCDATA_OPCODE_QUERY 0x680 +#define PX_SYNCDATA_OPCODE_QUERYACK 0x6802 +#define PX_SYNCDATA_OPCODE_REQUEST 0x6803 +#define PX_SYNCDATA_OPCODE_REQUESTACK 0x6804 + + +typedef struct +{ + px_dword opcode; + px_dword serverID; +}PX_SyncData_DatagramHeader; + +typedef struct +{ + px_dword opcode; + px_dword serverID; + px_dword clientID; + px_dword reserved; +}PX_SyncData_Query; + +typedef struct +{ + px_dword opcode; + px_dword serverID; + px_dword size; + px_dword reserved; +}PX_SyncData_QueryAck; + +typedef struct +{ + px_dword opcode; + px_dword serverID; + px_dword reserved; + px_dword blockIndex; +}PX_SyncData_Request; + +typedef struct +{ + px_dword opcode; + px_dword serverID; + px_dword reserved; + px_dword blockIndex; + px_byte data[PX_SYNCDATA_BLOCK_SIZE]; +}PX_SyncData_RequestAck; + +typedef union +{ + PX_SyncData_DatagramHeader header; + PX_SyncData_Query query; + PX_SyncData_QueryAck queryack; + PX_SyncData_Request request; + PX_SyncData_RequestAck requestAck; +}PX_SyncData_Datagram; + +px_bool PX_SyncDataServerInit(PX_SyncData_Server *syncdata_server,px_memorypool *mp,px_dword serverID,px_syncdata_server_read read,px_syncdata_server_write write,px_void *user); +px_bool PX_SyncDataServerAddClient(PX_SyncData_Server *syncdata_server,px_dword clientID); +px_bool PX_SyncDataServerSetSyncData(PX_SyncData_Server *s,px_void *data,px_dword size); +px_bool PX_SyncDataServerUpdate(PX_SyncData_Server *syncdata_server,px_int elpased); +px_void PX_SyncDataServerFree(PX_SyncData_Server *syncdata_server); + + +px_bool PX_SyncDataClientInit(PX_SyncData_Client *syncdata_client,px_memorypool *mp,px_dword serverID,px_dword clientID,PX_Sync_Port server_port,px_syncdata_client_read read,px_syncdata_client_write write,px_void *user); +px_bool PX_SyncDataClientIsCompleted(PX_SyncData_Client *syncdata_client); +px_bool PX_SyncDataClientUpdate(PX_SyncData_Client *syncdata_client,px_int elpased); +px_void PX_SyncDataClientFree(PX_SyncData_Client *syncdata_client); +#endif diff --git a/code/PainterEngine/Kernel/PX_World.c b/code/PainterEngine/Kernel/PX_World.c new file mode 100644 index 0000000000000000000000000000000000000000..f1b4737ccc5a106062264eef449b61220bd0dc61 --- /dev/null +++ b/code/PainterEngine/Kernel/PX_World.c @@ -0,0 +1,501 @@ +#include "PX_World.h" + + +px_bool PX_WorldInit(px_memorypool *mp,PX_World *World,px_int world_width,px_int world_height,px_int surface_width,px_int surface_height,px_dword calcSize) +{ + px_void *ptr; + if(!PX_VectorInit(mp,&World->pObjects,sizeof(PX_WorldObject),256)) return PX_FALSE; + if(!PX_VectorInit(mp,&World->pNewObjects,sizeof(PX_Object *),128)) return PX_FALSE; + World->mp=mp; + World->world_height=world_height; + World->world_width=world_width; + World->surface_height=surface_height; + World->surface_width=surface_width; + World->auxiliaryline=PX_TRUE; + World->auxiliaryline_color=PX_COLOR(255,255,192,255); + World->camera_offset=PX_POINT(0,0,0); + World->aliveCount=0; + World->offsetx=0; + World->offsety=0; + PX_WorldSetAuxiliaryXYSpacer(World,32,32); + ptr=MP_Malloc(World->mp,calcSize); + if (!ptr) + { + return PX_FALSE; + } + World->mp_WorldCalc=MP_Create(ptr,calcSize); + PX_memset(World->Impact_Test_array,0,sizeof(World->Impact_Test_array)); + return PX_TRUE; +} + +px_void PX_WorldSetAuxiliaryXYSpacer(PX_World *pw,px_int x,px_int y) +{ + pw->auxiliaryXSpacer=x; + pw->auxiliaryYSpacer=y; +} + +px_void PX_WorldEnableAuxiliaryLine(PX_World *pw,px_bool bline) +{ + pw->auxiliaryline=bline; +} + + +px_int PX_WorldGetCount(PX_World *World) +{ + return World->pObjects.size; +} + +px_int PX_WorldAddObjectEx(PX_World *World,PX_Object *pObject) +{ + PX_WorldObject *pwo,wo; + int i; + wo.pObject=pObject; + wo.DeleteMark=PX_FALSE; + + for (i=0;ipObjects.size;i++) + { + pwo=PX_VECTORAT(PX_WorldObject,&World->pObjects,i); + if (!pwo->pObject) + { + *pwo=wo; + World->aliveCount++; + return i; + } + } + if (PX_VectorPushback(&World->pObjects,&wo)) + { + World->aliveCount++; + return World->pObjects.size-1; + } + return -1; +} + +px_void PX_WorldRemoveObjectEx(PX_World *world,px_int i_index) +{ + PX_WorldObject *pwo=PX_VECTORAT(PX_WorldObject,&world->pObjects,i_index); + if (pwo->pObject) + { + pwo->DeleteMark=PX_FALSE; + world->aliveCount--; + PX_ObjectDelete(pwo->pObject); + pwo->pObject=PX_NULL; + } +} + +px_void PX_WorldUpdate( PX_World *world,px_uint elpased ) +{ + px_int updateCount; + px_int i,b,j,k; + PX_Object_Event e; + PX_WorldObject *pwo; + + px_int impact_count[sizeof(pwo->pObject->impact_Object_type)*8]={0}; + px_memorypool *calcmp=&world->mp_WorldCalc; + + if (world==PX_NULL) + { + return; + } + + MP_Reset(calcmp); + + //Add NewObjects + k=0; + for (i=0;ipNewObjects.size;i++) + { + PX_WorldObject *pwo,wo; + + wo.pObject=*PX_VECTORAT(PX_Object *,&world->pNewObjects,i); + wo.DeleteMark=PX_FALSE; + + for (j=k;jpObjects.size;j++) + { + pwo=PX_VECTORAT(PX_WorldObject,&world->pObjects,j); + if (!pwo->pObject) + { + wo.pObject->world_index=j; + *pwo=wo; + world->aliveCount++; + k=j+1; + goto NEW_OBJECT_CONTINUE; + } + } + + if (PX_VectorPushback(&world->pObjects,&wo)) + { + world->aliveCount++; + wo.pObject->world_index=world->pObjects.size-1; + k=wo.pObject->world_index+1; + } +NEW_OBJECT_CONTINUE: + continue; + } + PX_VectorClear(&world->pNewObjects); + + //Object Counts + updateCount=world->pObjects.size; + + ////////////////////////////////////////////////////////////////////////// + //impact test + ////////////////////////////////////////////////////////////////////////// + for (i=0;ipObjects,i); + if (!pwo->pObject) + { + continue; + } + if (pwo->pObject->impact_Object_type) + { + j=0; + while(!(pwo->pObject->impact_Object_type&(1<pObject->impact_Object_type)*8;i++) + PX_QuadtreeCreate(calcmp,&world->Impact_Test_array[i],0,0,(px_float)world->world_width,(px_float)world->world_height,impact_count[i],2); + + for (i=0;ipObjects,i); + if (!pwo->pObject) + { + continue; + } + if (pwo->pObject->impact_Object_type) + { + for (b=0;bpObject->impact_Object_type)*8;b++) + { + if ((pwo->pObject->impact_Object_type&(1<Impact_Test_array[b],(px_float)pwo->pObject->x,(px_float)pwo->pObject->y,(px_float)pwo->pObject->Width,(px_float)pwo->pObject->Height,userData); + } + } + } + } + + for (i=0;ipObjects,i); + if (!pwo->pObject) + { + continue; + } + + if (pwo->pObject->impact_test_type) + { + for (b=0;bpObject->impact_test_type)*8;b++) + { + if ((pwo->pObject->impact_test_type&(1<Impact_Test_array[b]); + PX_QuadtreeTestNode(&world->Impact_Test_array[b],(px_float)pwo->pObject->x,(px_float)pwo->pObject->y,(px_float)pwo->pObject->Width,(px_float)pwo->pObject->Height,userData); + for (im_i=0;im_iImpact_Test_array[b].Impacts.size;im_i++) + { + PX_Quadtree_UserData *puData=PX_VECTORAT(PX_Quadtree_UserData,&world->Impact_Test_array[b].Impacts,im_i); + PX_Object *pObj1=pwo->pObject; + PX_WorldObject *pimpactWo=(PX_WorldObject *)puData->ptr; + PX_Object *pObj2=((PX_WorldObject *)(puData->ptr))->pObject; + + if (pObj1->diameter&&pObj2->diameter) + { + if(!PX_isCircleCrossCircle(PX_POINT(pObj1->x,pObj1->y,0),pObj1->diameter/2,PX_POINT(pObj2->x,pObj2->y,0),pObj2->diameter/2)) + continue; + } + else if (pObj1->diameter==0&&pObj2->diameter) + { + if (!PX_isRectCrossCircle(PX_RECT(pObj1->x-pObj1->Width/2,pObj1->y-pObj1->Height/2,pObj1->Width,pObj1->Height),PX_POINT(pObj2->x,pObj2->y,0),pObj2->diameter/2)) + { + continue; + } + } + else if (pObj1->diameter&&pObj2->diameter==0) + { + if (!PX_isRectCrossCircle(PX_RECT(pObj2->x-pObj2->Width/2,pObj2->y-pObj2->Height/2,pObj2->Width,pObj2->Height),PX_POINT(pObj1->x,pObj1->y,0),pObj1->diameter/2)) + { + continue; + } + } + if (pimpactWo->DeleteMark!=PX_TRUE) + { + e.Event=PX_OBJECT_EVENT_IMPACT; + e.Param_ptr[0]=pObj2; + PX_ObjectPostEvent(pObj1,e); + } + } + + } + } + } + } + + ////////////////////////////////////////////////////////////////////////// + //Update Objects + + + for (i=0;ipObjects,i); + if (!pwo->pObject) + { + continue; + } + PX_ObjectUpdate(pwo->pObject,elpased); + } + + ////////////////////////////////////////////////////////////////////////// + //delete death objects + for (i=0;ipObjects,i); + if (pwo->pObject&&pwo->DeleteMark) + { + PX_WorldRemoveObjectEx(world,i); + } + } + +} + +px_void PX_WorldUpdateOffset(PX_World *pw) +{ + px_int surface_width,surface_height; + px_int LeftTopX,LeftTopY; + + surface_width=pw->surface_width; + surface_height=pw->surface_height; + LeftTopX=(px_int)(pw->camera_offset.x-surface_width/2),LeftTopY=(px_int)(pw->camera_offset.y-surface_height/2); + + if (LeftTopX+surface_width>pw->world_width) + { + LeftTopX=pw->world_width-surface_width; + } + + if (LeftTopY+surface_height>pw->world_height) + { + LeftTopY=pw->world_height-surface_height; + } + + if (LeftTopX<0) + { + LeftTopX=0; + } + if (LeftTopY<0) + { + LeftTopY=0; + } + + pw->offsetx=LeftTopX; + pw->offsety=LeftTopY; +} + +px_void PX_WorldRender(px_surface *psurface,PX_World *pw,px_uint elpased) +{ + px_int i,j; + px_int surface_width,surface_height; + PX_QuickSortAtom *ArrayIndex; + px_memorypool *calcmp; + px_int sx,sy; + PX_WorldObject *pwo; + + if (pw==PX_NULL) + { + return; + } + + calcmp=&pw->mp_WorldCalc; + MP_Reset(calcmp); + + + PX_WorldUpdateOffset(pw); + + surface_width=pw->surface_width; + surface_height=pw->surface_height; + + + if (pw->auxiliaryline) + { + for (sy=pw->auxiliaryYSpacer-(pw->offsety%pw->auxiliaryYSpacer);syauxiliaryYSpacer) + { + PX_GeoDrawLine(psurface,0,sy,surface_width-1,sy,1,pw->auxiliaryline_color); + } + + for (sx=pw->auxiliaryXSpacer-(pw->offsetx%pw->auxiliaryXSpacer);sxauxiliaryXSpacer) + { + PX_GeoDrawLine(psurface,sx,0,sx,surface_height-1,1,pw->auxiliaryline_color); + } + + } + + ArrayIndex=(PX_QuickSortAtom *)MP_Malloc(calcmp,pw->aliveCount*sizeof(PX_QuickSortAtom)); + j=0; + + for (i=0;ipObjects.size;i++) + { + pwo=PX_VECTORAT(PX_WorldObject,&pw->pObjects,i); + if (!pwo->pObject) + { + continue; + } + ArrayIndex[j].power=pwo->pObject->z; + ArrayIndex[j].pData=pwo->pObject; + j++; + } + + PX_Quicksort_MaxToMin(ArrayIndex,0,pw->aliveCount-1); + + + + for (i=0;ialiveCount;i++) + { + px_float x, y; + x = ((PX_Object *)(ArrayIndex[i].pData))->x; + y = ((PX_Object *)(ArrayIndex[i].pData))->y; + ((PX_Object *)(ArrayIndex[i].pData))->x-=(px_float)pw->offsetx; + ((PX_Object *)(ArrayIndex[i].pData))->y-=(px_float)pw->offsety; + PX_ObjectRender(psurface,(PX_Object *)ArrayIndex[i].pData,elpased); + ((PX_Object *)(ArrayIndex[i].pData))->x=x; + ((PX_Object *)(ArrayIndex[i].pData))->y=y; + } + MP_Reset(calcmp); +} + +px_void PX_WorldSetImpact(PX_Object *pObj,px_dword type,px_dword Intersect) +{ + pObj->impact_Object_type=type; + pObj->impact_test_type=Intersect; +} + + + +px_bool PX_WorldAddObject(PX_World *World,PX_Object *pObject) +{ + return PX_VectorPushback(&World->pNewObjects,&pObject); +} + + +px_void PX_WorldSetAuxiliaryLineColor(PX_World *pw,px_color color) +{ + pw->auxiliaryline_color=color; +} + + + +px_point PX_WolrdObjectXYtoScreenXY(PX_World *pw,px_float x,px_float y) +{ + return PX_POINT(x-pw->offsetx,y-pw->offsety,0); +} + +px_void PX_WorldFree(PX_World *pw) +{ + PX_WorldObject *pwo; + int i; + for (i=0;ipObjects.size;i++) + { + pwo=PX_VECTORAT(PX_WorldObject,&pw->pObjects,i); + if (pwo->pObject) + { + PX_ObjectDelete(pwo->pObject); + } + } + PX_VectorFree(&pw->pObjects); + PX_VectorFree(&pw->pNewObjects); + + MP_Free(pw->mp,pw->mp_WorldCalc.StartAddr); + +} + +px_void PX_WorldSetCamera(PX_World *World,px_point camera_center_point) +{ + World->camera_offset=camera_center_point; + PX_WorldUpdateOffset(World); +} + +px_void PX_WorldRemoveObject(PX_World *world,PX_Object *pObject) +{ + PX_WorldObject *pwo; + if (pObject->world_index!=-1&&pObject->world_indexpObjects.size) + { + pwo=PX_VECTORAT(PX_WorldObject,&world->pObjects,pObject->world_index); + if (pwo->pObject==pObject) + { + pwo->DeleteMark=PX_TRUE; + + return; + } + } +} + +px_void PX_WorldRemoveObjectByIndex(PX_World *world,px_int i_index) +{ + PX_WorldObject *pwo=PX_VECTORAT(PX_WorldObject,&world->pObjects,i_index); + +#ifdef PX_DEBUG_MODE + if (i_index>world->pObjects.size) + { + PX_ASSERT(); + } +#endif + + if (pwo->pObject) + { + pwo->DeleteMark=PX_TRUE; + } +} + +_LIMIT px_int PX_WorldSearchRegion(PX_World *world,px_float x,px_float y,px_float raduis,PX_Object *Object[],px_int MaxSearchCount,px_dword impact_test_type) +{ + px_int b; + px_int m=0; + for (b=0;bImpact_Test_array[b]); + PX_QuadtreeTestNode(&world->Impact_Test_array[b],x,y,raduis*2,raduis*2,userData); + + for (im_i=0;im_iImpact_Test_array[b].Impacts.size;im_i++) + { + PX_Quadtree_UserData *puData=PX_VECTORAT(PX_Quadtree_UserData,&world->Impact_Test_array[b].Impacts,im_i); + PX_WorldObject *pimpactWo=(PX_WorldObject *)puData->ptr; + PX_Object *pObj2=((PX_WorldObject *)(puData->ptr))->pObject; + + if (pObj2->diameter) + { + if(!PX_isCircleCrossCircle(PX_POINT(x,y,0),raduis,PX_POINT(pObj2->x,pObj2->y,0),pObj2->diameter/2)) + continue; + } + else + { + if (!PX_isRectCrossCircle(PX_RECT(pObj2->x-pObj2->Width/2,pObj2->y-pObj2->Height/2,pObj2->Width,pObj2->Height),PX_POINT(x,y,0),raduis)) + { + continue; + } + } + + if (pimpactWo->DeleteMark!=PX_TRUE) + { + if (m1000/MAIN_RENDER_FPS) + { + + PX_SystemReadDeviceState(); + + while (PX_GetWinMessage(&msg)) + { + px_char text[2]={0}; + e.Event=PX_OBJECT_EVENT_ANY; + switch(msg.uMsg) + { + case WM_MOUSEMOVE: + { + if (msg.wparam&MK_LBUTTON) + { + e.Event=PX_OBJECT_EVENT_CURSORDRAG; + } + else + { + e.Event=PX_OBJECT_EVENT_CURSORMOVE; + } + + e.Param_uint[0]=((msg.lparam)&0xffff); + e.Param_uint[1]=((msg.lparam>>16)&0xffff); + } + break; + case WM_LBUTTONDOWN: + { + e.Event=PX_OBJECT_EVENT_CURSORDOWN; + e.Param_uint[0]=((msg.lparam)&0xffff); + e.Param_uint[1]=((msg.lparam>>16)&0xffff); + LastDownPoint.x=((msg.lparam)&0xffff); + LastDownPoint.y=((msg.lparam>>16)&0xffff); + } + break; + case WM_LBUTTONUP: + { + if (((msg.lparam)&0xffff)==LastDownPoint.x&&((msg.lparam>>16)&0xffff)==LastDownPoint.y) + { + e.Event=PX_OBJECT_EVENT_CURSORCLICK; + e.Param_uint[0]=((msg.lparam)&0xffff); + e.Param_uint[1]=((msg.lparam>>16)&0xffff); + LastDownPoint.x=-1; + LastDownPoint.y=-1; + if(main_console.show) + PX_ConsolePostEvent(&main_console,e); + else + PX_ObjectPostEvent(main_root,e); + } + e.Event=PX_OBJECT_EVENT_CURSORUP; + e.Param_uint[0]=((msg.lparam)&0xffff); + e.Param_uint[1]=((msg.lparam>>16)&0xffff); + + } + break; + case WM_RBUTTONDOWN: + { + e.Event=PX_OBJECT_EVENT_CURSORRDOWN; + e.Param_uint[0]=((msg.lparam)&0xffff); + e.Param_uint[1]=((msg.lparam>>16)&0xffff); + LastDownPoint.x=((msg.lparam)&0xffff); + LastDownPoint.y=((msg.lparam>>16)&0xffff); + } + break; + case WM_RBUTTONUP: + { + e.Event=PX_OBJECT_EVENT_CURSORRUP; + e.Param_uint[0]=((msg.lparam)&0xffff); + e.Param_uint[1]=((msg.lparam>>16)&0xffff); + + } + break; + case WM_KEYDOWN: + { + e.Event=PX_OBJECT_EVENT_KEYDOWN; + e.Param_uint[0]=msg.lparam; + } + break; + case WM_MOUSEWHEEL: + { + RECT rect; + GetWindowRect(PX_GetWindowHwnd(),&rect); + e.Event=PX_OBJECT_EVENT_CURSORWHEEL; + e.Param_int[0]=((msg.lparam)&0xffff)-rect.left; + e.Param_int[1]=((msg.lparam>>16)&0xffff)-rect.top; + e.Param_int[2]=(short)((msg.wparam>>16)&0xffff); + + } + break; + case WM_CHAR: + { + + text[0]=(px_char)msg.wparam; + e.Event=PX_OBJECT_EVENT_STRING; + e.Param_ptr[0]=text; + } + break; + case WM_GESTURE: + { + GESTUREINFO gi; + BOOL bHandled; + BOOL bResult; + ZeroMemory(&gi, sizeof(GESTUREINFO)); + + gi.cbSize = sizeof(GESTUREINFO); + + bResult = GetGestureInfo((HGESTUREINFO)msg.lparam, &gi); + bHandled = FALSE; + + if (bResult){ + // now interpret the gesture + switch (gi.dwID){ + case GID_ZOOM: + // Code for zooming goes here + + if (25>(main_zoomPoint.x-gi.ptsLocation.x)*(main_zoomPoint.x-gi.ptsLocation.x)+(main_zoomPoint.y-gi.ptsLocation.y)*(main_zoomPoint.y-gi.ptsLocation.y)) + { + e.Event=PX_OBJECT_EVENT_SCALE; + e.Param_int[0]=gi.ptsLocation.x; + e.Param_int[1]=gi.ptsLocation.y; + e.Param_int[2]=(px_int)gi.ullArguments-main_ZoomRegion; + } + + main_zoomPoint.x=gi.ptsLocation.x; + main_zoomPoint.y=gi.ptsLocation.y; + main_ZoomRegion=(px_int)gi.ullArguments; + + bHandled = TRUE; + break; + case GID_PAN: + // Code for panning goes here + bHandled = TRUE; + break; + case GID_ROTATE: + // Code for rotation goes here + bHandled = TRUE; + break; + case GID_TWOFINGERTAP: + // Code for two-finger tap goes here + bHandled = TRUE; + break; + case GID_PRESSANDTAP: + // Code for roll over goes here + bHandled = TRUE; + break; + default: + // A gesture was not recognized + break; + } + CloseGestureInfoHandle((HGESTUREINFO)msg.lparam); + }else{ + DWORD dwErr = GetLastError(); + if (dwErr > 0){ + //MessageBoxW(hWnd, L"Error!", L"Could not retrieve a GESTUREINFO structure.", MB_OK); + } + } + } + break; + default: + continue; + } + + if(e.Event!=PX_OBJECT_EVENT_ANY) + { + if(main_console.show) + PX_ConsolePostEvent(&main_console,e); + else + PX_ObjectPostEvent(main_root,e); + } + + } + + PX_SurfaceClear(&main_runtime.RenderSurface,0,0,main_runtime.RenderSurface.width-1,main_runtime.RenderSurface.height-1,main_backgroundColor); + PX_SurfaceRender(&main_runtime.RenderSurface,&main_DrawSurface,0,0,PX_TEXTURERENDER_REFPOINT_LEFTTOP,PX_NULL); + if (main_console.show) + { + PX_ConsoleUpdate(&main_console,main_renderElpased); + PX_ConsoleRender(&main_console,main_renderElpased); + } + else + { + PX_ObjectUpdate(main_root,main_renderElpased); + PX_ObjectRender(&main_runtime.RenderSurface,main_root,main_renderElpased); + } + + PX_SystemRender(main_runtime.RenderSurface.surfaceBuffer,main_runtime.width,main_runtime.height); + main_renderElpased=0; + } + else + { + main_renderElpased+=elpased; + PX_SystemLoop(); + } + return PX_TRUE; +} + + + +px_bool PX_Initialize(const px_char *name,px_int width,px_int height) +{ + + PX_srand(314159265); + + if (!PX_CreateWindow(width,height,name,PX_FALSE)) + { + return 0; + } + + if (!PX_RuntimeInitialize(&main_runtime,width,height,malloc(PE_MEMORY_RUNTIME_SIZE),PE_MEMORY_RUNTIME_SIZE,PE_MEMORY_UI_SIZE,PE_MEMORY_RESOURCES_SIZE,PE_MEMORY_GAME_SIZE)) + return PX_FALSE; + + if (!PX_ConsoleInitialize(&main_runtime,&main_console)) + return PX_FALSE; + + if(!PX_SurfaceCreate(&main_runtime.mp,width,height,&main_DrawSurface)) + { + return PX_FALSE; + } + + main_root=PX_ObjectCreate(&main_runtime.mp_ui,PX_NULL,0,0,0,0,0,0); + main_time=timeGetTime(); + + main_backgroundColor=PX_COLOR(255,255,255,255); + + return PX_TRUE; +} + +PX_Object * PX_GetUiRoot() +{ + return main_root; +} + +PX_Runtime * PX_GetRuntime() +{ + return &main_runtime; +} + +PX_ResourceLibrary * PX_GetResourceLibrary() +{ + return &main_runtime.ResourceLibrary; +}; + +px_memorypool * PX_GetMP() +{ + return &main_runtime.mp_resources; +} + +px_surface * PX_GetSurface() +{ + return &main_DrawSurface; +} + + +////////////////////////////////////////////////////////////////////////// +//Functions + +PX_IO_Data PX_LoadFileToIOData(const px_char *path) +{ + PX_IO_Data io; + px_int fileoft=0; + FILE *pf=fopen(path,"rb"); + px_int filesize; + if (!pf) + { + goto _ERROR; + } + fseek(pf,0,SEEK_END); + filesize=ftell(pf); + fseek(pf,0,SEEK_SET); + + io.buffer=(px_byte *)malloc(filesize+1); + if (!io.buffer) + { + goto _ERROR; + } + + while (!feof(pf)) + { + fileoft+=(px_int)fread(io.buffer+fileoft,1,1024,pf); + } + fclose(pf); + + io.buffer[filesize]='\0'; + io.size=filesize; + return io; +_ERROR: + io.buffer=PX_NULL; + io.size=0; + return io; +} + +px_void PX_FreeIOData(PX_IO_Data *io) +{ + if (io->size&&io->buffer) + { + free(io->buffer); + io->size=0; + io->buffer=PX_NULL; + } +} + +px_bool PX_LoadTextureFromFile(px_memorypool *mp,px_texture *tex,px_char *path) +{ + PX_IO_Data io; + +#ifdef PAINTERENGINE_IMAGEDECODER_H + if (PX_TextureCreateFromPngFile(mp,tex,path)) + { + return PX_TRUE; + } + if (PX_TextureCreateFromJpegFile(mp,tex,path)) + { + return PX_TRUE; + } +#endif + + io=PX_LoadFileToIOData(path); + if (!io.size) + { + return PX_FALSE; + } + if (PX_TextureCreateFromMemory(mp,io.buffer,io.size,tex)) + { + PX_FreeIOData(&io); + return PX_TRUE; + } + PX_FreeIOData(&io); + return PX_FALSE; +} + +px_bool PX_LoadShapeFromFile(px_memorypool *mp,px_shape *shape,px_char *path) +{ + PX_IO_Data io=PX_LoadFileToIOData(path); + if (!io.size) + { + return PX_FALSE; + } + if (PX_ShapeCreateFromMemory(mp,io.buffer,io.size,shape)) + { + PX_FreeIOData(&io); + return PX_TRUE; + } + PX_FreeIOData(&io); + return PX_FALSE; + +} + + +px_bool PX_LoadSoundFromFile(px_memorypool *mp,px_shape *shape,px_char *path) +{ + PX_IO_Data io=PX_LoadFileToIOData(path); + if (!io.size) + { + return PX_FALSE; + } + if (PX_ShapeCreateFromMemory(mp,io.buffer,io.size,shape)) + { + PX_FreeIOData(&io); + return PX_TRUE; + } + PX_FreeIOData(&io); + return PX_FALSE; +} + + +px_bool PX_LoadAnimationLibraryFromFile(px_memorypool *mp,PX_Animationlibrary *lib,px_char *path) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(path); + if (!io.size) + { + return PX_FALSE; + } + if (PX_AnimationLibraryCreateFromMemory(mp,lib,io.buffer,io.size)) + { + PX_FreeIOData(&io); + return PX_TRUE; + } + PX_FreeIOData(&io); + return PX_FALSE; + +} + +px_bool PX_LoadScriptFromFile(px_memory *code,px_char *path) +{ + PX_IO_Data io=PX_LoadFileToIOData(path); + if (!io.size) + { + return PX_FALSE; + } + if(!PX_MemoryCopy(code,io.buffer,0,io.size)) + goto _ERROR; + + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; + +} + + +px_bool PX_LoadScriptInstanceFromFile(px_memorypool *mp,PX_ScriptVM_Instance *ins,px_char *path) +{ + PX_IO_Data io=PX_LoadFileToIOData(path); + if (!io.size) + { + return PX_FALSE; + } + if(!PX_ScriptVM_InstanceInit(ins,mp,io.buffer,io.size)) + goto _ERROR; + + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + +px_bool PX_LoadTextureToResource(PX_Runtime *runtime,px_char Path[],px_char key[]) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(Path); + if (!io.size)goto _ERROR; + if(!PX_ResourceLibraryLoad(&runtime->ResourceLibrary,PX_RESOURCE_TYPE_TEXTURE,io.buffer,io.size,key)) goto _ERROR; + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + +px_bool PX_LoadShapeToResource(PX_Runtime *runtime,px_char Path[],px_char key[]) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(Path); + if (!io.size)goto _ERROR; + if(!PX_ResourceLibraryLoad(&runtime->ResourceLibrary,PX_RESOURCE_TYPE_SHAPE,io.buffer,io.size,key)) goto _ERROR; + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + +px_bool PX_LoadAnimationToResource(PX_Runtime *runtime,px_char Path[],px_char key[]) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(Path); + if (!io.size)goto _ERROR; + if(!PX_ResourceLibraryLoad(&runtime->ResourceLibrary,PX_RESOURCE_TYPE_ANIMATIONLIBRARY,io.buffer,io.size,key)) goto _ERROR; + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + +px_bool PX_LoadScriptToResource(PX_Runtime *runtime,px_char Path[],px_char key[]) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(Path); + if (!io.size)goto _ERROR; + if(!PX_ResourceLibraryLoad(&runtime->ResourceLibrary,PX_RESOURCE_TYPE_SCRIPT,io.buffer,io.size,key)) goto _ERROR; + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + + +px_bool PX_LoadSoundToResource(PX_Runtime *runtime,px_char Path[],px_char key[]) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(Path); + if (!io.size)goto _ERROR; + if(!PX_ResourceLibraryLoad(&runtime->ResourceLibrary,PX_RESOURCE_TYPE_SOUND,io.buffer,io.size,key)) goto _ERROR; + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} + +px_bool PX_LoadFontModuleFromFile(PX_FontModule *fm,const px_char Path[]) +{ + PX_IO_Data io; + io=PX_LoadFileToIOData(Path); + if (!io.size)goto _ERROR; + if(!PX_FontModuleLoad(fm,io.buffer,io.size)) goto _ERROR; + PX_FreeIOData(&io); + return PX_TRUE; +_ERROR: + PX_FreeIOData(&io); + return PX_FALSE; +} diff --git a/code/PainterEngine/PainterEngineHelper.h b/code/PainterEngine/PainterEngineHelper.h new file mode 100644 index 0000000000000000000000000000000000000000..fe09ef5d37bf510125615ac7ebc16dea7e3b0e7e --- /dev/null +++ b/code/PainterEngine/PainterEngineHelper.h @@ -0,0 +1,58 @@ +#ifndef PX_HELPER_H +#define PX_HELPER_H + +#define PE_MEMORY_RENDER_SURFACE 1024*1024*4 +#define PE_MEMORY_CACHE_NODE 128 +#define PE_MEMORY_RUNTIME_SIZE (1024*1024*32+PE_MEMORY_RENDER_SURFACE+PE_MEMORY_CACHE_NODE) +#define PE_MEMORY_UI_SIZE 1024*1024*8 +#define PE_MEMORY_RESOURCES_SIZE 1024*1024*16 +#define PE_MEMORY_GAME_SIZE 1024*1024 + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./Startup/Platform_Windows_D2D.h" +#include "./Architecture/PainterEngine_Console.h" + +//#include "../decoder/PainterEngine_ImageDecoder.h" + +typedef struct +{ + px_byte *buffer; + px_uint size; +}PX_IO_Data; + + +px_bool PX_Loop(); +px_void PX_SetBackgroundColor(px_color clr); +px_void PX_Clear(px_color clr); +px_void PX_ShowConsole(); +px_void PX_HideConsole(); +px_bool PX_Initialize(const px_char *name,px_int width,px_int height); +px_surface *PX_GetSurface(); +PX_Object *PX_GetUiRoot(); +PX_Runtime *PX_GetRuntime(); +PX_ResourceLibrary * PX_GetResourceLibrary(); +px_memorypool *PX_GetMP(); + +PX_IO_Data PX_LoadFileToIOData(const px_char *path); +px_void PX_FreeIOData(PX_IO_Data *io); + +px_bool PX_LoadTextureFromFile(px_memorypool *mp,px_texture *tex,px_char *path); +px_bool PX_LoadShapeFromFile(px_memorypool *mp,px_shape *shape,px_char *path); +px_bool PX_LoadSoundFromFile(px_memorypool *mp,px_shape *shape,px_char *path); +px_bool PX_LoadAnimationLibraryFromFile(px_memorypool *mp,PX_Animationlibrary *lib,px_char *path); +px_bool PX_LoadScriptFromFile(px_memory *code,px_char *path); +px_bool PX_LoadScriptInstanceFromFile(px_memorypool *mp,PX_ScriptVM_Instance *ins,px_char *path); +px_bool PX_LoadTextureToResource(PX_Runtime *runtime,px_char Path[],px_char key[]); +px_bool PX_LoadShapeToResource(PX_Runtime *runtime,px_char Path[],px_char key[]); +px_bool PX_LoadAnimationToResource(PX_Runtime *runtime,px_char Path[],px_char key[]); +px_bool PX_LoadScriptToResource(PX_Runtime *runtime,px_char Path[],px_char key[]); +px_bool PX_LoadSoundToResource(PX_Runtime *runtime,px_char Path[],px_char key[]); +px_bool PX_LoadFontModuleFromFile(PX_FontModule *fm,const px_char Path[]); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/code/PainterEngine/README.md b/code/PainterEngine/README.md new file mode 100644 index 0000000000000000000000000000000000000000..74d9173d13bdd80808c82471289f5334ae85f625 --- /dev/null +++ b/code/PainterEngine/README.md @@ -0,0 +1,3 @@ +`/code/PainterEngine` 文件夹用于存放构建图形界面所依赖的 PainterEngine 库。 + +PainterEngine 是一个用 C 语言编写的图形图像游戏引擎,可用于图形图像、游戏、UI 交互应用的快速开发,基于 BSD 开源协议发布。关于 PainterEngine 的使用,可以查看 `/support` 文件夹下的相关文档。关于 PainterEngine 的更多详情,请访问 [matrixcascade/PainterEngineHelper](https://github.com/matrixcascade/PainterEngineHelper)。 \ No newline at end of file diff --git a/code/PainterEngine/Startup/C_implement_backup.zip b/code/PainterEngine/Startup/C_implement_backup.zip new file mode 100644 index 0000000000000000000000000000000000000000..f7dd4233f2df382da445bb2f7c710c3a0536e27c Binary files /dev/null and b/code/PainterEngine/Startup/C_implement_backup.zip differ diff --git a/code/PainterEngine/Startup/Platform_Windows_D2D.cpp b/code/PainterEngine/Startup/Platform_Windows_D2D.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a1470ff01168789cee833b400b694396ea61239d --- /dev/null +++ b/code/PainterEngine/Startup/Platform_Windows_D2D.cpp @@ -0,0 +1,548 @@ +#include +#include +#include +#pragma comment(lib,"d2d1.lib") + +typedef struct +{ + UINT uMsg; + LPARAM lparam; + WPARAM wparam; +}WM_MESSAGE; + +extern "C" BOOL PX_CreateWindow( int Width,int Height,const char *name,BOOL bfullScreen); +extern "C" HWND PX_GetWindowHwnd(); +extern "C" VOID PX_SystemReadDeviceState(); +extern "C" BOOL PX_SystemLoop(); +extern "C" BOOL PX_SystemRender(void *raw,int width,int height); +extern "C" BOOL PX_SystemisAvtivated(); +extern "C" BOOL PX_KeyboardDown(unsigned char X ); +extern "C" char *PX_KeyboardString(); +extern "C" char *PX_DragfileString(); +extern "C" BOOL PX_MouseLButtonDown(); +extern "C" BOOL PX_MouseRButtonDown(); +extern "C" BOOL PX_MouseMButtonDown(); +extern "C" POINT PX_MousePosition(); +extern "C" BOOL PX_KeyDown(unsigned char key); +extern "C" BOOL PX_MouseWheel(int *x,int *y,int *delta); +extern "C" BOOL PX_GetWinMessage(WM_MESSAGE *Msg); +extern "C" char *PX_OpenFileDialog(const char Filter[]); +extern "C" char *PX_SaveFileDialog(const char Filter[],const char ext[]); +extern "C" char *PX_MultFileDialog(const char Filter[]); +extern "C" char * PX_GetFileName(const char filePath[]); + + +#define WIN_MAX_INPUT_STRING_LEN 64 +#define WIN_MAX_INPUT_SPECKEY_LEN 0xff + + +#define WIN_KEYDOWN_BACKSPACE 1 +#define WIN_KEYDOWN_RETURN 2 +#define WIN_KEYDOWN_LEFT 3 +#define WIN_KEYDOWN_RIGHT 4 +#define WIN_KEYDOWN_UP 5 +#define WIN_KEYDOWN_DOWN 6 + + +#define WIN_MESSAGESTACK_SIZE 32 + +HWND Win_Hwnd; +int Win_Height; +int Win_Width; +BOOL Win_bFullScreen; +BOOL Win_Activated; +WM_MESSAGE Win_messageStack[WIN_MESSAGESTACK_SIZE]={0}; +unsigned char DInput_KeyBoardState[256]; +char DInput_AccepyFile[MAX_PATH]={0}; +POINT DInput_MousePosition; +POINT DInput_MouseWheelPosition; +POINT DInput_MouseWheelDelta; + +ID2D1Bitmap *D2D_pSurface; +ID2D1Factory* D2D_pDirect2dFactory; +ID2D1HwndRenderTarget *D2D_pRenderTarget; + + + + +static WNDCLASSEXA Win_Wcx; + +///////////////////////////////////////////////////// +LRESULT CALLBACK AppWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); +///////////////////////////////////////////////////// + + +void DInput_Update() +{ + POINT point; + GetCursorPos(&point); + ScreenToClient(Win_Hwnd,&point); + DInput_MousePosition=point; +} + +BOOL PX_D3DReset(HWND hWnd,int Width,int Height,BOOL bfullScreen) +{ + return TRUE; +} + + +BOOL PX_CreateWindow( int Width,int Height,const char *name,BOOL bfullScreen) +{ + HRESULT hr; + D2D1_SIZE_U size; + RECT rc; + char tname[260]={0}; + + int nScreenWidth, nScreenHeight; + nScreenWidth = GetSystemMetrics(SM_CXSCREEN); + nScreenHeight = GetSystemMetrics(SM_CYSCREEN); + + + if (Win_Wcx.cbSize==0) + { + //////////////////////////////////////////////////////////////////////////// + // Initialize Window class struct + /////////////////////////////////////////////////////////////////////////// + Win_Wcx.cbSize = sizeof(WNDCLASSEX); + Win_Wcx.style = CS_CLASSDC; + Win_Wcx.lpfnWndProc = AppWindowProc; + Win_Wcx.cbClsExtra = 0; + Win_Wcx.cbWndExtra = 0; + Win_Wcx.hInstance = GetModuleHandle(NULL); + Win_Wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION); + Win_Wcx.hCursor = LoadCursor(NULL, IDC_ARROW); + Win_Wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW); + Win_Wcx.lpszMenuName = NULL; + Win_Wcx.lpszClassName = "WindowCls"; + Win_Wcx.hIconSm = LoadIcon(NULL, IDI_APPLICATION); + + + /////////////////////////////////////////////////////////////////////////// + //Class Register + /////////////////////////////////////////////////////////////////////////// + if(!RegisterClassExA(&Win_Wcx)) + return FALSE; + } + + + Win_Width=Width; + Win_Height=Height; + Win_bFullScreen=bfullScreen; + + //////////////////////////////////////////////////////////////////////////// + //Create window + //////////////////////////////////////////////////////////////////////////// +#ifdef UNICODE + MultiByteToWideChar(CP_ACP, 0, name, -1, (LPWSTR)tname, sizeof(tname)); +#else + strcpy_s(tname,sizeof(tname),name); +#endif + Win_Hwnd = CreateWindowA("WindowCls", tname, + WS_OVERLAPPED|WS_SYSMENU, + CW_USEDEFAULT, CW_USEDEFAULT, + Width, Height, + NULL, NULL, GetModuleHandle(NULL), NULL); + + + + if(!Win_Hwnd) + return FALSE; + + + + //////////////////////////////////////////////////////////////////////////// + //Show window + //////////////////////////////////////////////////////////////////////////// + ShowWindow(Win_Hwnd, SW_SHOWNORMAL); + UpdateWindow(Win_Hwnd); + //CoInitialize(NULL); + DragAcceptFiles(Win_Hwnd,TRUE); + ////////////////////////////////////////////////////////////////////////// + // + + if((Win_Hwnd) == NULL) + return FALSE; + + hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED,&D2D_pDirect2dFactory); + if (FAILED(hr)) + { + return FALSE; + } + + GetClientRect(Win_Hwnd, &rc); + SetWindowPos(Win_Hwnd,0,0,0,Width+Width-(rc.right - rc.left),Height+Height-(rc.bottom - rc.top),SWP_NOMOVE); + GetClientRect(Win_Hwnd, &rc); + + + size.width=rc.right - rc.left; + size.height=rc.bottom - rc.top; + + hr=D2D_pDirect2dFactory->CreateHwndRenderTarget( + D2D1::RenderTargetProperties(), + D2D1::HwndRenderTargetProperties(Win_Hwnd, size), + &D2D_pRenderTarget + ); + + if (FAILED(hr)) + { + return FALSE; + } + + D2D1_BITMAP_PROPERTIES bitmapformat; + bitmapformat.dpiX=0; + bitmapformat.dpiY=0; + bitmapformat.pixelFormat=D2D1::PixelFormat(DXGI_FORMAT_R8G8B8A8_UNORM,D2D1_ALPHA_MODE_IGNORE); + + size = D2D1::SizeU( + Width, + Height + ); + hr=D2D_pRenderTarget->CreateBitmap(size,bitmapformat,&D2D_pSurface); + + + if (FAILED(hr)) + { + return FALSE; + } + return (SUCCEEDED(hr)); + + return TRUE; +} +///////////////////////////////////////////////////////////// +char Win_Str[WIN_MAX_INPUT_STRING_LEN]={0}; +char Win_SpecKey[WIN_MAX_INPUT_SPECKEY_LEN]={0}; +int Win_CurrentIndex=0; +#include "stdio.h" +LRESULT CALLBACK AppWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + +// if(uMsg==0x246) +// printf("%x\n",uMsg); + WM_MESSAGE message; + int i; + + switch(uMsg) + { + case WM_MOUSEMOVE: + case WM_LBUTTONDOWN: + case WM_LBUTTONUP: + case WM_RBUTTONDOWN: + case WM_RBUTTONUP: + break; + case WM_KILLFOCUS: + { + Win_Activated=FALSE; + } + break; + case WM_SETFOCUS: + { + Win_Activated=TRUE; + } + break; + case WM_KEYDOWN: + { + Win_SpecKey[wParam]=1; + } + break; + case WM_MOUSEWHEEL: + { + DInput_MouseWheelPosition.x=GET_X_LPARAM(lParam); + DInput_MouseWheelPosition.y=GET_Y_LPARAM(lParam); + DInput_MouseWheelDelta.x=0; + DInput_MouseWheelDelta.y=GET_WHEEL_DELTA_WPARAM(wParam); + } + break; + case WM_CHAR: + { + if(Win_CurrentIndex=32||wParam==8) + { + Win_Str[Win_CurrentIndex++]=(char)wParam; + Win_Str[Win_CurrentIndex]='\0'; + } + } + } + break; + case WM_DROPFILES: + { + HDROP hdrop = (HDROP)wParam; + DragQueryFileA(hdrop, 0, DInput_AccepyFile, MAX_PATH); + DragFinish(hdrop); + } + break; + case WM_CLOSE: + { + PostQuitMessage(0); + exit(0); + } + break; + case WM_DESTROY: + { + PostQuitMessage(0); + return 0; + } + break; + default: return DefWindowProc(hWnd,uMsg,wParam,lParam); + } + + message.uMsg=uMsg; + message.wparam=wParam; + message.lparam=lParam; + for (i=0;iBeginDraw(); + D2D_pRenderTarget->Clear(); + D2D_pSurface->CopyFromMemory(&size,raw,width*sizeof(DWORD)); + D2D_pRenderTarget->DrawBitmap(D2D_pSurface); + D2D_pRenderTarget->EndDraw(); + + return TRUE; +} + +BOOL PX_SystemisAvtivated() +{ + return Win_Activated; +} + +BOOL PX_KeyboardDown(unsigned char X) +{ + return (DInput_KeyBoardState[X]&0x80?TRUE:FALSE); +} + +BOOL PX_MouseLButtonDown() +{ + return GetAsyncKeyState(VK_LBUTTON) & 0xFF00; +} + +BOOL PX_MouseRButtonDown() +{ + return GetAsyncKeyState(VK_RBUTTON) & 0xFF00; +} + +BOOL PX_MouseMButtonDown() +{ + return GetAsyncKeyState(VK_MBUTTON) & 0xFF00; +} + +POINT PX_MousePosition() +{ + return DInput_MousePosition; +} + +char * PX_KeyboardString() +{ + if(Win_CurrentIndex!=0) + { + Win_CurrentIndex=0; + return Win_Str; + } + else + { + return 0; + } +} + +VOID PX_SystemReadDeviceState() +{ + DInput_Update(); +} + +char * PX_DragfileString() +{ + return DInput_AccepyFile; +} + +HWND PX_GetWindowHwnd() +{ + return Win_Hwnd; +} + +BOOL PX_KeyDown(unsigned char key) +{ + if (Win_SpecKey[key]) + { + Win_SpecKey[key]=0; + return TRUE; + } + return FALSE; +} + +BOOL PX_MouseWheel(int *x,int *y,int *delta) +{ + if (DInput_MouseWheelDelta.y!=0) + { + *x=DInput_MouseWheelPosition.x; + *y=DInput_MouseWheelPosition.y; + *delta=DInput_MouseWheelDelta.y; + DInput_MouseWheelDelta.y=0; + return TRUE; + } + return FALSE; +} + +BOOL PX_GetWinMessage(WM_MESSAGE *Msg) +{ + int i; + for (i=0;i=0) + { + if (szFile[oft]=='\\'||szFile[oft]=='/') + { + szFile[oft]=0; + break; + } + oft--; + } + } + return szFile; + } + return NULL; +} + +char *PX_SaveFileDialog(const char Filter[],const char ext[]) +{ + OPENFILENAMEA ofn; + static char szFile[MAX_PATH]; + ZeroMemory(&ofn,sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.lpstrFile = szFile; + ofn.lpstrFile[0] = TEXT('\0'); + ofn.nMaxFile = sizeof(szFile); + ofn.lpstrFilter = Filter;//TEXT("Mirrorļ(.mirror)\0*.mirror"); + ofn.nFilterIndex = 1; + ofn.lpstrFileTitle = NULL; + ofn.nMaxFileTitle = 0; + ofn.lpstrInitialDir = NULL; + ofn.hwndOwner = Win_Hwnd; + ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST ; + + if (GetSaveFileNameA(&ofn)) + { + if (ext) + { + char uprFile[MAX_PATH]={0}; + char uprExt[MAX_PATH]={0}; + strcpy_s(uprExt,ext); + _strupr_s(uprExt); + strcpy_s(uprFile,szFile); + _strupr_s(uprFile); + if (!strstr(uprFile,uprExt)) + { + strcat_s(szFile,ext); + } + } + return szFile; + } + return NULL; +} + + +char * PX_GetFileName(const char filePath[]) +{ + int offset=strlen(filePath)-1; + while (offset) + { + if (filePath[offset]=='/'||filePath[offset]=='\\') + { + offset++; + break; + } + offset--; + } + return (char *)filePath+offset; +} \ No newline at end of file diff --git a/code/PainterEngine/Startup/Platform_Windows_D2D.h b/code/PainterEngine/Startup/Platform_Windows_D2D.h new file mode 100644 index 0000000000000000000000000000000000000000..1e3a42d3be1c36a968b94371465038fb1091658c --- /dev/null +++ b/code/PainterEngine/Startup/Platform_Windows_D2D.h @@ -0,0 +1,183 @@ +#ifndef PLATFORM_WINDOWS +#define PLATFORM_WINDOWS + +#include +#include "stdio.h" +#pragma comment(lib,"User32.lib") +#pragma comment(lib,"Shell32.lib") +#pragma comment(lib,"Ole32.lib") +#pragma comment(lib,"winmm.lib" ) + +#define PX_DIK_ESCAPE 0x01 +#define PX_DIK_1 0x02 +#define PX_DIK_2 0x03 +#define PX_DIK_3 0x04 +#define PX_DIK_4 0x05 +#define PX_DIK_5 0x06 +#define PX_DIK_6 0x07 +#define PX_DIK_7 0x08 +#define PX_DIK_8 0x09 +#define PX_DIK_9 0x0A +#define PX_DIK_0 0x0B +#define PX_DIK_MINUS 0x0C /* - on main keyboard */ +#define PX_DIK_EQUALS 0x0D +#define PX_DIK_BACK 0x0E /* backspace */ +#define PX_DIK_TAB 0x0F +#define PX_DIK_Q 0x10 +#define PX_DIK_W 0x11 +#define PX_DIK_E 0x12 +#define PX_DIK_R 0x13 +#define PX_DIK_T 0x14 +#define PX_DIK_Y 0x15 +#define PX_DIK_U 0x16 +#define PX_DIK_I 0x17 +#define PX_DIK_O 0x18 +#define PX_DIK_P 0x19 +#define PX_DIK_LBRACKET 0x1A +#define PX_DIK_RBRACKET 0x1B +#define PX_DIK_RETURN 0x1C /* Enter on main keyboard */ +#define PX_DIK_LCONTROL 0x1D +#define PX_DIK_A 0x1E +#define PX_DIK_S 0x1F +#define PX_DIK_D 0x20 +#define PX_DIK_F 0x21 +#define PX_DIK_G 0x22 +#define PX_DIK_H 0x23 +#define PX_DIK_J 0x24 +#define PX_DIK_K 0x25 +#define PX_DIK_L 0x26 +#define PX_DIK_SEMICOLON 0x27 +#define PX_DIK_APOSTROPHE 0x28 +#define PX_DIK_GRAVE 0x29 /* accent grave */ +#define PX_DIK_LSHIFT 0x2A +#define PX_DIK_BACKSLASH 0x2B +#define PX_DIK_Z 0x2C +#define PX_DIK_X 0x2D +#define PX_DIK_C 0x2E +#define PX_DIK_V 0x2F +#define PX_DIK_B 0x30 +#define PX_DIK_N 0x31 +#define PX_DIK_M 0x32 +#define PX_DIK_COMMA 0x33 +#define PX_DIK_PERIOD 0x34 /* . on main keyboard */ +#define PX_DIK_SLASH 0x35 /* / on main keyboard */ +#define PX_DIK_RSHIFT 0x36 +#define PX_DIK_MULTIPLY 0x37 /* * on numeric keypad */ +#define PX_DIK_LMENU 0x38 /* left Alt */ +#define PX_DIK_SPACE 0x39 +#define PX_DIK_CAPITAL 0x3A +#define PX_DIK_F1 0x3B +#define PX_DIK_F2 0x3C +#define PX_DIK_F3 0x3D +#define PX_DIK_F4 0x3E +#define PX_DIK_F5 0x3F +#define PX_DIK_F6 0x40 +#define PX_DIK_F7 0x41 +#define PX_DIK_F8 0x42 +#define PX_DIK_F9 0x43 +#define PX_DIK_F10 0x44 +#define PX_DIK_NUMLOCK 0x45 +#define PX_DIK_SCROLL 0x46 /* Scroll Lock */ +#define PX_DIK_NUMPAD7 0x47 +#define PX_DIK_NUMPAD8 0x48 +#define PX_DIK_NUMPAD9 0x49 +#define PX_DIK_SUBTRACT 0x4A /* - on numeric keypad */ +#define PX_DIK_NUMPAD4 0x4B +#define PX_DIK_NUMPAD5 0x4C +#define PX_DIK_NUMPAD6 0x4D +#define PX_DIK_ADD 0x4E /* + on numeric keypad */ +#define PX_DIK_NUMPAD1 0x4F +#define PX_DIK_NUMPAD2 0x50 +#define PX_DIK_NUMPAD3 0x51 +#define PX_DIK_NUMPAD0 0x52 +#define PX_DIK_DECIMAL 0x53 /* . on numeric keypad */ +#define PX_DIK_OEM_102 0x56 /* <> or \| on RT 102-key keyboard (Non-U.S.) */ +#define PX_DIK_F11 0x57 +#define PX_DIK_F12 0x58 +#define PX_DIK_F13 0x64 /* (NEC PC98) */ +#define PX_DIK_F14 0x65 /* (NEC PC98) */ +#define PX_DIK_F15 0x66 /* (NEC PC98) */ +#define PX_DIK_KANA 0x70 /* (Japanese keyboard) */ +#define PX_DIK_ABNT_C1 0x73 /* /? on Brazilian keyboard */ +#define PX_DIK_CONVERT 0x79 /* (Japanese keyboard) */ +#define PX_DIK_NOCONVERT 0x7B /* (Japanese keyboard) */ +#define PX_DIK_YEN 0x7D /* (Japanese keyboard) */ +#define PX_DIK_ABNT_C2 0x7E /* Numpad . on Brazilian keyboard */ +#define PX_DIK_NUMPADEQUALS 0x8D /* = on numeric keypad (NEC PC98) */ +#define PX_DIK_PREVTRACK 0x90 /* Previous Track (PX_DIK_CIRCUMFLEX on Japanese keyboard) */ +#define PX_DIK_AT 0x91 /* (NEC PC98) */ +#define PX_DIK_COLON 0x92 /* (NEC PC98) */ +#define PX_DIK_UNDERLINE 0x93 /* (NEC PC98) */ +#define PX_DIK_KANJI 0x94 /* (Japanese keyboard) */ +#define PX_DIK_STOP 0x95 /* (NEC PC98) */ +#define PX_DIK_AX 0x96 /* (Japan AX) */ +#define PX_DIK_UNLABELED 0x97 /* (J3100) */ +#define PX_DIK_NEXTTRACK 0x99 /* Next Track */ +#define PX_DIK_NUMPADENTER 0x9C /* Enter on numeric keypad */ +#define PX_DIK_RCONTROL 0x9D +#define PX_DIK_MUTE 0xA0 /* Mute */ +#define PX_DIK_CALCULATOR 0xA1 /* Calculator */ +#define PX_DIK_PLAYPAUSE 0xA2 /* Play / Pause */ +#define PX_DIK_MEDIASTOP 0xA4 /* Media Stop */ +#define PX_DIK_VOLUMEDOWN 0xAE /* Volume - */ +#define PX_DIK_VOLUMEUP 0xB0 /* Volume + */ +#define PX_DIK_WEBHOME 0xB2 /* Web home */ +#define PX_DIK_NUMPADCOMMA 0xB3 /* , on numeric keypad (NEC PC98) */ +#define PX_DIK_DIVIDE 0xB5 /* / on numeric keypad */ +#define PX_DIK_SYSRQ 0xB7 +#define PX_DIK_RMENU 0xB8 /* right Alt */ +#define PX_DIK_PAUSE 0xC5 /* Pause */ +#define PX_DIK_HOME 0xC7 /* Home on arrow keypad */ +#define PX_DIK_UP 0xC8 /* UpArrow on arrow keypad */ +#define PX_DIK_PRIOR 0xC9 /* PgUp on arrow keypad */ +#define PX_DIK_LEFT 0xCB /* LeftArrow on arrow keypad */ +#define PX_DIK_RIGHT 0xCD /* RightArrow on arrow keypad */ +#define PX_DIK_END 0xCF /* End on arrow keypad */ +#define PX_DIK_DOWN 0xD0 /* DownArrow on arrow keypad */ +#define PX_DIK_NEXT 0xD1 /* PgDn on arrow keypad */ +#define PX_DIK_INSERT 0xD2 /* Insert on arrow keypad */ +#define PX_DIK_DELETE 0xD3 /* Delete on arrow keypad */ +#define PX_DIK_LWIN 0xDB /* Left Windows key */ +#define PX_DIK_RWIN 0xDC /* Right Windows key */ +#define PX_DIK_APPS 0xDD /* AppMenu key */ +#define PX_DIK_POWER 0xDE /* System Power */ +#define PX_DIK_SLEEP 0xDF /* System Sleep */ +#define PX_DIK_WAKE 0xE3 /* System Wake */ +#define PX_DIK_WEBSEARCH 0xE5 /* Web Search */ +#define PX_DIK_WEBFAVORITES 0xE6 /* Web Favorites */ +#define PX_DIK_WEBREFRESH 0xE7 /* Web Refresh */ +#define PX_DIK_WEBSTOP 0xE8 /* Web Stop */ +#define PX_DIK_WEBFORWARD 0xE9 /* Web Forward */ +#define PX_DIK_WEBBACK 0xEA /* Web Back */ +#define PX_DIK_MYCOMPUTER 0xEB /* My Computer */ +#define PX_DIK_MAIL 0xEC /* Mail */ +#define PX_DIK_MEDIASELECT 0xED /* Media Select */ + +typedef struct +{ + UINT uMsg; + LPARAM lparam; + WPARAM wparam; +}WM_MESSAGE; + +extern BOOL PX_CreateWindow( int Width,int Height,const char *name,BOOL bfullScreen); +extern HWND PX_GetWindowHwnd(); +extern VOID PX_SystemReadDeviceState(); +extern BOOL PX_SystemLoop(); +extern BOOL PX_SystemRender(void *raw,int width,int height); +extern BOOL PX_SystemisAvtivated(); +extern BOOL PX_KeyboardDown(unsigned char X ); +extern char *PX_KeyboardString(); +extern char *PX_DragfileString(); +extern BOOL PX_MouseLButtonDown(); +extern BOOL PX_MouseRButtonDown(); +extern BOOL PX_MouseMButtonDown(); +extern POINT PX_MousePosition(); +extern BOOL PX_KeyDown(unsigned char key); +extern BOOL PX_MouseWheel(int *x,int *y,int *delta); +extern BOOL PX_GetWinMessage(WM_MESSAGE *Msg); +extern char *PX_OpenFileDialog(const char Filter[]); +extern char *PX_MultFileDialog(const char Filter[]); +extern char *PX_GetFileName(const char filePath[]); +extern char *PX_SaveFileDialog(const char Filter[],const char ext[]); +#endif diff --git a/code/employee.cpp b/code/employee.cpp index ba9fd83140c9201521d5a82097c9c0ea5dfb1101..0c39479b7260c42e6f86c1bae41fddffdf9bcc36 100644 --- a/code/employee.cpp +++ b/code/employee.cpp @@ -295,14 +295,23 @@ bool employee_inputFromFile(employee_list listHead) int employee_countSalary(employee_list listHead, sales_Records re) { employee_list p = listHead->next; - sales_Records q; + if(p == NULL) + { + puts("\nǰϵͳ޼¼ϢٳԱ\n"); + system("pause"); + return 0; + } + sales_Records q = NULL; char input; bool flag; printf("%-15s %-4s %-4s %-12s %-8s %-8s %-8s %-20s %s\n", "", "", "Ա", "绰", "", "", "ȱ", "", "ְ"); while(p != NULL) { - q = re->next; + if(re != NULL) + { + q = re->next; + } double price = 0; p->salary = p->basic_salary; if(p->absentDays > 0) diff --git a/code/image/README.md b/code/image/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c711413106815644384ef16108ab58fe8ba03219 --- /dev/null +++ b/code/image/README.md @@ -0,0 +1 @@ +`/code/image` 文件夹用于存放图形界面涉及到的一些图片文件。 \ No newline at end of file diff --git a/code/image/employee.bmp b/code/image/employee.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6e09f40f556a43844f3a3bae122c29056edd4ca5 Binary files /dev/null and b/code/image/employee.bmp differ diff --git a/code/image/purchase.bmp b/code/image/purchase.bmp new file mode 100644 index 0000000000000000000000000000000000000000..869182fa5dd481d29c29dc5bb2e19e797eafafc7 Binary files /dev/null and b/code/image/purchase.bmp differ diff --git a/code/image/repo.bmp b/code/image/repo.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4645afa6d6a1aeec8e4a43d383170feccdd24cd8 Binary files /dev/null and b/code/image/repo.bmp differ diff --git a/code/image/sell.bmp b/code/image/sell.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a221986685550fe8cc3fd89c6da38ac2f0247355 Binary files /dev/null and b/code/image/sell.bmp differ diff --git a/code/image/title.bmp b/code/image/title.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0eccbbec885ec89453c03c5f85aa79e0fff619c9 Binary files /dev/null and b/code/image/title.bmp differ diff --git a/code/main.cpp b/code/main.cpp index ecaba54555bb3036311294115a987af28310f62d..69287216f060f8a2f5b82efd541e99e0185297ea 100644 --- a/code/main.cpp +++ b/code/main.cpp @@ -6,6 +6,8 @@ #include "sellFun.h" #include "repo.h" +#define __GUI__ // д˺궨ʱʹͼν棬ûʱʹÿ̨ + #ifndef __GUI__ // ÿ̨ڿʵϵͳ int main() @@ -73,6 +75,190 @@ int main() #else // ͼû棨GUIʵϵͳ +#include "./PainterEngine/PainterEngineHelper.h" +#include + +enum CHOICE_CODE // ģӦĴ +{ + EMPLOYEE_MODULE, // Ա + PURCHASE_MODULE, // + SELL_MODULE, // ۹ + REPO_MODULE, // + EXIT_MODULE, // ˳ϵͳ + OTHER // +}; +CHOICE_CODE choice_code = OTHER; // ͼѡһģ + +// ΪӦťʱϵͳҪִеIJ +px_void OnButtonClick_employeeModule(PX_Object *pObject, PX_Object_Event e, px_void *ptr) +{ + choice_code = EMPLOYEE_MODULE; +} + +px_void OnButtonClick_purchaseModule(PX_Object *pObject, PX_Object_Event e, px_void *ptr) +{ + choice_code = PURCHASE_MODULE; +} +px_void OnButtonClick_sellModule(PX_Object *pObject, PX_Object_Event e, px_void *ptr) +{ + choice_code = SELL_MODULE; +} + +px_void OnButtonClick_repoModule(PX_Object *pObject, PX_Object_Event e, px_void *ptr) +{ + choice_code = REPO_MODULE; +} + +px_void OnButtonClick_exitModule(PX_Object *pObject, PX_Object_Event e, px_void *ptr) +{ + choice_code = EXIT_MODULE; +} + +// ʼͼνеĸԪ +void GUI_Init() +{ + // ƸģlogoԼ + px_texture title_image; // ͼƬӦṹ + PX_LoadTextureFromFile(PX_GetMP(), &title_image, + (px_char *)".\\image\\title.bmp"); // ļһͼƬ + PX_TextureRender(PX_GetSurface(), &title_image, 200, 50, + PX_TEXTURERENDER_REFPOINT_LEFTTOP, PX_NULL); // + + px_texture employee_logo; // "Ա"ģlogoӦṹ + PX_LoadTextureFromFile(PX_GetMP(), &employee_logo, + (px_char *)".\\image\\employee.bmp"); // ļһͼƬ + PX_TextureRender(PX_GetSurface(), &employee_logo, 145, 160, + PX_TEXTURERENDER_REFPOINT_LEFTTOP, PX_NULL); // + + px_texture purchase_logo; // ""ģlogoӦṹ + PX_LoadTextureFromFile(PX_GetMP(), &purchase_logo, + (px_char *)".\\image\\purchase.bmp"); // ļһͼƬ + PX_TextureRender(PX_GetSurface(), &purchase_logo, 545, 160, + PX_TEXTURERENDER_REFPOINT_LEFTTOP, PX_NULL); // + + px_texture sell_logo; // "۹"ģlogoӦṹ + PX_LoadTextureFromFile(PX_GetMP(), &sell_logo, + (px_char *)".\\image\\sell.bmp"); // ļһͼƬ + PX_TextureRender(PX_GetSurface(), &sell_logo, 145, 350, + PX_TEXTURERENDER_REFPOINT_LEFTTOP, PX_NULL); // + + px_texture repo_logo; // ""ģlogoӦṹ + PX_LoadTextureFromFile(PX_GetMP(), &repo_logo, + (px_char *)".\\image\\repo.bmp"); // ļһͼƬ + PX_TextureRender(PX_GetSurface(), &repo_logo, 545, 350, + PX_TEXTURERENDER_REFPOINT_LEFTTOP, PX_NULL); // + + // ưť + PX_Object *Button_employee; // "Ա"ť + Button_employee = PX_Object_PushButtonCreate(PX_GetMP(), PX_GetUiRoot(), + 160, 280, 80, 32, "Ա", PX_COLOR(255, 0, 0, 0)); // ť + PX_ObjectRegisterEvent(Button_employee, PX_OBJECT_EVENT_EXECUTE, + OnButtonClick_employeeModule, PX_NULL); // Ӧ + + PX_Object *Button_purchase; // ""ť + Button_purchase = PX_Object_PushButtonCreate(PX_GetMP(), PX_GetUiRoot(), + 560, 280, 80, 32, "", PX_COLOR(255, 0, 0, 0)); // ť + PX_ObjectRegisterEvent(Button_purchase, PX_OBJECT_EVENT_EXECUTE, + OnButtonClick_purchaseModule, PX_NULL); // Ӧ + + PX_Object *Button_sell; // "۹"ť + Button_sell = PX_Object_PushButtonCreate(PX_GetMP(), PX_GetUiRoot(), + 160, 470, 80, 32, "۹", PX_COLOR(255, 0, 0, 0)); // ť + PX_ObjectRegisterEvent(Button_sell, PX_OBJECT_EVENT_EXECUTE, + OnButtonClick_sellModule, PX_NULL); // Ӧ + + PX_Object *Button_repo; // ""ť + Button_repo = PX_Object_PushButtonCreate(PX_GetMP(), PX_GetUiRoot(), + 560, 470, 80, 32, "", PX_COLOR(255, 0, 0, 0)); // ť + PX_ObjectRegisterEvent(Button_repo, PX_OBJECT_EVENT_EXECUTE, + OnButtonClick_repoModule, PX_NULL); // Ӧ + + PX_Object *Button_exit; // "˳ϵͳ"ť + Button_exit = PX_Object_PushButtonCreate(PX_GetMP(), PX_GetUiRoot(), + 360, 535, 80, 32, "˳ϵͳ", PX_COLOR(255, 0, 0, 0)); // ť + PX_ObjectRegisterEvent(Button_exit, PX_OBJECT_EVENT_EXECUTE, + OnButtonClick_exitModule, PX_NULL); // Ӧ +} + +int main() +{ + InitList_suppliers(suppliers_head, suppliers_tail); + InitList_commodity(commodity_head, commodity_tail); + system("title ۹ϵͳ"); + system("color fc"); + HWND HWND_console = GetForegroundWindow(); // ̨ھ + PX_Initialize("۹ϵͳ", 800, 600); + GUI_Init(); + HWND HWND_GUI = GetForegroundWindow(); // ͼν洰ھ + ShowWindow(HWND_console, SW_MINIMIZE); + while(true) + { + //GUI_Init(); + while(PX_Loop()) + { + break; + } + switch(choice_code) + { + case EMPLOYEE_MODULE: // Ա + { + ShowWindow(HWND_GUI, SW_MINIMIZE); + ShowWindow(HWND_console, SW_RESTORE); + system("cls"); + system("title йϵͳ - Ա"); + employee_meau(); + ShowWindow(HWND_console, SW_MINIMIZE); + ShowWindow(HWND_GUI, SW_RESTORE); + break; + } + case PURCHASE_MODULE: // + { + ShowWindow(HWND_GUI, SW_MINIMIZE); + ShowWindow(HWND_console, SW_RESTORE); + system("cls"); + system("title йϵͳ - "); + Main_interface(commodity_head, commodity_tail, suppliers_head, suppliers_tail); + ShowWindow(HWND_console, SW_MINIMIZE); + ShowWindow(HWND_GUI, SW_RESTORE); + break; + } + case SELL_MODULE: // ۹ + { + ShowWindow(HWND_GUI, SW_MINIMIZE); + ShowWindow(HWND_console, SW_RESTORE); + system("cls"); + system("title йϵͳ - ۹"); + sellmain(); + ShowWindow(HWND_console, SW_MINIMIZE); + ShowWindow(HWND_GUI, SW_RESTORE); + break; + } + case REPO_MODULE: // + { + ShowWindow(HWND_GUI, SW_MINIMIZE); + ShowWindow(HWND_console, SW_RESTORE); + system("cls"); + system("title йϵͳ - "); + repo_main(); + ShowWindow(HWND_console, SW_MINIMIZE); + ShowWindow(HWND_GUI, SW_RESTORE); + break; + } + case EXIT_MODULE: // ˳ϵͳ + { + ShowWindow(HWND_GUI, SW_MINIMIZE); + ShowWindow(HWND_console, SW_RESTORE); + system("cls"); + printf("˳йϵͳ\n\nӭ´ʹã\n"); + return 0; + } + default:break; + } + choice_code = OTHER; + } + + return 0; +} #endif // !__GUI__ diff --git a/support/PainterEngine API Manual.docx b/support/PainterEngine API Manual.docx new file mode 100644 index 0000000000000000000000000000000000000000..146e2f79f36c77c57bfe01d0db60bfd75e8747ea Binary files /dev/null and b/support/PainterEngine API Manual.docx differ diff --git "a/support/PainterEngine \345\277\253\351\200\237\345\205\245\351\227\250\346\225\231\347\250\213.docx" "b/support/PainterEngine \345\277\253\351\200\237\345\205\245\351\227\250\346\225\231\347\250\213.docx" new file mode 100644 index 0000000000000000000000000000000000000000..49bfae1b4131d1c8b6b0a0cd200f25993877c825 Binary files /dev/null and "b/support/PainterEngine \345\277\253\351\200\237\345\205\245\351\227\250\346\225\231\347\250\213.docx" differ