From 9cbfe5481b66eba29268a458b5965dd283e48580 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 8 Oct 2019 14:16:46 +0200 Subject: [PATCH 01/88] chg: lf t55xx brute / lf t55xx chk / lf t55xx recoverpwd - now shows help when called without params --- client/cmdlft55xx.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index 97cd3ae9c..b1c156157 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -2644,7 +2644,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { } } - if (errors) return usage_t55xx_chk(); + if (errors || cmdp == 0) return usage_t55xx_chk(); /* // block 7, page1 = false, usepwd = false, override = false, pwd = 00000000 @@ -2788,11 +2788,11 @@ static int CmdT55xxBruteForce(const char *Cmd) { break; } } - if (start_password >= end_password) { - return usage_t55xx_bruteforce(); - } - if (errors) return usage_t55xx_bruteforce(); + if (start_password >= end_password) + errors = true; + + if (errors || cmdp == 0) return usage_t55xx_bruteforce(); uint64_t t1 = msclock(); @@ -2891,8 +2891,7 @@ static int CmdT55xxRecoverPW(const char *Cmd) { } } - if (errors) return usage_t55xx_recoverpw(); - + if (errors || cmdp == 0) return usage_t55xx_recoverpw(); // first try fliping each bit in the expected password while (bit < 32) { From 2d2564f53e1ec7a2123dd19b5a4b09eb74b178bd Mon Sep 17 00:00:00 2001 From: Iceman Date: Tue, 8 Oct 2019 14:37:00 +0200 Subject: [PATCH 02/88] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 22221abe6..2d51d3fbf 100644 --- a/README.md +++ b/README.md @@ -94,8 +94,9 @@ It's needed to have a good USB cable to connect Proxmark3 to USB. If you have st ## The end -- [@herrmann1001](https://mobile.twitter.com/herrmann1001) July 2018 +- July 2018 [@herrmann1001](https://mobile.twitter.com/herrmann1001) - updated Feb 2019 [@5w0rdfish](https://mobile.twitter.com/5w0rdFish) +- updated 2019 [@doegox](https://mobile.twitter.com/doegox) # Donations From c4249ecbb8278eb37d8e2870713d0d88c9703074 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 8 Oct 2019 15:24:06 +0200 Subject: [PATCH 03/88] WiP - 'lf t55xx restore' - read a dump file and restore it to a t55xx card --- client/cmdlft55xx.c | 73 +++++++++++++++++++++++++++++++++++++++++++-- client/fileutils.c | 42 +++++++++++++++++++++++++- client/fileutils.h | 9 +++--- 3 files changed, 116 insertions(+), 8 deletions(-) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index b1c156157..054747f2e 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -189,6 +189,19 @@ static int usage_t55xx_dump() { PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } +static int usage_t55xx_restore() { + PrintAndLogEx(NORMAL, "Usage: lf t55xx restore [r ] [p [o]]"); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " p - OPTIONAL password 4bytes (8 hex symbols)"); + PrintAndLogEx(NORMAL, " o - OPTIONAL override, force pwd read despite danger to card"); + print_usage_t55xx_downloadlink(T55XX_DLMODE_SINGLE,config.downlink_mode); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, " lf t55xx restore f lf-t55xx-01020304.eml"); + PrintAndLogEx(NORMAL, " lf t55xx restore f lf-t55xx-01020304.eml p feedbeef o"); + PrintAndLogEx(NORMAL, ""); + return PM3_SUCCESS; +} static int usage_t55xx_detect() { PrintAndLogEx(NORMAL, "Usage: lf t55xx detect [1] [r ] [p ]"); PrintAndLogEx(NORMAL, "Options:"); @@ -340,8 +353,8 @@ static int usage_t55xx_protect() { static int CmdHelp(const char *Cmd); int clone_t55xx_tag(uint32_t *blockdata, uint8_t numblocks) { - - if (blockdata == NULL) + + if (blockdata == NULL) return PM3_EINVARG; if (numblocks < 1 || numblocks > 8) return PM3_EINVARG; @@ -2145,6 +2158,59 @@ static int CmdT55xxDump(const char *Cmd) { return PM3_SUCCESS; } +static int CmdT55xxRestore(const char *Cmd) { + + uint32_t password = 0; + uint8_t override = 0; + uint8_t downlink_mode = config.downlink_mode;; + bool usepwd = false; + bool errors = false; + uint8_t cmdp = 0; + + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_t55xx_restore(); + case 'r': + downlink_mode = param_get8ex(Cmd, cmdp + 1, 0, 10); + if (downlink_mode > 3) + downlink_mode = 0; + + cmdp += 2; + break; + case 'p': + password = param_get32ex(Cmd, cmdp + 1, 0, 16); + usepwd = true; + cmdp += 2; + break; + case 'o': + override = 1; + cmdp++; + break; + default: + PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + if (errors) return usage_t55xx_restore(); + + PrintAndLogEx(INFO, "Work in progress. To be implemented"); + if (usepwd || password || override ) { + + } + // load file name (json/eml/bin) + + // Print dump data? + + uint32_t res = PM3_SUCCESS; + +// page0. +// res = clone_t55xx_tag(blockdata, numblocks); + + return res; +} + bool AquireData(uint8_t page, uint8_t block, bool pwdmode, uint32_t password, uint8_t downlink_mode) { // arg0 bitmodes: // b0 = pwdmode @@ -3334,12 +3400,13 @@ static command_t CommandTable[] = { {"chk", CmdT55xxChkPwds, IfPm3Lf, "Check passwords from dictionary/flash"}, {"detect", CmdT55xxDetect, AlwaysAvailable, "[1] Try detecting the tag modulation from reading the configuration block."}, {"deviceconfig", CmdT55xxSetDeviceConfig, IfPm3Lf, "Set/Get T55XX device configuration (startgap, writegap, write0, write1, readgap"}, - {"dump", CmdT55xxDump, IfPm3Lf, "[password] [o] Dump T55xx card block 0-7. Optional [password], [override]"}, + {"dump", CmdT55xxDump, IfPm3Lf, "[password] [o] Dump T55xx card Page 0 block 0-7. Optional [password], [override]"}, {"info", CmdT55xxInfo, AlwaysAvailable, "[1] Show T55x7 configuration data (page 0/ blk 0)"}, {"p1detect", CmdT55xxDetectPage1, IfPm3Lf, "[1] Try detecting if this is a t55xx tag by reading page 1"}, {"protect", CmdT55xxProtect, IfPm3Lf, "Password protect tag"}, {"read", CmdT55xxReadBlock, IfPm3Lf, "b p [password] [o] [1] -- Read T55xx block data. Optional [p password], [override], [page1]"}, {"resetread", CmdResetRead, IfPm3Lf, "Send Reset Cmd then lf read the stream to attempt to identify the start of it (needs a demod and/or plot after)"}, + {"restore", CmdT55xxRestore, IfPm3Lf, "[password] Restore T55xx card Page 0 / Page 1 blocks"}, {"recoverpw", CmdT55xxRecoverPW, IfPm3Lf, "[password] Try to recover from bad password write from a cloner. Only use on PW protected chips!"}, {"special", special, IfPm3Lf, "Show block changes with 64 different offsets"}, {"trace", CmdT55xxReadTrace, AlwaysAvailable, "[1] Show T55x7 traceability data (page 1/ blk 0-1)"}, diff --git a/client/fileutils.c b/client/fileutils.c index b8ee376f1..9c226dd3b 100644 --- a/client/fileutils.c +++ b/client/fileutils.c @@ -328,6 +328,25 @@ int saveFileJSON(const char *preferredName, JSONFileType ftype, uint8_t *data, s } break; } + case jsfT55x7: { + JsonSaveStr(root, "FileType", "t55x7"); + uint8_t id[4] = {0}; + memcpy(id, data, 4); + JsonSaveBufAsHexCompact(root, "$.Card.ID", id, sizeof(id)); + + for (size_t i = 0; i < (datalen / 4); i++) { + char path[PATH_MAX_LENGTH] = {0}; + sprintf(path, "$.blocks.%zu", i); + JsonSaveBufAsHexCompact(root, path, data + (i * 4), 4); + } + break; + } + case jsf14b: + case jsf15: + case jsfLegic: + case jsfT5555: + default: + break; } int res = json_dump_file(root, fileName, JSON_INDENT(2)); @@ -660,6 +679,27 @@ int loadFileJSON(const char *preferredName, void *data, size_t maxdatalen, size_ *datalen = sptr; } + if (!strcmp(ctype, "t55x7")) { + size_t sptr = 0; + for (size_t i = 0; i < (maxdatalen / 4); i++) { + if (sptr + 4 > maxdatalen) { + retval = PM3_EMALLOC; + goto out; + } + + char path[30] = {0}; + sprintf(path, "$.blocks.%zu", i); + + size_t len = 0; + JsonLoadBufAsHex(root, path, &udata[sptr], 4, &len); + if (!len) + break; + + sptr += len; + } + *datalen = sptr; + } + PrintAndLogEx(SUCCESS, "loaded from JSON file " _YELLOW_("%s"), fileName); out: json_decref(root); @@ -1057,10 +1097,10 @@ int searchFile(char **foundpath, const char *pm3dir, const char *searchname, con if (is_directory(searchname)) return PM3_EINVARG; - char *filename = filenamemcopy(searchname, suffix); if (filename == NULL) return PM3_EMALLOC; + if (strlen(filename) == 0) { free(filename); return PM3_EFILE; diff --git a/client/fileutils.h b/client/fileutils.h index 5432aa816..eb4b57c82 100644 --- a/client/fileutils.h +++ b/client/fileutils.h @@ -56,10 +56,11 @@ typedef enum { jsfMfuMemory, jsfHitag, jsfIclass, -// jsf14b, -// jsf15, -// jsfLegic, -// jsfT55xx, + jsf14b, + jsf15, + jsfLegic, + jsfT55x7, + jsfT5555, } JSONFileType; typedef enum { From 813f1e228c77156f416841b8d6fb6e73d147dee0 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 8 Oct 2019 16:10:50 +0200 Subject: [PATCH 04/88] fix nedap examples --- client/cmdlfnedap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/cmdlfnedap.c b/client/cmdlfnedap.c index f4c5346e2..66d093800 100644 --- a/client/cmdlfnedap.c +++ b/client/cmdlfnedap.c @@ -41,7 +41,7 @@ static int usage_lf_nedap_gen(void) { PrintAndLogEx(NORMAL, " l : optional - long (128), default to short (64)"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf nedap generate s 1 c 123 i 112233"); + PrintAndLogEx(NORMAL, " lf nedap generate s 1 c 123 i 12345"); return PM3_SUCCESS; } @@ -58,7 +58,7 @@ static int usage_lf_nedap_clone(void) { // PrintAndLogEx(NORMAL, " Q5 : optional - clone to Q5 (T5555) instead of T55x7 chip"); PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "Examples:"); - PrintAndLogEx(NORMAL, " lf nedap clone s 1 c 123 i 112233"); + PrintAndLogEx(NORMAL, " lf nedap clone s 1 c 123 i 12345"); return PM3_SUCCESS; } From 6d1e109c82bbf77cfd90115924ed08932394cb1b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 8 Oct 2019 16:11:01 +0200 Subject: [PATCH 05/88] filechecks.. could fail stat call and directory could be symlinked --- client/fileutils.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/client/fileutils.c b/client/fileutils.c index 9c226dd3b..57aa939a7 100644 --- a/client/fileutils.c +++ b/client/fileutils.c @@ -77,13 +77,15 @@ int fileExists(const char *filename) { bool is_regular_file(const char *filename) { #ifdef _WIN32 struct _stat st; - _stat(filename, &st); - return S_ISREG(st.st_mode) != 0; + if (_stat(filename, &st) == -1) + return false; #else struct stat st; - stat(filename, &st); - return S_ISREG(st.st_mode) != 0; +// stat(filename, &st); + if (lstat(filename, &st) == -1) + return false; #endif + return S_ISREG(st.st_mode) != 0; } /** * @brief checks if path is directory. @@ -93,13 +95,15 @@ bool is_regular_file(const char *filename) { bool is_directory(const char *filename) { #ifdef _WIN32 struct _stat st; - _stat(filename, &st); - return S_ISDIR(st.st_mode) != 0; + if (_stat(filename, &st) == -1) + return false; #else struct stat st; - stat(filename, &st); - return S_ISDIR(st.st_mode) != 0; +// stat(filename, &st); + if (lstat(filename, &st) == -1) + return false; #endif + return S_ISDIR(st.st_mode) != 0; } From e7a632292d7af7c82f3791279d6e91326a85d601 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 8 Oct 2019 16:13:36 +0200 Subject: [PATCH 06/88] fix t55 comments --- client/cmdlft55xx.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/cmdlft55xx.h b/client/cmdlft55xx.h index d7791466c..2efecdc26 100644 --- a/client/cmdlft55xx.h +++ b/client/cmdlft55xx.h @@ -37,11 +37,11 @@ #define T55X7_INDALA_224_CONFIG_BLOCK 0x000810E0 // emulate indala 224 bit - compat mode, PSK1, psk carrier FC * 2, data rate 32, maxblock 7 #define T55X7_GUARDPROXII_CONFIG_BLOCK 0x00150060 // bitrate 64pcb, Direct modulation, Biphase, 3 data blocks #define T55X7_VIKING_CONFIG_BLOCK 0x00088040 // ASK, compat mode, data rate 32, Manchester, 2 data blocks -#define T55X7_NORALYS_CONFIG_BLOCK 0x00088C6A // ASK, compat mode, (NORALYS - KCP3000) +#define T55X7_NORALYS_CONFIG_BLOCK 0x00088C6A // ASK, compat mode, (NORALYS - KCP3000), 3 data blocks #define T55X7_IOPROX_CONFIG_BLOCK 0x00147040 // ioprox - FSK2a, data rate 64, 2 data blocks -#define T55X7_PRESCO_CONFIG_BLOCK 0x00088088 // ASK, data rate 32, Manchester, 5 data blocks, STT -#define T55X7_NEDAP_64_CONFIG_BLOCK 0x907f0042 // BiPhase, data rate 64, 3 data blocks -#define T55X7_NEDAP_128_CONFIG_BLOCK 0x907f0082 // BiPhase, data rate 64, 5 data blocks +#define T55X7_PRESCO_CONFIG_BLOCK 0x00088088 // ASK, data rate 32, Manchester, 4 data blocks, STT +#define T55X7_NEDAP_64_CONFIG_BLOCK 0x907f0042 // BiPhase, data rate 64, 2 data blocks +#define T55X7_NEDAP_128_CONFIG_BLOCK 0x907f0082 // BiPhase, data rate 64, 4 data blocks #define T55X7_bin 0b0010 From 96bc4438e9de79cc2bdcc15cec28770a2cf0fa9a Mon Sep 17 00:00:00 2001 From: David Lam Date: Tue, 8 Oct 2019 12:42:51 -0400 Subject: [PATCH 07/88] remove extra spaces --- client/cmdlft55xx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index 054747f2e..68df3fb31 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -2746,7 +2746,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { if (AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, resp.oldarg[1], downlink_mode)) { found = tryDetectModulation(downlink_mode, T55XX_PrintConfig); if (found) { - PrintAndLogEx(SUCCESS, "Found valid password: [ " _GREEN_("%08"PRIX64) " ]", resp.oldarg[1]); + PrintAndLogEx(SUCCESS, "Found valid password: [ " _GREEN_("%08"PRIX64) "]", resp.oldarg[1]); } else { PrintAndLogEx(WARNING, "Check pwd failed"); @@ -2798,7 +2798,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { found = tryDetectModulation(dl_mode, T55XX_PrintConfig); if (found) { - PrintAndLogEx(SUCCESS, "Found valid password: [ " _GREEN_("%08"PRIX64) " ]", curr_password); + PrintAndLogEx(SUCCESS, "Found valid password: [ " _GREEN_("%08"PRIX64) "]", curr_password); dl_mode = 4; // Exit other downlink mode checks c = keycount; // Exit loop } @@ -2889,7 +2889,7 @@ static int CmdT55xxBruteForce(const char *Cmd) { PrintAndLogEx(SUCCESS, "Found valid password: [ " _GREEN_("%08X") "]", curr - 1); T55xx_Print_DownlinkMode((found >> 1) & 3); } else - PrintAndLogEx(WARNING, "Bruteforce failed, last tried: [ " _YELLOW_("%08X") " ]", curr); + PrintAndLogEx(WARNING, "Bruteforce failed, last tried: [ " _YELLOW_("%08X") "]", curr); t1 = msclock() - t1; PrintAndLogEx(SUCCESS, "\nTime in bruteforce: %.0f seconds\n", (float)t1 / 1000.0); From 3a63b727418ae98cf0f79e4670f04c203891a941 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 8 Oct 2019 19:49:34 +0200 Subject: [PATCH 08/88] Chg: 'hf mf autopwn' - skip extra checks if all keys found on first check --- client/cmdhfmf.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/client/cmdhfmf.c b/client/cmdhfmf.c index 8c7cfcee7..637cb6635 100644 --- a/client/cmdhfmf.c +++ b/client/cmdhfmf.c @@ -1644,7 +1644,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { int block_cnt = MIFARE_1K_MAXBLOCK; uint8_t tmp_key[6] = {0}; bool know_target_key = false; - // For the timier + // For the timer uint64_t t1; // Parameters and dictionary file char filename[FILE_PATH_SIZE] = {0}; @@ -1666,6 +1666,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { bool verbose = false; bool has_filename = false; bool errors = false; + uint8_t num_found_keys = 0; // Parse the options given by the user while ((ctmp = param_getchar(Cmd, cmdp)) && !errors) { @@ -1819,6 +1820,9 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { // Store the key for the nested / hardnested attack (if supplied by the user) e_sector[blockNo].Key[keyType] = key64; + e_sector[blockNo].foundKey[keyType] = 'U'; + + ++num_found_keys; } else { know_target_key = false; PrintAndLogEx(FAILED, "Key is wrong. Can't authenticate to sector:"_RED_("%3d") " key type: "_RED_("%c") " key: " _RED_("%s"), @@ -1855,11 +1859,14 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { sprint_hex(key, sizeof(key)) ); } + ++num_found_keys; } } } } if (verbose) PrintAndLogEx(INFO, _YELLOW_("======================= STOP KNOWN KEY ATTACK =======================")); + if (num_found_keys == sectors_cnt * 2) + goto all_found; } bool load_success = true; @@ -1873,7 +1880,6 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { load_success = false; } - } if (has_filename == false || load_success == false) { @@ -1905,6 +1911,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { if (mfCheckKeys(FirstBlockOfSector(i), j, true, 1, (keyBlock + (6 * k)), &key64) == PM3_SUCCESS) { e_sector[i].Key[j] = bytes_to_num((keyBlock + (6 * k)), 6); e_sector[i].foundKey[j] = 'D'; + ++num_found_keys; break; } } @@ -2205,6 +2212,8 @@ tryHardnested: // If the nested attack fails then we try the hardnested attack } } +all_found: + // Show the results to the user PrintAndLogEx(NORMAL, ""); PrintAndLogEx(INFO, "found Keys:"); From 7affb00e76d128c6e14cb69b0e276ce9874209b2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 8 Oct 2019 19:55:01 +0200 Subject: [PATCH 09/88] textual --- client/cmdhfmfu.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/client/cmdhfmfu.c b/client/cmdhfmfu.c index 3393c0a0c..8ac391a6e 100644 --- a/client/cmdhfmfu.c +++ b/client/cmdhfmfu.c @@ -791,8 +791,13 @@ static int ndef_print_CC(uint8_t *data) { } int ul_print_type(uint32_t tagtype, uint8_t spaces) { + char spc[11] = " "; spc[10] = 0x00; + + if (spaces > 10) + spaces = 10; + char *spacer = spc + (10 - spaces); if (tagtype & UL) @@ -1405,7 +1410,7 @@ static int CmdHF14AMfUInfo(const char *Cmd) { num_to_bytes(ul_ev1_pwdgenA(card.uid), 4, key); len = ulev1_requestAuthentication(key, pack, sizeof(pack)); if (len > -1) { - PrintAndLogEx(SUCCESS, "Found a default password: %s || Pack: %02X %02X", sprint_hex(key, 4), pack[0], pack[1]); + PrintAndLogEx(SUCCESS, "Found a default password:" _GREEN_("%s") " || Pack: %02X %02X", sprint_hex(key, 4), pack[0], pack[1]); goto out; } @@ -1415,7 +1420,7 @@ static int CmdHF14AMfUInfo(const char *Cmd) { num_to_bytes(ul_ev1_pwdgenB(card.uid), 4, key); len = ulev1_requestAuthentication(key, pack, sizeof(pack)); if (len > -1) { - PrintAndLogEx(SUCCESS, "Found a default password: %s || Pack: %02X %02X", sprint_hex(key, 4), pack[0], pack[1]); + PrintAndLogEx(SUCCESS, "Found a default password:" _GREEN_("%s") " || Pack: %02X %02X", sprint_hex(key, 4), pack[0], pack[1]); goto out; } @@ -1425,7 +1430,7 @@ static int CmdHF14AMfUInfo(const char *Cmd) { num_to_bytes(ul_ev1_pwdgenC(card.uid), 4, key); len = ulev1_requestAuthentication(key, pack, sizeof(pack)); if (len > -1) { - PrintAndLogEx(SUCCESS, "Found a default password: %s || Pack: %02X %02X", sprint_hex(key, 4), pack[0], pack[1]); + PrintAndLogEx(SUCCESS, "Found a default password:" _GREEN_("%s") " || Pack: %02X %02X", sprint_hex(key, 4), pack[0], pack[1]); goto out; } @@ -1435,7 +1440,7 @@ static int CmdHF14AMfUInfo(const char *Cmd) { num_to_bytes(ul_ev1_pwdgenD(card.uid), 4, key); len = ulev1_requestAuthentication(key, pack, sizeof(pack)); if (len > -1) { - PrintAndLogEx(SUCCESS, "Found a default password: %s || Pack: %02X %02X", sprint_hex(key, 4), pack[0], pack[1]); + PrintAndLogEx(SUCCESS, "Found a default password:" _GREEN_("%s") " || Pack: %02X %02X", sprint_hex(key, 4), pack[0], pack[1]); goto out; } @@ -1445,7 +1450,7 @@ static int CmdHF14AMfUInfo(const char *Cmd) { key = default_pwd_pack[i]; len = ulev1_requestAuthentication(key, pack, sizeof(pack)); if (len > -1) { - PrintAndLogEx(SUCCESS, "Found a default password: %s || Pack: %02X %02X", sprint_hex(key, 4), pack[0], pack[1]); + PrintAndLogEx(SUCCESS, "Found a default password:" _GREEN_("%s") " || Pack: %02X %02X", sprint_hex(key, 4), pack[0], pack[1]); break; } else { if (ul_auth_select(&card, tagtype, hasAuthKey, authkeyptr, pack, sizeof(pack)) == PM3_ESOFT) return PM3_ESOFT; From 10a4361cccd96e4be63a6276e63e0e92a8438f5a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 8 Oct 2019 21:45:40 +0200 Subject: [PATCH 10/88] Add: 'lf gallagher *' support. Unknown how to decode to printed number yet. --- client/Makefile | 1 + client/cmdlf.c | 3 + client/cmdlfgallagher.c | 174 ++++++++++++++++++++++++++++++++++++++++ client/cmdlfgallagher.h | 19 +++++ 4 files changed, 197 insertions(+) create mode 100644 client/cmdlfgallagher.c create mode 100644 client/cmdlfgallagher.h diff --git a/client/Makefile b/client/Makefile index 0f059980a..71def6aae 100644 --- a/client/Makefile +++ b/client/Makefile @@ -206,6 +206,7 @@ CMDSRCS = crapto1/crapto1.c \ cmdlfem4x.c \ cmdlffdx.c \ cmdlfguard.c \ + cmdlfgallagher.c \ cmdlfhid.c \ cmdlfhitag.c \ cmdlfio.c \ diff --git a/client/cmdlf.c b/client/cmdlf.c index 49183f609..a77b86d0d 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -48,6 +48,7 @@ #include "cmdlfpac.h" // for pac menu #include "cmdlfkeri.h" // for keri menu #include "cmdlfverichip.h" // for VeriChip menu +#include "cmdlfgallagher.h" // for GALLAGHER menu bool g_lf_threshold_set = false; @@ -1225,6 +1226,7 @@ int CmdLFfind(const char *Cmd) { if (demodSecurakey() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Securakey ID") "found!"); goto out;} if (demodViking() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Viking ID") "found!"); goto out;} if (demodVisa2k() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Visa2000 ID") "found!"); goto out;} + if (demodGallagher() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("GALLAGHER ID") "found!"); goto out;} // if (demodTI() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Texas Instrument ID") "found!"); goto out;} // if (demodVerichip() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("VeriChip ID") "found!"); goto out;} //if (demodFermax() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Fermax ID") "found!"); goto out;} @@ -1283,6 +1285,7 @@ static command_t CommandTable[] = { {"cotag", CmdLFCOTAG, AlwaysAvailable, "{ COTAG CHIPs... }"}, {"em", CmdLFEM4X, AlwaysAvailable, "{ EM4X CHIPs & RFIDs... }"}, {"fdx", CmdLFFdx, AlwaysAvailable, "{ FDX-B RFIDs... }"}, + {"gallagher", CmdLFGallagher, AlwaysAvailable, "{ GALLAGHER RFIDs... }"}, {"gproxii", CmdLFGuard, AlwaysAvailable, "{ Guardall Prox II RFIDs... }"}, {"hid", CmdLFHID, AlwaysAvailable, "{ HID RFIDs... }"}, {"hitag", CmdLFHitag, AlwaysAvailable, "{ Hitag CHIPs... }"}, diff --git a/client/cmdlfgallagher.c b/client/cmdlfgallagher.c new file mode 100644 index 000000000..650c5886a --- /dev/null +++ b/client/cmdlfgallagher.c @@ -0,0 +1,174 @@ +//----------------------------------------------------------------------------- +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// Low frequency GALLAGHER tag commands +// NRZ, RF/32, 128 bits long (unknown cs) +//----------------------------------------------------------------------------- +#include "cmdlfgallagher.h" + +#include //tolower + +#include "commonutil.h" // ARRAYLEN +#include "common.h" +#include "cmdparser.h" // command_t +#include "comms.h" +#include "ui.h" +#include "cmddata.h" +#include "cmdlf.h" +#include "lfdemod.h" // preamble test +#include "protocols.h" // t55xx defines +#include "cmdlft55xx.h" // clone.. + +static int CmdHelp(const char *Cmd); + +static int usage_lf_gallagher_clone(void) { + PrintAndLogEx(NORMAL, "clone a GALLAGHER tag to a T55x7 tag."); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Usage: lf gallagher clone [h] [b ]"); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h : this help"); + PrintAndLogEx(NORMAL, " b : raw hex data. 12 bytes max"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, " lf gallagher clone b 0FFD5461A9DA1346B2D1AC32 "); + return PM3_SUCCESS; +} + +//see ASK/MAN Demod for what args are accepted +static int CmdGallagherDemod(const char *Cmd) { + + (void)Cmd; + bool st = true; + if (ASKDemod_ext("32 0 0 0 a", false, false, 1, &st) != PM3_SUCCESS) { + PrintAndLogEx(DEBUG, "DEBUG: Error - GALLAGHER: ASKDemod failed"); + return PM3_ESOFT; + } + + size_t size = DemodBufferLen; + int ans = detectGallagher(DemodBuffer, &size); + if (ans < 0) { + if (ans == -1) + PrintAndLogEx(DEBUG, "DEBUG: Error - GALLAGHER: too few bits found"); + else if (ans == -2) + PrintAndLogEx(DEBUG, "DEBUG: Error - GALLAGHER: preamble not found"); + else if (ans == -3) + PrintAndLogEx(DEBUG, "DEBUG: Error - GALLAGHER: Size not correct: %zu", size); + else + PrintAndLogEx(DEBUG, "DEBUG: Error - GALLAGHER: ans: %d", ans); + + return PM3_ESOFT; + } + setDemodBuff(DemodBuffer, 96, ans); + setClockGrid(g_DemodClock, g_DemodStartIdx + (ans * g_DemodClock)); + + //got a good demod + uint32_t raw1 = bytebits_to_byte(DemodBuffer, 32); + uint32_t raw2 = bytebits_to_byte(DemodBuffer + 32, 32); + uint32_t raw3 = bytebits_to_byte(DemodBuffer + 64, 32); + + // preamble then appears to have marker bits of "10" CS? + + PrintAndLogEx(SUCCESS, "GALLAGHER Tag Found -- Raw: %08X%08X%08X", raw1, raw2, raw3); + PrintAndLogEx(INFO, "How the Raw ID is translated by the reader is unknown. Share your trace file on forum"); + return PM3_SUCCESS; +} + +static int CmdGallagherRead(const char *Cmd) { + lf_read(true, 4096 * 2 + 20); + return CmdGallagherDemod(Cmd); +} + +static int CmdGallagherClone(const char *Cmd) { + + uint32_t blocks[4]; + bool errors = false; + uint8_t cmdp = 0; + int datalen = 0; + + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 'h': + return usage_lf_gallagher_clone(); + case 'b': { + // skip first block, 3*4 = 12 bytes left + uint8_t rawhex[12] = {0}; + int res = param_gethex_to_eol(Cmd, cmdp + 1, rawhex, sizeof(rawhex), &datalen); + if ( res != 0 ) + errors = true; + + for(uint8_t i = 1; i < ARRAYLEN(blocks); i++) { + blocks[i] = bytes_to_num(rawhex + ( (i - 1) * 4 ), sizeof(uint32_t)); + } + cmdp += 2; + break; + } + default: + PrintAndLogEx(WARNING, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + + if (errors || cmdp == 0) return usage_lf_gallagher_clone(); + + //Pac - compat mode, NRZ, data rate 40, 3 data blocks + blocks[0] = T55x7_MODULATION_MANCHESTER | T55x7_BITRATE_RF_32 | 3 << T55x7_MAXBLOCK_SHIFT; + + PrintAndLogEx(INFO, "Preparing to clone Gallagher to T55x7 with raw hex"); + print_blocks(blocks, ARRAYLEN(blocks)); + + return clone_t55xx_tag(blocks, ARRAYLEN(blocks)); +} + +static int CmdGallagherSim(const char *Cmd) { + + // ASK/MAN sim. + PrintAndLogEx(INFO, " To be implemented, feel free to contribute!"); + return PM3_SUCCESS; +} + +static command_t CommandTable[] = { + {"help", CmdHelp, AlwaysAvailable, "This help"}, + {"demod", CmdGallagherDemod, AlwaysAvailable, "Demodulate an GALLAGHER tag from the GraphBuffer"}, + {"read", CmdGallagherRead, IfPm3Lf, "Attempt to read and extract tag data from the antenna"}, + {"clone", CmdGallagherClone, IfPm3Lf, "clone GALLAGHER tag"}, + {"sim", CmdGallagherSim, IfPm3Lf, "simulate GALLAGHER tag"}, + {NULL, NULL, NULL, NULL} +}; + +static int CmdHelp(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + CmdsHelp(CommandTable); + return PM3_SUCCESS; +} + +int CmdLFGallagher(const char *Cmd) { + clearCommandBuffer(); + return CmdsParse(CommandTable, Cmd); +} + +// by marshmellow +// find PAC preamble in already demoded data +int detectGallagher(uint8_t *dest, size_t *size) { + if (*size < 96) return -1; //make sure buffer has data + size_t startIdx = 0; + uint8_t preamble[] = { + 0, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 0, + 0, 1, 1, 0, 0 ,0 ,0 ,1 + }; + if (!preambleSearch(dest, preamble, sizeof(preamble), size, &startIdx)) + return -2; //preamble not found + if (*size != 96) return -3; //wrong demoded size + //return start position + return (int)startIdx; +} + +int demodGallagher(void) { + return CmdGallagherDemod(""); +} + diff --git a/client/cmdlfgallagher.h b/client/cmdlfgallagher.h new file mode 100644 index 000000000..90729b152 --- /dev/null +++ b/client/cmdlfgallagher.h @@ -0,0 +1,19 @@ +//----------------------------------------------------------------------------- +// +// This code is licensed to you under the terms of the GNU GPL, version 2 or, +// at your option, any later version. See the LICENSE.txt file for the text of +// the license. +//----------------------------------------------------------------------------- +// Low frequency GALLAGHER tag commands +//----------------------------------------------------------------------------- +#ifndef CMDLFGALLAGHER_H__ +#define CMDLFGALLAGHER_H__ + +#include "common.h" + +int CmdLFGallagher(const char *Cmd); + +int demodGallagher(void); +int detectGallagher(uint8_t *dest, size_t *size); +#endif + From 0a50d8f8450ef60d4af8ddb3cd610520a61e1b87 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 8 Oct 2019 22:02:02 +0200 Subject: [PATCH 11/88] adjustments --- client/cmdlfgallagher.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/cmdlfgallagher.c b/client/cmdlfgallagher.c index 650c5886a..051973a28 100644 --- a/client/cmdlfgallagher.c +++ b/client/cmdlfgallagher.c @@ -42,7 +42,7 @@ static int CmdGallagherDemod(const char *Cmd) { (void)Cmd; bool st = true; - if (ASKDemod_ext("32 0 0 0 a", false, false, 1, &st) != PM3_SUCCESS) { + if (ASKDemod_ext("32 0 0 0", false, false, 1, &st) != PM3_SUCCESS) { PrintAndLogEx(DEBUG, "DEBUG: Error - GALLAGHER: ASKDemod failed"); return PM3_ESOFT; } @@ -69,7 +69,7 @@ static int CmdGallagherDemod(const char *Cmd) { uint32_t raw2 = bytebits_to_byte(DemodBuffer + 32, 32); uint32_t raw3 = bytebits_to_byte(DemodBuffer + 64, 32); - // preamble then appears to have marker bits of "10" CS? + // preamble CS? PrintAndLogEx(SUCCESS, "GALLAGHER Tag Found -- Raw: %08X%08X%08X", raw1, raw2, raw3); PrintAndLogEx(INFO, "How the Raw ID is translated by the reader is unknown. Share your trace file on forum"); From 1e5e930bf05c539fe8a02d49a1d865c084884384 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 8 Oct 2019 22:04:15 +0200 Subject: [PATCH 12/88] clean --- common/lfdemod.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/lfdemod.c b/common/lfdemod.c index 8852b9c00..f555c8f65 100644 --- a/common/lfdemod.c +++ b/common/lfdemod.c @@ -1479,10 +1479,10 @@ uint16_t manrawdecode(uint8_t *bits, size_t *size, uint8_t invert, uint8_t *alig int errCnt = 0, bestErr = 1000; uint16_t bitnum = 0, maxBits = 512, bestRun = 0; - size_t i, k; + size_t i; //find correct start position [alignment] - for (k = 0; k < 2; k++) { + for (uint8_t k = 0; k < 2; k++) { for (i = k; i < *size - 1; i += 2) { From ab2078f0a3fed12f076dee650b01cecd1bb32ddd Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Tue, 8 Oct 2019 22:05:23 +0200 Subject: [PATCH 13/88] gallagher trace --- traces/gallagher.pm3 | 39999 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 39999 insertions(+) create mode 100644 traces/gallagher.pm3 diff --git a/traces/gallagher.pm3 b/traces/gallagher.pm3 new file mode 100644 index 000000000..d6e58a707 --- /dev/null +++ b/traces/gallagher.pm3 @@ -0,0 +1,39999 @@ +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +66 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +37 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +105 +98 +91 +86 +80 +74 +68 +62 +58 +57 +53 +45 +40 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +24 +-44 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +108 +102 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +105 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +103 +91 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +106 +99 +93 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +38 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +101 +95 +89 +82 +76 +69 +63 +57 +52 +47 +42 +41 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-36 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-61 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +59 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +37 +-32 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +101 +92 +84 +77 +71 +67 +62 +57 +53 +45 +38 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +71 +-2 +-66 +-123 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +103 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +112 +104 +96 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +113 +105 +99 +92 +86 +76 +68 +65 +62 +57 +51 +47 +-23 +-86 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +108 +99 +93 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +106 +96 +20 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +47 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +103 +95 +84 +72 +63 +60 +57 +55 +51 +45 +42 +36 +-33 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +67 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +101 +94 +87 +80 +73 +66 +59 +53 +48 +42 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +101 +92 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +111 +34 +-34 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +105 +93 +84 +79 +75 +73 +68 +66 +62 +58 +50 +40 +34 +-35 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +105 +93 +17 +-49 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +103 +94 +89 +85 +77 +69 +64 +59 +54 +50 +45 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +65 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +104 +90 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +105 +97 +21 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +105 +97 +89 +80 +72 +68 +64 +59 +54 +46 +42 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +110 +100 +91 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +101 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-20 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +43 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +104 +93 +80 +73 +67 +63 +60 +57 +53 +48 +44 +38 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +4 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +47 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +106 +96 +88 +83 +77 +72 +66 +60 +55 +53 +47 +-23 +-85 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +67 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +12 +-53 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +49 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +111 +103 +93 +86 +79 +72 +65 +60 +55 +51 +46 +43 +36 +-33 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +3 +-62 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +100 +88 +83 +9 +-57 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +110 +100 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +101 +87 +12 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +104 +95 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +110 +97 +91 +85 +82 +75 +69 +63 +59 +53 +51 +44 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +43 +-26 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-45 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +101 +93 +84 +77 +70 +65 +58 +53 +51 +49 +45 +38 +-31 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +7 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +104 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +111 +103 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +71 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +19 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +104 +98 +91 +84 +77 +71 +64 +60 +55 +49 +48 +-23 +-85 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +6 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +103 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +101 +88 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +110 +33 +-36 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-45 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +98 +90 +83 +79 +71 +65 +57 +47 +40 +38 +35 +34 +-35 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +107 +99 +92 +87 +83 +79 +75 +69 +60 +50 +43 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +101 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +44 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +96 +88 +81 +76 +73 +66 +60 +56 +51 +47 +42 +37 +-32 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-39 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +74 +1 +-64 +-121 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +112 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +20 +-45 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +94 +85 +75 +67 +63 +60 +55 +50 +46 +-24 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +69 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +111 +97 +90 +15 +-51 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +101 +94 +89 +13 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +101 +93 +88 +81 +75 +69 +61 +55 +52 +50 +46 +41 +-29 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +106 +97 +91 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +100 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +103 +93 +84 +78 +71 +65 +59 +54 +49 +45 +42 +38 +-32 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +19 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +104 +95 +89 +83 +78 +73 +67 +60 +54 +50 +47 +-23 +-85 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +68 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +49 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-45 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +100 +94 +86 +77 +71 +64 +60 +55 +52 +48 +41 +32 +-37 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +11 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +103 +93 +18 +-49 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +100 +90 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +112 +104 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +101 +91 +15 +-51 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +104 +92 +83 +75 +71 +66 +62 +58 +52 +44 +38 +35 +-34 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +19 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +42 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +113 +101 +92 +87 +80 +73 +66 +61 +54 +48 +45 +41 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +111 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +106 +97 +89 +14 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +103 +93 +86 +81 +76 +70 +67 +61 +56 +50 +46 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +73 +0 +-65 +-121 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +98 +91 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +99 +89 +14 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +59 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +109 +101 +95 +90 +83 +75 +67 +57 +50 +46 +44 +42 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +68 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +12 +-53 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +108 +99 +91 +83 +75 +69 +63 +57 +54 +49 +42 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +100 +88 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +42 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +103 +89 +79 +74 +70 +67 +64 +60 +55 +52 +47 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +76 +3 +-62 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +100 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +102 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +95 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +99 +87 +79 +74 +70 +64 +56 +51 +47 +43 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +112 +98 +86 +81 +7 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +101 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +103 +95 +87 +78 +73 +66 +60 +56 +49 +45 +40 +36 +-33 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +105 +97 +92 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +20 +-46 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +109 +33 +-35 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +99 +88 +82 +77 +72 +67 +60 +54 +47 +46 +41 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-30 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +7 +-58 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +19 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +92 +85 +78 +75 +69 +62 +56 +50 +44 +-26 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +69 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +43 +-26 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +99 +91 +83 +75 +69 +65 +62 +57 +51 +47 +43 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +3 +-62 +-120 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +8 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +106 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +116 +110 +104 +96 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +113 +103 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +109 +102 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +106 +29 +-39 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +102 +95 +88 +82 +74 +68 +63 +58 +52 +47 +42 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +109 +98 +91 +84 +77 +71 +65 +59 +54 +49 +44 +35 +31 +-38 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +102 +96 +20 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +107 +100 +95 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +59 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +106 +101 +95 +87 +83 +77 +71 +60 +50 +43 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +76 +3 +-62 +-120 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +101 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +106 +97 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-45 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +108 +99 +91 +83 +75 +67 +63 +60 +57 +51 +45 +37 +32 +-37 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +72 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +7 +-57 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +112 +105 +99 +92 +85 +79 +72 +66 +60 +51 +42 +37 +-33 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-36 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +103 +95 +19 +-48 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +42 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +105 +96 +87 +79 +73 +64 +58 +55 +50 +47 +43 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +7 +-59 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +95 +86 +11 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +107 +97 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +20 +-46 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +99 +88 +77 +68 +63 +60 +57 +56 +51 +46 +-25 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +97 +92 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +11 +-55 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +106 +97 +91 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +46 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +102 +95 +86 +80 +73 +67 +61 +53 +48 +42 +40 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +100 +89 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +101 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +111 +103 +93 +85 +78 +71 +65 +58 +56 +51 +47 +43 +39 +-31 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-38 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +7 +-59 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +107 +100 +91 +86 +79 +74 +66 +57 +51 +47 +45 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +45 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +102 +93 +84 +78 +71 +66 +59 +54 +49 +44 +39 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +76 +3 +-62 +-120 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +99 +23 +-44 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +114 +104 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +71 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +100 +92 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +101 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +104 +95 +84 +72 +65 +61 +57 +55 +51 +50 +45 +41 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-38 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +110 +33 +-35 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +25 +-42 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +98 +91 +87 +81 +75 +66 +56 +50 +46 +44 +41 +37 +-32 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +7 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +103 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +109 +101 +96 +87 +77 +65 +58 +54 +51 +48 +48 +-23 +-85 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-38 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-58 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +102 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +25 +-43 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +93 +85 +77 +74 +71 +66 +57 +48 +38 +30 +29 +-40 +-100 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +47 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +103 +96 +91 +84 +78 +71 +66 +62 +57 +48 +39 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +95 +19 +-48 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +59 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +42 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +100 +91 +84 +78 +74 +71 +65 +60 +54 +49 +43 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +114 +103 +91 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +113 +104 +97 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-18 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +19 +-48 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +59 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +103 +95 +87 +78 +71 +66 +59 +56 +51 +47 +-23 +-86 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +105 +98 +93 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +101 +87 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +117 +107 +95 +82 +74 +68 +64 +61 +57 +53 +50 +44 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +100 +94 +18 +-48 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +107 +93 +83 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +40 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +110 +99 +90 +83 +75 +68 +62 +59 +56 +51 +48 +44 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +106 +97 +90 +82 +76 +71 +69 +63 +56 +51 +47 +-24 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +10 +-55 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +43 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +102 +94 +85 +74 +66 +62 +59 +57 +53 +48 +44 +36 +-34 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +98 +91 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +107 +96 +89 +14 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +110 +100 +91 +15 +-51 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +98 +90 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +103 +94 +86 +81 +75 +69 +63 +56 +49 +47 +46 +42 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-38 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-28 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +101 +92 +83 +77 +71 +66 +61 +55 +51 +45 +41 +40 +-29 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-30 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +2 +-63 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +105 +97 +93 +17 +-49 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +102 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +101 +94 +82 +70 +62 +60 +57 +54 +53 +49 +-22 +-84 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-59 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +101 +92 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +100 +95 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +108 +31 +-36 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +24 +-43 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +99 +90 +81 +74 +70 +67 +61 +57 +48 +45 +43 +42 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +108 +101 +93 +85 +79 +71 +64 +57 +50 +46 +44 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +115 +106 +98 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +41 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +106 +101 +91 +83 +73 +62 +55 +53 +50 +46 +42 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +101 +92 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +107 +93 +83 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +108 +94 +86 +80 +75 +69 +64 +60 +58 +54 +49 +-22 +-84 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +68 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +118 +110 +100 +91 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +99 +90 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +12 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +102 +97 +89 +78 +67 +57 +51 +48 +46 +46 +46 +43 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +100 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +117 +109 +100 +24 +-44 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +49 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +42 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +101 +25 +-43 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +110 +99 +89 +81 +74 +69 +63 +58 +53 +51 +47 +41 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-30 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +7 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +110 +102 +91 +82 +74 +68 +63 +61 +57 +54 +44 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +9 +-56 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +110 +95 +86 +79 +75 +71 +68 +62 +59 +52 +45 +41 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-36 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +114 +101 +86 +11 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +103 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +101 +94 +18 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +100 +88 +13 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +111 +95 +86 +79 +74 +71 +69 +64 +57 +51 +45 +43 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +2 +-63 +-120 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +19 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +37 +-32 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +21 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +106 +97 +92 +87 +81 +71 +65 +59 +53 +50 +48 +43 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +101 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +105 +97 +21 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +76 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +108 +102 +95 +88 +80 +74 +66 +62 +56 +51 +45 +-26 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +101 +88 +13 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +113 +104 +96 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +35 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +100 +93 +84 +78 +69 +63 +57 +52 +50 +47 +42 +37 +-32 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +70 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +104 +98 +90 +82 +76 +70 +63 +60 +55 +48 +41 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +42 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +112 +103 +96 +86 +74 +67 +63 +59 +57 +55 +51 +42 +34 +-36 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +109 +102 +97 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +103 +92 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +106 +98 +90 +83 +75 +68 +63 +60 +56 +51 +47 +-24 +-86 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +66 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +104 +97 +92 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +112 +100 +89 +14 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +60 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +109 +98 +92 +83 +79 +72 +67 +60 +54 +51 +48 +43 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +102 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +101 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +20 +-46 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-45 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +102 +93 +85 +81 +75 +69 +59 +53 +48 +43 +39 +34 +-35 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +105 +95 +90 +85 +81 +75 +67 +60 +53 +48 +43 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +12 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +42 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +25 +-43 +-102 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +98 +89 +83 +77 +70 +64 +58 +54 +49 +47 +43 +39 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +7 +-58 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +14 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +103 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +104 +95 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +99 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +104 +95 +89 +14 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +36 +-33 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +110 +101 +94 +88 +82 +74 +65 +59 +55 +52 +48 +44 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +37 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +103 +91 +78 +70 +66 +62 +60 +57 +53 +46 +37 +33 +-36 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +103 +97 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +107 +99 +92 +85 +79 +73 +66 +63 +57 +48 +43 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-59 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +96 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +112 +105 +97 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +101 +91 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +11 +-54 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-45 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +104 +94 +86 +80 +76 +73 +67 +62 +58 +52 +48 +44 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +108 +98 +93 +89 +83 +72 +66 +59 +49 +42 +39 +-31 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +105 +98 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +113 +103 +96 +87 +84 +74 +64 +52 +45 +41 +39 +38 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +7 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +90 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +103 +95 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +102 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +104 +95 +87 +76 +69 +65 +62 +57 +48 +46 +-24 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +72 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +103 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +105 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +47 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +103 +94 +87 +80 +73 +70 +62 +54 +43 +38 +34 +33 +-36 +-98 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +113 +103 +95 +89 +14 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +109 +103 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +49 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +108 +98 +92 +86 +79 +71 +65 +59 +56 +53 +48 +40 +31 +-39 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +7 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +97 +91 +84 +80 +74 +66 +58 +53 +49 +44 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +38 +-31 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +96 +86 +80 +75 +72 +70 +64 +59 +49 +43 +39 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +106 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +101 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +101 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +105 +98 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +13 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +36 +-33 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +103 +92 +83 +79 +73 +68 +59 +53 +50 +44 +40 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-48 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +61 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +37 +-32 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +25 +-43 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +104 +97 +92 +88 +82 +74 +69 +62 +56 +53 +52 +44 +35 +-35 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +98 +87 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +115 +101 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +110 +97 +90 +84 +80 +78 +74 +70 +64 +59 +54 +48 +-23 +-86 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +103 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +99 +91 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +110 +33 +-35 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +25 +-42 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +96 +87 +80 +75 +71 +66 +60 +55 +46 +40 +38 +35 +-34 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +65 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-53 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +108 +99 +92 +85 +75 +69 +63 +56 +54 +53 +49 +-21 +-83 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-61 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +114 +101 +87 +12 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +49 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +43 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +113 +102 +93 +85 +78 +73 +68 +62 +57 +52 +44 +34 +28 +-40 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +95 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +107 +99 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-58 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +95 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +97 +90 +84 +77 +70 +64 +61 +56 +51 +45 +-26 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +70 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +102 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +116 +110 +103 +94 +19 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +38 +-31 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +113 +99 +86 +76 +71 +67 +64 +63 +59 +56 +48 +39 +34 +-36 +-97 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +107 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +116 +109 +102 +96 +20 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +109 +99 +92 +83 +76 +68 +65 +63 +55 +51 +46 +42 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +108 +101 +95 +84 +77 +69 +65 +60 +58 +51 +43 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +37 +-32 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +111 +96 +83 +73 +67 +63 +62 +60 +58 +55 +49 +45 +41 +-29 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-26 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-58 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +94 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +19 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +111 +100 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +109 +100 +92 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +110 +103 +91 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +111 +101 +95 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +101 +93 +86 +76 +68 +66 +60 +57 +54 +51 +46 +37 +-33 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-35 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +102 +93 +86 +79 +70 +67 +63 +60 +52 +42 +37 +35 +-35 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +7 +-59 +-116 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +104 +94 +87 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +103 +95 +20 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +111 +99 +91 +83 +77 +70 +64 +58 +52 +50 +45 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +73 +0 +-65 +-121 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +105 +95 +19 +-48 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +104 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +105 +96 +92 +85 +78 +72 +67 +62 +57 +51 +45 +40 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +70 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +100 +92 +85 +79 +71 +63 +61 +55 +50 +46 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +81 +8 +-58 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +104 +97 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +102 +96 +88 +78 +67 +60 +55 +52 +50 +47 +43 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +72 +0 +-65 +-122 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +107 +101 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-13 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +113 +106 +100 +94 +86 +81 +75 +70 +64 +58 +52 +47 +-23 +-86 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +74 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +106 +100 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +99 +89 +14 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +101 +94 +86 +80 +75 +69 +63 +59 +53 +47 +46 +42 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +97 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +108 +103 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +45 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +108 +102 +97 +89 +84 +74 +63 +55 +52 +49 +47 +46 +42 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-37 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +4 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +88 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +60 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +96 +88 +81 +76 +67 +63 +56 +52 +45 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +64 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-31 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +101 +92 +85 +79 +70 +65 +59 +54 +49 +45 +42 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-48 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +99 +23 +-44 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +103 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +105 +94 +87 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +110 +101 +95 +19 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +111 +105 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +48 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-29 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +110 +99 +90 +84 +80 +77 +72 +62 +58 +51 +46 +42 +41 +-29 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +37 +-33 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +101 +94 +90 +85 +80 +75 +70 +64 +56 +46 +40 +36 +35 +-35 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +93 +18 +-49 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +100 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +15 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +46 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +100 +92 +87 +81 +74 +67 +61 +55 +48 +43 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-30 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +6 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-12 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +106 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +105 +96 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +51 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +19 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-8 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +100 +86 +78 +73 +68 +67 +62 +59 +53 +49 +43 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +65 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +13 +-52 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +114 +105 +96 +87 +82 +74 +71 +64 +57 +51 +45 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-30 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-61 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +112 +104 +97 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +101 +91 +82 +77 +73 +67 +63 +55 +49 +44 +44 +40 +-30 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +6 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +100 +93 +18 +-49 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +116 +107 +97 +21 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +87 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +110 +101 +95 +86 +79 +75 +69 +61 +55 +50 +46 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +108 +95 +81 +7 +-59 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +101 +92 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +82 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +106 +97 +91 +86 +79 +76 +72 +64 +56 +51 +45 +41 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +100 +96 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +114 +102 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-23 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +95 +20 +-47 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +109 +98 +93 +87 +81 +73 +67 +57 +50 +46 +44 +40 +37 +-32 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +73 +0 +-65 +-122 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +98 +93 +86 +80 +75 +64 +58 +52 +49 +45 +-26 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +15 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +109 +101 +93 +86 +80 +74 +68 +60 +53 +48 +44 +39 +35 +-34 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-104 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +92 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +112 +104 +95 +19 +-48 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +103 +95 +20 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +105 +96 +20 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +100 +96 +90 +80 +69 +62 +57 +55 +53 +50 +43 +41 +-29 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-30 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +70 +-2 +-67 +-123 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-48 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +37 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +97 +22 +-44 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +99 +91 +85 +78 +72 +66 +60 +56 +51 +47 +41 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +78 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +101 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +113 +103 +96 +20 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +14 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +58 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +107 +97 +91 +84 +78 +70 +64 +58 +57 +50 +44 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-22 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +6 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +92 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +102 +94 +18 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-16 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +111 +104 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +38 +-31 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +24 +-43 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +111 +100 +91 +83 +76 +70 +64 +59 +54 +48 +44 +39 +37 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +67 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +13 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +107 +98 +91 +84 +76 +70 +63 +57 +53 +48 +43 +-27 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-27 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-61 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +118 +111 +104 +98 +22 +-45 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +101 +95 +87 +79 +72 +69 +63 +58 +50 +40 +33 +30 +-39 +-99 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +78 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +123 +115 +103 +93 +16 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +81 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +111 +102 +89 +13 +-53 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-6 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-49 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +115 +105 +97 +88 +80 +72 +66 +60 +59 +53 +49 +-22 +-85 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +65 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +108 +96 +87 +12 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-15 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +96 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +110 +101 +92 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +16 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +49 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +106 +96 +91 +87 +81 +75 +66 +60 +56 +54 +49 +45 +36 +-34 +-95 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-32 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +75 +1 +-64 +-121 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +114 +104 +97 +21 +-47 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +116 +110 +104 +97 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +95 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +52 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +114 +37 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-4 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +109 +101 +93 +86 +81 +73 +68 +63 +57 +50 +44 +42 +39 +-31 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-33 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +17 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +105 +96 +91 +86 +77 +71 +61 +54 +51 +48 +47 +-24 +-86 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +68 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +12 +-53 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +113 +35 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +100 +24 +-44 +-103 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +126 +112 +102 +93 +85 +77 +73 +66 +61 +55 +49 +44 +40 +36 +-34 +-96 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-28 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +96 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +17 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +11 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +1 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +98 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +75 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +113 +103 +93 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +122 +110 +103 +95 +90 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +109 +100 +91 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +85 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +53 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +39 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +115 +105 +93 +81 +72 +68 +66 +63 +62 +57 +52 +46 +42 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-31 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +71 +-1 +-66 +-123 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +19 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +56 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +42 +-27 +-88 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +7 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +2 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +112 +102 +95 +90 +83 +73 +63 +51 +48 +44 +43 +41 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-37 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +8 +-58 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +106 +98 +93 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +113 +103 +97 +21 +-46 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +83 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +15 +-51 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +115 +108 +103 +93 +83 +77 +73 +66 +61 +56 +51 +46 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-29 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +79 +5 +-60 +-117 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +0 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +91 +16 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +124 +115 +104 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-19 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +87 +12 +-54 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +91 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +108 +99 +92 +16 +-51 +-110 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +79 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +102 +26 +-41 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-10 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +111 +102 +94 +89 +87 +81 +77 +74 +69 +61 +55 +46 +39 +37 +-33 +-94 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +73 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +43 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +110 +101 +92 +83 +77 +70 +63 +58 +53 +48 +43 +-28 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-24 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +84 +10 +-56 +-114 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +108 +98 +92 +17 +-50 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +70 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +15 +-50 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +54 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +98 +94 +87 +80 +75 +67 +61 +56 +51 +49 +43 +39 +-31 +-92 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-37 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +80 +6 +-60 +-118 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +77 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +102 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +112 +104 +97 +21 +-46 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-14 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +92 +18 +-48 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +120 +106 +93 +85 +79 +76 +70 +67 +62 +54 +45 +40 +-30 +-91 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +68 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +105 +99 +95 +19 +-48 +-107 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-17 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +83 +9 +-57 +-115 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +93 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +107 +101 +94 +18 +-49 +-108 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +86 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +86 +14 +-51 +-109 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +50 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +119 +41 +-28 +-89 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-3 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +112 +102 +90 +83 +76 +69 +66 +61 +59 +54 +46 +38 +28 +-41 +-101 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-25 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +85 +11 +-54 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +84 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +118 +109 +99 +90 +15 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +80 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +121 +110 +96 +87 +12 +-55 +-113 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-11 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +89 +14 +-52 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +94 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +90 +17 +-49 +-106 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +55 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +117 +40 +-29 +-90 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +9 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +88 +13 +-53 +-111 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-5 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +125 +113 +101 +91 +83 +77 +73 +67 +61 +57 +50 +45 +43 +38 +-32 +-93 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-34 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +77 +4 +-62 +-119 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +89 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +93 +18 +-47 +-105 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +57 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +116 +101 +93 +86 +82 +76 +71 +68 +63 +57 +53 +46 +-25 +-87 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +71 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +82 +9 +-55 +-112 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +-128 +62 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +127 +112 +35 +-34 +-94 +-128 +-128 +-128 From 73c460dec2a054700e79270338f7dc05a8722a65 Mon Sep 17 00:00:00 2001 From: Iceman Date: Wed, 9 Oct 2019 10:24:02 +0200 Subject: [PATCH 14/88] Update README.md coverity scan badge up --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2d51d3fbf..822f744eb 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,9 @@ This repo is based on iceman fork for Proxmark3. It supports other Proxmark3 pl It is dedicated to bringing the most out of the new features for Proxmark3 RDV4.0 new hardware and design. -| Releases | Linux & OSX CI | Windows CI | -| ------------------- |:-------------------:| -------------------:| -| [![Latest release](https://img.shields.io/github/release/RfidResearchGroup/proxmark3.svg)](https://github.com/RfidResearchGroup/proxmark3/releases/latest) | [![Build status](https://travis-ci.org/RfidResearchGroup/proxmark3.svg?branch=master)](https://travis-ci.org/RfidResearchGroup/proxmark3) | [![Build status](https://ci.appveyor.com/api/projects/status/b4gwrhq3nc876cuu/branch/master?svg=true)](https://ci.appveyor.com/project/RfidResearchGroup/proxmark3/branch/master) | - +| Releases | Linux & OSX CI | Windows CI | Coverity | +| ------------------- |:-------------------:| -------------------:| -------------------:| +| [![Latest release](https://img.shields.io/github/release/RfidResearchGroup/proxmark3.svg)](https://github.com/RfidResearchGroup/proxmark3/releases/latest) | [![Build status](https://travis-ci.org/RfidResearchGroup/proxmark3.svg?branch=master)](https://travis-ci.org/RfidResearchGroup/proxmark3) | [![Build status](https://ci.appveyor.com/api/projects/status/b4gwrhq3nc876cuu/branch/master?svg=true)](https://ci.appveyor.com/project/RfidResearchGroup/proxmark3/branch/master) | [![Coverity Status](https://scan.coverity.com/projects/19334/badge.svg)](https://scan.coverity.com/project/proxmark3-rrg-iceman-repo) | --- # PROXMARK INSTALLATION AND OVERVIEW From 0ae7652ea24f88db04761e865b5f134e44df4ce1 Mon Sep 17 00:00:00 2001 From: Iceman Date: Wed, 9 Oct 2019 10:25:42 +0200 Subject: [PATCH 15/88] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 822f744eb..7f5b35569 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ It is dedicated to bringing the most out of the new features for Proxmark3 RDV4. | Releases | Linux & OSX CI | Windows CI | Coverity | | ------------------- |:-------------------:| -------------------:| -------------------:| -| [![Latest release](https://img.shields.io/github/release/RfidResearchGroup/proxmark3.svg)](https://github.com/RfidResearchGroup/proxmark3/releases/latest) | [![Build status](https://travis-ci.org/RfidResearchGroup/proxmark3.svg?branch=master)](https://travis-ci.org/RfidResearchGroup/proxmark3) | [![Build status](https://ci.appveyor.com/api/projects/status/b4gwrhq3nc876cuu/branch/master?svg=true)](https://ci.appveyor.com/project/RfidResearchGroup/proxmark3/branch/master) | [![Coverity Status](https://scan.coverity.com/projects/19334/badge.svg)](https://scan.coverity.com/project/proxmark3-rrg-iceman-repo) | +| [![Latest release](https://img.shields.io/github/release/RfidResearchGroup/proxmark3.svg)](https://github.com/RfidResearchGroup/proxmark3/releases/latest) | [![Build status](https://travis-ci.org/RfidResearchGroup/proxmark3.svg?branch=master)](https://travis-ci.org/RfidResearchGroup/proxmark3) | [![Build status](https://ci.appveyor.com/api/projects/status/b4gwrhq3nc876cuu/branch/master?svg=true)](https://ci.appveyor.com/project/RfidResearchGroup/proxmark3/branch/master) | [![Coverity Status](https://scan.coverity.com/projects/19334/badge.svg)](https://scan.coverity.com/projects/proxmark3-rrg-iceman-repo)| --- # PROXMARK INSTALLATION AND OVERVIEW From fb7728974e29bf3ef897dd5454a2e99f8d0b1376 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 10:33:42 +0200 Subject: [PATCH 16/88] strlen checks --- armsrc/appmain.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 4a9ac2c9f..5c645062d 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1678,33 +1678,33 @@ static void PacketReceived(PacketCommandNG *packet) { } case CMD_SPIFFS_RENAME: { LED_B_ON(); - uint8_t srcfilename[32]; - uint8_t destfilename[32]; + uint8_t src[32]; + uint8_t dest[32]; uint8_t *pfilename = packet->data.asBytes; char *token; token = strtok((char *)pfilename, ","); - strcpy((char *)srcfilename, token); + strncpy((char *)src, token, sizeof(src) - 1); token = strtok(NULL, ","); - strcpy((char *)destfilename, token); - if (DBGLEVEL > 1) Dbprintf("> Filename received as source for spiffs RENAME : %s", srcfilename); - if (DBGLEVEL > 1) Dbprintf("> Filename received as destination for spiffs RENAME : %s", destfilename); - rdv40_spiffs_rename((char *) srcfilename, (char *)destfilename, RDV40_SPIFFS_SAFETY_SAFE); + strncpy((char *)dest, token, sizeof(dest) - 1); + if (DBGLEVEL > 1) Dbprintf("> Filename received as source for spiffs RENAME : %s", src); + if (DBGLEVEL > 1) Dbprintf("> Filename received as destination for spiffs RENAME : %s", dest); + rdv40_spiffs_rename((char *) src, (char *)dest, RDV40_SPIFFS_SAFETY_SAFE); LED_B_OFF(); break; } case CMD_SPIFFS_COPY: { LED_B_ON(); - uint8_t srcfilename[32]; - uint8_t destfilename[32]; + uint8_t src[32]; + uint8_t dest[32]; uint8_t *pfilename = packet->data.asBytes; char *token; token = strtok((char *)pfilename, ","); - strcpy((char *)srcfilename, token); + strncpy((char *)src, token, sizeof(src) - 1); token = strtok(NULL, ","); - strcpy((char *)destfilename, token); - if (DBGLEVEL > 1) Dbprintf("> Filename received as source for spiffs COPY : %s", srcfilename); - if (DBGLEVEL > 1) Dbprintf("> Filename received as destination for spiffs COPY : %s", destfilename); - rdv40_spiffs_copy((char *) srcfilename, (char *)destfilename, RDV40_SPIFFS_SAFETY_SAFE); + strncpy((char *)dest, token, sizeof(dest) - 1); + if (DBGLEVEL > 1) Dbprintf("> Filename received as source for spiffs COPY : %s", src); + if (DBGLEVEL > 1) Dbprintf("> Filename received as destination for spiffs COPY : %s", dest); + rdv40_spiffs_copy((char *) src, (char *)dest, RDV40_SPIFFS_SAFETY_SAFE); LED_B_OFF(); break; } From 8c4a42ff3682f5f3941277d08ed9e0d74bd256cf Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 10:36:34 +0200 Subject: [PATCH 17/88] consider null termination --- armsrc/spiffs_hydrogen.c | 2 +- armsrc/spiffs_nucleus.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/armsrc/spiffs_hydrogen.c b/armsrc/spiffs_hydrogen.c index dee72fb5f..7290e676a 100644 --- a/armsrc/spiffs_hydrogen.c +++ b/armsrc/spiffs_hydrogen.c @@ -749,7 +749,7 @@ static s32_t spiffs_stat_pix(spiffs *fs, spiffs_page_ix pix, spiffs_file fh, spi s->type = objix_hdr.type; s->size = objix_hdr.size == SPIFFS_UNDEFINED_LEN ? 0 : objix_hdr.size; s->pix = pix; - strncpy((char *)s->name, (char *)objix_hdr.name, SPIFFS_OBJ_NAME_LEN); + strncpy((char *)s->name, (char *)objix_hdr.name, SPIFFS_OBJ_NAME_LEN - 1); #if SPIFFS_OBJ_META_LEN _SPIFFS_MEMCPY(s->meta, objix_hdr.meta, SPIFFS_OBJ_META_LEN); #endif diff --git a/armsrc/spiffs_nucleus.c b/armsrc/spiffs_nucleus.c index 8dd4b5629..ef1db36f1 100644 --- a/armsrc/spiffs_nucleus.c +++ b/armsrc/spiffs_nucleus.c @@ -944,7 +944,7 @@ s32_t spiffs_object_create( oix_hdr.p_hdr.flags = 0xff & ~(SPIFFS_PH_FLAG_FINAL | SPIFFS_PH_FLAG_INDEX | SPIFFS_PH_FLAG_USED); oix_hdr.type = type; oix_hdr.size = SPIFFS_UNDEFINED_LEN; // keep ones so we can update later without wasting this page - strncpy((char *)oix_hdr.name, (const char *)name, SPIFFS_OBJ_NAME_LEN); + strncpy((char *)oix_hdr.name, (const char *)name, SPIFFS_OBJ_NAME_LEN - 1); #if SPIFFS_OBJ_META_LEN if (meta) { _SPIFFS_MEMCPY(oix_hdr.meta, meta, SPIFFS_OBJ_META_LEN); @@ -1007,7 +1007,7 @@ s32_t spiffs_object_update_index_hdr( // change name if (name) { - strncpy((char *)objix_hdr->name, (const char *)name, SPIFFS_OBJ_NAME_LEN); + strncpy((char *)objix_hdr->name, (const char *)name, SPIFFS_OBJ_NAME_LEN - 1); } #if SPIFFS_OBJ_META_LEN if (meta) { From ba461b8e1b07537b54421403e4138c55377b6099 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 10:39:36 +0200 Subject: [PATCH 18/88] fix: wrong size when going to calloc --- client/cmdlft55xx.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index 68df3fb31..97798a0eb 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -2554,18 +2554,19 @@ static int CmdResetRead(const char *Cmd) { if (resp.status == PM3_SUCCESS) { - uint8_t *got = calloc(BIGBUF_SIZE - 1, sizeof(uint8_t)); + uint16_t gotsize = BIGBUF_SIZE - 1; + uint8_t *got = calloc(gotsize, sizeof(uint8_t)); if (got == NULL) { PrintAndLogEx(WARNING, "failed to allocate memory"); return PM3_EMALLOC; } - if (!GetFromDevice(BIG_BUF, got, sizeof(got), 0, NULL, 0, NULL, 2500, false)) { + if (!GetFromDevice(BIG_BUF, got, gotsize, 0, NULL, 0, NULL, 2500, false)) { PrintAndLogEx(WARNING, "command execution time out"); free(got); return PM3_ETIMEOUT; } - setGraphBuf(got, sizeof(got)); + setGraphBuf(got, gotsize); free(got); } return PM3_SUCCESS; From abb011c179beb89f571288cf3770229bde17fbac Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 10:41:59 +0200 Subject: [PATCH 19/88] fix: wrong key copied --- client/cmdhfmf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/cmdhfmf.c b/client/cmdhfmf.c index 637cb6635..8671dc6c8 100644 --- a/client/cmdhfmf.c +++ b/client/cmdhfmf.c @@ -1967,7 +1967,7 @@ static int CmdHF14AMfAutoPWN(const char *Cmd) { // Store valid credentials for the nested / hardnested attack if none exist if (know_target_key == false) { - num_to_bytes(e_sector[i].Key[j], 6, key); + num_to_bytes(e_sector[i].Key[j], 6, tmp_key); know_target_key = true; blockNo = i; keyType = j; From b463f2ab5ac15438d25bff327249e622a0fb19cc Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 10:48:20 +0200 Subject: [PATCH 20/88] coverity 226340, make sure its not null --- client/fileutils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/fileutils.c b/client/fileutils.c index 57aa939a7..294d92f15 100644 --- a/client/fileutils.c +++ b/client/fileutils.c @@ -910,7 +910,7 @@ static int filelist(const char *path, const char *ext, bool last, bool tentative PrintAndLogEx(NORMAL, "%s── %s", last ? "└" : "├", path); for (uint16_t i = 0; i < n; i++) { - if (((ext == NULL) && (namelist[i]->d_name[0] != '.')) || (str_endswith(namelist[i]->d_name, ext))) { + if (((ext == NULL) && (namelist[i]->d_name[0] != '.')) || ((ext != NULL) && (str_endswith(namelist[i]->d_name, ext)))) { PrintAndLogEx(NORMAL, "%s   %s── %-21s", last ? " " : "│", i == n - 1 ? "└" : "├", namelist[i]->d_name); } free(namelist[i]); From a3376117080283e2e3f6e333a7834e197bea54a9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 10:59:10 +0200 Subject: [PATCH 21/88] coverity 226386, u8 can never be larger than 256 --- armsrc/mifaresim.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/armsrc/mifaresim.c b/armsrc/mifaresim.c index 7edcec398..93b950e6e 100644 --- a/armsrc/mifaresim.c +++ b/armsrc/mifaresim.c @@ -796,12 +796,17 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain, uint1 if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("[MFEMUL_WORK] Commands must be encrypted (authenticated)"); break; } + + // iceman, u8 can never be larger the MIFARE_4K_MAXBLOCK (256) // Check if Block num is not too far + /* if (receivedCmd_dec[1] > MIFARE_4K_MAXBLOCK) { EmSend4bit(mf_crypto1_encrypt4bit(pcs, CARD_NACK_NA)); if (DBGLEVEL >= DBG_ERROR) Dbprintf("[MFEMUL_WORK] Reader tried to operate (0x%02x) on out of range block: %d (0x%02x), nacking", receivedCmd_dec[0], receivedCmd_dec[1], receivedCmd_dec[1]); break; } + */ + if (MifareBlockToSector(receivedCmd_dec[1]) != cardAUTHSC) { EmSend4bit(mf_crypto1_encrypt4bit(pcs, CARD_NACK_NA)); if (DBGLEVEL >= DBG_ERROR) Dbprintf("[MFEMUL_WORK] Reader tried to operate (0x%02x) on block (0x%02x) not authenticated for (0x%02x), nacking", receivedCmd_dec[0], receivedCmd_dec[1], cardAUTHSC); From 6835cfd76ab3288b401530abeb6c9cdb0715a648 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 11:21:53 +0200 Subject: [PATCH 22/88] textual --- client/cmdlft55xx.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index 97798a0eb..8053c2e76 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -335,7 +335,8 @@ static int usage_t55xx_deviceconfig() { return PM3_SUCCESS; } static int usage_t55xx_protect() { - PrintAndLogEx(NORMAL, "This command set or unsets the pwd bit on T5577."); + PrintAndLogEx(NORMAL, "This command set the pwd bit on T5577. "); + PrintAndLogEx(NORMAL, _RED_("WARNING:") " this locks the tag!"); PrintAndLogEx(NORMAL, "Usage: lf t55xx protect [r ] [p ] [o] [n ]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " p - OPTIONAL password (8 hex characters)"); @@ -385,7 +386,7 @@ int clone_t55xx_tag(uint32_t *blockdata, uint8_t numblocks) { return PM3_ETIMEOUT; } } - + uint8_t res = 0; for (int8_t i = 0; i < numblocks; i++) { @@ -401,7 +402,7 @@ int clone_t55xx_tag(uint32_t *blockdata, uint8_t numblocks) { if (res == 0) PrintAndLogEx(SUCCESS, "Success writing to tag"); - + return PM3_SUCCESS; } From 84f5f0352f957f4985771d3dd22aea60837b61de Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 11:46:11 +0200 Subject: [PATCH 23/88] coverity 226350 - fix resource leak --- client/cmdhficlass.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index 61710201e..e2ecf943c 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -870,6 +870,7 @@ static int CmdHFiClassDecrypt(const char *Cmd) { return PM3_EINVARG; memcpy(key, keyptr, sizeof(key)); + free(keyptr); } // tripledes From cd0a47308d7dd5283ef12ca1b731f79b86a407ce Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 11:47:56 +0200 Subject: [PATCH 24/88] coverity 226337 - fix resource leak --- client/cmdscript.c | 1 + 1 file changed, 1 insertion(+) diff --git a/client/cmdscript.c b/client/cmdscript.c index 245ae61dc..f8306c041 100644 --- a/client/cmdscript.c +++ b/client/cmdscript.c @@ -121,6 +121,7 @@ static int CmdScriptRun(const char *Cmd) { int ret = PM3_EUNDEF; if (!str_endswith(preferredName, ".cmd")) ret = searchFile(&script_path, LUA_SCRIPTS_SUBDIR, preferredName, ".lua", false); if (!str_endswith(preferredName, ".lua")) ret = searchFile(&script_path, CMD_SCRIPTS_SUBDIR, preferredName, ".cmd", false); + free(script_path); return ret; } From 08e62afc59a78c5c846f6e3e7d5be44bf0a30b9d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 11:50:55 +0200 Subject: [PATCH 25/88] coverity 226277 - fix resource leak --- client/loclass/ikeys.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/loclass/ikeys.c b/client/loclass/ikeys.c index f14e43eaf..1bff33f37 100644 --- a/client/loclass/ikeys.c +++ b/client/loclass/ikeys.c @@ -664,10 +664,12 @@ static bool readKeyFile(uint8_t *key, size_t keylen) { } if (keylen != len) { + free(keyptr); return false; } memcpy(key, keyptr, keylen); + free(keyptr); return true; } From b993819b927e7fe733c39dd201c2a1b6386a900c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 11:52:38 +0200 Subject: [PATCH 26/88] coverity 226268 - fix resource leak --- client/fileutils.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/fileutils.c b/client/fileutils.c index 294d92f15..de2fbef19 100644 --- a/client/fileutils.c +++ b/client/fileutils.c @@ -803,9 +803,10 @@ int loadFileDICTIONARY_safe(const char *preferredName, void **pdata, uint8_t key // allocate some space for the dictionary *pdata = calloc(block_size, sizeof(uint8_t)); - if (*pdata == NULL) + if (*pdata == NULL) { + free(path); return PM3_EFILE; - + } mem_size = block_size; FILE *f = fopen(path, "r"); @@ -910,7 +911,7 @@ static int filelist(const char *path, const char *ext, bool last, bool tentative PrintAndLogEx(NORMAL, "%s── %s", last ? "└" : "├", path); for (uint16_t i = 0; i < n; i++) { - if (((ext == NULL) && (namelist[i]->d_name[0] != '.')) || ((ext != NULL) && (str_endswith(namelist[i]->d_name, ext)))) { + if (((ext == NULL) && (namelist[i]->d_name[0] != '.')) || (ext && (str_endswith(namelist[i]->d_name, ext)))) { PrintAndLogEx(NORMAL, "%s   %s── %-21s", last ? " " : "│", i == n - 1 ? "└" : "├", namelist[i]->d_name); } free(namelist[i]); From cce039554db5e7737fafe42fac601bdd38d94754 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Tue, 8 Oct 2019 20:57:35 +0200 Subject: [PATCH 27/88] Avoid hardcoded lf divisors --- armsrc/hitag2.c | 8 ++++---- armsrc/hitagS.c | 8 ++++---- armsrc/lfops.c | 22 +++++++++++----------- armsrc/lfsampling.c | 4 ++-- armsrc/pcf7931.c | 4 ++-- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/armsrc/hitag2.c b/armsrc/hitag2.c index 67bc8c623..3531ac9ea 100644 --- a/armsrc/hitag2.c +++ b/armsrc/hitag2.c @@ -738,7 +738,7 @@ void SniffHitag(void) { // Set up eavesdropping mode, frequency divisor which will drive the FPGA // and analog mux selection. FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_EDGE_DETECT | FPGA_LF_EDGE_DETECT_TOGGLE_MODE); - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125); SetAdcMuxFor(GPIO_MUXSEL_LOPKD); // Configure output pin that is connected to the FPGA (for modulating) @@ -967,7 +967,7 @@ void SimulateHitagTag(bool tag_mem_supplied, uint8_t *data) { // Set up simulator mode, frequency divisor which will drive the FPGA // and analog mux selection. FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_EDGE_DETECT); - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125); //125kHz SetAdcMuxFor(GPIO_MUXSEL_LOPKD); // Configure output pin that is connected to the FPGA (for modulating) @@ -1173,7 +1173,7 @@ void ReaderHitag(hitag_function htf, hitag_data *htd) { // Set fpga in edge detect with reader field, we can modulate as reader now FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_EDGE_DETECT | FPGA_LF_EDGE_DETECT_READER_FIELD); - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125); //125kHz SetAdcMuxFor(GPIO_MUXSEL_LOPKD); // Configure output and enable pin that is connected to the FPGA (for modulating) @@ -1444,7 +1444,7 @@ void WriterHitag(hitag_function htf, hitag_data *htd, int page) { // Set fpga in edge detect with reader field, we can modulate as reader now FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_EDGE_DETECT | FPGA_LF_EDGE_DETECT_READER_FIELD); - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125); //125kHz SetAdcMuxFor(GPIO_MUXSEL_LOPKD); // Disable modulation at default, which means enable the field diff --git a/armsrc/hitagS.c b/armsrc/hitagS.c index a9481f3b6..7c8a01523 100644 --- a/armsrc/hitagS.c +++ b/armsrc/hitagS.c @@ -994,7 +994,7 @@ void SimulateHitagSTag(bool tag_mem_supplied, uint8_t *data) { // and analog mux selection. FpgaDownloadAndGo(FPGA_BITSTREAM_LF); FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_EDGE_DETECT); - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125); //125kHz SetAdcMuxFor(GPIO_MUXSEL_LOPKD); // Configure output pin that is connected to the FPGA (for modulating) @@ -1193,7 +1193,7 @@ void ReadHitagS(hitag_function htf, hitag_data *htd) { // Set fpga in edge detect with reader field, we can modulate as reader now FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_EDGE_DETECT | FPGA_LF_EDGE_DETECT_READER_FIELD); - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125); //125kHz SetAdcMuxFor(GPIO_MUXSEL_LOPKD); // Configure output and enable pin that is connected to the FPGA (for modulating) @@ -1528,7 +1528,7 @@ void WritePageHitagS(hitag_function htf, hitag_data *htd, int page) { // Set fpga in edge detect with reader field, we can modulate as reader now FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_EDGE_DETECT | FPGA_LF_EDGE_DETECT_READER_FIELD); - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125); //125kHz SetAdcMuxFor(GPIO_MUXSEL_LOPKD); // Disable modulation at default, which means enable the field @@ -1789,7 +1789,7 @@ void check_challenges(bool file_given, uint8_t *data) { // Set fpga in edge detect with reader field, we can modulate as reader now FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_EDGE_DETECT | FPGA_LF_EDGE_DETECT_READER_FIELD); - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125); //125kHz SetAdcMuxFor(GPIO_MUXSEL_LOPKD); // Disable modulation at default, which means enable the field diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 92c369b76..862f31626 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -503,7 +503,7 @@ void ReadTItag(void) { // TI tags charge at 134.2kHz FpgaDownloadAndGo(FPGA_BITSTREAM_LF); - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 88); //134.8kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_134); //~134kHz // Place FPGA in passthrough mode, in this mode the CROSS_LO line // connects to SSP_DIN and the SSP_DOUT logic level controls @@ -730,7 +730,7 @@ void WriteTItag(uint32_t idhi, uint32_t idlo, uint16_t crc) { Dbprintf("Writing to tag: %x%08x, crc=%x", idhi, idlo, crc); // TI tags charge at 134.2kHz - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 88); //134.8kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_134); //~134kHz // Place FPGA in passthrough mode, in this mode the CROSS_LO line // connects to SSP_DIN and the SSP_DOUT logic level controls // whether we're modulating the antenna (high) @@ -803,9 +803,9 @@ void SimulateTagLowFrequencyEx(int period, int gap, bool ledcontrol, int numcycl sample_config *sc = getSamplingConfig(); if ((sc->divisor == 1) || (sc->divisor < 0) || (sc->divisor > 255)) - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 88); //134.8kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_134); //~134kHz else if (sc->divisor == 0) - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125); //125kHz else FpgaSendCommand(FPGA_CMD_SET_DIVISOR, sc->divisor); @@ -1145,7 +1145,7 @@ void CmdHIDdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol) uint32_t hi2 = 0, hi = 0, lo = 0; int dummyIdx = 0; // Configure to go in 125kHz listen mode - LFSetupFPGAForADC(95, true); + LFSetupFPGAForADC(LF_DIVISOR_125, true); //clear read buffer BigBuf_Clear_keep_EM(); @@ -1242,7 +1242,7 @@ void CmdAWIDdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol) BigBuf_Clear_keep_EM(); - LFSetupFPGAForADC(95, true); + LFSetupFPGAForADC(LF_DIVISOR_125, true); while (!BUTTON_PRESS() && !data_available()) { @@ -1334,7 +1334,7 @@ void CmdEM410xdemod(int findone, uint32_t *high, uint64_t *low, int ledcontrol) BigBuf_Clear_keep_EM(); - LFSetupFPGAForADC(95, true); + LFSetupFPGAForADC(LF_DIVISOR_125, true); while (!BUTTON_PRESS() && !data_available()) { @@ -1400,7 +1400,7 @@ void CmdIOdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol) { BigBuf_Clear_keep_EM(); // Configure to go in 125kHz listen mode - LFSetupFPGAForADC(95, true); + LFSetupFPGAForADC(LF_DIVISOR_125, true); while (!BUTTON_PRESS() && !data_available()) { WDT_HIT(); @@ -1651,7 +1651,7 @@ void T55xx_SendCMD(uint32_t data, uint32_t pwd, uint16_t arg) { // Send Bits to T55xx // Set up FPGA, 125kHz - LFSetupFPGAForADC(95, true); + LFSetupFPGAForADC(LF_DIVISOR_125, true); // make sure tag is fully powered up... WaitMS(start_wait); @@ -2274,7 +2274,7 @@ void SendForward(uint8_t fwd_bit_count) { fwd_bit_sz = fwd_bit_count; // Set up FPGA, 125kHz or 95 divisor - LFSetupFPGAForADC(95, true); + LFSetupFPGAForADC(LF_DIVISOR_125, true); // force 1st mod pulse (start gap must be longer for 4305) fwd_bit_sz--; //prepare next bit modulation @@ -2396,7 +2396,7 @@ void Cotag(uint32_t arg0) { LED_A_ON(); - LFSetupFPGAForADC(89, true); + LFSetupFPGAForADC(LF_DIVISOR_134, true); //clear buffer now so it does not interfere with timing later BigBuf_Clear_ext(false); diff --git a/armsrc/lfsampling.c b/armsrc/lfsampling.c index 59bb81d83..e8d507b29 100644 --- a/armsrc/lfsampling.c +++ b/armsrc/lfsampling.c @@ -95,9 +95,9 @@ void pushBit(BitstreamOut *stream, uint8_t bit) { void LFSetupFPGAForADC(int divisor, bool lf_field) { FpgaDownloadAndGo(FPGA_BITSTREAM_LF); if ((divisor == 1) || (divisor < 0) || (divisor > 255)) - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 88); //134.8kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_134); //~134kHz else if (divisor == 0) - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125); //125kHz else FpgaSendCommand(FPGA_CMD_SET_DIVISOR, divisor); diff --git a/armsrc/pcf7931.c b/armsrc/pcf7931.c index 2bc101a48..21a739f45 100644 --- a/armsrc/pcf7931.c +++ b/armsrc/pcf7931.c @@ -32,7 +32,7 @@ size_t DemodPCF7931(uint8_t **outBlocks) { uint8_t dir; BigBuf_Clear_keep_EM(); - LFSetupFPGAForADC(95, true); + LFSetupFPGAForADC(LF_DIVISOR_125, true); DoAcquisition_default(0, true); /* Find first local max/min */ @@ -449,7 +449,7 @@ void SendCmdPCF7931(uint32_t *tab) { } FpgaDownloadAndGo(FPGA_BITSTREAM_LF); - FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125kHz + FpgaSendCommand(FPGA_CMD_SET_DIVISOR, LF_DIVISOR_125); //125kHz FpgaWriteConfWord(FPGA_MAJOR_MODE_LF_PASSTHRU); LED_A_ON(); From 98d641dba5bb38fc9decd46d5786e4b067e2088a Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 12:06:45 +0200 Subject: [PATCH 28/88] WaitUS/WaitMS: accept uint32_t --- armsrc/ticks.c | 8 ++++---- armsrc/ticks.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/armsrc/ticks.c b/armsrc/ticks.c index 7b66d17e6..0ce55e417 100644 --- a/armsrc/ticks.c +++ b/armsrc/ticks.c @@ -250,11 +250,11 @@ void WaitTicks(uint32_t ticks) { // Wait / Spindelay in us (microseconds) // 1us = 1.5ticks. -void WaitUS(uint16_t us) { - WaitTicks((uint32_t)us * 3 / 2); +void WaitUS(uint32_t us) { + WaitTicks((us & 0x3FFFFFFF) * 3 / 2); } -void WaitMS(uint16_t ms) { - WaitTicks((uint32_t)ms * 1500); +void WaitMS(uint32_t ms) { + WaitTicks((ms & 0x1FFFFF) * 1500); } // stop clock diff --git a/armsrc/ticks.h b/armsrc/ticks.h index e036e018c..b39ec52bd 100644 --- a/armsrc/ticks.h +++ b/armsrc/ticks.h @@ -38,8 +38,8 @@ uint32_t RAMFUNC GetCountSspClkDelta(); void StartTicks(void); uint32_t GetTicks(void); void WaitTicks(uint32_t ticks); -void WaitUS(uint16_t us); -void WaitMS(uint16_t ms); +void WaitUS(uint32_t us); +void WaitMS(uint32_t ms); void StopTicks(void); From 6d3adf71b61b0d552bfaa36d094ff366a3458c01 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 12:44:17 +0200 Subject: [PATCH 29/88] coverity 226370 - fix resource leak --- client/emv/emv_pki_priv.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/emv/emv_pki_priv.c b/client/emv/emv_pki_priv.c index f10c5352b..db8b6381d 100644 --- a/client/emv/emv_pki_priv.c +++ b/client/emv/emv_pki_priv.c @@ -196,7 +196,6 @@ static struct tlvdb *emv_pki_sign_key(const struct crypto_pk *cp, struct tlvdb *exp_db = tlvdb_fixed(exp_tag, ipk->elen, ipk->exp); if (!exp_db) { free(msg); - return NULL; } @@ -207,8 +206,10 @@ static struct tlvdb *emv_pki_sign_key(const struct crypto_pk *cp, add_tlv, NULL); free(msg); - if (!db) + if (!db) { + free(exp_db); return NULL; + } tlvdb_add(db, exp_db); From 0aa88aecf52d290ddfacce63aaac6dcc72ac48b9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 12:45:12 +0200 Subject: [PATCH 30/88] coverity - fix tainted --- client/emv/emv_pk.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/emv/emv_pk.c b/client/emv/emv_pk.c index 8465a6e95..3d64e6326 100644 --- a/client/emv/emv_pk.c +++ b/client/emv/emv_pk.c @@ -408,7 +408,8 @@ static struct emv_pk *emv_pk_get_ca_pk_from_file(const char *fname, char buf[2048]; if (fgets(buf, sizeof(buf), f) == NULL) break; - + if (buf == NULL) + break; struct emv_pk *pk = emv_pk_parse_pk(buf); if (!pk) continue; From b9c020a1dd2d275e0c07bd208655073f10de2628 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 12:46:01 +0200 Subject: [PATCH 31/88] coverity 227802 - fix uninitialized --- client/cmdscript.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/cmdscript.c b/client/cmdscript.c index f8306c041..322fd6adb 100644 --- a/client/cmdscript.c +++ b/client/cmdscript.c @@ -55,7 +55,7 @@ static int CmdScriptRun(const char *Cmd) { static uint8_t luascriptfile_idx = 0; sscanf(Cmd, "%127s%n %255[^\n\r]%n", preferredName, &name_len, arguments, &arg_len); - char *script_path; + char *script_path = NULL; if ((!str_endswith(preferredName, ".cmd")) && (searchFile(&script_path, LUA_SCRIPTS_SUBDIR, preferredName, ".lua", true) == PM3_SUCCESS)) { int error; if (luascriptfile_idx == MAX_NESTED_LUASCRIPT) { From efe5e33acb69e6fd1141a02abf2fb4ac5ee25797 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 12:48:43 +0200 Subject: [PATCH 32/88] coverity 226283 - fix out-of-bounds. Maybe a bit too large buffer now. --- armsrc/dbprint.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/armsrc/dbprint.c b/armsrc/dbprint.c index a26b7ba8b..499703ef1 100644 --- a/armsrc/dbprint.c +++ b/armsrc/dbprint.c @@ -44,7 +44,7 @@ void DbpString(char *str) { void DbprintfEx(uint32_t flags, const char *fmt, ...) { #if DEBUG // should probably limit size here; oh well, let's just use a big buffer - char output_string[128] = {0x00}; + char output_string[PM3_CMD_DATA_SIZE] = {0x00}; va_list ap; va_start(ap, fmt); kvsprintf(fmt, output_string, 10, ap); @@ -57,7 +57,7 @@ void DbprintfEx(uint32_t flags, const char *fmt, ...) { void Dbprintf(const char *fmt, ...) { #if DEBUG // should probably limit size here; oh well, let's just use a big buffer - char output_string[128] = {0x00}; + char output_string[PM3_CMD_DATA_SIZE] = {0x00}; va_list ap; va_start(ap, fmt); From 201817d7e47a8d18a26f214938893e5aa3c573c9 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 12:56:11 +0200 Subject: [PATCH 33/88] coverity 226430 - printf args --- client/cmdhfmfu.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/cmdhfmfu.c b/client/cmdhfmfu.c index 8ac391a6e..e3ae2f0e1 100644 --- a/client/cmdhfmfu.c +++ b/client/cmdhfmfu.c @@ -856,10 +856,10 @@ int ul_print_type(uint32_t tagtype, uint8_t spaces) { } static int ulc_print_3deskey(uint8_t *data) { - PrintAndLogEx(NORMAL, " deskey1 [44/0x2C] : %s [s]", sprint_hex(data, 4), sprint_ascii(data, 4)); - PrintAndLogEx(NORMAL, " deskey1 [45/0x2D] : %s [s]", sprint_hex(data + 4, 4), sprint_ascii(data + 4, 4)); - PrintAndLogEx(NORMAL, " deskey2 [46/0x2E] : %s [s]", sprint_hex(data + 8, 4), sprint_ascii(data + 8, 4)); - PrintAndLogEx(NORMAL, " deskey2 [47/0x2F] : %s [s]", sprint_hex(data + 12, 4), sprint_ascii(data + 12, 4)); + PrintAndLogEx(NORMAL, " deskey1 [44/0x2C] : %s [%s]", sprint_hex(data, 4), sprint_ascii(data, 4)); + PrintAndLogEx(NORMAL, " deskey1 [45/0x2D] : %s [%s]", sprint_hex(data + 4, 4), sprint_ascii(data + 4, 4)); + PrintAndLogEx(NORMAL, " deskey2 [46/0x2E] : %s [%s]", sprint_hex(data + 8, 4), sprint_ascii(data + 8, 4)); + PrintAndLogEx(NORMAL, " deskey2 [47/0x2F] : %s [%s]", sprint_hex(data + 12, 4), sprint_ascii(data + 12, 4)); PrintAndLogEx(NORMAL, "\n 3des key : %s", sprint_hex(SwapEndian64(data, 16, 8), 16)); return PM3_SUCCESS; } From 2b50ccbef81649f6c94be33ddb2058624480e76c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 13:00:22 +0200 Subject: [PATCH 34/88] coverity 226404 - fix ignoring number.. --- client/amiitool/amiibo.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/client/amiitool/amiibo.c b/client/amiitool/amiibo.c index d8fe837b1..36b9ae967 100644 --- a/client/amiitool/amiibo.c +++ b/client/amiitool/amiibo.c @@ -137,16 +137,15 @@ bool nfc3d_amiibo_load_keys(nfc3d_amiibo_keys *amiiboKeys, const char *path) { return false; } - if (!fread(amiiboKeys, sizeof(*amiiboKeys), 1, f)) { - fclose(f); - return false; - } + size_t len = fread(amiiboKeys, sizeof(*amiiboKeys), 1, f); fclose(f); - if ( - (amiiboKeys->data.magicBytesSize > 16) || - (amiiboKeys->tag.magicBytesSize > 16) - ) { + if (len != sizeof(*amiiboKeys)) { + return false; + } + + if ((amiiboKeys->data.magicBytesSize > 16) || + (amiiboKeys->tag.magicBytesSize > 16)) { return false; } From 86a47a3282476c6e9a6b44f11898e8383c747f52 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 13:03:23 +0200 Subject: [PATCH 35/88] dangerous stuff... --- armsrc/appmain.c | 4 +++ armsrc/lfops.c | 39 +++++++++++++++++++++++++++ armsrc/lfops.h | 1 + client/cmdlft55xx.c | 64 +++++++++++++++++++++++++++++++++++++++++++++ include/pm3_cmd.h | 7 +++++ 5 files changed, 115 insertions(+) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 5c645062d..248346b4f 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -804,6 +804,10 @@ static void PacketReceived(PacketCommandNG *packet) { T55xxWriteBlock(packet->data.asBytes); break; } + case CMD_LF_T55XX_DANGERRAW: { + T55xxDangerousRawTest(packet->data.asBytes); + break; + } case CMD_LF_T55XX_WAKEUP: { struct p { uint32_t password; diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 862f31626..5ff1867de 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -1703,6 +1703,45 @@ void T55xxResetRead(uint8_t flags) { LED_A_OFF(); } +void T55xxDangerousRawTest(uint8_t *data) { + // supports only default downlink mode + t55xx_test_block_t *c = (t55xx_test_block_t *)data; + + uint8_t start_wait = 4; + uint8_t bs[128/8]; + memset(bs, 0x00, sizeof(bs)); + uint8_t len = 0; + if (c->bitlen == 0 || c->bitlen > 128 || c->time == 0) + reply_ng(CMD_LF_T55XX_DANGERRAW, PM3_EINVARG, NULL, 0); + for (uint8_t i=0; ibitlen; i++) + len = T55xx_SetBits(bs, len, c->data[i], 1, sizeof(bs)); + + if (DBGLEVEL > 1) { + Dbprintf("LEN %i, TIMING %i", len, c->time); + for (uint8_t i = 0; i < len; i++) { + uint8_t sendbits = (bs[BITSTREAM_BYTE(i)] >> BITSTREAM_BIT(i)); + Dbprintf("%02i: %i", i, sendbits & 1); + } + } + + LED_A_ON(); + LFSetupFPGAForADC(LF_DIVISOR_125, true); + // make sure tag is fully powered up... + WaitMS(start_wait); + // Trigger T55x7 in mode. + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + WaitUS(T55xx_Timing.m[0].start_gap); + uint8_t sendbits; + for (uint8_t i = 0; i < len; i++) { + sendbits = (bs[BITSTREAM_BYTE(i)] >> BITSTREAM_BIT(i)); + T55xxWriteBit(sendbits & 1, 0); + } + TurnReadLFOn(c->time); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + reply_ng(CMD_LF_T55XX_DANGERRAW, PM3_SUCCESS, NULL, 0); + LED_A_OFF(); +} + // Write one card block in page 0, no lock //void T55xxWriteBlockExt(uint32_t data, uint8_t blockno, uint32_t pwd, uint8_t flags) { void T55xxWriteBlock(uint8_t *data) { diff --git a/armsrc/lfops.h b/armsrc/lfops.h index bf246b529..f81d1e7ab 100644 --- a/armsrc/lfops.h +++ b/armsrc/lfops.h @@ -52,6 +52,7 @@ void T55xxWriteBlock(uint8_t *data); void T55xxReadBlock(uint8_t page, bool pwd_mode, bool brute_mem, uint8_t block, uint32_t pwd, uint8_t downlink_mode); void T55xxWakeUp(uint32_t pwd, uint8_t flags); void T55xx_ChkPwds(uint8_t flags); +void T55xxDangerousRawTest(uint8_t *data); void TurnReadLFOn(uint32_t delay); diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index 8053c2e76..b96dd4cb8 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -1672,6 +1672,69 @@ static int CmdT55xxWriteBlock(const char *Cmd) { return PM3_SUCCESS; } +static int CmdT55xxDangerousRaw(const char *Cmd) { + // supports only default downlink mode + t55xx_test_block_t ng; + ng.time = 0; + ng.bitlen = 0; + memset(ng.data, 0x00, sizeof(ng.data)); + bool errors = false; + uint8_t cmdp = 0; + + while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { + switch (tolower(param_getchar(Cmd, cmdp))) { + case 't': + ng.time = param_get32ex(Cmd, cmdp + 1, 0, 10); + if (ng.time == 0 || ng.time > 200000) { + PrintAndLogEx(ERR, "Timing off 1..200000 limits, got %i", ng.time); + errors = true; + break; + } + cmdp += 2; + break; + case 'b': { + uint32_t n = param_getlength(Cmd, cmdp + 1); + if (n > 128) { + PrintAndLogEx(ERR, "Bitstream too long, max 128 bits, got %i", n); + errors = true; + break; + } + for (uint8_t i = 0; i < n; i++) { + char c = param_getchar_indx(Cmd, i, cmdp + 1); + if (c == '0') + ng.data[i] = 0; + else if (c == '1') + ng.data[i] = 1; + else { + PrintAndLogEx(ERR, "Unknown bit char '%c'", c); + errors = true; + break; + } + } + ng.bitlen = n; + cmdp += 2; + break; + } + default: + PrintAndLogEx(ERR, "Unknown parameter '%c'", param_getchar(Cmd, cmdp)); + errors = true; + break; + } + } + if (errors || ng.bitlen == 0 || ng.time == 0) { + PrintAndLogEx(ERR, "Error occurred, abort. " _RED_("DANGEROUS COMMAND, DO NOT USE!")); + return PM3_EINVARG; + } + PacketResponseNG resp; + clearCommandBuffer(); + SendCommandNG(CMD_LF_T55XX_DANGERRAW, (uint8_t *)&ng, sizeof(ng)); + if (!WaitForResponseTimeout(CMD_LF_T55XX_DANGERRAW, &resp, 2000)) { + PrintAndLogEx(ERR, "Error occurred, device did not ACK write operation."); + return PM3_ETIMEOUT; + } + return resp.status; +} + static int CmdT55xxReadTrace(const char *Cmd) { bool frombuff = false; @@ -3400,6 +3463,7 @@ static command_t CommandTable[] = { {"bruteforce", CmdT55xxBruteForce, IfPm3Lf, " Simple bruteforce attack to find password"}, {"config", CmdT55xxSetConfig, AlwaysAvailable, "Set/Get T55XX configuration (modulation, inverted, offset, rate)"}, {"chk", CmdT55xxChkPwds, IfPm3Lf, "Check passwords from dictionary/flash"}, + {"dangerraw", CmdT55xxDangerousRaw, IfPm3Lf, "Sends raw bitstream. Dangerous, do not use!! b t "}, {"detect", CmdT55xxDetect, AlwaysAvailable, "[1] Try detecting the tag modulation from reading the configuration block."}, {"deviceconfig", CmdT55xxSetDeviceConfig, IfPm3Lf, "Set/Get T55XX device configuration (startgap, writegap, write0, write1, readgap"}, {"dump", CmdT55xxDump, IfPm3Lf, "[password] [o] Dump T55xx card Page 0 block 0-7. Optional [password], [override]"}, diff --git a/include/pm3_cmd.h b/include/pm3_cmd.h index ca778a495..a6d59aa05 100644 --- a/include/pm3_cmd.h +++ b/include/pm3_cmd.h @@ -198,6 +198,12 @@ typedef struct { uint8_t flags; } PACKED t55xx_write_block_t; +typedef struct { + uint8_t data[128]; + uint8_t bitlen; + uint32_t time; +} PACKED t55xx_test_block_t; + // For CMD_LF_HID_SIMULATE (FSK) typedef struct { uint32_t hi2; @@ -376,6 +382,7 @@ typedef struct { #define CMD_LF_SAMPLING_GET_CONFIG 0x0227 #define CMD_LF_T55XX_CHK_PWDS 0x0230 +#define CMD_LF_T55XX_DANGERRAW 0x0231 /* CMD_SET_ADC_MUX: ext1 is 0 for lopkd, 1 for loraw, 2 for hipkd, 3 for hiraw */ From 1ec34e00b673cfb4a699df98f8af74cd56663a1b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 13:05:23 +0200 Subject: [PATCH 36/88] coverity 226386 - fix operands dont.. --- armsrc/mifaresim.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/armsrc/mifaresim.c b/armsrc/mifaresim.c index 93b950e6e..b1f419242 100644 --- a/armsrc/mifaresim.c +++ b/armsrc/mifaresim.c @@ -495,10 +495,10 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain, uint1 //allow collecting up to 7 sets of nonces to allow recovery of up to 7 keys #define ATTACK_KEY_COUNT 7 // keep same as define in cmdhfmf.c -> readerAttack() (Cannot be more than 7) - nonces_t ar_nr_resp[ATTACK_KEY_COUNT * 2]; //*2 for 2 separate attack types (nml, moebius) 36 * 7 * 2 bytes = 504 bytes + nonces_t ar_nr_resp[ATTACK_KEY_COUNT * 2]; // *2 for 2 separate attack types (nml, moebius) 36 * 7 * 2 bytes = 504 bytes memset(ar_nr_resp, 0x00, sizeof(ar_nr_resp)); - uint8_t ar_nr_collected[ATTACK_KEY_COUNT * 2]; //*2 for 2nd attack type (moebius) + uint8_t ar_nr_collected[ATTACK_KEY_COUNT * 2]; // *2 for 2nd attack type (moebius) memset(ar_nr_collected, 0x00, sizeof(ar_nr_collected)); uint8_t nonce1_count = 0; uint8_t nonce2_count = 0; @@ -719,8 +719,9 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain, uint1 // RCV: 61 XX => Using KEY B // XX: Block number + // iceman, u8 can never be larger than 256 // if authenticating to a block that shouldn't exist - as long as we are not doing the reader attack - if (receivedCmd_dec[1] > MIFARE_4K_MAXBLOCK && !((flags & FLAG_NR_AR_ATTACK) == FLAG_NR_AR_ATTACK)) { + if ( ((flags & FLAG_NR_AR_ATTACK) != FLAG_NR_AR_ATTACK) ) { EmSend4bit(mf_crypto1_encrypt4bit(pcs, CARD_NACK_NA)); if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("Reader tried to operate (0x%02x) on out of range block: %d (0x%02x), nacking", receivedCmd_dec[0], receivedCmd_dec[1], receivedCmd_dec[1]); break; From 88424214227c50b210a1d8d1440e12c21deac95b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 13:11:22 +0200 Subject: [PATCH 37/88] coverity 71844 - fix untrusted value. fgets could have nulled the pointer. --- client/proxmark3.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/proxmark3.c b/client/proxmark3.c index ced6ed5c5..31afe470f 100644 --- a/client/proxmark3.c +++ b/client/proxmark3.c @@ -160,6 +160,8 @@ check_script: if (!fgets(script_cmd_buf, sizeof(script_cmd_buf), current_cmdscriptfile())) { if (!pop_cmdscriptfile()) break; + if (script_cmd_buf == NULL) + break; goto check_script; } else { From ab222a06b99833f73e1a929d6681cd11b3ffb25b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 13:19:47 +0200 Subject: [PATCH 38/88] ..revert --- client/emv/emv_pk.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/client/emv/emv_pk.c b/client/emv/emv_pk.c index 3d64e6326..fbd0e39a9 100644 --- a/client/emv/emv_pk.c +++ b/client/emv/emv_pk.c @@ -408,23 +408,21 @@ static struct emv_pk *emv_pk_get_ca_pk_from_file(const char *fname, char buf[2048]; if (fgets(buf, sizeof(buf), f) == NULL) break; - if (buf == NULL) - break; + struct emv_pk *pk = emv_pk_parse_pk(buf); if (!pk) continue; + if (memcmp(pk->rid, rid, 5) || pk->index != idx) { emv_pk_free(pk); continue; } fclose(f); - return pk; } fclose(f); - return NULL; } From 81e7e34a24cf760ac16c15875ac11aef10473b90 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 13:44:51 +0200 Subject: [PATCH 39/88] revert tainted --- client/proxmark3.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/client/proxmark3.c b/client/proxmark3.c index 31afe470f..c6045d900 100644 --- a/client/proxmark3.c +++ b/client/proxmark3.c @@ -157,11 +157,9 @@ check_script: memset(script_cmd_buf, 0, sizeof(script_cmd_buf)); // read script file - if (!fgets(script_cmd_buf, sizeof(script_cmd_buf), current_cmdscriptfile())) { + if (fgets(script_cmd_buf, sizeof(script_cmd_buf), current_cmdscriptfile()) == NULL) { if (!pop_cmdscriptfile()) break; - if (script_cmd_buf == NULL) - break; goto check_script; } else { From 07a23b202cdeda89dfb2075987c2f260a0a5d426 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 13:56:01 +0200 Subject: [PATCH 40/88] coverity 226308 - fix logically dead code --- include/protocols.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/protocols.h b/include/protocols.h index 747e4e346..4eb3ab58c 100644 --- a/include/protocols.h +++ b/include/protocols.h @@ -133,7 +133,7 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define ICLASS_CMD_READ_OR_IDENTIFY 0xC #define ICLASS_CMD_ACT 0xE -#define ICLASS_CREDIT(x) (((x) & 0x5) == 1) +#define ICLASS_CREDIT(x) (((x) & 0x5) == 0x5) #define ICLASS_DEBIT(x) (((x) & 0x5) == 0) From 26c8f680fce5dda27368756eabacd1d6708d5b17 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 14:14:27 +0200 Subject: [PATCH 41/88] coverity 226289 - printf --- client/emv/emvjson.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/emv/emvjson.c b/client/emv/emvjson.c index e1fd9111c..ee2245eb0 100644 --- a/client/emv/emvjson.c +++ b/client/emv/emvjson.c @@ -157,7 +157,7 @@ int JsonSaveTLVElm(json_t *elm, const char *path, struct tlv *tlvelm, bool saveN } } else { if (json_path_set(elm, path, obj, 0, &error)) { - PrintAndLogEx(ERR, "ERROR: can't set json path: ", error.text); + PrintAndLogEx(ERR, "ERROR: can't set json path: %s", error.text); return 2; } } From 3ba529612e0d0ce291c207b19787a39dcff611af Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 14:17:28 +0200 Subject: [PATCH 42/88] coverity 226321 - printf --- client/cmdlfem4x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/cmdlfem4x.c b/client/cmdlfem4x.c index bd93a48ab..7d1266cdc 100644 --- a/client/cmdlfem4x.c +++ b/client/cmdlfem4x.c @@ -692,7 +692,7 @@ static int CmdEM410xWrite(const char *Cmd) { // the clock rate in bits 8-15 of the card value card = (card & 0xFF) | ((clock1 << 8) & 0xFF00); } else if (card == 0) { - PrintAndLogEx(SUCCESS, "Writing %s tag with UID 0x%010" PRIx64, "T5555", id, clock1); + PrintAndLogEx(SUCCESS, "Writing %s tag with UID 0x%010" PRIx64, "(clock rate: %d)"; "T5555", id, clock1); card = (card & 0xFF) | ((clock1 << 8) & 0xFF00); } else { PrintAndLogEx(FAILED, "Error! Bad card type selected.\n"); From be51e98d7cbdfe5cf05948a67e8f422b050ff31a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 14:19:10 +0200 Subject: [PATCH 43/88] coverity 226361 - printf --- client/cmdhf14a.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/cmdhf14a.c b/client/cmdhf14a.c index 14be6f7a7..519a8b0f2 100644 --- a/client/cmdhf14a.c +++ b/client/cmdhf14a.c @@ -553,7 +553,7 @@ int ExchangeRAW14a(uint8_t *datain, int datainlen, bool activateField, bool leav } if (resp.oldarg[0] != 1 && resp.oldarg[0] != 2) { - PrintAndLogEx(ERR, "Card not in iso14443-4. res=" PRId64 ".", resp.oldarg[0]); + PrintAndLogEx(ERR, "Card not in iso14443-4. res=%" PRId64 ".", resp.oldarg[0]); return 1; } From f1b15d8e076fd017390a9f87cd80d0434d2b2276 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 14:21:09 +0200 Subject: [PATCH 44/88] coverity 226425 - printf --- client/emv/emvjson.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/emv/emvjson.c b/client/emv/emvjson.c index ee2245eb0..4a3ef9299 100644 --- a/client/emv/emvjson.c +++ b/client/emv/emvjson.c @@ -76,7 +76,7 @@ int JsonSaveJsonObject(json_t *root, const char *path, json_t *value) { if (path[0] == '$') { if (json_path_set(root, path, value, 0, &error)) { - PrintAndLogEx(ERR, "ERROR: can't set json path: ", error.text); + PrintAndLogEx(ERR, "ERROR: can't set json path: %s", error.text); return 2; } else { return 0; From 16f186694366af8765130501b031713a13ce35bb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 14:22:35 +0200 Subject: [PATCH 45/88] coverity 226410 - printf --- client/cmdhfmf.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/client/cmdhfmf.c b/client/cmdhfmf.c index 8671dc6c8..6b266e21e 100644 --- a/client/cmdhfmf.c +++ b/client/cmdhfmf.c @@ -2735,8 +2735,13 @@ static int CmdHF14AMfChk(const char *Cmd) { PrintAndLogEx(INFO, "No key specified, trying default keys"); for (; keycnt < ARRAYLEN(g_mifare_default_keys); keycnt++) PrintAndLogEx(NORMAL, "[%2d] %02x%02x%02x%02x%02x%02x", keycnt, - (keyBlock + 6 * keycnt)[0], (keyBlock + 6 * keycnt)[1], (keyBlock + 6 * keycnt)[2], - (keyBlock + 6 * keycnt)[3], (keyBlock + 6 * keycnt)[4], (keyBlock + 6 * keycnt)[5], 6); + (keyBlock + 6 * keycnt)[0], + (keyBlock + 6 * keycnt)[1], + (keyBlock + 6 * keycnt)[2], + (keyBlock + 6 * keycnt)[3], + (keyBlock + 6 * keycnt)[4], + (keyBlock + 6 * keycnt)[5] + ); } // initialize storage for found keys From 55c33e75efb056af6c51cd6cb4b7c05986dcc855 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 14:25:13 +0200 Subject: [PATCH 46/88] coverity 226254... - printf --- client/cmdusart.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/client/cmdusart.c b/client/cmdusart.c index 3d664d516..8e8899dc8 100644 --- a/client/cmdusart.c +++ b/client/cmdusart.c @@ -391,7 +391,7 @@ static int CmdUsartBtFactory(const char *Cmd) { if (strcmp((char *)data, "OK+ROLE:S") == 0) { PrintAndLogEx(SUCCESS, "Role set to " _GREEN_("Slave")); } else { - PrintAndLogEx(WARNING, "Unexpected response to AT+ROLE=S: " _YELLOW_("%.*s"), len, data); + PrintAndLogEx(WARNING, "Unexpected response to AT+ROLE=S: " _YELLOW_("%.*s"), (int)len, data); } } else { PrintAndLogEx(WARNING, "Lost contact with add-on, please try again"); @@ -505,30 +505,33 @@ static int CmdUsartBtPin(const char *Cmd) { break; } } + //Validations if (errors || cmdp == 0) { usage_usart_bt_pin(); return PM3_EINVARG; } + char string[6 + sizeof(pin)] = {0}; sprintf(string, "AT+PIN%s", pin); uint8_t data[PM3_CMD_DATA_SIZE] = {0x00}; size_t len = 0; -// PrintAndLogEx(NORMAL, "TX (%3zu):%.*s", strlen(string), (int)strlen(string), string); int ret = usart_txrx((uint8_t *)string, strlen(string), data, &len, 600); + if (ret == PM3_ENODATA) { PrintAndLogEx(FAILED, "No response from add-on, is it ON and blinking?"); return ret; } + if (ret != PM3_SUCCESS) { PrintAndLogEx(FAILED, "Command failed, ret=%i", ret); return ret; } -// PrintAndLogEx(NORMAL, "RX (%3zu):%.*s", len, (int)len, data); + if (strcmp((char *)data, "OKsetPIN") == 0) { PrintAndLogEx(NORMAL, "PIN changed " _GREEN_("successfully")); } else { - PrintAndLogEx(WARNING, "Unexpected answer: %.*s", len, data); + PrintAndLogEx(WARNING, "Unexpected answer: %.*s", (int)len, data); } return PM3_SUCCESS; } @@ -621,7 +624,7 @@ static int CmdUsartRX(const char *Cmd) { int ret = usart_rx(data, &len, waittime); if (ret != PM3_SUCCESS) return ret; - PrintAndLogEx(NORMAL, "RX:%.*s", len, data); + PrintAndLogEx(NORMAL, "RX:%.*s", (int)len, data); return PM3_SUCCESS; } From 9b0e70ca279aab3be921e16ac18d1588348661e8 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 14:28:52 +0200 Subject: [PATCH 47/88] fixes --- client/cmdlfawid.c | 2 +- client/cmdlfem4x.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/cmdlfawid.c b/client/cmdlfawid.c index 641c29720..5084edf6a 100644 --- a/client/cmdlfawid.c +++ b/client/cmdlfawid.c @@ -219,7 +219,7 @@ static int CmdAWIDDemod(const char *Cmd) { else if (idx == -4) PrintAndLogEx(DEBUG, "DEBUG: Error - AWID preamble not found"); else if (idx == -5) - PrintAndLogEx(DEBUG, "DEBUG: Error - AWID size not correct, size %d", size); + PrintAndLogEx(DEBUG, "DEBUG: Error - AWID size not correct, size %zu", size); else PrintAndLogEx(DEBUG, "DEBUG: Error - AWID error demoding fsk %d", idx); diff --git a/client/cmdlfem4x.c b/client/cmdlfem4x.c index 7d1266cdc..2bfb25eaa 100644 --- a/client/cmdlfem4x.c +++ b/client/cmdlfem4x.c @@ -692,7 +692,7 @@ static int CmdEM410xWrite(const char *Cmd) { // the clock rate in bits 8-15 of the card value card = (card & 0xFF) | ((clock1 << 8) & 0xFF00); } else if (card == 0) { - PrintAndLogEx(SUCCESS, "Writing %s tag with UID 0x%010" PRIx64, "(clock rate: %d)"; "T5555", id, clock1); + PrintAndLogEx(SUCCESS, "Writing %s tag with UID 0x%010" PRIx64, "(clock rate: %d)", "T5555", id, clock1); card = (card & 0xFF) | ((clock1 << 8) & 0xFF00); } else { PrintAndLogEx(FAILED, "Error! Bad card type selected.\n"); From 0556c835700dec6ad6bbb5d1aca2fab935ed1de6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 14:30:50 +0200 Subject: [PATCH 48/88] fixes --- client/cmdlfhid.c | 2 +- client/mifare/ndef.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/cmdlfhid.c b/client/cmdlfhid.c index 1ec068a4f..de7d9ecd5 100644 --- a/client/cmdlfhid.c +++ b/client/cmdlfhid.c @@ -246,7 +246,7 @@ static int CmdHIDDemod(const char *Cmd) { } } - PrintAndLogEx(DEBUG, "DEBUG: HID idx: %d, Len: %d, Printing Demod Buffer:", idx, size); + PrintAndLogEx(DEBUG, "DEBUG: HID idx: %d, Len: %zu, Printing Demod Buffer:", idx, size); if (g_debugMode) printDemodBuff(); diff --git a/client/mifare/ndef.c b/client/mifare/ndef.c index f4575c893..946b80b04 100644 --- a/client/mifare/ndef.c +++ b/client/mifare/ndef.c @@ -186,7 +186,7 @@ static int ndefDecodeSig(uint8_t *sig, size_t siglen) { if (sigURI) { size_t intsigurilen = (sig[indx] << 8) + sig[indx + 1]; indx += 2; - PrintAndLogEx(NORMAL, "\tsignature uri [%zu]: %.*s", intsigurilen, intsigurilen, &sig[indx]); + PrintAndLogEx(NORMAL, "\tsignature uri [%zu]: %.*s", intsigurilen, (int)intsigurilen, &sig[indx]); indx += intsigurilen; } From d8dba632becb478df78be12d6834b79be18f3c4a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 15:06:22 +0200 Subject: [PATCH 49/88] coverity 226322 - resourceleak --- client/emv/crypto_polarssl.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/emv/crypto_polarssl.c b/client/emv/crypto_polarssl.c index b87dd9ee0..a6f69a529 100644 --- a/client/emv/crypto_polarssl.c +++ b/client/emv/crypto_polarssl.c @@ -260,6 +260,7 @@ static unsigned char *crypto_pk_polarssl_get_parameter(const struct crypto_pk *_ res = mbedtls_mpi_write_binary(&cp->ctx.N, result, *plen); if (res < 0) { printf("Error write_binary."); + free(result); result = 0; } break; @@ -271,6 +272,7 @@ static unsigned char *crypto_pk_polarssl_get_parameter(const struct crypto_pk *_ res = mbedtls_mpi_write_binary(&cp->ctx.E, result, *plen); if (res < 0) { printf("Error write_binary."); + free(result); result = 0; } break; From 69274a1184aaf4bfb6ccde21255e3ec46e836721 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 9 Oct 2019 15:23:58 +0200 Subject: [PATCH 50/88] fix --- client/cmdtrace.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/client/cmdtrace.c b/client/cmdtrace.c index 836c0b9eb..29c3732f8 100644 --- a/client/cmdtrace.c +++ b/client/cmdtrace.c @@ -153,6 +153,8 @@ static uint16_t printHexLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trac return tracepos; } + uint16_t ret; + switch (protocol) { case ISO_14443A: { /* https://www.kaiser.cx/pcap-iso14443.html defines a pseudo header: @@ -185,16 +187,14 @@ static uint16_t printHexLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trac temp_str1, temp_str2, line); - return tracepos; + ret = tracepos; } default: PrintAndLogEx(NORMAL, "Currently only 14a supported"); - return traceLen; + ret = traceLen; } - if (is_last_record(tracepos, trace, traceLen)) return traceLen; - - return tracepos; + return ret; } static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trace, uint8_t protocol, bool showWaitCycles, bool markCRCBytes) { From 89dd574f53e6aea5917e24868cda74662775a051 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 15:29:42 +0200 Subject: [PATCH 51/88] new coverity scripts --- .coverity.conf.sample | 35 ++++++++++++++++++++++++++++++++ covbuild.sh | 46 ++++++++++++++----------------------------- covconfig.sh | 13 +++--------- covsubmit.sh | 31 +++++++++++++++++++++++++++++ 4 files changed, 84 insertions(+), 41 deletions(-) create mode 100644 .coverity.conf.sample create mode 100755 covsubmit.sh diff --git a/.coverity.conf.sample b/.coverity.conf.sample new file mode 100644 index 000000000..2beb3e519 --- /dev/null +++ b/.coverity.conf.sample @@ -0,0 +1,35 @@ +COVLOGIN=myemail@corp.com +COVTOKEN=aAbBcCdDeEfFgGhHiIjJkK +COVBINDIR="/opt/cov-analysis-linux64-2019.03/bin" +# Nickname included in scan description: +NICKNAME=myself + +COVDIR=cov-int +COVBUILD="cov-build --dir $COVDIR" + +# Depending if your kernel > 4.8.x, you might need to activate this to run Coverity executables +# (but latest tools with kernel 5.2 run fine) +#sysctl vsyscall=emulate + +export PATH="$PATH:$COVBINDIR" + +function pre_build_hook() { + # tmp dir will be /tmp/cov-$username/ + # It's the good place if you need to redirect to elsewhere with a symlink + return 0 +} + +function post_build_hook() { + return 0 +} + +function pre_submit_hook() { + return 0 +} + +function post_submit_hook() { + # Clean up build folders? + rm -rf "$COVDIR" + echo "Coverity build cleaned" + return 0 +} diff --git a/covbuild.sh b/covbuild.sh index ab6273d73..bd06630d4 100755 --- a/covbuild.sh +++ b/covbuild.sh @@ -1,36 +1,20 @@ #!/bin/bash -## 2016-01-16, Iceman -## build script for Coverity Scan of the proxmark3 source code +set -e +. .coverity.conf || exit 1 -## clean up pre-compiled objects. +pre_build_hook + +rm -rf "$COVDIR" +mkdir "$COVDIR" make clean +$COVBUILD make -j 4 bootrom +$COVBUILD make -j 4 fullimage +$COVBUILD make -j 4 mfkey +$COVBUILD make -j 4 nonce2key +$COVBUILD make -j 4 fpga_compress +# make sure to do client after ARM because Coverity retains one build info per file +# and we want the client-side of the common/ analysis +$COVBUILD make -j 4 client -## coverity build -/home/user/cov-analysis-linux-2017.07/bin/cov-build --dir cov-int make all - -## delete all previous tarballs -rm proxmark3.all.*.tgz - -## -VERSION="0.1.`date --date now +%H%M`" -TODAY="`date --date now +%Y%m%d.%H%M`" -DESCNAME="autoMango.$TODAY" -FILENAME=proxmark3.all.$TODAY.tgz - -## create tarball -tar cfz $FILENAME cov-int -echo "Coverity build file is ready" - -## clean up build folders -rm -rf cov-int -echo "Coverity build cleaned" - -## upload tarball to Coverity.com -curl --form token=dY262wIFmfkcRkA5Pyw0eA \ - --form email=herrmann1001@gmail.com \ - --form file=@$FILENAME \ - --form version="$VERSION" \ - --form description="$DESCNAME" \ - https://scan.coverity.com/builds?project=proxmark3_iceman_fork -echo "tarball uploaded to Coverity for analyse" +post_build_hook diff --git a/covconfig.sh b/covconfig.sh index 91b59ceaa..5f4878b3c 100755 --- a/covconfig.sh +++ b/covconfig.sh @@ -1,13 +1,6 @@ #!/bin/bash -## 20160116, iceman -## remove old -rm /home/user/cov-analysis-linux-2017.07/config/coverity_config.xml -rm -rf /home/user/cov-analysis-linux-2017.07/config/gcc-config-? -rm -rf /home/user/cov-analysis-linux-2017.07/config/g++-config-? - - ## Configure ARM , make sure you have the arm gcc in your $PATH variable. -#/home/user/cov-analysis-linux-2017.07/bin/cov-configure -co arm-none-eabi-gcc -- -mthumb-interwork -/home/user/cov-analysis-linux-2017.07/bin/cov-configure -co arm-none-eabi-gcc -- -std=c99 -mthumb -mthumb-interwork +set -e +. .coverity.conf || exit 1 -echo "Done." \ No newline at end of file +cov-configure --template --compiler arm-none-eabi-gcc --comptype gcc diff --git a/covsubmit.sh b/covsubmit.sh new file mode 100755 index 000000000..daa8d203d --- /dev/null +++ b/covsubmit.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +set -e +. .coverity.conf || exit 1 + +pre_submit_hook + +## delete all previous tarballs +rm proxmark3.all.*.tgz + +VERSION="0.1.$(date --date now +%H%M)" +TODAY="$(date --date now +%Y%m%d.%H%M)" +DESCNAME="manual_by_$NICKNAME.$TODAY" +FILENAME="proxmark3.all.$TODAY.tgz" +LOGFILENAME="${FILENAME/.tgz/.log}" + +## create tarball +tar cfz "$FILENAME" "$COVDIR" || exit $? +echo "Coverity build file is ready" + +## upload tarball to Coverity.com +curl --progress-bar --fail \ + --form token="$COVTOKEN" \ + --form email="$COVLOGIN" \ + --form file="@$FILENAME" \ + --form version="$VERSION" \ + --form description="$DESCNAME" \ + https://scan.coverity.com/builds?project=Proxmark3+RRG+Iceman+repo | tee -a "${LOGFILENAME}" ; test "${PIPESTATUS[0]}" -eq 0 || exit $? +echo "tarball uploaded to Coverity for analyse" + +post_submit_hook From 9fac99025b15ab22d467c8ef4bbffb526d208d49 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 16:40:01 +0200 Subject: [PATCH 52/88] fix bunch of printf api warnings in common/lfdemod.c --- common/lfdemod.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/common/lfdemod.c b/common/lfdemod.c index f555c8f65..1d1749d8e 100644 --- a/common/lfdemod.c +++ b/common/lfdemod.c @@ -324,13 +324,13 @@ bool preambleSearchEx(uint8_t *bits, uint8_t *preamble, size_t pLen, size_t *siz //first index found foundCnt++; if (foundCnt == 1) { - if (g_debugMode >= 1) prnt("DEBUG: (preambleSearchEx) preamble found at %i", idx); + if (g_debugMode >= 1) prnt("DEBUG: (preambleSearchEx) preamble found at %zu", idx); *startIdx = idx; if (findone) return true; } if (foundCnt == 2) { - if (g_debugMode >= 1) prnt("DEBUG: (preambleSearchEx) preamble 2 found at %i", idx); + if (g_debugMode >= 1) prnt("DEBUG: (preambleSearchEx) preamble 2 found at %zu", idx); *size = idx - *startIdx; return true; } @@ -361,7 +361,7 @@ static size_t findModStart(uint8_t *src, size_t size, uint8_t expWaveSize) { } if (thresholdCnt > 10) break; } - if (g_debugMode == 2) prnt("DEBUG: threshold Count reached at index %u, count: %u", i, thresholdCnt); + if (g_debugMode == 2) prnt("DEBUG: threshold Count reached at index %zu, count: %u", i, thresholdCnt); return i; } @@ -436,7 +436,7 @@ size_t pskFindFirstPhaseShift(uint8_t *samples, size_t size, uint8_t *curPhase, // find peak // was "samples[i] + fc" but why? must have been used to weed out some wave error... removed.. if (samples[i] < samples[i + 1] && samples[i + 1] >= samples[i + 2]) { waveEnd = i + 1; - if (g_debugMode == 2) prnt("DEBUG PSK: waveEnd: %u, waveStart: %u", waveEnd, waveStart); + if (g_debugMode == 2) prnt("DEBUG PSK: waveEnd: %zu, waveStart: %zu", waveEnd, waveStart); waveLenCnt = waveEnd - waveStart; if (waveLenCnt > fc && waveStart > fc && !(waveLenCnt > fc + 8)) { //not first peak and is a large wave but not out of whack lastAvgWaveVal = avgWaveVal / (waveLenCnt); @@ -1021,7 +1021,7 @@ uint16_t countFC(uint8_t *bits, size_t size, bool fskAdj) { fcL = fcLens[best1]; } if ((size - 180) / fcH / 3 > fcCnts[best1] + fcCnts[best2]) { - if (g_debugMode == 2) prnt("DEBUG countfc: fc is too large: %u > %u. Not psk or fsk", (size - 180) / fcH / 3, fcCnts[best1] + fcCnts[best2]); + if (g_debugMode == 2) prnt("DEBUG countfc: fc is too large: %zu > %u. Not psk or fsk", (size - 180) / fcH / 3, fcCnts[best1] + fcCnts[best2]); return 0; //lots of waves not psk or fsk } // TODO: take top 3 answers and compare to known Field clocks to get top 2 @@ -1072,7 +1072,7 @@ int DetectPSKClock(uint8_t *dest, size_t size, int clock, size_t *firstPhaseShif } *firstPhaseShift = firstFullWave; - if (g_debugMode == 2) prnt("DEBUG PSK: firstFullWave: %d, waveLen: %d", firstFullWave, fullWaveLen); + if (g_debugMode == 2) prnt("DEBUG PSK: firstFullWave: %zu, waveLen: %d", firstFullWave, fullWaveLen); //test each valid clock from greatest to smallest to see which lines up for (clkCnt = 7; clkCnt >= 1 ; clkCnt--) { @@ -1081,7 +1081,7 @@ int DetectPSKClock(uint8_t *dest, size_t size, int clock, size_t *firstPhaseShif size_t waveStart = 0; uint16_t errCnt = 0; uint16_t peakcnt = 0; - if (g_debugMode == 2) prnt("DEBUG PSK: clk: %d, lastClkBit: %d", clk[clkCnt], lastClkBit); + if (g_debugMode == 2) prnt("DEBUG PSK: clk: %d, lastClkBit: %zu", clk[clkCnt], lastClkBit); for (i = firstFullWave + fullWaveLen - 1; i < loopCnt - 2; i++) { //top edge of wave = start of new wave @@ -1093,7 +1093,7 @@ int DetectPSKClock(uint8_t *dest, size_t size, int clock, size_t *firstPhaseShif waveLenCnt = waveEnd - waveStart; if (waveLenCnt > *fc) { //if this wave is a phase shift - if (g_debugMode == 2) prnt("DEBUG PSK: phase shift at: %d, len: %d, nextClk: %d, i: %d, fc: %d", waveStart, waveLenCnt, lastClkBit + clk[clkCnt] - tol, i + 1, *fc); + if (g_debugMode == 2) prnt("DEBUG PSK: phase shift at: %zu, len: %d, nextClk: %zu, i: %zu, fc: %d", waveStart, waveLenCnt, lastClkBit + clk[clkCnt] - tol, i + 1, *fc); if (i + 1 >= lastClkBit + clk[clkCnt] - tol) { //should be a clock bit peakcnt++; lastClkBit += clk[clkCnt]; @@ -1325,7 +1325,7 @@ bool DetectST(uint8_t *buffer, size_t *size, int *foundclock, size_t *ststart, s // padd the amount off - could be problematic... but shouldn't happen often datalen -= datalen % clk; } else { - if (g_debugMode == 2) prnt("DEBUG STT: datalen not divisible by clk: %u %% %d = %d - quitting", datalen, clk, datalen % clk); + if (g_debugMode == 2) prnt("DEBUG STT: datalen not divisible by clk: %zu %% %d = %zu - quitting", datalen, clk, datalen % clk); return false; } // if datalen is less than one t55xx block - ERROR @@ -1346,7 +1346,7 @@ bool DetectST(uint8_t *buffer, size_t *size, int *foundclock, size_t *ststart, s size_t newloc = 0; i = 0; - if (g_debugMode == 2) prnt("DEBUG STT: Starting STT trim - start: %d, datalen: %d ", dataloc, datalen); + if (g_debugMode == 2) prnt("DEBUG STT: Starting STT trim - start: %zu, datalen: %zu ", dataloc, datalen); bool firstrun = true; // warning - overwriting buffer given with raw wave data with ST removed... while (dataloc < bufsize - (clk / 2)) { @@ -1376,7 +1376,7 @@ bool DetectST(uint8_t *buffer, size_t *size, int *foundclock, size_t *ststart, s } newloc += i; //skip next ST - we just assume it will be there from now on... - if (g_debugMode == 2) prnt("DEBUG STT: skipping STT at %d to %d", dataloc, dataloc + (clk * 4)); + if (g_debugMode == 2) prnt("DEBUG STT: skipping STT at %zu to %zu", dataloc, dataloc + (clk * 4)); dataloc += clk * 4; } *size = newloc; @@ -1549,7 +1549,7 @@ static uint16_t cleanAskRawDemod(uint8_t *bits, size_t *size, int clk, int inver if (smplCnt > clk + cl_4 + 1) { //too many samples errCnt++; - if (g_debugMode == 2) prnt("DEBUG ASK: cleanAskRawDemod ASK Modulation Error FULL at: %u [%u > %u]", i, smplCnt, clk + cl_4 + 1); + if (g_debugMode == 2) prnt("DEBUG ASK: cleanAskRawDemod ASK Modulation Error FULL at: %zu [%zu > %u]", i, smplCnt, clk + cl_4 + 1); bits[bitCnt++] = 7; } else if (waveHigh) { bits[bitCnt++] = invert; @@ -1570,7 +1570,7 @@ static uint16_t cleanAskRawDemod(uint8_t *bits, size_t *size, int clk, int inver if (smplCnt > cl_2 + cl_4 + 1) { //too many samples errCnt++; - if (g_debugMode == 2) prnt("DEBUG ASK: cleanAskRawDemod ASK Modulation Error HALF at: %u [%u]", i, smplCnt); + if (g_debugMode == 2) prnt("DEBUG ASK: cleanAskRawDemod ASK Modulation Error HALF at: %zu [%zu]", i, smplCnt); bits[bitCnt++] = 7; } @@ -1645,7 +1645,7 @@ int askdemod_ext(uint8_t *bits, size_t *size, int *clk, int *invert, int maxErr, errCnt = manrawdecode(bits, size, 0, &alignPos); *startIdx += ((*clk / 2) * alignPos); - prnt("DEBUG: (askdemod_ext) CLEAN: startIdx %i, alignPos %u , bestError %u", *startIdx, alignPos, errCnt); + prnt("DEBUG: (askdemod_ext) CLEAN: startIdx %i, alignPos %u , bestError %zu", *startIdx, alignPos, errCnt); } return errCnt; } @@ -1870,10 +1870,10 @@ static size_t aggregate_bits(uint8_t *dest, size_t size, uint8_t clk, uint8_t in if (numBits == 0) { if (lastval == 1) { //high to low *startIdx += (fclow * i) - (n * clk); - if (g_debugMode == 2) prnt("DEBUG (aggregate_bits) FSK startIdx %i, fclow*idx %i, n*clk %u", *startIdx, fclow * i, n * clk); + if (g_debugMode == 2) prnt("DEBUG (aggregate_bits) FSK startIdx %i, fclow*idx %zu, n*clk %u", *startIdx, fclow * i, n * clk); } else { *startIdx += (fchigh * i) - (n * clk); - if (g_debugMode == 2) prnt("DEBUG (aggregate_bits) FSK startIdx %i, fchigh*idx %i, n*clk %u", *startIdx, fchigh * i, n * clk); + if (g_debugMode == 2) prnt("DEBUG (aggregate_bits) FSK startIdx %i, fchigh*idx %zu, n*clk %u", *startIdx, fchigh * i, n * clk); } } @@ -1984,8 +1984,8 @@ int pskRawDemod_ext(uint8_t *dest, size_t *size, int *clock, int *invert, int *s //set start of wave as clock align lastClkBit = firstFullWave; if (g_debugMode == 2) { - prnt("DEBUG PSK: firstFullWave: %u, waveLen: %u, startIdx %i", firstFullWave, fullWaveLen, *startIdx); - prnt("DEBUG PSK: clk: %d, lastClkBit: %u, fc: %u", *clock, lastClkBit, fc); + prnt("DEBUG PSK: firstFullWave: %zu, waveLen: %u, startIdx %i", firstFullWave, fullWaveLen, *startIdx); + prnt("DEBUG PSK: clk: %d, lastClkBit: %zu, fc: %u", *clock, lastClkBit, fc); } waveStart = 0; From a00e016643224c338c2f225580ec133556b2c2ee Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 16:40:08 +0200 Subject: [PATCH 53/88] text --- .coverity.conf.sample | 1 + 1 file changed, 1 insertion(+) diff --git a/.coverity.conf.sample b/.coverity.conf.sample index 2beb3e519..3ed4be64b 100644 --- a/.coverity.conf.sample +++ b/.coverity.conf.sample @@ -1,5 +1,6 @@ COVLOGIN=myemail@corp.com COVTOKEN=aAbBcCdDeEfFgGhHiIjJkK +# Toolchain available at https://scan.coverity.com/download COVBINDIR="/opt/cov-analysis-linux64-2019.03/bin" # Nickname included in scan description: NICKNAME=myself From 2b42e79a2f461a1e5220735591293ec022a64a32 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 16:54:09 +0200 Subject: [PATCH 54/88] cov: add git ref --- covsubmit.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/covsubmit.sh b/covsubmit.sh index daa8d203d..881b0e161 100755 --- a/covsubmit.sh +++ b/covsubmit.sh @@ -10,7 +10,7 @@ rm proxmark3.all.*.tgz VERSION="0.1.$(date --date now +%H%M)" TODAY="$(date --date now +%Y%m%d.%H%M)" -DESCNAME="manual_by_$NICKNAME.$TODAY" +DESCNAME="manual_by_$NICKNAME.$TODAY.$(git describe --dirty --always)" FILENAME="proxmark3.all.$TODAY.tgz" LOGFILENAME="${FILENAME/.tgz/.log}" From 020141726e9a94d401beb37aee949f586df9fd41 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 17:53:45 +0200 Subject: [PATCH 55/88] cov: use incremental pseudoversion --- covsubmit.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/covsubmit.sh b/covsubmit.sh index 881b0e161..6cf1bba47 100755 --- a/covsubmit.sh +++ b/covsubmit.sh @@ -8,8 +8,8 @@ pre_submit_hook ## delete all previous tarballs rm proxmark3.all.*.tgz -VERSION="0.1.$(date --date now +%H%M)" TODAY="$(date --date now +%Y%m%d.%H%M)" +VERSION="0.1.$TODAY" DESCNAME="manual_by_$NICKNAME.$TODAY.$(git describe --dirty --always)" FILENAME="proxmark3.all.$TODAY.tgz" LOGFILENAME="${FILENAME/.tgz/.log}" From d588b04537d19766f1d5dc5f79e4d14ac3932bb3 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 18:03:56 +0200 Subject: [PATCH 56/88] fix more printf api warnings/bugs --- client/cmdhfepa.c | 2 +- client/cmdhffelica.c | 2 +- client/cmdhficlass.c | 4 ++-- client/cmdlfem4x.c | 4 ++-- client/cmdlffdx.c | 2 +- client/cmdusart.c | 8 ++++---- client/mifare/ndef.c | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/client/cmdhfepa.c b/client/cmdhfepa.c index 1b6ec4d6a..af5d26eaf 100644 --- a/client/cmdhfepa.c +++ b/client/cmdhfepa.c @@ -50,7 +50,7 @@ static int CmdHFEPACollectPACENonces(const char *Cmd) { // check if command failed if (resp.oldarg[0] != 0) { - PrintAndLogEx(FAILED, "Error in step %" PRId64 ", Return code: %" PRId64, resp.oldarg[0], (int)resp.oldarg[1]); + PrintAndLogEx(FAILED, "Error in step %" PRId64 ", Return code: %" PRId64, resp.oldarg[0], resp.oldarg[1]); } else { size_t nonce_length = resp.oldarg[1]; char *nonce = (char *) calloc(2 * nonce_length + 1, sizeof(uint8_t)); diff --git a/client/cmdhffelica.c b/client/cmdhffelica.c index 0948bcf82..333498f37 100644 --- a/client/cmdhffelica.c +++ b/client/cmdhffelica.c @@ -408,7 +408,7 @@ static int CmdHFFelicaDumpLite(const char *Cmd) { return 0; } - PrintAndLogEx(SUCCESS, "Recorded Activity (trace len = %"PRIu64" bytes)", tracelen); + PrintAndLogEx(SUCCESS, "Recorded Activity (trace len = %"PRIu32" bytes)", tracelen); print_hex_break(trace, tracelen, 32); printSep(); diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index e2ecf943c..028e04a4c 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -2487,7 +2487,7 @@ static int CmdHFiClassLookUp(const char *Cmd) { case 'u': param_gethex_ex(Cmd, cmdp + 1, CSN, &len); if (len >> 1 != sizeof(CSN)) { - PrintAndLogEx(WARNING, "Wrong CSN length, expected %d got [%d]", sizeof(CSN), len >> 1); + PrintAndLogEx(WARNING, "Wrong CSN length, expected %zu got [%d]", sizeof(CSN), len >> 1); errors = true; } cmdp += 2; @@ -2495,7 +2495,7 @@ static int CmdHFiClassLookUp(const char *Cmd) { case 'm': param_gethex_ex(Cmd, cmdp + 1, MACS, &len); if (len >> 1 != sizeof(MACS)) { - PrintAndLogEx(WARNING, "Wrong MACS length, expected %d got [%d] ", sizeof(MACS), len >> 1); + PrintAndLogEx(WARNING, "Wrong MACS length, expected %zu got [%d] ", sizeof(MACS), len >> 1); errors = true; } else { memcpy(MAC_TAG, MACS + 4, 4); diff --git a/client/cmdlfem4x.c b/client/cmdlfem4x.c index 2bfb25eaa..e1e9c75d8 100644 --- a/client/cmdlfem4x.c +++ b/client/cmdlfem4x.c @@ -401,7 +401,7 @@ int AskEm410xDecode(bool verbose, uint32_t *hi, uint64_t *lo) { else if (ans == -4) PrintAndLogEx(DEBUG, "DEBUG: Error - Em410x preamble not found"); else if (ans == -5) - PrintAndLogEx(DEBUG, "DEBUG: Error - Em410x Size not correct: %d", size); + PrintAndLogEx(DEBUG, "DEBUG: Error - Em410x Size not correct: %zu", size); else if (ans == -6) PrintAndLogEx(DEBUG, "DEBUG: Error - Em410x parity failed"); @@ -692,7 +692,7 @@ static int CmdEM410xWrite(const char *Cmd) { // the clock rate in bits 8-15 of the card value card = (card & 0xFF) | ((clock1 << 8) & 0xFF00); } else if (card == 0) { - PrintAndLogEx(SUCCESS, "Writing %s tag with UID 0x%010" PRIx64, "(clock rate: %d)", "T5555", id, clock1); + PrintAndLogEx(SUCCESS, "Writing %s tag with UID 0x%010" PRIx64 "(clock rate: %d)", "T5555", id, clock1); card = (card & 0xFF) | ((clock1 << 8) & 0xFF00); } else { PrintAndLogEx(FAILED, "Error! Bad card type selected.\n"); diff --git a/client/cmdlffdx.c b/client/cmdlffdx.c index f1f3d6100..dc2a11478 100644 --- a/client/cmdlffdx.c +++ b/client/cmdlffdx.c @@ -216,7 +216,7 @@ static int CmdFdxDemod(const char *Cmd) { // remove marker bits (1's every 9th digit after preamble) (pType = 2) size = removeParity(DemodBuffer, 11, 9, 2, 117); if (size != 104) { - PrintAndLogEx(DEBUG, "DEBUG: Error - FDX-B error removeParity: %d", size); + PrintAndLogEx(DEBUG, "DEBUG: Error - FDX-B error removeParity: %zu", size); return PM3_ESOFT; } diff --git a/client/cmdusart.c b/client/cmdusart.c index 8e8899dc8..8e095f41e 100644 --- a/client/cmdusart.c +++ b/client/cmdusart.c @@ -373,7 +373,7 @@ static int CmdUsartBtFactory(const char *Cmd) { if (strcmp((char *)data, "OKsetname") == 0) { PrintAndLogEx(SUCCESS, "Name set to " _GREEN_("PM3_RDV4.0")); } else { - PrintAndLogEx(WARNING, "Unexpected response to AT+NAME: " _YELLOW_("%.*s"), len, data); + PrintAndLogEx(WARNING, "Unexpected response to AT+NAME: " _YELLOW_("%.*s"), (int)len, data); } } else { PrintAndLogEx(WARNING, "Lost contact with add-on, please try again"); @@ -409,7 +409,7 @@ static int CmdUsartBtFactory(const char *Cmd) { if (strcmp((char *)data, "OKsetPIN") == 0) { PrintAndLogEx(SUCCESS, "PIN set to " _GREEN_("1234")); } else { - PrintAndLogEx(WARNING, "Unexpected response to AT+PIN: " _YELLOW_("%.*s"), len, data); + PrintAndLogEx(WARNING, "Unexpected response to AT+PIN: " _YELLOW_("%.*s"), (int)len, data); } } else { PrintAndLogEx(WARNING, "Lost contact with add-on, please try again"); @@ -429,7 +429,7 @@ static int CmdUsartBtFactory(const char *Cmd) { if (strcmp((char *)data, "OK None") == 0) { PrintAndLogEx(SUCCESS, "Parity set to " _GREEN_("None")); } else { - PrintAndLogEx(WARNING, "Unexpected response to AT+P: " _YELLOW_("%.*s"), len, data); + PrintAndLogEx(WARNING, "Unexpected response to AT+P: " _YELLOW_("%.*s"), (int)len, data); } } else { PrintAndLogEx(WARNING, "Lost contact with add-on, please try again"); @@ -449,7 +449,7 @@ static int CmdUsartBtFactory(const char *Cmd) { if (strcmp((char *)data, "OK" BTADDON_BAUD_NUM) == 0) { PrintAndLogEx(SUCCESS, "Baudrate set to " _GREEN_(BTADDON_BAUD_NUM)); } else { - PrintAndLogEx(WARNING, "Unexpected response to AT+BAUD: " _YELLOW_("%.*s"), len, data); + PrintAndLogEx(WARNING, "Unexpected response to AT+BAUD: " _YELLOW_("%.*s"), (int)len, data); } } else { PrintAndLogEx(WARNING, "Lost contact with add-on, please try again"); diff --git a/client/mifare/ndef.c b/client/mifare/ndef.c index 946b80b04..392a550af 100644 --- a/client/mifare/ndef.c +++ b/client/mifare/ndef.c @@ -211,7 +211,7 @@ static int ndefDecodeSig(uint8_t *sig, size_t siglen) { if ((indx <= siglen) && certURI) { size_t inturilen = (sig[indx] << 8) + sig[indx + 1]; indx += 2; - PrintAndLogEx(NORMAL, "\tcertificate uri [%zu]: %.*s", inturilen, inturilen, &sig[indx]); + PrintAndLogEx(NORMAL, "\tcertificate uri [%zu]: %.*s", inturilen, (int)inturilen, &sig[indx]); } return 0; From 906193981f0d034d7728f542d421b52085f04688 Mon Sep 17 00:00:00 2001 From: David Lam Date: Wed, 9 Oct 2019 12:48:45 -0400 Subject: [PATCH 57/88] textual changes --- client/cmdlft55xx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index b96dd4cb8..c823e6a06 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -335,7 +335,7 @@ static int usage_t55xx_deviceconfig() { return PM3_SUCCESS; } static int usage_t55xx_protect() { - PrintAndLogEx(NORMAL, "This command set the pwd bit on T5577. "); + PrintAndLogEx(NORMAL, "This command sets the pwd bit on T5577."); PrintAndLogEx(NORMAL, _RED_("WARNING:") " this locks the tag!"); PrintAndLogEx(NORMAL, "Usage: lf t55xx protect [r ] [p ] [o] [n ]"); PrintAndLogEx(NORMAL, "Options:"); From 8b99cd0303bbb07a937955c1c453c5a91a3dfc05 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 19:28:37 +0200 Subject: [PATCH 58/88] Add SKIPQT makefile var --- client/Makefile | 53 ++++++++++--------- .../4_Advanced-compilation-parameters.md | 7 +++ 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/client/Makefile b/client/Makefile index 71def6aae..95a258a78 100644 --- a/client/Makefile +++ b/client/Makefile @@ -77,36 +77,37 @@ else endif endif -# Check for correctly configured Qt5 -QTINCLUDES = $(shell pkg-config --cflags Qt5Core Qt5Widgets 2>/dev/null) -QTLDLIBS = $(shell pkg-config --libs Qt5Core Qt5Widgets 2>/dev/null) -MOC = $(shell pkg-config --variable=host_bins Qt5Core)/moc -UIC = $(shell pkg-config --variable=host_bins Qt5Core)/uic -ifeq ($(QTINCLUDES), ) -# if Qt5 not found check for correctly configured Qt4 - QTINCLUDES = $(shell pkg-config --cflags QtCore QtGui 2>/dev/null) - QTLDLIBS = $(shell pkg-config --libs QtCore QtGui 2>/dev/null) - MOC = $(shell pkg-config --variable=moc_location QtCore) - UIC = $(shell pkg-config --variable=uic_location QtCore) -else - PM3CXXFLAGS += -std=c++11 -fPIC -endif -ifeq ($(QTINCLUDES), ) -# if both pkg-config commands failed, search in common places - ifneq ($(QTDIR), ) - QTINCLUDES = -I$(QTDIR)/include -I$(QTDIR)/include/QtCore -I$(QTDIR)/include/QtGui - QTLDLIBS = -L$(QTDIR)/lib -lQtCore4 -lQtGui4 - ifneq ($(wildcard $(QTDIR)/include/QtWidgets),) - QTINCLUDES += -I$(QTDIR)/include/QtWidgets - QTLDLIBS = -L$(QTDIR)/lib -lQt5Widgets -lQt5Gui -lQt5Core - PM3CXXFLAGS += -std=c++11 -fPIC +ifneq ($(SKIPQT),1) + # Check for correctly configured Qt5 + QTINCLUDES = $(shell pkg-config --cflags Qt5Core Qt5Widgets 2>/dev/null) + QTLDLIBS = $(shell pkg-config --libs Qt5Core Qt5Widgets 2>/dev/null) + MOC = $(shell pkg-config --variable=host_bins Qt5Core)/moc + UIC = $(shell pkg-config --variable=host_bins Qt5Core)/uic + ifeq ($(QTINCLUDES), ) + # if Qt5 not found check for correctly configured Qt4 + QTINCLUDES = $(shell pkg-config --cflags QtCore QtGui 2>/dev/null) + QTLDLIBS = $(shell pkg-config --libs QtCore QtGui 2>/dev/null) + MOC = $(shell pkg-config --variable=moc_location QtCore) + UIC = $(shell pkg-config --variable=uic_location QtCore) + else + PM3CXXFLAGS += -std=c++11 -fPIC + endif + ifeq ($(QTINCLUDES), ) + # if both pkg-config commands failed, search in common places + ifneq ($(QTDIR), ) + QTINCLUDES = -I$(QTDIR)/include -I$(QTDIR)/include/QtCore -I$(QTDIR)/include/QtGui + QTLDLIBS = -L$(QTDIR)/lib -lQtCore4 -lQtGui4 + ifneq ($(wildcard $(QTDIR)/include/QtWidgets),) + QTINCLUDES += -I$(QTDIR)/include/QtWidgets + QTLDLIBS = -L$(QTDIR)/lib -lQt5Widgets -lQt5Gui -lQt5Core + PM3CXXFLAGS += -std=c++11 -fPIC + endif + MOC = $(QTDIR)/bin/moc + UIC = $(QTDIR)/bin/uic endif - MOC = $(QTDIR)/bin/moc - UIC = $(QTDIR)/bin/uic endif endif - ifneq ($(QTLDLIBS),) QTGUIOBJS = $(OBJDIR)/proxgui.o $(OBJDIR)/proxguiqt.o $(OBJDIR)/proxguiqt.moc.o PM3CFLAGS += -DHAVE_GUI diff --git a/doc/md/Use_of_Proxmark/4_Advanced-compilation-parameters.md b/doc/md/Use_of_Proxmark/4_Advanced-compilation-parameters.md index b4fb4384a..977af704c 100644 --- a/doc/md/Use_of_Proxmark/4_Advanced-compilation-parameters.md +++ b/doc/md/Use_of_Proxmark/4_Advanced-compilation-parameters.md @@ -12,6 +12,13 @@ Via some definitions, you can adjust the firmware for a given platform, but also The client doesn't depend on the capabilities of the Proxmark3 it's connected to. So you can use the same client for different Proxmark3 platforms, given that everything is running the same version. +It's possible to explicitly skip the Qt support in the compilation even if Qt is present on the host, with: + +``` +make clean +make SKIPQT=1 +``` + ## Firmware By default, the firmware is of course tuned for the Proxmark3 Rdv4.0 device, which has built-in support for 256kb onboard flash SPI memory, Sim module (smart card support), FPC connector. From 5017e33b6d241def57adf4efee29fb947ad8a804 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 19:44:06 +0200 Subject: [PATCH 59/88] coverity 226232 - tainted input --- client/emv/emv_pk.c | 50 +++++++++++++++++++++++++++------------------ client/emv/emv_pk.h | 2 +- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/client/emv/emv_pk.c b/client/emv/emv_pk.c index fbd0e39a9..3331e50a5 100644 --- a/client/emv/emv_pk.c +++ b/client/emv/emv_pk.c @@ -42,14 +42,14 @@ #define TOHEX(v) ((v) < 10 ? (v) + '0' : (v) - 10 + 'a') -static ssize_t emv_pk_read_bin(char *buf, unsigned char *bin, size_t size, size_t *read) { +static ssize_t emv_pk_read_bin(char *buf, size_t buflen, unsigned char *bin, size_t size, size_t *read) { if (buf == NULL) return 0; size_t left = size; char *p = buf; - while (*p == ' ') + while ((*p == ' ') && (p < (buf + buflen - 1))) p++; while (left > 0) { @@ -57,15 +57,19 @@ static ssize_t emv_pk_read_bin(char *buf, unsigned char *bin, size_t size, size_ c1 = HEX(*p); if (c1 == -1) return -(p - buf); + if (p == (buf + buflen - 1)) + return -(p - buf); p++; c2 = HEX(*p); if (c2 == -1) return -(p - buf); + if (p == (buf + buflen - 1)) + return -(p - buf); p++; *bin = (c1 * 16 + c2); bin ++; left --; - if (*p == ':') + if ((*p == ':') && (p < (buf + buflen - 1))) p++; else if (read) { *read = (size - left); @@ -76,7 +80,7 @@ static ssize_t emv_pk_read_bin(char *buf, unsigned char *bin, size_t size, size_ return -(p - buf); } - while (*p == ' ') + while ((*p == ' ') && (p < (buf + buflen - 1))) p++; p--; @@ -84,7 +88,7 @@ static ssize_t emv_pk_read_bin(char *buf, unsigned char *bin, size_t size, size_ return (p - buf); } -static ssize_t emv_pk_read_ymv(char *buf, unsigned *ymv) { +static ssize_t emv_pk_read_ymv(char *buf, size_t buflen, unsigned *ymv) { if (buf == NULL) return 0; @@ -95,7 +99,7 @@ static ssize_t emv_pk_read_ymv(char *buf, unsigned *ymv) { *ymv = 0; - while (*p == ' ') + while ((*p == ' ') && (p < (buf + buflen - 1))) p++; for (i = 0; i < 3; i++) { @@ -103,15 +107,19 @@ static ssize_t emv_pk_read_ymv(char *buf, unsigned *ymv) { c1 = BCD(*p); if (c1 == -1) return -(p - buf); + if (p == (buf + buflen - 1)) + return -(p - buf); p++; c2 = BCD(*p); if (c2 == -1) return -(p - buf); + if (p == (buf + buflen - 1)) + return -(p - buf); p++; temp[i] = (c1 * 16 + c2); } - while (*p == ' ') + while ((*p == ' ') && (p < (buf + buflen - 1))) p++; p--; @@ -124,13 +132,13 @@ static ssize_t emv_pk_read_ymv(char *buf, unsigned *ymv) { return (p - buf); } -static ssize_t emv_pk_read_string(char *buf, char *str, size_t size) { +static ssize_t emv_pk_read_string(char *buf, size_t buflen, char *str, size_t size) { if (buf == NULL) return 0; char *p = buf; - while (*p == ' ') + while ((*p == ' ') && (p < (buf + buflen - 1))) p++; while (size > 1) { @@ -139,6 +147,8 @@ static ssize_t emv_pk_read_string(char *buf, char *str, size_t size) { else if (*p < 0x20 || *p >= 0x7f) return -(p - buf); *str = *p; + if (p == (buf + buflen - 1)) + return -(p - buf); p++; str ++; size --; @@ -146,7 +156,7 @@ static ssize_t emv_pk_read_string(char *buf, char *str, size_t size) { *str = 0; - while (*p == ' ') + while ((*p == ' ') && (p < (buf + buflen - 1))) p++; p--; @@ -155,27 +165,27 @@ static ssize_t emv_pk_read_string(char *buf, char *str, size_t size) { } -struct emv_pk *emv_pk_parse_pk(char *buf) { +struct emv_pk *emv_pk_parse_pk(char *buf, size_t buflen) { struct emv_pk *r = calloc(1, sizeof(*r)); ssize_t l; char temp[10]; - l = emv_pk_read_bin(buf, r->rid, 5, NULL); + l = emv_pk_read_bin(buf, buflen, r->rid, 5, NULL); if (l <= 0) goto out; buf += l; - l = emv_pk_read_bin(buf, &r->index, 1, NULL); + l = emv_pk_read_bin(buf, buflen, &r->index, 1, NULL); if (l <= 0) goto out; buf += l; - l = emv_pk_read_ymv(buf, &r->expire); + l = emv_pk_read_ymv(buf, buflen, &r->expire); if (l <= 0) goto out; buf += l; - l = emv_pk_read_string(buf, temp, sizeof(temp)); + l = emv_pk_read_string(buf, buflen, temp, sizeof(temp)); if (l <= 0) goto out; buf += l; @@ -185,18 +195,18 @@ struct emv_pk *emv_pk_parse_pk(char *buf) { else goto out; - l = emv_pk_read_bin(buf, r->exp, sizeof(r->exp), &r->elen); + l = emv_pk_read_bin(buf, buflen, r->exp, sizeof(r->exp), &r->elen); if (l <= 0) goto out; buf += l; r->modulus = malloc(2048 / 8); - l = emv_pk_read_bin(buf, r->modulus, 2048 / 8, &r->mlen); + l = emv_pk_read_bin(buf, buflen, r->modulus, 2048 / 8, &r->mlen); if (l <= 0) goto out2; buf += l; - l = emv_pk_read_string(buf, temp, sizeof(temp)); + l = emv_pk_read_string(buf, buflen, temp, sizeof(temp)); if (l <= 0) goto out2; buf += l; @@ -206,7 +216,7 @@ struct emv_pk *emv_pk_parse_pk(char *buf) { else goto out2; - l = emv_pk_read_bin(buf, r->hash, 20, NULL); + l = emv_pk_read_bin(buf, buflen, r->hash, 20, NULL); if (l <= 0) goto out2; @@ -409,7 +419,7 @@ static struct emv_pk *emv_pk_get_ca_pk_from_file(const char *fname, if (fgets(buf, sizeof(buf), f) == NULL) break; - struct emv_pk *pk = emv_pk_parse_pk(buf); + struct emv_pk *pk = emv_pk_parse_pk(buf, sizeof(buf)); if (!pk) continue; diff --git a/client/emv/emv_pk.h b/client/emv/emv_pk.h index dfc249710..015a06dd6 100644 --- a/client/emv/emv_pk.h +++ b/client/emv/emv_pk.h @@ -35,7 +35,7 @@ struct emv_pk { #define EXPIRE(yy, mm, dd) 0x ## yy ## mm ## dd -struct emv_pk *emv_pk_parse_pk(char *buf); +struct emv_pk *emv_pk_parse_pk(char *bufm, size_t buflen); struct emv_pk *emv_pk_new(size_t modlen, size_t explen); void emv_pk_free(struct emv_pk *pk); char *emv_pk_dump_pk(const struct emv_pk *pk); From e3b267112f75a5b97f945626315392a88732b0b5 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 21:07:33 +0200 Subject: [PATCH 60/88] coverity 226372 - leak --- client/emv/tlv.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/client/emv/tlv.c b/client/emv/tlv.c index 6e840f928..49a4038b5 100644 --- a/client/emv/tlv.c +++ b/client/emv/tlv.c @@ -367,12 +367,14 @@ void tlvdb_change_or_add_node_ex(struct tlvdb *tlvdb, tlv_tag_t tag, size_t len, // replace tlv element struct tlvdb *tnewelm = tlvdb_fixed(tag, len, value); + bool tnewelm_linked = false; tnewelm->next = telm->next; tnewelm->parent = telm->parent; // if telm stayed first in children chain if (telm->parent && telm->parent->children == telm) { telm->parent->children = tnewelm; + tnewelm_linked = true; } // if telm have previous element @@ -387,6 +389,7 @@ void tlvdb_change_or_add_node_ex(struct tlvdb *tlvdb, tlv_tag_t tag, size_t len, for (; celm; celm = celm->next) { if (celm->next == telm) { celm->next = tnewelm; + tnewelm_linked = true; break; } } @@ -396,8 +399,13 @@ void tlvdb_change_or_add_node_ex(struct tlvdb *tlvdb, tlv_tag_t tag, size_t len, telm->next = NULL; tlvdb_free(telm); - if (tlvdb_elm) + if (tlvdb_elm) { *tlvdb_elm = tnewelm; + tnewelm_linked = true; + } + if (! tnewelm_linked) { + tlvdb_free(tnewelm); + } } return; From 30168d1e20aceff4befb38afb7dfc09c5900858d Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 21:14:55 +0200 Subject: [PATCH 61/88] coverity 226247 --- client/fileutils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/fileutils.c b/client/fileutils.c index de2fbef19..273bedd3e 100644 --- a/client/fileutils.c +++ b/client/fileutils.c @@ -1064,7 +1064,7 @@ static int searchFinalFile(char **foundpath, const char *pm3dir, const char *sea } } // try pm3 dirs in pm3 installation dir (install mode) - { + if (exec_path != NULL) { char *path = calloc(strlen(exec_path) + strlen(PM3_SHARE_RELPATH) + strlen(pm3dir) + strlen(filename) + 1, sizeof(char)); if (path == NULL) goto out; From 31efbf9a59f19aee2c89ff9ca2e174e398c480d4 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 21:17:27 +0200 Subject: [PATCH 62/88] coverity 226275 --- client/fileutils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/fileutils.c b/client/fileutils.c index 273bedd3e..a8a1dc6ef 100644 --- a/client/fileutils.c +++ b/client/fileutils.c @@ -487,7 +487,7 @@ int loadFile_safe(const char *preferredName, const char *suffix, void **pdata, s } *pdata = calloc(fsize, sizeof(uint8_t)); - if (!pdata) { + if (!*pdata) { PrintAndLogEx(FAILED, "error, cannot allocate memory"); fclose(f); return PM3_EMALLOC; From bc35a966903948b1cd916241533d97c0786c76e7 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 21:34:41 +0200 Subject: [PATCH 63/88] coverity 226497 --- armsrc/spiffs_nucleus.c | 1 + 1 file changed, 1 insertion(+) diff --git a/armsrc/spiffs_nucleus.c b/armsrc/spiffs_nucleus.c index ef1db36f1..459222d5b 100644 --- a/armsrc/spiffs_nucleus.c +++ b/armsrc/spiffs_nucleus.c @@ -1560,6 +1560,7 @@ s32_t spiffs_object_modify(spiffs_fd *fd, u32_t offset, u8_t *data, u32_t len) { res = spiffs_page_allocate_data(fs, fd->obj_id & ~SPIFFS_OBJ_ID_IX_FLAG, &p_hdr, &data[written], to_write, page_offs, 1, &data_pix); SPIFFS_DBG("modify: store new data page, "_SPIPRIpg":"_SPIPRIsp" offset:"_SPIPRIi", len "_SPIPRIi", written "_SPIPRIi"\n", data_pix, data_spix, page_offs, to_write, written); + if (res != SPIFFS_OK) break; } else { // write to existing page, allocate new and copy unmodified data From 54585089a36a952e5b0fc3c5210dcda923784476 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 21:36:29 +0200 Subject: [PATCH 64/88] coverity 226339 --- client/cmdlffdx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/cmdlffdx.c b/client/cmdlffdx.c index dc2a11478..ce78525ac 100644 --- a/client/cmdlffdx.c +++ b/client/cmdlffdx.c @@ -204,7 +204,7 @@ static int CmdFdxDemod(const char *Cmd) { else if (preambleIndex == -2) PrintAndLogEx(DEBUG, "DEBUG: Error - FDX-B preamble not found"); else if (preambleIndex == -3) - PrintAndLogEx(DEBUG, "DEBUG: Error - FDX-B Size not correct: %d", size); + PrintAndLogEx(DEBUG, "DEBUG: Error - FDX-B Size not correct: %zu", size); else PrintAndLogEx(DEBUG, "DEBUG: Error - FDX-B ans: %d", preambleIndex); return PM3_ESOFT; From 31cf43504586472446b8a75a2525fc3bcd35ad78 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 21:55:01 +0200 Subject: [PATCH 65/88] coverity 226359 --- client/cmdhfmfhard.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/client/cmdhfmfhard.c b/client/cmdhfmfhard.c index 75e647489..bc3591d06 100644 --- a/client/cmdhfmfhard.c +++ b/client/cmdhfmfhard.c @@ -282,7 +282,12 @@ static void init_bitflip_bitarrays(void) { fclose(statesfile); uint32_t count = 0; init_inflate(&compressed_stream, input_buffer, filesize, (uint8_t *)&count, sizeof(count)); - inflate(&compressed_stream, Z_SYNC_FLUSH); + int res = inflate(&compressed_stream, Z_SYNC_FLUSH); + if (res != Z_OK) { + PrintAndLogEx(ERR, "Inflate error. Aborting...\n"); + inflateEnd(&compressed_stream); + exit(4); + } if ((float)count / (1 << 24) < IGNORE_BITFLIP_THRESHOLD) { uint32_t *bitset = (uint32_t *)malloc_bitarray(sizeof(uint32_t) * (1 << 19)); if (bitset == NULL) { @@ -292,7 +297,12 @@ static void init_bitflip_bitarrays(void) { } compressed_stream.next_out = (uint8_t *)bitset; compressed_stream.avail_out = sizeof(uint32_t) * (1 << 19); - inflate(&compressed_stream, Z_SYNC_FLUSH); + res = inflate(&compressed_stream, Z_SYNC_FLUSH); + if (res != Z_OK && res != Z_STREAM_END) { + PrintAndLogEx(ERR, "Inflate error. Aborting...\n"); + inflateEnd(&compressed_stream); + exit(4); + } effective_bitflip[odd_even][num_effective_bitflips[odd_even]++] = bitflip; bitflip_bitarrays[odd_even][bitflip] = bitset; count_bitflip_bitarrays[odd_even][bitflip] = count; From b7d543888c58b34d280a9030792208d041494468 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 22:24:54 +0200 Subject: [PATCH 66/88] coverity 226272 --- client/scripting.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/scripting.c b/client/scripting.c index 7157957ca..1368894c8 100644 --- a/client/scripting.c +++ b/client/scripting.c @@ -69,7 +69,10 @@ static int l_fast_push_mode(lua_State *L) { // Disable fast mode and send a dummy command to make it effective if (enable == false) { SendCommandNG(CMD_PING, NULL, 0); - WaitForResponseTimeout(CMD_PING, NULL, 1000); + if (!WaitForResponseTimeout(CMD_PING, NULL, 1000)) { + PrintAndLogEx(WARNING, "command execution time out"); + return returnToLuaWithError(L, "command execution time out"); + } } //Push the retval on the stack From 7b482c64b1b7008d45123d80efec4b44e52c5b0b Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 22:29:42 +0200 Subject: [PATCH 67/88] coverity 226188 --- client/cmdhfmf.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/client/cmdhfmf.c b/client/cmdhfmf.c index 6b266e21e..87475926e 100644 --- a/client/cmdhfmf.c +++ b/client/cmdhfmf.c @@ -2866,18 +2866,21 @@ out: PrintAndLogEx(SUCCESS, "Found keys have been transferred to the emulator memory"); } - // Disable fast mode and send a dummy command to make it effective - conn.block_after_ACK = false; - SendCommandNG(CMD_PING, NULL, 0); - WaitForResponseTimeout(CMD_PING, NULL, 1000); - if (createDumpFile) { fptr = GenerateFilename("hf-mf-", "-key.bin"); createMfcKeyDump(SectorsCnt, e_sector, fptr); } - free(keyBlock); free(e_sector); + + // Disable fast mode and send a dummy command to make it effective + conn.block_after_ACK = false; + SendCommandNG(CMD_PING, NULL, 0); + if (!WaitForResponseTimeout(CMD_PING, NULL, 1000)) { + PrintAndLogEx(WARNING, "command execution time out"); + return PM3_ETIMEOUT; + } + PrintAndLogEx(NORMAL, ""); return PM3_SUCCESS; } From d3efe5342cf57fce1d15877a48f5f051d050ebcd Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 22:32:38 +0200 Subject: [PATCH 68/88] misspelled fct --- client/cmdlft55xx.c | 28 ++++++++++++++-------------- client/cmdlft55xx.h | 2 +- client/scripting.c | 6 +++--- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index c823e6a06..dec987a2e 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -479,7 +479,7 @@ bool t55xxAquireAndCompareBlock0(bool usepwd, uint32_t password, uint32_t known_ PrintAndLogEx(INFO, "Block0 write detected, running `detect` to see if validation is possible"); for (uint8_t m = 0; m < 4; m++) { - if (AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password, m) == false) { + if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password, m) == false) { continue; } @@ -512,7 +512,7 @@ bool t55xxAquireAndDetect(bool usepwd, uint32_t password, uint32_t known_block0, config.pwd = 0x00; for (uint8_t m = 0; m < 4; m++) { - if (AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password, m) == false) + if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password, m) == false) continue; if (tryDetectModulationEx(m, verbose, known_block0) == false) @@ -776,7 +776,7 @@ int T55xxReadBlockEx(uint8_t block, bool page1, bool usepwd, uint8_t override, u // override = 1 (override and display) // override = 2 (override and no display) if (override == 0) { - if (AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, false, 0, downlink_mode) == false) + if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, false, 0, downlink_mode) == false) return PM3_ERFTRANS; if (tryDetectModulation(downlink_mode, false) == false) { @@ -792,7 +792,7 @@ int T55xxReadBlockEx(uint8_t block, bool page1, bool usepwd, uint8_t override, u } } - if (AquireData(page1, block, usepwd, password, downlink_mode) == false) + if (AcquireData(page1, block, usepwd, password, downlink_mode) == false) return PM3_ERFTRANS; if (DecodeT55xxBlock() == false) @@ -1013,7 +1013,7 @@ static int CmdT55xxDetect(const char *Cmd) { if (try_all_dl_modes) { for (uint8_t m = downlink_mode; m < 4; m++) { - if (AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, try_with_pwd & usepwd, password, m) == false) + if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, try_with_pwd & usepwd, password, m) == false) continue; // pre fill to save passing in. @@ -1036,7 +1036,7 @@ static int CmdT55xxDetect(const char *Cmd) { else config.pwd = 0x00; - if (AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password, downlink_mode)) { + if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password, downlink_mode)) { found = tryDetectModulation(downlink_mode, T55XX_PrintConfig); } } @@ -1774,7 +1774,7 @@ static int CmdT55xxReadTrace(const char *Cmd) { uint32_t password = 0; // REGULAR_READ_MODE_BLOCK - yeilds correct Page 1 Block 2 data i.e. + 32 bit offset. - if (!AquireData(T55x7_PAGE1, REGULAR_READ_MODE_BLOCK, pwdmode, password, downlink_mode)) + if (!AcquireData(T55x7_PAGE1, REGULAR_READ_MODE_BLOCK, pwdmode, password, downlink_mode)) return PM3_ENODATA; } @@ -2077,7 +2077,7 @@ static int CmdT55xxInfo(const char *Cmd) { // sanity check. if (SanityOfflineCheck(false) != PM3_SUCCESS) return PM3_ENODATA; - if (!AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password, downlink_mode)) + if (!AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password, downlink_mode)) return PM3_ENODATA; } @@ -2275,7 +2275,7 @@ static int CmdT55xxRestore(const char *Cmd) { return res; } -bool AquireData(uint8_t page, uint8_t block, bool pwdmode, uint32_t password, uint8_t downlink_mode) { +bool AcquireData(uint8_t page, uint8_t block, bool pwdmode, uint32_t password, uint8_t downlink_mode) { // arg0 bitmodes: // b0 = pwdmode // b1 = page to read from @@ -2808,7 +2808,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { if (resp.oldarg[0]) { PrintAndLogEx(SUCCESS, "\nFound a candidate [ " _YELLOW_("%08"PRIX64) " ]. Trying to validate", resp.oldarg[1]); - if (AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, resp.oldarg[1], downlink_mode)) { + if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, resp.oldarg[1], downlink_mode)) { found = tryDetectModulation(downlink_mode, T55XX_PrintConfig); if (found) { PrintAndLogEx(SUCCESS, "Found valid password: [ " _GREEN_("%08"PRIX64) "]", resp.oldarg[1]); @@ -2857,7 +2857,7 @@ static int CmdT55xxChkPwds(const char *Cmd) { PrintAndLogEx(INFO, "Testing %08"PRIX64, curr_password); for (dl_mode = downlink_mode; dl_mode <= 3; dl_mode++) { - if (!AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, curr_password, dl_mode)) { + if (!AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, curr_password, dl_mode)) { continue; } @@ -2975,7 +2975,7 @@ uint8_t tryOnePassword(uint32_t password, uint8_t downlink_mode) { // check if dl mode 4 and loop if needed for (dl_mode = downlink_mode; dl_mode < 4; dl_mode++) { - AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, password, dl_mode); + AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, password, dl_mode); // if (getSignalProperties()->isnoise == false) { // } else { @@ -3109,7 +3109,7 @@ bool tryDetectP1(bool getData) { bool st = true; if (getData) { - if (!AquireData(T55x7_PAGE1, T55x7_TRACE_BLOCK1, false, 0, 0)) + if (!AcquireData(T55x7_PAGE1, T55x7_TRACE_BLOCK1, false, 0, 0)) return false; } @@ -3259,7 +3259,7 @@ static int CmdT55xxDetectPage1(const char *Cmd) { if (!useGB) { for (dl_mode = downlink_mode; dl_mode < 4; dl_mode++) { - found = AquireData(T55x7_PAGE1, T55x7_TRACE_BLOCK1, usepwd, password, dl_mode); + found = AcquireData(T55x7_PAGE1, T55x7_TRACE_BLOCK1, usepwd, password, dl_mode); //return PM3_ENODATA; if (tryDetectP1(false)) { //tryDetectModulation()) found = true; diff --git a/client/cmdlft55xx.h b/client/cmdlft55xx.h index 2efecdc26..876cbf7d7 100644 --- a/client/cmdlft55xx.h +++ b/client/cmdlft55xx.h @@ -164,7 +164,7 @@ bool testKnownConfigBlock(uint32_t block0); bool tryDetectP1(bool getData); bool test(uint8_t mode, uint8_t *offset, int *fndBitRate, uint8_t clk, bool *Q5); int special(const char *Cmd); -bool AquireData(uint8_t page, uint8_t block, bool pwdmode, uint32_t password, uint8_t downlink_mode); +bool AcquireData(uint8_t page, uint8_t block, bool pwdmode, uint32_t password, uint8_t downlink_mode); uint8_t tryOnePassword(uint32_t password, uint8_t downlink_mode); void printT55x7Trace(t55x7_tracedata_t data, uint8_t repeat); diff --git a/client/scripting.c b/client/scripting.c index 1368894c8..e5c3990fb 100644 --- a/client/scripting.c +++ b/client/scripting.c @@ -929,7 +929,7 @@ static int l_T55xx_readblock(lua_State *L) { // try reading the config block and verify that PWD bit is set before doing this! if (!override) { - if (!AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, false, 0, 0)) { + if (!AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, false, 0, 0)) { return returnToLuaWithError(L, "Failed to read config block"); } @@ -946,7 +946,7 @@ static int l_T55xx_readblock(lua_State *L) { } } - if (!AquireData(usepage1, block, usepwd, password, 0)) { + if (!AcquireData(usepage1, block, usepwd, password, 0)) { return returnToLuaWithError(L, "Failed to acquire data from card"); } @@ -1003,7 +1003,7 @@ static int l_T55xx_detect(lua_State *L) { if (!useGB) { - isok = AquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password, 0); + isok = AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, usepwd, password, 0); if (isok == false) { return returnToLuaWithError(L, "Failed to acquire LF signal data"); } From 209fa45107babba25968960488e138c92e213e36 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 22:44:25 +0200 Subject: [PATCH 69/88] coverity 226215 --- client/cmdlft55xx.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index dec987a2e..73809fd6d 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -2975,14 +2975,14 @@ uint8_t tryOnePassword(uint32_t password, uint8_t downlink_mode) { // check if dl mode 4 and loop if needed for (dl_mode = downlink_mode; dl_mode < 4; dl_mode++) { - AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, password, dl_mode); - - // if (getSignalProperties()->isnoise == false) { - // } else { - if (tryDetectModulation(dl_mode, T55XX_PrintConfig)) { - return 1 + (dl_mode << 1); + if (AcquireData(T55x7_PAGE0, T55x7_CONFIGURATION_BLOCK, true, password, dl_mode)) { + // if (getSignalProperties()->isnoise == false) { + // } else { + if (tryDetectModulation(dl_mode, T55XX_PrintConfig)) { + return 1 + (dl_mode << 1); + } + // } } - // } if (!try_all_dl_modes) dl_mode = 4; } return 0; From 2024f87ed3691d544e8fd239c2901a58b406c0e8 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 22:48:54 +0200 Subject: [PATCH 70/88] coverity 226201 --- armsrc/mifaredesfire.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/armsrc/mifaredesfire.c b/armsrc/mifaredesfire.c index e16c00ed1..c13311051 100644 --- a/armsrc/mifaredesfire.c +++ b/armsrc/mifaredesfire.c @@ -585,7 +585,9 @@ size_t CreateAPDU(uint8_t *datain, size_t len, uint8_t *dataout) { void OnSuccess() { pcb_blocknum = 0; ReaderTransmit(deselect_cmd, 3, NULL); - mifare_ultra_halt(); + if (mifare_ultra_halt()) { + if (DBGLEVEL >= DBG_ERROR) Dbprintf("Halt error"); + } switch_off(); } From e4ad1a74716a72a2bf81645bff8d6cc08101456b Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 23:01:07 +0200 Subject: [PATCH 71/88] coverity 227889 227898 - division by zero --- common/lfdemod.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/common/lfdemod.c b/common/lfdemod.c index 1d1749d8e..9ed1a83c3 100644 --- a/common/lfdemod.c +++ b/common/lfdemod.c @@ -117,8 +117,11 @@ void computeSignalProperties(uint8_t *samples, uint32_t size) { sum += samples[i]; cnt++; - } - signalprop.mean = sum / cnt; + } + if (cnt > 0) + signalprop.mean = sum / cnt; + else + signalprop.mean = 0; #else for (uint32_t i = SIGNAL_IGNORE_FIRST_SAMPLES; i < size; i++) { if (samples[i] < signalprop.low) signalprop.low = samples[i]; @@ -160,8 +163,11 @@ void removeSignalOffset(uint8_t *samples, uint32_t size) { acc_off += samples[i] - 128; cnt++; - } - acc_off /= cnt; + } + if (cnt > 0) + acc_off /= cnt; + else + acc_off = 0; #else for (uint32_t i = SIGNAL_IGNORE_FIRST_SAMPLES; i < size; i++) acc_off += samples[i] - 128; From f4ec8463a4ba13d729d2e1e92d0e1657442ad61d Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 23:31:22 +0200 Subject: [PATCH 72/88] coverity 226367 - strange indala code --- client/cmdlfindala.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/cmdlfindala.c b/client/cmdlfindala.c index 0e308be35..914b510fc 100644 --- a/client/cmdlfindala.c +++ b/client/cmdlfindala.c @@ -109,7 +109,10 @@ static int CmdIndalaDemod(const char *Cmd) { //convert UID to HEX uint32_t uid1 = bytebits_to_byte(DemodBuffer, 32); uint32_t uid2 = bytebits_to_byte(DemodBuffer + 32, 32); - uint64_t foo = (((uint64_t)uid1 << 32) & 0x1FFFFFFF) | (uid2 & 0x7FFFFFFF); + // To be checked, what's this internal ID ? + // foo is only used for 64b ids and in that case uid1 must be only preamble, plus the following code is wrong as x<<32 & 0x1FFFFFFF is always zero + //uint64_t foo = (((uint64_t)uid1 << 32) & 0x1FFFFFFF) | (uid2 & 0x7FFFFFFF); + uint64_t foo = uid2 & 0x7FFFFFFF; if (DemodBufferLen == 64) { PrintAndLogEx( From b6c683bd02a664cbeeb943d60d34937033073e25 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 23:34:19 +0200 Subject: [PATCH 73/88] coverity 226304 --- client/fileutils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/fileutils.c b/client/fileutils.c index a8a1dc6ef..8b537d423 100644 --- a/client/fileutils.c +++ b/client/fileutils.c @@ -820,7 +820,7 @@ int loadFileDICTIONARY_safe(const char *preferredName, void **pdata, uint8_t key while (fgets(line, sizeof(line), f)) { // check if we have enough space (if not allocate more) - if ((*keycnt * (keylen >> 1)) >= mem_size) { + if ((((size_t)(*keycnt)) * (keylen >> 1)) >= mem_size) { mem_size += block_size; *pdata = realloc(*pdata, mem_size); From 755ac62ab867371d65365ad7ecf898511eb9b36c Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 23:38:41 +0200 Subject: [PATCH 74/88] coverity 226422 --- client/cmdhw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/cmdhw.c b/client/cmdhw.c index a6f242b8f..fa43e6200 100644 --- a/client/cmdhw.c +++ b/client/cmdhw.c @@ -532,7 +532,7 @@ static int CmdPing(const char *Cmd) { error = memcmp(data, resp.data.asBytes, len) != 0; PrintAndLogEx((error) ? ERR : SUCCESS, "Ping response " _GREEN_("received") "and content is %s", error ? _RED_("NOT ok") : _GREEN_("ok")); } else { - PrintAndLogEx((error) ? ERR : SUCCESS, "Ping response " _GREEN_("received")); + PrintAndLogEx(SUCCESS, "Ping response " _GREEN_("received")); } } else PrintAndLogEx(WARNING, "Ping response " _RED_("timeout")); From fb1e7879e1ddf942f6b6c36add58c6fa9314b52e Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 9 Oct 2019 23:44:46 +0200 Subject: [PATCH 75/88] coverity 226393 - missing break in mifaresim --- armsrc/mifaresim.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/armsrc/mifaresim.c b/armsrc/mifaresim.c index b1f419242..6c65a4f65 100644 --- a/armsrc/mifaresim.c +++ b/armsrc/mifaresim.c @@ -588,9 +588,11 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain, uint1 case MFEMUL_NOFIELD: if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("MFEMUL_NOFIELD"); + break; case MFEMUL_HALTED: if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("MFEMUL_HALTED"); + break; case MFEMUL_IDLE: { LogTrace(uart->output, uart->len, uart->startTime * 16 - DELAY_AIR2ARM_AS_TAG, uart->endTime * 16 - DELAY_AIR2ARM_AS_TAG, uart->parity, true); if (DBGLEVEL >= DBG_EXTENDED) From 904f0fe2fdb0e8df292761105a27d60443c66bcc Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 10 Oct 2019 00:08:30 +0200 Subject: [PATCH 76/88] coverity 226229 --- client/cmdtrace.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/cmdtrace.c b/client/cmdtrace.c index 836c0b9eb..97d91e54d 100644 --- a/client/cmdtrace.c +++ b/client/cmdtrace.c @@ -840,8 +840,6 @@ int CmdTraceList(const char *Cmd) { PrintAndLogEx(NORMAL, "ISO15693 - Timings are not as accurate"); if (protocol == ISO_7816_4) PrintAndLogEx(NORMAL, "ISO7816-4 / Smartcard - Timings N/A yet"); - if (protocol == FELICA) - PrintAndLogEx(NORMAL, "Felica"); // Timings ? if (protocol == PROTO_HITAG) PrintAndLogEx(NORMAL, "Hitag2 / HitagS - Timings in ETU (8us)"); From d43460ab9f61050ed0cadcd858a446bf7efec034 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 10 Oct 2019 00:30:14 +0200 Subject: [PATCH 77/88] cov submit: delete old logs --- covsubmit.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/covsubmit.sh b/covsubmit.sh index 6cf1bba47..dcfda0999 100755 --- a/covsubmit.sh +++ b/covsubmit.sh @@ -6,7 +6,7 @@ set -e pre_submit_hook ## delete all previous tarballs -rm proxmark3.all.*.tgz +rm proxmark3.all.*.tgz proxmark3.all.*.log TODAY="$(date --date now +%Y%m%d.%H%M)" VERSION="0.1.$TODAY" From f909039d015a88a62263b2bae145ca8ab5097e79 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Oct 2019 07:34:30 +0200 Subject: [PATCH 78/88] frame --- armsrc/iclass.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/iclass.c b/armsrc/iclass.c index 50042ef0c..33ea46e85 100644 --- a/armsrc/iclass.c +++ b/armsrc/iclass.c @@ -1765,7 +1765,7 @@ void CodeIClassCommand(const uint8_t *cmd, int len) { for (k = 0; k < 4; k++) { if (k == (b & 3)) - ToSend[++ToSendMax] = 0xf0; + ToSend[++ToSendMax] = 0x0f; else ToSend[++ToSendMax] = 0x00; } From 762075f34a730986e3ccc9da43cf1e74d349c8ad Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Oct 2019 07:56:39 +0200 Subject: [PATCH 79/88] textual --- client/cmdlf.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/client/cmdlf.c b/client/cmdlf.c index a77b86d0d..adc5bc9b5 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -1139,18 +1139,17 @@ static bool CheckChipType(bool getDeviceData) { //check for em4x05/em4x69 chips first uint32_t word = 0; if (EM4x05IsBlock0(&word)) { - PrintAndLogEx(SUCCESS, "\nChipset detection : " _GREEN_("EM4x05/EM4x69") "found"); - PrintAndLogEx(SUCCESS, "Try " _YELLOW_("`lf em 4x05`") " commands"); + PrintAndLogEx(SUCCESS, "Chipset detection: " _GREEN_("EM4x05/EM4x69")); + PrintAndLogEx(INFO, "Hint: try " _YELLOW_("`lf em 4x05`") "commands"); retval = true; goto out; } //check for t55xx chip... if (tryDetectP1(true)) { - PrintAndLogEx(SUCCESS, "\nChipset detection : " _GREEN_("T55xx") "found"); - PrintAndLogEx(SUCCESS, "Try " _YELLOW_("`lf t55xx`")"commands"); + PrintAndLogEx(SUCCESS, "Chipset detection: " _GREEN_("T55xx")); + PrintAndLogEx(INFO, "Hint: try " _YELLOW_("`lf t55xx`") "commands"); retval = true; - goto out; } out: @@ -1184,7 +1183,8 @@ int CmdLFfind(const char *Cmd) { PrintAndLogEx(INFO, "if it finds something that looks like a tag"); PrintAndLogEx(INFO, "False Positives " _YELLOW_("ARE") "possible"); PrintAndLogEx(INFO, ""); - PrintAndLogEx(INFO, "Checking for known tags...\n"); + PrintAndLogEx(INFO, "Checking for known tags..."); + PrintAndLogEx(INFO, ""); // only run these tests if device is online if (isOnline) { @@ -1197,7 +1197,8 @@ int CmdLFfind(const char *Cmd) { } if (readCOTAGUid()) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("COTAG ID") "found!"); return PM3_SUCCESS;} - PrintAndLogEx(FAILED, "\n" _YELLOW_("No data found!") " - Signal looks like noise. Maybe not an LF tag?"); + PrintAndLogEx(FAILED, _RED_("No data found!")); + PrintAndLogEx(INFO, "Signal looks like noise. Maybe not an LF tag?"); return PM3_ESOFT; } } From 49caa7f96283e3ca6701b9298f67964e70243f30 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Oct 2019 10:34:56 +0200 Subject: [PATCH 80/88] chg cotag operates on 132kHz. textual --- armsrc/lfops.c | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 5ff1867de..377a20b45 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -2411,18 +2411,37 @@ void EM4xWriteWord(uint8_t addr, uint32_t data, uint32_t pwd, uint8_t usepwd) { } /* -Reading a COTAG. +Reading COTAG. COTAG needs the reader to send a startsequence and the card has an extreme slow datarate. because of this, we can "sample" the data signal but we interpreate it to Manchester direct. -READER START SEQUENCE: -burst 800 us, gap 2.2 msecs -burst 3.6 msecs gap 2.2 msecs -burst 800 us gap 2.2 msecs -pulse 3.6 msecs +This behavior looks very similar to old ancient Motorola Flexpass + +----------------------------------------------------------------------- +According to patent: +Operating freq + reader 132 kHz + tag 66 kHz + +Divide by 384 counter + +PULSE repetition 5.82ms +LOW 2.91 ms +HIGH 2.91 ms + +Also references to a half-bit format and leading zero. +----------------------------------------------------------------------- + +READER START SEQUENCE: + +burst 800 us gap 2.2 ms +burst 3.6 ms gap 2.2 ms +burst 800 us gap 2.2 ms +pulse 3.6 ms + +This triggers COTAG tag to response -This triggers a COTAG tag to response */ void Cotag(uint32_t arg0) { #ifndef OFF @@ -2435,7 +2454,7 @@ void Cotag(uint32_t arg0) { LED_A_ON(); - LFSetupFPGAForADC(LF_DIVISOR_134, true); + LFSetupFPGAForADC(LF_DIVISOR(132), true); //clear buffer now so it does not interfere with timing later BigBuf_Clear_ext(false); From 371a0e3ee002b0cf5d779547742cda87f114b988 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Oct 2019 11:13:14 +0200 Subject: [PATCH 81/88] coverity 226308 --- client/cmdhflist.c | 2 +- include/protocols.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/cmdhflist.c b/client/cmdhflist.c index 45abd1d57..737405787 100644 --- a/client/cmdhflist.c +++ b/client/cmdhflist.c @@ -363,7 +363,7 @@ void annotateIclass(char *exp, size_t size, uint8_t *cmd, uint8_t cmdsize) { snprintf(exp, size, "UPDATE(%d)", cmd[1]); break; case ICLASS_CMD_READCHECK: - if (ICLASS_CREDIT(c)) { + if (ICLASS_CREDIT(cmd[0])) { snprintf(exp, size, "READCHECK[Kc](%d)", cmd[1]); } else { snprintf(exp, size, "READCHECK[Kd](%d)", cmd[1]); diff --git a/include/protocols.h b/include/protocols.h index 4eb3ab58c..2547f01de 100644 --- a/include/protocols.h +++ b/include/protocols.h @@ -133,8 +133,8 @@ ISO 7816-4 Basic interindustry commands. For command APDU's. #define ICLASS_CMD_READ_OR_IDENTIFY 0xC #define ICLASS_CMD_ACT 0xE -#define ICLASS_CREDIT(x) (((x) & 0x5) == 0x5) -#define ICLASS_DEBIT(x) (((x) & 0x5) == 0) +#define ICLASS_CREDIT(x) (((x) & 0x10) == 0x10) +#define ICLASS_DEBIT(x) !(ICLASS_CREDIT(x)) #define ISO14443A_CMD_REQA 0x26 From 7435663ea15f9958ada6d365646a993fcea2cbbd Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Oct 2019 11:36:28 +0200 Subject: [PATCH 82/88] coverity 226262 --- armsrc/dbprint.c | 14 +++++++------- armsrc/dbprint.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/armsrc/dbprint.c b/armsrc/dbprint.c index 499703ef1..9b18b7aca 100644 --- a/armsrc/dbprint.c +++ b/armsrc/dbprint.c @@ -22,35 +22,35 @@ // Debug print functions, to go out over USB, to the usual PC-side client. //============================================================================= -void DbpStringEx(uint32_t flags, char *str) { +void DbpStringEx(uint32_t flags, char *src, size_t srclen) { #if DEBUG struct { uint16_t flag; uint8_t buf[PM3_CMD_DATA_SIZE - sizeof(uint16_t)]; } PACKED data; data.flag = flags; - uint16_t len = MIN(strlen(str), sizeof(data.buf)); - memcpy(data.buf, str, len); + uint16_t len = MIN(srclen, sizeof(data.buf)); + memcpy(data.buf, src, len); reply_ng(CMD_DEBUG_PRINT_STRING, PM3_SUCCESS, (uint8_t *)&data, sizeof(data.flag) + len); #endif } void DbpString(char *str) { #if DEBUG - DbpStringEx(FLAG_LOG, str); + DbpStringEx(FLAG_LOG, str, strlen(str)); #endif } void DbprintfEx(uint32_t flags, const char *fmt, ...) { #if DEBUG // should probably limit size here; oh well, let's just use a big buffer - char output_string[PM3_CMD_DATA_SIZE] = {0x00}; + char s[PM3_CMD_DATA_SIZE] = {0x00}; va_list ap; va_start(ap, fmt); - kvsprintf(fmt, output_string, 10, ap); + kvsprintf(fmt, s, 10, ap); va_end(ap); - DbpStringEx(flags, output_string); + DbpStringEx(flags, s, strlen(s)); #endif } diff --git a/armsrc/dbprint.h b/armsrc/dbprint.h index 54b813218..c3229f46f 100644 --- a/armsrc/dbprint.h +++ b/armsrc/dbprint.h @@ -43,7 +43,7 @@ void DbpString(char *str); -void DbpStringEx(uint32_t flags, char *str); +void DbpStringEx(uint32_t flags, char *src, size_t srclen); void Dbprintf(const char *fmt, ...); void DbprintfEx(uint32_t flags, const char *fmt, ...); void Dbhexdump(int len, uint8_t *d, bool bAsci); From 9be5627537bbe620ebdd551a858d9a8b4dcf618f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Oct 2019 11:37:36 +0200 Subject: [PATCH 83/88] should unify authors messages, remove from individual functions that was done for awhile --- client/cmdlfcotag.c | 5 +++-- client/cmdlfcotag.h | 2 +- client/cmdlfgallagher.c | 1 + client/cmdlfgallagher.h | 1 + 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/client/cmdlfcotag.c b/client/cmdlfcotag.c index 96548fca9..dd7d5d648 100644 --- a/client/cmdlfcotag.c +++ b/client/cmdlfcotag.c @@ -1,5 +1,5 @@ //----------------------------------------------------------------------------- -// Authored by Iceman +// Iceman // // This code is licensed to you under the terms of the GNU GPL, version 2 or, // at your option, any later version. See the LICENSE.txt file for the text of @@ -17,6 +17,7 @@ #include "lfdemod.h" #include "cmddata.h" // getSamples #include "ui.h" // PrintAndLog +#include "ctype.h" // tolower static int CmdHelp(const char *Cmd); @@ -78,7 +79,7 @@ static int CmdCOTAGDemod(const char *Cmd) { // 2 = raw signal - maxlength bigbuff static int CmdCOTAGRead(const char *Cmd) { - if (Cmd[0] == 'h' || Cmd[0] == 'H') return usage_lf_cotag_read(); + if ( tolower(Cmd[0]) == 'h') return usage_lf_cotag_read(); uint32_t rawsignal = 1; sscanf(Cmd, "%u", &rawsignal); diff --git a/client/cmdlfcotag.h b/client/cmdlfcotag.h index 01c4daa03..d7b5bc331 100644 --- a/client/cmdlfcotag.h +++ b/client/cmdlfcotag.h @@ -1,5 +1,5 @@ //----------------------------------------------------------------------------- -// Authored by Iceman +// Iceman // // This code is licensed to you under the terms of the GNU GPL, version 2 or, // at your option, any later version. See the LICENSE.txt file for the text of diff --git a/client/cmdlfgallagher.c b/client/cmdlfgallagher.c index 051973a28..894e98ef8 100644 --- a/client/cmdlfgallagher.c +++ b/client/cmdlfgallagher.c @@ -1,4 +1,5 @@ //----------------------------------------------------------------------------- +// Iceman, 2019 // // This code is licensed to you under the terms of the GNU GPL, version 2 or, // at your option, any later version. See the LICENSE.txt file for the text of diff --git a/client/cmdlfgallagher.h b/client/cmdlfgallagher.h index 90729b152..0ee2a72b3 100644 --- a/client/cmdlfgallagher.h +++ b/client/cmdlfgallagher.h @@ -1,4 +1,5 @@ //----------------------------------------------------------------------------- +// Iceman, 2019 // // This code is licensed to you under the terms of the GNU GPL, version 2 or, // at your option, any later version. See the LICENSE.txt file for the text of From 9f544954120321045f250f053bdbc45d20381e27 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Oct 2019 11:54:23 +0200 Subject: [PATCH 84/88] coverity 226214 --- armsrc/iso15693.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/armsrc/iso15693.c b/armsrc/iso15693.c index ecf0640a5..f1fd3eb9c 100644 --- a/armsrc/iso15693.c +++ b/armsrc/iso15693.c @@ -937,10 +937,9 @@ void BruteforceIso15693Afi(uint32_t speed) { data[0] = ISO15_REQ_SUBCARRIER_SINGLE | ISO15_REQ_DATARATE_HIGH | ISO15_REQ_INVENTORY | ISO15_REQINV_SLOT1; data[1] = ISO15_CMD_INVENTORY; - data[2] = 0; // mask length + data[2] = 0; // AFI AddCrc15(data, 3); - datalen += 2; - + datalen = 5; recvlen = SendDataTag(data, datalen, false, speed, buf); WDT_HIT(); @@ -955,10 +954,12 @@ void BruteforceIso15693Afi(uint32_t speed) { data[2] = 0; // AFI data[3] = 0; // mask length + // 4 + 2crc + datalen = 6; + for (uint16_t i = 0; i < 256; i++) { data[2] = i & 0xFF; AddCrc15(data, 4); - datalen += 2; recvlen = SendDataTag(data, datalen, false, speed, buf); WDT_HIT(); if (recvlen >= 12) { From c2b448de0f86838262875a7c804f4c7086389270 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 10 Oct 2019 12:02:01 +0200 Subject: [PATCH 85/88] elite_crack: static include else we get issue with gcov --- client/loclass/elite_crack.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/loclass/elite_crack.c b/client/loclass/elite_crack.c index c7a617f6a..fd0c5c8dd 100644 --- a/client/loclass/elite_crack.c +++ b/client/loclass/elite_crack.c @@ -108,7 +108,7 @@ void permutekey_rev(uint8_t key[8], uint8_t dest[8]) { * @param val * @return */ -inline uint8_t rr(uint8_t val) { +static inline uint8_t rr(uint8_t val) { return val >> 1 | ((val & 1) << 7); } @@ -118,7 +118,7 @@ inline uint8_t rr(uint8_t val) { * @param val * @return */ -inline uint8_t rl(uint8_t val) { +static inline uint8_t rl(uint8_t val) { return val << 1 | ((val & 0x80) >> 7); } @@ -128,7 +128,7 @@ inline uint8_t rl(uint8_t val) { * @param val * @return */ -inline uint8_t swap(uint8_t val) { +static inline uint8_t swap(uint8_t val) { return ((val >> 4) & 0xFF) | ((val & 0xFF) << 4); } From f6c1e73378890758084c01e081e5b6179d898a51 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Oct 2019 12:34:11 +0200 Subject: [PATCH 86/88] coverity 263230 --- client/cmdtrace.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/cmdtrace.c b/client/cmdtrace.c index d9ee12a11..63cfa388c 100644 --- a/client/cmdtrace.c +++ b/client/cmdtrace.c @@ -188,10 +188,12 @@ static uint16_t printHexLine(uint16_t tracepos, uint16_t traceLen, uint8_t *trac temp_str2, line); ret = tracepos; + break; } default: PrintAndLogEx(NORMAL, "Currently only 14a supported"); ret = traceLen; + break; } return ret; From 8416bdb485f5bf7a52569261714476bc12875f9d Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Oct 2019 12:41:12 +0200 Subject: [PATCH 87/88] coverity 226278 --- armsrc/appmain.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 248346b4f..4218d93a0 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1568,9 +1568,10 @@ static void PacketReceived(PacketCommandNG *packet) { BigBuf_Clear_ext(false); BigBuf_free(); } + uint16_t offset = MIN(BIGBUF_SIZE - PM3_CMD_DATA_SIZE - 3, payload->offset); uint8_t *mem = BigBuf_get_addr(); - memcpy(mem + payload->offset, &payload->data, PM3_CMD_DATA_SIZE - 3); + memcpy(mem + offset, &payload->data, PM3_CMD_DATA_SIZE - 3); reply_ng(CMD_LF_UPLOAD_SIM_SAMPLES, PM3_SUCCESS, NULL, 0); break; } From ed4cdc8b759d433880c12ba1b57efd5d1cec0830 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 10 Oct 2019 13:11:29 +0200 Subject: [PATCH 88/88] coverity 226411 --- client/loclass/cipherutils.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/loclass/cipherutils.c b/client/loclass/cipherutils.c index b50268697..c2a802c7a 100644 --- a/client/loclass/cipherutils.c +++ b/client/loclass/cipherutils.c @@ -150,6 +150,8 @@ void reverse_arraycopy(uint8_t *arr, uint8_t *dest, size_t len) { } void printarr(const char *name, uint8_t *arr, int len) { + if (name == NULL || arr == NULL) return; + int cx, i; size_t outsize = 40 + strlen(name) + len * 5; char *output = calloc(outsize, sizeof(char));