diff --git a/examples/modbus-dashboard/Makefile b/examples/modbus-dashboard/Makefile index 870d9b204ad..50cf3d24bdf 100644 --- a/examples/modbus-dashboard/Makefile +++ b/examples/modbus-dashboard/Makefile @@ -52,4 +52,4 @@ endif # Cleanup. Delete built program and all build artifacts clean: - $(DELETE) $(PROG) $(PACK) *.o *.obj *.exe *.dSYM mbedtls + $(DELETE) $(PROG) $(PACK) *.o *.obj *.exe *.bin *.dSYM mbedtls diff --git a/examples/modbus-dashboard/main.c b/examples/modbus-dashboard/main.c index 68418f0d87c..d8a5a527a4d 100644 --- a/examples/modbus-dashboard/main.c +++ b/examples/modbus-dashboard/main.c @@ -4,12 +4,34 @@ #include "mongoose.h" #include "net.h" +#define CONFIG_FILE "settings.bin" + static int s_sig_num; static void signal_handler(int sig_num) { signal(sig_num, signal_handler); s_sig_num = sig_num; } +bool web_load_settings(void *buf, size_t len) { + bool ok = false; + size_t size = 0; + void *data = mg_file_read(&mg_fs_posix, CONFIG_FILE, &size); + if (data == NULL) { + MG_ERROR(("Error reading %s", CONFIG_FILE)); + } else if (size != len) { + MG_ERROR(("%s size != %lu", CONFIG_FILE, len)); + } else { + memcpy(buf, data, len); + } + free(data); + return ok; +} + +bool web_save_settings(void *buf, size_t len) { + MG_INFO(("Saving to %s", CONFIG_FILE)); + return mg_file_write(&mg_fs_posix, CONFIG_FILE, buf, len); +} + int main(void) { struct mg_mgr mgr; diff --git a/examples/modbus-dashboard/net.c b/examples/modbus-dashboard/net.c index 964a888ef58..d261708f8f1 100644 --- a/examples/modbus-dashboard/net.c +++ b/examples/modbus-dashboard/net.c @@ -4,12 +4,13 @@ #include "net.h" // Device settings -struct settings { +struct device_settings { + uint32_t magic; int log_level; bool mqtt_enabled; - char *mqtt_server_url; - char *mqtt_topic_tx; - char *mqtt_topic_rx; + char mqtt_server_url[64]; + char mqtt_topic_tx[16]; + char mqtt_topic_rx[16]; }; struct conndata { @@ -17,13 +18,21 @@ struct conndata { unsigned long id; // Connection ID waiting for the Modbus response }; -static struct settings s_settings = {3, false, NULL, NULL, NULL}; - +static struct device_settings s_settings; static const char *s_json_header = "Content-Type: application/json\r\n" "Cache-Control: no-cache\r\n"; static uint64_t s_boot_timestamp = 0; // Updated by SNTP +static void set_default_settings(struct device_settings *s) { + s->magic = SETTINGS_MAGIC; + s->log_level = MG_LL_DEBUG; + mg_snprintf(s->mqtt_server_url, sizeof(s->mqtt_server_url), "%s", + "mqtt://broker.hivemq.com:1883"); + mg_snprintf(s->mqtt_topic_tx, sizeof(s->mqtt_topic_tx), "%s", "modbus1/tx"); + mg_snprintf(s->mqtt_topic_rx, sizeof(s->mqtt_topic_rx), "%s", "modbus1/rx"); +} + // This is for newlib and TLS (mbedTLS) uint64_t mg_now(void) { return mg_millis() + s_boot_timestamp; @@ -50,25 +59,28 @@ static void timer_sntp_fn(void *param) { mg_sntp_connect(param, "udp://time.google.com:123", sfn, NULL); } -static void setfromjson(struct mg_str json, const char *jsonpath, char **dst) { +static void setfromjson(struct mg_str json, const char *jsonpath, char *buf, + size_t len) { char *val = mg_json_get_str(json, jsonpath); - if (val != NULL) { - free(*dst); - *dst = val; - } + if (val != NULL) mg_snprintf(buf, len, "%s", val); + free(val); } static void handle_settings_set(struct mg_connection *c, struct mg_str body) { - struct settings settings; + struct device_settings settings; memset(&settings, 0, sizeof(settings)); + set_default_settings(&settings); mg_json_get_bool(body, "$.mqtt_enabled", &settings.mqtt_enabled); settings.log_level = mg_json_get_long(body, "$.log_level", MG_LL_INFO); - setfromjson(body, "$.mqtt_server_url", &settings.mqtt_server_url); - setfromjson(body, "$.mqtt_topic_rx", &settings.mqtt_topic_rx); - setfromjson(body, "$.mqtt_topic_tx", &settings.mqtt_topic_tx); + setfromjson(body, "$.mqtt_server_url", settings.mqtt_server_url, + sizeof(settings.mqtt_server_url)); + setfromjson(body, "$.mqtt_topic_rx", settings.mqtt_topic_rx, + sizeof(settings.mqtt_topic_rx)); + setfromjson(body, "$.mqtt_topic_tx", settings.mqtt_topic_tx, + sizeof(settings.mqtt_topic_tx)); - s_settings = settings; // TODO: save to the device flash - bool ok = true; + s_settings = settings; + bool ok = web_save_settings(&s_settings, sizeof(s_settings)); mg_http_reply(c, 200, s_json_header, "{%m:%s,%m:%m}", // MG_ESC("status"), ok ? "true" : "false", // @@ -146,7 +158,7 @@ static struct mg_connection *start_modbus_request(struct mg_mgr *mgr, send16(c, reg); // Start register send16(c, nregs); // Number of registers - if (func == 16) { // Fill in register values to write + if (func == 16) { // Fill in register values to write send8(c, (uint8_t) (nregs * 2)); // Send number of bytes for (uint16_t i = 0; i < nregs; i++) { char path[20]; @@ -283,10 +295,8 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { } void web_init(struct mg_mgr *mgr) { - // Init default settings - s_settings.mqtt_server_url = strdup("mqtt://broker.hivemq.com:1883"); - s_settings.mqtt_topic_tx = strdup("modbus1/tx"); - s_settings.mqtt_topic_rx = strdup("modbus1/rx"); + set_default_settings(&s_settings); + web_load_settings(&s_settings, sizeof(s_settings)); mg_http_listen(mgr, HTTP_URL, fn, NULL); mg_http_listen(mgr, HTTPS_URL, fn, (void *) 1); diff --git a/examples/modbus-dashboard/net.h b/examples/modbus-dashboard/net.h index f4eb1c53881..c4125828a81 100644 --- a/examples/modbus-dashboard/net.h +++ b/examples/modbus-dashboard/net.h @@ -16,7 +16,11 @@ extern "C" { #define HTTPS_URL "https://0.0.0.0:8443" #endif -void web_init(struct mg_mgr *mgr); +void web_init(struct mg_mgr *mgr); // Initialise Web UI +bool web_load_settings(void *buf, size_t len); // Load from disk/flash +bool web_save_settings(void *buf, size_t len); // Save to disk/flash + +#define SETTINGS_MAGIC 0xaabbccdd #ifdef __cplusplus } diff --git a/examples/modbus-dashboard/packed_fs.c b/examples/modbus-dashboard/packed_fs.c index 31a87ec4810..daf9443dfc8 100644 --- a/examples/modbus-dashboard/packed_fs.c +++ b/examples/modbus-dashboard/packed_fs.c @@ -12,7 +12,7 @@ const char *mg_unpack(const char *, size_t *, time_t *); #endif static const unsigned char v1[] = { - 31, 139, 8, 8, 124, 140, 100, 101, 0, 3, 98, 117, // ....|.de..bu + 31, 139, 8, 8, 131, 28, 101, 101, 0, 3, 98, 117, // ......ee..bu 110, 100, 108, 101, 46, 106, 115, 0, 173, 60, 139, 114, // ndle.js..<.r 219, 56, 146, 191, 18, 105, 83, 90, 98, 132, 200, 118, // .8...iSZb..v 102, 178, 119, 71, 25, 81, 37, 30, 79, 156, 153, 60, // f.wG.Q%.O..< @@ -652,7 +652,7 @@ static const unsigned char v1[] = { 0, 0 // . }; static const unsigned char v2[] = { - 31, 139, 8, 8, 116, 140, 100, 101, 0, 3, 104, 105, // ....t.de..hi + 31, 139, 8, 8, 131, 28, 101, 101, 0, 3, 104, 105, // ......ee..hi 115, 116, 111, 114, 121, 46, 109, 105, 110, 46, 106, 115, // story.min.js 0, 237, 91, 109, 111, 219, 186, 146, 254, 43, 182, 47, // ..[mo....+./ 214, 144, 96, 86, 181, 123, 206, 61, 187, 43, 151, 215, // ..`V.{.=.+.. @@ -1019,7 +1019,7 @@ static const unsigned char v2[] = { 239, 191, 0, 255, 82, 202, 232, 45, 58, 0, 0, 0 // ....R..-:.. }; static const unsigned char v3[] = { - 31, 139, 8, 8, 83, 32, 98, 101, 0, 3, 105, 110, // ....S be..in + 31, 139, 8, 8, 131, 28, 101, 101, 0, 3, 105, 110, // ......ee..in 100, 101, 120, 46, 104, 116, 109, 108, 0, 125, 83, 75, // dex.html.}SK 115, 211, 48, 16, 190, 247, 87, 44, 186, 232, 64, 45, // s.0...W,..@- 191, 31, 233, 88, 153, 41, 165, 7, 14, 12, 28, 128, // ...X.)...... @@ -1069,997 +1069,996 @@ static const unsigned char v3[] = { 199, 3, 0, 0, 0 // .... }; static const unsigned char v4[] = { - 31, 139, 8, 8, 211, 8, 101, 101, 0, 3, 109, 97, // ......ee..ma - 105, 110, 46, 99, 115, 115, 0, 221, 27, 219, 142, 236, // in.css...... - 182, 237, 87, 220, 19, 4, 216, 61, 181, 125, 108, 207, // ..W....=.}l. - 101, 119, 61, 104, 81, 160, 64, 209, 0, 73, 31, 218, // ew=hQ.@..I.. - 62, 52, 200, 158, 7, 141, 173, 153, 81, 214, 183, 250, // >4......Q... - 178, 179, 179, 174, 251, 237, 37, 117, 179, 124, 217, 153, // ......%u.|.. - 217, 38, 105, 147, 228, 96, 176, 22, 73, 145, 20, 69, // .&i..`..I..E - 81, 164, 164, 124, 250, 248, 27, 171, 38, 44, 57, 178, // Q..|....&,9. - 44, 142, 170, 202, 122, 94, 184, 11, 55, 176, 254, 101, // ,...z^..7..e - 125, 243, 213, 223, 173, 175, 89, 68, 179, 138, 66, 235, // }.....YD..B. - 80, 215, 69, 21, 126, 250, 100, 144, 186, 81, 158, 126, // P.E.~.d..Q.~ - 252, 244, 209, 14, 201, 174, 166, 165, 29, 110, 233, 46, // .........n.. - 47, 105, 187, 205, 95, 156, 138, 189, 178, 108, 31, 110, // /i.._....l.n - 243, 50, 166, 165, 3, 144, 141, 248, 12, 61, 171, 202, // .2.......=.. - 19, 22, 91, 95, 208, 21, 189, 163, 219, 110, 212, 215, // ..[_.....n.. - 113, 234, 163, 19, 229, 89, 77, 179, 58, 252, 240, 161, // q....YM.:... - 59, 212, 105, 210, 38, 44, 163, 206, 129, 178, 253, 161, // ;.i.&,...... - 14, 125, 119, 181, 113, 142, 116, 251, 196, 106, 167, 166, // .}w.q.t..j.. - 47, 53, 74, 162, 14, 137, 191, 111, 42, 64, 122, 222, // /5J....o*@z. - 151, 27, 39, 205, 95, 157, 154, 108, 57, 38, 92, 110, // ..'._..l9&.n - 156, 220, 108, 25, 159, 59, 16, 227, 236, 72, 202, 146, // ..l..;...H.. - 83, 248, 21, 72, 44, 173, 103, 82, 218, 127, 166, 201, // S..H,.gR.... - 51, 173, 89, 68, 236, 138, 100, 149, 83, 209, 146, 237, // 3.YD..d.S... - 36, 41, 37, 117, 83, 82, 0, 213, 53, 12, 174, 10, // $)%uSR..5... - 63, 68, 207, 190, 255, 193, 254, 80, 85, 158, 255, 65, // ?D.....PU..A - 208, 0, 7, 70, 106, 150, 103, 6, 85, 94, 84, 175, // ...Fj.g.U^T. - 31, 172, 69, 208, 109, 243, 248, 212, 166, 164, 220, 179, // ..E.m....... - 44, 244, 54, 230, 168, 88, 118, 0, 57, 117, 119, 40, // ,.6..Xv.9uw( - 91, 9, 241, 54, 81, 158, 228, 165, 194, 72, 243, 57, // [..6Q....H.9 - 117, 94, 56, 71, 22, 215, 135, 208, 47, 94, 58, 178, // u^8G..../^:. - 221, 150, 225, 17, 8, 232, 205, 119, 53, 171, 19, 250, // .......w5... - 249, 182, 29, 24, 39, 166, 81, 94, 114, 125, 194, 38, // ....'.Q^r}.& - 131, 254, 40, 211, 138, 243, 186, 166, 241, 230, 18, 65, // ..(........A - 119, 240, 237, 67, 96, 31, 22, 246, 97, 105, 31, 86, // w..C`...ai.V - 246, 97, 221, 242, 33, 114, 235, 41, 181, 56, 228, 56, // .a..!r.).8.8 - 28, 4, 105, 135, 170, 143, 5, 41, 186, 173, 93, 213, // ..i....)..]. - 101, 158, 237, 91, 147, 201, 54, 79, 64, 141, 46, 202, // e..[..6O@... - 99, 106, 63, 109, 99, 187, 40, 41, 76, 68, 90, 180, // cj?mc.()LDZ. - 230, 108, 53, 12, 38, 57, 203, 171, 130, 68, 212, 254, // .l5.&9...D.. - 219, 159, 190, 129, 111, 231, 175, 116, 223, 36, 48, 127, // ....o..t.$0. - 223, 208, 44, 201, 109, 0, 145, 40, 183, 255, 152, 103, // ..,.m..(...g - 224, 110, 164, 178, 191, 102, 91, 42, 196, 91, 72, 13, // .n...f[*.[H. - 136, 166, 100, 48, 227, 127, 161, 71, 91, 179, 218, 244, // ..d0...G[... - 227, 243, 105, 218, 85, 41, 73, 18, 99, 204, 247, 222, // ..i.U)I.c... - 151, 93, 213, 128, 214, 77, 97, 64, 239, 86, 95, 14, // .]...Ma@.V_. - 166, 210, 219, 20, 121, 197, 248, 64, 75, 154, 128, 200, // ....y..@K... - 103, 186, 121, 166, 37, 122, 84, 226, 144, 132, 237, 209, // g.y.%zT..... - 0, 128, 39, 9, 50, 131, 197, 82, 215, 121, 26, 58, // ..'.2..R.y.: - 110, 176, 66, 145, 192, 26, 166, 24, 154, 216, 2, 95, // n.B........_ - 77, 104, 203, 205, 7, 11, 14, 87, 132, 167, 252, 96, // Mh.....W...` - 214, 57, 0, 152, 144, 162, 162, 161, 250, 232, 182, 13, // .9.......... - 112, 207, 108, 150, 21, 77, 109, 231, 69, 189, 47, 243, // p.l..Mm.E./. - 166, 176, 43, 154, 208, 168, 182, 145, 49, 41, 41, 25, // ..+.....1)). - 152, 118, 48, 177, 194, 20, 184, 168, 102, 230, 121, 206, // .v0.....f.y. - 129, 71, 78, 171, 125, 189, 32, 113, 140, 241, 192, 83, // .GN.}. q...S - 26, 9, 21, 196, 216, 234, 18, 22, 26, 172, 254, 52, // ...........4 - 204, 242, 140, 118, 223, 213, 167, 130, 254, 78, 208, 125, // ...v.....N.} - 182, 69, 171, 164, 176, 156, 84, 3, 204, 150, 50, 104, // .E....T...2h - 9, 18, 237, 240, 164, 40, 40, 1, 86, 17, 13, 5, // .....((.V... - 102, 179, 37, 209, 19, 142, 56, 139, 181, 189, 184, 225, // f.%...8..... - 77, 4, 75, 201, 158, 10, 193, 33, 143, 28, 187, 60, // M.K....!...< - 106, 170, 18, 148, 109, 243, 166, 198, 33, 134, 164, 169, // j...m...!... - 115, 137, 4, 199, 99, 217, 51, 204, 98, 44, 162, 220, // s...c.3.b,.. - 129, 196, 249, 81, 244, 46, 202, 124, 15, 106, 86, 237, // ...Q...|.jV. - 27, 147, 29, 134, 74, 81, 150, 101, 48, 89, 85, 193, // ....JQ.e0YU. - 50, 71, 90, 163, 199, 129, 204, 33, 78, 197, 3, 174, // 2GZ....!N... - 132, 28, 63, 12, 51, 58, 124, 158, 27, 56, 218, 115, // ..?.3:|..8.s - 199, 104, 18, 111, 164, 242, 78, 190, 219, 129, 233, 66, // .h.o..N....B - 39, 128, 112, 209, 139, 17, 44, 140, 69, 57, 199, 76, // '.p...,.E9.L - 24, 69, 247, 217, 177, 132, 58, 77, 145, 228, 36, 118, // .E....:M..$v - 46, 154, 30, 253, 69, 47, 244, 170, 73, 193, 19, 78, // ....E/..I..N - 109, 204, 170, 34, 33, 167, 48, 97, 21, 88, 161, 6, // m.."!.0a.X.. - 15, 223, 38, 121, 244, 244, 207, 38, 175, 169, 29, 199, // ..&y...&.... - 118, 156, 216, 59, 182, 135, 16, 107, 79, 66, 143, 125, // v..;...kOB.} - 40, 237, 2, 131, 129, 142, 159, 29, 31, 39, 140, 109, // (........'.m - 10, 177, 19, 186, 167, 89, 220, 246, 94, 151, 210, 172, // .....Y..^... - 177, 243, 196, 110, 112, 51, 1, 225, 85, 125, 74, 196, // ...np3..U}J. - 0, 231, 124, 84, 47, 12, 152, 79, 92, 1, 106, 70, // ..|T/..O..jF - 59, 190, 142, 66, 225, 10, 48, 146, 136, 30, 120, 180, // ;..B..0...x. - 210, 43, 105, 138, 106, 115, 8, 44, 172, 62, 133, 190, // .+i.js.,.>.. - 92, 26, 95, 60, 68, 100, 65, 118, 138, 213, 60, 151, // .._T - 207, 123, 251, 153, 197, 52, 215, 19, 199, 167, 107, 28, // .{...4....k. - 205, 82, 22, 199, 9, 237, 176, 163, 160, 78, 201, 139, // .R.......N.. - 218, 163, 48, 116, 12, 28, 248, 0, 196, 52, 251, 172, // ..0t.....4.. - 57, 114, 31, 131, 12, 34, 196, 37, 25, 151, 121, 49, // 9r...".%..y1 - 78, 38, 120, 66, 32, 227, 27, 6, 105, 152, 33, 231, // N&xB ...i.!. - 5, 102, 107, 14, 126, 82, 112, 30, 81, 32, 246, 210, // .fk.~Rp.Q .. - 158, 180, 7, 105, 170, 50, 175, 161, 173, 90, 213, 19, // ...i.2...Z.. - 61, 246, 228, 188, 165, 41, 43, 24, 45, 242, 242, 205, // =....)+.-... - 230, 73, 53, 11, 146, 1, 206, 234, 27, 39, 221, 96, // .I5......'.` - 25, 172, 178, 215, 28, 2, 188, 165, 186, 194, 180, 37, // ...........% - 78, 149, 145, 2, 156, 176, 100, 81, 157, 65, 204, 8, // N.....dQ.A.. - 33, 120, 188, 48, 8, 106, 39, 65, 181, 47, 73, 204, // !x.0.j'A./I. - 40, 6, 229, 50, 79, 29, 189, 159, 88, 35, 236, 51, // (..2O...X#.3 - 35, 111, 35, 235, 124, 130, 3, 107, 177, 140, 36, 90, // #o#.|..k..$Z - 23, 216, 24, 15, 52, 118, 94, 105, 153, 43, 88, 214, // ....4v^i.+X. - 164, 176, 100, 35, 71, 172, 195, 49, 84, 26, 122, 66, // ..d#G..1T.zB - 92, 146, 200, 148, 131, 209, 19, 162, 28, 198, 29, 19, // ............ - 34, 66, 145, 116, 13, 175, 120, 153, 162, 164, 135, 239, // "B.t..x..... - 118, 59, 3, 39, 129, 139, 237, 125, 176, 91, 223, 123, // v;.'...}.[.{ - 211, 94, 50, 10, 123, 150, 103, 125, 225, 193, 127, 6, // .^2.{.g}.... - 197, 60, 234, 28, 84, 136, 163, 241, 24, 187, 77, 154, // .<..T.....M. - 82, 141, 102, 91, 162, 71, 243, 137, 147, 16, 204, 88, // R.f[.G.....X - 75, 82, 213, 198, 44, 156, 184, 151, 40, 192, 161, 161, // KR..,...(... - 202, 223, 36, 4, 246, 17, 88, 71, 122, 46, 48, 181, // ..$...XGz.0. - 52, 176, 21, 45, 24, 81, 13, 92, 23, 74, 105, 165, // 4..-.Q...Ji. - 130, 92, 46, 67, 189, 52, 112, 162, 160, 70, 141, 53, // ...C.4p..F.5 - 213, 136, 137, 202, 26, 51, 213, 93, 163, 134, 131, 208, // .....3.].... - 96, 21, 179, 198, 240, 241, 40, 123, 132, 24, 110, 231, // `.....({..n. - 86, 165, 147, 103, 201, 169, 213, 174, 75, 182, 144, 192, // V..g....K... - 193, 166, 184, 209, 89, 175, 10, 40, 248, 169, 99, 182, // ....Y..(..c. - 10, 227, 14, 66, 115, 80, 106, 151, 128, 177, 68, 180, // ...BsPj...D. - 217, 68, 9, 43, 32, 25, 139, 234, 27, 207, 230, 255, // .D.+ ....... - 110, 55, 199, 3, 236, 63, 220, 159, 113, 27, 56, 150, // n7...?..q.8. - 164, 80, 73, 148, 116, 207, 206, 149, 65, 212, 161, 207, // .PI.t...A... - 176, 156, 42, 7, 35, 85, 59, 132, 137, 232, 53, 38, // ..*.#U;...5& - 196, 64, 55, 38, 228, 193, 207, 221, 177, 23, 8, 197, // .@7&........ - 122, 104, 188, 217, 185, 106, 132, 211, 49, 119, 174, 202, // zh...j..1w.. - 32, 219, 73, 78, 9, 166, 130, 32, 252, 100, 88, 74, // .IN... .dXJ - 180, 59, 151, 47, 60, 199, 107, 197, 2, 132, 129, 136, // .;./<.k..... - 20, 19, 32, 50, 215, 4, 80, 66, 119, 72, 130, 127, // .. 2..PBwH.. - 176, 201, 221, 69, 40, 94, 246, 193, 218, 197, 98, 195, // ...E(^....b. - 227, 249, 40, 208, 188, 58, 190, 215, 190, 242, 68, 20, // ..(..:....D. - 2, 33, 7, 60, 126, 183, 188, 127, 252, 172, 129, 203, // .!.<~....... - 123, 1, 92, 123, 6, 112, 13, 148, 169, 179, 84, 155, // {..{.p....T. - 180, 95, 194, 174, 239, 166, 39, 224, 43, 32, 14, 103, // ._....'.+ .g - 47, 167, 207, 233, 53, 4, 18, 223, 36, 129, 252, 24, // /...5...$... - 186, 142, 232, 4, 144, 19, 7, 3, 226, 57, 90, 73, // .........9ZI - 186, 237, 249, 142, 185, 36, 206, 66, 161, 184, 101, 220, // .....$.B..e. - 59, 141, 88, 14, 16, 114, 20, 101, 47, 85, 152, 77, // ;.X..r.e/U.M - 201, 168, 231, 116, 231, 240, 169, 154, 28, 188, 24, 128, // ...t........ - 165, 88, 150, 241, 12, 142, 111, 186, 122, 195, 52, 129, // .X....o.z.4. - 224, 81, 9, 125, 209, 40, 108, 232, 94, 3, 140, 1, // .Q.}.(l.^... - 235, 220, 125, 9, 217, 171, 194, 96, 163, 115, 197, 58, // ..}....`.s.: - 25, 110, 202, 238, 1, 39, 92, 174, 181, 64, 170, 10, // .n...'...@.. - 176, 64, 193, 22, 18, 178, 106, 117, 105, 30, 40, 170, // .@....jui.(. - 117, 15, 83, 160, 93, 3, 197, 148, 130, 66, 94, 0, // u.S.]....B^. - 227, 134, 60, 65, 194, 249, 231, 0, 7, 182, 56, 224, // .. - 155, 17, 90, 67, 124, 78, 141, 52, 39, 88, 114, 98, // ..ZC|N.4'Xrb - 52, 47, 76, 60, 254, 9, 125, 203, 183, 144, 154, 195, // 4/L<..}..... - 170, 3, 108, 70, 79, 142, 103, 187, 234, 171, 53, 224, // ..lFO.g...5. - 56, 4, 40, 70, 142, 10, 138, 223, 124, 217, 146, 138, // 8.(F....|... - 85, 176, 156, 22, 176, 85, 194, 130, 226, 56, 14, 11, // U....U...8.. - 17, 210, 185, 102, 150, 35, 212, 156, 228, 62, 142, 80, // ...f.#...>.P - 121, 66, 105, 187, 38, 4, 150, 184, 174, 192, 52, 252, // yBi.&.....4. - 230, 153, 148, 55, 99, 134, 183, 246, 12, 244, 116, 123, // ...7c.....t{ - 107, 137, 237, 161, 239, 35, 218, 128, 192, 60, 234, 31, // k....#...<.. - 61, 92, 36, 89, 18, 254, 237, 8, 142, 140, 248, 14, // =.$Y........ - 100, 118, 16, 153, 151, 194, 124, 59, 198, 64, 159, 110, // dv....|;.@.n - 52, 152, 105, 6, 136, 214, 50, 105, 86, 83, 26, 237, // 4.i...2iVS.. - 21, 3, 58, 211, 78, 167, 95, 147, 157, 78, 83, 59, // ..:.N._..NS; - 157, 198, 118, 194, 152, 58, 165, 113, 13, 51, 161, 37, // ..v..:.q.3.% - 236, 81, 143, 95, 182, 137, 254, 240, 68, 79, 188, 14, // .Q._....DO.. - 170, 44, 172, 193, 97, 239, 51, 6, 36, 53, 243, 33, // .,..a.3.$5.! - 135, 201, 110, 59, 216, 184, 51, 150, 18, 158, 69, 0, // ..n;..3...E. - 165, 104, 240, 125, 24, 154, 150, 95, 89, 24, 114, 73, // .h.}..._Y.rI - 105, 177, 108, 135, 71, 0, 16, 80, 69, 13, 230, 200, // i.l.G..PE... - 212, 96, 92, 171, 241, 184, 140, 217, 103, 5, 49, 132, // .`......g.1. - 127, 67, 129, 92, 112, 179, 0, 176, 73, 179, 10, 246, // .C..p...I... - 126, 40, 179, 235, 27, 223, 134, 128, 8, 209, 7, 178, // ~(.......... - 25, 127, 87, 226, 196, 246, 93, 131, 243, 93, 131, 73, // ..W...]..].I - 87, 30, 86, 128, 74, 196, 151, 152, 97, 154, 132, 163, // W.V.J...a... - 16, 29, 33, 185, 193, 82, 84, 157, 200, 58, 188, 170, // ..!..RT..:.. - 54, 33, 33, 64, 96, 207, 1, 121, 21, 212, 51, 164, // 6!!@`..y..3. - 172, 91, 94, 20, 242, 234, 190, 10, 69, 148, 67, 176, // .[^.....E.C. - 162, 65, 6, 19, 10, 131, 71, 68, 185, 109, 76, 18, // .A....GD.mL. - 1, 234, 92, 60, 225, 101, 187, 147, 34, 209, 77, 169, // ...<.e..".M. - 136, 34, 219, 67, 101, 5, 86, 32, 122, 123, 69, 192, // .".Ce.V z{E. - 146, 3, 124, 221, 126, 129, 29, 151, 151, 234, 98, 152, // ..|.~.....b. - 14, 39, 231, 91, 199, 102, 2, 81, 61, 150, 147, 30, // .'.[.f.Q=... - 254, 136, 190, 231, 127, 130, 189, 5, 67, 58, 135, 74, // ........C:.J - 61, 120, 178, 9, 152, 229, 239, 97, 131, 173, 111, 84, // =x.....a..oT - 41, 124, 251, 239, 97, 83, 172, 57, 69, 92, 66, 2, // )|..aS.9E.B. - 89, 86, 180, 207, 144, 48, 65, 0, 119, 141, 110, 80, // YV...0A.w.nP - 216, 199, 27, 223, 114, 172, 222, 143, 135, 157, 110, 111, // ....r.....no - 111, 71, 57, 80, 223, 241, 237, 62, 157, 27, 51, 172, // oG9P...>..3. - 227, 157, 211, 53, 122, 42, 90, 67, 209, 201, 73, 181, // ...5z*ZC..I. - 144, 90, 188, 140, 180, 29, 119, 69, 117, 245, 125, 1, // .Z....wEu.}. - 207, 88, 71, 221, 207, 244, 4, 235, 210, 100, 55, 240, // .XG......d7. - 64, 4, 12, 28, 80, 82, 148, 180, 142, 14, 38, 141, // @...PR....&. - 4, 117, 174, 42, 27, 68, 34, 172, 139, 8, 145, 11, // .u.*.D"..... - 107, 164, 204, 149, 70, 53, 134, 65, 32, 74, 252, 158, // k...F5.A J.. - 64, 180, 13, 130, 211, 80, 0, 68, 85, 153, 110, 151, // @....P.DU.n. - 77, 22, 193, 162, 29, 243, 158, 41, 86, 128, 24, 79, // M......)V..O - 78, 105, 2, 149, 13, 100, 4, 118, 223, 151, 195, 53, // Ni...d.v...5 - 3, 69, 0, 41, 62, 158, 118, 82, 60, 182, 228, 22, // .E.)>.vR<... - 198, 83, 130, 166, 210, 153, 169, 196, 138, 52, 98, 72, // .S.......4bH - 242, 0, 255, 225, 198, 160, 72, 146, 253, 152, 199, 144, // ......H..... - 69, 58, 145, 177, 144, 203, 72, 128, 219, 65, 157, 133, // E:....H..A.. - 183, 24, 18, 1, 171, 118, 128, 10, 12, 212, 182, 157, // .....v...... - 243, 12, 179, 179, 86, 155, 151, 54, 83, 188, 150, 43, // ....V..6S..+ - 106, 157, 41, 1, 214, 191, 78, 224, 121, 131, 19, 167, // j.)...N.y... - 254, 240, 109, 112, 238, 94, 238, 183, 55, 65, 240, 96, // ..mp.^..7A.` - 5, 11, 31, 126, 171, 79, 218, 51, 135, 221, 208, 47, // ...~.O.3.../ - 77, 238, 139, 119, 112, 247, 128, 187, 191, 128, 223, 195, // M..wp....... - 21, 220, 75, 176, 251, 123, 84, 95, 45, 173, 192, 11, // ..K..{T_-... - 240, 119, 5, 115, 190, 1, 22, 164, 132, 248, 218, 14, // .w.s........ - 88, 241, 211, 17, 32, 219, 227, 33, 4, 117, 214, 90, // X... ..!.u.Z - 129, 189, 41, 124, 124, 6, 143, 10, 44, 238, 172, 135, // ..)||...,... - 135, 145, 229, 246, 3, 209, 123, 97, 49, 255, 122, 158, // ......{a1.z. - 193, 18, 172, 181, 132, 129, 45, 215, 151, 184, 6, 239, // ......-..... - 224, 58, 59, 203, 99, 174, 104, 255, 247, 168, 138, 246, // .:;.c.h..... - 15, 214, 248, 59, 195, 84, 164, 68, 239, 178, 0, 232, // ...;.T.D.... - 185, 92, 193, 239, 225, 34, 219, 213, 59, 184, 222, 91, // ....."..;..[ - 193, 202, 131, 95, 112, 134, 235, 51, 203, 19, 90, 191, // ..._p..3..Z. - 75, 91, 112, 130, 96, 1, 115, 182, 90, 158, 225, 203, // K[p.`.s.Z... - 67, 223, 245, 118, 133, 193, 139, 223, 91, 44, 49, 55, // C..v....[,17 - 80, 135, 70, 50, 112, 97, 118, 160, 64, 98, 7, 47, // P.F2pav.@b./ - 176, 140, 147, 32, 121, 18, 32, 78, 31, 20, 76, 86, // ... y. N..LV - 251, 50, 120, 2, 121, 48, 34, 159, 163, 238, 137, 31, // .2x.y0"..... - 221, 213, 136, 126, 61, 203, 127, 221, 11, 88, 14, 59, // ...~=....X.; - 248, 83, 106, 173, 250, 136, 183, 63, 171, 187, 174, 119, // .Sj....?...w - 10, 44, 5, 20, 78, 156, 197, 168, 86, 127, 24, 131, // .,..N...V... - 68, 166, 210, 252, 148, 194, 31, 242, 85, 135, 41, 126, // D.......U.)~ - 207, 216, 31, 118, 152, 167, 55, 200, 39, 34, 196, 206, // ...v..7.'".. - 49, 233, 162, 54, 148, 226, 100, 24, 190, 63, 247, 25, // 1..6..d..?.. - 147, 107, 226, 245, 128, 216, 159, 165, 86, 217, 90, 145, // .k......V.Z. - 224, 97, 192, 208, 146, 226, 76, 160, 168, 199, 22, 19, // .a....L..... - 176, 55, 12, 36, 183, 234, 42, 53, 238, 140, 221, 123, // .7.$..*5...{ - 49, 176, 225, 195, 6, 147, 252, 197, 188, 120, 86, 83, // 1........xVS - 56, 36, 191, 51, 201, 43, 147, 251, 12, 115, 113, 64, // 8$.3.+...sq@ - 129, 36, 120, 193, 62, 184, 113, 191, 195, 32, 206, 1, // .$x.>.q.. .. - 9, 182, 7, 184, 133, 198, 165, 20, 54, 243, 116, 128, // ........6.t. - 92, 105, 100, 6, 229, 17, 73, 6, 200, 165, 70, 86, // .id...I...FV - 52, 101, 19, 161, 107, 68, 55, 69, 65, 203, 136, 84, // 4e..kD7EA..T - 116, 124, 15, 172, 17, 120, 82, 73, 184, 69, 215, 227, // t|...xRI.E.. - 87, 32, 253, 224, 135, 187, 143, 72, 128, 70, 151, 102, // W .....H.F.f - 111, 108, 58, 38, 45, 47, 144, 177, 205, 183, 136, 229, // ol:&-/...... - 69, 118, 254, 106, 109, 249, 235, 133, 229, 223, 93, 197, // Ev.jm.....]. - 112, 117, 153, 161, 119, 103, 249, 254, 210, 242, 131, 251, // pu..wg...... - 107, 24, 94, 30, 240, 221, 202, 186, 95, 193, 152, 175, // k.^....._... - 225, 118, 119, 145, 27, 196, 213, 53, 48, 244, 175, 225, // .vw....50... - 246, 112, 121, 176, 16, 252, 151, 214, 226, 178, 110, 148, // .py.......n. - 102, 87, 76, 198, 29, 110, 168, 193, 85, 166, 67, 134, // fWL..n..U.C. - 151, 109, 135, 204, 96, 114, 239, 150, 23, 248, 225, 206, // .m..`r...... - 127, 89, 61, 220, 67, 125, 200, 230, 224, 119, 129, 159, // .Y=.C}...w.. - 216, 157, 175, 240, 62, 228, 136, 222, 119, 127, 73, 67, // ....>...w.IC - 181, 223, 95, 118, 63, 15, 244, 3, 159, 190, 56, 41, // .._v?.....8) - 198, 158, 252, 246, 136, 231, 182, 226, 49, 55, 249, 9, // ........17.. - 225, 84, 177, 240, 122, 32, 166, 18, 154, 51, 84, 111, // .T..z ...3To - 252, 250, 171, 29, 222, 223, 65, 254, 110, 45, 224, 39, // ......A.n-.' - 111, 234, 60, 207, 39, 182, 128, 66, 241, 96, 225, 93, // o.<.'..B.`.] - 80, 143, 120, 227, 146, 175, 103, 209, 151, 196, 6, 205, // P.x...g..... - 237, 152, 223, 60, 149, 210, 207, 150, 127, 69, 149, 164, // ...<.....E.. - 31, 136, 244, 135, 89, 147, 107, 75, 91, 223, 51, 26, // ....Y.kK[.3. - 39, 98, 198, 221, 229, 44, 94, 160, 180, 84, 148, 54, // 'b...,^..T.6 - 50, 140, 7, 170, 250, 43, 84, 122, 97, 26, 1, 184, // 2....+Tza... - 45, 161, 189, 70, 196, 242, 26, 235, 12, 249, 188, 105, // -..F.......i - 162, 1, 211, 243, 38, 194, 157, 112, 58, 139, 129, 57, // ....&..p:..9 - 139, 94, 124, 102, 178, 130, 51, 147, 181, 249, 95, 216, // .^|f..3..._. - 156, 19, 202, 213, 52, 115, 13, 61, 100, 200, 47, 225, // ....4s.=d./. - 110, 45, 143, 255, 155, 85, 137, 87, 162, 183, 243, 56, // n-...U.W...8 - 57, 170, 201, 125, 246, 25, 25, 252, 180, 228, 140, 160, // 9..}........ - 177, 36, 53, 57, 98, 84, 182, 248, 235, 95, 233, 188, // .$59bT..._.. - 243, 230, 155, 24, 205, 176, 103, 167, 4, 252, 156, 205, // ......g..... - 135, 110, 246, 219, 115, 226, 206, 26, 113, 155, 64, 109, // .n..s...q.@m - 98, 142, 79, 135, 199, 81, 7, 30, 40, 185, 216, 79, // b.O..Q..(..O - 35, 89, 125, 136, 52, 219, 234, 222, 98, 192, 213, 115, // #Y}.4...b..s - 189, 21, 222, 44, 39, 120, 38, 42, 254, 244, 227, 195, // ...,'x&*.... - 199, 1, 134, 174, 253, 179, 0, 3, 168, 30, 4, 24, // ............ - 32, 253, 20, 192, 128, 245, 143, 0, 12, 160, 184, 254, // ........... - 55, 0, 234, 130, 223, 4, 225, 213, 190, 209, 54, 30, // 7.........6. - 51, 168, 43, 9, 126, 127, 221, 246, 159, 78, 1, 52, // 3.+.~....N.4 - 192, 248, 20, 114, 59, 217, 227, 98, 207, 54, 143, 33, // ...r;..b.6.! - 236, 209, 243, 82, 9, 5, 83, 36, 252, 125, 233, 19, // ...R..S$.}.. - 181, 165, 173, 236, 222, 169, 237, 254, 254, 66, 216, 204, // .........B.. - 86, 79, 217, 244, 147, 4, 1, 223, 252, 127, 181, 250, // VO.......... - 89, 107, 115, 141, 205, 106, 150, 162, 183, 238, 154, 76, // Yks..j.....L - 94, 43, 52, 91, 22, 57, 91, 250, 202, 104, 121, 227, // ^+4[.9[..hy. - 46, 109, 136, 56, 129, 237, 223, 154, 93, 226, 70, 190, // .m.8....].F. - 19, 118, 253, 85, 101, 122, 136, 131, 207, 113, 231, 44, // .v.Uez...q., - 0, 240, 159, 76, 38, 183, 84, 245, 211, 57, 231, 143, // ...L&.T..9.. - 171, 184, 106, 242, 35, 174, 89, 178, 192, 164, 90, 188, // ..j.#.Y...Z. - 69, 181, 0, 42, 10, 245, 23, 172, 112, 124, 146, 218, // E..*....p|.. - 190, 95, 73, 217, 255, 61, 157, 189, 190, 175, 241, 0, // ._I..=...... - 242, 49, 28, 84, 101, 51, 79, 44, 127, 132, 58, 237, // .1.Te3O,..:. - 156, 188, 31, 89, 212, 1, 15, 231, 31, 67, 117, 106, // ...Y.....Cuj - 10, 137, 121, 200, 65, 215, 30, 114, 173, 30, 32, 69, // ..y.A..r.. E - 247, 206, 29, 115, 246, 18, 100, 229, 249, 62, 1, 193, // ...s..d..>.. - 242, 65, 30, 248, 249, 23, 36, 12, 170, 111, 83, 200, // .A....$..oS. - 15, 169, 193, 77, 222, 170, 114, 190, 138, 247, 85, 245, // ...M..r...U. - 51, 127, 221, 253, 24, 170, 215, 209, 248, 210, 37, 228, // 3.........%. - 48, 253, 218, 27, 243, 75, 249, 191, 168, 240, 215, 127, // 0....K...... - 163, 135, 212, 252, 86, 66, 114, 17, 57, 147, 236, 255, // ....VBr.9... - 115, 78, 104, 222, 157, 202, 92, 153, 72, 255, 55, 249, // sNh.....H.7. - 159, 122, 146, 252, 24, 202, 251, 240, 44, 175, 49, 178, // .z......,.1. - 231, 71, 72, 241, 199, 239, 149, 13, 156, 217, 83, 45, // .GH.......S- - 30, 92, 159, 186, 203, 149, 238, 253, 128, 107, 20, 11, // .........k.. - 83, 239, 45, 239, 30, 200, 81, 215, 16, 239, 150, 115, // S.-...Q....s - 197, 125, 68, 47, 104, 232, 237, 67, 81, 63, 200, 225, // .}D/h..CQ?.. - 255, 128, 231, 118, 196, 186, 193, 39, 84, 226, 206, 107, // ...v...'T..k - 189, 132, 154, 238, 182, 117, 171, 244, 49, 52, 222, 99, // .....u..14.c - 188, 249, 112, 102, 66, 103, 79, 64, 191, 244, 87, 31, // ..pfBgO@..W. - 51, 3, 154, 218, 66, 221, 226, 15, 72, 223, 122, 71, // 3...B...H.zG - 179, 249, 21, 24, 228, 154, 71, 29, 61, 221, 219, 15, // ......G.=... - 59, 144, 166, 232, 207, 222, 213, 217, 237, 140, 107, 222, // ;.........k. - 173, 239, 185, 107, 166, 176, 34, 126, 192, 107, 152, 97, // ...k.."~.k.a - 247, 247, 190, 136, 153, 209, 203, 247, 130, 37, 87, 44, // .........%W, - 217, 63, 134, 195, 231, 152, 242, 29, 38, 34, 14, 206, // .?......&".. - 178, 29, 28, 183, 35, 240, 232, 20, 47, 173, 113, 217, // ....#.../.q. - 140, 48, 241, 156, 100, 61, 125, 78, 226, 142, 31, 160, // .0..d=}N.... - 168, 99, 110, 46, 247, 167, 184, 188, 236, 254, 3, 150, // .cn......... - 68, 179, 86, 253, 57, 0, 0, 0 // D.V.9.. + 31, 139, 8, 8, 131, 28, 101, 101, 0, 3, 109, 97, // ......ee..ma + 105, 110, 46, 99, 115, 115, 0, 221, 27, 107, 143, 227, // in.css...k.. + 198, 237, 175, 168, 27, 4, 88, 95, 37, 157, 36, 203, // ......X_%.$. + 222, 93, 25, 45, 2, 20, 40, 26, 32, 233, 135, 182, // .].-..(. ... + 31, 26, 220, 222, 7, 89, 26, 219, 147, 213, 171, 122, // .....Y.....z + 172, 215, 171, 168, 191, 189, 228, 188, 52, 122, 172, 237, // ........4z.. + 109, 146, 54, 201, 45, 12, 123, 72, 14, 201, 225, 112, // m.6.-.{H...p + 56, 228, 204, 220, 199, 15, 191, 51, 234, 144, 38, 71, // 8......3..&G + 154, 197, 81, 85, 25, 207, 75, 123, 105, 123, 198, 15, // ..QU..K{i{.. + 198, 183, 95, 255, 195, 248, 134, 70, 36, 171, 8, 180, // .._....F$... + 14, 117, 93, 84, 193, 199, 143, 26, 169, 29, 229, 233, // .u]T........ + 135, 143, 31, 204, 32, 220, 213, 164, 52, 131, 45, 217, // .... ...4.-. + 229, 37, 105, 183, 249, 139, 85, 209, 87, 154, 237, 131, // .%i...U.W... + 109, 94, 198, 164, 180, 0, 178, 225, 63, 3, 199, 168, // m^......?... + 242, 132, 198, 198, 23, 100, 69, 238, 200, 182, 27, 245, // .....dE..... + 181, 172, 250, 104, 69, 121, 86, 147, 172, 14, 110, 110, // ...hEyV...nn + 186, 67, 157, 38, 109, 66, 51, 98, 29, 8, 221, 31, // .C.&mB3b.... + 234, 192, 181, 87, 27, 235, 72, 182, 79, 180, 182, 106, // ...W..H.O..j + 242, 82, 163, 36, 98, 133, 241, 247, 77, 5, 72, 199, // .R.$b...M.H. + 249, 114, 99, 165, 249, 171, 85, 135, 91, 134, 9, 252, // .rc...U.[... + 141, 149, 235, 45, 237, 231, 14, 196, 88, 187, 48, 165, // ...-....X.0. + 201, 41, 248, 26, 36, 150, 198, 115, 88, 154, 127, 33, // .)..$..sX..! + 201, 51, 169, 105, 20, 154, 85, 152, 85, 86, 69, 74, // .3.i..U.UVEJ + 186, 19, 164, 36, 172, 155, 146, 0, 168, 174, 97, 112, // ...$......ap + 85, 112, 19, 61, 187, 238, 141, 121, 83, 85, 142, 123, // Up.=...ySU.{ + 195, 105, 128, 3, 13, 107, 154, 103, 26, 85, 94, 84, // .i...k.g.U^T + 175, 55, 198, 210, 235, 182, 121, 124, 106, 211, 176, 220, // .7....y|j... + 211, 44, 112, 54, 250, 168, 104, 118, 0, 57, 117, 119, // .,p6..hv.9uw + 40, 91, 1, 113, 54, 81, 158, 228, 165, 196, 8, 243, // ([.q6Q...... + 89, 117, 94, 88, 71, 26, 215, 135, 192, 45, 94, 186, // Yu^XG....-^. + 112, 187, 45, 131, 35, 16, 144, 219, 79, 53, 173, 19, // p.-.#...O5.. + 242, 121, 209, 14, 140, 19, 147, 40, 47, 153, 62, 65, // .y.....(/.>A + 147, 65, 127, 148, 105, 196, 121, 93, 147, 120, 115, 137, // .A..i.y].xs. + 160, 59, 184, 230, 193, 51, 15, 75, 243, 224, 155, 135, // .;...3.K.... + 149, 121, 88, 183, 108, 136, 204, 122, 82, 45, 6, 57, // .yX.l..zR-.9 + 14, 7, 17, 182, 67, 213, 199, 130, 36, 221, 214, 172, // ....C...$... + 234, 50, 207, 246, 173, 206, 100, 155, 39, 160, 70, 23, // .2....d.'.F. + 229, 49, 49, 159, 182, 177, 89, 148, 4, 38, 34, 45, // .11...Y..&"- + 90, 125, 182, 26, 10, 147, 156, 229, 85, 17, 70, 196, // Z}......U.F. + 252, 251, 159, 191, 133, 223, 214, 223, 200, 190, 73, 96, // ..........I` + 254, 190, 37, 89, 146, 155, 0, 10, 163, 220, 252, 83, // ..%Y.......S + 158, 129, 187, 133, 149, 249, 13, 221, 18, 46, 222, 64, // ...........@ + 106, 64, 52, 37, 133, 25, 255, 43, 57, 154, 138, 213, // j@4%...+9... + 166, 31, 159, 75, 210, 174, 74, 195, 36, 209, 198, 124, // ...K..J.$..| + 239, 124, 217, 85, 13, 104, 221, 20, 26, 244, 110, 245, // .|.U.h....n. + 229, 96, 42, 157, 77, 145, 87, 148, 13, 180, 36, 9, // .`*.M.W...$. + 136, 124, 38, 155, 103, 82, 162, 71, 37, 86, 152, 208, // .|&.gR.G%V.. + 61, 26, 0, 240, 97, 130, 204, 96, 177, 212, 117, 158, // =...a..`..u. + 6, 150, 237, 173, 80, 36, 176, 134, 41, 134, 38, 182, // ....P$..).&. + 192, 87, 19, 210, 50, 243, 193, 130, 195, 21, 225, 72, // .W..2......H + 63, 152, 117, 14, 0, 38, 97, 81, 145, 64, 254, 232, // ?.u..&aQ.@.. + 182, 13, 112, 207, 76, 154, 21, 77, 109, 230, 69, 189, // ..p.L..Mm.E. + 47, 243, 166, 48, 43, 146, 144, 168, 54, 145, 113, 88, // /..0+...6.qX + 146, 112, 96, 218, 193, 196, 114, 83, 224, 162, 154, 153, // .p`...rS.... + 231, 57, 7, 30, 57, 173, 242, 245, 34, 140, 99, 140, // .9..9...".c. + 7, 142, 212, 136, 171, 192, 199, 86, 151, 176, 208, 96, // .......V...` + 245, 167, 65, 150, 103, 164, 251, 84, 159, 10, 242, 7, // ..A.g..T.... + 78, 247, 217, 228, 173, 146, 192, 114, 146, 13, 48, 91, // N......r..0[ + 74, 161, 197, 73, 148, 195, 135, 69, 65, 66, 96, 21, // J..I...EAB`. + 145, 128, 99, 54, 219, 48, 122, 194, 17, 103, 177, 178, // ..c6.0z..g.. + 23, 51, 188, 142, 160, 105, 184, 39, 92, 112, 192, 34, // .3...i.'.p." + 199, 46, 143, 154, 170, 4, 101, 219, 188, 169, 113, 136, // ......e...q. + 65, 216, 212, 185, 64, 130, 227, 209, 236, 25, 102, 49, // A...@.....f1 + 230, 81, 238, 16, 198, 249, 145, 247, 46, 202, 124, 15, // .Q........|. + 106, 86, 237, 27, 147, 29, 4, 82, 81, 154, 101, 48, // jV.....RQ.e0 + 89, 85, 65, 51, 75, 88, 163, 199, 129, 204, 33, 78, // YUA3KX....!N + 198, 3, 166, 132, 24, 63, 12, 51, 58, 124, 158, 27, // .....?.3:|.. + 56, 218, 115, 71, 73, 18, 111, 132, 242, 86, 190, 219, // 8.sGI.o..V.. + 129, 233, 2, 203, 131, 112, 209, 139, 225, 44, 180, 69, // .....p...,.E + 57, 199, 140, 27, 69, 245, 217, 209, 132, 88, 77, 145, // 9...E....XM. + 228, 97, 108, 93, 52, 61, 250, 139, 90, 232, 85, 147, // .al]4=..Z.U. + 130, 39, 156, 218, 152, 86, 69, 18, 158, 130, 132, 86, // .'...VE....V + 96, 133, 26, 60, 124, 155, 228, 209, 211, 191, 154, 188, // `..<|....... + 38, 102, 28, 155, 113, 98, 238, 232, 30, 66, 172, 57, // &f..qb...B.9 + 9, 61, 230, 161, 52, 11, 12, 6, 42, 126, 118, 108, // .=..4...*~vl + 156, 48, 182, 41, 196, 76, 200, 158, 100, 113, 219, 123, // .0.).L..dq.{ + 93, 74, 178, 198, 204, 19, 179, 193, 205, 4, 132, 87, // ]J.........W + 245, 41, 225, 3, 156, 243, 81, 181, 48, 96, 62, 113, // .)....Q.0`>q + 5, 200, 25, 237, 216, 58, 10, 184, 43, 192, 72, 34, // .....:..+.H" + 114, 96, 209, 74, 173, 164, 41, 170, 205, 33, 176, 208, // r`.J..)..!.. + 250, 20, 184, 98, 105, 124, 241, 16, 133, 203, 112, 39, // ...bi|....p' + 89, 205, 115, 185, 134, 193, 167, 50, 79, 250, 101, 34, // Y.s....2O.e" + 38, 36, 106, 202, 10, 104, 138, 156, 226, 126, 214, 5, // &$j..h...~.. + 96, 113, 140, 33, 177, 68, 196, 100, 23, 54, 9, 132, // `q.!.D.d.6.. + 232, 38, 166, 185, 25, 133, 224, 203, 149, 73, 210, 45, // .&.......I.- + 137, 77, 186, 43, 195, 148, 152, 52, 221, 155, 249, 246, // .M.+...4.... + 123, 140, 15, 213, 243, 222, 124, 166, 49, 201, 213, 196, // {.....|.1... + 177, 233, 26, 71, 179, 148, 198, 113, 66, 58, 236, 200, // ...G...qB:.. + 169, 211, 240, 69, 238, 81, 24, 58, 6, 14, 124, 0, // ...E.Q.:..|. + 98, 146, 125, 86, 28, 153, 143, 65, 6, 17, 224, 146, // b.}V...A.... + 140, 203, 188, 24, 39, 19, 44, 33, 16, 241, 13, 131, // ....'.,!.... + 52, 204, 144, 245, 2, 179, 53, 7, 63, 73, 56, 139, // 4.....5.?I8. + 40, 16, 123, 73, 79, 218, 131, 20, 85, 153, 215, 208, // (.{IO...U... + 150, 173, 234, 137, 28, 123, 114, 214, 82, 148, 21, 140, // .....{r.R... + 22, 121, 185, 122, 243, 36, 155, 69, 152, 1, 206, 232, // .y.z.$.E.... + 27, 39, 213, 160, 25, 172, 178, 215, 28, 2, 188, 33, // .'.........! + 187, 194, 180, 37, 86, 149, 133, 5, 56, 97, 73, 163, // ...%V...8aI. + 58, 131, 152, 17, 64, 240, 120, 161, 16, 212, 78, 156, // :...@.x...N. + 106, 95, 134, 49, 37, 24, 148, 203, 60, 181, 212, 126, // j_.1%...<..~ + 98, 140, 176, 207, 52, 124, 27, 89, 231, 19, 28, 88, // b...4|.Y...X + 139, 102, 97, 162, 116, 129, 141, 241, 64, 98, 235, 149, // .fa.t...@b.. + 148, 185, 132, 101, 77, 10, 75, 54, 178, 248, 58, 28, // ...eM.K6..:. + 67, 133, 161, 39, 196, 101, 24, 233, 114, 48, 122, 66, // C..'.e..r0zB + 148, 195, 184, 163, 67, 120, 40, 18, 174, 225, 20, 47, // ....Cx(..../ + 83, 148, 240, 240, 221, 110, 167, 225, 4, 112, 185, 189, // S....n...p.. + 247, 118, 235, 123, 103, 218, 75, 68, 97, 199, 112, 140, // .v.{g.KDa.p. + 47, 28, 248, 167, 81, 204, 163, 206, 65, 185, 56, 18, // /...Q...A.8. + 143, 177, 219, 164, 41, 229, 104, 182, 37, 122, 52, 155, // ....).h.%z4. + 56, 1, 193, 140, 181, 12, 171, 90, 155, 133, 19, 243, // 8......Z.... + 18, 9, 56, 52, 68, 250, 155, 128, 192, 62, 2, 235, // ..84D....>.. + 72, 205, 5, 166, 150, 26, 182, 34, 5, 13, 101, 3, // H......"..e. + 215, 133, 84, 90, 170, 32, 150, 203, 80, 47, 5, 156, // ..TZ. ..P/.. + 40, 168, 80, 99, 77, 21, 98, 162, 178, 194, 76, 117, // (.PcM.b...Lu + 87, 168, 225, 32, 20, 88, 198, 172, 49, 124, 60, 202, // W.. .X..1|<. + 30, 193, 135, 219, 217, 85, 105, 229, 89, 114, 106, 149, // .....Ui.Yrj. + 235, 134, 91, 72, 224, 96, 83, 220, 168, 172, 87, 6, // ..[H.`S...W. + 20, 252, 169, 98, 182, 12, 227, 22, 66, 115, 80, 106, // ...b....BsPj + 151, 128, 177, 120, 180, 217, 68, 9, 45, 32, 25, 139, // ...x..D.- .. + 234, 91, 199, 100, 127, 139, 205, 241, 0, 251, 15, 243, // .[.d........ + 103, 220, 6, 142, 101, 88, 200, 36, 74, 184, 103, 103, // g...eX.$J.gg + 139, 32, 106, 145, 103, 88, 78, 149, 133, 145, 170, 29, // . j.gXN..... + 194, 120, 244, 26, 19, 98, 160, 27, 19, 178, 224, 103, // .x...b.....g + 239, 232, 11, 132, 98, 53, 52, 214, 236, 108, 57, 194, // ....b54..l9. + 233, 152, 59, 91, 102, 144, 237, 36, 167, 4, 83, 65, // ..;[f..$..SA + 16, 126, 210, 44, 197, 219, 157, 205, 22, 158, 229, 180, // .~.,........ + 124, 1, 194, 64, 120, 138, 9, 16, 145, 107, 2, 40, // |..@x....k.( + 33, 59, 36, 193, 47, 108, 50, 119, 225, 138, 151, 125, // !;$./l2w...} + 176, 182, 177, 216, 112, 88, 62, 10, 52, 175, 150, 235, // ....pX>.4... + 180, 175, 44, 17, 133, 64, 200, 0, 143, 159, 252, 251, // ..,..@...... + 199, 207, 10, 232, 223, 115, 224, 218, 209, 128, 107, 160, // .....s....k. + 76, 45, 95, 110, 210, 110, 9, 187, 190, 157, 158, 128, // L-_n.n...... + 47, 135, 88, 140, 189, 152, 62, 171, 215, 16, 72, 92, // /.X...>...H. + 157, 4, 242, 99, 232, 58, 162, 227, 64, 70, 236, 13, // ...c.:..@F.. + 136, 231, 104, 5, 233, 182, 231, 59, 230, 146, 88, 75, // ..h....;..XK + 137, 98, 150, 177, 239, 20, 194, 31, 32, 196, 40, 202, // .b...... .(. + 94, 42, 55, 155, 148, 81, 207, 233, 206, 224, 83, 53, // ^*7..Q....S5 + 25, 120, 57, 0, 11, 177, 52, 99, 25, 28, 219, 116, // .x9...4c...t + 213, 134, 169, 3, 193, 163, 18, 242, 162, 80, 216, 80, // .........P.P + 189, 6, 24, 13, 214, 217, 251, 18, 178, 87, 137, 193, // .........W.. + 70, 103, 243, 117, 50, 220, 148, 237, 3, 78, 184, 88, // Fg.u2....N.X + 107, 158, 80, 21, 96, 158, 132, 45, 5, 100, 213, 170, // k.P.`..-.d.. + 210, 220, 147, 84, 235, 30, 38, 65, 187, 6, 138, 41, // ...T..&A...) + 9, 133, 188, 0, 198, 13, 121, 2, 144, 250, 44, 97, // ......y...,a + 144, 152, 53, 55, 9, 152, 226, 128, 155, 37, 1, 181, // ..57.....%.. + 88, 67, 117, 124, 62, 116, 246, 17, 220, 71, 173, 211, // XCu|>t...G.. + 163, 229, 186, 162, 229, 73, 211, 29, 97, 194, 68, 192, // .....I..a.D. + 16, 237, 149, 108, 75, 37, 143, 160, 164, 4, 73, 200, // ...lK%....I. + 157, 39, 65, 247, 2, 194, 180, 238, 147, 25, 174, 52, // .'A........4 + 132, 231, 84, 203, 114, 60, 159, 17, 163, 117, 97, 222, // ..T.r<...ua. + 241, 43, 112, 13, 215, 64, 106, 6, 171, 14, 176, 23, // .+p..@j..... + 61, 89, 142, 105, 203, 95, 173, 6, 199, 33, 64, 45, // =Y.i._...!@- + 114, 148, 80, 252, 205, 86, 109, 88, 209, 10, 86, 211, // r.P..VmX..V. + 18, 118, 74, 88, 79, 12, 199, 96, 1, 66, 58, 91, // .vJXO..`.B:[ + 79, 114, 184, 154, 147, 212, 199, 226, 42, 79, 40, 77, // Or......*O(M + 91, 135, 192, 10, 87, 5, 152, 130, 223, 62, 135, 229, // [...W....>.. + 237, 152, 225, 194, 156, 129, 158, 22, 11, 131, 239, 14, // ............ + 125, 31, 222, 6, 4, 166, 81, 255, 236, 225, 60, 199, // }.....Q...<. + 18, 240, 239, 70, 112, 100, 196, 54, 32, 189, 3, 79, // ...Fpd.6 ..O + 188, 36, 230, 187, 49, 6, 250, 116, 163, 193, 76, 19, // .$..1..t..L. + 64, 180, 150, 78, 179, 154, 210, 40, 175, 24, 208, 233, // @..N...(.... + 118, 58, 253, 150, 236, 116, 154, 218, 233, 52, 182, 19, // v:...t...4.. + 134, 212, 41, 141, 173, 153, 9, 45, 97, 142, 122, 252, // ..)....-a.z. + 186, 77, 244, 213, 19, 57, 177, 50, 168, 50, 176, 4, // .M...9.2.2.. + 135, 173, 79, 27, 144, 208, 204, 133, 20, 38, 91, 116, // ..O......&[t + 176, 111, 103, 52, 13, 89, 18, 1, 148, 188, 193, 182, // .og4.Y...... + 97, 104, 26, 110, 101, 96, 196, 13, 75, 131, 102, 59, // ah.ne`..K.f; + 60, 1, 128, 120, 202, 75, 48, 75, 100, 6, 227, 82, // <..x.K0Kd..R + 141, 133, 101, 76, 62, 43, 136, 33, 236, 55, 212, 199, // ..eL>+.!.7.. + 5, 51, 11, 0, 155, 52, 171, 96, 235, 135, 42, 187, // .3...4.`..*. + 190, 117, 77, 8, 136, 16, 125, 32, 153, 113, 119, 37, // .uM...} .qw% + 78, 108, 223, 213, 59, 223, 213, 155, 116, 101, 97, 5, // Nl..;...tea. + 168, 120, 124, 137, 41, 102, 73, 56, 10, 222, 17, 114, // .x|.)fI8...r + 27, 172, 68, 229, 129, 172, 197, 138, 106, 29, 18, 0, // ..D.....j... + 4, 182, 28, 144, 87, 65, 57, 19, 150, 117, 203, 106, // ....WA9..u.j + 66, 86, 220, 87, 1, 143, 114, 8, 150, 52, 200, 96, // BV.W..r..4.` + 66, 161, 241, 136, 8, 179, 141, 78, 194, 65, 157, 141, // B......N.A.. + 7, 188, 116, 119, 146, 36, 170, 41, 20, 145, 100, 123, // ..tw.$.)..d{ + 40, 172, 192, 10, 161, 218, 93, 17, 224, 51, 128, 171, // (.....]..3.. + 218, 47, 176, 225, 178, 74, 157, 15, 211, 98, 228, 108, // ./...J...b.l + 235, 216, 76, 32, 178, 135, 63, 233, 225, 142, 232, 123, // ..L ..?....{ + 254, 39, 216, 91, 48, 164, 51, 168, 208, 131, 229, 154, // .'.[0.3..... + 128, 241, 255, 8, 251, 107, 125, 43, 43, 225, 197, 191, // .....k}++... + 135, 77, 190, 230, 36, 113, 9, 249, 99, 89, 145, 62, // .M..$q..cY.> + 65, 194, 252, 0, 220, 53, 186, 69, 97, 31, 110, 93, // A....5.Ea.n] + 195, 50, 122, 63, 30, 118, 90, 44, 22, 163, 20, 168, // .2z?.vZ,.... + 239, 248, 118, 159, 206, 142, 41, 150, 241, 214, 233, 26, // ..v...)..... + 61, 37, 173, 166, 232, 228, 160, 154, 75, 45, 94, 70, // =%......K-^F + 218, 142, 187, 162, 186, 234, 186, 128, 37, 172, 163, 238, // ........%... + 103, 122, 130, 117, 73, 178, 27, 120, 32, 2, 6, 14, // gz.uI..x ... + 40, 40, 74, 82, 71, 7, 157, 70, 128, 58, 91, 86, // ((JRG..F.:[V + 13, 60, 15, 86, 53, 4, 79, 133, 21, 82, 164, 74, // .<.V5.O..R.J + 163, 18, 67, 35, 224, 21, 126, 79, 192, 219, 26, 193, // ..C#..~O.... + 105, 40, 0, 162, 170, 200, 182, 203, 38, 139, 96, 209, // i(......&.`. + 142, 121, 207, 212, 42, 64, 140, 7, 167, 36, 129, 194, // .y..*@...$.. + 6, 50, 2, 179, 239, 203, 224, 138, 129, 36, 128, 12, // .2.......$.. + 31, 15, 59, 9, 158, 90, 50, 11, 227, 33, 65, 83, // ..;..Z2..!AS + 169, 196, 84, 96, 121, 26, 49, 36, 121, 128, 127, 184, // ..T`y.1$y... + 49, 72, 146, 100, 63, 230, 49, 100, 145, 78, 100, 44, // 1H.d?.1d.Nd, + 197, 50, 226, 224, 118, 80, 102, 225, 37, 134, 64, 192, // .2..vPf.%.@. + 170, 29, 160, 60, 13, 181, 109, 231, 60, 67, 239, 172, // ...<..m.. + 25, 174, 207, 52, 79, 72, 253, 46, 109, 193, 9, 188, // ...4OH..m... + 37, 204, 217, 202, 63, 195, 151, 133, 190, 235, 237, 10, // %...?....... + 131, 231, 159, 183, 88, 98, 110, 32, 207, 140, 68, 224, // ....Xbn ..D. + 194, 236, 64, 130, 248, 14, 94, 96, 25, 39, 64, 226, // ..@...^`.'@. + 32, 128, 31, 62, 72, 152, 40, 246, 69, 240, 4, 114, // ..>H.(.E..r + 111, 68, 62, 71, 221, 19, 63, 218, 171, 17, 253, 122, // oD>G..?....z + 150, 255, 186, 23, 224, 15, 59, 184, 83, 106, 165, 250, // ......;.Sj.. + 136, 183, 59, 171, 187, 170, 119, 10, 44, 5, 36, 142, // ..;...w.,.$. + 31, 197, 200, 86, 127, 22, 131, 68, 186, 210, 236, 144, // ...V...D.... + 194, 29, 242, 149, 103, 41, 110, 207, 216, 29, 118, 152, // ....g)n...v. + 167, 215, 200, 39, 34, 248, 206, 49, 233, 34, 55, 148, // ...'"..1."7. + 226, 164, 25, 190, 63, 246, 25, 147, 43, 226, 245, 128, // ....?...+... + 216, 157, 165, 150, 217, 90, 145, 224, 97, 192, 208, 146, // .....Z..a... + 252, 76, 160, 168, 199, 22, 227, 176, 55, 12, 36, 182, // .L......7.$. + 234, 42, 213, 174, 140, 237, 123, 62, 176, 225, 187, 6, // .*....{>.... + 157, 252, 69, 191, 119, 150, 83, 56, 36, 191, 211, 201, // ..E.w.S8$... + 43, 157, 251, 12, 115, 126, 64, 129, 36, 120, 191, 62, // +...s~@.$x.> + 184, 112, 191, 195, 32, 206, 0, 9, 182, 7, 184, 165, // .p.. ....... + 194, 165, 4, 54, 243, 116, 128, 92, 41, 100, 6, 229, // ...6.t..)d.. + 81, 152, 12, 144, 190, 66, 86, 36, 165, 19, 161, 107, // Q....BV$...k + 68, 55, 69, 65, 202, 40, 172, 200, 248, 26, 88, 33, // D7EA.(....X! + 240, 160, 50, 100, 22, 93, 143, 31, 129, 244, 131, 31, // ..2d.]...... + 238, 62, 60, 1, 26, 221, 153, 189, 177, 233, 232, 180, // .><......... + 172, 64, 198, 54, 219, 34, 252, 139, 236, 220, 213, 218, // .@.6."...... + 112, 215, 75, 195, 189, 187, 138, 225, 234, 50, 67, 231, // p.K......2C. + 206, 112, 93, 223, 112, 189, 251, 107, 24, 94, 30, 240, // .p].p..k.^.. + 221, 202, 184, 95, 193, 152, 175, 225, 118, 119, 145, 27, // ..._....vw.. + 196, 213, 53, 48, 116, 175, 225, 246, 112, 121, 176, 16, // ..50t...py.. + 252, 125, 99, 121, 89, 55, 66, 178, 43, 38, 227, 14, // .}cyY7B.+&.. + 55, 84, 239, 42, 211, 33, 195, 203, 182, 67, 102, 48, // 7T.*.!...Cf0 + 185, 119, 254, 5, 126, 184, 243, 95, 86, 15, 247, 80, // .w..~.._V..P + 23, 178, 57, 248, 92, 224, 199, 119, 231, 43, 188, 15, // ..9....w.+.. + 57, 162, 247, 221, 95, 210, 80, 238, 247, 151, 221, 207, // 9..._.P..... + 1, 253, 192, 167, 47, 78, 138, 182, 39, 191, 61, 226, // ..../N..'.=. + 185, 173, 120, 204, 77, 252, 132, 112, 42, 89, 56, 61, // ..x.M..p*Y8= + 16, 83, 9, 197, 25, 170, 55, 118, 251, 213, 14, 175, // .S....7v.... + 239, 32, 127, 55, 150, 240, 17, 23, 117, 142, 227, 134, // . .7....u... + 38, 135, 66, 241, 96, 224, 85, 80, 143, 120, 227, 142, // &.B.`.UP.x.. + 175, 103, 209, 151, 196, 26, 205, 98, 204, 111, 158, 74, // .g.....b.o.J + 234, 103, 138, 111, 94, 37, 169, 247, 33, 253, 97, 214, // .g.o^%..!.a. + 228, 214, 210, 84, 215, 140, 218, 137, 152, 118, 117, 57, // ...T.....vu9 + 139, 231, 40, 37, 21, 165, 141, 12, 227, 128, 170, 238, // ..(%........ + 10, 149, 94, 234, 70, 0, 110, 62, 180, 215, 136, 240, // ..^.F.n>.... + 175, 177, 206, 144, 207, 155, 38, 26, 48, 61, 111, 34, // ......&.0=o" + 220, 9, 167, 179, 232, 233, 179, 232, 196, 103, 38, 203, // .........g&. + 59, 51, 89, 155, 255, 133, 205, 25, 161, 88, 77, 51, // ;3Y......XM3 + 183, 208, 67, 134, 236, 14, 110, 97, 56, 236, 111, 86, // ..C...na8.oV + 37, 86, 137, 46, 230, 113, 98, 84, 147, 235, 236, 51, // %V...qbT...3 + 50, 216, 105, 201, 25, 65, 99, 73, 114, 114, 248, 168, // 2.i..AcIrr.. + 76, 254, 237, 94, 233, 188, 243, 230, 155, 24, 77, 179, // L..^......M. + 103, 39, 5, 252, 146, 205, 135, 110, 246, 251, 115, 226, // g'.....n..s. + 206, 26, 113, 155, 64, 109, 162, 143, 79, 133, 199, 81, // ..q.@m..O..Q + 7, 22, 40, 153, 216, 143, 35, 89, 125, 136, 212, 219, // ..(...#Y}... + 242, 222, 98, 192, 213, 177, 157, 21, 94, 44, 39, 120, // ..b.....^,'x + 38, 202, 191, 250, 241, 225, 219, 0, 77, 215, 254, 85, // &.......M..U + 128, 6, 148, 239, 1, 52, 144, 122, 9, 160, 193, 250, // .....4.z.... + 55, 0, 26, 144, 223, 254, 107, 0, 121, 191, 175, 131, // 7.....k.y... + 240, 102, 95, 107, 107, 111, 25, 228, 149, 4, 187, 190, // .f_kko...... + 110, 251, 159, 86, 1, 52, 192, 248, 20, 48, 59, 153, // n..V.4...0;. + 227, 98, 207, 212, 143, 33, 204, 209, 235, 82, 1, 5, // .b...!...R.. + 83, 36, 236, 121, 233, 19, 49, 133, 173, 204, 222, 169, // S$.y..1..... + 205, 254, 254, 130, 219, 204, 148, 47, 217, 212, 139, 4, // ......./.... + 14, 223, 252, 127, 181, 250, 69, 107, 115, 141, 205, 106, // ......Eks..j + 154, 162, 183, 238, 154, 76, 92, 43, 52, 91, 26, 89, // .....L.+4[.Y + 91, 242, 74, 73, 121, 107, 251, 38, 68, 28, 207, 116, // [.JIyk.&D..t + 23, 122, 151, 184, 17, 207, 132, 109, 119, 85, 233, 30, // .z.....mwU.. + 98, 225, 107, 220, 57, 11, 0, 252, 103, 147, 201, 44, // b.k.9...g.., + 85, 253, 124, 206, 249, 211, 42, 46, 155, 236, 136, 107, // U.|...*....k + 150, 204, 211, 169, 150, 111, 81, 45, 129, 138, 64, 253, // .....oQ-..@. + 5, 43, 28, 95, 164, 182, 239, 87, 82, 244, 127, 79, // .+._...WR..O + 103, 167, 239, 171, 189, 127, 124, 12, 6, 85, 217, 204, // g.....|..U.. + 11, 203, 159, 160, 78, 59, 39, 239, 39, 22, 117, 192, // ....N;'.'.u. + 195, 249, 199, 64, 158, 154, 66, 98, 30, 48, 208, 181, // ...@..Bb.0.. + 135, 92, 171, 7, 72, 209, 157, 115, 199, 156, 189, 4, // ....H..s.... + 81, 121, 190, 79, 128, 231, 63, 136, 3, 63, 247, 130, // Qy.O..?..?.. + 132, 65, 245, 173, 11, 249, 49, 53, 184, 206, 91, 86, // .A....15..[V + 206, 87, 241, 190, 170, 126, 102, 143, 187, 31, 3, 249, // .W...~f..... + 56, 26, 31, 186, 4, 12, 166, 30, 123, 99, 126, 41, // 8.......{c~) + 254, 135, 10, 123, 252, 55, 122, 71, 205, 110, 37, 4, // ...{.7zG.n%. + 23, 158, 51, 137, 254, 191, 228, 132, 230, 221, 169, 204, // ..3......... + 149, 137, 244, 127, 147, 255, 201, 23, 201, 143, 129, 184, // ............ + 15, 207, 242, 26, 35, 123, 126, 132, 20, 127, 252, 92, // ....#{~..... + 89, 195, 233, 61, 229, 226, 193, 245, 169, 186, 92, 233, // Y..=........ + 222, 15, 184, 70, 177, 48, 117, 222, 242, 238, 129, 28, // ...F.0u..... + 121, 13, 241, 110, 57, 87, 220, 71, 244, 130, 134, 222, // y..n9W.G.... + 62, 20, 245, 163, 28, 254, 43, 60, 183, 11, 141, 91, // >.....+<...[ + 124, 66, 197, 239, 188, 214, 62, 212, 116, 139, 214, 174, // |B....>.t... + 210, 199, 64, 123, 143, 241, 230, 195, 153, 9, 157, 57, // ..@{.......9 + 1, 253, 218, 95, 125, 204, 12, 104, 106, 11, 121, 139, // ..._}..hj.y. + 63, 32, 125, 235, 29, 205, 230, 55, 96, 144, 107, 30, // ? }....7`.k. + 117, 244, 116, 111, 63, 236, 64, 154, 162, 63, 123, 151, // u.to?.@..?{. + 103, 183, 51, 174, 121, 183, 190, 103, 174, 153, 194, 138, // g.3.y..g.... + 248, 17, 175, 97, 134, 221, 223, 251, 34, 102, 70, 47, // ...a...."fF/ + 215, 241, 124, 166, 88, 178, 127, 12, 134, 175, 49, 197, // ..|.X.....1. + 51, 76, 68, 28, 44, 191, 29, 28, 183, 35, 240, 104, // 3LD.,....#.h + 21, 47, 173, 118, 217, 140, 48, 254, 156, 100, 61, 125, // ./.v..0..d=} + 78, 98, 143, 31, 160, 200, 99, 110, 38, 247, 231, 184, // Nb....cn&... + 188, 236, 254, 3, 183, 232, 20, 14, 252, 57, 0, 0, 0 // .........9.. }; static const unsigned char v5[] = { - 31, 139, 8, 8, 202, 8, 101, 101, 0, 3, 109, 97, // ......ee..ma - 105, 110, 46, 106, 115, 0, 229, 124, 251, 119, 219, 70, // in.js..|.w.F - 150, 230, 239, 249, 43, 42, 236, 236, 144, 218, 16, 16, // ....+*...... - 222, 36, 101, 75, 125, 220, 78, 114, 228, 57, 118, 210, // .$eK}.Nr.9v. - 107, 187, 189, 179, 235, 241, 38, 16, 9, 145, 140, 65, // k.....&....A - 130, 3, 128, 122, 68, 205, 255, 125, 191, 239, 86, 225, // ...zD..}..V. - 69, 81, 178, 211, 157, 156, 211, 39, 147, 200, 100, 161, // EQ.....'..d. - 30, 183, 110, 221, 119, 161, 110, 241, 248, 88, 169, 239, // ..n.w.n..X.. - 127, 120, 251, 237, 137, 122, 246, 215, 23, 106, 26, 167, // .x...z...j.. - 105, 161, 86, 219, 162, 84, 69, 25, 231, 165, 186, 94, // i.V..TE....^ - 150, 11, 213, 143, 55, 203, 227, 190, 90, 174, 85, 150, // ....7...Z.U. - 207, 146, 92, 149, 153, 42, 146, 252, 42, 81, 229, 34, // .....*..*Q." - 81, 241, 102, 163, 226, 82, 197, 235, 91, 245, 183, 215, // Q.f..R..[... - 47, 190, 248, 162, 191, 45, 18, 12, 206, 151, 211, 178, // /....-...... - 255, 228, 139, 229, 106, 147, 1, 204, 157, 90, 12, 85, // ....j....Z.U - 158, 172, 49, 122, 168, 208, 225, 77, 25, 151, 137, 148, // ..1z...M.... - 190, 189, 188, 76, 166, 165, 20, 95, 39, 151, 67, 181, // ...L..._'.C. - 40, 87, 233, 80, 189, 206, 182, 37, 38, 218, 169, 203, // (W.P...%&... - 60, 91, 41, 213, 183, 143, 47, 182, 235, 89, 154, 216, // <[).../..Y.. - 63, 23, 0, 250, 197, 52, 91, 3, 195, 23, 252, 82, // ?....4[....R - 167, 234, 238, 11, 165, 166, 217, 252, 68, 109, 242, 108, // ........Dm.l - 131, 138, 51, 1, 242, 211, 211, 226, 106, 174, 166, 105, // ..3.....j..i - 92, 20, 167, 95, 221, 73, 147, 45, 79, 59, 117, 179, // ..._.I.-O;u. - 74, 215, 197, 105, 111, 81, 150, 155, 147, 227, 227, 235, // J..ioQ...... - 235, 107, 251, 218, 183, 179, 124, 126, 236, 57, 142, 115, // .k....|~.9.s - 140, 97, 61, 117, 185, 76, 211, 211, 222, 58, 91, 39, // .a=u.L...:[' - 61, 117, 181, 76, 174, 255, 146, 221, 156, 246, 28, 229, // =u.L........ - 40, 47, 192, 95, 143, 11, 204, 62, 38, 214, 245, 114, // (/._...>&..r - 86, 46, 78, 123, 174, 29, 86, 85, 167, 189, 233, 54, // V.N{..VU...6 - 199, 74, 203, 231, 89, 154, 229, 189, 51, 245, 116, 19, // .J..Y...3.t. - 131, 132, 166, 127, 186, 92, 39, 211, 120, 115, 218, 203, // ......'.xs.. - 51, 172, 167, 215, 174, 254, 57, 91, 174, 235, 250, 217, // 3.....9[.... - 105, 239, 213, 196, 14, 39, 129, 242, 237, 73, 48, 181, // i....'...I0. - 157, 137, 101, 135, 129, 103, 135, 145, 133, 103, 229, 218, // ..e..g...g.. - 174, 203, 194, 2, 53, 19, 127, 106, 135, 33, 48, 115, // ....5..j.!0s - 109, 199, 179, 253, 201, 88, 90, 209, 152, 218, 158, 235, // m....XZ..... - 227, 193, 27, 187, 0, 16, 249, 182, 63, 10, 108, 223, // ........?.l. - 245, 237, 104, 28, 217, 81, 16, 218, 227, 145, 237, 160, // ..h..Q...... - 202, 9, 108, 55, 64, 113, 236, 219, 158, 103, 187, 222, // ..l7@q...g.. - 200, 246, 61, 84, 77, 34, 123, 228, 217, 94, 56, 34, // ..=TM"{..^8" - 224, 81, 136, 134, 32, 5, 48, 119, 100, 217, 65, 24, // .Q.. .0wd.A. - 197, 152, 196, 11, 149, 254, 4, 93, 48, 163, 63, 178, // .......]0.?. - 131, 9, 187, 76, 34, 133, 129, 193, 232, 94, 31, 203, // ...L"....^.. - 246, 34, 60, 6, 190, 155, 90, 0, 234, 248, 246, 216, // ."<...Z..... - 27, 77, 81, 59, 193, 212, 1, 224, 250, 99, 59, 114, // .MQ;.....c;r - 125, 22, 176, 128, 137, 23, 3, 133, 112, 162, 244, 39, // }.......p..' - 1, 56, 10, 8, 133, 24, 225, 56, 192, 114, 52, 182, // .8.....8.r4. - 93, 140, 0, 110, 1, 168, 196, 169, 29, 7, 171, 242, // ]..n........ - 198, 83, 59, 192, 10, 252, 208, 14, 253, 192, 158, 132, // .S;......... - 65, 53, 45, 103, 245, 64, 160, 7, 176, 195, 18, 162, // A5-g.@...... - 9, 214, 32, 216, 85, 11, 197, 100, 126, 24, 90, 152, // .. .U..d~.Z. - 9, 120, 141, 80, 112, 70, 30, 145, 31, 69, 164, 8, // .x.PpF...E.. - 48, 4, 129, 228, 195, 44, 144, 20, 28, 115, 16, 150, // 0....,...s.. - 224, 142, 49, 38, 28, 99, 234, 9, 6, 70, 65, 96, // ..1&.c...FA` - 143, 163, 73, 106, 213, 124, 225, 66, 192, 229, 128, 189, // ..Ij.|.B.... - 34, 112, 140, 40, 8, 235, 220, 133, 69, 206, 6, 232, // "p.(....E... - 64, 214, 114, 62, 207, 34, 111, 173, 138, 243, 26, 138, // @.r>."o..... - 165, 185, 11, 48, 17, 219, 71, 160, 161, 239, 162, 4, // ...0..G..... - 14, 203, 124, 22, 120, 76, 20, 61, 37, 31, 21, 138, // ..|.xL.=%... - 22, 185, 76, 28, 61, 46, 108, 130, 190, 88, 19, 89, // ..L.=.l..X.Y - 173, 23, 102, 9, 175, 53, 13, 14, 242, 90, 83, 202, // ..f..5...ZS. - 34, 187, 133, 162, 35, 235, 48, 69, 65, 119, 75, 179, // "...#.0EAwK. - 155, 172, 33, 54, 152, 22, 253, 57, 89, 128, 122, 80, // ..!6...9Y.zP - 24, 236, 182, 185, 126, 205, 237, 137, 79, 76, 249, 41, // ....~...OL.) - 220, 182, 132, 219, 100, 54, 23, 55, 38, 19, 198, 154, // ....d6.7&... - 9, 122, 136, 150, 34, 129, 59, 62, 40, 108, 50, 123, // .z..".;>(l2{ - 250, 24, 138, 20, 91, 75, 120, 206, 229, 70, 194, 113, // ....[Kx..F.q - 48, 60, 34, 191, 49, 19, 233, 225, 169, 134, 42, 194, // 0<".1.....*. - 125, 104, 12, 85, 6, 53, 14, 84, 72, 147, 115, 12, // }h.U.5.TH.s. - 134, 179, 0, 37, 10, 199, 30, 33, 134, 134, 1, 224, // ...%...!.... - 56, 32, 7, 154, 85, 191, 244, 212, 241, 63, 97, 18, // 8 ..U....?a. - 92, 160, 238, 197, 190, 242, 169, 238, 174, 21, 225, 75, // ...........K - 63, 56, 46, 202, 6, 56, 13, 216, 217, 79, 67, 24, // ?8...8...OC. - 197, 229, 250, 50, 251, 163, 89, 69, 112, 140, 12, 228, // ...2..YEp... - 103, 10, 70, 128, 205, 142, 23, 211, 6, 140, 42, 134, // g.F.......*. - 210, 212, 141, 67, 15, 26, 50, 114, 168, 235, 99, 63, // ...C..2r..c? - 106, 117, 112, 170, 14, 126, 61, 220, 125, 229, 185, 164, // jup..~=.}... - 235, 68, 77, 52, 93, 221, 49, 190, 245, 19, 0, 226, // .DM4].1..... - 225, 151, 149, 53, 177, 40, 15, 11, 200, 219, 248, 138, // ...5.(...... - 31, 231, 174, 247, 110, 12, 36, 238, 17, 253, 34, 75, // ....n.$..."K - 203, 63, 26, 209, 185, 116, 5, 77, 13, 83, 215, 177, // .?...t.M.S.. - 67, 75, 168, 255, 210, 133, 98, 224, 105, 65, 42, 188, // CK....b.iA*. - 156, 176, 135, 231, 74, 63, 79, 186, 158, 115, 208, 61, // ....J?O..s.= - 234, 44, 178, 85, 242, 71, 163, 142, 39, 18, 233, 165, // .,.U.G..'... - 99, 250, 26, 139, 159, 48, 90, 129, 248, 179, 9, 77, // c....0Z....M - 77, 232, 85, 197, 112, 226, 42, 231, 101, 69, 166, 87, // M.U.p.*.eE.W - 129, 29, 42, 18, 238, 10, 116, 132, 65, 154, 194, 189, // ..*...t.A... - 69, 104, 12, 157, 64, 181, 237, 148, 124, 158, 75, 71, // Eh..@...|.KG - 11, 46, 100, 132, 142, 86, 213, 209, 106, 117, 209, 229, // ..d..V..ju.. - 5, 209, 153, 178, 93, 98, 2, 212, 236, 3, 124, 231, // ....]b....|. - 185, 139, 64, 38, 108, 247, 178, 154, 110, 26, 208, 59, // ..@&l...n..; - 206, 248, 138, 220, 5, 99, 133, 203, 45, 102, 42, 225, // .....c..-f*. - 102, 17, 95, 253, 225, 184, 9, 39, 16, 42, 202, 238, // f._....'.*.. - 59, 150, 68, 202, 3, 210, 96, 132, 106, 214, 188, 99, // ;.D...`.j..c - 219, 10, 182, 225, 220, 29, 63, 19, 214, 203, 7, 77, // ......?....M - 133, 231, 176, 20, 93, 185, 222, 94, 3, 108, 136, 180, // ....]..^.l.. - 157, 71, 123, 13, 90, 177, 198, 239, 246, 235, 35, 193, // .G{.Z.....#. - 96, 129, 5, 114, 166, 133, 53, 185, 103, 101, 226, 188, // `..r..5.ge.. - 240, 255, 104, 164, 23, 106, 68, 178, 112, 16, 218, 88, // ..h..jD.p..X - 29, 79, 30, 86, 150, 240, 37, 4, 129, 228, 185, 75, // .O.V..%....K - 143, 29, 246, 4, 151, 219, 245, 180, 92, 102, 107, 245, // .........fk. - 54, 185, 41, 223, 197, 233, 54, 25, 220, 93, 241, 107, // 6.)...6..].k - 136, 205, 74, 121, 185, 30, 170, 217, 178, 136, 47, 210, // ..Jy....../. - 100, 54, 84, 155, 52, 158, 38, 139, 44, 149, 237, 72, // d6T.4.&.,..H - 121, 187, 65, 159, 120, 54, 203, 214, 175, 151, 243, 69, // y.A.x6.....E - 105, 202, 47, 147, 75, 22, 203, 18, 93, 86, 75, 12, // i./.K...]VK. - 95, 197, 55, 0, 85, 38, 27, 20, 183, 105, 185, 59, // _.7.U&...i.; - 50, 27, 15, 110, 69, 222, 95, 204, 101, 154, 191, 204, // 2..nE._.e... - 63, 96, 67, 82, 109, 112, 6, 253, 139, 185, 117, 189, // ?`CRmp....u. - 88, 150, 73, 255, 232, 9, 250, 214, 219, 157, 193, 224, // X.I......... - 136, 76, 187, 83, 203, 75, 53, 224, 252, 234, 244, 84, // .L.S.K5....T - 245, 215, 219, 213, 69, 146, 247, 143, 212, 116, 145, 76, // ....E....t.L - 63, 2, 247, 193, 215, 50, 241, 215, 50, 243, 215, 178, // ?....2..2... - 152, 163, 39, 106, 55, 84, 239, 63, 8, 60, 34, 163, // ..'j7T.?.<". - 254, 254, 119, 12, 117, 251, 26, 41, 121, 114, 159, 212, // ..w.u..)yr.. - 120, 85, 144, 128, 84, 69, 159, 65, 179, 152, 43, 189, // xU..TE.A..+. - 4, 165, 49, 223, 199, 86, 9, 118, 232, 173, 254, 237, // ..1..V.v.... - 223, 212, 149, 122, 74, 42, 28, 181, 186, 230, 201, 204, // ...zJ*...... - 114, 29, 7, 14, 143, 155, 66, 121, 132, 52, 117, 198, // r.....By.4u. - 198, 55, 122, 236, 25, 231, 251, 220, 177, 187, 6, 253, // .7z......... - 21, 240, 230, 34, 237, 85, 92, 78, 23, 131, 227, 255, // ...".U.N.... - 103, 127, 253, 159, 246, 192, 254, 250, 232, 248, 168, 233, // g........... - 52, 91, 206, 151, 37, 247, 129, 43, 245, 103, 181, 122, // 4[..%..+.g.z - 239, 126, 176, 211, 100, 61, 135, 4, 158, 40, 167, 233, // .~..d=...(.. - 149, 173, 167, 139, 120, 61, 7, 165, 85, 114, 37, 196, // ....x=..Ur%. - 23, 52, 211, 164, 4, 126, 172, 179, 177, 223, 157, 39, // .4...~.....' - 165, 45, 100, 110, 214, 112, 159, 59, 122, 160, 122, 136, // .-dn.p.;z.z. - 75, 102, 253, 74, 192, 126, 61, 216, 64, 81, 147, 239, // Kf.J.~=.@Q.. - 210, 44, 46, 7, 32, 247, 177, 112, 233, 200, 46, 179, // .,.. ..p.... - 239, 150, 55, 201, 108, 160, 113, 55, 67, 118, 21, 47, // ..7.l.q7Cv./ - 46, 215, 131, 171, 134, 20, 135, 177, 16, 52, 101, 6, // .........4e. - 93, 250, 159, 15, 67, 206, 147, 114, 155, 175, 181, 137, // ]...C..r.... - 248, 226, 233, 108, 121, 101, 108, 68, 239, 50, 77, 110, // ...lyelD.2Mn - 212, 181, 117, 185, 77, 83, 5, 182, 175, 10, 107, 10, // ..u.MS....k. - 53, 198, 190, 91, 116, 50, 153, 25, 246, 168, 98, 17, // 5..[t2....b. - 207, 178, 107, 171, 88, 169, 175, 238, 46, 230, 187, 222, // ..k.X....... - 25, 128, 126, 117, 87, 107, 9, 121, 108, 236, 207, 38, // ..~uWk.yl..& - 94, 87, 192, 151, 107, 234, 184, 37, 115, 92, 102, 235, // ^W..k..%s.f. - 210, 90, 103, 249, 10, 146, 88, 230, 16, 68, 40, 135, // .Zg...X..D(. - 218, 220, 90, 110, 45, 0, 10, 66, 81, 164, 168, 22, // ..Zn-..BQ... - 177, 232, 32, 99, 186, 204, 243, 248, 214, 242, 209, 184, // .. c........ - 185, 177, 60, 85, 66, 201, 117, 85, 136, 42, 121, 186, // ..].7.R...Qh - 249, 247, 191, 171, 62, 71, 245, 119, 181, 89, 64, 83, // ....>G.w.Y@S - 85, 220, 105, 242, 162, 70, 190, 13, 99, 32, 136, 168, // U.i..F..c .. - 225, 215, 142, 186, 128, 50, 62, 119, 20, 109, 22, 227, // .....2>w.m.. - 155, 157, 146, 126, 149, 164, 161, 178, 42, 238, 148, 109, // ...~....*..m - 219, 192, 13, 198, 68, 195, 50, 52, 18, 114, 118, 169, // ....D.24.rv. - 195, 149, 128, 208, 21, 7, 12, 119, 72, 69, 80, 11, // .......wHEP. - 36, 67, 196, 181, 79, 129, 17, 137, 210, 88, 180, 147, // $C..O....X.. - 166, 37, 64, 203, 101, 54, 221, 22, 39, 217, 182, 20, // .%@.e6..'... - 118, 208, 190, 215, 43, 62, 129, 225, 46, 178, 28, 149, // v...+>...... - 165, 21, 167, 105, 118, 141, 9, 235, 54, 48, 68, 96, // ...iv...60D` - 144, 31, 117, 101, 135, 236, 189, 246, 172, 244, 56, 205, // ..ue......8. - 211, 14, 230, 185, 17, 18, 49, 171, 191, 129, 148, 164, // ......1..... - 191, 137, 148, 168, 236, 42, 201, 47, 83, 10, 244, 52, // .....*./S..4 - 207, 210, 148, 62, 233, 54, 133, 27, 3, 55, 181, 123, // ...>.6...7.{ - 59, 81, 161, 243, 63, 158, 212, 210, 36, 232, 215, 226, // ;Q..?...$... - 36, 223, 79, 186, 46, 231, 77, 146, 194, 170, 31, 116, // $.O...M....t - 58, 217, 134, 61, 138, 198, 251, 116, 252, 70, 153, 189, // :..=...t.F.. - 88, 151, 208, 226, 27, 90, 164, 27, 106, 184, 216, 11, // X....Z..j... - 84, 14, 96, 47, 255, 220, 121, 58, 81, 55, 143, 152, // T.`/..y:Q7.. - 51, 109, 54, 4, 222, 96, 207, 152, 29, 29, 176, 2, // 3m6..`...... - 133, 96, 124, 88, 86, 13, 107, 140, 232, 85, 146, 216, // .`|XV.k..U.. - 230, 142, 177, 11, 141, 56, 186, 45, 82, 71, 135, 133, // .....8.-RG.. - 174, 146, 236, 71, 132, 175, 119, 80, 23, 181, 32, 25, // ...G..wP.. . - 58, 194, 19, 108, 6, 87, 77, 196, 163, 171, 27, 117, // :..l.WM....u - 125, 239, 124, 216, 41, 189, 56, 129, 194, 10, 146, 85, // }.|.).8....U - 235, 241, 25, 43, 220, 15, 154, 151, 71, 15, 49, 243, // ...+....G.1. - 122, 9, 103, 115, 128, 153, 29, 206, 129, 92, 233, 114, // z.gs.......r - 250, 113, 143, 254, 95, 26, 39, 93, 119, 187, 152, 163, // .q.._.']w... - 199, 151, 186, 26, 252, 164, 239, 187, 64, 145, 68, 234, // ........@.D. - 131, 163, 253, 74, 203, 232, 253, 154, 81, 101, 222, 29, // ...J....Qe.. - 85, 230, 241, 90, 203, 253, 141, 21, 202, 184, 118, 141, // U..Z......v. - 30, 217, 229, 239, 197, 182, 44, 177, 22, 49, 121, 61, // ......,..1y= - 253, 208, 171, 112, 214, 204, 102, 105, 215, 53, 68, 109, // ...p..fi.5Dm - 101, 92, 88, 17, 140, 143, 235, 106, 211, 83, 44, 242, // e.X....j.S,. - 229, 250, 163, 229, 40, 195, 180, 13, 66, 183, 150, 163, // ....(...B... - 208, 146, 98, 84, 208, 171, 10, 130, 35, 36, 24, 10, // ..bT....#$.. - 170, 164, 188, 36, 125, 173, 41, 195, 196, 66, 205, 182, // ...$}.)..B.. - 121, 44, 207, 88, 186, 74, 226, 34, 177, 160, 126, 144, // y,.X.J."..~. - 152, 67, 178, 163, 171, 128, 194, 28, 40, 232, 175, 30, // .C......(... - 230, 166, 210, 22, 194, 173, 158, 138, 243, 101, 108, 137, // .........el. - 75, 22, 190, 27, 226, 137, 240, 104, 131, 35, 29, 22, // K......h.#.. - 203, 217, 44, 65, 208, 9, 243, 130, 48, 183, 94, 60, // ..,A....0.^< - 204, 178, 50, 75, 178, 146, 43, 224, 91, 232, 121, 13, // ..2K..+.[.y. - 65, 46, 210, 12, 156, 94, 88, 33, 40, 18, 234, 165, // A....^X!(... - 92, 66, 17, 246, 86, 111, 130, 39, 227, 45, 13, 154, // .B..Vo.'.-.. - 93, 212, 27, 42, 60, 184, 252, 222, 25, 162, 90, 224, // ]..*<.....Z. - 123, 6, 217, 212, 124, 59, 96, 109, 202, 18, 240, 6, // {...|;`m.... - 18, 225, 107, 153, 100, 24, 163, 157, 220, 105, 19, 255, // ..k.d....i.. - 86, 193, 131, 222, 9, 212, 33, 132, 166, 24, 66, 136, // V.....!...B. - 106, 64, 75, 224, 31, 26, 34, 10, 213, 30, 210, 24, // j@K..."..... - 188, 199, 34, 140, 102, 23, 82, 136, 199, 157, 231, 203, // ..".f.R..... - 153, 226, 7, 133, 160, 128, 164, 204, 227, 13, 62, 87, // ..........>W - 176, 241, 125, 205, 170, 52, 190, 72, 210, 78, 124, 210, // ..}..4.H.N|. - 177, 242, 149, 17, 233, 58, 191, 21, 133, 78, 236, 211, // .....:...N.. - 42, 153, 45, 183, 43, 90, 110, 179, 130, 101, 153, 38, // *.-.+Zn..e.& - 162, 238, 4, 190, 31, 250, 180, 65, 115, 204, 98, 32, // .......As.b - 235, 27, 234, 109, 213, 145, 30, 119, 200, 68, 252, 69, // ...m...w.D.E - 24, 51, 184, 19, 240, 195, 74, 175, 218, 59, 12, 172, // .3....J..;.. - 120, 168, 150, 208, 102, 30, 123, 92, 226, 89, 132, 126, // x...f.{..Y.~ - 168, 22, 116, 62, 242, 208, 244, 150, 199, 238, 118, 162, // ..t>......v. - 216, 48, 164, 132, 77, 121, 131, 66, 103, 75, 113, 25, // .0..My.BgKq. - 167, 69, 219, 192, 76, 47, 218, 177, 125, 82, 135, 244, // .E..L/..}R.. - 186, 53, 79, 24, 24, 87, 182, 234, 207, 85, 105, 64, // .5O..W...Ui@ - 111, 178, 134, 212, 54, 113, 46, 123, 194, 67, 147, 229, // o...6q.{.C.. - 153, 126, 180, 167, 12, 186, 177, 81, 161, 4, 84, 51, // .~.....Q..T3 - 180, 226, 95, 131, 221, 128, 186, 84, 7, 189, 245, 56, // .._....T...8 - 179, 197, 209, 232, 218, 229, 34, 89, 155, 154, 106, 152, // ......"Y..j. - 110, 105, 133, 190, 117, 176, 251, 165, 38, 214, 145, 33, // ni..u...&..! - 26, 22, 208, 54, 155, 154, 132, 39, 85, 77, 216, 14, // ...6...'UM.. - 79, 170, 202, 192, 249, 108, 155, 120, 32, 14, 249, 121, // O....l.x ..y - 91, 148, 203, 203, 219, 74, 230, 58, 2, 168, 5, 182, // [....J.:.... - 242, 137, 12, 50, 232, 0, 33, 191, 248, 170, 132, 83, // ...2..!....S - 36, 177, 72, 86, 203, 11, 196, 66, 186, 182, 109, 25, // $.HV...B..m. - 116, 28, 173, 215, 182, 99, 41, 45, 118, 61, 65, 246, // t....c)-v=A. - 18, 10, 131, 207, 93, 203, 80, 79, 47, 14, 6, 168, // ....].PO/... - 212, 38, 202, 200, 78, 105, 239, 168, 229, 156, 50, 142, // .&..Ni....2. - 0, 21, 245, 96, 181, 156, 142, 217, 0, 7, 150, 112, // ...`.......p - 47, 68, 97, 108, 249, 246, 64, 213, 61, 251, 241, 122, // /Dal..@.=..z - 185, 162, 43, 225, 179, 120, 151, 254, 142, 251, 107, 45, // ..+..x....k- - 250, 93, 201, 255, 62, 3, 105, 150, 83, 49, 93, 131, // .]..>.i.S1]. - 187, 12, 50, 207, 245, 81, 222, 179, 34, 233, 200, 176, // ..2..Q.."... - 212, 92, 148, 107, 45, 188, 175, 147, 203, 1, 5, 174, // ...k-....... - 37, 185, 114, 180, 119, 218, 118, 101, 112, 131, 136, 151, // %.r.w.vep... - 226, 233, 178, 68, 96, 161, 138, 213, 73, 187, 105, 175, // ...D`...I.i. - 2, 148, 111, 59, 204, 108, 31, 146, 83, 67, 98, 168, // ..o;.l..SCb. - 184, 55, 180, 237, 107, 223, 115, 131, 15, 161, 124, 155, // .7..k.s...|. - 119, 245, 12, 216, 237, 109, 218, 107, 45, 107, 109, 155, // w....m.k-km. - 223, 230, 136, 185, 176, 41, 175, 159, 151, 171, 4, 86, // .....).....V - 124, 160, 131, 130, 154, 6, 208, 172, 170, 108, 155, 183, // |........l.. - 37, 182, 214, 201, 7, 91, 6, 71, 67, 229, 66, 186, // %....[.GC.B. - 245, 70, 176, 222, 243, 55, 209, 7, 6, 53, 155, 89, // .F...7...5.Y - 131, 139, 198, 186, 141, 136, 244, 27, 42, 159, 128, 180, // ........*... - 138, 221, 55, 214, 226, 26, 211, 229, 21, 212, 2, 210, // ..7......... - 145, 228, 37, 138, 181, 102, 252, 2, 2, 30, 116, 142, // ..%..f....t. - 241, 69, 145, 165, 219, 146, 94, 18, 243, 209, 213, 53, // .E....^....5 - 54, 53, 89, 139, 114, 4, 84, 141, 136, 212, 215, 213, // 65Y.r.T..... - 250, 76, 25, 143, 27, 43, 234, 29, 52, 201, 237, 253, // .L...+..4... - 14, 84, 164, 171, 124, 240, 139, 83, 242, 54, 104, 32, // .T..|..S.6h - 98, 34, 1, 212, 5, 181, 135, 110, 188, 133, 124, 24, // b".....n..|. - 200, 216, 167, 89, 162, 130, 245, 46, 64, 199, 4, 181, // ...Y....@... - 51, 79, 231, 251, 174, 156, 85, 226, 192, 93, 253, 117, // 3O....U..].u - 129, 125, 206, 71, 93, 172, 100, 172, 29, 21, 136, 51, // .}.G].d....3 - 103, 32, 83, 187, 120, 238, 71, 90, 174, 95, 226, 13, // g S.x.GZ._.. - 131, 245, 30, 222, 86, 80, 215, 63, 232, 175, 132, 136, // ....VP.?.... - 173, 110, 247, 59, 214, 225, 90, 167, 151, 24, 135, 236, // .n.;..Z..... - 99, 109, 26, 80, 60, 49, 197, 203, 120, 153, 214, 182, // cm.P<1..x... - 65, 71, 126, 145, 50, 157, 251, 198, 215, 38, 201, 90, // AG~.2....&.Z - 236, 170, 68, 159, 172, 226, 75, 27, 86, 104, 91, 209, // ..D...K.Vh[. - 154, 229, 248, 248, 33, 228, 86, 169, 229, 3, 182, 83, // ....!.V....S - 239, 103, 75, 110, 32, 246, 177, 220, 84, 221, 59, 6, // .gKn ...T.;. - 85, 187, 246, 150, 231, 159, 96, 7, 10, 167, 205, 10, // U.....`..... - 120, 234, 205, 67, 64, 12, 123, 87, 101, 181, 73, 233, // x..C@.{We.I. - 132, 15, 220, 198, 158, 61, 91, 223, 82, 160, 37, 215, // .....=[.R.%. - 33, 86, 112, 4, 31, 213, 20, 17, 227, 26, 81, 28, // !Vp.......Q. - 223, 132, 170, 114, 177, 44, 248, 126, 52, 177, 247, 230, // ...r.,.~4... - 121, 124, 169, 129, 214, 136, 71, 57, 114, 208, 39, 105, // y|....G9r.'i - 79, 80, 153, 133, 221, 94, 220, 78, 67, 123, 200, 109, // OP...^.NC{.m - 85, 2, 188, 154, 53, 2, 220, 125, 21, 160, 61, 103, // U...5..}..=g - 119, 83, 124, 63, 218, 222, 67, 177, 138, 159, 205, 140, // wS|?..C..... - 69, 110, 101, 235, 244, 182, 119, 246, 156, 136, 84, 177, // Ene...w...T. - 234, 254, 128, 250, 61, 116, 207, 68, 205, 251, 239, 148, // ....=t.D.... - 249, 87, 189, 115, 238, 188, 62, 62, 16, 167, 239, 131, // .W.s..>>.... - 87, 230, 13, 51, 95, 25, 71, 182, 55, 230, 91, 225, // W..3_.G.7.[. - 246, 25, 160, 156, 151, 243, 196, 223, 137, 94, 142, 37, // .........^.% - 93, 194, 73, 121, 122, 231, 241, 165, 122, 171, 163, 235, // ].Iyz...z... - 52, 253, 92, 30, 252, 161, 144, 62, 216, 207, 210, 253, // 4......>.... - 244, 16, 71, 250, 89, 221, 126, 102, 98, 171, 2, 40, // ..G.Y.~fb..( - 115, 215, 8, 254, 178, 167, 38, 7, 228, 231, 190, 64, // s.....&....@ - 181, 31, 91, 15, 117, 177, 138, 108, 247, 2, 85, 237, // ..[.u..l..U. - 36, 94, 102, 115, 186, 197, 223, 240, 140, 160, 195, 67, // $^fs.......C - 38, 49, 248, 216, 174, 204, 146, 203, 226, 236, 169, 188, // &1.......... - 67, 57, 179, 211, 212, 66, 60, 99, 185, 119, 100, 237, // C9...B`..... - 235, 143, 82, 172, 218, 118, 227, 22, 117, 80, 13, 53, // ..R..v..uP.5 - 119, 131, 22, 21, 89, 21, 216, 193, 168, 226, 72, 77, // w...Y.....HM - 120, 215, 210, 15, 231, 204, 69, 170, 216, 217, 16, 223, // x.....E..... - 210, 108, 137, 206, 201, 150, 54, 163, 217, 194, 110, 239, // .l....6...n. - 192, 201, 182, 104, 128, 145, 110, 8, 50, 0, 43, 17, // ...h..n.2.+. - 154, 70, 162, 216, 226, 219, 174, 59, 236, 202, 158, 163, // .F.....;.... - 87, 33, 4, 62, 158, 155, 127, 114, 44, 246, 196, 152, // W!.>...r,... - 129, 87, 217, 236, 98, 91, 28, 52, 6, 95, 136, 53, // .W..b[.4._.5 - 128, 83, 40, 16, 151, 240, 80, 207, 237, 253, 195, 182, // .S(...P..... - 65, 186, 156, 220, 208, 123, 30, 234, 232, 78, 38, 147, // A....{...N&. - 99, 105, 69, 87, 24, 144, 205, 77, 79, 221, 154, 239, // ciEW...MO... - 142, 89, 137, 66, 79, 185, 19, 6, 5, 218, 166, 24, // .Y.BO....... - 223, 72, 175, 117, 60, 45, 138, 222, 153, 178, 87, 23, // .H.u<-....W. - 63, 22, 165, 163, 77, 204, 159, 190, 11, 38, 240, 99, // ?...M....&.c - 79, 118, 166, 218, 173, 170, 159, 63, 119, 90, 213, 158, // Ov.....?wZ.. - 169, 118, 252, 103, 158, 63, 169, 171, 125, 83, 237, 186, // .v.g.?..}S.. - 19, 239, 249, 119, 168, 174, 236, 206, 23, 176, 38, 117, // ...w......&u - 72, 71, 63, 100, 54, 15, 3, 71, 89, 158, 23, 30, // HG?d6..GY... - 17, 189, 182, 60, 107, 148, 140, 52, 143, 193, 212, 161, // ....d..Bh.. - 19, 155, 234, 140, 9, 219, 227, 218, 125, 119, 162, 62, // ........}w.> - 135, 254, 99, 65, 155, 130, 164, 152, 57, 13, 37, 0, // ..cA....9.%. - 15, 213, 72, 44, 49, 138, 35, 33, 58, 122, 48, 225, // ..H,1.#!:z0. - 88, 202, 80, 227, 192, 151, 178, 76, 233, 79, 136, 30, // X.P....L.O.. - 202, 168, 247, 100, 57, 194, 48, 170, 247, 72, 72, 15, // ...d9.0..HH. - 84, 153, 240, 140, 242, 152, 104, 249, 92, 254, 72, 186, // T.....h...H. - 68, 164, 208, 8, 48, 192, 68, 79, 141, 200, 67, 31, // D...0.DO..C. - 34, 21, 169, 17, 49, 130, 216, 127, 214, 2, 8, 119, // "...1......w - 36, 236, 227, 220, 20, 16, 50, 152, 229, 136, 107, 112, // $.....2...kp - 193, 102, 5, 199, 66, 74, 33, 40, 84, 156, 20, 76, // .f..BJ!(T..L - 152, 168, 80, 251, 166, 17, 208, 9, 38, 34, 130, 124, // ..P.....&".| - 219, 25, 6, 194, 127, 202, 2, 88, 65, 184, 204, 99, // .......XA..c - 11, 133, 162, 142, 112, 200, 161, 237, 226, 34, 48, 148, // ....p...."0. - 197, 80, 214, 230, 115, 157, 88, 51, 69, 76, 151, 61, // .P..s.X3EL.= - 44, 238, 179, 240, 135, 106, 211, 222, 144, 236, 110, 16, // ,....j....n. - 74, 217, 175, 196, 105, 44, 43, 241, 104, 217, 125, 95, // J...i,+.h.}_ - 139, 86, 84, 209, 220, 23, 195, 192, 76, 94, 244, 240, // .VT.....L^.. - 88, 239, 105, 94, 136, 45, 131, 7, 30, 139, 56, 147, // X.i^.-....8. - 95, 1, 69, 17, 125, 200, 11, 81, 24, 45, 184, 136, // _.E.}..Q.-.. - 204, 70, 34, 78, 190, 204, 239, 9, 76, 148, 33, 174, // .F"N....L.!. - 90, 160, 233, 141, 199, 232, 255, 89, 235, 24, 251, 130, // Z......Y.... - 155, 168, 209, 72, 148, 203, 23, 113, 197, 44, 26, 31, // ...H...q.,.. - 192, 212, 174, 31, 52, 35, 124, 159, 245, 158, 43, 245, // ....4#|...+. - 130, 15, 176, 101, 78, 212, 88, 234, 67, 193, 199, 39, // ...eN.X.C..' - 254, 62, 49, 214, 210, 19, 9, 198, 161, 72, 155, 152, // .>1......H.. - 132, 49, 226, 9, 222, 29, 192, 156, 24, 21, 68, 50, // .1........D2 - 59, 214, 25, 140, 185, 230, 177, 192, 146, 246, 7, 215, // ;........... - 224, 183, 141, 145, 168, 191, 54, 42, 192, 15, 38, 132, // ......6*..&. - 129, 44, 32, 82, 190, 77, 121, 226, 16, 19, 161, 181, // ., R.My..... - 7, 154, 134, 166, 222, 11, 235, 82, 224, 212, 80, 60, // .......R..P< - 175, 85, 6, 61, 2, 17, 35, 64, 159, 200, 234, 245, // .U.=..#@.... - 76, 154, 90, 186, 12, 177, 156, 72, 159, 136, 47, 72, // L.Z....H../H - 41, 3, 82, 127, 216, 202, 251, 38, 181, 204, 147, 142, // ).R....&.... - 16, 123, 216, 114, 143, 230, 153, 118, 28, 140, 176, 2, // .{.r...v.... - 203, 11, 172, 0, 6, 30, 177, 57, 13, 60, 53, 28, // .......9.<5. - 98, 96, 81, 35, 177, 243, 240, 166, 22, 173, 47, 254, // b`Q#....../. - 89, 35, 9, 24, 170, 2, 167, 156, 114, 23, 229, 90, // Y#......r..Z - 92, 45, 71, 251, 140, 202, 32, 48, 83, 17, 111, 110, // .-G... 0S.on - 90, 184, 2, 250, 6, 143, 205, 40, 76, 169, 43, 136, // Z......(L.+. - 217, 73, 20, 75, 8, 3, 88, 22, 40, 55, 133, 206, // .I.K..X.(7.. - 89, 148, 142, 49, 80, 242, 40, 182, 16, 75, 11, 124, // Y..1P.(..K.| - 142, 212, 115, 94, 199, 24, 107, 53, 21, 165, 161, 101, // ..s^..k5...e - 211, 241, 65, 189, 38, 245, 202, 119, 68, 47, 124, 250, // ..A.&..wD/|. - 49, 158, 70, 8, 198, 84, 144, 17, 195, 79, 89, 10, // 1.F..T...OY. - 189, 24, 3, 51, 52, 184, 220, 159, 194, 211, 249, 252, // ...34....... - 2, 65, 184, 203, 67, 27, 86, 194, 74, 33, 143, 167, // .A..C.V.J!.. - 80, 143, 22, 151, 153, 119, 178, 28, 203, 133, 160, 79, // P....w.....O - 73, 27, 87, 16, 157, 8, 124, 116, 71, 183, 41, 201, // I.W...|tG.). - 230, 232, 245, 179, 128, 160, 10, 127, 246, 232, 57, 220, // ..........9. - 135, 56, 128, 128, 159, 142, 104, 169, 16, 163, 133, 239, // .8....h..... - 227, 140, 27, 79, 180, 204, 164, 86, 40, 130, 196, 245, // ...O...V(... - 145, 111, 32, 154, 197, 181, 161, 2, 136, 89, 82, 95, // .o ......YR_ - 241, 80, 60, 4, 241, 163, 76, 130, 135, 197, 63, 192, // .P<...L...?. - 187, 145, 102, 28, 116, 79, 51, 142, 204, 65, 128, 0, // ..f.tO3..A.. - 18, 88, 180, 48, 156, 3, 192, 70, 188, 131, 128, 232, // .X.0...F.... - 220, 30, 47, 56, 121, 42, 196, 131, 157, 30, 157, 3, // ../8y*...... - 241, 95, 192, 22, 236, 41, 161, 92, 234, 0, 233, 109, // ._...).....m - 41, 20, 247, 9, 255, 207, 210, 93, 182, 240, 35, 44, // )......]..#, - 16, 195, 249, 79, 194, 25, 110, 18, 64, 124, 152, 21, // ...O..n.@|.. - 185, 179, 129, 194, 228, 57, 45, 154, 177, 131, 140, 230, // .....9-..... - 36, 136, 18, 205, 213, 72, 63, 202, 151, 96, 36, 118, // $....H?..`$v - 16, 129, 129, 40, 20, 239, 196, 144, 30, 99, 203, 39, // ...(.....c.' - 186, 144, 229, 169, 37, 210, 239, 240, 17, 70, 194, 30, // ....%....F.. - 89, 158, 15, 228, 131, 52, 164, 232, 99, 226, 243, 192, // Y....4..c... - 157, 188, 12, 28, 237, 220, 66, 146, 111, 148, 2, 69, // ......B.o..E - 139, 158, 110, 234, 9, 217, 39, 148, 226, 33, 61, 147, // ..n...'..!=. - 231, 240, 171, 82, 31, 153, 129, 190, 199, 243, 33, 21, // ...R......!. - 193, 20, 61, 173, 64, 100, 156, 179, 96, 153, 162, 60, // ..=.@d..`..< - 136, 143, 158, 7, 163, 200, 232, 14, 248, 57, 210, 126, // .........9.~ - 107, 50, 108, 33, 175, 94, 5, 122, 79, 69, 73, 84, // k2l!.^.zOEIT - 191, 145, 234, 252, 26, 14, 170, 7, 85, 39, 16, 255, // ........U'.. - 171, 85, 39, 208, 70, 79, 219, 145, 6, 225, 71, 89, // .U'.FO....GY - 20, 250, 18, 114, 80, 233, 22, 164, 214, 148, 175, 29, // ...rP....... - 2, 9, 164, 176, 48, 90, 17, 174, 43, 16, 19, 133, // ....0Z..+... - 117, 209, 10, 67, 178, 105, 21, 105, 171, 162, 169, 32, // u..C.i.i... - 233, 64, 179, 60, 139, 194, 206, 215, 51, 150, 38, 146, // .@.<....3.&. - 112, 83, 148, 70, 108, 212, 72, 0, 0, 31, 127, 65, // pS.Fl.H....A - 21, 244, 101, 34, 58, 43, 116, 27, 113, 47, 203, 205, // ..e":+t.q/.. - 166, 47, 210, 24, 112, 149, 178, 84, 143, 235, 143, 166, // ./..p..T.... - 52, 130, 156, 57, 148, 239, 9, 57, 199, 111, 18, 11, // 4..9...9.o.. - 140, 14, 129, 15, 41, 66, 242, 78, 212, 148, 108, 151, // ....)B.N..l. - 113, 35, 139, 108, 5, 121, 35, 65, 43, 101, 45, 190, // q#.l.y#A+e-. - 37, 53, 56, 5, 87, 45, 250, 133, 133, 115, 46, 36, // %58.W-...s.$ - 248, 229, 81, 42, 69, 48, 68, 180, 171, 62, 7, 115, // ..Q*E0D..>.s - 15, 224, 144, 7, 150, 70, 151, 226, 197, 116, 123, 134, // .....F...t{. - 159, 166, 150, 36, 176, 184, 72, 20, 2, 249, 231, 145, // ...$..H..... - 253, 62, 101, 38, 144, 102, 95, 177, 141, 164, 115, 39, // .>e&.f_...s' - 34, 24, 210, 2, 57, 39, 77, 3, 33, 154, 236, 7, // "...9'M.!... - 68, 214, 193, 234, 80, 232, 51, 22, 47, 19, 202, 54, // D...P.3./..6 - 130, 43, 19, 74, 65, 45, 38, 34, 57, 124, 107, 196, // .+.JA-&"9|k. - 119, 1, 84, 79, 126, 251, 66, 101, 122, 17, 87, 180, // w.TO~.Bez.W. - 100, 98, 145, 13, 12, 180, 22, 100, 224, 164, 194, 128, // db.....d.... - 26, 225, 136, 149, 28, 89, 193, 21, 197, 111, 97, 85, // .....Y...oaU - 235, 20, 219, 231, 9, 134, 99, 12, 245, 4, 96, 32, // ......c...` - 76, 10, 5, 93, 87, 252, 31, 39, 231, 63, 55, 16, // L..]W..'.?7. - 30, 122, 66, 46, 114, 67, 203, 235, 144, 151, 5, 45, // .zB.rC.....- - 71, 219, 102, 159, 23, 20, 166, 129, 124, 211, 42, 122, // G.f.....|.*z - 150, 236, 71, 164, 16, 9, 37, 101, 131, 133, 149, 179, // ..G...%e.... - 138, 115, 143, 72, 20, 209, 43, 33, 54, 73, 76, 29, // .s.H..+!6IL. - 230, 23, 234, 67, 177, 231, 24, 202, 246, 80, 23, 64, // ...C.....P.@ - 94, 71, 76, 24, 53, 78, 54, 94, 20, 71, 20, 158, // ^GL.5N6^.G.. - 71, 142, 68, 12, 80, 182, 104, 104, 216, 42, 209, 93, // G.D.P.hh.*.] - 205, 98, 17, 132, 227, 57, 63, 204, 43, 178, 230, 100, // .b...9?.+..d - 251, 60, 137, 103, 73, 62, 184, 75, 179, 121, 182, 213, // .<.gI>.K.y.. - 23, 82, 245, 193, 240, 155, 69, 118, 253, 102, 57, 75, // .R....Ev.f9K - 46, 98, 62, 55, 15, 230, 180, 251, 193, 236, 218, 230, // .b>7........ - 20, 177, 92, 78, 63, 222, 170, 50, 219, 88, 142, 250, // ...N?..2.X.. - 197, 122, 31, 140, 63, 168, 155, 235, 78, 206, 212, 5, // .z..?...N... - 15, 74, 61, 30, 201, 55, 240, 121, 52, 220, 223, 164, // .J=..7.y4... - 214, 200, 235, 239, 218, 249, 83, 49, 134, 221, 63, 90, // ......S1..?Z - 228, 123, 170, 123, 71, 170, 146, 4, 105, 102, 98, 178, // .{.{G...ifb. - 30, 51, 109, 58, 231, 180, 85, 238, 203, 23, 15, 31, // .3m:..U..... - 70, 53, 135, 79, 117, 162, 91, 139, 34, 58, 23, 239, // F5.Ou.[.":.. - 203, 171, 163, 93, 247, 208, 78, 14, 218, 3, 167, 57, // ...]..N....9 - 239, 122, 250, 213, 157, 62, 107, 148, 155, 11, 237, 195, // .z...>k..... - 198, 250, 92, 164, 57, 213, 216, 63, 248, 52, 199, 133, // ....9..?.4.. - 76, 190, 224, 161, 114, 145, 164, 151, 86, 81, 130, 242, // L...r...VQ.. - 211, 133, 74, 231, 39, 186, 62, 58, 120, 164, 154, 39, // ..J.'.>:x..' - 64, 101, 121, 149, 180, 206, 226, 120, 10, 208, 58, 75, // @ey....x..:K - 121, 44, 43, 168, 158, 242, 192, 44, 123, 7, 99, 157, // y,+....,{.c. - 179, 197, 214, 250, 103, 201, 85, 146, 102, 27, 230, 242, // ....g.U.f... - 242, 124, 241, 85, 182, 158, 103, 60, 186, 127, 185, 188, // .|.U..g<.... - 200, 227, 252, 182, 123, 196, 211, 194, 197, 156, 91, 98, // ....{.....[b - 98, 157, 126, 134, 194, 66, 35, 114, 109, 109, 110, 164, // b.~..B#rmmn. - 190, 201, 29, 60, 120, 108, 214, 5, 45, 7, 117, 224, // ...31..M - 82, 165, 38, 120, 104, 146, 124, 235, 92, 161, 121, 158, // R.&xh.|...y. - 109, 55, 205, 145, 117, 157, 49, 214, 58, 9, 189, 159, // m7..u.1.:... - 87, 100, 206, 70, 205, 224, 157, 150, 28, 205, 125, 191, // Wd.F......}. - 125, 202, 186, 169, 50, 140, 193, 245, 20, 214, 131, 9, // }...2....... - 1, 81, 55, 251, 167, 45, 254, 123, 9, 56, 17, 83, // .Q7..-.{.8.S - 44, 123, 53, 193, 91, 57, 60, 66, 237, 154, 234, 63, // ,{5.[9..mZ.7i.. - 97, 37, 0, 6, 181, 243, 101, 1, 123, 85, 244, 63, // a%....e.{U.? - 232, 85, 189, 15, 208, 61, 216, 239, 254, 66, 82, 250, // .U...=...BR. - 239, 117, 62, 62, 86, 239, 35, 244, 143, 78, 212, 255, // .u>>V.#..N.. - 206, 233, 177, 223, 0, 230, 1, 232, 53, 112, 151, 189, // ........5p.. - 221, 186, 251, 231, 160, 67, 244, 131, 10, 127, 152, 181, // .....C...... - 229, 20, 232, 124, 163, 219, 63, 180, 86, 13, 66, 129, // ...|..?.V.B. - 198, 36, 118, 59, 215, 29, 156, 133, 201, 105, 162, 0, // .$v;.....i.. - 96, 252, 189, 220, 142, 84, 217, 37, 133, 66, 207, 166, // `....T.%.B.. - 244, 173, 166, 89, 149, 160, 171, 117, 116, 240, 44, 71, // ...Y...ut.,G - 144, 33, 32, 108, 102, 0, 64, 165, 109, 94, 71, 22, // .! lf.@.m^G. - 201, 56, 122, 34, 192, 222, 25, 17, 250, 37, 201, 51, // .8z".....%.3 - 139, 157, 16, 225, 196, 28, 38, 160, 140, 223, 105, 244, // ......&...i. - 88, 128, 61, 81, 247, 255, 3, 168, 103, 235, 25, 123, // X.=Q....g..{ - 202, 239, 37, 173, 219, 56, 22, 58, 239, 253, 49, 63, // ..%..8.:..1? - 38, 241, 72, 247, 222, 132, 222, 9, 5, 106, 53, 59, // &.H......j5; - 105, 85, 222, 223, 253, 241, 234, 28, 158, 17, 161, 91, // iU.........[ - 183, 213, 157, 173, 250, 106, 103, 21, 137, 117, 162, 159, // .....jg..u.. - 67, 254, 143, 222, 39, 149, 27, 124, 219, 13, 188, 206, // C...'..|.... - 52, 46, 146, 251, 91, 200, 189, 251, 95, 85, 238, 175, // 4...[..._U.. - 87, 59, 75, 189, 237, 128, 175, 32, 87, 20, 12, 84, // W;K.... W..T - 129, 168, 245, 225, 192, 70, 182, 195, 2, 229, 115, 214, // .....F....s. - 206, 105, 30, 216, 206, 153, 192, 168, 137, 239, 170, 13, // .i.......... - 97, 123, 31, 247, 213, 157, 9, 101, 154, 208, 134, 214, // a{.....e.... - 69, 253, 237, 245, 203, 94, 125, 183, 172, 50, 63, 59, // E....^}..2?; - 125, 215, 75, 95, 14, 173, 118, 196, 166, 77, 132, 96, // }.K_..v..M.` - 103, 118, 208, 157, 132, 191, 3, 115, 24, 43, 93, 217, // gv.....s.+]. - 154, 102, 166, 174, 205, 57, 52, 95, 215, 192, 119, 102, // .f...94_..wf - 213, 242, 213, 107, 93, 104, 231, 205, 198, 52, 93, 22, // ...k]h...4]. - 9, 224, 206, 16, 137, 241, 238, 106, 47, 196, 142, 143, // .......j/... - 55, 87, 81, 64, 216, 243, 56, 162, 154, 24, 47, 190, // 7WQ@..8.../. - 217, 163, 197, 139, 217, 131, 164, 120, 49, 59, 136, 147, // .......x1;.. - 204, 236, 154, 137, 189, 208, 239, 98, 233, 42, 219, 86, // .......b.*.V - 82, 251, 9, 116, 104, 235, 219, 38, 165, 133, 151, 113, // R..th..&...q - 3, 7, 17, 51, 109, 15, 99, 86, 145, 36, 10, 67, // ...3m.cV.$.C - 63, 236, 226, 230, 16, 55, 83, 255, 56, 118, 21, 82, // ?....7S.8v.R - 144, 241, 237, 186, 197, 84, 227, 37, 26, 204, 26, 171, // .....T.%.... - 246, 40, 153, 92, 47, 60, 64, 38, 215, 251, 36, 34, // .(../<@&..$" - 250, 6, 99, 113, 52, 84, 137, 61, 199, 8, 149, 229, // ..cq4T.=.... - 202, 29, 122, 67, 191, 215, 189, 221, 92, 28, 34, 150, // ..zC......". - 49, 147, 154, 84, 247, 102, 55, 132, 152, 166, 76, 20, // 1..T.f7...L. - 163, 65, 230, 102, 220, 141, 232, 101, 171, 167, 136, 27, // .A.f...e.... - 115, 217, 121, 235, 151, 18, 253, 221, 39, 208, 253, 206, // s.y.....'... - 216, 245, 6, 59, 130, 58, 132, 27, 123, 118, 152, 168, // ...;.:..{v.. - 175, 167, 245, 170, 187, 182, 102, 104, 209, 157, 177, 109, // ......fh...m - 82, 47, 96, 21, 86, 37, 118, 243, 122, 147, 192, 123, // R/`.V%v.z..{ - 203, 176, 13, 176, 99, 48, 117, 188, 186, 160, 111, 249, // ....c0u...o. - 116, 115, 236, 191, 186, 211, 183, 190, 118, 221, 205, 14, // ts......v... - 127, 238, 167, 155, 161, 205, 48, 167, 94, 213, 183, 120, // ......0.^..x - 216, 150, 73, 151, 87, 123, 175, 89, 254, 25, 203, 181, // ..I.W{.Y.... - 201, 147, 189, 49, 237, 123, 219, 237, 55, 20, 245, 102, // ...1.{..7..f - 90, 54, 195, 188, 6, 97, 182, 154, 103, 188, 116, 164, // Z6...a..g.t. - 195, 144, 221, 65, 212, 62, 249, 10, 200, 236, 241, 238, // ...A.>...... - 237, 1, 76, 189, 14, 164, 205, 67, 39, 180, 220, 187, // ..L....C'... - 17, 244, 158, 191, 39, 131, 144, 8, 161, 131, 30, 83, // ....'......S - 63, 62, 54, 170, 186, 226, 116, 170, 204, 149, 179, 38, // ?>6...t....& - 240, 172, 48, 56, 158, 39, 101, 255, 94, 252, 245, 88, // ..08.'e.^..X - 96, 86, 175, 41, 63, 218, 187, 5, 100, 166, 51, 23, // `V.)?...d.3. - 114, 106, 44, 86, 31, 69, 80, 129, 197, 71, 137, 139, // rj,V.EP..G.. - 175, 246, 1, 201, 21, 239, 31, 46, 126, 6, 12, 27, // ........~... - 252, 90, 206, 185, 103, 26, 170, 27, 196, 195, 239, 63, // .Z..g......? - 126, 56, 81, 87, 59, 134, 122, 170, 21, 104, 147, 26, // ~8QW;.z..h.. - 117, 160, 125, 104, 85, 40, 244, 127, 85, 56, 93, 141, // u.}hU(..U8]. - 252, 117, 65, 106, 195, 6, 82, 163, 221, 65, 147, 66, // .uAj..R..A.B - 147, 65, 110, 238, 53, 19, 152, 120, 166, 223, 186, 105, // .An.5..x...i - 149, 102, 243, 31, 180, 134, 50, 130, 125, 239, 32, 250, // .f....2.}. . - 251, 70, 223, 103, 67, 200, 135, 0, 18, 207, 223, 230, // .F.gC....... - 121, 150, 203, 147, 135, 167, 23, 216, 87, 203, 3, 3, // y.......W... - 197, 111, 146, 139, 237, 188, 255, 225, 195, 163, 175, 195, // .o.......... - 62, 55, 88, 50, 1, 195, 191, 110, 180, 244, 191, 222, // >7X2...n.... - 190, 85, 223, 101, 249, 117, 156, 51, 120, 254, 116, 156, // .U.e.u.3x.t. - 20, 170, 207, 51, 25, 112, 59, 53, 55, 155, 95, 100, // ...3.p;57._d - 248, 234, 174, 125, 175, 15, 230, 140, 150, 172, 233, 8, // ...}........ - 9, 138, 203, 109, 177, 171, 205, 14, 209, 239, 246, 88, // ...m.......X - 37, 69, 17, 235, 31, 15, 200, 10, 26, 239, 230, 178, // %E.......... - 103, 35, 61, 162, 184, 180, 202, 63, 85, 160, 14, 248, // g#=....?U... - 129, 111, 215, 148, 8, 77, 129, 203, 154, 2, 45, 23, // .o...M....-. - 111, 68, 204, 94, 253, 87, 89, 254, 152, 172, 205, 15, // oD.^.WY..... - 118, 84, 110, 194, 232, 225, 160, 223, 110, 238, 55, 174, // vTn.....n.7. - 194, 92, 23, 111, 191, 214, 218, 199, 64, 166, 126, 195, // ...o....@.~. - 31, 56, 205, 247, 34, 192, 206, 212, 242, 19, 168, 249, // .8.."....... - 143, 219, 118, 68, 216, 157, 189, 233, 209, 111, 5, 133, // ..vD.....o.. - 173, 235, 156, 95, 62, 176, 152, 79, 98, 247, 54, 219, // ..._>..Ob.6. - 44, 167, 234, 245, 127, 60, 132, 91, 201, 246, 31, 243, // ,....<.[.... - 155, 135, 48, 171, 218, 127, 31, 188, 222, 126, 2, 175, // ..0......~.. - 242, 19, 120, 149, 255, 56, 94, 191, 194, 203, 247, 206, // ..x..8^..... - 30, 242, 233, 148, 235, 174, 79, 215, 53, 85, 252, 73, // ......O.5U.I - 187, 220, 188, 251, 108, 157, 155, 180, 61, 229, 158, 121, // ....l...=..y - 217, 123, 243, 221, 62, 71, 16, 99, 144, 32, 66, 223, // .{..>G.c. B. - 20, 203, 162, 235, 167, 171, 95, 57, 136, 211, 164, 190, // ......_9.... - 243, 7, 172, 59, 47, 70, 119, 237, 197, 55, 161, 193, // ...;/Fw..7.. - 158, 2, 129, 224, 8, 254, 117, 173, 81, 86, 222, 154, // ......u.QV.. - 229, 142, 244, 237, 127, 40, 161, 59, 60, 77, 146, 223, // .....(.;.>?.l - 59, 96, 246, 234, 182, 254, 189, 237, 76, 253, 83, 86, // ;`......L.SV - 216, 126, 90, 126, 123, 123, 211, 68, 82, 255, 162, 182, // .~Z~{{.DR... - 239, 222, 93, 196, 103, 155, 77, 251, 221, 221, 222, 78, // ..].g.M....N - 97, 107, 222, 239, 223, 123, 181, 127, 220, 125, 141, 223, // ak...{...}.. - 201, 196, 232, 228, 33, 116, 134, 153, 95, 164, 120, 52, // ....!t.._.x4 - 80, 92, 174, 177, 255, 41, 166, 60, 127, 233, 252, 170, // P....).<.... - 148, 126, 139, 6, 254, 154, 36, 143, 246, 185, 21, 231, // .~....$..... - 63, 237, 228, 104, 24, 242, 163, 191, 78, 31, 217, 181, // ?..h....N... - 19, 68, 246, 187, 118, 49, 214, 2, 242, 230, 62, 172, // .D..v1....>. - 22, 150, 191, 69, 62, 136, 96, 167, 127, 79, 157, 124, // ...E>.`..O.| - 125, 94, 253, 222, 83, 157, 205, 193, 215, 86, 201, 149, // }^..S....V.. - 141, 21, 66, 2, 23, 203, 162, 204, 242, 91, 180, 159, // ..B......[.. - 235, 146, 13, 18, 129, 52, 231, 113, 177, 48, 53, 131, // .....4.q.05. - 35, 253, 171, 19, 6, 52, 79, 127, 118, 106, 150, 92, // #....4O.vj.. - 198, 208, 21, 254, 188, 26, 136, 127, 48, 82, 128, 172, // ........0R.. - 50, 7, 139, 242, 221, 136, 207, 99, 27, 76, 24, 224, // 2......c.L.. - 89, 118, 109, 103, 235, 52, 139, 103, 245, 246, 78, 255, // Yvmg.4.g..N. - 138, 252, 96, 49, 128, 72, 29, 13, 213, 44, 155, 110, // ..`1.H...,.n - 87, 252, 209, 4, 110, 120, 192, 244, 255, 15, 216, 205, // W...nx...... - 80, 211, 208, 94, 0, 0, 0 // P..^.. + 31, 139, 8, 8, 69, 34, 103, 101, 0, 3, 109, 97, // ....E"ge..ma + 105, 110, 46, 106, 115, 0, 221, 92, 249, 115, 219, 70, // in.js....s.F + 150, 254, 221, 127, 69, 135, 147, 29, 82, 27, 2, 194, // ....E...R... + 77, 82, 182, 60, 229, 113, 146, 146, 183, 236, 100, 214, // MR.<.q....d. + 246, 120, 15, 175, 55, 129, 72, 136, 100, 12, 18, 92, // .x..7.H.d... + 0, 212, 17, 13, 255, 247, 253, 190, 215, 141, 139, 162, // ............ + 100, 103, 38, 169, 154, 74, 34, 147, 141, 62, 94, 191, // dg&..J"..>^. + 126, 119, 163, 95, 243, 248, 88, 169, 239, 190, 127, 251, // ~w._..X..... + 205, 137, 122, 246, 151, 23, 106, 26, 167, 105, 161, 86, // ..z...j..i.V + 219, 162, 84, 69, 25, 231, 165, 186, 90, 150, 11, 213, // ..TE....Z... + 143, 55, 203, 227, 190, 90, 174, 85, 150, 207, 146, 92, // .7...Z.U.... + 149, 153, 42, 146, 252, 50, 81, 229, 34, 81, 241, 102, // ..*..2Q."Q.f + 163, 226, 82, 197, 235, 27, 245, 215, 215, 47, 30, 61, // ..R....../.= + 234, 111, 139, 4, 131, 243, 229, 180, 236, 63, 126, 180, // .o.......?~. + 92, 109, 50, 128, 185, 85, 139, 161, 202, 147, 53, 70, // .m2..U....5F + 15, 21, 58, 188, 41, 227, 50, 145, 210, 55, 23, 23, // ..:.).2..7.. + 201, 180, 148, 226, 235, 228, 98, 168, 22, 229, 42, 29, // ......b...*. + 170, 215, 217, 182, 196, 68, 59, 117, 145, 103, 43, 165, // .....D;u.g+. + 250, 246, 241, 249, 118, 61, 75, 19, 251, 167, 2, 64, // ....v=K....@ + 31, 77, 179, 53, 48, 124, 193, 47, 117, 170, 110, 31, // .M.50|./u.n. + 41, 53, 205, 230, 39, 106, 147, 103, 27, 84, 60, 21, // )5..'j.g.T<. + 32, 63, 62, 41, 46, 231, 106, 154, 198, 69, 113, 250, // ?>)..j..Eq. + 229, 173, 52, 217, 242, 180, 83, 215, 171, 116, 93, 156, // ..4...S..t]. + 246, 22, 101, 185, 57, 57, 62, 190, 186, 186, 178, 175, // ..e.99>..... + 124, 59, 203, 231, 199, 158, 227, 56, 199, 24, 214, 83, // |;.....8...S + 23, 203, 52, 61, 237, 173, 179, 117, 210, 83, 151, 203, // ..4=...u.S.. + 228, 234, 207, 217, 245, 105, 207, 81, 142, 242, 2, 252, // .....i.Q.... + 245, 184, 192, 236, 99, 98, 93, 45, 103, 229, 226, 180, // ....cb]-g... + 231, 218, 97, 85, 117, 218, 155, 110, 115, 172, 180, 124, // ..aUu..ns..| + 158, 165, 89, 222, 123, 170, 158, 108, 98, 144, 208, 244, // ..Y.{..lb... + 79, 151, 235, 100, 26, 111, 78, 123, 121, 134, 245, 244, // O..d.oN{y... + 218, 213, 63, 101, 203, 117, 93, 63, 59, 237, 189, 154, // ..?e.u]?;... + 216, 225, 36, 80, 190, 61, 9, 166, 182, 51, 177, 236, // ..$P.=...3.. + 48, 240, 236, 48, 178, 240, 172, 92, 219, 117, 89, 88, // 0..0.....uYX + 160, 102, 226, 79, 237, 48, 4, 102, 174, 237, 120, 182, // .f.O.0.f..x. + 63, 25, 75, 43, 26, 83, 219, 115, 125, 60, 120, 99, // ?.K+.S.s}..."|...E + 217, 0, 167, 1, 123, 250, 227, 16, 70, 113, 185, 190, // ....{...Fq.. + 200, 126, 111, 86, 17, 28, 35, 3, 249, 153, 130, 17, // .~oV..#..... + 96, 179, 227, 197, 180, 1, 163, 138, 161, 52, 117, 227, // `........4u. + 208, 131, 134, 140, 28, 234, 250, 216, 143, 90, 29, 156, // .........Z.. + 170, 131, 95, 15, 119, 95, 121, 46, 233, 58, 81, 19, // .._.w_y..:Q. + 77, 87, 119, 140, 111, 253, 4, 128, 120, 248, 121, 101, // MWw.o...x.ye + 77, 44, 202, 195, 2, 242, 54, 190, 228, 199, 153, 235, // M,....6..... + 189, 27, 3, 137, 59, 68, 63, 207, 210, 242, 247, 70, // ....;D?....F + 116, 46, 93, 65, 83, 195, 212, 117, 236, 208, 18, 234, // t.]AS..u.... + 191, 116, 161, 24, 120, 90, 144, 10, 47, 39, 236, 225, // .t..xZ../'.. + 185, 210, 207, 147, 174, 103, 28, 116, 135, 58, 139, 108, // .....g.t.:.l + 149, 252, 222, 168, 227, 137, 68, 122, 233, 152, 190, 198, // ......Dz.... + 226, 39, 140, 86, 32, 254, 108, 66, 83, 19, 122, 85, // .'.V .lBS.zU + 49, 156, 184, 202, 121, 89, 145, 233, 85, 96, 135, 138, // 1...yY..U`.. + 132, 187, 4, 29, 97, 144, 166, 112, 111, 17, 26, 67, // ....a..po..C + 39, 80, 109, 59, 37, 159, 103, 210, 209, 130, 11, 25, // 'Pm;%.g..... + 161, 163, 85, 117, 180, 90, 93, 116, 121, 65, 116, 166, // ..Uu.Z]tyAt. + 108, 151, 152, 0, 53, 251, 0, 223, 121, 238, 34, 144, // l...5...y.". + 9, 219, 189, 172, 166, 155, 6, 244, 142, 51, 190, 34, // .........3." + 119, 193, 88, 225, 114, 139, 153, 74, 184, 89, 196, 151, // w.X.r..J.Y.. + 191, 59, 110, 194, 9, 132, 138, 178, 251, 142, 37, 145, // .;n.......%. + 242, 128, 52, 24, 161, 154, 53, 239, 216, 182, 130, 109, // ..4...5....m + 56, 115, 199, 207, 132, 245, 242, 65, 83, 225, 57, 44, // 8s.....AS.9, + 69, 151, 174, 183, 215, 0, 27, 34, 109, 103, 209, 94, // E......"mg.^ + 131, 86, 172, 241, 187, 253, 250, 72, 48, 88, 96, 129, // .V.....H0X`. + 156, 105, 97, 77, 238, 88, 153, 56, 47, 252, 223, 27, // .iaM.X.8/... + 233, 133, 26, 145, 44, 28, 132, 54, 86, 199, 147, 135, // ....,..6V... + 149, 37, 124, 9, 65, 32, 121, 238, 210, 99, 135, 61, // .%|.A y..c.= + 193, 197, 118, 61, 45, 151, 217, 90, 189, 77, 174, 203, // ..v=-..Z.M.. + 119, 113, 186, 77, 6, 183, 151, 252, 26, 98, 179, 82, // wq.M.....b.R + 94, 172, 135, 106, 182, 44, 226, 243, 52, 153, 13, 213, // ^..j.,..4... + 38, 141, 167, 201, 34, 75, 101, 59, 82, 222, 108, 208, // &..."Ke;R.l. + 39, 158, 205, 178, 245, 235, 229, 124, 81, 154, 242, 203, // '......|Q... + 228, 130, 197, 178, 68, 151, 213, 18, 195, 87, 241, 53, // ....D....W.5 + 64, 149, 201, 6, 197, 109, 90, 238, 142, 204, 198, 131, // @....mZ..... + 91, 145, 247, 231, 115, 153, 230, 207, 243, 15, 216, 144, // [...s....... + 84, 27, 156, 65, 255, 124, 110, 93, 45, 150, 101, 210, // T..A.|n]-.e. + 63, 122, 140, 190, 245, 118, 103, 48, 56, 34, 211, 110, // ?z...vg08".n + 213, 242, 66, 13, 56, 191, 58, 61, 85, 253, 245, 118, // ..B.8.:=U..v + 117, 158, 228, 253, 35, 53, 93, 36, 211, 143, 192, 125, // u...#5]$...} + 240, 149, 76, 252, 149, 204, 252, 149, 44, 230, 232, 177, // ..L.....,... + 218, 13, 213, 251, 15, 2, 143, 200, 168, 191, 253, 13, // ............ + 67, 221, 190, 70, 74, 158, 220, 199, 53, 94, 21, 36, // C..FJ...5^.$ + 32, 85, 209, 103, 208, 44, 230, 82, 47, 65, 105, 204, // U.g.,.R/Ai. + 247, 177, 85, 130, 29, 122, 171, 63, 254, 81, 93, 170, // ..U..z.?.Q]. + 39, 164, 194, 81, 171, 107, 158, 204, 44, 215, 113, 224, // '..Q.k..,.q. + 240, 184, 41, 148, 71, 72, 83, 103, 108, 124, 173, 199, // ..).GHSgl|.. + 62, 229, 124, 159, 59, 118, 215, 160, 191, 2, 222, 92, // >.|.;v...... + 164, 189, 138, 203, 233, 98, 112, 252, 191, 246, 87, 255, // .....bp...W. + 99, 15, 236, 175, 142, 142, 143, 154, 78, 179, 229, 124, // c.......N..| + 89, 114, 31, 184, 82, 127, 82, 171, 247, 238, 7, 59, // Yr..R.R....; + 77, 214, 115, 72, 224, 137, 114, 154, 94, 217, 122, 186, // M.sH..r.^.z. + 136, 215, 115, 80, 90, 37, 151, 66, 124, 65, 51, 77, // ..sPZ%.B|A3M + 74, 224, 199, 58, 27, 251, 221, 121, 82, 218, 66, 230, // J..:...yR.B. + 102, 13, 119, 185, 163, 7, 170, 251, 184, 100, 214, 175, // f.w......d.. + 4, 236, 87, 131, 13, 20, 53, 249, 54, 205, 226, 114, // ..W...5.6..r + 0, 114, 31, 11, 151, 142, 236, 50, 251, 118, 121, 157, // .r.....2.vy. + 204, 6, 26, 119, 51, 100, 87, 241, 226, 98, 61, 184, // ...w3dW..b=. + 108, 72, 113, 24, 11, 65, 83, 102, 208, 165, 127, 189, // lHq..ASf.... + 31, 114, 158, 148, 219, 124, 173, 77, 196, 163, 39, 179, // .r...|.M..'. + 229, 165, 177, 17, 189, 139, 52, 185, 86, 87, 214, 197, // ......4.VW.. + 54, 77, 21, 216, 190, 42, 172, 41, 212, 24, 251, 110, // 6M...*.)...n + 209, 201, 100, 102, 216, 163, 138, 69, 60, 203, 174, 172, // ..df...E<... + 98, 165, 190, 188, 61, 159, 239, 122, 79, 1, 244, 203, // b...=..zO... + 219, 90, 75, 200, 99, 99, 127, 54, 241, 186, 2, 190, // .ZK.cc.6.... + 92, 83, 199, 45, 153, 227, 34, 91, 151, 214, 58, 203, // .S.-.."[..:. + 87, 144, 196, 50, 135, 32, 66, 57, 212, 230, 198, 114, // W..2. B9...r + 107, 1, 80, 16, 138, 34, 69, 181, 136, 69, 7, 25, // k.P.."E..E.. + 211, 101, 158, 199, 55, 150, 143, 198, 205, 181, 229, 169, // .e..7....... + 18, 74, 174, 171, 66, 84, 201, 211, 117, 209, 123, 218, // .J..BT..u.{. + 194, 106, 247, 228, 248, 248, 233, 143, 66, 212, 39, 203, // .j......B.'. + 245, 102, 91, 138, 162, 195, 48, 10, 45, 255, 246, 55, // .f[...0.-..7 + 213, 231, 168, 254, 174, 54, 11, 104, 170, 138, 59, 77, // .....6.h..;M + 94, 212, 200, 183, 97, 12, 4, 17, 53, 252, 218, 81, // ^...a...5..Q + 23, 80, 198, 231, 142, 162, 205, 98, 124, 189, 83, 210, // .P.....b|.S. + 175, 146, 52, 84, 86, 197, 157, 178, 109, 27, 184, 193, // ..4TV...m... + 152, 104, 88, 134, 70, 66, 206, 46, 117, 184, 18, 16, // .hX.FB..u... + 186, 226, 128, 225, 14, 169, 8, 106, 129, 100, 136, 184, // .......j.d.. + 246, 41, 48, 34, 81, 26, 139, 118, 210, 180, 4, 104, // .)0"Q..v...h + 185, 200, 166, 219, 226, 36, 219, 150, 194, 14, 218, 247, // .....$...... + 122, 197, 39, 48, 220, 69, 150, 163, 178, 180, 226, 52, // z.'0.E.....4 + 205, 174, 48, 97, 221, 6, 134, 8, 12, 242, 163, 174, // ..0a........ + 236, 144, 189, 215, 158, 149, 30, 167, 121, 218, 193, 60, // ........y..< + 55, 66, 34, 102, 245, 87, 144, 146, 244, 87, 145, 18, // 7B"f.W...W.. + 149, 93, 38, 249, 69, 74, 129, 158, 230, 89, 154, 210, // .]&.EJ...Y.. + 39, 221, 164, 112, 99, 224, 166, 118, 111, 39, 42, 116, // '..pc..vo'*t + 254, 229, 113, 45, 77, 130, 126, 45, 78, 242, 253, 184, // ..q-M.~-N... + 235, 114, 222, 36, 41, 172, 250, 65, 167, 147, 109, 216, // .r.$)..A..m. + 163, 104, 188, 79, 199, 111, 148, 217, 139, 117, 9, 45, // .h.O.o...u.- + 190, 166, 69, 186, 166, 134, 139, 189, 64, 229, 0, 246, // ..E.....@... + 242, 79, 157, 167, 19, 117, 253, 128, 57, 211, 102, 67, // .O...u..9.fC + 224, 13, 246, 140, 217, 209, 1, 43, 80, 8, 198, 135, // .......+P... + 101, 213, 176, 198, 136, 94, 37, 137, 109, 238, 24, 187, // e....^%.m... + 208, 136, 163, 219, 34, 117, 116, 88, 232, 42, 201, 126, // ...."utX.*.~ + 64, 248, 122, 7, 117, 81, 11, 146, 161, 35, 60, 193, // @.z.uQ...#<. + 102, 112, 217, 68, 60, 186, 186, 81, 215, 247, 206, 135, // fp.D<..Q.... + 157, 210, 139, 19, 40, 172, 32, 89, 181, 30, 63, 101, // ....(. Y..?e + 133, 251, 65, 243, 242, 232, 62, 102, 94, 45, 225, 108, // ..A...>f^-.l + 14, 48, 179, 195, 57, 144, 43, 93, 78, 63, 238, 209, // .0..9.+]N?.. + 255, 11, 227, 164, 235, 110, 231, 115, 244, 248, 66, 87, // .....n.s..BW + 131, 159, 244, 125, 231, 40, 146, 72, 125, 112, 180, 95, // ...}.(.H}p._ + 105, 25, 189, 95, 51, 170, 204, 187, 163, 202, 60, 94, // i.._3.....<^ + 107, 185, 191, 182, 66, 25, 215, 174, 209, 35, 187, 252, // k...B....#.. + 61, 223, 150, 37, 214, 34, 38, 175, 167, 31, 122, 21, // =..%."&...z. + 206, 154, 217, 44, 237, 186, 134, 168, 173, 140, 11, 43, // ...,.......+ + 130, 241, 113, 93, 109, 122, 138, 69, 190, 92, 127, 180, // ..q]mz.E.... + 28, 101, 152, 182, 65, 232, 214, 114, 20, 90, 82, 140, // .e..A..r.ZR. + 10, 122, 85, 65, 112, 132, 4, 67, 65, 149, 148, 151, // .zUAp..CA... + 164, 175, 53, 101, 152, 88, 168, 217, 54, 143, 229, 25, // ..5e.X..6... + 75, 87, 73, 92, 36, 22, 212, 15, 18, 115, 72, 118, // KWI.$....sHv + 116, 21, 80, 152, 3, 5, 253, 213, 195, 220, 84, 218, // t.P.......T. + 66, 184, 213, 83, 113, 190, 140, 45, 113, 201, 194, 119, // B..Sq..-q..w + 67, 60, 17, 30, 109, 112, 164, 195, 98, 57, 155, 37, // C<..mp..b9.% + 8, 58, 97, 94, 16, 230, 214, 139, 135, 89, 86, 102, // .:a^.....YVf + 73, 86, 114, 9, 124, 11, 61, 175, 33, 200, 121, 154, // IVr.|.=.!.y. + 129, 211, 11, 43, 4, 69, 66, 189, 148, 11, 40, 194, // ...+.EB...(. + 222, 234, 77, 240, 100, 188, 165, 65, 179, 139, 122, 67, // ..M.d..A..zC + 133, 123, 151, 223, 123, 138, 168, 22, 248, 62, 133, 108, // .{..{....>.l + 106, 190, 29, 176, 54, 101, 9, 120, 3, 137, 240, 181, // j...6e.x.... + 76, 50, 140, 209, 78, 238, 180, 137, 127, 171, 224, 65, // L2..N......A + 239, 4, 234, 16, 66, 83, 12, 33, 68, 53, 160, 37, // ....BS.!D5.% + 240, 247, 13, 17, 133, 106, 15, 105, 12, 222, 67, 17, // .....j.i..C. + 70, 179, 11, 41, 196, 227, 206, 243, 229, 76, 241, 131, // F..).....L.. + 66, 80, 64, 82, 230, 241, 6, 159, 43, 216, 248, 190, // BP@R....+... + 102, 85, 26, 159, 39, 105, 39, 62, 233, 88, 249, 202, // fU..'i'>.X.. + 136, 116, 157, 223, 138, 66, 39, 246, 105, 149, 204, 150, // .t...B'.i... + 219, 21, 45, 183, 89, 193, 178, 76, 19, 81, 119, 2, // ..-.Y..L.Qw. + 223, 15, 125, 218, 160, 57, 102, 49, 144, 245, 13, 245, // ..}..9f1.... + 182, 234, 72, 143, 59, 100, 34, 254, 44, 140, 25, 220, // ..H.;d".,... + 10, 248, 97, 165, 87, 237, 29, 6, 86, 60, 84, 75, // ..a.W...V.Cz..' + 12, 140, 43, 91, 245, 167, 170, 52, 160, 55, 89, 67, // ..+[...4.7YC + 106, 155, 56, 151, 61, 225, 161, 201, 242, 76, 63, 218, // j.8.=....L?. + 83, 6, 221, 216, 168, 80, 2, 170, 25, 90, 241, 175, // S....P...Z.. + 193, 110, 64, 93, 170, 131, 222, 122, 156, 217, 226, 104, // .n@]...z...h + 116, 237, 114, 145, 172, 77, 77, 53, 76, 183, 180, 66, // t.r..MM5L..B + 223, 58, 216, 253, 66, 19, 235, 200, 16, 13, 11, 104, // .:..B......h + 155, 77, 77, 194, 147, 170, 38, 108, 135, 39, 85, 101, // .MM...&l.'Ue + 224, 124, 182, 77, 60, 16, 135, 252, 180, 45, 202, 229, // .|.M<....-.. + 197, 77, 37, 115, 29, 1, 212, 2, 91, 249, 68, 6, // .M%s....[.D. + 25, 116, 128, 144, 95, 124, 85, 194, 41, 146, 88, 36, // .t.._|U.).X$ + 171, 229, 57, 98, 33, 93, 219, 182, 12, 58, 142, 214, // ..9b!]...:.. + 107, 219, 177, 148, 22, 187, 158, 32, 123, 1, 133, 193, // k...... {... + 231, 174, 101, 168, 167, 231, 7, 3, 84, 106, 19, 101, // ..e.....Tj.e + 100, 167, 180, 119, 212, 114, 78, 25, 71, 128, 138, 122, // d..w.rN.G..z + 176, 90, 78, 199, 108, 128, 3, 75, 184, 23, 162, 48, // .ZN.l..K...0 + 182, 124, 123, 160, 234, 158, 253, 120, 189, 92, 209, 149, // .|{....x.... + 240, 89, 188, 75, 127, 199, 253, 181, 22, 253, 174, 228, // .Y.K........ + 127, 151, 129, 52, 203, 169, 152, 174, 193, 109, 6, 153, // ...4.....m.. + 231, 250, 40, 239, 89, 145, 116, 100, 88, 106, 206, 203, // ..(.Y.tdXj.. + 181, 22, 222, 215, 201, 197, 128, 2, 215, 146, 92, 57, // ...........9 + 218, 59, 109, 187, 50, 184, 65, 196, 75, 241, 116, 89, // .;m.2.A.K.tY + 34, 176, 80, 197, 234, 164, 221, 180, 87, 1, 202, 183, // ".P.....W... + 29, 102, 182, 15, 201, 169, 33, 49, 84, 220, 27, 218, // .f....!1T... + 246, 181, 239, 185, 193, 135, 80, 190, 205, 187, 122, 6, // ......P...z. + 236, 246, 54, 237, 181, 150, 181, 182, 205, 111, 115, 196, // ..6......os. + 92, 216, 148, 215, 207, 203, 85, 2, 43, 62, 208, 65, // ......U.+>.A + 65, 77, 3, 104, 86, 85, 182, 205, 219, 18, 91, 235, // AM.hVU....[. + 228, 189, 45, 131, 163, 161, 114, 33, 221, 122, 35, 88, // ..-...r!.z#X + 239, 249, 155, 232, 3, 131, 154, 205, 172, 193, 69, 99, // ..........Ec + 221, 70, 68, 250, 13, 149, 79, 64, 90, 197, 238, 26, // .FD...O@Z... + 107, 113, 141, 233, 242, 18, 106, 1, 233, 72, 242, 18, // kq....j..H.. + 197, 90, 51, 126, 6, 1, 15, 58, 199, 248, 188, 200, // .Z3~...:.... + 210, 109, 73, 47, 137, 249, 232, 234, 26, 155, 154, 172, // .mI/........ + 69, 57, 2, 170, 70, 68, 234, 235, 106, 125, 166, 140, // E9..FD..j}.. + 199, 141, 21, 245, 14, 154, 228, 246, 126, 7, 42, 210, // ........~.*. + 85, 62, 248, 197, 41, 121, 27, 52, 16, 49, 145, 0, // U>..)y.4.1.. + 234, 130, 218, 67, 55, 222, 66, 62, 12, 100, 236, 211, // ...C7.B>.d.. + 44, 81, 193, 122, 23, 160, 99, 130, 218, 153, 167, 243, // ,Q.z..c..... + 125, 87, 206, 42, 113, 224, 174, 254, 58, 199, 62, 231, // }W.*q...:.>. + 163, 46, 86, 50, 214, 142, 10, 196, 153, 51, 144, 169, // ..V2.....3.. + 93, 60, 247, 35, 45, 215, 47, 241, 134, 193, 122, 15, // ]<.#-./...z. + 111, 43, 168, 235, 239, 245, 87, 66, 196, 86, 183, 187, // o+....WB.V.. + 29, 235, 112, 173, 211, 75, 140, 67, 246, 177, 54, 13, // ..p..K.C..6. + 40, 158, 152, 226, 69, 188, 76, 107, 219, 160, 35, 191, // (...E.Lk..#. + 72, 153, 206, 125, 227, 107, 147, 100, 45, 118, 85, 162, // H..}.k.d-vU. + 79, 86, 241, 165, 13, 43, 180, 173, 104, 205, 114, 124, // OV...+..h.r| + 124, 31, 114, 171, 212, 242, 1, 219, 169, 247, 179, 37, // |.r........% + 55, 16, 251, 88, 110, 170, 238, 29, 131, 170, 93, 123, // 7..Xn.....]{ + 203, 243, 79, 176, 3, 133, 211, 102, 5, 60, 245, 230, // ..O....f.<.. + 62, 32, 134, 189, 171, 178, 218, 164, 116, 194, 7, 110, // > ......t..n + 99, 159, 62, 91, 223, 80, 160, 37, 215, 33, 86, 112, // c.>[.P.%.!Vp + 4, 31, 213, 20, 17, 227, 26, 81, 28, 223, 132, 170, // .......Q.... + 114, 177, 44, 248, 126, 52, 177, 247, 230, 121, 120, 169, // r.,.~4...yx. + 129, 214, 136, 7, 57, 114, 208, 39, 105, 79, 80, 153, // ....9r.'iOP. + 133, 221, 94, 220, 78, 67, 123, 200, 109, 85, 2, 188, // ..^.NC{.mU.. + 154, 53, 2, 220, 125, 21, 160, 61, 103, 119, 83, 124, // .5..}..=gwS| + 55, 218, 222, 67, 177, 138, 159, 205, 140, 69, 110, 101, // 7..C.....Ene + 235, 244, 166, 247, 244, 57, 17, 169, 98, 213, 253, 1, // .....9..b... + 245, 123, 232, 158, 137, 154, 247, 223, 41, 243, 175, 122, // .{......)..z + 231, 220, 121, 125, 124, 32, 78, 223, 7, 175, 204, 27, // ..y}| N..... + 102, 190, 50, 142, 108, 111, 204, 183, 194, 237, 51, 64, // f.2.lo....3@ + 57, 47, 231, 137, 191, 19, 189, 28, 75, 186, 132, 147, // 9/......K... + 242, 244, 206, 227, 75, 245, 86, 71, 215, 105, 250, 185, // ....K.VG.i.. + 60, 248, 67, 33, 189, 183, 159, 165, 251, 233, 33, 142, // <.C!......!. + 244, 179, 186, 253, 204, 196, 86, 5, 80, 230, 174, 17, // ......V.P... + 252, 121, 79, 77, 14, 200, 207, 93, 129, 106, 63, 182, // .yOM...].j?. + 30, 234, 98, 21, 217, 238, 5, 170, 218, 73, 188, 204, // ..b......I.. + 230, 116, 139, 191, 226, 25, 65, 135, 135, 76, 98, 240, // .t....A..Lb. + 177, 93, 153, 37, 23, 197, 211, 39, 242, 14, 229, 169, // .].%...'.... + 157, 166, 22, 226, 25, 203, 189, 37, 107, 79, 40, 78, // .......%kO(N + 143, 245, 27, 255, 147, 63, 0, 138, 41, 91, 43, 200, // .....?..)[+. + 102, 158, 46, 241, 117, 226, 214, 149, 250, 213, 11, 236, // f...u....... + 193, 230, 250, 49, 20, 90, 3, 124, 114, 172, 193, 207, // ...1.Z.|r... + 213, 18, 236, 126, 25, 223, 36, 249, 15, 94, 79, 205, // ...~..$..^O. + 226, 50, 182, 214, 241, 42, 49, 117, 202, 235, 117, 251, // .2...*1u..u. + 184, 214, 161, 94, 46, 122, 137, 232, 24, 225, 172, 176, // ...^.z...... + 53, 39, 63, 158, 29, 121, 67, 215, 30, 243, 100, 119, // 5'?..yC...dw + 226, 62, 67, 76, 55, 30, 202, 135, 131, 255, 221, 161, // .>CL7....... + 139, 63, 199, 14, 198, 103, 65, 236, 218, 65, 48, 148, // .?...gA..A0. + 15, 105, 178, 92, 38, 40, 60, 179, 163, 9, 254, 76, // .i..&(<....L + 111, 207, 30, 163, 11, 36, 207, 118, 153, 32, 16, 219, // o....$.v. .. + 99, 64, 118, 77, 127, 219, 101, 18, 195, 248, 93, 104, // c@vM..e...]h + 135, 163, 152, 137, 56, 227, 145, 25, 102, 51, 117, 99, // ....8...f3uc + 28, 157, 5, 246, 200, 127, 55, 130, 240, 160, 57, 194, // ......7...9. + 159, 52, 59, 67, 121, 224, 97, 96, 64, 136, 33, 254, // .4;Cy.a`@.!. + 234, 6, 64, 28, 243, 116, 42, 8, 159, 117, 134, 240, // ..@..t*..u.. + 112, 209, 31, 250, 67, 123, 20, 225, 175, 174, 20, 4, // p...C{...... + 99, 219, 155, 224, 79, 87, 18, 77, 252, 227, 186, 38, // c...OW.M...& + 250, 67, 87, 203, 226, 206, 152, 91, 244, 142, 196, 33, // .CW....[...! + 93, 70, 67, 249, 208, 40, 7, 67, 30, 109, 185, 238, // ]FC..(.C.m.. + 157, 134, 134, 160, 255, 221, 59, 126, 144, 242, 36, 171, // ......;~..$. + 38, 238, 59, 247, 46, 225, 193, 13, 129, 117, 118, 112, // &.;......uvp + 122, 76, 14, 214, 188, 99, 162, 212, 93, 12, 48, 0, // zL...c..].0. + 11, 5, 250, 128, 17, 119, 23, 230, 114, 172, 63, 74, // .....w..r.?J + 177, 106, 219, 141, 91, 212, 65, 53, 212, 220, 13, 90, // .j..[.A5...Z + 84, 100, 85, 96, 7, 163, 138, 35, 53, 225, 93, 75, // TdU`...#5.]K + 63, 156, 49, 23, 169, 98, 103, 67, 124, 75, 179, 37, // ?.1..bgC|K.% + 58, 35, 91, 218, 140, 102, 11, 187, 189, 3, 39, 219, // :#[..f....'. + 162, 1, 70, 186, 33, 200, 0, 172, 68, 104, 26, 137, // ..F.!...Dh.. + 98, 139, 111, 187, 238, 176, 43, 123, 142, 94, 133, 16, // b.o...+{.^.. + 248, 120, 110, 254, 201, 177, 216, 99, 99, 6, 94, 101, // .xn....cc.^e + 179, 243, 109, 113, 208, 24, 60, 18, 107, 0, 167, 80, // ..mq..<.k..P + 32, 46, 225, 161, 158, 219, 251, 187, 109, 131, 116, 57, // .......m.t9 + 185, 166, 247, 60, 212, 209, 157, 76, 38, 199, 210, 138, // ...<...L&... + 174, 48, 32, 155, 235, 158, 186, 49, 223, 29, 179, 18, // .0 ....1.... + 133, 158, 114, 39, 12, 10, 180, 77, 49, 190, 145, 94, // ..r'...M1..^ + 235, 120, 90, 20, 189, 167, 202, 94, 157, 255, 80, 148, // .xZ....^..P. + 142, 54, 49, 127, 248, 54, 152, 192, 143, 61, 222, 153, // .61..6...=.. + 106, 183, 170, 126, 254, 220, 105, 85, 123, 166, 218, 241, // j..~..iU{... + 159, 121, 254, 164, 174, 246, 77, 181, 235, 78, 188, 231, // .y....M..N.. + 223, 162, 186, 178, 59, 143, 96, 77, 234, 144, 142, 126, // ....;.`M...~ + 200, 108, 30, 6, 142, 178, 60, 47, 60, 34, 122, 109, // .l....j.+.E + 218, 201, 68, 222, 152, 4, 107, 230, 212, 168, 101, 233, // ..D...k...e. + 205, 60, 91, 119, 176, 67, 248, 34, 187, 88, 60, 51, // .<[w.C.".X<3 + 133, 7, 43, 113, 198, 202, 133, 44, 64, 205, 17, 143, // ..+q...,@... + 34, 168, 117, 69, 229, 157, 9, 162, 209, 16, 230, 128, // ".uE........ + 162, 140, 200, 20, 206, 12, 50, 195, 12, 55, 148, 29, // ......2..7.. + 89, 136, 100, 174, 56, 186, 236, 41, 144, 5, 24, 69, // Y.d.8..)...E + 40, 68, 68, 21, 12, 244, 165, 53, 66, 217, 177, 1, // (DD....5B... + 205, 165, 229, 113, 164, 150, 20, 245, 37, 222, 157, 136, // ...q....%... + 61, 242, 100, 6, 26, 28, 223, 29, 171, 158, 164, 50, // =.d........2 + 126, 2, 119, 159, 202, 230, 123, 136, 65, 148, 27, 192, // ~.w...{.A... + 209, 98, 36, 96, 248, 129, 148, 66, 174, 35, 98, 15, // .b$`...B.#b. + 111, 28, 112, 70, 93, 158, 120, 236, 61, 18, 210, 129, // o.pF].x.=... + 94, 158, 148, 71, 154, 140, 232, 227, 8, 73, 35, 150, // ^..G.....I#. + 195, 72, 198, 10, 182, 81, 32, 244, 117, 184, 114, 159, // .H...Q .u.r. + 125, 124, 201, 68, 115, 133, 208, 88, 151, 39, 54, 213, // }|.Ds..X.'6. + 25, 19, 182, 199, 181, 251, 238, 68, 125, 14, 253, 199, // .......D}... + 130, 54, 5, 73, 49, 115, 26, 74, 0, 30, 170, 145, // .6.I1s.J.... + 88, 98, 20, 71, 66, 116, 244, 96, 194, 177, 148, 161, // Xb.GBt.`.... + 198, 129, 47, 101, 153, 210, 159, 16, 61, 148, 81, 239, // ../e....=.Q. + 201, 114, 132, 97, 84, 239, 145, 144, 30, 168, 50, 225, // .r.aT.....2. + 25, 229, 49, 209, 242, 185, 252, 145, 116, 137, 72, 161, // ..1.....t.H. + 17, 96, 128, 137, 158, 26, 145, 135, 62, 68, 42, 82, // .`......>D*R + 35, 98, 4, 177, 255, 172, 5, 16, 238, 72, 216, 199, // #b.......H.. + 185, 41, 32, 100, 48, 203, 17, 215, 224, 130, 205, 10, // .) d0....... + 142, 133, 148, 66, 80, 168, 56, 41, 152, 48, 81, 161, // ...BP.8).0Q. + 246, 77, 35, 160, 19, 76, 68, 4, 249, 182, 51, 12, // .M#..LD...3. + 132, 255, 148, 5, 176, 130, 112, 153, 199, 22, 10, 69, // ......p....E + 29, 225, 144, 67, 219, 197, 69, 96, 40, 139, 161, 172, // ...C..E`(... + 205, 231, 58, 177, 102, 138, 152, 46, 123, 88, 220, 103, // ..:.f...{X.g + 225, 15, 213, 166, 189, 33, 217, 221, 32, 148, 178, 95, // .....!.. .._ + 137, 211, 88, 86, 226, 209, 178, 251, 190, 22, 173, 168, // ..XV........ + 162, 185, 47, 134, 129, 153, 188, 232, 225, 177, 222, 211, // ../......... + 188, 16, 91, 6, 15, 60, 22, 113, 38, 191, 2, 138, // ..[..<.q&... + 34, 250, 144, 23, 162, 48, 90, 112, 17, 153, 141, 68, // "....0Zp...D + 156, 124, 153, 223, 19, 152, 40, 67, 92, 181, 64, 211, // .|....(C..@. + 27, 143, 209, 255, 179, 214, 49, 246, 5, 55, 81, 163, // ......1..7Q. + 145, 40, 151, 47, 226, 138, 89, 52, 62, 128, 169, 93, // .(./..Y4>..] + 63, 104, 70, 248, 62, 235, 61, 87, 234, 5, 31, 96, // ?hF.>.=W...` + 203, 156, 168, 177, 212, 135, 130, 143, 79, 252, 125, 98, // ........O.}b + 172, 165, 39, 18, 140, 67, 145, 54, 49, 9, 99, 196, // ..'..C.61.c. + 19, 188, 59, 128, 57, 49, 42, 136, 100, 118, 172, 51, // ..;.91*.dv.3 + 24, 115, 205, 99, 129, 37, 237, 247, 174, 193, 111, 27, // .s.c.%....o. + 35, 81, 127, 109, 84, 128, 31, 76, 8, 3, 89, 64, // #Q.mT..L..Y@ + 164, 124, 155, 242, 196, 33, 38, 66, 107, 15, 52, 13, // .|...!&Bk.4. + 77, 189, 23, 214, 165, 192, 169, 161, 120, 94, 171, 12, // M.......x^.. + 122, 4, 34, 70, 128, 62, 145, 213, 235, 153, 52, 181, // z."F.>....4. + 116, 25, 98, 57, 145, 62, 17, 95, 144, 82, 6, 164, // t.b9.>._.R.. + 254, 176, 149, 247, 77, 106, 153, 39, 29, 33, 246, 176, // ....Mj.'.!.. + 229, 30, 205, 51, 237, 56, 24, 97, 5, 150, 23, 88, // ...3.8.a...X + 1, 12, 60, 98, 115, 26, 120, 106, 56, 196, 192, 162, // ..2.}..C*.)z + 90, 129, 200, 56, 103, 193, 50, 69, 121, 16, 31, 61, // Z..8g.2Ey..= + 15, 70, 145, 209, 29, 240, 115, 164, 253, 214, 100, 216, // .F....s...d. + 66, 94, 189, 10, 244, 158, 138, 146, 168, 126, 37, 213, // B^.......~%. + 249, 37, 28, 84, 247, 170, 78, 32, 254, 87, 171, 78, // .%.T..N .W.N + 160, 141, 158, 182, 35, 13, 194, 15, 178, 40, 244, 37, // ....#....(.% + 228, 160, 210, 45, 72, 173, 41, 95, 59, 4, 18, 72, // ...-H.)_;..H + 97, 97, 180, 34, 92, 87, 32, 38, 10, 235, 162, 21, // aa.".W &.... + 134, 100, 211, 42, 210, 86, 69, 83, 65, 210, 129, 102, // .d.*.VESA..f + 121, 22, 133, 157, 175, 103, 44, 77, 36, 225, 166, 40, // y....g,M$..( + 141, 216, 168, 145, 0, 0, 62, 254, 130, 42, 232, 203, // ......>..*.. + 68, 116, 86, 232, 54, 226, 94, 150, 155, 77, 95, 164, // DtV.6.^..M_. + 49, 224, 42, 101, 169, 30, 215, 31, 77, 105, 4, 57, // 1.*e....Mi.9 + 115, 40, 223, 19, 114, 142, 223, 36, 22, 24, 29, 2, // s(..r..$.... + 31, 82, 132, 228, 157, 168, 41, 217, 46, 227, 70, 22, // .R....)...F. + 217, 10, 242, 70, 130, 86, 202, 90, 124, 75, 106, 112, // ...F.V.Z|Kjp + 10, 174, 90, 244, 11, 11, 231, 76, 72, 240, 243, 131, // ..Z....LH... + 84, 138, 96, 136, 104, 87, 125, 14, 230, 30, 192, 33, // T.`.hW}....! + 15, 44, 141, 46, 197, 139, 233, 246, 12, 63, 77, 45, // .,.......?M- + 73, 96, 113, 145, 40, 4, 242, 207, 35, 251, 125, 202, // I`q.(...#.}. + 76, 32, 205, 190, 98, 27, 73, 231, 78, 68, 48, 164, // L ..b.I.ND0. + 5, 114, 78, 154, 6, 66, 52, 217, 15, 136, 172, 131, // .rN..B4..... + 213, 161, 208, 103, 44, 94, 38, 148, 109, 4, 87, 38, // ...g,^&.m.W& + 148, 130, 90, 76, 68, 114, 248, 214, 136, 239, 2, 168, // ..ZLDr...... + 158, 252, 246, 133, 202, 244, 34, 174, 104, 201, 196, 34, // ......".h.." + 27, 24, 104, 45, 200, 192, 73, 133, 1, 53, 194, 17, // ..h-..I..5.. + 43, 57, 178, 130, 75, 138, 223, 194, 170, 214, 41, 182, // +9..K.....). + 207, 19, 12, 199, 24, 234, 9, 192, 64, 152, 20, 10, // ........@... + 186, 174, 248, 63, 78, 206, 127, 110, 32, 60, 244, 132, // ...?N..n <.. + 92, 228, 134, 150, 215, 33, 47, 11, 90, 142, 182, 205, // .....!/.Z... + 62, 47, 40, 76, 3, 249, 166, 85, 244, 44, 217, 143, // >/(L...U.,.. + 72, 33, 18, 74, 202, 6, 11, 43, 103, 21, 231, 30, // H!.J...+g... + 145, 40, 162, 87, 66, 108, 146, 152, 58, 204, 47, 212, // .(.WBl..:./. + 135, 98, 207, 49, 148, 237, 161, 46, 128, 188, 142, 152, // .b.1........ + 48, 106, 156, 108, 188, 40, 142, 40, 60, 143, 28, 137, // 0j.l.(.(<... + 24, 160, 108, 209, 208, 176, 85, 162, 187, 154, 197, 34, // ..l...U...." + 8, 199, 115, 126, 152, 87, 100, 205, 201, 246, 89, 18, // ..s~.Wd...Y. + 207, 146, 124, 112, 155, 102, 243, 108, 171, 47, 164, 234, // ..|p.f.l./.. + 131, 225, 55, 139, 236, 234, 205, 114, 150, 156, 199, 124, // ..7....r...| + 110, 30, 204, 105, 247, 189, 217, 181, 205, 41, 98, 185, // n..i.....)b. + 156, 126, 188, 81, 101, 182, 177, 28, 245, 179, 245, 62, // .~.Qe......> + 24, 127, 80, 215, 87, 157, 156, 169, 115, 30, 148, 122, // ..P.W...s..z + 60, 146, 111, 224, 243, 104, 184, 191, 73, 173, 145, 215, // <.o..h..I... + 223, 181, 243, 167, 98, 12, 187, 123, 180, 200, 247, 84, // ....b..{...T + 119, 142, 84, 37, 9, 210, 204, 196, 100, 61, 102, 218, // w.T%....d=f. + 116, 206, 105, 171, 220, 151, 71, 247, 31, 70, 53, 135, // t.i...G..F5. + 79, 117, 162, 91, 139, 34, 58, 23, 239, 139, 203, 163, // Ou.[.":..... + 93, 247, 208, 78, 14, 218, 3, 167, 57, 239, 122, 242, // ]..N....9.z. + 229, 173, 62, 107, 148, 155, 11, 237, 195, 198, 250, 92, // ..>k........ + 164, 57, 213, 216, 63, 248, 52, 199, 133, 76, 190, 224, // .9..?.4..L.. + 161, 114, 145, 164, 23, 86, 81, 130, 242, 211, 133, 74, // .r...VQ....J + 231, 39, 186, 62, 58, 120, 164, 154, 39, 64, 101, 121, // .'.>:x..'@ey + 153, 180, 206, 226, 120, 10, 208, 58, 75, 121, 40, 43, // ....x..:Ky(+ + 168, 158, 242, 192, 44, 123, 7, 99, 157, 179, 197, 214, // ....,{.c.... + 250, 103, 201, 101, 146, 102, 27, 230, 242, 242, 124, 241, // .g.e.f....|. + 85, 182, 158, 103, 60, 186, 127, 185, 60, 207, 227, 252, // U..g<...<... + 166, 123, 196, 211, 194, 197, 156, 91, 98, 98, 157, 126, // .{.....[bb.~ + 134, 194, 66, 35, 114, 101, 109, 174, 165, 190, 201, 29, // ..B#rem..... + 60, 120, 108, 214, 5, 45, 7, 117, 224, 66, 243, 58, // 31..MR.& + 120, 104, 146, 124, 235, 92, 161, 121, 158, 109, 55, 205, // xh.|...y.m7. + 145, 117, 157, 49, 214, 58, 9, 189, 155, 87, 100, 206, // .u.1.:...Wd. + 70, 205, 224, 157, 150, 28, 205, 125, 191, 125, 202, 186, // F......}.}.. + 169, 50, 140, 193, 245, 20, 214, 131, 9, 1, 81, 55, // .2........Q7 + 251, 167, 45, 254, 123, 9, 56, 17, 83, 44, 123, 53, // ..-.{.8.S,{5 + 193, 91, 57, 60, 66, 237, 154, 234, 63, 62, 152, 194, // .[9.. + 15, 116, 47, 151, 89, 154, 148, 146, 230, 178, 40, 44, // .t/.Y.....(, + 46, 34, 141, 111, 90, 69, 11, 194, 183, 238, 166, 191, // .".oZE...... + 116, 206, 28, 173, 118, 147, 152, 138, 207, 50, 54, 29, // t...v....26. + 24, 23, 188, 115, 96, 44, 92, 154, 92, 48, 27, 228, // ...s`,...0.. + 60, 131, 253, 88, 105, 139, 23, 57, 31, 96, 134, 70, // <..Xi..9.`.F + 94, 115, 48, 93, 229, 253, 119, 160, 180, 115, 184, 153, // ^s0]..w..s.. + 22, 89, 167, 104, 220, 232, 20, 14, 157, 175, 13, 105, // .Y.h.......i + 179, 110, 58, 227, 180, 217, 20, 123, 217, 205, 242, 217, // .n:....{.... + 169, 156, 185, 219, 122, 116, 133, 208, 225, 196, 147, 58, // ....zt.....: + 227, 100, 5, 37, 35, 179, 111, 106, 85, 191, 211, 151, // .d.%#.ojU... + 250, 162, 234, 148, 216, 131, 246, 66, 164, 160, 201, 255, // .......B.... + 186, 78, 219, 118, 33, 236, 218, 197, 61, 93, 36, 11, // .N.v!...=]$. + 248, 106, 237, 191, 178, 109, 174, 254, 140, 245, 204, 62, // .j...m.....> + 207, 58, 86, 43, 104, 131, 54, 234, 7, 255, 65, 225, // .:V+h.6...A. + 58, 237, 125, 29, 23, 139, 243, 44, 206, 103, 61, 81, // :.}....,.g=Q + 195, 211, 202, 40, 243, 90, 230, 206, 232, 219, 113, 143, // ...(.Z....q. + 122, 133, 38, 42, 103, 115, 102, 125, 0, 154, 73, 68, // z.&*gsf}..ID + 45, 246, 128, 77, 179, 121, 13, 171, 168, 187, 220, 133, // -..M.y...... + 121, 143, 105, 105, 108, 203, 215, 198, 116, 230, 223, 101, // y.iil...t..e + 101, 50, 184, 53, 153, 102, 139, 101, 58, 203, 147, 245, // e2.5.f.e:... + 167, 220, 175, 144, 102, 99, 152, 233, 221, 97, 250, 1, // ....fc...a.. + 115, 221, 176, 229, 19, 153, 162, 251, 46, 141, 247, 172, // s........... + 107, 6, 26, 231, 196, 68, 167, 243, 184, 88, 22, 214, // k....D...X.. + 123, 223, 217, 92, 127, 160, 53, 97, 230, 75, 45, 54, // {.....5a.K-6 + 173, 180, 154, 200, 228, 176, 182, 50, 4, 58, 24, 116, // .......2.:.t + 45, 74, 77, 21, 38, 227, 37, 251, 134, 154, 218, 48, // -JM.&.%....0 + 32, 108, 73, 184, 237, 31, 217, 197, 38, 93, 150, 131, // lI.....&].. + 190, 141, 98, 55, 119, 190, 149, 35, 179, 98, 240, 193, // ..b7w..#.b.. + 100, 154, 75, 147, 26, 191, 51, 144, 106, 98, 63, 228, // d.K...3.jb?. + 2, 94, 197, 203, 245, 224, 118, 47, 129, 53, 141, 47, // .^....v/.5./ + 147, 191, 138, 75, 64, 188, 96, 30, 186, 119, 227, 202, // ...K@.`..w.. + 41, 143, 8, 93, 190, 236, 141, 198, 54, 226, 117, 199, // )..]....6.u. + 57, 9, 29, 79, 95, 2, 59, 62, 254, 197, 128, 176, // 9..O_.;>.... + 171, 113, 8, 230, 196, 117, 106, 48, 109, 32, 47, 102, // .q...uj0m /f + 13, 140, 23, 179, 14, 8, 183, 211, 153, 188, 123, 157, // ..........{. + 232, 11, 125, 111, 204, 67, 167, 187, 211, 238, 46, 121, // ..}o.C.....y + 230, 133, 116, 150, 124, 232, 162, 139, 156, 211, 65, 100, // ..t.|.....Ad + 189, 93, 1, 152, 238, 253, 157, 46, 223, 143, 8, 9, // .].......... + 44, 61, 191, 69, 161, 211, 205, 111, 119, 195, 215, 58, // ,=.E...ow..: + 153, 86, 9, 127, 50, 224, 121, 167, 170, 59, 67, 149, // .V..2.y..;C. + 82, 104, 70, 231, 73, 177, 65, 73, 223, 113, 120, 109, // RhF.I.AI.qxm + 30, 186, 75, 224, 10, 90, 153, 135, 201, 117, 50, 173, // ..K..Z...u2. + 19, 15, 7, 173, 81, 236, 73, 169, 115, 143, 104, 138, // ....Q.I.s.h. + 47, 24, 157, 13, 228, 167, 99, 86, 18, 114, 28, 115, // /.....cV.r.s + 96, 95, 13, 77, 242, 228, 42, 41, 23, 217, 12, 158, // `_.M..*).... + 121, 147, 21, 101, 127, 8, 243, 60, 187, 57, 81, 255, // y..e...<.9Q. + 246, 230, 251, 239, 108, 254, 122, 204, 122, 190, 188, 184, // ....l.z.z... + 25, 84, 185, 198, 48, 27, 39, 170, 17, 133, 229, 204, // .T..0.'..... + 60, 145, 167, 121, 50, 63, 81, 53, 211, 204, 0, 205, // <..y2?Q5.... + 149, 19, 165, 111, 199, 233, 236, 115, 167, 209, 134, 97, // ...o...s...a + 91, 27, 234, 75, 54, 151, 71, 71, 213, 248, 82, 147, // [..K6.GG..R. + 238, 68, 237, 83, 151, 76, 57, 81, 154, 53, 107, 76, // .D.S.L9Q.5kL + 93, 48, 145, 90, 24, 169, 19, 153, 143, 152, 10, 186, // ]0.Z........ + 51, 25, 207, 57, 193, 231, 246, 79, 5, 147, 70, 143, // 3..9...O..F. + 164, 67, 171, 161, 77, 186, 189, 117, 99, 167, 193, 108, // .C..M..uc..l + 217, 161, 242, 142, 142, 218, 212, 231, 188, 76, 136, 126, // .........L.~ + 47, 176, 222, 251, 67, 213, 247, 79, 212, 107, 4, 31, // /...C..O.k.. + 234, 213, 54, 45, 151, 155, 52, 81, 103, 176, 18, 0, // ..6-..4Qg... + 131, 218, 249, 178, 128, 189, 42, 250, 31, 244, 170, 222, // ......*..... + 7, 232, 30, 236, 119, 127, 33, 41, 253, 119, 58, 31, // ....w.!).w:. + 31, 171, 247, 17, 250, 71, 39, 234, 63, 114, 122, 236, // .....G'.?rz. + 55, 128, 121, 0, 122, 13, 220, 101, 111, 183, 238, 254, // 7.y.z..eo... + 57, 232, 16, 253, 160, 194, 31, 102, 109, 57, 5, 58, // 9......fm9.: + 95, 235, 246, 15, 173, 85, 131, 80, 160, 49, 137, 221, // _....U.P.1.. + 206, 117, 7, 103, 97, 114, 154, 40, 0, 24, 127, 39, // .u.gar.(...' + 183, 35, 85, 118, 65, 161, 208, 179, 41, 125, 171, 105, // .#UvA...)}.i + 86, 37, 232, 106, 29, 29, 60, 203, 17, 100, 8, 8, // V%.j..<..d.. + 155, 25, 0, 80, 105, 155, 215, 145, 69, 50, 142, 30, // ...Pi...E2.. + 11, 176, 119, 70, 132, 126, 78, 242, 204, 98, 39, 68, // ..wF.~N..b'D + 56, 49, 135, 9, 40, 227, 119, 26, 61, 22, 96, 143, // 81..(.w.=.`. + 213, 221, 255, 0, 234, 217, 122, 198, 158, 242, 123, 73, // ......z...{I + 235, 54, 142, 133, 206, 123, 127, 200, 143, 73, 60, 210, // .6...{...I<. + 189, 55, 161, 119, 66, 129, 90, 205, 78, 90, 149, 119, // .7.wB.Z.NZ.w + 119, 127, 188, 58, 135, 103, 68, 232, 214, 77, 117, 103, // w..:.gD..Mug + 171, 190, 218, 89, 69, 98, 157, 232, 231, 144, 255, 163, // ...YEb...... + 247, 73, 229, 6, 223, 118, 3, 175, 51, 141, 139, 228, // .I...v..3... + 238, 22, 114, 239, 254, 87, 149, 251, 235, 213, 206, 82, // ..r..W.....R + 111, 59, 224, 43, 200, 21, 5, 3, 85, 32, 106, 189, // o;.+....U j. + 63, 176, 145, 237, 176, 64, 249, 156, 181, 115, 154, 123, // ?....@...s.{ + 182, 115, 38, 48, 106, 226, 187, 106, 67, 216, 222, 199, // .s&0j..jC... + 125, 121, 107, 66, 153, 38, 180, 161, 117, 81, 127, 125, // }ykB.&..uQ.} + 253, 178, 87, 223, 45, 171, 204, 207, 78, 223, 245, 210, // ..W.-...N... + 151, 67, 171, 29, 177, 105, 19, 33, 216, 153, 29, 116, // .C...i.!...t + 39, 225, 239, 192, 28, 198, 74, 87, 182, 166, 153, 169, // '.....JW.... + 107, 115, 14, 205, 215, 53, 240, 157, 89, 181, 124, 245, // ks...5..Y.|. + 90, 23, 218, 121, 179, 49, 77, 151, 69, 2, 184, 51, // Z..y.1M.E..3 + 68, 98, 188, 187, 218, 11, 177, 227, 227, 205, 85, 20, // Db........U. + 16, 246, 60, 140, 168, 38, 198, 139, 175, 247, 104, 241, // ..<..&....h. + 98, 118, 47, 41, 94, 204, 14, 226, 36, 51, 187, 102, // bv/)^...$3.f + 98, 47, 244, 187, 88, 186, 202, 182, 149, 212, 126, 2, // b/..X.....~. + 29, 218, 250, 182, 73, 105, 225, 101, 220, 192, 65, 196, // ....Ii.e..A. + 76, 219, 253, 152, 85, 36, 137, 194, 208, 15, 187, 184, // L...U$...... + 57, 196, 205, 212, 63, 140, 93, 133, 20, 100, 124, 187, // 9...?.]..d|. + 110, 49, 213, 120, 137, 6, 179, 198, 170, 61, 72, 38, // n1.x.....=H& + 215, 11, 15, 144, 201, 245, 62, 137, 136, 190, 193, 88, // ......>....X + 28, 13, 85, 98, 207, 49, 66, 101, 185, 114, 135, 222, // ..Ub.1Be.r.. + 208, 239, 117, 111, 55, 23, 135, 136, 101, 204, 164, 38, // ..uo7...e..& + 213, 157, 217, 13, 33, 166, 41, 19, 197, 104, 144, 185, // ....!.)..h.. + 25, 119, 35, 122, 217, 234, 41, 226, 198, 92, 118, 222, // .w#z..)...v. + 250, 165, 68, 127, 247, 9, 116, 191, 53, 118, 189, 193, // ..D...t.5v.. + 142, 160, 14, 225, 198, 158, 29, 38, 234, 235, 105, 189, // .......&..i. + 234, 174, 173, 25, 90, 116, 103, 108, 155, 212, 115, 88, // ....Ztgl..sX + 133, 85, 137, 221, 188, 222, 36, 240, 222, 50, 108, 3, // .U....$..2l. + 236, 24, 76, 29, 175, 46, 232, 91, 62, 221, 28, 251, // ..L....[>... + 47, 111, 245, 173, 175, 93, 119, 179, 195, 159, 251, 233, // /o...]w..... + 102, 104, 51, 204, 169, 87, 245, 13, 30, 182, 101, 210, // fh3..W....e. + 229, 213, 222, 107, 150, 127, 196, 114, 109, 242, 100, 111, // ...k...rm.do + 76, 251, 222, 118, 251, 13, 69, 189, 153, 150, 205, 48, // L..v..E....0 + 175, 65, 44, 172, 40, 96, 208, 95, 133, 128, 187, 131, // .A,.(`._.... + 136, 125, 242, 5, 144, 217, 225, 221, 217, 1, 152, 122, // .}.........z + 29, 70, 155, 135, 78, 96, 185, 119, 31, 232, 61, 127, // .F..N`.w..=. + 77, 6, 1, 17, 2, 7, 61, 166, 126, 124, 104, 84, // M.....=.~|hT + 117, 193, 233, 84, 153, 11, 103, 77, 216, 89, 97, 112, // u..T..gM.Yap + 60, 79, 202, 254, 157, 232, 235, 161, 176, 172, 94, 83, // ......._... + 11, 222, 223, 159, 255, 4, 24, 54, 184, 181, 156, 115, // .......6...s + 199, 52, 84, 215, 136, 134, 223, 127, 252, 112, 162, 46, // .4T......p.. + 119, 12, 244, 84, 43, 204, 38, 53, 234, 48, 251, 208, // w..T+.&5.0.. + 170, 80, 232, 255, 162, 96, 186, 26, 249, 203, 66, 212, // .P...`....B. + 134, 13, 164, 70, 187, 131, 38, 133, 38, 131, 220, 219, // ...F..&.&... + 107, 38, 48, 209, 76, 191, 117, 207, 42, 205, 230, 223, // k&0.L.u.*... + 107, 253, 100, 252, 250, 222, 65, 236, 247, 181, 190, 205, // k.d...A..... + 134, 128, 15, 225, 35, 158, 191, 201, 243, 44, 151, 39, // ....#....,.' + 15, 79, 47, 176, 171, 150, 7, 134, 137, 95, 39, 231, // .O/......_'. + 219, 121, 255, 195, 135, 7, 95, 134, 125, 110, 168, 100, // .y...._.}n.d + 194, 5, 152, 224, 122, 109, 205, 175, 19, 124, 121, 219, // ....zm...|y. + 190, 227, 6, 213, 166, 86, 55, 29, 65, 207, 184, 220, // .....V7.A... + 22, 122, 131, 76, 221, 234, 182, 174, 146, 162, 136, 245, // .z.L........ + 37, 250, 172, 160, 17, 107, 46, 61, 54, 116, 20, 17, // %....k.=6t.. + 166, 117, 250, 113, 247, 232, 159, 58, 102, 251, 247, 183, // .u.q...:f... + 111, 213, 183, 89, 126, 21, 231, 12, 225, 63, 29, 173, // o..Y~....?.. + 133, 234, 243, 12, 215, 1, 243, 255, 205, 154, 162, 160, // ............ + 167, 188, 168, 167, 108, 121, 118, 35, 91, 246, 234, 255, // ....lyv#[... + 202, 242, 135, 100, 109, 126, 167, 163, 242, 14, 70, 1, // ...dm~....F. + 7, 253, 118, 115, 191, 241, 16, 230, 150, 248, 241, 3, // ..vs........ + 24, 200, 212, 111, 248, 187, 166, 249, 94, 224, 215, 153, // ...o....^... + 90, 126, 249, 52, 255, 97, 219, 14, 4, 187, 179, 55, // Z~.4.a.....7 + 61, 250, 173, 88, 176, 117, 139, 243, 139, 123, 22, 243, // =..X.u...{.. + 73, 236, 222, 102, 155, 229, 84, 189, 254, 207, 251, 112, // I..f..T....p + 43, 217, 254, 67, 126, 125, 31, 102, 85, 251, 111, 131, // +..C~}.fU.o. + 215, 219, 79, 224, 85, 126, 2, 175, 242, 239, 199, 235, // ..O.U~...... + 23, 56, 247, 222, 211, 251, 92, 57, 213, 184, 235, 202, // .8.....9.... + 117, 77, 21, 118, 210, 32, 55, 175, 60, 91, 199, 37, // uM.v. 7.<[.% + 109, 23, 185, 167, 207, 123, 47, 188, 219, 199, 7, 162, // m....{/..... + 125, 9, 2, 243, 77, 177, 44, 186, 238, 185, 250, 113, // }...M.,....q + 131, 56, 77, 234, 171, 126, 192, 186, 243, 62, 116, 215, // .8M..~...>t. + 94, 124, 19, 17, 236, 41, 16, 8, 142, 152, 95, 215, // ^|...)...._. + 26, 219, 196, 203, 178, 220, 136, 190, 253, 79, 37, 116, // .........O%t + 135, 139, 73, 242, 27, 217, 133, 212, 80, 226, 106, 191, // ..I.....P.j. + 38, 129, 190, 186, 138, 81, 218, 78, 167, 0, 192, 183, // &....Q.N.... + 211, 55, 74, 174, 87, 230, 217, 28, 14, 121, 54, 228, // .7J.W....y6. + 15, 3, 39, 75, 128, 204, 17, 86, 172, 183, 113, 90, // ..'K...V..qZ + 131, 65, 196, 201, 229, 172, 160, 253, 83, 181, 202, 102, // .A......S..f + 137, 189, 127, 188, 180, 199, 187, 178, 101, 125, 148, 122, // ........e}.z + 11, 44, 95, 87, 88, 242, 70, 222, 121, 66, 87, 60, // .,_WX.F.yBW< + 211, 63, 64, 140, 56, 205, 32, 57, 205, 86, 152, 120, // .?@.8. 9.V.x + 166, 137, 40, 107, 181, 57, 182, 134, 99, 218, 121, 58, // ..(k.9..c.y: + 181, 77, 103, 132, 18, 139, 111, 172, 41, 130, 205, 56, // .Mg...o.)..8 + 41, 114, 145, 241, 119, 72, 72, 53, 30, 112, 196, 229, // )r..wHH5.p.. + 201, 47, 194, 246, 201, 20, 11, 124, 122, 219, 131, 222, // ./.....|z... + 247, 78, 84, 79, 191, 149, 124, 241, 151, 147, 191, 124, // .NTO..|....| + 255, 250, 109, 111, 168, 122, 136, 244, 81, 255, 221, 95, // ..mo.z..Q.._ + 95, 161, 188, 156, 213, 69, 6, 82, 250, 225, 78, 252, // _....E.R..N. + 245, 9, 217, 250, 167, 242, 21, 102, 71, 207, 75, 103, // .......fG.Kg + 191, 169, 159, 0, 124, 245, 146, 122, 112, 192, 214, 32, // ....|..zp.. + 196, 248, 33, 101, 219, 1, 59, 83, 183, 245, 239, 108, // ..!e..;S...l + 27, 234, 159, 140, 194, 54, 207, 242, 219, 219, 136, 38, // .....6.....& + 102, 249, 39, 53, 54, 119, 238, 252, 61, 219, 108, 218, // f.'56w..=.l. + 239, 200, 246, 98, 242, 173, 121, 143, 126, 231, 21, 250, // ...b..y.~... + 113, 247, 117, 121, 39, 227, 161, 115, 222, 223, 25, 102, // q.uy'..s...f + 126, 249, 225, 193, 144, 108, 185, 198, 62, 163, 152, 242, // ~....l..>... + 156, 163, 243, 235, 77, 250, 109, 21, 248, 107, 146, 41, // ....M.m..k.) + 218, 231, 67, 156, 255, 180, 147, 11, 97, 200, 143, 254, // ..C.....a... + 58, 77, 99, 215, 78, 196, 216, 239, 218, 197, 88, 11, // :Mc.N.....X. + 200, 155, 187, 176, 90, 88, 254, 26, 121, 23, 130, 157, // ....ZX..y... + 254, 221, 114, 242, 245, 121, 245, 187, 74, 117, 214, 4, // ..r..y..Ju.. + 95, 15, 37, 151, 54, 86, 8, 9, 92, 44, 139, 50, // _.%.6V...,.2 + 203, 111, 208, 126, 166, 75, 54, 72, 4, 210, 156, 197, // .o.~.K6H.... + 197, 194, 212, 12, 142, 244, 175, 59, 24, 208, 60, 101, // .......;.. + ${saveResult && html`<${Notification} ok=${saveResult.status} + text=${saveResult.message} close=${() => setSaveResult(null)} />`} +
MQTT Forwarding
- ${saveResult && html`<${Notification} ok=${saveResult.status} - text=${saveResult.message} close=${() => setSaveResult(null)} />`} <${Setting} title="Enable MQTT forwarding" value=${settings.mqtt_enabled} setfn=${mksetfn('mqtt_enabled')} type="switch" /> <${Setting} title="MQTT Server URL" value=${settings.mqtt_server_url} setfn=${mksetfn('mqtt_server_url')} type="" disabled=${!settings.mqtt_enabled} /> <${Setting} title="MQTT Topic RX" value=${settings.mqtt_topic_rx} setfn=${mksetfn('mqtt_topic_rx')} type="" disabled=${!settings.mqtt_enabled} /> @@ -335,8 +336,6 @@ function Settings({}) { Console Log
- ${saveResult && html`<${Notification} ok=${saveResult.status} - text=${saveResult.message} close=${() => setSaveResult(null)} />`} <${Setting} title="Log Level" value=${settings.log_level} setfn=${mksetfn('log_level')} type="select" addonLeft="0-3" options=${logOptions} />
<${Button} icon=${Icons.save} onclick=${onsave} title="Save Settings" /> diff --git a/examples/stm32/nucleo-h563zi-make-baremetal-builtin/main.c b/examples/stm32/nucleo-h563zi-make-baremetal-builtin/main.c index b60d1ce9ca8..93e5a2d17ab 100644 --- a/examples/stm32/nucleo-h563zi-make-baremetal-builtin/main.c +++ b/examples/stm32/nucleo-h563zi-make-baremetal-builtin/main.c @@ -77,7 +77,7 @@ int main(void) { } MG_INFO(("Initialising application...")); - web_init(&mgr); + //web_init(&mgr); MG_INFO(("Starting event loop")); for (;;) { diff --git a/examples/wch/ch32v307-make-baremetal-builtin/Makefile b/examples/wch/ch32v307-make-baremetal-builtin/Makefile index 91a599f77e9..03c6f534658 100644 --- a/examples/wch/ch32v307-make-baremetal-builtin/Makefile +++ b/examples/wch/ch32v307-make-baremetal-builtin/Makefile @@ -1,3 +1,5 @@ +PREFIX ?= riscv64-unknown-elf + CFLAGS = -W -Wall -Wextra -Wno-error -Wundef -Wshadow -Wdouble-promotion CFLAGS += -Wformat-truncation -fno-common -Wconversion -Wno-sign-conversion CFLAGS += -ffunction-sections -fdata-sections @@ -5,9 +7,10 @@ CFLAGS += -march=rv32imafc -mabi=ilp32f CFLAGS += -DSYSCLK_FREQ_144MHz_HSE -I. -Ivendor -g3 -Os $(CFLAGS_EXTRA) LDFLAGS = -T vendor/link.ld -nostartfiles --specs=nano.specs -LDFLAGS += -lc -lgcc -Wl,--gc-sections +LDFLAGS += -lc -lgcc -Wl,--gc-sections -Wl,-Map=$@.map -SOURCES = main.c mongoose.c net.c packed_fs.c vendor/system_ch32v30x.c vendor/startup_ch32v30x_D8C.S +SOURCES = main.c mongoose.c net.c packed_fs.c +SOURCES += vendor/system_ch32v30x.c vendor/startup_ch32v30x_D8C.S CFLAGS += -DHTTP_URL=\"http://0.0.0.0/\" -DHTTPS_URL=\"https://0.0.0.0/\" ifeq ($(OS),Windows_NT) @@ -19,14 +22,15 @@ endif all: firmware.bin firmware.bin: firmware.elf - riscv64-unknown-elf-objcopy -O binary $< $@ + $(PREFIX)-objcopy -O binary $< $@ ls -l firmware.* -firmware.elf: $(SOURCES) hal.h Makefile - riscv64-unknown-elf-gcc $(SOURCES) $(CFLAGS) $(LDFLAGS) -o $@ +firmware.elf: $(SOURCES) hal.h mongoose_custom.h Makefile + $(PREFIX)-gcc $(SOURCES) $(CFLAGS) $(LDFLAGS) -o $@ flash: firmware.bin wchisp flash $< + @echo; echo "IMPORTANT: configure device to 96k RAM / 224k Flash" clean: $(RM) firmware.* *.su diff --git a/examples/wch/ch32v307-make-baremetal-builtin/hal.h b/examples/wch/ch32v307-make-baremetal-builtin/hal.h index d2b9445b561..0e32afd5f37 100644 --- a/examples/wch/ch32v307-make-baremetal-builtin/hal.h +++ b/examples/wch/ch32v307-make-baremetal-builtin/hal.h @@ -3,6 +3,8 @@ #pragma once +#define UART_DEBUG USART1 + #include #include @@ -58,7 +60,7 @@ static inline void gpio_init(uint16_t pin, uint8_t mode, uint8_t cfg) { } volatile uint32_t *r = &gpio->CFGLR; if (no > 7) r = &gpio->CFGHR, no -= 8; - uint8_t v = (mode & 3U) | ((cfg & 3U) << 2); + uint8_t v = (uint8_t) ((mode & 3U) | ((cfg & 3U) << 2)); CLRSET(*r, 15U << (no * 4), v << (no * 4)); } static inline void gpio_input(uint16_t pin) { @@ -127,6 +129,23 @@ static inline void ethernet_init(void) { // NVIC_SetPriority(ETH_IRQn, 0); } +// opt: 0: 128/192, 1: 96/224, 2: 64/256, 3: 32/288 +static inline void set_ram_size(uint8_t opt) { + // Unlock flash option byte, RM 32.6.1 + FLASH->KEYR = 0x45670123; + FLASH->KEYR = 0xcdef89ab; + FLASH->OBKEYR = 0x45670123; + FLASH->OBKEYR = 0xcdef89ab; + FLASH->CTLR |= 1U << 4; // Enable options byte programming + uint16_t val = *(uint16_t *) 0x1ffff802; + val &= ~((uint16_t) (3U << 6)); + val |= (opt & 3U) << 6; + FLASH->CTLR |= FLASH_CTLR_PG; // Set programming bit + *(uint16_t *) 0x1ffff802 = val; // Write half-word + spin(9999); + FLASH->CTLR &= ~(1U << 4); +} + static inline void rng_init(void) { RNG->CR |= RNG_CR_RNGEN; } diff --git a/examples/wch/ch32v307-make-baremetal-builtin/main.c b/examples/wch/ch32v307-make-baremetal-builtin/main.c index eed0bc85148..cd8ba89c8e7 100644 --- a/examples/wch/ch32v307-make-baremetal-builtin/main.c +++ b/examples/wch/ch32v307-make-baremetal-builtin/main.c @@ -8,7 +8,6 @@ #define LED1_PIN PIN('A', 15) // On-board red LED #define LED2_PIN PIN('B', 4) // On-board blue LED #define LED_PIN LED2_PIN -#define UART_DEBUG USART1 #define BLINK_PERIOD_MS 1000 // LED_PIN blinking period in millis @@ -29,10 +28,24 @@ void mg_random(void *buf, size_t len) { // Use on-board RNG } } +// This flash space resides at after the 0-wait 320k area +static char *s_flash_space = (char *) (0x8000000 + 320 * 1024); + +bool web_load_settings(void *buf, size_t len) { + if (*(uint32_t *) s_flash_space != SETTINGS_MAGIC) return false; + memcpy(buf, s_flash_space, len); + return true; +} + +bool web_save_settings(void *buf, size_t len) { + return mg_flash_write(s_flash_space, buf, len); +} + static void timer_fn(void *arg) { gpio_toggle(LED_PIN); // Blink LED_PIN struct mg_tcpip_if *ifp = arg; // And show const char *names[] = {"down", "up", "req", "ready"}; // network stats + return; MG_INFO(("Ethernet: %s, IP: %M, rx:%u, tx:%u, dr:%u, er:%u", names[ifp->state], mg_print_ip4, &ifp->ip, ifp->nrecv, ifp->nsent, ifp->ndrop, ifp->nerr)); @@ -65,9 +78,17 @@ static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { mg_http_reply(c, 200, "", "{%m:%m,%m:%m}\n", // See mg_snprintf doc MG_ESC("uri"), mg_print_esc, hm->uri.len, hm->uri.ptr, MG_ESC("body"), mg_print_esc, hm->body.len, hm->body.ptr); + } else if (mg_http_match_uri(hm, "/api/ram")) { + char *s = mg_json_get_str(hm->body, "$.addr"); + void *buf = (void *) (uintptr_t) (s ? strtoul(s, NULL, 0) : 0); + size_t len = mg_json_get_long(hm->body, "$.len", 4); + mg_hexdump(buf, len); + mg_http_reply(c, 200, "", "{%m:%m}\n", MG_ESC("data"), mg_print_hex, len, + buf); + free(s); } else { // For all other URIs, serve static content - mg_http_reply(c, 200, "", "hi tick %llu\n", s_ticks); // See mg_snprintf doc + mg_http_reply(c, 200, "", "hi tick %llu\n", s_ticks); } } (void) fn_data; @@ -85,8 +106,21 @@ int main(void) { mg_log_set(MG_LL_DEBUG); // Set log level mg_log_set_fn(mg_putchar, UART_DEBUG); - ethernet_init(); // Initialise ethernet pins MG_INFO(("Starting, CPU freq %g MHz", (double) SystemCoreClock / 1000000)); + // MG_INFO(("RCC_RSTSCKR=%#lx", RCC->RSTSCKR)); + extern char _end[], _heap_end[]; + MG_INFO(("Heap size: %lu bytes", _heap_end - _end)); + + // Print chip RAM/Flash configuration, and set to 64/256 + const char *sizes[] = {"128/192", "96/224", "64/256", "32/288"}; + uint32_t mode = (FLASH->OBR >> 8) & 3U; + MG_INFO(("RAM/FLASH configuration: %s", sizes[mode])); + if (mode != 1) { + MG_INFO(("Please set your device to 96/224 mode")); + set_ram_size(1); + } + + ethernet_init(); // Initialise ethernet pins // Initialise Mongoose network stack struct mg_tcpip_driver_stm32_data driver_data = {.mdc_cr = 1}; @@ -117,12 +151,7 @@ int main(void) { return 0; } -// Newlib syscalls overrides. IO retargeting, and malloc -int _write(int fd, char *ptr, int len) { - if (fd == 1 || fd == 2) uart_write_buf(UART_DEBUG, ptr, (size_t) len); - return len; -} - +// Newlib syscall for malloc void *_sbrk(ptrdiff_t incr) { extern char _end[]; extern char _heap_end[]; diff --git a/examples/wch/ch32v307-make-baremetal-builtin/mongoose_custom.h b/examples/wch/ch32v307-make-baremetal-builtin/mongoose_custom.h index e7833af3170..651f603dad2 100644 --- a/examples/wch/ch32v307-make-baremetal-builtin/mongoose_custom.h +++ b/examples/wch/ch32v307-make-baremetal-builtin/mongoose_custom.h @@ -2,6 +2,8 @@ // See https://mongoose.ws/documentation/#build-options #define MG_ARCH MG_ARCH_NEWLIB +#define MG_OTA MG_OTA_FLASH +#define MG_DEVICE MG_DEVICE_CH32V307 #define MG_ENABLE_TCPIP 1 #define MG_ENABLE_CUSTOM_MILLIS 1 diff --git a/examples/wch/ch32v307-make-baremetal-builtin/vendor/link.ld b/examples/wch/ch32v307-make-baremetal-builtin/vendor/link.ld index b060c89d187..d19bd1bfef3 100644 --- a/examples/wch/ch32v307-make-baremetal-builtin/vendor/link.ld +++ b/examples/wch/ch32v307-make-baremetal-builtin/vendor/link.ld @@ -1 +1,180 @@ -ENTRY( _start ) __stack_size = 2048; PROVIDE( _stack_size = __stack_size ); MEMORY { /* CH32V30x_D8C - CH32V305RB-CH32V305FB CH32V30x_D8 - CH32V303CB-CH32V303RB */ /* FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 128K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K */ /* CH32V30x_D8C - CH32V307VC-CH32V307WC-CH32V307RC CH32V30x_D8 - CH32V303VC-CH32V303RC FLASH + RAM supports the following configuration FLASH-192K + RAM-128K FLASH-224K + RAM-96K FLASH-256K + RAM-64K FLASH-288K + RAM-32K */ FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 288K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K } SECTIONS { .init : { _sinit = .; . = ALIGN(4); KEEP(*(SORT_NONE(.init))) . = ALIGN(4); _einit = .; } >FLASH AT>FLASH .vector : { *(.vector); . = ALIGN(64); } >FLASH AT>FLASH .text : { . = ALIGN(4); *(.text) *(.text.*) *(.rodata) *(.rodata*) *(.gnu.linkonce.t.*) . = ALIGN(4); } >FLASH AT>FLASH .fini : { KEEP(*(SORT_NONE(.fini))) . = ALIGN(4); } >FLASH AT>FLASH PROVIDE( _etext = . ); PROVIDE( _eitcm = . ); .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH AT>FLASH .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH AT>FLASH .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) PROVIDE_HIDDEN (__fini_array_end = .); } >FLASH AT>FLASH .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is first. Because this is a wildcard, it doesn't matter if the user does not actually link against crtbegin.o; the linker won't look for a file to match a wildcard. The wildcard also means that it doesn't matter which directory crtbegin.o is in. */ KEEP (*crtbegin.o(.ctors)) KEEP (*crtbegin?.o(.ctors)) /* We don't want to include the .ctor section from the crtend.o file until after the sorted ctors. The .ctor section from the crtend file contains the end of ctors marker and it must be last */ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) } >FLASH AT>FLASH .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*crtbegin?.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) } >FLASH AT>FLASH .dalign : { . = ALIGN(4); PROVIDE(_data_vma = .); } >RAM AT>FLASH .dlalign : { . = ALIGN(4); PROVIDE(_data_lma = .); } >FLASH AT>FLASH .data : { *(.gnu.linkonce.r.*) *(.data .data.*) *(.gnu.linkonce.d.*) . = ALIGN(8); PROVIDE( __global_pointer$ = . + 0x800 ); *(.sdata .sdata.*) *(.sdata2.*) *(.gnu.linkonce.s.*) . = ALIGN(8); *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*) . = ALIGN(4); PROVIDE( _edata = .); } >RAM AT>FLASH .bss : { . = ALIGN(4); PROVIDE( _sbss = .); *(.sbss*) *(.gnu.linkonce.sb.*) *(.bss*) *(.gnu.linkonce.b.*) *(COMMON*) . = ALIGN(4); PROVIDE( _ebss = .); } >RAM AT>FLASH PROVIDE( _end = _ebss); PROVIDE( end = . ); .stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size : { PROVIDE( _heap_end = . ); . = ALIGN(4); PROVIDE(_susrstack = . ); . = . + __stack_size; PROVIDE( _eusrstack = .); } >RAM } \ No newline at end of file +ENTRY( _start ) +__stack_size = 2048; +PROVIDE( _stack_size = __stack_size ); + + +MEMORY { +/* CH32V30x_D8C - CH32V305RB-CH32V305FB + CH32V30x_D8 - CH32V303CB-CH32V303RB +*/ +/* + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 128K + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K +*/ + +/* CH32V30x_D8C - CH32V307VC-CH32V307WC-CH32V307RC + CH32V30x_D8 - CH32V303VC-CH32V303RC + FLASH + RAM supports the following configuration + FLASH-192K + RAM-128K + FLASH-224K + RAM-96K + FLASH-256K + RAM-64K + FLASH-288K + RAM-32K + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 288K + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K +*/ + + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 224k + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96k +} + + +SECTIONS +{ + + .init : + { + _sinit = .; + . = ALIGN(4); + KEEP(*(SORT_NONE(.init))) + . = ALIGN(4); + _einit = .; + } >FLASH AT>FLASH + + .vector : + { + *(.vector); + . = ALIGN(64); + } >FLASH AT>FLASH + + .text : + { + . = ALIGN(4); + *(.text) + *(.text.*) + *(.rodata) + *(.rodata*) + *(.gnu.linkonce.t.*) + . = ALIGN(4); + } >FLASH AT>FLASH + + .fini : + { + KEEP(*(SORT_NONE(.fini))) + . = ALIGN(4); + } >FLASH AT>FLASH + + PROVIDE( _etext = . ); + PROVIDE( _eitcm = . ); + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH AT>FLASH + + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) + KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH AT>FLASH + + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) + KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH AT>FLASH + + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*crtbegin?.o(.ctors)) + /* We don't want to include the .ctor section from + the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } >FLASH AT>FLASH + + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*crtbegin?.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } >FLASH AT>FLASH + + .dalign : + { + . = ALIGN(4); + PROVIDE(_data_vma = .); + } >RAM AT>FLASH + + .dlalign : + { + . = ALIGN(4); + PROVIDE(_data_lma = .); + } >FLASH AT>FLASH + + .data : + { + *(.gnu.linkonce.r.*) + *(.data .data.*) + *(.gnu.linkonce.d.*) + . = ALIGN(8); + PROVIDE( __global_pointer$ = . + 0x800 ); + *(.sdata .sdata.*) + *(.sdata2.*) + *(.gnu.linkonce.s.*) + . = ALIGN(8); + *(.srodata.cst16) + *(.srodata.cst8) + *(.srodata.cst4) + *(.srodata.cst2) + *(.srodata .srodata.*) + . = ALIGN(4); + PROVIDE( _edata = .); + } >RAM AT>FLASH + + .bss : + { + . = ALIGN(4); + PROVIDE( _sbss = .); + *(.sbss*) + *(.gnu.linkonce.sb.*) + *(.bss*) + *(.gnu.linkonce.b.*) + *(COMMON*) + . = ALIGN(4); + PROVIDE( _ebss = .); + } >RAM AT>FLASH + + PROVIDE( _end = _ebss); + PROVIDE( end = . ); + + .stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size : + { + PROVIDE( _heap_end = . ); + . = ALIGN(4); + PROVIDE(_susrstack = . ); + . = . + __stack_size; + PROVIDE( _eusrstack = .); + } >RAM + +} diff --git a/mongoose.c b/mongoose.c index 997118b654b..ab362eedf3b 100644 --- a/mongoose.c +++ b/mongoose.c @@ -112,6 +112,88 @@ size_t mg_base64_decode(const char *src, size_t n, char *dst, size_t dl) { return len; } +#ifdef MG_ENABLE_LINES +#line 1 "src/device_ch32v307.c" +#endif + + + +#if MG_DEVICE == MG_DEVICE_CH32V307 +// RM: https://www.wch-ic.com/downloads/CH32FV2x_V3xRM_PDF.html + +#define FLASH_BASE 0x40022000 +#define FLASH_ACTLR (FLASH_BASE + 0) +#define FLASH_KEYR (FLASH_BASE + 4) +#define FLASH_OBKEYR (FLASH_BASE + 8) +#define FLASH_STATR (FLASH_BASE + 12) +#define FLASH_CTLR (FLASH_BASE + 16) +#define FLASH_ADDR (FLASH_BASE + 20) +#define FLASH_OBR (FLASH_BASE + 28) +#define FLASH_WPR (FLASH_BASE + 32) + +void *mg_flash_start(void) { + return (void *) 0x08000000; +} +size_t mg_flash_size(void) { + return 480 * 1024; // First 320k is 0-wait +} +size_t mg_flash_sector_size(void) { + return 4096; +} +size_t mg_flash_write_align(void) { + return 4; +} +int mg_flash_bank(void) { + return 0; +} +void mg_device_reset(void) { + *((volatile uint32_t *) 0xbeef0000) |= 1U << 7; // NVIC_SystemReset() +} +static void flash_unlock(void) { + static bool unlocked; + if (unlocked == false) { + MG_REG(FLASH_KEYR) = 0x45670123; + MG_REG(FLASH_KEYR) = 0xcdef89ab; + unlocked = true; + } +} +static void flash_wait(void) { + while (MG_REG(FLASH_STATR) & MG_BIT(0)) (void) 0; +} + +bool mg_flash_erase(void *addr) { + //MG_INFO(("%p", addr)); + flash_unlock(); + flash_wait(); + MG_REG(FLASH_ADDR) = (uint32_t) addr; + MG_REG(FLASH_CTLR) |= MG_BIT(1) | MG_BIT(6); // PER | STRT; + flash_wait(); + return true; +} + +static bool is_page_boundary(const void *addr) { + uint32_t val = (uint32_t) addr; + return (val & (mg_flash_sector_size() - 1)) == 0; +} + +bool mg_flash_write(void *addr, const void *buf, size_t len) { + //MG_INFO(("%p %p %lu", addr, buf, len)); + //mg_hexdump(buf, len); + flash_unlock(); + const uint16_t *src = (uint16_t *) buf, *end = &src[len / 2]; + uint16_t *dst = (uint16_t *) addr; + MG_REG(FLASH_CTLR) |= MG_BIT(0); // Set PG + //MG_INFO(("CTLR: %#lx", MG_REG(FLASH_CTLR))); + while (src < end) { + if (is_page_boundary(dst)) mg_flash_erase(dst); + *dst++ = *src++; + flash_wait(); + } + MG_REG(FLASH_CTLR) &= ~MG_BIT(0); // Clear PG + return true; +} +#endif + #ifdef MG_ENABLE_LINES #line 1 "src/device_dummy.c" #endif diff --git a/mongoose.h b/mongoose.h index e64271cf47a..495d07178cf 100644 --- a/mongoose.h +++ b/mongoose.h @@ -1732,10 +1732,11 @@ MG_IRAM void mg_ota_boot(void); // Bootloader function -#define MG_DEVICE_NONE 0 // Dummy system -#define MG_DEVICE_STM32H5 1 // STM32 H5 -#define MG_DEVICE_STM32H7 2 // STM32 H7 -#define MG_DEVICE_CUSTOM 100 // Custom implementation +#define MG_DEVICE_NONE 0 // Dummy system +#define MG_DEVICE_STM32H5 1 // STM32 H5 +#define MG_DEVICE_STM32H7 2 // STM32 H7 +#define MG_DEVICE_CH32V307 100 // WCH CH32V307 +#define MG_DEVICE_CUSTOM 1000 // Custom implementation #ifndef MG_DEVICE #define MG_DEVICE MG_DEVICE_NONE diff --git a/src/device.h b/src/device.h index 99b1064bd81..6215fde8c1c 100644 --- a/src/device.h +++ b/src/device.h @@ -5,10 +5,11 @@ #include "arch.h" -#define MG_DEVICE_NONE 0 // Dummy system -#define MG_DEVICE_STM32H5 1 // STM32 H5 -#define MG_DEVICE_STM32H7 2 // STM32 H7 -#define MG_DEVICE_CUSTOM 100 // Custom implementation +#define MG_DEVICE_NONE 0 // Dummy system +#define MG_DEVICE_STM32H5 1 // STM32 H5 +#define MG_DEVICE_STM32H7 2 // STM32 H7 +#define MG_DEVICE_CH32V307 100 // WCH CH32V307 +#define MG_DEVICE_CUSTOM 1000 // Custom implementation #ifndef MG_DEVICE #define MG_DEVICE MG_DEVICE_NONE diff --git a/src/device_ch32v307.c b/src/device_ch32v307.c new file mode 100644 index 00000000000..49d339d821a --- /dev/null +++ b/src/device_ch32v307.c @@ -0,0 +1,78 @@ +#include "device.h" +#include "log.h" + +#if MG_DEVICE == MG_DEVICE_CH32V307 +// RM: https://www.wch-ic.com/downloads/CH32FV2x_V3xRM_PDF.html + +#define FLASH_BASE 0x40022000 +#define FLASH_ACTLR (FLASH_BASE + 0) +#define FLASH_KEYR (FLASH_BASE + 4) +#define FLASH_OBKEYR (FLASH_BASE + 8) +#define FLASH_STATR (FLASH_BASE + 12) +#define FLASH_CTLR (FLASH_BASE + 16) +#define FLASH_ADDR (FLASH_BASE + 20) +#define FLASH_OBR (FLASH_BASE + 28) +#define FLASH_WPR (FLASH_BASE + 32) + +void *mg_flash_start(void) { + return (void *) 0x08000000; +} +size_t mg_flash_size(void) { + return 480 * 1024; // First 320k is 0-wait +} +size_t mg_flash_sector_size(void) { + return 4096; +} +size_t mg_flash_write_align(void) { + return 4; +} +int mg_flash_bank(void) { + return 0; +} +void mg_device_reset(void) { + *((volatile uint32_t *) 0xbeef0000) |= 1U << 7; // NVIC_SystemReset() +} +static void flash_unlock(void) { + static bool unlocked; + if (unlocked == false) { + MG_REG(FLASH_KEYR) = 0x45670123; + MG_REG(FLASH_KEYR) = 0xcdef89ab; + unlocked = true; + } +} +static void flash_wait(void) { + while (MG_REG(FLASH_STATR) & MG_BIT(0)) (void) 0; +} + +bool mg_flash_erase(void *addr) { + //MG_INFO(("%p", addr)); + flash_unlock(); + flash_wait(); + MG_REG(FLASH_ADDR) = (uint32_t) addr; + MG_REG(FLASH_CTLR) |= MG_BIT(1) | MG_BIT(6); // PER | STRT; + flash_wait(); + return true; +} + +static bool is_page_boundary(const void *addr) { + uint32_t val = (uint32_t) addr; + return (val & (mg_flash_sector_size() - 1)) == 0; +} + +bool mg_flash_write(void *addr, const void *buf, size_t len) { + //MG_INFO(("%p %p %lu", addr, buf, len)); + //mg_hexdump(buf, len); + flash_unlock(); + const uint16_t *src = (uint16_t *) buf, *end = &src[len / 2]; + uint16_t *dst = (uint16_t *) addr; + MG_REG(FLASH_CTLR) |= MG_BIT(0); // Set PG + //MG_INFO(("CTLR: %#lx", MG_REG(FLASH_CTLR))); + while (src < end) { + if (is_page_boundary(dst)) mg_flash_erase(dst); + *dst++ = *src++; + flash_wait(); + } + MG_REG(FLASH_CTLR) &= ~MG_BIT(0); // Clear PG + return true; +} +#endif