diff --git a/ports/dexed/source/AlgoDisplay.cpp b/ports/dexed/source/AlgoDisplay.cpp index d27fe51c..03567f42 100644 --- a/ports/dexed/source/AlgoDisplay.cpp +++ b/ports/dexed/source/AlgoDisplay.cpp @@ -1,6 +1,6 @@ /** * - * Copyright (c) 2014 Pascal Gauthier. + * Copyright (c) 2014, 2017 Pascal Gauthier. * * 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 @@ -27,82 +27,103 @@ AlgoDisplay::AlgoDisplay() { algo = &tmpAlgo; } -inline void displayOp(Graphics &g, char id, int x, int y, char link, char fb) { +void AlgoDisplay::displayOp(Graphics &g, char id, int x, int y, char link, char fb) { const int LINE_SZ = 3; String t(id); - + bool opOn = opStatus[6-id] == '1'; + x *= 25; x += 3; y *= 21; y += 5; - g.setColour(Colours::white); + if ( opOn ) + g.setColour(Colours::white); + else + g.setColour(DXLookNFeel::roundBackground); + g.drawText(t, x, y, 16, 12, Justification::centred, true); - - g.setColour(DXLookNFeel::fillColour); + + if ( opOn ) + g.setColour(DXLookNFeel::fillColour); + else + g.setColour(DXLookNFeel::roundBackground); + switch(link) { - case 0 : // LINE DOWN - g.drawLine(x+8, y+12, x+8, y+21, LINE_SZ); - break; - case 1: // ARROW TO RIGHT - g.drawLine(x+8, y+12, x+8, y+18, LINE_SZ); - g.drawLine(x+7, y+18, x+34, y+18, LINE_SZ); - break; - case 2: // ARROW TO RIGHT JOIN - g.drawLine(x+8, y+12, x+8, y+19, LINE_SZ); - break; - case 6: - g.drawLine(x+8, y+12, x+8, y+18, LINE_SZ); - g.drawLine(x+7, y+18, x+58, y+18, LINE_SZ); - break; - case 7: // ARROW TO LEFT - g.drawLine(x+8, y+12, x+8, y+19, LINE_SZ); - g.drawLine(x-17, y+18, x+9, y+18, LINE_SZ); - break; + case 0 : // LINE DOWN + g.drawLine(x+8, y+12, x+8, y+21, LINE_SZ); + break; + case 1: // ARROW TO RIGHT + g.drawLine(x+8, y+12, x+8, y+18, LINE_SZ); + g.drawLine(x+7, y+18, x+34, y+18, LINE_SZ); + break; + case 2: // ARROW TO RIGHT JOIN + g.drawLine(x+8, y+12, x+8, y+19, LINE_SZ); + break; + case 3: // ARROW TO RIGHT AND DOWN + g.drawLine(x+8, y+12, x+8, y+21, LINE_SZ); + g.drawLine(x+7, y+18, x+34, y+18, LINE_SZ); + g.drawLine(x+34, y+17, x+34, y+21, LINE_SZ); + break; + case 4: // ARROW TO RIGHT+LEFT AND DOWN + g.drawLine(x+8, y+12, x+8, y+21, LINE_SZ); + g.drawLine(x+7, y+18, x+34, y+18, LINE_SZ); + g.drawLine(x+34, y+17, x+34, y+21, LINE_SZ); + g.drawLine(x-17, y+18, x+8, y+18, LINE_SZ); + g.drawLine(x-17, y+17, x-17, y+21, LINE_SZ); + break; + case 6: + g.drawLine(x+8, y+12, x+8, y+18, LINE_SZ); + g.drawLine(x+7, y+18, x+58, y+18, LINE_SZ); + break; + case 7: // ARROW TO LEFT + g.drawLine(x+8, y+12, x+8, y+19, LINE_SZ); + g.drawLine(x-17, y+18, x+9, y+18, LINE_SZ); + break; } - + switch(fb) { - case 0: - break; - case 1: - g.drawLine(x+7, y, x+8, y-5, LINE_SZ); - g.drawLine(x+8, y-4, x+20, y-4, LINE_SZ); - g.drawLine(x+19, y-4, x+19, y+15, LINE_SZ); - g.drawLine(x+18, y+15, x+19, y+15, LINE_SZ); - g.drawLine(x+8, y+15, x+20, y+15, LINE_SZ); - break; - case 2: // ALGO 4 - g.drawLine(x+7, y, x+8, y-5, LINE_SZ); - g.drawLine(x+8, y-4, x+20, y-4, LINE_SZ); - g.drawLine(x+19, y-4, x+19, y+59, LINE_SZ); - g.drawLine(x+8, y+58, x+19, y+58, LINE_SZ); - break; - case 3: // ALGO 6 - g.drawLine(x+7, y, x+8, y-5, LINE_SZ); - g.drawLine(x+8, y-4, x+20, y-4, LINE_SZ); - g.drawLine(x+19, y-4, x+19, y+37, LINE_SZ); - g.drawLine(x+8, y+36, x+19, y+36, LINE_SZ); - break; - case 4: - g.drawLine(x+7, y, x+8, y-5, LINE_SZ); - g.drawLine(x+8, y-4, x-4, y-4, LINE_SZ); - g.drawLine(x-3, y-4, x-3, y+15, LINE_SZ); - g.drawLine(x-3, y+15, x+8, y+15, LINE_SZ); - g.drawLine(x+8, y+15, x+8, y+12, LINE_SZ); - break; + case 0: + break; + case 1: + g.drawLine(x+7, y, x+8, y-5, LINE_SZ); + g.drawLine(x+8, y-4, x+21, y-4, LINE_SZ); + g.drawLine(x+20, y-4, x+20, y+15, LINE_SZ); + g.drawLine(x+19, y+15, x+20, y+16, LINE_SZ); + g.drawLine(x+8, y+15, x+20, y+15, LINE_SZ); + break; + case 2: // ALGO 4 + g.drawLine(x+7, y, x+8, y-5, LINE_SZ); + g.drawLine(x+8, y-4, x+20, y-4, LINE_SZ); + g.drawLine(x+19, y-4, x+19, y+59, LINE_SZ); + g.drawLine(x+8, y+58, x+19, y+58, LINE_SZ); + break; + case 3: // ALGO 6 + g.drawLine(x+7, y, x+8, y-5, LINE_SZ); + g.drawLine(x+8, y-4, x+20, y-4, LINE_SZ); + g.drawLine(x+19, y-4, x+19, y+37, LINE_SZ); + g.drawLine(x+8, y+36, x+19, y+36, LINE_SZ); + break; + case 4: + g.drawLine(x+7, y, x+8, y-5, LINE_SZ); + g.drawLine(x+8, y-4, x-4, y-4, LINE_SZ); + g.drawLine(x-3, y-4, x-3, y+15, LINE_SZ); + g.drawLine(x-3, y+15, x+8, y+15, LINE_SZ); + g.drawLine(x+8, y+15, x+8, y+12, LINE_SZ); + break; } - + } void AlgoDisplay::paint(Graphics &g) { - + g.setColour(DXLookNFeel::fillColour); g.fillRect(1, 3, 20, 15); String n = String(*algo +1); g.setColour(Colours::white); g.drawText(n, 1, 3, 20, 15, Justification::centred, true); - + switch(*algo) { case 0: displayOp(g, 6, 3, 0, 0, 1); @@ -249,7 +270,7 @@ void AlgoDisplay::paint(Graphics &g) { displayOp(g, 1, 3, 3, 0, 0); break; case 18: - displayOp(g, 6, 3, 2, 0, 1); + displayOp(g, 6, 3, 2, 3, 1); displayOp(g, 5, 4, 3, 2, 0); displayOp(g, 4, 3, 3, 1, 0); displayOp(g, 3, 2, 1, 0, 0); @@ -260,20 +281,20 @@ void AlgoDisplay::paint(Graphics &g) { displayOp(g, 6, 4, 2, 0, 0); displayOp(g, 5, 3, 2, 1, 0); displayOp(g, 4, 4, 3, 2, 0); - displayOp(g, 3, 1, 2, 0, 1); + displayOp(g, 3, 1, 2, 3, 1); displayOp(g, 2, 2, 3, 6, 0); displayOp(g, 1, 1, 3, 1, 0); break; case 20: - displayOp(g, 6, 3, 2, 0, 0); + displayOp(g, 6, 3, 2, 3, 0); displayOp(g, 5, 4, 3, 2, 0); displayOp(g, 4, 3, 3, 1, 0); - displayOp(g, 3, 1, 2, 0, 1); + displayOp(g, 3, 1, 2, 3, 1); displayOp(g, 2, 2, 3, 1, 0); displayOp(g, 1, 1, 3, 1, 0); break; case 21: - displayOp(g, 6, 3, 2, 0, 1); + displayOp(g, 6, 3, 2, 4, 1); displayOp(g, 5, 4, 3, 2, 0); displayOp(g, 4, 3, 3, 1, 0); displayOp(g, 3, 2, 3, 1, 0); @@ -281,7 +302,7 @@ void AlgoDisplay::paint(Graphics &g) { displayOp(g, 1, 1, 3, 1, 0); break; case 22: // CC - displayOp(g, 6, 3, 2, 0, 1); + displayOp(g, 6, 3, 2, 3, 1); displayOp(g, 5, 4, 3, 2, 0); displayOp(g, 4, 3, 3, 1, 0); displayOp(g, 3, 2, 2, 0, 0); @@ -289,7 +310,7 @@ void AlgoDisplay::paint(Graphics &g) { displayOp(g, 1, 1, 3, 1, 0); break; case 23: // CC - displayOp(g, 6, 3, 2, 0, 1); + displayOp(g, 6, 3, 2, 4, 1); displayOp(g, 5, 4, 3, 2, 0); displayOp(g, 4, 3, 3, 1, 0); displayOp(g, 3, 2, 3, 1, 0); @@ -297,7 +318,7 @@ void AlgoDisplay::paint(Graphics &g) { displayOp(g, 1, 0, 3, 1, 0); break; case 24: // CC - displayOp(g, 6, 3, 2, 0, 1); + displayOp(g, 6, 3, 2, 3, 1); displayOp(g, 5, 4, 3, 2, 0); displayOp(g, 4, 3, 3, 1, 0); displayOp(g, 3, 2, 3, 1, 0); @@ -350,7 +371,7 @@ void AlgoDisplay::paint(Graphics &g) { displayOp(g, 4, 3, 3, 1, 0); displayOp(g, 3, 2, 3, 1, 0); displayOp(g, 2, 1, 3, 1, 0); - displayOp(g, 1, 0, 3, 1, 0); + displayOp(g, 1, 0, 3, 1, 0); break; case 31: displayOp(g, 6, 5, 3, 2, 1); diff --git a/ports/dexed/source/AlgoDisplay.h b/ports/dexed/source/AlgoDisplay.h index 2a082b22..221b30d5 100644 --- a/ports/dexed/source/AlgoDisplay.h +++ b/ports/dexed/source/AlgoDisplay.h @@ -1,6 +1,6 @@ /** * - * Copyright (c) 2014 Pascal Gauthier. + * Copyright (c) 2014-2017 Pascal Gauthier. * * 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 @@ -24,7 +24,9 @@ #include "JuceHeader.h" class AlgoDisplay : public Component { + void displayOp(Graphics &g, char id, int x, int y, char link, char fb); public: + const char *opStatus; AlgoDisplay(); char *algo; void paint(Graphics &g); diff --git a/ports/dexed/source/BinaryData.cpp b/ports/dexed/source/BinaryData.cpp index d37997d5..7d788a08 100644 --- a/ports/dexed/source/BinaryData.cpp +++ b/ports/dexed/source/BinaryData.cpp @@ -7,8 +7,25 @@ namespace BinaryData { -//================== Switch_48x26.png ================== +//================== Switch_32x32.png ================== static const unsigned char temp_binary_data_0[] = +{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,64,8,6,0,0,0,123,142,117,174,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,2,222,73,68, +65,84,104,67,237,153,77,79,19,81,20,134,177,206,208,66,233,116,166,45,29,98,218,41,165,223,45,138,9,229,163,124,136,11,91,18,117,33,223,110,132,4,113,225,194,53,174,136,63,130,21,236,216,251,31,52,254,13,227,214,144,184,237,250,120,222,59,67,236,144, +178,243,140,49,153,55,121,194,237,123,223,48,151,211,222,233,153,203,72,168,80,161,254,55,117,25,186,139,104,108,140,242,78,1,25,49,189,97,40,26,141,13,101,246,225,35,234,246,54,145,17,147,90,128,145,52,135,178,186,182,78,187,123,251,225,2,194,5,136, +46,224,208,182,109,42,149,43,84,156,41,249,128,247,252,197,75,218,218,222,57,244,178,34,58,58,61,253,72,199,199,111,21,39,39,239,20,55,175,207,206,62,209,171,173,237,35,47,43,162,233,100,210,162,106,181,70,149,74,213,7,60,219,158,162,76,38,51,237,101, +69,84,54,77,139,74,165,50,21,139,92,250,226,140,7,191,5,236,101,179,83,148,76,38,203,94,86,68,77,84,160,211,89,97,58,222,207,63,227,201,73,155,18,137,68,211,203,138,168,133,5,160,10,134,193,159,252,1,224,121,11,104,121,89,17,181,112,161,245,245,39,180, +198,91,110,16,120,120,11,196,23,128,10,128,68,194,240,1,47,176,10,44,47,119,20,75,75,46,55,175,3,171,64,173,214,80,219,110,16,120,217,172,124,5,28,211,76,245,177,239,75,165,138,218,122,46,21,117,47,72,167,39,251,186,174,59,94,86,68,182,101,165,126,205, +205,61,166,86,107,150,26,141,134,2,99,120,152,67,198,141,202,8,191,252,27,243,157,249,113,11,120,152,19,93,64,150,233,49,239,153,15,183,128,135,57,100,196,100,50,115,12,26,79,92,108,16,120,152,67,70,76,163,140,197,60,184,3,204,33,19,42,84,40,49,69,206, +207,207,63,95,93,93,125,185,188,188,252,122,113,225,130,49,60,204,33,227,70,101,164,165,82,153,159,171,171,107,170,1,217,216,120,170,192,24,30,230,144,113,163,50,154,176,172,244,117,161,80,36,199,153,166,66,193,197,29,23,249,203,40,125,141,140,27,149, +81,142,47,210,175,213,234,67,250,129,58,87,32,221,191,23,137,228,188,172,136,84,67,210,110,47,208,252,124,219,7,188,76,38,75,227,241,184,124,71,196,77,9,247,128,166,15,120,129,180,100,184,208,226,226,18,45,44,44,250,128,23,104,87,108,24,73,31,240,2,234, +138,83,220,9,47,171,191,120,16,120,129,85,32,159,119,40,151,203,251,128,23,68,5,154,168,192,93,219,208,171,128,236,179,161,166,233,212,108,182,168,94,199,179,1,30,203,171,106,12,111,124,60,46,95,1,134,116,125,148,52,93,247,1,15,39,37,210,21,168,51,234, +68,52,26,139,221,98,76,29,84,26,134,129,140,152,112,250,65,241,248,196,80,218,124,63,176,44,75,244,132,4,239,47,37,120,223,15,99,133,191,17,203,229,138,232,103,32,60,39,252,247,11,208,52,141,28,52,33,67,120,214,237,209,254,193,107,185,5,68,34,247,187, +57,190,229,118,123,155,67,217,219,63,160,157,221,61,209,127,88,132,10,21,234,47,107,100,228,55,171,12,230,253,182,31,107,115,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; + +const char* Switch_32x32_png = (const char*) temp_binary_data_0; + +//================== Switch_48x26.png ================== +static const unsigned char temp_binary_data_1[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,48,0,0,0,52,8,6,0,0,0,204,147,187,145,0,0,0,6,98,75,71,68,0,0,0,230,0,0,84,44,23,109,0,0,8,138,73,68,65,84,104,222,237,153,203,146,92,71,17,134,191,204,170,115,122,46,109,100,89,8,73,182,9,155,192,198, 17,108,88,176,100,207,130,61,15,192,139,16,65,240,28,108,216,178,231,21,88,177,99,225,0,54,88,72,8,203,88,30,205,69,211,167,170,50,89,84,157,75,247,140,100,141,199,14,135,35,166,38,58,230,116,247,233,83,121,253,51,243,47,184,89,223,238,146,245,122,253, 35,224,215,223,81,249,255,20,129,119,223,190,127,255,23,63,255,217,79,126,21,52,68,4,220,253,162,166,8,142,79,215,230,142,224,32,2,108,255,102,186,22,104,63,169,159,45,174,139,27,102,142,153,227,14,230,142,91,221,97,126,214,184,15,184,8,120,253,190,148, @@ -42,10 +59,10 @@ static const unsigned char temp_binary_data_0[] = 170,245,214,237,55,249,225,59,239,112,112,112,192,217,233,233,52,29,93,135,153,123,217,82,160,3,86,237,117,11,184,211,94,183,129,239,181,215,173,198,238,189,206,122,12,252,161,177,119,95,47,51,119,69,2,44,2,107,224,141,166,192,123,192,7,141,16,123,31, 184,15,220,5,30,52,229,199,245,219,147,147,147,223,127,99,204,220,215,172,220,26,120,19,120,183,41,247,33,240,199,147,147,147,191,222,112,46,223,133,245,127,146,199,98,107,0,177,99,238,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; -const char* Switch_48x26_png = (const char*) temp_binary_data_0; +const char* Switch_48x26_png = (const char*) temp_binary_data_1; //================== ButtonUnlabeled_50x30.png ================== -static const unsigned char temp_binary_data_1[] = +static const unsigned char temp_binary_data_2[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,50,0,0,0,60,8,6,0,0,0,36,53,233,193,0,0,7,1,73,68,65,84,120,218,237,152,89,115,84,85,16,199,17,2,162,200,50,36,72,162,147,9,165,24,182,84,48,40,22,123,50,89,36,179,79,112,65,4,67,74,32,9,168,133,143, 190,248,96,41,1,13,202,146,109,88,50,201,100,82,128,154,68,95,172,242,73,191,134,96,197,42,31,228,107,92,187,207,237,190,211,119,155,185,153,12,84,160,50,85,255,234,62,203,61,221,191,219,231,222,153,57,75,150,44,126,22,238,231,25,208,82,208,178,39,68, 75,41,103,211,7,59,107,64,97,208,177,39,68,97,202,121,169,4,41,3,237,121,117,207,91,3,215,102,166,238,95,154,6,161,157,153,249,43,231,79,235,109,101,167,105,142,244,229,117,22,31,116,17,174,237,3,219,7,253,104,47,76,235,234,147,18,227,60,71,182,251,212, @@ -73,10 +90,10 @@ static const unsigned char temp_binary_data_1[] = 234,97,47,5,140,189,191,119,126,191,197,138,5,241,178,248,163,248,237,229,26,251,81,109,173,82,192,120,134,120,220,32,115,253,255,50,167,255,41,133,64,214,84,84,140,188,25,105,255,187,185,243,248,131,214,147,39,30,180,128,90,79,118,42,191,149,253,174, 78,234,235,52,181,219,186,230,39,199,117,173,125,164,22,200,175,252,229,170,97,39,144,167,230,56,232,169,57,160,91,252,44,148,207,255,202,67,236,221,252,78,22,31,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; -const char* ButtonUnlabeled_50x30_png = (const char*) temp_binary_data_1; +const char* ButtonUnlabeled_50x30_png = (const char*) temp_binary_data_2; //================== Knob_34x34.png ================== -static const unsigned char temp_binary_data_2[] = +static const unsigned char temp_binary_data_3[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,34,0,0,6,96,8,6,0,0,0,27,7,149,159,0,0,50,154,73,68,65,84,120,218,237,221,247,87,215,87,186,47,240,156,115,79,38,55,197,134,8,118,64,58,130,40,72,17,68,122,239,189,87,41,138,32,54,84,84,80,84,236,189, 247,154,88,99,65,177,247,26,77,76,98,98,108,201,76,214,202,111,103,221,123,255,128,204,50,115,223,247,121,30,192,51,51,119,206,36,103,38,223,207,39,201,121,246,90,123,209,249,236,239,254,236,189,191,159,231,181,118,121,227,13,77,191,161,244,175,148,223, 162,220,147,178,13,229,1,93,217,166,235,123,111,117,253,142,197,210,191,81,238,71,217,119,128,173,117,149,155,203,176,53,163,70,120,30,25,61,210,171,99,180,183,87,199,8,15,215,35,46,195,236,215,88,91,91,85,241,239,116,253,238,191,253,220,53,208,231,205, @@ -263,10 +280,10 @@ static const unsigned char temp_binary_data_2[] = 77,171,124,207,139,98,100,83,196,40,159,6,192,245,171,91,165,48,203,22,207,198,8,7,187,191,60,43,205,72,49,226,54,178,108,113,147,104,209,194,230,105,84,8,7,243,206,74,27,65,183,132,11,33,133,89,48,3,163,232,205,207,180,157,175,93,135,57,72,33,62,186, 119,22,113,49,97,212,232,221,204,219,199,104,184,155,51,98,162,67,209,215,170,207,255,237,221,171,199,238,55,204,156,99,100,55,100,240,171,46,182,242,84,49,82,49,82,49,250,77,166,255,7,121,17,68,51,15,166,168,239,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; -const char* Knob_34x34_png = (const char*) temp_binary_data_2; +const char* Knob_34x34_png = (const char*) temp_binary_data_3; //================== LFO_36_26.png ================== -static const unsigned char temp_binary_data_3[] = +static const unsigned char temp_binary_data_4[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,36,0,0,0,156,8,6,0,0,0,23,153,9,128,0,0,6,109,73,68,65,84,120,218,237,92,123,136,84,85,24,183,44,123,63,169,168,232,101,81,68,4,21,81,66,255,100,6,217,238,206,185,119,52,55,165,39,244,36,130,176,210, 160,168,88,144,94,68,86,235,158,115,238,180,115,207,89,23,45,148,94,246,128,77,49,72,169,68,147,202,48,43,202,178,76,55,50,67,114,181,172,109,250,125,231,158,187,141,53,59,51,123,157,189,119,179,243,131,195,157,157,189,51,247,119,191,243,184,223,239, 251,190,51,163,70,57,56,56,56,84,135,175,197,53,158,230,87,102,207,164,84,218,199,83,226,70,180,223,208,250,88,40,175,202,148,143,37,211,135,182,214,11,197,231,56,238,240,180,188,41,43,50,215,69,150,145,171,189,112,206,137,147,59,219,79,242,84,240,33, @@ -293,10 +310,10 @@ static const unsigned char temp_binary_data_3[] = 56,228,32,36,63,163,27,161,64,195,48,16,250,187,213,71,200,88,168,100,171,214,75,13,35,68,131,149,72,237,222,58,198,213,94,163,130,230,242,207,80,156,146,126,25,204,121,0,14,14,14,35,21,127,1,145,198,91,134,223,250,76,248,0,0,0,0,73,69,78,68,174,66,96, 130,0,0 }; -const char* LFO_36_26_png = (const char*) temp_binary_data_3; +const char* LFO_36_26_png = (const char*) temp_binary_data_4; //================== Light_14x14.png ================== -static const unsigned char temp_binary_data_4[] = +static const unsigned char temp_binary_data_5[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,14,0,0,0,28,8,6,0,0,0,81,86,142,65,0,0,0,6,98,75,71,68,0,0,0,230,0,0,84,44,23,109,0,0,2,209,73,68,65,84,56,203,213,146,203,111,19,87,20,135,191,59,115,103,236,120,252,8,13,142,19,18,89,136,180,69,168, 60,20,30,18,109,36,216,176,101,211,69,55,149,186,52,255,64,255,0,254,4,182,201,178,93,119,67,54,221,33,36,42,40,175,144,200,60,20,129,148,132,36,216,14,6,143,51,227,204,227,142,47,11,59,144,144,68,8,169,155,206,242,232,124,115,206,253,157,15,254,55,159, 216,175,56,61,93,177,210,233,161,60,64,16,52,219,215,174,205,196,95,4,43,149,171,229,215,75,141,63,83,182,117,9,32,138,212,237,241,163,197,223,102,102,102,87,14,4,167,167,43,150,215,30,191,213,122,183,58,101,73,5,192,219,166,199,234,122,235,110,156,52, @@ -309,10 +326,10 @@ static const unsigned char temp_binary_data_4[] = 183,14,212,13,165,215,59,15,223,45,203,68,127,151,217,112,76,115,20,54,159,117,88,253,187,233,13,198,221,53,3,106,253,222,64,10,208,26,86,66,40,89,144,29,112,163,220,218,157,134,8,230,228,88,2,50,242,85,39,163,244,211,67,240,192,132,87,118,79,4,45,251, 22,184,30,84,77,208,69,240,187,74,215,106,110,124,52,128,84,6,54,198,160,58,12,11,10,170,233,190,61,98,63,229,52,148,146,94,122,66,131,103,65,221,62,72,185,175,149,252,3,249,209,60,170,202,77,183,53,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; -const char* Light_14x14_png = (const char*) temp_binary_data_4; +const char* Light_14x14_png = (const char*) temp_binary_data_5; //================== Meter_140x8.png ================== -static const unsigned char temp_binary_data_5[] = +static const unsigned char temp_binary_data_6[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,140,0,0,0,16,8,6,0,0,0,196,100,151,6,0,0,1,89,73,68,65,84,120,218,237,152,205,74,195,64,20,133,211,141,174,74,43,21,236,127,10,182,197,133,184,85,215,1,27,17,74,23,198,133,89,233,3,248,48,250,66,77, 147,186,117,209,62,138,136,187,235,157,144,208,97,96,200,116,145,54,166,103,241,49,39,135,36,220,59,28,152,203,88,39,213,42,157,214,235,0,100,114,214,104,144,117,222,233,208,197,96,0,64,38,87,227,241,38,48,126,179,25,3,13,173,211,8,12,52,2,3,141,192, 64,23,49,48,0,24,13,189,15,142,67,51,215,5,32,147,167,233,148,172,244,30,166,197,244,107,53,178,153,93,175,42,69,169,163,136,53,237,163,142,150,122,15,115,107,219,244,216,235,209,139,1,175,255,124,205,131,178,239,137,200,134,200,72,124,36,93,182,219, @@ -320,10 +337,10 @@ static const unsigned char temp_binary_data_5[] = 104,224,31,194,158,4,154,126,231,172,69,54,190,25,103,56,220,4,134,238,172,24,241,114,170,23,146,142,36,29,228,224,47,115,254,127,164,233,43,52,240,15,97,79,2,77,191,115,73,199,129,193,145,132,35,105,171,35,9,67,47,134,222,173,134,222,244,30,198,99,158, 39,19,242,153,93,175,42,69,169,163,136,53,237,163,14,79,186,135,249,3,16,33,129,174,117,203,43,132,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; -const char* Meter_140x8_png = (const char*) temp_binary_data_5; +const char* Meter_140x8_png = (const char*) temp_binary_data_6; //================== Scaling_36_26.png ================== -static const unsigned char temp_binary_data_6[] = +static const unsigned char temp_binary_data_7[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,36,0,0,0,156,8,6,0,0,0,23,153,9,128,0,0,5,201,73,68,65,84,120,218,237,92,91,143,84,69,16,94,197,75,68,209,168,120,125,48,241,138,215,68,125,23,89,140,36,235,206,57,103,119,117,222,20,81,162,70,12,18, 244,145,32,171,139,24,111,171,238,78,119,159,227,204,233,158,93,118,21,135,7,227,79,0,89,80,76,140,15,42,183,40,222,163,49,17,137,10,202,101,198,175,186,207,4,246,129,4,77,118,186,140,93,73,103,118,178,15,243,77,87,157,174,175,190,170,158,174,174,96, 193,254,75,214,106,157,18,233,202,237,44,176,244,143,171,139,99,157,174,143,181,60,28,231,114,158,87,48,125,70,45,0,144,189,37,45,247,39,90,61,230,13,200,163,89,118,122,108,212,26,128,57,130,245,65,100,178,235,189,129,33,183,0,196,54,172,163,177,22,175, @@ -347,10 +364,10 @@ static const unsigned char temp_binary_data_6[] = 27,71,242,197,170,226,98,219,86,10,222,80,6,181,31,101,123,175,204,168,35,136,21,255,133,34,220,179,210,186,201,164,203,185,136,13,244,91,102,57,15,57,198,168,77,36,90,177,144,99,220,47,50,169,38,170,135,126,22,73,17,1,60,66,169,128,133,164,215,22,61, 233,174,51,139,221,41,100,225,191,104,166,158,5,32,118,194,57,187,214,66,176,96,39,105,127,3,136,107,241,8,229,27,0,90,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; -const char* Scaling_36_26_png = (const char*) temp_binary_data_6; +const char* Scaling_36_26_png = (const char*) temp_binary_data_7; //================== Slider_26x26.png ================== -static const unsigned char temp_binary_data_7[] = +static const unsigned char temp_binary_data_8[] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,26,0,0,0,26,8,6,0,0,0,169,74,76,206,0,0,0,6,98,75,71,68,0,0,0,230,0,0,84,44,23,109,0,0,2,157,73,68,65,84,72,199,229,150,65,111,212,86,16,199,127,243,252,236,221,77,130,68,4,148,74,105,65,81,133,84,42, 33,56,113,172,184,114,234,169,23,14,124,22,62,74,63,70,41,170,90,137,83,175,72,109,69,4,17,80,137,68,172,150,144,44,235,181,159,61,51,61,120,9,40,106,118,183,155,67,15,29,201,146,237,247,252,255,121,222,127,222,216,240,191,138,59,119,190,94,122,238,189, 123,223,205,29,151,69,2,247,239,127,127,187,109,249,220,172,69,21,218,182,197,221,81,109,81,53,154,166,17,240,253,71,143,126,253,109,158,78,92,4,186,116,105,243,65,93,213,119,15,14,142,8,226,228,49,162,170,52,45,4,113,54,207,159,35,198,248,35,112,119, @@ -363,10 +380,10 @@ static const unsigned char temp_binary_data_7[] = 209,232,232,65,149,210,15,101,85,93,41,203,233,13,119,187,172,234,225,131,247,239,39,226,102,94,1,9,208,211,26,223,220,156,47,92,232,51,26,85,31,46,123,192,117,224,234,63,124,115,4,104,128,103,192,14,208,254,235,159,147,19,145,3,197,156,231,210,12,232, 252,87,241,55,44,143,105,246,6,50,28,31,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; -const char* Slider_26x26_png = (const char*) temp_binary_data_7; +const char* Slider_26x26_png = (const char*) temp_binary_data_8; //================== NotoSans-Regular.ttf ================== -static const unsigned char temp_binary_data_8[] = +static const unsigned char temp_binary_data_9[] = { 0,1,0,0,0,17,1,0,0,4,0,16,71,68,69,70,114,119,111,105,0,4,1,248,0,0,1,246,71,80,79,83,237,98,240,38,0,4,3,240,0,0,162,22,71,83,85,66,124,176,53,44,0,4,166,8,0,0,8,92,79,83,47,50,247,201,153,79,0,0,1,152,0,0,0,96,99,109,97,112,88,98,29,225,0,0,39,160, 0,0,14,210,99,118,116,32,25,175,26,197,0,0,64,68,0,0,0,254,102,112,103,109,54,11,22,12,0,0,54,116,0,0,7,180,103,97,115,112,0,22,0,35,0,4,1,232,0,0,0,16,103,108,121,102,170,127,220,169,0,0,102,240,0,3,150,146,104,101,97,100,245,231,74,201,0,0,1,28,0,0, 0,54,104,104,101,97,14,175,12,74,0,0,1,84,0,0,0,36,104,109,116,120,220,134,79,22,0,0,1,248,0,0,37,168,108,111,99,97,16,223,58,96,0,0,65,68,0,0,37,172,109,97,120,112,11,236,5,22,0,0,1,120,0,0,0,32,110,97,109,101,103,90,145,24,0,3,253,132,0,0,4,66,112, @@ -3972,10 +3989,10 @@ static const unsigned char temp_binary_data_8[] = 9,43,0,4,4,229,4,243,2,96,9,44,0,4,4,229,4,243,2,97,9,45,0,4,4,229,4,244,2,96,9,46,0,4,4,229,4,244,2,97,9,47,0,4,4,231,4,243,2,96,9,48,0,4,4,231,4,243,2,97,9,49,0,4,4,231,4,244,2,96,9,50,0,4,4,231,4,244,2,97,9,55,0,4,4,233,4,229,2,96,9,56,0,4,4,233,4, 229,2,97,9,57,0,4,4,233,4,231,2,96,9,58,0,4,4,233,4,231,2,97,0,2,0,3,1,126,1,126,0,0,1,134,1,134,0,1,1,146,1,146,0,2,0,2,0,12,0,3,0,243,2,55,6,3,0,2,0,2,0,76,0,77,0,0,4,87,4,87,0,2,0,0 }; -const char* NotoSansRegular_ttf = (const char*) temp_binary_data_8; +const char* NotoSansRegular_ttf = (const char*) temp_binary_data_9; //================== NotoSans-Bold.ttf ================== -static const unsigned char temp_binary_data_9[] = +static const unsigned char temp_binary_data_10[] = { 0,1,0,0,0,17,1,0,0,4,0,16,71,68,69,70,114,119,111,105,0,4,18,180,0,0,1,246,71,80,79,83,163,246,48,16,0,4,20,172,0,0,163,204,71,83,85,66,124,176,53,44,0,4,184,120,0,0,8,92,79,83,47,50,248,245,156,138,0,0,1,152,0,0,0,96,99,109,97,112,88,98,29,225,0,0,39, 160,0,0,14,210,99,118,116,32,39,8,39,208,0,0,64,212,0,0,1,18,102,112,103,109,54,11,22,12,0,0,54,116,0,0,7,180,103,97,115,112,0,17,0,35,0,4,18,164,0,0,0,16,103,108,121,102,161,3,188,9,0,0,103,148,0,3,166,130,104,101,97,100,246,93,74,203,0,0,1,28,0,0,0, 54,104,104,101,97,15,36,13,50,0,0,1,84,0,0,0,36,104,109,116,120,60,227,229,135,0,0,1,248,0,0,37,168,108,111,99,97,17,55,17,102,0,0,65,232,0,0,37,172,109,97,120,112,12,8,5,21,0,0,1,120,0,0,0,32,110,97,109,101,106,81,151,19,0,4,14,24,0,0,4,108,112,111, @@ -7625,10 +7642,10 @@ static const unsigned char temp_binary_data_9[] = 0,4,4,231,4,244,2,96,9,50,0,4,4,231,4,244,2,97,9,55,0,4,4,233,4,229,2,96,9,56,0,4,4,233,4,229,2,97,9,57,0,4,4,233,4,231,2,96,9,58,0,4,4,233,4,231,2,97,0,2,0,3,1,126,1,126,0,0,1,134,1,134,0,1,1,146,1,146,0,2,0,2,0,12,0,3,0,243,2,55,6,3,0,2,0,2,0,76,0, 77,0,0,4,87,4,87,0,2,0,0 }; -const char* NotoSansBold_ttf = (const char*) temp_binary_data_9; +const char* NotoSansBold_ttf = (const char*) temp_binary_data_10; //================== builtin_pgm.zip ================== -static const unsigned char temp_binary_data_10[] = +static const unsigned char temp_binary_data_11[] = { 80,75,3,4,20,0,0,0,8,0,235,124,51,68,91,179,46,131,152,9,0,0,8,16,0,0,12,0,28,0,68,101,120,101,100,95,48,49,46,115,121,120,85,84,9,0,3,249,55,220,82,77,94,228,82,117,120,11,0,1,4,245,1,0,0,4,20,0,0,0,93,151,219,87,26,217,18,135,139,238,6,26,108,185,5, 161,81,130,45,87,229,38,23,81,80,146,128,8,104,64,32,92,4,21,21,168,100,77,178,214,76,226,36,153,153,117,230,101,254,229,243,118,94,79,237,110,64,152,78,92,43,249,252,85,213,174,221,181,107,87,255,183,2,38,5,140,165,4,38,16,212,39,15,244,15,115,41,141, 201,23,32,192,230,58,0,176,18,136,175,42,60,4,50,171,138,218,126,26,113,188,4,28,32,61,25,122,118,173,1,66,105,185,55,253,143,82,254,101,250,229,107,242,178,105,86,112,208,129,52,147,138,125,39,52,175,204,94,28,223,65,134,128,44,220,9,144,126,111,86, @@ -8875,965 +8892,778 @@ static const unsigned char temp_binary_data_10[] = 227,193,80,81,117,120,11,0,1,4,245,1,0,0,4,20,0,0,0,80,75,1,2,30,3,20,0,0,0,8,0,198,139,121,66,196,112,97,144,143,10,0,0,8,16,0,0,16,0,24,0,0,0,0,0,0,0,0,0,192,129,57,69,1,0,83,121,110,112,114,101,122,70,77,95,51,50,46,115,121,120,85,84,5,0,3,227,193, 80,81,117,120,11,0,1,4,245,1,0,0,4,20,0,0,0,80,75,5,6,0,0,0,0,33,0,33,0,18,11,0,0,18,80,1,0,0,0,0,0 }; -const char* builtin_pgm_zip = (const char*) temp_binary_data_10; +const char* builtin_pgm_zip = (const char*) temp_binary_data_11; //================== about.png ================== -static const unsigned char temp_binary_data_11[] = -{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,44,0,0,1,64,8,6,0,0,0,6,75,65,84,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,7,116,73,77,69,7,222,3,15,6,21,44,250,195,75,60, -0,0,32,0,73,68,65,84,120,218,236,157,119,88,84,71,247,199,191,72,47,138,32,29,68,68,20,68,65,44,88,98,69,212,68,141,198,88,98,55,134,215,142,177,1,118,20,197,216,53,246,222,19,53,121,45,177,107,68,32,26,192,130,138,29,20,65,20,165,8,34,189,179,243,251, -195,31,251,238,46,187,119,11,187,8,120,62,207,227,243,200,221,123,103,206,204,153,61,59,119,238,61,243,85,27,209,163,29,67,45,195,161,121,75,252,248,179,47,28,154,183,0,65,16,159,151,145,30,238,74,43,171,78,109,236,160,151,209,79,224,63,237,39,236,93, -255,11,114,178,50,105,196,16,68,45,161,78,237,109,26,67,200,197,51,152,61,118,8,110,252,125,145,60,77,16,20,176,170,63,121,57,217,216,185,58,0,187,214,44,71,113,81,17,121,156,32,40,96,85,127,174,95,57,15,255,105,227,145,156,248,134,188,78,16,20,176,170, -63,111,226,95,98,225,228,177,120,114,63,146,60,79,16,20,176,170,63,133,5,249,88,51,127,38,238,69,220,32,239,19,4,5,172,234,79,105,73,9,54,46,153,139,136,144,171,52,2,8,130,2,86,245,135,87,86,134,173,129,139,17,118,237,50,141,2,130,160,128,85,19,96,216, -181,122,57,162,31,222,167,145,64,16,20,176,170,63,101,101,165,216,176,216,151,158,30,18,4,5,172,154,65,94,110,14,214,204,159,73,111,197,19,4,5,172,154,65,106,210,91,236,94,183,130,58,130,32,40,96,213,12,238,133,95,199,63,151,207,83,71,16,4,5,172,154, -193,225,173,235,145,150,146,68,29,65,16,213,16,13,101,22,118,60,84,242,27,228,60,30,15,133,5,249,40,44,200,71,65,126,62,210,83,147,145,250,238,45,82,147,222,33,241,85,28,94,62,123,140,130,252,188,207,222,33,133,5,249,216,185,122,25,150,108,218,77,163, -131,32,106,115,192,226,156,202,213,169,3,61,125,3,232,233,27,0,0,172,109,237,0,129,109,114,24,99,120,155,16,143,231,79,30,226,254,205,127,241,228,222,29,148,20,23,127,150,78,137,126,120,31,183,111,132,160,67,183,158,52,66,8,226,75,12,88,210,80,83,83, -67,195,198,77,208,176,113,19,244,26,48,24,69,133,133,120,124,239,54,110,134,4,225,206,141,16,148,150,150,84,169,61,127,236,217,134,182,95,117,131,134,134,6,141,18,130,168,38,84,219,53,44,109,29,29,180,235,220,29,63,251,175,192,142,83,151,49,120,220,4, -232,234,233,87,89,253,41,239,18,17,114,225,47,26,33,4,65,1,75,62,234,214,51,196,176,159,38,99,211,209,191,208,185,215,55,85,86,239,201,67,123,81,88,88,64,163,132,32,40,96,201,79,189,250,70,152,190,40,16,51,151,174,130,142,174,174,202,235,203,201,250, -136,240,160,43,52,74,8,130,2,150,226,116,236,209,11,203,182,29,128,161,145,177,202,235,186,122,230,191,52,74,8,130,2,86,229,176,181,119,192,210,205,123,81,215,208,72,165,245,188,137,127,137,152,71,81,52,82,8,130,2,86,229,176,108,104,139,185,171,54,66, -83,75,75,197,179,172,19,52,82,8,130,2,86,229,113,104,222,18,99,167,205,86,105,29,119,195,175,211,226,59,65,80,192,82,14,189,191,27,138,86,237,191,82,89,249,37,197,197,120,124,247,54,141,22,130,160,128,165,28,198,207,240,133,134,166,166,202,202,191,23, -126,157,70,11,65,124,102,106,205,107,220,22,214,13,225,209,239,59,4,157,61,169,146,242,239,223,12,3,143,199,67,157,58,149,143,241,41,239,18,241,252,201,67,36,189,78,64,106,210,91,164,190,123,139,156,172,76,20,22,22,160,168,160,0,60,198,131,182,142,46, -116,116,117,161,111,80,23,230,86,54,176,108,104,11,203,134,141,224,232,226,246,41,173,137,248,108,212,6,255,21,23,23,33,250,193,61,196,62,123,130,196,87,113,120,247,250,21,114,115,178,81,144,151,135,146,226,34,104,235,232,66,91,87,23,6,6,117,97,102,101, -3,11,155,134,104,212,164,41,90,180,118,135,137,185,5,5,44,101,208,255,135,49,184,118,238,20,24,99,74,47,59,39,43,19,113,49,79,209,212,217,69,238,107,75,75,75,241,248,238,45,68,132,92,197,211,251,145,248,248,33,93,234,53,5,121,185,40,200,203,197,199,244, -52,188,77,136,23,250,172,190,177,9,90,180,105,135,175,122,246,65,171,246,95,65,93,93,157,162,136,10,169,77,254,123,124,239,14,174,157,59,133,135,119,110,162,136,99,93,182,124,163,130,172,140,15,120,247,38,161,194,228,160,235,215,253,225,209,119,32,140, -76,76,171,212,23,106,35,122,180,83,218,183,155,107,183,134,170,98,243,178,5,184,245,207,53,149,148,61,110,250,28,244,29,50,82,230,243,63,188,79,197,197,19,71,17,22,116,89,101,187,153,26,26,25,163,107,159,254,232,55,108,20,140,26,152,84,248,124,239,250, -95,16,114,241,140,74,234,238,51,104,24,126,154,57,87,101,190,228,241,120,88,187,96,54,30,222,137,80,73,249,61,251,15,194,68,223,69,213,218,127,202,226,102,104,16,78,255,182,31,111,95,197,41,111,61,169,78,29,116,239,59,0,195,126,154,194,105,251,72,15, -119,165,213,169,222,210,206,42,64,89,133,13,29,63,233,179,7,44,19,115,75,132,170,232,11,106,80,207,16,237,101,216,193,33,45,53,25,71,119,109,198,238,53,129,120,241,244,17,138,139,10,85,214,222,162,194,2,188,120,250,8,87,207,156,64,110,78,14,236,28,154, -9,101,1,184,186,119,196,147,123,145,200,72,123,175,244,186,227,98,158,193,196,220,18,118,77,29,85,210,182,63,246,109,199,141,43,23,84,82,118,83,103,23,204,12,88,37,118,118,83,157,252,87,89,18,19,226,177,101,217,2,92,248,243,119,100,103,126,84,170,237, -140,49,36,196,62,199,181,115,167,161,161,169,1,7,103,23,168,169,169,85,56,239,212,225,189,52,195,226,226,231,17,3,144,158,154,162,244,114,45,109,108,177,241,183,83,146,111,29,74,74,112,233,228,49,156,58,180,23,197,197,69,159,165,237,122,6,117,49,118, -218,108,244,232,59,128,127,236,227,135,116,44,154,60,86,166,91,25,185,215,20,52,52,177,116,203,30,56,52,111,169,212,114,111,253,115,13,155,151,45,80,73,31,25,53,48,193,47,187,127,171,48,43,168,174,254,83,148,160,179,39,113,100,251,70,148,150,84,205,78, -39,78,174,173,49,109,225,50,152,154,91,170,108,134,85,43,119,28,109,251,85,119,149,148,155,252,246,13,242,114,115,196,255,146,189,138,195,130,73,99,112,124,207,182,207,54,216,1,32,63,55,7,187,215,46,199,74,223,233,248,152,158,198,255,130,206,9,92,7,13, -13,229,63,69,45,45,45,193,134,197,126,74,13,134,111,226,98,177,115,245,50,149,244,143,134,134,38,230,4,174,171,16,172,170,179,255,228,165,184,184,8,91,2,23,225,192,166,53,85,22,172,0,32,230,81,20,22,76,28,131,103,42,148,205,171,149,1,171,93,151,110,42, -43,59,81,204,26,192,191,87,47,97,241,148,31,43,44,174,126,78,30,223,187,141,133,147,199,225,101,244,19,0,159,94,176,253,207,28,213,204,88,50,51,210,241,235,146,185,40,41,169,252,134,139,57,217,89,88,191,216,87,101,183,97,94,179,231,87,152,13,214,4,255, -201,28,240,242,242,176,102,222,76,220,252,76,170,230,121,57,217,248,197,103,26,66,47,157,163,128,37,251,212,180,13,180,117,84,179,155,67,122,106,178,208,61,252,145,237,27,177,99,213,210,207,250,171,204,21,72,150,205,156,196,87,183,238,209,119,0,190,254, -126,184,74,234,138,125,246,24,7,55,175,173,84,25,101,101,101,216,178,108,129,202,246,212,239,51,104,24,60,250,13,172,177,254,147,30,172,114,241,139,207,84,60,123,112,239,179,218,205,43,43,195,158,117,129,184,248,223,163,74,47,187,214,45,186,3,159,158, -94,220,13,191,174,240,148,154,11,123,199,230,112,114,109,141,178,178,50,236,90,189,12,193,213,124,147,63,30,143,135,200,127,255,65,3,51,115,52,110,234,136,150,109,219,227,249,227,7,72,75,73,86,122,93,9,177,207,81,175,190,17,154,56,181,80,232,250,163, -59,55,35,60,248,111,149,173,175,76,95,188,130,255,30,93,77,245,159,36,74,74,138,177,110,193,28,188,120,250,168,218,216,254,232,238,45,212,81,87,199,179,168,187,52,195,146,70,195,198,77,84,52,195,74,65,105,105,41,54,5,204,195,191,65,151,106,72,111,48, -236,89,23,136,144,11,127,65,67,67,3,51,151,174,66,3,51,213,188,252,119,120,219,6,68,43,176,134,241,111,208,101,92,58,121,76,37,54,53,48,53,199,172,128,213,252,237,174,107,178,255,196,126,202,24,118,173,94,142,103,15,238,86,59,203,79,28,216,69,183,132, -159,59,96,237,223,184,10,119,195,106,94,170,206,222,13,171,112,55,252,58,234,213,55,130,239,138,245,208,210,210,86,201,237,192,175,75,231,203,245,148,54,254,69,52,246,174,87,141,136,173,166,150,22,230,172,88,39,180,119,90,77,247,159,40,23,255,251,59, -34,66,254,198,151,64,173,13,88,54,118,246,42,41,247,225,157,8,252,115,249,92,13,237,21,134,109,43,252,241,38,46,22,118,77,29,49,121,222,18,149,212,146,147,245,17,27,252,253,80,92,36,125,93,40,235,99,6,54,46,246,83,153,66,210,68,223,197,176,111,214,252, -127,191,248,7,119,215,10,255,149,19,251,236,49,142,239,221,142,47,133,90,27,176,12,12,13,65,84,164,168,176,0,235,22,205,65,110,118,22,190,234,217,7,3,70,140,83,73,61,9,177,49,216,187,225,23,206,115,62,221,154,205,199,135,180,84,149,216,208,111,232,40, -116,237,221,151,255,247,221,240,235,56,125,100,95,173,241,95,97,65,62,182,6,46,2,175,172,236,139,25,191,181,86,195,170,42,21,118,20,254,181,168,83,7,46,237,58,192,217,173,29,156,92,220,80,191,129,9,234,26,26,162,78,29,117,100,103,102,224,125,114,18,30, -221,189,133,200,27,161,72,126,251,70,169,183,181,7,54,175,197,12,255,95,48,98,162,55,94,199,189,192,163,200,91,74,111,95,88,208,101,52,114,104,134,111,127,24,35,246,243,35,219,54,168,108,55,215,150,109,220,49,106,202,12,254,223,31,210,222,99,215,154, -229,181,202,127,13,76,205,85,242,240,164,58,83,43,223,116,255,116,171,241,1,83,6,127,83,109,3,149,231,128,193,248,118,248,88,152,89,90,73,61,159,199,227,33,44,232,50,142,239,217,134,204,12,229,189,160,57,43,96,53,58,116,247,68,94,78,54,22,77,253,17,169, -239,222,42,127,128,169,169,97,193,186,109,112,105,219,94,232,120,232,165,115,216,179,46,80,37,253,107,106,97,137,95,118,255,134,186,245,254,55,203,14,156,61,85,105,139,210,213,197,127,95,34,181,246,150,80,87,207,160,90,218,101,98,110,129,165,91,246,194, -107,214,60,153,6,123,249,23,164,219,215,253,241,203,238,195,176,119,116,86,154,45,251,127,93,141,252,188,92,232,215,173,7,159,21,27,84,162,68,196,24,195,230,128,249,72,77,122,39,180,238,114,224,215,213,42,233,95,45,109,29,248,172,88,47,20,172,194,175, -93,81,90,176,170,78,254,163,128,85,155,26,86,13,183,92,177,105,220,4,171,246,252,142,102,45,92,21,186,222,216,196,12,139,55,238,128,141,146,158,128,230,100,101,226,220,177,195,0,128,134,118,246,152,182,64,53,233,48,121,185,57,216,176,216,23,133,5,249, -248,152,158,134,141,254,115,85,166,228,61,101,222,18,52,106,210,140,255,119,97,65,62,142,238,222,82,43,253,71,1,171,22,33,203,19,170,170,164,129,153,5,22,174,221,10,131,122,149,123,24,160,171,167,15,223,21,27,160,103,80,87,41,118,93,62,121,28,25,233, -159,118,114,112,239,234,129,193,227,38,168,164,253,137,175,94,98,199,170,0,252,186,116,158,202,110,139,6,142,252,17,157,60,122,11,29,187,116,242,184,82,94,32,174,174,254,251,210,168,181,139,238,37,213,44,213,98,242,92,127,165,109,118,102,110,101,141, -33,63,78,196,111,219,55,86,62,176,23,23,225,220,177,35,24,63,195,23,192,167,108,133,215,47,95,224,94,196,13,165,247,65,228,191,161,42,235,223,86,237,59,97,248,132,105,21,218,246,247,233,63,107,181,255,84,121,135,226,222,165,7,220,187,122,160,137,147, -51,140,77,204,80,167,78,29,228,229,230,32,245,221,91,188,120,250,16,247,34,254,173,114,9,188,218,59,195,170,70,1,171,67,119,207,10,139,206,149,165,207,160,97,176,176,110,168,148,178,174,95,57,143,130,252,60,0,159,22,201,167,45,92,94,163,182,97,54,183, -182,193,207,2,105,55,229,252,251,247,37,165,236,1,85,221,253,167,108,58,121,244,198,166,163,127,97,86,192,106,116,246,252,26,22,214,13,161,165,173,13,13,77,77,24,26,25,163,89,75,87,124,59,124,44,150,110,222,131,245,135,79,160,67,119,79,10,88,149,94,159, -81,242,102,101,149,186,85,25,245,163,242,167,198,26,26,248,122,176,114,18,153,11,11,242,241,239,213,255,165,169,232,233,235,195,103,197,6,232,234,27,84,123,63,235,232,234,194,103,197,6,232,215,173,87,225,179,160,115,39,191,8,255,41,11,109,29,93,204,92, -186,10,51,150,172,172,176,167,149,36,172,109,237,48,43,96,53,124,127,217,0,253,42,184,205,173,181,1,43,67,5,137,207,138,96,99,103,47,244,166,181,50,233,218,187,175,210,68,100,67,47,158,21,250,219,178,161,45,102,248,255,2,64,173,90,251,121,218,130,101, -104,40,38,171,33,57,241,13,94,191,124,241,197,248,175,178,212,53,52,66,192,214,125,232,216,163,151,66,215,183,253,170,27,86,236,58,172,114,129,138,218,27,176,84,176,37,176,162,183,19,170,66,191,110,61,184,117,232,172,148,178,18,94,62,71,90,170,240,75, -136,110,29,190,194,136,137,211,170,173,143,7,143,253,15,220,187,122,136,253,236,230,63,65,95,148,255,42,131,174,190,1,252,127,221,9,59,135,102,149,42,199,194,186,33,252,127,221,141,186,134,70,20,176,228,69,85,123,42,201,139,189,99,115,149,150,239,218, -174,131,210,202,186,39,38,33,248,187,81,227,21,254,213,85,37,109,58,117,197,208,159,38,75,252,60,234,102,216,23,231,63,197,80,195,172,128,213,74,219,44,192,204,210,10,63,251,175,80,217,204,188,214,6,172,132,216,231,213,194,142,198,77,157,84,90,190,139, -18,7,252,125,9,95,242,201,243,150,192,214,222,161,218,248,214,178,97,35,120,47,90,46,86,240,0,248,244,74,75,252,139,232,47,206,127,138,240,205,144,225,74,15,154,46,109,219,99,240,184,255,168,196,222,90,251,90,195,171,106,18,176,166,13,235,87,99,250,236, -101,204,83,48,198,42,4,2,29,157,79,11,219,139,166,140,67,110,118,214,231,189,125,209,211,135,239,47,27,160,199,241,64,32,46,230,169,210,18,130,107,146,255,20,185,37,29,198,49,75,173,12,223,141,30,143,208,75,103,149,190,137,102,173,156,97,189,79,78,66, -94,78,54,8,249,40,200,203,69,146,136,104,166,224,84,127,230,210,149,74,81,190,174,204,237,203,244,197,129,176,106,216,136,243,172,248,231,209,228,76,153,102,87,35,56,3,127,101,208,210,210,198,160,209,63,209,45,161,44,60,184,29,78,163,177,18,179,44,73, -180,108,211,30,163,167,206,250,108,182,13,243,154,140,54,157,186,74,61,47,229,93,34,57,82,134,224,239,209,239,59,149,214,224,209,255,59,165,239,154,82,43,3,214,125,37,45,184,126,137,164,36,114,111,131,210,111,232,72,116,237,211,191,202,237,114,239,234, -129,193,99,101,91,23,121,159,252,142,28,41,133,38,78,206,104,96,106,166,210,58,52,53,181,208,178,141,187,82,203,172,117,1,43,47,55,167,90,238,109,93,83,16,125,181,65,28,19,124,22,168,252,233,153,32,54,118,246,152,58,127,169,204,231,171,66,68,183,182, -161,236,55,247,37,225,218,190,19,5,44,46,174,95,185,160,178,237,118,191,4,100,249,178,107,105,105,99,78,224,122,161,125,210,85,133,158,65,93,248,172,88,47,215,173,69,126,110,46,57,82,10,118,205,156,170,166,158,74,190,219,85,171,3,22,99,12,65,103,78,208, -104,172,4,178,62,213,105,96,106,134,89,203,214,64,93,93,149,15,154,213,48,195,127,133,220,57,119,69,133,5,228,72,41,88,88,219,84,73,61,245,234,43,247,71,173,86,5,172,155,161,65,180,224,90,73,228,249,178,219,53,117,132,169,133,165,202,108,177,178,109, -132,22,173,221,85,218,134,47,21,99,19,179,42,169,71,217,179,240,58,181,231,139,86,136,99,187,182,208,72,84,66,63,202,202,158,181,129,42,253,129,72,122,147,128,131,91,214,145,83,84,128,182,174,110,149,212,163,86,71,185,111,188,215,154,128,245,215,111, -251,85,166,190,242,37,81,92,36,91,192,58,119,252,48,110,134,6,169,220,158,144,11,127,225,218,249,211,114,93,163,165,173,77,142,148,130,106,111,229,21,251,1,252,98,2,214,195,59,17,56,251,255,91,253,18,149,131,199,227,73,239,239,200,155,248,163,10,181, -240,14,109,94,135,231,79,30,202,124,190,166,150,14,57,82,10,85,149,177,144,161,228,73,68,141,15,88,201,137,111,176,117,133,63,0,70,163,176,10,72,121,151,136,45,203,23,129,177,170,235,239,178,178,82,252,186,100,46,62,200,184,3,135,182,14,205,176,164,145, -147,149,89,101,223,79,10,88,255,207,219,132,120,44,155,53,137,210,112,170,136,130,252,60,108,88,236,139,252,220,156,42,175,59,235,99,6,54,250,251,201,180,147,172,178,159,76,213,70,62,188,175,154,119,213,226,56,50,39,20,161,198,38,63,199,60,138,194,198, -37,243,144,147,245,177,90,219,185,239,92,176,216,221,48,107,26,140,49,236,92,189,12,111,19,226,63,155,13,241,207,159,97,255,198,85,152,58,63,128,243,188,6,102,230,136,127,254,172,86,249,239,23,159,105,120,114,95,121,186,159,207,30,222,71,171,246,95,169, -220,238,7,183,35,190,236,25,22,99,12,23,254,252,13,129,179,167,84,251,96,5,160,214,40,243,254,245,219,126,149,138,72,200,202,141,191,47,226,242,169,227,156,231,40,115,215,203,234,226,63,99,37,167,209,60,139,186,167,114,155,19,19,226,149,254,3,87,163, -2,86,98,66,60,150,205,156,132,163,187,182,200,180,56,92,29,120,159,156,132,154,206,253,155,255,226,196,193,61,213,198,158,223,119,108,226,156,109,152,89,88,213,58,255,153,90,90,43,181,188,151,209,79,149,190,190,36,138,178,20,139,106,92,192,202,72,127, -143,67,91,214,99,254,132,81,120,254,248,65,141,250,178,191,140,126,82,163,131,85,82,226,107,108,171,102,15,53,120,60,30,54,47,91,32,113,87,89,187,166,142,181,206,127,141,148,190,129,226,167,59,21,85,145,154,244,14,255,92,58,247,101,5,172,248,231,207, -176,119,195,74,204,28,57,8,127,255,245,167,210,54,101,171,234,217,73,77,37,63,47,23,235,23,249,240,37,192,170,19,185,217,89,88,191,216,23,133,98,222,106,255,20,176,212,106,149,255,148,25,132,249,183,215,87,47,170,108,43,241,131,155,215,160,172,172,180, -118,7,44,30,143,135,216,103,143,113,242,208,30,248,121,141,192,162,41,63,34,228,194,95,42,147,53,175,10,222,189,126,85,35,211,133,24,99,216,246,139,63,146,19,95,87,91,27,223,196,197,98,207,218,192,10,199,117,116,245,96,221,200,174,86,249,207,212,194, -74,233,139,255,165,37,37,216,246,203,18,148,41,121,34,112,249,212,113,60,188,115,83,37,253,160,222,210,206,42,64,89,133,13,29,63,137,187,131,74,75,81,88,80,128,252,188,28,164,165,166,32,33,54,6,209,15,239,35,236,234,101,156,59,126,4,71,182,111,68,208, -153,19,136,126,120,95,41,2,152,138,210,161,187,39,92,218,117,80,218,237,64,105,73,137,76,27,207,41,202,214,192,197,8,190,240,23,74,75,75,97,106,110,1,45,237,202,191,56,121,226,224,238,10,210,95,213,145,183,9,241,208,212,210,130,147,139,155,208,241,228, -183,111,106,157,255,226,159,71,227,221,235,87,74,173,251,195,251,84,168,169,169,193,217,173,173,210,102,164,187,215,44,87,217,123,122,106,35,122,180,163,55,46,5,168,111,108,130,181,7,142,35,225,229,11,172,244,245,86,206,175,130,186,6,54,29,253,75,37, -154,109,225,193,127,99,219,138,197,255,155,50,171,171,195,165,109,7,116,234,217,27,237,58,119,87,72,220,242,206,141,80,252,186,116,110,13,242,154,26,230,175,217,36,244,152,254,241,189,59,181,206,127,161,151,206,97,207,186,64,149,244,224,36,63,127,120, -244,27,88,169,50,34,255,13,197,150,229,139,84,122,71,164,212,25,86,109,96,78,224,58,52,108,220,4,13,76,205,112,229,212,31,40,45,169,124,231,51,198,67,114,226,27,116,246,252,90,162,210,139,34,188,142,123,129,141,254,126,40,45,45,21,186,149,75,125,151, -136,187,97,215,113,241,191,71,241,50,230,41,120,60,6,83,11,43,153,68,59,19,19,226,177,118,254,44,148,149,42,127,253,65,67,67,19,218,186,122,40,45,81,254,126,101,247,110,134,161,125,183,158,168,91,207,16,0,106,165,255,76,205,45,112,241,196,49,149,140, -251,123,17,55,160,174,161,1,39,23,55,185,219,88,90,82,130,83,71,246,225,192,166,181,224,241,84,187,206,76,1,75,128,111,135,143,65,175,129,67,248,191,116,41,73,111,149,38,23,150,242,46,17,26,154,154,112,114,109,173,148,242,222,39,39,97,165,175,55,114, -178,178,56,191,104,41,111,223,32,242,223,80,92,58,113,20,241,207,163,193,24,131,153,165,21,52,52,53,43,156,159,151,147,141,21,115,166,34,235,99,134,74,250,119,130,207,66,120,244,27,136,240,107,87,148,94,118,105,73,49,158,220,187,131,46,125,250,67,83, -75,171,86,250,47,41,241,13,146,19,19,84,54,254,159,70,221,197,179,7,247,208,200,193,17,245,141,27,72,61,159,199,227,225,110,216,63,216,178,124,33,110,95,15,174,146,239,40,5,172,255,199,209,197,13,211,230,7,160,142,186,58,255,152,177,169,41,66,46,252, -165,180,58,158,69,221,69,3,51,139,74,63,241,121,19,23,139,192,217,83,241,241,131,236,18,74,60,30,15,201,137,175,113,231,70,8,46,157,56,198,151,65,51,181,180,130,134,134,38,120,60,30,54,46,241,83,218,27,226,162,244,254,110,40,6,143,253,15,44,172,27,66, -83,75,27,79,238,221,81,122,29,57,89,153,120,247,250,21,58,121,244,134,154,154,90,173,244,159,170,73,79,77,70,240,249,211,120,254,248,1,138,10,11,160,174,161,1,45,109,29,168,107,104,160,168,176,0,233,239,83,240,252,241,67,4,95,248,11,251,214,255,130,144, -139,103,170,116,189,153,214,176,0,88,55,106,140,128,45,123,97,240,255,183,19,130,44,154,242,163,210,191,196,35,38,122,227,187,81,227,21,186,246,234,153,19,56,186,115,179,76,57,117,178,160,165,173,131,214,29,59,227,245,203,23,42,123,26,230,228,226,134, -69,27,119,66,67,227,127,153,96,91,2,23,225,102,200,85,149,212,55,228,199,137,252,7,64,181,221,127,95,26,95,252,12,203,200,196,20,75,54,237,150,56,5,174,87,223,72,233,251,62,61,185,31,137,39,247,35,97,223,172,57,12,101,152,122,51,198,240,224,118,56,182, -173,88,140,208,139,103,149,250,24,186,172,172,20,239,94,191,66,174,138,18,200,141,77,205,176,104,195,246,10,250,119,110,29,58,35,234,118,56,178,50,62,40,189,206,232,135,247,209,200,161,25,172,109,237,106,189,255,190,52,190,232,25,150,158,65,93,44,221, -188,71,170,12,187,191,247,79,120,249,76,21,111,60,127,122,156,220,201,163,23,28,156,93,96,108,98,10,61,131,186,40,200,207,67,246,199,12,188,137,127,137,23,79,30,226,246,141,16,165,43,232,86,5,26,154,154,88,182,117,31,236,29,157,197,126,158,150,146,132, -133,147,85,163,38,173,163,171,139,192,29,135,96,99,103,79,254,163,128,85,11,102,86,13,76,48,127,237,86,169,193,10,248,180,51,196,178,153,147,104,180,200,201,212,249,1,232,246,53,183,134,225,211,168,187,88,233,235,173,146,220,80,115,107,27,252,178,243, -48,18,95,197,145,255,232,150,176,230,98,217,176,17,252,55,237,150,42,121,94,142,137,185,37,62,126,72,199,171,23,49,52,98,100,228,155,33,35,240,221,168,31,165,158,103,102,105,5,61,3,3,149,188,25,157,151,147,141,215,113,177,24,56,106,60,50,51,62,144,255, -40,96,213,60,28,154,183,196,226,13,59,96,212,192,84,174,235,156,221,218,32,34,228,234,103,217,188,174,166,225,236,214,14,222,139,150,163,78,29,217,50,191,154,58,187,32,45,37,9,175,227,98,149,110,75,234,187,183,40,45,41,193,15,255,153,66,254,171,5,212, -249,146,26,251,205,224,225,88,178,121,55,234,26,214,151,251,90,93,61,125,76,95,20,88,101,155,247,215,84,76,204,45,48,43,96,21,212,5,94,15,145,133,255,204,81,157,154,244,185,227,135,241,224,118,68,173,242,159,134,166,38,86,236,60,140,206,158,95,87,107, -59,103,5,172,166,128,37,47,117,13,235,99,238,170,95,241,227,207,190,208,212,212,82,184,156,102,45,93,49,201,111,49,69,37,9,104,105,105,195,103,197,6,133,126,16,202,213,164,235,213,55,82,137,109,187,86,47,131,150,142,78,45,241,159,26,126,94,252,11,154, -56,57,195,107,246,2,152,41,121,175,44,101,241,245,247,195,209,161,187,39,5,44,121,104,221,177,11,214,236,59,134,214,29,187,40,165,188,110,95,247,199,224,113,19,40,58,137,97,242,188,37,149,146,38,111,96,106,134,217,203,214,8,189,188,171,44,138,139,139, -176,97,177,15,90,119,236,92,227,253,247,159,217,243,208,190,155,7,0,64,79,95,31,51,3,86,65,75,171,122,9,111,216,59,58,99,244,212,25,74,47,183,214,174,97,89,219,218,193,123,225,50,12,249,113,34,116,245,244,149,90,118,139,214,237,80,86,86,134,152,71,81, -20,165,254,159,111,135,143,69,255,97,163,148,112,75,105,137,122,134,245,17,117,43,92,233,54,230,231,229,34,46,38,26,19,125,63,169,254,212,60,255,169,97,194,156,133,232,53,112,176,208,81,163,6,166,104,104,223,4,55,67,130,170,133,149,230,86,54,88,188,113, -59,244,244,63,37,110,159,58,188,151,2,150,36,12,234,25,98,228,196,233,152,52,119,137,204,79,1,21,161,101,27,119,104,235,232,226,241,189,219,95,124,176,114,105,219,1,83,230,45,145,121,145,93,26,77,156,156,145,145,254,94,105,121,128,130,164,165,36,161, -32,47,23,163,167,204,172,81,254,211,210,210,198,140,37,43,209,181,79,95,177,159,91,217,218,161,94,253,250,120,112,59,252,179,218,89,223,216,4,75,54,237,70,3,83,115,254,49,10,88,18,102,84,63,120,77,193,212,249,1,112,114,117,83,218,151,135,11,199,150,173, -208,168,73,83,60,184,115,83,37,59,16,212,4,204,44,173,177,112,221,86,232,40,89,250,220,213,189,35,158,220,139,68,134,140,90,132,242,240,50,250,41,76,45,173,208,103,208,176,26,225,63,51,75,107,204,91,187,25,45,219,184,75,9,244,45,80,223,184,129,74,102, -167,178,221,210,155,99,225,250,109,176,108,104,43,116,92,153,1,171,70,191,56,170,174,174,1,215,246,29,241,245,160,97,85,34,89,36,137,212,164,119,216,178,124,1,226,159,71,87,187,62,178,176,110,168,178,28,65,109,29,93,44,223,126,64,166,151,111,21,225,227, -135,116,44,156,52,22,153,25,233,74,47,91,67,83,19,1,91,246,161,137,147,115,181,246,95,151,222,125,241,211,204,185,21,82,155,184,8,191,118,5,187,214,46,87,202,214,58,178,98,231,224,136,185,171,126,133,145,73,197,215,133,70,122,184,127,185,1,75,75,75,27, -173,218,119,66,251,238,61,209,166,83,87,185,28,169,74,202,202,202,112,237,220,41,252,247,192,174,106,241,174,143,133,117,67,124,63,246,63,56,190,103,155,74,190,240,192,167,71,214,202,126,10,36,74,236,179,199,88,62,115,178,74,54,133,51,50,49,197,202,221, -191,161,190,113,131,106,233,191,159,102,206,133,171,123,71,133,174,79,136,125,142,95,151,206,195,251,228,119,42,183,181,107,239,126,240,154,61,15,58,186,122,98,63,255,162,2,86,189,250,70,112,104,222,18,14,206,45,209,212,185,37,154,58,187,66,91,71,167, -218,218,155,157,249,17,103,142,30,68,200,133,51,40,18,35,144,160,242,105,185,153,5,6,141,30,143,46,125,250,97,165,143,55,98,159,61,86,73,61,131,70,255,132,225,19,166,85,73,155,66,47,157,197,158,117,43,84,82,118,179,150,173,224,191,113,39,127,127,176, -234,226,191,30,253,190,19,218,221,66,17,242,114,115,240,199,222,237,184,118,238,52,84,161,122,84,175,190,17,38,248,44,132,123,151,30,156,231,213,248,128,85,71,93,29,90,90,218,208,214,209,129,150,182,14,180,117,116,160,95,183,30,76,204,45,96,106,110,9, -83,11,75,152,152,91,194,210,182,17,76,205,45,107,228,237,106,94,78,54,130,206,157,66,232,197,179,85,240,43,247,41,9,183,215,192,193,104,223,173,39,212,213,213,177,247,255,247,42,82,5,110,29,58,195,111,229,198,42,89,39,44,231,224,230,181,184,122,230,132, -74,202,238,249,237,247,152,232,179,176,90,249,79,153,188,122,17,131,227,123,182,41,237,1,131,158,65,93,244,29,58,18,253,134,142,148,233,14,71,169,1,139,169,106,183,120,130,79,252,139,104,220,254,39,24,15,238,68,32,49,254,165,82,54,232,215,210,210,70, -115,183,54,112,107,255,21,220,187,245,68,3,37,43,3,19,181,207,127,175,227,94,224,202,169,63,17,25,246,15,242,20,216,78,200,161,121,75,116,234,217,7,61,250,14,248,108,75,49,20,176,170,152,194,130,124,188,140,126,138,132,216,24,164,38,189,67,90,74,50,210, -83,147,145,159,155,131,162,162,34,20,23,22,162,180,180,4,26,26,154,208,212,210,130,158,65,93,212,171,95,31,198,166,230,176,176,182,129,85,195,70,176,119,116,134,77,227,38,149,190,101,32,190,76,255,149,149,149,225,249,147,135,136,121,120,31,111,226,95, -226,221,235,87,200,201,202,68,126,94,46,202,74,75,161,171,167,15,61,131,186,48,54,53,67,35,135,102,176,111,230,4,103,183,182,48,85,162,162,54,5,44,130,32,106,61,117,168,11,8,130,160,128,69,16,4,65,1,139,32,8,10,88,4,65,16,20,176,8,130,32,40,96,17,4,65, -1,139,32,8,130,2,22,65,16,4,5,44,130,32,40,96,17,4,65,80,192,34,8,130,160,128,69,16,4,5,44,130,32,8,10,88,4,65,16,20,176,8,130,160,128,69,16,4,65,1,139,32,8,130,2,22,65,16,20,176,8,130,32,40,96,17,4,65,80,192,34,8,130,2,22,65,16,4,5,44,130,32,8,10,88, -4,65,80,192,34,8,130,160,128,69,16,4,65,1,139,32,8,10,88,4,65,16,20,176,8,130,160,128,69,16,4,65,1,139,32,8,130,2,22,65,16,20,176,8,130,32,40,96,17,4,65,80,192,34,8,130,2,22,65,16,68,181,68,61,32,32,32,128,235,132,51,103,206,224,204,153,51,8,11,11,67, -88,88,24,30,61,122,132,132,132,4,36,36,36,160,89,179,102,252,243,120,60,30,210,210,210,160,175,175,175,52,227,162,163,163,49,126,252,120,20,22,22,162,77,155,54,159,173,147,148,221,182,164,164,36,172,93,187,22,61,123,246,172,210,118,68,71,71,227,183,223, -126,67,167,78,157,170,93,121,39,78,156,168,48,166,228,225,193,131,7,88,189,122,53,246,236,217,131,208,208,80,212,169,83,7,77,155,54,229,127,190,118,237,90,220,186,117,11,169,169,169,112,112,112,128,186,186,58,10,10,10,176,125,251,118,116,236,216,81,106, -249,217,217,217,88,177,98,5,118,237,218,133,252,252,124,184,185,185,81,244,168,142,51,172,236,236,108,164,167,167,35,48,48,16,9,9,9,200,200,200,192,237,219,183,17,21,21,37,116,222,193,131,7,209,180,105,83,240,120,60,165,25,231,239,239,15,55,55,55,184, -186,186,2,0,194,195,195,193,24,171,242,78,82,118,219,50,50,50,112,226,196,137,42,111,199,187,119,239,112,233,210,165,106,85,94,185,79,197,141,41,89,217,191,127,63,58,119,238,12,30,143,135,111,191,253,22,13,27,54,132,183,183,55,198,142,29,203,63,103,225, -194,133,40,45,45,197,137,19,39,208,161,67,7,228,231,231,35,47,47,15,82,126,175,249,12,29,58,20,111,223,190,197,160,65,131,176,126,253,122,236,218,181,139,162,199,231,128,201,136,185,185,57,75,76,76,100,140,49,230,227,227,195,2,3,3,133,62,207,202,202, -98,17,17,17,76,153,116,238,220,153,133,134,134,242,255,86,87,87,103,5,5,5,172,170,81,118,219,30,63,126,204,28,29,29,171,188,29,65,65,65,204,211,211,179,90,149,87,238,83,113,99,74,22,94,190,124,201,116,117,117,43,248,39,55,55,151,221,187,119,79,236,216, -105,219,182,45,187,114,229,10,75,75,75,99,134,134,134,82,235,200,203,203,99,51,102,204,96,60,30,143,49,198,88,68,68,4,235,208,161,3,35,170,30,133,215,176,98,98,98,208,163,71,15,216,219,219,35,50,50,18,9,9,9,216,182,109,27,255,86,161,101,203,150,112,116, -116,68,120,120,120,133,219,8,209,207,246,238,221,11,123,123,123,216,219,219,99,207,158,61,0,0,63,63,63,68,69,69,225,167,159,126,66,96,96,32,134,14,29,138,178,178,50,180,109,219,22,59,118,236,192,31,127,252,1,0,248,231,159,127,112,251,246,109,0,192,209, -163,71,113,232,208,33,254,255,27,53,106,132,150,45,91,98,255,254,253,24,55,110,28,0,224,249,243,231,24,50,100,8,70,141,26,133,233,211,167,3,0,182,111,223,142,198,141,27,163,73,147,38,56,124,248,112,133,182,202,218,54,69,202,230,58,71,82,27,196,217,32, -169,140,253,251,247,195,214,214,22,174,174,174,120,246,236,153,216,250,119,236,216,129,77,155,54,1,0,110,220,184,1,111,111,111,236,216,177,3,190,190,190,232,221,187,55,28,28,28,112,243,230,77,169,229,137,179,65,92,159,8,206,90,202,125,90,92,92,92,97, -76,201,210,127,167,79,159,198,215,95,127,93,225,182,84,95,95,191,194,50,66,89,89,25,194,195,195,241,238,221,59,56,58,58,138,237,139,37,75,150,240,199,80,84,84,20,6,14,28,8,61,61,61,108,222,188,25,106,106,106,0,128,247,239,223,195,208,208,144,102,59,53, -105,134,213,185,115,103,150,159,159,207,2,2,2,216,216,177,99,217,205,155,55,249,191,58,43,86,172,96,211,166,77,99,241,241,241,44,47,47,79,168,28,209,207,174,94,189,202,156,156,156,216,147,39,79,88,116,116,52,115,118,118,102,87,174,92,97,153,153,153,172, -125,251,246,236,212,169,83,44,43,43,139,165,167,167,51,117,117,117,150,144,144,192,210,210,210,88,155,54,109,88,89,89,25,27,50,100,8,27,51,102,12,43,43,43,99,109,218,180,97,25,25,25,236,197,139,23,183,15,48,19,0,0,32,0,73,68,65,84,172,94,189,122,236, -159,127,254,97,57,57,57,204,203,203,139,117,238,220,153,49,198,88,84,84,20,211,214,214,102,193,193,193,44,47,47,143,5,7,7,51,103,103,103,22,27,27,203,158,62,125,202,236,236,236,132,126,153,25,99,50,183,77,214,178,5,103,88,146,206,225,106,131,168,13,146, -202,120,244,232,17,51,50,50,98,145,145,145,44,55,55,151,141,25,51,70,236,140,104,233,210,165,108,222,188,121,140,49,198,206,159,63,207,250,247,239,207,150,46,93,202,58,118,236,200,10,11,11,217,154,53,107,216,168,81,163,56,203,147,100,131,104,159,8,34, -232,83,113,99,74,22,223,44,92,184,144,77,157,58,85,232,216,193,131,7,89,135,14,29,88,135,14,29,216,130,5,11,248,51,44,59,59,59,214,171,87,47,254,172,93,220,12,235,209,163,71,172,81,163,70,172,184,184,152,13,30,60,152,237,222,189,91,232,243,232,232,104, -102,99,99,195,194,195,195,105,186,83,147,102,88,125,250,244,129,174,174,46,28,29,29,145,159,159,47,244,217,132,9,19,144,152,152,136,145,35,71,34,57,57,153,243,179,160,160,32,120,121,121,161,69,139,22,112,114,114,194,132,9,19,16,28,28,12,67,67,67,104, -106,106,194,216,216,24,245,234,213,67,131,6,13,0,0,230,230,230,48,49,49,65,247,238,221,241,235,175,191,226,221,187,119,120,246,236,25,118,236,216,1,79,79,79,24,25,25,225,246,237,219,232,212,169,19,186,119,239,14,3,3,3,248,250,250,10,217,96,111,111,143, -158,61,123,66,79,79,15,55,110,220,64,126,126,62,198,140,25,3,47,47,47,152,155,155,227,249,243,231,18,219,205,213,54,69,202,150,116,14,87,27,68,109,224,42,163,103,207,158,104,215,174,29,244,245,245,49,99,198,12,185,124,220,187,119,111,104,107,107,195, -214,214,22,69,69,69,156,229,113,181,85,176,79,4,17,244,169,184,49,37,75,255,181,107,215,14,33,33,33,40,41,41,225,31,243,244,244,196,250,245,235,81,175,94,61,161,53,207,232,232,104,4,5,5,161,71,143,30,18,219,236,226,226,130,86,173,90,193,207,207,15,119, -239,222,197,248,241,227,249,159,189,126,253,26,125,251,246,197,214,173,91,241,213,87,95,209,108,167,58,46,186,75,188,176,142,228,75,141,140,140,112,236,216,49,140,25,51,6,107,215,174,229,252,172,117,235,214,56,123,246,44,114,115,115,145,155,155,139,211, -167,79,163,117,235,214,82,235,247,245,245,197,226,197,139,49,117,234,84,76,152,48,1,243,231,207,199,156,57,115,0,0,142,142,142,184,119,239,30,146,146,146,0,0,103,207,158,149,104,187,179,179,51,154,55,111,142,176,176,48,68,68,68,96,222,188,121,24,62,124, -184,66,109,83,164,108,73,231,112,181,65,212,6,73,101,56,57,57,33,34,34,2,41,41,41,252,219,39,113,152,153,153,33,54,54,22,0,240,244,233,83,152,153,153,137,245,49,87,121,92,109,229,26,43,92,99,74,150,254,27,56,112,32,12,13,13,49,110,220,56,124,252,248, -17,0,208,176,97,67,188,123,247,14,15,30,60,192,228,201,147,165,214,91,90,90,138,210,210,82,126,112,91,188,120,49,54,111,222,12,95,95,95,104,105,105,1,0,82,82,82,208,187,119,111,44,95,190,28,131,6,13,226,95,155,146,146,194,95,158,32,170,113,192,226,226, -220,185,115,112,116,116,196,202,149,43,241,253,247,223,115,126,54,98,196,8,180,109,219,22,150,150,150,176,180,180,68,171,86,173,48,114,228,72,169,117,88,89,89,193,215,215,23,195,135,15,199,216,177,99,241,243,207,63,195,194,194,2,0,224,238,238,14,47,47, -47,56,57,57,193,213,213,21,9,9,9,18,203,25,54,108,24,44,45,45,97,107,107,11,27,27,27,28,57,114,4,69,69,69,10,181,77,145,178,37,157,195,213,6,81,27,36,149,209,165,75,23,12,27,54,12,77,155,54,133,179,179,51,114,115,115,197,218,57,122,244,104,196,199,199, -195,198,198,6,219,182,109,131,143,143,143,216,243,184,202,147,183,31,101,65,150,50,213,213,213,113,241,226,69,228,229,229,193,204,204,12,77,155,54,133,185,185,57,124,125,125,113,242,228,73,216,217,217,113,214,145,149,149,5,77,77,77,104,106,106,226,232, -209,163,252,241,51,110,220,56,76,156,56,17,0,240,241,227,71,244,233,211,7,177,177,177,24,55,110,28,212,212,212,208,171,87,47,0,64,80,80,16,166,76,153,34,52,195,35,84,135,26,83,209,123,2,249,249,249,40,43,43,67,221,186,117,101,250,44,47,47,15,101,101, -101,168,87,175,158,60,235,111,252,133,80,30,143,87,225,23,58,43,43,11,234,234,234,48,48,48,144,90,86,118,118,54,74,74,74,248,183,41,138,182,77,209,178,37,157,35,169,13,226,108,144,84,70,102,102,38,52,53,53,57,223,35,99,140,33,53,53,21,166,166,166,80, -87,87,231,108,15,87,121,242,244,163,172,200,90,102,74,74,10,226,227,227,97,96,96,0,103,103,103,104,104,104,40,92,103,105,105,169,204,215,23,21,21,65,91,91,155,162,73,77,14,88,4,65,16,53,226,150,144,32,8,130,2,22,65,16,20,176,8,130,32,40,96,17,4,65,80, -192,34,8,130,2,22,65,16,4,5,44,130,32,8,10,88,4,65,80,192,34,8,130,160,128,69,16,4,65,1,139,32,8,10,88,4,65,16,20,176,8,130,32,40,96,17,4,65,1,139,32,8,226,115,35,243,14,103,65,65,65,248,227,143,63,144,146,146,2,59,59,59,252,244,211,79,104,215,174,29, -245,32,65,16,85,134,84,229,103,0,240,246,246,198,203,151,47,225,235,235,139,73,147,38,161,113,227,198,88,185,114,37,146,146,146,196,170,230,114,169,228,102,101,101,193,223,223,31,59,119,238,68,81,81,145,208,103,31,62,124,192,158,61,123,240,226,197,11, -180,106,213,74,168,204,55,111,222,96,225,194,133,56,124,248,48,10,11,11,43,124,174,234,250,5,201,202,202,66,82,82,18,140,140,140,42,124,38,78,97,88,149,72,83,145,150,166,136,172,40,226,148,154,85,161,254,77,16,114,221,18,238,217,179,7,86,86,86,8,12,12, -196,246,237,219,49,98,196,8,28,61,122,20,199,142,29,195,221,187,119,113,253,250,245,10,215,112,169,228,14,25,50,4,47,94,188,128,135,135,7,252,252,252,240,219,111,191,241,63,75,76,76,196,195,135,15,177,114,229,202,10,101,14,24,48,0,117,235,214,197,212, -169,83,241,203,47,191,112,110,252,175,138,250,5,191,148,35,71,142,196,155,55,111,196,126,46,78,97,88,149,112,169,72,203,162,136,44,47,92,74,205,170,80,255,38,8,33,164,233,128,245,232,209,131,21,23,23,51,47,47,47,118,238,220,57,198,24,99,123,246,236,97, -55,111,222,100,137,137,137,236,135,31,126,144,89,37,247,214,173,91,204,206,206,142,149,150,150,50,198,24,59,113,226,4,107,222,188,185,84,85,100,30,143,199,110,222,188,201,74,74,74,24,99,140,45,88,176,128,205,156,57,83,110,149,94,69,235,23,196,199,199, -135,233,235,235,11,41,82,139,83,50,22,84,24,86,37,146,236,149,85,17,89,153,74,205,170,80,255,38,8,185,116,9,213,213,213,161,169,169,137,135,15,31,98,192,128,1,0,128,137,19,39,162,99,199,142,176,177,177,193,135,15,31,132,206,231,82,201,125,240,224,1,60, -61,61,249,183,73,253,251,247,71,76,76,12,10,10,10,56,109,80,83,83,67,199,142,29,161,161,161,129,141,27,55,226,207,63,255,228,171,32,139,162,138,250,203,57,114,228,8,222,190,125,139,111,190,249,134,243,60,113,10,195,178,170,56,243,120,60,44,92,184,16, -54,54,54,176,179,179,195,157,59,119,56,175,151,132,172,138,200,146,202,21,167,6,45,77,169,89,80,33,27,144,95,9,154,32,42,125,75,88,90,90,10,224,147,22,94,70,70,6,128,79,218,117,225,225,225,40,42,42,226,84,22,137,137,137,193,244,233,211,177,116,233,82, -0,159,212,86,4,85,94,116,116,116,160,174,174,46,81,126,74,28,175,95,191,134,186,186,58,63,32,113,161,204,250,111,221,186,133,109,219,182,225,192,129,3,82,207,109,217,178,37,2,2,2,112,252,248,113,216,217,217,33,54,54,22,211,166,77,195,145,35,71,112,235, -214,45,68,68,68,32,62,62,158,31,88,186,119,239,142,43,87,174,160,117,235,214,216,185,115,39,255,156,11,23,46,160,65,131,6,156,215,75,34,51,51,19,150,150,150,66,199,14,29,58,132,142,29,59,162,99,199,142,88,184,112,33,103,185,239,223,191,231,235,15,102, -103,103,227,245,235,215,216,189,123,55,212,213,213,113,233,210,37,104,105,105,33,33,33,1,151,47,95,198,143,63,254,136,173,91,183,34,63,63,31,113,113,113,0,128,144,144,16,236,216,177,3,65,65,65,56,127,254,60,2,2,2,112,255,254,125,20,20,20,224,226,197, -139,152,48,97,130,88,93,71,130,168,84,192,114,114,114,66,120,120,56,252,253,253,49,108,216,48,248,251,251,99,210,164,73,176,176,176,192,145,35,71,208,183,111,95,137,129,69,84,37,183,81,163,70,124,193,78,0,72,72,72,128,150,150,22,76,77,77,101,54,120,243, -230,205,240,243,243,195,252,249,243,1,0,39,79,158,132,137,137,9,76,76,76,112,242,228,73,149,212,255,246,237,91,12,30,60,24,131,6,13,194,185,115,231,240,246,237,91,177,107,119,229,136,42,12,203,163,226,252,207,63,255,96,198,140,25,176,181,181,69,203,150, -45,209,164,73,19,169,74,214,226,144,69,17,89,222,114,165,41,53,11,162,136,18,52,65,84,58,96,45,95,190,28,243,231,207,135,190,190,62,206,156,57,131,97,195,134,33,56,56,24,207,158,61,195,137,19,39,48,117,234,212,10,215,72,82,201,253,230,155,111,112,243, -230,77,68,70,70,2,0,86,175,94,45,147,104,106,82,82,18,220,221,221,249,202,190,197,197,197,252,39,81,3,6,12,64,76,76,12,98,98,98,248,183,172,202,174,63,60,60,28,227,198,141,67,118,118,54,30,60,120,128,204,204,76,169,51,28,65,228,81,113,110,209,162,5,78, -158,60,137,178,178,50,188,127,255,30,175,95,191,150,170,100,45,14,89,20,145,185,202,149,164,6,45,52,120,56,20,157,149,161,4,77,16,114,47,186,51,198,88,114,114,50,27,61,122,52,235,221,187,55,27,53,106,20,235,209,163,7,155,62,125,58,203,205,205,173,112, -110,70,70,6,115,113,113,97,0,248,255,60,61,61,249,159,31,58,116,136,233,232,232,48,115,115,115,230,228,228,196,146,146,146,100,90,68,158,63,127,62,179,183,183,103,253,250,245,99,246,246,246,236,217,179,103,98,109,85,85,253,130,12,25,50,68,166,69,119, -65,230,206,157,203,234,214,173,203,92,92,92,216,228,201,147,89,231,206,157,249,11,255,86,86,86,204,210,210,146,93,190,124,153,229,229,229,177,254,253,251,51,3,3,3,166,175,175,207,254,253,247,95,206,235,185,236,77,75,75,99,3,6,12,96,26,26,26,204,193,193, -129,153,153,153,49,27,27,27,118,253,250,117,169,118,101,102,102,50,55,55,55,102,109,109,205,108,108,108,216,147,39,79,36,46,186,31,63,126,156,13,25,50,132,221,188,121,147,255,128,131,199,227,49,47,47,47,102,105,105,201,44,45,45,217,160,65,131,88,126, -126,62,139,138,138,98,45,90,180,160,213,99,66,33,228,18,82,45,46,46,70,102,102,38,140,141,141,43,165,170,155,156,156,140,196,196,68,180,110,221,26,154,154,154,50,95,151,146,146,130,148,148,20,56,57,57,65,71,71,167,202,235,175,44,242,168,56,127,248,240, -1,122,122,122,208,213,213,149,122,189,44,253,198,165,136,44,169,92,121,212,160,37,161,10,37,104,226,203,133,148,159,9,130,168,61,107,88,4,65,16,20,176,8,130,32,106,67,192,42,43,43,195,134,13,27,100,62,94,219,168,141,237,252,82,124,71,124,230,128,117, -226,196,9,92,188,120,177,74,141,58,119,238,28,172,173,173,101,62,46,8,143,199,195,251,247,239,21,110,71,74,74,10,252,253,253,63,171,83,100,105,167,188,118,103,103,103,195,223,223,31,63,252,240,3,255,173,115,89,249,240,225,3,54,109,218,132,35,71,142,84, -248,44,43,43,11,126,126,126,248,254,251,239,57,203,149,212,166,232,232,104,108,220,184,81,165,253,89,21,117,16,213,36,96,137,75,114,5,254,151,4,43,250,127,101,112,242,228,73,12,25,50,68,230,227,130,136,38,224,114,37,235,138,35,51,51,83,98,50,113,85,33, -75,59,229,181,155,43,33,92,26,92,73,225,92,201,228,178,180,233,221,187,119,184,116,233,146,74,251,179,42,234,32,170,6,133,223,77,232,222,189,59,114,115,115,161,163,163,35,244,255,202,242,232,209,35,56,57,57,85,120,221,64,210,113,81,134,13,27,6,103,103, -103,254,203,137,229,182,213,20,100,109,167,60,228,231,231,163,121,243,230,216,180,105,19,212,212,212,208,184,113,99,204,158,61,27,83,166,76,145,233,122,55,55,55,248,248,248,96,232,208,161,21,126,204,226,226,226,240,242,229,75,168,171,171,195,202,202, -10,75,150,44,169,176,27,132,42,218,68,208,12,75,34,162,73,174,130,73,176,3,7,14,228,255,255,241,227,199,24,52,104,16,230,207,159,15,83,83,83,120,120,120,240,183,97,17,77,242,45,191,125,19,101,247,238,221,152,52,105,146,212,227,91,182,108,129,181,181, -53,220,220,220,176,117,235,86,120,123,123,3,128,80,2,174,180,100,93,113,9,190,229,248,250,250,194,204,204,12,30,30,30,72,72,72,16,123,235,41,46,73,121,239,222,189,176,183,183,135,189,189,61,246,236,217,3,0,248,239,127,255,11,47,47,47,116,234,212,9,14, -14,14,56,115,230,12,90,182,108,137,118,237,218,33,61,61,157,179,157,178,38,77,115,217,205,149,16,46,143,109,162,200,154,76,46,218,166,253,251,247,195,214,214,22,174,174,174,120,246,236,153,208,185,226,18,166,51,51,51,209,163,71,15,68,70,70,226,246,237, -219,240,244,244,68,78,78,142,196,243,165,213,65,212,96,164,189,89,234,227,227,195,58,119,238,204,242,243,243,89,64,64,0,27,59,118,44,75,79,79,103,234,234,234,44,33,33,65,232,255,81,81,81,76,79,79,143,5,7,7,179,130,130,2,54,117,234,84,246,205,55,223,48, -198,24,91,177,98,5,155,54,109,26,139,143,143,103,121,121,121,236,216,177,99,204,204,204,140,21,23,23,243,235,74,79,79,103,147,38,77,170,96,131,232,241,187,119,239,50,99,99,99,118,231,206,29,150,157,157,205,198,143,31,207,250,247,239,207,24,99,66,111, -91,11,218,38,174,29,75,151,46,101,243,230,205,99,140,49,118,254,252,121,214,191,127,127,22,29,29,205,116,116,116,88,72,72,8,43,46,46,102,62,62,62,172,123,247,238,21,108,218,182,109,27,243,240,240,96,175,95,191,102,143,31,63,102,47,95,190,100,87,175,94, -101,78,78,78,236,201,147,39,44,58,58,154,57,59,59,179,43,87,174,176,157,59,119,50,23,23,23,150,155,155,203,70,142,28,201,186,116,233,194,10,10,10,88,175,94,189,216,225,195,135,37,182,243,197,139,23,172,94,189,122,236,159,127,254,97,57,57,57,204,203,203, -139,255,38,186,104,127,202,106,119,116,116,52,179,177,177,97,225,225,225,140,49,38,179,109,226,222,168,95,189,122,53,155,53,107,150,208,54,64,26,26,26,236,253,251,247,18,219,244,232,209,35,102,100,100,196,34,35,35,89,110,110,46,27,51,102,12,63,19,33, -56,56,152,57,59,59,179,216,216,88,246,244,233,83,102,103,103,199,223,10,231,242,229,203,204,206,206,142,217,217,217,177,224,224,96,206,243,185,234,32,106,249,246,50,64,197,36,87,193,36,88,209,132,216,78,157,58,161,103,207,158,208,209,209,129,159,159, -31,110,222,188,9,160,98,146,111,183,110,221,176,102,205,26,161,219,132,189,123,247,98,194,132,9,21,234,23,61,126,231,206,29,244,237,219,23,238,238,238,168,91,183,174,208,204,72,16,121,146,117,5,105,219,182,45,60,60,60,160,169,169,9,95,95,95,68,68,68, -84,88,163,19,151,164,28,20,20,4,47,47,47,180,104,209,2,78,78,78,152,48,97,2,130,131,131,249,253,162,175,175,15,123,123,123,120,120,120,64,71,71,7,214,214,214,40,46,46,150,216,78,121,146,166,101,177,91,92,66,184,172,182,137,67,150,100,114,113,109,234, -217,179,39,218,181,107,7,125,125,125,204,152,49,131,255,25,87,194,116,159,62,125,96,104,104,136,6,13,26,192,195,195,131,243,124,174,58,136,47,224,150,80,158,100,213,251,247,239,243,111,3,79,159,62,141,22,45,90,0,168,152,228,91,167,78,29,161,20,145,210, -210,82,220,187,119,15,238,238,238,66,229,137,59,222,162,69,11,220,184,113,3,105,105,105,0,128,51,103,206,64,145,118,72,74,240,125,244,232,17,94,188,120,193,95,44,110,222,188,57,212,212,212,144,146,146,194,223,233,84,92,146,114,235,214,173,113,246,236, -89,228,230,230,34,55,55,23,167,79,159,70,235,214,173,1,64,104,59,28,113,253,41,174,157,242,36,77,115,217,13,72,78,8,151,197,54,73,72,75,38,23,215,38,39,39,39,68,68,68,240,183,174,57,125,250,52,255,51,174,132,233,229,203,151,195,218,218,26,245,235,215, -199,170,85,171,56,207,231,170,131,248,66,23,221,37,97,98,98,130,57,115,230,224,225,195,135,200,207,207,231,191,74,112,238,220,57,204,156,57,19,140,49,28,56,112,0,193,193,193,152,49,99,6,134,15,31,14,77,77,77,156,62,125,26,223,127,255,125,133,242,196, -29,239,214,173,27,134,14,29,10,7,7,7,52,106,212,8,238,238,238,50,237,143,37,202,232,209,163,177,119,239,94,216,216,216,64,77,77,13,87,174,92,1,0,88,88,88,96,221,186,117,8,10,10,66,126,126,62,206,159,63,15,224,147,16,199,207,63,255,140,33,67,134,96,238, -220,185,248,225,135,31,80,191,126,125,48,198,112,229,202,21,140,24,49,2,183,110,221,226,239,67,245,227,143,63,98,228,200,145,50,61,145,19,215,78,119,119,119,120,121,121,193,201,201,9,118,118,118,66,179,34,209,254,228,178,251,227,199,143,232,211,167,15, -98,99,99,49,110,220,56,140,27,55,14,158,158,158,184,118,237,90,165,124,93,191,126,125,108,220,184,17,221,186,117,131,161,161,33,140,140,140,16,18,18,194,217,166,46,93,186,96,216,176,97,104,218,180,41,26,54,108,8,79,79,79,161,7,38,127,255,253,55,108,109, -109,1,0,29,58,116,192,55,223,124,131,27,55,110,224,247,223,127,71,100,100,36,74,75,75,209,190,125,123,116,234,212,73,226,249,92,117,16,181,124,13,75,30,4,51,241,147,147,147,249,91,17,11,110,95,156,157,157,205,255,91,112,253,106,232,208,161,66,127,75, -59,126,224,192,1,22,27,27,203,114,115,115,217,250,245,235,133,214,82,228,129,199,227,137,181,149,49,198,82,83,83,249,219,50,151,83,88,88,88,97,125,45,63,63,191,194,54,196,89,89,89,114,217,33,169,157,229,59,39,228,228,228,136,221,14,90,176,63,185,236, -86,37,73,73,73,236,246,237,219,21,236,231,106,211,199,143,31,197,238,246,81,190,213,114,122,122,186,204,245,75,58,159,171,14,162,102,162,161,170,64,104,97,97,81,225,152,232,134,109,229,235,87,247,239,223,71,139,22,45,42,60,246,150,116,28,248,244,50,99, -159,62,125,208,166,77,27,60,127,254,28,87,175,94,85,200,78,53,53,53,177,182,150,223,50,138,162,173,173,45,118,157,76,16,121,85,99,184,218,9,128,255,68,79,90,127,114,217,173,74,44,45,45,43,236,110,42,173,77,245,235,215,151,88,94,189,122,245,228,170,95, -210,249,92,117,16,53,19,165,238,214,144,155,155,139,39,79,158,136,149,254,226,226,216,177,99,232,217,179,103,133,192,33,233,120,57,137,137,137,72,78,78,70,171,86,173,42,4,146,154,132,180,118,82,155,8,66,5,1,139,32,8,66,149,208,110,13,4,65,80,192,34,8, -130,160,128,69,16,4,5,44,130,32,8,10,88,4,65,16,20,176,8,130,160,128,69,16,4,65,1,139,32,8,130,2,22,65,16,20,176,8,130,32,40,96,17,4,65,80,192,34,8,130,2,22,65,16,4,5,44,130,32,8,165,6,172,148,148,20,172,94,189,26,107,215,174,197,254,253,251,249,123, -134,3,159,246,65,63,122,244,168,208,185,91,182,108,129,170,118,172,145,164,234,44,15,85,173,236,92,29,85,135,149,209,143,138,80,25,21,113,85,218,28,29,29,141,254,253,251,99,255,254,253,159,205,39,138,140,19,174,62,81,229,184,99,140,33,53,53,181,122,6, -172,183,111,223,226,215,95,127,69,90,90,26,66,67,67,209,165,75,23,204,158,61,27,0,208,184,113,99,248,251,251,227,246,237,219,0,128,57,115,230,32,59,59,91,161,253,213,101,65,84,213,89,17,170,90,217,185,58,170,14,43,163,31,229,65,94,245,237,170,182,217, -223,223,31,110,110,110,112,117,117,253,108,62,81,100,156,112,245,137,42,199,221,254,253,251,209,184,113,99,148,148,148,40,60,22,20,69,166,45,146,45,45,45,177,110,221,58,0,64,70,70,6,186,116,233,130,35,71,142,96,220,184,113,216,180,105,19,166,77,155,134, -53,107,214,224,254,253,251,56,116,232,144,202,156,42,170,234,76,212,140,126,84,134,250,182,42,109,78,73,73,193,244,233,211,43,40,54,145,31,37,215,219,164,73,19,133,148,188,43,171,18,47,119,75,141,141,141,177,120,241,98,190,202,238,192,129,3,97,101,101, -133,65,131,6,97,251,246,237,208,210,210,18,123,157,56,133,222,29,59,118,192,215,215,23,189,123,247,134,131,131,3,95,195,80,22,85,103,73,215,74,82,2,22,69,146,178,179,60,74,203,149,85,29,22,167,18,45,169,93,229,72,83,106,22,167,102,45,106,187,96,63,74, -82,176,22,189,189,16,188,254,210,165,75,24,62,124,56,255,151,210,219,219,27,23,47,94,20,107,187,52,245,109,73,253,200,101,179,183,183,55,90,182,108,201,255,183,122,245,106,137,229,60,127,254,28,67,134,12,193,168,81,163,48,125,250,244,10,109,243,243,243, -67,84,84,20,126,250,233,39,4,6,6,74,244,139,180,114,184,198,142,36,159,74,26,39,226,234,18,103,147,96,159,200,58,238,158,63,127,46,81,157,93,214,122,223,190,125,139,237,219,183,115,126,183,197,141,43,209,177,160,232,253,40,39,145,145,145,172,85,171,86, -66,199,110,220,184,33,116,108,217,178,101,76,79,79,143,165,164,164,136,45,67,146,66,239,210,165,75,89,199,142,29,89,97,97,33,91,179,102,13,27,53,106,148,204,170,206,226,174,229,82,14,22,84,62,150,164,144,44,143,210,114,101,85,135,37,169,68,139,107,151, -32,210,148,154,197,169,89,139,218,46,216,143,226,20,172,69,17,189,158,199,227,49,79,79,79,182,125,251,118,246,242,229,75,102,109,109,205,10,11,11,197,218,46,77,125,91,82,63,114,217,92,80,80,192,114,114,114,88,88,88,24,115,117,117,101,185,185,185,18,203, -137,138,138,98,218,218,218,44,56,56,152,229,229,229,137,85,36,106,223,190,61,59,117,234,20,203,202,202,146,232,23,105,229,112,141,29,113,253,194,53,78,68,235,146,100,147,96,159,200,58,238,184,212,217,101,173,87,48,38,72,234,119,113,227,74,112,44,168, -84,249,89,148,211,167,79,163,125,251,246,0,128,55,111,222,96,251,246,237,24,61,122,52,252,252,252,196,158,207,165,232,219,187,119,111,104,107,107,195,214,214,22,69,69,69,50,171,58,139,187,150,171,30,65,36,41,36,203,163,180,92,89,213,97,46,149,104,209, -118,137,34,175,82,179,56,149,232,114,196,41,88,159,60,121,18,38,38,38,48,49,49,193,201,147,39,43,92,175,166,166,134,253,251,247,99,197,138,21,240,241,241,129,183,183,55,95,4,68,212,118,105,234,219,146,250,145,203,230,242,219,9,111,111,111,252,254,251, -239,208,215,215,231,244,189,189,189,61,122,246,236,9,61,61,189,10,109,51,52,52,132,166,166,38,140,141,141,81,175,94,61,78,191,112,149,195,53,118,196,245,139,180,113,34,88,23,151,77,229,200,163,118,45,73,157,93,145,122,37,245,187,184,113,37,58,22,84,122, -75,88,84,84,132,132,132,4,44,88,176,0,191,253,246,27,22,45,90,4,0,152,57,115,38,252,252,252,176,101,203,22,132,135,135,35,44,44,172,194,181,92,138,190,162,247,223,242,168,58,139,94,203,85,143,32,146,20,146,229,81,90,174,172,234,48,151,74,180,180,53,9, -46,165,102,113,106,214,226,84,162,5,251,91,84,193,122,192,128,1,136,137,137,65,76,76,12,6,12,24,32,246,250,70,141,26,97,209,162,69,8,9,9,193,212,169,83,37,218,163,168,207,184,108,6,128,201,147,39,99,234,212,169,112,113,113,145,107,140,137,182,77,81,191, -136,150,195,53,118,196,181,91,218,56,17,60,159,203,38,89,203,19,68,146,58,187,34,245,74,234,119,113,227,170,74,158,18,2,192,195,135,15,161,171,171,11,119,119,119,196,197,197,33,34,34,2,141,26,53,194,165,75,151,16,27,27,139,89,179,102,65,71,71,135,191, -0,95,90,90,90,97,145,206,210,210,18,182,182,182,176,177,177,193,145,35,71,196,206,28,0,97,85,103,87,87,87,254,47,186,172,139,129,178,212,83,174,144,108,103,103,135,229,203,151,243,239,205,5,149,150,93,93,93,133,214,182,206,157,59,7,71,71,71,172,92,185, -18,223,127,255,189,196,186,4,85,135,157,157,157,37,46,54,143,24,49,2,109,219,182,229,107,250,181,106,213,74,72,230,93,81,70,143,30,141,248,248,120,216,216,216,96,219,182,109,240,241,241,169,96,187,32,115,231,206,69,102,102,38,234,215,175,15,123,123,123, -36,38,38,66,91,91,155,63,123,208,214,214,150,120,125,106,106,42,38,78,156,88,41,253,63,73,253,200,101,243,190,125,251,112,236,216,49,4,6,6,194,198,198,6,61,122,244,144,217,247,162,109,83,212,47,162,229,112,141,29,113,200,58,78,100,181,73,158,242,202, -213,217,155,54,109,138,141,27,55,10,173,71,201,91,175,164,126,23,55,174,148,245,78,69,149,33,171,162,111,101,85,157,101,173,71,146,66,178,60,74,203,149,85,29,86,68,37,90,17,53,107,73,42,209,92,10,214,92,109,207,203,203,99,22,22,22,236,205,155,55,42,27, -27,210,108,86,134,106,180,178,253,34,105,236,72,66,30,117,106,89,108,146,86,158,52,117,118,89,234,21,183,174,45,169,223,165,141,171,106,163,252,44,14,89,21,125,43,171,234,44,107,61,146,20,146,229,81,90,174,172,234,176,188,42,209,178,32,78,205,90,146, -74,116,57,226,20,172,185,174,223,183,111,31,122,247,238,141,134,13,27,170,108,108,72,179,185,50,190,87,149,95,36,141,29,73,200,51,59,149,197,38,121,202,147,85,228,86,150,122,37,245,187,180,113,37,247,216,174,174,66,170,181,69,213,185,182,18,21,21,5,43, -43,171,74,45,160,18,85,143,162,234,236,130,228,228,228,224,217,179,103,232,208,161,67,149,219,79,202,207,4,65,212,24,232,149,113,130,32,106,79,192,138,139,139,195,234,213,171,249,255,246,239,223,47,148,116,153,148,148,164,180,100,226,218,146,152,252, -226,197,11,204,157,59,23,67,134,12,193,180,105,211,16,17,17,161,212,54,214,214,196,86,130,168,116,192,138,142,142,198,222,189,123,145,158,158,142,244,244,116,100,102,102,10,37,93,102,100,100,8,37,19,87,38,185,177,54,36,38,255,249,231,159,104,215,174, -29,10,11,11,209,175,95,63,24,26,26,162,127,255,254,88,181,106,149,210,218,88,91,19,91,9,66,26,50,61,37,108,222,188,57,214,175,95,207,255,59,59,59,91,98,210,101,101,147,27,107,50,111,222,188,193,132,9,19,112,229,202,21,116,238,220,153,127,124,242,228, -201,104,211,166,13,58,117,234,36,243,147,153,207,197,231,76,108,37,136,74,207,176,128,79,111,76,79,159,62,29,211,167,79,199,202,149,43,43,36,93,150,35,154,220,168,72,50,42,80,115,19,147,79,159,62,141,94,189,122,9,5,43,0,176,179,179,195,228,201,147,133, -246,14,19,215,198,204,204,76,244,232,209,3,145,145,145,184,125,251,54,60,61,61,145,147,147,35,179,221,53,62,177,149,32,100,88,179,224,228,252,249,243,172,121,243,230,108,235,214,173,108,235,214,173,236,216,177,99,66,73,151,143,31,63,102,142,142,142,252, -151,196,202,147,27,21,73,70,173,233,137,201,75,151,46,101,83,166,76,17,219,143,155,54,109,98,67,135,14,229,108,35,99,140,93,190,124,153,217,217,217,49,59,59,59,22,28,28,252,69,37,182,18,132,82,94,28,181,181,181,21,154,13,221,186,117,75,236,121,130,201, -141,7,15,30,228,39,69,150,31,123,254,252,57,154,55,111,206,79,176,20,71,121,98,114,249,44,196,214,214,182,66,98,114,249,103,19,39,78,4,240,41,185,119,226,196,137,24,57,114,36,142,30,61,42,148,144,41,88,119,94,94,30,63,65,20,0,102,204,152,129,5,11,22, -84,176,65,48,233,179,188,252,224,224,96,232,233,233,9,37,177,138,110,197,210,166,77,27,204,157,59,23,197,197,197,21,182,217,185,124,249,50,186,117,235,198,217,70,53,53,53,244,233,211,7,134,134,134,208,208,208,224,159,35,152,216,202,101,55,240,191,196, -86,224,211,214,41,130,185,95,130,253,46,169,141,63,252,240,3,255,124,73,253,40,152,216,42,10,189,151,69,124,246,91,66,69,144,39,225,89,144,154,156,152,252,237,183,223,194,200,200,8,99,199,142,69,70,70,6,0,160,184,184,24,115,231,206,197,211,167,79,249, -73,194,146,218,8,0,203,151,47,135,181,181,53,234,215,175,207,95,168,255,82,18,91,9,226,179,5,44,121,18,158,5,169,201,137,201,117,234,212,193,197,139,23,81,82,82,2,115,115,115,56,56,56,192,200,200,8,55,110,220,64,104,104,40,140,140,140,56,219,248,247, -223,127,227,247,223,127,199,239,191,255,142,227,199,143,99,239,222,189,252,109,169,191,136,196,86,130,144,130,202,223,116,207,206,206,70,73,73,137,220,57,69,239,223,191,135,177,177,49,52,52,132,239,90,179,178,178,160,174,174,14,3,3,3,161,227,249,249, -249,40,43,43,67,221,186,117,165,214,157,153,153,9,77,77,77,169,57,82,121,121,121,40,43,43,83,40,63,45,57,57,25,175,94,189,130,185,185,57,154,52,105,34,87,27,37,33,205,238,7,15,30,96,204,152,49,120,242,228,9,82,82,82,96,106,106,10,117,117,117,185,218, -120,247,238,93,76,152,48,1,15,30,60,144,218,143,31,62,124,128,158,158,30,116,117,117,233,155,68,84,9,42,79,126,86,52,25,181,166,39,38,151,207,92,20,105,163,36,106,123,98,43,65,124,246,25,22,81,117,212,244,196,86,130,160,128,69,16,68,173,129,146,159,9, -130,160,128,69,16,4,65,1,139,32,8,10,88,4,65,16,20,176,8,130,32,40,96,17,4,65,1,139,32,8,130,2,22,65,16,4,5,44,130,32,40,96,17,4,65,80,192,34,8,130,160,128,69,16,4,5,44,130,32,8,10,88,4,65,16,74,15,88,49,49,49,152,60,121,50,198,140,25,131,115,231,206, -85,27,227,197,169,82,151,19,25,25,41,116,238,179,103,207,80,80,80,64,30,151,147,202,170,124,11,94,175,40,202,82,4,191,117,235,22,174,95,191,94,37,253,86,85,227,47,37,37,5,171,87,175,198,218,181,107,177,127,255,126,190,86,192,23,27,176,138,139,139,225, -225,225,1,83,83,83,116,237,218,21,75,151,46,229,11,65,124,110,196,169,82,3,192,199,143,31,49,121,242,100,161,115,183,108,217,130,176,176,48,138,64,114,194,165,242,205,69,185,10,180,224,245,138,162,44,69,240,107,215,174,225,252,249,243,42,239,179,170, -28,127,111,223,190,197,175,191,254,138,180,180,52,254,254,255,179,103,207,174,189,3,82,154,14,88,114,114,50,211,213,213,101,233,233,233,213,78,163,236,252,249,243,172,127,255,254,21,142,159,58,117,138,1,96,55,110,220,96,140,49,150,149,149,197,244,245, -245,217,220,185,115,73,216,77,78,178,178,178,88,68,68,68,5,13,74,105,168,171,171,179,130,130,2,161,235,21,37,58,58,90,230,122,185,8,12,12,100,62,62,62,42,239,179,170,28,127,130,58,146,140,49,246,225,195,7,214,188,121,115,118,248,240,225,90,57,30,165, -206,176,44,44,44,48,101,202,20,56,59,59,99,205,154,53,200,207,207,7,0,92,186,116,9,195,135,15,71,249,134,165,222,222,222,184,120,241,162,88,117,100,121,21,137,197,169,13,123,123,123,163,101,203,150,252,127,171,87,175,6,80,81,149,26,0,130,131,131,225, -238,238,206,87,140,57,124,248,48,154,53,107,134,224,224,224,10,237,83,134,90,114,249,47,168,181,181,53,220,220,220,176,117,235,86,120,123,123,75,44,67,146,130,245,127,255,251,95,120,121,121,161,83,167,78,112,112,112,192,153,51,103,208,178,101,75,180, -107,215,14,233,233,233,21,110,181,68,213,151,37,217,39,173,92,174,62,144,164,242,205,213,14,65,21,232,23,47,94,8,93,175,136,162,118,57,226,212,178,37,141,67,89,144,164,14,46,169,93,178,218,41,203,248,147,84,135,232,120,145,228,103,73,24,27,27,99,241, -226,197,252,246,136,107,163,168,82,186,42,191,159,85,62,195,42,39,52,52,148,245,238,221,155,181,106,213,138,101,103,103,51,30,143,199,60,61,61,217,246,237,219,217,203,151,47,153,181,181,53,43,44,44,20,171,142,44,143,34,177,36,181,225,130,130,2,150,147, -147,195,194,194,194,152,171,171,43,203,205,205,21,171,74,205,24,99,142,142,142,44,42,42,138,153,153,153,177,164,164,36,214,188,121,115,22,17,17,193,204,204,204,88,70,70,134,210,213,146,239,222,189,203,140,141,141,217,157,59,119,88,118,118,54,27,63,126, -60,127,230,39,90,6,151,130,245,206,157,59,153,139,139,11,203,205,205,101,35,71,142,100,93,186,116,97,5,5,5,172,87,175,94,21,126,49,197,169,47,75,178,79,90,185,92,125,32,73,229,155,171,29,130,42,208,130,215,43,170,168,205,165,150,45,105,28,74,155,97,73, -26,103,92,237,146,102,103,57,210,198,31,87,29,162,227,69,156,159,185,102,88,140,49,118,227,198,13,214,170,85,43,137,109,20,85,74,87,213,247,243,179,41,63,151,150,150,162,71,143,30,232,222,189,59,122,245,234,133,35,71,142,192,219,219,27,251,247,239,71, -167,78,157,112,245,234,85,120,123,123,67,91,91,27,0,196,170,35,203,170,72,44,73,109,184,77,155,54,200,205,205,133,183,183,55,126,255,253,119,190,218,139,168,42,245,219,183,111,145,159,159,15,55,55,55,140,25,51,6,99,199,142,133,158,158,30,58,117,234,132, -110,221,186,33,36,36,4,67,134,12,17,106,95,101,213,146,27,55,110,140,190,125,251,194,221,221,157,255,107,19,16,16,32,182,12,46,5,235,114,91,244,245,245,97,111,111,15,7,7,7,232,232,232,192,218,218,26,197,197,197,66,54,139,83,95,222,189,123,183,88,251, -236,237,237,165,150,203,213,7,226,90,36,126,204,0,0,25,220,73,68,65,84,224,106,135,160,2,120,114,114,50,255,26,69,21,181,1,110,181,108,73,227,144,11,73,227,172,172,172,140,211,63,162,118,158,60,121,18,83,166,76,1,0,236,218,181,11,29,59,118,148,58,254, -10,10,10,56,235,16,28,47,92,42,219,146,56,125,250,52,218,183,111,47,177,141,162,74,233,170,252,126,86,249,162,251,153,51,103,224,238,238,142,236,236,108,48,198,160,173,173,205,87,41,110,212,168,17,22,45,90,132,144,144,16,190,170,49,32,94,29,89,86,69, -98,46,197,232,201,147,39,99,234,212,169,112,113,113,145,104,111,112,112,48,60,61,61,1,0,211,166,77,67,104,104,40,63,160,121,122,122,138,189,45,172,172,90,114,139,22,45,112,227,198,13,164,165,165,241,251,76,168,147,5,202,224,82,176,6,192,239,91,73,253, -88,142,56,245,101,46,53,103,105,229,114,245,129,56,164,181,67,28,138,42,106,3,220,106,217,146,198,161,40,217,217,217,124,153,56,73,227,76,90,187,68,237,28,48,96,0,98,98,98,16,19,19,131,1,3,6,200,52,254,228,169,67,86,149,237,162,162,34,36,36,36,96,193, -130,5,248,237,183,223,176,104,209,34,137,109,20,85,74,175,202,239,167,202,3,214,128,1,3,224,226,226,130,134,13,27,194,198,198,6,105,105,105,252,251,109,0,72,77,77,197,196,137,19,165,106,230,201,170,72,44,73,109,120,223,190,125,56,118,236,24,2,3,3,97, -99,99,131,30,61,122,72,12,88,229,191,6,77,154,52,193,216,177,99,49,98,196,8,254,128,185,118,237,154,194,182,73,82,75,238,214,173,27,134,14,29,10,7,7,7,184,186,186,34,57,57,89,40,64,8,194,165,96,45,15,226,212,151,21,85,172,150,167,15,42,211,142,202,216, -39,73,45,91,150,113,88,30,24,15,28,56,128,65,131,6,113,142,51,121,219,165,173,173,13,19,19,19,152,152,152,64,91,91,91,166,241,39,79,29,178,168,108,63,124,248,16,186,186,186,112,119,119,71,92,92,28,34,34,34,208,168,81,35,137,109,20,85,74,175,202,239,103, -149,173,97,197,199,199,179,168,168,40,86,90,90,202,63,150,151,151,199,44,44,44,216,155,55,111,56,175,141,138,138,98,45,90,180,224,63,117,20,44,131,235,233,148,50,158,76,22,20,20,40,221,182,220,220,92,150,149,149,37,116,236,192,129,3,44,54,54,150,229, -230,230,178,245,235,215,179,89,179,102,113,150,145,153,153,201,114,114,114,42,221,190,244,244,116,150,159,159,47,213,62,101,247,65,101,218,33,175,125,130,164,166,166,178,146,146,18,161,99,210,198,97,97,97,33,187,125,251,54,75,77,77,149,121,156,41,203, -63,92,227,79,158,58,196,249,89,158,39,189,162,109,204,203,203,99,217,217,217,159,253,251,169,146,53,44,0,104,220,184,113,133,99,251,246,237,67,239,222,189,209,176,97,67,153,3,164,172,138,196,138,42,70,139,162,163,163,163,116,219,196,221,159,127,248,240, -1,125,250,244,65,155,54,109,240,252,249,115,92,189,122,149,179,12,73,10,214,242,34,78,125,185,50,235,7,178,246,65,101,218,81,25,251,196,169,101,75,27,135,218,218,218,104,223,190,189,92,227,76,89,254,225,26,127,242,212,81,25,149,109,113,109,20,167,148, -254,57,190,159,242,82,41,33,213,168,168,40,88,89,89,193,220,220,156,243,60,101,40,18,171,10,101,218,150,152,152,136,228,228,100,180,106,213,74,166,133,223,218,216,7,159,3,89,199,33,81,243,253,79,202,207,4,65,212,24,40,249,153,32,8,10,88,4,65,16,20,176, -8,130,160,128,69,16,4,65,1,139,32,8,130,2,22,65,16,20,176,8,130,32,40,96,17,4,65,80,192,34,8,130,2,22,65,16,4,5,44,130,32,8,10,88,4,65,80,192,34,8,130,160,128,69,16,4,33,15,234,1,130,106,9,28,188,120,241,2,107,214,172,193,174,93,187,112,253,250,117,24, -25,25,73,220,48,141,199,227,33,45,45,77,234,70,109,178,158,39,142,164,164,36,172,93,187,150,191,29,173,50,56,113,226,4,18,18,18,208,172,89,179,42,115,64,116,116,52,198,143,31,143,194,194,66,180,105,211,70,169,118,165,164,164,96,219,182,109,136,136,136, -64,76,76,12,12,12,12,248,27,193,61,125,250,20,65,65,65,112,117,117,229,159,123,224,192,1,180,111,223,94,226,246,206,181,17,174,62,82,5,5,5,5,216,176,97,3,30,62,124,8,109,109,109,185,55,76,84,21,113,113,113,216,179,103,15,194,194,194,16,22,22,198,23,150, -168,12,17,17,17,184,122,245,106,165,203,145,123,134,245,231,159,127,162,93,187,118,40,44,44,68,191,126,253,96,104,104,136,254,253,251,99,213,170,85,98,207,151,85,237,183,50,170,192,242,168,16,75,163,92,165,248,246,237,219,136,138,138,170,210,129,226, -239,239,15,55,55,55,126,224,80,166,93,92,170,192,141,27,55,134,191,191,63,110,223,190,13,0,152,51,103,14,178,179,179,191,168,96,37,173,143,84,65,94,94,30,150,47,95,142,156,156,28,124,255,253,247,21,246,166,255,92,72,82,81,175,12,47,94,188,64,104,104, -168,114,13,149,182,135,242,235,215,175,153,129,129,1,11,11,11,19,58,254,234,213,43,102,100,100,196,66,67,67,57,213,130,101,85,21,150,23,121,84,136,101,85,41,246,241,241,97,129,129,129,85,186,71,117,231,206,157,197,246,161,50,236,146,166,10,124,246,236, -89,214,166,77,27,22,20,20,196,28,29,29,89,81,81,209,23,167,108,93,213,202,201,105,105,105,204,208,208,144,49,198,216,190,125,251,216,192,129,3,171,181,138,122,101,56,120,240,32,27,61,122,116,213,42,63,159,62,125,26,189,122,245,66,231,206,157,133,142, -219,217,217,97,242,228,201,56,122,244,104,5,117,88,81,181,96,73,170,200,130,231,73,82,213,149,164,144,203,5,151,114,239,166,77,155,0,124,210,87,243,246,246,22,82,41,46,46,46,70,76,76,12,122,244,232,1,123,123,123,68,70,70,2,16,175,86,44,218,102,81,53, -93,81,196,149,225,231,231,135,168,168,40,252,244,211,79,8,12,12,20,58,95,22,187,36,41,23,75,66,84,21,120,224,192,129,176,178,178,194,160,65,131,176,125,251,118,104,105,105,85,184,166,38,41,99,75,243,129,44,51,121,209,62,146,100,203,146,37,75,112,232, -208,33,0,159,182,104,30,56,112,160,204,62,41,41,41,193,230,205,155,177,99,199,14,44,92,184,144,127,92,220,181,226,190,23,226,218,89,25,69,237,114,68,85,212,229,241,13,87,93,60,30,15,19,38,76,224,75,138,169,116,134,181,116,233,82,54,101,202,20,177,159, -109,218,180,137,13,29,58,180,130,58,172,160,218,47,151,42,178,224,121,226,84,117,185,20,114,37,205,176,164,41,247,206,155,55,79,232,23,69,80,165,216,199,199,135,117,238,220,153,229,231,231,179,128,128,0,54,118,236,88,137,106,197,162,109,22,85,211,21, -68,82,25,153,153,153,172,125,251,246,236,212,169,83,21,84,100,164,217,37,73,129,87,86,85,224,114,150,45,91,198,244,244,244,88,74,74,138,68,69,157,154,162,140,205,229,131,99,199,142,49,51,51,51,86,92,92,44,115,31,113,217,242,232,209,35,214,168,81,35,86, -92,92,204,6,15,30,204,118,239,222,45,147,79,210,210,210,152,182,182,54,155,61,123,54,235,208,161,3,27,49,98,4,43,45,45,149,120,173,184,239,133,104,59,21,85,212,22,157,97,137,170,168,203,227,27,113,117,29,60,120,144,141,26,53,138,121,121,121,177,239,191, -255,94,46,53,38,133,103,88,109,218,180,65,104,104,104,5,229,97,0,184,124,249,50,95,8,179,92,29,86,84,141,227,206,157,59,124,85,228,186,117,235,242,127,89,197,33,168,170,91,84,84,36,164,46,108,96,96,0,95,95,95,169,1,88,222,107,4,85,138,1,160,79,159,62, -208,213,213,133,163,163,35,242,243,243,133,212,138,157,156,156,248,106,197,162,109,158,48,97,2,18,19,19,49,114,228,72,33,181,99,0,18,203,48,52,52,132,166,166,38,140,141,141,43,168,144,72,179,75,80,129,215,203,203,139,175,192,43,203,140,185,92,65,230, -205,155,55,216,190,125,59,70,143,30,13,63,63,63,137,215,148,171,2,235,232,232,192,207,207,79,232,215,83,176,15,36,181,83,218,24,16,44,67,154,255,4,21,172,61,60,60,132,20,172,185,124,208,173,91,55,172,89,179,6,154,154,154,50,247,17,151,45,46,46,46,104, -213,170,21,252,252,252,112,247,238,93,140,31,63,94,102,159,232,232,232,96,227,198,141,136,136,136,64,116,116,52,66,66,66,56,175,21,253,94,136,182,147,107,140,138,94,203,69,185,138,250,244,233,211,249,122,145,242,248,70,92,93,247,239,223,199,209,163,71, -177,109,219,54,168,171,171,171,126,209,253,219,111,191,133,145,145,17,198,142,29,139,140,140,12,0,64,113,113,49,230,206,157,139,167,79,159,242,149,118,37,41,247,74,83,69,22,50,70,164,12,69,212,133,185,174,49,51,51,67,108,108,44,127,250,43,78,50,74,212, -6,89,213,138,197,169,233,202,82,134,204,142,18,177,139,75,129,87,20,113,170,192,0,48,115,230,76,248,249,249,97,203,150,45,8,15,15,71,88,88,152,216,235,107,138,50,54,151,15,234,212,169,3,13,13,201,170,118,226,250,72,154,45,139,23,47,198,230,205,155,225, -235,235,11,45,45,45,185,124,2,0,145,145,145,120,251,246,45,108,108,108,56,175,149,214,78,121,21,181,47,92,184,128,194,194,66,185,199,157,188,170,216,0,208,182,109,91,204,159,63,31,99,198,140,65,105,105,169,234,3,86,157,58,117,112,241,226,69,148,148,148, -192,220,220,28,14,14,14,48,50,50,194,141,27,55,16,26,26,10,35,35,35,206,235,229,81,69,22,69,17,117,97,174,107,70,143,30,141,248,248,120,216,216,216,96,219,182,109,240,241,241,145,90,158,172,106,197,226,212,116,229,45,67,30,36,41,240,138,34,73,21,248, -210,165,75,136,141,141,197,172,89,179,160,163,163,131,77,155,54,97,218,180,105,98,7,85,77,81,198,230,242,65,112,112,48,102,204,152,129,146,146,18,153,251,72,154,45,238,238,238,24,55,110,28,38,78,156,40,151,79,178,179,179,209,160,65,3,76,155,54,13,123, -247,238,69,243,230,205,101,190,86,92,59,229,25,95,113,113,113,24,48,96,0,238,223,191,47,247,152,83,212,55,75,151,46,69,253,250,245,149,242,244,85,46,153,175,228,228,100,188,122,245,10,230,230,230,104,210,164,137,204,149,28,60,120,16,93,187,118,133,165, -165,37,118,237,218,197,127,148,44,43,89,89,89,80,87,87,135,129,129,65,165,175,97,140,33,53,53,21,166,166,166,114,77,81,243,242,242,80,86,86,198,41,32,153,159,159,143,178,178,50,212,173,91,87,225,50,228,37,59,59,27,37,37,37,42,123,119,232,193,131,7,24, -51,102,12,158,60,121,130,148,148,20,153,250,77,92,59,229,29,3,138,248,92,154,15,74,74,74,100,186,37,148,199,150,210,210,210,10,51,183,202,248,68,214,107,197,181,83,150,241,181,102,205,26,92,184,112,1,255,254,251,175,194,99,66,81,223,40,3,13,121,78,46, -143,224,242,34,175,42,178,40,138,168,240,74,186,70,77,77,77,161,151,245,100,121,185,85,146,154,174,60,101,200,75,85,42,240,214,4,101,108,46,31,40,18,172,164,217,34,238,54,179,50,62,145,245,90,113,237,148,101,124,69,71,71,99,222,188,121,149,26,7,202,82, -197,86,249,12,171,50,212,84,85,228,47,29,82,198,38,170,19,164,252,76,16,68,141,129,146,159,9,130,168,49,200,188,134,245,232,209,35,28,58,116,8,175,95,191,134,185,185,57,190,251,238,59,124,253,245,215,42,51,44,41,41,9,59,119,238,68,96,96,32,78,156,56, -1,61,61,61,244,239,223,95,225,242,206,156,57,131,152,152,24,161,181,130,41,83,166,32,61,61,93,236,235,13,213,177,79,164,173,77,92,190,124,25,115,230,204,81,184,140,91,183,110,161,168,168,8,221,187,119,151,251,218,242,119,138,254,243,159,255,136,253,60, -37,37,5,135,14,29,66,157,58,117,208,160,65,3,116,237,218,85,161,36,115,105,245,168,178,223,196,249,59,59,59,91,234,216,228,241,120,50,141,51,101,244,145,50,198,129,184,62,150,165,13,170,248,142,41,52,195,218,183,111,31,190,250,234,43,148,150,150,162, -95,191,126,176,178,178,194,209,163,71,85,250,5,20,76,110,86,70,82,114,118,118,54,210,211,211,17,24,24,136,132,132,4,100,100,100,84,42,249,250,115,244,9,23,239,222,189,195,165,75,151,42,85,198,181,107,215,112,254,252,121,133,174,149,150,232,170,172,36, -99,101,39,212,202,218,111,146,252,45,203,216,148,117,156,41,163,143,148,49,14,196,245,177,44,109,80,246,119,76,161,25,214,243,231,207,49,99,198,12,132,132,132,40,101,225,245,115,81,158,243,244,251,239,191,99,241,226,197,176,177,177,65,118,118,54,156, -157,157,37,190,244,90,219,251,164,170,177,180,180,196,186,117,235,248,63,72,93,186,116,193,145,35,71,100,202,15,253,156,112,249,91,150,236,139,97,195,134,201,60,206,170,107,31,201,210,6,101,126,199,20,158,97,157,56,113,2,223,126,251,173,196,47,166,164, -100,72,209,196,73,73,201,162,178,38,55,203,154,148,44,15,130,201,215,210,18,107,229,233,19,89,19,81,229,73,46,21,119,238,254,253,251,97,107,107,11,87,87,87,60,123,246,140,95,255,165,75,151,48,124,248,112,148,63,79,241,246,246,198,197,139,23,229,238,31, -73,182,240,120,60,44,92,184,16,54,54,54,176,179,179,195,157,59,119,132,110,29,100,73,116,21,77,50,22,151,248,43,79,61,202,232,55,69,191,3,162,99,147,107,51,0,105,9,218,92,125,36,105,188,75,106,143,184,100,127,89,147,169,69,251,88,116,67,3,85,127,199, -20,14,88,153,153,153,252,124,54,81,98,99,99,49,109,218,52,28,57,114,4,183,110,221,66,68,68,4,226,227,227,1,124,218,168,236,226,197,139,252,6,15,27,54,12,1,1,1,40,41,41,193,138,21,43,240,237,183,223,114,94,47,174,225,151,47,95,198,143,63,254,136,173,91, -183,34,40,40,8,27,55,110,196,249,243,231,113,233,210,37,108,222,188,25,127,255,253,183,92,157,153,159,159,143,184,184,56,254,175,217,221,187,119,113,237,218,53,180,111,223,30,27,54,108,192,221,187,119,97,100,100,84,97,138,205,213,39,146,236,122,255,254, -61,194,195,195,113,225,194,5,76,154,52,9,219,182,109,171,208,71,242,244,231,227,199,143,225,231,231,135,211,167,79,227,230,205,155,252,32,14,0,125,251,246,197,135,15,31,176,115,231,78,196,197,197,225,236,217,179,232,213,171,151,92,125,195,101,203,206, -157,59,249,199,46,92,248,191,246,206,63,166,170,242,143,227,111,134,36,210,47,210,105,132,144,226,212,5,66,109,4,169,83,66,32,71,206,31,181,208,165,78,91,179,17,40,191,204,139,109,228,162,82,87,54,91,91,86,210,31,96,169,232,63,50,106,245,205,0,39,234, -52,178,233,4,25,27,141,41,166,98,2,97,92,47,151,162,139,222,231,251,7,187,103,231,158,123,206,115,159,231,220,3,34,125,94,27,27,28,46,207,121,206,231,60,207,195,61,112,94,231,253,63,229,38,71,198,24,178,179,179,241,215,95,127,9,89,4,209,209,209,184,117, -235,22,234,235,235,177,119,239,94,28,59,118,12,63,252,240,3,222,127,255,125,92,184,112,65,120,63,86,213,205,204,28,208,27,155,218,125,170,199,89,117,117,53,82,83,83,81,83,83,35,164,103,121,106,100,52,174,120,199,211,221,221,141,206,206,78,229,114,237, -234,213,171,186,227,80,175,79,218,26,171,143,97,36,230,152,233,5,43,49,49,17,245,245,245,186,74,131,63,25,82,45,78,234,201,162,50,162,178,140,148,108,22,158,88,43,90,19,89,17,85,70,46,213,190,54,61,61,29,73,73,73,120,240,193,7,81,88,88,168,188,46,40, -40,8,21,21,21,216,185,115,39,108,54,27,242,242,242,164,239,123,226,245,229,228,201,147,40,44,44,196,147,79,62,137,248,248,120,197,122,144,21,93,61,146,177,145,248,43,186,31,171,234,102,102,14,232,141,77,237,62,213,240,4,109,94,141,140,198,149,153,227, -241,39,83,155,57,151,86,207,49,211,11,214,170,85,171,16,26,26,138,245,235,215,43,111,219,220,110,55,126,249,229,23,105,25,82,43,139,202,200,205,50,82,178,140,220,169,134,39,214,138,214,68,86,68,53,43,151,62,245,212,83,104,104,104,80,126,131,86,87,87, -123,189,118,218,180,105,216,182,109,27,234,235,235,21,65,221,95,109,28,14,135,114,23,51,175,47,115,230,204,65,85,85,21,238,222,189,139,238,238,110,92,189,122,21,128,152,232,170,39,25,27,137,191,162,251,177,178,110,122,245,225,157,111,145,243,170,134, -39,104,243,106,100,52,174,120,199,99,36,251,139,72,227,254,206,229,112,207,49,211,11,86,72,72,8,234,234,234,224,114,185,16,17,17,129,152,152,24,132,135,135,99,231,206,157,210,50,164,86,22,13,68,116,53,18,62,3,145,59,69,225,213,36,16,209,89,166,30,11, -23,46,196,170,85,171,48,107,214,44,196,197,197,193,233,116,250,188,166,171,171,11,217,217,217,8,15,15,7,96,44,190,122,6,255,190,125,251,240,242,203,47,251,237,203,219,111,191,13,187,221,142,240,240,112,204,152,49,3,215,175,95,87,190,199,19,93,141,36, -99,35,241,87,116,63,86,213,205,168,62,188,243,45,11,79,208,230,213,200,104,92,241,142,71,84,246,55,234,147,209,185,28,137,57,102,136,204,195,179,110,222,188,201,26,26,26,216,165,75,151,188,182,219,237,118,214,215,215,39,212,198,224,224,160,207,54,153, -159,215,226,116,58,189,30,126,183,107,215,46,182,112,225,194,17,123,180,172,81,77,180,253,146,65,166,30,189,189,189,204,233,116,250,108,239,239,239,103,17,17,17,236,218,181,107,126,107,51,48,48,192,126,253,245,87,214,213,213,37,213,151,158,158,30,246, -247,223,127,91,86,203,219,183,111,179,158,158,30,211,251,9,180,110,34,99,199,232,124,203,208,223,223,207,28,14,135,37,227,221,223,56,112,187,221,236,230,205,155,126,31,158,39,211,167,145,158,99,106,198,156,154,243,250,235,175,99,229,202,149,88,182,108, -217,127,250,22,130,61,123,246,224,252,249,243,56,112,224,0,213,134,198,206,152,169,19,185,132,99,148,198,198,70,68,70,70,114,255,187,69,16,247,27,180,96,17,4,113,223,64,242,51,65,16,99,111,193,106,106,106,194,230,205,155,241,202,43,175,32,55,55,55,96, -95,201,106,186,187,187,81,81,81,225,181,173,182,182,22,77,77,77,112,187,221,232,238,238,190,103,125,251,237,183,223,144,147,147,131,117,235,214,225,251,239,191,183,164,205,35,71,142,152,186,123,221,136,142,142,14,28,60,120,16,192,144,132,251,238,187, -239,142,120,157,154,155,155,177,101,203,22,100,101,101,97,211,166,77,168,173,173,21,58,78,209,243,107,245,56,56,123,246,44,78,157,58,53,226,117,250,227,143,63,252,158,159,150,150,22,220,184,113,195,103,251,161,67,135,148,219,67,100,104,109,109,197,210, -165,75,125,230,216,168,92,176,42,42,42,176,96,193,2,184,221,110,44,91,182,12,209,209,209,200,203,203,195,250,245,235,135,181,115,158,228,99,237,231,70,39,81,251,200,221,111,191,253,22,103,207,158,245,17,48,253,181,101,37,46,151,11,105,105,105,152,60, -121,50,82,82,82,240,222,123,239,41,247,11,5,210,15,171,83,170,127,255,253,119,229,89,237,118,187,221,178,84,109,81,134,83,46,246,212,217,106,17,55,16,89,60,16,68,82,207,59,58,58,144,158,158,174,220,159,229,161,172,172,76,185,55,75,6,94,66,249,72,226, -87,126,190,124,249,50,10,10,10,112,252,248,113,204,159,63,95,217,190,121,243,102,161,88,169,64,72,77,77,133,211,233,68,104,104,168,215,231,178,104,197,205,64,218,50,51,184,110,223,190,141,183,222,122,11,147,38,77,66,78,78,142,238,241,253,151,25,110,185, -216,83,103,25,9,121,44,208,209,209,129,140,140,12,156,60,121,18,147,39,79,14,168,173,206,206,78,228,231,231,35,57,57,121,116,191,195,170,174,174,70,102,102,166,215,98,5,12,61,63,58,49,49,209,235,173,166,136,124,170,39,163,234,137,175,234,228,227,21,43, -86,120,165,32,243,222,101,229,230,230,42,31,158,7,237,171,5,76,109,162,178,81,191,121,2,177,76,226,114,68,68,4,114,115,115,17,23,23,135,143,63,254,88,81,55,180,253,208,107,147,151,186,236,185,212,212,10,225,102,146,121,141,40,46,46,198,148,41,83,144, -150,150,166,220,140,169,39,202,138,38,22,243,46,111,135,75,46,86,215,185,173,173,205,75,224,181,178,86,70,117,200,203,203,67,124,124,188,242,177,107,215,46,225,57,32,59,214,180,204,159,63,31,107,214,172,193,11,47,188,160,68,244,105,47,15,69,230,172,54, -161,92,68,98,182,186,182,10,254,110,212,122,231,157,119,216,198,141,27,189,182,125,253,245,215,108,238,220,185,108,238,220,185,172,164,164,132,155,8,171,77,143,213,126,109,148,120,171,78,62,86,127,110,68,99,99,35,139,140,140,100,101,101,101,202,71,74, -74,10,43,43,43,243,74,152,86,183,197,235,183,219,237,102,25,25,25,236,203,47,191,100,151,46,93,98,83,167,78,101,3,3,3,66,233,190,122,156,56,113,130,45,94,188,152,61,243,204,51,204,225,112,120,245,195,168,77,94,234,178,94,26,180,108,50,175,154,211,167, -79,43,53,106,109,109,101,161,161,161,172,190,190,158,185,92,46,102,179,217,88,106,106,42,99,140,249,164,14,203,36,22,27,97,179,217,88,126,126,190,225,247,180,199,201,75,26,215,246,79,93,103,245,235,2,169,149,135,29,59,118,48,155,205,198,24,99,134,117, -248,231,159,127,88,95,95,31,59,115,230,12,123,250,233,167,153,211,233,20,158,3,70,219,141,82,207,213,252,244,211,79,44,35,35,131,49,198,88,105,105,41,75,76,76,100,189,189,189,108,193,130,5,236,216,177,99,82,115,86,155,80,238,47,129,219,138,218,154,78, -126,78,74,74,242,17,63,51,50,50,240,201,39,159,224,145,71,30,1,99,76,74,62,213,126,109,36,190,170,147,143,181,41,200,70,60,246,216,99,94,239,176,226,226,226,124,94,163,110,139,215,111,35,129,216,76,226,242,157,59,119,176,104,209,34,212,214,214,98,210, -164,73,56,112,224,128,87,63,120,109,242,82,151,181,210,173,153,100,94,35,158,125,246,89,164,165,165,33,36,36,4,197,197,197,104,104,104,0,99,204,71,148,149,73,44,54,98,56,229,98,163,177,99,101,173,0,24,214,193,115,185,159,151,151,135,202,202,74,37,217, -70,100,14,152,77,247,214,242,193,7,31,32,51,51,19,47,190,248,162,162,238,200,204,89,189,132,114,158,196,108,117,109,165,46,9,87,172,88,129,71,31,125,20,175,189,246,26,122,123,123,1,12,61,242,226,198,141,27,104,106,106,66,78,78,142,180,4,173,254,90,54, -45,23,48,47,94,106,241,215,111,61,129,152,215,95,189,126,125,247,221,119,72,78,78,134,195,225,0,99,12,227,199,143,247,9,17,229,181,41,154,186,44,114,60,50,127,187,105,110,110,70,91,91,27,0,160,170,170,10,177,177,177,8,10,10,242,17,101,101,18,139,141, -106,52,210,114,177,85,181,82,203,226,188,58,228,228,228,96,227,198,141,72,72,72,144,154,3,162,115,67,100,62,124,248,225,135,72,73,73,193,197,139,23,45,57,126,158,196,108,166,109,209,57,237,247,172,4,7,7,227,199,31,127,68,127,127,63,166,76,153,130,89, -179,102,225,241,199,31,71,113,113,49,170,170,170,48,125,250,244,128,36,102,153,196,91,207,63,1,172,18,47,69,250,173,21,136,141,250,107,212,175,229,203,151,35,33,33,1,209,209,209,136,138,138,194,159,127,254,233,243,144,66,94,13,68,83,151,69,143,71,148, -136,136,8,236,222,189,27,211,167,79,199,246,237,219,149,7,198,105,69,89,153,243,55,26,228,98,43,106,165,39,139,27,213,161,188,188,28,135,15,31,198,142,29,59,16,21,21,133,69,139,22,9,207,1,145,218,202,204,135,221,187,119,163,168,168,200,242,177,18,104, -109,165,230,180,172,232,251,243,207,63,179,139,23,47,90,46,49,27,137,175,35,33,94,26,245,91,79,32,54,234,175,191,126,181,183,183,179,198,198,70,174,132,170,109,179,177,177,145,205,153,51,71,169,189,63,129,213,138,243,160,165,171,171,203,231,92,235,137, -178,34,231,111,52,202,197,102,106,197,147,197,69,199,177,204,28,224,181,105,102,62,168,229,105,43,199,138,217,218,202,28,195,56,217,223,186,188,244,223,64,18,97,69,19,111,173,72,174,21,237,119,121,121,57,22,47,94,140,232,232,104,191,253,245,215,175,152, -152,152,128,106,32,147,86,109,101,50,175,94,218,137,94,234,176,200,249,19,57,119,254,198,152,8,254,18,184,3,173,213,248,241,227,241,220,115,207,5,52,142,101,126,150,215,166,153,249,160,110,111,56,83,156,69,219,150,57,6,114,9,57,220,107,129,216,202,212, -101,130,24,11,208,130,69,16,196,125,3,201,207,4,65,140,189,5,203,10,249,185,181,181,21,159,126,250,169,238,247,100,196,212,154,154,26,31,191,172,189,189,29,29,29,29,94,219,206,157,59,135,186,186,58,175,182,213,226,104,67,67,131,143,204,121,175,69,105, -130,32,2,92,176,172,146,159,121,169,180,50,98,234,191,255,254,235,115,51,218,23,95,124,225,147,155,86,84,84,132,59,119,238,120,181,173,22,71,205,38,220,18,4,113,111,24,53,242,179,140,152,186,124,249,114,108,217,178,5,45,45,45,136,143,143,135,211,233, -68,101,101,37,130,130,130,80,90,90,138,176,176,48,156,63,127,30,61,61,61,88,178,100,9,250,250,250,132,219,254,175,9,178,4,49,166,222,97,137,202,207,178,169,180,60,129,149,151,248,11,12,221,41,187,105,211,38,236,217,179,7,0,176,127,255,126,100,102,102, -226,249,231,159,87,158,97,254,217,103,159,33,63,63,31,65,65,65,126,83,107,121,9,183,129,200,167,4,65,140,240,59,44,187,221,142,39,158,120,194,107,219,55,223,124,131,175,190,250,10,0,144,158,158,142,180,180,52,37,149,54,56,56,24,89,89,89,152,54,109,26, -34,35,35,177,117,235,86,212,213,213,33,54,54,22,185,185,185,74,27,158,116,220,163,71,143,98,222,188,121,104,110,110,86,18,98,213,137,191,14,135,3,19,38,76,240,233,215,27,111,188,129,217,179,103,227,163,143,62,194,231,159,127,142,202,202,74,12,12,12,224, -205,55,223,196,75,47,189,132,154,154,26,236,221,187,23,0,184,169,181,158,132,219,222,222,94,216,108,54,156,59,119,78,121,173,58,145,216,229,114,97,233,210,165,72,72,72,240,90,168,9,130,24,69,11,86,82,82,18,74,74,74,48,56,56,136,144,144,16,0,67,242,243, -204,153,51,177,125,251,118,48,198,188,82,105,1,40,169,180,179,103,207,86,82,105,1,160,176,176,16,37,37,37,74,219,30,193,82,139,58,241,215,136,240,240,112,172,92,185,18,107,215,174,197,196,137,19,149,125,76,152,48,1,171,87,175,198,218,181,107,241,240, -195,15,251,45,192,133,11,23,112,229,202,21,180,183,183,251,36,220,170,229,83,0,138,124,74,11,22,65,140,210,75,66,17,249,217,76,42,173,231,210,78,15,163,196,95,45,5,5,5,168,171,171,83,252,40,96,232,111,107,167,79,159,70,65,65,129,80,1,120,9,183,102,196, -108,130,32,238,225,130,37,34,63,155,73,165,229,193,75,252,85,19,27,27,139,13,27,54,32,43,43,75,217,246,234,171,175,98,195,134,13,152,57,115,166,112,17,140,18,110,101,197,108,130,32,134,23,169,59,221,59,59,59,209,222,222,142,135,30,122,8,113,113,113,24, -55,206,251,138,178,191,191,31,119,239,222,245,113,159,236,118,59,66,66,66,148,103,1,137,114,235,214,45,132,133,133,233,254,13,203,131,250,82,213,131,203,229,194,3,15,60,96,89,145,28,14,7,6,7,7,149,103,43,17,4,113,31,44,88,4,65,16,163,250,146,144,32,8, -130,22,44,130,32,8,90,176,8,130,160,5,139,32,8,130,22,44,130,32,8,90,176,8,130,160,5,139,32,8,130,22,44,130,32,8,90,176,8,130,160,5,139,32,8,98,68,249,63,213,171,5,229,205,200,49,236,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; +static const unsigned char temp_binary_data_12[] = +{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,44,0,0,1,64,8,6,0,0,0,6,75,65,84,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,46,35,0,0,46,35,1,120,165,63,118,0,0,0,7,116,73,77,69,7,223,12,27,4,11,5,249,195,188, +93,0,0,32,0,73,68,65,84,120,218,236,157,119,152,85,197,249,199,63,231,220,190,189,247,94,89,122,7,233,29,65,4,236,177,70,77,136,137,141,88,126,150,244,196,36,166,154,152,98,162,49,106,162,6,43,54,80,16,84,122,239,109,129,93,118,217,93,216,222,203,237, +247,158,223,31,203,94,89,216,122,238,221,101,209,249,60,15,143,114,57,103,206,204,59,51,223,51,243,158,153,119,164,27,150,204,83,16,8,4,130,203,0,89,152,64,32,16,8,193,18,8,4,2,33,88,2,129,64,8,150,64,32,16,8,193,18,8,4,2,33,88,2,129,64,8,150,64,32,16, +8,193,18,8,4,2,33,88,2,129,64,8,150,64,32,16,8,193,18,8,4,2,33,88,2,129,224,43,141,246,171,94,192,192,192,32,198,140,155,72,112,72,8,110,183,27,169,7,247,40,128,70,163,161,188,172,148,29,219,54,139,86,34,248,218,18,25,21,205,21,147,166,246,248,122,5, +144,206,253,55,239,68,46,39,79,228,226,118,187,133,96,245,148,240,136,72,150,92,123,3,241,9,73,189,190,247,240,193,253,236,217,181,29,167,211,41,90,174,224,107,73,82,114,10,183,221,185,76,213,189,239,191,251,6,5,167,242,176,219,237,98,74,216,99,197,87, +20,28,14,135,170,123,93,46,151,104,177,130,175,53,110,183,162,186,239,184,92,110,159,231,71,248,176,4,2,65,151,147,60,69,25,56,33,243,132,96,9,4,130,203,6,33,88,2,129,64,8,150,64,32,16,8,193,18,8,4,66,176,4,2,129,64,8,150,64,32,16,8,193,18,8,4,66,176, +4,2,129,64,8,150,64,32,16,8,193,18,8,4,66,176,4,2,129,64,8,150,64,32,16,8,193,18,8,4,66,176,4,2,129,64,8,150,64,32,16,244,134,1,21,113,84,146,36,36,73,106,247,247,54,218,98,242,40,202,192,138,207,35,16,12,196,254,115,126,223,249,42,245,159,75,42,88,26, +141,6,163,209,68,96,80,16,193,193,33,68,70,69,19,17,17,69,80,72,8,38,163,9,157,94,143,44,203,56,157,78,236,54,43,205,205,77,212,214,212,80,89,89,78,109,77,13,141,13,245,180,152,91,112,248,48,4,171,64,112,217,116,94,173,14,147,201,68,112,112,8,33,161, +161,68,69,199,16,22,22,65,96,80,16,70,147,9,157,86,7,128,195,233,192,106,177,208,212,212,68,77,117,21,149,21,229,212,213,213,210,216,88,143,213,98,185,172,66,128,95,18,193,10,9,9,37,46,33,145,244,140,44,210,51,178,72,76,74,38,50,42,6,163,209,216,229, +125,138,162,32,73,18,110,151,139,250,250,58,206,156,41,166,240,84,62,39,114,143,82,92,84,72,77,77,181,8,107,44,248,74,163,209,104,8,143,136,36,33,33,137,140,172,108,210,210,179,136,79,72,36,60,60,2,173,78,215,163,52,156,14,7,213,213,149,156,41,41,33, +239,100,46,121,39,114,57,115,166,132,250,186,90,33,88,231,19,27,23,207,208,97,35,25,62,114,52,169,105,25,68,68,70,33,203,61,119,163,181,13,115,101,141,134,176,240,8,194,194,35,24,62,98,52,141,13,245,20,23,157,230,224,129,189,236,223,187,139,162,162,211, +158,211,113,36,73,52,114,193,229,143,44,203,164,164,166,51,124,228,104,134,143,24,77,66,98,18,33,161,97,234,58,189,78,71,76,108,60,49,177,241,140,29,63,145,170,202,10,10,11,242,217,183,119,23,135,15,238,167,170,178,226,162,169,228,215,74,176,252,252, +252,153,50,125,38,147,167,204,32,49,57,133,128,128,64,159,166,31,20,28,194,208,225,35,201,200,26,196,21,147,166,177,225,139,117,108,252,124,29,22,139,25,151,203,133,187,15,130,225,11,4,253,69,68,100,20,51,102,205,99,226,21,83,136,138,137,237,118,38,210, +91,34,163,162,137,140,138,38,103,240,48,10,167,228,179,126,237,199,236,218,177,21,183,219,141,203,57,176,102,44,125,46,88,9,73,201,220,116,243,29,12,27,49,10,147,201,239,34,103,160,47,49,26,141,164,166,103,16,23,159,192,144,161,195,249,223,171,47,209, +210,220,140,211,213,127,115,116,147,201,239,146,86,168,162,184,177,219,237,62,61,11,238,114,225,82,219,222,237,118,97,179,217,124,154,230,168,49,227,184,241,230,59,72,76,74,65,175,215,247,105,254,3,131,130,24,54,124,20,41,41,105,164,103,100,241,230,255, +254,67,75,75,179,199,21,243,149,23,172,145,163,199,114,251,157,203,72,76,74,233,183,2,73,146,132,209,100,98,194,21,83,8,11,143,96,245,135,43,177,251,184,17,117,230,91,152,62,107,46,215,94,127,51,70,147,9,197,173,92,146,233,168,203,229,34,247,232,97,86, +188,254,10,21,229,101,248,98,64,223,87,197,240,201,100,67,81,8,10,10,230,250,155,110,101,242,212,25,32,73,151,198,246,146,132,185,165,133,143,87,189,207,231,235,214,96,183,123,215,230,244,122,61,243,23,46,102,233,117,55,17,24,24,212,175,253,39,40,56, +132,37,215,222,72,104,104,24,155,54,126,134,205,106,197,228,231,247,213,21,44,141,70,195,164,41,211,185,237,155,223,38,52,44,252,146,21,46,51,107,16,119,47,187,183,207,29,241,254,254,1,44,90,114,29,87,47,185,14,189,193,112,201,43,117,210,212,25,4,134, +132,240,234,199,31,146,223,220,136,34,75,234,212,65,146,144,154,155,209,20,23,35,169,60,219,177,211,209,72,96,32,174,228,100,208,200,189,207,155,4,10,18,52,54,146,138,196,93,119,46,99,248,136,209,151,220,238,65,65,193,220,126,231,183,9,9,9,97,213,7,43, +105,110,110,82,149,78,64,96,32,139,22,95,203,162,37,215,247,249,168,170,43,166,205,156,67,90,70,214,128,25,93,245,137,96,105,181,90,102,207,93,192,117,55,221,74,72,72,232,165,111,68,193,33,125,154,126,88,88,56,139,150,94,207,149,11,174,238,241,87,154, +254,96,216,176,145,220,26,16,192,191,14,238,165,184,177,30,73,165,243,84,113,185,192,233,66,115,222,135,12,175,7,69,58,29,206,65,217,184,19,18,85,165,169,180,206,191,24,226,150,184,123,250,108,50,51,178,6,140,221,117,58,61,75,174,189,9,63,255,0,222,123, +123,5,117,189,252,242,22,20,20,204,162,37,215,178,96,209,210,75,42,86,30,151,78,98,18,3,9,159,174,116,151,36,153,41,211,102,113,205,245,223,24,16,98,213,247,98,24,204,53,215,223,60,224,196,202,35,90,73,169,220,50,124,52,161,122,3,78,149,163,76,73,163, +193,149,150,134,59,196,119,194,239,76,74,68,137,137,85,47,128,46,23,35,3,130,249,214,236,121,3,74,172,206,159,97,204,153,183,144,155,110,253,38,193,189,232,7,58,157,142,217,243,22,48,127,225,98,12,6,35,130,62,22,172,161,195,70,176,228,218,27,8,11,143, +248,90,24,111,225,162,165,204,158,183,96,64,138,21,180,46,255,152,148,154,201,226,193,195,208,201,26,245,159,168,67,130,113,101,101,162,248,160,156,174,176,48,220,169,105,160,85,49,184,87,20,220,138,155,228,160,96,110,154,48,153,244,228,180,1,219,54, +180,90,45,147,167,206,96,241,210,235,209,245,208,110,83,167,207,98,201,53,55,94,242,143,7,95,11,193,10,11,143,96,225,226,107,136,79,72,250,90,24,110,193,85,75,184,122,233,245,104,181,218,129,157,81,9,22,12,30,202,148,212,116,204,118,187,186,81,141,36, +225,142,141,197,153,144,224,221,84,80,111,192,153,158,14,1,1,106,135,240,132,24,76,220,48,124,12,131,226,19,7,148,111,165,35,12,6,35,51,231,204,103,206,188,133,104,52,154,46,175,77,75,207,228,250,155,110,195,207,223,95,168,82,95,11,150,70,163,97,218, +140,217,140,26,53,246,107,97,180,161,195,70,112,221,141,183,160,211,233,47,139,252,250,105,13,220,50,106,44,67,98,98,177,171,217,134,161,40,72,26,45,174,65,131,112,133,171,251,136,162,72,18,206,248,56,148,232,104,213,171,121,181,178,204,220,244,76,38, +165,102,116,43,0,3,133,128,128,64,102,207,93,64,90,122,102,167,215,24,141,38,110,185,253,46,34,34,163,132,34,117,215,6,124,145,72,114,74,26,243,23,92,141,236,195,70,228,118,187,61,127,20,197,141,132,4,146,132,44,203,158,63,151,130,240,136,72,110,188, +249,14,159,57,243,21,69,193,229,116,226,114,187,90,203,234,86,144,100,9,73,146,209,106,52,200,26,141,79,202,26,19,24,194,210,193,195,249,215,174,173,52,217,108,189,79,83,81,144,76,70,156,25,25,200,205,205,72,189,92,42,226,14,14,198,157,158,142,164,211, +163,230,147,165,75,81,24,17,30,193,53,67,71,251,108,10,238,118,187,113,185,156,184,92,173,109,76,113,43,173,109,75,163,65,115,206,238,190,24,197,37,165,164,50,123,238,2,206,158,45,193,220,210,114,209,191,207,153,191,144,33,195,70,250,180,157,122,250, +143,203,133,114,206,222,173,253,70,131,116,174,31,125,45,5,75,171,211,177,248,154,27,8,143,136,244,73,134,172,22,11,213,231,54,104,86,87,87,210,212,216,216,186,185,89,106,93,155,226,239,31,72,112,72,8,97,225,17,132,135,71,16,20,28,220,111,35,29,89,150, +153,61,119,1,25,153,217,94,167,101,183,219,169,171,173,161,162,188,148,242,242,50,234,107,107,105,105,105,198,233,116,34,201,50,126,38,63,207,134,214,152,216,56,34,34,162,48,154,76,222,204,12,25,155,144,204,201,170,74,214,230,229,226,84,148,222,79,15, +21,32,58,26,103,82,18,218,188,188,30,223,175,232,245,184,178,50,33,48,16,36,165,215,122,229,116,187,8,211,25,248,198,176,177,4,250,96,61,144,185,165,133,170,170,10,202,74,207,82,93,85,73,125,125,29,86,171,5,183,219,141,94,167,199,207,63,128,240,240,8, +162,99,99,137,137,137,35,52,44,220,235,17,221,132,43,166,176,103,215,118,246,236,222,209,238,247,148,212,116,230,206,191,202,103,2,210,220,220,68,85,101,5,149,21,229,212,212,84,211,210,220,132,211,233,68,35,107,208,27,244,4,4,6,17,18,18,70,120,68,4,161, +97,225,4,6,6,93,54,163,85,159,8,214,232,49,227,25,59,110,162,79,50,115,242,248,49,118,237,216,202,137,227,199,168,172,40,167,165,165,25,135,195,225,113,22,75,146,132,86,171,197,96,52,18,20,20,66,108,92,28,105,233,153,140,28,61,142,212,212,244,62,119, +126,15,30,58,156,41,211,102,122,253,156,226,211,133,236,222,181,157,99,71,14,81,86,122,134,198,198,6,236,29,68,156,208,106,181,248,251,7,16,29,19,203,160,156,33,76,156,52,149,140,172,65,42,221,63,18,129,70,19,115,50,6,113,188,162,140,83,245,181,30,191, +80,239,90,140,22,119,106,42,238,186,122,52,213,85,61,210,56,103,114,18,74,108,220,151,63,244,82,35,221,14,39,87,101,15,35,171,45,13,149,216,108,86,142,29,61,204,238,157,219,40,200,207,163,186,170,146,150,150,230,14,215,233,25,12,6,130,131,67,72,72,74, +102,228,168,177,140,29,127,133,87,83,54,255,128,0,230,47,92,204,209,35,135,176,88,204,231,92,41,90,38,77,153,78,120,68,164,215,35,57,171,213,202,145,67,7,216,179,123,59,5,249,121,212,84,87,97,177,152,219,69,98,144,101,25,173,86,135,159,159,31,193,33, +161,196,39,36,146,53,104,176,103,111,226,87,94,176,116,58,29,115,231,95,229,245,98,73,171,197,194,134,47,214,177,102,245,135,84,84,148,225,234,196,207,162,40,10,14,135,3,135,195,65,115,83,19,165,103,75,56,116,96,31,219,183,110,102,252,196,73,204,95,112, +117,159,45,84,53,153,252,152,56,105,42,81,81,209,94,13,211,119,237,216,202,7,43,223,162,164,184,168,219,213,208,78,167,147,134,134,122,26,26,234,57,149,127,146,253,251,118,115,213,226,107,153,53,231,74,213,121,72,13,143,96,86,82,26,165,141,245,88,213, +108,223,81,20,240,247,199,149,157,137,212,210,140,108,177,116,93,230,136,8,92,105,233,72,42,70,16,18,96,181,217,200,209,234,152,158,149,227,213,7,142,134,250,122,62,88,249,38,187,118,110,163,170,178,162,219,47,166,54,155,141,202,202,10,42,43,43,56,126, +236,8,123,118,237,224,198,91,238,32,43,59,71,117,30,134,143,28,205,168,49,227,216,182,101,35,0,137,73,201,12,31,57,218,235,245,86,181,181,53,124,244,222,219,236,220,190,133,154,154,234,78,203,230,118,187,177,219,109,216,237,54,234,235,235,40,58,93,192, +190,61,187,216,188,225,51,230,94,121,21,147,166,204,240,249,62,69,95,163,25,50,40,253,103,106,111,30,57,122,28,11,174,90,226,149,193,205,230,22,222,126,227,85,62,122,255,29,106,107,107,80,122,217,137,220,110,55,141,141,13,228,229,157,160,236,236,25,82, +82,211,8,10,10,246,137,113,202,203,74,217,186,121,3,110,183,155,204,172,108,22,45,190,150,64,149,105,187,92,46,62,89,253,1,175,189,242,34,21,229,101,189,94,125,175,40,10,141,13,13,28,57,116,16,157,78,71,214,160,193,170,71,90,33,178,204,161,99,135,169, +211,200,170,29,224,138,209,132,226,114,33,215,214,118,186,40,85,49,24,112,12,27,142,20,170,110,77,158,91,81,208,55,54,114,221,224,97,140,200,28,164,218,71,90,81,94,198,127,94,122,158,77,27,62,167,169,169,177,215,247,59,28,14,42,42,202,200,207,59,78,66, +82,10,145,42,95,90,146,36,97,52,26,217,186,121,3,0,87,76,154,202,196,43,166,162,243,162,255,84,148,151,241,234,203,47,176,105,195,103,180,180,52,247,250,126,167,211,73,93,109,13,199,142,30,166,177,177,129,140,204,108,12,62,216,173,161,40,10,199,115,143, +114,252,216,17,159,238,52,241,106,226,60,225,138,201,152,188,240,171,88,173,86,86,189,255,46,159,174,89,141,217,108,246,170,32,78,135,131,221,187,182,243,234,43,47,182,11,143,225,11,195,235,116,58,70,140,26,67,84,116,172,234,145,213,231,235,214,240,230, +235,175,168,222,174,241,165,205,44,188,249,191,255,176,233,139,245,170,211,136,142,142,101,164,127,16,82,101,165,122,159,152,86,131,59,57,25,87,120,120,135,179,60,69,146,112,166,164,66,84,100,171,223,74,141,237,205,102,82,220,48,36,41,13,141,138,209, +149,162,40,212,215,215,241,214,138,255,178,99,219,102,156,78,239,182,23,21,23,157,230,127,255,253,55,165,103,75,84,167,49,104,240,48,50,179,114,240,243,243,103,200,176,17,94,45,99,104,108,168,231,157,55,95,99,199,182,205,184,188,220,224,111,110,105,97, +253,218,213,188,185,226,191,94,183,209,190,68,181,96,37,38,37,147,158,145,173,106,168,223,54,226,56,116,96,47,235,214,174,246,122,163,232,249,236,219,179,147,213,31,174,196,102,179,250,76,176,66,67,195,24,62,114,140,106,199,104,238,209,195,172,124,103, +133,207,118,242,219,108,54,222,121,243,117,242,243,78,168,78,99,104,86,14,1,167,139,80,204,102,117,155,144,21,144,252,253,91,23,148,118,240,70,118,135,135,227,74,73,82,229,183,130,214,45,65,218,138,10,134,132,132,18,21,217,123,31,79,155,251,96,195,103, +159,178,121,227,231,62,107,95,39,79,228,242,225,251,239,208,172,98,164,214,230,27,27,55,225,10,162,99,98,73,73,77,87,255,130,118,58,217,178,233,11,54,122,241,226,234,40,205,13,159,173,101,211,134,207,112,56,236,95,45,193,202,200,28,68,88,88,152,42,103, +161,162,40,84,148,151,241,193,202,183,104,104,168,247,121,161,62,91,247,9,7,247,239,245,94,172,104,13,171,145,154,158,73,74,138,186,85,213,21,229,101,188,241,250,43,212,244,192,65,221,171,233,106,121,41,159,125,250,137,234,72,20,131,135,12,35,86,111, +128,195,71,64,237,198,102,69,65,137,138,198,149,145,129,114,158,152,187,141,70,156,153,25,72,38,63,245,17,20,107,106,8,171,170,34,51,37,29,63,255,222,47,52,149,36,137,35,135,246,243,193,202,183,124,222,190,118,239,216,198,241,220,163,170,119,14,12,27, +49,138,241,19,39,17,230,133,191,245,196,241,99,172,124,123,133,207,203,102,183,219,89,191,246,99,74,138,139,190,58,130,101,52,26,73,207,200,196,228,167,110,56,235,114,185,216,177,109,51,121,39,143,247,73,161,108,54,27,159,172,122,223,243,53,70,245,180, +135,214,205,172,163,199,142,87,245,101,208,229,114,177,241,243,117,94,141,132,186,226,208,193,125,156,60,145,171,234,94,163,201,196,144,97,35,208,159,45,65,46,46,86,111,35,73,194,149,146,140,59,38,166,85,195,100,25,103,74,50,68,70,169,247,143,89,45,104, +242,242,8,215,27,201,200,202,86,53,178,109,106,108,100,229,59,111,168,242,235,116,155,118,83,35,91,54,125,161,186,125,197,198,198,51,101,218,44,213,95,155,237,54,27,171,62,120,135,198,198,134,62,105,87,103,74,138,216,181,125,235,128,140,245,174,74,176, +2,131,130,137,141,75,80,189,126,163,182,166,154,157,59,182,244,105,193,242,78,30,231,216,145,67,94,78,7,91,55,56,15,85,185,168,239,236,153,18,118,237,220,218,103,225,109,234,106,107,56,122,228,160,234,225,123,246,160,193,200,146,140,166,176,0,106,170, +213,5,190,82,20,36,189,1,71,70,6,110,127,127,220,17,17,184,83,82,65,237,218,30,69,65,206,207,71,87,89,69,106,90,58,17,17,234,150,18,236,216,182,89,181,152,247,104,106,120,252,24,165,103,207,168,18,120,131,209,168,218,113,15,112,248,208,126,14,31,60,208, +167,253,103,255,190,221,212,214,84,127,53,4,43,60,34,210,171,133,162,199,115,143,114,186,224,84,159,22,204,110,183,179,119,247,78,175,210,112,185,156,100,100,102,171,106,92,46,151,139,35,135,15,168,106,212,189,241,57,20,23,157,166,185,73,157,147,52,57, +37,21,189,222,128,220,216,132,230,84,1,138,217,162,62,51,161,161,56,7,15,198,153,153,9,106,63,196,72,18,156,57,131,174,240,52,122,189,158,140,204,108,85,139,101,173,86,11,91,54,125,222,250,198,233,35,234,234,106,57,93,120,74,101,49,37,175,214,93,109, +219,178,209,167,126,223,142,40,46,42,164,176,32,255,242,23,44,89,150,137,140,140,86,29,5,209,233,112,112,112,255,158,126,9,110,159,159,119,130,186,218,26,175,166,59,131,114,134,168,186,215,98,110,225,228,241,99,125,62,172,174,169,174,82,253,85,39,36, +52,140,136,200,40,36,73,66,83,81,142,92,122,22,84,134,86,150,100,25,37,62,30,37,42,74,125,216,152,186,122,116,185,185,72,78,39,65,193,193,170,35,213,22,158,202,231,76,73,113,159,218,221,229,114,81,122,166,4,119,63,159,210,84,122,182,164,207,92,12,23, +150,239,68,238,209,126,47,159,207,5,75,163,209,16,17,25,137,209,164,110,129,89,99,83,35,39,114,143,246,75,225,234,235,235,56,235,197,39,104,131,193,72,86,182,186,245,78,205,205,205,148,20,159,238,243,50,54,55,53,210,216,168,238,139,149,78,167,35,46,46, +190,85,112,156,46,180,121,167,160,166,70,253,200,68,146,84,71,131,80,108,54,52,5,167,144,206,45,111,9,9,9,37,70,229,202,246,194,194,83,88,44,150,62,183,125,109,109,13,118,31,71,98,237,142,130,252,60,234,235,234,250,229,89,121,39,143,119,184,3,227,82, +210,235,197,45,90,173,142,136,136,40,213,251,247,78,23,156,162,170,170,178,95,10,103,181,152,41,47,43,85,237,131,10,8,12,36,66,197,212,87,81,20,204,45,45,24,12,70,34,35,163,145,53,190,223,104,170,40,10,110,183,155,208,176,240,214,179,26,221,238,94,59, +167,101,89,67,84,116,204,151,127,183,152,209,156,56,129,51,48,16,169,31,87,60,43,78,39,242,217,179,104,74,75,61,139,80,35,163,162,85,239,90,176,89,173,68,70,69,245,217,65,28,138,162,224,114,185,48,24,140,253,58,2,81,20,133,194,194,83,125,62,29,108,163, +172,236,44,181,181,53,196,197,39,92,190,130,165,215,235,9,9,85,31,77,180,184,168,160,223,206,58,115,56,28,84,150,151,171,190,63,36,52,12,189,94,221,170,223,184,248,4,238,185,239,251,184,221,231,34,77,248,186,241,210,122,228,184,86,163,237,245,249,142, +231,143,150,47,140,136,169,173,170,66,57,121,18,215,224,193,72,253,21,235,171,174,14,77,65,161,39,110,188,44,203,196,158,27,249,169,97,234,244,89,140,28,61,182,79,236,238,177,189,91,193,228,231,135,161,31,133,189,165,185,137,242,178,210,126,59,44,184, +185,169,137,202,138,242,203,91,176,140,38,147,234,237,41,0,69,167,11,251,173,112,46,151,171,117,216,110,179,169,218,239,24,16,16,136,172,194,57,218,118,114,79,114,202,192,141,136,217,134,127,7,43,173,181,167,79,163,132,132,160,36,39,247,169,227,26,9, +20,139,21,109,65,1,154,243,22,98,202,178,220,110,228,215,91,34,34,163,190,146,177,165,26,26,234,251,245,116,102,183,219,237,243,245,131,222,210,235,215,178,209,104,34,64,101,196,72,167,211,73,101,69,121,191,22,176,185,185,9,171,85,157,63,67,171,213,250, +52,198,215,64,164,163,17,164,228,114,161,61,113,2,250,184,115,40,110,5,77,113,9,154,210,210,139,70,126,97,97,95,143,48,219,189,27,97,53,171,218,11,233,13,151,189,96,25,12,6,213,49,167,155,155,154,250,221,224,86,139,185,95,28,176,151,43,157,69,64,144, +91,90,208,228,157,130,62,116,186,74,149,149,104,242,78,94,180,121,218,96,48,122,181,10,252,171,74,115,115,51,86,171,181,95,159,89,215,143,35,186,62,17,44,173,78,167,122,55,119,75,75,83,191,28,106,218,78,176,172,214,126,115,82,94,142,116,186,23,84,81, +208,148,151,33,149,148,244,201,180,80,49,183,160,61,126,28,185,163,56,96,58,29,129,65,65,162,114,46,160,53,190,85,255,126,149,236,239,1,134,207,5,75,175,215,163,85,249,133,208,98,177,224,232,231,207,192,118,187,189,223,159,121,89,9,86,87,255,230,116, +162,57,149,15,85,190,157,22,40,78,23,154,147,121,104,106,107,59,29,245,169,221,246,245,85,197,237,114,97,181,88,112,57,251,119,93,148,217,220,210,111,31,201,250,72,176,12,170,163,22,216,172,86,175,195,96,244,22,167,211,49,32,247,68,93,46,104,90,204,173, +171,224,45,22,159,157,89,47,159,41,65,123,166,243,29,0,122,131,161,199,71,99,125,109,4,75,81,176,217,172,253,246,133,240,252,62,123,89,11,150,70,163,81,245,229,12,90,183,186,244,119,217,219,214,43,9,188,16,173,242,50,228,162,226,214,83,160,189,165,190, +30,109,193,41,207,18,134,142,48,232,13,194,232,29,246,31,23,208,191,29,200,233,116,194,229,42,88,158,211,54,84,11,86,255,11,135,226,118,15,40,131,95,182,211,70,9,31,173,107,234,62,13,141,70,131,36,204,126,225,155,23,229,220,159,126,127,225,95,174,130, +229,173,193,20,33,28,151,37,206,168,40,220,73,73,224,139,21,251,33,193,56,83,211,80,186,88,148,42,73,146,250,56,90,95,105,205,82,46,213,131,47,223,41,161,219,139,17,139,70,163,17,237,240,50,195,237,239,143,59,51,19,201,100,242,205,108,68,146,80,146,146, +112,117,113,138,180,107,128,109,184,29,24,195,92,233,92,255,249,122,119,160,94,11,150,211,233,84,237,19,210,104,53,151,164,162,133,74,118,97,158,46,62,160,40,58,29,206,212,52,220,145,145,190,123,160,162,128,70,211,122,138,116,39,91,188,236,118,187,24, +141,119,212,89,125,116,176,107,175,159,57,128,14,93,237,245,214,28,187,205,134,203,173,238,13,104,48,24,251,125,229,184,44,203,170,63,18,168,30,149,184,92,84,86,150,83,83,83,51,160,181,82,66,234,60,20,174,36,225,58,55,21,148,100,217,247,211,2,147,9,231, +144,193,72,123,246,34,95,176,24,210,102,179,226,116,58,84,5,136,52,155,91,40,43,61,123,46,126,254,192,18,61,151,211,69,92,124,130,170,88,114,178,36,161,55,24,144,229,254,239,63,3,105,84,215,123,193,114,216,113,216,237,170,86,187,155,76,126,232,251,233, +148,230,243,167,161,253,45,146,110,183,155,205,27,63,103,253,167,31,247,123,3,235,157,96,209,233,193,24,110,127,127,92,153,153,72,70,67,223,249,48,34,34,113,102,100,160,59,118,12,233,188,81,187,195,225,192,98,177,96,48,244,126,99,113,109,77,53,175,255, +247,223,148,149,158,29,112,246,182,219,109,44,185,230,70,22,95,115,131,170,145,176,209,96,236,247,89,138,222,96,184,188,5,203,97,183,99,181,90,81,179,255,57,32,48,208,235,67,87,123,109,112,189,65,117,196,5,175,252,52,138,66,93,109,45,151,35,138,86,139, +51,43,19,66,67,251,120,243,179,132,43,49,17,185,161,30,109,201,151,235,178,156,14,7,141,13,13,132,132,244,62,42,136,86,171,197,220,210,50,224,246,192,181,81,81,94,166,210,84,18,126,254,1,232,180,253,187,62,45,192,63,96,64,9,86,175,39,167,54,155,13,179, +185,69,93,225,3,2,9,8,8,236,215,2,26,141,70,159,28,12,217,219,225,123,104,232,229,187,23,206,153,146,140,187,159,142,46,151,141,70,92,233,25,184,66,130,219,141,68,234,235,212,69,138,13,12,12,238,247,54,214,27,234,235,235,84,251,231,252,253,253,251,53, +156,13,64,192,0,219,34,213,107,193,178,90,45,170,99,136,107,181,90,162,99,98,251,181,128,254,254,1,152,252,212,109,214,118,56,28,234,62,48,72,18,17,145,81,248,169,124,238,37,245,179,68,70,226,202,202,238,95,71,107,72,8,174,212,84,148,115,39,32,59,157, +78,170,85,142,144,252,3,2,8,143,136,28,176,95,211,170,171,42,85,127,5,13,8,12,84,29,154,92,245,172,61,34,114,64,217,175,247,35,44,171,149,70,149,103,9,42,138,210,239,49,162,2,2,3,85,159,78,221,220,212,136,83,197,62,68,89,150,137,142,137,33,44,60,146, +203,9,183,201,132,51,59,11,73,175,239,231,86,40,225,78,72,196,21,27,11,231,162,167,122,19,120,49,49,57,165,211,40,20,151,154,218,154,106,90,154,213,29,61,22,28,18,74,104,104,88,191,230,55,252,114,23,44,135,195,65,93,93,173,170,97,173,36,73,36,167,164, +169,222,139,216,251,17,157,142,168,232,88,213,225,156,235,234,106,85,199,210,10,10,14,33,37,117,224,7,240,243,188,76,52,26,156,105,105,40,225,17,234,207,19,84,20,117,62,47,5,36,173,22,87,70,6,174,224,32,220,110,55,165,103,75,84,47,159,201,202,26,164, +122,84,221,215,88,173,22,42,42,212,249,177,2,2,2,137,137,141,235,183,254,163,209,104,136,141,141,31,80,246,83,177,14,203,65,117,85,165,234,144,45,201,169,105,94,69,147,236,13,122,131,222,171,240,174,205,205,77,170,191,54,249,249,249,51,120,232,112,244, +253,61,90,65,149,94,224,138,141,109,93,194,160,102,53,187,68,235,249,132,37,103,144,42,188,136,215,31,20,132,115,80,14,138,94,79,105,233,89,213,209,53,83,211,51,188,58,6,190,47,177,219,237,148,158,81,127,48,74,90,122,166,170,163,207,84,77,7,35,163,84, +31,4,50,128,4,171,213,191,160,54,40,94,80,80,48,131,114,134,246,75,225,130,130,130,73,76,74,86,223,184,108,118,78,28,63,166,206,176,178,204,160,156,161,196,247,147,243,218,43,193,10,10,194,149,150,214,122,240,132,42,127,176,4,53,181,232,114,143,161,201, +59,137,98,246,226,196,237,152,104,156,153,153,52,53,53,81,92,116,90,85,18,58,157,158,105,211,103,15,76,91,43,10,167,79,23,168,190,63,53,61,179,223,166,133,233,25,89,3,238,3,134,170,177,101,85,101,5,13,245,234,142,26,210,106,181,173,71,191,247,131,143, +33,41,41,133,184,248,68,213,247,75,18,28,57,124,64,245,212,36,46,62,129,9,19,39,15,232,80,41,138,44,227,76,77,133,240,48,53,189,175,245,63,86,43,154,188,147,200,102,51,114,109,45,154,194,66,112,185,212,133,163,145,100,220,41,41,52,134,133,120,117,254, +222,216,241,87,48,120,232,240,1,105,243,211,133,167,84,31,159,21,27,23,79,206,144,97,253,146,207,193,67,135,163,29,96,109,87,149,96,213,213,214,80,89,81,174,250,243,108,102,214,32,50,178,6,245,109,193,100,153,177,19,38,169,90,45,253,101,26,26,138,10, +11,84,159,47,40,203,50,211,102,204,33,51,59,103,192,10,150,51,41,9,87,114,50,170,212,229,156,175,75,83,84,132,230,156,147,92,114,187,209,20,21,65,69,5,184,85,174,225,210,233,48,39,38,82,88,83,165,250,184,116,63,127,127,110,252,198,237,253,254,85,173, +39,84,87,86,80,234,197,121,153,83,166,205,84,253,33,169,199,3,221,152,56,6,247,147,48,246,185,96,53,54,53,114,166,164,88,117,36,207,176,240,8,38,79,153,209,167,163,172,244,140,44,70,143,25,239,93,34,18,180,180,180,176,111,207,46,175,252,0,11,23,45,37, +32,112,224,12,173,219,156,182,174,224,32,220,153,153,200,26,47,234,161,162,2,77,126,126,59,185,147,109,54,180,5,5,40,22,149,83,67,73,66,9,10,164,36,48,128,106,149,167,90,3,100,102,15,98,206,252,133,3,202,238,178,44,211,216,216,64,193,169,60,213,233,228, +12,30,198,132,43,166,244,105,94,71,143,29,79,84,116,44,3,13,85,130,229,114,58,57,149,119,130,22,47,26,211,184,137,147,24,49,106,76,159,20,74,111,48,176,96,209,82,130,130,131,189,74,71,66,194,233,116,112,96,223,110,26,27,27,84,167,51,126,226,100,174,191, +241,86,140,253,188,232,239,66,252,253,3,24,49,106,12,195,71,142,70,31,20,132,51,103,48,4,6,160,202,113,37,129,98,54,163,205,207,71,238,96,123,143,166,170,10,77,65,33,138,218,8,179,178,134,114,197,197,201,134,90,156,42,215,45,233,116,122,230,47,92,204, +164,41,211,47,185,80,69,68,70,49,109,198,108,210,51,178,176,90,173,28,63,118,68,245,249,6,146,36,177,248,154,27,188,58,187,177,75,87,70,92,2,83,166,205,28,144,31,140,52,67,6,165,255,76,205,141,86,155,149,225,35,70,19,22,30,209,235,69,122,146,36,97,52, +154,8,11,143,160,176,224,148,106,127,88,103,141,99,193,162,165,44,184,106,137,215,159,127,203,203,74,217,178,233,11,172,22,11,169,105,233,196,39,168,247,135,37,165,164,34,73,50,167,242,79,244,107,200,102,173,86,75,76,108,60,163,198,140,231,202,171,22, +179,228,154,27,8,14,13,103,79,75,35,150,232,104,36,89,229,2,75,151,11,77,126,62,154,146,146,78,39,147,82,75,11,238,128,0,80,241,226,144,0,135,162,96,208,233,25,22,27,135,81,171,83,181,24,212,100,242,35,54,46,158,170,202,10,213,219,98,212,98,242,243,35, +45,45,131,201,211,102,114,245,210,235,88,176,104,41,103,75,138,201,59,121,188,213,71,52,100,248,69,7,217,246,148,160,224,16,66,67,195,56,122,228,96,167,251,65,213,78,165,175,189,241,22,70,141,25,239,85,255,81,20,133,227,185,71,57,126,236,136,79,195,5, +169,22,44,139,217,76,100,84,12,217,57,67,84,21,76,146,36,194,35,34,9,63,39,90,190,56,157,67,163,213,50,119,222,66,22,95,115,3,254,42,207,78,188,80,176,182,110,222,128,221,110,199,96,48,48,100,216,8,213,14,116,173,86,75,74,90,58,161,161,225,84,150,151, +121,53,98,235,9,161,97,225,12,29,58,130,153,115,230,179,240,234,165,76,157,54,147,204,236,28,12,70,35,123,42,74,217,103,110,194,229,197,122,43,169,172,20,237,201,60,228,46,196,87,114,185,144,204,22,220,145,17,160,226,109,237,86,20,90,28,118,178,35,99, +136,13,10,86,189,122,61,36,36,148,212,180,76,20,197,77,89,233,153,62,61,148,68,163,209,16,159,144,196,216,241,19,185,114,225,98,230,47,184,154,113,227,175,32,54,46,1,73,146,216,187,103,39,167,242,78,96,119,216,137,79,76,34,37,53,93,117,185,162,162,99, +49,24,141,156,202,59,233,147,147,161,2,3,131,88,114,205,141,204,152,53,207,235,217,192,128,19,44,104,61,216,113,220,248,43,84,47,210,147,36,137,168,232,88,82,210,210,168,172,172,160,170,178,194,43,95,209,117,55,222,194,149,87,45,38,212,71,103,218,149, +151,149,178,109,203,6,92,46,23,45,45,45,164,167,103,121,181,134,76,167,211,147,148,156,66,86,118,14,146,36,83,94,118,214,167,157,199,104,52,145,51,120,24,179,230,92,201,162,37,215,49,99,246,60,6,15,25,70,100,84,180,103,211,121,97,109,13,239,230,30,162, +210,139,165,7,82,83,51,218,35,71,208,244,96,197,182,100,181,128,91,193,29,21,213,235,237,62,146,36,209,100,179,161,149,101,70,198,37,162,243,226,3,74,80,112,48,89,217,57,36,165,164,81,95,87,75,117,85,165,79,133,42,34,34,146,209,99,39,178,240,234,165, +44,188,106,41,87,76,158,78,90,90,6,65,193,33,104,206,243,213,30,216,187,155,252,188,19,56,28,14,12,6,35,57,67,134,97,52,154,84,139,99,98,82,10,209,49,177,20,23,157,166,217,139,151,126,122,70,22,223,184,237,78,166,78,159,133,159,191,247,39,22,245,149, +96,121,229,245,62,93,120,138,189,187,119,50,247,202,171,188,154,178,12,30,50,156,229,15,63,193,103,235,62,97,195,103,159,82,217,11,225,138,136,136,100,204,184,137,204,158,187,128,164,228,148,62,11,37,83,85,89,193,214,205,27,72,77,203,240,106,244,166, +211,233,73,207,204,38,49,57,133,25,179,231,177,101,227,231,28,60,176,151,138,242,178,94,47,159,208,235,245,173,43,234,83,210,24,60,116,56,131,135,14,39,42,58,6,163,209,212,225,7,141,38,155,149,181,39,143,145,95,91,131,130,202,67,112,156,78,228,194,2, +52,245,61,219,158,37,1,154,226,34,220,161,33,40,41,41,173,95,22,123,248,117,89,2,180,178,204,230,194,83,76,78,78,103,124,82,138,87,117,24,16,24,196,248,137,147,25,60,100,24,71,14,31,100,203,198,207,57,121,34,183,215,163,93,73,146,48,154,76,68,70,70,145, +153,149,195,224,161,195,200,204,202,33,36,52,12,189,94,223,227,25,199,201,227,199,40,41,58,77,112,112,136,234,81,150,209,104,100,242,212,25,36,37,167,242,241,71,43,217,181,115,91,143,247,250,74,146,68,98,82,50,147,166,76,103,250,204,185,132,134,133,247, +219,42,250,75,34,88,0,107,63,249,136,113,19,174,32,196,203,197,108,161,97,225,92,127,211,109,204,152,53,143,3,251,246,112,228,240,1,74,207,150,96,177,88,60,10,45,203,50,122,189,129,224,224,16,18,147,146,201,204,30,68,206,224,97,68,68,70,245,185,161,20, +69,97,207,174,237,140,30,59,158,49,227,38,122,85,177,146,36,97,48,24,201,202,206,33,43,59,135,198,198,6,138,10,11,40,58,93,64,89,233,89,234,106,107,48,155,205,216,237,54,100,89,70,171,211,97,52,24,241,243,15,32,56,56,152,208,176,112,34,34,34,137,142, +141,35,50,42,154,128,128,192,110,243,227,114,187,57,120,246,12,155,11,243,113,56,157,104,100,117,43,218,165,138,50,57,155,120,176,0,0,32,0,73,68,65,84,52,197,197,189,187,205,229,66,147,127,10,71,112,48,82,72,72,239,124,146,146,68,139,221,198,59,71,246, +147,21,25,69,136,201,187,45,55,178,44,19,20,28,194,164,41,211,153,112,197,20,42,43,202,41,44,200,231,76,113,17,149,149,229,52,52,212,99,179,90,113,58,157,104,52,26,116,58,29,126,126,254,248,7,4,18,18,26,74,88,88,4,145,81,81,196,196,198,19,22,30,225,213, +212,169,186,186,138,157,59,182,144,154,158,129,191,23,97,92,36,73,34,41,57,133,239,220,251,125,22,44,90,202,254,189,187,56,113,252,24,21,229,229,216,108,214,214,131,88,36,9,173,70,139,222,96,32,44,60,156,148,212,116,6,229,12,33,51,43,231,178,58,180,214, +107,193,42,46,42,100,221,218,213,220,240,141,219,125,51,180,142,140,98,206,252,133,204,153,191,16,171,213,74,115,83,35,54,155,21,73,146,208,233,244,248,251,7,96,52,153,46,201,155,160,161,161,158,79,86,189,79,98,82,138,79,183,44,4,5,5,51,108,196,40,134, +141,24,213,78,32,219,214,185,73,146,228,117,244,129,146,250,58,222,60,178,151,90,75,11,122,181,203,24,26,26,208,30,63,217,165,223,170,83,161,104,108,64,91,80,128,115,216,48,164,94,250,1,141,58,29,71,203,75,249,224,232,33,110,31,61,222,103,117,175,209, +104,136,141,139,111,247,181,173,205,230,138,162,120,108,222,151,145,31,118,110,219,194,196,73,83,25,60,100,184,215,207,145,101,153,228,148,52,79,128,129,150,230,102,90,90,154,177,219,237,104,52,26,244,122,61,254,1,129,24,141,198,118,229,187,156,240,73, +205,127,182,110,13,199,115,143,250,60,115,70,163,145,136,200,40,226,19,146,136,139,79,36,50,42,26,63,127,255,75,58,108,61,114,248,32,31,175,122,31,235,5,97,125,125,77,219,145,106,190,8,81,219,100,181,178,242,232,1,242,171,171,208,169,18,43,9,197,238, +64,115,50,15,185,81,157,159,68,2,52,165,165,200,103,207,170,218,32,45,203,50,107,78,30,99,99,97,126,159,219,189,205,246,190,120,81,244,228,37,184,250,195,247,188,242,63,117,134,127,64,0,81,209,49,36,36,38,17,27,23,79,120,68,164,103,68,120,185,30,102, +225,147,158,95,91,83,205,170,15,222,85,189,89,181,63,104,59,80,213,23,135,27,124,177,126,13,107,86,127,128,251,50,56,221,69,81,20,86,31,63,194,166,194,124,180,178,202,243,254,20,5,185,168,8,77,153,119,203,2,36,135,3,237,169,83,40,245,189,15,79,212,54, +53,124,247,240,62,14,148,158,225,171,196,190,61,59,89,183,246,227,1,127,240,134,175,250,207,37,23,44,128,67,7,246,241,249,250,53,170,226,71,245,7,37,197,69,62,91,135,99,179,217,248,240,253,183,249,252,179,181,3,190,51,236,42,41,226,227,227,71,113,187, +221,234,14,227,144,36,168,174,66,91,88,128,228,131,245,99,114,99,35,218,130,2,80,177,160,84,146,36,206,52,214,243,246,161,125,20,213,93,158,225,167,59,123,169,172,250,224,93,118,237,216,58,96,243,119,166,164,216,171,237,120,3,78,176,172,86,11,235,214, +126,204,129,253,123,7,156,193,155,155,26,249,120,213,123,148,151,151,250,48,205,38,222,121,243,117,182,110,222,48,96,59,66,105,67,61,111,31,218,75,131,205,162,126,10,96,181,162,41,56,133,220,210,226,179,124,105,206,156,129,162,98,20,197,173,162,243,192, +209,202,82,94,219,183,147,138,62,152,70,93,42,90,90,154,89,241,218,43,94,109,217,233,43,170,171,42,249,232,253,119,168,173,169,190,228,95,17,125,250,244,154,234,42,94,125,229,5,142,29,57,164,58,194,129,175,113,58,157,108,219,178,145,125,187,119,162,184, +221,62,157,187,215,214,84,243,191,255,190,196,214,205,27,112,56,236,3,171,3,216,109,124,152,123,136,66,149,177,209,1,112,185,144,79,159,70,83,86,225,211,188,73,110,55,186,252,124,104,108,82,181,182,194,237,86,216,94,82,200,191,118,109,229,108,125,237, +87,230,12,195,210,179,37,252,231,223,255,228,76,73,209,128,201,147,213,98,97,221,154,213,28,57,124,96,64,248,189,124,46,151,101,165,103,121,249,197,231,56,121,34,247,146,139,150,219,229,226,200,161,3,124,188,234,3,234,235,235,0,201,231,141,187,170,170, +130,151,255,245,28,159,125,250,9,205,94,236,173,244,37,46,69,97,119,73,17,219,139,79,99,87,121,134,36,138,130,84,83,139,166,184,8,73,241,125,61,202,45,45,232,142,30,69,177,219,123,29,225,84,146,36,100,36,182,22,157,226,175,155,214,147,95,82,212,231,31, +65,124,167,214,93,151,53,247,216,17,222,252,223,127,189,138,230,224,43,28,14,59,91,55,111,224,227,85,239,225,114,58,7,196,26,173,62,201,65,209,233,66,254,245,143,103,217,177,117,211,37,107,72,138,162,112,232,224,62,222,90,209,90,249,125,105,236,198,198, +6,86,188,246,10,111,190,254,31,10,11,242,47,249,27,191,164,174,150,143,79,28,165,186,165,9,185,183,67,152,182,188,91,173,200,167,242,145,155,91,250,174,241,157,219,32,141,138,23,155,36,73,232,53,90,14,84,148,241,236,250,79,248,124,195,122,175,118,74, +244,219,75,180,7,47,144,157,219,183,240,223,151,255,117,73,103,42,54,155,149,47,62,251,148,55,255,247,31,236,118,123,191,159,237,217,169,59,193,155,173,57,93,118,226,134,6,114,143,29,193,98,49,19,23,151,224,147,229,254,61,197,110,179,177,105,195,103, +188,249,191,255,82,116,46,186,163,44,203,76,153,54,147,152,216,184,30,15,109,219,246,18,246,164,209,56,157,14,10,11,242,57,93,112,10,135,195,78,84,116,76,191,31,201,4,208,108,179,241,230,161,189,236,40,57,141,70,205,103,121,73,66,65,65,115,234,20,218, +211,167,233,203,73,128,164,40,72,205,205,40,1,1,160,50,252,142,86,163,165,214,97,35,47,247,24,149,199,142,98,52,24,123,85,199,253,69,121,89,41,187,118,110,101,251,214,77,52,244,224,16,151,178,210,179,228,231,157,68,146,36,98,99,227,251,53,114,66,67,125, +61,171,62,124,151,15,86,190,229,217,5,224,31,16,192,196,73,83,123,124,40,197,128,220,154,211,109,193,27,234,249,120,213,251,228,159,60,193,85,139,175,97,204,184,137,125,222,144,170,171,42,89,249,246,10,118,110,223,226,147,13,213,189,123,123,186,201,59, +121,156,179,103,138,217,179,107,7,243,22,44,98,228,232,113,253,218,216,234,173,102,182,21,157,106,93,24,168,114,53,187,124,166,20,205,201,60,250,163,203,203,22,11,154,194,66,28,33,193,72,42,87,177,107,13,6,154,194,67,217,113,240,16,199,14,29,96,242,212, +25,204,156,51,159,212,180,140,75,60,154,114,147,159,119,130,93,219,183,112,232,224,126,42,43,202,122,21,90,252,76,73,17,111,188,254,10,135,15,238,99,201,117,55,145,217,199,65,47,1,10,11,242,121,123,197,171,28,62,124,0,219,0,156,102,247,121,156,98,135, +221,206,209,35,7,41,56,149,199,232,177,227,153,191,112,49,153,89,131,188,138,4,218,17,102,115,11,187,119,110,99,245,135,239,81,92,84,120,209,168,168,109,17,96,111,4,83,81,23,224,28,179,217,204,161,131,251,56,158,123,148,65,57,67,152,49,123,30,195,71, +142,38,40,40,184,239,59,137,162,96,115,185,212,45,97,0,104,110,65,115,242,36,178,171,255,66,224,200,85,85,104,78,159,198,157,149,13,106,218,133,36,35,25,140,184,245,122,154,170,171,249,100,245,135,236,216,190,133,49,99,39,48,99,214,92,82,211,51,251,237, +165,225,118,185,168,174,174,226,224,129,189,236,218,177,149,252,147,39,176,88,204,170,167,118,45,45,205,236,218,185,141,188,147,199,153,60,109,38,179,230,92,73,92,124,130,207,93,28,181,181,53,108,252,124,29,235,214,174,246,201,198,112,233,114,21,172, +54,44,22,51,91,55,111,96,247,206,109,140,24,53,150,43,38,77,37,35,43,155,128,192,32,244,122,3,90,141,198,51,34,232,74,84,218,182,172,184,92,78,108,54,27,77,141,141,28,61,124,144,205,27,63,227,196,241,99,157,54,12,69,81,168,174,174,164,164,248,116,183, +162,165,40,10,6,131,145,154,234,42,175,124,8,118,187,141,67,7,247,113,232,224,62,146,146,83,24,57,122,28,195,71,142,38,54,54,30,63,63,127,244,6,61,178,172,233,149,152,158,191,117,164,237,45,238,116,58,177,89,173,152,205,45,228,158,202,67,105,104,0,183, +171,231,206,108,207,117,18,154,19,39,123,188,177,217,103,83,67,183,27,77,201,25,148,160,32,148,192,192,94,109,144,246,228,223,225,64,58,183,6,80,146,160,190,174,150,207,214,125,194,166,13,235,201,25,50,140,49,99,39,144,53,104,48,225,225,17,24,140,70, +116,58,125,187,93,4,189,182,189,162,224,114,187,112,56,28,88,45,22,234,235,235,40,56,149,199,225,131,251,201,61,122,248,220,71,30,223,81,87,87,203,170,15,222,101,211,134,245,140,27,63,137,9,87,76,38,33,49,25,63,127,127,244,58,61,178,70,211,109,89,206, +111,51,46,167,19,171,205,74,109,117,53,123,118,239,96,251,214,141,148,20,119,254,117,210,229,116,82,89,89,129,127,64,64,151,62,218,214,45,63,50,110,151,139,134,134,122,220,110,223,250,115,165,27,150,204,187,100,30,226,232,152,88,50,179,114,72,76,74,38, +58,58,134,160,224,144,115,29,217,128,78,167,243,140,194,218,58,165,221,102,195,108,49,211,216,80,79,69,121,25,69,167,11,56,121,252,88,143,163,59,104,52,26,36,73,238,182,31,43,74,91,159,81,250,36,216,94,98,82,50,169,105,25,196,197,39,16,17,17,69,80,112, +48,38,147,31,70,147,9,157,78,143,86,171,245,188,65,219,86,232,183,218,192,129,195,238,192,110,183,181,158,192,221,220,236,9,149,82,86,118,150,162,211,133,212,214,84,227,146,36,213,139,68,165,75,184,122,95,105,117,54,170,127,165,187,21,164,46,58,147,201, +228,71,106,90,58,73,201,169,196,196,198,17,22,30,65,64,96,32,70,163,9,131,167,205,105,61,29,190,205,238,238,115,194,228,176,219,177,218,172,88,45,22,26,27,27,168,173,169,161,186,170,130,51,37,197,148,20,23,97,177,152,251,213,94,73,201,169,100,102,13, +34,33,49,137,136,200,40,2,131,130,49,153,76,24,12,198,118,109,200,237,118,99,183,219,177,217,172,180,180,52,211,88,95,79,105,233,89,10,11,242,56,121,60,183,199,174,19,173,182,213,54,109,253,163,59,92,46,151,207,63,26,92,82,193,58,31,131,193,128,191,127, +0,126,126,254,231,58,174,14,173,86,135,162,184,113,43,10,14,187,29,155,205,134,217,220,66,115,83,147,234,3,78,7,220,156,92,171,195,207,207,239,92,185,141,173,163,205,182,198,38,73,40,110,5,183,219,133,203,237,198,233,112,96,183,219,177,219,172,88,44, +22,108,54,171,234,211,87,4,173,241,195,252,252,252,48,249,249,97,48,24,91,67,195,104,52,173,182,87,20,220,110,5,183,210,58,26,113,56,236,216,237,14,172,86,11,86,171,5,155,213,234,83,103,178,183,152,76,126,248,7,180,246,159,54,241,189,80,176,172,22,11, +45,45,95,110,136,190,28,25,48,130,37,16,8,4,221,250,59,133,9,4,2,129,16,44,129,64,32,16,130,37,16,8,132,96,9,4,2,129,16,44,129,64,32,16,130,37,16,8,132,96,9,4,2,129,16,44,129,64,32,16,130,37,16,8,132,96,9,4,2,129,16,44,129,64,32,16,130,37,16,8,132,96, +9,4,2,129,16,44,129,64,32,16,130,37,16,8,132,96,9,4,2,129,16,44,129,64,32,16,130,37,16,8,132,96,9,4,2,129,16,44,129,64,32,16,130,37,16,8,132,96,9,4,2,129,16,44,129,64,32,16,130,37,16,8,132,96,9,4,2,129,16,44,129,64,32,16,130,37,16,8,132,96,9,4,2,129, +16,44,129,64,32,4,75,32,16,8,132,96,9,4,2,129,16,44,129,64,32,4,75,32,16,8,132,96,9,4,2,129,16,44,129,64,32,4,75,32,16,8,132,96,9,4,2,129,16,44,129,64,32,4,75,32,16,8,132,96,9,4,2,129,16,44,129,64,32,4,75,32,16,8,132,96,9,4,2,129,16,44,129,64,32,4,75, +32,16,8,46,29,154,33,131,210,127,230,109,34,57,131,135,18,31,159,72,76,76,220,69,127,170,42,43,248,197,211,207,80,82,116,154,218,218,154,14,239,159,191,112,49,213,85,149,216,172,214,62,45,172,78,167,227,222,7,31,229,91,247,220,207,232,177,227,217,248, +197,250,1,87,33,125,109,139,167,126,243,167,46,235,162,191,200,200,204,230,161,199,126,196,23,235,215,94,246,207,242,181,77,245,122,3,67,135,141,100,80,206,16,162,162,99,112,58,29,180,180,52,3,144,154,158,65,114,114,42,81,209,49,152,76,38,204,102,51, +110,151,203,115,111,106,122,6,26,141,6,139,217,220,59,33,208,104,25,62,98,20,131,6,15,37,48,48,136,170,202,138,1,41,88,90,95,36,50,111,193,213,132,132,132,182,138,215,144,97,20,22,228,99,181,88,0,56,121,34,151,136,136,72,116,122,125,167,247,143,26,61, +142,19,185,71,105,168,175,235,211,194,78,155,49,135,248,132,68,190,127,223,183,208,235,244,100,231,12,193,106,177,80,116,186,96,192,84,72,95,219,162,187,186,232,47,116,122,61,17,17,145,151,221,179,58,106,51,190,180,233,130,69,75,185,241,230,219,41,44, +200,167,166,186,138,144,144,48,178,115,6,243,195,199,150,83,82,92,196,173,119,124,139,176,176,8,106,170,171,8,13,11,35,44,60,130,127,191,240,119,182,110,250,2,128,91,239,248,22,123,119,239,228,147,85,239,247,248,153,225,17,145,252,236,151,191,167,188, +172,148,178,178,179,204,155,191,8,73,150,248,233,15,31,197,97,183,127,245,4,235,217,63,62,237,249,255,215,222,250,144,23,254,241,44,133,167,242,59,125,123,216,237,182,118,191,253,230,151,63,110,247,119,73,146,49,26,141,88,44,157,191,37,186,186,70,163, +209,226,118,187,81,20,119,187,223,227,19,18,57,121,60,23,139,217,140,5,51,119,223,115,63,59,182,109,246,74,176,116,122,125,151,149,106,242,243,107,247,182,211,233,116,56,28,142,78,175,87,99,11,181,207,234,201,117,157,149,175,171,124,117,149,158,193,104, +244,233,232,209,100,242,235,212,54,221,61,171,59,251,92,104,79,128,133,87,95,211,101,155,233,168,125,247,244,121,211,103,205,229,250,155,110,229,23,63,126,156,194,130,47,251,143,86,171,197,233,116,122,254,190,110,237,106,143,32,77,157,62,139,239,221, +255,16,187,182,111,233,81,93,119,68,77,117,21,191,248,241,227,84,85,85,120,234,246,175,255,124,153,81,163,199,177,107,199,214,175,158,96,245,132,97,195,71,113,223,131,143,162,211,233,112,186,92,60,247,236,31,56,122,228,96,171,224,61,247,18,255,248,235, +51,156,56,126,140,123,238,93,206,152,113,19,176,59,28,232,245,122,158,253,227,211,28,57,116,160,93,71,233,236,154,200,168,104,190,247,192,195,36,38,165,32,203,50,135,15,238,231,133,231,158,197,108,110,225,230,219,238,98,230,156,249,200,146,204,248,137, +147,176,219,237,68,69,69,51,116,232,8,238,184,115,25,47,189,240,119,102,205,189,146,67,7,246,241,201,234,15,0,184,111,249,163,100,15,26,194,131,223,187,11,128,244,204,108,30,123,242,167,220,115,247,45,76,156,52,149,219,239,92,134,36,73,24,77,38,214,172, +254,144,183,86,252,215,83,158,23,159,255,43,203,190,251,32,225,225,17,220,119,207,29,104,52,90,30,120,232,49,162,99,226,208,105,117,124,186,102,149,231,250,118,226,223,11,91,120,251,172,240,136,200,78,175,235,172,124,93,217,191,171,244,146,83,82,121, +240,225,39,9,12,12,194,225,116,176,117,243,23,157,182,149,151,95,123,151,159,252,224,17,74,138,79,183,218,61,35,139,199,126,248,115,238,185,235,102,79,153,87,127,180,146,37,215,222,132,86,163,1,224,111,127,254,61,135,15,237,239,209,179,186,202,103,71, +246,172,175,107,29,237,222,189,236,94,198,143,191,162,93,155,217,189,107,123,183,237,187,171,231,157,207,245,55,222,202,219,111,188,218,78,172,128,118,98,117,33,187,118,108,229,129,135,30,39,34,50,138,178,210,179,157,94,247,171,223,61,203,167,107,86, +177,241,243,117,158,223,126,254,171,63,176,101,211,23,172,91,187,218,35,86,109,200,178,220,169,240,126,45,4,107,240,208,97,60,178,252,30,108,86,43,139,150,92,199,157,223,254,30,255,247,253,239,158,123,43,233,145,100,137,161,195,70,144,157,51,152,239, +220,117,11,138,226,38,40,40,24,235,5,111,200,174,174,249,254,163,63,224,208,129,125,252,226,199,143,35,203,50,247,127,255,49,238,94,118,47,127,123,246,247,172,120,237,101,76,38,19,46,151,139,255,188,244,60,0,191,125,230,57,222,95,249,38,219,183,108,4, +32,38,54,142,225,35,71,243,201,234,15,144,101,153,145,163,199,209,220,212,72,114,74,26,69,167,11,24,62,98,20,199,115,143,2,144,119,34,151,39,30,125,128,166,198,6,34,35,163,249,243,115,255,102,253,167,31,83,91,83,141,94,175,231,246,59,151,241,244,83,63, +242,52,162,95,60,253,12,123,118,109,231,195,247,222,38,48,48,136,223,252,241,111,20,156,202,99,207,185,6,255,229,27,186,231,182,104,187,94,237,179,150,63,242,100,167,215,117,86,190,248,248,196,78,243,213,85,122,15,62,252,36,219,183,110,228,157,55,95, +199,96,48,240,195,159,61,221,197,168,85,135,44,75,231,189,164,36,244,58,125,187,50,79,154,50,157,135,31,88,230,105,79,119,220,125,143,167,61,117,247,172,174,242,217,145,61,219,120,233,95,207,145,157,51,180,93,155,233,73,251,238,234,121,109,132,133,71, +16,29,19,203,254,189,187,123,213,175,134,143,24,141,197,108,166,178,162,188,203,235,182,109,222,192,244,153,115,60,130,21,29,19,75,122,102,22,191,123,250,75,23,246,136,145,99,240,15,8,96,250,204,185,28,207,61,202,129,125,123,6,156,96,245,219,87,194,117, +107,86,123,134,231,251,246,236,36,54,46,238,162,107,42,43,203,9,9,13,99,209,226,107,48,153,252,104,108,108,184,72,229,59,187,38,58,38,150,180,180,12,222,125,235,117,0,220,110,55,111,191,241,42,147,167,206,64,150,123,86,204,3,251,247,50,104,240,80,36, +73,98,232,240,145,148,149,158,101,255,222,221,140,155,112,133,167,113,180,85,98,77,77,53,77,141,13,132,132,134,98,52,25,105,110,110,34,252,60,63,201,39,171,62,240,52,248,200,168,104,50,51,179,57,116,96,31,9,137,201,4,135,132,146,119,34,151,17,35,199, +116,154,151,158,216,194,155,103,117,119,93,103,229,235,44,95,93,165,23,27,23,79,92,92,60,31,172,124,11,0,155,205,198,186,181,171,251,164,61,117,247,172,158,216,231,124,123,122,155,159,158,214,71,64,64,32,0,245,231,249,46,239,95,254,127,60,255,242,10, +158,127,121,5,139,150,92,231,249,125,210,148,233,220,251,192,35,252,228,169,223,242,221,251,31,230,111,207,254,30,215,121,142,247,142,216,180,241,115,178,179,7,19,22,30,209,58,253,156,57,151,61,187,118,208,210,220,236,185,230,202,171,22,51,111,193,34, +34,163,162,169,40,47,67,163,209,14,56,193,234,183,28,181,13,171,1,92,46,23,26,89,115,209,53,21,229,101,252,226,39,143,115,253,141,183,114,221,77,183,242,249,250,181,188,246,202,191,112,187,221,221,94,19,22,30,65,115,115,83,187,225,115,77,117,53,26,173, +150,208,208,48,106,106,170,187,205,99,73,241,105,108,86,43,105,25,89,140,159,48,137,125,123,118,146,119,242,56,183,125,243,219,124,240,222,219,100,102,15,226,47,127,250,45,0,223,184,245,155,76,153,54,139,146,146,34,26,27,234,49,26,77,200,210,151,163, +130,242,242,210,118,78,89,183,162,112,219,157,223,190,224,121,69,157,230,165,39,182,240,230,89,221,93,215,89,249,58,203,87,87,233,133,132,134,209,220,220,212,206,199,82,215,139,47,106,210,121,118,245,220,95,87,219,97,123,234,238,89,61,177,207,249,246, +244,182,125,247,180,62,26,26,234,207,93,31,197,217,51,197,0,188,250,159,23,49,190,105,228,238,101,247,97,52,154,60,215,86,87,85,114,244,200,65,106,107,107,200,59,113,28,171,213,210,109,254,154,26,27,216,191,111,55,83,167,205,226,131,247,222,98,234,140, +89,188,248,207,191,181,187,230,183,191,250,169,199,15,247,179,95,253,30,135,195,206,202,183,87,124,61,5,203,173,184,123,116,93,225,169,124,126,255,244,207,137,138,142,225,225,199,126,196,226,107,110,224,253,119,223,236,246,154,93,59,182,18,16,16,216, +206,177,25,22,30,142,203,233,108,247,214,106,143,114,209,47,135,14,238,103,240,144,97,140,30,59,129,167,126,250,36,21,229,165,68,199,196,50,241,138,41,84,148,151,81,87,91,195,176,17,163,152,61,111,33,203,191,119,55,102,115,11,0,227,39,76,238,180,76,181, +181,53,200,146,196,111,127,245,211,94,125,117,233,137,45,212,62,171,171,235,186,43,95,71,249,218,190,117,83,167,233,197,39,36,226,31,16,136,70,163,241,140,4,218,70,20,29,182,21,183,27,249,188,23,90,240,185,47,208,237,106,78,81,58,188,183,177,161,190, +203,103,169,173,139,174,218,76,87,237,187,167,207,107,168,175,227,76,73,49,211,102,204,102,197,107,47,123,126,107,0,172,182,246,174,128,147,39,114,85,45,201,249,226,179,79,249,198,173,223,228,216,209,67,104,53,90,14,29,216,219,225,117,118,187,141,227, +199,142,144,144,144,244,245,157,18,246,132,224,224,16,252,3,2,90,167,68,21,229,20,22,228,19,16,24,212,163,107,74,207,158,161,184,248,52,75,175,251,134,231,218,107,111,184,133,93,59,183,117,58,92,110,110,106,34,58,58,166,221,111,7,247,239,97,218,140,217, +88,44,22,202,74,207,224,118,187,57,180,127,47,139,175,185,145,131,251,91,43,216,223,63,0,187,221,238,121,179,77,157,62,203,147,167,206,70,75,5,5,249,220,124,235,157,237,190,64,5,7,135,120,101,11,111,158,213,213,117,93,149,175,179,124,117,149,94,233,217, +51,84,85,86,176,96,209,210,115,95,113,53,204,156,61,191,243,233,112,69,57,131,135,14,247,124,241,157,51,111,97,143,219,80,119,207,82,83,23,221,181,25,95,212,7,192,138,87,95,98,225,213,215,176,96,209,82,207,50,9,73,146,209,105,117,189,27,133,104,181,24, +12,6,207,159,54,151,200,190,61,187,8,14,14,101,241,181,55,178,241,139,245,30,209,143,141,139,247,76,21,1,194,195,35,24,55,97,18,185,199,142,124,125,167,132,61,33,54,46,129,71,159,248,9,77,77,141,232,116,58,234,106,107,248,195,111,159,234,241,53,207,252, +238,151,60,248,208,19,204,158,123,37,146,44,83,112,42,143,231,254,242,199,78,159,247,241,71,239,241,224,195,79,48,117,250,108,86,190,179,130,173,155,190,224,208,129,125,60,240,208,227,188,247,206,27,158,235,118,239,222,193,164,169,51,120,245,149,23,0, +216,187,123,7,11,174,90,194,63,94,124,13,171,213,202,145,195,7,186,117,150,254,249,15,191,230,222,7,30,225,165,215,222,193,98,54,163,215,235,249,243,31,159,166,225,112,189,106,91,120,251,172,206,174,235,170,124,93,229,171,179,244,142,30,62,200,95,254, +244,91,190,255,232,147,92,185,112,49,10,10,159,126,178,138,164,228,148,14,243,255,250,127,95,226,254,229,255,199,188,43,23,161,213,233,88,179,250,3,178,7,13,238,217,248,71,81,186,125,86,111,235,162,187,54,227,171,250,216,189,107,59,127,249,227,211,124, +227,182,187,248,230,221,247,208,216,208,64,96,96,32,245,13,245,108,221,178,161,199,253,232,246,59,151,113,251,157,203,190,20,194,215,94,230,189,119,222,64,81,220,108,222,248,25,87,47,189,158,7,94,249,151,231,223,99,98,226,248,238,3,15,131,162,96,183, +219,49,153,252,88,255,233,199,94,251,25,251,2,233,134,37,243,148,1,149,33,73,34,48,48,8,155,221,214,233,26,154,238,174,241,247,15,192,102,179,118,249,57,184,13,141,70,139,191,191,63,141,141,13,189,206,107,64,64,32,14,167,163,87,235,138,116,122,61,38, +163,137,166,166,198,78,167,53,189,177,133,47,158,213,217,117,157,149,175,187,124,117,245,220,192,192,32,90,90,154,59,244,197,117,52,202,108,110,110,234,214,161,220,25,221,61,171,55,117,225,139,54,211,155,231,153,252,252,48,24,12,88,204,102,108,182,254, +89,94,224,31,16,128,132,68,115,115,19,3,149,1,39,88,2,129,64,112,89,248,176,4,2,129,64,8,150,64,32,16,130,37,16,8,4,66,176,4,2,129,64,8,150,64,32,16,130,37,16,8,4,151,147,96,61,245,155,63,145,145,153,125,73,10,17,25,25,77,98,82,74,183,191,249,186,60, +131,114,134,50,125,230,28,134,12,29,225,147,114,68,199,196,18,223,193,118,136,248,132,36,102,206,158,207,200,209,99,59,220,87,215,19,230,47,92,220,225,22,23,95,213,95,111,238,239,46,47,61,173,227,54,50,50,179,121,234,55,127,234,215,54,215,217,51,189, +109,119,130,126,18,172,238,162,46,102,231,12,33,57,37,173,219,223,212,112,215,178,123,25,148,51,164,219,223,124,85,30,127,255,0,126,255,231,127,112,251,157,203,200,206,25,194,157,223,254,46,63,125,234,119,61,142,10,209,17,211,102,204,225,247,127,254, +7,139,150,92,219,238,247,233,179,230,242,139,95,255,145,65,131,135,240,141,91,239,228,137,31,63,165,42,253,81,163,199,17,26,26,214,169,221,189,141,154,217,155,251,207,207,139,55,117,220,70,127,70,47,237,238,153,222,182,59,193,37,152,18,234,245,134,139, +126,91,120,245,53,196,37,36,118,251,219,249,24,140,198,139,127,51,180,79,59,40,40,152,33,195,70,176,117,243,134,46,127,107,107,100,29,33,73,50,38,147,223,69,191,43,238,214,53,181,58,93,251,189,92,45,45,205,188,240,220,179,252,240,241,229,188,240,220, +179,252,224,255,30,36,62,33,137,97,35,70,95,144,174,132,201,175,125,186,231,239,186,111,227,198,155,239,96,254,130,171,249,124,221,154,139,242,117,251,55,151,241,167,63,252,138,127,252,245,25,126,244,248,247,137,136,136,98,194,196,201,189,178,25,180, +70,50,61,93,120,170,71,118,239,168,254,122,66,103,246,234,42,47,109,104,52,90,36,169,227,230,216,89,125,118,86,86,79,125,235,116,234,196,168,139,251,186,122,102,103,249,20,248,14,159,238,37,236,44,234,98,71,145,26,135,141,24,213,97,244,198,103,159,123, +137,79,86,191,207,226,165,55,96,48,24,105,104,168,231,47,207,252,134,211,133,167,144,36,137,23,94,126,131,21,175,191,204,154,213,31,2,173,27,115,247,239,221,229,137,42,208,209,111,106,162,103,2,140,30,59,158,7,31,126,28,157,94,79,125,93,45,127,121,230, +183,158,40,152,121,39,143,123,158,231,112,56,176,88,204,104,52,173,29,238,217,231,94,226,189,119,222,224,198,155,111,199,96,48,82,95,95,203,243,127,255,51,183,221,185,140,232,232,24,140,70,19,255,121,233,121,62,95,223,42,80,155,55,126,206,202,183,255, +199,210,235,110,106,215,33,82,211,210,145,36,201,147,31,167,211,201,174,29,91,25,61,110,2,59,47,8,93,155,144,152,204,242,71,158,36,52,52,204,19,22,100,209,146,235,88,126,239,221,158,60,253,227,175,207,48,105,202,52,85,81,51,187,139,2,218,157,189,206, +167,45,47,199,115,143,116,25,37,182,179,250,84,27,81,116,204,216,9,220,253,157,251,120,236,161,123,105,105,105,38,42,58,134,95,254,230,207,252,242,103,79,82,92,84,232,117,196,212,142,218,162,96,0,11,86,103,81,23,59,138,212,184,123,215,246,14,163,55,234, +245,122,198,79,156,204,242,251,190,133,195,110,231,230,219,238,98,249,35,79,240,208,253,203,80,20,133,119,222,122,157,195,7,15,180,155,50,173,120,245,229,139,166,81,231,255,166,38,122,38,64,70,86,182,39,31,215,222,112,51,203,31,121,130,71,151,127,247, +162,114,167,165,103,226,239,31,224,217,221,174,215,235,153,60,117,6,15,124,247,46,220,110,23,63,248,233,175,248,241,47,126,203,143,30,255,62,69,167,11,24,51,110,34,15,62,252,132,71,176,202,74,207,180,141,169,46,234,120,213,213,149,237,126,171,170,172, +232,112,202,177,252,145,39,216,189,115,43,111,173,120,21,131,209,200,143,126,250,107,244,250,246,81,58,37,89,82,29,53,179,187,40,160,189,177,87,91,94,160,235,40,177,157,213,167,55,17,69,199,77,156,204,183,191,251,0,207,254,241,105,238,125,240,17,86,127, +180,146,226,162,194,110,239,235,73,196,212,142,218,162,96,0,79,9,123,18,85,180,71,233,172,253,216,19,59,232,221,183,254,71,108,92,2,177,113,9,0,124,244,254,59,158,0,103,41,169,233,4,7,135,112,96,255,151,113,125,58,250,173,183,209,51,219,248,236,211,79, +60,249,248,232,253,119,136,79,72,34,54,46,190,189,63,43,32,128,7,30,122,140,255,188,252,124,187,3,11,62,95,191,6,151,203,137,162,40,28,59,114,136,188,147,185,158,131,11,142,28,218,143,201,100,234,54,164,137,78,167,195,233,104,191,129,219,225,116,92,52, +181,141,137,141,35,33,33,137,247,206,197,202,178,89,173,172,249,228,163,126,175,191,158,216,235,124,122,18,37,246,194,250,244,54,162,232,203,255,250,59,233,25,89,60,254,163,95,0,120,210,241,54,98,106,71,237,78,48,192,71,88,61,137,42,218,19,154,206,219, +5,111,183,219,48,155,91,8,9,9,57,111,36,210,202,140,89,115,217,188,233,139,118,167,227,116,244,91,111,163,103,182,237,238,111,108,104,104,55,237,107,205,71,168,39,124,174,201,207,143,31,253,236,105,54,109,248,140,205,27,62,107,151,183,182,8,146,0,110, +151,155,166,166,166,118,182,1,144,53,93,219,199,98,54,99,52,181,247,153,152,76,166,139,78,137,9,13,11,111,141,178,121,94,128,184,218,30,68,88,245,166,254,58,250,90,217,157,189,46,164,39,81,98,47,172,79,111,35,138,218,108,54,62,94,245,30,119,47,187,143, +95,253,252,135,61,186,175,39,17,83,59,106,119,130,1,46,88,93,71,21,85,122,248,91,251,8,147,6,131,1,63,63,255,139,162,134,202,178,204,228,105,51,249,197,143,31,235,242,55,53,209,51,219,162,122,6,5,7,127,105,40,173,246,92,62,234,207,9,71,171,88,237,217, +185,189,93,236,44,79,201,20,239,131,96,156,41,41,38,42,42,166,93,244,204,132,132,36,74,207,156,185,64,40,46,142,178,233,239,31,208,203,186,232,186,254,122,18,5,180,43,123,117,68,67,125,93,151,81,98,59,170,79,111,35,138,6,6,5,115,205,245,55,179,246,227, +143,184,253,206,111,115,244,240,1,156,78,103,151,247,117,23,49,181,163,124,10,46,131,41,97,87,116,20,169,177,179,232,141,179,230,92,137,86,219,170,165,87,47,189,129,179,103,74,60,111,233,43,175,90,76,108,92,60,99,198,78,160,166,186,170,93,108,236,142, +126,83,19,61,179,141,153,115,230,123,2,241,207,95,184,152,242,178,82,202,203,206,98,52,154,248,225,207,126,205,225,131,251,88,245,225,187,158,200,142,106,191,74,117,70,85,85,5,69,69,133,92,181,248,90,207,20,106,242,212,153,236,216,182,169,157,45,218, +162,108,206,91,112,53,208,26,101,115,214,156,43,123,85,23,221,209,147,40,160,157,217,235,252,188,158,79,119,81,98,59,170,79,111,35,138,222,251,192,195,108,219,188,129,127,191,240,55,202,74,207,114,251,157,223,233,246,190,238,158,217,81,62,5,151,193,8, +171,43,58,138,212,216,89,244,198,130,252,147,252,233,111,47,34,107,52,184,156,78,254,244,251,95,121,166,33,183,220,126,55,26,89,67,206,144,97,237,206,88,107,115,122,94,248,155,218,232,153,110,183,155,3,251,246,240,215,127,190,140,219,237,198,237,118, +243,231,63,252,26,69,81,24,63,113,50,89,217,57,100,101,231,112,237,13,183,120,158,149,123,236,8,63,253,193,35,62,181,219,223,159,253,61,143,62,241,83,174,94,114,29,6,163,145,15,222,125,139,220,99,71,218,217,98,245,71,239,181,70,217,124,228,73,174,186, +250,154,86,31,212,222,93,164,166,165,247,184,46,186,163,187,40,160,93,217,171,93,94,75,223,107,151,110,87,81,98,59,170,79,111,34,138,142,143,159,66,116,76,28,127,60,87,199,47,60,247,44,127,252,203,11,236,219,187,139,131,251,247,168,142,152,218,81,62, +5,125,67,191,6,240,235,40,82,227,133,191,253,227,197,215,248,203,51,191,33,247,216,17,252,3,2,218,29,67,212,54,20,87,19,17,81,109,244,76,141,70,131,159,159,63,77,77,141,151,180,162,130,131,67,48,155,91,218,249,81,58,178,69,96,96,16,102,115,11,195,71, +142,225,214,59,238,238,240,43,93,103,117,209,211,124,116,21,5,180,51,123,117,87,111,189,137,18,123,126,89,251,34,162,168,175,34,166,10,46,227,17,86,171,35,215,121,81,7,233,232,55,206,57,116,47,20,43,64,117,248,214,206,238,83,20,165,203,78,235,114,185, +46,185,88,65,123,39,126,71,101,74,76,74,230,76,73,9,77,77,141,173,83,182,249,11,219,173,21,235,73,93,168,205,71,79,236,213,93,189,181,180,52,247,58,47,221,213,139,195,110,87,117,50,78,87,247,13,132,182,32,4,75,112,217,51,103,222,85,76,155,57,187,245, +224,130,160,32,78,229,159,228,141,215,94,17,134,17,136,41,97,95,18,26,22,78,83,99,67,175,166,6,130,86,100,89,246,76,89,132,253,4,98,132,213,15,244,230,68,96,65,123,220,110,119,183,83,54,129,224,178,126,41,11,19,8,4,2,33,88,2,129,64,32,4,75,32,16,8,193, +18,8,4,2,33,88,2,129,64,32,4,75,32,16,8,193,18,8,4,2,33,88,2,129,64,32,4,75,32,16,8,193,18,8,4,2,33,88,2,129,64,32,4,75,32,16,8,193,18,8,4,2,33,88,2,129,64,32,4,75,32,16,8,193,18,8,4,2,33,88,2,129,64,32,4,75,32,16,8,193,18,8,4,2,33,88,2,129,64,32,4,75, +32,16,92,254,104,134,12,74,255,153,47,18,74,77,207,32,57,57,149,152,152,56,194,194,35,112,187,221,88,44,230,139,174,75,74,78,101,248,200,209,196,197,39,224,112,56,60,135,165,182,221,31,21,29,131,201,100,194,108,54,227,238,228,116,225,243,159,213,246, +199,229,114,97,54,183,120,93,142,249,11,23,83,93,85,217,225,41,208,190,180,83,116,76,44,254,254,1,88,44,22,159,29,201,245,212,111,254,68,73,209,105,106,123,112,242,80,106,122,6,26,141,6,139,217,236,179,178,245,151,237,122,210,70,250,146,238,236,172,215, +27,24,58,108,36,131,114,134,16,21,29,131,211,233,80,117,80,172,47,242,210,215,117,210,223,248,236,152,175,91,239,248,22,97,97,17,84,85,85,16,20,20,76,92,92,2,133,133,249,252,227,175,34,1,166,84,0,0,32,0,73,68,65,84,207,80,81,94,6,192,183,190,115,63,227, +38,92,193,209,35,135,240,243,243,227,158,123,191,207,227,143,220,71,101,69,185,231,254,154,234,42,66,195,194,8,11,143,224,223,47,252,157,173,155,190,232,240,89,145,145,209,212,214,84,123,126,251,116,205,42,170,171,42,189,46,199,168,209,227,56,145,123, +148,134,250,186,62,49,248,173,119,124,139,240,240,72,106,106,170,8,10,10,38,58,58,150,215,254,243,34,235,214,174,246,58,237,136,136,72,116,122,125,143,243,177,119,247,78,62,89,245,190,207,202,214,31,182,235,105,27,233,75,186,178,243,130,69,75,185,241, +230,219,41,44,200,167,166,186,138,144,144,48,178,115,6,243,195,199,150,83,82,92,228,213,115,179,115,134,96,181,88,40,58,93,208,227,58,239,235,58,185,108,5,11,96,221,218,213,158,14,96,52,154,184,123,217,189,252,228,23,191,229,225,7,191,67,64,64,32,243, +23,94,205,61,119,223,226,57,123,80,150,101,220,110,119,135,247,79,157,62,139,239,221,255,16,187,182,111,193,225,112,92,244,172,53,31,127,216,109,103,51,153,252,58,28,229,1,24,140,198,14,223,58,191,249,229,143,123,157,150,78,167,187,40,143,6,131,1,155, +205,214,225,245,159,174,89,229,201,251,232,177,227,121,244,137,159,178,105,227,103,237,242,163,211,235,187,60,102,189,179,252,159,255,150,183,219,109,94,213,103,71,229,234,138,142,108,215,93,26,93,217,181,187,54,214,89,27,233,204,118,146,36,99,52,26, +59,124,158,70,163,65,150,229,139,242,218,93,61,156,207,244,89,115,185,254,166,91,249,197,143,31,167,176,32,255,203,78,166,213,94,52,138,238,77,186,109,44,188,250,26,118,108,219,220,78,176,186,171,115,85,117,226,231,231,211,145,247,128,21,172,243,177, +90,45,60,255,220,179,252,229,31,47,49,99,230,92,246,237,221,213,42,82,146,228,185,230,124,177,186,144,93,59,182,242,192,67,143,19,17,25,69,89,233,217,30,63,247,217,231,94,98,245,71,43,89,114,237,77,104,53,26,0,254,246,231,223,115,248,208,126,0,18,18, +147,89,254,200,147,132,134,134,225,112,216,89,249,246,10,22,45,185,142,229,247,222,237,185,255,31,127,125,134,227,185,71,186,77,43,60,34,146,7,30,122,140,232,152,56,116,90,29,159,174,89,197,91,43,254,139,36,73,188,240,242,27,172,120,253,101,214,172,254, +176,203,252,30,57,116,16,173,86,75,120,120,4,165,103,207,48,113,210,84,110,191,115,25,146,36,97,52,153,88,179,250,67,222,90,241,95,79,222,62,89,253,62,139,151,222,128,193,96,164,161,161,158,191,60,243,27,78,23,158,242,164,55,108,248,40,238,123,240,81, +116,58,29,78,151,139,231,158,253,3,71,143,28,236,85,221,117,86,174,95,253,238,89,62,93,179,138,141,159,175,243,92,251,243,95,253,129,45,155,190,96,221,218,213,237,108,215,89,26,61,169,163,158,114,97,27,233,204,118,146,36,115,207,189,203,25,51,110,2,118, +135,3,189,94,207,179,127,124,154,35,135,14,16,25,21,205,247,30,120,152,244,140,108,100,89,102,227,231,159,242,226,243,127,235,178,30,58,227,250,27,111,229,237,55,94,109,39,86,64,59,177,234,42,221,151,95,123,151,159,252,224,17,74,138,79,3,144,158,145, +197,99,63,252,57,247,220,117,51,119,47,187,151,241,227,175,96,232,208,17,220,113,231,50,94,122,225,239,236,222,181,189,219,58,239,77,157,188,248,252,95,89,246,221,7,9,15,143,224,190,123,238,160,190,174,238,235,35,88,0,46,151,147,19,185,71,201,204,26, +196,218,79,62,98,231,246,45,252,228,169,223,241,246,27,175,177,125,235,38,92,174,206,125,55,195,71,140,198,98,54,83,89,81,222,225,191,167,167,103,50,101,218,44,207,223,15,236,219,77,115,115,19,122,189,158,73,83,166,243,240,3,203,176,89,173,44,90,114, +29,119,220,125,15,255,247,253,239,2,176,252,145,39,216,189,115,43,111,173,120,21,131,209,200,143,126,250,107,244,231,13,169,245,122,61,146,44,121,254,191,235,180,158,100,207,174,237,124,248,222,219,4,6,6,241,155,63,254,141,130,83,121,236,217,181,157, +119,222,122,157,195,7,15,116,107,163,25,179,231,82,91,83,77,69,121,107,57,243,78,228,242,196,163,15,208,212,216,64,100,100,52,127,126,238,223,172,255,244,99,106,107,170,209,235,245,140,159,56,153,229,247,125,11,135,221,206,205,183,221,197,242,71,158, +224,161,251,151,121,210,27,60,116,24,143,44,191,199,147,223,59,191,253,61,79,126,123,74,103,229,218,182,121,3,211,103,206,241,8,86,116,76,44,233,153,89,252,238,233,159,93,100,187,174,108,211,157,93,123,202,133,109,164,51,219,197,199,39,146,157,51,152, +239,220,117,11,138,226,38,40,40,24,235,185,209,233,247,31,249,1,185,185,71,120,234,39,79,2,16,16,24,216,109,61,116,68,88,120,4,209,49,177,236,223,187,187,203,60,119,149,174,78,175,67,150,165,243,70,132,18,122,93,107,219,124,233,95,207,145,157,51,148, +247,87,190,201,246,45,27,219,165,217,85,157,247,166,78,110,191,115,25,79,63,245,163,94,13,16,250,155,62,255,74,216,216,212,136,222,96,0,224,153,223,253,146,247,87,190,201,210,235,110,228,159,47,189,206,156,121,11,219,93,59,105,202,116,238,125,224,17, +126,242,212,111,249,238,253,15,243,183,103,127,143,171,19,167,106,66,82,50,99,198,77,240,252,241,15,8,248,114,218,176,102,181,103,186,180,111,207,78,98,227,226,0,136,137,141,35,33,33,137,247,222,125,19,0,155,213,202,154,79,62,234,122,10,210,73,90,145, +81,209,100,102,102,115,232,192,62,18,18,147,9,14,9,37,239,68,46,35,70,142,1,224,163,247,223,225,236,153,226,14,211,92,122,237,141,252,225,217,127,242,252,203,43,152,57,123,62,191,250,249,15,61,226,93,83,83,77,83,99,3,33,161,161,24,77,70,154,155,155,8, +143,136,60,111,74,244,177,103,42,241,238,91,255,35,54,46,129,216,184,132,110,243,219,83,186,42,215,166,141,159,147,157,61,152,176,240,136,214,41,208,204,185,236,217,181,195,243,225,164,39,105,120,155,207,174,218,72,103,182,171,172,44,39,36,52,140,69, +139,175,193,100,242,163,177,177,1,187,221,70,84,116,12,105,233,25,188,249,191,255,160,40,110,20,197,77,83,99,67,143,234,225,66,2,2,90,133,174,254,60,95,209,253,203,255,143,231,95,94,193,243,47,183,142,226,213,164,219,163,105,114,15,108,217,147,58,249, +100,213,7,3,90,172,250,124,132,213,246,22,110,115,186,43,138,194,23,235,215,242,197,250,181,140,25,59,129,7,31,121,146,170,170,74,14,238,223,3,64,117,85,37,71,143,28,164,182,182,134,188,19,199,177,90,45,157,166,187,241,139,245,157,250,176,234,234,106, +207,27,229,185,208,200,173,211,142,208,176,112,154,155,155,218,249,14,58,123,99,118,151,86,68,68,36,110,69,225,182,59,191,221,238,250,158,56,86,55,126,177,158,77,27,62,99,206,188,5,36,38,165,120,166,0,0,223,184,245,155,76,153,54,139,146,146,34,26,27, +234,49,26,77,237,166,209,109,29,10,192,110,183,97,54,183,16,18,18,66,89,233,153,214,14,115,222,48,254,252,252,246,198,161,220,89,185,154,26,27,216,191,111,55,83,167,205,226,131,247,222,98,234,140,89,188,248,207,191,245,42,141,238,236,218,29,93,181,145, +255,111,239,188,195,154,58,247,56,254,205,201,34,36,97,111,183,162,168,183,118,92,171,181,245,90,173,19,247,170,214,81,21,169,184,7,142,58,122,213,107,181,94,220,10,85,172,202,197,133,219,74,173,219,218,90,107,209,106,221,160,84,69,156,44,23,35,172,132, +140,251,71,224,152,144,13,193,130,252,62,207,147,231,129,147,147,119,252,222,247,124,207,251,190,121,207,55,166,98,151,145,158,134,133,243,103,225,211,129,67,209,255,179,161,248,229,212,9,196,108,217,4,119,119,15,228,230,229,26,93,75,178,212,14,165,201, +206,206,42,174,187,23,123,163,218,190,53,10,14,123,28,16,28,50,1,14,14,34,155,211,229,152,201,79,23,107,218,220,154,54,73,79,79,173,94,139,238,165,241,241,245,67,179,183,223,197,209,67,177,6,239,93,190,116,1,183,18,174,195,223,191,17,43,88,119,110,39, +226,204,233,83,229,206,87,163,209,24,31,237,101,103,65,44,145,130,203,229,178,119,101,177,88,82,166,180,94,190,124,1,134,195,193,210,197,255,177,121,241,52,51,243,37,158,60,126,136,157,219,55,35,60,242,127,104,253,241,39,136,251,237,52,154,189,243,30, +58,116,238,134,41,227,130,217,45,26,45,63,104,173,247,89,103,23,87,189,133,125,71,71,177,222,93,93,173,81,151,43,118,150,234,117,250,231,147,24,52,116,4,110,221,188,1,30,151,135,27,215,46,151,41,54,166,226,106,9,83,125,196,82,236,238,223,75,194,242,176, +175,225,229,237,131,105,51,231,162,87,223,1,184,112,254,119,72,196,18,131,69,113,107,218,193,64,176,178,50,241,228,241,35,124,220,174,3,118,197,108,102,143,101,3,40,148,23,90,149,174,90,173,6,163,35,54,186,109,93,28,53,163,121,91,211,230,229,233,175, +111,252,148,208,213,205,29,31,253,171,45,230,46,8,195,197,243,113,136,191,126,21,30,158,94,122,83,23,31,95,63,212,247,111,132,164,164,59,101,202,131,203,229,130,199,227,177,47,107,238,70,169,41,79,240,236,105,6,58,119,237,201,166,209,190,99,96,153,242, +207,72,79,67,114,114,18,6,15,13,210,251,118,197,217,217,5,0,16,216,189,23,124,253,106,152,77,67,161,144,35,102,107,20,134,143,28,13,145,200,17,98,177,4,10,133,130,29,53,180,105,219,94,111,170,11,0,237,59,6,130,199,211,222,103,122,246,25,128,148,39,143, +203,60,140,231,241,120,16,10,133,236,139,97,24,139,245,186,114,233,34,156,157,93,209,171,223,64,156,57,125,202,168,240,88,74,195,18,221,123,246,69,195,128,38,54,213,197,92,236,156,157,93,216,191,159,102,164,227,126,114,18,36,82,39,164,165,166,32,37,229, +49,250,13,24,162,39,18,214,180,131,49,118,109,143,70,183,158,125,209,181,71,31,118,171,1,135,195,128,207,227,91,44,99,73,217,154,190,245,118,113,223,228,25,44,153,228,202,100,240,246,246,169,144,254,90,85,176,235,8,107,228,168,113,24,57,106,28,10,10, +10,144,242,228,17,14,198,238,195,79,199,15,3,0,188,188,125,48,125,230,60,240,248,124,20,22,22,128,199,229,225,96,236,94,118,116,101,43,195,71,142,198,240,145,163,217,255,183,109,222,136,195,7,191,183,56,90,138,88,189,20,161,211,231,160,123,207,190,218, +11,240,242,69,212,171,223,160,76,101,88,179,226,191,24,63,105,58,162,99,246,163,32,63,31,2,129,0,107,86,134,33,39,33,27,67,134,5,131,203,112,113,36,53,214,108,26,113,103,127,69,167,192,238,24,60,108,36,182,111,222,136,174,221,123,99,125,84,12,10,11,11, +145,16,127,205,96,17,55,57,233,14,86,175,141,2,195,229,66,165,84,98,245,242,197,101,110,175,97,65,33,24,22,244,106,193,126,87,204,102,196,238,223,109,178,94,217,241,89,208,104,212,56,123,230,103,244,236,243,41,38,109,217,100,115,108,178,227,179,204,150, +137,207,231,227,243,17,163,48,255,171,233,54,213,229,242,159,127,152,140,157,175,95,77,204,152,61,31,50,89,14,248,124,62,50,95,190,192,138,165,139,138,203,25,134,137,161,95,162,75,55,237,77,236,143,115,103,177,37,106,189,197,118,48,198,159,23,207,35, +98,101,24,6,125,62,18,35,130,199,32,39,59,27,82,169,20,89,217,89,136,251,253,87,179,101,4,128,29,219,162,49,113,202,151,232,28,216,3,60,62,31,199,143,28,68,64,227,166,236,251,71,15,197,98,242,180,217,104,211,182,3,14,236,223,101,243,254,179,178,182,73, +101,130,51,160,119,103,205,235,204,80,44,150,128,225,114,245,214,98,254,14,164,82,39,228,231,231,225,237,119,155,99,232,240,96,204,152,50,182,204,105,241,5,2,136,28,68,144,201,114,216,17,135,68,34,69,110,174,172,76,233,73,36,82,20,41,139,12,246,89,173, +143,138,65,196,170,37,72,188,149,0,177,68,98,176,216,109,111,140,213,171,162,211,104,24,208,4,19,167,124,201,110,51,177,87,236,56,28,14,164,82,39,200,21,114,163,251,215,68,34,71,112,56,28,189,167,37,76,165,101,13,34,71,71,8,133,66,20,228,231,27,236,199, +179,148,174,179,179,11,114,115,101,70,191,112,226,114,121,16,139,197,200,41,199,245,99,143,118,125,99,23,221,75,83,81,143,40,88,75,173,218,117,240,228,241,99,200,100,57,218,97,119,151,110,184,123,231,175,114,165,89,164,80,24,172,11,148,85,172,44,126, +182,120,234,91,209,98,101,170,94,21,157,134,80,40,196,238,157,91,237,30,59,141,70,99,246,34,55,182,153,180,60,109,88,144,159,111,114,243,165,165,116,75,22,240,141,161,82,41,203,37,86,246,106,215,106,35,88,127,55,29,59,119,199,199,159,116,208,14,215,157, +156,112,47,233,14,118,199,108,1,81,57,72,184,113,141,130,64,84,158,41,97,101,128,97,24,72,165,78,200,203,203,181,219,131,199,175,3,87,55,119,200,114,178,171,84,153,9,130,70,88,229,68,173,86,155,29,118,87,86,50,173,112,97,32,136,55,122,176,65,33,32,8, +130,4,139,32,8,130,4,139,32,136,234,138,221,28,71,27,5,52,129,82,169,132,92,174,191,183,36,160,113,83,20,41,20,144,203,229,197,15,96,54,214,186,146,186,185,27,24,238,85,22,71,201,191,147,215,225,16,73,206,157,182,151,229,77,115,238,172,170,216,109,209, +125,244,248,41,248,126,223,46,3,235,139,177,19,167,98,119,204,22,92,248,35,14,78,206,46,232,221,127,32,106,213,174,139,3,123,119,34,241,86,130,222,185,149,197,81,242,239,228,117,56,68,146,115,39,57,119,86,123,193,178,134,123,119,111,227,236,153,95,208, +161,83,87,28,59,114,208,232,57,214,186,142,150,118,69,228,114,121,80,171,181,22,33,198,176,228,208,105,44,77,115,174,144,37,6,108,186,231,59,56,136,76,58,76,88,123,126,89,28,79,77,213,205,156,235,41,57,119,86,111,231,78,18,172,10,160,180,163,164,49,87, +68,62,95,128,113,147,166,161,86,237,186,96,24,6,241,215,175,98,99,100,56,251,136,133,53,14,163,165,211,108,220,228,45,179,174,159,177,251,119,99,224,224,97,16,10,29,144,149,245,18,27,214,173,193,231,65,33,240,246,246,129,131,131,8,91,163,55,224,151,83, +199,203,124,190,181,142,167,230,234,102,139,235,41,57,119,86,63,231,78,18,172,10,160,180,163,164,49,87,196,197,203,194,113,227,218,21,44,156,55,11,12,195,96,98,232,76,4,135,140,199,218,240,229,0,172,115,24,45,157,166,37,215,207,214,109,218,97,210,216, +145,80,171,85,248,234,63,139,49,111,225,82,204,157,21,138,135,15,146,209,188,69,43,76,158,54,155,21,160,178,156,111,189,227,169,233,186,105,52,26,171,93,79,201,185,83,75,117,114,238,172,170,84,186,111,9,45,185,142,234,186,34,122,251,248,162,126,125,127, +124,191,119,7,0,237,134,208,125,187,183,163,117,155,118,96,24,198,106,135,209,210,78,139,150,92,33,127,57,117,28,42,149,18,26,141,6,183,18,110,224,238,157,68,118,122,145,112,227,42,68,34,145,158,109,135,173,231,235,77,221,202,225,158,106,206,245,148, +156,59,173,143,181,46,111,138,115,103,181,31,97,105,52,26,152,240,77,132,218,134,39,194,45,185,142,234,186,34,186,185,123,32,55,87,166,55,85,120,241,252,57,184,60,30,92,93,221,172,118,24,45,237,180,104,201,21,82,119,151,188,90,165,134,76,246,234,97,214, +146,139,158,225,114,203,124,190,46,246,116,79,181,54,206,228,220,249,230,59,119,86,123,193,122,246,244,41,60,189,188,13,22,103,221,61,60,76,254,144,132,49,108,113,29,205,206,202,132,68,34,213,91,252,116,115,119,135,74,169,68,86,86,38,28,68,34,155,29, +70,173,113,155,180,213,146,163,60,22,30,246,116,79,181,38,206,228,220,105,158,55,197,185,179,218,79,9,227,126,255,21,93,187,247,70,173,218,117,181,9,51,12,134,5,141,66,122,90,42,30,61,124,80,33,133,79,77,121,130,71,143,30,160,79,255,65,236,177,126,3, +134,224,226,133,115,80,169,84,101,114,24,45,171,219,228,235,198,154,186,89,227,122,106,75,253,201,185,243,205,113,238,172,246,35,172,184,223,78,195,205,205,29,11,22,47,135,70,173,1,95,32,192,95,137,9,88,30,246,53,187,213,160,117,155,118,24,52,52,8,18, +137,20,83,103,206,197,234,101,223,148,59,223,85,203,190,193,228,169,179,209,161,83,32,56,12,131,228,123,119,17,25,177,146,29,157,216,234,48,106,201,21,178,178,96,169,110,28,14,199,106,215,83,107,235,79,206,157,40,174,107,213,119,238,172,170,84,136,189, +140,68,34,69,126,126,158,217,31,74,181,55,98,177,4,114,121,161,73,235,21,91,29,70,203,227,54,249,186,49,85,183,138,112,61,37,231,206,87,84,101,231,206,106,63,194,210,27,114,151,195,169,177,172,152,122,100,163,172,14,163,127,71,29,108,197,82,221,42,194, +245,148,156,59,95,81,149,157,59,73,176,42,41,111,178,195,40,185,167,18,52,37,124,3,169,170,14,163,213,189,110,4,81,237,70,88,64,213,117,24,173,238,117,35,8,131,27,52,133,128,32,8,18,44,130,32,8,18,44,130,32,170,43,118,91,195,106,20,208,4,25,233,105,6, +235,41,1,141,155,34,45,53,5,57,57,217,240,244,242,134,159,95,77,0,128,66,33,55,48,240,171,215,192,31,78,82,103,237,251,69,10,100,164,167,217,244,124,156,41,186,116,235,133,63,206,157,125,45,230,107,94,222,62,236,3,177,37,56,187,184,162,110,221,250,6, +231,230,231,231,149,251,71,92,75,168,93,167,30,234,212,173,135,162,162,34,220,79,78,66,70,122,154,221,234,228,223,48,0,35,190,24,139,121,179,167,190,246,120,18,68,133,8,150,61,29,71,159,61,203,128,147,147,51,252,252,106,226,254,253,36,172,255,118,85, +185,46,192,215,233,22,57,34,120,12,154,254,227,109,140,14,30,204,238,209,169,93,167,46,250,13,28,162,119,94,205,154,181,241,224,65,50,22,205,159,85,238,60,191,24,61,17,45,62,248,16,55,19,110,192,209,209,17,99,198,135,98,214,244,9,120,154,145,110,212, +93,211,86,248,2,1,60,116,156,16,200,125,147,168,242,130,101,13,182,58,142,58,56,136,16,28,50,30,243,23,46,197,180,201,163,245,118,52,155,114,123,52,230,134,105,204,45,210,42,7,82,35,46,159,230,92,60,157,93,92,209,168,113,83,220,186,121,3,31,181,254,152, +125,184,56,254,250,85,196,95,191,170,55,10,91,182,58,18,59,183,71,219,28,195,210,46,150,238,30,158,232,210,173,39,198,4,15,97,127,183,144,97,24,246,41,3,75,238,154,230,48,21,35,99,241,180,228,248,74,16,246,160,82,175,97,21,22,22,96,67,100,56,0,160,221, +39,157,216,11,116,193,226,229,136,248,110,11,162,182,238,197,192,193,195,89,161,26,59,97,42,54,110,222,137,21,17,27,176,105,235,30,188,245,246,187,0,180,46,144,141,155,188,165,29,217,212,170,131,229,107,190,195,186,13,219,176,62,42,6,157,186,116,71,120, +228,43,225,8,143,140,70,231,174,61,176,110,211,118,172,89,23,133,13,209,59,209,236,237,247,138,243,208,186,120,6,118,239,101,180,188,237,218,119,194,141,107,87,112,246,204,47,104,223,169,171,201,122,141,155,52,29,39,143,31,198,189,187,183,1,104,29,50, +75,30,26,7,180,14,153,27,54,239,210,43,83,179,119,222,67,196,250,205,136,218,178,7,46,174,175,220,7,24,70,219,132,186,214,42,37,98,85,226,174,57,106,244,68,172,143,138,65,139,150,31,90,149,95,157,186,245,176,50,98,35,190,93,191,5,235,54,109,199,123,205, +91,232,149,95,55,158,158,94,222,152,191,104,41,190,139,222,129,168,109,123,16,58,227,43,56,58,138,233,202,34,170,254,8,171,44,168,84,74,220,78,188,137,134,141,26,227,196,177,67,38,221,30,229,133,133,38,221,48,245,221,34,45,59,144,154,114,249,180,228, +226,217,190,99,32,162,190,251,22,137,183,226,49,122,252,20,248,250,213,48,48,114,11,236,222,11,78,78,206,216,179,99,155,206,148,203,180,67,102,73,153,76,185,88,62,123,154,129,11,231,127,199,252,69,203,176,111,119,12,206,199,253,6,149,74,187,129,212,148, +187,166,165,252,38,79,155,131,243,113,103,176,127,207,14,8,133,66,252,123,65,152,94,158,186,241,12,157,241,149,89,199,87,130,168,54,35,172,18,114,100,57,16,8,133,102,221,30,77,185,97,234,98,173,3,169,57,231,73,83,46,158,77,254,209,12,60,62,31,241,55, +174,66,169,84,226,124,220,111,232,80,106,148,229,233,229,141,207,134,140,64,228,183,43,89,81,177,22,115,46,150,171,150,125,131,31,14,236,65,159,254,3,241,93,244,14,3,59,21,91,240,245,171,1,63,191,26,56,120,96,175,54,70,114,57,126,58,113,196,232,185,150, +28,95,9,162,210,142,176,236,229,56,106,234,194,200,72,79,51,235,246,104,202,13,83,215,49,194,90,151,78,83,46,159,230,232,208,169,43,156,157,157,217,169,149,64,32,64,145,162,8,59,183,71,179,101,24,63,105,58,126,58,113,132,157,10,154,194,152,67,166,57, +23,75,141,70,131,211,167,78,224,244,169,19,104,254,254,7,152,60,125,14,158,61,123,138,235,87,47,89,21,95,221,252,92,92,221,180,49,210,89,31,204,52,241,91,125,150,28,95,95,216,225,27,94,130,168,16,193,178,151,227,104,105,124,124,253,208,236,237,119,113, +244,80,172,69,183,71,99,110,152,63,20,143,166,0,235,93,58,109,181,10,17,57,58,226,131,86,173,241,245,188,89,122,23,247,215,139,87,160,121,139,86,248,243,194,57,116,233,218,19,206,46,174,216,187,211,240,23,99,44,59,100,90,207,229,75,23,112,43,225,58,252, +253,27,21,11,150,198,166,252,140,197,168,196,103,189,52,150,28,95,9,162,210,78,9,237,237,56,234,234,230,142,143,254,213,22,115,23,132,225,226,249,56,196,95,191,106,214,237,209,148,27,166,46,101,113,32,45,141,49,23,207,54,109,219,35,41,233,14,238,222, +78,196,243,103,79,217,215,233,159,79,162,67,167,174,240,244,244,198,224,97,35,17,189,105,29,184,92,46,132,66,33,132,66,33,4,2,33,91,94,115,14,153,230,240,240,244,130,111,241,222,182,18,129,175,239,223,8,73,73,119,0,24,119,215,52,151,95,73,140,186,246, +232,195,198,232,147,14,93,140,230,109,201,241,149,32,42,237,8,203,94,142,163,35,71,141,195,200,81,227,80,80,80,128,148,39,143,112,48,118,31,126,58,126,152,125,223,148,219,163,74,169,50,233,134,169,59,114,178,213,129,180,244,212,201,152,139,103,251,142, +129,236,86,12,93,78,255,124,2,253,6,12,70,223,79,7,193,209,81,140,249,11,151,234,189,159,151,155,139,145,159,247,183,232,144,105,14,47,111,31,76,159,57,15,60,62,31,133,133,5,224,113,121,56,24,187,151,157,14,26,115,215,52,151,31,27,163,25,115,16,216,173, +23,52,208,224,228,177,195,168,93,167,174,201,245,51,83,142,175,4,97,111,170,172,227,168,49,183,71,75,110,152,186,216,234,64,170,91,183,138,50,247,51,231,144,105,9,177,88,2,134,203,101,127,94,75,23,83,238,154,150,242,43,177,173,177,166,29,45,57,190,18, +68,165,26,97,233,242,58,220,58,141,185,61,90,114,195,4,202,238,64,250,58,234,86,30,155,24,83,142,171,128,105,119,77,75,249,201,100,57,118,201,159,32,42,181,96,85,102,200,165,147,32,104,74,88,165,32,151,78,130,160,17,86,149,129,92,58,9,162,138,14,54,40, +4,4,65,144,96,17,4,65,144,96,17,4,65,130,69,16,4,65,130,69,16,4,65,130,69,16,4,9,22,65,16,4,9,22,65,16,4,9,22,65,16,36,88,4,65,16,36,88,4,65,16,36,88,4,65,144,96,17,4,65,144,96,17,4,65,144,96,17,4,65,130,69,16,4,65,130,69,16,4,65,130,69,16,4,9,22,65, +16,4,9,22,65,16,4,9,22,65,16,36,88,44,245,26,248,227,157,119,155,235,189,60,60,189,0,0,93,186,245,130,179,139,43,0,96,209,146,213,240,111,24,80,33,149,169,200,180,173,193,191,97,0,22,45,89,253,218,242,171,81,179,22,62,110,215,17,237,218,119,70,253,6, +13,43,52,30,175,187,110,186,125,134,32,74,176,219,207,124,13,29,254,5,60,61,189,241,242,197,115,246,216,201,227,135,241,252,217,83,188,247,207,22,184,157,120,19,217,89,153,240,240,240,4,95,32,0,0,4,52,249,7,10,11,10,240,240,65,178,93,202,160,155,246, +223,1,95,32,128,135,135,103,133,231,195,229,242,48,49,244,75,188,251,207,247,113,231,118,34,20,10,5,6,127,30,132,39,143,31,97,229,210,69,200,207,207,179,123,60,94,87,221,74,208,237,51,101,193,222,125,139,120,195,4,11,0,142,31,253,17,199,14,255,96,112, +124,201,55,243,140,158,223,173,103,95,252,113,238,172,209,78,197,231,243,81,84,84,100,50,47,145,163,35,10,242,243,13,142,107,212,26,139,159,231,11,4,6,63,115,15,0,28,14,3,7,7,7,20,20,228,219,84,30,161,131,3,228,133,133,86,139,141,90,173,134,70,163,54, +93,55,145,163,209,50,148,48,104,232,8,212,111,208,16,51,38,143,193,139,226,27,132,208,193,1,51,231,44,192,152,9,161,88,189,124,177,77,241,48,135,45,117,179,230,252,210,237,102,42,30,198,250,140,185,58,112,185,92,48,12,195,190,111,174,111,17,36,88,102, +9,143,140,198,250,111,87,225,175,196,4,246,88,112,200,120,180,108,249,33,222,122,235,29,12,15,10,65,244,198,117,248,243,226,121,184,123,120,98,210,212,153,240,246,241,3,159,199,199,201,227,135,177,119,215,54,54,157,168,13,223,34,100,236,100,184,187,123, +96,194,152,225,200,202,212,191,3,255,243,253,150,152,60,109,22,248,2,1,178,50,95,34,98,213,82,60,126,244,0,0,208,234,163,54,24,22,20,2,14,135,3,7,145,8,199,143,252,136,189,187,182,129,195,97,48,102,252,20,52,111,241,1,20,69,69,16,8,4,8,95,25,134,132, +27,215,204,150,167,78,221,122,152,60,109,14,164,82,39,20,41,139,16,119,246,180,201,24,120,122,121,99,220,164,105,168,85,187,46,24,134,65,252,245,171,216,24,25,206,142,134,194,35,163,113,228,208,1,244,238,247,25,120,92,46,0,96,237,154,229,136,191,113, +181,148,168,114,208,177,75,55,68,109,88,203,138,21,0,200,11,11,177,109,243,6,44,93,21,9,23,87,87,54,46,166,226,209,252,253,15,16,60,122,2,102,78,29,143,188,188,92,120,121,251,224,155,37,107,240,205,130,57,120,244,240,190,77,117,11,143,140,198,177,35, +63,160,87,159,1,16,10,29,144,157,157,133,136,85,75,240,224,254,61,147,237,198,231,11,44,198,163,164,207,152,107,131,146,184,54,240,15,0,195,48,56,243,203,73,168,213,106,163,125,139,32,193,178,10,129,64,0,14,195,209,59,22,189,41,18,1,77,222,194,15,7,246, +224,252,239,103,216,227,83,166,207,193,165,139,231,241,99,236,62,72,165,78,88,178,114,45,146,239,221,197,165,139,231,33,16,8,48,44,40,4,97,139,230,34,45,53,197,248,90,75,163,0,76,153,240,5,138,20,10,244,27,48,24,83,166,207,198,140,41,99,1,0,119,111,39, +98,246,140,73,144,229,100,195,211,211,27,107,34,255,135,83,39,143,162,70,141,90,8,104,210,20,163,71,14,129,70,163,134,147,147,51,10,139,71,9,230,202,51,121,218,28,156,143,59,131,253,123,118,64,40,20,226,223,11,194,76,198,32,116,198,87,184,113,237,10, +22,206,155,5,134,97,48,49,116,38,130,67,198,99,109,248,114,54,70,31,253,171,45,166,77,10,129,188,176,16,61,122,247,199,240,224,49,248,50,116,172,94,58,94,222,62,16,139,37,184,147,120,203,32,143,135,15,238,67,169,44,66,189,122,254,184,154,249,167,217, +120,92,190,116,1,45,90,181,198,168,177,147,16,190,50,12,227,39,79,199,145,67,7,240,232,225,125,0,176,169,110,2,129,0,45,91,181,102,243,25,252,249,72,76,153,62,27,83,39,134,176,239,151,110,183,197,203,194,45,198,163,164,207,152,107,131,208,233,95,33,49, +49,1,139,230,207,1,0,72,164,82,200,114,178,141,246,45,162,234,99,215,111,9,135,5,133,32,102,239,143,236,171,110,189,6,54,125,222,211,203,27,13,27,6,224,198,181,43,168,89,171,14,156,93,92,113,247,118,34,222,121,183,57,123,206,177,195,7,77,138,21,0,252, +124,242,24,59,221,59,244,195,126,212,168,89,27,190,126,53,0,0,47,94,60,135,44,39,27,46,174,174,112,16,57,32,55,87,6,119,15,79,60,125,154,14,23,87,55,244,232,213,23,34,145,35,114,114,178,161,80,200,205,150,199,215,175,6,252,252,106,224,224,129,189,218, +17,142,92,142,159,78,28,49,90,38,111,31,95,212,175,239,143,239,247,238,0,0,168,213,106,236,219,189,29,173,219,180,3,195,188,106,130,159,142,31,97,167,83,87,46,93,128,175,159,159,225,148,75,232,0,0,200,205,147,25,205,43,47,47,15,14,34,145,85,241,216,188, +105,29,26,248,55,194,172,185,11,1,128,173,139,45,117,99,203,126,226,40,155,207,247,123,119,194,215,175,38,124,253,106,26,109,55,107,227,97,169,79,120,121,251,160,126,3,127,236,217,185,21,26,141,118,90,41,203,201,166,171,154,70,88,214,177,103,231,86,156, +60,126,152,253,191,176,160,192,166,207,123,120,120,66,173,209,224,243,160,81,122,199,31,63,122,200,254,157,158,158,106,54,141,156,236,87,29,182,168,168,8,249,249,121,112,113,113,69,90,106,10,6,13,29,129,127,125,220,30,143,31,63,68,78,118,22,28,28,68, +96,56,28,100,164,167,97,225,252,89,248,116,224,80,244,255,108,40,126,57,117,2,49,91,54,153,45,143,139,171,27,114,115,101,122,107,42,153,47,95,24,45,147,155,187,7,114,115,101,80,42,149,236,177,23,207,159,131,203,227,193,213,213,141,157,218,101,102,190, +100,223,87,169,84,224,50,92,195,250,229,100,105,211,116,243,64,74,254,35,253,187,15,195,192,201,201,25,89,58,11,213,230,226,33,151,203,113,244,112,44,130,67,38,96,241,215,255,102,207,179,165,110,37,232,10,133,66,33,47,206,199,5,105,169,79,12,218,205, +218,120,88,234,19,238,238,30,200,205,203,53,186,30,73,144,96,89,68,161,80,24,93,8,55,141,70,239,191,151,47,95,128,225,112,176,116,241,127,202,220,9,157,156,157,95,85,142,199,131,163,163,24,89,89,89,104,246,206,123,232,208,185,27,166,140,11,102,215,73, +90,126,208,154,61,247,254,189,36,44,15,251,26,94,222,62,152,54,115,46,122,245,29,128,243,113,191,153,44,79,141,154,181,32,150,72,193,229,114,161,82,169,180,211,17,137,212,104,153,178,179,50,33,145,72,245,22,141,221,220,221,161,82,42,245,196,69,163,209, +88,172,95,86,102,38,210,82,83,208,178,213,71,136,221,175,47,88,239,183,252,16,10,185,28,247,238,222,177,24,15,0,144,58,57,163,239,167,131,113,226,232,33,12,11,26,133,155,241,215,160,84,42,145,147,157,101,117,221,74,208,221,130,32,20,10,139,243,201,44, +87,60,44,245,9,95,191,26,144,136,37,224,241,120,122,226,103,172,111,17,52,37,44,55,185,50,25,188,189,125,216,255,51,210,211,144,156,156,132,193,67,131,216,99,34,71,71,56,59,187,88,157,230,39,29,187,128,203,213,234,112,151,110,189,144,158,150,138,244, +180,20,136,197,18,40,20,10,20,22,106,71,125,109,218,182,135,88,34,209,94,108,206,46,236,223,79,51,210,113,63,57,9,18,169,147,217,242,164,166,60,193,179,167,25,232,218,163,15,0,237,183,84,159,116,232,98,180,76,169,41,79,240,232,209,3,244,233,63,136,61, +214,111,192,16,92,188,112,142,21,4,91,216,187,107,27,250,244,251,12,173,62,106,3,14,71,187,206,19,208,184,41,130,190,24,139,216,239,119,67,161,144,91,140,7,0,140,159,52,13,231,206,254,138,255,109,92,139,180,212,20,12,11,26,205,150,215,218,186,149,208, +190,99,32,120,60,109,62,61,251,12,64,202,147,199,38,167,238,182,196,195,92,27,164,165,166,32,37,229,49,250,13,24,98,32,156,165,251,22,65,35,172,114,115,244,80,44,38,79,155,141,54,109,59,224,192,254,93,136,251,237,52,214,172,248,47,198,79,154,142,232, +152,253,40,200,207,135,64,32,192,154,149,97,200,142,207,178,152,158,90,173,198,181,43,151,240,237,119,155,161,86,171,161,86,171,177,102,197,127,161,209,104,112,249,207,63,208,181,123,111,172,143,138,65,97,97,33,18,226,175,225,234,229,63,139,239,212,53, +49,99,246,124,200,100,57,224,243,249,200,124,249,2,43,150,46,2,0,147,229,185,25,127,29,17,171,151,34,116,198,28,4,118,235,5,13,52,56,121,236,48,106,215,169,107,180,108,171,150,125,131,201,83,103,163,67,167,64,112,24,6,201,247,238,34,50,98,101,153,226, +22,119,246,87,112,56,12,134,14,255,2,19,166,124,9,149,74,9,185,92,142,31,99,247,225,200,143,7,172,138,71,167,192,30,240,246,241,195,202,226,122,110,140,12,199,202,136,141,184,114,249,34,174,95,189,100,83,221,0,32,57,233,14,86,175,141,2,195,229,66,165, +84,234,109,173,40,111,60,204,245,137,53,43,194,48,49,244,75,116,233,214,19,0,240,199,185,179,216,180,62,194,104,223,34,170,62,156,1,189,59,255,173,99,103,46,151,7,177,88,140,156,82,139,165,124,129,0,34,7,17,100,178,28,171,166,74,250,105,114,225,232,40, +134,76,150,99,240,158,68,34,69,145,178,200,96,175,16,135,195,129,84,234,4,185,66,110,116,31,145,185,242,72,165,78,200,203,203,133,90,173,182,88,54,177,88,2,185,188,208,200,20,166,108,72,36,82,48,12,99,16,63,107,227,97,9,107,234,182,62,42,6,17,171,150, +32,241,86,2,196,18,9,242,114,115,173,78,223,84,60,214,71,197,32,98,245,82,36,222,140,183,170,13,68,34,71,112,56,28,118,186,111,174,111,17,52,194,42,51,42,149,210,104,135,42,82,40,202,188,142,165,82,169,76,94,156,185,185,198,191,93,211,104,52,102,59,182, +185,242,216,34,4,121,121,185,118,141,159,169,250,88,27,15,75,88,253,185,226,169,169,45,98,101,42,30,37,107,109,165,211,50,215,6,198,54,218,154,234,91,4,9,22,65,216,133,137,161,51,209,236,157,247,112,251,175,91,236,158,48,130,168,52,83,66,162,234,227, +234,230,14,89,78,182,93,166,185,12,195,192,209,81,108,213,200,145,160,17,22,65,216,140,165,61,90,182,160,86,171,73,172,8,211,55,52,10,1,65,16,36,88,4,65,16,36,88,4,65,188,233,80,73,0,0,0,136,73,68,65,84,144,96,17,4,65,144,96,17,4,65,144,96,17,4,65,130, +69,16,4,65,130,69,16,4,65,130,69,16,4,9,22,65,16,4,9,22,65,16,4,9,22,65,16,36,88,4,65,16,36,88,4,65,16,36,88,4,65,144,96,17,4,65,144,96,17,4,65,144,96,17,4,65,130,69,16,4,65,130,69,16,4,65,130,69,16,4,9,22,65,16,4,9,22,65,16,4,9,22,65,16,36,88,4,65,16, +36,88,4,65,16,36,88,4,65,144,96,17,4,65,144,96,17,4,65,130,69,16,4,81,69,248,63,125,98,180,101,153,101,182,227,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; -const char* about_png = (const char*) temp_binary_data_11; +const char* about_png = (const char*) temp_binary_data_12; //================== GlobalEditor_864x144.png ================== -static const unsigned char temp_binary_data_12[] = -{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,3,96,0,0,0,144,8,6,0,0,0,110,232,8,32,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,0,7,116,73,77,69,7,222,10,13,5,35,54,43,226, -55,144,0,0,0,29,105,84,88,116,67,111,109,109,101,110,116,0,0,0,0,0,67,114,101,97,116,101,100,32,119,105,116,104,32,71,73,77,80,100,46,101,7,0,0,32,0,73,68,65,84,120,218,236,157,121,124,19,213,218,199,127,169,101,226,146,112,165,9,74,203,125,109,203,181, -203,149,182,8,5,20,80,22,69,68,118,68,5,21,81,68,16,20,68,65,64,80,16,220,16,89,21,100,149,93,17,68,100,223,69,64,89,20,90,80,10,218,22,47,77,189,210,162,77,170,151,4,53,131,58,239,31,105,166,89,38,201,236,153,73,206,115,63,124,174,157,156,217,206,60, -231,156,231,123,158,231,60,199,0,192,0,32,1,64,34,0,10,192,149,53,255,174,2,96,4,80,7,192,21,53,101,12,32,66,132,8,17,125,9,3,224,111,0,127,1,184,12,192,13,224,15,159,127,116,205,241,191,107,202,147,254,144,8,17,210,30,137,16,33,250,76,68,49,125,72,172, -249,208,117,106,148,192,4,224,31,53,255,234,2,184,166,230,184,87,41,136,66,16,33,66,68,143,29,226,95,0,254,172,233,0,47,1,112,2,248,95,205,63,23,128,223,107,58,70,144,254,144,8,17,210,30,137,16,33,250,76,68,73,125,72,172,33,241,43,1,92,11,192,10,224, -250,140,70,55,220,122,227,191,210,90,39,55,184,190,81,234,13,255,151,246,231,159,127,2,0,12,6,97,250,32,180,188,212,243,148,186,142,30,239,207,48,76,116,53,80,166,251,139,185,142,208,115,132,148,231,83,86,142,50,82,127,39,18,44,151,47,95,198,249,138, -202,242,234,234,95,126,248,239,249,202,194,239,74,203,246,3,184,0,192,30,80,212,24,170,63,76,75,189,129,237,15,165,180,123,49,125,131,82,253,137,82,215,85,74,71,149,236,19,164,180,59,49,191,9,57,30,107,109,94,106,123,76,73,110,224,103,159,240,213,103, -165,218,167,154,99,191,20,93,144,163,45,8,253,77,206,99,90,109,7,82,244,57,227,198,116,94,246,118,56,189,82,107,76,145,219,190,146,75,15,124,255,22,242,91,20,245,129,49,0,48,215,40,195,245,102,211,213,217,237,110,187,229,209,22,249,77,59,254,247,191, -255,5,0,92,184,112,65,241,15,42,71,103,165,6,236,68,27,232,162,209,153,235,5,34,133,12,8,98,7,22,45,130,24,17,97,210,160,65,3,0,128,213,106,197,119,37,165,199,15,30,58,254,238,165,223,126,47,174,233,24,93,240,132,14,152,184,250,67,131,193,128,202,202, -74,85,13,59,189,244,141,114,181,239,104,192,96,164,193,94,40,12,201,5,98,241,208,246,197,182,199,31,127,252,17,0,130,218,163,84,3,85,75,19,35,98,116,60,240,89,124,255,150,99,60,229,106,23,66,116,87,44,96,233,165,45,136,209,231,150,205,155,177,246,118, -101,101,101,72,125,18,122,92,45,93,245,253,54,66,175,207,167,239,229,11,86,225,250,237,104,233,79,4,125,248,213,0,160,62,128,235,1,164,245,233,209,121,124,125,107,189,214,94,99,67,171,208,165,183,153,96,45,138,158,140,50,165,65,39,92,39,32,23,32,17,143, -151,246,196,98,177,192,77,255,89,178,97,203,238,23,0,216,0,84,195,19,62,80,15,192,13,222,254,208,107,236,169,101,216,105,177,111,212,99,223,35,181,109,242,5,51,57,188,91,241,12,97,66,218,227,117,245,147,90,123,141,213,104,129,151,22,218,152,146,207,32, -7,60,5,26,206,241,4,97,82,244,89,110,175,151,210,186,42,229,250,66,245,32,148,110,105,29,194,66,232,67,25,128,11,87,192,227,6,189,46,243,95,169,157,154,54,105,220,239,135,31,126,224,221,97,121,255,9,249,88,66,207,9,60,79,174,25,97,174,127,177,2,86,190, -255,18,18,18,66,190,111,52,254,137,253,54,225,206,231,83,54,92,25,33,191,113,233,49,159,119,139,84,70,234,239,68,132,203,239,191,255,142,171,174,186,210,106,48,192,253,179,253,151,82,120,98,244,41,0,150,204,127,165,118,244,246,135,82,191,153,82,253,169, -18,125,163,18,253,144,26,125,144,148,126,62,212,239,82,250,131,112,198,137,144,227,241,212,238,249,180,199,242,242,114,217,12,84,53,218,167,156,109,73,137,118,36,164,79,17,211,30,248,182,139,112,158,59,61,77,46,73,209,103,33,239,28,45,123,65,170,46,70, -106,83,225,108,43,33,125,44,87,253,69,91,127,188,250,144,144,96,112,255,92,85,93,12,224,146,119,253,87,221,155,178,51,91,113,205,44,73,109,4,241,190,14,76,201,231,137,198,172,157,212,89,132,112,207,193,231,218,92,231,135,58,143,79,217,112,101,132,204, -156,6,134,127,132,154,29,55,24,12,188,66,62,25,134,193,207,246,95,66,85,20,161,39,129,82,223,90,143,243,120,85,85,21,254,149,158,214,226,244,119,255,217,4,79,136,8,3,224,31,225,250,67,185,102,29,181,26,238,164,196,115,41,189,214,64,74,191,16,174,79,8, -23,94,195,21,242,21,216,206,125,219,51,87,223,18,234,222,145,250,141,170,80,125,67,28,181,71,111,93,93,190,252,39,254,112,211,248,243,207,63,65,95,190,236,249,45,82,254,2,94,125,187,12,109,73,108,30,5,25,1,68,208,152,29,41,18,3,12,191,211,2,189,18,96, -130,126,242,60,87,164,144,50,109,143,127,117,234,36,34,49,241,10,80,117,234,128,162,234,136,214,103,223,111,203,234,243,95,127,225,50,125,89,144,98,138,213,89,161,237,37,146,46,242,210,57,46,15,24,152,240,197,124,61,90,96,66,234,147,191,231,75,61,221, -225,171,15,69,223,126,191,1,192,85,137,240,44,8,188,198,116,205,85,25,191,254,250,75,212,160,75,143,107,29,162,101,12,69,19,42,133,220,91,40,172,133,186,118,164,235,200,105,124,69,42,19,234,183,72,179,218,66,66,42,126,182,87,243,235,12,9,136,241,22,175, -193,26,104,248,81,20,133,4,3,211,8,158,12,84,87,213,244,224,156,253,97,180,192,43,90,147,54,124,175,19,173,144,112,161,253,2,159,62,129,47,140,133,106,219,161,38,100,184,126,247,150,9,213,7,113,221,239,231,170,106,210,30,107,234,226,239,191,25,92,250, -237,119,252,246,251,239,162,13,73,85,141,88,158,55,149,187,61,9,25,31,253,94,158,75,47,107,222,49,208,80,14,26,146,2,14,248,158,87,123,11,3,188,137,254,188,198,115,160,222,27,12,218,30,230,46,95,254,19,151,47,255,137,223,127,119,195,120,37,5,211,213, -87,35,33,193,32,72,159,189,223,199,87,159,57,117,73,38,240,226,173,167,60,189,76,162,251,94,14,59,134,75,191,252,116,192,231,28,246,61,12,140,159,62,121,250,85,95,219,44,224,124,5,21,74,128,62,92,13,128,74,68,77,74,204,63,254,248,189,129,148,193,58,26, -208,165,229,248,86,169,247,82,19,72,149,138,141,149,234,237,18,53,128,72,48,190,248,0,89,36,15,26,31,239,89,224,236,184,175,65,230,11,95,17,57,139,128,152,40,195,47,208,232,171,170,170,242,238,197,66,213,12,144,87,5,246,135,106,103,86,211,82,223,40,5, -182,228,234,3,164,180,113,62,237,88,10,140,113,29,15,60,198,245,55,151,151,44,240,186,190,127,255,108,255,69,251,22,169,10,237,209,91,95,174,75,191,225,247,63,254,224,103,88,42,0,94,6,169,89,194,121,24,184,66,159,137,175,106,240,74,206,17,6,198,228,4, -49,134,241,62,79,176,241,204,105,51,107,180,13,184,255,160,241,247,223,12,174,173,107,226,173,207,190,223,193,171,207,66,224,139,175,126,8,210,213,136,225,141,194,117,46,172,190,241,0,49,78,189,242,209,169,64,176,247,234,20,195,252,173,58,132,241,212, -7,35,128,58,137,240,236,55,80,71,45,67,65,139,208,21,45,207,153,26,233,112,149,122,127,37,66,17,197,66,153,208,208,69,190,89,31,133,122,199,132,24,105,161,215,123,36,120,75,249,148,229,1,98,4,194,164,202,21,53,255,224,219,31,170,9,94,90,74,190,33,118, -29,147,220,207,44,101,162,70,74,59,247,45,19,174,31,16,234,21,11,252,155,107,226,205,55,92,145,211,67,22,31,237,61,108,123,164,233,203,178,193,151,34,222,3,129,198,173,92,205,151,235,58,145,84,69,16,140,169,4,98,181,161,137,140,15,148,105,191,13,92,166, -47,227,143,63,220,184,242,74,99,68,125,246,173,119,175,62,203,9,95,130,117,53,104,61,150,50,58,23,178,95,229,248,166,94,184,226,44,18,224,13,243,135,53,239,67,37,176,58,164,49,125,72,4,144,224,221,136,57,65,105,67,33,218,107,193,180,10,91,122,93,96,45, -54,92,80,78,168,138,54,140,241,53,210,34,193,152,247,216,79,85,213,62,6,151,175,222,248,186,210,25,238,206,141,120,195,120,11,215,172,123,205,224,152,224,211,107,171,150,89,77,43,107,193,66,45,148,214,82,63,35,166,95,224,235,25,139,38,136,113,189,171, -175,135,236,194,207,142,152,133,48,49,237,209,77,211,170,129,151,65,142,253,112,69,26,183,114,67,25,95,24,11,11,98,2,67,19,131,192,137,55,136,249,254,55,83,99,72,107,191,13,184,47,95,14,5,96,126,250,236,119,14,77,11,130,175,175,10,139,200,64,30,69,105, -150,155,37,85,31,18,0,24,18,107,44,61,131,150,246,176,209,115,2,142,112,153,182,162,5,146,106,210,191,84,207,150,84,195,75,105,24,19,19,186,196,199,80,11,127,45,255,129,187,118,160,98,130,7,85,226,13,147,164,190,181,159,64,249,212,191,209,92,11,22,170, -191,82,162,207,150,179,255,17,211,47,200,221,198,213,2,49,95,15,153,119,29,129,223,4,76,236,183,245,144,237,145,190,252,167,104,248,18,11,94,151,47,95,70,249,143,23,80,229,80,39,1,138,53,233,90,220,208,176,1,174,190,250,170,208,109,11,66,215,89,243,131, -177,176,109,33,204,100,95,160,199,34,164,154,6,28,12,244,96,120,127,242,157,144,244,142,125,90,111,3,151,47,255,41,88,159,57,207,137,224,41,189,202,104,68,66,66,2,25,181,85,148,132,132,4,212,173,91,87,54,125,72,212,138,161,160,183,36,28,225,140,22,45, -24,86,90,130,53,177,158,45,169,215,16,11,99,209,240,138,133,26,215,130,175,21,60,139,234,27,51,239,25,171,8,132,69,163,29,41,1,94,74,175,229,82,35,12,90,150,140,89,18,218,172,216,54,46,182,125,11,73,170,193,23,196,106,61,226,1,237,29,241,217,214,255, -250,243,47,81,116,197,71,149,67,129,221,127,202,207,227,151,95,47,226,74,138,194,21,87,92,161,232,251,49,12,3,123,245,175,248,253,15,55,154,230,102,243,126,86,33,64,198,39,104,34,108,214,222,48,222,176,136,33,137,60,32,204,91,222,215,27,22,216,6,180, -168,250,204,223,194,147,143,253,25,168,207,17,224,235,10,131,1,70,163,17,137,137,137,32,162,174,13,96,52,26,101,211,135,196,104,26,10,122,77,194,33,6,184,244,18,106,168,68,104,97,184,235,75,241,142,41,17,142,36,164,172,20,67,45,220,239,225,64,140,27, -198,24,31,131,186,230,119,223,65,139,192,152,38,224,43,218,73,56,12,188,22,253,27,52,81,183,98,51,168,10,1,49,62,237,59,18,168,73,245,134,113,93,135,11,196,130,67,147,107,77,110,24,12,113,213,206,67,234,168,68,175,87,164,80,195,95,126,189,8,211,213,87, -123,50,153,41,236,121,248,251,239,191,113,229,149,87,130,162,40,97,117,227,243,14,124,97,44,210,124,157,24,111,152,160,144,196,16,16,22,248,179,127,27,96,216,208,68,61,79,66,112,234,178,130,107,4,137,104,75,18,245,6,94,209,72,194,33,36,68,39,86,55,205, -148,3,156,228,130,169,88,5,49,158,99,91,88,175,152,47,140,5,25,104,32,48,22,203,224,37,6,186,180,218,95,137,237,23,228,110,223,124,218,174,208,223,66,121,195,248,128,153,127,155,247,109,235,241,1,98,74,192,23,223,53,94,9,0,18,19,19,85,9,251,242,222,227, -170,171,174,18,95,87,33,32,72,200,88,195,123,66,66,160,55,44,18,132,249,62,119,104,8,243,245,134,197,200,100,35,129,175,248,5,48,173,102,63,140,198,250,41,62,208,101,136,227,150,33,55,144,73,9,83,212,18,136,73,50,230,56,6,43,97,32,230,11,99,129,11,251, -107,227,55,8,140,169,3,95,209,156,200,10,5,94,122,235,179,164,38,230,225,219,190,165,180,109,165,66,18,249,65,24,226,6,196,162,9,95,145,82,115,43,245,190,178,44,205,16,8,98,90,128,176,192,243,184,33,44,112,34,162,70,247,255,102,244,169,207,4,190,226, -23,192,180,182,112,60,26,155,143,42,61,91,28,13,227,71,173,4,28,114,172,243,146,2,84,82,64,76,238,176,165,72,207,16,214,152,11,51,88,202,1,98,126,105,237,33,32,61,22,129,47,209,19,56,106,131,151,214,214,164,70,211,91,206,183,125,43,29,146,40,229,184, -231,155,250,27,160,254,245,96,240,107,231,108,27,143,33,16,19,10,95,114,130,151,6,94,158,171,81,137,2,177,104,65,24,175,162,17,206,229,3,97,12,195,192,144,160,125,189,151,2,95,178,100,229,36,162,45,0,139,37,240,18,51,243,44,87,230,66,173,205,48,43,189, -166,75,78,128,146,2,71,82,238,175,85,111,152,90,32,230,7,99,4,196,36,181,239,104,76,100,73,241,118,69,99,159,65,181,39,104,228,10,37,86,10,194,184,238,201,237,33,11,94,23,26,206,27,198,238,159,20,171,109,91,73,248,210,186,235,65,228,182,35,124,189,97, -146,32,76,2,252,137,91,19,198,1,97,6,232,124,109,24,129,47,2,96,34,13,133,87,222,152,137,220,38,77,121,149,63,247,159,179,40,45,254,14,103,78,127,131,147,39,142,227,183,75,151,120,157,55,229,141,25,200,205,107,42,234,165,135,61,209,31,85,63,255,132,122, -245,146,240,214,236,249,168,151,100,241,251,253,151,106,7,158,27,49,56,226,179,24,12,6,140,30,55,17,45,111,109,227,119,220,237,118,99,226,11,207,161,220,118,14,0,48,241,149,105,200,201,109,34,234,89,135,15,121,20,85,85,63,9,190,206,143,255,253,1,223, -158,57,133,239,75,75,112,252,171,35,248,237,183,75,138,26,69,74,129,152,212,53,98,122,246,134,69,26,184,66,13,146,220,215,12,13,98,126,227,57,1,49,69,225,75,105,240,210,195,26,85,185,188,229,74,181,111,177,144,37,22,194,132,92,39,60,132,213,26,162,190, -191,249,181,237,88,105,215,34,224,43,38,192,75,70,16,147,10,97,66,79,148,35,69,189,40,8,211,248,120,22,60,113,70,224,43,94,36,65,174,193,90,108,188,114,163,127,101,160,115,215,30,24,61,110,34,22,190,247,1,30,30,48,8,215,94,91,79,113,133,55,24,12,248, -245,215,95,240,225,251,203,131,126,175,151,100,193,125,125,251,115,158,227,251,175,69,203,86,65,240,5,0,91,54,174,103,225,43,90,242,207,255,187,1,157,58,119,195,83,207,140,198,220,69,43,48,96,224,16,252,35,76,189,250,190,151,82,245,29,141,107,136,49, -120,229,246,98,240,49,138,195,26,218,16,190,198,33,244,53,13,97,203,177,251,140,121,255,131,4,161,71,254,62,60,116,70,168,254,134,43,31,216,15,9,41,175,183,186,85,19,104,229,132,109,161,97,236,66,142,7,71,47,25,66,182,241,160,205,127,99,160,77,27,84, -134,47,131,193,192,238,195,166,105,16,19,218,22,96,16,91,37,145,219,64,168,186,4,207,80,187,64,40,65,104,72,241,127,14,67,192,228,148,182,193,154,119,127,68,224,43,126,0,76,168,17,42,215,192,110,50,155,209,231,129,135,48,227,157,69,104,28,194,211,83, -123,63,105,131,182,247,223,129,207,246,226,100,225,241,160,50,221,122,220,139,180,244,127,133,124,191,58,117,234,160,95,255,129,65,199,127,252,239,15,216,252,201,58,77,125,100,147,201,140,174,61,238,197,180,153,243,112,83,227,60,85,191,169,18,32,166, -198,125,213,134,176,72,131,132,161,230,127,66,199,222,208,16,22,62,92,205,127,76,35,201,102,164,124,87,57,39,178,248,130,151,150,161,75,238,190,33,90,107,220,228,126,94,213,32,76,199,109,90,17,248,10,211,129,122,215,223,233,168,130,52,9,16,178,220,11, -124,215,229,234,11,194,34,125,62,2,95,113,4,96,209,0,175,64,73,74,178,224,213,169,179,208,225,206,187,85,185,223,123,139,230,194,237,118,7,29,127,226,201,225,33,207,233,210,189,55,254,249,127,55,4,29,95,186,104,30,46,95,190,172,201,143,93,47,201,130, -151,95,123,11,237,58,220,37,24,84,181,212,105,107,205,80,83,11,194,34,15,66,66,239,203,211,27,22,137,242,8,124,201,162,27,145,192,43,33,33,33,44,120,233,13,186,180,222,182,165,150,17,243,155,188,222,64,30,16,166,35,93,81,12,190,66,182,55,15,124,133,155, -252,210,59,132,73,245,130,137,170,91,145,94,48,97,63,107,31,194,248,132,30,18,248,138,109,73,20,3,56,98,6,137,115,255,57,139,229,239,45,0,0,92,123,109,61,252,243,255,110,64,106,218,191,80,175,94,61,100,253,187,49,231,57,67,158,26,137,170,159,127,194, -153,211,223,240,190,199,202,101,139,34,62,235,175,191,84,251,253,110,175,250,25,31,190,191,28,143,13,26,234,87,46,51,251,38,180,235,112,23,14,238,223,235,119,252,31,215,214,67,159,7,30,14,186,238,254,125,123,240,237,153,83,65,247,230,170,173,178,115, -223,99,245,242,197,17,223,233,215,95,171,195,254,94,118,238,123,172,90,230,185,206,63,234,213,67,195,134,255,135,212,180,116,92,123,109,61,100,102,223,196,121,206,160,39,135,163,234,231,159,252,158,149,207,55,151,115,157,152,212,235,73,73,208,17,173, -44,106,188,203,69,202,6,37,114,93,24,128,16,107,195,34,237,63,132,154,115,33,122,205,129,222,65,96,243,206,3,100,180,32,162,154,244,232,220,46,98,155,231,106,235,124,214,132,5,157,107,208,254,218,48,181,225,203,251,147,110,13,96,33,217,8,249,38,200,80, -216,54,224,243,200,252,215,131,5,63,31,91,86,3,250,206,107,114,7,194,183,93,32,162,83,0,83,10,188,188,114,233,146,11,103,138,184,65,234,230,102,45,48,106,204,139,48,153,205,126,199,141,70,35,158,29,51,1,79,61,209,159,151,87,233,183,75,151,240,237,233, -83,162,214,99,236,220,182,9,173,219,180,13,130,150,7,251,63,22,148,196,226,209,129,67,96,52,26,253,202,253,82,237,192,234,229,139,121,215,209,111,151,46,225,219,51,69,130,234,221,192,89,175,151,66,130,84,147,166,249,120,102,212,11,48,153,130,235,245, -153,81,227,48,98,232,99,130,188,117,114,101,55,140,54,132,41,217,169,106,25,194,66,223,155,27,194,2,191,117,144,209,22,7,32,230,43,87,25,141,170,108,194,74,36,126,37,33,33,1,117,235,214,229,221,230,227,9,194,212,128,47,239,90,175,160,243,245,104,244, -202,248,77,213,72,200,33,199,141,185,146,114,104,21,194,68,169,23,129,175,248,4,48,65,240,37,80,71,190,62,113,28,207,12,27,136,87,166,206,196,63,255,47,213,239,183,164,36,11,58,221,211,29,219,183,124,18,249,22,6,105,161,29,239,45,154,135,87,223,156,237, -7,87,158,132,28,15,99,245,138,37,0,128,27,51,178,208,166,109,135,160,115,87,45,95,28,148,105,80,149,134,27,230,183,111,78,22,98,212,136,33,152,244,202,180,160,112,201,122,73,22,116,188,187,43,118,110,219,20,85,240,137,6,132,69,59,59,162,118,33,12,224, -227,13,19,178,119,75,172,200,21,6,3,140,70,35,18,19,19,65,132,136,146,147,56,70,163,81,96,159,35,172,9,198,18,132,9,134,47,49,94,175,56,48,122,181,226,5,19,243,172,194,245,95,91,16,198,185,198,147,132,30,198,133,36,240,81,14,49,251,106,9,85,192,255,253, -239,87,124,176,106,41,231,239,237,239,184,203,175,44,223,89,104,161,107,34,202,109,231,176,101,227,250,160,227,93,123,220,139,212,180,70,0,60,225,123,129,114,242,196,113,28,61,252,121,84,27,112,168,247,252,223,175,191,96,45,71,166,71,0,184,167,91,47, -89,59,141,104,93,75,173,236,136,209,168,27,105,245,34,230,25,35,239,135,23,180,116,132,204,202,17,33,18,125,184,8,219,190,67,39,221,209,99,91,22,149,170,91,40,124,105,100,141,156,164,71,144,117,156,150,247,68,185,214,130,133,215,125,254,91,116,104,190, -141,147,113,54,190,0,76,141,52,244,190,231,28,251,242,8,78,20,28,11,42,211,232,95,25,168,87,47,201,111,17,58,12,202,60,203,150,141,31,225,199,255,254,16,244,219,160,39,135,227,158,174,61,145,222,232,70,191,227,110,183,27,203,22,205,211,208,192,20,252, -238,199,143,29,229,204,244,120,253,245,13,80,191,254,245,49,1,97,122,185,167,224,251,75,72,202,33,190,207,230,183,41,121,144,225,70,6,8,34,68,20,239,31,248,26,174,177,10,97,66,234,133,223,120,25,2,190,116,0,156,209,128,123,45,66,10,159,132,28,156,229, -245,96,3,16,248,138,63,0,83,195,235,197,117,222,145,67,7,56,203,55,205,111,201,3,174,12,162,247,125,242,158,119,249,242,101,44,156,55,43,168,92,102,214,191,57,211,206,127,242,209,26,84,85,253,172,201,65,202,183,46,66,121,232,110,202,201,83,167,3,137, -1,152,82,162,77,168,1,97,114,213,25,159,116,216,177,56,80,24,200,224,71,36,46,128,47,134,219,113,200,173,26,180,15,95,146,31,75,165,247,145,111,123,7,5,33,93,227,91,50,112,142,229,100,252,137,89,73,84,27,190,34,149,255,249,167,159,56,143,95,119,253,245, -17,207,205,201,109,130,117,27,119,133,45,51,255,157,153,248,252,192,167,97,203,124,127,182,4,123,118,109,67,167,206,221,252,142,7,38,222,40,59,247,61,54,111,252,72,84,197,55,206,109,130,181,159,236,12,91,102,193,220,153,56,184,255,83,201,29,17,195,48, -168,250,153,187,94,235,95,119,189,244,78,67,182,44,72,218,74,170,17,75,182,135,176,245,96,158,161,0,96,120,149,143,229,117,97,4,190,136,68,91,255,164,172,5,11,151,144,67,143,125,174,40,239,87,24,248,210,219,122,175,104,119,173,81,187,191,228,27,115,39, -162,209,227,216,162,249,77,193,137,240,255,150,98,149,66,169,205,109,127,253,245,23,110,82,76,172,163,234,236,202,234,229,139,241,75,181,35,108,153,133,243,102,235,102,208,10,149,206,254,31,215,94,27,247,6,142,82,229,181,228,5,147,107,61,88,168,242,177, -232,9,35,240,69,68,179,186,169,80,184,152,150,189,96,209,130,47,111,116,181,222,247,216,139,58,57,202,172,199,194,194,16,35,60,150,22,214,250,241,240,126,17,253,139,97,0,83,114,31,48,128,223,166,150,246,42,110,79,205,181,245,234,5,220,95,89,69,188,124, -249,114,88,239,211,129,125,123,80,110,59,167,155,15,109,15,17,38,89,167,14,165,41,99,85,222,141,72,137,200,49,44,40,62,219,65,132,8,17,37,237,220,176,109,58,236,134,176,122,110,195,17,194,14,249,194,151,87,174,188,242,74,213,199,24,174,132,99,226,204, -47,158,182,93,12,101,223,19,252,173,116,176,246,145,115,226,128,136,110,37,81,29,248,226,163,88,158,235,94,115,141,137,179,204,175,191,252,162,106,231,87,191,254,117,97,179,4,54,105,154,143,127,92,91,15,255,11,225,177,211,154,92,29,162,94,137,196,18, -42,133,79,37,44,46,20,145,127,121,206,235,235,52,28,145,192,60,145,88,209,197,88,8,237,150,35,241,134,208,53,95,129,135,27,166,36,227,183,223,255,192,95,127,253,165,202,59,215,169,83,7,245,235,91,1,252,73,26,129,76,35,100,196,253,240,162,164,207,252, -188,95,4,190,98,22,192,162,97,148,176,27,12,251,92,183,97,192,126,85,94,249,253,247,223,34,94,239,167,159,46,224,139,8,235,187,108,101,252,188,86,67,135,143,10,90,243,229,43,245,146,44,24,48,112,8,230,206,158,38,234,221,127,254,233,66,196,181,104,124, -159,149,143,52,108,248,79,206,227,118,13,38,16,137,198,224,174,133,125,193,120,20,138,86,0,62,68,175,7,211,49,132,17,33,162,109,115,82,202,222,77,225,215,130,233,126,127,48,142,208,45,41,240,5,0,117,235,94,5,139,213,138,186,117,255,129,43,174,184,66, -249,119,96,24,84,87,199,231,248,28,181,113,68,163,186,78,38,4,227,28,192,148,128,47,255,140,52,158,255,190,46,68,82,136,159,67,36,145,240,131,137,159,127,194,199,235,62,144,252,108,29,59,117,65,227,220,38,17,203,181,185,189,61,10,142,29,21,181,7,88,149, -76,207,202,87,66,37,219,184,116,201,69,90,1,49,202,68,129,168,206,198,48,34,68,226,183,95,136,193,4,71,124,247,75,146,3,190,0,224,74,35,5,224,50,46,57,237,234,25,104,87,16,221,149,50,246,232,86,239,3,108,99,63,239,23,129,177,152,145,4,126,186,32,244, -131,27,34,130,23,23,124,1,192,141,25,89,156,231,125,95,82,172,74,133,252,227,218,122,232,215,255,177,160,227,123,118,109,195,201,19,193,123,105,13,24,56,4,255,184,182,158,230,63,244,191,66,212,235,183,167,79,145,86,16,103,3,148,88,115,71,82,223,64,6, -13,34,68,52,221,198,99,117,45,152,28,240,69,68,103,16,46,80,223,163,249,221,35,141,161,68,39,99,202,144,242,147,68,53,149,41,28,120,1,30,47,77,187,59,58,5,157,247,211,79,23,80,85,245,147,42,245,58,104,200,211,48,153,204,126,199,126,169,118,96,237,251, -43,112,205,53,215,96,198,59,139,253,66,19,165,134,34,170,33,245,235,95,135,118,29,238,10,58,238,114,57,117,149,72,132,136,190,250,167,120,10,69,108,211,230,102,73,231,31,62,252,53,185,7,185,135,234,230,43,160,207,246,40,196,251,197,215,80,39,134,110, -124,32,91,68,157,215,208,56,21,164,191,68,73,99,74,18,248,42,128,100,248,10,154,113,8,46,59,224,241,39,57,215,93,21,124,117,132,243,122,114,75,171,54,109,209,242,214,54,65,199,87,45,95,140,223,126,187,132,170,170,159,177,117,211,250,224,129,248,246,246, -104,213,166,173,102,63,242,35,3,135,112,214,235,193,207,246,146,22,160,71,178,81,161,195,87,250,28,34,68,136,144,190,71,233,190,76,72,198,67,34,68,180,214,206,72,226,141,56,6,48,165,54,100,14,44,123,245,53,215,96,216,136,209,184,133,3,126,220,110,55, -54,111,92,175,184,193,119,245,213,215,96,192,192,33,65,199,79,158,56,238,183,198,107,243,39,31,225,199,255,254,16,12,143,26,12,69,188,250,234,107,48,244,233,231,56,161,146,171,94,227,85,200,230,207,188,91,174,116,123,141,24,63,68,136,104,26,90,180,222, -92,249,140,255,114,173,251,226,146,155,155,230,179,255,221,160,65,50,110,72,77,99,255,190,49,35,19,38,147,137,253,239,155,155,230,179,127,223,144,154,134,6,13,146,217,178,20,69,225,166,198,185,126,215,189,49,35,51,186,99,33,15,143,40,69,81,104,218,44, -31,141,115,114,85,127,190,103,71,141,69,70,102,86,204,204,47,68,138,24,35,99,103,28,3,152,18,202,230,85,170,58,117,234,224,166,156,60,180,191,227,46,204,158,187,4,29,238,236,196,121,206,150,141,235,253,82,189,43,53,219,62,96,224,16,212,75,178,4,65,202, -234,229,139,253,142,93,190,124,57,232,24,80,27,138,24,109,169,83,167,14,110,106,156,139,118,29,58,98,230,59,139,208,158,103,189,106,5,98,8,12,169,209,14,73,29,200,109,240,17,33,18,157,41,17,3,209,227,48,29,155,18,222,131,209,99,198,179,32,245,228,176, -17,120,125,234,12,246,183,233,179,230,2,0,110,107,219,30,61,122,245,65,211,102,249,88,186,242,67,220,144,154,134,27,82,211,48,122,236,4,182,236,61,93,186,227,142,142,119,177,231,221,209,177,19,122,244,234,131,183,231,45,82,128,172,228,27,87,147,44,22, -204,156,243,46,134,62,245,12,150,175,94,139,153,115,230,161,65,114,178,42,159,56,35,43,27,102,179,89,249,190,93,11,27,51,19,239,87,204,27,82,137,114,116,214,124,202,230,228,221,140,143,54,237,22,244,112,135,63,223,143,143,215,189,207,251,62,141,115,155, -96,237,39,59,35,94,119,196,147,143,162,202,39,253,122,147,155,243,57,65,101,235,166,245,168,56,255,99,208,241,111,190,46,196,225,47,14,160,205,237,237,253,142,183,185,189,61,78,125,93,24,118,3,103,169,207,42,246,58,190,114,236,203,195,126,245,26,43,162, -22,188,17,72,228,238,3,120,215,11,73,147,72,132,136,102,16,78,208,58,48,29,180,93,41,155,45,243,145,175,190,58,130,219,219,118,192,230,77,31,227,198,140,76,252,80,110,195,13,169,105,72,74,178,224,135,114,27,92,46,23,14,125,126,0,135,62,63,0,0,112,57, -93,184,189,109,123,172,95,183,6,35,70,142,70,82,146,5,213,213,14,116,238,210,13,51,167,79,69,131,6,201,160,221,110,204,154,62,149,133,177,155,26,231,226,219,51,69,154,173,227,106,135,3,35,158,26,12,0,120,160,223,67,120,160,239,195,120,103,206,12,191, -50,38,147,25,22,139,165,6,218,172,168,182,87,161,188,220,134,166,205,154,131,166,221,56,115,218,255,253,154,54,107,14,0,40,47,47,67,181,195,193,30,79,77,75,131,197,98,69,101,69,69,216,103,74,78,78,65,114,74,67,216,237,118,148,219,202,216,227,205,242, -91,192,225,168,61,70,81,20,146,83,26,194,229,116,34,53,45,29,21,21,63,250,93,59,57,37,5,41,41,13,225,168,170,130,205,231,58,106,26,245,196,251,21,31,146,40,21,190,56,59,63,25,30,108,255,190,61,88,186,104,174,44,207,20,78,234,212,169,131,65,79,14,15,58, -254,227,127,127,192,230,79,62,10,121,222,170,229,139,209,164,105,126,80,194,142,71,6,14,193,215,39,11,53,187,65,243,225,207,247,99,193,188,89,68,243,99,12,10,181,60,73,68,88,139,8,17,34,114,193,21,95,248,82,202,123,112,232,243,131,232,217,171,15,202, -203,203,112,242,100,33,254,115,182,20,119,118,244,76,224,30,251,234,40,0,224,142,142,157,112,251,237,237,97,50,155,113,67,106,26,118,237,216,10,154,166,177,111,239,110,220,222,182,61,78,158,44,4,69,25,241,253,217,82,244,236,213,7,55,102,102,249,121,190, -188,97,139,220,99,74,52,199,179,224,99,14,135,3,183,220,218,58,232,120,70,102,22,198,188,240,34,202,109,101,40,183,217,208,181,91,15,156,40,60,14,154,166,65,81,20,44,86,43,134,15,125,2,0,240,210,164,87,144,100,177,162,220,86,134,91,91,79,196,164,23,199, -162,180,164,4,25,153,89,152,243,206,2,236,221,179,19,25,153,217,44,208,5,74,191,135,30,65,227,156,92,148,219,108,72,77,77,195,236,153,211,224,112,56,48,103,238,66,84,86,156,7,0,88,172,86,140,25,245,12,44,22,43,222,121,119,49,108,101,231,112,186,232,20, -198,223,253,50,86,44,95,130,109,91,54,225,161,135,7,32,39,55,15,54,91,25,146,147,83,48,245,181,201,160,105,58,42,227,102,56,49,26,141,184,242,202,43,145,144,144,64,58,5,21,37,33,33,1,20,69,41,11,96,98,59,68,57,32,201,229,114,98,213,178,197,56,184,127, -175,226,240,5,0,253,250,15,196,117,215,55,8,58,190,108,241,60,92,190,124,57,228,121,255,251,245,23,108,88,247,1,30,29,52,52,104,214,103,232,240,231,48,237,181,73,154,82,28,151,203,137,15,87,47,199,167,123,118,104,22,50,162,1,43,186,3,36,133,158,215,100, -50,163,125,135,59,208,56,39,15,31,174,89,13,218,237,198,189,247,61,0,202,104,196,236,25,190,25,62,245,155,57,77,9,131,143,8,17,34,26,153,233,17,241,187,152,230,253,237,153,34,140,30,51,30,45,111,109,133,207,62,221,131,31,202,109,120,253,205,25,160,105, -26,51,167,79,133,201,100,194,136,145,163,209,183,79,119,208,52,141,81,99,198,179,231,110,217,180,1,227,95,154,140,36,139,5,91,54,109,0,0,156,57,83,132,11,149,21,24,57,252,73,221,84,183,201,108,198,227,79,120,158,183,75,215,30,120,123,206,116,206,114, -201,201,41,120,172,127,95,208,52,13,179,217,4,138,50,226,245,87,60,182,209,214,157,251,96,50,153,81,199,88,7,141,115,155,224,193,251,123,2,0,78,158,40,64,175,123,239,199,91,83,95,67,215,110,61,48,127,222,219,216,190,109,51,0,96,239,254,67,156,247,105, -218,172,57,206,156,62,133,85,43,150,178,67,100,78,110,30,92,206,139,152,54,245,85,48,12,131,183,231,45,68,102,102,54,156,206,255,33,37,165,33,30,238,123,47,92,46,39,138,78,125,141,62,247,245,197,182,45,155,208,170,245,109,56,112,96,31,54,172,95,167,56, -233,26,12,225,183,118,9,55,129,144,155,155,139,164,164,36,2,96,81,0,176,58,117,234,192,118,78,158,109,177,18,229,86,38,177,6,203,143,255,253,1,59,183,109,194,193,253,123,195,130,143,156,114,99,70,22,186,118,239,29,116,252,192,190,61,188,220,255,59,183, -111,70,219,14,29,145,222,232,198,128,206,160,5,218,117,232,200,43,20,81,105,241,214,235,145,67,7,241,219,111,151,98,22,96,72,88,32,183,180,107,127,7,14,30,248,44,98,185,78,157,239,65,227,156,60,108,223,186,25,149,21,231,241,250,155,51,112,162,224,56, -138,138,190,81,206,96,34,223,140,8,17,105,253,158,10,147,33,122,105,170,106,120,191,0,128,166,105,252,80,110,67,211,166,205,49,239,237,218,104,18,147,201,140,31,202,109,236,12,249,61,93,186,131,162,140,200,200,200,100,61,99,23,46,84,130,166,105,116,238, -210,29,131,30,125,16,0,240,253,217,82,80,20,133,23,94,124,25,159,125,186,7,25,153,89,216,185,125,43,170,171,29,28,227,156,168,193,81,49,93,58,121,162,0,203,222,91,20,114,12,62,91,90,226,241,32,49,12,170,29,14,56,124,66,11,105,218,13,147,217,140,198,185, -185,56,227,51,206,148,150,150,96,216,240,103,1,120,194,7,183,111,219,82,251,91,73,9,231,115,76,155,250,10,6,15,121,10,235,62,222,130,79,54,172,199,218,53,171,209,170,245,109,200,201,107,130,5,139,151,177,229,44,86,43,156,206,255,161,164,228,59,184,92, -78,159,231,168,11,0,152,60,105,2,134,12,125,26,91,119,124,138,21,203,150,96,195,250,181,209,159,75,224,176,169,169,196,191,224,186,88,21,69,123,75,122,161,80,250,198,117,26,195,125,48,226,53,131,138,4,28,240,45,239,251,147,255,253,24,197,236,204,68,190, -84,206,7,186,188,255,127,112,255,167,248,246,76,81,152,217,37,131,79,3,253,14,103,75,138,67,194,65,168,231,249,252,192,167,248,238,91,113,49,210,151,46,121,238,85,255,186,235,57,215,66,237,221,205,223,75,52,119,246,52,180,190,173,93,208,241,171,175,190, -70,214,103,21,122,157,179,37,197,56,91,90,140,75,151,92,250,48,36,116,98,140,43,245,156,124,175,75,81,20,114,114,243,0,0,149,21,21,112,56,236,200,200,202,198,153,162,83,172,17,208,32,37,25,103,75,75,208,187,207,3,104,215,254,14,56,157,78,148,150,20,195, -229,114,34,201,98,65,90,90,35,48,12,112,162,240,56,123,78,215,110,61,241,249,129,207,224,114,94,132,197,98,69,171,214,183,225,147,143,63,130,195,110,151,237,14,19,10,143,0,0,32,0,73,68,65,84,29,77,102,51,172,22,43,156,78,39,210,210,211,81,244,205,215, -160,105,26,105,105,233,176,88,235,163,232,212,215,126,225,30,153,89,217,48,155,235,194,86,118,14,14,135,231,57,44,22,43,210,210,27,129,166,221,40,58,245,13,136,16,33,18,5,11,81,79,147,39,10,108,186,60,247,237,153,48,249,36,131,152,250,250,20,22,188,104, -154,198,176,193,143,225,246,182,29,224,168,182,99,204,168,17,126,75,21,102,190,245,6,76,102,51,92,174,218,177,121,228,240,39,113,103,199,187,209,56,39,23,103,207,150,178,112,160,85,113,57,157,44,120,133,135,85,119,216,191,25,48,40,183,149,225,145,1,143, -179,199,210,210,210,113,186,6,200,74,75,139,145,156,146,130,179,165,30,240,74,78,73,225,188,79,181,195,129,105,83,95,133,201,100,198,252,197,203,81,89,113,30,133,5,199,209,56,39,15,207,142,24,234,55,190,38,39,39,195,229,228,174,95,135,195,142,169,175, -79,129,201,108,198,226,247,86,162,162,226,71,28,61,124,72,213,73,4,145,234,76,38,142,116,40,178,133,32,250,42,206,129,207,246,68,116,175,74,85,70,57,188,75,190,233,229,197,74,197,249,31,241,241,186,15,194,150,145,203,19,38,244,58,74,67,141,86,66,15,197, -158,175,151,250,241,149,249,139,150,193,225,176,227,108,105,9,42,83,42,112,162,224,56,94,125,227,45,220,219,189,115,13,180,100,97,208,144,97,24,59,122,36,110,109,213,6,22,139,21,205,242,91,160,178,226,60,40,35,133,5,139,150,163,176,224,56,204,102,51, -6,63,57,12,195,134,60,142,246,29,238,128,197,106,197,13,105,233,112,56,236,104,144,156,2,163,209,136,156,220,60,184,221,110,84,86,86,200,242,236,89,89,217,24,62,114,20,140,148,17,7,246,239,67,225,241,99,104,223,225,78,60,250,248,96,28,61,114,8,163,199, -142,199,212,215,38,163,232,212,55,152,49,103,30,108,101,231,64,211,52,186,245,232,133,41,147,38,192,98,177,98,197,251,107,113,228,240,23,48,155,235,98,248,72,43,158,28,244,104,84,7,67,34,68,136,104,129,177,212,241,126,121,229,194,133,74,224,66,37,251, -247,15,229,182,160,223,215,127,180,166,22,88,124,96,43,240,92,47,180,237,220,177,53,194,120,34,106,16,146,113,60,83,166,46,203,109,101,112,56,236,120,105,210,43,56,123,182,20,93,186,246,192,156,89,111,1,0,118,108,219,130,151,94,126,21,22,139,21,25,25, -161,211,207,247,123,232,17,56,157,23,65,187,105,152,205,102,156,46,250,6,14,135,3,79,143,120,22,19,39,191,134,189,187,119,34,39,55,15,159,124,252,81,216,103,25,49,242,57,216,202,202,224,166,105,152,205,117,81,90,92,172,166,18,215,254,167,134,179,31,42, -105,54,169,57,175,163,5,8,76,148,166,47,220,97,135,114,192,23,17,237,25,255,106,94,63,30,235,52,146,52,206,201,131,195,97,199,184,231,159,101,143,37,39,115,207,8,186,92,78,124,126,240,51,52,107,214,2,239,45,158,207,14,82,123,247,236,194,146,69,158,191, -23,44,94,134,156,220,60,108,219,186,25,93,187,247,196,246,173,155,113,162,240,56,24,134,193,144,161,79,179,229,228,24,87,188,85,151,158,214,8,221,186,116,100,103,32,251,220,223,15,207,63,59,28,14,135,29,69,167,190,198,189,247,245,69,73,241,119,200,205, -107,130,197,11,230,161,180,164,118,0,236,222,179,55,182,110,217,132,197,11,230,1,0,22,45,93,137,204,172,108,191,50,68,136,16,137,59,250,34,117,160,162,49,90,237,112,224,229,137,47,68,44,119,182,180,4,111,207,174,205,140,184,125,219,22,63,15,216,164,23, -199,161,218,97,7,77,211,120,97,204,179,184,181,85,27,100,100,102,99,210,139,99,97,179,121,128,246,68,97,1,158,24,216,31,119,117,186,7,27,55,124,132,213,43,150,194,233,227,189,242,62,119,97,193,49,100,102,101,131,50,82,24,54,120,32,27,234,56,114,248,80, -180,107,127,7,114,114,243,80,90,82,12,167,243,34,0,6,179,166,191,201,94,163,164,164,24,179,102,120,50,80,30,216,255,25,50,179,178,1,0,67,158,24,192,70,94,68,77,149,245,170,219,209,88,207,175,67,175,90,162,88,64,34,144,69,224,75,11,215,210,170,247,75, -137,103,201,207,111,206,134,98,132,238,132,66,203,173,173,218,96,213,138,165,236,223,39,10,11,144,159,223,2,167,107,194,23,249,118,115,82,228,200,225,47,88,248,162,40,10,249,45,90,226,141,183,102,178,191,59,236,158,1,249,249,103,135,99,200,176,225,72, -73,105,136,153,111,77,69,97,193,49,228,55,111,137,21,203,150,176,101,11,11,142,163,117,155,219,9,128,17,33,253,185,206,250,60,121,141,86,67,104,59,53,70,236,145,104,123,191,124,133,166,233,160,20,242,92,186,229,114,57,61,227,85,205,111,23,2,34,41,206, -156,46,98,141,102,154,166,241,249,193,253,248,252,224,126,78,224,91,247,225,251,97,223,231,108,105,9,59,54,250,22,115,185,156,216,182,117,83,208,24,86,90,90,59,102,184,106,66,244,1,224,116,209,55,81,11,109,215,138,237,236,221,32,156,166,233,160,92,8, -190,117,27,184,145,56,0,124,127,182,196,207,219,11,0,55,55,203,199,247,165,193,199,189,50,249,149,169,120,103,206,12,206,53,143,98,196,3,242,89,88,189,114,153,190,0,76,88,135,39,44,233,6,1,51,2,95,122,134,47,161,231,40,241,29,78,23,125,131,190,15,246, -247,59,230,116,58,253,54,166,244,141,145,167,221,52,40,99,109,202,84,91,217,57,100,102,101,163,176,192,179,246,43,53,53,13,159,108,88,175,170,126,186,125,214,120,209,52,13,91,217,57,76,158,56,129,77,21,236,149,162,83,223,224,249,103,135,35,45,45,29,43, -222,95,135,110,247,220,9,187,189,10,89,217,217,40,44,56,6,192,179,70,108,165,15,144,69,83,14,31,254,154,220,131,220,131,136,218,6,106,96,244,77,12,110,92,171,52,55,243,241,28,40,241,12,66,146,48,196,149,158,71,89,135,147,146,44,152,62,107,46,190,61,83, -4,147,201,140,234,106,7,102,190,245,134,39,116,54,160,220,140,217,115,253,32,237,157,57,51,241,253,217,82,152,76,38,140,159,56,5,22,139,5,180,155,70,146,197,130,51,167,139,48,245,181,201,65,223,189,113,78,158,159,157,194,203,150,10,163,36,73,22,43,82, -83,211,34,38,224,208,37,128,133,131,47,2,89,177,11,94,177,2,95,90,251,22,188,203,50,12,78,23,157,194,83,195,173,120,118,212,88,148,151,219,80,110,59,135,19,133,5,40,45,41,193,176,225,35,81,93,237,64,219,118,29,216,83,10,11,143,225,185,209,227,208,174, -253,29,40,42,250,6,219,183,109,198,107,111,76,7,85,135,66,146,197,130,212,244,70,108,34,142,104,201,134,245,235,48,115,206,60,108,88,191,14,78,231,69,56,157,23,81,90,92,140,71,31,31,140,19,5,199,144,210,176,33,42,42,206,195,229,116,226,195,15,86,225, -141,183,102,129,162,140,236,102,153,36,17,7,145,184,237,243,101,9,185,209,183,181,27,235,54,135,232,97,142,100,152,213,155,34,107,234,113,170,171,29,236,182,8,247,63,240,16,238,235,251,32,230,206,153,197,89,238,153,167,159,12,210,189,119,230,47,193,230, -141,27,176,121,227,199,130,85,182,113,142,199,171,230,245,178,102,100,102,161,178,162,130,77,76,147,100,177,192,124,141,9,229,229,54,152,76,102,207,239,149,21,168,172,60,175,187,207,158,32,76,71,12,4,178,8,124,233,226,121,229,188,183,86,96,143,166,105, -60,49,176,63,190,60,122,24,128,39,11,34,0,60,55,98,40,190,47,45,129,211,121,17,99,71,143,196,236,153,158,125,187,170,29,14,140,28,241,36,50,50,179,97,164,140,56,91,90,130,145,195,135,194,233,114,162,188,220,134,97,131,7,178,215,158,61,99,26,74,75,138, -217,119,125,242,137,199,100,55,34,74,74,138,131,60,86,27,214,175,197,212,215,38,195,98,181,214,100,60,44,131,211,121,17,7,247,239,67,90,122,35,84,156,63,143,33,131,6,0,0,74,75,138,241,252,200,167,107,178,58,150,176,199,137,16,33,18,135,182,55,59,17,76, -190,163,216,19,229,240,126,133,29,31,229,82,70,190,169,244,25,125,182,157,176,97,180,81,22,71,181,29,169,169,233,188,203,223,152,145,9,151,211,201,9,95,145,244,237,153,103,159,71,255,71,6,226,206,142,119,99,249,234,181,160,40,10,119,118,188,27,189,251, -220,199,150,25,249,220,24,164,166,165,35,201,98,193,226,229,171,209,182,93,7,140,28,53,6,195,158,30,169,232,119,87,194,14,76,148,162,48,225,254,38,18,27,224,165,69,248,138,149,208,195,192,178,13,174,179,224,194,207,145,227,160,189,0,230,11,102,123,247, -236,98,59,55,223,117,98,190,177,241,0,80,89,89,193,153,9,170,52,96,109,153,18,158,49,151,211,201,153,254,183,232,84,112,220,125,97,193,49,54,212,208,87,108,182,50,216,108,101,146,158,163,190,181,30,233,60,136,144,62,62,214,120,44,134,194,15,201,103,151, -7,30,137,136,19,147,201,140,129,131,134,0,0,58,119,233,142,185,115,102,114,150,75,74,178,224,157,119,107,183,35,120,230,169,33,104,156,147,135,242,242,218,49,250,158,174,221,209,32,57,5,46,167,19,31,133,201,24,222,32,57,25,109,219,117,192,125,189,187, -2,0,134,62,53,2,119,222,117,55,54,109,252,24,179,222,126,23,171,87,46,135,201,100,70,78,78,46,94,159,50,17,29,59,117,198,166,79,214,227,163,15,63,64,29,170,14,214,174,223,140,165,75,22,232,170,158,121,3,152,152,117,95,4,206,244,63,40,199,51,124,197,218, -104,44,253,50,100,192,35,66,132,72,244,198,61,95,91,66,170,93,193,48,218,244,158,73,234,167,117,226,253,34,235,191,244,97,31,159,60,81,136,101,239,45,14,249,59,87,8,98,181,195,142,166,125,31,100,255,62,91,90,130,202,202,10,76,120,105,74,72,0,99,24,32, -53,53,29,148,145,194,220,249,181,81,50,46,151,19,23,42,43,80,237,176,163,113,78,46,50,50,179,240,249,129,253,160,105,26,183,220,218,26,169,105,233,236,178,139,202,202,10,191,189,249,228,177,49,149,85,200,68,190,10,18,13,37,9,236,112,201,0,196,232,246, -94,209,132,47,181,238,39,199,218,175,32,47,24,223,208,11,68,183,126,245,2,184,196,251,69,36,22,250,123,161,6,172,180,182,173,73,171,213,247,255,194,150,209,215,55,215,14,124,17,155,41,126,197,229,114,98,249,210,197,194,244,177,166,240,153,211,69,104, -144,156,130,27,82,211,240,67,185,13,223,159,45,229,117,122,181,195,14,218,77,99,196,83,131,131,190,223,166,79,62,70,199,187,238,70,70,102,22,166,79,125,205,115,159,51,69,248,161,220,134,165,75,22,6,233,51,19,161,109,104,69,255,19,229,0,30,37,33,137,64, -152,246,193,67,235,240,165,245,208,67,46,8,3,192,43,28,145,8,1,47,34,68,68,246,140,177,62,112,234,10,194,212,130,47,185,46,41,58,26,69,168,222,201,250,110,12,255,119,80,201,238,50,8,220,128,89,75,106,237,27,170,8,0,59,183,111,193,133,202,74,76,125,109, -50,102,204,158,135,157,59,182,226,219,211,69,184,41,39,55,226,181,206,158,45,197,217,210,18,76,157,54,11,159,126,186,27,38,147,9,229,54,27,78,158,40,192,231,7,247,99,216,211,207,192,225,112,160,188,102,211,243,79,247,236,194,146,101,171,81,135,162,112, -242,68,129,110,82,207,135,4,176,80,202,33,167,219,159,64,88,252,128,23,129,47,105,114,125,253,36,217,238,31,169,140,82,191,135,157,197,39,179,147,68,136,200,102,192,102,100,102,161,107,183,158,152,61,243,45,217,250,203,180,180,116,156,63,127,30,180,207, -246,17,96,24,88,44,86,140,30,59,30,19,198,141,142,74,29,200,101,15,104,193,152,149,220,13,10,29,175,212,72,59,47,106,220,149,246,14,122,30,78,180,100,222,86,87,59,48,101,210,132,136,245,89,93,237,240,105,255,158,194,222,53,222,251,246,238,198,153,211, -167,208,180,89,115,220,148,147,11,151,243,34,38,135,216,188,251,229,137,47,160,186,102,227,236,241,227,70,225,206,187,238,70,106,106,26,202,109,101,236,90,50,154,166,241,194,216,81,112,94,188,88,123,127,135,3,131,31,127,4,29,59,117,70,227,156,60,118, -109,252,151,71,15,225,116,145,62,178,35,39,170,211,193,48,50,196,107,199,7,132,69,203,40,213,162,215,75,15,240,165,135,122,214,219,59,105,169,45,146,16,104,34,122,233,143,77,166,186,200,204,202,150,181,125,118,235,209,11,91,55,111,130,205,86,134,86,109, -110,67,209,169,111,224,186,120,17,148,209,136,220,188,38,186,134,47,45,64,152,218,93,167,92,161,87,250,244,126,197,82,255,160,156,206,114,109,180,29,170,220,215,39,11,67,126,163,11,149,149,216,185,125,107,196,239,30,120,175,125,123,119,115,234,152,239, -166,222,190,16,182,238,195,247,253,142,57,236,14,56,236,14,93,168,88,98,56,163,67,107,198,71,172,26,68,122,75,203,174,198,53,163,177,79,152,210,231,40,85,86,233,186,214,170,142,104,73,218,180,185,89,210,249,124,54,245,37,247,136,191,123,132,134,45,51, -50,179,178,225,116,94,244,203,114,234,43,22,139,5,169,105,141,96,183,87,177,51,211,14,135,29,0,144,154,150,14,139,197,2,151,211,137,210,210,98,246,154,22,139,5,118,135,29,89,89,217,40,58,245,13,246,236,222,9,187,195,238,241,120,141,25,143,197,11,223, -133,237,220,127,224,172,185,158,197,98,245,108,23,81,113,158,221,76,221,98,177,130,50,26,97,54,155,107,182,150,56,7,167,243,34,114,243,110,246,236,243,87,82,28,87,6,173,98,70,159,2,158,47,62,151,101,34,23,208,4,136,234,97,140,209,158,141,173,46,244,43, -177,102,53,210,77,194,63,143,186,155,146,39,234,79,65,24,77,62,151,222,58,7,45,27,213,4,190,24,217,202,69,211,251,21,43,144,69,188,96,68,52,51,110,212,24,15,227,38,76,68,185,205,134,228,228,20,0,192,171,83,94,10,130,175,165,43,215,224,232,225,67,72,78, -73,129,217,92,23,159,124,252,17,182,109,221,132,86,173,111,195,11,47,78,194,158,93,59,144,223,188,37,142,30,57,132,37,139,222,69,102,86,22,6,63,57,28,0,112,162,240,24,74,74,138,49,234,249,241,88,188,112,30,82,82,26,194,106,177,34,39,55,15,70,138,66,193, -241,99,48,155,235,98,252,196,201,40,45,41,198,240,214,183,97,239,238,29,88,243,254,42,180,190,237,118,60,248,240,0,22,188,242,91,220,130,210,226,239,224,116,94,68,74,202,63,97,183,87,97,202,164,9,113,9,97,178,117,137,81,130,47,41,23,144,205,251,38,58, -252,144,81,231,219,232,84,95,69,189,127,164,201,91,48,138,62,160,178,201,52,24,197,109,153,68,33,70,135,20,67,68,110,239,149,111,133,232,193,64,210,138,49,170,212,115,240,189,110,229,79,85,138,117,130,162,223,77,12,124,129,81,230,22,50,103,61,148,190, -144,90,188,119,44,236,165,85,110,15,98,147,112,144,48,68,34,90,148,137,19,198,178,255,189,113,235,238,160,230,212,170,245,109,56,184,127,31,102,205,240,108,202,190,108,229,26,246,183,126,15,245,199,148,73,19,112,162,240,56,40,138,194,250,141,219,177, -114,185,39,245,115,110,94,19,220,221,241,246,160,253,250,182,110,217,132,33,67,135,227,195,15,86,161,242,252,121,36,167,52,132,185,110,93,44,94,48,15,165,37,197,216,179,115,59,94,126,117,42,214,188,191,10,0,96,54,155,217,245,33,203,87,175,133,205,86, -134,197,11,230,193,100,54,99,219,206,125,234,1,152,64,43,213,91,143,114,55,121,121,243,72,196,90,196,76,116,222,83,11,147,224,90,217,74,65,9,248,18,123,122,60,173,13,79,212,155,194,233,5,198,180,166,68,177,12,94,241,6,95,58,24,167,53,247,96,85,246,95, -68,129,24,129,47,34,154,105,54,53,253,78,146,197,130,167,135,63,7,0,72,78,73,65,74,74,195,160,178,190,139,210,1,248,109,106,158,223,188,37,70,14,247,236,221,67,211,52,42,43,206,179,107,199,74,75,190,227,220,44,157,107,62,198,121,177,54,156,208,77,211, -176,90,173,236,111,190,27,171,211,180,27,69,167,60,225,150,46,167,19,230,186,117,69,215,129,90,237,81,14,16,83,164,155,83,112,188,82,50,244,80,109,239,23,35,221,160,208,206,88,25,65,9,165,64,152,232,215,228,19,125,3,70,190,251,242,244,126,5,21,99,180, -237,245,76,136,53,216,96,24,198,239,159,154,247,82,235,190,98,158,145,192,151,198,225,75,230,103,224,115,223,168,121,191,162,40,94,16,35,66,68,143,240,5,0,253,30,124,4,229,229,101,120,117,202,75,120,105,194,24,206,242,103,207,150,32,35,51,139,253,59, -45,189,17,251,223,14,135,29,153,153,181,201,58,146,83,26,162,164,248,59,15,72,185,105,222,109,216,233,188,24,242,55,183,219,237,247,55,237,115,93,169,34,24,194,36,238,129,22,248,143,79,153,88,131,47,165,65,87,249,7,210,222,128,196,165,199,98,65,85,136, -206,73,214,81,5,149,69,113,155,93,225,144,72,161,146,24,78,49,148,242,86,169,57,171,28,143,169,174,245,146,245,78,142,203,196,12,124,201,24,122,40,15,124,105,167,222,181,54,72,18,33,18,77,169,174,118,160,227,93,157,81,110,43,67,219,118,119,192,110,183, -7,149,57,122,248,16,22,44,89,142,202,138,10,164,166,165,33,39,55,15,7,247,127,6,0,88,178,240,93,76,122,229,117,108,223,178,9,205,154,183,192,209,195,95,248,167,153,15,33,5,5,199,240,224,195,3,176,109,203,70,54,9,71,92,194,48,163,143,27,202,9,95,90,245, -126,201,53,126,69,107,88,82,34,163,167,22,116,81,105,239,151,18,239,30,13,86,72,20,162,16,114,193,19,89,87,17,63,224,21,202,251,21,213,198,18,195,240,37,227,215,214,143,129,34,80,170,236,191,144,141,153,137,232,182,95,95,187,102,53,42,43,206,35,53,45, -29,75,22,205,199,218,53,171,1,0,165,37,197,152,93,179,230,171,162,226,60,134,62,241,24,186,245,232,133,19,133,5,0,60,161,128,0,131,109,91,55,193,102,59,135,252,230,45,177,119,247,78,236,217,189,19,0,80,82,82,140,89,51,166,250,221,107,230,244,169,168, -168,201,110,56,243,173,55,208,225,142,142,72,75,111,132,3,159,125,234,183,7,152,195,94,197,254,125,228,208,23,40,250,166,54,195,227,204,183,106,175,1,0,67,30,31,160,136,177,202,128,9,189,145,173,206,54,101,142,7,248,146,195,251,165,72,248,161,22,117, -64,11,186,171,176,157,34,40,81,25,24,201,207,27,254,103,238,4,28,114,171,86,162,124,223,70,24,84,197,74,54,195,88,135,46,185,239,17,235,94,175,104,195,151,166,67,15,201,158,46,68,136,200,34,7,15,124,198,54,167,202,74,207,255,187,92,78,148,214,164,164, -55,153,204,160,140,70,44,89,52,31,201,201,41,120,225,197,73,88,187,166,118,191,156,211,69,167,112,186,232,148,95,123,118,57,157,236,154,46,239,181,125,83,198,187,156,78,108,221,188,145,253,219,127,157,23,205,254,237,112,216,217,116,247,129,215,0,252, -215,163,197,165,33,171,1,240,82,3,190,228,60,77,218,228,163,54,247,30,211,149,237,43,147,157,162,148,247,75,121,29,82,70,18,229,253,70,194,61,91,196,27,166,77,232,82,226,62,196,235,165,7,248,210,134,238,105,65,72,191,68,68,143,125,61,195,48,48,155,205, -24,245,252,56,24,141,70,56,157,78,44,89,56,31,14,71,21,169,80,2,95,170,49,134,40,131,87,5,239,151,86,194,15,117,51,121,160,2,124,73,245,126,233,49,252,48,34,128,169,5,71,196,27,166,45,5,97,52,152,141,143,192,151,90,240,165,80,232,33,241,126,17,33,34, -91,159,23,169,57,85,86,86,96,228,240,161,162,238,193,121,109,141,37,150,10,215,95,134,12,67,244,125,15,45,218,26,82,146,133,40,0,95,90,9,61,84,213,251,21,5,93,14,180,123,35,234,176,78,116,82,114,123,150,209,230,11,212,33,190,225,135,74,215,139,31,128, -241,1,160,72,80,38,5,218,8,136,69,143,200,149,218,152,89,111,94,47,2,95,218,209,73,34,68,136,200,213,95,50,49,250,190,34,89,74,75,225,136,82,163,18,52,6,95,209,170,50,49,222,47,173,188,23,47,117,84,83,103,101,222,232,91,174,106,85,194,251,197,87,95,148, -184,79,162,82,15,45,117,211,102,33,80,72,128,75,123,224,21,245,107,232,120,189,151,30,225,139,120,191,136,16,81,167,15,21,190,129,41,195,187,188,86,189,95,66,67,148,120,121,16,116,16,214,37,231,120,165,22,124,105,199,251,165,202,103,208,201,140,131,54, -225,75,13,239,151,86,109,111,63,0,19,212,193,241,0,44,57,51,38,198,34,140,49,49,182,155,189,156,215,213,131,215,139,192,87,108,195,151,80,29,60,124,248,107,197,159,137,220,35,254,238,65,230,50,196,195,9,111,8,171,53,48,116,243,241,98,10,190,4,94,139, -191,247,75,187,141,197,187,63,107,40,155,54,98,70,79,37,244,85,129,73,107,185,214,125,133,186,23,47,27,72,238,240,67,37,0,76,40,72,241,133,48,57,193,73,175,48,166,149,208,45,2,94,81,0,47,157,195,151,164,231,32,214,34,17,34,170,216,71,177,236,253,226, -83,47,92,230,128,224,181,52,74,24,182,114,175,167,86,112,188,138,26,124,49,234,36,15,137,152,124,67,111,227,149,92,222,48,133,108,39,57,55,122,230,173,247,50,122,191,66,134,31,202,168,39,137,234,232,9,163,192,134,115,220,149,16,45,48,211,234,250,24,173, -67,151,44,215,34,240,165,24,124,73,73,4,16,27,70,47,201,210,74,68,251,58,26,11,99,149,102,218,37,87,253,68,186,151,210,123,112,42,60,86,41,9,95,98,174,43,108,93,155,190,188,95,124,121,138,215,4,130,216,73,3,133,19,190,68,86,39,233,161,135,242,123,191, -212,151,68,62,157,155,20,47,88,96,133,43,109,204,144,68,1,202,214,1,1,175,232,129,151,150,224,75,201,14,158,8,17,34,114,52,39,137,253,138,142,218,176,108,94,48,13,246,103,81,135,47,165,170,142,145,30,70,201,23,190,244,234,253,18,21,74,171,49,93,148,170, -111,188,67,15,37,215,129,250,58,144,40,22,168,196,158,67,50,29,234,19,58,99,1,188,8,124,201,7,95,36,244,144,8,145,232,247,239,114,132,30,234,173,46,4,219,40,53,117,161,153,212,222,10,27,187,178,133,28,242,188,152,156,235,190,228,50,242,137,253,22,61, -125,20,189,238,75,225,112,221,192,203,71,59,252,48,8,192,196,118,124,98,193,141,128,88,252,64,87,92,128,151,66,240,37,235,128,74,224,139,8,17,2,95,145,154,172,46,214,126,5,70,234,132,143,196,210,212,254,74,81,4,47,77,192,151,192,208,195,120,241,126,113, -233,112,180,245,86,174,73,98,49,240,21,203,222,175,176,0,198,185,65,92,4,8,19,3,84,4,196,180,53,75,162,201,180,244,42,131,151,168,91,202,156,186,149,192,151,118,12,60,18,214,76,68,63,240,37,67,183,165,225,245,204,145,19,127,69,134,48,64,123,222,48,70, -201,100,72,49,8,95,90,179,155,212,208,143,104,232,172,220,118,138,28,250,32,230,185,197,122,191,162,6,96,98,59,65,177,139,99,227,113,239,47,45,117,26,74,121,187,162,185,142,72,207,94,47,2,95,68,136,144,49,64,120,59,141,205,208,195,80,239,194,61,81,204, -35,103,134,6,188,97,242,172,167,81,96,156,143,2,124,9,45,46,54,241,134,86,189,95,190,122,172,248,122,198,40,216,41,114,237,247,165,246,132,145,146,225,135,156,0,230,175,8,226,146,111,72,245,106,5,126,172,88,6,178,88,219,15,76,150,107,70,1,188,68,221, -86,33,175,23,129,47,34,68,136,40,13,95,122,243,126,9,237,154,249,64,24,107,99,104,208,176,85,29,188,162,8,95,74,100,61,100,116,24,70,27,73,127,149,246,224,42,177,191,28,35,211,254,98,124,251,43,225,222,47,141,108,196,44,36,236,48,90,155,49,235,21,202, -180,208,25,104,62,37,189,94,192,75,224,73,209,3,47,2,95,106,233,116,155,54,55,75,186,31,159,77,125,201,61,226,239,30,66,122,191,88,133,47,185,141,88,53,97,76,238,132,18,162,146,90,232,20,190,248,175,251,18,249,122,81,158,252,150,98,31,203,9,98,74,218, -77,114,173,251,82,171,189,169,149,124,35,8,192,194,117,104,90,218,140,153,207,135,141,6,156,197,219,62,96,4,188,180,14,95,242,164,153,143,119,207,23,217,7,140,136,246,251,114,25,224,75,111,237,49,128,174,228,128,48,190,125,182,215,232,85,51,91,159,162, -224,197,227,6,146,54,221,149,9,190,132,140,117,17,19,111,232,96,172,81,210,139,43,9,114,228,176,83,228,88,7,40,194,126,209,146,247,43,36,128,41,97,160,168,185,198,43,158,23,205,43,191,167,7,35,231,197,8,120,65,137,61,91,8,124,17,248,34,18,207,240,165, -118,95,172,229,246,40,6,194,148,50,94,213,250,44,106,121,189,36,61,163,64,248,146,53,244,80,83,153,15,25,89,116,87,13,189,148,37,228,80,33,248,146,211,251,21,21,0,243,245,86,241,245,130,5,158,39,228,69,137,113,163,15,216,212,18,116,169,14,94,26,129,47, -205,132,28,198,9,124,69,187,99,38,66,68,10,124,197,67,232,33,95,47,152,239,43,234,197,228,80,28,188,212,130,47,153,50,30,202,26,122,168,179,73,6,185,39,16,148,172,67,177,240,165,196,183,147,226,253,82,35,252,16,0,18,132,84,166,55,110,85,46,67,197,123, -61,98,224,136,171,51,165,195,11,101,189,7,195,200,226,241,18,155,217,80,180,215,75,224,90,47,33,105,91,9,124,17,240,34,66,68,110,29,140,117,248,242,123,63,14,27,69,225,97,40,72,110,185,181,53,250,15,24,40,219,16,41,54,220,80,144,215,75,131,240,37,199, -4,132,158,188,95,126,223,44,32,179,167,150,30,89,13,248,18,164,19,34,18,111,104,117,172,79,136,244,48,220,202,192,200,211,17,68,1,44,244,12,91,106,132,23,202,121,31,70,202,136,18,0,53,177,2,94,66,59,52,254,33,135,140,228,107,17,248,34,16,70,68,47,186, -23,63,235,190,132,142,77,124,195,171,229,170,147,36,139,5,55,220,144,38,25,186,110,185,181,53,186,116,237,30,182,124,151,174,221,113,203,173,173,197,219,91,60,203,114,141,103,20,69,161,105,179,230,104,156,147,23,116,153,212,180,52,52,206,201,11,170,220, -36,139,5,205,242,155,131,162,40,0,192,141,153,153,104,150,223,2,169,105,233,18,117,52,180,93,74,81,20,50,179,178,253,174,105,50,155,145,223,188,5,76,38,83,208,121,249,205,91,34,57,165,33,0,192,98,177,34,191,121,75,228,55,111,169,193,54,160,110,59,150, -117,146,88,174,117,128,34,67,15,181,232,253,242,3,176,112,251,54,9,133,48,41,32,22,143,64,198,5,90,106,133,22,42,1,93,114,92,79,44,116,105,29,188,180,232,245,34,240,69,192,139,72,28,194,151,206,116,220,111,98,24,76,216,247,168,151,148,132,166,205,242, -145,145,145,201,26,229,25,25,153,72,74,178,248,29,247,246,201,215,92,99,66,211,102,249,104,144,156,204,1,29,249,184,33,213,31,176,76,38,79,249,198,141,115,69,3,87,224,99,91,44,22,52,72,78,9,123,126,131,228,20,88,44,22,113,224,197,211,235,21,106,76,75, -178,88,49,251,157,5,24,246,244,72,172,250,224,35,204,126,103,62,146,107,158,247,145,71,31,199,252,69,75,145,220,192,191,254,6,60,58,8,179,231,46,132,197,98,5,3,6,207,141,30,135,167,134,63,139,113,227,39,226,171,194,211,152,51,119,33,82,211,210,101,93, -247,213,169,115,23,44,95,181,22,117,234,80,236,177,172,172,108,204,157,191,4,15,245,127,212,239,188,204,172,108,204,93,176,4,221,123,246,6,0,180,190,237,118,76,126,245,13,12,25,246,52,118,127,246,5,118,127,246,5,58,117,238,162,78,251,142,224,248,80,163, -217,10,157,51,231,165,135,42,195,151,208,208,195,104,142,245,146,214,128,169,153,5,49,84,37,233,101,29,25,163,33,183,183,86,175,43,125,17,165,122,39,70,55,201,6,63,240,226,55,81,66,192,139,64,24,17,157,104,164,96,93,141,21,248,226,213,201,214,216,2,77, -155,53,199,160,193,79,226,228,137,66,52,104,144,140,245,235,214,192,233,114,98,230,219,239,226,108,105,9,206,156,46,66,151,174,61,176,236,189,133,216,177,125,43,146,146,44,152,183,96,9,190,60,122,4,201,201,41,40,47,47,195,194,249,115,97,52,82,88,244, -222,42,156,57,125,10,20,101,4,69,81,152,60,105,60,0,96,198,156,119,81,237,112,192,229,116,162,65,114,10,46,84,86,136,170,98,147,201,132,140,204,44,208,52,29,12,60,73,22,164,166,165,225,108,105,9,92,46,23,167,22,100,100,102,193,100,50,215,148,113,178, -0,231,125,30,47,120,158,57,93,36,125,76,99,0,135,195,142,167,135,14,2,0,244,125,176,63,250,62,248,48,230,204,154,14,0,248,242,200,33,116,237,222,19,239,45,94,192,222,187,89,243,22,56,91,82,236,119,237,137,19,198,160,178,178,2,38,147,25,221,122,244,194, -91,51,222,70,255,7,239,11,170,3,177,155,45,63,248,208,0,108,221,188,17,221,123,246,198,134,245,235,216,227,133,199,143,161,83,231,46,88,188,96,30,123,172,91,143,222,56,114,248,11,191,243,183,110,217,196,150,201,111,222,18,147,95,125,3,14,187,29,133,5, -199,100,31,95,188,182,118,184,223,35,53,95,169,38,176,162,235,13,21,207,128,41,111,183,166,166,247,11,136,16,130,200,240,136,175,22,18,22,160,132,103,39,148,247,72,13,111,18,223,123,51,26,216,111,66,233,186,151,10,94,82,211,162,170,225,241,18,243,172, -209,130,47,18,114,72,132,8,129,175,88,107,215,190,253,90,80,63,92,115,188,89,126,115,84,86,84,96,233,146,133,120,253,213,151,81,90,90,2,192,19,94,246,242,75,47,96,217,123,139,48,126,236,115,184,167,107,15,0,192,173,173,90,99,211,198,143,241,206,156,25, -24,63,110,20,58,222,213,25,20,69,225,166,198,185,56,81,88,128,233,211,222,192,235,175,190,140,140,204,44,212,171,103,193,141,55,102,130,118,211,24,63,118,20,94,127,245,101,84,86,86,120,130,192,25,97,30,4,138,162,176,98,245,58,220,211,181,7,30,232,251, -16,238,239,247,112,45,88,101,100,98,230,219,239,162,105,179,230,152,242,218,155,184,167,107,247,160,239,124,75,171,214,232,213,251,62,52,203,111,142,149,239,175,69,70,102,22,146,147,83,240,230,91,179,216,250,104,219,174,3,30,240,185,174,216,49,141,235, -125,170,29,246,218,80,66,6,248,116,207,46,116,233,222,147,253,253,214,214,183,225,232,145,67,33,175,236,114,57,241,225,7,171,225,116,58,145,223,188,133,232,201,47,223,178,153,89,217,112,56,236,248,240,131,85,232,115,95,95,191,230,99,183,87,193,86,118, -14,173,218,220,198,214,127,243,22,45,113,244,240,161,144,215,46,44,56,134,21,203,222,67,159,251,251,42,170,203,161,42,90,72,56,45,95,189,19,90,94,172,205,47,43,124,41,20,122,24,114,223,47,149,36,228,62,96,91,118,29,36,99,30,17,222,210,187,235,29,130, -65,38,26,179,54,98,79,86,98,135,120,37,192,75,72,167,77,224,139,95,93,146,108,173,68,162,173,131,4,190,66,247,203,126,251,31,49,12,86,175,92,134,71,30,125,28,107,62,218,136,175,142,30,198,130,119,223,1,195,0,14,187,157,245,36,157,61,91,138,198,57,158, -240,193,91,110,109,141,27,210,210,113,123,219,14,0,128,202,202,10,164,166,166,225,150,91,91,227,214,86,173,145,145,185,4,0,224,112,56,96,177,88,208,52,191,57,78,158,40,96,111,249,245,137,2,220,220,172,185,224,103,111,156,147,139,179,165,37,120,227,213, -151,1,0,19,38,78,97,127,187,243,174,187,177,108,201,66,124,126,112,63,146,44,22,204,154,243,46,118,108,219,226,119,254,87,71,143,224,171,163,71,0,0,78,167,19,183,182,106,141,213,43,151,179,0,119,182,180,4,93,186,118,103,143,137,29,215,124,85,198,108, -54,227,137,33,195,0,0,93,186,245,192,156,89,111,177,5,28,14,59,78,23,157,194,173,173,218,224,203,163,135,209,187,207,253,152,246,198,43,184,235,238,123,194,94,215,102,43,131,197,98,229,161,239,145,151,194,220,123,95,95,108,221,178,9,54,91,25,220,180, -27,153,89,217,40,45,254,142,253,125,195,250,181,232,222,163,55,142,30,62,132,246,119,116,196,129,253,251,96,177,90,195,190,191,173,236,28,58,117,190,71,93,61,150,48,6,41,27,162,40,61,201,137,82,240,21,57,244,80,192,239,42,245,147,97,247,1,187,202,104, -68,66,66,2,25,1,137,132,148,132,132,4,212,173,91,151,128,151,162,224,197,15,190,100,1,47,2,95,18,191,19,17,34,4,190,148,158,16,241,77,205,29,104,188,210,110,55,150,46,89,136,213,43,151,97,204,184,23,209,247,193,135,177,119,207,110,88,172,86,92,115,141, -9,46,151,19,153,153,89,56,91,227,25,59,115,166,8,229,229,54,44,123,111,145,223,189,26,164,164,32,201,98,101,1,201,43,38,179,25,15,244,173,245,42,5,174,15,227,15,96,121,56,123,182,132,253,251,219,211,69,72,170,89,223,213,241,174,187,209,180,89,115,60, -208,239,33,0,30,111,81,160,220,210,170,53,58,118,188,27,22,139,21,13,82,82,176,111,207,46,128,97,176,233,147,143,209,165,107,15,172,118,44,67,106,90,186,31,44,10,29,215,66,169,204,137,194,227,158,80,195,128,2,59,182,110,70,239,62,247,163,180,180,24,20, -69,161,146,35,52,51,240,186,105,105,233,248,116,207,78,201,240,101,50,155,209,189,71,111,100,102,101,163,207,125,125,97,181,212,71,159,251,250,98,234,107,147,217,50,71,15,31,194,132,151,38,195,98,177,162,123,143,222,120,227,181,201,236,250,175,80,146, -150,222,8,14,187,93,77,37,15,138,43,140,246,214,77,114,237,43,167,22,124,9,181,161,162,213,53,134,4,176,43,12,6,24,141,70,36,38,38,130,8,145,80,98,168,209,19,37,161,75,82,3,17,121,162,158,192,75,54,248,34,160,65,0,140,8,129,47,141,214,69,224,154,153, -80,251,35,117,233,214,3,38,179,25,23,42,43,145,154,150,142,143,214,173,1,0,184,221,110,188,242,218,155,248,242,203,35,232,210,181,59,246,125,186,27,12,195,224,211,61,187,177,120,233,42,152,76,102,124,241,249,126,52,206,201,195,251,171,150,227,171,163, -71,48,236,169,103,240,252,184,9,216,183,119,55,110,185,181,53,22,206,159,139,147,39,10,49,102,220,139,24,250,212,8,208,52,141,182,237,58,224,52,143,53,86,129,82,94,94,134,142,29,239,102,223,231,134,212,84,214,67,119,162,176,0,95,125,121,4,159,238,221, -205,121,46,108,59,115,146,0,0,32,0,73,68,65,84,69,81,24,59,238,69,12,30,52,0,213,118,59,6,13,30,90,11,65,219,54,99,197,7,31,161,188,220,134,77,159,124,44,106,108,11,165,46,78,167,147,19,188,188,242,229,209,195,24,59,97,34,158,24,50,12,27,55,172,143,120, -237,156,220,60,36,167,52,68,209,169,83,146,211,205,119,239,222,27,31,175,95,139,89,211,223,100,235,104,207,190,47,48,243,173,55,252,202,237,222,181,3,143,62,62,24,0,80,89,113,62,108,61,80,20,133,62,247,247,197,138,101,75,20,111,227,126,19,9,33,148,59, -156,55,172,255,128,129,232,213,251,62,220,215,187,171,98,125,80,131,228,20,12,123,250,25,164,214,76,58,156,60,81,128,183,103,207,144,180,173,65,184,62,43,53,45,29,79,13,31,9,147,185,46,140,20,133,210,210,98,76,155,250,170,136,190,83,64,104,103,205,111, -125,238,239,135,9,19,39,35,63,47,91,121,0,243,141,235,36,33,55,68,228,106,184,82,215,118,169,125,178,146,224,37,204,152,87,17,188,8,124,133,53,248,248,200,225,195,95,43,254,76,228,30,241,115,15,2,95,161,223,157,171,77,250,26,175,103,138,78,33,35,43,27, -13,146,147,49,253,205,215,112,246,108,41,26,36,167,160,218,97,199,219,179,167,163,99,167,206,88,246,222,34,124,126,112,63,0,79,232,220,224,65,143,160,227,93,157,209,180,89,115,124,245,165,39,172,143,166,105,12,25,52,128,61,126,242,68,33,123,191,135,250, -222,139,59,239,186,27,0,48,100,208,0,36,89,172,130,191,237,151,71,14,99,232,83,207,176,240,116,75,171,54,216,87,3,92,155,54,126,140,23,39,189,130,228,148,20,148,219,108,104,144,156,130,143,214,126,192,94,131,166,105,184,105,26,109,219,118,0,101,164,112, -123,187,14,248,162,230,125,104,154,198,87,71,14,99,208,224,161,120,180,255,3,130,199,54,169,19,117,123,119,239,196,189,247,61,128,217,51,167,113,254,222,239,161,254,112,185,92,72,74,178,32,191,121,11,140,29,253,12,156,206,139,146,224,139,97,128,110,61, -122,97,242,164,9,181,117,228,118,99,247,174,237,232,222,243,94,216,202,206,177,199,183,109,222,136,13,91,118,98,252,216,81,156,119,204,111,222,2,67,134,13,7,224,201,168,184,103,215,14,236,217,181,67,25,251,40,220,24,19,6,194,2,237,244,169,211,102,225, -204,153,34,197,251,30,151,211,137,77,159,124,204,122,85,87,172,94,139,166,77,243,57,189,172,124,244,46,82,159,229,176,219,49,127,222,219,40,183,149,1,0,222,156,49,7,237,218,223,129,131,7,62,11,121,13,161,161,135,92,197,211,210,210,209,173,71,47,84,156, -255,81,209,254,44,81,154,145,72,132,136,188,58,35,249,50,4,188,100,29,76,137,94,147,53,96,68,180,223,207,198,77,182,67,248,236,47,25,34,20,177,188,220,134,242,114,27,231,185,229,229,54,44,93,178,48,232,120,181,195,225,7,56,94,113,58,157,216,180,241,99, -206,107,237,243,241,78,249,102,41,228,219,71,211,52,141,199,250,247,69,199,78,157,65,187,221,24,242,248,0,152,204,102,15,68,158,46,194,248,49,207,161,109,251,14,72,77,75,195,151,53,107,189,182,111,219,2,218,253,7,192,48,24,245,204,83,104,219,190,3,170, -29,14,12,121,252,17,63,8,252,242,203,35,104,144,146,130,106,135,67,54,240,114,56,236,152,56,97,44,231,111,171,87,46,131,221,94,5,6,12,86,173,88,138,189,123,118,178,89,13,39,78,24,3,187,221,14,134,1,102,207,152,6,147,185,118,201,194,236,153,211,224,118, -187,37,195,23,69,81,152,250,218,20,148,150,20,251,189,204,226,5,239,194,108,54,195,238,176,195,177,172,10,128,103,205,217,99,253,251,162,164,102,109,216,214,205,27,217,107,29,57,244,5,42,206,215,122,197,182,110,222,24,209,75,38,117,108,241,76,246,121, -244,152,107,77,35,12,134,136,125,193,219,115,166,227,66,101,37,122,245,190,79,81,251,205,229,114,214,194,22,195,160,220,86,134,140,172,172,144,0,38,5,190,188,247,243,134,223,50,96,144,146,210,208,79,95,164,134,30,114,221,155,162,40,188,252,234,84,76, -153,56,30,139,150,173,82,31,192,136,16,81,119,64,213,7,116,41,11,94,242,194,23,241,122,105,111,114,129,8,17,37,116,48,158,224,139,171,46,194,173,7,99,97,199,253,7,78,23,157,210,92,251,167,105,218,47,185,134,239,90,175,242,114,91,109,2,141,154,103,184, -224,3,3,23,42,43,240,209,135,31,248,253,237,149,71,30,29,136,247,22,47,144,213,235,69,187,221,56,19,162,14,109,182,115,126,239,224,93,95,7,0,69,167,106,207,41,245,57,30,190,110,133,237,61,75,211,52,138,138,190,9,122,25,135,195,14,135,195,179,126,203, -229,116,250,60,211,55,236,127,251,2,150,111,121,181,116,57,104,123,39,1,16,86,251,14,21,181,103,135,137,100,147,77,151,25,6,13,146,83,144,147,155,135,183,103,79,87,4,190,188,146,145,153,133,222,125,238,71,179,252,22,88,181,114,41,190,60,122,56,228,53, -132,134,30,114,165,157,31,50,108,56,246,238,222,1,155,173,12,86,107,125,69,191,63,201,176,65,36,170,224,229,109,0,25,153,89,24,240,216,227,226,47,192,33,207,142,26,139,36,139,133,179,99,16,227,241,18,186,206,75,152,215,75,190,212,242,188,188,94,4,42, -136,16,33,240,165,87,232,2,19,176,113,109,248,254,189,218,225,192,203,47,189,160,175,190,79,68,174,240,46,221,122,96,222,194,247,240,229,209,195,97,195,194,4,143,23,97,71,47,113,201,13,228,128,175,88,82,243,64,29,150,58,102,43,178,29,82,205,115,52,72, -78,193,172,119,230,227,173,55,95,71,181,195,33,200,190,18,218,103,217,29,85,216,187,103,23,246,238,217,133,222,247,62,128,102,249,45,228,135,175,26,201,111,222,18,105,233,141,176,230,253,85,170,124,243,4,53,102,121,136,16,9,28,79,2,213,205,108,54,243, -203,38,37,96,80,202,200,202,134,145,50,42,6,94,20,69,33,51,51,139,179,211,235,214,189,23,186,117,239,197,121,222,107,83,167,195,98,177,194,98,177,224,181,169,211,69,131,87,102,86,118,64,250,94,129,189,60,17,81,70,47,17,34,4,190,162,91,23,236,127,134, -217,199,39,108,95,47,101,35,36,141,65,151,239,251,110,223,182,25,79,15,29,132,213,43,151,201,3,94,122,131,47,157,232,190,191,46,215,214,115,88,8,139,214,251,5,232,164,23,190,222,158,53,29,95,213,120,163,120,181,57,17,125,22,3,6,213,14,71,77,214,205,249, -248,252,224,103,232,125,239,253,242,143,215,53,231,143,30,59,30,41,41,13,177,104,233,74,44,90,186,18,0,176,104,233,74,63,59,75,78,73,36,70,7,17,181,102,117,132,136,201,100,70,102,86,22,108,182,50,84,219,237,48,153,204,72,78,73,241,11,109,104,156,155, -135,242,178,50,184,92,78,164,166,165,195,98,177,224,68,97,129,160,217,24,41,207,109,54,155,209,247,161,71,240,234,228,151,130,218,78,114,74,74,200,243,114,243,154,128,162,234,176,255,45,116,144,234,214,163,23,30,27,56,24,246,154,212,184,180,219,141,17, -79,15,33,224,165,208,32,73,214,128,17,209,18,124,133,109,202,49,222,206,125,67,182,216,80,45,159,16,173,192,104,45,111,223,31,106,143,165,160,58,83,187,173,203,240,189,132,140,111,252,131,50,24,73,247,12,117,122,120,27,51,62,224,43,80,151,153,8,27,22, -7,233,174,183,188,210,186,202,241,92,161,224,75,52,120,69,128,175,212,180,116,54,1,7,69,81,104,150,223,194,47,161,74,104,29,17,30,122,8,0,15,61,224,191,37,65,225,169,98,60,57,232,81,197,170,152,172,1,35,162,154,225,192,87,146,44,22,204,121,103,1,142, -30,57,132,190,253,30,198,153,211,69,88,187,102,53,230,204,93,136,190,125,122,192,229,114,34,201,98,193,91,51,222,70,239,238,119,163,107,247,158,232,210,173,39,78,22,30,199,179,163,199,97,226,132,177,53,49,233,226,18,107,152,76,102,152,205,102,80,70,35, -44,22,43,42,43,206,163,178,178,2,205,242,91,128,166,221,236,90,2,167,211,137,181,31,172,102,223,215,98,177,34,53,45,221,47,214,220,43,153,153,217,48,153,77,108,103,194,37,20,69,33,39,183,9,28,246,42,216,66,148,107,223,225,78,60,248,208,0,60,54,160,31, -156,23,157,178,141,184,38,179,25,230,154,84,175,22,107,125,84,84,156,71,101,197,121,228,55,111,9,154,118,251,197,204,3,30,87,61,0,148,148,124,199,190,111,90,90,58,236,14,59,210,211,27,129,162,140,40,44,56,230,95,7,89,217,48,155,235,178,215,142,23,125, -38,66,132,192,151,188,117,227,169,31,3,96,8,54,80,185,150,204,132,219,232,54,98,29,202,97,232,202,252,109,20,75,26,37,33,157,120,164,211,9,124,133,129,48,48,48,48,8,74,44,19,86,119,149,152,56,136,80,143,131,6,15,69,90,90,58,102,191,51,159,61,118,162, -240,56,158,30,58,72,118,248,2,128,118,237,239,192,128,199,6,161,178,162,2,153,89,217,216,186,101,19,150,44,90,16,81,67,121,195,87,148,133,0,24,17,237,24,169,140,167,117,12,24,240,56,182,111,219,140,117,107,222,7,69,81,88,181,102,61,214,174,89,141,189, -187,119,226,174,187,239,193,198,13,31,225,174,187,239,193,222,221,158,76,75,125,31,236,143,167,134,60,14,167,235,34,236,14,59,58,118,234,140,247,22,207,23,221,231,100,102,101,227,133,9,19,81,90,82,12,135,195,142,118,29,238,68,97,193,113,208,110,55,204, -102,51,152,7,129,151,198,143,65,82,146,5,163,198,140,195,208,193,3,97,177,88,177,126,227,86,28,216,191,15,20,101,68,86,86,54,246,236,246,108,46,217,170,117,27,76,154,242,58,182,109,217,132,225,207,140,10,249,28,211,103,205,69,69,13,152,88,45,86,60,63, -106,68,80,153,118,237,239,196,129,253,251,34,195,151,192,239,145,149,245,111,140,159,56,25,165,197,223,193,110,183,163,195,29,119,162,224,248,49,208,180,27,102,115,93,60,248,48,48,97,220,104,0,192,27,211,102,214,128,212,143,24,63,113,50,38,140,29,133, -210,146,98,60,250,248,96,88,173,245,97,183,87,129,166,221,152,252,234,27,232,126,79,71,207,204,82,255,1,184,247,254,126,56,240,217,167,184,187,115,23,44,94,248,174,95,246,41,34,68,136,136,108,210,113,58,65,224,151,192,32,192,106,13,5,97,0,248,129,152, -6,235,87,209,164,81,18,193,75,60,124,49,210,39,32,98,98,143,187,26,125,229,200,238,201,107,2,193,187,119,85,207,46,252,129,76,68,189,189,254,202,36,188,254,202,36,222,250,40,5,190,0,96,213,138,165,88,181,98,105,200,226,146,215,125,69,168,3,37,247,0,243, -3,48,50,203,75,36,170,86,133,143,254,37,167,164,160,89,243,22,104,219,238,14,0,128,195,225,128,201,108,198,246,109,155,49,110,252,68,15,128,221,213,25,175,78,153,136,6,201,201,72,77,75,199,180,153,115,216,243,217,84,180,18,250,30,139,213,138,151,250, -120,82,238,90,44,86,184,156,23,49,107,198,52,80,20,133,205,219,247,4,149,111,213,250,54,28,216,191,15,175,188,252,18,0,96,225,146,229,108,135,112,239,125,15,224,197,23,158,199,137,194,227,72,78,78,193,150,29,159,6,117,18,57,185,77,224,116,94,196,155, -175,79,1,0,44,95,245,33,146,83,82,124,178,27,121,158,57,39,175,9,214,124,176,74,17,131,193,106,177,226,190,26,200,178,90,173,112,58,157,152,53,125,42,40,138,194,214,93,251,216,186,72,78,105,136,129,143,244,3,0,116,239,217,27,221,122,244,198,172,233,83, -1,0,118,123,21,166,212,236,197,50,119,254,18,228,230,53,65,209,169,111,112,239,253,253,240,88,255,190,112,57,157,216,182,121,35,94,126,117,170,166,1,140,244,135,68,8,124,105,205,72,229,200,24,199,160,214,11,198,3,194,2,13,60,193,48,166,3,232,18,172,22, -4,190,162,62,190,48,12,3,198,224,175,143,162,194,105,85,168,23,201,224,197,19,190,34,21,143,4,95,122,152,88,225,92,3,70,214,60,16,137,142,53,225,145,51,167,139,112,230,116,17,59,243,225,149,106,135,3,148,209,136,182,237,59,192,77,187,217,212,183,14,135, -29,47,77,24,19,148,141,71,74,155,43,44,56,206,254,183,155,118,163,180,196,179,246,140,166,105,118,127,19,95,201,201,205,195,137,130,2,182,35,240,13,217,203,111,222,18,83,38,189,8,0,168,172,172,96,189,92,158,76,94,158,50,173,219,220,134,220,220,155,177, -112,137,103,225,167,219,77,35,45,173,17,11,96,222,231,174,60,127,30,230,154,189,98,228,238,80,10,124,66,6,221,110,55,206,150,22,215,190,115,205,222,27,249,45,90,250,189,91,193,241,99,120,244,241,193,44,128,249,166,122,182,219,171,64,81,70,164,165,165, -131,118,187,217,80,69,155,173,12,233,233,141,96,50,155,57,195,53,181,52,72,242,237,11,219,180,185,89,210,189,248,108,234,75,238,17,127,247,96,24,70,211,6,68,180,219,164,95,8,87,8,8,243,216,52,225,141,73,45,129,152,88,232,210,15,120,197,55,124,69,28,95, -194,172,105,244,126,19,181,245,85,182,117,134,17,214,187,137,135,47,62,144,171,61,29,32,27,49,19,209,4,116,249,202,222,221,59,49,123,238,2,92,99,50,225,100,97,1,50,179,178,177,114,197,123,0,128,79,54,124,132,103,71,143,195,252,185,181,30,175,117,31,190, -143,215,222,152,142,237,219,54,3,240,236,247,17,110,167,116,62,226,116,94,20,212,14,202,109,231,144,154,150,198,14,44,105,233,233,44,180,149,150,20,35,37,165,33,74,75,139,65,81,20,44,22,107,80,103,83,88,112,12,57,185,77,240,76,64,50,141,192,71,40,41, -249,142,13,137,148,187,103,113,94,188,24,177,140,195,110,71,86,118,173,91,62,43,43,27,133,199,191,98,255,166,233,224,77,53,43,42,206,35,37,165,33,40,138,2,77,211,176,88,172,176,59,236,154,134,47,210,23,18,209,172,238,197,185,78,122,234,165,102,13,152, -143,145,234,7,97,1,212,197,23,196,188,162,150,129,43,5,182,68,171,131,12,224,165,22,124,197,186,231,215,47,169,76,8,111,110,184,112,90,37,117,85,246,117,134,138,194,151,188,161,135,81,5,48,0,48,26,141,184,242,202,43,145,144,64,182,10,35,18,90,18,18,18, -64,81,84,232,70,194,83,209,75,75,74,224,112,120,82,231,86,86,86,224,185,17,195,208,182,195,29,104,156,155,135,47,143,30,98,203,109,223,186,9,229,182,50,156,46,170,245,194,172,93,179,26,165,37,197,104,150,223,2,14,135,29,165,37,199,193,48,192,236,25,211, -216,76,129,66,58,68,225,70,55,131,3,251,247,225,157,119,23,215,36,8,177,34,51,235,223,44,128,109,219,178,9,47,188,248,50,246,236,222,129,156,220,60,214,155,228,15,96,199,49,252,153,81,120,225,197,151,113,112,255,62,228,228,54,193,134,245,235,130,54,133, -252,240,131,213,88,180,116,37,58,116,232,136,221,187,182,131,166,105,148,22,127,135,3,251,247,169,242,189,139,78,125,13,167,211,137,241,47,189,140,114,91,25,238,189,191,31,166,76,28,31,246,28,154,166,177,230,131,85,120,227,173,89,56,122,248,16,58,117, -190,7,159,172,95,75,26,15,17,34,4,190,36,212,135,7,194,188,9,57,252,32,44,132,229,202,99,79,219,176,6,161,24,99,87,14,200,146,69,13,120,158,36,41,163,29,132,135,28,198,43,124,5,190,123,56,111,110,56,189,149,19,198,20,89,103,40,19,120,197,26,124,249,1, -88,224,67,231,230,230,34,41,41,137,0,24,145,136,0,86,167,78,29,252,249,199,47,146,174,227,114,57,225,114,57,217,6,89,81,121,30,107,215,172,230,52,230,79,20,30,15,58,126,162,240,184,191,87,8,64,169,79,202,122,33,3,70,105,73,49,86,46,175,5,159,149,203, -151,250,121,107,94,124,225,121,0,12,28,142,42,204,154,254,38,11,141,3,7,60,136,78,157,187,160,180,164,24,171,150,191,199,130,233,214,45,27,81,80,240,21,218,119,232,136,37,11,223,197,202,229,239,193,81,3,134,19,94,24,205,94,119,248,83,67,208,161,195,157, -200,201,109,130,210,146,98,56,157,193,30,41,135,195,142,135,238,239,133,252,22,45,145,155,119,51,104,183,59,40,45,171,24,41,41,249,14,142,101,85,181,239,188,108,9,156,62,239,236,77,192,65,211,52,38,79,28,143,230,53,27,22,62,63,242,105,54,99,99,224,57, -43,151,45,129,189,6,32,23,47,152,135,252,230,45,145,223,162,37,22,47,120,55,40,67,162,110,12,96,34,68,162,167,148,113,15,165,193,33,91,190,251,39,241,135,48,214,96,21,154,143,3,140,190,62,191,128,147,148,3,175,208,240,37,56,219,103,12,121,190,184,39, -19,2,116,50,0,194,34,233,44,159,137,3,185,116,88,234,190,163,241,14,95,126,0,22,248,240,150,127,80,192,95,46,48,127,69,190,136,193,96,96,59,198,192,14,50,220,26,10,161,107,205,200,218,52,237,24,144,236,245,255,2,254,12,163,35,215,95,103,193,79,63,59, -20,27,212,196,190,102,184,250,241,194,160,87,106,83,199,123,206,241,122,223,104,154,70,105,105,177,223,121,159,124,188,142,243,30,149,21,21,248,144,35,121,198,233,162,111,216,119,112,57,157,216,186,101,83,196,151,165,105,26,71,15,31,194,209,195,135,100, -251,158,46,167,211,15,50,3,211,224,251,174,251,114,57,157,30,143,91,128,215,45,240,156,192,191,11,11,142,105,2,188,234,91,235,9,210,17,210,239,16,137,122,95,78,38,4,34,244,219,254,6,108,16,132,133,176,92,213,218,82,73,117,230,150,17,188,52,1,95,49,168, -255,193,19,10,12,59,145,224,183,189,130,192,117,141,74,79,28,72,5,47,181,224,75,15,146,200,167,65,69,50,64,184,50,20,213,198,181,134,54,98,132,220,35,84,5,199,179,113,164,150,194,49,81,222,195,68,206,190,88,220,187,48,138,92,95,206,20,193,68,244,223, -206,136,16,33,186,39,214,120,5,24,230,111,24,12,9,220,16,198,19,196,106,237,10,157,1,151,142,192,139,192,87,120,8,99,215,54,242,244,228,170,161,171,106,108,224,45,55,124,105,221,251,21,22,192,196,128,146,47,108,5,130,87,164,217,100,161,48,198,167,3,208, -59,156,69,107,240,149,251,190,215,213,79,194,79,85,14,117,58,128,40,64,23,1,47,253,8,95,239,23,17,34,4,188,180,93,31,92,54,5,187,142,198,7,194,0,240,6,177,112,93,175,156,230,132,172,159,87,224,197,148,7,175,208,227,103,188,134,28,10,169,75,134,249,27, -64,2,175,112,90,37,65,76,238,228,46,66,225,139,239,90,66,189,194,151,31,128,133,218,103,67,40,40,249,94,39,28,136,241,133,49,41,32,37,100,16,83,26,214,180,56,160,42,245,76,92,215,189,190,190,5,0,4,129,88,92,66,23,1,47,77,128,23,223,254,144,8,17,34,234, -142,87,193,158,47,223,227,222,77,109,253,215,211,112,166,238,22,104,185,106,170,91,86,0,186,248,94,86,21,175,87,140,143,131,92,251,128,5,219,201,6,81,225,180,98,38,13,148,12,117,149,207,235,21,91,240,229,7,96,124,1,139,47,40,241,241,128,9,245,172,41, -9,75,177,62,227,168,228,251,9,185,182,23,196,148,120,70,49,231,43,125,14,223,178,100,198,59,254,218,13,17,34,68,228,107,147,181,54,6,66,66,24,128,208,32,38,196,98,213,56,112,169,15,94,161,225,43,220,121,241,22,114,24,88,47,92,147,9,222,137,132,144,107, -26,5,76,30,40,86,149,10,238,33,199,39,228,48,22,224,139,19,192,164,128,79,32,80,113,1,86,164,89,44,49,224,167,36,152,17,99,81,185,123,68,3,184,180,4,93,196,192,39,66,132,8,17,241,246,31,247,62,182,76,72,8,11,11,98,90,130,49,9,227,130,108,155,230,74,4, -175,240,176,172,54,49,232,199,102,171,13,163,13,14,167,149,234,197,85,75,39,197,120,189,226,13,190,252,0,76,232,206,210,124,33,41,82,114,142,72,48,38,4,172,200,122,48,109,223,83,142,235,105,21,186,8,120,145,201,12,34,68,136,40,215,30,185,61,6,220,246, -39,23,132,5,150,11,11,98,161,12,184,168,47,180,145,14,93,209,4,47,2,95,220,245,19,52,73,192,110,54,158,16,121,77,163,146,19,7,50,135,186,74,13,57,140,37,248,242,3,48,177,128,197,167,124,184,44,137,190,215,82,114,77,24,89,15,166,254,51,69,19,184,8,116, -17,145,75,247,200,58,48,34,68,180,61,78,113,2,86,0,132,113,25,186,188,64,76,163,134,157,18,208,37,21,188,248,124,163,120,6,175,224,73,130,72,233,229,5,172,105,12,85,159,10,47,4,147,154,212,37,94,225,43,8,192,164,64,143,152,228,26,129,229,249,222,83,233, -116,244,76,28,45,254,212,226,181,99,9,186,8,120,197,71,155,57,124,248,107,197,159,131,220,35,254,238,65,36,130,69,23,193,35,230,11,97,94,59,33,164,215,204,199,224,227,5,99,26,7,46,173,128,23,129,47,254,16,22,56,73,16,42,28,81,208,196,129,82,201,214,84, -4,175,88,132,47,63,0,139,212,248,228,78,206,225,251,155,82,235,194,226,113,230,90,143,123,131,169,13,92,106,128,26,129,46,210,142,136,16,33,162,112,123,140,0,98,94,131,206,243,179,193,207,224,13,187,142,44,192,8,84,27,200,212,220,43,147,95,95,71,194, -13,149,210,103,118,163,245,144,222,48,198,79,119,67,173,105,84,67,79,229,74,234,66,224,43,0,192,164,116,134,98,147,102,132,2,177,72,48,198,23,174,248,222,151,24,133,202,221,115,219,158,47,136,245,16,67,114,119,135,91,73,37,16,33,66,68,107,131,99,72,154, -242,252,228,15,97,190,99,63,159,229,51,161,12,79,41,6,175,84,200,138,38,116,241,185,6,129,47,17,31,144,115,34,33,120,2,65,45,47,174,220,97,174,66,183,48,224,5,94,58,214,169,68,121,244,70,60,28,137,73,210,33,246,158,90,129,154,120,131,187,171,140,70,36, -36,36,144,74,214,177,36,36,36,160,110,221,186,164,34,136,16,33,162,59,16,11,52,100,125,199,188,200,235,112,212,131,40,165,128,75,78,240,138,116,29,2,94,242,234,175,199,65,198,192,99,66,137,247,226,70,83,23,197,236,29,23,235,240,37,27,128,73,133,163,80, -25,142,132,172,13,35,169,233,163,15,155,92,215,191,194,96,128,209,104,68,98,98,34,249,0,58,22,67,205,119,36,66,132,136,118,36,57,165,33,250,220,223,23,52,77,99,241,130,121,146,174,213,189,103,111,0,192,214,205,27,49,106,204,120,108,219,178,17,165,37, -197,146,174,57,106,204,120,172,92,182,4,14,135,61,122,116,226,103,172,50,62,198,106,100,16,11,184,132,38,108,115,229,198,125,133,192,139,192,151,76,32,198,29,74,43,102,226,64,45,125,148,115,211,238,88,220,51,46,81,157,15,197,111,125,22,159,125,196,184, -202,137,85,128,88,131,51,53,189,121,196,115,72,132,8,17,34,209,149,9,47,77,198,129,253,251,80,116,74,122,66,144,228,148,134,236,127,103,101,103,227,224,126,233,30,239,172,236,108,80,209,158,184,241,177,78,107,33,204,224,99,0,134,223,163,52,148,157,167, -148,249,32,199,208,42,108,124,86,40,212,144,128,151,60,202,192,57,129,96,136,56,113,16,205,29,19,228,222,180,59,22,214,123,69,13,192,132,64,89,40,111,23,31,24,19,10,86,90,74,77,175,85,192,33,160,69,132,8,17,34,218,147,228,148,134,200,204,206,198,138, -101,75,224,176,123,60,76,22,139,21,105,233,141,96,43,59,231,231,117,50,153,205,200,202,250,55,42,42,206,163,178,226,60,123,220,91,222,233,188,200,121,143,252,230,45,1,0,69,167,190,6,77,211,65,199,11,11,142,249,149,207,204,202,134,217,92,23,78,231,197, -32,239,153,197,98,133,197,106,149,236,85,147,106,65,50,158,237,149,124,198,117,134,133,176,112,182,134,150,217,66,248,56,205,72,190,38,1,175,104,78,32,68,158,56,144,226,197,85,206,219,74,188,94,154,0,176,72,31,192,87,169,188,138,37,118,125,152,28,0,69, -82,211,147,58,35,66,132,8,17,173,72,247,158,189,97,164,140,200,111,209,18,78,231,69,152,205,102,188,241,214,44,28,57,252,5,134,12,123,26,123,118,237,196,134,245,107,97,177,88,177,104,217,42,28,57,244,5,82,26,54,132,173,236,28,230,189,61,11,20,69,97,197, -251,107,81,112,252,24,140,70,35,210,210,27,225,192,254,125,236,245,31,123,124,48,42,42,126,132,217,92,23,195,71,142,194,192,71,250,1,240,132,21,186,92,78,80,20,133,241,19,39,227,190,158,93,0,0,67,134,13,71,167,206,93,176,103,215,14,80,20,229,7,90,201, -41,13,49,115,206,60,76,158,56,94,27,99,222,223,94,207,66,160,55,12,162,96,76,31,99,54,35,203,181,9,120,69,23,196,24,24,192,55,148,86,141,79,163,84,22,205,88,135,47,205,1,88,168,143,35,117,125,88,36,37,137,245,117,98,106,128,16,129,45,34,68,136,16,81, -79,22,47,152,135,238,61,122,177,107,191,94,126,229,13,124,248,193,42,108,221,188,17,38,179,25,43,222,95,135,13,235,215,162,245,109,183,227,147,245,107,177,230,253,85,160,40,10,27,54,239,192,226,5,243,208,186,205,237,40,56,126,12,83,38,77,0,0,44,90,186, -210,239,250,133,5,199,176,98,217,18,246,183,204,172,108,148,150,20,99,214,244,169,108,153,252,230,45,217,227,221,123,244,66,159,158,93,252,60,101,0,144,146,210,16,163,199,142,199,228,137,227,163,231,253,10,97,225,121,141,89,127,59,128,9,2,177,80,99,156, -210,182,131,244,113,149,145,237,62,4,188,180,167,183,82,60,184,234,232,37,1,47,93,3,88,36,16,11,84,50,49,157,164,150,67,17,181,6,59,4,180,136,16,33,66,68,123,146,150,222,8,105,233,141,208,173,71,47,0,128,195,94,5,139,197,138,86,173,111,67,90,122,35,180, -235,112,39,0,160,162,226,60,204,230,186,104,214,188,37,78,20,30,247,1,174,227,126,215,243,13,97,44,41,46,70,243,22,45,81,90,82,140,225,35,71,193,98,177,34,165,97,67,164,167,55,130,217,92,23,185,121,77,80,81,113,62,8,190,0,96,244,216,241,112,187,221,176, -149,157,211,176,49,139,48,32,22,12,99,66,199,195,72,54,138,140,47,36,251,120,78,192,75,47,16,22,121,210,64,140,253,42,119,120,171,224,68,46,49,172,99,137,250,211,59,225,123,123,201,57,115,21,15,0,66,32,139,8,17,34,68,244,37,133,5,199,80,110,43,195,214, -205,27,253,142,159,46,250,6,54,91,89,80,150,196,179,165,197,200,200,204,174,5,184,180,116,216,108,101,236,223,190,73,57,210,211,27,97,239,238,29,104,213,230,54,100,101,253,27,35,158,26,12,0,248,120,243,14,15,212,157,63,143,172,172,127,115,62,215,228, -137,227,209,173,71,111,12,31,57,218,207,123,166,37,99,214,99,54,26,96,48,132,10,229,138,12,99,209,25,83,25,69,158,37,242,82,30,98,35,104,9,194,106,245,149,145,101,194,64,9,93,36,91,23,196,0,128,69,250,152,225,18,121,8,81,196,88,13,75,140,70,42,122,34, -68,136,16,33,162,172,236,217,181,3,51,231,204,67,114,74,67,20,157,250,26,185,121,55,99,241,130,121,216,189,115,7,86,188,191,22,20,69,225,232,225,67,200,205,107,130,21,203,150,96,255,103,159,98,200,208,167,81,237,176,35,201,98,69,110,94,19,63,0,107,223, -225,78,184,156,23,209,32,185,33,44,86,43,138,78,125,131,204,172,108,36,55,108,136,246,29,238,68,179,154,68,28,128,199,91,182,255,179,79,49,99,206,60,28,61,124,8,70,35,133,53,239,175,2,0,56,157,78,204,123,123,38,22,45,93,133,246,29,238,244,91,103,166, -77,131,22,126,32,22,30,198,196,67,153,210,160,37,102,76,38,224,165,79,8,243,234,171,16,239,173,90,58,73,192,43,180,36,196,134,14,50,156,255,194,253,46,246,154,66,175,19,173,119,87,250,121,181,90,31,68,136,16,33,18,47,50,97,220,104,246,191,75,75,138,49, -100,208,163,160,221,110,100,101,253,27,71,15,127,193,194,209,99,253,251,161,218,97,71,126,139,150,108,230,66,151,211,137,62,61,187,192,225,176,227,68,193,49,60,214,191,31,235,61,155,249,214,84,12,25,52,0,78,167,19,23,42,207,99,200,160,1,236,61,38,140, -29,133,204,236,127,99,239,238,29,24,49,108,48,74,74,190,3,0,76,153,52,1,243,230,204,100,97,205,123,29,135,189,10,52,77,227,249,103,135,163,194,39,3,163,210,66,81,20,114,243,154,4,29,79,78,105,136,252,230,45,217,127,126,101,24,6,150,36,11,154,229,183, -64,157,58,20,231,120,231,149,215,166,206,8,48,70,149,252,39,126,124,230,3,93,222,127,17,11,213,72,102,86,54,50,179,178,67,22,207,247,129,243,64,201,205,107,2,138,162,56,127,235,222,179,55,90,181,185,141,52,108,161,16,198,212,110,216,28,252,205,165,235, -147,208,107,68,210,191,144,250,22,81,17,99,75,18,99,79,23,249,37,219,144,107,227,102,146,29,145,8,145,255,111,239,236,131,162,56,243,60,254,225,109,192,72,115,134,153,220,149,144,171,204,248,135,96,85,6,45,17,111,69,172,85,99,197,132,85,163,149,151,141, -47,133,41,179,98,18,241,146,5,53,59,102,77,200,198,64,98,2,27,35,217,92,100,141,134,179,18,56,196,247,53,198,10,193,212,26,173,32,100,5,172,146,113,235,132,189,219,25,178,161,199,23,122,146,203,180,2,247,199,204,180,51,204,12,162,17,29,224,249,84,89, -74,219,244,76,119,255,158,167,159,111,255,222,4,2,193,157,192,43,116,188,116,216,109,90,225,12,95,28,14,89,243,72,249,162,170,106,64,200,162,87,104,1,33,255,47,84,49,141,190,161,142,190,251,57,28,242,109,109,200,172,55,220,67,209,155,37,204,127,120,78, -192,34,127,254,130,133,154,24,116,200,50,45,205,5,140,77,74,166,232,205,18,76,166,113,88,173,103,153,146,241,111,236,216,190,141,178,119,127,239,87,194,219,251,92,52,155,39,14,217,231,244,192,10,215,245,6,21,86,69,155,75,80,20,5,0,131,222,64,225,70,139, -230,213,156,255,200,34,45,7,81,111,40,100,219,251,101,28,61,226,14,83,205,95,103,97,138,86,177,51,129,163,71,14,7,216,170,111,216,171,224,6,111,168,167,76,125,255,222,91,95,65,117,251,237,112,164,123,188,134,189,0,11,101,16,193,66,19,131,25,231,72,8, -77,20,85,17,5,130,27,35,54,54,150,184,184,56,34,35,35,197,197,16,12,26,145,145,145,33,189,3,130,91,199,193,3,251,2,114,226,10,214,91,56,121,226,56,171,158,206,65,85,85,244,122,3,69,155,75,120,244,177,95,82,179,187,202,103,13,16,248,156,51,26,77,184,84, -23,29,118,187,199,243,54,9,135,67,230,111,158,144,206,201,233,25,126,5,79,238,51,154,112,42,74,128,32,141,143,151,24,159,146,138,170,186,56,211,210,204,253,230,52,218,219,218,112,58,21,122,123,123,209,235,13,72,146,132,75,117,161,186,84,244,6,247,207, -45,205,77,126,5,80,140,70,19,122,131,1,112,23,87,25,120,209,186,208,59,234,116,58,138,54,151,176,97,125,129,230,69,53,167,77,100,235,31,202,53,79,106,222,243,249,44,121,124,81,192,121,229,175,179,144,148,156,204,146,39,22,13,248,30,121,175,163,247,179, -220,231,116,143,214,147,206,43,214,188,125,237,116,58,29,41,169,19,2,94,74,192,181,254,116,222,66,48,146,36,249,133,219,154,211,38,98,109,61,75,74,234,4,218,218,206,147,146,50,1,135,220,233,183,143,247,251,0,1,125,246,194,70,132,129,95,24,109,176,117, -112,216,136,174,17,44,188,70,132,0,235,207,80,66,149,177,191,158,145,222,172,176,184,19,134,47,68,150,64,112,107,48,155,205,36,38,38,10,1,38,24,116,1,22,19,19,195,247,151,191,21,23,227,54,18,47,73,204,154,61,135,146,205,197,154,144,113,56,100,190,172, -171,101,222,130,133,212,84,87,106,234,171,239,99,111,90,102,22,185,207,172,102,205,234,92,0,222,254,125,153,230,93,51,232,13,172,205,95,195,202,85,171,169,252,184,66,243,20,189,93,186,149,181,191,206,67,150,59,253,68,130,229,165,87,56,121,226,56,137, -122,3,241,241,18,211,50,179,184,224,112,176,115,71,185,71,200,252,134,47,235,190,192,104,50,49,45,51,11,187,221,134,67,150,121,253,141,18,30,91,244,11,156,138,194,180,204,44,94,249,93,17,7,247,239,69,146,18,104,110,106,10,90,157,242,70,23,193,153,211, -103,160,40,138,95,243,237,150,230,38,90,154,155,152,251,112,54,31,239,170,192,110,179,145,158,49,85,243,122,121,153,53,251,1,10,55,110,184,33,241,85,242,206,123,28,253,236,48,141,13,48,109,122,22,185,207,228,113,242,196,113,242,158,207,167,108,75,41, -224,238,85,231,45,8,51,115,246,28,102,206,122,128,150,230,2,191,99,189,253,78,25,237,109,231,81,85,149,121,11,22,82,182,165,148,173,239,151,107,45,19,140,70,19,175,188,86,204,99,143,100,179,245,15,229,52,52,212,211,222,118,30,115,218,68,90,154,155,124, -122,230,85,97,183,219,56,103,109,69,111,48,4,156,99,88,9,49,31,59,13,246,194,224,70,215,166,183,220,203,42,214,142,35,75,128,13,84,144,93,207,216,70,82,245,68,33,176,4,2,55,99,226,163,232,81,47,211,19,198,223,177,191,185,105,40,120,238,127,202,124,51, -156,230,42,85,12,183,65,103,254,130,133,164,79,201,0,224,228,87,199,105,108,168,199,110,251,187,230,77,241,21,24,139,151,230,4,46,28,61,227,233,103,153,89,172,124,102,53,121,207,229,226,84,20,204,230,137,40,74,23,111,188,254,42,0,59,42,62,97,108,82,18, -149,31,87,48,111,254,66,142,213,213,114,191,121,34,178,44,251,121,87,188,2,204,229,82,169,169,174,210,188,43,29,118,27,239,190,87,206,206,29,229,196,75,18,102,243,36,94,125,121,3,79,153,86,226,114,169,188,244,155,181,244,246,130,78,23,203,180,204,25, -28,61,114,152,197,75,114,88,243,92,110,255,61,215,110,98,188,24,77,227,104,60,245,117,192,246,198,134,122,238,51,154,0,88,251,66,30,150,141,133,172,121,62,159,173,91,74,57,122,228,176,199,107,151,224,39,220,250,23,95,177,154,248,242,134,192,46,89,186, -156,13,47,22,208,97,183,209,210,124,154,121,11,22,242,234,203,27,176,108,44,100,108,82,50,29,118,27,243,23,44,10,26,126,107,78,155,200,39,187,42,2,132,99,230,244,25,28,171,171,101,222,35,139,216,227,17,216,82,66,130,182,175,183,129,121,217,150,82,230, -62,252,11,236,118,27,107,95,200,27,42,139,183,160,47,12,130,61,6,130,205,157,222,252,73,151,75,229,76,75,83,191,66,217,155,67,233,61,140,213,218,138,211,19,162,234,37,125,74,134,123,123,87,151,152,124,132,0,27,215,70,187,129,0,0,10,243,73,68,65,84,248, -3,252,70,67,20,195,125,193,115,187,22,42,66,188,9,4,119,118,108,15,246,75,165,59,57,39,136,249,69,240,83,104,56,85,207,161,3,251,0,119,191,52,69,81,72,74,190,151,120,73,242,91,60,26,77,227,180,124,167,190,11,92,73,146,216,240,210,43,212,125,81,171,253, -206,180,233,89,152,205,147,248,143,114,119,83,107,151,75,229,62,227,56,234,190,168,37,127,173,5,189,222,192,188,5,11,57,116,48,48,183,238,208,129,125,24,244,247,240,193,31,63,162,161,161,158,178,119,75,105,111,111,195,106,61,203,207,50,179,72,74,74,166, -174,238,115,92,46,149,222,94,104,105,62,173,45,122,29,14,153,88,79,232,106,186,167,95,219,79,21,92,125,177,219,109,65,11,100,220,103,52,105,161,150,14,135,204,218,23,242,48,26,77,88,54,22,34,73,9,212,84,87,162,139,141,29,240,231,44,94,150,131,36,73,20, -109,42,212,22,249,233,25,83,41,124,173,72,219,199,33,187,5,234,158,234,74,30,125,252,151,124,178,171,2,163,201,20,84,228,173,125,33,143,197,75,115,40,88,111,97,235,150,18,78,126,117,156,157,31,150,147,251,108,30,199,234,106,153,251,80,54,79,45,123,210, -71,156,157,14,184,166,99,147,146,249,102,128,2,50,92,133,88,48,51,8,53,245,235,13,6,222,125,175,156,150,230,38,36,73,194,225,144,41,126,189,144,14,187,221,239,208,137,250,107,251,121,41,121,171,152,115,214,86,226,37,137,194,223,21,161,215,27,80,85,151, -59,124,180,233,180,214,248,253,102,121,240,161,236,240,245,62,10,1,118,103,132,217,72,91,32,136,5,144,64,48,116,5,217,80,25,203,98,158,17,12,6,29,29,246,128,197,186,181,245,44,83,166,76,245,43,147,63,57,61,131,134,83,193,23,222,46,213,197,226,39,22,177, -109,123,5,51,103,206,230,88,93,45,141,167,234,49,155,39,106,225,136,190,212,236,174,226,193,185,217,100,102,206,160,100,115,113,80,77,180,227,195,114,118,124,88,78,222,191,255,154,149,171,86,83,250,214,27,28,58,176,143,153,51,31,192,104,26,71,137,79, -31,181,80,97,133,45,205,167,25,63,62,165,127,15,216,77,208,120,170,158,194,215,138,253,68,170,78,167,99,214,236,57,90,149,76,47,237,237,109,28,58,176,143,201,233,25,212,84,87,114,226,171,63,243,232,227,79,94,11,229,236,135,61,213,149,40,138,66,209,155, -37,90,62,94,75,243,105,202,182,148,6,228,119,29,216,191,151,157,187,170,112,42,10,53,213,85,33,174,71,147,86,100,101,231,174,74,30,125,36,219,29,70,168,55,240,224,67,217,88,173,173,126,249,92,193,174,171,83,233,242,235,153,55,100,133,88,31,213,21,106, -122,237,237,117,139,220,85,191,90,14,192,146,165,57,60,185,36,135,210,183,222,8,216,215,119,63,223,3,108,251,227,71,212,84,87,13,232,158,123,195,61,205,105,110,239,112,135,221,134,94,111,192,104,26,231,151,139,55,109,122,22,79,173,88,137,67,150,181,60, -188,120,73,34,37,101,2,118,187,45,192,131,45,4,216,8,21,32,67,181,88,135,88,240,8,4,35,107,206,186,211,115,149,152,115,4,131,133,36,37,144,251,236,181,176,177,96,85,29,189,20,111,42,164,232,205,18,238,79,155,200,153,230,38,126,62,203,45,122,86,245,17, -23,218,66,221,229,194,169,40,20,188,144,199,182,237,31,97,181,182,210,216,80,79,222,243,249,88,94,122,153,99,117,181,152,211,38,81,243,95,149,56,28,50,7,247,239,101,231,127,186,197,72,176,69,254,76,207,231,89,173,103,73,73,153,160,21,254,56,86,87,203, -242,21,191,2,184,190,103,171,183,151,67,7,246,97,249,109,33,123,118,87,49,54,41,57,160,216,200,205,226,112,200,148,108,46,102,231,174,42,246,84,87,226,114,185,115,170,118,87,87,114,206,218,202,248,148,84,230,45,88,196,95,207,181,34,73,18,139,151,230, -176,213,147,171,85,246,78,9,31,124,88,193,188,5,11,57,121,226,184,251,188,190,248,60,168,72,84,20,133,131,251,247,50,57,61,67,107,222,253,201,174,10,44,191,45,164,166,186,10,69,233,34,54,54,150,131,251,247,226,84,20,26,79,125,205,226,101,57,44,121,60, -120,129,143,252,117,22,206,180,52,33,73,9,216,109,54,77,60,238,217,93,69,193,122,11,133,27,45,215,61,247,207,62,61,204,188,5,139,200,95,103,225,111,237,109,180,183,157,31,112,72,229,80,17,99,253,33,59,100,166,101,102,13,236,152,184,195,105,21,165,107, -64,226,11,160,232,205,18,78,120,218,102,28,61,242,41,14,185,147,130,245,22,218,219,219,24,159,146,138,221,102,163,244,173,98,30,156,155,141,36,73,164,123,170,105,130,59,199,175,165,185,9,131,193,128,44,203,225,217,236,93,8,176,225,177,168,8,85,205,81, -32,16,8,110,247,92,37,230,35,65,184,226,144,59,41,232,147,179,163,40,93,33,69,88,75,115,19,79,45,123,146,244,140,169,140,79,157,192,209,207,14,115,242,171,227,33,143,239,237,193,214,97,183,177,230,217,149,218,246,53,207,173,100,214,236,57,152,211,38, -113,174,245,172,182,80,116,200,157,200,114,167,123,81,26,100,204,88,91,207,66,111,47,38,163,137,173,91,74,252,196,73,251,249,243,156,105,105,214,126,175,239,57,28,220,191,23,213,229,210,254,125,226,248,159,153,251,112,182,22,78,119,171,168,169,174,164, -241,212,215,100,102,205,32,54,86,71,241,166,66,237,123,218,237,54,190,172,171,37,37,53,21,89,150,89,252,196,34,77,236,180,183,183,241,232,35,217,100,78,159,129,209,52,14,167,210,165,133,17,134,58,143,226,77,133,90,213,193,99,117,181,56,28,50,211,166, -207,0,240,203,69,107,108,56,133,222,112,79,200,170,132,222,239,100,183,217,180,130,29,128,230,217,244,189,199,185,43,114,130,222,99,135,67,102,201,19,238,30,101,73,73,247,222,214,126,118,183,77,140,249,109,119,87,138,204,125,102,53,224,206,153,44,217, -92,28,68,240,187,195,21,63,216,254,145,182,105,213,211,203,49,167,77,210,42,78,130,187,61,193,216,164,100,156,74,87,208,118,24,238,151,11,86,63,193,230,189,246,241,146,196,206,93,85,148,190,85,204,161,3,251,72,74,190,246,82,33,247,89,119,97,22,239,207, -7,63,253,156,178,45,37,253,23,157,17,2,76,16,110,194,78,32,16,8,196,124,36,24,46,168,170,26,212,75,225,12,150,211,229,21,109,14,121,192,249,37,190,225,112,190,5,53,156,30,15,78,95,210,167,76,197,169,40,33,67,3,59,66,132,80,141,77,74,102,74,198,84,138, -55,21,250,237,219,247,119,251,158,71,168,133,238,79,165,189,189,45,160,128,136,247,188,27,27,234,67,122,134,156,138,114,221,107,235,123,30,125,239,159,183,226,162,47,58,157,142,197,75,115,250,245,122,132,250,78,185,207,172,102,219,251,239,5,236,27,234, -30,247,21,107,35,133,198,83,245,253,122,81,29,114,39,171,158,94,30,176,45,125,89,142,223,203,5,187,205,70,225,107,69,33,237,210,87,84,235,245,6,242,158,207,7,32,41,57,89,203,197,235,139,209,104,98,124,234,4,173,160,142,221,110,195,104,26,119,203,195, -111,133,0,19,8,4,2,129,64,48,226,137,140,138,164,167,187,103,200,124,223,15,182,127,132,67,150,7,20,238,230,75,254,58,11,38,211,56,54,188,88,48,100,222,234,223,46,188,77,159,247,236,174,10,218,251,43,20,227,83,82,41,88,111,193,218,218,58,224,16,185,27, -34,98,120,216,179,162,116,221,116,248,106,75,115,19,73,73,201,24,141,38,218,219,219,6,36,136,92,62,246,189,124,197,74,254,122,174,149,143,119,85,48,62,37,149,146,119,202,60,162,220,229,47,136,79,28,71,81,186,40,222,244,106,248,26,106,68,255,2,172,151, -193,104,139,45,16,8,4,67,139,222,62,127,11,4,130,48,28,143,49,49,209,184,186,135,142,32,233,235,33,24,40,67,41,159,229,118,115,112,255,222,126,115,250,66,113,206,218,122,211,247,99,32,196,68,71,15,123,123,246,37,88,158,101,135,221,70,225,70,11,91,223, -47,231,224,129,125,180,52,159,214,194,73,7,130,211,169,48,121,202,84,100,217,157,123,230,173,68,106,109,61,139,209,52,142,7,31,202,166,241,84,61,159,125,250,39,150,175,88,73,254,58,11,95,214,213,242,243,89,15,132,221,152,233,207,30,188,2,172,71,12,103, -193,96,16,27,27,75,92,92,156,104,96,59,196,137,140,140,68,23,34,12,96,152,208,237,153,7,35,196,124,40,8,55,238,49,220,77,167,124,113,216,158,219,141,142,71,93,116,52,46,209,49,77,16,134,196,196,68,15,121,123,118,200,157,90,14,214,245,246,11,150,103,9, -112,244,200,97,90,154,155,152,146,49,21,115,218,36,156,74,87,200,99,110,120,177,0,135,79,83,242,157,219,183,49,115,246,28,12,6,3,101,91,74,145,36,9,112,135,165,174,90,145,195,204,217,115,56,231,41,143,191,106,69,14,115,31,206,38,61,99,42,95,250,84,48, -13,115,123,232,241,10,176,110,224,170,24,54,130,193,192,108,54,147,152,152,40,4,216,48,16,96,49,49,49,124,127,249,219,225,122,138,61,222,73,81,204,135,2,65,120,143,199,184,184,88,126,116,169,92,185,34,134,170,32,124,136,138,138,226,174,81,113,67,222, -158,221,165,255,155,6,180,95,127,213,32,59,236,182,1,121,41,251,126,150,170,170,126,249,130,190,5,86,218,219,219,252,26,110,15,102,190,227,32,218,67,55,208,19,237,49,6,213,102,179,95,50,24,244,99,196,16,18,220,74,198,196,71,209,163,94,22,46,133,97,192, -112,125,223,220,209,209,113,21,112,1,87,60,15,72,151,152,15,5,225,198,112,244,130,5,243,126,13,116,60,198,199,223,133,162,252,192,213,171,66,132,9,194,99,177,157,32,221,21,208,214,67,216,179,176,135,32,246,160,2,221,145,30,195,248,254,226,165,203,255, -29,21,21,37,174,154,64,32,24,57,162,82,85,137,136,140,250,95,224,255,128,31,61,127,139,249,80,16,182,130,37,68,200,222,176,56,143,27,25,143,209,81,81,220,61,70,98,244,232,81,68,71,139,122,98,130,59,67,116,116,20,163,70,197,113,247,24,41,192,14,133,61, -11,123,232,199,30,212,104,143,81,40,81,49,186,51,157,157,157,233,137,137,137,226,10,10,4,130,17,67,47,145,103,129,203,192,247,184,223,80,118,137,249,80,16,238,2,70,140,71,55,119,141,138,11,21,230,35,16,8,123,22,132,163,61,40,192,143,81,64,44,16,115,225, -98,215,119,177,49,17,25,221,221,87,239,30,61,122,180,184,74,2,129,96,216,243,205,55,127,233,236,188,244,195,219,61,61,61,54,224,18,238,136,128,136,11,23,187,254,33,230,67,129,64,140,71,129,64,216,179,224,86,217,195,119,23,191,127,187,167,167,231,239, -192,133,40,220,165,232,35,128,8,157,46,246,219,238,171,106,106,79,119,247,63,93,186,116,137,132,132,4,113,197,4,2,193,176,195,102,179,97,181,158,235,140,142,139,223,162,56,127,104,6,190,3,156,158,7,100,143,152,15,5,2,49,30,5,2,97,207,130,65,176,135,78, -64,137,0,226,128,209,192,221,192,191,0,99,141,247,254,243,178,238,171,234,228,43,170,235,95,175,92,185,34,174,158,64,32,24,54,68,69,199,116,196,232,98,207,124,119,193,89,113,229,202,213,255,1,254,1,92,0,126,192,29,34,50,74,204,135,2,129,24,143,2,129, -176,103,193,32,217,131,51,2,183,7,76,7,220,5,72,30,195,24,3,36,120,182,233,128,40,110,170,191,183,64,32,16,132,5,189,184,75,191,170,184,19,96,21,220,33,33,23,129,46,207,195,209,229,217,87,204,135,2,129,24,143,2,129,176,103,193,160,217,67,132,231,70,71, -1,49,184,243,193,70,121,254,196,121,126,142,6,188,77,156,132,81,8,4,130,161,58,33,246,224,105,187,193,181,138,84,222,234,84,87,184,214,167,69,204,135,2,129,24,143,2,129,176,103,193,160,217,195,255,3,131,90,39,61,40,12,10,116,0,0,0,0,73,69,78,68,174,66, -96,130,0,0 }; +static const unsigned char temp_binary_data_13[] = +{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,3,96,0,0,0,144,8,6,0,0,0,110,232,8,32,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,67,75,73,68,65, +84,120,94,237,157,9,152,36,85,149,239,25,71,7,26,92,112,235,215,44,190,65,6,121,46,131,11,208,128,52,34,52,116,45,93,221,244,66,131,208,208,236,32,139,200,38,251,14,54,139,130,32,32,139,195,174,192,115,97,20,7,25,70,6,29,65,118,81,92,16,70,133,39,155, +172,202,34,155,58,51,247,197,47,168,211,117,234,214,201,234,140,170,172,172,204,172,127,124,223,239,203,200,27,247,156,184,247,198,137,136,251,207,123,35,114,153,254,229,111,10,254,182,96,217,130,55,21,188,179,224,93,5,107,22,172,85,176,118,193,212,130, +245,11,54,16,66,136,54,131,107,23,215,48,174,101,92,211,184,182,253,239,130,201,5,111,46,88,174,128,107,32,215,66,93,15,133,24,91,116,62,138,78,66,241,44,60,245,198,195,146,96,32,97,197,130,85,11,62,80,176,97,65,79,193,150,5,219,21,236,84,176,107,193, +110,66,8,209,102,112,237,226,26,182,125,193,130,130,222,130,141,10,184,56,114,97,124,91,193,164,2,174,133,186,30,10,49,182,232,124,20,157,132,226,89,120,234,141,135,101,94,87,128,18,39,24,86,43,88,183,160,239,31,86,91,245,196,174,77,167,221,184,195,182, +243,254,223,81,135,236,155,14,59,112,47,33,132,104,107,14,218,119,183,180,205,150,125,191,235,218,116,195,155,222,183,230,187,207,40,174,117,91,20,172,87,176,122,129,93,20,65,215,67,33,198,24,157,143,162,147,80,60,11,79,29,241,176,204,27,10,24,6,101, +8,116,221,55,174,48,105,251,158,205,55,190,129,32,216,113,219,185,37,221,155,110,32,132,16,29,129,93,215,184,56,206,236,218,248,206,21,150,159,180,99,113,237,99,202,192,223,23,188,189,224,173,5,186,30,10,209,4,116,62,138,78,66,241,44,60,75,137,135,114, +40,148,57,168,255,88,48,107,78,223,230,183,236,186,104,65,232,72,8,33,58,137,133,11,250,210,150,91,116,223,95,92,251,230,22,124,184,128,233,1,220,28,63,88,160,235,161,16,77,68,231,163,232,36,20,207,194,147,197,195,135,10,150,121,99,1,65,49,109,141,119, +191,235,212,79,238,188,77,104,40,132,16,157,200,214,115,187,211,90,239,95,227,210,226,26,56,189,224,253,5,239,43,216,248,31,86,91,85,215,67,33,154,140,206,71,209,73,40,158,133,199,197,195,199,11,202,185,168,188,161,163,183,175,123,147,155,102,110,62, +45,52,18,162,19,88,123,173,255,35,38,40,81,60,192,166,211,214,78,115,251,54,191,183,184,6,242,171,20,243,179,121,123,209,236,153,93,31,215,245,80,180,44,81,140,183,19,81,157,96,36,231,227,244,141,214,77,211,214,251,80,90,127,237,15,132,251,18,98,172, +32,230,166,173,247,193,34,110,215,9,99,83,241,60,177,168,16,15,179,11,150,121,71,1,111,230,88,176,245,188,222,199,35,3,33,218,157,232,68,17,19,147,40,62,230,207,218,236,149,226,26,200,219,167,248,85,106,227,130,109,182,154,219,163,235,161,104,57,162, +152,110,103,162,58,214,123,62,206,248,248,250,101,71,53,242,43,68,179,249,232,212,181,202,152,204,227,84,241,60,49,89,74,60,124,162,160,124,47,61,239,170,223,126,139,158,143,15,201,40,68,187,19,157,24,98,98,147,199,200,199,214,255,96,42,174,129,188,58, +118,70,193,230,5,59,207,238,222,120,72,62,33,198,147,40,150,59,129,188,158,245,158,143,27,78,253,96,232,79,136,241,98,253,117,254,113,72,156,42,158,39,46,195,196,195,14,5,203,76,41,96,72,116,103,9,48,209,137,68,39,133,152,216,228,49,210,127,65,220,163, +128,255,98,129,61,36,192,68,171,17,197,114,39,144,215,179,158,243,113,211,141,214,9,125,9,49,222,124,252,163,31,25,20,171,138,231,137,77,141,120,216,165,96,153,149,10,120,37,226,174,18,96,162,211,136,78,6,33,192,199,73,255,5,113,175,130,153,253,236,41, +1,38,90,137,40,134,59,9,95,215,122,206,71,158,179,136,252,8,49,222,108,176,238,224,81,143,177,136,231,194,135,24,71,162,99,82,139,26,241,192,31,54,151,2,108,3,190,72,128,137,78,35,58,25,132,0,31,39,238,6,217,215,207,94,18,96,162,149,136,98,184,147,240, +117,173,231,124,92,239,35,239,15,253,140,37,107,189,239,31,210,219,86,124,243,146,78,216,88,243,214,183,188,41,189,239,61,171,133,101,17,173,203,58,31,122,239,160,88,29,139,120,38,62,38,45,187,108,90,97,210,36,209,68,222,180,194,10,105,149,149,86,10, +143,73,45,106,196,131,4,152,232,108,162,147,65,8,240,113,34,1,38,90,157,40,134,59,9,95,215,122,206,199,200,199,88,243,150,55,191,177,236,248,46,247,119,127,23,118,206,26,201,242,203,45,247,90,39,123,185,101,195,178,136,214,198,199,234,88,196,243,223, +254,205,223,164,21,223,252,230,244,142,183,189,77,52,145,119,190,253,237,105,245,213,170,255,40,226,143,181,4,152,152,16,68,39,130,16,224,227,68,2,76,180,58,81,12,119,18,190,174,173,42,192,138,114,164,55,46,191,124,122,219,138,43,134,157,179,70,194,62, +96,202,228,201,97,89,68,107,227,99,85,2,172,115,144,0,19,162,78,162,19,65,8,240,113,34,1,38,90,157,40,134,59,9,95,215,86,21,96,175,43,4,88,179,59,189,239,254,251,191,15,203,34,90,27,31,171,18,96,157,67,91,10,176,190,25,27,165,163,15,63,40,157,125,230, +231,135,176,248,248,35,211,188,190,233,161,157,24,204,126,251,236,22,182,225,105,167,156,152,22,110,53,43,180,153,200,68,39,130,16,224,227,68,2,76,180,58,81,12,119,18,190,174,173,42,192,154,221,233,29,105,103,79,140,63,62,86,37,192,58,135,182,20,96,243, +102,109,150,110,254,225,15,210,203,47,191,60,132,123,127,249,243,180,227,194,249,161,157,24,160,119,179,105,233,138,203,47,14,219,240,177,71,31,73,159,217,111,207,208,110,34,19,157,8,66,128,143,19,9,48,209,234,68,49,220,73,248,186,74,128,189,134,4,88, +251,226,99,85,2,172,115,104,91,1,118,199,109,183,164,104,249,237,111,254,51,237,180,112,203,208,78,12,128,0,251,218,149,151,167,255,254,239,255,238,111,185,129,229,153,103,158,78,7,239,191,87,104,55,145,137,78,4,33,192,199,137,4,152,104,117,162,24,238, +36,124,93,37,192,94,67,2,172,125,241,177,42,1,214,57,72,128,77,80,36,192,170,19,157,8,66,128,143,19,9,48,209,234,68,49,220,73,248,186,74,128,189,134,4,88,251,226,99,85,2,172,115,144,0,155,160,72,128,85,39,58,17,132,0,31,39,18,96,162,213,137,98,184,147, +240,117,149,0,123,13,9,176,246,197,199,170,4,88,231,32,1,54,65,145,0,171,78,116,34,8,1,62,78,36,192,68,171,19,197,112,39,225,235,42,1,246,26,18,96,237,139,143,85,9,176,206,65,2,108,130,34,1,86,157,232,68,16,2,124,156,72,128,137,86,39,138,225,78,194,215, +85,2,236,53,36,192,218,23,31,171,18,96,157,131,4,216,4,69,2,172,58,209,137,32,4,248,56,169,231,6,89,164,9,209,52,124,236,65,20,195,157,132,175,171,4,216,107,72,128,181,47,62,86,37,192,58,135,182,21,96,183,223,246,163,126,185,48,120,145,0,171,15,4,216, +85,87,92,42,1,86,129,232,68,16,2,124,156,212,43,192,38,45,187,108,90,97,210,36,33,198,140,55,173,176,66,90,101,165,149,6,197,30,68,49,220,73,248,186,74,128,189,134,4,88,251,226,99,85,2,172,115,104,57,1,182,245,220,158,180,247,30,59,164,35,15,217,63,29, +119,212,33,233,240,131,247,75,123,237,182,40,45,152,211,181,36,207,220,153,211,211,205,55,253,160,95,46,12,94,150,38,192,182,220,98,70,218,125,167,109,211,193,7,236,157,142,57,226,51,229,62,142,56,100,191,180,239,94,59,167,237,182,222,34,205,234,122, +45,144,187,54,89,63,117,117,109,84,155,233,31,29,226,59,167,107,122,65,100,107,244,231,235,221,108,195,178,222,159,220,101,97,58,244,192,79,165,99,143,60,56,29,127,244,107,117,255,212,39,119,74,11,23,204,42,202,245,177,33,254,107,129,64,197,215,97,159, +217,183,172,223,81,135,30,80,214,111,155,45,251,82,79,127,185,17,96,151,95,242,101,9,176,10,68,39,130,16,224,227,164,158,27,164,110,120,162,25,216,13,222,199,30,68,49,220,73,248,186,74,128,189,134,4,88,251,226,99,85,2,172,115,104,25,1,198,159,39,159, +127,206,25,233,238,187,238,72,79,62,241,120,122,241,79,127,74,47,189,244,98,122,225,133,231,211,227,191,127,44,221,126,235,205,233,172,47,156,154,182,219,106,118,41,146,174,191,238,59,161,120,136,4,24,98,227,211,123,237,146,46,185,240,188,116,215,157, +183,165,71,31,125,56,61,247,236,179,233,197,23,7,246,241,244,83,79,166,251,239,187,55,125,247,95,190,149,62,123,220,17,105,171,133,243,82,207,65,123,167,158,19,142,24,66,239,9,135,165,238,79,238,48,172,8,43,5,220,142,91,167,158,227,14,13,125,116,31,121, +64,154,185,85,95,58,240,211,159,76,95,189,236,194,244,147,187,239,76,191,127,236,209,244,252,115,207,13,42,215,83,79,62,153,238,187,247,151,233,154,111,125,163,20,83,91,206,158,17,238,15,16,169,159,63,249,248,116,243,15,191,95,214,241,249,231,159,43, +253,208,150,248,249,217,61,119,167,139,255,233,220,66,128,110,83,10,177,243,206,249,66,250,175,255,250,175,254,150,27,88,36,192,98,162,19,65,8,240,113,34,1,38,90,5,9,48,9,48,67,2,172,125,241,177,42,1,214,57,180,132,0,251,204,126,123,166,31,221,244,131, +244,242,75,47,133,162,138,5,161,128,144,248,247,239,253,107,218,127,159,221,211,85,95,141,167,207,229,2,108,225,86,179,210,69,95,254,82,250,127,15,62,144,94,125,245,149,210,166,214,62,72,255,235,95,255,154,158,125,246,143,229,126,14,62,255,172,212,247, +229,179,210,172,139,206,25,66,239,233,139,83,247,39,182,24,84,143,65,204,237,78,51,23,31,157,250,46,57,55,180,223,185,176,255,202,87,46,73,143,60,252,80,81,174,87,107,150,137,229,181,114,253,37,253,225,153,103,210,117,215,94,83,138,201,124,127,136,170, +107,175,249,231,178,236,180,85,228,143,180,87,94,121,165,20,185,71,31,126,96,58,249,196,163,203,125,231,139,4,88,76,116,34,8,1,62,78,36,192,68,171,32,1,38,1,102,72,128,181,47,62,86,37,192,58,135,113,23,96,251,237,179,91,57,250,19,141,196,68,203,159,255, +252,231,116,235,143,126,152,190,243,173,111,164,191,252,229,47,253,169,3,139,23,96,59,111,191,32,93,251,157,127,78,127,42,132,91,213,133,242,252,234,183,191,73,199,92,251,205,52,187,16,76,91,92,122,222,32,16,81,61,135,31,144,186,250,167,44,122,186,54, +219,48,245,236,191,71,154,121,193,89,161,221,94,87,94,156,110,184,243,214,244,242,203,47,15,43,188,162,133,58,211,94,76,85,180,253,81,223,27,254,237,186,80,76,69,11,62,24,237,67,196,62,247,220,179,253,169,3,139,4,88,76,116,34,8,1,62,78,36,192,68,171, +32,1,38,1,102,72,128,181,47,62,86,37,192,58,135,113,21,96,140,78,49,210,196,168,83,149,5,17,198,20,59,70,133,242,197,4,216,54,243,103,150,211,246,16,57,209,130,240,65,136,224,171,214,254,255,167,224,206,223,61,152,118,251,230,87,75,225,148,139,169,190, +115,79,79,221,187,108,59,180,110,11,231,165,89,95,60,105,72,126,124,236,116,213,197,233,198,95,253,34,253,165,134,224,164,44,86,174,72,96,178,32,14,127,124,231,237,105,239,221,119,72,115,122,55,77,87,92,126,81,205,122,214,90,216,15,109,248,74,32,2,37, +192,98,162,19,65,8,240,113,34,1,38,90,5,9,48,9,48,67,2,172,125,241,177,42,1,214,57,140,171,0,251,194,231,23,151,207,98,213,90,16,88,60,199,244,212,83,79,166,63,254,241,15,75,166,16,178,212,26,57,66,128,237,186,195,39,210,57,103,126,62,61,251,199,63,246, +167,14,94,158,126,250,169,114,202,35,35,64,151,93,124,65,57,117,239,190,95,253,50,28,65,122,181,16,65,87,221,125,71,90,112,217,249,161,160,234,89,124,84,234,218,98,224,185,172,174,162,222,61,71,127,38,205,188,240,236,33,249,231,21,92,122,215,109,233, +229,96,63,212,135,103,223,126,248,131,127,47,4,213,197,101,185,174,187,246,219,69,125,126,29,10,68,4,218,213,95,191,170,124,46,236,225,135,126,215,159,58,116,65,172,49,2,136,168,250,227,31,158,25,52,205,179,86,27,74,128,197,68,39,130,16,224,227,68,2, +76,180,10,18,96,173,43,192,94,255,186,215,165,183,190,229,45,225,113,27,11,36,192,218,23,31,171,18,96,157,195,184,10,176,91,110,254,143,154,34,0,97,134,0,57,233,132,163,210,33,7,236,83,190,177,144,23,72,252,242,23,247,212,28,25,98,65,128,241,22,193,95, +252,252,158,254,148,129,133,125,61,250,200,195,233,244,83,63,155,182,158,215,155,102,110,62,173,124,3,33,193,187,207,39,119,44,95,192,129,200,203,151,199,10,241,119,196,119,174,46,159,231,202,69,213,172,139,206,74,61,251,237,158,186,54,253,104,249,226, +141,238,61,22,165,153,231,157,25,228,59,39,237,127,245,149,233,129,66,76,230,11,229,250,245,127,222,87,62,147,181,213,156,238,242,165,33,148,107,139,222,77,202,231,189,110,188,225,250,82,140,230,203,147,79,62,145,126,126,207,79,66,129,198,130,216,186, +249,135,63,72,167,127,238,179,233,176,131,246,45,223,44,249,165,47,158,150,110,187,229,230,114,91,173,69,2,44,38,58,17,132,0,31,39,18,96,162,85,144,0,107,93,1,246,198,229,151,79,111,91,113,197,240,184,141,5,196,194,26,171,175,30,150,69,180,54,62,86,37, +192,58,135,113,21,96,191,249,245,253,253,93,254,193,11,211,233,120,99,33,175,140,247,249,17,37,188,78,253,214,31,221,84,243,153,177,7,126,251,155,114,100,136,183,255,229,11,35,92,231,127,233,204,82,224,120,191,6,35,103,119,221,113,235,16,81,200,190,174, +46,196,226,188,115,79,31,50,21,145,239,189,103,158,146,186,183,153,147,186,230,23,162,238,115,199,13,201,3,115,11,81,118,217,141,223,11,133,20,111,62,100,52,16,65,24,149,107,207,93,183,79,191,186,247,23,67,202,197,247,90,98,148,253,240,252,91,254,70, +72,216,105,187,45,203,233,153,81,89,88,36,192,98,162,19,65,8,240,113,34,1,38,90,5,9,176,214,21,96,239,89,253,221,233,93,171,172,146,86,158,50,165,41,252,253,187,222,149,54,88,111,106,88,22,209,218,248,88,149,0,235,28,198,85,128,33,150,242,5,81,193,168, +205,214,243,122,66,27,56,230,240,131,210,51,79,63,213,111,49,120,121,226,241,223,167,95,223,127,95,40,86,16,124,59,108,59,47,244,9,8,188,115,207,254,66,56,21,241,167,63,251,105,218,238,184,195,211,204,47,127,113,136,184,234,187,248,220,114,218,97,207, +161,251,165,190,139,134,78,61,196,102,225,73,71,167,59,127,122,119,191,183,129,133,114,221,253,227,59,202,215,235,71,101,50,46,189,232,252,97,71,254,242,133,186,238,181,251,162,208,23,240,63,97,180,83,180,72,128,197,68,39,130,16,224,227,68,2,76,180,10, +18,96,173,43,192,214,122,223,26,165,32,234,233,234,74,125,189,189,99,206,204,158,238,180,246,135,62,16,150,69,180,54,62,86,37,192,58,135,150,19,96,136,159,51,62,127,82,152,223,96,154,222,29,183,221,50,68,100,177,48,122,22,141,126,49,138,245,189,235,191, +155,250,102,108,20,250,52,16,30,60,43,149,47,76,93,220,179,216,214,115,252,161,133,224,250,210,80,145,117,225,217,133,208,138,223,122,216,123,202,177,233,83,135,31,88,254,159,89,190,80,174,111,126,253,202,37,127,0,93,11,166,85,214,251,54,71,218,229,27, +255,247,171,195,214,149,109,140,20,70,109,40,1,22,19,157,8,66,128,143,19,9,48,209,42,72,128,181,174,0,19,162,94,124,172,74,128,117,14,45,37,192,16,3,188,136,130,41,119,81,126,131,169,122,95,191,234,43,161,120,32,45,74,71,232,32,218,62,127,242,241,233, +115,39,29,87,147,175,92,250,79,233,15,133,0,201,23,94,220,81,138,146,237,231,167,190,51,79,9,167,25,70,244,157,115,122,234,217,117,97,58,254,232,67,67,1,197,168,214,127,124,255,134,116,218,41,39,134,229,49,174,186,226,210,242,127,208,234,89,94,122,233, +165,180,248,248,35,195,182,243,156,118,202,9,229,203,60,242,69,2,44,38,58,17,132,0,31,39,18,96,162,85,144,0,147,0,19,237,143,143,85,9,176,206,161,229,4,24,211,226,120,133,124,148,223,232,153,254,209,116,246,153,159,175,249,12,83,180,224,219,94,241,190, +52,34,1,199,75,65,14,63,120,191,212,181,217,180,212,179,223,39,211,172,96,180,43,7,145,214,115,200,167,82,79,209,22,103,159,241,185,112,106,35,11,245,136,202,145,19,149,43,95,200,195,8,94,244,103,205,57,252,151,88,36,234,36,192,98,162,19,65,8,240,113, +210,8,1,54,103,246,244,81,17,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,148,0,147,0,19,237,143,143,85,9,176,206,161,229,4,216,207,238,185,59,205,155,181,89,152,223,115,234,226, +99,107,10,154,177,88,120,81,198,81,135,30,80,238,187,107,246,230,105,230,9,71,134,162,203,211,123,234,113,175,189,152,99,243,105,233,162,47,127,169,146,96,28,233,66,27,50,213,145,23,138,228,109,150,195,11,77,120,189,127,190,72,128,197,68,39,130,16,224, +227,68,2,108,128,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,79,9,48,9,48,209,254,248,88,149,0,235,28,90,78,128,221,125,215,29,229,159,11,71,249,61,159,61,238,136,66,128,13,125,101,252,88,45,94,128,117,207,216, +40,245,28,126,64,248,95,95,6,163,95,51,143,59,36,205,40,218,1,1,118,249,37,95,46,71,224,198,122,161,13,31,121,248,161,240,237,135,57,123,239,177,67,41,182,176,241,139,4,88,76,116,34,8,1,62,78,36,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137, +236,170,16,249,204,137,236,170,16,249,148,0,107,125,1,182,251,206,139,150,172,247,117,79,47,137,182,237,184,221,214,229,247,13,214,89,171,252,62,127,118,79,154,177,201,180,37,219,55,222,112,221,180,205,130,57,229,58,121,200,235,125,181,42,86,86,234,23, +109,31,75,174,191,238,218,65,109,216,170,248,88,149,0,235,28,90,78,128,253,228,238,59,211,220,153,75,23,96,252,63,88,21,1,134,239,103,159,253,99,249,140,217,72,224,255,197,152,178,87,254,215,215,162,5,169,247,139,167,132,194,203,51,235,156,211,83,247, +174,11,83,239,230,27,165,75,46,60,191,166,0,227,153,179,104,159,75,227,149,87,134,214,191,20,96,143,60,148,118,89,180,85,216,110,30,254,251,236,15,207,60,35,1,86,39,209,137,32,4,248,56,145,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66, +228,51,39,178,171,66,228,83,2,172,245,5,216,99,143,62,178,68,40,221,114,243,77,37,172,147,246,179,123,126,90,174,31,123,212,97,233,171,151,95,154,206,63,247,236,242,121,116,68,203,97,7,31,80,10,8,243,115,241,133,23,164,179,206,56,109,137,159,111,124, +237,202,116,205,183,174,46,63,45,79,43,66,61,95,120,254,249,116,215,157,183,167,7,31,124,32,125,255,198,27,74,49,25,229,109,52,190,237,91,25,31,171,18,96,157,67,203,9,176,123,127,249,243,242,45,135,81,126,131,103,192,120,83,98,149,41,136,60,67,245,205, +175,93,145,246,219,123,215,17,177,239,158,59,151,83,35,187,182,232,74,189,199,31,81,215,75,56,202,81,176,147,143,77,189,91,205,42,95,111,31,189,240,130,183,54,50,58,182,223,62,187,133,251,173,5,127,172,28,189,9,146,239,79,63,245,100,57,186,21,181,157, +231,160,79,239,89,142,236,229,139,4,88,76,116,34,8,1,62,78,36,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,148,0,107,125,1,134,176,66,96,33,58,16,78,136,46,4,214,226,19,142,45,5,87,148,255,192,79,239,93, +230,65,64,240,73,58,235,140,230,48,10,230,133,217,253,247,253,170,165,71,121,16,64,136,47,251,78,253,78,59,117,241,160,60,64,251,144,151,145,63,70,204,168,147,141,158,145,150,231,39,221,242,249,116,111,63,156,0,35,157,124,126,187,237,47,79,195,167,229, +175,181,191,90,251,169,7,31,171,18,96,157,67,203,9,176,71,31,125,56,237,178,104,235,48,191,193,31,41,243,182,194,232,207,152,241,145,139,18,22,70,159,174,184,252,226,208,95,189,204,40,95,192,177,71,154,117,193,208,255,2,67,108,69,162,108,230,63,157,149, +122,15,217,55,157,116,202,9,233,197,23,135,190,240,2,81,118,254,57,103,148,255,65,22,237,179,22,156,112,215,252,243,215,195,54,96,63,199,28,113,80,104,231,97,26,103,52,138,38,1,22,19,157,8,66,128,143,19,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115, +34,187,42,68,62,115,34,187,42,68,62,37,192,90,95,128,33,166,24,169,66,132,33,184,24,201,34,141,145,32,58,238,228,177,209,46,132,10,35,96,228,37,221,196,27,249,108,228,12,241,130,176,32,175,97,83,19,91,17,132,137,23,96,140,226,69,163,118,212,17,49,73, +59,80,111,70,203,108,157,186,123,177,74,186,141,2,146,207,196,15,237,64,219,208,198,8,221,90,2,140,54,196,7,62,249,52,145,235,71,22,217,47,105,216,219,200,157,141,80,218,113,195,15,121,115,63,85,241,177,58,22,241,188,252,114,203,165,41,147,39,135,127, +224,45,198,142,85,87,94,57,189,119,205,53,195,99,50,28,254,88,55,76,128,177,188,252,210,75,165,48,136,242,27,243,250,166,151,175,110,143,132,22,130,226,197,23,135,254,15,24,121,111,187,229,166,210,54,242,89,23,139,22,164,190,96,234,33,194,171,247,11, +39,165,222,211,78,72,125,151,156,59,100,59,175,162,223,255,244,147,211,227,79,60,222,95,154,129,133,114,253,219,191,94,91,215,139,71,60,8,54,94,236,17,141,2,34,202,46,187,248,130,82,168,70,182,240,154,136,189,48,20,112,18,96,49,209,137,32,98,248,181, +146,95,112,185,89,241,139,32,55,41,63,69,166,211,240,113,34,1,54,64,100,87,133,200,103,78,100,87,133,200,103,78,100,87,133,200,103,78,100,87,133,200,167,4,88,235,11,48,58,229,116,224,233,168,219,104,9,235,136,3,182,115,45,181,105,135,124,71,4,152,0,67, +80,152,40,64,164,145,198,39,105,172,183,3,220,27,168,171,137,79,234,26,61,15,70,187,48,85,209,190,83,71,27,41,163,221,16,103,172,115,191,177,169,155,128,95,19,116,136,38,196,45,235,180,43,75,36,192,16,83,249,189,138,50,113,92,236,59,251,227,152,96,207, +130,63,210,185,239,153,56,67,88,54,226,158,231,99,117,44,226,121,253,169,83,83,111,119,119,248,7,222,98,236,152,221,215,151,230,207,157,27,30,147,225,240,199,186,161,2,12,65,242,175,223,189,102,88,161,196,20,188,135,31,250,93,191,197,224,229,201,39,159, +72,191,249,245,253,161,56,227,141,127,199,31,125,72,232,115,56,202,209,169,45,102,164,153,199,31,54,100,148,171,20,95,23,156,145,186,247,88,148,186,119,250,68,234,253,210,105,97,158,237,47,248,98,250,201,3,67,235,203,194,159,60,243,124,89,180,239,225, +56,241,216,195,203,215,227,71,203,61,63,249,113,218,113,225,252,208,14,182,219,122,139,196,11,79,162,69,2,44,38,58,17,150,134,221,20,59,1,110,54,118,243,90,26,220,24,185,233,217,47,129,220,44,185,49,181,242,47,177,163,193,199,137,4,216,0,145,93,21,34, +159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,18,96,173,47,192,128,142,186,23,13,8,18,68,0,235,92,119,249,206,189,4,49,65,199,223,4,152,217,34,224,76,160,241,73,30,174,191,251,236,185,235,18,49,208,170,152,0,67,168,12,247,34,14,238, +37,214,38,128,24,178,251,139,249,96,157,118,242,117,38,143,141,176,209,46,94,112,97,19,9,48,68,28,254,105,87,187,231,209,246,124,199,151,193,253,12,123,19,127,192,177,49,161,22,249,25,9,62,86,219,33,158,197,216,226,143,245,136,5,24,47,182,136,22,132, +210,153,167,159,156,34,31,8,135,239,254,203,183,194,145,27,22,68,221,213,223,184,42,189,244,82,60,10,118,231,237,183,150,47,159,224,57,178,220,119,14,251,231,79,161,143,60,252,160,52,231,144,125,195,169,135,125,23,158,157,122,142,254,76,234,42,78,128, +25,155,79,75,61,7,127,42,245,93,52,244,63,194,230,92,118,126,186,236,174,91,211,159,131,87,209,83,174,31,254,224,223,211,238,59,109,19,150,195,67,185,121,75,36,207,164,157,119,206,23,210,67,191,123,176,223,203,224,133,169,141,87,125,245,210,180,245,220, +158,33,62,182,156,61,35,93,114,225,121,229,243,103,209,34,1,22,19,157,8,195,193,205,143,11,51,55,0,27,5,242,23,123,126,181,179,95,205,184,144,115,227,36,111,36,82,184,49,141,133,120,177,125,90,25,249,238,247,67,26,229,100,29,1,133,144,34,175,149,155, +237,102,111,54,108,163,51,129,8,195,150,58,219,180,12,242,91,190,209,194,126,240,109,101,176,116,246,233,191,27,180,33,233,86,118,48,219,225,110,252,245,224,227,68,2,108,128,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174, +10,145,79,9,176,246,232,176,114,205,178,235,44,88,199,222,190,179,206,245,148,123,10,215,44,127,29,101,91,126,111,224,26,103,207,144,97,227,183,181,26,148,223,4,210,112,112,157,246,35,80,181,4,24,105,222,31,237,198,244,63,179,177,246,224,94,199,12,34, +223,206,57,180,51,247,112,187,167,248,253,27,121,249,189,0,51,240,195,61,208,31,183,42,248,88,149,0,19,254,88,143,88,128,69,47,145,176,229,177,199,30,45,5,4,66,0,97,194,75,37,78,249,236,49,229,212,195,87,106,8,7,22,68,221,49,133,96,250,249,61,63,9,125, +147,198,200,207,169,139,143,75,219,127,98,78,218,162,119,147,52,171,107,227,242,153,42,70,221,182,93,48,171,20,104,167,157,114,98,186,238,218,111,167,7,31,248,109,186,254,103,63,73,91,93,60,244,249,46,70,182,102,158,121,114,234,94,56,111,73,157,186,182, +236,75,51,63,119,226,144,81,48,216,239,219,255,55,61,240,204,83,253,37,25,188,240,140,218,173,63,186,169,156,126,185,221,86,179,7,151,107,214,102,105,97,81,46,254,183,11,97,250,189,235,175,45,71,0,17,147,223,255,247,127,171,41,70,95,120,225,249,116,237, +119,254,57,29,117,216,129,105,143,157,23,22,98,114,187,116,204,17,159,73,255,242,237,171,195,255,255,178,69,2,44,38,58,17,134,131,139,48,55,5,110,130,220,32,249,4,191,221,110,32,92,192,249,117,143,95,45,185,89,216,13,3,176,97,27,191,234,213,115,163,170, +23,251,165,148,125,217,141,186,214,205,132,27,58,101,32,63,121,201,199,205,132,250,81,102,132,153,149,25,27,210,177,227,87,63,242,51,117,132,207,70,138,72,218,142,50,81,94,155,138,194,190,249,206,190,40,171,221,92,41,27,211,91,72,183,95,71,185,169,82, +78,190,83,254,252,166,89,5,31,39,18,96,3,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,74,128,169,195,218,234,228,247,156,90,228,2,200,223,63,241,97,2,140,251,154,221,75,185,47,144,110,247,29,242,115,95,64,156,98, +207,125,201,238,17,30,236,184,151,0,249,241,73,58,235,54,179,195,238,35,121,249,237,158,201,58,247,28,243,195,40,152,229,169,138,143,85,197,179,240,199,122,196,2,236,156,47,126,62,28,169,178,5,81,194,43,218,249,99,225,167,158,124,178,124,62,12,1,101, +68,11,2,108,231,237,23,148,111,73,124,230,233,167,251,83,135,46,127,250,211,159,210,175,255,243,190,82,244,32,98,24,129,186,235,142,91,139,19,236,222,114,26,35,175,184,103,31,143,63,255,92,58,254,123,215,14,17,83,48,235,203,103,165,158,253,247,72,51, +54,29,24,77,43,95,83,191,231,142,169,239,188,51,135,228,159,119,217,5,233,162,59,110,73,175,252,249,207,97,249,73,123,238,185,103,203,50,220,114,243,127,148,229,186,233,63,110,76,63,46,78,238,255,188,255,190,242,237,134,252,98,99,245,191,249,135,63,72, +39,159,120,116,122,252,241,199,250,61,12,93,200,247,124,81,7,242,240,234,250,23,139,122,219,190,237,51,95,36,192,98,162,19,97,56,184,72,251,11,51,157,127,176,239,254,6,98,162,193,182,241,107,25,159,38,146,44,221,46,254,246,125,52,248,27,133,49,220,205, +36,207,207,148,17,110,100,246,157,27,157,141,36,225,195,151,211,110,142,141,4,255,248,181,155,35,32,164,236,87,70,202,70,25,217,206,141,54,111,55,234,226,203,207,13,210,143,142,85,193,199,137,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21, +34,159,57,145,93,21,34,159,18,96,234,176,182,58,92,159,235,249,97,142,107,179,31,37,100,221,174,215,248,240,179,24,72,103,42,34,215,255,92,96,113,127,64,96,97,207,126,253,253,195,32,157,123,3,247,60,111,143,95,210,185,87,251,145,52,95,126,252,91,57,41, +19,249,41,203,72,71,191,192,199,170,226,89,248,99,61,98,1,198,8,20,34,162,234,194,212,185,7,31,248,77,40,32,16,96,252,9,49,211,236,174,186,226,210,82,180,141,116,193,255,21,63,185,51,205,191,252,130,33,98,170,28,253,90,124,116,234,154,211,53,164,94,93, +51,55,77,61,199,28,18,142,130,109,115,197,69,233,154,95,220,83,115,212,170,222,133,178,209,118,180,225,55,191,126,101,101,127,188,150,159,103,229,162,255,38,147,0,139,137,78,132,225,160,195,95,69,128,249,169,34,38,88,216,142,24,99,187,193,77,193,242, +141,6,202,98,35,71,70,21,1,134,216,241,55,30,182,89,217,240,225,5,207,88,9,48,63,82,200,141,144,31,40,124,91,217,3,208,220,8,41,47,105,86,102,191,14,148,127,164,243,244,125,156,72,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,153, +19,217,85,33,242,41,1,166,14,171,104,127,124,172,182,91,60,115,95,230,94,189,180,105,254,150,207,83,43,15,159,249,54,195,247,9,26,1,253,178,70,245,185,26,133,63,214,35,22,96,112,200,1,251,148,255,253,85,239,130,248,226,255,188,152,74,247,228,19,79,244, +167,14,44,38,192,240,205,243,79,87,126,229,146,242,207,134,171,46,255,243,63,255,147,110,127,232,193,180,243,215,47,27,34,162,160,239,60,254,100,121,219,33,245,89,194,118,91,166,190,179,78,29,98,55,251,226,47,165,69,133,8,251,118,209,249,123,225,79,47, +212,28,133,90,218,98,2,108,254,172,205,203,63,93,102,189,94,95,136,46,70,214,248,47,177,251,238,253,229,16,59,9,176,152,232,68,24,14,46,56,116,242,237,59,191,132,249,135,131,121,78,202,46,50,228,243,23,28,19,44,92,104,70,51,117,97,56,16,95,94,80,1,191, +210,249,253,33,210,44,15,191,226,249,252,94,112,1,35,117,38,34,107,213,167,145,224,63,47,63,101,24,238,151,70,108,172,126,81,249,71,250,43,165,143,147,70,8,48,33,26,129,4,152,4,152,104,127,124,172,182,91,60,243,163,110,61,127,180,77,190,252,7,84,219, +70,126,126,64,165,207,68,58,253,9,251,113,53,167,209,125,13,250,8,254,135,243,86,192,31,235,81,9,48,94,42,113,212,161,7,148,211,236,254,26,188,160,194,22,68,2,211,17,25,237,97,212,103,238,204,233,229,20,189,92,60,120,1,6,228,251,220,73,199,149,254,249, +127,172,122,68,10,226,235,137,23,158,79,39,220,240,221,33,2,10,24,217,234,57,124,255,212,213,253,177,65,117,241,148,47,228,56,104,175,52,235,194,179,67,251,5,95,60,57,157,121,209,121,69,64,221,189,100,106,101,189,11,163,87,4,217,165,23,157,95,62,43,198, +254,246,218,109,81,186,241,134,235,75,129,58,156,47,246,69,187,241,156,27,111,119,228,85,244,249,40,152,4,88,76,116,34,12,7,226,137,227,100,211,15,128,239,8,49,166,18,218,139,41,200,203,69,165,150,96,33,47,23,45,70,103,16,77,126,212,102,52,152,216,98, +158,186,247,203,69,206,70,199,88,55,145,99,229,167,28,92,16,201,143,104,161,62,228,33,175,249,30,174,62,141,34,18,96,148,133,125,115,209,4,68,48,229,70,248,82,110,234,106,54,108,163,254,38,68,105,99,239,171,10,62,78,36,192,68,171,32,1,38,1,38,218,31, +31,171,237,40,192,188,152,226,94,204,61,215,231,1,242,69,253,4,250,81,244,51,232,71,229,219,34,114,31,220,231,125,159,137,117,63,130,198,126,129,117,250,10,244,43,248,180,237,29,45,192,0,17,182,235,14,91,151,255,93,197,203,51,120,214,137,103,149,16,76, +207,63,247,92,122,228,225,135,202,103,180,78,93,124,108,154,63,123,243,37,118,188,134,157,255,246,186,235,206,219,150,192,159,19,47,220,106,214,16,255,139,62,49,183,20,98,215,95,247,157,244,171,123,127,145,158,120,252,247,165,111,246,193,115,104,60,19, +198,119,246,253,219,223,254,58,93,248,157,111,166,45,78,58,58,245,126,246,168,33,244,28,117,80,234,206,246,17,50,175,187,16,106,7,132,62,122,79,60,60,245,238,188,77,218,105,209,86,229,243,106,223,187,254,187,69,144,221,91,62,235,198,51,91,148,11,172, +92,164,255,246,55,191,78,55,255,240,251,229,255,127,29,176,239,30,105,110,246,170,126,94,32,194,115,117,183,223,246,163,242,153,47,94,194,129,15,62,127,255,251,71,203,103,220,206,61,251,11,229,155,36,205,6,33,246,131,27,191,55,168,13,17,114,8,58,239, +91,140,236,162,198,92,112,63,15,157,79,46,62,156,228,172,219,47,65,92,20,252,175,66,249,112,61,23,31,46,2,124,70,191,30,141,6,124,34,92,236,162,131,127,46,58,182,47,63,239,158,114,82,14,43,3,219,168,15,249,253,69,109,105,245,105,4,121,217,12,218,150, +50,82,38,234,68,185,72,227,56,32,194,124,57,107,149,191,42,62,78,36,192,68,171,32,1,38,1,38,218,31,31,171,237,46,192,184,15,243,163,178,207,3,228,139,4,24,125,137,42,63,224,250,188,252,176,10,136,62,43,3,63,194,210,223,177,60,252,112,108,63,212,34,244, +216,78,94,203,211,241,2,204,152,213,245,177,114,116,235,160,79,239,153,142,63,250,208,180,248,248,35,203,55,248,241,6,196,5,115,186,134,188,58,158,63,19,222,114,139,25,131,96,74,158,207,147,195,136,216,14,219,206,75,251,237,179,91,233,155,183,14,158, +116,194,81,165,152,227,251,129,133,176,217,101,209,214,105,139,89,155,165,25,69,80,71,116,21,229,236,10,124,71,116,205,248,88,232,163,100,243,141,202,60,140,68,241,6,70,70,238,14,248,212,238,233,232,195,7,202,117,194,49,135,149,35,132,251,23,229,101, +170,33,207,182,205,220,124,184,63,88,222,48,109,51,127,102,249,95,105,199,30,121,112,217,134,124,242,29,129,22,217,226,115,80,59,22,223,203,255,62,203,242,9,221,168,197,80,242,24,145,0,19,173,130,4,152,4,152,104,127,124,172,182,163,0,67,20,33,98,16,55, +204,252,137,126,144,37,159,159,130,104,207,114,33,132,188,96,227,7,83,251,129,213,210,60,38,192,248,65,213,207,202,193,31,251,229,71,87,75,103,159,246,72,2,126,77,116,33,198,44,125,194,8,48,33,90,157,232,100,16,19,155,60,70,36,192,68,171,32,1,38,1,38, +218,31,31,171,237,42,192,24,249,26,110,38,76,173,17,48,102,173,120,33,133,15,196,146,31,85,243,152,15,158,71,207,95,96,102,207,168,227,15,33,134,176,178,103,201,16,104,140,128,249,252,164,75,128,9,209,66,68,39,132,152,152,68,241,33,1,38,90,5,9,48,9,48, +209,254,248,88,109,71,1,102,98,102,56,106,9,48,70,163,242,63,204,230,145,130,90,62,205,135,77,41,204,183,3,35,93,136,42,70,185,200,71,26,66,204,196,152,71,2,76,136,22,36,58,49,196,196,32,138,7,67,2,76,180,10,18,96,18,96,162,253,241,177,218,201,2,140, +183,37,34,118,12,219,198,243,232,8,43,210,24,197,226,185,174,165,9,48,96,84,139,188,246,2,51,19,91,60,63,142,248,226,205,138,150,151,253,147,198,62,200,63,225,158,1,19,66,136,118,71,2,76,180,10,163,17,96,60,252,238,255,54,163,17,224,51,122,217,13,29, +163,70,254,127,143,175,171,4,152,104,119,124,172,182,91,60,115,190,115,222,71,219,60,228,99,100,203,227,183,35,144,108,228,10,81,84,203,103,62,205,209,94,96,150,191,128,11,123,63,170,6,124,183,145,48,243,207,181,41,207,55,222,248,99,45,1,38,132,16,253, +72,128,137,86,97,52,2,108,184,105,62,35,5,65,103,111,46,181,231,49,128,14,78,52,253,104,164,248,186,74,128,137,118,199,199,170,226,89,248,99,45,1,38,132,16,253,52,66,128,205,153,61,125,84,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68, +62,115,34,187,42,68,62,115,34,187,42,68,62,235,21,96,252,202,139,224,242,127,235,144,11,48,203,131,88,2,255,55,19,216,177,205,255,42,109,127,19,97,118,164,177,157,95,161,73,99,186,143,237,211,4,24,159,164,177,221,252,176,14,216,178,13,191,192,58,249, +45,159,199,215,85,29,86,209,238,248,88,85,60,11,127,172,37,192,132,16,162,31,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,235,17,96,8,34,166,255,49,77,135,63,35,183,231,29,16,56,38,192,16,64,188,81,140,215,65,147, +134,88,98,59,219,24,201,178,231,51,16,85,76,15,50,123,222,54,70,126,243,201,58,162,137,60,246,188,7,83,131,72,227,187,229,197,143,141,144,145,151,116,202,200,254,121,176,158,114,242,74,107,191,63,143,175,171,58,172,162,221,241,177,170,120,22,254,88,75, +128,137,113,35,10,78,33,198,154,40,22,13,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,171,78,65,100,100,201,222,28,230,5,152,253,247,142,229,67,140,153,0,227,65,118,27,57,67,72,217,43,163,217,142,168,242,35,101, +38,192,88,247,83,14,73,99,177,109,136,50,251,239,31,4,150,127,155,25,251,102,59,235,136,180,232,79,93,125,93,213,97,21,237,142,143,85,197,179,240,199,90,2,76,52,157,40,40,133,104,54,81,108,74,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85, +33,242,153,19,217,85,33,242,89,143,0,99,116,139,55,133,49,194,132,120,50,97,228,5,24,35,78,38,122,128,188,38,192,16,68,150,14,216,219,20,193,252,197,26,195,9,48,239,7,91,202,196,58,2,204,191,12,4,59,243,225,243,121,124,93,213,97,21,237,142,143,85,197, +179,240,199,90,2,76,52,149,40,32,133,24,47,242,248,148,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,179,30,1,198,84,62,70,184,88,231,13,98,145,0,99,244,203,242,128,61,191,197,186,23,68,8,47,182,177,30,137,163, +92,128,217,91,201,72,243,130,44,23,96,126,244,77,2,76,76,52,124,172,42,158,133,63,214,18,96,162,169,68,1,41,196,120,145,199,167,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,245,8,48,132,21,35,92,188,174,25,49,227, +5,148,9,48,166,24,34,124,16,67,76,249,99,221,4,24,246,228,227,21,209,124,218,159,153,46,77,128,177,13,97,229,95,194,97,249,36,192,132,24,192,199,170,226,89,248,99,45,1,38,154,70,20,140,66,140,55,62,70,37,192,6,136,236,170,16,249,204,137,236,170,16,249, +204,137,236,170,16,249,204,137,236,170,16,249,172,247,25,48,166,23,34,164,236,109,131,164,49,154,229,223,106,200,58,66,136,81,50,166,22,250,255,219,97,157,109,254,213,242,216,219,179,97,134,189,5,209,182,35,218,176,33,205,251,243,182,148,201,4,23,144, +207,251,200,247,1,190,174,234,176,138,118,199,199,170,226,89,248,99,45,1,38,154,70,20,140,66,140,55,62,70,37,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,172,250,18,142,90,32,130,76,232,228,163,85,173, +136,175,171,58,172,162,221,241,177,170,120,22,254,88,75,128,137,166,17,5,163,16,227,141,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,27,37,192,24,185,226,109,135,76,33,100,244,203,143,116,181,34,190,174,234, +176,138,118,199,199,170,226,89,248,99,45,1,38,154,70,20,140,66,140,55,62,70,37,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,108,148,0,107,55,124,93,213,97,21,237,142,143,85,197,179,240,199,90,2,76,52,141, +40,24,133,24,111,124,140,74,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,41,1,166,14,171,104,127,124,172,42,158,133,63,214,18,96,162,105,68,193,40,196,120,227,99,84,2,108,128,200,174,10,145,207,156,200,174,10, +145,207,156,200,174,10,145,207,156,200,174,10,145,79,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,141,16,96,66,52,2,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,162,85,144, +0,83,135,85,180,63,62,86,21,207,194,31,107,9,48,209,52,162,96,20,98,188,241,49,42,1,38,90,5,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,162,85,144,0,83,135,85,180,63,62,86,21,207,194,31,107,9,48,209,52,162, +96,20,98,188,241,49,42,1,38,90,5,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,162,85,144,0,83,135,85,180,63,62,86,21,207,194,31,107,9,48,209,52,162,96,20,98,188,241,49,42,1,38,90,5,9,48,117,88,69,251,227,99, +85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,162,85,144,0,83,135,85,180,63,62,86,21,207,194,31,107,9,48,209,52,162,96,20,98,188,241,49,42,1,38,90,5,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,141, +16,96,115,102,79,31,21,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,207,156,200,174,10,145,79,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,77,35,10,70,33,198,27,31,163,18,96,3,68,118,85,136,124, +230,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,74,128,169,195,42,218,31,31,171,138,103,225,143,181,4,152,104,26,81,48,10,49,222,248,24,149,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,83,2,76, +29,86,209,254,248,88,85,60,11,127,172,37,192,68,211,136,130,81,136,241,198,199,168,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,18,96,234,176,138,246,199,199,170,226,89,248,99,45,1,38,154,70,20,140,66,140,55,62, +70,37,192,6,136,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,204,137,236,170,16,249,148,0,107,191,14,235,177,71,29,150,246,217,115,215,112,155,152,152,248,88,149,0,19,254,88,75,128,137,166,17,5,163,16,227,141,143,81,9,176,1,34,187,42, +68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,218,175,195,122,254,185,103,151,34,44,218,86,133,122,132,220,120,138,189,13,214,89,43,237,190,243,162,180,227,118,91,15,217,54,127,118,79,218,102,193,156,33,233,125,221,211,7,229, +103,29,31,164,251,124,141,100,227,13,215,45,203,147,167,177,95,234,224,211,173,78,108,231,59,229,170,85,199,42,248,88,149,0,19,254,88,75,128,137,166,17,5,163,16,227,141,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187, +42,68,62,37,192,26,211,97,157,177,201,180,178,35,109,29,113,58,218,8,4,235,96,215,234,160,99,23,165,231,130,193,210,241,217,40,1,86,143,159,70,237,107,36,208,6,47,60,255,124,186,235,206,219,211,131,15,62,144,190,127,227,13,75,132,203,53,223,186,58,189, +250,234,171,67,218,143,188,143,61,250,200,146,239,172,255,236,158,159,46,241,241,141,175,93,185,196,71,163,160,141,240,237,211,56,86,44,167,157,186,120,80,58,109,201,194,118,190,99,75,25,41,31,220,127,223,175,70,36,198,124,172,74,128,9,127,172,37,192, +68,211,136,130,81,136,241,198,199,168,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,18,96,163,239,176,30,248,233,189,211,45,55,223,84,118,166,175,191,238,218,82,20,32,30,232,88,35,26,46,190,240,130,114,221,58,221, +108,167,163,77,58,118,139,79,56,182,76,71,180,33,22,190,122,249,165,75,236,44,29,123,68,7,254,233,236,143,84,20,153,80,140,132,156,137,69,63,106,147,231,193,206,231,193,198,139,69,196,77,52,50,53,18,240,139,40,177,239,180,139,9,26,218,130,109,94,224, +88,126,218,202,210,88,247,229,67,128,209,182,246,189,17,112,60,40,143,29,95,96,221,4,149,207,75,26,88,94,218,23,108,59,226,235,233,167,159,26,34,44,151,134,143,85,9,48,225,143,181,4,152,104,26,81,48,10,49,222,248,24,149,0,27,32,178,171,66,228,51,39,178, +171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,83,2,108,244,29,86,132,1,120,225,66,167,159,17,26,75,67,164,209,249,103,29,65,99,194,1,193,98,163,39,228,201,69,23,159,116,214,189,104,160,3,63,18,1,102,62,35,33,135,104,66,44,32,6,114,129,96,121,40, +31,245,36,13,63,38,230,16,145,182,143,179,206,56,109,73,29,70,75,46,192,240,109,109,72,29,40,151,23,56,236,151,180,225,4,24,235,44,141,26,5,99,122,38,109,73,59,240,105,233,124,55,145,104,130,148,81,80,218,202,242,147,150,11,48,160,30,38,202,235,197,199, +170,4,152,240,199,186,46,1,86,164,9,81,55,62,118,60,81,48,10,49,222,248,24,149,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,83,2,108,244,29,86,58,243,116,154,17,52,214,153,166,163,111,194,202,190,155,88,160,3, +206,58,157,115,131,116,196,13,54,62,29,145,131,240,240,157,116,19,26,246,189,94,16,11,136,2,251,142,127,243,131,176,49,81,192,40,140,229,99,191,209,190,40,235,97,7,31,80,174,83,102,19,57,212,43,159,110,57,82,240,137,128,162,12,212,153,145,33,155,158, +71,249,40,47,117,48,129,67,57,216,247,112,2,12,40,227,104,159,185,50,16,198,246,140,28,251,183,145,43,19,96,180,29,109,69,26,117,160,205,40,243,112,2,44,74,91,26,62,86,37,192,132,63,214,117,11,176,73,203,46,155,86,152,52,73,136,154,188,105,133,21,210, +42,43,173,52,40,118,60,81,48,10,49,222,248,24,149,0,27,32,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,51,39,178,171,66,228,83,2,172,113,29,86,132,24,35,28,140,20,209,233,103,241,35,96,38,106,24,253,66,84,121,91,240,35,60,30,108,253,232,10, +157,254,145,8,48,58,245,126,202,158,23,114,8,21,19,125,96,251,195,198,242,216,104,15,219,201,111,233,248,196,23,226,135,41,148,164,53,2,19,96,180,75,46,152,76,128,153,192,161,141,104,59,179,177,124,145,0,27,201,20,191,8,124,48,202,105,109,134,95,107, +95,19,96,54,234,104,35,157,124,39,239,112,2,140,237,26,1,19,163,193,31,235,186,4,216,210,58,28,66,64,173,14,131,17,5,163,16,227,141,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,70,223,97,69,4,208,97, +102,116,131,209,21,58,230,116,250,121,129,4,98,137,78,57,157,112,27,49,98,59,157,113,58,222,136,26,235,108,91,58,130,130,116,19,105,116,218,45,63,66,7,95,38,126,170,96,83,8,237,187,23,114,38,104,108,155,97,2,204,202,96,130,210,70,119,88,71,92,80,111, +202,86,85,56,12,7,109,136,24,137,182,89,121,77,224,32,124,17,105,75,19,96,148,185,81,34,209,132,167,125,71,128,210,14,172,155,0,99,157,79,48,113,61,156,0,163,172,136,186,170,163,136,62,86,155,33,192,104,119,98,169,214,241,105,20,180,7,162,159,216,163, +109,163,31,46,26,9,49,68,44,81,47,226,100,172,247,231,33,14,124,236,142,6,127,172,37,192,68,195,144,0,19,237,136,143,209,70,8,48,33,26,129,4,216,232,59,172,116,150,233,216,35,62,172,227,108,226,129,233,113,116,172,114,113,131,216,162,115,7,254,165,21, +164,211,177,199,198,143,250,208,225,101,31,136,40,242,128,109,171,23,132,18,29,60,246,73,231,153,17,27,19,81,236,139,109,38,36,45,157,114,216,186,109,199,158,14,177,165,3,226,130,237,38,208,26,129,181,97,180,205,4,152,173,83,30,214,177,241,157,88,214, +169,43,176,78,167,154,60,182,125,52,176,207,92,40,225,159,182,244,2,140,117,22,59,158,185,0,227,187,125,34,218,77,168,87,193,199,106,51,4,24,245,108,134,0,35,102,173,173,76,108,143,36,246,235,5,223,62,62,16,125,254,252,28,43,136,13,132,166,143,221,209, +224,143,181,4,152,104,24,18,96,162,29,241,49,42,1,38,90,5,9,176,177,233,176,14,39,30,198,19,19,114,140,176,229,66,14,49,129,16,64,0,122,33,105,121,88,103,27,34,144,142,177,183,197,167,9,142,70,65,89,107,117,126,41,31,101,96,157,114,88,121,177,241,194, +213,196,144,97,233,163,37,223,143,65,27,1,101,243,226,204,239,155,58,89,217,201,235,203,103,233,85,241,177,218,12,1,70,155,83,246,102,199,184,9,220,104,91,163,225,24,243,35,133,63,142,99,1,251,177,31,6,36,192,68,75,35,1,38,218,17,31,163,18,96,162,85, +144,0,27,155,14,43,29,84,70,8,162,109,157,6,29,200,102,141,20,136,24,31,171,205,16,96,208,108,1,70,124,17,103,196,91,180,189,81,176,31,70,116,217,215,72,70,35,171,194,190,216,143,4,152,104,121,36,192,68,59,226,99,84,2,76,180,10,18,96,205,235,176,118, +34,140,124,209,9,247,211,17,69,243,241,177,218,137,2,140,125,53,75,228,243,227,9,35,196,140,6,179,79,246,29,229,107,4,140,38,219,200,177,4,152,104,121,26,37,192,56,145,27,253,128,37,115,120,253,180,140,70,195,47,63,181,46,64,249,179,4,30,123,163,21,101, +179,245,145,128,255,145,78,145,152,232,248,24,149,0,19,173,130,4,152,4,152,104,127,124,172,118,154,0,107,166,248,202,97,116,170,209,253,68,143,189,92,132,118,100,26,162,189,85,51,202,91,5,127,172,37,192,68,195,104,148,0,99,190,117,163,231,172,243,235, +197,88,254,90,194,92,228,90,101,38,221,207,51,247,216,175,42,35,253,133,133,11,144,93,36,248,228,151,161,40,159,168,141,143,81,9,48,209,42,72,128,73,128,137,246,199,199,106,39,9,176,102,139,47,255,188,23,63,54,55,115,223,35,237,159,69,248,99,45,1,38, +26,198,88,9,48,70,135,252,67,176,124,230,39,158,23,56,108,203,31,6,29,169,0,99,95,216,113,242,179,15,202,66,26,235,249,5,193,151,9,27,203,147,11,48,242,241,29,155,90,2,140,17,53,242,12,87,102,222,122,197,69,168,209,243,174,235,173,179,65,186,213,199, +210,200,103,117,136,30,204,181,7,176,135,171,95,179,240,49,42,1,38,90,5,9,48,9,48,209,254,248,88,237,36,1,70,191,38,95,106,253,8,221,8,248,177,153,55,81,218,15,206,99,57,250,149,147,247,207,70,131,63,214,18,96,162,97,140,133,0,163,243,207,9,199,127,122, +240,31,16,60,16,73,199,158,55,224,88,135,159,206,60,67,196,172,115,82,146,143,252,216,89,158,145,10,48,202,130,31,202,195,131,219,12,75,227,159,117,246,105,255,173,66,62,187,224,81,102,202,199,16,57,255,231,194,190,217,206,54,230,227,243,157,242,217, +168,21,233,254,4,167,126,164,179,15,166,37,214,122,96,28,223,182,255,70,82,111,157,129,58,80,70,234,74,62,234,78,58,182,148,143,116,214,253,205,128,81,58,252,208,6,190,109,198,11,31,163,18,96,162,85,144,0,147,0,19,237,143,143,85,197,179,240,199,90,2, +76,52,140,177,16,96,8,42,123,136,152,206,189,117,228,233,216,91,58,194,0,81,128,112,161,67,111,35,66,116,240,45,15,233,35,21,96,38,140,0,225,192,235,126,89,103,36,11,97,98,249,172,108,236,211,139,38,47,50,200,111,35,101,222,183,23,96,164,231,246,86,39, +15,34,111,36,117,90,26,245,214,153,81,174,92,88,153,56,51,241,102,219,16,103,94,12,91,125,120,160,22,255,150,111,60,240,49,42,1,38,90,5,9,48,117,88,69,251,227,99,85,241,44,252,177,150,0,19,13,99,44,4,24,29,124,70,99,248,52,72,103,212,203,214,233,208, +211,185,71,16,48,68,237,243,218,48,53,121,70,42,192,252,203,49,240,73,26,235,248,179,50,144,102,235,136,67,222,160,99,54,216,155,13,229,179,116,48,161,227,5,24,66,6,193,98,117,0,63,189,209,160,93,162,244,209,82,111,157,17,101,94,100,81,103,70,189,88, +231,248,249,54,192,6,91,127,220,128,227,102,245,30,47,124,140,54,66,128,205,153,61,125,84,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,212,97,21,237,143,143,85,197,179,240,199,90,2,76, +52,140,177,16,96,126,84,37,7,145,66,39,223,139,5,58,243,209,104,209,104,4,152,149,5,106,137,17,210,188,48,241,47,195,64,40,153,13,121,236,57,42,47,186,252,58,163,66,126,159,181,64,252,120,1,212,40,170,212,217,4,23,32,118,77,240,98,111,54,128,13,182,8, +46,47,66,201,195,113,180,239,227,129,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,212,97,21,237,143,143,85,197,179,240,199,186,46,1,182,252,114,203,165,41,147,39,167,149,167,76,17,162,38,171,174,188, +114,122,239,154,107,14,138,29,79,20,140,17,94,0,208,105,167,131,78,199,30,177,101,83,225,128,52,58,243,8,22,75,179,103,171,120,86,12,225,102,34,160,153,2,204,151,153,209,48,166,10,154,13,229,39,31,101,67,56,154,248,192,198,4,24,2,146,116,108,177,171, +37,178,152,146,73,62,64,240,65,35,70,196,234,173,51,229,100,157,114,82,87,202,97,109,92,75,128,217,54,132,27,109,129,56,109,198,31,42,14,135,143,81,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,212,97,21,237, +143,143,85,197,179,240,199,186,46,1,182,254,212,169,169,183,187,59,245,245,246,10,81,147,217,125,125,105,254,220,185,131,98,199,19,5,99,132,77,39,180,239,116,220,233,224,131,23,24,228,243,157,124,195,254,168,143,103,177,236,165,16,76,125,139,70,198,150, +70,94,22,246,79,26,235,248,179,242,144,150,151,13,145,197,126,41,191,217,0,254,16,31,164,155,13,190,200,155,219,83,143,168,142,6,118,8,83,242,225,211,234,59,26,216,119,61,117,182,188,8,40,142,141,9,44,192,222,215,25,27,223,254,118,140,252,126,198,11, +31,163,18,96,3,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,230,68,118,85,136,124,74,128,169,195,42,218,31,31,171,138,103,225,143,117,93,2,76,136,70,17,5,164,16,227,69,30,159,18,96,3,68,118,85,136,124,230,68,118,85,136,124,230,68,118, +85,136,124,230,68,118,85,136,124,74,128,169,195,42,218,31,31,171,138,103,225,143,181,4,152,104,42,81,64,10,49,94,228,241,41,1,54,64,100,87,133,200,103,78,100,87,133,200,103,78,100,87,133,200,103,78,100,87,133,200,167,4,152,58,172,162,253,241,177,170, +120,22,254,88,75,128,137,166,19,5,165,16,205,38,138,77,9,176,1,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,115,34,187,42,68,62,37,192,212,97,21,237,143,143,85,197,179,240,199,90,2,76,140,27,81,112,10,49,214,68,177,104,72,128,13,16,217,85, +33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,41,1,166,14,171,104,127,124,172,42,158,133,63,214,18,96,66,8,209,143,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,57,145,93,21,34,159,18,96,234,176,138,246,199, +199,170,226,89,248,99,45,1,38,132,16,253,72,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,41,1,166,14,171,104,127,124,172,42,158,133,63,214,18,96,66,8,209,143,4,216,0,145,93,21,34,159,57,145,93,21,34,159,57,145, +93,21,34,159,57,145,93,21,34,159,18,96,234,176,138,246,199,199,170,226,89,248,99,45,1,38,132,16,253,72,128,13,16,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,153,19,217,85,33,242,41,1,166,14,171,104,127,124,172,42,158,133,63,214,18,96,66,8, +209,79,35,4,152,16,141,64,2,76,29,86,209,254,248,88,85,60,11,127,172,37,192,132,16,162,31,9,48,209,42,72,128,169,195,42,218,31,31,171,138,103,225,143,181,4,152,104,26,69,108,137,14,34,58,198,237,142,4,152,104,21,36,192,212,97,21,237,143,143,85,197,179, +240,199,90,2,76,52,141,34,182,210,164,101,151,77,43,76,154,36,218,152,55,173,176,66,90,101,165,149,194,99,220,238,72,128,137,86,65,2,76,29,86,209,254,248,88,85,60,11,127,172,37,192,68,211,80,199,181,51,168,213,49,236,4,36,192,68,171,80,85,128,205,159, +221,147,190,241,181,43,211,105,167,46,14,183,87,225,172,51,78,75,219,44,152,83,174,127,245,242,75,151,172,143,6,252,204,216,100,90,184,205,227,235,170,14,171,104,119,124,172,42,158,133,63,214,18,96,162,105,168,227,218,25,72,128,41,142,197,216,83,85,128, +221,117,231,237,233,176,131,15,104,136,88,186,230,91,87,167,221,119,94,84,174,227,215,214,71,3,126,250,186,167,135,219,60,190,174,234,176,138,118,199,199,170,226,89,248,99,45,1,38,154,134,58,174,157,129,4,152,226,88,140,61,85,4,24,194,230,233,167,159, +42,133,210,198,27,174,91,166,49,218,228,191,27,150,158,143,70,89,58,35,105,185,0,219,103,207,93,203,239,150,102,108,176,206,90,101,218,142,219,109,61,40,29,72,51,127,124,247,2,140,79,75,207,241,117,85,135,85,180,59,62,86,21,207,194,31,107,9,48,209,52, +212,113,237,12,36,192,20,199,98,236,169,34,192,206,63,247,236,244,194,243,207,151,159,136,27,70,193,238,191,239,87,229,119,132,207,129,159,222,187,204,135,200,34,253,226,11,47,72,183,220,124,83,90,124,194,177,101,58,34,13,1,199,20,70,210,201,227,5,216, +207,238,249,105,57,133,144,109,136,51,219,47,105,236,131,79,242,89,58,254,109,255,54,37,210,4,152,149,205,196,88,142,175,171,58,172,162,221,241,177,170,120,22,254,88,75,128,137,166,161,142,107,103,32,1,166,56,22,99,79,21,1,6,143,61,250,200,146,117,132, +143,137,46,70,154,16,78,172,35,148,188,232,122,240,193,7,202,117,166,46,178,141,117,192,151,23,96,254,185,50,108,24,249,178,239,6,2,14,159,108,243,101,49,240,195,72,218,112,226,11,124,93,213,97,21,237,142,143,85,197,179,240,199,90,2,76,52,13,117,92,59, +3,9,48,197,177,24,123,70,35,192,24,177,2,68,15,92,127,221,181,101,250,247,111,188,161,20,64,150,14,164,35,190,142,61,234,176,37,246,209,20,68,219,134,15,155,114,200,72,23,121,201,243,234,171,175,150,194,138,109,230,215,67,26,226,205,143,160,69,248,186, +170,195,42,218,29,31,171,138,103,225,143,181,4,152,104,26,234,184,118,6,18,96,138,99,49,246,140,70,128,229,130,202,224,237,134,144,167,147,23,49,101,223,17,111,181,70,192,16,112,140,116,33,202,16,99,164,49,234,197,20,72,4,24,235,140,134,89,126,3,63,76, +63,196,38,42,155,225,235,170,14,171,104,119,124,172,42,158,133,63,214,18,96,162,105,168,227,218,25,72,128,41,142,197,216,51,26,1,134,208,97,180,9,225,196,84,68,166,24,146,142,64,34,157,41,138,8,40,155,142,104,233,228,231,57,48,123,161,7,219,16,78,136, +46,219,102,211,25,25,233,194,6,255,164,179,127,155,90,200,40,23,163,110,248,55,177,133,31,182,219,212,71,189,132,67,76,4,124,172,42,158,133,63,214,18,96,162,105,168,227,218,25,72,128,41,142,197,216,83,85,128,229,111,34,68,236,48,218,133,112,242,98,199, +210,253,127,125,1,194,8,193,132,240,50,161,68,58,121,120,121,7,66,138,237,254,249,47,242,34,230,240,15,126,27,223,253,62,248,180,237,248,111,166,0,99,191,190,174,6,229,160,14,70,94,38,219,238,211,114,104,27,155,226,57,17,161,93,107,29,75,218,61,143,75, +207,112,109,75,236,248,169,175,237,138,143,85,9,48,225,143,181,4,152,104,26,234,184,118,6,18,96,138,99,49,246,84,21,96,157,130,175,107,163,58,172,8,41,70,224,242,116,196,35,35,119,108,3,58,253,150,159,105,152,140,4,242,201,243,109,54,138,152,67,94,63, +250,56,81,160,61,152,118,202,104,38,245,7,47,114,105,75,123,14,49,223,198,20,89,123,22,145,109,81,219,50,138,58,220,84,213,118,193,199,170,4,152,240,199,90,2,76,52,13,117,92,59,131,137,46,192,150,95,110,185,52,101,242,228,180,242,148,41,66,140,25,171, +174,188,114,122,239,154,107,14,138,61,136,110,234,157,132,175,107,51,4,24,228,233,60,167,102,98,12,76,100,213,26,69,99,155,125,39,143,253,199,26,35,64,140,242,144,199,182,231,163,62,228,183,209,70,15,105,228,181,125,50,146,228,71,24,241,105,144,151,237, +209,136,18,163,83,222,79,35,160,126,136,82,63,186,133,136,162,29,172,140,8,51,95,94,3,241,181,180,23,177,128,23,96,86,63,219,102,117,178,239,214,14,246,157,252,181,234,75,58,182,228,161,30,249,232,157,249,37,31,219,249,238,125,131,29,87,243,227,183,229, +248,88,149,0,19,254,88,75,128,137,166,33,1,214,25,76,116,1,182,254,212,169,169,183,187,59,245,245,246,10,49,102,204,238,235,75,243,231,206,29,20,123,16,221,212,59,9,95,215,241,16,96,116,168,89,242,142,53,130,192,191,168,196,192,183,9,48,4,3,207,200,209, +65,7,70,121,16,28,76,81,228,147,60,148,195,196,4,121,236,245,253,230,15,232,252,51,122,68,217,216,47,223,177,247,47,67,49,63,228,33,47,251,224,89,60,132,143,229,161,60,148,141,114,71,101,31,41,248,165,110,121,58,35,98,38,96,40,147,253,21,130,135,242, +44,77,180,128,9,48,242,226,203,166,35,146,70,221,169,55,101,160,253,217,102,207,38,2,226,57,170,47,194,154,116,108,105,79,4,150,23,207,222,15,117,33,191,237,135,253,146,206,49,163,141,105,111,124,89,125,107,225,99,85,2,76,248,99,45,1,38,154,134,4,88, +103,48,209,5,152,16,227,73,116,83,239,36,124,93,155,33,192,232,128,179,13,232,100,35,106,188,136,49,120,254,45,26,185,49,1,198,8,144,137,47,210,233,152,155,232,2,242,176,141,124,230,7,129,18,61,63,134,208,34,221,11,21,70,106,76,244,176,79,43,35,117,176, +183,81,2,101,48,129,71,157,200,107,219,26,5,251,68,236,229,233,236,219,132,10,162,145,253,83,102,19,79,8,158,232,13,153,17,180,17,109,238,197,23,176,15,252,176,206,118,202,194,58,237,107,233,180,77,244,92,154,127,185,140,65,219,153,127,218,220,166,67, +178,80,7,214,105,79,107,99,242,70,113,80,11,31,171,237,40,192,136,89,218,204,98,170,22,150,207,83,43,143,157,35,19,17,127,172,37,192,68,211,144,0,235,12,36,192,132,24,63,162,155,122,39,225,235,218,12,1,70,103,218,58,140,228,163,19,207,244,186,188,147, +136,152,242,130,202,192,134,209,18,58,247,38,62,0,223,8,1,19,119,64,135,30,191,136,5,196,21,29,126,47,46,12,242,48,138,131,61,251,180,178,152,15,182,217,20,73,246,227,71,198,172,62,172,215,43,118,170,130,72,137,218,147,122,229,245,161,188,94,132,209, +86,126,123,45,168,7,254,176,181,250,243,137,189,111,83,59,38,214,38,8,5,68,155,247,101,152,144,98,187,181,17,229,50,177,75,123,217,190,124,57,125,252,176,63,223,222,75,195,199,106,59,10,48,139,111,234,79,60,210,126,209,8,38,249,56,111,252,177,177,109, +228,71,56,211,238,164,115,92,45,126,71,67,116,238,180,58,254,88,75,128,137,166,33,1,214,25,72,128,9,49,126,68,55,245,78,194,215,181,25,2,204,70,80,60,116,250,173,131,110,208,249,140,166,212,225,155,142,59,194,205,143,188,208,57,172,53,82,194,212,53,70, +111,232,136,70,219,13,196,0,62,172,195,207,254,177,101,63,54,218,67,249,189,240,243,2,140,122,80,62,219,214,40,216,55,157,114,19,43,96,29,112,43,151,135,50,90,135,155,78,120,212,142,57,86,111,240,237,200,126,163,58,177,95,142,177,181,109,190,221,131, +40,244,226,148,246,196,198,143,234,249,99,227,227,199,143,96,214,131,143,213,118,21,96,254,220,169,37,64,201,23,197,51,49,66,28,218,200,226,210,176,145,54,98,216,98,9,223,124,247,199,157,24,66,212,145,110,130,144,79,111,215,138,248,99,45,1,38,154,134, +4,88,103,32,1,38,196,248,17,221,212,59,9,95,215,70,10,48,58,135,38,184,76,116,249,117,15,157,56,251,149,158,142,35,29,189,104,244,11,124,199,147,206,163,141,216,0,29,123,58,245,248,243,246,116,16,17,0,209,190,129,206,37,157,92,62,17,44,54,21,206,58,179, +126,202,33,62,106,9,48,124,208,121,102,123,212,105,30,13,248,163,108,8,23,214,125,39,155,242,82,95,190,211,134,38,80,217,70,217,16,81,180,169,181,191,239,88,27,212,195,234,69,125,109,221,246,197,119,240,83,227,200,199,177,240,194,208,67,153,104,83,202, +228,219,208,202,104,237,12,94,76,80,62,19,33,118,92,41,55,101,241,54,17,62,86,59,65,128,209,86,209,244,83,127,30,120,104,159,40,189,22,228,101,68,146,99,133,45,113,195,119,218,219,98,153,124,196,7,113,96,241,67,62,190,35,192,137,173,165,137,240,241,194, +31,107,9,48,209,52,36,192,58,3,9,48,33,198,143,232,166,222,73,248,186,54,170,195,74,167,153,142,191,135,116,58,110,144,231,7,58,116,116,246,232,224,249,78,126,14,190,253,118,235,52,178,206,47,242,116,4,241,145,79,151,162,163,89,107,223,164,35,94,162, +14,62,157,81,63,130,100,157,79,251,206,8,156,159,34,198,118,58,205,86,231,70,194,190,40,35,117,244,207,92,217,72,4,251,165,30,190,60,64,121,73,167,93,104,227,124,59,224,207,183,163,111,99,214,205,214,215,157,114,12,55,58,101,101,162,253,252,62,241,71, +231,221,231,245,251,227,24,231,199,129,242,179,63,191,255,8,31,171,237,42,192,136,85,218,27,113,131,80,245,109,227,243,249,41,136,196,41,233,180,145,23,108,196,139,29,59,75,243,176,175,90,219,56,6,38,156,57,150,254,88,99,131,111,214,57,182,249,241,108, +21,252,177,150,0,19,77,67,2,172,51,144,0,19,98,252,136,110,234,157,132,175,107,59,118,88,235,129,206,187,117,80,171,128,40,161,99,89,107,132,103,34,67,155,248,209,194,42,208,145,231,152,68,219,70,139,143,213,118,22,96,8,215,72,120,25,150,47,79,183,81, +92,251,142,15,132,146,31,85,243,224,195,199,55,49,207,185,2,248,49,187,92,128,217,136,152,9,192,90,254,199,27,127,172,37,192,68,211,144,0,235,12,36,192,132,24,63,162,155,122,39,225,235,90,207,249,184,238,135,223,23,250,105,85,232,24,210,153,92,218,200, +73,14,83,178,152,90,53,92,39,120,162,194,232,7,237,90,107,228,164,22,136,53,236,16,23,209,246,81,243,193,246,143,103,132,85,61,98,166,150,0,35,206,25,25,99,187,165,33,158,106,249,204,125,112,174,152,56,246,118,172,251,31,49,56,63,24,89,179,239,45,73, +28,15,75,4,216,250,5,187,74,128,137,177,64,2,172,51,152,32,2,108,102,63,123,74,128,137,86,34,188,177,119,16,190,174,245,156,143,31,157,170,209,32,209,154,172,191,246,7,6,197,106,59,198,115,21,1,198,179,125,136,32,195,182,33,160,16,86,164,217,203,105, +234,21,96,8,43,166,48,34,174,189,29,163,100,76,135,100,132,13,145,103,2,144,105,146,236,131,169,143,222,79,43,80,35,30,74,1,54,165,96,189,130,157,37,192,196,88,176,252,114,203,165,41,147,39,167,149,167,76,17,109,204,170,43,175,156,222,187,230,154,225, +49,110,119,250,47,136,123,20,244,20,244,178,46,1,38,90,141,232,230,222,9,228,245,172,231,124,252,248,71,63,18,250,18,98,188,217,104,253,15,13,138,213,118,140,231,232,249,183,8,242,49,42,229,241,219,17,72,136,34,68,24,98,170,150,207,124,132,23,191,8,56, +166,45,242,108,151,127,214,144,117,70,47,109,116,13,33,70,62,210,70,50,21,117,172,169,17,15,187,20,44,243,191,10,214,41,88,36,1,38,198,130,245,167,78,77,189,221,221,169,175,183,87,180,49,179,251,250,210,252,185,115,195,99,220,238,184,95,164,186,10,102, +20,236,34,1,38,90,141,232,230,222,9,228,245,172,247,124,228,151,229,200,159,16,227,197,212,15,191,63,117,109,178,254,160,56,85,60,79,92,134,137,135,29,11,150,121,71,193,135,10,62,177,206,90,239,121,214,103,18,66,136,137,192,26,255,251,157,127,45,174, +129,139,10,54,45,216,164,96,187,181,255,113,13,93,15,69,203,17,221,228,219,153,168,142,245,158,143,155,109,60,53,173,247,17,117,90,69,107,64,103,123,179,143,173,59,40,70,65,241,60,49,89,74,60,108,91,176,204,91,11,222,91,48,107,245,119,77,254,241,204, +205,167,13,201,44,132,16,157,202,166,211,214,78,239,89,109,202,131,197,53,112,65,193,71,11,120,38,118,238,187,87,125,167,174,135,162,101,137,110,248,237,68,84,39,24,201,249,248,177,13,62,172,142,171,24,55,214,251,200,251,211,180,245,62,52,100,164,3,20, +207,19,143,58,227,97,110,193,50,111,42,88,173,224,227,239,89,125,213,75,167,126,168,51,159,241,16,66,136,8,46,136,107,172,182,242,119,139,107,32,83,67,62,88,176,86,193,244,53,222,189,138,174,135,66,52,25,157,143,162,147,80,60,11,143,139,135,205,10,150, +153,84,192,115,96,31,46,152,255,238,85,223,241,192,71,62,176,122,104,40,132,16,157,198,219,222,248,250,167,222,240,134,215,111,87,92,255,166,22,188,187,128,31,164,214,214,245,80,136,230,163,243,81,116,18,138,103,225,113,241,192,187,55,150,249,187,130, +183,20,16,20,27,78,126,199,91,15,90,109,149,183,63,68,80,252,227,154,239,10,29,8,33,68,187,195,245,141,139,225,228,119,172,120,100,113,237,251,88,193,63,20,76,46,224,185,88,110,148,186,30,10,209,36,116,62,138,78,66,241,44,60,53,226,97,153,191,45,88,174, +224,237,5,107,20,76,43,88,176,218,170,147,191,253,174,41,43,62,60,229,109,147,210,219,223,244,122,33,132,232,24,38,191,117,210,239,87,249,95,43,126,239,13,111,120,253,246,197,245,110,227,130,255,83,240,206,130,21,10,150,47,208,245,80,136,38,161,243,81, +116,18,138,103,225,25,38,30,150,249,155,130,215,23,16,20,166,204,25,30,157,94,192,67,98,11,11,118,42,216,181,128,215,104,10,33,68,59,194,53,140,107,25,215,180,121,5,155,23,172,91,192,47,81,118,115,228,90,168,235,161,16,99,143,206,71,209,73,40,158,133, +167,158,120,40,23,19,97,60,15,182,98,193,74,5,171,23,188,191,224,35,5,204,93,229,205,45,176,129,16,66,180,33,92,191,184,150,113,77,251,64,1,23,194,149,11,120,19,44,215,62,174,129,175,43,208,245,80,136,177,71,231,163,232,36,20,207,194,179,148,120,88,230, +245,255,31,190,10,252,25,242,221,162,193,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; -const char* GlobalEditor_864x144_png = (const char*) temp_binary_data_12; +const char* GlobalEditor_864x144_png = (const char*) temp_binary_data_13; //================== OperatorEditor_287x218.png ================== -static const unsigned char temp_binary_data_13[] = -{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,31,0,0,0,218,8,6,0,0,0,159,5,70,254,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,0,7,116,73,77,69,7,222,9,16,3,31,30,140,250,111,181,0,0,0,29,105,84,88,116,67,111,109,109,101,110, -116,0,0,0,0,0,67,114,101,97,116,101,100,32,119,105,116,104,32,71,73,77,80,100,46,101,7,0,0,32,0,73,68,65,84,120,218,237,157,123,124,19,85,250,255,223,147,164,147,82,18,46,77,87,155,254,190,75,139,210,214,181,173,75,91,86,145,149,155,34,119,81,89,92,117, -215,239,42,42,138,171,130,178,224,34,184,32,10,138,11,11,138,178,162,40,136,43,138,138,168,220,4,111,8,42,23,191,189,32,109,193,94,118,105,171,54,181,144,172,154,64,201,180,73,126,127,76,50,77,218,180,180,64,41,109,207,251,245,138,210,201,204,153,147, -121,206,124,230,57,207,121,230,28,9,136,244,127,76,64,119,255,167,27,208,213,191,61,2,208,3,18,2,129,64,208,52,62,192,3,212,2,39,128,99,128,19,248,201,255,113,1,213,128,98,240,11,76,15,32,6,56,63,241,130,248,254,125,122,39,12,176,198,158,127,193,47,255, -231,255,37,136,107,41,16,8,78,133,111,191,251,190,236,200,81,123,121,105,249,183,217,121,135,138,118,0,149,192,209,128,72,73,192,47,129,243,205,166,174,23,13,236,255,155,91,127,147,153,62,204,102,179,1,16,248,191,64,32,16,180,20,171,213,170,253,255,224, -161,111,254,111,219,39,59,151,59,143,29,255,198,47,66,63,74,64,42,144,48,126,204,136,135,99,44,61,7,8,193,17,8,4,173,33,68,110,165,166,112,205,186,119,102,2,135,129,74,61,144,152,116,97,194,240,139,47,74,188,201,86,105,83,35,59,226,35,62,226,35,62,103, -240,227,114,185,232,209,163,123,12,248,220,182,31,142,124,3,28,51,0,221,146,19,47,188,188,41,143,199,235,245,114,226,132,155,154,90,15,62,159,15,165,166,70,72,185,64,112,138,24,244,122,244,122,61,70,57,2,89,150,209,233,58,199,88,142,205,102,227,162,164, -62,191,201,254,186,224,29,160,139,1,232,218,37,210,152,88,125,188,182,193,206,62,159,15,167,235,56,39,220,110,209,98,4,130,51,68,173,199,67,173,199,131,91,81,128,99,116,137,52,210,53,42,170,83,136,80,132,193,112,1,16,5,200,6,32,242,68,245,241,88,73,146, -26,8,207,207,174,99,40,74,13,245,191,19,8,4,103,142,19,110,133,154,218,90,122,118,239,134,78,167,235,208,191,213,225,176,71,2,70,32,66,135,154,199,211,128,99,199,171,81,20,209,189,18,8,206,6,30,143,151,159,126,118,117,154,158,39,160,51,0,186,250,249, -131,94,175,151,227,213,110,154,202,43,220,155,253,181,104,49,109,76,255,204,95,159,181,115,37,38,37,83,86,122,24,69,81,58,204,245,139,181,198,113,253,239,38,160,40,10,91,54,109,68,81,220,56,236,246,211,42,51,218,98,225,129,105,51,152,51,123,102,139,143, -173,169,245,224,118,215,96,52,202,29,189,233,234,0,201,16,78,97,154,235,241,116,49,26,59,188,155,120,78,90,78,167,163,91,183,110,173,122,142,248,132,4,220,110,133,74,91,5,0,55,222,252,7,254,181,102,53,101,165,165,29,230,58,62,244,240,108,62,223,185,131, -252,188,60,50,50,251,161,40,110,62,254,112,251,105,149,41,203,70,82,211,210,78,249,248,106,183,187,51,136,15,1,241,105,216,7,109,198,211,77,47,73,24,141,70,12,6,131,80,131,179,109,53,255,181,111,41,38,147,25,75,140,5,167,211,73,124,66,111,10,242,14,160, -40,10,41,169,105,200,70,35,197,133,133,184,92,78,100,89,230,142,73,147,41,200,207,163,168,168,144,220,236,44,222,125,103,61,182,138,10,173,172,192,49,101,165,135,79,219,91,104,43,175,39,41,41,153,127,173,89,141,221,126,20,103,182,19,69,113,99,50,153, -137,79,72,160,32,63,79,243,100,204,102,179,38,186,41,169,170,176,4,190,15,144,158,217,15,32,228,26,157,90,247,203,211,121,30,162,225,54,214,214,214,138,59,188,3,146,152,156,204,35,115,31,99,233,178,229,254,39,189,194,232,177,227,24,54,124,4,25,153,253, -120,245,245,117,196,90,227,72,73,187,132,248,132,4,18,147,146,200,240,223,84,143,63,177,144,104,75,12,0,51,102,206,230,129,191,204,96,208,224,33,44,127,225,37,250,95,62,160,221,93,139,49,215,140,67,54,202,100,100,246,195,98,137,97,204,53,227,232,127, -249,111,81,20,55,15,252,101,6,233,153,253,144,101,153,167,22,47,197,100,50,3,48,117,218,116,254,247,182,137,12,27,62,130,53,107,215,33,203,170,135,114,207,125,83,120,96,218,116,6,13,30,194,67,15,207,62,237,216,79,103,10,252,52,192,235,245,137,59,181, -131,18,159,144,192,248,107,198,224,114,57,1,216,186,121,99,80,151,65,102,240,144,161,188,249,198,90,138,139,10,217,178,121,19,185,217,89,13,60,134,193,67,134,50,118,228,48,0,118,237,252,140,235,199,79,96,239,158,221,237,234,58,188,252,226,10,198,140, -189,134,151,95,92,1,192,160,33,67,253,33,7,133,249,243,230,176,112,241,82,114,178,178,216,187,103,55,5,249,121,218,239,30,63,110,140,38,56,195,134,143,100,235,230,141,140,25,59,142,241,227,70,163,40,10,131,134,12,229,129,105,211,69,67,107,174,248,212, -15,250,136,129,245,118,210,253,58,133,253,247,238,222,205,49,151,83,59,118,216,240,17,12,28,60,20,139,197,130,53,46,142,173,155,55,105,223,73,245,206,33,1,214,184,56,242,243,15,104,219,247,103,103,241,212,226,37,237,182,205,212,255,173,18,80,94,90,202, -190,221,95,50,250,154,113,140,24,58,8,9,72,72,72,64,150,141,44,95,177,82,59,246,152,203,73,82,82,50,118,251,81,106,20,5,9,40,46,44,60,237,123,72,234,84,226,83,47,143,71,164,245,180,151,216,79,203,27,181,162,184,181,227,76,38,51,83,167,205,96,194,181, -234,83,123,250,204,217,33,229,26,141,114,200,57,36,9,42,109,21,36,37,37,107,219,19,147,146,41,200,203,107,183,109,166,254,239,147,36,213,187,235,63,224,183,124,252,225,118,238,184,107,50,171,86,174,96,127,78,22,46,151,147,251,239,153,20,114,188,44,203, -88,44,49,90,57,113,113,113,167,125,15,117,150,188,58,17,45,238,196,40,138,27,69,113,51,108,248,72,76,102,51,137,73,201,236,243,119,159,246,231,100,115,203,173,19,81,220,10,185,57,117,93,175,74,91,5,57,217,89,204,154,51,143,131,249,121,92,59,126,2,171, -86,190,208,97,174,137,44,203,204,91,176,144,69,79,46,160,32,255,0,207,174,120,137,220,236,44,114,115,178,200,201,206,226,201,69,75,248,248,163,237,152,77,106,16,58,55,39,139,189,123,190,228,201,69,75,216,183,103,55,233,25,253,68,195,106,38,122,32,227, -162,62,189,199,5,111,60,118,188,250,164,7,126,111,251,1,163,24,106,111,163,167,181,58,218,101,138,138,108,209,113,46,167,147,226,162,66,126,250,233,71,64,29,89,217,181,243,51,18,147,147,177,85,84,176,102,213,75,148,149,149,226,114,169,251,185,156,46, -18,147,147,57,240,245,126,10,242,243,248,254,187,111,241,120,60,236,219,179,155,234,234,106,226,19,122,179,246,213,213,33,226,212,158,40,200,207,227,72,85,21,0,54,91,5,101,101,135,1,137,60,255,239,245,120,60,236,254,98,23,6,131,1,135,221,206,238,47,62, -7,9,226,227,123,83,117,228,7,190,57,116,144,234,234,106,62,223,249,25,149,182,10,44,150,24,222,90,183,150,221,95,124,126,90,35,128,93,163,162,58,116,251,253,166,228,240,38,160,74,2,238,188,110,228,149,43,131,191,172,58,122,242,11,183,47,251,0,102,179, -89,12,181,183,145,248,152,205,102,98,99,186,139,139,209,1,57,47,198,210,161,127,223,123,219,62,157,4,228,27,180,96,128,64,32,56,71,158,46,157,227,103,138,62,147,64,32,104,19,78,185,207,100,52,26,137,140,140,20,49,159,182,120,98,232,116,90,130,155,64, -208,233,196,39,45,45,141,232,232,104,33,62,109,36,62,17,17,17,84,126,119,88,92,12,65,251,22,159,6,121,5,205,200,51,208,83,195,79,142,31,196,21,108,211,216,128,8,214,117,76,179,118,14,187,10,183,69,32,16,8,241,17,8,4,66,124,4,2,129,64,136,143,64,32,16, -226,35,16,8,4,66,124,4,2,65,251,197,63,159,79,189,41,53,196,251,22,2,65,155,209,89,238,63,225,249,8,4,130,54,244,124,26,76,38,38,60,31,129,160,205,60,31,145,100,40,16,8,4,66,124,4,2,129,16,31,129,64,32,16,226,35,16,8,132,248,8,4,2,129,16,31,129,160,93, -162,215,119,158,91,82,136,143,64,112,14,33,71,68,116,154,223,218,200,100,98,162,17,8,4,109,65,151,200,200,78,182,104,160,16,27,129,160,205,137,48,24,144,141,157,199,243,17,221,46,129,224,28,64,146,36,186,117,51,117,170,223,44,86,252,19,8,218,218,3,208, -233,232,217,163,27,17,157,108,1,78,33,62,2,65,91,117,179,34,12,68,26,141,68,117,137,236,148,239,83,10,241,233,164,46,190,209,40,19,41,203,232,13,250,78,247,196,21,156,67,226,83,95,115,69,252,185,227,138,142,169,107,23,186,70,69,137,139,33,16,158,143, -224,236,9,79,143,238,102,140,98,165,83,193,57,130,24,237,234,36,116,55,155,132,240,8,206,193,110,151,152,76,172,67,163,215,235,233,210,37,50,236,119,74,77,13,110,183,66,77,109,45,138,82,35,46,150,224,148,145,229,8,12,6,3,70,57,162,89,15,58,209,237,234, -4,116,137,52,54,216,230,245,122,57,118,188,154,99,199,171,197,5,18,156,17,20,165,6,69,169,225,248,241,106,186,68,26,49,155,186,162,211,233,78,38,62,34,228,220,145,137,136,136,104,96,83,215,177,106,142,87,159,16,182,22,180,10,213,39,20,188,94,31,61,123, -116,111,116,31,17,243,233,12,221,174,122,79,31,69,169,241,11,143,64,208,122,184,149,26,170,79,156,16,226,211,153,49,212,203,227,57,161,184,197,69,17,156,21,78,184,21,33,62,130,80,207,71,32,104,235,182,38,196,167,19,82,91,235,17,23,65,112,86,240,249,124, -141,123,228,103,226,4,151,246,191,156,232,104,11,219,182,110,22,87,219,79,108,172,149,113,215,143,71,81,20,182,109,217,140,162,40,56,28,118,113,97,4,130,51,233,249,68,71,91,136,181,90,155,220,71,150,101,250,166,103,116,154,11,59,237,161,153,84,86,218, -248,98,215,78,250,102,100,210,55,35,83,180,54,129,224,76,120,62,38,147,137,62,137,73,40,138,18,86,140,122,197,199,83,82,92,132,203,229,2,96,194,141,55,211,43,62,30,128,131,5,249,97,143,59,25,178,44,115,113,74,42,0,149,54,27,149,149,54,0,46,78,73,69,150, -101,202,203,202,66,188,139,216,88,43,177,86,107,200,190,177,177,86,20,69,65,150,101,162,45,22,14,22,228,135,148,187,63,55,71,59,190,87,124,60,209,209,150,22,215,55,54,214,74,159,164,36,94,255,215,26,28,118,59,251,157,217,218,241,125,18,147,40,47,43,229, -226,148,84,20,69,225,96,65,126,200,177,129,122,212,223,46,16,116,52,244,64,70,74,114,159,113,193,27,93,199,142,159,84,4,86,175,93,135,201,108,38,237,215,191,230,242,223,94,65,121,89,25,251,115,115,232,147,152,196,188,39,22,162,40,10,19,110,188,25,189, -222,128,203,233,228,198,63,222,130,201,108,6,160,240,155,67,167,36,62,207,174,88,73,239,11,46,68,54,26,49,153,205,148,20,23,49,243,145,57,92,61,114,20,93,186,116,225,142,187,239,161,240,155,67,28,57,82,69,159,196,36,254,240,167,91,49,153,205,76,184,233, -102,0,74,138,139,152,112,227,205,92,61,114,36,131,135,94,133,82,83,67,165,205,198,223,151,46,195,227,241,208,43,62,129,95,156,119,62,37,197,69,140,28,61,150,123,238,159,138,162,40,220,115,255,84,74,138,139,56,114,164,170,89,245,156,112,227,205,164,253, -186,47,14,135,157,35,71,170,184,242,234,225,116,239,209,131,146,226,34,230,60,190,128,203,127,123,5,177,214,56,250,102,100,112,253,132,223,107,221,213,153,143,204,33,243,55,151,242,139,243,206,227,174,63,223,199,182,173,155,241,120,78,63,62,99,234,26, -250,34,233,201,236,43,16,156,73,234,183,191,130,194,146,77,64,213,41,121,62,23,167,164,82,82,84,196,194,249,143,105,55,77,128,43,135,93,205,43,47,175,228,139,93,59,137,142,182,240,247,165,207,176,109,235,102,246,231,100,3,240,202,203,43,57,213,115,58, -236,118,30,153,57,35,196,251,234,155,145,201,77,227,175,85,99,79,251,246,50,238,250,241,28,44,200,167,164,184,174,126,151,22,228,51,238,186,241,218,77,30,107,141,227,207,147,110,7,160,111,122,6,38,147,153,109,91,54,107,222,81,224,119,60,244,224,84,28, -14,59,229,101,101,140,28,61,182,217,222,200,43,47,175,100,228,152,177,218,111,189,98,208,224,144,239,75,138,139,180,239,94,125,227,109,162,163,45,184,92,78,122,197,39,104,245,154,54,99,38,87,12,26,194,167,31,127,40,90,175,64,116,187,52,33,72,77,163,164, -184,72,251,251,96,65,62,209,209,22,245,166,189,122,56,125,51,50,153,112,163,234,109,4,186,93,167,75,223,140,204,144,115,2,92,218,127,0,37,69,65,245,200,207,211,132,240,226,148,84,38,220,120,147,191,251,148,16,82,143,128,16,6,186,89,175,188,188,146,191, -47,93,70,73,113,33,47,254,115,57,14,135,157,190,25,153,204,121,124,65,157,96,20,21,158,177,139,30,44,98,14,135,93,141,135,101,100,18,107,181,242,244,242,21,97,247,19,8,58,164,248,248,8,29,14,171,255,119,125,202,202,74,185,106,216,213,218,126,191,236, -21,207,49,151,11,31,62,114,115,178,249,106,239,158,6,79,108,69,81,232,106,50,157,180,236,198,40,200,207,227,134,27,111,14,57,190,172,236,48,125,146,146,180,109,23,38,38,177,63,39,27,31,62,238,123,96,26,207,62,253,15,14,22,228,115,229,176,225,92,123,253, -120,109,63,69,81,66,202,249,228,227,237,124,242,241,118,174,189,254,119,76,123,104,38,51,166,77,161,188,172,148,39,31,127,52,196,27,106,41,161,191,213,231,255,219,135,219,237,14,250,78,221,94,92,84,136,203,233,98,234,189,119,159,113,35,183,212,190,2, -65,107,182,191,211,242,124,190,218,187,155,187,239,185,143,137,119,220,5,192,101,253,7,104,98,179,241,221,119,120,248,145,71,177,90,227,40,43,43,197,106,181,242,246,155,111,144,155,147,197,220,199,159,96,127,110,54,7,243,243,90,236,17,29,44,200,35,218, -114,31,247,77,157,198,183,229,101,148,149,150,114,176,32,143,242,210,82,102,62,50,151,67,254,174,213,11,207,63,167,122,20,118,59,87,12,26,66,124,124,2,151,246,191,188,209,114,47,237,127,57,41,41,105,228,230,100,211,55,61,131,175,246,237,81,127,199,123, -27,88,240,212,98,214,191,249,6,0,118,135,157,175,246,238,105,53,3,57,28,118,74,138,11,89,176,112,49,31,108,221,140,197,98,33,55,39,155,242,178,82,209,122,5,29,146,83,10,56,123,60,30,182,108,122,143,243,206,59,15,187,195,206,139,207,63,75,121,89,41,46, -151,139,35,71,170,200,206,250,138,248,248,4,122,244,232,65,214,255,125,165,5,94,75,138,138,184,228,215,125,57,88,144,215,226,128,179,122,206,247,65,2,179,217,76,225,161,131,252,244,211,79,236,220,241,9,213,213,213,196,199,39,176,250,229,149,90,87,229, -171,189,187,233,209,163,7,178,209,200,218,127,189,194,193,130,124,28,14,59,149,182,138,144,81,184,234,227,213,120,188,30,46,249,117,95,62,219,241,169,38,162,133,223,28,162,164,184,136,139,126,117,49,74,141,210,98,193,60,152,159,167,5,168,43,109,21,148, -151,149,81,93,93,77,73,113,17,229,101,165,218,239,47,41,46,162,178,210,134,199,227,97,231,142,79,1,184,224,130,11,169,170,170,162,164,184,240,148,2,243,39,11,248,53,101,95,89,150,233,125,193,133,103,53,39,233,210,254,151,51,100,232,48,242,14,236,23,119, -100,7,164,126,251,59,88,248,239,77,64,149,4,220,121,195,184,17,33,81,224,170,163,14,188,94,175,184,106,29,132,216,243,98,66,254,174,172,58,218,232,190,163,70,143,101,218,67,15,51,102,248,208,51,34,124,205,97,212,232,177,252,58,35,147,133,243,231,157, -211,215,177,79,98,18,151,245,31,192,218,127,189,210,102,117,184,111,234,52,53,133,163,5,15,135,214,168,119,75,234,81,191,253,189,189,113,251,36,32,63,108,146,161,193,160,23,119,108,71,113,109,245,45,179,229,132,27,111,230,131,45,155,24,53,230,154,70, -247,185,56,37,85,29,105,76,207,212,242,146,122,197,39,208,55,61,19,147,41,116,237,169,192,246,62,137,73,161,79,195,122,199,55,229,137,245,77,207,164,111,122,102,216,114,235,223,100,64,216,114,27,43,167,69,79,112,147,153,95,250,115,213,218,138,196,164, -36,228,22,206,72,217,26,245,62,149,122,132,141,249,212,159,209,37,66,175,167,6,241,242,97,71,32,82,142,104,246,108,77,125,18,147,112,216,237,188,243,214,58,230,60,182,128,141,239,190,19,118,191,185,143,63,65,73,145,218,125,236,155,145,73,165,173,2,147, -73,205,187,90,240,212,98,238,252,211,31,168,172,180,113,105,255,203,185,111,234,95,248,98,215,103,244,205,200,228,171,189,123,120,229,229,23,1,88,180,244,89,28,118,187,150,98,80,94,86,218,160,94,106,170,198,50,190,216,181,19,147,201,132,213,106,101,219, -214,205,140,28,61,150,145,99,198,178,63,39,135,187,255,124,31,75,254,254,36,37,197,69,220,255,192,52,20,183,162,214,199,108,38,218,98,225,129,123,39,55,40,199,104,148,79,41,126,39,5,125,2,34,28,8,55,168,73,183,201,148,151,149,226,112,216,49,153,76,196, -90,227,66,70,104,131,247,15,8,112,83,251,244,138,79,32,58,218,194,254,220,236,176,245,56,213,122,183,180,174,167,91,143,198,246,9,235,249,68,134,153,249,78,208,78,197,199,216,124,91,6,114,161,2,49,169,250,222,74,48,95,236,250,140,23,159,127,142,231,158, -254,7,87,12,26,194,35,51,167,243,226,243,207,177,241,221,119,184,98,240,16,127,121,191,99,201,223,159,228,197,231,159,227,129,123,239,102,220,245,227,145,101,217,159,25,239,230,145,153,211,89,56,127,30,7,243,243,194,123,88,169,105,184,92,78,182,109,217, -196,115,207,44,209,242,180,38,220,120,51,143,252,117,58,175,188,252,34,235,223,124,131,145,163,199,106,199,124,181,111,15,75,22,45,228,177,57,179,233,21,159,160,229,130,185,92,78,94,255,215,43,60,247,204,146,51,50,112,112,219,29,119,49,238,250,223,225, -114,185,136,142,182,240,244,242,23,184,180,255,229,76,123,232,97,254,240,191,183,161,40,10,243,159,90,172,165,160,168,2,248,108,72,87,86,81,20,254,190,116,153,230,45,70,71,91,152,255,212,98,20,69,97,228,232,177,76,123,104,38,125,51,50,121,105,205,90, -122,197,39,156,145,246,208,88,93,207,118,61,26,21,31,57,34,162,193,28,48,130,246,135,193,96,64,150,155,183,246,183,201,100,98,228,152,107,152,112,227,205,60,189,124,5,209,22,11,227,174,27,223,232,254,129,192,190,195,110,167,164,184,72,187,169,20,69,193, -100,82,51,217,47,237,127,185,246,180,84,20,133,242,178,82,250,36,38,169,57,91,65,249,89,245,243,183,130,5,238,211,143,63,226,233,127,190,192,204,71,230,170,79,232,88,43,189,226,19,152,255,212,98,158,94,190,130,113,215,135,214,49,56,135,43,80,151,79,63, -254,144,47,118,237,228,213,117,235,181,114,78,87,120,98,173,86,45,70,117,197,224,33,108,124,111,3,47,62,255,28,143,205,153,165,137,225,167,31,125,200,149,87,15,7,96,228,152,107,216,182,101,83,3,241,81,247,25,1,168,57,114,159,126,244,161,246,118,64,64, -96,55,190,183,129,43,135,13,63,35,109,226,15,255,123,43,219,182,110,110,164,174,103,175,30,90,183,43,28,61,187,155,113,252,248,243,25,73,239,23,156,125,36,73,162,123,11,214,254,30,57,230,26,54,190,251,14,207,61,179,68,139,145,108,216,188,157,231,158, -89,18,54,240,172,184,221,65,55,81,248,201,201,2,98,19,16,151,94,241,9,148,20,23,33,203,198,144,216,75,172,53,174,209,122,109,124,247,29,54,190,251,14,183,221,113,23,211,30,122,152,199,230,204,198,225,176,243,216,223,102,135,13,118,186,156,206,176,229, -172,127,243,13,214,191,249,6,183,221,113,23,119,221,115,31,75,22,45,60,165,235,218,55,35,19,147,201,28,18,28,191,114,216,213,152,76,102,174,28,118,181,42,200,142,163,152,76,102,54,190,251,14,243,253,233,26,35,71,143,229,177,57,179,26,148,183,109,235, -102,166,61,244,48,27,223,125,135,43,135,13,103,225,252,121,33,2,171,9,116,81,209,25,105,23,234,107,61,153,90,214,125,160,174,103,187,30,154,248,132,155,115,67,167,211,209,179,187,153,31,127,118,82,83,83,43,238,230,118,68,96,237,111,131,94,31,214,182, -225,182,141,28,61,150,39,31,127,84,251,206,237,118,243,201,71,219,25,57,122,44,239,215,143,253,248,252,169,145,62,127,226,164,47,184,76,159,118,142,245,111,190,193,204,71,230,178,109,203,102,250,102,100,176,111,207,110,220,110,55,185,57,89,76,123,104, -38,147,38,223,75,77,141,194,165,253,251,83,86,90,218,160,94,125,51,50,73,73,77,163,32,63,143,139,83,82,249,106,239,30,181,220,117,111,48,255,169,69,108,124,119,3,0,78,167,147,47,118,125,22,82,175,224,122,14,29,118,53,86,107,156,86,206,167,31,127,216, -228,60,51,141,225,195,71,73,81,33,207,62,253,15,158,89,254,34,197,69,223,80,105,179,177,63,71,125,113,120,237,171,175,52,56,166,210,86,193,111,7,14,70,81,220,20,135,201,146,47,46,42,68,150,101,117,31,183,155,178,210,195,154,71,57,239,145,89,13,5,182, -254,111,108,102,189,125,62,245,115,176,32,143,131,5,121,13,234,106,183,31,109,181,122,52,182,79,80,158,143,68,253,143,78,167,35,170,75,23,34,34,34,208,73,58,60,94,31,106,57,146,248,156,131,159,136,136,8,186,70,69,209,163,155,217,63,202,21,126,63,215, -177,234,144,191,101,217,72,225,161,67,20,126,243,77,200,246,194,67,135,112,56,28,252,244,211,79,33,219,15,230,231,241,253,119,223,225,241,120,81,20,133,194,111,212,253,64,162,210,102,211,242,168,74,138,139,56,152,159,79,124,66,111,14,28,248,154,127,189, -178,74,43,227,221,245,111,211,189,103,79,126,250,233,39,94,121,233,69,74,138,139,27,156,71,241,79,193,121,209,175,82,248,96,203,38,127,30,148,196,193,130,124,190,255,238,59,18,147,146,81,20,133,188,3,251,181,243,85,218,108,120,60,222,144,122,186,92,46, -244,122,3,137,73,201,124,176,101,19,123,190,252,226,148,174,111,172,53,142,94,241,9,108,219,186,133,74,155,141,251,31,252,11,31,109,251,128,239,191,251,142,63,223,255,0,191,248,197,249,232,13,6,134,143,28,205,254,156,28,245,55,40,53,60,252,183,71,121, -253,95,107,40,252,230,80,216,114,37,36,238,188,251,30,214,190,182,134,195,255,249,143,127,27,252,105,226,29,72,146,68,98,82,50,177,214,255,71,121,89,25,163,198,140,229,139,93,59,253,65,235,230,215,187,79,98,50,95,236,218,201,145,170,170,144,186,14,185, -114,24,121,95,127,221,170,245,48,117,237,26,218,126,138,130,243,124,174,25,177,82,248,11,157,135,166,242,124,4,77,199,197,162,45,49,90,214,121,240,136,80,172,213,202,192,65,67,48,153,205,236,219,179,91,139,137,201,178,204,150,143,118,112,253,152,17,141, -38,169,202,178,204,197,169,105,28,204,15,77,190,237,155,145,73,122,70,38,14,187,157,125,123,119,83,105,179,105,83,178,180,36,7,171,126,189,155,170,107,107,212,163,65,158,207,38,53,207,71,136,143,16,31,65,43,50,241,206,187,136,136,144,121,209,255,218, -79,103,164,49,241,17,115,56,11,4,173,64,159,196,36,158,89,190,130,243,99,173,90,110,147,32,76,192,89,32,16,156,89,74,138,139,152,122,239,100,113,33,78,71,124,106,106,106,56,33,214,242,110,23,200,114,4,17,254,220,30,227,105,166,190,11,4,103,71,124,194, -228,63,135,93,203,91,172,172,123,78,163,212,212,160,212,212,112,172,250,36,107,101,11,59,10,206,38,82,19,226,19,110,28,222,233,58,38,150,212,109,199,28,175,62,129,199,227,165,103,143,110,13,190,59,149,28,23,129,224,84,105,172,189,133,13,56,139,181,188, -59,6,110,69,105,114,173,108,129,160,237,187,93,97,26,109,115,248,98,95,142,184,130,109,200,21,151,157,124,29,52,183,91,161,75,100,164,184,88,130,246,33,62,45,9,44,119,49,26,195,199,21,4,173,134,78,167,163,91,183,110,205,218,87,169,17,131,4,130,115,88, -124,234,199,131,106,107,107,155,21,147,212,75,18,70,163,81,188,1,127,150,145,252,215,189,57,54,242,121,125,205,158,207,71,32,104,149,246,218,216,67,84,92,26,129,64,208,38,30,188,184,4,2,129,64,136,143,64,32,16,226,35,16,8,4,173,73,216,36,67,145,130,214, -62,104,174,157,132,125,5,109,218,78,91,146,100,40,16,8,4,162,219,37,16,8,132,248,8,4,2,129,16,31,129,64,32,196,71,32,16,8,90,138,255,189,8,145,112,223,177,17,246,21,156,123,237,79,120,62,2,129,160,237,60,159,6,227,240,34,17,164,125,208,76,59,9,251,10, -218,180,153,138,60,31,129,64,112,46,33,196,71,32,16,180,93,183,75,18,19,190,180,79,154,105,39,97,95,65,155,54,83,73,120,62,2,129,64,116,187,4,2,129,16,31,129,64,32,16,226,35,56,27,232,197,132,255,130,179,68,83,225,197,70,242,124,68,34,72,187,160,153, -118,170,111,223,136,8,3,158,19,110,113,253,4,173,78,68,68,132,200,243,17,212,33,71,68,136,139,32,56,75,226,99,16,221,46,65,29,93,34,141,66,128,4,173,223,189,215,235,233,26,213,69,136,143,32,20,179,169,43,17,98,189,53,65,43,10,79,247,110,38,36,169,241, -168,143,104,125,157,20,131,65,79,116,207,238,28,59,94,141,219,173,80,83,91,43,46,138,224,140,180,43,89,150,49,69,117,105,82,120,132,248,8,232,26,213,165,73,215,88,32,104,45,68,183,75,32,16,8,241,17,8,4,66,124,4,2,129,160,85,9,191,104,96,51,147,215,140, -70,35,145,145,145,232,68,198,236,217,125,98,232,116,200,178,220,108,59,53,181,95,77,77,45,110,69,161,166,166,22,165,166,70,92,92,193,41,35,71,68,104,1,103,163,124,242,84,142,211,10,56,167,165,165,17,29,29,45,196,167,13,196,39,34,34,130,31,190,47,61,229, -50,188,94,47,199,171,79,112,236,120,181,184,160,130,51,130,82,83,131,82,83,195,241,234,19,68,70,26,49,119,141,106,82,27,78,75,124,12,212,240,179,227,7,113,213,219,33,174,227,213,84,87,159,16,23,66,208,42,156,56,225,198,235,245,210,179,123,183,198,31, -162,226,50,117,206,39,148,16,30,65,171,183,51,165,134,234,38,222,33,20,226,211,9,113,187,149,118,255,27,250,36,37,113,203,173,19,91,173,252,101,207,175,108,149,114,163,45,22,162,45,150,206,211,214,20,69,136,143,32,216,243,105,255,217,204,102,147,153, -94,189,18,90,173,252,140,204,126,173,82,110,122,70,63,210,51,78,94,246,85,87,143,232,48,222,79,187,23,31,89,150,73,207,200,12,249,200,178,28,198,184,225,183,7,120,116,254,147,103,244,201,115,217,229,3,24,53,246,154,118,213,32,106,59,208,171,20,189,226, -19,72,207,200,36,214,106,13,217,102,50,153,232,21,159,64,159,164,164,144,182,17,252,119,253,118,213,212,57,130,203,15,246,190,130,143,175,223,238,82,82,211,72,207,200,12,105,111,5,249,7,40,200,63,208,224,248,148,212,52,109,159,88,171,149,41,15,78,39, -61,35,147,94,241,9,237,218,62,77,141,180,250,39,144,15,125,7,227,100,239,100,180,5,150,152,24,22,63,179,156,131,249,121,117,66,242,200,195,56,28,118,76,38,19,115,231,63,137,217,100,70,81,20,162,45,22,114,115,178,248,199,83,79,54,40,39,37,245,18,140,70, -227,25,251,141,22,75,12,177,214,184,115,242,154,53,102,207,115,185,174,45,248,81,164,164,165,113,251,164,187,113,216,237,12,28,60,148,89,15,77,163,164,184,136,91,110,157,72,180,197,130,226,86,248,98,215,103,252,187,184,152,135,255,246,40,0,46,167,147, -148,191,166,49,249,206,219,0,152,124,239,20,92,46,23,178,44,51,125,230,108,110,185,241,119,33,215,233,178,254,3,152,120,231,93,76,127,224,190,6,215,109,234,131,51,112,43,110,42,109,21,68,71,199,112,187,217,204,148,63,223,5,192,253,15,252,133,148,212, -52,10,242,243,152,126,249,0,158,93,250,15,246,237,221,205,232,177,215,2,176,250,165,23,152,250,224,12,156,78,39,14,199,81,100,217,200,148,7,167,51,249,206,219,200,200,252,13,150,152,24,210,51,127,67,73,113,33,223,150,151,181,115,83,73,141,139,207,169, -230,249,156,109,5,117,216,237,220,127,207,164,6,79,174,101,255,92,201,107,175,174,230,147,143,182,55,187,172,192,111,12,60,113,10,252,162,150,146,154,70,113,81,33,138,191,175,26,109,177,96,50,153,41,47,43,197,100,50,145,152,148,76,89,89,41,14,187,93, -45,11,159,250,223,115,120,2,182,246,96,223,83,248,81,218,3,8,160,184,184,144,145,99,174,225,217,165,139,193,7,142,163,118,158,120,124,174,102,195,88,107,28,83,252,109,231,209,249,79,210,55,61,131,220,156,108,150,45,93,172,21,217,55,35,147,11,19,19,41, -41,42,82,255,78,207,224,182,59,239,226,47,83,239,197,229,114,53,172,2,112,48,63,143,85,43,95,0,96,197,203,107,56,63,54,86,19,195,27,174,27,163,122,92,59,51,185,118,252,4,246,238,249,146,192,138,141,62,159,218,114,74,138,11,181,227,215,190,181,129,158, -209,209,108,221,188,145,89,115,230,177,106,229,138,14,225,157,54,214,222,218,253,139,165,41,169,105,56,93,206,102,11,79,48,179,254,54,15,0,167,203,201,244,191,206,230,238,59,254,196,168,49,215,208,39,41,153,247,55,172,7,96,202,131,211,249,228,163,237, -184,92,78,254,241,244,114,246,238,249,146,27,110,250,35,7,11,242,120,109,205,106,17,64,106,67,236,254,7,0,64,110,118,22,191,191,241,143,117,127,231,102,133,116,141,227,227,19,66,130,200,177,113,113,144,147,205,221,127,190,31,107,92,28,209,150,24,226, -19,122,99,54,153,181,125,166,207,156,77,110,118,86,88,225,9,80,92,84,24,212,165,202,35,37,245,18,92,46,103,200,246,220,156,108,158,88,180,52,236,241,5,65,158,188,221,110,111,50,100,208,209,104,87,226,19,109,177,132,52,160,41,247,76,34,37,237,146,16,67, -143,26,123,13,86,107,28,46,167,147,183,214,189,222,100,12,169,87,66,2,147,239,184,85,109,104,127,157,197,192,193,67,121,239,221,245,76,255,235,108,222,223,176,30,147,201,68,74,234,37,60,241,216,92,126,127,243,31,121,239,221,245,188,191,97,61,178,44,179, -250,181,117,188,245,198,90,161,0,109,72,98,82,178,246,239,248,132,222,90,44,165,62,170,128,56,53,207,39,88,148,18,147,146,153,254,192,125,154,231,17,204,253,247,76,226,137,191,47,97,212,216,107,248,96,243,166,70,235,240,249,206,207,180,127,191,191,97, -61,138,226,14,169,91,159,164,36,10,242,194,215,77,113,135,31,138,118,187,221,66,124,206,37,28,118,123,131,6,100,171,168,224,138,65,67,66,158,68,138,91,97,242,189,83,154,20,159,244,204,126,88,173,113,33,98,86,80,144,71,73,81,17,70,217,168,6,50,51,251, -177,107,231,14,20,69,225,210,254,3,48,155,204,218,40,132,221,110,199,100,54,11,5,104,99,30,157,255,36,7,243,243,24,53,102,28,203,150,46,10,187,79,165,205,70,89,105,41,179,254,54,143,207,119,237,192,106,141,35,39,39,11,187,253,40,214,184,56,6,14,30,66, -223,48,35,80,14,187,157,89,15,77,227,133,151,95,165,32,47,143,242,178,210,6,251,92,117,245,8,20,69,161,87,175,4,44,22,139,182,79,110,118,22,179,254,54,143,130,130,60,174,187,126,2,171,94,106,89,23,42,55,59,139,219,39,221,205,174,157,59,180,110,160,16, -159,115,140,220,156,44,102,205,153,71,172,213,74,165,205,70,73,81,17,46,167,243,164,199,21,23,21,134,125,26,2,124,176,101,35,195,134,143,160,111,70,63,22,47,92,0,192,254,156,44,20,69,17,93,173,115,132,226,162,66,38,222,114,35,38,179,153,65,131,135,178, -248,169,5,90,23,230,181,87,87,227,114,133,182,129,71,31,153,201,192,193,67,73,76,74,166,184,168,144,202,138,10,92,46,23,115,31,153,201,160,193,67,249,244,163,237,188,189,110,173,214,118,238,159,124,167,38,64,247,223,115,39,178,108,12,91,143,101,75,23, -19,107,141,163,164,184,48,68,252,22,63,181,128,244,204,126,164,164,166,177,224,241,57,154,128,108,221,188,49,232,216,69,84,86,84,132,252,29,136,37,62,241,248,92,6,14,30,138,213,26,39,196,231,92,192,100,54,115,251,164,187,181,191,223,122,99,45,14,187, -157,197,79,45,224,217,231,95,226,131,45,27,41,200,207,227,210,254,3,154,229,69,21,23,21,242,196,223,151,240,193,150,141,88,173,113,236,221,179,155,242,178,82,182,110,222,200,11,171,94,197,233,116,106,79,178,173,155,55,242,143,103,150,211,181,171,137, -253,185,217,164,164,166,105,129,66,193,217,199,229,114,169,177,24,255,3,39,152,112,30,138,162,40,97,227,130,37,69,69,97,111,238,220,156,236,16,207,169,49,20,183,91,139,15,214,63,223,190,61,187,217,183,103,119,3,47,44,248,220,245,235,18,220,62,195,149, -219,145,208,3,25,191,74,188,96,92,240,198,115,241,101,67,69,81,200,251,58,151,74,91,69,208,199,134,199,227,161,164,168,136,207,119,238,240,7,13,19,168,180,217,216,240,246,155,28,169,170,106,80,206,193,252,60,190,255,238,91,60,30,15,159,125,250,9,0,23, -92,216,7,155,205,70,137,127,148,75,81,20,14,124,157,203,135,219,182,106,193,70,151,203,197,238,47,118,113,254,249,231,243,63,191,252,37,251,246,236,230,72,85,21,14,187,157,255,252,187,164,201,160,100,155,139,118,215,40,206,117,251,182,71,250,36,37,83, -80,144,167,121,43,130,230,181,191,67,197,135,55,1,85,18,112,231,248,209,87,133,228,146,255,112,68,92,204,142,196,249,191,8,77,170,20,246,21,180,101,251,219,176,245,147,73,64,190,152,195,89,208,110,169,245,120,240,212,122,58,102,151,196,160,199,160,215, -119,104,251,181,155,36,67,193,169,211,81,237,235,58,118,28,215,177,106,186,117,51,171,191,41,36,145,86,7,120,155,56,250,76,124,79,43,156,67,194,249,179,19,83,215,46,116,55,155,58,100,251,11,17,31,129,160,61,34,33,209,37,42,146,56,107,28,62,124,120,106, -106,33,36,149,223,71,211,171,133,7,237,70,208,174,62,95,93,57,129,34,66,182,249,15,168,191,79,232,29,87,175,46,52,171,30,122,191,96,81,138,0,0,28,104,73,68,65,84,131,158,50,119,13,82,39,176,159,16,31,65,59,127,172,170,255,59,118,188,154,138,242,111,209, -27,12,72,146,20,164,7,62,124,170,122,248,247,151,66,116,163,161,160,213,105,81,176,166,168,165,72,33,251,5,235,86,227,85,243,249,247,149,78,162,119,62,140,178,204,121,231,157,23,168,162,16,31,129,224,92,71,39,73,56,28,255,229,191,63,254,136,193,104,36, -210,40,135,127,153,81,146,192,235,5,157,206,47,50,62,255,102,9,9,73,21,24,73,2,159,132,215,235,5,201,167,149,227,243,169,231,209,202,241,249,37,68,242,59,66,65,221,190,192,63,181,242,53,25,244,31,26,210,13,145,252,213,242,97,140,52,214,149,33,196,71, -32,104,31,158,143,94,175,67,142,144,233,214,221,76,183,110,102,116,146,206,239,117,72,33,226,227,243,121,209,73,58,36,73,194,235,243,250,183,249,208,235,116,32,73,232,144,240,225,197,227,241,106,229,34,73,120,60,94,36,80,203,149,84,193,82,95,14,245,225, -245,120,144,116,122,36,212,185,177,125,254,46,151,20,44,122,190,58,183,202,231,243,161,211,73,117,106,132,15,175,207,7,94,95,167,138,183,10,241,17,116,8,253,209,73,58,12,6,29,166,174,81,244,232,102,70,175,215,251,5,66,187,191,241,249,125,17,157,36,33, -73,18,58,157,14,143,199,163,121,55,122,189,94,245,120,252,222,144,215,171,138,132,78,167,3,159,143,90,143,7,73,39,161,247,139,151,199,191,175,42,56,18,58,29,90,121,234,121,37,240,121,85,9,148,212,137,255,3,101,6,234,67,80,183,203,229,58,222,169,236,38, -196,71,208,129,36,72,2,36,116,58,61,122,189,30,159,175,78,72,2,65,227,128,215,19,216,174,238,231,67,167,211,161,247,127,188,62,31,94,175,23,189,94,135,215,235,197,235,245,162,147,36,109,232,91,242,119,219,130,69,43,32,66,129,242,180,238,149,4,58,41,208, -189,146,208,235,85,143,73,210,73,117,221,49,159,207,223,245,235,92,163,204,98,26,85,65,7,65,82,93,28,73,21,162,128,240,4,255,91,146,164,160,1,171,186,120,79,157,64,133,11,13,251,143,243,139,146,79,43,179,97,250,66,112,156,201,231,243,214,117,205,252, -93,173,128,87,21,124,108,232,210,50,58,58,83,150,75,216,60,31,65,7,243,9,58,129,125,125,106,48,37,100,60,42,48,105,156,36,233,252,2,36,249,5,72,210,60,21,157,78,135,78,167,83,247,163,97,160,87,239,23,135,64,92,200,227,245,226,241,248,130,186,102,222, -16,145,10,17,67,234,98,67,154,151,21,180,191,118,94,255,62,106,128,187,243,180,63,209,237,18,180,123,135,39,248,31,190,160,255,170,55,127,157,240,224,143,241,250,188,30,191,16,233,180,27,67,175,243,119,177,130,60,20,0,143,63,128,28,232,90,249,124,62, -53,248,44,161,197,149,60,30,143,38,36,117,49,159,192,140,133,117,2,164,117,225,252,251,226,171,19,48,85,184,164,78,101,58,33,62,130,246,31,234,169,243,51,144,36,112,29,171,230,251,138,74,124,18,72,62,9,73,39,225,243,250,2,250,163,142,68,249,71,190,234, -198,164,36,144,124,218,104,84,64,190,116,146,132,87,139,201,168,98,226,245,121,67,134,224,37,80,207,225,243,169,251,227,67,242,213,13,182,7,60,42,41,48,44,239,223,106,208,235,249,229,255,196,97,54,117,213,196,167,211,117,187,36,73,180,225,14,237,28,116, -22,251,74,62,124,62,9,167,235,24,199,142,87,243,11,75,52,17,17,17,212,212,214,162,215,233,52,17,146,36,9,157,94,237,78,121,61,94,106,106,106,137,136,48,224,241,120,212,124,30,157,14,175,215,131,199,235,213,68,74,39,233,208,235,245,232,244,58,106,106, -106,209,249,149,204,171,6,116,212,64,118,96,100,204,31,243,169,245,120,208,75,122,144,64,175,211,83,235,243,32,249,212,99,60,181,30,116,122,29,158,218,218,208,174,91,39,106,127,194,243,17,116,168,62,152,26,115,150,136,136,136,160,155,217,76,215,168,46, -106,44,72,175,3,159,127,68,202,160,215,186,59,94,79,93,87,72,169,169,65,246,139,149,207,231,195,231,245,250,61,22,73,243,128,34,34,34,208,235,116,212,212,214,226,118,187,49,248,51,170,117,58,29,114,68,132,150,251,227,169,245,168,195,250,58,29,110,183, -27,163,209,72,77,77,13,58,255,16,125,96,132,45,34,34,66,187,65,131,131,222,162,219,37,16,180,171,216,143,218,103,49,155,187,82,235,169,69,111,208,225,245,121,209,251,99,44,6,189,30,189,94,167,138,130,94,205,221,209,69,24,240,249,61,28,157,94,13,62,7, -146,8,61,30,47,122,157,42,58,129,46,150,33,66,175,230,249,232,36,53,1,209,47,120,90,80,217,160,211,226,60,30,143,58,92,31,25,105,68,146,116,68,26,101,124,72,232,60,181,126,193,81,69,50,48,34,38,225,235,84,189,16,33,62,130,142,228,247,160,147,116,116, -51,155,233,222,205,28,50,140,30,220,181,1,48,232,245,120,245,122,188,254,81,44,157,127,40,93,146,36,60,181,181,106,66,162,191,11,230,241,168,211,118,4,70,198,128,208,192,113,32,252,164,141,174,129,193,160,215,226,59,6,189,94,75,72,172,59,198,71,96,244, -45,80,22,157,44,232,44,242,124,4,29,3,127,100,55,240,38,67,132,193,128,20,52,76,30,60,2,21,8,0,123,181,104,177,164,5,148,213,46,154,62,200,123,169,27,201,10,94,239,77,231,31,29,147,130,142,213,233,116,254,191,117,254,110,149,90,53,111,189,209,50,181, -155,166,215,70,192,130,135,227,133,231,35,16,180,195,110,151,68,96,196,200,27,146,183,227,13,242,58,116,254,55,222,9,74,10,212,105,121,54,146,63,232,236,11,201,7,2,117,88,93,231,207,108,38,100,120,28,237,88,175,127,8,62,224,253,120,189,117,229,4,11,85, -176,8,5,188,168,186,115,117,50,207,199,31,176,215,62,130,14,230,20,52,195,190,178,44,135,172,23,222,28,18,147,146,153,242,224,244,51,86,207,41,15,78,15,89,215,188,229,191,81,253,129,250,128,7,18,184,157,195,101,49,7,9,129,218,37,146,252,163,86,146,118, -124,168,40,248,223,225,10,18,139,96,111,200,231,245,170,239,108,17,20,60,14,58,79,176,247,21,120,249,52,248,245,12,205,131,210,53,79,124,212,53,222,251,145,30,102,201,159,166,136,182,88,206,184,205,130,215,40,107,73,251,19,221,46,129,191,81,198,48,111, -193,194,22,29,99,50,153,73,76,78,62,229,115,246,138,79,8,105,184,137,201,201,141,46,81,19,14,189,161,238,109,40,45,92,18,184,217,131,68,39,208,29,10,126,197,193,227,79,248,171,243,72,234,142,13,188,231,165,211,233,66,186,75,129,248,79,64,112,130,179, -163,67,186,80,65,30,140,65,111,104,32,98,170,7,166,171,19,28,255,249,165,22,244,185,162,45,49,252,99,217,114,110,191,235,110,86,191,182,142,245,239,111,57,169,8,168,162,101,60,45,155,69,91,44,13,108,102,50,157,218,250,117,162,219,37,104,17,170,135,116, -73,227,98,148,148,140,205,191,186,72,160,177,202,178,17,89,150,177,88,98,180,239,100,89,230,150,91,39,226,176,219,49,153,204,228,230,100,133,60,209,235,47,57,28,182,241,234,245,72,120,26,4,127,130,3,204,129,0,113,96,202,140,218,218,90,205,211,8,116,185, -164,160,119,186,124,1,145,242,11,138,26,243,241,79,123,17,36,34,193,175,74,4,191,13,175,150,163,230,0,25,12,134,144,132,196,64,125,2,1,236,128,103,164,197,146,36,169,69,157,46,135,253,40,247,79,86,215,157,251,253,205,127,100,202,180,233,218,223,245,9, -120,72,54,91,69,88,123,6,219,204,100,50,107,11,98,90,173,113,216,237,71,41,47,43,85,109,246,167,137,40,138,130,201,100,14,89,33,54,61,163,31,138,226,14,89,254,89,136,143,224,140,50,123,206,99,68,199,88,40,43,45,37,62,33,33,228,137,248,220,138,151,216, -187,251,75,172,113,113,148,149,150,178,98,249,50,250,95,254,91,110,184,233,15,148,151,150,98,183,31,101,208,144,161,60,60,99,154,38,84,149,182,10,20,69,209,196,103,234,180,25,216,108,21,152,77,102,100,163,204,195,51,166,53,222,120,13,186,32,215,222,167, -102,49,251,189,32,189,78,79,77,109,109,136,247,131,20,24,30,175,123,3,61,248,101,46,31,80,235,63,70,231,15,28,27,12,146,63,118,163,211,222,31,11,196,126,124,18,218,219,237,190,224,248,143,63,238,4,254,243,249,131,225,94,175,7,41,48,151,144,215,131,78, -210,7,29,131,230,125,157,10,46,167,19,199,209,240,171,146,204,155,191,80,179,89,98,82,50,138,226,214,132,231,217,21,47,81,144,119,0,139,37,6,187,253,40,203,150,46,86,187,211,211,166,55,176,89,192,211,113,57,157,40,138,162,61,28,110,191,235,110,202,74, -85,113,154,124,223,148,70,5,80,136,143,224,148,49,153,204,164,164,165,49,225,218,49,106,163,155,52,153,244,204,76,0,250,95,254,91,222,219,176,158,183,222,88,139,44,203,188,254,246,187,172,90,89,183,68,240,220,71,102,2,80,89,105,99,224,224,161,172,90, -185,130,226,162,66,246,231,100,135,172,226,185,111,239,110,222,122,99,45,0,235,223,223,130,201,100,110,176,250,104,128,136,8,189,250,174,150,207,71,143,238,221,57,225,58,70,141,187,134,31,108,71,181,87,25,130,187,83,146,20,152,12,76,141,253,4,2,208,58, -157,206,159,227,163,247,103,41,171,175,72,104,19,20,74,161,211,176,214,122,124,120,188,30,127,128,59,48,75,80,64,116,8,204,137,232,31,45,83,189,40,117,207,192,203,101,234,247,30,143,71,11,126,251,240,225,243,130,100,104,190,248,168,139,104,78,38,214, -106,197,26,23,199,178,37,139,195,199,134,50,251,49,110,212,48,0,174,27,63,129,171,134,171,75,126,15,28,50,148,220,236,44,86,44,95,166,93,239,192,191,205,102,179,102,179,146,226,34,70,141,185,134,101,75,23,147,155,157,77,165,173,34,196,102,185,217,217, -154,173,95,127,251,93,162,45,150,102,173,101,38,196,71,208,108,210,51,251,145,147,157,21,212,232,178,52,241,185,172,255,0,122,37,36,48,112,240,16,205,189,15,184,238,229,165,165,218,49,197,133,133,220,114,235,196,70,207,145,27,84,126,224,6,107,76,124, -244,6,29,17,178,58,137,152,217,20,69,84,159,222,154,72,132,143,159,4,36,64,170,251,51,240,151,68,19,199,157,57,2,1,215,186,23,79,125,161,65,88,157,58,41,89,176,87,215,24,138,91,33,55,59,139,203,46,87,87,232,13,215,77,77,76,74,14,233,30,229,100,103,105, -226,115,89,255,1,164,166,93,66,74,90,154,102,179,248,132,222,0,148,5,219,172,168,144,27,110,250,67,163,245,8,46,223,110,63,218,236,184,157,16,31,65,179,41,46,42,12,89,174,58,184,219,85,80,144,71,89,89,105,136,183,163,5,150,131,246,75,76,78,214,110,18, -69,81,26,236,235,116,58,155,93,31,79,173,7,217,32,225,58,230,64,242,129,164,15,140,24,129,116,14,14,89,251,124,62,188,158,192,219,237,170,167,83,27,232,46,250,188,120,124,32,121,37,60,181,53,72,242,201,215,236,82,20,55,185,57,89,20,228,31,224,149,181, -111,146,146,154,214,32,230,18,232,106,5,95,255,0,251,115,178,81,20,133,197,11,23,52,136,15,133,28,147,148,28,82,174,44,203,13,68,240,84,16,226,35,104,224,198,7,216,186,121,163,22,132,4,168,180,85,224,114,57,153,62,115,54,229,101,165,140,26,115,141,230, -149,124,252,225,54,94,92,245,42,178,44,179,111,207,110,82,210,210,120,109,205,106,0,44,150,24,102,205,153,71,121,89,41,191,191,233,143,60,60,227,65,213,203,201,201,226,247,55,253,17,91,69,133,22,243,105,9,53,138,132,132,1,215,207,213,180,175,55,194,125, -13,60,161,96,223,204,28,213,21,131,161,249,11,6,42,138,194,51,75,22,49,125,230,108,238,190,253,79,33,162,30,8,220,207,154,51,143,131,249,121,154,215,19,176,217,45,183,78,100,202,131,211,249,124,231,103,12,28,60,132,101,75,213,174,155,108,148,153,53,103, -30,37,197,69,252,254,166,63,176,96,222,92,205,51,157,50,109,58,101,165,165,33,30,207,169,160,7,50,146,47,76,56,231,215,106,23,156,58,93,163,186,112,50,251,42,110,55,7,190,222,143,205,86,81,247,169,168,208,130,147,193,130,228,241,120,208,235,245,60,255, -220,50,10,242,243,176,219,143,82,125,252,56,31,127,184,13,107,92,28,241,9,9,252,223,190,189,84,85,253,64,98,82,50,30,143,135,143,63,220,142,53,46,142,23,159,95,206,55,135,14,2,240,159,127,151,240,211,79,63,146,152,156,204,215,251,115,41,46,42,196,86, -241,189,54,26,84,144,119,128,239,190,45,15,25,29,10,185,81,253,19,116,5,62,134,246,248,49,132,255,132,206,112,72,120,123,237,207,165,170,234,7,0,190,251,246,91,138,139,10,113,58,157,13,108,246,241,135,219,81,20,5,89,150,121,249,197,21,154,205,60,30,15, -59,62,249,136,30,61,123,114,193,133,23,146,147,157,205,119,223,150,19,27,23,135,44,27,217,186,121,35,241,9,9,252,235,149,85,28,248,58,87,235,154,149,149,149,146,154,118,9,249,121,7,248,230,208,65,202,74,15,107,231,172,111,195,112,237,175,240,223,165, -117,107,181,95,59,98,72,200,90,237,85,71,29,226,142,237,64,156,23,19,77,91,217,119,244,216,113,164,103,246,99,193,188,57,194,16,237,40,182,55,122,236,184,51,102,179,250,237,239,253,237,159,213,173,213,46,133,9,203,9,58,14,109,105,95,135,221,78,121,89, -169,104,83,237,136,99,78,231,25,181,153,36,98,62,130,182,96,223,158,47,217,183,231,75,113,33,218,17,197,69,133,39,77,240,60,19,136,215,43,4,2,65,155,32,196,71,32,16,180,9,103,188,219,117,203,109,183,115,221,248,9,76,24,55,186,213,42,29,107,141,227,158, -251,166,208,203,159,16,149,155,157,197,178,37,139,90,237,124,189,18,18,184,231,190,169,152,76,102,100,163,145,226,194,111,26,228,70,180,22,215,253,238,6,102,60,252,8,191,237,247,107,209,90,5,29,80,124,206,80,68,242,201,69,75,235,146,145,90,49,194,232, -114,57,121,111,195,122,45,55,100,245,107,111,146,158,217,239,148,114,69,154,131,195,110,231,249,231,158,161,188,172,84,251,157,3,135,12,229,243,157,59,90,213,56,189,226,19,24,53,118,28,182,138,239,79,239,122,138,17,5,65,91,34,157,133,110,215,51,75,22, -241,218,154,85,173,254,91,92,46,103,136,208,148,151,30,62,173,105,2,154,115,190,128,240,4,60,175,112,217,185,103,18,89,150,153,61,247,113,22,204,251,91,139,166,153,16,8,58,101,183,171,178,222,235,250,103,131,88,107,28,41,105,151,240,204,210,69,173,122, -158,196,164,100,174,29,63,129,140,204,223,240,218,154,85,173,62,130,115,251,164,201,124,242,209,54,202,203,74,177,196,196,136,150,42,16,226,115,46,17,107,141,99,201,178,127,178,104,225,130,102,189,69,123,58,216,237,71,249,228,195,237,56,236,118,174,29, -127,195,41,191,18,208,28,210,51,250,17,159,208,91,123,195,88,32,16,226,115,14,10,207,51,75,22,157,149,60,18,135,221,142,195,110,39,55,39,11,69,81,184,110,252,132,86,19,159,41,211,102,0,240,236,138,151,180,109,207,174,120,137,185,179,255,218,234,34,43, -16,8,241,57,135,132,167,87,124,130,22,243,81,103,218,203,12,153,114,224,76,51,241,150,27,67,254,254,242,255,190,230,254,201,119,138,214,218,14,153,242,224,12,94,123,117,21,14,187,157,196,164,228,179,146,188,215,206,196,167,53,134,67,90,111,72,229,246, -73,147,137,79,232,205,146,101,255,212,182,229,100,255,95,179,103,80,107,41,131,134,92,201,45,183,78,196,86,81,65,82,242,69,108,217,244,62,171,86,190,192,217,29,54,18,195,93,167,251,0,81,20,229,172,199,37,213,121,169,35,1,137,219,39,77,110,114,102,198, -142,139,116,246,60,159,192,76,119,173,197,19,143,205,229,137,199,230,158,181,75,247,218,154,213,218,244,16,109,193,111,127,211,87,60,38,195,96,50,153,137,182,88,112,185,156,196,199,247,166,32,255,0,138,162,144,146,154,134,44,27,41,46,42,196,229,114,34, -203,50,119,76,154,76,65,65,30,197,133,133,90,119,185,87,124,2,22,75,140,118,92,99,231,8,76,61,26,60,167,77,224,28,129,249,141,131,183,53,86,94,160,13,5,234,173,40,10,86,107,28,101,101,135,67,186,211,177,214,56,172,214,56,109,190,101,151,211,217,232,132, -106,237,25,145,225,44,104,183,36,38,37,51,123,238,99,252,227,153,229,164,103,246,67,81,20,70,143,29,199,85,87,143,32,61,179,31,175,172,93,167,142,134,166,94,66,175,132,4,250,36,38,145,158,169,78,164,62,122,236,56,102,60,60,155,244,204,126,188,176,234, -213,176,203,6,37,38,37,243,228,226,37,164,103,246,99,212,216,113,218,4,91,83,30,156,206,244,153,234,177,131,134,12,213,202,11,156,119,253,251,91,195,46,1,20,88,29,36,49,41,153,133,139,151,50,117,218,116,210,51,251,241,226,170,87,181,217,8,19,147,146, -121,110,197,74,6,14,30,194,236,185,243,120,114,209,146,102,173,74,33,98,62,130,118,77,77,77,13,165,223,217,56,98,255,239,89,61,111,76,207,30,252,79,220,249,68,117,137,108,241,177,241,9,9,76,24,55,70,243,12,130,231,22,150,101,153,65,67,134,242,214,27, -107,41,46,42,228,131,205,155,52,175,231,170,171,71,48,119,246,76,28,118,59,101,101,135,25,53,118,92,131,89,0,7,14,30,138,227,168,61,100,118,70,89,150,25,54,124,164,54,39,114,128,224,243,154,76,38,210,51,251,241,201,135,219,27,173,119,172,53,142,219,254, -120,35,138,162,80,86,118,152,129,131,135,178,111,207,110,6,14,30,202,91,235,94,215,230,177,222,248,193,199,29,214,126,66,124,4,26,255,46,251,14,199,143,63,19,41,203,218,122,85,173,141,207,231,227,232,127,127,228,248,137,19,244,77,105,249,19,126,223,238, -221,33,93,146,171,134,143,96,208,160,161,68,199,88,176,90,227,216,186,121,83,131,99,2,147,170,7,175,83,86,92,88,24,166,155,180,138,91,110,189,157,215,223,126,151,189,187,191,100,197,242,101,164,103,246,11,59,131,223,85,195,71,112,89,255,1,88,227,212, -46,83,73,113,81,147,245,46,46,42,212,186,102,142,163,118,109,106,210,148,212,180,144,20,139,250,115,90,119,36,251,25,26,15,7,9,58,10,205,181,175,227,199,159,49,69,69,33,203,242,73,103,210,59,83,120,189,94,34,35,35,27,204,11,220,92,220,65,179,246,153, -76,102,166,62,56,131,9,215,142,70,81,20,166,207,156,29,42,58,70,245,28,138,162,80,86,122,152,5,243,230,54,25,128,86,20,133,85,43,87,240,218,154,85,76,159,57,155,223,223,252,71,222,123,103,61,83,253,169,16,1,162,45,22,238,185,119,10,127,184,225,122,20, -69,97,214,156,121,39,173,119,253,217,6,131,69,41,120,84,44,120,254,235,246,106,63,49,159,143,224,164,232,80,23,186,59,91,13,23,234,22,245,235,210,165,203,105,151,165,40,110,20,197,205,176,225,35,49,153,213,64,241,190,61,187,1,117,178,244,91,110,157,168, -174,248,144,147,197,251,27,214,243,228,162,37,188,189,238,117,64,77,34,13,236,27,224,186,241,19,144,141,70,108,21,234,170,14,111,175,123,29,151,203,73,126,222,1,230,205,95,200,190,189,234,254,31,127,184,13,89,54,50,112,200,80,226,227,123,19,159,208,155, -253,57,217,167,244,27,62,223,185,131,217,115,31,195,173,184,73,207,232,135,53,46,174,195,218,79,15,100,252,170,79,111,49,135,115,7,198,212,140,57,156,1,190,183,85,97,52,26,207,106,227,5,117,46,102,163,209,136,41,170,101,49,3,151,83,157,28,253,167,159, -126,4,192,227,241,176,107,231,103,36,38,39,99,171,168,96,205,170,151,40,43,43,213,38,81,119,57,93,36,38,39,115,224,235,253,124,115,232,32,37,69,133,92,244,171,20,109,36,171,254,136,210,241,227,199,233,18,21,197,121,231,159,207,134,183,223,212,188,145, -207,119,126,198,127,254,93,194,69,23,95,204,129,175,247,115,164,170,138,47,191,216,69,106,218,37,124,115,232,32,175,173,89,141,205,86,65,117,117,53,37,69,69,84,218,42,240,120,60,20,228,231,113,164,170,10,151,211,201,193,252,60,109,132,43,248,119,28,169, -170,226,192,215,251,185,228,215,233,124,246,233,199,244,232,222,147,3,95,231,114,164,170,234,164,215,227,92,181,95,253,246,247,77,73,208,28,206,215,143,28,26,50,135,243,15,98,14,231,14,197,249,245,230,208,109,204,190,251,178,15,96,54,155,49,24,12,103, -189,241,154,205,102,98,99,186,119,122,91,5,150,151,174,180,85,208,43,62,129,231,86,188,164,117,35,79,26,255,58,71,237,87,191,253,189,187,109,71,221,28,206,2,129,224,220,192,98,137,97,202,180,233,106,12,231,168,157,69,11,23,180,250,12,10,109,133,161,201, -136,144,160,99,32,236,219,110,40,46,42,108,181,76,253,115,173,253,137,36,67,129,64,208,38,8,241,17,8,4,66,124,4,2,129,16,31,129,64,32,16,226,35,16,8,132,248,8,4,2,129,16,31,129,64,32,196,71,32,16,8,132,248,8,4,2,33,62,2,129,64,16,150,70,38,144,23,116, -44,132,125,5,231,94,251,19,158,143,64,32,16,221,46,65,27,63,159,36,9,73,18,94,146,176,159,16,31,193,89,38,50,50,178,205,26,239,217,158,0,75,216,175,237,237,39,230,243,17,104,196,89,99,169,62,225,198,227,241,156,213,243,70,68,68,240,139,152,24,240,186, -133,17,58,145,253,194,78,32,47,28,239,14,230,142,55,211,190,221,186,70,18,19,19,67,183,238,61,206,218,234,7,160,174,128,224,56,82,137,78,52,188,211,226,92,181,159,152,64,94,112,82,140,114,4,120,220,56,29,63,156,245,115,235,133,240,116,58,251,137,142, -182,64,32,104,19,132,248,8,0,117,33,189,112,75,6,11,206,125,187,165,103,244,35,61,163,159,16,31,65,251,36,218,18,195,163,65,43,120,10,218,143,221,22,47,91,206,196,187,238,102,245,107,235,120,251,253,45,244,105,39,107,187,171,226,35,137,143,248,248,91, -68,51,246,75,207,236,71,122,102,63,117,53,77,255,223,193,223,167,164,165,129,4,38,179,153,94,9,9,152,204,102,210,51,251,209,39,57,153,232,24,139,182,159,201,108,166,79,114,50,72,234,106,162,193,101,138,79,243,63,14,251,81,166,220,51,137,137,255,123,19, -111,175,123,93,93,253,162,145,125,83,210,210,66,174,115,192,86,193,182,13,216,163,190,237,98,227,226,180,253,100,163,28,114,108,96,159,102,183,51,218,105,192,89,237,34,92,18,178,173,32,255,64,131,37,70,210,51,250,133,221,46,56,117,30,157,191,144,88,107, -28,95,237,221,141,203,233,164,188,172,148,103,87,188,196,21,151,246,13,217,231,134,235,198,144,152,148,204,196,73,119,3,234,138,161,118,251,81,210,51,250,241,232,35,51,1,184,238,119,19,232,218,213,76,73,81,33,79,252,125,169,182,116,113,180,197,194,172, -135,166,137,139,125,10,56,93,78,109,49,194,250,76,255,235,108,82,82,211,248,124,215,103,40,138,155,215,214,172,214,108,21,32,96,203,104,75,12,243,230,47,196,233,114,178,63,39,155,178,210,195,140,26,51,142,233,15,220,11,192,168,177,227,232,21,159,64,65, -126,30,139,159,94,174,217,174,87,66,2,83,238,105,222,234,27,237,82,124,162,45,49,44,126,102,57,5,249,7,234,26,252,35,51,113,216,237,152,76,102,30,157,191,16,147,217,140,162,184,177,88,98,200,205,206,98,241,83,11,78,235,156,151,93,62,160,193,114,186,157, -141,148,212,52,82,82,211,66,26,235,201,143,185,132,107,71,13,195,229,114,34,203,50,183,252,105,34,38,147,25,151,203,201,168,49,227,248,203,212,123,73,73,77,195,97,63,170,217,104,197,203,175,18,107,141,107,114,29,117,65,29,38,179,153,219,39,77,38,54,214, -74,108,92,28,203,150,46,110,176,79,172,53,142,171,134,143,96,212,85,131,154,93,110,98,242,69,76,184,118,180,102,135,219,39,77,38,218,98,193,97,183,51,106,204,56,22,63,181,128,88,107,28,138,226,214,108,183,248,233,229,164,164,166,81,144,159,215,49,197, -7,234,92,205,250,30,209,179,207,175,228,181,87,87,243,201,71,219,155,117,51,21,228,231,145,146,154,134,221,110,167,210,86,65,180,197,66,124,124,111,236,246,163,148,151,149,2,48,112,240,80,174,189,126,2,138,91,161,172,236,176,38,114,137,73,201,216,108, -21,157,230,38,137,181,198,145,155,157,213,162,99,138,139,10,181,101,136,21,69,97,215,206,29,92,53,124,4,37,69,133,216,237,71,169,180,85,48,122,236,56,210,51,251,177,236,249,149,254,253,220,196,39,36,8,241,105,38,138,91,33,55,59,139,75,251,15,0,160,196, -191,172,115,48,214,83,176,93,126,222,129,16,27,124,242,209,118,6,14,30,74,110,118,22,70,89,166,164,168,144,107,199,79,32,49,41,89,179,93,64,12,59,172,231,211,212,83,214,233,114,54,75,120,2,221,131,226,162,66,28,118,59,159,124,180,29,69,113,51,229,193, -25,148,151,149,210,39,49,137,146,226,34,222,122,99,45,3,7,13,193,98,177,144,158,217,15,167,255,70,122,246,249,151,216,187,231,75,172,214,56,202,74,75,121,225,159,203,58,124,35,175,180,85,144,24,38,152,105,63,122,84,243,102,234,7,59,21,37,52,235,245,131, -45,155,152,242,224,116,18,19,147,121,127,195,122,0,114,179,179,184,56,37,77,115,233,5,45,20,31,197,77,110,78,22,5,249,7,88,253,218,155,97,61,15,167,203,25,214,118,138,162,104,222,76,172,53,174,73,219,189,183,225,109,30,157,191,16,139,37,134,247,222,93, -239,15,119,228,97,179,85,52,187,171,213,33,196,39,218,18,19,162,182,83,238,153,68,74,90,26,197,65,170,63,106,236,56,172,214,56,92,78,39,111,173,91,27,182,156,207,119,125,198,7,155,55,134,116,223,0,122,197,39,48,111,254,66,86,173,92,193,7,91,54,1,176, -106,229,10,173,220,247,55,172,231,173,117,107,145,101,153,181,111,189,203,234,151,86,180,251,216,82,192,125,15,176,117,243,198,144,39,95,65,126,30,78,151,147,89,127,155,71,65,65,30,138,162,240,193,230,141,124,190,115,7,83,30,156,78,65,65,30,3,7,13,109, -242,58,4,158,202,233,153,253,88,182,116,145,42,62,57,89,220,125,239,20,166,255,117,54,159,239,218,65,74,234,37,188,183,225,237,70,99,23,130,198,68,72,97,217,210,69,76,255,235,108,238,190,227,79,33,118,40,41,42,164,172,180,148,71,231,47,100,223,94,53, -124,240,193,230,141,236,250,108,7,83,30,156,65,110,78,22,151,245,31,128,211,249,115,19,189,13,59,138,91,97,212,152,107,152,120,203,77,90,185,178,108,100,214,223,230,241,201,199,219,73,76,74,102,235,230,141,205,178,93,135,234,118,217,42,42,184,98,208, -208,16,151,95,113,187,153,124,239,148,70,197,39,216,21,237,21,159,192,237,147,38,163,184,221,244,74,232,221,168,251,120,89,255,1,196,199,39,112,197,224,33,234,121,109,21,152,204,230,118,125,179,56,236,71,153,53,35,52,200,235,114,58,27,236,55,229,158, -73,164,164,170,35,38,123,253,49,176,197,79,45,96,224,224,161,88,173,113,60,241,248,28,162,45,49,218,245,15,23,127,120,226,177,185,254,152,92,221,205,49,125,234,189,12,28,50,148,148,212,75,212,174,90,152,115,11,194,219,45,240,192,4,216,183,71,29,8,144, -101,99,131,135,192,244,7,238,165,87,124,2,131,134,12,213,108,247,194,63,151,105,182,91,182,116,177,214,230,29,246,163,97,109,183,248,169,5,152,204,102,173,43,173,182,137,59,185,106,248,200,22,219,174,67,117,187,114,115,178,152,53,231,49,45,88,89,210, -194,70,124,251,164,201,124,190,115,7,159,124,180,157,148,212,52,30,157,95,151,247,34,27,141,218,191,15,230,231,81,94,86,170,121,66,29,229,169,153,155,211,188,152,64,65,126,94,3,183,254,243,157,59,66,158,144,0,46,151,51,108,252,161,210,86,1,182,208,109, -46,151,51,196,3,21,52,223,110,245,109,209,84,176,183,188,172,148,215,214,172,110,212,118,1,187,40,138,210,108,219,5,60,224,51,210,237,210,235,245,103,253,205,216,211,237,34,188,245,198,90,28,118,59,139,159,90,192,179,207,175,228,131,45,155,40,200,63, -160,5,225,154,131,221,126,148,203,252,251,95,214,127,128,246,228,40,200,63,192,163,243,23,114,213,213,35,200,205,201,226,227,143,182,241,194,203,175,18,17,33,243,213,222,221,164,164,165,53,48,232,185,66,184,41,22,218,131,125,5,29,131,166,166,248,208, -3,233,191,74,236,61,46,120,99,77,109,45,181,181,231,110,227,84,20,55,121,95,239,167,210,63,210,20,248,120,60,30,74,138,10,249,124,231,103,234,168,85,66,111,42,109,21,108,120,251,77,142,84,85,53,40,231,96,126,30,223,127,247,173,118,35,238,207,201,66,111, -48,96,177,196,240,214,155,107,217,183,119,55,14,187,29,143,199,195,238,47,118,145,154,118,9,182,138,10,42,109,54,62,249,104,59,113,113,255,143,248,132,222,100,125,181,47,108,249,231,2,114,68,4,93,34,141,180,39,251,10,58,14,225,218,223,161,226,195,155, -128,31,36,96,226,248,209,87,174,10,254,178,250,132,155,159,157,46,113,229,58,0,93,163,186,96,234,26,133,176,175,224,92,105,127,27,182,126,122,7,144,111,0,106,165,122,51,110,68,69,70,226,62,161,160,212,212,136,171,215,142,209,235,245,152,162,162,16,246, -21,156,75,237,15,240,0,94,29,160,124,247,125,197,143,245,191,53,155,186,18,17,33,166,251,105,207,134,239,222,205,212,104,159,91,216,87,208,22,237,175,162,162,162,22,80,0,143,14,56,246,227,79,63,255,187,254,193,6,131,158,232,30,221,49,117,141,18,141,180, -29,97,48,24,136,138,234,130,165,103,119,34,12,134,38,246,19,246,21,156,253,246,231,241,250,190,5,170,1,197,0,56,13,178,49,191,162,162,34,51,46,46,46,108,159,173,107,84,23,113,85,59,112,159,92,216,87,112,182,168,241,120,15,1,78,224,132,30,232,121,196, -254,223,170,40,217,240,27,79,109,109,79,115,51,223,203,16,8,4,130,150,240,245,129,188,35,255,254,214,182,216,227,241,126,7,56,244,64,36,32,69,118,233,82,89,171,156,184,200,83,91,219,221,233,116,34,68,72,32,16,156,9,42,42,42,248,207,225,210,35,39,106, -121,230,191,63,57,15,0,71,0,167,4,88,128,158,192,249,128,245,162,11,126,121,139,167,70,201,168,81,220,191,20,151,77,32,16,156,14,134,8,217,102,144,141,249,135,191,171,124,213,173,212,148,3,63,0,14,192,37,1,81,254,143,217,47,66,61,128,110,254,109,50,106, -34,162,88,91,64,32,16,52,23,31,234,112,186,130,26,92,118,2,63,2,255,5,126,6,142,3,238,255,15,177,173,18,134,62,227,250,56,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; +static const unsigned char temp_binary_data_14[] = +{ 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,31,0,0,0,218,8,6,0,0,0,159,5,70,254,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199,111,168,100,0,0,42,68,73,68,65, +84,120,94,237,157,107,136,101,89,149,231,179,180,91,243,209,86,101,101,102,101,101,70,190,51,35,34,51,50,51,30,25,239,136,27,239,136,140,200,168,200,180,179,170,108,203,71,217,85,150,218,182,35,232,96,151,96,183,14,66,53,66,13,136,130,80,32,20,72,33, +130,130,136,35,50,162,51,142,72,139,126,80,63,40,50,168,31,212,153,193,154,129,41,161,177,190,116,194,124,216,179,127,251,198,138,92,113,98,159,251,136,251,136,115,206,93,1,63,206,57,123,175,189,247,185,103,173,253,63,235,156,115,227,158,125,254,111, +191,231,176,231,180,231,154,103,218,115,203,243,164,231,221,158,103,61,239,243,188,223,48,12,163,10,104,5,154,241,180,231,109,158,117,207,140,167,223,115,214,115,196,115,192,243,70,79,16,158,243,158,81,207,70,239,165,115,255,188,177,186,240,223,222,255, +204,83,127,248,231,255,240,188,251,244,63,254,123,195,48,140,186,248,167,231,63,236,254,246,157,143,255,15,175,37,255,114,189,175,231,243,94,91,222,234,25,247,92,244,32,64,36,61,251,206,120,70,223,242,87,7,159,190,179,190,252,95,17,156,191,123,246,169, +192,91,111,205,27,134,97,236,10,209,17,132,232,238,198,202,79,189,198,60,227,181,102,194,115,206,243,144,103,223,117,207,237,191,185,187,254,227,127,247,254,119,71,59,49,12,195,104,132,247,190,251,9,247,206,183,221,249,141,215,154,187,158,65,207,163, +158,125,165,203,221,231,255,227,71,254,254,153,104,35,195,48,140,102,240,158,167,222,234,110,12,92,121,197,107,206,188,135,91,61,251,214,31,191,189,250,47,143,111,44,69,27,192,198,234,172,91,158,27,119,115,83,195,110,102,242,134,155,24,190,110,24,198, +46,153,30,31,12,115,233,230,194,164,187,189,58,23,157,115,69,228,214,210,148,123,251,227,235,255,221,107,206,29,79,31,226,243,182,247,60,245,215,255,39,102,124,103,109,206,205,79,143,68,15,160,97,24,205,97,161,52,218,49,34,244,206,39,31,251,55,175,57, +79,121,184,244,218,247,244,223,252,245,234,14,35,132,103,214,178,28,195,104,11,83,99,3,29,33,64,43,115,99,206,107,206,223,122,120,186,190,239,189,49,241,89,156,25,139,30,36,195,48,90,67,105,98,104,199,60,44,26,155,226,243,156,135,199,238,251,222,151, +20,31,20,56,118,112,52,190,157,177,199,196,252,210,42,158,126,199,147,209,242,60,243,246,39,238,184,111,124,253,107,238,115,159,125,209,221,221,88,117,235,55,231,163,118,245,192,113,250,234,87,190,28,173,171,133,213,197,169,109,115,177,104,108,138,15, +95,70,228,145,251,190,247,39,197,135,27,97,177,3,163,33,248,15,188,249,205,238,208,129,3,70,155,121,203,161,67,238,212,201,147,81,191,52,11,38,17,19,82,182,191,253,173,111,186,229,185,169,109,54,121,231,231,63,251,169,251,212,39,158,15,159,21,1,250,232, +135,63,24,181,171,135,15,125,224,217,208,111,172,174,22,184,213,161,231,98,209,80,226,51,25,21,159,90,238,245,188,241,129,7,220,225,7,31,116,199,142,28,49,218,204,35,71,143,186,139,231,207,71,253,82,9,196,67,206,240,76,18,41,127,238,153,119,133,237,217, +201,225,176,205,242,123,223,253,78,152,144,212,137,141,216,235,54,205,200,22,246,2,142,195,159,94,123,45,124,6,142,11,89,16,159,133,117,157,229,97,167,69,152,207,29,203,2,233,71,104,68,124,184,247,163,231,98,209,168,42,62,83,163,3,209,3,163,49,241,217, +59,118,43,62,76,140,31,254,224,251,97,114,32,44,148,189,240,233,79,134,203,132,151,191,248,82,152,140,8,15,118,175,190,250,199,144,237,136,29,219,210,15,229,63,249,241,143,66,59,202,245,228,204,11,124,222,215,95,255,115,88,178,255,124,38,142,5,159,255, +183,191,249,117,16,25,132,72,127,62,108,128,207,173,5,230,149,47,189,28,182,185,132,99,217,136,248,128,158,139,69,163,170,248,196,14,72,18,19,159,189,163,17,241,97,50,73,134,147,132,108,231,227,31,251,72,88,103,2,97,47,117,34,62,76,200,63,252,254,119, +91,229,47,126,230,133,48,129,101,59,79,36,5,21,241,97,157,44,8,1,226,120,72,25,199,236,87,191,252,197,150,61,117,146,13,234,126,16,107,19,159,116,76,124,114,78,35,226,195,164,209,101,220,243,96,226,49,97,200,124,100,178,165,137,15,246,100,79,82,206,37, +136,158,148,121,34,77,124,100,91,215,115,63,136,227,195,113,17,40,227,243,179,46,118,28,51,189,189,27,244,92,44,26,38,62,57,167,17,241,97,82,201,182,92,86,72,38,196,165,148,76,64,214,99,226,195,100,35,43,144,114,196,136,203,14,217,206,19,105,226,163, +51,31,50,59,202,184,31,164,51,62,129,99,167,251,161,15,19,159,116,76,124,114,78,179,196,135,137,195,217,28,1,225,210,137,9,39,19,240,165,47,124,62,100,56,201,75,11,218,32,76,244,195,37,6,19,50,118,3,54,15,196,196,71,46,175,248,76,172,243,249,16,35,108, +16,35,236,184,52,229,179,203,205,118,202,0,161,226,216,152,248,164,99,226,147,115,118,43,62,242,84,71,151,177,141,208,112,9,193,100,146,9,197,196,67,148,228,204,47,34,36,117,76,64,185,89,43,229,121,67,127,38,142,67,218,211,46,125,204,68,168,249,252,28, +7,41,71,216,17,175,100,251,221,160,231,98,209,48,241,201,57,187,21,31,35,31,232,185,88,52,76,124,114,142,137,79,177,209,115,177,104,152,248,228,28,19,159,98,163,231,98,209,104,138,248,28,220,191,223,157,56,126,220,117,157,56,97,180,153,211,93,93,238, +74,111,111,212,47,70,254,209,115,177,104,52,69,124,38,198,198,220,250,218,154,219,88,95,55,218,204,157,141,13,247,196,221,187,113,191,24,185,71,207,197,162,209,28,241,49,12,163,37,232,185,88,52,76,124,12,35,195,232,185,88,52,76,124,12,35,195,232,185, +88,52,76,124,12,35,195,232,185,88,52,76,124,12,35,195,232,185,88,52,76,124,12,35,195,232,185,88,52,76,124,12,35,195,232,185,88,52,76,124,12,35,195,232,185,88,52,76,124,12,35,195,232,185,88,52,76,124,12,35,195,232,185,88,52,76,124,12,35,195,232,185,88, +52,76,124,12,35,195,232,185,88,52,76,124,12,35,195,232,185,88,52,76,124,12,35,195,232,185,88,52,76,124,12,35,195,232,185,88,52,76,124,12,35,163,116,252,235,146,99,7,197,48,140,214,179,80,26,221,54,23,139,134,137,143,97,100,148,91,75,211,219,230,98,209, +48,241,49,140,12,82,26,31,220,54,15,139,136,137,143,97,100,141,145,235,110,125,165,180,109,30,22,17,19,31,195,200,16,83,163,3,29,33,60,96,226,99,24,25,160,52,49,228,150,231,198,221,157,181,185,109,243,175,200,152,248,116,58,62,197,159,159,30,118,171, +11,147,29,115,198,53,178,129,137,79,167,226,69,135,51,173,246,181,97,180,19,19,159,78,196,11,207,218,210,212,54,63,27,70,187,49,241,233,64,184,196,210,62,54,140,189,192,196,167,195,168,244,149,253,245,229,146,91,156,25,115,51,147,55,162,109,13,163,86, +136,161,197,153,209,138,25,182,137,79,135,17,187,207,115,123,117,46,136,78,204,222,48,26,101,126,122,36,196,88,50,238,76,124,58,140,216,153,136,255,33,138,217,26,70,179,152,245,153,80,50,238,76,124,58,140,199,86,102,182,249,151,255,31,138,217,25,70,179, +185,153,184,215,104,226,211,97,104,223,2,215,229,49,59,195,104,54,115,83,195,219,98,207,196,167,195,208,190,5,254,129,49,102,103,24,205,102,114,180,127,91,236,153,248,116,24,218,183,230,95,163,221,232,216,107,186,248,188,240,233,79,186,143,126,248,131, +209,186,78,229,237,79,220,113,223,248,250,215,220,231,62,251,162,187,187,177,234,214,111,238,221,164,215,190,221,141,127,13,163,17,116,236,53,93,124,94,254,226,75,65,128,98,117,2,147,239,67,31,120,54,90,87,68,126,254,179,159,186,79,125,226,121,247,244, +59,158,12,2,180,151,226,172,125,187,27,255,26,70,35,232,216,107,138,248,136,152,48,185,146,226,195,153,158,186,217,201,225,173,178,87,190,244,178,251,246,183,190,185,163,188,30,104,71,123,208,153,68,172,12,200,62,146,229,146,133,80,199,190,83,166,251, +21,59,160,62,89,86,11,140,241,167,215,94,11,109,151,231,166,194,88,178,15,244,41,227,201,248,154,180,242,70,208,190,173,213,191,134,209,44,116,236,53,44,62,76,158,87,95,253,99,16,147,239,125,247,59,238,15,191,255,221,150,248,48,113,126,251,155,95,7,65, +226,236,207,100,98,50,178,14,148,51,33,147,125,86,131,49,233,151,241,232,67,50,9,182,127,242,227,31,133,75,28,246,73,79,114,246,15,91,218,137,136,176,141,253,15,127,240,253,176,207,216,203,254,126,245,43,95,222,234,151,58,246,23,209,164,158,207,64,121, +45,208,215,235,175,255,57,44,105,199,126,200,241,161,79,246,153,177,216,15,234,164,29,235,192,103,193,78,202,27,69,251,182,22,255,26,70,51,209,177,215,176,248,48,65,245,164,97,162,200,228,98,226,200,68,127,238,153,119,109,217,49,17,65,218,212,11,253, +235,49,129,254,17,28,217,126,241,51,47,184,151,190,240,249,109,54,82,206,100,103,157,125,208,19,155,125,101,91,103,71,240,171,95,254,98,75,36,233,51,214,111,37,244,126,177,223,90,124,184,12,99,29,65,69,164,88,71,44,25,83,218,32,76,124,62,217,110,4,237, +219,90,252,107,24,205,68,199,94,195,226,195,4,150,9,4,100,7,50,185,152,116,76,48,129,179,188,180,105,68,124,146,99,2,247,84,180,32,49,129,153,180,172,139,240,145,225,144,153,105,17,68,140,164,13,176,239,98,131,224,32,10,247,238,221,219,246,57,154,41, +62,250,178,138,63,150,31,255,216,71,194,165,154,30,179,89,247,137,180,111,107,241,175,97,52,19,29,123,13,139,15,19,69,50,9,144,75,24,214,153,104,146,249,104,152,188,141,136,15,194,35,2,34,200,37,158,108,179,15,50,6,89,132,76,114,198,214,226,35,251,154, +4,17,37,115,99,29,49,74,102,67,245,80,73,124,244,37,156,136,15,99,49,166,148,55,19,237,219,90,252,107,24,205,68,199,94,195,226,67,118,192,228,98,82,35,66,156,177,101,114,201,165,16,217,5,153,137,46,103,114,113,54,39,179,208,253,213,130,76,78,4,2,33,66, +88,232,71,238,155,48,30,245,220,220,197,158,114,201,114,244,189,149,164,248,32,148,124,14,246,11,59,132,149,114,198,64,40,176,165,143,122,47,129,234,21,31,64,196,177,101,31,24,191,17,241,211,104,223,214,226,95,195,104,38,58,246,26,22,31,96,226,51,161, +152,180,76,18,61,81,16,0,38,57,19,72,196,0,100,162,239,70,124,4,4,13,49,144,241,16,66,38,43,253,234,73,77,61,118,236,35,54,178,31,216,232,125,101,157,207,64,251,164,192,80,46,98,165,219,212,130,238,43,246,180,75,234,116,150,40,199,148,49,249,76,141,28, +39,141,246,109,53,255,234,99,213,46,36,142,98,117,70,254,209,177,87,85,124,248,53,253,88,39,70,62,209,190,133,152,141,128,240,181,234,242,47,141,100,54,154,85,56,113,112,146,138,213,181,11,238,161,214,123,34,108,197,126,215,179,31,58,246,170,138,143, +253,176,84,113,136,253,144,88,204,78,64,120,184,244,139,221,183,19,8,102,50,36,108,88,151,178,88,27,178,40,109,39,232,246,149,196,71,236,146,89,41,237,98,101,100,139,149,198,171,247,242,89,67,123,185,124,223,43,184,156,215,25,126,45,180,98,191,235,217, +15,29,123,85,197,199,126,235,165,56,196,222,253,29,179,3,46,125,56,163,17,172,242,148,50,6,2,69,61,247,223,68,172,216,230,254,159,206,154,232,143,32,149,108,138,203,96,169,163,92,218,241,208,32,38,62,156,89,229,59,88,60,8,144,75,51,108,185,119,198,248, +250,43,17,148,201,126,232,251,124,244,131,157,244,147,20,166,90,73,78,98,182,229,210,152,49,216,150,125,97,153,28,135,122,189,93,205,134,186,164,88,54,67,124,234,221,215,70,247,67,199,94,85,241,225,167,53,99,157,24,249,35,246,238,239,152,29,112,195,91, +38,56,98,145,150,86,19,120,114,99,158,123,112,250,137,35,147,92,218,33,0,250,94,27,95,95,96,157,64,102,44,105,163,159,150,106,232,27,65,73,222,251,98,60,41,211,89,147,60,32,96,157,122,249,14,149,136,85,218,231,169,21,61,137,89,50,54,235,244,203,62,33, +134,124,102,246,155,241,57,78,50,193,249,204,250,123,92,128,13,15,107,98,54,92,38,209,23,125,210,183,216,52,42,62,105,251,218,202,253,208,177,87,85,124,192,126,118,33,255,164,189,251,59,102,75,80,234,239,54,17,140,60,48,136,217,234,73,149,60,171,210, +86,130,146,62,164,28,36,96,233,87,38,46,104,1,73,130,45,66,72,54,195,36,161,61,162,34,251,9,114,63,131,117,125,179,92,63,73,76,246,35,229,245,32,159,149,236,73,239,63,227,203,254,115,28,217,15,214,25,75,178,61,189,174,161,47,105,43,54,34,92,178,159,76, +124,177,105,84,124,210,246,181,149,251,161,99,175,38,241,217,184,57,19,238,23,196,58,51,114,64,133,119,127,199,236,153,156,4,151,108,51,137,57,211,105,27,129,192,147,245,74,226,163,3,20,177,226,143,64,166,141,190,172,163,189,4,117,26,236,155,236,31,34, +34,19,66,163,199,6,254,116,61,48,150,136,85,189,176,223,8,42,232,203,16,198,37,83,96,41,80,206,49,148,12,130,99,33,130,173,161,31,177,23,27,218,165,9,108,61,147,94,208,62,162,47,252,170,251,166,188,149,251,161,99,175,38,241,1,4,136,87,186,198,58,52,178, +75,181,119,127,199,218,48,161,117,214,0,76,28,61,201,4,2,79,214,43,137,15,130,194,54,103,81,150,34,30,8,7,227,145,61,0,235,49,241,161,111,130,157,75,65,82,127,185,212,163,140,254,228,107,23,216,81,174,199,6,17,31,236,164,31,62,147,216,215,11,237,184, +68,228,56,177,207,34,38,149,50,55,217,79,45,182,73,232,139,207,166,109,56,198,49,129,109,84,124,216,215,88,6,6,173,218,15,29,123,53,139,143,192,15,144,115,227,210,30,193,103,155,90,223,253,157,108,71,112,197,68,134,224,138,5,152,182,149,51,164,108,115, +115,82,7,43,182,4,188,220,75,18,176,97,194,18,236,164,255,160,235,129,50,234,17,142,228,13,81,250,147,73,47,109,147,99,139,200,240,25,232,135,236,46,217,79,61,232,73,204,184,114,223,138,254,153,140,236,167,140,35,109,16,30,50,165,74,130,71,59,50,12,125, +140,16,234,152,192,54,42,62,180,69,100,98,251,218,170,253,208,177,87,183,248,24,197,34,22,32,70,117,146,66,139,176,138,216,49,17,153,188,160,5,78,132,73,182,99,208,111,76,156,98,2,171,199,172,149,228,126,167,237,107,171,246,67,199,158,137,79,135,19,11, +16,163,53,112,35,87,103,23,157,136,142,61,19,159,14,39,22,32,70,115,33,163,224,114,133,39,71,177,250,78,66,199,158,137,79,135,19,11,16,195,104,21,58,246,234,18,31,123,151,119,126,168,229,93,217,16,107,107,24,173,66,199,94,77,226,99,239,242,206,55,105, +239,202,134,152,189,97,180,10,29,123,53,137,143,253,127,87,254,137,189,43,27,98,182,134,209,42,116,236,85,21,31,123,151,119,113,72,190,43,27,98,118,134,209,42,116,236,85,21,159,90,223,229,237,219,26,123,72,204,39,73,146,239,202,134,152,157,97,180,10, +29,123,85,197,167,214,127,42,101,2,28,120,243,155,221,161,3,7,140,54,242,150,67,135,220,169,147,39,163,62,73,146,124,87,54,196,236,12,163,85,232,216,171,42,62,177,14,98,188,241,129,7,220,225,7,31,116,199,142,28,49,218,200,35,71,143,186,139,231,207,71, +125,18,67,251,182,30,255,26,70,51,208,177,103,226,147,115,76,124,140,60,161,99,207,196,39,231,152,248,24,121,66,199,158,137,79,206,49,241,49,242,132,142,61,19,159,156,99,226,99,228,9,29,123,38,62,57,199,196,199,200,19,58,246,76,124,114,142,137,143,145, +39,116,236,153,248,228,28,19,31,35,79,232,216,51,241,201,57,38,62,70,158,208,177,103,226,147,115,76,124,140,60,161,99,207,196,39,231,152,248,24,121,66,199,158,137,79,206,49,241,49,242,132,142,61,19,159,156,99,226,99,228,9,29,123,38,62,57,199,196,199, +200,19,58,246,76,124,114,142,137,143,145,39,116,236,153,248,228,28,19,31,35,79,232,216,51,241,201,57,38,62,70,158,208,177,103,226,147,115,76,124,140,60,161,99,207,196,39,231,152,248,24,121,66,199,158,137,79,206,49,241,49,242,132,142,61,19,159,156,211, +168,248,76,141,13,68,237,12,163,233,140,152,248,20,138,70,197,135,183,153,198,236,12,163,217,240,10,111,29,123,38,62,57,167,81,241,225,69,130,49,59,195,104,54,75,179,99,219,98,207,196,39,231,52,42,62,192,25,41,102,107,24,205,98,122,124,208,221,89,155, +219,22,119,38,62,57,167,25,226,243,216,202,140,43,77,12,69,237,13,163,81,16,158,245,149,210,142,184,51,241,201,57,205,16,31,97,121,110,220,68,200,104,26,188,237,120,113,102,108,71,198,35,152,248,228,156,102,138,143,97,180,19,19,159,156,99,226,99,228, +21,19,159,156,99,226,99,228,21,19,159,156,99,226,99,228,149,166,137,207,193,253,251,221,137,227,199,93,215,137,19,70,27,57,221,213,229,174,244,246,70,125,18,67,251,54,201,250,114,41,220,32,180,71,239,70,163,16,67,139,51,163,110,109,105,42,26,107,208, +52,241,153,24,27,115,235,107,107,110,99,125,221,104,35,119,54,54,220,19,119,239,198,125,18,65,251,86,184,189,58,23,68,39,102,111,24,141,194,183,232,137,177,100,220,53,79,124,140,92,160,125,43,44,148,70,163,182,134,209,44,102,19,255,90,1,38,62,29,134, +246,45,220,90,154,142,218,25,70,179,225,95,121,116,236,153,248,116,24,218,183,192,117,121,204,46,79,60,253,142,39,221,75,95,248,124,180,174,25,124,239,187,223,137,150,55,202,221,141,85,183,126,179,115,230,216,220,212,240,182,216,51,241,233,48,180,111, +129,111,161,198,236,242,196,135,62,240,172,251,246,183,190,25,173,107,6,175,190,250,199,104,121,163,188,240,233,79,186,79,125,226,249,104,157,230,163,31,254,96,180,60,111,76,142,246,111,139,189,92,138,207,236,228,112,8,56,77,154,77,178,92,211,236,51, +26,65,66,64,197,234,178,130,246,109,86,253,91,47,248,25,241,121,251,19,119,194,186,206,38,40,35,22,200,142,88,215,109,244,54,72,204,60,247,204,187,182,149,107,241,161,159,88,182,66,185,142,203,100,61,125,38,247,77,103,62,186,61,235,218,230,183,191,249, +117,40,103,93,202,243,138,142,189,92,138,15,78,120,253,245,63,187,159,255,236,167,91,232,58,93,254,167,215,94,75,21,132,102,159,209,24,231,229,47,190,20,173,203,10,218,183,89,245,111,189,48,49,241,37,39,147,111,124,253,107,97,93,38,53,162,244,195,31, +124,63,44,63,254,177,143,132,50,226,2,59,208,39,160,175,126,229,203,193,127,44,117,76,73,156,144,165,252,228,199,63,10,34,33,117,2,246,140,35,109,117,38,198,58,237,168,163,47,17,61,198,146,216,164,13,54,236,147,236,47,229,212,19,235,216,198,68,45,111, +232,216,203,173,248,232,224,16,150,231,166,130,115,37,200,170,33,65,37,224,92,125,54,228,108,165,3,141,58,9,106,150,216,51,166,212,155,248,236,13,248,129,236,64,182,241,193,231,62,251,98,88,103,18,191,242,165,151,183,234,136,29,38,183,108,255,234,151, +191,136,102,20,156,180,196,183,196,9,89,45,237,98,194,3,196,163,140,9,180,199,150,62,254,240,251,223,109,149,191,248,153,23,182,4,47,41,62,210,158,118,58,54,147,113,154,103,116,236,21,74,124,228,12,152,44,79,67,219,18,164,32,103,30,202,88,39,88,196,134, +32,18,1,34,216,9,106,206,86,114,221,110,226,179,55,224,119,157,193,112,242,17,31,226,83,125,207,4,31,225,119,226,71,144,122,252,137,61,101,247,238,221,219,18,37,50,15,218,104,113,73,162,251,145,109,78,94,196,6,125,74,57,151,84,212,177,158,20,31,125,185, +165,99,179,158,152,206,58,58,246,10,113,217,37,129,199,19,15,4,67,236,8,22,237,224,36,226,84,206,78,18,16,128,160,16,8,4,143,148,179,205,89,146,117,198,145,62,181,16,154,248,236,13,201,147,14,254,145,167,95,76,124,234,165,14,97,210,190,22,36,179,97,157, +204,131,248,18,241,145,44,136,19,78,242,126,144,64,159,201,204,135,54,196,141,206,202,228,210,141,245,164,248,200,120,96,226,227,137,117,176,215,232,9,175,193,177,186,156,64,33,32,98,182,32,78,37,32,9,22,236,4,57,139,145,237,48,30,103,69,201,130,168, +71,136,180,61,229,38,62,123,3,226,130,255,56,241,224,111,252,42,151,207,73,241,65,88,240,157,100,68,226,47,98,5,95,19,11,244,67,31,34,6,18,39,244,137,141,92,142,105,136,1,68,6,209,67,196,68,96,24,143,117,198,99,223,104,47,251,83,171,248,80,71,191,250, +150,64,94,209,177,87,40,241,225,114,136,116,89,7,7,142,142,217,130,56,88,2,47,89,15,56,93,130,70,250,213,65,163,49,241,217,27,240,11,49,129,31,57,254,122,146,178,158,20,11,4,65,124,165,47,149,136,21,105,15,216,81,174,179,29,202,229,190,159,134,24,67, +184,136,21,78,82,210,22,88,167,142,88,210,2,195,186,244,69,134,164,219,232,49,177,161,79,45,162,121,69,199,94,110,197,7,225,32,80,4,169,195,73,8,5,142,198,225,156,113,170,137,15,96,131,45,109,232,79,130,130,37,41,184,190,167,32,227,203,24,4,28,229,38, +62,157,11,241,83,4,113,104,53,58,246,114,41,62,156,33,112,180,70,215,115,118,66,16,16,2,4,65,223,200,211,232,179,11,125,138,120,32,40,201,179,80,242,108,135,0,33,62,32,253,99,163,207,108,89,68,251,54,171,254,205,35,60,70,79,139,51,227,62,58,246,114,41, +62,198,238,209,190,53,255,26,237,70,199,158,137,79,135,161,125,91,36,255,142,12,246,185,161,235,189,133,132,207,22,251,204,121,68,199,158,137,79,135,161,125,91,36,255,246,245,92,112,103,79,159,116,215,175,246,186,107,87,122,220,181,62,205,229,196,118, +146,102,212,55,127,12,62,203,153,83,39,195,103,139,125,230,60,162,99,207,196,167,195,208,190,45,146,127,175,246,94,112,151,253,36,93,91,94,116,171,203,11,110,121,110,198,45,207,207,42,146,219,41,204,109,178,181,173,218,73,249,182,50,191,30,179,209,236, +216,151,26,240,253,172,46,45,184,222,75,23,194,103,139,125,230,60,162,99,207,196,167,195,208,190,45,146,127,131,248,116,151,197,167,52,53,225,46,156,234,114,221,231,206,186,158,243,231,92,183,135,101,207,249,179,97,189,59,44,61,231,252,186,167,92,183, +147,94,181,126,191,143,114,123,89,7,236,180,109,12,25,151,125,136,215,169,109,191,223,215,122,186,221,98,105,218,245,120,241,233,51,241,49,138,128,246,109,145,252,43,226,179,190,178,228,250,46,247,186,195,135,14,186,99,71,30,118,167,79,62,234,206,116, +157,216,137,191,156,57,67,157,95,158,101,253,20,101,39,194,165,219,185,211,93,229,229,153,46,191,126,202,219,151,235,41,3,218,96,19,56,115,42,216,148,215,105,231,161,79,101,187,173,255,173,109,169,47,151,151,41,151,157,246,251,119,237,114,143,91,156, +217,20,31,187,236,50,138,128,246,109,145,252,27,196,199,79,84,196,231,250,213,43,238,248,225,195,174,251,194,89,55,60,120,205,141,14,245,123,174,187,49,191,220,226,198,64,40,27,247,203,137,225,65,191,237,203,134,125,153,95,78,140,12,186,137,209,33,55, +53,122,195,77,142,110,214,121,88,159,28,27,10,118,227,158,201,145,33,95,230,237,198,176,27,242,109,176,245,125,210,222,67,27,198,160,79,233,131,182,140,45,75,246,141,190,216,143,113,191,31,172,99,63,58,120,221,45,148,166,76,124,140,226,160,125,91,36, +255,138,248,220,242,226,51,112,237,170,235,58,118,196,13,93,191,226,150,102,39,221,205,133,146,91,93,156,241,203,153,176,92,245,75,202,86,54,203,215,150,102,189,104,205,111,173,195,99,55,23,220,173,229,185,0,117,107,75,229,229,198,234,162,219,240,117, +216,220,90,153,11,235,183,125,25,117,101,187,89,223,79,185,221,246,113,125,185,223,150,125,160,158,178,48,134,239,91,198,45,183,159,113,211,99,195,38,62,177,14,140,252,162,125,91,36,255,110,23,159,62,47,62,71,189,248,244,185,149,249,82,152,224,107,75, +229,73,127,127,130,151,194,50,76,126,15,98,131,120,200,250,157,181,165,0,98,67,185,136,81,16,32,191,46,220,222,180,163,94,35,253,106,65,41,143,121,95,236,100,60,89,151,109,40,249,108,202,196,39,210,129,145,95,180,111,139,228,223,29,153,207,35,199,220, +80,63,226,51,189,57,225,203,147,95,68,135,237,91,203,101,241,97,91,139,6,130,115,231,214,114,16,21,201,106,164,142,37,130,35,101,183,215,22,131,141,180,7,45,36,101,225,41,143,121,115,97,122,83,132,238,11,144,44,129,113,105,3,165,177,17,55,63,109,226, +99,20,8,237,219,34,249,87,139,79,255,102,230,115,99,75,124,202,153,199,253,201,95,190,28,98,146,139,72,128,22,144,183,70,196,103,43,227,241,101,250,82,75,234,165,31,221,175,140,93,94,114,217,85,30,27,251,245,205,122,108,233,51,148,109,182,43,141,219, +101,87,180,3,35,191,104,223,22,201,191,65,124,186,69,124,184,231,227,47,187,130,248,76,109,9,0,32,64,8,192,77,4,33,76,254,178,48,220,90,190,47,36,8,139,100,51,90,76,164,31,177,163,92,238,225,72,25,235,210,230,254,61,159,157,75,234,181,237,198,205,197, +173,204,135,126,74,227,35,38,62,177,14,140,252,162,125,91,36,255,238,188,225,124,204,221,24,232,11,79,161,120,180,126,154,71,217,93,60,202,238,218,124,116,94,126,228,205,54,143,203,121,196,189,245,248,156,71,231,225,49,123,249,177,57,182,192,118,249, +113,184,212,117,133,199,226,82,127,154,126,101,12,177,231,145,187,183,219,122,188,46,203,205,199,240,242,136,253,194,217,211,110,110,122,188,156,85,249,140,171,52,62,106,151,93,177,14,140,252,162,125,91,36,255,238,188,231,67,230,115,53,252,171,197,145, +195,15,133,186,235,87,122,125,118,116,209,219,118,135,242,176,188,220,227,250,175,94,14,176,222,123,241,66,88,94,241,118,151,47,93,244,19,191,59,180,237,190,112,206,245,92,60,31,30,223,247,250,101,95,207,165,208,7,223,64,190,226,237,176,103,157,58,182, +67,189,239,7,174,246,94,242,117,190,77,247,165,80,126,253,114,175,187,226,203,88,103,127,248,130,33,109,185,212,146,12,10,241,89,48,241,137,119,98,228,19,237,219,34,249,55,118,195,249,198,192,213,32,56,143,250,245,177,161,1,63,153,39,220,194,212,184, +91,156,153,116,139,165,73,55,239,215,151,102,167,220,242,220,116,40,99,123,118,194,103,28,126,201,119,124,88,242,200,59,124,223,103,152,247,155,13,134,239,246,76,179,237,151,179,147,99,161,79,46,145,248,94,14,101,216,178,77,255,212,205,251,108,102,198, +111,83,134,61,223,231,97,41,253,208,39,101,108,47,148,38,130,240,60,118,115,222,205,76,248,190,229,27,206,38,62,70,17,208,190,45,146,127,183,137,207,245,114,230,131,248,240,5,192,43,61,23,195,229,215,220,212,152,23,5,47,64,158,21,47,56,128,240,112,255, +103,121,83,132,150,188,8,177,142,24,177,141,120,96,95,22,154,241,208,7,176,189,56,59,25,250,192,182,92,62,30,236,89,95,154,153,10,55,187,233,99,171,189,95,82,55,143,8,122,59,150,51,19,35,129,217,201,209,112,255,72,238,1,33,130,246,13,231,72,7,70,126, +209,190,45,146,127,147,226,115,202,103,59,35,62,27,225,203,129,114,19,183,156,85,108,127,42,5,225,230,178,175,99,157,167,89,242,253,158,240,72,61,216,148,191,171,67,123,110,18,203,141,98,250,146,254,228,73,149,64,89,249,70,182,124,207,167,124,179,154, +113,216,150,254,176,147,71,254,108,75,121,16,183,153,146,137,143,81,28,180,111,139,228,223,228,101,215,169,227,199,194,191,54,172,122,241,9,95,2,244,98,34,194,32,147,60,76,120,143,60,101,10,223,88,246,235,60,102,223,122,226,229,17,91,17,29,158,86,137, +72,36,5,40,176,89,30,250,247,235,229,118,101,241,17,187,173,241,55,109,217,150,50,32,139,90,154,53,241,49,10,132,246,109,145,252,155,204,124,78,31,127,36,252,223,20,151,84,136,8,162,34,162,35,194,65,150,195,196,103,201,54,32,84,225,251,61,100,61,126, +91,196,128,117,17,15,144,118,210,47,80,22,214,253,82,50,46,40,127,193,241,254,23,11,165,92,218,233,50,177,43,139,207,140,137,143,81,28,180,111,211,252,203,239,87,215,251,123,196,188,5,130,223,192,142,213,237,134,239,125,247,59,59,126,55,187,18,90,124, +248,158,15,151,93,220,4,102,66,235,47,11,178,205,228,14,226,225,203,88,134,12,103,83,56,88,222,89,43,103,62,65,92,54,203,69,180,68,36,64,183,97,91,139,136,172,175,251,108,42,150,245,72,189,244,121,223,190,188,228,126,16,191,235,83,139,248,200,111,154, +235,223,36,175,5,124,198,111,144,199,234,118,3,191,99,93,205,103,58,246,76,124,58,12,237,219,52,255,242,35,248,105,111,252,72,163,209,55,119,240,163,255,250,199,247,121,59,72,61,63,198,223,223,199,227,108,117,207,39,92,118,245,135,201,44,255,127,197, +186,22,10,217,150,9,143,16,108,93,118,109,10,150,22,46,105,139,157,136,136,244,197,54,109,41,19,66,191,65,124,202,25,205,237,213,165,176,46,109,182,218,174,148,51,48,233,7,193,90,40,77,214,44,62,28,39,121,137,38,239,36,227,189,97,181,8,55,62,227,141, +45,177,186,90,192,103,250,36,197,248,213,124,166,99,207,196,167,195,208,190,77,243,111,173,226,163,207,184,73,241,33,248,169,211,147,128,117,250,38,96,117,29,253,144,233,240,198,17,57,123,35,62,4,55,118,44,165,143,52,110,244,247,110,191,225,188,121,207, +135,201,44,32,14,129,205,117,17,145,242,132,71,4,202,66,181,245,175,21,155,194,67,189,8,72,249,6,242,253,203,47,192,78,250,20,91,160,79,65,143,163,203,180,88,73,59,214,23,194,211,178,218,197,71,251,139,12,68,94,231,148,68,251,44,249,42,103,222,111,150, +230,51,241,133,136,11,253,208,150,151,105,82,78,25,251,32,118,105,153,179,142,61,19,159,14,67,251,54,205,191,181,138,143,156,101,9,66,222,149,38,226,67,192,202,187,236,233,71,222,244,138,64,209,6,161,145,183,130,74,192,99,79,63,50,105,168,227,77,159, +76,36,150,244,37,227,198,24,189,113,69,93,118,149,255,183,11,241,217,88,45,255,159,22,147,93,196,7,97,225,31,71,249,62,141,136,69,89,148,202,79,184,36,243,17,1,41,95,122,33,30,229,108,133,127,197,40,255,107,70,57,187,161,63,198,65,168,36,75,130,45,219, +32,46,155,151,105,155,255,198,161,5,140,255,249,226,103,53,88,23,33,90,156,245,226,179,48,183,43,241,193,15,105,199,139,99,143,45,199,90,222,220,74,185,246,25,199,91,191,139,14,223,106,159,97,139,184,96,143,255,197,239,244,203,54,62,147,184,144,113,5, +29,123,38,62,29,134,246,109,154,127,107,17,31,108,8,62,217,38,208,36,8,9,62,17,28,2,85,222,6,75,32,235,126,177,227,236,203,58,237,229,12,10,4,57,246,172,115,150,149,62,210,152,30,187,22,46,187,248,25,213,217,233,73,215,115,238,172,27,236,187,236,70,251, +175,187,177,1,47,78,155,203,177,193,126,55,62,52,224,38,110,12,184,169,225,33,55,53,114,195,77,141,14,135,111,20,207,78,140,185,249,169,9,183,232,179,14,126,119,121,101,97,214,173,46,33,20,243,97,121,115,177,188,228,9,90,96,113,206,151,177,142,13,89, +204,130,170,199,62,105,163,203,102,195,250,77,63,198,202,2,191,3,93,114,75,48,59,29,132,135,255,235,98,188,90,197,135,227,197,241,71,36,16,15,202,146,118,8,61,118,178,205,241,23,129,160,173,8,14,118,218,103,218,207,216,137,111,105,43,62,2,124,43,125, +224,51,61,150,160,99,207,196,167,195,208,190,77,243,111,45,226,147,76,217,9,72,17,31,206,122,4,44,125,8,148,19,168,156,61,165,13,219,76,0,214,99,226,163,47,183,98,129,172,153,157,238,119,215,250,46,185,141,53,159,209,172,46,121,17,242,147,157,76,130, +236,130,44,100,7,62,227,241,75,50,154,0,89,137,207,124,30,3,159,189,192,6,25,77,11,97,63,129,113,129,125,90,91,190,15,101,252,40,62,247,179,98,159,89,144,19,1,199,143,227,152,118,19,153,151,97,226,27,217,230,248,139,15,17,173,164,207,56,113,96,67,157, +238,67,218,176,76,138,143,190,220,50,241,49,182,161,125,155,230,223,90,196,135,32,35,109,151,109,68,68,196,71,222,228,42,117,2,129,154,108,35,193,75,32,235,247,166,19,184,250,236,93,77,124,166,199,174,186,27,3,221,110,110,102,200,205,151,134,124,246, +48,236,51,137,17,183,180,56,226,150,51,200,210,194,72,216,199,185,210,160,155,153,26,116,165,9,159,141,141,241,19,174,124,158,107,110,100,248,106,184,108,236,190,120,218,13,92,173,46,62,226,47,201,56,16,142,152,93,50,139,17,33,209,39,15,13,254,73,203, +124,56,145,36,197,167,154,207,116,236,153,248,116,24,218,183,105,254,37,128,8,28,2,77,136,217,33,36,8,8,66,163,239,249,208,94,182,17,20,9,86,2,245,79,175,189,22,130,150,58,214,37,88,169,227,114,65,178,159,122,197,103,116,232,170,27,186,126,121,243,69, +123,151,221,224,181,222,92,48,116,173,103,139,193,171,9,40,243,140,12,84,126,105,32,199,73,159,44,56,150,58,195,209,96,199,241,231,242,40,121,207,135,99,204,61,31,124,38,190,164,47,158,164,97,135,159,181,95,200,126,233,67,124,102,226,99,84,68,251,54, +205,191,242,68,68,19,179,3,2,16,8,94,29,120,172,75,6,36,169,56,129,76,80,147,186,179,212,246,64,63,114,207,128,167,49,236,135,212,213,251,29,150,78,130,227,148,124,186,84,201,103,28,127,124,193,189,29,125,105,139,15,57,254,248,70,142,55,118,146,149,82, +158,124,242,72,95,146,229,178,15,213,124,166,99,207,196,167,195,208,190,109,183,127,69,124,98,117,70,54,17,241,137,213,237,6,29,123,38,62,29,134,246,109,187,253,203,217,147,96,142,213,25,217,4,159,73,102,211,12,116,236,153,248,116,24,218,183,230,95,163, +221,232,216,51,241,233,48,180,111,205,191,70,187,209,177,103,226,211,97,104,223,154,127,141,118,163,99,175,101,226,195,93,111,30,195,234,71,128,173,128,39,38,124,9,138,71,187,124,31,161,153,215,167,49,184,131,207,35,97,62,23,143,25,91,61,158,134,155, +181,213,30,57,87,67,251,182,17,255,26,198,110,208,177,215,50,241,145,239,128,180,90,124,228,127,131,88,71,240,152,156,177,47,88,53,139,228,35,101,4,47,249,152,179,21,32,122,136,172,137,143,145,103,116,236,181,76,124,100,146,182,90,124,146,32,122,237, +250,78,8,98,199,23,229,146,223,125,104,54,140,195,231,226,120,154,248,24,121,70,199,94,75,239,249,180,91,124,200,64,200,68,244,23,157,90,1,227,240,45,81,198,226,139,113,49,155,102,194,88,140,99,226,99,228,29,29,123,133,17,31,198,106,215,37,16,89,157, +124,227,147,49,25,59,102,215,12,244,63,242,153,248,24,121,71,199,94,33,196,167,157,194,147,132,172,164,149,55,157,229,70,58,199,145,75,175,123,247,238,53,116,76,181,111,27,245,175,97,212,139,142,189,220,139,79,187,133,71,223,223,225,102,119,59,199,182, +204,39,223,240,192,64,30,134,180,235,190,100,214,208,177,151,123,241,225,146,36,249,215,204,255,69,73,66,150,195,127,249,74,54,210,206,71,237,38,62,205,129,147,5,199,50,86,215,74,240,157,140,203,215,53,146,245,157,128,142,189,150,138,143,145,61,180,111, +139,228,95,178,80,38,54,153,133,254,143,110,50,12,182,229,33,4,75,50,16,254,123,91,103,31,8,82,181,108,68,250,78,102,186,148,129,22,52,41,211,118,90,124,100,44,217,111,50,106,236,217,214,109,168,163,156,177,177,105,245,195,148,86,163,99,207,196,167,195, +208,190,45,146,127,153,160,252,134,13,217,168,252,44,7,255,196,42,63,114,198,87,34,152,184,216,33,2,100,199,218,142,118,252,150,13,247,213,228,210,72,131,224,144,173,208,23,109,197,134,117,218,80,46,191,91,68,54,76,95,160,51,85,45,62,82,206,254,112,95, +15,65,196,94,255,198,17,99,178,205,103,96,12,93,151,87,116,236,153,248,116,24,218,183,149,252,59,220,127,197,29,59,114,152,224,104,43,71,30,126,200,245,247,117,71,247,169,18,34,42,105,153,1,147,155,39,135,172,35,52,216,75,29,19,91,50,14,132,67,68,73, +35,162,163,203,104,131,112,232,178,36,8,162,100,57,105,226,195,101,188,216,235,241,17,29,249,21,0,198,226,97,67,173,226,147,85,255,233,216,51,241,233,48,180,111,43,249,247,225,135,222,18,130,105,255,155,222,228,14,29,56,208,22,14,238,223,31,198,60,120, +96,127,116,159,42,193,36,70,96,116,25,223,141,66,48,16,27,178,6,153,200,90,124,100,82,83,38,196,238,227,33,106,8,16,162,193,146,50,253,53,8,13,227,176,47,50,174,140,149,38,62,201,223,85,150,254,147,15,51,16,201,90,197,39,171,254,211,177,103,226,211,97, +104,223,86,242,47,65,244,87,7,15,186,35,135,15,251,51,232,145,182,192,88,112,226,248,241,232,62,85,130,73,172,133,0,81,97,130,75,38,196,37,147,136,143,254,185,86,64,124,98,151,90,49,232,143,246,242,235,141,8,132,174,79,150,105,161,75,19,31,189,223,90, +124,40,151,108,141,113,201,144,106,21,159,172,250,79,199,158,137,79,135,161,125,91,201,191,111,240,193,123,248,193,7,163,65,214,106,46,156,59,23,221,167,74,36,39,49,147,149,172,3,145,96,50,35,8,34,62,100,54,250,114,136,122,68,130,122,238,219,104,97,18, +164,14,49,160,47,17,43,250,97,92,234,169,99,92,132,133,117,46,155,176,221,173,248,80,199,101,29,101,216,212,115,207,39,171,254,211,177,103,226,211,97,104,223,86,242,239,27,31,120,96,79,130,247,145,163,71,221,197,243,231,163,251,84,9,50,157,228,255,216, +177,141,208,240,109,116,196,66,4,3,129,64,148,228,6,49,200,55,214,153,232,98,167,161,47,105,147,28,7,17,227,62,141,148,203,184,136,7,125,177,111,98,199,216,178,206,50,185,223,216,107,129,161,15,246,11,155,180,155,225,49,178,234,63,29,123,38,62,29,134, +246,109,37,255,230,77,124,138,8,34,36,66,132,88,33,62,73,155,52,76,124,140,204,161,125,91,201,191,38,62,123,15,89,143,220,4,231,178,75,178,165,90,48,241,49,50,135,246,109,37,255,154,248,228,27,19,31,35,115,104,223,86,242,175,137,79,190,49,241,49,50,135, +246,109,37,255,154,248,228,27,19,31,35,115,104,223,86,242,175,137,79,190,49,241,49,50,135,246,109,37,255,154,248,228,27,19,31,35,115,104,223,86,242,175,137,79,190,49,241,49,50,135,246,109,37,255,154,248,228,27,19,31,35,115,104,223,86,242,175,137,79,190, +49,241,49,50,135,246,109,37,255,154,248,228,27,19,31,35,115,104,223,86,242,175,137,79,190,49,241,49,50,135,246,109,37,255,154,248,228,27,19,31,35,115,104,223,86,242,175,137,79,190,49,241,49,50,135,246,109,37,255,154,248,228,27,19,31,35,115,104,223,86, +242,239,95,188,225,13,238,225,135,30,138,6,88,43,49,241,105,14,89,245,159,142,61,19,159,14,67,251,182,146,127,219,253,19,156,2,193,219,125,241,98,116,159,140,218,201,170,255,116,236,153,248,116,24,218,183,149,252,219,115,233,162,59,115,234,148,235,58, +113,162,173,156,59,115,198,77,142,143,69,247,201,168,157,172,250,79,199,158,137,79,135,161,125,91,201,191,55,174,95,113,83,19,227,238,214,234,170,219,88,95,111,27,143,221,186,229,198,134,7,162,251,100,212,78,86,253,167,99,207,196,167,195,208,190,53,255, +26,237,70,199,158,137,79,135,161,125,107,254,53,218,141,142,61,19,159,14,67,251,54,205,191,188,97,33,249,62,114,35,251,224,55,126,247,185,158,223,122,110,55,58,246,76,124,58,12,237,219,52,255,242,198,4,126,180,60,86,103,100,23,252,198,139,5,241,29,111, +186,224,157,98,181,190,106,167,93,232,216,51,241,233,48,180,111,211,252,91,143,248,112,166,5,253,138,23,169,211,25,20,239,167,194,134,201,128,61,239,161,210,19,131,117,121,127,149,156,193,165,79,163,54,146,126,227,165,133,177,247,206,11,248,74,31,103, +214,165,14,31,136,47,229,221,98,105,190,163,94,252,92,205,119,58,246,114,47,62,242,97,53,105,54,201,242,78,68,251,54,205,191,201,32,78,67,222,71,46,47,219,163,76,222,196,9,186,31,142,63,235,98,207,11,248,190,241,245,175,109,217,178,206,11,249,240,21, +111,249,100,226,208,63,75,177,49,42,147,244,27,199,249,149,47,189,188,205,70,224,85,60,100,71,216,200,203,19,249,147,122,250,210,111,85,213,190,227,5,139,250,189,248,140,33,239,183,231,85,210,248,146,254,181,127,5,29,123,185,23,31,14,146,164,154,130, +174,211,229,188,110,86,38,73,35,112,240,99,229,121,64,251,54,205,191,201,32,142,193,153,79,191,147,92,168,36,62,248,73,222,222,137,200,240,42,96,150,64,59,234,176,211,130,67,57,245,178,109,164,35,130,129,64,32,14,8,1,101,73,59,142,51,199,62,89,94,73, +124,120,159,189,248,14,180,95,88,39,30,200,126,180,40,233,215,74,11,58,246,10,33,62,177,137,194,129,226,160,200,139,246,171,33,105,35,7,90,14,24,125,179,173,29,72,127,56,149,114,113,6,246,186,93,150,209,190,77,243,111,218,49,213,144,185,232,119,140,11, +18,176,160,251,225,248,232,192,4,206,140,8,185,62,147,50,113,152,24,180,19,236,230,119,109,112,188,229,221,240,248,70,178,145,36,196,48,247,131,146,229,149,196,39,249,182,84,178,29,78,228,212,49,31,40,227,18,143,54,149,124,167,99,175,176,226,195,65,209, +19,161,26,4,60,19,128,179,46,7,12,33,97,155,201,64,255,28,104,196,6,167,226,96,202,25,27,59,182,113,6,118,250,253,223,89,68,251,54,205,191,105,199,84,35,129,158,44,231,152,203,25,145,32,151,126,100,66,104,91,238,41,80,6,146,77,18,192,73,59,163,54,180, +223,36,155,140,157,16,41,139,205,13,174,12,228,132,138,63,196,6,223,37,227,129,251,62,114,137,197,137,136,50,150,34,68,105,232,216,43,220,101,151,156,65,81,125,125,205,73,80,35,24,105,151,93,28,232,180,203,41,202,229,76,145,156,68,136,149,8,14,78,141, +165,179,89,66,251,54,205,191,28,83,142,7,199,75,136,217,113,188,57,22,124,126,201,48,217,230,184,83,198,217,82,130,54,38,62,128,141,158,8,4,63,199,144,62,104,147,118,246,54,118,146,60,105,16,235,177,12,7,40,199,31,216,136,239,136,101,241,39,253,84,18, +31,160,12,95,201,201,134,37,39,36,201,104,99,247,235,116,236,21,54,243,65,133,117,57,103,89,4,40,102,11,28,104,57,136,128,178,227,8,196,140,3,42,237,146,147,8,39,74,189,32,117,89,68,251,54,205,191,28,7,62,167,38,102,7,4,25,199,85,63,169,226,216,19,192, +8,137,164,221,172,139,141,134,178,100,57,182,180,71,244,244,211,51,163,50,28,251,228,101,78,37,223,201,156,208,199,31,33,226,216,115,34,213,79,187,98,151,190,204,189,100,185,246,93,236,100,174,99,175,176,226,195,193,75,222,36,195,17,105,226,160,207,190, +128,232,200,25,65,11,25,125,104,241,225,204,156,167,179,179,246,109,30,252,107,20,11,29,123,85,197,103,106,44,219,255,228,87,233,18,1,5,38,45,68,28,16,18,68,163,86,241,33,117,4,210,82,132,72,218,33,102,216,210,31,235,140,207,24,162,244,140,169,251,201, +20,35,59,197,39,235,254,53,10,68,34,254,146,226,243,190,164,248,204,79,143,196,59,202,8,213,46,17,72,41,245,253,158,88,250,8,201,244,30,97,193,30,49,97,93,183,99,157,254,228,102,30,2,36,25,80,90,255,89,96,102,242,198,54,223,230,193,191,70,113,72,198, +159,18,159,9,196,231,189,73,241,185,185,48,25,237,200,200,31,75,179,99,219,124,107,254,53,218,73,50,254,54,197,231,57,207,56,226,243,158,164,248,0,138,21,235,204,200,15,211,227,131,238,206,218,220,14,223,154,127,141,118,16,139,191,77,241,121,198,51,138, +248,60,53,53,122,237,95,181,1,60,182,50,227,74,19,67,209,78,141,236,131,227,215,87,74,219,124,170,49,255,26,173,36,45,254,174,245,156,254,127,94,115,222,233,185,129,248,220,190,124,233,244,207,31,223,88,218,97,8,203,115,227,22,164,57,162,228,157,190, +56,51,150,154,241,36,49,255,26,205,164,82,252,221,90,154,114,215,122,207,254,222,107,206,93,207,53,196,103,254,106,239,133,87,102,198,251,119,24,27,134,97,52,11,196,167,175,231,220,127,246,154,179,236,185,132,248,12,121,158,184,124,177,235,119,147,195, +125,209,70,134,97,24,141,114,226,232,161,255,251,166,55,253,229,187,189,222,140,120,78,34,62,231,61,211,39,31,61,246,15,189,23,78,254,79,4,104,164,191,59,218,216,48,12,163,94,208,19,132,231,228,163,71,63,233,181,102,214,67,214,243,176,103,223,81,79,183, +167,228,121,91,207,133,83,255,169,251,236,241,255,117,238,228,97,215,117,236,144,97,24,198,174,57,253,232,67,255,251,252,233,71,254,139,207,120,158,246,250,50,231,185,236,121,196,115,192,179,239,160,231,152,231,130,103,216,179,228,225,134,208,187,60, +207,122,222,231,225,75,65,134,97,24,181,128,102,160,29,104,200,227,158,21,15,143,214,201,120,16,158,67,251,246,237,251,139,255,15,171,227,103,50,233,85,150,225,0,0,0,0,73,69,78,68,174,66,96,130,0,0 }; -const char* OperatorEditor_287x218_png = (const char*) temp_binary_data_13; +const char* OperatorEditor_287x218_png = (const char*) temp_binary_data_14; const char* getNamedResource (const char*, int&) throw(); @@ -9846,6 +9676,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw switch (hash) { + case 0xb5f9cc57: numBytes = 841; return Switch_32x32_png; case 0xb808cdf7: numBytes = 2261; return Switch_48x26_png; case 0x5fe3afed: numBytes = 1850; return ButtonUnlabeled_50x30_png; case 0x6e76c9d9: numBytes = 13011; return Knob_34x34_png; @@ -9857,9 +9688,9 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw case 0x19711874: numBytes = 306788; return NotoSansRegular_ttf; case 0x654b711b: numBytes = 311508; return NotoSansBold_ttf; case 0x796d1c9c: numBytes = 88890; return builtin_pgm_zip; - case 0xb02b7677: numBytes = 23143; return about_png; - case 0xff44b02a: numBytes = 27571; return GlobalEditor_864x144_png; - case 0x081c7d0e: numBytes = 15614; return OperatorEditor_287x218_png; + case 0xb02b7677: numBytes = 24863; return about_png; + case 0xff44b02a: numBytes = 17334; return GlobalEditor_864x144_png; + case 0x081c7d0e: numBytes = 10927; return OperatorEditor_287x218_png; default: break; } @@ -9869,6 +9700,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) throw const char* namedResourceList[] = { + "Switch_32x32_png", "Switch_48x26_png", "ButtonUnlabeled_50x30_png", "Knob_34x34_png", diff --git a/ports/dexed/source/BinaryData.h b/ports/dexed/source/BinaryData.h index f1e7696c..baf13654 100644 --- a/ports/dexed/source/BinaryData.h +++ b/ports/dexed/source/BinaryData.h @@ -9,6 +9,9 @@ namespace BinaryData { + extern const char* Switch_32x32_png; + const int Switch_32x32_pngSize = 841; + extern const char* Switch_48x26_png; const int Switch_48x26_pngSize = 2261; @@ -43,19 +46,19 @@ namespace BinaryData const int builtin_pgm_zipSize = 88890; extern const char* about_png; - const int about_pngSize = 23143; + const int about_pngSize = 24863; extern const char* GlobalEditor_864x144_png; - const int GlobalEditor_864x144_pngSize = 27571; + const int GlobalEditor_864x144_pngSize = 17334; extern const char* OperatorEditor_287x218_png; - const int OperatorEditor_287x218_pngSize = 15614; + const int OperatorEditor_287x218_pngSize = 10927; // Points to the start of a list of resource names. extern const char* namedResourceList[]; // Number of elements in the namedResourceList array. - const int namedResourceListSize = 14; + const int namedResourceListSize = 15; // If you provide the name of one of the binary resource variables above, this function will // return the corresponding data and its size (or a null pointer if the name isn't found). diff --git a/ports/dexed/source/CartManager.cpp b/ports/dexed/source/CartManager.cpp index b01ea9da..94563870 100644 --- a/ports/dexed/source/CartManager.cpp +++ b/ports/dexed/source/CartManager.cpp @@ -1,6 +1,6 @@ /** * - * Copyright (c) 2015 Pascal Gauthier. + * Copyright (c) 2015-2017 Pascal Gauthier. * * 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 @@ -31,15 +31,48 @@ class SyxFileFilter : public FileFilter { public: SyxFileFilter() : FileFilter(".syx") {} bool isFileSuitable(const File &file) const { - return file.getFileExtension().toLowerCase() == ".syx" && file.getSize() == 4104; + return file.getFileExtension().toLowerCase() == ".syx" && file.getSize() >= 4096; } bool isDirectorySuitable(const File &file) const { return true; }; }; +class FileTreeDrop : public FileTreeComponent { +public : + FileTreeDrop(DirectoryContentsList &listToShow) : FileTreeComponent(listToShow) {} + + bool isInterestedInFileDrag (const StringArray &files) override { + bool found = false; + + for(int i=0; istartThread(); cartBrowserList = new DirectoryContentsList(syxFileFilter, *timeSliceThread); cartBrowserList->setDirectory(cartDir, true, true); - cartBrowser = new FileTreeComponent(*cartBrowserList); + cartBrowser = new FileTreeDrop(*cartBrowserList); + cartBrowser->addKeyListener(this); addAndMakeVisible(cartBrowser); + cartBrowser->setBounds(23, 18, 590, 384); cartBrowser->setDragAndDropDescription("Sysex Browser"); cartBrowser->addListener(this); @@ -82,7 +117,7 @@ CartManager::CartManager(DexedAudioProcessorEditor *editor) : Component("CartMan * * I've removed this since it only works on the DX7 II. TBC. * - + addAndMakeVisible(getDXPgmButton = new TextButton("GET DX7 PGM")); getDXPgmButton->setBounds(656, 545, 100, 30); getDXPgmButton->addListener(this); @@ -90,7 +125,6 @@ CartManager::CartManager(DexedAudioProcessorEditor *editor) : Component("CartMan addAndMakeVisible(getDXCartButton = new TextButton("GET DX7 CART")); getDXCartButton->setBounds(755, 545, 100, 30); getDXCartButton->addListener(this); - */ } @@ -115,10 +149,8 @@ void CartManager::programSelected(ProgramListBox *source, int pos) { mainWindow->processor->setCurrentProgram(pos); mainWindow->processor->updateHostDisplay(); } else { - if ( source->getCurrentCart() == nullptr ) - return; - char unpackPgm[161]; - unpackProgramFromSysex(unpackPgm, source->getCurrentCart(), pos); + uint8_t unpackPgm[161]; + source->getCurrentCart().unpackProgram(unpackPgm, pos); activeCart->setSelected(-1); browserCart->setSelected(pos); repaint(); @@ -177,11 +209,11 @@ void CartManager::fileDoubleClicked(const File& file) { if ( file.isDirectory() ) return; mainWindow->loadCart(file); - activeCart->setCartridge(mainWindow->processor->sysex); + activeCart->setCartridge(mainWindow->processor->currentCart); } void CartManager::fileClicked(const File& file, const MouseEvent& e) { - if ( e.mods.isRightButtonDown() ) { + if ( e.mods.isRightButtonDown() || e.mods.isAnyModifierKeyDown() ) { PopupMenu menu; menu.addItem(1000, "Open location"); @@ -215,7 +247,7 @@ void CartManager::setActiveProgram(int idx, String activeName) { } void CartManager::resetActiveSysex() { - activeCart->setCartridge(mainWindow->processor->sysex); + activeCart->setCartridge(mainWindow->processor->currentCart); } void CartManager::selectionChanged() { @@ -227,21 +259,14 @@ void CartManager::selectionChanged() { if ( file.isDirectory() ) return; - String f = file.getFullPathName(); - uint8_t syx_data[4104]; - ifstream fp_in(f.toRawUTF8(), ios::binary); - if (fp_in.fail()) { - AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, "Error", "Unable to open: " + f); + Cartridge browserSysex; + int rc = browserSysex.load(file); + if ( rc < 0 ) { + AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, "Error", "Unable to open file"); return; } - fp_in.read((char *)syx_data, 4104); - fp_in.close(); - char browserSysex[4104]; - memcpy(browserSysex, syx_data+6, 4096); - int checksum = sysexChecksum(((char *) &browserSysex), 4096); - - if ( checksum != syx_data[4102] ) { + if ( rc != 0 ) { browserCart->readOnly = true; } else { browserCart->readOnly = false; @@ -260,19 +285,19 @@ void CartManager::programRightClicked(ProgramListBox *source, int pos) { switch(menu.show()) { case 1000: - char unpackPgm[161]; + uint8_t unpackPgm[161]; if ( source == activeCart ) { - unpackProgramFromSysex(unpackPgm, mainWindow->processor->sysex, pos); + mainWindow->processor->currentCart.unpackProgram(unpackPgm, pos); } else { - char *sysex = source->getCurrentCart(); - if ( sysex == nullptr ) - return; - unpackProgramFromSysex(unpackPgm, sysex, pos); + source->getCurrentCart().unpackProgram(unpackPgm, pos); } - if ( mainWindow->processor->sysexComm.isOutputActive() ) - mainWindow->processor->sysexComm.send(MidiMessage(unpackPgm, 161)); + if ( mainWindow->processor->sysexComm.isOutputActive() ) { + uint8_t msg[163]; + exportSysexPgm(msg, unpackPgm); + mainWindow->processor->sysexComm.send(MidiMessage(msg, 163)); + } break; case 1010: @@ -284,7 +309,7 @@ void CartManager::programRightClicked(ProgramListBox *source, int pos) { void CartManager::programDragged(ProgramListBox *destListBox, int dest, char *packedPgm) { if ( destListBox == activeCart ) { - char *sysex = mainWindow->processor->sysex; + char *sysex = mainWindow->processor->currentCart.getRawVoice(); memcpy(sysex+(dest*128), packedPgm, 128); mainWindow->updateUI(); } else { @@ -295,22 +320,14 @@ void CartManager::programDragged(ProgramListBox *destListBox, int dest, char *pa if ( file.isDirectory() ) return; - if ( file.getSize() > 5000 ) - return; - - MemoryBlock block; - file.loadFileAsData(block); - - if ( block.getSize() < 4104 ) + if ( file.getSize() != 4104 && file.getSize() != 4096 ) return; - - char *sysex = ((char *) block.getData()) + 6; - memcpy(sysex+(dest*128), packedPgm, 128); - - char exported[4104]; - exportSysexCart(exported, sysex, 0); - file.replaceWithData(exported, 4104); - browserCart->setCartridge(sysex); + + Cartridge cart; + cart.load(file); + memcpy(cart.getRawVoice()+(dest*128), packedPgm, 128); + cart.saveVoice(file); + browserCart->setCartridge(cart); } } @@ -318,6 +335,18 @@ void CartManager::initialFocus() { cartBrowser->grabKeyboardFocus(); } +bool CartManager::keyPressed(const KeyPress& key, Component* originatingComponent) { + if ( key.getKeyCode() == 13 ) { + File file = cartBrowser->getSelectedFile(); + if ( file.isDirectory() ) + return true; + mainWindow->loadCart(file); + activeCart->setCartridge(mainWindow->processor->currentCart); + return true; + } + return false; +} + void CartManager::showSysexConfigMsg() { AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, "Warning", "The DX7 midi interface is not configured correctly.\n\n" "These buttons are used to 'ask' the DX7 to send the current program/cartridge.\n\n" diff --git a/ports/dexed/source/CartManager.h b/ports/dexed/source/CartManager.h index f5c8d42b..ebd51112 100644 --- a/ports/dexed/source/CartManager.h +++ b/ports/dexed/source/CartManager.h @@ -24,9 +24,10 @@ #include "JuceHeader.h" #include "PluginData.h" #include "ProgramListBox.h" +#include "PluginData.h" class CartManager : public Component, public ButtonListener, public DragAndDropContainer, public FileBrowserListener - , public ProgramListBoxListener { + , public ProgramListBoxListener, public KeyListener { ScopedPointer newButton; ScopedPointer loadButton; ScopedPointer saveButton; @@ -53,13 +54,13 @@ class CartManager : public Component, public ButtonListener, public DragAndDrop public: CartManager(DexedAudioProcessorEditor *editor); virtual ~CartManager(); - void paint(Graphics& g); - void buttonClicked (Button* buttonThatWasClicked); + void paint(Graphics& g) override; + void buttonClicked (Button* buttonThatWasClicked) override; - void selectionChanged(); - void fileClicked (const File& file, const MouseEvent& e); - void fileDoubleClicked (const File& file); - void browserRootChanged (const File& newRoot); + void selectionChanged() override; + void fileClicked (const File& file, const MouseEvent& e) override; + void fileDoubleClicked (const File& file) override; + void browserRootChanged (const File& newRoot) override; void setActiveProgram(int idx, String activeName); void resetActiveSysex(); @@ -67,6 +68,7 @@ public: virtual void programSelected(ProgramListBox *source, int pos) override; virtual void programRightClicked(ProgramListBox *source, int pos) override; virtual void programDragged(ProgramListBox *destListBox, int dest, char *packedPgm) override; + virtual bool keyPressed(const KeyPress& key, Component* originatingComponent) override; void initialFocus(); }; diff --git a/ports/dexed/source/DXComponents.cpp b/ports/dexed/source/DXComponents.cpp index d53225e7..59b172f8 100644 --- a/ports/dexed/source/DXComponents.cpp +++ b/ports/dexed/source/DXComponents.cpp @@ -1,4 +1,4 @@ -/** +/** * * Copyright (c) 2014 Pascal Gauthier. * @@ -157,13 +157,13 @@ static double getDuration(int p_rate, int p_level_l, int p_level_r) { } EnvDisplay::EnvDisplay() { - pvalues = (char *) &TMP_LEVEL_PTR; + pvalues = (uint8_t *) &TMP_LEVEL_PTR; } void EnvDisplay::paint(Graphics &g) { int h = getHeight(); - char *rates = pvalues; - char *levels = pvalues + 4; + uint8_t *rates = pvalues; + uint8_t *levels = pvalues + 4; double d[4]; double keyoff = 0.0; @@ -250,15 +250,15 @@ void EnvDisplay::paint(Graphics &g) { } PitchEnvDisplay::PitchEnvDisplay() { - pvalues = (char *) &TMP_LEVEL_PTR; + pvalues = (uint8_t *) &TMP_LEVEL_PTR; vPos = 0; } void PitchEnvDisplay::paint(Graphics &g) { g.setColour(Colours::white); - char *levels = pvalues + 4; - char *rates = pvalues; + uint8_t *levels = pvalues + 4; + uint8_t *rates = pvalues; float dist[4]; float total = 0; @@ -363,25 +363,22 @@ ComboBoxImage::ComboBoxImage() { itemPos[0] = -1; } -static void comboBoxPopupMenuFinishedCallback (int result, ComboBoxImage* combo) -{ - if (combo != nullptr) - { +static void comboBoxPopupMenuFinishedCallback (int result, ComboBoxImage* combo) { + if (combo != nullptr) { combo->hidePopup(); - + if (result != 0) combo->setSelectedId (result); } } void ComboBoxImage::showPopup() { - popup.showMenuAsync (PopupMenu::Options().withTargetComponent (this) - .withItemThatMustBeVisible (getSelectedId()) - .withMinimumWidth (getWidth()) - .withMaximumNumColumns (1) - .withStandardItemHeight (itemHeight), - ModalCallbackFunction::forComponent (comboBoxPopupMenuFinishedCallback, this)); + .withItemThatMustBeVisible(getSelectedId()) + .withMinimumWidth(getWidth()) + .withMaximumNumColumns(1) + .withStandardItemHeight(itemHeight), + ModalCallbackFunction::forComponent(comboBoxPopupMenuFinishedCallback, this)); } void ComboBoxImage::setImage(Image image) { @@ -411,5 +408,35 @@ void ComboBoxImage::setImage(Image image, int pos[]) { itemPos[i] = pos[i]; } +void ProgramSelector::mouseDown(const MouseEvent &event) { + if ( event.x < getWidth() - 8) { + ComboBox::mouseDown(event); + return; + } + + int cur = getSelectedItemIndex(); + if ( event.y < getHeight() / 2 ) { + if ( cur == 0 ) + cur = 31; + else + cur--; + } else { + if ( cur == 31 ) + cur = 0; + else + cur++; + } + setSelectedItemIndex(cur); +} + void ProgramSelector::paint(Graphics &g) { + int x = getWidth(); + int y = getHeight(); + + Path path; + path.addTriangle(x-8, y/2-1, x-4, 2, x, y/2-1); + path.addTriangle(x-8, y/2+1, x-4, y-2, x, y/2+1); + + g.setColour(Colours::white); + g.fillPath(path); } diff --git a/ports/dexed/source/DXComponents.h b/ports/dexed/source/DXComponents.h index cd749d8a..8c3fd71b 100644 --- a/ports/dexed/source/DXComponents.h +++ b/ports/dexed/source/DXComponents.h @@ -22,11 +22,12 @@ #define DXCOMPONENTS_H_INCLUDED #include "JuceHeader.h" +#include class EnvDisplay : public Component { public: EnvDisplay(); - char *pvalues; + uint8_t *pvalues; char vPos; void paint(Graphics &g); }; @@ -35,7 +36,7 @@ class PitchEnvDisplay : public Component { char rvalues[8]; public: PitchEnvDisplay(); - char *pvalues; + uint8_t *pvalues; char vPos; void paint(Graphics &g); }; @@ -58,12 +59,11 @@ class ComboBoxImage : public ComboBox { Image items; int itemHeight; PopupMenu popup; - int itemPos[4]; public: ComboBoxImage(); - virtual void paint(Graphics &g); + virtual void paint(Graphics &g) override; virtual void showPopup() override; void setImage(Image image); void setImage(Image image, int pos[]); @@ -71,6 +71,7 @@ public: class ProgramSelector : public ComboBox { public: + void mouseDown(const MouseEvent &event) override; virtual void paint(Graphics &g) override; }; diff --git a/ports/dexed/source/DXLookNFeel.cpp b/ports/dexed/source/DXLookNFeel.cpp index e314197c..0e3e74cd 100644 --- a/ports/dexed/source/DXLookNFeel.cpp +++ b/ports/dexed/source/DXLookNFeel.cpp @@ -1,6 +1,6 @@ /** * - * Copyright (c) 2013-2014 Pascal Gauthier. + * Copyright (c) 2013-2016 Pascal Gauthier. * * 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 @@ -64,6 +64,7 @@ DXLookNFeel::DXLookNFeel() { imageKnob = ImageCache::getFromMemory(BinaryData::Knob_34x34_png, BinaryData::Knob_34x34_pngSize); imageSwitch = ImageCache::getFromMemory(BinaryData::Switch_48x26_png, BinaryData::Switch_48x26_pngSize); + imageSwitchOperator = ImageCache::getFromMemory(BinaryData::Switch_32x32_png, BinaryData::Switch_32x32_pngSize); imageButton = ImageCache::getFromMemory(BinaryData::ButtonUnlabeled_50x30_png, BinaryData::ButtonUnlabeled_50x30_pngSize); imageSlider = ImageCache::getFromMemory(BinaryData::Slider_26x26_png, BinaryData::Slider_26x26_pngSize); imageScaling = ImageCache::getFromMemory(BinaryData::Scaling_36_26_png, BinaryData::Scaling_36_26_pngSize);; @@ -119,6 +120,10 @@ DXLookNFeel::DXLookNFeel() { imageSwitch = findImage(path); continue; } + if ( name == "Switch_32x64.png" ) { + imageSwitchOperator = findImage(path); + continue; + } if ( name == "ButtonUnlabeled_50x30.png" ) { imageButton = findImage(path); continue; diff --git a/ports/dexed/source/DXLookNFeel.h b/ports/dexed/source/DXLookNFeel.h index d53b6b4f..48b22b3e 100644 --- a/ports/dexed/source/DXLookNFeel.h +++ b/ports/dexed/source/DXLookNFeel.h @@ -1,6 +1,6 @@ /** * - * Copyright (c) 2013-2014 Pascal Gauthier. + * Copyright (c) 2013-2016 Pascal Gauthier. * * 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 @@ -35,11 +35,12 @@ public: Typeface::Ptr defaultFontBold; Image imageKnob, imageSwitch, imageButton, imageSlider, imageScaling, imageLight, imageLFO; + Image imageSwitchOperator; Image imageOperator, imageGlobal; /* overriden methods */ - virtual void drawRotarySlider(Graphics &g, int x, int y, int width, int height, float sliderPosProportional, float rotaryStartAngle, float rotaryEndAngle, Slider &slider ); - virtual void drawToggleButton(Graphics& g, ToggleButton& button, bool isMouseOverButton, bool isButtonDown); + virtual void drawRotarySlider(Graphics &g, int x, int y, int width, int height, float sliderPosProportional, float rotaryStartAngle, float rotaryEndAngle, Slider &slider ) override; + virtual void drawToggleButton(Graphics& g, ToggleButton& button, bool isMouseOverButton, bool isButtonDown) override; virtual void drawLinearSliderBackground (Graphics&, int x, int y, int width, int height, float sliderPos, float minSliderPos, float maxSliderPos, const Slider::SliderStyle, Slider&) override; @@ -49,8 +50,8 @@ public: virtual void drawButtonBackground (Graphics&, Button&, const Colour& backgroundColour, bool isMouseOverButton, bool isButtonDown) override; virtual Font getTextButtonFont(TextButton&, int buttonHeight) override; - virtual Typeface::Ptr getTypefaceForFont(const Font &); - virtual void positionComboBoxText (ComboBox& box, Label& label); + virtual Typeface::Ptr getTypefaceForFont(const Font &) override; + virtual void positionComboBoxText (ComboBox& box, Label& label) override; static DXLookNFeel *getLookAndFeel(); static Colour fillColour; diff --git a/ports/dexed/source/Dexed.h b/ports/dexed/source/Dexed.h index e8a205e9..a1f368f4 100644 --- a/ports/dexed/source/Dexed.h +++ b/ports/dexed/source/Dexed.h @@ -21,7 +21,20 @@ #ifndef DEXED_H_INCLUDED #define DEXED_H_INCLUDED -#define DEXED_VERSION "0.9.0" -#define TRACE(fmt, ...) +void dexed_trace(const char *source, const char *fmt, ...); + +#define DEXED_ID "0.9.4" + +#ifdef DEBUG + #define DEXED_VERSION DEXED_ID " DEBUG" + #ifdef _MSC_VER + #define TRACE(fmt, ...) dexed_trace(__FUNCTION__,fmt,##__VA_ARGS__) + #else + #define TRACE(fmt, ...) dexed_trace(__PRETTY_FUNCTION__,fmt,##__VA_ARGS__) + #endif +#else + #define DEXED_VERSION DEXED_ID + #define TRACE(fmt, ...) +#endif #endif // DEXED_H_INCLUDED diff --git a/ports/dexed/source/EngineMkI.cpp b/ports/dexed/source/EngineMkI.cpp index fba1f17b..bcd1b93c 100644 --- a/ports/dexed/source/EngineMkI.cpp +++ b/ports/dexed/source/EngineMkI.cpp @@ -1,155 +1,211 @@ /* - * Copyright 2014 Pascal Gauthier. - * Copyright 2012 Google Inc. + * Copyright (C) 2015-2017 Pascal Gauthier. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * 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 3 of the License, or + * (at your option) any later version. * - * http://www.apache.org/licenses/LICENSE-2.0 + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * The code is based on ppplay https://github.com/stohrendorf/ppplay and opl3 + * math documentation : + * https://github.com/gtaylormb/opl3_fpga/blob/master/docs/opl3math/opl3math.pdf * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. */ #include "EngineMkI.h" - -#include +#define _USE_MATH_DEFINES +#include #include #include "msfa/sin.h" #include "msfa/exp2.h" -const FmAlgorithm EngineMkI::algo2[32] = { - { { 0xc1, 0x11, 0x11, 0x14, 0x01, 0x14 } }, // 1 - { { 0x01, 0x11, 0x11, 0x14, 0xc1, 0x14 } }, // 2 - { { 0xc1, 0x11, 0x14, 0x01, 0x11, 0x14 } }, // 3 - { { 0xc4, 0x00, 0x00, 0x01, 0x11, 0x14 } }, // 4 ** EXCEPTION VIA CODE - { { 0xc1, 0x14, 0x01, 0x14, 0x01, 0x14 } }, // 5 - { { 0xc4, 0x00, 0x01, 0x14, 0x01, 0x14 } }, // 6 ** EXCEPTION VIA CODE - { { 0xc1, 0x11, 0x05, 0x14, 0x01, 0x14 } }, // 7 - { { 0x01, 0x11, 0xc5, 0x14, 0x01, 0x14 } }, // 8 - { { 0x01, 0x11, 0x05, 0x14, 0xc1, 0x14 } }, // 9 - { { 0x01, 0x05, 0x14, 0xc1, 0x11, 0x14 } }, // 10 - { { 0xc1, 0x05, 0x14, 0x01, 0x11, 0x14 } }, // 11 - { { 0x01, 0x05, 0x05, 0x14, 0xc1, 0x14 } }, // 12 - { { 0xc1, 0x05, 0x05, 0x14, 0x01, 0x14 } }, // 13 - { { 0xc1, 0x05, 0x11, 0x14, 0x01, 0x14 } }, // 14 - { { 0x01, 0x05, 0x11, 0x14, 0xc1, 0x14 } }, // 15 - { { 0xc1, 0x11, 0x02, 0x25, 0x05, 0x14 } }, // 16 - { { 0x01, 0x11, 0x02, 0x25, 0xc5, 0x14 } }, // 17 - { { 0x01, 0x11, 0x11, 0xc5, 0x05, 0x14 } }, // 18 - { { 0xc1, 0x14, 0x14, 0x01, 0x11, 0x14 } }, // 19 - { { 0x01, 0x05, 0x14, 0xc1, 0x14, 0x14 } }, // 20 - { { 0x01, 0x14, 0x14, 0xc1, 0x14, 0x14 } }, // 21 - { { 0xc1, 0x14, 0x14, 0x14, 0x01, 0x14 } }, // 22 - { { 0xc1, 0x14, 0x14, 0x01, 0x14, 0x04 } }, // 23 - { { 0xc1, 0x14, 0x14, 0x14, 0x04, 0x04 } }, // 24 - { { 0xc1, 0x14, 0x14, 0x04, 0x04, 0x04 } }, // 25 - { { 0xc1, 0x05, 0x14, 0x01, 0x14, 0x04 } }, // 26 - { { 0x01, 0x05, 0x14, 0xc1, 0x14, 0x04 } }, // 27 - { { 0x04, 0xc1, 0x11, 0x14, 0x01, 0x14 } }, // 28 - { { 0xc1, 0x14, 0x01, 0x14, 0x04, 0x04 } }, // 29 - { { 0x04, 0xc1, 0x11, 0x14, 0x04, 0x04 } }, // 30 - { { 0xc1, 0x14, 0x04, 0x04, 0x04, 0x04 } }, // 31 - { { 0xc4, 0x04, 0x04, 0x04, 0x04, 0x04 } }, // 32 -}; +#ifdef DEBUG + #include "time.h" + //#define MKIDEBUG +#endif + +#ifdef _WIN32 +#if _MSC_VER < 1800 + double log2(double n) { + return log(n) / log(2.0); + } + double round(double n) { + return n < 0.0 ? ceil(n - 0.5) : floor(n + 0.5); + } +#endif + __declspec(align(16)) const int zeros[N] = {0}; +#else + const int32_t __attribute__ ((aligned(16))) zeros[N] = {0}; +#endif + +static const uint16_t NEGATIVE_BIT = 0x8000; +static const uint16_t ENV_BITDEPTH = 14; + +static const uint16_t SINLOG_BITDEPTH = 10; +static const uint16_t SINLOG_TABLESIZE = 1< 90 ) { + TRACE("SINLOGTABLE: %s" ,buffer); + buffer[0] = 0; + pos = 0; + } + } + TRACE("SINLOGTABLE: %s", buffer); + buffer[0] = 0; + pos = 0; + TRACE("----------------------------------------"); + for(int i=0;i 90 ) { + TRACE("SINEXTTABLE: %s" ,buffer); + buffer[0] = 0; + pos = 0; + } + } + TRACE("SINEXTTABLE: %s", buffer); + TRACE("****************************************"); +#endif +} + +inline int32_t mkiSin(int32_t phase, uint16_t env) { + uint16_t expVal = sinLog(phase >> (22 - SINLOG_BITDEPTH)) + (env); + //int16_t expValShow = expVal; + + const bool isSigned = expVal & NEGATIVE_BIT; + expVal &= ~NEGATIVE_BIT; + + const uint16_t SINEXP_FILTER = 0x3FF; + uint16_t result = 4096 + sinExpTable[( expVal & SINEXP_FILTER ) ^ SINEXP_FILTER]; + + //uint16_t resultB4 = result; + result >>= ( expVal >> 10 ); // exp + +#ifdef MKIDEBUG + if ( ( time(NULL) % 5 ) == 0 ) { + if ( expValShow < 0 ) { + expValShow = (expValShow + 0x7FFF) * -1; + } + //TRACE(",%d,%d,%d,%d,%d,%d", phase >> (22 - SINLOG_BITDEPTH), env, expValShow, ( expVal & SINEXP_FILTER ) ^ SINEXP_FILTER, resultB4, result); + } +#endif + + if( isSigned ) + return (-result - 1) << 13; + else + return result << 13; +} void EngineMkI::compute(int32_t *output, const int32_t *input, int32_t phase0, int32_t freq, - int32_t gain1, int32_t gain2, bool add, const Controllers *controllers) { + int32_t gain1, int32_t gain2, bool add) { int32_t dgain = (gain2 - gain1 + (N >> 1)) >> LG_N; int32_t gain = gain1; int32_t phase = phase0; - if (add) { - for (int i = 0; i < N; i++) { - gain += dgain; - int32_t y = Sin::lookup(phase + input[i]); - y &= controllers->sinBitFilter; - int32_t y1 = ((int64_t)y * (int64_t)gain) >> 24; - output[i] += y1; - phase += freq; - } - } else { - for (int i = 0; i < N; i++) { - gain += dgain; - int32_t y = Sin::lookup(phase + input[i]); - y &= controllers->sinBitFilter; - int32_t y1 = ((int64_t)y * (int64_t)gain) >> 24; - output[i] = y1; - phase += freq; - } + const int32_t *adder = add ? output : zeros; + + for (int i = 0; i < N; i++) { + gain += dgain; + int32_t y = mkiSin((phase+input[i]), gain); + output[i] = y + adder[i]; + phase += freq; } } void EngineMkI::compute_pure(int32_t *output, int32_t phase0, int32_t freq, - int32_t gain1, int32_t gain2, bool add, const Controllers *controllers) { + int32_t gain1, int32_t gain2, bool add) { int32_t dgain = (gain2 - gain1 + (N >> 1)) >> LG_N; int32_t gain = gain1; int32_t phase = phase0; - if (add) { - for (int i = 0; i < N; i++) { - gain += dgain; - int32_t y = Sin::lookup(phase); - y &= controllers->sinBitFilter; - int32_t y1 = ((int64_t)y * (int64_t)gain) >> 24; - output[i] += y1; - phase += freq; - } - } else { - for (int i = 0; i < N; i++) { - gain += dgain; - int32_t y = Sin::lookup(phase); - y &= controllers->sinBitFilter; - int32_t y1 = ((int64_t)y * (int64_t)gain) >> 24; - output[i] = y1; - phase += freq; - } + const int32_t *adder = add ? output : zeros; + + for (int i = 0; i < N; i++) { + gain += dgain; + int32_t y = mkiSin(phase , gain); + output[i] = y + adder[i]; + phase += freq; } } void EngineMkI::compute_fb(int32_t *output, int32_t phase0, int32_t freq, int32_t gain1, int32_t gain2, - int32_t *fb_buf, int fb_shift, bool add, const Controllers *controllers) { + int32_t *fb_buf, int fb_shift, bool add) { int32_t dgain = (gain2 - gain1 + (N >> 1)) >> LG_N; int32_t gain = gain1; int32_t phase = phase0; + const int32_t *adder = add ? output : zeros; int32_t y0 = fb_buf[0]; int32_t y = fb_buf[1]; - if (add) { - for (int i = 0; i < N; i++) { - gain += dgain; - int32_t scaled_fb = (y0 + y) >> (fb_shift + 1); - y0 = y; - y = Sin::lookup(phase + scaled_fb); - y &= controllers->sinBitFilter; - y = ((int64_t)y * (int64_t)gain) >> 24; - output[i] += y; - phase += freq; - } - } else { - for (int i = 0; i < N; i++) { - gain += dgain; - int32_t scaled_fb = (y0 + y) >> (fb_shift + 1); - y0 = y; - y = Sin::lookup(phase + scaled_fb); - y &= controllers->sinBitFilter; - y = ((int64_t)y * (int64_t)gain) >> 24; - output[i] = y; - phase += freq; - } + + for (int i = 0; i < N; i++) { + gain += dgain; + int32_t scaled_fb = (y0 + y) >> (fb_shift + 1); + y0 = y; + y = mkiSin((phase+scaled_fb), gain); + output[i] = y + adder[i]; + phase += freq; } + fb_buf[0] = y0; fb_buf[1] = y; } - // exclusively used for ALGO 6 with feedback -void EngineMkI::compute_fb2(int32_t *output, FmOpParams *parms, int32_t gain01, int32_t gain02, int32_t *fb_buf, int fb_shift, const Controllers *cont) { +void EngineMkI::compute_fb2(int32_t *output, FmOpParams *parms, int32_t gain01, int32_t gain02, int32_t *fb_buf, int fb_shift) { int32_t dgain[2]; int32_t gain[2]; int32_t phase[2]; @@ -158,39 +214,37 @@ void EngineMkI::compute_fb2(int32_t *output, FmOpParams *parms, int32_t gain01, phase[0] = parms[0].phase; phase[1] = parms[1].phase; - + + parms[1].gain_out = (ENV_MAX-(parms[1].level_in >> (28-ENV_BITDEPTH))); + gain[0] = gain01; - gain[1] = parms[1].gain_out; - + gain[1] = parms[1].gain_out == 0 ? (ENV_MAX-1) : parms[1].gain_out; + dgain[0] = (gain02 - gain01 + (N >> 1)) >> LG_N; + dgain[1] = (parms[1].gain_out - (parms[1].gain_out == 0 ? (ENV_MAX-1) : parms[1].gain_out)); - parms[1].gain_out = Exp2::lookup(parms[1].level_in - (14 * (1 << 24))); - dgain[1] = (parms[1].gain_out - gain[1] + (N >> 1)) >> LG_N; - for (int i = 0; i < N; i++) { + int32_t scaled_fb = (y0 + y) >> (fb_shift + 1); + // op 0 gain[0] += dgain[0]; - int32_t scaled_fb = (y0 + y) >> (fb_shift + 2); // tsk tsk tsk: this needs some tuning y0 = y; - y = Sin::lookup(phase[0] + scaled_fb); - y &= cont->sinBitFilter; - y = ((int64_t)y * (int64_t)gain[0]) >> 24; + y = mkiSin(phase[0]+scaled_fb, gain[0]); phase[0] += parms[0].freq; // op 1 gain[1] += dgain[1]; - y = Sin::lookup(phase[1] + y); - y &= cont->sinBitFilter; - y = ((int64_t)y * (int64_t)gain[1]) >> 24; - output[i] = y; + y = mkiSin(phase[1]+y, gain[1]); phase[1] += parms[1].freq; + + output[i] = y; } fb_buf[0] = y0; fb_buf[1] = y; } // exclusively used for ALGO 4 with feedback -void EngineMkI::compute_fb3(int32_t *output, FmOpParams *parms, int32_t gain01, int32_t gain02, int32_t *fb_buf, int fb_shift, const Controllers *cont) { +void EngineMkI::compute_fb3(int32_t *output, FmOpParams *parms, int32_t gain01, int32_t gain02, int32_t *fb_buf, int fb_shift) { int32_t dgain[3]; int32_t gain[3]; int32_t phase[3]; @@ -200,53 +254,55 @@ void EngineMkI::compute_fb3(int32_t *output, FmOpParams *parms, int32_t gain01, phase[0] = parms[0].phase; phase[1] = parms[1].phase; phase[2] = parms[2].phase; - - gain[0] = gain01; - gain[1] = parms[1].gain_out; - gain[2] = parms[2].gain_out; + parms[1].gain_out = (ENV_MAX-(parms[1].level_in >> (28-ENV_BITDEPTH))); + parms[2].gain_out = (ENV_MAX-(parms[2].level_in >> (28-ENV_BITDEPTH))); + + gain[0] = gain01; + gain[1] = parms[1].gain_out == 0 ? (ENV_MAX-1) : parms[1].gain_out; + gain[2] = parms[2].gain_out == 0 ? (ENV_MAX-1) : parms[2].gain_out; + dgain[0] = (gain02 - gain01 + (N >> 1)) >> LG_N; + dgain[1] = (parms[1].gain_out - (parms[1].gain_out == 0 ? (ENV_MAX-1) : parms[1].gain_out)); + dgain[2] = (parms[2].gain_out - (parms[2].gain_out == 0 ? (ENV_MAX-1) : parms[2].gain_out)); - parms[1].gain_out = Exp2::lookup(parms[1].level_in - (14 * (1 << 24))); - dgain[1] = (parms[1].gain_out - gain[1] + (N >> 1)) >> LG_N; - parms[2].gain_out = Exp2::lookup(parms[2].level_in - (14 * (1 << 24))); - dgain[2] = (parms[1].gain_out - gain[2] + (N >> 1)) >> LG_N; for (int i = 0; i < N; i++) { + int32_t scaled_fb = (y0 + y) >> (fb_shift + 1); + // op 0 gain[0] += dgain[0]; - int32_t scaled_fb = (y0 + y) >> (fb_shift + 6); // tsk tsk tsk: this needs some tuning y0 = y; - y = Sin::lookup(phase[0] + scaled_fb); - y &= cont->sinBitFilter; - y = ((int64_t)y * (int64_t)gain[0]) >> 24; + y = mkiSin(phase[0]+scaled_fb, gain[0]); phase[0] += parms[0].freq; // op 1 gain[1] += dgain[1]; - y = Sin::lookup(phase[1] + y); - y &= cont->sinBitFilter; - y = ((int64_t)y * (int64_t)gain[1]) >> 24; + y = mkiSin(phase[1]+y, gain[1]); phase[1] += parms[1].freq; // op 2 gain[2] += dgain[2]; - y = Sin::lookup(phase[2] + y); - y &= cont->sinBitFilter; - y = ((int64_t)y * (int64_t)gain[2]) >> 24; + y = mkiSin(phase[2]+y, gain[2]); + phase[2] += parms[2].freq; + output[i] = y; - phase[2] += parms[2].freq; } fb_buf[0] = y0; fb_buf[1] = y; } - -void EngineMkI::render(int32_t *output, FmOpParams *params, int algorithm, - int32_t *fb_buf, int feedback_shift, const Controllers *controllers) { - const int kLevelThresh = 1120; - const FmAlgorithm alg = algo2[algorithm]; +void EngineMkI::render(int32_t *output, FmOpParams *params, int algorithm, int32_t *fb_buf, int feedback_shift) { + const int kLevelThresh = ENV_MAX-100; + FmAlgorithm alg = algorithms[algorithm]; bool has_contents[3] = { true, false, false }; + bool fb_on = feedback_shift < 16; + + switch(algorithm) { + case 3 : case 5 : + if ( fb_on ) + alg.ops[0] = 0xc4; + } for (int op = 0; op < 6; op++) { int flags = alg.ops[op]; @@ -255,11 +311,11 @@ void EngineMkI::render(int32_t *output, FmOpParams *params, int algorithm, int inbus = (flags >> 4) & 3; int outbus = flags & 3; int32_t *outptr = (outbus == 0) ? output : buf_[outbus - 1].get(); - int32_t gain1 = param.gain_out; - int32_t gain2 = Exp2::lookup(param.level_in - (14 * (1 << 24))); + int32_t gain1 = param.gain_out == 0 ? (ENV_MAX-1) : param.gain_out; + int32_t gain2 = ENV_MAX-(param.level_in >> (28-ENV_BITDEPTH)); param.gain_out = gain2; - if (gain1 >= kLevelThresh || gain2 >= kLevelThresh) { + if (gain1 <= kLevelThresh || gain2 <= kLevelThresh) { if (!has_contents[outbus]) { add = false; @@ -267,41 +323,34 @@ void EngineMkI::render(int32_t *output, FmOpParams *params, int algorithm, if (inbus == 0 || !has_contents[inbus]) { // PG: this is my 'dirty' implementation of FB for 2 and 3 operators... - // still needs some tuning... - if ((flags & 0xc0) == 0xc0 && feedback_shift < 16) { + if ((flags & 0xc0) == 0xc0 && fb_on) { switch ( algorithm ) { - // two operator feedback, process exception for ALGO 6 - case 5 : - compute_fb2(outptr, params, gain1, gain2, fb_buf, feedback_shift, controllers); - params[1].phase += params[1].freq << LG_N; // yuk, hack, we already processed op-5 - op++; // ignore next operator; - break; // three operator feedback, process exception for ALGO 4 case 3 : - compute_fb3(outptr, params, gain1, gain2, fb_buf, feedback_shift, controllers); + compute_fb3(outptr, params, gain1, gain2, fb_buf, min((feedback_shift+2), 16)); params[1].phase += params[1].freq << LG_N; // hack, we already processed op-5 - op-4 params[2].phase += params[2].freq << LG_N; // yuk yuk op += 2; // ignore the 2 other operators break; + // two operator feedback, process exception for ALGO 6 + case 5 : + compute_fb2(outptr, params, gain1, gain2, fb_buf, min((feedback_shift+2), 16)); + params[1].phase += params[1].freq << LG_N; // yuk, hack, we already processed op-5 + op++; // ignore next operator; + break; default: // one operator feedback, normal proces - //cout << "\t" << op << " fb " << inbus << outbus << add << endl; - compute_fb(outptr, param.phase, param.freq,gain1, gain2, fb_buf, feedback_shift, add, controllers); + compute_fb(outptr, param.phase, param.freq, gain1, gain2, fb_buf, feedback_shift, add); break; } } else { - // cout << op << " pure " << inbus << outbus << add << endl; - compute_pure(outptr, param.phase, param.freq, gain1, gain2, add, controllers); + compute_pure(outptr, param.phase, param.freq, gain1, gain2, add); } } else { - - // cout << op << " normal " << inbus << outbus << " " << param.freq << add << endl; - compute(outptr, buf_[inbus - 1].get(), - param.phase, param.freq, gain1, gain2, add, controllers); + compute(outptr, buf_[inbus - 1].get(), param.phase, param.freq, gain1, gain2, add); } has_contents[outbus] = true; - } else if (!add) { has_contents[outbus] = false; } diff --git a/ports/dexed/source/EngineMkI.h b/ports/dexed/source/EngineMkI.h index 280510f6..9f355fe4 100644 --- a/ports/dexed/source/EngineMkI.h +++ b/ports/dexed/source/EngineMkI.h @@ -26,24 +26,23 @@ class EngineMkI : public FmCore { - //refacter this when it is working - const static FmAlgorithm algo2[32]; public: - virtual void render(int32_t *output, FmOpParams *params, int algorithm, - int32_t *fb_buf, int feedback_shift, const Controllers *controllers); + EngineMkI(); + + void render(int32_t *output, FmOpParams *params, int algorithm, int32_t *fb_buf, int feedback_shift) override; void compute(int32_t *output, const int32_t *input, int32_t phase0, int32_t freq, int32_t gain1, int32_t gain2, - bool add, const Controllers *controllers); + bool add); void compute_pure(int32_t *output, int32_t phase0, int32_t freq, int32_t gain1, int32_t gain2, - bool add, const Controllers *controllers); + bool add); void compute_fb(int32_t *output, int32_t phase0, int32_t freq, int32_t gain1, int32_t gain2, - int32_t *fb_buf, int fb_gain, bool add, const Controllers *controllers); + int32_t *fb_buf, int fb_gain, bool add); - void compute_fb2(int32_t *output, FmOpParams *params, int32_t gain01, int32_t gain02, int32_t *fb_buf, int fb_shift, const Controllers *controllers); + void compute_fb2(int32_t *output, FmOpParams *params, int32_t gain01, int32_t gain02, int32_t *fb_buf, int fb_shift); - void compute_fb3(int32_t *output, FmOpParams *params, int32_t gain01, int32_t gain02, int32_t *fb_buf, int fb_shift, const Controllers *controllers); + void compute_fb3(int32_t *output, FmOpParams *params, int32_t gain01, int32_t gain02, int32_t *fb_buf, int fb_shift); }; diff --git a/ports/dexed/source/EngineOpl.cpp b/ports/dexed/source/EngineOpl.cpp index a43873e6..04eb466d 100644 --- a/ports/dexed/source/EngineOpl.cpp +++ b/ports/dexed/source/EngineOpl.cpp @@ -26,7 +26,7 @@ #include "EngineOpl.h" #ifdef _WIN32 - __declspec(align(16)) int zeros[N] = {0}; + __declspec(align(16)) const int zeros[N] = {0}; #else const int32_t __attribute__ ((aligned(16))) zeros[N] = {0}; #endif @@ -71,7 +71,7 @@ uint16_t sinExpTable[256] = { 937, 942, 948, 953, 959, 964, 969, 975, 980, 986, 991, 996, 1002, 1007, 1013, 1018 }; -inline uint16_t sinLog( uint16_t phi ) { +inline uint16_t sinLog(uint16_t phi) { const uint8_t index = (phi & 0xff); switch( ( phi & 0x0300 ) ) { @@ -169,7 +169,7 @@ void EngineOpl::compute_fb(int32_t *output, int32_t phase0, int32_t freq, void EngineOpl::render(int32_t *output, FmOpParams *params, int algorithm, - int32_t *fb_buf, int feedback_shift, const Controllers *controllers) { + int32_t *fb_buf, int feedback_shift) { const int kLevelThresh = 507; // really ???? const FmAlgorithm alg = algorithms[algorithm]; bool has_contents[3] = { true, false, false }; @@ -211,4 +211,16 @@ void EngineOpl::render(int32_t *output, FmOpParams *params, int algorithm, } param.phase += param.freq << LG_N; } -} \ No newline at end of file +} + + + + + + + + + + + + diff --git a/ports/dexed/source/EngineOpl.h b/ports/dexed/source/EngineOpl.h index a8d61095..dc1784c6 100644 --- a/ports/dexed/source/EngineOpl.h +++ b/ports/dexed/source/EngineOpl.h @@ -31,7 +31,7 @@ class EngineOpl : public FmCore { public: virtual void render(int32_t *output, FmOpParams *params, int algorithm, - int32_t *fb_buf, int feedback_shift, const Controllers *controllers); + int32_t *fb_buf, int feedback_shift) override; void compute(int32_t *output, const int32_t *input, int32_t phase0, int32_t freq, int32_t gain1, int32_t gain2, bool add); void compute_pure(int32_t *output, int32_t phase0, int32_t freq, int32_t gain1, int32_t gain2, bool add); void compute_fb(int32_t *output, int32_t phase0, int32_t freq, diff --git a/ports/dexed/source/GlobalEditor.cpp b/ports/dexed/source/GlobalEditor.cpp index 60d0d601..8d26a5b9 100644 --- a/ports/dexed/source/GlobalEditor.cpp +++ b/ports/dexed/source/GlobalEditor.cpp @@ -7,12 +7,12 @@ the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded and re-saved. - Created with Introjucer version: 3.1.0 + Created with Introjucer version: 3.2.0 ------------------------------------------------------------------------------ The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-13 by Raw Material Software Ltd. + Copyright (c) 2015 - ROLI Ltd. ============================================================================== */ @@ -59,11 +59,39 @@ public: } } }; + +class AboutBox : public DialogWindow { +public: + Image about_png; + + AboutBox(Component *parent) : DialogWindow("About", Colour(0xFF000000), true) { + setUsingNativeTitleBar(false); + setAlwaysOnTop(true); + about_png = ImageCache::getFromMemory(BinaryData::about_png, BinaryData::about_pngSize); + setSize(about_png.getWidth(), about_png.getHeight()); + centreAroundComponent (parent, getWidth(), getHeight()); + } + + void closeButtonPressed() { + setVisible (false); + } + + void paint(Graphics &g) { + g.drawImage (about_png, 0, 0, about_png.getWidth(), about_png.getHeight(), + 0, 0, about_png.getWidth(), about_png.getHeight()); + g.setColour(Colour(0xFF000000)); + String ver("Version " DEXED_VERSION " ; build date " __DATE__ ); + g.drawSingleLineText(ver, 18, 130); + } +}; //[/MiscUserDefs] //============================================================================== GlobalEditor::GlobalEditor () { + //[Constructor_pre] You can add your own custom stuff here.. + //[/Constructor_pre] + addAndMakeVisible (lfoSpeed = new Slider ("lfoSpeed")); lfoSpeed->setRange (0, 99, 1); lfoSpeed->setSliderStyle (Slider::RotaryVerticalDrag); @@ -224,6 +252,20 @@ GlobalEditor::GlobalEditor () addAndMakeVisible (programSelector = new ProgramSelector()); programSelector->setName ("programSelector"); + addAndMakeVisible (aboutButton = new ImageButton ("aboutButton")); + aboutButton->setButtonText (String::empty); + aboutButton->addListener (this); + + aboutButton->setImages (false, true, false, + Image(), 1.000f, Colour (0x00000000), + Image(), 1.000f, Colour (0x00000000), + Image(), 1.000f, Colour (0x00000000)); + addAndMakeVisible (tune = new Slider ("tune")); + tune->setRange (0, 1, 0); + tune->setSliderStyle (Slider::RotaryVerticalDrag); + tune->setTextBoxStyle (Slider::NoTextBox, true, 80, 20); + tune->addListener (this); + //[UserPreSize] //[/UserPreSize] @@ -284,6 +326,8 @@ GlobalEditor::~GlobalEditor() monoMode = nullptr; lfoType = nullptr; programSelector = nullptr; + aboutButton = nullptr; + tune = nullptr; //[Destructor]. You can add your own custom destruction code here.. @@ -306,6 +350,9 @@ void GlobalEditor::paint (Graphics& g) void GlobalEditor::resized() { + //[UserPreResize] Add your own custom resize code here.. + //[/UserPreResize] + lfoSpeed->setBounds (564, 50, 34, 34); lfoAmDepth->setBounds (686, 50, 34, 34); lfoPitchDepth->setBounds (646, 50, 34, 34); @@ -338,6 +385,8 @@ void GlobalEditor::resized() monoMode->setBounds (249, 65, 48, 26); lfoType->setBounds (583, 8, 36, 26); programSelector->setBounds (153, 115, 112, 18); + aboutButton->setBounds (8, 11, 135, 46); + tune->setBounds (190, 9, 34, 34); //[UserResized] Add your own custom resize handling here.. //[/UserResized] } @@ -450,6 +499,11 @@ void GlobalEditor::sliderValueChanged (Slider* sliderThatWasMoved) //[UserSliderCode_output] -- add your slider handling code here.. //[/UserSliderCode_output] } + else if (sliderThatWasMoved == tune) + { + //[UserSliderCode_tune] -- add your slider handling code here.. + //[/UserSliderCode_tune] + } //[UsersliderValueChanged_Post] //[/UsersliderValueChanged_Post] @@ -503,6 +557,13 @@ void GlobalEditor::buttonClicked (Button* buttonThatWasClicked) repaint(); //[/UserButtonCode_monoMode] } + else if (buttonThatWasClicked == aboutButton) + { + //[UserButtonCode_aboutButton] -- add your button handler code here.. + AboutBox about(this->getParentComponent()); + about.runModalLoop(); + //[/UserButtonCode_aboutButton] + } //[UserbuttonClicked_Post] //[/UserbuttonClicked_Post] @@ -536,14 +597,17 @@ void GlobalEditor::bind(DexedAudioProcessorEditor *edit) { processor->fxCutoff->bind(cutoff); processor->fxReso->bind(reso); processor->output->bind(output); - algoDisplay->algo = &(processor->data[134]); + processor->tune->bind(tune); + algoDisplay->algo = (char *) &(processor->data[134]); pitchEnvDisplay->pvalues = &(processor->data[126]); + algoDisplay->opStatus = processor->controllers.opSwitch; + editor = edit; midiMonitor = new MidiMonitor(&(processor->sysexComm)); - addAndMakeVisible(midiMonitor); - midiMonitor->setBounds(155, 21, 80, 45); + //addAndMakeVisible(midiMonitor); + //midiMonitor->setBounds(155, 21, 80, 45); repaint(); } @@ -574,6 +638,15 @@ void GlobalEditor::updateVu(float f) { void GlobalEditor::setMonoState(bool state) { monoMode->setToggleState(state ? Button::buttonDown : Button::buttonNormal, dontSendNotification); } + +void GlobalEditor::mouseDown(const MouseEvent &e) { + if ( e.mods.isRightButtonDown() || e.mods.isAnyModifierKeyDown() ) { + PopupMenu popup; + popup.addItem(1, "Send current program to DX7"); + if ( popup.show() == 1 ) + processor->sendCurrentSysexProgram(); + } +} //[/MiscUserCode] @@ -705,6 +778,16 @@ BEGIN_JUCER_METADATA + + END_JUCER_METADATA diff --git a/ports/dexed/source/GlobalEditor.h b/ports/dexed/source/GlobalEditor.h index d2a8e6fe..c8ad2aa4 100644 --- a/ports/dexed/source/GlobalEditor.h +++ b/ports/dexed/source/GlobalEditor.h @@ -7,12 +7,12 @@ the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded and re-saved. - Created with Introjucer version: 3.1.0 + Created with Introjucer version: 3.2.0 ------------------------------------------------------------------------------ The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-13 by Raw Material Software Ltd. + Copyright (c) 2015 - ROLI Ltd. ============================================================================== */ @@ -61,6 +61,8 @@ public: void setMonoState(bool state); ProgramSelector *programs; ScopedPointer midiMonitor; + + void mouseDown(const MouseEvent& e) override; //[/UserMethods] void paint (Graphics& g); @@ -112,6 +114,8 @@ private: ScopedPointer monoMode; ScopedPointer lfoType; ScopedPointer programSelector; + ScopedPointer aboutButton; + ScopedPointer tune; //============================================================================== diff --git a/ports/dexed/source/JucePluginCharacteristics.h b/ports/dexed/source/JucePluginCharacteristics.h index 8ba954a1..e22d4695 100644 --- a/ports/dexed/source/JucePluginCharacteristics.h +++ b/ports/dexed/source/JucePluginCharacteristics.h @@ -33,10 +33,10 @@ #define JucePlugin_ManufacturerEmail "" #endif #ifndef JucePlugin_ManufacturerCode - #define JucePlugin_ManufacturerCode 'DGSB' + #define JucePlugin_ManufacturerCode 0x44475342 // 'DGSB' #endif #ifndef JucePlugin_PluginCode - #define JucePlugin_PluginCode 'Dexd' + #define JucePlugin_PluginCode 0x44657864 // 'Dexd' #endif #ifndef JucePlugin_MaxNumInputChannels #define JucePlugin_MaxNumInputChannels 0 diff --git a/ports/dexed/source/OperatorEditor.cpp b/ports/dexed/source/OperatorEditor.cpp index d3c40534..2bea0ea2 100644 --- a/ports/dexed/source/OperatorEditor.cpp +++ b/ports/dexed/source/OperatorEditor.cpp @@ -7,12 +7,12 @@ the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded and re-saved. - Created with Introjucer version: 3.1.0 + Created with Introjucer version: 3.2.0 ------------------------------------------------------------------------------ The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-13 by Raw Material Software Ltd. + Copyright (c) 2015 - ROLI Ltd. ============================================================================== */ @@ -25,13 +25,30 @@ //[MiscUserDefs] You can add your own user definitions and misc code here... #ifndef M_LN10 -#define M_LN10 2.30258509299404568402 +#define M_LN10 2.30258509299404568402 #endif + +class OperatorSwitch : public ToggleButton { + Image image; +public : + OperatorSwitch() : ToggleButton("opSwitch") { + image = DXLookNFeel::getLookAndFeel()->imageSwitchOperator; + setSize(32, 32); + } + + void paintButton (Graphics& g, bool isMouseOverButton, bool isButtonDown) { + g.drawImage(image, 0, 0, 32, 32, 0, getToggleState() ? 0 : 32, 32, 32); + } +}; + //[/MiscUserDefs] //============================================================================== OperatorEditor::OperatorEditor () { + //[Constructor_pre] You can add your own custom stuff here.. + //[/Constructor_pre] + addAndMakeVisible (s_egl1 = new Slider ("egl1")); s_egl1->setRange (0, 99, 1); s_egl1->setSliderStyle (Slider::RotaryVerticalDrag); @@ -173,6 +190,7 @@ OperatorEditor::OperatorEditor () //[UserPreSize] + addAndMakeVisible(opSwitch = new OperatorSwitch()); //[/UserPreSize] setSize (287, 218); @@ -233,6 +251,7 @@ OperatorEditor::~OperatorEditor() //[Destructor]. You can add your own custom destruction code here.. + opSwitch = nullptr; //[/Destructor] } @@ -244,9 +263,14 @@ void OperatorEditor::paint (Graphics& g) //[/UserPrePaint] //[UserPaint] Add your own custom painting code here.. - g.setColour (Colours::white); + + if ( opSwitch->getToggleState() ) + g.setColour(Colours::white); + else + g.setColour(DXLookNFeel::roundBackground); + g.setFont(Font (30.00f, Font::plain)); - g.drawText(opNum, 242, 8, 30, 30, Justification::centred, true); + g.drawText(opNum, 250, 14, 30, 30, Justification::centred, true); bool state = opMode->getToggleState(); @@ -259,6 +283,9 @@ void OperatorEditor::paint (Graphics& g) void OperatorEditor::resized() { + //[UserPreResize] Add your own custom resize code here.. + //[/UserPreResize] + s_egl1->setBounds (5, 128, 34, 34); s_egl2->setBounds (33, 129, 34, 34); s_egl3->setBounds (61, 128, 34, 34); @@ -284,6 +311,7 @@ void OperatorEditor::resized() kbdLeftCurve->setBounds (128, 170, 36, 26); kbdRightCurve->setBounds (240, 170, 36, 26); //[UserResized] Add your own custom resize handling here.. + opSwitch->setBounds(226, 13, 64, 32); //[/UserResized] } @@ -439,6 +467,7 @@ void OperatorEditor::bind(DexedAudioProcessor *parent, int op) { parent->opCtrl[op].sclRate->bind(sclRateScaling); parent->opCtrl[op].ampModSens->bind(ampModSens); parent->opCtrl[op].velModSens->bind(keyVelSens); + parent->opCtrl[op].opSwitch->bind(opSwitch); int offset = parent->opCtrl[op].egRate[0]->getOffset(); envDisplay->pvalues = &(parent->data[offset]); @@ -486,7 +515,7 @@ void OperatorEditor::updateEnvPos(char pos) { } void OperatorEditor::mouseDown(const MouseEvent &event) { - if ( event.mods.isRightButtonDown() ) { + if ( event.mods.isRightButtonDown() || event.mods.isAnyModifierKeyDown()) { PopupMenu popup; popup.addItem(1, "Copy Operator Values"); @@ -507,7 +536,7 @@ void OperatorEditor::mouseDown(const MouseEvent &event) { case 3: processor->pasteOpFromClipboard(internalOp); break; - + case 4: processor->sendCurrentSysexProgram(); break; diff --git a/ports/dexed/source/OperatorEditor.h b/ports/dexed/source/OperatorEditor.h index 4d22d493..48c95406 100644 --- a/ports/dexed/source/OperatorEditor.h +++ b/ports/dexed/source/OperatorEditor.h @@ -7,12 +7,12 @@ the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded and re-saved. - Created with Introjucer version: 3.1.0 + Created with Introjucer version: 3.2.0 ------------------------------------------------------------------------------ The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-13 by Raw Material Software Ltd. + Copyright (c) 2015 - ROLI Ltd. ============================================================================== */ @@ -56,10 +56,10 @@ public: void mouseDown(const MouseEvent& e) override; //[/UserMethods] - void paint (Graphics& g); - void resized(); - void sliderValueChanged (Slider* sliderThatWasMoved); - void buttonClicked (Button* buttonThatWasClicked); + void paint (Graphics& g) override; + void resized() override; + void sliderValueChanged (Slider* sliderThatWasMoved) override; + void buttonClicked (Button* buttonThatWasClicked) override; @@ -68,10 +68,9 @@ private: String opNum; int internalOp; Image light; - DexedAudioProcessor *processor; - Image background; + ScopedPointer opSwitch; //[/UserVariables] //============================================================================== diff --git a/ports/dexed/source/ParamDialog.cpp b/ports/dexed/source/ParamDialog.cpp index 82452a03..da50b90e 100644 --- a/ports/dexed/source/ParamDialog.cpp +++ b/ports/dexed/source/ParamDialog.cpp @@ -7,12 +7,12 @@ the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded and re-saved. - Created with Introjucer version: 3.1.0 + Created with Introjucer version: 3.2.0 ------------------------------------------------------------------------------ The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-13 by Raw Material Software Ltd. + Copyright (c) 2015 - ROLI Ltd. ============================================================================== */ @@ -30,6 +30,9 @@ //============================================================================== ParamDialog::ParamDialog () { + //[Constructor_pre] You can add your own custom stuff here.. + //[/Constructor_pre] + addAndMakeVisible (pitchRange = new Slider ("pitchRange")); pitchRange->setRange (0, 12, 1); pitchRange->setSliderStyle (Slider::RotaryVerticalDrag); @@ -67,7 +70,7 @@ ParamDialog::ParamDialog () engineReso->setJustificationType (Justification::centredLeft); engineReso->setTextWhenNothingSelected (String::empty); engineReso->setTextWhenNoChoicesAvailable (TRANS("(no choices)")); - engineReso->addItem (TRANS("Modern (Direct)"), 1); + engineReso->addItem (TRANS("Modern (24-bit)"), 1); engineReso->addItem (TRANS("Mark I"), 2); engineReso->addItem (TRANS("OPL Series"), 3); engineReso->addListener (this); @@ -75,11 +78,83 @@ ParamDialog::ParamDialog () addAndMakeVisible (showKeyboard = new ToggleButton ("showKeyboard")); showKeyboard->setButtonText (String::empty); + addAndMakeVisible (whlRange = new Slider ("whlRange")); + whlRange->setRange (0, 99, 1); + whlRange->setSliderStyle (Slider::RotaryVerticalDrag); + whlRange->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20); + whlRange->addListener (this); + + addAndMakeVisible (ftRange = new Slider ("ftRange")); + ftRange->setRange (0, 99, 1); + ftRange->setSliderStyle (Slider::RotaryVerticalDrag); + ftRange->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20); + ftRange->addListener (this); + + addAndMakeVisible (brRange = new Slider ("brRange")); + brRange->setRange (0, 99, 1); + brRange->setSliderStyle (Slider::RotaryVerticalDrag); + brRange->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20); + brRange->addListener (this); + + addAndMakeVisible (atRange = new Slider ("atRange")); + atRange->setRange (0, 99, 1); + atRange->setSliderStyle (Slider::RotaryVerticalDrag); + atRange->setTextBoxStyle (Slider::TextBoxLeft, false, 80, 20); + atRange->addListener (this); + + addAndMakeVisible (whlEg = new ToggleButton ("whlEg")); + whlEg->setButtonText (String::empty); + whlEg->addListener (this); + + addAndMakeVisible (ftEg = new ToggleButton ("ftEg")); + ftEg->setButtonText (String::empty); + ftEg->addListener (this); + + addAndMakeVisible (brEg = new ToggleButton ("brEg")); + brEg->setButtonText (String::empty); + brEg->addListener (this); + + addAndMakeVisible (atEg = new ToggleButton ("atEg")); + atEg->setButtonText (String::empty); + atEg->addListener (this); + + addAndMakeVisible (whlAmp = new ToggleButton ("whlAmp")); + whlAmp->setButtonText (String::empty); + whlAmp->addListener (this); + + addAndMakeVisible (ftAmp = new ToggleButton ("ftAmp")); + ftAmp->setButtonText (String::empty); + ftAmp->addListener (this); + + addAndMakeVisible (brAmp = new ToggleButton ("brAmp")); + brAmp->setButtonText (String::empty); + brAmp->addListener (this); + + addAndMakeVisible (atAmp = new ToggleButton ("atAmp")); + atAmp->setButtonText (String::empty); + atAmp->addListener (this); + + addAndMakeVisible (whlPitch = new ToggleButton ("whlPitch")); + whlPitch->setButtonText (String::empty); + whlPitch->addListener (this); + + addAndMakeVisible (ftPitch = new ToggleButton ("ftPitch")); + ftPitch->setButtonText (String::empty); + ftPitch->addListener (this); + + addAndMakeVisible (brPitch = new ToggleButton ("brPitch")); + brPitch->setButtonText (String::empty); + brPitch->addListener (this); + + addAndMakeVisible (atPitch = new ToggleButton ("atPitch")); + atPitch->setButtonText (String::empty); + atPitch->addListener (this); + //[UserPreSize] //[/UserPreSize] - setSize (350, 350); + setSize (710, 350); //[Constructor] You can add your own custom stuff here.. @@ -110,6 +185,22 @@ ParamDialog::~ParamDialog() sysexChl = nullptr; engineReso = nullptr; showKeyboard = nullptr; + whlRange = nullptr; + ftRange = nullptr; + brRange = nullptr; + atRange = nullptr; + whlEg = nullptr; + ftEg = nullptr; + brEg = nullptr; + atEg = nullptr; + whlAmp = nullptr; + ftAmp = nullptr; + brAmp = nullptr; + atAmp = nullptr; + whlPitch = nullptr; + ftPitch = nullptr; + brPitch = nullptr; + atPitch = nullptr; //[Destructor]. You can add your own custom destruction code here.. @@ -172,12 +263,60 @@ void ParamDialog::paint (Graphics& g) 20, 96, 276, 23, Justification::centredLeft, true); + g.setColour (Colours::black); + g.fillRect (352, 11, 1, 325); + + g.setColour (Colours::white); + g.setFont (Font (15.00f, Font::plain)); + g.drawText (TRANS("Wheel"), + 368, 16, 276, 23, + Justification::centredLeft, true); + + g.setColour (Colours::white); + g.setFont (Font (15.00f, Font::plain)); + g.drawText (TRANS("Foot"), + 368, 96, 276, 23, + Justification::centredLeft, true); + + g.setColour (Colours::white); + g.setFont (Font (15.00f, Font::plain)); + g.drawText (TRANS("Breath"), + 368, 56, 276, 23, + Justification::centredLeft, true); + + g.setColour (Colours::white); + g.setFont (Font (15.00f, Font::plain)); + g.drawText (TRANS("After Touch"), + 368, 136, 276, 23, + Justification::centredLeft, true); + + g.setColour (Colours::white); + g.setFont (Font (15.00f, Font::plain)); + g.drawText (TRANS("PITCH"), + 533, 163, 48, 23, + Justification::centredLeft, true); + + g.setColour (Colours::white); + g.setFont (Font (15.00f, Font::plain)); + g.drawText (TRANS("AMP"), + 589, 163, 48, 23, + Justification::centredLeft, true); + + g.setColour (Colours::white); + g.setFont (Font (15.00f, Font::plain)); + g.drawText (TRANS("EG BIAS"), + 645, 163, 48, 23, + Justification::centredLeft, true); + //[UserPaint] Add your own custom painting code here.. //[/UserPaint] } void ParamDialog::resized() { + //[UserPreResize] Add your own custom resize code here.. + //[/UserPreResize] + pitchRange->setBounds (264, 16, 72, 24); pitchStep->setBounds (264, 56, 72, 24); sysexIn->setBounds (104, 224, 224, 24); @@ -185,6 +324,22 @@ void ParamDialog::resized() sysexChl->setBounds (264, 304, 72, 24); engineReso->setBounds (160, 156, 168, 24); showKeyboard->setBounds (264, 96, 56, 24); + whlRange->setBounds (448, 16, 72, 24); + ftRange->setBounds (448, 56, 72, 24); + brRange->setBounds (448, 96, 72, 24); + atRange->setBounds (448, 136, 72, 24); + whlEg->setBounds (640, 16, 56, 24); + ftEg->setBounds (640, 56, 56, 24); + brEg->setBounds (640, 96, 56, 24); + atEg->setBounds (640, 136, 56, 24); + whlAmp->setBounds (584, 16, 56, 24); + ftAmp->setBounds (584, 56, 56, 24); + brAmp->setBounds (584, 96, 56, 24); + atAmp->setBounds (584, 136, 56, 24); + whlPitch->setBounds (528, 16, 56, 24); + ftPitch->setBounds (528, 56, 56, 24); + brPitch->setBounds (528, 96, 56, 24); + atPitch->setBounds (528, 136, 56, 24); //[UserResized] Add your own custom resize handling here.. //[/UserResized] } @@ -210,6 +365,26 @@ void ParamDialog::sliderValueChanged (Slider* sliderThatWasMoved) //[UserSliderCode_sysexChl] -- add your slider handling code here.. //[/UserSliderCode_sysexChl] } + else if (sliderThatWasMoved == whlRange) + { + //[UserSliderCode_whlRange] -- add your slider handling code here.. + //[/UserSliderCode_whlRange] + } + else if (sliderThatWasMoved == ftRange) + { + //[UserSliderCode_ftRange] -- add your slider handling code here.. + //[/UserSliderCode_ftRange] + } + else if (sliderThatWasMoved == brRange) + { + //[UserSliderCode_brRange] -- add your slider handling code here.. + //[/UserSliderCode_brRange] + } + else if (sliderThatWasMoved == atRange) + { + //[UserSliderCode_atRange] -- add your slider handling code here.. + //[/UserSliderCode_atRange] + } //[UsersliderValueChanged_Post] //[/UsersliderValueChanged_Post] @@ -240,6 +415,76 @@ void ParamDialog::comboBoxChanged (ComboBox* comboBoxThatHasChanged) //[/UsercomboBoxChanged_Post] } +void ParamDialog::buttonClicked (Button* buttonThatWasClicked) +{ + //[UserbuttonClicked_Pre] + //[/UserbuttonClicked_Pre] + + if (buttonThatWasClicked == whlEg) + { + //[UserButtonCode_whlEg] -- add your button handler code here.. + //[/UserButtonCode_whlEg] + } + else if (buttonThatWasClicked == ftEg) + { + //[UserButtonCode_ftEg] -- add your button handler code here.. + //[/UserButtonCode_ftEg] + } + else if (buttonThatWasClicked == brEg) + { + //[UserButtonCode_brEg] -- add your button handler code here.. + //[/UserButtonCode_brEg] + } + else if (buttonThatWasClicked == atEg) + { + //[UserButtonCode_atEg] -- add your button handler code here.. + //[/UserButtonCode_atEg] + } + else if (buttonThatWasClicked == whlAmp) + { + //[UserButtonCode_whlAmp] -- add your button handler code here.. + //[/UserButtonCode_whlAmp] + } + else if (buttonThatWasClicked == ftAmp) + { + //[UserButtonCode_ftAmp] -- add your button handler code here.. + //[/UserButtonCode_ftAmp] + } + else if (buttonThatWasClicked == brAmp) + { + //[UserButtonCode_brAmp] -- add your button handler code here.. + //[/UserButtonCode_brAmp] + } + else if (buttonThatWasClicked == atAmp) + { + //[UserButtonCode_atAmp] -- add your button handler code here.. + //[/UserButtonCode_atAmp] + } + else if (buttonThatWasClicked == whlPitch) + { + //[UserButtonCode_whlPitch] -- add your button handler code here.. + //[/UserButtonCode_whlPitch] + } + else if (buttonThatWasClicked == ftPitch) + { + //[UserButtonCode_ftPitch] -- add your button handler code here.. + //[/UserButtonCode_ftPitch] + } + else if (buttonThatWasClicked == brPitch) + { + //[UserButtonCode_brPitch] -- add your button handler code here.. + //[/UserButtonCode_brPitch] + } + else if (buttonThatWasClicked == atPitch) + { + //[UserButtonCode_atPitch] -- add your button handler code here.. + //[/UserButtonCode_atPitch] + } + + //[UserbuttonClicked_Post] + //[/UserbuttonClicked_Post] +} + //[MiscUserCode] You can add your own definitions of your custom methods or any other code here... @@ -249,6 +494,27 @@ void ParamDialog::setDialogValues(Controllers &c, SysexComm &mgr, int reso, bool pitchStep->setValue(c.values_[kControllerPitchStep]); sysexChl->setValue(mgr.getChl() + 1); + whlRange->setValue(c.wheel.range); + whlPitch->setToggleState(c.wheel.pitch, dontSendNotification); + whlPitch->setToggleState(c.wheel.pitch, dontSendNotification); + whlAmp->setToggleState(c.wheel.amp, dontSendNotification); + whlEg->setToggleState(c.wheel.eg, dontSendNotification); + + ftRange->setValue(c.foot.range); + ftPitch->setToggleState(c.foot.pitch, dontSendNotification); + ftAmp->setToggleState(c.foot.amp, dontSendNotification); + ftEg->setToggleState(c.foot.eg, dontSendNotification); + + brRange->setValue(c.breath.range); + brPitch->setToggleState(c.breath.pitch, dontSendNotification); + brAmp->setToggleState(c.breath.amp, dontSendNotification); + brEg->setToggleState(c.breath.eg, dontSendNotification); + + atRange->setValue(c.at.range); + atPitch->setToggleState(c.at.pitch, dontSendNotification); + atAmp->setToggleState(c.at.amp, dontSendNotification); + atEg->setToggleState(c.at.eg, dontSendNotification); + StringArray inputs = MidiInput::getDevices(); int idx = inputs.indexOf(mgr.getInput()); idx = idx == -1 ? 0 : idx + 1; @@ -260,7 +526,7 @@ void ParamDialog::setDialogValues(Controllers &c, SysexComm &mgr, int reso, bool sysexOut->setSelectedItemIndex(idx); engineReso->setSelectedItemIndex(reso); - showKeyboard->setToggleState(showKey, dontSendNotification); + showKeyboard->setToggleState(showKey, NotificationType::dontSendNotification); } bool ParamDialog::getDialogValues(Controllers &c, SysexComm &mgr, int *reso, bool *showKey) { @@ -268,11 +534,35 @@ bool ParamDialog::getDialogValues(Controllers &c, SysexComm &mgr, int *reso, boo c.values_[kControllerPitchRange] = pitchRange->getValue(); c.values_[kControllerPitchStep] = pitchStep->getValue(); + + c.wheel.range = whlRange->getValue(); + c.wheel.pitch = whlPitch->getToggleState(); + c.wheel.amp = whlAmp->getToggleState(); + c.wheel.eg = whlEg->getToggleState(); + + c.foot.range = ftRange->getValue(); + c.foot.pitch = ftPitch->getToggleState(); + c.foot.amp = ftAmp->getToggleState(); + c.foot.eg = ftEg->getToggleState(); + + c.breath.range = brRange->getValue(); + c.breath.pitch = brPitch->getToggleState(); + c.breath.amp = brAmp->getToggleState(); + c.breath.eg = brEg->getToggleState(); + + c.at.range = atRange->getValue(); + c.at.pitch = atPitch->getToggleState(); + c.at.amp = atAmp->getToggleState(); + c.at.eg = atEg->getToggleState(); + + c.refresh(); + ret &= mgr.setInput(sysexIn->getItemText(sysexIn->getSelectedItemIndex())); ret &= mgr.setOutput(sysexOut->getItemText(sysexOut->getSelectedItemIndex())); mgr.setChl(sysexChl->getValue() - 1); *reso = engineReso->getSelectedItemIndex(); +// *showKey = showKeyboard->getToggleStateValue() == Button::ButtonState::buttonDown; *showKey = showKeyboard->getToggleState(); return ret; } @@ -292,7 +582,7 @@ BEGIN_JUCER_METADATA + fixedSize="1" initialWidth="710" initialHeight="350"> @@ -310,6 +600,21 @@ BEGIN_JUCER_METADATA + + + + + + + + + + + + + + + + + + + + + + + + END_JUCER_METADATA diff --git a/ports/dexed/source/ParamDialog.h b/ports/dexed/source/ParamDialog.h index 0c3fa086..c5cd896b 100644 --- a/ports/dexed/source/ParamDialog.h +++ b/ports/dexed/source/ParamDialog.h @@ -7,12 +7,12 @@ the "//[xyz]" and "//[/xyz]" sections will be retained when the file is loaded and re-saved. - Created with Introjucer version: 3.1.0 + Created with Introjucer version: 3.2.0 ------------------------------------------------------------------------------ The Introjucer is part of the JUCE library - "Jules' Utility Class Extensions" - Copyright 2004-13 by Raw Material Software Ltd. + Copyright (c) 2015 - ROLI Ltd. ============================================================================== */ @@ -38,7 +38,8 @@ */ class ParamDialog : public Component, public SliderListener, - public ComboBoxListener + public ComboBoxListener, + public ButtonListener { public: //============================================================================== @@ -55,6 +56,7 @@ public: void resized(); void sliderValueChanged (Slider* sliderThatWasMoved); void comboBoxChanged (ComboBox* comboBoxThatHasChanged); + void buttonClicked (Button* buttonThatWasClicked); @@ -70,6 +72,22 @@ private: ScopedPointer sysexChl; ScopedPointer engineReso; ScopedPointer showKeyboard; + ScopedPointer whlRange; + ScopedPointer ftRange; + ScopedPointer brRange; + ScopedPointer atRange; + ScopedPointer whlEg; + ScopedPointer ftEg; + ScopedPointer brEg; + ScopedPointer atEg; + ScopedPointer whlAmp; + ScopedPointer ftAmp; + ScopedPointer brAmp; + ScopedPointer atAmp; + ScopedPointer whlPitch; + ScopedPointer ftPitch; + ScopedPointer brPitch; + ScopedPointer atPitch; //============================================================================== diff --git a/ports/dexed/source/PluginData.cpp b/ports/dexed/source/PluginData.cpp index 4da4fe80..8d010f0a 100644 --- a/ports/dexed/source/PluginData.cpp +++ b/ports/dexed/source/PluginData.cpp @@ -1,6 +1,6 @@ /** * - * Copyright (c) 2014-2015 Pascal Gauthier. + * Copyright (c) 2014-2017 Pascal Gauthier. * * 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 @@ -28,7 +28,7 @@ #include using namespace ::std; -uint8_t sysexChecksum(const char *sysex, int size) { +uint8_t sysexChecksum(const uint8_t *sysex, int size) { int sum = 0; int i; @@ -36,71 +36,14 @@ uint8_t sysexChecksum(const char *sysex, int size) { return sum & 0x7F; } -String normalizeSysexName(const char *sysexName) { - char buffer[11]; - - memcpy(buffer, sysexName, 10); - - for (int j = 0; j < 10; j++) { - char c = (unsigned char) buffer[j]; - switch (c) { - case 92: - c = 'Y'; - break; /* yen */ - case 126: - c = '>'; - break; /* >> */ - case 127: - c = '<'; - break; /* << */ - default: - if (c < 32 || c > 127) - c = 32; - break; - } - buffer[j] = c; - } - buffer[10] = 0; - - return String(buffer); -} - - -void extractProgramNames(const char *block, StringArray &dest) { - dest.clear(); - - for (int i = 0; i < 32; i++) { - dest.add(String(normalizeSysexName(block + ((i * 128) + 118)))); - } -} - -void exportSysexCart(char *dest, char *src, char sysexChl) { - uint8_t header[] = { 0xF0, 0x43, 0x00, 0x09, 0x20, 0x00 }; - header[2] = sysexChl; - - memcpy(dest, header, 6); - - // copy 32 voices - memcpy(dest+6, src, 4096); - - // make checksum for dump - uint8_t footer[] = { sysexChecksum(src, 4096), 0xF7 }; - - memcpy(dest+4102, footer, 2); -} - - -void exportSysexPgm(char *dest, char *src, char sysexChl) { +void exportSysexPgm(uint8_t *dest, uint8_t *src) { uint8_t header[] = { 0xF0, 0x43, 0x00, 0x00, 0x01, 0x1B }; - header[2] = sysexChl; - + memcpy(dest, header, 6); // copy 1 unpacked voices memcpy(dest+6, src, 155); - - // put some logic to "mute" an operator if the level is 0 - + // make checksum for dump uint8_t footer[] = { sysexChecksum(src, 155), 0xF7 }; @@ -110,8 +53,8 @@ void exportSysexPgm(char *dest, char *src, char sysexChl) { /** * Pack a program into a 32 packed sysex */ -void packProgram(uint8_t *dest, uint8_t *src, int idx, String name) { - uint8_t *bulk = dest + (idx * 128); +void Cartridge::packProgram(uint8_t *src, int idx, String name, char *opSwitch) { + uint8_t *bulk = voiceData + 6 + (idx * 128); for(int op = 0; op < 6; op++) { // eg rate and level, brk pt, depth, scaling @@ -125,7 +68,10 @@ void packProgram(uint8_t *dest, uint8_t *src, int idx, String name) { // kvs_ams bulk[pp+13] = (src[up+14]&0x03) | ((src[up+15]&0x07) << 2); // output lvl - bulk[pp+14] = src[up+16]; + if ( opSwitch[op] == '0' ) + bulk[pp+14] = 0; + else + bulk[pp+14] = src[up+16]; // fcoarse_mode bulk[pp+15] = (src[up+17]&0x01) | ((src[up+18]&0x1f) << 1); // fine freq @@ -171,8 +117,9 @@ char normparm(char value, char max, int id) { return v; } -void unpackProgramFromSysex(char *unpackPgm, char *sysexCart, int idx) { - char *bulk = sysexCart + (idx * 128); +void Cartridge::unpackProgram(uint8_t *unpackPgm, int idx) { + // TODO put this in uint8_t :D + char *bulk = (char *)voiceData + 6 + (idx * 128); for (int op = 0; op < 6; op++) { // eg rate and level, brk pt, depth, scaling @@ -212,61 +159,57 @@ void unpackProgramFromSysex(char *unpackPgm, char *sysexCart, int idx) { unpackPgm[142] = (lpms_lfw_lks >> 1) & 7; unpackPgm[143] = lpms_lfw_lks >> 4; memcpy(unpackPgm + 144, bulk + 117, 11); // transpose, name - unpackPgm[155] = 1; // operator on/off - unpackPgm[156] = 1; - unpackPgm[157] = 1; - unpackPgm[158] = 1; - unpackPgm[159] = 1; - unpackPgm[160] = 1; + unpackPgm[155] = 63; // operator on/off (DEPRECATED) } -void DexedAudioProcessor::unpackProgram(int idx) { - unpackProgramFromSysex(data, sysex, idx); +void DexedAudioProcessor::loadCartridge(Cartridge &sysex) { + currentCart = sysex; + currentCart.getProgramNames(programNames); } -int DexedAudioProcessor::importSysex(const char *imported) { - memcpy(sysex, imported + 6, 4096); - - uint8_t checksum = sysexChecksum(((char *) &sysex), 4096); - extractProgramNames(sysex, programNames); - - if ( checksum != imported[4102] ) { - TRACE("sysex import checksum doesnt match %d != %d", checksum, imported[4102]); - return 1; - } - - return 0; +void DexedAudioProcessor::packOpSwitch() { + char value = (controllers.opSwitch[5] == '1') << 5; + value += (controllers.opSwitch[4] == '1') << 4; + value += (controllers.opSwitch[3] == '1') << 3; + value += (controllers.opSwitch[2] == '1') << 2; + value += (controllers.opSwitch[1] == '1') << 1; + value += (controllers.opSwitch[0] == '1'); + data[155] = value; } -void DexedAudioProcessor::updateProgramFromSysex(const uint8 *rawdata) { - memcpy(data, rawdata, 161); +void DexedAudioProcessor::unpackOpSwitch(char packOpValue) { + controllers.opSwitch[5] = (packOpValue & 32) + 48; + controllers.opSwitch[4] = (packOpValue & 16) + 48; + controllers.opSwitch[3] = (packOpValue & 8) + 48; + controllers.opSwitch[2] = (packOpValue & 4) + 48; + controllers.opSwitch[1] = (packOpValue & 2) + 48; + controllers.opSwitch[0] = (packOpValue & 1) + 48; +} + +void DexedAudioProcessor::updateProgramFromSysex(const uint8_t *rawdata) { + memcpy(data, rawdata, 155); + unpackOpSwitch(rawdata[155]); + lfo.reset(data + 137); triggerAsyncUpdate(); } void DexedAudioProcessor::setupStartupCart() { - char syx_data[4104]; - memset(&syx_data, 0, 4104); - File startup = dexedCartDir.getChildFile("Dexed_01.syx"); + + if ( currentCart.load(startup) != -1 ) + return; - if ( startup.exists() ) { - FileInputStream *fis = startup.createInputStream(); - if ( fis == nullptr ) { - TRACE("unable to open default cartridge"); - return; - } - fis->read(syx_data, 4104); - delete fis; - } else { - // The user deleted the file :/, load from the builtin zip file. - MemoryInputStream *mis = new MemoryInputStream(BinaryData::builtin_pgm_zip, BinaryData::builtin_pgm_zipSize, false); - ZipFile *builtin_pgm = new ZipFile(mis, true); - InputStream *is = builtin_pgm->createStreamForEntry(builtin_pgm->getIndexOfFileName(("Dexed_01.syx"))); - is->read(syx_data, 4104); - delete is; - delete builtin_pgm; - } - importSysex((char *) &syx_data); + // The user deleted the file :/, load from the builtin zip file. + MemoryInputStream *mis = new MemoryInputStream(BinaryData::builtin_pgm_zip, BinaryData::builtin_pgm_zipSize, false); + ZipFile *builtin_pgm = new ZipFile(mis, true); + InputStream *is = builtin_pgm->createStreamForEntry(builtin_pgm->getIndexOfFileName(("Dexed_01.syx"))); + Cartridge init; + + if ( init.load(*is) != -1 ) + loadCartridge(init); + + delete is; + delete builtin_pgm; } void DexedAudioProcessor::resetToInitVoice() { @@ -303,9 +246,10 @@ void DexedAudioProcessor::pasteEnvFromClipboard(int destOp) { } void DexedAudioProcessor::sendCurrentSysexProgram() { - uint8_t raw[167]; + uint8_t raw[163]; - exportSysexPgm((char *) raw, data, sysexComm.getChl()); + packOpSwitch(); + exportSysexPgm(raw, data); if ( sysexComm.isOutputActive() ) { sysexComm.send(MidiMessage(raw, 163)); } @@ -314,7 +258,7 @@ void DexedAudioProcessor::sendCurrentSysexProgram() { void DexedAudioProcessor::sendCurrentSysexCartridge() { uint8_t raw[4104]; - exportSysexCart((char *) raw, (char *) &sysex, sysexComm.getChl()); + currentCart.saveVoice(raw); if ( sysexComm.isOutputActive() ) { sysexComm.send(MidiMessage(raw, 4104)); } @@ -323,18 +267,27 @@ void DexedAudioProcessor::sendCurrentSysexCartridge() { void DexedAudioProcessor::sendSysexCartridge(File cart) { if ( ! sysexComm.isOutputActive() ) return; - String f = cart.getFullPathName(); - uint8_t syx_data[4104]; - ifstream fp_in(f.toRawUTF8(), ios::binary); - if (fp_in.fail()) { + + FileInputStream *fis = cart.createInputStream(); + if ( fis == NULL ) { + String f = cart.getFullPathName(); AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, "Error", "Unable to open: " + f); + } + + uint8 syx_data[65535]; + int sz = fis->read(syx_data, 65535); + delete fis; + + if (syx_data[0] != 0xF0) { + String f = cart.getFullPathName(); + AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, + "Error", + "File: " + f + " doesn't seems to contain any sysex data"); return; } - fp_in.read((char *)syx_data, 4104); - fp_in.close(); - sysexComm.send(MidiMessage(syx_data, 4104)); + sysexComm.send(MidiMessage(syx_data, sz)); } @@ -359,15 +312,24 @@ void DexedAudioProcessor::getStateInformation(MemoryBlock& destData) { dexedState.setAttribute("currentProgram", currentProgram); dexedState.setAttribute("monoMode", monoMode); dexedState.setAttribute("engineType", (int) engineType); + dexedState.setAttribute("masterTune", controllers.masterTune); + dexedState.setAttribute("opSwitch", controllers.opSwitch); + + char mod_cfg[15]; + controllers.wheel.setConfig(mod_cfg); + dexedState.setAttribute("wheelMod", mod_cfg); + controllers.foot.setConfig(mod_cfg); + dexedState.setAttribute("footMod", mod_cfg); + controllers.breath.setConfig(mod_cfg); + dexedState.setAttribute("breathMod", mod_cfg); + controllers.at.setConfig(mod_cfg); + dexedState.setAttribute("aftertouchMod", mod_cfg); if ( activeFileCartridge.exists() ) dexedState.setAttribute("activeFileCartridge", activeFileCartridge.getFullPathName()); - char sysex_blob[4104]; - exportSysexCart((char *) &sysex_blob, (char *) sysex, 0); - NamedValueSet blobSet; - blobSet.set("sysex", var((void *) &sysex_blob, 4104)); + blobSet.set("sysex", var((void *) currentCart.getVoiceSysex(), 4104)); blobSet.set("program", var((void *) &data, 161)); blobSet.copyToXmlAttributes(*dexedBlob); @@ -391,8 +353,23 @@ void DexedAudioProcessor::setStateInformation(const void* source, int sizeInByte fx.uiGain = root->getDoubleAttribute("gain"); currentProgram = root->getIntAttribute("currentProgram"); - setEngineType(root->getIntAttribute("engineType", 0)); + String opSwitchValue = root->getStringAttribute("opSwitch"); + if ( opSwitchValue.length() != 6 ) { + strcpy(controllers.opSwitch, "111111"); + } else { + strncpy(controllers.opSwitch, opSwitchValue.toRawUTF8(), 6); + } + + controllers.wheel.parseConfig(root->getStringAttribute("wheelMod").toRawUTF8()); + controllers.foot.parseConfig(root->getStringAttribute("footMod").toRawUTF8()); + controllers.breath.parseConfig(root->getStringAttribute("breathMod").toRawUTF8()); + controllers.at.parseConfig(root->getStringAttribute("aftertouchMod").toRawUTF8()); + + controllers.refresh(); + + setEngineType(root->getIntAttribute("engineType", 1)); monoMode = root->getIntAttribute("monoMode", 0); + controllers.masterTune = root->getIntAttribute("masterTune", 0); File possibleCartridge = File(root->getStringAttribute("activeFileCartridge")); if ( possibleCartridge.exists() ) @@ -415,7 +392,9 @@ void DexedAudioProcessor::setStateInformation(const void* source, int sizeInByte return; } - importSysex((char *) sysex_blob.getBinaryData()->getData()); + Cartridge cart; + cart.load((uint8 *)sysex_blob.getBinaryData()->getData(), 4104); + loadCartridge(cart); memcpy(data, program.getBinaryData()->getData(), 161); lastStateSave = (long) time(NULL); @@ -427,19 +406,32 @@ File DexedAudioProcessor::dexedAppDir; File DexedAudioProcessor::dexedCartDir; void DexedAudioProcessor::resolvAppDir() { + #if JUCE_MAC || JUCE_IOS + File parent = File::getSpecialLocation(File::currentExecutableFile).getParentDirectory().getParentDirectory().getParentDirectory().getSiblingFile("Dexed"); -#if JUCE_MAC || JUCE_IOS - dexedAppDir = File("~/Library/Application Support/DigitalSuburban/Dexed"); -#elif JUCE_WINDOWS - dexedAppDir = File::getSpecialLocation(File::userApplicationDataDirectory).getChildFile("DigitalSuburban").getChildFile("Dexed"); -#else - char *xdgHome = getenv("XDG_DATA_HOME"); - if ( xdgHome == nullptr ) { - dexedAppDir = File("~/.local/share").getChildFile("DigitalSuburban").getChildFile("Dexed"); - } else { - dexedAppDir = File(xdgHome).getChildFile("DigitalSuburban").getChildFile("Dexed"); - } -#endif + if ( parent.isDirectory() ) { + dexedAppDir = parent; + } else { + dexedAppDir = File("~/Library/Application Support/DigitalSuburban/Dexed"); + } + #elif JUCE_WINDOWS + if ( File::getSpecialLocation(File::currentExecutableFile).getSiblingFile("Dexed").isDirectory() ) { + dexedAppDir = File::getSpecialLocation(File::currentExecutableFile).getSiblingFile("Dexed"); + } else { + dexedAppDir = File::getSpecialLocation(File::userApplicationDataDirectory).getChildFile("DigitalSuburban").getChildFile("Dexed"); + } + #else + if ( File::getSpecialLocation(File::currentExecutableFile).getSiblingFile("Dexed").isDirectory() ) { + dexedAppDir = File::getSpecialLocation(File::currentExecutableFile).getSiblingFile("Dexed"); + } else { + char *xdgHome = getenv("XDG_DATA_HOME"); + if ( xdgHome == nullptr ) { + dexedAppDir = File("~/.local/share").getChildFile("DigitalSuburban").getChildFile("Dexed"); + } else { + dexedAppDir = File(xdgHome).getChildFile("DigitalSuburban").getChildFile("Dexed"); + } + } + #endif if ( ! dexedAppDir.exists() ) { dexedAppDir.createDirectory(); diff --git a/ports/dexed/source/PluginData.h b/ports/dexed/source/PluginData.h index 7e8fb6ce..582ea772 100644 --- a/ports/dexed/source/PluginData.h +++ b/ports/dexed/source/PluginData.h @@ -1,6 +1,6 @@ /** * - * Copyright (c) 2014-2015 Pascal Gauthier. + * Copyright (c) 2014-2016 Pascal Gauthier. * * 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 @@ -22,49 +22,229 @@ #define PLUGINDATA_H_INCLUDED #include "JuceHeader.h" -#define SYSEX_SIZE 4104 #include +#include +#include "Dexed.h" -enum UnpackedOffset { - egRate, - egLevel = 4, - breakpoint = 8, - lScaleDepth, - rScaleDepth, - lKeyScale, - rKeyScale, - rateScaling, - keyVelocity, - outputLevel, - mode, - fCoarse, - fFine, - oscDetune, +uint8_t sysexChecksum(const uint8_t *sysex, int size); +void exportSysexPgm(uint8_t *dest, uint8_t *src); - // Global values - pitchEgRate = 126, - pitchEgLevel = 130, - algorythm = 134, - feedback, - oscKeySync, - lfoSpeed, - lfoDelay, - lfoPmDepth, - lfoAmDepth, - lfoKeySync, - lfoWave, - middleC, - pModeSens, - osc6state -}; +#define SYSEX_HEADER { 0xF0, 0x43, 0x00, 0x09, 0x20, 0x00 } +#define SYSEX_SIZE 4104 -String normalizeSysexName(const char *sysexName); -uint8_t sysexChecksum(const char *sysex, int size); -void extractProgramNames(const char *block, StringArray &dest); -void exportSysexCart(char *dest, char *src, char sysexChl); -void exportSysexPgm(char *dest, char *src, char sysexChl); -void packProgram(uint8_t *dest, uint8_t *src, int idx, String name); -void unpackProgramFromSysex(char *unpackPgm, char *sysexCart, int idx); +class Cartridge { + uint8_t voiceData[SYSEX_SIZE]; + uint8_t perfData[SYSEX_SIZE]; + + void setHeader() { + uint8 voiceHeader[] = SYSEX_HEADER; + memcpy(voiceData, voiceHeader, 6); + voiceData[4102] = sysexChecksum(voiceData+6, 4096); + voiceData[4103] = 0xF7; + } + +public: + Cartridge() { } + + Cartridge(const Cartridge &cpy) { + memcpy(voiceData, cpy.voiceData, SYSEX_SIZE); + memcpy(perfData, cpy.perfData, SYSEX_SIZE); + } + + static String normalizePgmName(const char *sysexName) { + char buffer[11]; + + memcpy(buffer, sysexName, 10); + + for (int j = 0; j < 10; j++) { + char c = (unsigned char) buffer[j]; + switch (c) { + case 92: + c = 'Y'; + break; /* yen */ + case 126: + c = '>'; + break; /* >> */ + case 127: + c = '<'; + break; /* << */ + default: + if (c < 32 || c > 127) + c = 32; + break; + } + buffer[j] = c; + } + buffer[10] = 0; + + return String(buffer); + } + + int load(File f) { + FileInputStream *fis = f.createInputStream(); + if ( fis == NULL ) + return -1; + int rc = load(*fis); + delete fis; + return rc; + } + + /** + * Loads sysex stream + * Returns 0 if it was parsed sucessfully + * Returns -1 if it cannot open the stream + */ + int load(InputStream &fis) { + uint8 buffer[65535]; + int sz = fis.read(buffer, 65535); + if ( sz == 0 ) + return -1; + return load(buffer, sz); + } + + /** + * Loads sysex buffer + * Returns 0 if it was parsed sucessfully + * Returns 1 if sysex checksum didn't match + * Returns 2 if no sysex data found, probably random data + */ + int load(const uint8_t *stream, int size) { + const uint8 *pos = stream; + + if ( size < 4096 ) { + memcpy(voiceData+6, pos, size); + TRACE("too small sysex rc=2"); + return 2; + } + + if ( pos[0] != 0xF0 ) { + // it is not, just copy the first 4096 bytes + memcpy(voiceData + 6, pos, 4096); + TRACE("stream is not a sysex rc=2"); + return 2; + } + + // limit the size of the sysex scan + if ( size > 65535 ) + size = 65535; + + // we loop until we find something that looks like a DX7 cartridge (based on size) + while(size >= 4104) { + // it was a sysex first, now random data; return random + if ( pos[0] != 0xF0 ) { + memcpy(voiceData + 6, stream, 4096); + TRACE("stream was a sysex, but not anymore rc=2"); + return 2; + } + + // check if this is the size of a DX7 sysex cartridge + for(int i=0;iread(buffer, 65535); + delete fis; + + // if the file is smaller than 4104, it probably needs to be overriden. + if ( sz <= 4104 ) { + return f.replaceWithData(voiceData, SYSEX_SIZE); + } + + // To avoid to erase the performance data, we skip the sysex stream until + // we see the header 0xF0, 0x43, 0x00, 0x09, 0x20, 0x00 + + int pos = 0; + bool found = 0; + while(pos < sz) { + // corrupted sysex, erase everything : + if ( buffer[pos] != 0xF0 ) + return f.replaceWithData(voiceData, SYSEX_SIZE); + + uint8_t header[] = SYSEX_HEADER; + if ( memcmp(buffer+pos, header, 6) ) { + found = true; + memcpy(buffer+pos, voiceData, SYSEX_SIZE); + break; + } else { + for(;posimportSysex((char *) &syx_data) ) { - global.setSystemMessage(String("Unkown sysex format !?")); + + if ( rc != 0 ) { + rc = AlertWindow::showOkCancelBox(AlertWindow::QuestionIcon, "Unable to find DX7 sysex cartridge in file", + "This sysex file is not for the DX7 or it is corrupted. " + "Do you still want to load this file as random data ?"); + if ( rc == 0 ) + return; } - processor->setCurrentProgram(0); + + processor->loadCartridge(cart); rebuildProgramCombobox(); + processor->setCurrentProgram(0); global.programs->setSelectedId(processor->getCurrentProgram()+1, dontSendNotification); processor->updateHostDisplay(); @@ -165,21 +144,12 @@ void DexedAudioProcessorEditor::loadCart(File file) { void DexedAudioProcessorEditor::saveCart() { File startFileName = processor->activeFileCartridge.exists() ? processor->activeFileCartridge : processor->dexedCartDir; - FileChooser fc ("Export DX sysex...", processor->dexedCartDir, "*.syx", 1); + FileChooser fc ("Export DX sysex...", processor->dexedCartDir, "*.syx;*.SYX", 1); if ( fc.browseForFileToSave(true) ) { - String f = fc.getResults().getReference(0).getFullPathName(); - char syx_data[4104]; - - exportSysexCart((char *) syx_data, (char *) &processor->sysex, 0); - - ofstream fp_out(f.toRawUTF8(), ios::binary); - fp_out.write((char *)syx_data, 4104); - fp_out.close(); - - if (fp_out.fail()) { + if ( ! processor->currentCart.saveVoice(fc.getResults().getReference(0)) ) { AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, "Error", - "Unable to write: " + f); + "Unable to write: " + fc.getResults().getReference(0).getFullPathName()); } } } @@ -187,7 +157,7 @@ void DexedAudioProcessorEditor::saveCart() { void DexedAudioProcessorEditor::parmShow() { int tp = processor->getEngineType(); - AlertWindow window("Dexed Params","", AlertWindow::NoIcon, this); + AlertWindow window("","", AlertWindow::NoIcon, this); ParamDialog param; param.setColour(AlertWindow::backgroundColourId, Colour(0x32FFFFFF)); param.setDialogValues(processor->controllers, processor->sysexComm, tp, processor->showKeyboard); @@ -250,6 +220,8 @@ void DexedAudioProcessorEditor::updateUI() { void DexedAudioProcessorEditor::rebuildProgramCombobox() { global.programs->clear(dontSendNotification); + processor->currentCart.getProgramNames(processor->programNames); + for(int i=0;igetNumPrograms();i++) { String id; id << (i+1) << ". " << processor->getProgramName(i); @@ -258,7 +230,7 @@ void DexedAudioProcessorEditor::rebuildProgramCombobox() { global.programs->setSelectedId(processor->getCurrentProgram()+1, dontSendNotification); - String name = normalizeSysexName((const char *) processor->data+145); + String name = Cartridge::normalizePgmName((const char *) processor->data+145); cartManager.setActiveProgram(processor->getCurrentProgram(), name); if ( name != processor->getProgramName(processor->getCurrentProgram()) ) global.programs->setText("**. " + name, dontSendNotification); @@ -267,11 +239,9 @@ void DexedAudioProcessorEditor::rebuildProgramCombobox() { } void DexedAudioProcessorEditor::storeProgram() { - String currentName = normalizeSysexName((const char *) processor->data+145); - char destSysex[4096]; + String currentName = Cartridge::normalizePgmName((const char *) processor->data+145); + Cartridge destSysex = processor->currentCart; File *externalFile = NULL; - - memcpy(&destSysex, processor->sysex, 4096); bool activeCartridgeFound = processor->activeFileCartridge.exists(); @@ -292,7 +262,7 @@ void DexedAudioProcessorEditor::storeProgram() { // TODO: fix the name length to 10 StringArray programs; - extractProgramNames((char *) &destSysex, programs); + destSysex.getProgramNames(programs); dialog.addComboBox("Dest", programs, "Program Destination"); @@ -318,12 +288,9 @@ void DexedAudioProcessorEditor::storeProgram() { if ( externalFile != NULL ) delete externalFile; - MemoryBlock block; externalFile = new File(fc.getResults().getReference(0)); - if ( externalFile->loadFileAsData(block) ) { - block.copyTo(destSysex, 6, 4096); + if ( destSysex.load(*externalFile) == 0 ) continue; - } AlertWindow::showMessageBoxAsync(AlertWindow::WarningIcon, "Read error", "Unable to read file"); } } @@ -340,8 +307,7 @@ void DexedAudioProcessorEditor::storeProgram() { } if ( externalFile == NULL ) { - packProgram((uint8_t *) processor->sysex, (uint8_t *) processor->data, programNum, programName); - processor->programNames.set(programNum, programName); + processor->currentCart.packProgram((uint8_t *) processor->data, programNum, programName, processor->controllers.opSwitch); rebuildProgramCombobox(); processor->setCurrentProgram(programNum); processor->updateHostDisplay(); @@ -349,24 +315,19 @@ void DexedAudioProcessorEditor::storeProgram() { int action = dialog.getComboBoxComponent("SaveAction")->getSelectedItemIndex(); if ( action > 0 ) { File destination = processor->activeFileCartridge; - if ( ! destination.exists() ) { - FileChooser fc("Destination Sysex", processor->dexedCartDir, "*.syx", 1); + if ( action == 1 ) { + FileChooser fc("Destination Sysex", processor->dexedCartDir, "*.syx;*.SYX", 1); if ( ! fc.browseForFileToSave(true) ) break; destination = fc.getResult(); } - char sysexFile[4104]; - exportSysexCart((char *) &sysexFile, (char *) &processor->sysex, 0); - if ( ! destination.replaceWithData(sysexFile, 4104) ) { - AlertWindow::showMessageBoxAsync(AlertWindow::WarningIcon, "Write error", "Unable to write file"); - } + + processor->currentCart.saveVoice(destination); processor->activeFileCartridge = destination; } } else { - packProgram((uint8_t *) &destSysex, (uint8_t *) processor->data, programNum, programName); - char sysexFile[4104]; - exportSysexCart((char *) &sysexFile, (char *) &destSysex, 0); - if ( ! externalFile->replaceWithData(sysexFile, 4104) ) { + destSysex.packProgram((uint8_t *) processor->data, programNum, programName, processor->controllers.opSwitch); + if ( ! destSysex.saveVoice(*externalFile)) { AlertWindow::showMessageBoxAsync(AlertWindow::WarningIcon, "Write error", "Unable to write file"); } } diff --git a/ports/dexed/source/PluginEditor.h b/ports/dexed/source/PluginEditor.h index c601ab85..c873e855 100644 --- a/ports/dexed/source/PluginEditor.h +++ b/ports/dexed/source/PluginEditor.h @@ -1,6 +1,6 @@ /** * - * Copyright (c) 2013-2015 Pascal Gauthier. + * Copyright (c) 2013-2016 Pascal Gauthier. * * 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 @@ -31,11 +31,7 @@ //============================================================================== /** */ -class DexedAudioProcessorEditor : public AudioProcessorEditor, - public ComboBoxListener, - public Timer { - PopupMenu cartPopup; - +class DexedAudioProcessorEditor : public AudioProcessorEditor, public ComboBoxListener, public Timer { MidiKeyboardComponent midiKeyboard; OperatorEditor operators[6]; Colour background; diff --git a/ports/dexed/source/PluginFx.cpp b/ports/dexed/source/PluginFx.cpp index 99312a07..6ac4245e 100644 --- a/ports/dexed/source/PluginFx.cpp +++ b/ports/dexed/source/PluginFx.cpp @@ -81,6 +81,10 @@ void PluginFx::init(int sr) { pCutoff = -1; pReso = -1; + + dc_r = 1.0-(126.0/sr); + dc_id = 0; + dc_od = 0; } inline float PluginFx::NR24(float sample,float g,float lpc) { @@ -97,6 +101,18 @@ inline float PluginFx::NR(float sample, float g) { } void PluginFx::process(float *work, int sampleSize) { + // very basic DC filter + float t_fd = work[0]; + work[0] = work[0] - dc_id + dc_r * dc_od; + dc_id = t_fd; + for (int i=1; icontrollers.masterTune / (1.0/12); + tune = (tune >> 11) + 0x2000; + return (float)tune / 0x4000; + } + + void setValueHost(float v) { + int32_t tune = (v * 0x4000) - 0x2000; + processor->controllers.masterTune = ((float) (tune << 11)) * (1.0/12); + } + + String getValueDisplay() { + String display; + display << (getValueHost() * 2) -1; + return display; + } + + void updateComponent() { + if (slider != NULL) { + slider->setValue(getValueHost(), dontSendNotification); + } + } +}; + +class CtrlOpSwitch : public Ctrl { + DexedAudioProcessor *processor; + char *value; +public : + CtrlOpSwitch(String name, char *switchValue, DexedAudioProcessor *owner) : Ctrl(name) { + processor = owner; + value = switchValue; + } + + void setValueHost(float f) { + if ( f == 0 ) + *value = '0'; + else + *value = '1'; + updateDisplayName(); + + // the value is based on the controller + parent->setDxValue(155, -1); + } + + float getValueHost() { + if ( *value == '0' ) + return 0; + else + return 1; + } + + String getValueDisplay() { + String ret; + ret << label << " " << (*value == '0' ? "OFF" : "ON"); + return ret; + } + + void updateComponent() { + if (button != NULL) { + if (*value == '0') { + button->setToggleState(false, dontSendNotification); + } else { + button->setToggleState(true, dontSendNotification); + } + } + } + + void updateDisplayName() { + DexedAudioProcessorEditor *editor = (DexedAudioProcessorEditor *) parent->getActiveEditor(); + if ( editor == NULL ) { + return; + } + editor->global.setParamMessage(getValueDisplay()); + editor->global.repaint(); + } +}; // ************************************************************************ // @@ -147,7 +263,7 @@ void Ctrl::updateDisplayName() { } // ************************************************************************ -// CtrlDX - control DX mapping +// CtrlFloat - control float values CtrlFloat::CtrlFloat(String name, float *storageValue) : Ctrl(name) { vPointer = storageValue; } @@ -182,21 +298,15 @@ CtrlDX::CtrlDX(String name, int steps, int offset, int displayValue) : Ctrl(name } float CtrlDX::getValueHost() { - return dxValue / steps; + return getValue() / (float) steps; } void CtrlDX::setValueHost(float f) { - if ( f == 1 ) - f = 0.999; - setValue((f * steps)); + setValue(roundToInt(f * steps)); } void CtrlDX::setValue(int v) { TRACE("setting value %d %d", dxOffset, v); - if (v >= steps) { - TRACE("WARNING: value too big %s : %d", label.toRawUTF8(), v); - v = steps - 1; - } dxValue = v; if (dxOffset >= 0) { if (parent != NULL) @@ -288,28 +398,31 @@ void DexedAudioProcessor::initCtrl() { output = new CtrlFloat("Output", &fx.uiGain); ctrl.add(output); - algo = new CtrlDX("ALGORITHM", 32, 134, 1); + tune = new CtrlTune("MASTER TUNE ADJ", this); + ctrl.add(tune); + + algo = new CtrlDX("ALGORITHM", 31, 134, 1); ctrl.add(algo); - feedback = new CtrlDX("FEEDBACK", 8, 135); + feedback = new CtrlDX("FEEDBACK", 7, 135); ctrl.add(feedback); - oscSync = new CtrlDX("OSC KEY SYNC", 2, 136); + oscSync = new CtrlDXSwitch("OSC KEY SYNC", 1, 136); ctrl.add(oscSync); - lfoRate = new CtrlDX("LFO SPEED", 100, 137); + lfoRate = new CtrlDX("LFO SPEED", 99, 137); ctrl.add(lfoRate); - lfoDelay = new CtrlDX("LFO DELAY", 100, 138); + lfoDelay = new CtrlDX("LFO DELAY", 99, 138); ctrl.add(lfoDelay); - lfoPitchDepth = new CtrlDX("LFO PM DEPTH", 100, 139); + lfoPitchDepth = new CtrlDX("LFO PM DEPTH", 99, 139); ctrl.add(lfoPitchDepth); - lfoAmpDepth = new CtrlDX("LFO AM DEPTH", 100, 140); + lfoAmpDepth = new CtrlDX("LFO AM DEPTH", 99, 140); ctrl.add(lfoAmpDepth); - lfoSync = new CtrlDX("LFO KEY SYNC", 2, 141); + lfoSync = new CtrlDXSwitch("LFO KEY SYNC", 1, 141); ctrl.add(lfoSync); StringArray lbl; @@ -320,26 +433,26 @@ void DexedAudioProcessor::initCtrl() { lbl.add("SINE"); lbl.add("S&HOLD"); - lfoWaveform = new CtrlDXLabel("LFO WAVE", 6, 142, lbl); + lfoWaveform = new CtrlDXLabel("LFO WAVE", 5, 142, lbl); ctrl.add(lfoWaveform); - transpose = new CtrlDXTranspose("MIDDLE C", 49, 144); + transpose = new CtrlDXTranspose("MIDDLE C", 48, 144); ctrl.add(transpose); - pitchModSens = new CtrlDX("P MODE SENS.", 8, 143); + pitchModSens = new CtrlDX("P MODE SENS.", 7, 143); ctrl.add(pitchModSens); for (int i=0;i<4;i++) { String rate; rate << "PITCH EG RATE " << (i+1); - pitchEgRate[i] = new CtrlDX(rate, 100, 126+i); + pitchEgRate[i] = new CtrlDX(rate, 99, 126+i); ctrl.add(pitchEgRate[i]); } for (int i=0;i<4;i++) { String level; level << "PITCH EG LEVEL " << (i+1); - pitchEgLevel[i] = new CtrlDX(level, 100, 130+i); + pitchEgLevel[i] = new CtrlDX(level, 99, 130+i); ctrl.add(pitchEgLevel[i]); } @@ -360,81 +473,86 @@ void DexedAudioProcessor::initCtrl() { for (int j = 0; j < 4; j++) { String opRate; opRate << opName << " EG RATE " << (j + 1); - opCtrl[opVal].egRate[j] = new CtrlDX(opRate, 100, opTarget + j); + opCtrl[opVal].egRate[j] = new CtrlDX(opRate, 99, opTarget + j); ctrl.add(opCtrl[opVal].egRate[j]); } for (int j = 0; j < 4; j++) { String opLevel; opLevel << opName << " EG LEVEL " << (j + 1); - opCtrl[opVal].egLevel[j] = new CtrlDX(opLevel, 100, opTarget + j + 4); + opCtrl[opVal].egLevel[j] = new CtrlDX(opLevel, 99, opTarget + j + 4); ctrl.add(opCtrl[opVal].egLevel[j]); } String opVol; opVol << opName << " OUTPUT LEVEL"; - opCtrl[opVal].level = new CtrlDX(opVol, 100, opTarget + 16); + opCtrl[opVal].level = new CtrlDX(opVol, 99, opTarget + 16); ctrl.add(opCtrl[opVal].level); String opMode; opMode << opName << " MODE"; - opCtrl[opVal].opMode = new CtrlDX(opMode, 2, opTarget + 17); + opCtrl[opVal].opMode = new CtrlDXOpMode(opMode, 1, opTarget + 17); ctrl.add(opCtrl[opVal].opMode); String coarse; coarse << opName << " F COARSE"; - opCtrl[opVal].coarse = new CtrlDX(coarse, 32, opTarget + 18); + opCtrl[opVal].coarse = new CtrlDX(coarse, 31, opTarget + 18); ctrl.add(opCtrl[opVal].coarse); String fine; fine << opName << " F FINE"; - opCtrl[opVal].fine = new CtrlDX(fine, 100, opTarget + 19); + opCtrl[opVal].fine = new CtrlDX(fine, 99, opTarget + 19); ctrl.add(opCtrl[opVal].fine); String detune; detune << opName << " OSC DETUNE"; - opCtrl[opVal].detune = new CtrlDX(detune, 15, opTarget + 20, -7); + opCtrl[opVal].detune = new CtrlDX(detune, 14, opTarget + 20, -7); ctrl.add(opCtrl[opVal].detune); String sclBrkPt; sclBrkPt << opName << " BREAK POINT"; - opCtrl[opVal].sclBrkPt = new CtrlDX(sclBrkPt, 100, opTarget + 8); + opCtrl[opVal].sclBrkPt = new CtrlDXBreakpoint(sclBrkPt, 99, opTarget + 8); ctrl.add(opCtrl[opVal].sclBrkPt); String sclLeftDepth; sclLeftDepth << opName << " L SCALE DEPTH"; - opCtrl[opVal].sclLeftDepth = new CtrlDX(sclLeftDepth, 100, opTarget + 9); + opCtrl[opVal].sclLeftDepth = new CtrlDX(sclLeftDepth, 99, opTarget + 9); ctrl.add(opCtrl[opVal].sclLeftDepth); String sclRightDepth; sclRightDepth << opName << " R SCALE DEPTH"; - opCtrl[opVal].sclRightDepth = new CtrlDX(sclRightDepth, 100, opTarget + 10); + opCtrl[opVal].sclRightDepth = new CtrlDX(sclRightDepth, 99, opTarget + 10); ctrl.add(opCtrl[opVal].sclRightDepth); String sclLeftCurve; sclLeftCurve << opName << " L KEY SCALE"; - opCtrl[opVal].sclLeftCurve = new CtrlDXLabel(sclLeftCurve, 4, opTarget + 11, keyScaleLabels); + opCtrl[opVal].sclLeftCurve = new CtrlDXLabel(sclLeftCurve, 3, opTarget + 11, keyScaleLabels); ctrl.add(opCtrl[opVal].sclLeftCurve); String sclRightCurve; sclRightCurve << opName << " R KEY SCALE"; - opCtrl[opVal].sclRightCurve = new CtrlDXLabel(sclRightCurve, 4, opTarget + 12, keyScaleLabels); + opCtrl[opVal].sclRightCurve = new CtrlDXLabel(sclRightCurve, 3, opTarget + 12, keyScaleLabels); ctrl.add(opCtrl[opVal].sclRightCurve); String sclRate; sclRate << opName << " RATE SCALING"; - opCtrl[opVal].sclRate = new CtrlDX(sclRate, 8, opTarget + 13); + opCtrl[opVal].sclRate = new CtrlDX(sclRate, 7, opTarget + 13); ctrl.add(opCtrl[opVal].sclRate); String ampModSens; ampModSens << opName << " A MOD SENS."; - opCtrl[opVal].ampModSens = new CtrlDX(ampModSens, 4, opTarget + 14); + opCtrl[opVal].ampModSens = new CtrlDX(ampModSens, 3, opTarget + 14); ctrl.add(opCtrl[opVal].ampModSens); String velModSens; velModSens << opName << " KEY VELOCITY"; - opCtrl[opVal].velModSens = new CtrlDX(velModSens, 8, opTarget + 15); + opCtrl[opVal].velModSens = new CtrlDX(velModSens, 7, opTarget + 15); ctrl.add(opCtrl[opVal].velModSens); + + String opSwitchLabel; + opSwitchLabel << opName << " SWITCH"; + opCtrl[opVal].opSwitch = new CtrlOpSwitch(opSwitchLabel, (char *)&(controllers.opSwitch)+(5-i), this); + ctrl.add(opCtrl[opVal].opSwitch); } for (int i=0; i < ctrl.size(); i++) { @@ -447,7 +565,12 @@ void DexedAudioProcessor::setDxValue(int offset, int v) { if (offset < 0) return; - if ( data[offset] != v ) { + if ( offset == 155 ) { + // used on op switch that are not part of a Sysex packed cartridge, we render it + // ourselves. + packOpSwitch(); + v = data[155]; + } else if ( data[offset] != v ) { TRACE("setting dx %d %d", offset, v); data[offset] = v; } else { @@ -469,6 +592,7 @@ void DexedAudioProcessor::setDxValue(int offset, int v) { msg[4] = offset & 0x7F; if ( sysexComm.isOutputActive() ) { + //TRACE("SENDING SYSEX: %.2X%.2X %.2X%.2X %.2X%.2X %.2X", msg[0], msg[1], msg[2], msg[3], msg[4], msg[5], msg[6]); sysexComm.send(MidiMessage(msg,7)); } } @@ -512,7 +636,8 @@ void DexedAudioProcessor::setCurrentProgram(int index) { panic(); index = index > 31 ? 31 : index; - unpackProgram(index); + currentCart.unpackProgram(data, index); + strcpy(controllers.opSwitch, "111111"); lfo.reset(data + 137); currentProgram = index; triggerAsyncUpdate(); @@ -577,13 +702,31 @@ void DexedAudioProcessor::loadPreference() { sysexComm.setChl( prop.getIntValue( String("sysexChl") ) ); } - if ( prop.containsKey( String("engineType" ) ) ) { - engineType = prop.getIntValue( String("engineType") ); + if ( prop.containsKey( String("engineType") ) ) { + setEngineType(prop.getIntValue(String("engineType"))); } if ( prop.containsKey( String("showKeyboard") ) ) { showKeyboard = prop.getIntValue( String("showKeyboard") ); } + + if ( prop.containsKey( String("wheelMod") ) ) { + controllers.wheel.parseConfig(prop.getValue(String("wheelMod")).toRawUTF8()); + } + + if ( prop.containsKey( String("footMod") ) ) { + controllers.foot.parseConfig(prop.getValue(String("footMod")).toRawUTF8()); + } + + if ( prop.containsKey( String("breathMod") ) ) { + controllers.breath.parseConfig(prop.getValue(String("breathMod")).toRawUTF8()); + } + + if ( prop.containsKey( String("aftertouchMod") ) ) { + controllers.at.parseConfig(prop.getValue(String("aftertouchMod")).toRawUTF8()); + } + + controllers.refresh(); } void DexedAudioProcessor::savePreference() { @@ -601,9 +744,18 @@ void DexedAudioProcessor::savePreference() { prop.setValue(String("showKeyboard"), showKeyboard); - //prop.setValue(String("engineResolution"), engineResolution); + char mod_cfg[15]; + controllers.wheel.setConfig(mod_cfg); + prop.setValue(String("wheelMod"), mod_cfg); + controllers.foot.setConfig(mod_cfg); + prop.setValue(String("footMod"), mod_cfg); + controllers.breath.setConfig(mod_cfg); + prop.setValue(String("breathMod"), mod_cfg); + controllers.at.setConfig(mod_cfg); + prop.setValue(String("aftertouchMod"), mod_cfg); + + prop.setValue(String("engineType"), (int) engineType); prop.save(); } - diff --git a/ports/dexed/source/PluginParam.h b/ports/dexed/source/PluginParam.h index cc3ed9ba..630cde76 100644 --- a/ports/dexed/source/PluginParam.h +++ b/ports/dexed/source/PluginParam.h @@ -121,6 +121,7 @@ struct OperatorCtrl { ScopedPointer sclRate; ScopedPointer ampModSens; ScopedPointer velModSens; + ScopedPointer opSwitch; }; #endif // PLUGINPARAM_H_INCLUDED diff --git a/ports/dexed/source/PluginProcessor.cpp b/ports/dexed/source/PluginProcessor.cpp index d4da11b0..8322304e 100644 --- a/ports/dexed/source/PluginProcessor.cpp +++ b/ports/dexed/source/PluginProcessor.cpp @@ -1,6 +1,6 @@ /** * - * Copyright (c) 2013-2015 Pascal Gauthier. + * Copyright (c) 2013-2017 Pascal Gauthier. * * 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 @@ -18,6 +18,9 @@ * */ +#include +#include + #include "PluginProcessor.h" #include "PluginEditor.h" @@ -54,19 +57,23 @@ DexedAudioProcessor::DexedAudioProcessor() { resolvAppDir(); + TRACE("controler %s", controllers.opSwitch); + initCtrl(); sendSysexChange = true; normalizeDxVelocity = false; sysexComm.listener = this; - + showKeyboard = true; + memset(&voiceStatus, 0, sizeof(VoiceStatus)); + setEngineType(DEXED_ENGINE_MARKI); controllers.values_[kControllerPitchRange] = 3; controllers.values_[kControllerPitchStep] = 0; + controllers.masterTune = 0; + loadPreference(); - - setEngineType(DEXED_ENGINE_MODERN); - + for (int note = 0; note < MAX_ACTIVE_NOTES; ++note) { voices[note].dx7_note = NULL; } @@ -98,13 +105,18 @@ void DexedAudioProcessor::prepareToPlay(double sampleRate, int samplesPerBlock) currentNote = 0; controllers.values_[kControllerPitch] = 0x2000; - controllers.values_[kControllerModWheel] = 0; + controllers.modwheel_cc = 0; + controllers.foot_cc = 0; + controllers.breath_cc = 0; + controllers.aftertouch_cc = 0; sustain = false; extra_buf_size = 0; keyboardState.reset(); + lfo.reset(data + 137); + nextMidi = new MidiMessage(0xF0); midiMsg = new MidiMessage(0xF0); } @@ -134,13 +146,13 @@ void DexedAudioProcessor::releaseResources() { } void DexedAudioProcessor::processBlock(AudioSampleBuffer& buffer, MidiBuffer& midiMessages) { - const int numSamples = buffer.getNumSamples(); + int numSamples = buffer.getNumSamples(); int i; if ( refreshVoice ) { for(i=0;i < MAX_ACTIVE_NOTES;i++) { if ( voices[i].live ) - voices[i].dx7_note->update(data, voices[i].midi_note); + voices[i].dx7_note->update(data, voices[i].midi_note, voices[i].velocity); } lfo.reset(data + 137); refreshVoice = false; @@ -190,11 +202,11 @@ void DexedAudioProcessor::processBlock(AudioSampleBuffer& buffer, MidiBuffer& mi voices[note].dx7_note->compute(audiobuf.get(), lfovalue, lfodelay, &controllers); for (int j=0; j < N; ++j) { - int32_t val = audiobuf.get()[j]; //& 0xFFFFF000); + int32_t val = audiobuf.get()[j]; val = val >> 4; int clip_val = val < -(1 << 24) ? 0x8000 : val >= (1 << 24) ? 0x7fff : val >> 9; - float f = ((float) clip_val) / (float) 32768; + float f = ((float) clip_val) / (float) 0x8000; if( f > 1 ) f = 1; if( f < -1 ) f = -1; sumbuf[j] += f; @@ -231,11 +243,6 @@ void DexedAudioProcessor::processBlock(AudioSampleBuffer& buffer, MidiBuffer& mi else vuSignal = 0; } - - // DX7 is a mono synth - for (int channel = 1; channel < getTotalNumOutputChannels(); ++channel) { - buffer.copyFrom(channel, 0, channelData, numSamples, 1); - } } @@ -266,36 +273,52 @@ void DexedAudioProcessor::processMidiMessage(const MidiMessage *msg) { case 0x90 : keydown(buf[1], buf[2]); return; - + case 0xb0 : { - int controller = buf[1]; + int ctrl = buf[1]; int value = buf[2]; - // mod wheel - if ( controller == 1 ) { - controllers.values_[kControllerModWheel] = value; - return; - } - - // pedal - if (controller == 64) { - sustain = value != 0; - if (!sustain) { - for (int note = 0; note < MAX_ACTIVE_NOTES; note++) { - if (voices[note].sustained && !voices[note].keydown) { - voices[note].dx7_note->keyup(); - voices[note].sustained = false; + switch(ctrl) { + case 1: + controllers.modwheel_cc = value; + controllers.refresh(); + break; + case 2: + controllers.breath_cc = value; + controllers.refresh(); + break; + case 4: + controllers.foot_cc = value; + controllers.refresh(); + break; + case 64: + sustain = value > 63; + if (!sustain) { + for (int note = 0; note < MAX_ACTIVE_NOTES; note++) { + if (voices[note].sustained && !voices[note].keydown) { + voices[note].dx7_note->keyup(); + voices[note].sustained = false; + } } } - } - return; + break; + case 123: + panic(); + break; } } return; case 0xc0 : setCurrentProgram(buf[1]); - return; + return; + + // aftertouch + case 0xd0 : + controllers.aftertouch_cc = buf[1]; + controllers.refresh(); + return; + } switch (cmd) { @@ -303,7 +326,6 @@ void DexedAudioProcessor::processMidiMessage(const MidiMessage *msg) { controllers.values_[kControllerPitch] = buf[1] | (buf[2] << 7); break; } - } void DexedAudioProcessor::keydown(uint8_t pitch, uint8_t velo) { @@ -324,6 +346,7 @@ void DexedAudioProcessor::keydown(uint8_t pitch, uint8_t velo) { currentNote = (note + 1) % MAX_ACTIVE_NOTES; lfo.keydown(); // TODO: should only do this if # keys down was 0 voices[note].midi_note = pitch; + voices[note].velocity = velo; voices[note].sustained = sustain; voices[note].keydown = true; voices[note].dx7_note->init(data, pitch, velo); @@ -414,45 +437,72 @@ void DexedAudioProcessor::handleIncomingMidiMessage(MidiInput* source, const Mid sysexComm.inActivity = true; - if ( ! message.isSysEx() ) - return; - - //const uint8 *buf = msg->getSysExData(); const uint8 *buf = message.getRawData(); int sz = message.getRawDataSize(); - if ( sz < 3 ) - return; - - TRACE("SYSEX RECEIVED %d", sz); + //TRACE("%X %X %X %X %X %X", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]); + if ( ! message.isSysEx() ) + return; + // test if it is a Yamaha Sysex if ( buf[1] != 0x43 ) { TRACE("not a yamaha sysex %d", buf[0]); return; } + + int substatus = buf[2] >> 4; + + if ( substatus == 0 ) { + // single voice dump + if ( buf[3] == 0 ) { + if ( sz < 156 ) { + TRACE("wrong single voice datasize %d", sz); + return; + } + + updateProgramFromSysex(buf+6); + } - // single voice dump - if ( buf[3] == 0 ) { - if ( sz < 155 ) { - TRACE("wrong single voice datasize %d", sz); - return; + // 32 voice dump + if ( buf[3] == 9 ) { + if ( sz < 4104 ) { + TRACE("wrong 32 voice dump data size %d", sz); + return; + } + + Cartridge received; + if ( received.load(buf, sz) == 0 ) { + loadCartridge(received); + setCurrentProgram(0); + } } - - updateProgramFromSysex(buf+6); - } - - // 32 voice dump - if ( buf[3] == 9 ) { - if ( sz < 4104 ) { - TRACE("wrong 32 voice datasize %d", sz); + } else if ( substatus == 1 ) { + // parameter change + if ( sz < 7 ) { + TRACE("wrong single voice datasize %d", sz); + return; + } + + uint8 offset = (buf[3] << 7) + buf[4]; + uint8 value = buf[5]; + + TRACE("parameter change message offset:%d value:%d", offset, value); + + if ( offset > 155 ) { + TRACE("wrong offset size"); return; } - TRACE("update 32bulk voice"); - importSysex((const char *)buf); - setCurrentProgram(0); + + if ( offset == 155 ) { + unpackOpSwitch(value); + } else { + data[offset] = value; + } + } else { + TRACE("unknown sysex substatus: %d", substatus); } - + updateHostDisplay(); forceRefreshUI = true; } @@ -462,18 +512,18 @@ int DexedAudioProcessor::getEngineType() { } void DexedAudioProcessor::setEngineType(int tp) { + TRACE("settings engine %d", tp); + switch (tp) { - case DEXED_ENGINE_MODERN : - controllers.core = &engineMsfa; - break; case DEXED_ENGINE_MARKI: - controllers.sinBitFilter = 0xFFFFC000; // 10 bit - controllers.dacBitFilter = 0xFFFFF000; // semi 14 bit controllers.core = &engineMkI; break; case DEXED_ENGINE_OPL: controllers.core = &engineOpl; break; + default: + controllers.core = &engineMsfa; + break; } engineType = tp; } @@ -581,3 +631,15 @@ AudioProcessorEditor* DexedAudioProcessor::createEditor() { void DexedAudioProcessor::handleAsyncUpdate() { updateUI(); } + +void dexed_trace(const char *source, const char *fmt, ...) { + char output[4096]; + va_list argptr; + va_start(argptr, fmt); + vsnprintf(output, 4095, fmt, argptr); + va_end(argptr); + + String dest; + dest << source << " " << output; + Logger::writeToLog(dest); +} diff --git a/ports/dexed/source/PluginProcessor.h b/ports/dexed/source/PluginProcessor.h index ace42ada..b31071e9 100644 --- a/ports/dexed/source/PluginProcessor.h +++ b/ports/dexed/source/PluginProcessor.h @@ -1,6 +1,6 @@ /** * - * Copyright (c) 2013-2015 Pascal Gauthier. + * Copyright (c) 2013-2017 Pascal Gauthier. * * 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 @@ -37,6 +37,7 @@ struct ProcessorVoice { int midi_note; + int velocity; bool keydown; bool sustained; bool live; @@ -115,14 +116,17 @@ class DexedAudioProcessor : public AudioProcessor, public AsyncUpdater, public char clipboardContent; void resolvAppDir(); + + void unpackOpSwitch(char packOpValue); + void packOpSwitch(); + public : // in MIDI units (0x4000 is neutral) Controllers controllers; - StringArray programNames; - char sysex[4096]; - char data[161]; + StringArray programNames; + Cartridge currentCart; + uint8_t data[161]; - //CartridgeManager cartManager; SysexComm sysexComm; VoiceStatus voiceStatus; File activeFileCartridge; @@ -153,8 +157,9 @@ public : ScopedPointer fxCutoff; ScopedPointer fxReso; ScopedPointer output; + ScopedPointer tune; - int importSysex(const char *imported); + void loadCartridge(Cartridge &cart); void setDxValue(int offset, int v); //============================================================================== @@ -184,7 +189,6 @@ public : bool hasEditor() const; void updateUI(); bool peekVoiceStatus(); - void unpackProgram(int idx); void updateProgramFromSysex(const uint8 *rawdata); void setupStartupCart(); diff --git a/ports/dexed/source/ProgramListBox.cpp b/ports/dexed/source/ProgramListBox.cpp index 63094215..cc830ed2 100644 --- a/ports/dexed/source/ProgramListBox.cpp +++ b/ports/dexed/source/ProgramListBox.cpp @@ -29,7 +29,9 @@ ProgramListBox::ProgramListBox(const String name, int numCols) : Component(name) selectedPgm = -1; hasContent = false; dragCandidate = -1; + pgmCandidate = -1; readOnly = false; + programNames.clear(); } void ProgramListBox::paint(Graphics &g) { @@ -85,9 +87,9 @@ void ProgramListBox::resized() { cellHeight = getHeight() / rows; } -void ProgramListBox::setCartridge(char *sysex) { - extractProgramNames((const char *)sysex, programNames); - memcpy(cartContent, sysex, 4104); +void ProgramListBox::setCartridge(Cartridge &cart) { + cartContent = cart; + cartContent.getProgramNames(programNames); hasContent = true; repaint(); } @@ -100,29 +102,36 @@ int ProgramListBox::programPosition(int x, int y) { return (y / cellHeight) + ((x / cellWidth) * rows); } -void ProgramListBox::mouseDoubleClick(const MouseEvent &event) { +void ProgramListBox::mouseDown(const MouseEvent &event) { + pgmCandidate = -1; + if ( ! hasContent ) return; - if ( ! event.mods.isLeftButtonDown() ) - return; - int pos = programPosition(event.getMouseDownX(), event.getMouseDownY()); - if ( listener != nullptr ) - listener->programSelected(this, pos); + if ( event.mods.isRightButtonDown() || event.mods.isAnyModifierKeyDown() ) { + int pos = programPosition(event.getMouseDownX(), event.getMouseDownY()); + if ( listener != nullptr ) + listener->programRightClicked(this, pos); + return; + } + + pgmCandidate = programPosition(event.getMouseDownX(), event.getMouseDownY()); } -void ProgramListBox::mouseDown(const MouseEvent &event) { - if ( ! hasContent ) - return; - if ( ! event.mods.isRightButtonDown() ) +void ProgramListBox::mouseUp(const MouseEvent &event) { + if ( pgmCandidate == -1 ) return; int pos = programPosition(event.getMouseDownX(), event.getMouseDownY()); - if ( listener != nullptr ) - listener->programRightClicked(this, pos); + if ( pgmCandidate == pos) { + if ( listener != nullptr ) + listener->programSelected(this, pgmCandidate); + pgmCandidate = -1; + } } void ProgramListBox::mouseDrag(const MouseEvent &event) { + pgmCandidate = -1; if ( ! hasContent ) return; if ( dragCandidate != -1 ) @@ -138,7 +147,7 @@ void ProgramListBox::mouseDrag(const MouseEvent &event) { g.fillRect(0,0,cellWidth, cellHeight); g.setColour(Colours::white); g.drawFittedText(programNames[position], 0, 0, cellWidth, cellHeight, Justification::centred, true); - void *src = cartContent + (position*128); + void *src = cartContent.getRawVoice() + (position*128); var description = var(src, 128); dragContainer->startDragging(description, this, snapshot, false); } @@ -148,9 +157,7 @@ void ProgramListBox::setSelected(int idx) { selectedPgm = idx; } -char* ProgramListBox::getCurrentCart() { - if ( ! hasContent ) - return nullptr; +Cartridge &ProgramListBox::getCurrentCart() { return cartContent; } diff --git a/ports/dexed/source/ProgramListBox.h b/ports/dexed/source/ProgramListBox.h index 531971ab..9df35783 100644 --- a/ports/dexed/source/ProgramListBox.h +++ b/ports/dexed/source/ProgramListBox.h @@ -22,6 +22,7 @@ #define PROGRAMLISTBOX_H_INCLUDED #include "JuceHeader.h" +#include "PluginData.h" class ProgramListBox; class ProgramListBoxListener { @@ -41,10 +42,10 @@ class ProgramListBox : public Component, public DragAndDropTarget { int programPosition(int x, int y); int selectedPgm; - // TODO: this should be a pointer - char cartContent[4104]; + Cartridge cartContent; int dragCandidate; + int pgmCandidate; public: StringArray programNames; @@ -52,14 +53,15 @@ public: ProgramListBox(const String name, int numCols); void addListener(ProgramListBoxListener *listener); - void paint(Graphics &g); - void setCartridge(char *sysex); - void resized(); - void mouseDoubleClick(const MouseEvent &event); - void mouseDown(const MouseEvent &event); - void mouseDrag(const MouseEvent &event); + void paint(Graphics &g) override; + void resized() override; + void mouseDown(const MouseEvent &event) override; + void mouseDrag(const MouseEvent &event) override; + void mouseUp(const MouseEvent &event) override; void setSelected(int idx); - char* getCurrentCart(); + + Cartridge &getCurrentCart(); + void setCartridge(Cartridge &cart); bool isInterestedInDragSource(const SourceDetails& dragSourceDetails) override; void itemDragEnter(const SourceDetails &dragSourceDetails) override; diff --git a/ports/dexed/source/SysexComm.cpp b/ports/dexed/source/SysexComm.cpp index d039e925..e1ccd0de 100644 --- a/ports/dexed/source/SysexComm.cpp +++ b/ports/dexed/source/SysexComm.cpp @@ -142,9 +142,6 @@ void SysexComm::setChl(int chl) { int SysexComm::send(const MidiMessage &message) { if ( output == NULL ) return 2; - - TRACE("send sysex"); - outActivity = true; output->sendMessageNow(message); return 0; diff --git a/ports/dexed/source/msfa/controllers.h b/ports/dexed/source/msfa/controllers.h index 873e2e0d..6f5f7190 100755 --- a/ports/dexed/source/msfa/controllers.h +++ b/ports/dexed/source/msfa/controllers.h @@ -1,12 +1,12 @@ /* * Copyright 2013 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -18,25 +18,108 @@ #define __CONTROLLERS_H #include "synth.h" +#include "../Dexed.h" +#include +#include + +#ifdef _WIN32 +#define snprintf _snprintf +#endif // State of MIDI controllers -const int kControllerModWheel = 1; const int kControllerPitch = 128; const int kControllerPitchRange = 129; const int kControllerPitchStep = 130; class FmCore; +struct FmMod { + int range; + bool pitch; + bool amp; + bool eg; + + FmMod() { + range = 0; + pitch = false; + amp = false; + eg = false; + } + + void parseConfig(const char *cfg) { + int r = 0, p = 0, a = 0, e = 0; + sscanf(cfg, "%d %d %d %d", &r, &p, &a, &e); + + range = r < 0 && r > 127 ? 0 : r; + pitch = p != 0; + amp = a != 0; + eg = e != 0; + } + + void setConfig(char *cfg) { + snprintf(cfg, 13, "%d %d %d %d", range, pitch, amp, eg); + } +}; + class Controllers { - public: - int values_[131]; + void applyMod(int cc, FmMod &mod) { + float range = 0.01 * mod.range; + int total = cc * range; + if ( mod.amp ) + amp_mod = max(amp_mod, total); + + if ( mod.pitch ) + pitch_mod = max(pitch_mod, total); + + if ( mod.eg ) + eg_mod = max(eg_mod, total); + } + +public: + int values_[131]; - // engine bit filters - uint32_t sinBitFilter; // bit filter based upon sin LUT lookup - uint32_t dacBitFilter; // bit filter based upon DAC resolution - uint32_t mulBitFilter; // bit filter based upon multipliers (?????) + char opSwitch[7]; + + int amp_mod; + int pitch_mod; + int eg_mod; + + int aftertouch_cc; + int breath_cc; + int foot_cc; + int modwheel_cc; + + int masterTune; + + FmMod wheel; + FmMod foot; + FmMod breath; + FmMod at; + + Controllers() { + amp_mod = 0; + pitch_mod = 0; + eg_mod = 0; + strcpy(opSwitch, "111111"); + } + + void refresh() { + amp_mod = 0; + pitch_mod = 0; + eg_mod = 0; + + applyMod(modwheel_cc, wheel); + applyMod(breath_cc, breath); + applyMod(foot_cc, foot); + applyMod(aftertouch_cc, at); + + if ( ! ((wheel.eg || foot.eg) || (breath.eg || at.eg)) ) + eg_mod = 127; + + TRACE("amp_mod %d pitch_mod %d", amp_mod, pitch_mod); + } - FmCore *core; + FmCore *core; }; #endif // __CONTROLLERS_H diff --git a/ports/dexed/source/msfa/dx7note.cc b/ports/dexed/source/msfa/dx7note.cc index 574e86d0..cb32dd53 100644 --- a/ports/dexed/source/msfa/dx7note.cc +++ b/ports/dexed/source/msfa/dx7note.cc @@ -1,12 +1,13 @@ /* + * Copyright 2016-2017 Pascal Gauthier. * Copyright 2012 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,10 +15,6 @@ * limitations under the License. */ -#ifdef VERBOSE -#include -using namespace std; -#endif #include #include #include "synth.h" @@ -26,105 +23,107 @@ using namespace std; #include "controllers.h" #include "dx7note.h" +const int FEEDBACK_BITDEPTH = 8; + int32_t midinote_to_logfreq(int midinote) { - const int base = 50857777; // (1 << 24) * (log(440) / log(2) - 69/12) - const int step = (1 << 24) / 12; - return base + step * midinote; + const int base = 50857777; // (1 << 24) * (log(440) / log(2) - 69/12) + const int step = (1 << 24) / 12; + return base + step * midinote; } const int32_t coarsemul[] = { - -16777216, 0, 16777216, 26591258, 33554432, 38955489, 43368474, 47099600, - 50331648, 53182516, 55732705, 58039632, 60145690, 62083076, 63876816, - 65546747, 67108864, 68576247, 69959732, 71268397, 72509921, 73690858, - 74816848, 75892776, 76922906, 77910978, 78860292, 79773775, 80654032, - 81503396, 82323963, 83117622 + -16777216, 0, 16777216, 26591258, 33554432, 38955489, 43368474, 47099600, + 50331648, 53182516, 55732705, 58039632, 60145690, 62083076, 63876816, + 65546747, 67108864, 68576247, 69959732, 71268397, 72509921, 73690858, + 74816848, 75892776, 76922906, 77910978, 78860292, 79773775, 80654032, + 81503396, 82323963, 83117622 }; int32_t osc_freq(int midinote, int mode, int coarse, int fine, int detune) { - // TODO: pitch randomization - int32_t logfreq; - if (mode == 0) { - logfreq = midinote_to_logfreq(midinote); - logfreq += coarsemul[coarse & 31]; - if (fine) { - // (1 << 24) / log(2) - logfreq += (int32_t)floor(24204406.323123 * log(1 + 0.01 * fine) + 0.5); + // TODO: pitch randomization + int32_t logfreq; + if (mode == 0) { + logfreq = midinote_to_logfreq(midinote); + logfreq += coarsemul[coarse & 31]; + if (fine) { + // (1 << 24) / log(2) + logfreq += (int32_t)floor(24204406.323123 * log(1 + 0.01 * fine) + 0.5); + } + // This was measured at 7.213Hz per count at 9600Hz, but the exact + // value is somewhat dependent on midinote. Close enough for now. + logfreq += 12606 * (detune - 7); + } else { + // ((1 << 24) * log(10) / log(2) * .01) << 3 + logfreq = (4458616 * ((coarse & 3) * 100 + fine)) >> 3; + logfreq += detune > 7 ? 13457 * (detune - 7) : 0; } - // This was measured at 7.213Hz per count at 9600Hz, but the exact - // value is somewhat dependent on midinote. Close enough for now. - logfreq += 12606 * (detune - 7); - } else { - // ((1 << 24) * log(10) / log(2) * .01) << 3 - logfreq = (4458616 * ((coarse & 3) * 100 + fine)) >> 3; - logfreq += detune > 7 ? 13457 * (detune - 7) : 0; - } - return logfreq; + return logfreq; } const uint8_t velocity_data[64] = { - 0, 70, 86, 97, 106, 114, 121, 126, 132, 138, 142, 148, 152, 156, 160, 163, - 166, 170, 173, 174, 178, 181, 184, 186, 189, 190, 194, 196, 198, 200, 202, - 205, 206, 209, 211, 214, 216, 218, 220, 222, 224, 225, 227, 229, 230, 232, - 233, 235, 237, 238, 240, 241, 242, 243, 244, 246, 246, 248, 249, 250, 251, - 252, 253, 254 + 0, 70, 86, 97, 106, 114, 121, 126, 132, 138, 142, 148, 152, 156, 160, 163, + 166, 170, 173, 174, 178, 181, 184, 186, 189, 190, 194, 196, 198, 200, 202, + 205, 206, 209, 211, 214, 216, 218, 220, 222, 224, 225, 227, 229, 230, 232, + 233, 235, 237, 238, 240, 241, 242, 243, 244, 246, 246, 248, 249, 250, 251, + 252, 253, 254 }; // See "velocity" section of notes. Returns velocity delta in microsteps. int ScaleVelocity(int velocity, int sensitivity) { - int clamped_vel = max(0, min(127, velocity)); - int vel_value = velocity_data[clamped_vel >> 1] - 239; - int scaled_vel = ((sensitivity * vel_value + 7) >> 3) << 4; - return scaled_vel; + int clamped_vel = max(0, min(127, velocity)); + int vel_value = velocity_data[clamped_vel >> 1] - 239; + int scaled_vel = ((sensitivity * vel_value + 7) >> 3) << 4; + return scaled_vel; } int ScaleRate(int midinote, int sensitivity) { - int x = min(31, max(0, midinote / 3 - 7)); - int qratedelta = (sensitivity * x) >> 3; + int x = min(31, max(0, midinote / 3 - 7)); + int qratedelta = (sensitivity * x) >> 3; #ifdef SUPER_PRECISE - int rem = x & 7; - if (sensitivity == 3 && rem == 3) { - qratedelta -= 1; - } else if (sensitivity == 7 && rem > 0 && rem < 4) { - qratedelta += 1; - } + int rem = x & 7; + if (sensitivity == 3 && rem == 3) { + qratedelta -= 1; + } else if (sensitivity == 7 && rem > 0 && rem < 4) { + qratedelta += 1; + } #endif - return qratedelta; + return qratedelta; } const uint8_t exp_scale_data[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 14, 16, 19, 23, 27, 33, 39, 47, 56, 66, - 80, 94, 110, 126, 142, 158, 174, 190, 206, 222, 238, 250 + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 14, 16, 19, 23, 27, 33, 39, 47, 56, 66, + 80, 94, 110, 126, 142, 158, 174, 190, 206, 222, 238, 250 }; int ScaleCurve(int group, int depth, int curve) { - int scale; - if (curve == 0 || curve == 3) { - // linear - scale = (group * depth * 329) >> 12; - } else { - // exponential - int n_scale_data = sizeof(exp_scale_data); - int raw_exp = exp_scale_data[min(group, n_scale_data - 1)]; - scale = (raw_exp * depth * 329) >> 15; - } - if (curve < 2) { - scale = -scale; - } - return scale; + int scale; + if (curve == 0 || curve == 3) { + // linear + scale = (group * depth * 329) >> 12; + } else { + // exponential + int n_scale_data = sizeof(exp_scale_data); + int raw_exp = exp_scale_data[min(group, n_scale_data - 1)]; + scale = (raw_exp * depth * 329) >> 15; + } + if (curve < 2) { + scale = -scale; + } + return scale; } int ScaleLevel(int midinote, int break_pt, int left_depth, int right_depth, - int left_curve, int right_curve) { - int offset = midinote - break_pt - 17; - if (offset >= 0) { - return ScaleCurve(offset / 3, right_depth, right_curve); - } else { - return ScaleCurve((-offset) / 3, left_depth, left_curve); - } + int left_curve, int right_curve) { + int offset = midinote - break_pt - 17; + if (offset >= 0) { + return ScaleCurve((offset+1) / 3, right_depth, right_curve); + } else { + return ScaleCurve(-(offset-1) / 3, left_depth, left_curve); + } } static const uint8_t pitchmodsenstab[] = { - 0, 10, 20, 33, 55, 92, 153, 255 + 0, 10, 20, 33, 55, 92, 153, 255 }; // 0, 66, 109, 255 @@ -139,75 +138,62 @@ Dx7Note::Dx7Note() { } } -void Dx7Note::init(const char patch[156], int midinote, int velocity) { - int rates[4]; - int levels[4]; - for (int op = 0; op < 6; op++) { - int off = op * 21; - for (int i = 0; i < 4; i++) { - rates[i] = patch[off + i]; - levels[i] = patch[off + 4 + i]; +void Dx7Note::init(const uint8_t patch[156], int midinote, int velocity) { + int rates[4]; + int levels[4]; + for (int op = 0; op < 6; op++) { + int off = op * 21; + for (int i = 0; i < 4; i++) { + rates[i] = patch[off + i]; + levels[i] = patch[off + 4 + i]; + } + int outlevel = patch[off + 16]; + outlevel = Env::scaleoutlevel(outlevel); + int level_scaling = ScaleLevel(midinote, patch[off + 8], patch[off + 9], + patch[off + 10], patch[off + 11], patch[off + 12]); + outlevel += level_scaling; + outlevel = min(127, outlevel); + outlevel = outlevel << 5; + outlevel += ScaleVelocity(velocity, patch[off + 15]); + outlevel = max(0, outlevel); + int rate_scaling = ScaleRate(midinote, patch[off + 13]); + env_[op].init(rates, levels, outlevel, rate_scaling); + + int mode = patch[off + 17]; + int coarse = patch[off + 18]; + int fine = patch[off + 19]; + int detune = patch[off + 20]; + int32_t freq = osc_freq(midinote, mode, coarse, fine, detune); + basepitch_[op] = freq; + ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3]; } - int outlevel = patch[off + 16]; - outlevel = Env::scaleoutlevel(outlevel); -#ifdef VERBOSE - for (int j = 8; j < 12; j++) { - cout << (int)patch[off + j] << " "; + for (int i = 0; i < 4; i++) { + rates[i] = patch[126 + i]; + levels[i] = patch[130 + i]; } -#endif - int level_scaling = ScaleLevel(midinote, patch[off + 8], patch[off + 9], - patch[off + 10], patch[off + 11], patch[off + 12]); - outlevel += level_scaling; - outlevel = min(127, outlevel); -#ifdef VERBOSE - cout << op << ": " << level_scaling << " " << outlevel << endl; -#endif - outlevel = outlevel << 5; - outlevel += ScaleVelocity(velocity, patch[off + 15]); - outlevel = max(0, outlevel); - int rate_scaling = ScaleRate(midinote, patch[off + 13]); - env_[op].init(rates, levels, outlevel, rate_scaling); - - int mode = patch[off + 17]; - int coarse = patch[off + 18]; - int fine = patch[off + 19]; - int detune = patch[off + 20]; - int32_t freq = osc_freq(midinote, mode, coarse, fine, detune); - basepitch_[op] = freq; - // cout << op << " freq: " << freq << endl; - //params_[op].phase = 0; - //params_[op].gain_out = 0; - ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3]; - } - for (int i = 0; i < 4; i++) { - rates[i] = patch[126 + i]; - levels[i] = patch[130 + i]; - } - pitchenv_.set(rates, levels); - algorithm_ = patch[134]; - int feedback = patch[135]; - fb_shift_ = feedback != 0 ? 8 - feedback : 16; - pitchmoddepth_ = (patch[139] * 165) >> 6; - pitchmodsens_ = pitchmodsenstab[patch[143] & 7]; - ampmoddepth_ = (patch[140] * 165) >> 6; + pitchenv_.set(rates, levels); + algorithm_ = patch[134]; + int feedback = patch[135]; + fb_shift_ = feedback != 0 ? FEEDBACK_BITDEPTH - feedback : 16; + pitchmoddepth_ = (patch[139] * 165) >> 6; + pitchmodsens_ = pitchmodsenstab[patch[143] & 7]; + ampmoddepth_ = (patch[140] * 165) >> 6; } void Dx7Note::compute(int32_t *buf, int32_t lfo_val, int32_t lfo_delay, const Controllers *ctrls) { - int32_t pitchmod = pitchenv_.getsample(); + // ==== PITCH ==== uint32_t pmd = pitchmoddepth_ * lfo_delay; // Q32 - // TODO(PG) : make this integer friendly - uint32_t pwmd = (ctrls->values_[kControllerModWheel] * 0.7874) * (1 << 24); int32_t senslfo = pitchmodsens_ * (lfo_val - (1 << 23)); + int32_t pmod_1 = (((int64_t) pmd) * (int64_t) senslfo) >> 39; + pmod_1 = abs(pmod_1); + int32_t pmod_2 = ((int64_t)ctrls->pitch_mod * (int64_t)senslfo) >> 14; + pmod_2 = abs(pmod_2); + int32_t pitch_mod = max(pmod_1, pmod_2); + pitch_mod = pitchenv_.getsample() + (pitch_mod * (senslfo < 0 ? -1 : 1)); - uint32_t amd = ((int64_t) ampmoddepth_ * (int64_t) lfo_delay) >> 8; // Q24 :D - amd = ((int64_t) amd * (int64_t) lfo_val) >> 24; - - pitchmod += (((int64_t) pwmd) * (int64_t) senslfo) >> 39; - pitchmod += (((int64_t) pmd) * (int64_t) senslfo) >> 39; - + // ---- PITCH BEND ---- int pitchbend = ctrls->values_[kControllerPitch]; int32_t pb = (pitchbend - 0x2000); - if (pb != 0) { if (ctrls->values_[kControllerPitchStep] == 0) { pb = ((float) (pb << 11)) * ((float) ctrls->values_[kControllerPitchRange]) / 12.0; @@ -217,57 +203,92 @@ void Dx7Note::compute(int32_t *buf, int32_t lfo_val, int32_t lfo_delay, const Co pb = (pb * (8191 / stp)) << 11; } } - - pitchmod += pb; + pitch_mod += pb; + pitch_mod += ctrls->masterTune; + + // ==== AMP MOD ==== + uint32_t amod_1 = ((int64_t) ampmoddepth_ * (int64_t) lfo_delay) >> 8; // Q24 :D + amod_1 = ((int64_t) amod_1 * (int64_t) lfo_val) >> 24; + uint32_t amod_2 = ((int64_t) ctrls->amp_mod * (int64_t) lfo_val) >> 7; // Q?? :| + uint32_t amd_mod = max(amod_1, amod_2); + + // ==== EG AMP MOD ==== + uint32_t amod_3 = (ctrls->eg_mod+1) << 17; + amd_mod = max((1<<24) - amod_3, amd_mod); + + // ==== OP RENDER ==== for (int op = 0; op < 6; op++) { - //int32_t gain = pow(2, 10 + level * (1.0 / (1 << 24))); - params_[op].freq = Freqlut::lookup(basepitch_[op] + pitchmod); - - int32_t level = env_[op].getsample(); - if (ampmodsens_[op] != 0) { - uint32_t sensamp = ((uint64_t) amd) * ((uint64_t) ampmodsens_[op]) >> 24; + if ( ctrls->opSwitch[op] == '0' ) { + env_[op].getsample(); // advance the envelop even if it is not playing + params_[op].level_in = 0; + } else { + //int32_t gain = pow(2, 10 + level * (1.0 / (1 << 24))); + params_[op].freq = Freqlut::lookup(basepitch_[op] + pitch_mod); - // TODO: mehhh.. this needs some real tuning. - uint32_t pt = exp(((float)sensamp)/262144 * 0.07 + 12.2); - uint32_t ldiff = ((uint64_t)level) * (((uint64_t)pt<<4)) >> 28; - level -= ldiff; + int32_t level = env_[op].getsample(); + if (ampmodsens_[op] != 0) { + uint32_t sensamp = ((uint64_t) amd_mod) * ((uint64_t) ampmodsens_[op]) >> 24; + + // TODO: mehhh.. this needs some real tuning. + uint32_t pt = exp(((float)sensamp)/262144 * 0.07 + 12.2); + uint32_t ldiff = ((uint64_t)level) * (((uint64_t)pt<<4)) >> 28; + level -= ldiff; + } + params_[op].level_in = level; } - params_[op].level_in = level; } - ctrls->core->render(buf, params_, algorithm_, fb_buf_, fb_shift_, ctrls); + ctrls->core->render(buf, params_, algorithm_, fb_buf_, fb_shift_); } void Dx7Note::keyup() { - for (int op = 0; op < 6; op++) { - env_[op].keydown(false); + for (int op = 0; op < 6; op++) { + env_[op].keydown(false); + } pitchenv_.keydown(false); - } } -void Dx7Note::update(const char patch[156], int midinote) { - for (int op = 0; op < 6; op++) { - int off = op * 21; - int mode = patch[off + 17]; - int coarse = patch[off + 18]; - int fine = patch[off + 19]; - int detune = patch[off + 20]; - basepitch_[op] = osc_freq(midinote, mode, coarse, fine, detune); - ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3]; - } - algorithm_ = patch[134]; - int feedback = patch[135]; - fb_shift_ = feedback != 0 ? 8 - feedback : 16; - pitchmoddepth_ = (patch[139] * 165) >> 6; - pitchmodsens_ = pitchmodsenstab[patch[143] & 7]; - ampmoddepth_ = (patch[140] * 165) >> 6; +void Dx7Note::update(const uint8_t patch[156], int midinote, int velocity) { + int rates[4]; + int levels[4]; + for (int op = 0; op < 6; op++) { + int off = op * 21; + int mode = patch[off + 17]; + int coarse = patch[off + 18]; + int fine = patch[off + 19]; + int detune = patch[off + 20]; + basepitch_[op] = osc_freq(midinote, mode, coarse, fine, detune); + ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3]; + + for (int i = 0; i < 4; i++) { + rates[i] = patch[off + i]; + levels[i] = patch[off + 4 + i]; + } + int outlevel = patch[off + 16]; + outlevel = Env::scaleoutlevel(outlevel); + int level_scaling = ScaleLevel(midinote, patch[off + 8], patch[off + 9], + patch[off + 10], patch[off + 11], patch[off + 12]); + outlevel += level_scaling; + outlevel = min(127, outlevel); + outlevel = outlevel << 5; + outlevel += ScaleVelocity(velocity, patch[off + 15]); + outlevel = max(0, outlevel); + int rate_scaling = ScaleRate(midinote, patch[off + 13]); + env_[op].update(rates, levels, outlevel, rate_scaling); + } + algorithm_ = patch[134]; + int feedback = patch[135]; + fb_shift_ = feedback != 0 ? FEEDBACK_BITDEPTH - feedback : 16; + pitchmoddepth_ = (patch[139] * 165) >> 6; + pitchmodsens_ = pitchmodsenstab[patch[143] & 7]; + ampmoddepth_ = (patch[140] * 165) >> 6; } void Dx7Note::peekVoiceStatus(VoiceStatus &status) { - for(int i=0;i<6;i++) { - status.amp[i] = Exp2::lookup(params_[i].level_in - (14 * (1 << 24))); - env_[i].getPosition(&status.ampStep[i]); - } - pitchenv_.getPosition(&status.pitchStep); + for(int i=0;i<6;i++) { + status.amp[i] = Exp2::lookup(params_[i].level_in - (14 * (1 << 24))); + env_[i].getPosition(&status.ampStep[i]); + } + pitchenv_.getPosition(&status.pitchStep); } /** @@ -285,7 +306,6 @@ void Dx7Note::transferSignal(Dx7Note &src) { for (int i=0;i<6;i++) { params_[i].gain_out = src.params_[i].gain_out; params_[i].phase = src.params_[i].phase; - //params_[i].phase = 0; } } diff --git a/ports/dexed/source/msfa/dx7note.h b/ports/dexed/source/msfa/dx7note.h index 01c3e2fa..f2644e2f 100644 --- a/ports/dexed/source/msfa/dx7note.h +++ b/ports/dexed/source/msfa/dx7note.h @@ -1,12 +1,13 @@ /* + * Copyright 2016-2017 Pascal Gauthier. * Copyright 2012 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -28,48 +29,48 @@ #include "fm_core.h" struct VoiceStatus { - uint32_t amp[6]; - char ampStep[6]; - char pitchStep; + uint32_t amp[6]; + char ampStep[6]; + char pitchStep; }; class Dx7Note { - public: - Dx7Note(); - void init(const char patch[156], int midinote, int velocity); - - // Note: this _adds_ to the buffer. Interesting question whether it's - // worth it... - void compute(int32_t *buf, int32_t lfo_val, int32_t lfo_delay, - const Controllers *ctrls); - - void keyup(); +public: + Dx7Note(); + void init(const uint8_t patch[156], int midinote, int velocity); - // TODO: some way of indicating end-of-note. Maybe should be a return - // value from the compute method? (Having a count return from keyup - // is also tempting, but if there's a dynamic parameter change after - // keyup, that won't work. - - // PG:add the update - void update(const char patch[156], int midinote); - void peekVoiceStatus(VoiceStatus &status); - void transferState(Dx7Note& src); - void transferSignal(Dx7Note &src); - void oscSync(); + // Note: this _adds_ to the buffer. Interesting question whether it's + // worth it... + void compute(int32_t *buf, int32_t lfo_val, int32_t lfo_delay, + const Controllers *ctrls); + + void keyup(); + + // TODO: some way of indicating end-of-note. Maybe should be a return + // value from the compute method? (Having a count return from keyup + // is also tempting, but if there's a dynamic parameter change after + // keyup, that won't work. + + // PG:add the update + void update(const uint8_t patch[156], int midinote, int velocity); + void peekVoiceStatus(VoiceStatus &status); + void transferState(Dx7Note& src); + void transferSignal(Dx7Note &src); + void oscSync(); + +private: + Env env_[6]; + FmOpParams params_[6]; + PitchEnv pitchenv_; + int32_t basepitch_[6]; + int32_t fb_buf_[2]; + int32_t fb_shift_; + int32_t ampmodsens_[6]; - private: - Env env_[6]; - FmOpParams params_[6]; - PitchEnv pitchenv_; - int32_t basepitch_[6]; - int32_t fb_buf_[2]; - int32_t fb_shift_; - int32_t ampmodsens_[6]; - - int ampmoddepth_; - int algorithm_; - int pitchmoddepth_; - int pitchmodsens_; + int ampmoddepth_; + int algorithm_; + int pitchmoddepth_; + int pitchmodsens_; }; #endif // SYNTH_DX7NOTE_H_ diff --git a/ports/dexed/source/msfa/env.cc b/ports/dexed/source/msfa/env.cc index 63e44ac5..b6ccee45 100644 --- a/ports/dexed/source/msfa/env.cc +++ b/ports/dexed/source/msfa/env.cc @@ -1,12 +1,13 @@ /* + * Copyright 2017 Pascal Gauthier. * Copyright 2012 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -24,91 +25,100 @@ uint32_t Env::sr_multiplier = (1<<24); +const int levellut[] = { + 0, 5, 9, 13, 17, 20, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 42, 43, 45, 46 +}; + void Env::init_sr(double sampleRate) { sr_multiplier = (44100.0 / sampleRate) * (1<<24); } void Env::init(const int r[4], const int l[4], int32_t ol, int rate_scaling) { - for (int i = 0; i < 4; i++) { - rates_[i] = r[i]; - levels_[i] = l[i]; - } - outlevel_ = ol; - rate_scaling_ = rate_scaling; - level_ = 0; - down_ = true; - advance(0); + for (int i = 0; i < 4; i++) { + rates_[i] = r[i]; + levels_[i] = l[i]; + } + outlevel_ = ol; + rate_scaling_ = rate_scaling; + level_ = 0; + down_ = true; + advance(0); } int32_t Env::getsample() { - if (ix_ < 3 || ((ix_ < 4) && !down_)) { - if (rising_) { - const int jumptarget = 1716; - if (level_ < (jumptarget << 16)) { - level_ = jumptarget << 16; - } - level_ += (((17 << 24) - level_) >> 24) * inc_; - // TODO: should probably be more accurate when inc is large - if (level_ >= targetlevel_) { - level_ = targetlevel_; - advance(ix_ + 1); - } - } else { // !rising - level_ -= inc_; - if (level_ <= targetlevel_) { - level_ = targetlevel_; - advance(ix_ + 1); - } + if (ix_ < 3 || ((ix_ < 4) && !down_)) { + if (rising_) { + const int jumptarget = 1716; + if (level_ < (jumptarget << 16)) { + level_ = jumptarget << 16; + } + level_ += (((17 << 24) - level_) >> 24) * inc_; + // TODO: should probably be more accurate when inc is large + if (level_ >= targetlevel_) { + level_ = targetlevel_; + advance(ix_ + 1); + } + } else { // !rising + level_ -= inc_; + if (level_ <= targetlevel_) { + level_ = targetlevel_; + advance(ix_ + 1); + } + } } - } - // TODO: this would be a good place to set level to 0 when under threshold - return level_; + // TODO: this would be a good place to set level to 0 when under threshold + return level_; } void Env::keydown(bool d) { - if (down_ != d) { - down_ = d; - advance(d ? 0 : 3); - } -} - -void Env::setparam(int param, int value) { - if (param < 4) { - rates_[param] = value; - } else if (param < 8) { - levels_[param - 4] = value; - } - // Unknown parameter, ignore for now + if (down_ != d) { + down_ = d; + advance(d ? 0 : 3); + } } -const int levellut[] = { - 0, 5, 9, 13, 17, 20, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 42, 43, 45, 46 -}; - int Env::scaleoutlevel(int outlevel) { - return outlevel >= 20 ? 28 + outlevel : levellut[outlevel]; + return outlevel >= 20 ? 28 + outlevel : levellut[outlevel]; } void Env::advance(int newix) { - ix_ = newix; - if (ix_ < 4) { - int newlevel = levels_[ix_]; - int actuallevel = scaleoutlevel(newlevel) >> 1; - actuallevel = (actuallevel << 6) + outlevel_ - 4256; - actuallevel = actuallevel < 16 ? 16 : actuallevel; - // level here is same as Java impl - targetlevel_ = actuallevel << 16; - rising_ = (targetlevel_ > level_); - - // rate - int qrate = (rates_[ix_] * 41) >> 6; - qrate += rate_scaling_; - qrate = min(qrate, 63); - inc_ = (4 + (qrate & 3)) << (2 + LG_N + (qrate >> 2)); + ix_ = newix; + if (ix_ < 4) { + int newlevel = levels_[ix_]; + int actuallevel = scaleoutlevel(newlevel) >> 1; + actuallevel = (actuallevel << 6) + outlevel_ - 4256; + actuallevel = actuallevel < 16 ? 16 : actuallevel; + // level here is same as Java impl + targetlevel_ = actuallevel << 16; + rising_ = (targetlevel_ > level_); + + // rate + int qrate = (rates_[ix_] * 41) >> 6; + qrate += rate_scaling_; + qrate = min(qrate, 63); + inc_ = (4 + (qrate & 3)) << (2 + LG_N + (qrate >> 2)); + + // meh, this should be fixed elsewhere + inc_ = ((int64_t)inc_ * (int64_t)sr_multiplier) >> 24; + } +} - // meh, this should be fixed elsewhere - inc_ = ((int64_t)inc_ * (int64_t)sr_multiplier) >> 24; - } +void Env::update(const int r[4], const int l[4], int32_t ol, int rate_scaling) { + for (int i = 0; i < 4; i++) { + rates_[i] = r[i]; + levels_[i] = l[i]; + } + outlevel_ = ol; + rate_scaling_ = rate_scaling; + if ( down_ ) { + // for now we simply reset ourselve at level 3 + int newlevel = levels_[2]; + int actuallevel = scaleoutlevel(newlevel) >> 1; + actuallevel = (actuallevel << 6) - 4256; + actuallevel = actuallevel < 16 ? 16 : actuallevel; + targetlevel_ = actuallevel << 16; + advance(2); + } } void Env::getPosition(char *step) { diff --git a/ports/dexed/source/msfa/env.h b/ports/dexed/source/msfa/env.h index 047eb950..93dc7212 100755 --- a/ports/dexed/source/msfa/env.h +++ b/ports/dexed/source/msfa/env.h @@ -1,4 +1,5 @@ /* + * Copyright 2017 Pascal Gauthier. * Copyright 2012 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -31,6 +32,8 @@ class Env { void init(const int rates[4], const int levels[4], int outlevel, int rate_scaling); + void update(const int rates[4], const int levels[4], int outlevel, + int rate_scaling); // Result is in Q24/doubling log format. Also, result is subsampled // for every N samples. // A couple more things need to happen for this to be used as a gain @@ -40,7 +43,6 @@ class Env { int32_t getsample(); void keydown(bool down); - void setparam(int param, int value); static int scaleoutlevel(int outlevel); void getPosition(char *step); diff --git a/ports/dexed/source/msfa/fm_core.cc b/ports/dexed/source/msfa/fm_core.cc index 29afb1ea..408d0dec 100644 --- a/ports/dexed/source/msfa/fm_core.cc +++ b/ports/dexed/source/msfa/fm_core.cc @@ -30,9 +30,9 @@ const FmAlgorithm FmCore::algorithms[32] = { { { 0xc1, 0x11, 0x11, 0x14, 0x01, 0x14 } }, // 1 { { 0x01, 0x11, 0x11, 0x14, 0xc1, 0x14 } }, // 2 { { 0xc1, 0x11, 0x14, 0x01, 0x11, 0x14 } }, // 3 - { { 0xc1, 0x11, 0x94, 0x01, 0x11, 0x14 } }, // 4 ** EXCEPTION VIA CODE + { { 0xc1, 0x11, 0x94, 0x01, 0x11, 0x14 } }, // 4 { { 0xc1, 0x14, 0x01, 0x14, 0x01, 0x14 } }, // 5 - { { 0xc1, 0x94, 0x01, 0x14, 0x01, 0x14 } }, // 6 ** EXCEPTION VIA CODE + { { 0xc1, 0x94, 0x01, 0x14, 0x01, 0x14 } }, // 6 { { 0xc1, 0x11, 0x05, 0x14, 0x01, 0x14 } }, // 7 { { 0x01, 0x11, 0xc5, 0x14, 0x01, 0x14 } }, // 8 { { 0x01, 0x11, 0x05, 0x14, 0xc1, 0x14 } }, // 9 @@ -90,8 +90,7 @@ void FmCore::dump() { #endif } -void FmCore::render(int32_t *output, FmOpParams *params, int algorithm, - int32_t *fb_buf, int feedback_shift, const Controllers *controller) { +void FmCore::render(int32_t *output, FmOpParams *params, int algorithm, int32_t *fb_buf, int feedback_shift) { const int kLevelThresh = 1120; const FmAlgorithm alg = algorithms[algorithm]; bool has_contents[3] = { true, false, false }; diff --git a/ports/dexed/source/msfa/fm_core.h b/ports/dexed/source/msfa/fm_core.h index 1eef6a99..b1ec263d 100644 --- a/ports/dexed/source/msfa/fm_core.h +++ b/ports/dexed/source/msfa/fm_core.h @@ -1,12 +1,12 @@ /* * Copyright 2012 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -45,14 +45,13 @@ public: }; class FmCore { - public: - virtual ~FmCore() {}; - static void dump(); - virtual void render(int32_t *output, FmOpParams *params, int algorithm, - int32_t *fb_buf, int32_t feedback_gain, const Controllers *controller); - protected: - AlignedBufbuf_[2]; - const static FmAlgorithm algorithms[32]; +public: + virtual ~FmCore() {}; + static void dump(); + virtual void render(int32_t *output, FmOpParams *params, int algorithm, int32_t *fb_buf, int32_t feedback_gain); +protected: + AlignedBufbuf_[2]; + const static FmAlgorithm algorithms[32]; }; #endif // __FM_CORE_H diff --git a/ports/dexed/source/msfa/lfo.cc b/ports/dexed/source/msfa/lfo.cc index a3836b89..b9b71de2 100644 --- a/ports/dexed/source/msfa/lfo.cc +++ b/ports/dexed/source/msfa/lfo.cc @@ -1,12 +1,12 @@ /* * Copyright 2013 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -24,74 +24,74 @@ uint32_t Lfo::unit_; void Lfo::init(double sample_rate) { - // constant is 1 << 32 / 15.5s / 11 - Lfo::unit_ = (int32_t)(N * 25190424 / sample_rate + 0.5); + // constant is 1 << 32 / 15.5s / 11 + Lfo::unit_ = (int32_t)(N * 25190424 / sample_rate + 0.5); } -void Lfo::reset(const char params[6]) { - int rate = params[0]; // 0..99 - int sr = rate == 0 ? 1 : (165 * rate) >> 6; - sr *= sr < 160 ? 11 : (11 + ((sr - 160) >> 4)); - delta_ = unit_ * sr; - int a = 99 - params[1]; // LFO delay - if (a == 99) { - delayinc_ = ~0u; - delayinc2_ = ~0u; - } else { - a = (16 + (a & 15)) << (1 + (a >> 4)); - delayinc_ = unit_ * a; - a &= 0xff80; - a = max(0x80, a); - delayinc2_ = unit_ * a; - } - waveform_ = params[5]; - sync_ = params[4] != 0; +void Lfo::reset(const uint8_t params[6]) { + int rate = params[0]; // 0..99 + int sr = rate == 0 ? 1 : (165 * rate) >> 6; + sr *= sr < 160 ? 11 : (11 + ((sr - 160) >> 4)); + delta_ = unit_ * sr; + int a = 99 - params[1]; // LFO delay + if (a == 99) { + delayinc_ = ~0u; + delayinc2_ = ~0u; + } else { + a = (16 + (a & 15)) << (1 + (a >> 4)); + delayinc_ = unit_ * a; + a &= 0xff80; + a = max(0x80, a); + delayinc2_ = unit_ * a; + } + waveform_ = params[5]; + sync_ = params[4] != 0; } int32_t Lfo::getsample() { - phase_ += delta_; - int32_t x; - switch (waveform_) { - case 0: // triangle - x = phase_ >> 7; - x ^= -(phase_ >> 31); - x &= (1 << 24) - 1; - return x; - case 1: // sawtooth down - return (~phase_ ^ (1U << 31)) >> 8; - case 2: // sawtooth up - return (phase_ ^ (1U << 31)) >> 8; - case 3: // square - return ((~phase_) >> 7) & (1 << 24); - case 4: // sine - return (1 << 23) + (Sin::lookup(phase_ >> 8) >> 1); - case 5: // s&h - if (phase_ < delta_) { - randstate_ = (randstate_ * 179 + 17) & 0xff; + phase_ += delta_; + int32_t x; + switch (waveform_) { + case 0: // triangle + x = phase_ >> 7; + x ^= -(phase_ >> 31); + x &= (1 << 24) - 1; + return x; + case 1: // sawtooth down + return (~phase_ ^ (1U << 31)) >> 8; + case 2: // sawtooth up + return (phase_ ^ (1U << 31)) >> 8; + case 3: // square + return ((~phase_) >> 7) & (1 << 24); + case 4: // sine + return (1 << 23) + (Sin::lookup(phase_ >> 8) >> 1); + case 5: // s&h + if (phase_ < delta_) { + randstate_ = (randstate_ * 179 + 17) & 0xff; + } + x = randstate_ ^ 0x80; + return (x + 1) << 16; } - x = randstate_ ^ 0x80; - return (x + 1) << 16; - } - return 1 << 23; + return 1 << 23; } int32_t Lfo::getdelay() { - uint32_t delta = delaystate_ < (1U << 31) ? delayinc_ : delayinc2_; - uint32_t d = delaystate_ + delta; - if (d < delayinc_) { - return 1 << 24; - } - delaystate_ = d; - if (d < (1U << 31)) { - return 0; - } else { - return (d >> 7) & ((1 << 24) - 1); - } + uint32_t delta = delaystate_ < (1U << 31) ? delayinc_ : delayinc2_; + uint64_t d = ((uint64_t)delaystate_) + delta; + if (d > ~0u) { + return 1 << 24; + } + delaystate_ = d; + if (d < (1U << 31)) { + return 0; + } else { + return (d >> 7) & ((1 << 24) - 1); + } } void Lfo::keydown() { - if (sync_) { - phase_ = (1U << 31) - 1; - } - delaystate_ = 0; + if (sync_) { + phase_ = (1U << 31) - 1; + } + delaystate_ = 0; } diff --git a/ports/dexed/source/msfa/lfo.h b/ports/dexed/source/msfa/lfo.h index e7695352..c7c0a9c8 100644 --- a/ports/dexed/source/msfa/lfo.h +++ b/ports/dexed/source/msfa/lfo.h @@ -19,7 +19,7 @@ class Lfo { public: static void init(double sample_rate); - void reset(const char params[6]); + void reset(const uint8_t params[6]); // result is 0..1 in Q24 int32_t getsample(); diff --git a/ports/dexed/source/msfa/synth.h b/ports/dexed/source/msfa/synth.h index ca96fbdf..42080a13 100644 --- a/ports/dexed/source/msfa/synth.h +++ b/ports/dexed/source/msfa/synth.h @@ -38,6 +38,7 @@ typedef __int16 SInt16; #endif #endif +#include "../Dexed.h" // #undef SynthMemoryBarrier() @@ -57,11 +58,4 @@ inline static T max(const T& a, const T& b) { return a > b ? a : b; } - -void dexed_trace(const char *source, const char *fmt, ...); - -#define QER(n,b) ( ((float)n)/(1<