From 260f6b9c2fc6765c9fb6447bbef39b6631eed970 Mon Sep 17 00:00:00 2001 From: Iceman Date: Wed, 16 Oct 2019 10:04:38 +0200 Subject: [PATCH 01/52] Update Troubleshooting.md --- doc/md/Installation_Instructions/Troubleshooting.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/doc/md/Installation_Instructions/Troubleshooting.md b/doc/md/Installation_Instructions/Troubleshooting.md index e0cf7f7aa..ab893d177 100644 --- a/doc/md/Installation_Instructions/Troubleshooting.md +++ b/doc/md/Installation_Instructions/Troubleshooting.md @@ -16,7 +16,8 @@ Always use the latest repository commits from *master* branch. There are always * [Troubles with SIM card reader](#troubles-with-sim-card-reader) * [Troubles with t5577 commands or MFC/iClass/T55x7 dictionaries](#troubles-with-t5577-commands-or-mfciclasst55x7-dictionaries) * [File not found](#file-not-found) - * [pixmap / pixbuf warnings](#pixmap--pixbuf-warnings) + * [Pixmap / pixbuf warnings](#pixmap--pixbuf-warnings) + * [Usb cable](#usb-cable) ## `pm3` or `pm3-flash*` doesn't see my Proxmark @@ -154,6 +155,12 @@ pm3 --> sc upgrade f ../tools/simmodule/sim011.bin etc. -## pixmap / pixbuf warnings +## Pixmap / pixbuf warnings If you get warnings related to pixmap or pixbuf such as *Pixbuf theme: Cannot load pixmap file* or *Invalid borders specified for theme pixmap*, it's a problem of your Theme, try another one and the problem should vanish. See e.g. [#354](https://github.com/RfidResearchGroup/proxmark3/issues/354) (Yaru theme on Ubuntu) and [#386](https://github.com/RfidResearchGroup/proxmark3/issues/386) (Kali-X theme on Kali). + +## Usb cable + +It's needed to have a good USB cable to connect Proxmark3 to USB. If you have stability problems (Proxmark3 resets, firmware hangs, especially firmware hangs just after start, etc.) + +- check your cable with a USB tester (or try to change it). It needs to have a resistance smaller or equal to 0.3 Ohm. From 8a91880e332085b60c99af1b147ca477170383d8 Mon Sep 17 00:00:00 2001 From: Iceman Date: Wed, 16 Oct 2019 10:05:21 +0200 Subject: [PATCH 02/52] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 62c3add53..350763c34 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,8 @@ This repo compiles nicely on - WSL, WSL2 (Windows subsystem linux) on Windows 10 - Docker container +The [public roadmap](https://github.com/RfidResearchGroup/proxmark3/wiki/Public-Roadmap) is an excellent start to read if you are interesting in contributing. + > 👉 **Remember!** If you intend to contribute to the code, please read the [coding style notes](HACKING.md) first. We usually merge your contributions fast since we do like the idea of getting a functionality in the Proxmark3 and weed out the bugs afterwards. @@ -93,7 +95,8 @@ The new universal GUI will work. [Proxmark3 Universal GUI](https://github.com/bu Please see the [Proxmark Forum](http://www.proxmark.org/forum/index.php) and see if your issue is listed in the first instance Google is your friend :) Questions will be answered via the forum by Iceman and the team. -It's needed to have a good USB cable to connect Proxmark3 to USB. If you have stability problems (Proxmark3 resets, firmware hangs, especially firmware hangs just after start, etc.) - check your cable with a USB tester (or try to change it). It needs to have a resistance smaller or equal to 0.3 Ohm. +Read the [Troubleshooting](/doc/md/Installation_Instructions/Troubleshooting.md) guide to weed out most known problems. + ## The end From bae3f65db6f9793fe346c7739377553a3ea62721 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 16 Oct 2019 10:22:41 +0200 Subject: [PATCH 03/52] textual --- client/cmdlfnoralsy.c | 2 +- client/cmdlfpresco.c | 2 +- client/cmdlfpyramid.c | 2 +- client/cmdlfviking.c | 4 ++-- client/cmdlfvisa2000.c | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/client/cmdlfnoralsy.c b/client/cmdlfnoralsy.c index 79fbb3913..06186099c 100644 --- a/client/cmdlfnoralsy.c +++ b/client/cmdlfnoralsy.c @@ -219,7 +219,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdNoralsyDemod, AlwaysAvailable, "Demodulate an Noralsy tag from the GraphBuffer"}, {"read", CmdNoralsyRead, IfPm3Lf, "Attempt to read and extract tag data from the antenna"}, - {"clone", CmdNoralsyClone, IfPm3Lf, "clone Noralsy to T55x7"}, + {"clone", CmdNoralsyClone, IfPm3Lf, "clone Noralsy to T55x7 (or to q5/T5555)"}, {"sim", CmdNoralsySim, IfPm3Lf, "simulate Noralsy tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfpresco.c b/client/cmdlfpresco.c index 06645e86f..abce377f4 100644 --- a/client/cmdlfpresco.c +++ b/client/cmdlfpresco.c @@ -176,7 +176,7 @@ static int CmdPrescoSim(const char *Cmd) { static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"read", CmdPrescoRead, IfPm3Lf, "Attempt to read and Extract tag data"}, - {"clone", CmdPrescoClone, IfPm3Lf, "clone presco tag"}, + {"clone", CmdPrescoClone, IfPm3Lf, "clone presco tag to T55x7 (or to q5/T5555)"}, {"sim", CmdPrescoSim, IfPm3Lf, "simulate presco tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfpyramid.c b/client/cmdlfpyramid.c index d8c9511a6..a36bd34e3 100644 --- a/client/cmdlfpyramid.c +++ b/client/cmdlfpyramid.c @@ -300,7 +300,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "this help"}, {"demod", CmdPyramidDemod, AlwaysAvailable, "demodulate a Pyramid FSK tag from the GraphBuffer"}, {"read", CmdPyramidRead, IfPm3Lf, "attempt to read and extract tag data"}, - {"clone", CmdPyramidClone, IfPm3Lf, "clone pyramid tag"}, + {"clone", CmdPyramidClone, IfPm3Lf, "clone pyramid tag to T55x7 (or to q5/T5555)"}, {"sim", CmdPyramidSim, IfPm3Lf, "simulate pyramid tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfviking.c b/client/cmdlfviking.c index 3a2ad6a5d..6221c73f3 100644 --- a/client/cmdlfviking.c +++ b/client/cmdlfviking.c @@ -160,8 +160,8 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdVikingDemod, AlwaysAvailable, "Demodulate a Viking tag from the GraphBuffer"}, {"read", CmdVikingRead, IfPm3Lf, "Attempt to read and Extract tag data from the antenna"}, - {"clone", CmdVikingClone, IfPm3Lf, "<8 digit ID number> clone viking tag"}, - {"sim", CmdVikingSim, IfPm3Lf, "<8 digit ID number> simulate viking tag"}, + {"clone", CmdVikingClone, IfPm3Lf, "clone viking to T55x7 (or to q5/T5555)"}, + {"sim", CmdVikingSim, IfPm3Lf, "simulate viking tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfvisa2000.c b/client/cmdlfvisa2000.c index a32dc5aeb..3fd1f7b94 100644 --- a/client/cmdlfvisa2000.c +++ b/client/cmdlfvisa2000.c @@ -228,7 +228,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdVisa2kDemod, AlwaysAvailable, "demodulate an VISA2000 tag from the GraphBuffer"}, {"read", CmdVisa2kRead, IfPm3Lf, "attempt to read and extract tag data from the antenna"}, - {"clone", CmdVisa2kClone, IfPm3Lf, "clone Visa2000 to t55x7"}, + {"clone", CmdVisa2kClone, IfPm3Lf, "clone Visa2000 to T55x7 (or to q5/T5555)"}, {"sim", CmdVisa2kSim, IfPm3Lf, "simulate Visa2000 tag"}, {NULL, NULL, NULL, NULL} }; From db3da4d22451d95ad8d5ba431751a198617ec43f Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 16 Oct 2019 10:28:53 +0200 Subject: [PATCH 04/52] textual --- client/cmdlfnexwatch.c | 2 +- client/cmdlfpac.c | 2 +- client/cmdlfparadox.c | 2 +- client/cmdlfsecurakey.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/cmdlfnexwatch.c b/client/cmdlfnexwatch.c index 8d40d47d6..1a204ed41 100644 --- a/client/cmdlfnexwatch.c +++ b/client/cmdlfnexwatch.c @@ -152,7 +152,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdNexWatchDemod, AlwaysAvailable, "Demodulate a NexWatch tag (nexkey, quadrakey) from the GraphBuffer"}, {"read", CmdNexWatchRead, IfPm3Lf, "Attempt to Read and Extract tag data from the antenna"}, - {"clone", CmdNexWatchClone, IfPm3Lf, "clone NexWatch tag"}, + {"clone", CmdNexWatchClone, IfPm3Lf, "clone NexWatch tag to T55x7"}, {"sim", CmdNexWatchSim, IfPm3Lf, "simulate NexWatch tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfpac.c b/client/cmdlfpac.c index 9b735f02e..eb1b20cd9 100644 --- a/client/cmdlfpac.c +++ b/client/cmdlfpac.c @@ -135,7 +135,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdPacDemod, AlwaysAvailable, "Demodulate an PAC tag from the GraphBuffer"}, {"read", CmdPacRead, IfPm3Lf, "Attempt to read and extract tag data from the antenna"}, - {"clone", CmdPacClone, IfPm3Lf, "clone PAC tag"}, + {"clone", CmdPacClone, IfPm3Lf, "clone PAC tag to T55x7"}, {"sim", CmdPacSim, IfPm3Lf, "simulate PAC tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfparadox.c b/client/cmdlfparadox.c index d2c8d64b5..c154e7efa 100644 --- a/client/cmdlfparadox.c +++ b/client/cmdlfparadox.c @@ -224,7 +224,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdParadoxDemod, AlwaysAvailable, "Demodulate a Paradox FSK tag from the GraphBuffer"}, {"read", CmdParadoxRead, IfPm3Lf, "Attempt to read and Extract tag data from the antenna"}, - {"clone", CmdParadoxClone, IfPm3Lf, "clone paradox tag"}, + {"clone", CmdParadoxClone, IfPm3Lf, "clone paradox tag to T55x7"}, {"sim", CmdParadoxSim, IfPm3Lf, "simulate paradox tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfsecurakey.c b/client/cmdlfsecurakey.c index 64e8a2121..48ec731ce 100644 --- a/client/cmdlfsecurakey.c +++ b/client/cmdlfsecurakey.c @@ -180,7 +180,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdSecurakeyDemod, AlwaysAvailable, "Demodulate an Securakey tag from the GraphBuffer"}, {"read", CmdSecurakeyRead, IfPm3Lf, "Attempt to read and extract tag data from the antenna"}, - {"clone", CmdSecurakeyClone, IfPm3Lf, "clone Securakey tag"}, + {"clone", CmdSecurakeyClone, IfPm3Lf, "clone Securakey tag to T55x7"}, {"sim", CmdSecurakeySim, IfPm3Lf, "simulate Securakey tag"}, {NULL, NULL, NULL, NULL} }; From cec9330a79464795ae599f7f64f0f54cdbb1d707 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 16 Oct 2019 10:32:50 +0200 Subject: [PATCH 05/52] textual --- client/cmdlfgallagher.c | 2 +- client/cmdlfguard.c | 2 +- client/cmdlfhid.c | 2 +- client/cmdlfindala.c | 2 +- client/cmdlfio.c | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client/cmdlfgallagher.c b/client/cmdlfgallagher.c index d32c9ade9..f8d513a13 100644 --- a/client/cmdlfgallagher.c +++ b/client/cmdlfgallagher.c @@ -135,7 +135,7 @@ 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"}, + {"clone", CmdGallagherClone, IfPm3Lf, "clone GALLAGHER tag to T55x7"}, {"sim", CmdGallagherSim, IfPm3Lf, "simulate GALLAGHER tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfguard.c b/client/cmdlfguard.c index a8cd8a65b..79ec13c71 100644 --- a/client/cmdlfguard.c +++ b/client/cmdlfguard.c @@ -238,7 +238,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "this help"}, {"demod", CmdGuardDemod, AlwaysAvailable, "demodulate a G Prox II tag from the GraphBuffer"}, {"read", CmdGuardRead, IfPm3Lf, "attempt to read and extract tag data from the antenna"}, - {"clone", CmdGuardClone, IfPm3Lf, "clone Guardall tag"}, + {"clone", CmdGuardClone, IfPm3Lf, "clone Guardall tag to T55x7"}, {"sim", CmdGuardSim, IfPm3Lf, "simulate Guardall tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfhid.c b/client/cmdlfhid.c index 004248e43..f5ad3717b 100644 --- a/client/cmdlfhid.c +++ b/client/cmdlfhid.c @@ -452,7 +452,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "this help"}, {"demod", CmdHIDDemod, AlwaysAvailable, "demodulate HID Prox tag from the GraphBuffer"}, {"read", CmdHIDRead, IfPm3Lf, "attempt to read and extract tag data"}, - {"clone", CmdHIDClone, IfPm3Lf, "clone HID to T55x7"}, + {"clone", CmdHIDClone, IfPm3Lf, "clone HID tag to T55x7"}, {"sim", CmdHIDSim, IfPm3Lf, "simulate HID tag"}, {"brute", CmdHIDBrute, IfPm3Lf, "bruteforce card number against reader"}, {"watch", CmdHIDWatch, IfPm3Lf, "continuously watch for cards. Reader mode"}, diff --git a/client/cmdlfindala.c b/client/cmdlfindala.c index e57368400..443435f88 100644 --- a/client/cmdlfindala.c +++ b/client/cmdlfindala.c @@ -534,7 +534,7 @@ static command_t CommandTable[] = { {"demod", CmdIndalaDemod, AlwaysAvailable, "demodulate an indala tag (PSK1) from GraphBuffer"}, {"altdemod", CmdIndalaDemodAlt, AlwaysAvailable, "alternative method to Demodulate samples for Indala 64 bit UID (option '224' for 224 bit)"}, {"read", CmdIndalaRead, IfPm3Lf, "read an Indala Prox tag from the antenna"}, - {"clone", CmdIndalaClone, IfPm3Lf, "clone Indala to T55x7"}, + {"clone", CmdIndalaClone, IfPm3Lf, "clone Indala tag to T55x7"}, {"sim", CmdIndalaSim, IfPm3Lf, "simulate Indala tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfio.c b/client/cmdlfio.c index 3aefd7b55..57a8a64d1 100644 --- a/client/cmdlfio.c +++ b/client/cmdlfio.c @@ -282,7 +282,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "this help"}, {"demod", CmdIOProxDemod, AlwaysAvailable, "demodulate an IOProx tag from the GraphBuffer"}, {"read", CmdIOProxRead, IfPm3Lf, "attempt to read and extract tag data"}, - {"clone", CmdIOProxClone, IfPm3Lf, "clone IOProx to T55x7"}, + {"clone", CmdIOProxClone, IfPm3Lf, "clone IOProx tag to T55x7 (or to q5/T5555)"}, {"sim", CmdIOProxSim, IfPm3Lf, "simulate IOProx tag"}, {"watch", CmdIOProxWatch, IfPm3Lf, "continuously watch for cards. Reader mode"}, {NULL, NULL, NULL, NULL} From 726c421b1e5622fc50827c4f4fe1613a01a29cb6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 16 Oct 2019 10:38:05 +0200 Subject: [PATCH 06/52] textual --- client/cmdlfawid.c | 2 +- client/cmdlfjablotron.c | 2 +- client/cmdlfkeri.c | 2 +- client/cmdlfmotorola.c | 2 +- client/cmdlfnoralsy.c | 2 +- client/cmdlfviking.c | 4 ++-- client/cmdlfvisa2000.c | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/client/cmdlfawid.c b/client/cmdlfawid.c index afd2206f3..e9fe6d6e1 100644 --- a/client/cmdlfawid.c +++ b/client/cmdlfawid.c @@ -523,7 +523,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "this help"}, {"demod", CmdAWIDDemod, AlwaysAvailable, "demodulate an AWID FSK tag from the GraphBuffer"}, {"read", CmdAWIDRead, IfPm3Lf, "attempt to read and extract tag data"}, - {"clone", CmdAWIDClone, IfPm3Lf, "clone AWID to T55x7"}, + {"clone", CmdAWIDClone, IfPm3Lf, "clone AWID tag to T55x7 (or to q5/T5555)"}, {"sim", CmdAWIDSim, IfPm3Lf, "simulate AWID tag"}, {"brute", CmdAWIDBrute, IfPm3Lf, "Bruteforce card number against reader"}, {"watch", CmdAWIDWatch, IfPm3Lf, "continuously watch for cards. Reader mode"}, diff --git a/client/cmdlfjablotron.c b/client/cmdlfjablotron.c index 3633902f2..a1f5b0592 100644 --- a/client/cmdlfjablotron.c +++ b/client/cmdlfjablotron.c @@ -217,7 +217,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdJablotronDemod, AlwaysAvailable, "Demodulate an Jablotron tag from the GraphBuffer"}, {"read", CmdJablotronRead, IfPm3Lf, "Attempt to read and extract tag data from the antenna"}, - {"clone", CmdJablotronClone, IfPm3Lf, "clone jablotron tag"}, + {"clone", CmdJablotronClone, IfPm3Lf, "clone jablotron tag to T55x7 (or to q5/T5555)"}, {"sim", CmdJablotronSim, IfPm3Lf, "simulate jablotron tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfkeri.c b/client/cmdlfkeri.c index 9e9bbdb49..b36be56b9 100644 --- a/client/cmdlfkeri.c +++ b/client/cmdlfkeri.c @@ -209,7 +209,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdKeriDemod, AlwaysAvailable, "Demodulate an KERI tag from the GraphBuffer"}, {"read", CmdKeriRead, IfPm3Lf, "Attempt to read and extract tag data from the antenna"}, - {"clone", CmdKeriClone, IfPm3Lf, "clone KERI to T55x7"}, + {"clone", CmdKeriClone, IfPm3Lf, "clone KERI tag to T55x7 (or to q5/T5555)"}, {"sim", CmdKeriSim, IfPm3Lf, "simulate KERI tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfmotorola.c b/client/cmdlfmotorola.c index e306827ed..87ea53a3b 100644 --- a/client/cmdlfmotorola.c +++ b/client/cmdlfmotorola.c @@ -192,7 +192,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdMotorolaDemod, AlwaysAvailable, "Demodulate an MOTOROLA tag from the GraphBuffer"}, {"read", CmdMotorolaRead, IfPm3Lf, "Attempt to read and extract tag data from the antenna"}, - {"clone", CmdMotorolaClone, IfPm3Lf, "clone MOTOROLA to T55x7"}, + {"clone", CmdMotorolaClone, IfPm3Lf, "clone MOTOROLA tag to T55x7"}, {"sim", CmdMotorolaSim, IfPm3Lf, "simulate MOTOROLA tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfnoralsy.c b/client/cmdlfnoralsy.c index 06186099c..ceebb8e2d 100644 --- a/client/cmdlfnoralsy.c +++ b/client/cmdlfnoralsy.c @@ -219,7 +219,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdNoralsyDemod, AlwaysAvailable, "Demodulate an Noralsy tag from the GraphBuffer"}, {"read", CmdNoralsyRead, IfPm3Lf, "Attempt to read and extract tag data from the antenna"}, - {"clone", CmdNoralsyClone, IfPm3Lf, "clone Noralsy to T55x7 (or to q5/T5555)"}, + {"clone", CmdNoralsyClone, IfPm3Lf, "clone Noralsy tag to T55x7 (or to q5/T5555)"}, {"sim", CmdNoralsySim, IfPm3Lf, "simulate Noralsy tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfviking.c b/client/cmdlfviking.c index 6221c73f3..c404b4f0a 100644 --- a/client/cmdlfviking.c +++ b/client/cmdlfviking.c @@ -160,8 +160,8 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdVikingDemod, AlwaysAvailable, "Demodulate a Viking tag from the GraphBuffer"}, {"read", CmdVikingRead, IfPm3Lf, "Attempt to read and Extract tag data from the antenna"}, - {"clone", CmdVikingClone, IfPm3Lf, "clone viking to T55x7 (or to q5/T5555)"}, - {"sim", CmdVikingSim, IfPm3Lf, "simulate viking tag"}, + {"clone", CmdVikingClone, IfPm3Lf, "clone Viking tag to T55x7 (or to q5/T5555)"}, + {"sim", CmdVikingSim, IfPm3Lf, "simulate Viking tag"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/cmdlfvisa2000.c b/client/cmdlfvisa2000.c index 3fd1f7b94..677562e12 100644 --- a/client/cmdlfvisa2000.c +++ b/client/cmdlfvisa2000.c @@ -228,7 +228,7 @@ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"demod", CmdVisa2kDemod, AlwaysAvailable, "demodulate an VISA2000 tag from the GraphBuffer"}, {"read", CmdVisa2kRead, IfPm3Lf, "attempt to read and extract tag data from the antenna"}, - {"clone", CmdVisa2kClone, IfPm3Lf, "clone Visa2000 to T55x7 (or to q5/T5555)"}, + {"clone", CmdVisa2kClone, IfPm3Lf, "clone Visa2000 tag to T55x7 (or to q5/T5555)"}, {"sim", CmdVisa2kSim, IfPm3Lf, "simulate Visa2000 tag"}, {NULL, NULL, NULL, NULL} }; From abf81bbbb7659af0d774f624ed633f7072f90c53 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 16 Oct 2019 10:42:58 +0200 Subject: [PATCH 07/52] log help as well, for consistent logging experience --- client/cmdparser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/cmdparser.c b/client/cmdparser.c index f116b5ecd..52d4e805e 100644 --- a/client/cmdparser.c +++ b/client/cmdparser.c @@ -156,7 +156,7 @@ void CmdsHelp(const command_t Commands[]) { while (Commands[i].Name) { if (Commands[i].IsAvailable()) // PrintAndLogEx(NORMAL, _GREEN_("%-16s")" %s", Commands[i].Name, Commands[i].Help); - printf(_GREEN_("%-16s")" %s\n", Commands[i].Name, Commands[i].Help); + PrintAndLogEx(NORMAL, _GREEN_("%-16s")" %s", Commands[i].Name, Commands[i].Help); ++i; } } From f9bf50e20b7170d34e93d776a4e7e6bc360c0dbe Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 16 Oct 2019 10:43:32 +0200 Subject: [PATCH 08/52] add xrefs between t55 menu and lf clone commands --- client/cmdlft55xx.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index 1607dc746..6332a77dd 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -373,6 +373,32 @@ static int usage_t55xx_dangerraw() { static int CmdHelp(const char *Cmd); +static int CmdT55xxCloneHelp(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + PrintAndLogEx(NORMAL, "For cloning specific techs on T55xx tags, see commands available in corresponding LF sub-menus, e.g.:"); + PrintAndLogEx(NORMAL, _GREEN_("lf awid clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf em 410x_write")); + PrintAndLogEx(NORMAL, _GREEN_("lf fdx clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf gallagher clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf gproxii clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf hid clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf indala clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf io clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf jablotron clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf keri clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf nedap clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf noralsy clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf motorola clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf pac clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf paradox clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf presco clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf pyramid clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf securakey clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf viking clone")); + PrintAndLogEx(NORMAL, _GREEN_("lf visa2000 clone")); + return PM3_SUCCESS; +} + void T55x7_SaveBlockData(uint8_t idx, uint32_t data) { if (idx < T55x7_BLOCK_COUNT) { cardmem[idx].valid = true; @@ -3652,6 +3678,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"}, + {"clonehelp", CmdT55xxCloneHelp, IfPm3Lf, "Shows the available clone commands"}, {"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"}, From cce04ef93cbe15c637adc352540e5bd2dc7ff319 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 16 Oct 2019 10:57:14 +0200 Subject: [PATCH 09/52] textual --- client/cmdlft55xx.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index 6332a77dd..e1f84b32b 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -371,13 +371,14 @@ static int usage_t55xx_dangerraw() { return PM3_SUCCESS; } -static int CmdHelp(const char *Cmd); - -static int CmdT55xxCloneHelp(const char *Cmd) { - (void)Cmd; // Cmd is not used so far +static int usage_t55xx_clonehelp(){ PrintAndLogEx(NORMAL, "For cloning specific techs on T55xx tags, see commands available in corresponding LF sub-menus, e.g.:"); PrintAndLogEx(NORMAL, _GREEN_("lf awid clone")); +// todo: rename to clone PrintAndLogEx(NORMAL, _GREEN_("lf em 410x_write")); +// todo: implement restore +// PrintAndLogEx(NORMAL, _GREEN_("lf em 4x05_write")); +// PrintAndLogEx(NORMAL, _GREEN_("lf em 4x50_write")); PrintAndLogEx(NORMAL, _GREEN_("lf fdx clone")); PrintAndLogEx(NORMAL, _GREEN_("lf gallagher clone")); PrintAndLogEx(NORMAL, _GREEN_("lf gproxii clone")); @@ -399,6 +400,13 @@ static int CmdT55xxCloneHelp(const char *Cmd) { return PM3_SUCCESS; } +static int CmdHelp(const char *Cmd); + +static int CmdT55xxCloneHelp(const char *Cmd) { + (void)Cmd; // Cmd is not used so far + return usage_t55xx_clonehelp(); +} + void T55x7_SaveBlockData(uint8_t idx, uint32_t data) { if (idx < T55x7_BLOCK_COUNT) { cardmem[idx].valid = true; From c3c45e03ce6216eefa46ac92357cd8b4dad00a21 Mon Sep 17 00:00:00 2001 From: mwalker33 Date: Wed, 16 Oct 2019 20:24:03 +1100 Subject: [PATCH 10/52] Update proxmark3.c --- client/proxmark3.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/proxmark3.c b/client/proxmark3.c index db8434e07..ceabbc6f3 100644 --- a/client/proxmark3.c +++ b/client/proxmark3.c @@ -684,6 +684,8 @@ int main(int argc, char *argv[]) { } session.supports_colors = false; +/* + // Removed color on windows until a better option can be implemented. #if defined(_WIN32) // Check if windows AnsiColor Support is enabled in the registery @@ -711,6 +713,7 @@ int main(int argc, char *argv[]) { } #endif +*/ session.stdinOnTTY = isatty(STDIN_FILENO); session.stdoutOnTTY = isatty(STDOUT_FILENO); From 5737355985e28af306a8566e12fce69a3cff12cd Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 16 Oct 2019 14:46:57 +0200 Subject: [PATCH 11/52] chg renable win ansi test. trying turning offlogging. @doegox can refacor this away when we get a prefs.json settings file --- client/cmdparser.c | 6 +++-- client/proxmark3.c | 65 ++++++++++++++++++++++++---------------------- 2 files changed, 38 insertions(+), 33 deletions(-) diff --git a/client/cmdparser.c b/client/cmdparser.c index 52d4e805e..72628f2fb 100644 --- a/client/cmdparser.c +++ b/client/cmdparser.c @@ -154,9 +154,11 @@ void CmdsHelp(const command_t Commands[]) { if (Commands[0].Name == NULL) return; int i = 0; while (Commands[i].Name) { - if (Commands[i].IsAvailable()) -// PrintAndLogEx(NORMAL, _GREEN_("%-16s")" %s", Commands[i].Name, Commands[i].Help); + if (Commands[i].IsAvailable()) { + g_printAndLog = PRINTANDLOG_PRINT; PrintAndLogEx(NORMAL, _GREEN_("%-16s")" %s", Commands[i].Name, Commands[i].Help); + g_printAndLog = PRINTANDLOG_PRINT | PRINTANDLOG_LOG; + } ++i; } } diff --git a/client/proxmark3.c b/client/proxmark3.c index ceabbc6f3..fb02396bd 100644 --- a/client/proxmark3.c +++ b/client/proxmark3.c @@ -29,6 +29,8 @@ static void showBanner(void) { + g_printAndLog = PRINTANDLOG_PRINT; + PrintAndLogEx(NORMAL, "\n"); #if defined(__linux__) || (__APPLE__) || (_WIN32) PrintAndLogEx(NORMAL, _BLUE_("██████╗ ███╗ ███╗ ████╗ ") " ...iceman fork"); @@ -50,6 +52,8 @@ static void showBanner(void) { // printf("\nMonero: 43mNJLpgBVaTvyZmX9ajcohpvVkaRy1kbZPm8tqAb7itZgfuYecgkRF36rXrKFUkwEGeZedPsASRxgv4HPBHvJwyJdyvQuP"); PrintAndLogEx(NORMAL, "\n"); fflush(stdout); + + g_printAndLog = PRINTANDLOG_PRINT | PRINTANDLOG_LOG; } int check_comm(void) { @@ -466,6 +470,35 @@ finish2: return ret; } +// Check if windows AnsiColor Support is enabled in the registery +// [HKEY_CURRENT_USER\Console] +// "VirtualTerminalLevel"=dword:00000001 +static bool DetectWindowsAnsiSupport(void) { + bool ret = false; +#if defined(_WIN32) + HKEY hKey = NULL; + + if (RegOpenKeyA(HKEY_CURRENT_USER, "Console", &hKey) == ERROR_SUCCESS) { + DWORD dwType = REG_SZ; + BYTE KeyValue[sizeof(dwType)]; + DWORD len = sizeof(KeyValue); + + if (RegQueryValueEx(hKey, "VirtualTerminalLevel", NULL, &dwType, KeyValue, &len) != ERROR_FILE_NOT_FOUND) { + uint8_t i; + uint32_t Data = 0; + for (i = 0; i < 4; i++) + Data += KeyValue[i] << (8 * i); + + if (Data == 1) { // Reg key is set to 1, Ansi Color Enabled + ret = true; + } + } + RegCloseKey(hKey); + } +#endif + return ret; +} + int main(int argc, char *argv[]) { srand(time(0)); @@ -683,37 +716,7 @@ int main(int argc, char *argv[]) { return 1; } - session.supports_colors = false; -/* - // Removed color on windows until a better option can be implemented. - -#if defined(_WIN32) - // Check if windows AnsiColor Support is enabled in the registery - // [HKEY_CURRENT_USER\Console] - // "VirtualTerminalLevel"=dword:00000001 - - HKEY hKey = NULL; - - if (RegOpenKeyA(HKEY_CURRENT_USER, "Console", &hKey) == ERROR_SUCCESS) { - DWORD dwType = REG_SZ; - BYTE KeyValue[sizeof(dwType)]; - DWORD len = sizeof(KeyValue); - - if (RegQueryValueEx(hKey, "VirtualTerminalLevel", NULL, &dwType, KeyValue, &len) != ERROR_FILE_NOT_FOUND) { - uint8_t i; - uint32_t Data = 0; - for (i = 0; i < 4; i++) - Data += KeyValue[i] << (8 * i); - - if (Data == 1) { // Reg key is set to 1, Ansi Color Enabled - session.supports_colors = true; - } - } - RegCloseKey(hKey); - } - -#endif -*/ + session.supports_colors = DetectWindowsAnsiSupport(); session.stdinOnTTY = isatty(STDIN_FILENO); session.stdoutOnTTY = isatty(STDOUT_FILENO); From 224b03a1f875181c493652971dca7d3dd340b046 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 16 Oct 2019 15:09:20 +0200 Subject: [PATCH 12/52] chg printf.. --- client/guidummy.cpp | 3 ++- client/hardnested/hardnested_bruteforce.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/client/guidummy.cpp b/client/guidummy.cpp index 8557b0015..2ea6c2e46 100644 --- a/client/guidummy.cpp +++ b/client/guidummy.cpp @@ -9,12 +9,13 @@ //----------------------------------------------------------------------------- #include +#include "ui.h" extern "C" void ShowGraphWindow(void) { static int warned = 0; if (!warned) { - printf("No GUI in this build!\n"); + PrintAndLogEx(INFO, "No GUI in this build!"); warned = 1; } } diff --git a/client/hardnested/hardnested_bruteforce.c b/client/hardnested/hardnested_bruteforce.c index 3aea34a96..4af190d71 100644 --- a/client/hardnested/hardnested_bruteforce.c +++ b/client/hardnested/hardnested_bruteforce.c @@ -164,7 +164,7 @@ crack_states_thread(void *x) { statelist_t *bucket = buckets[current_bucket]; if (bucket) { #if defined (DEBUG_BRUTE_FORCE) - printf("Thread %u starts working on bucket %u\n", thread_id, current_bucket); + PrintAndLogEx(INFO, "Thread %u starts working on bucket %u\n", thread_id, current_bucket); #endif const uint64_t key = crack_states_bitsliced(thread_arg->cuid, thread_arg->best_first_bytes, bucket, &keys_found, &num_keys_tested, nonces_to_bruteforce, bf_test_nonce_2nd_byte, thread_arg->nonces); if (key != -1) { From 801ace94a21d434af5afe9f8038ffa1bca157a73 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 16 Oct 2019 15:37:39 +0200 Subject: [PATCH 13/52] dummy gui compilation on OSX.. --- client/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/Makefile b/client/Makefile index 58bdf7592..1fef2cd9b 100644 --- a/client/Makefile +++ b/client/Makefile @@ -109,9 +109,11 @@ ifneq ($(SKIPQT),1) endif ifneq ($(QTLDLIBS),) + QTGUISRCS = proxgui.cpp proxguiqt.cpp proxguiqt.moc.cpp QTGUIOBJS = $(OBJDIR)/proxgui.o $(OBJDIR)/proxguiqt.o $(OBJDIR)/proxguiqt.moc.o PM3CFLAGS += -DHAVE_GUI else + QTGUISRCS = guidummy.cpp QTGUIOBJS = $(OBJDIR)/guidummy.o endif @@ -257,7 +259,6 @@ ifeq ($(MULTIARCHSRCS), ) CMDSRCS += hardnested/hardnested_bf_core.c hardnested/hardnested_bitarray_core.c endif -QTGUISRCS = proxgui.cpp proxguiqt.cpp proxguiqt.moc.cpp guidummy.cpp COREOBJS = $(CORESRCS:%.c=$(OBJDIR)/%.o) CMDOBJS = $(CMDSRCS:%.c=$(OBJDIR)/%.o) From aa46570208112421f54fc70c3c121c088073c632 Mon Sep 17 00:00:00 2001 From: Iceman Date: Wed, 16 Oct 2019 15:41:03 +0200 Subject: [PATCH 14/52] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 350763c34..b306ad542 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # RRG / Iceman repo - Proxmark3 -This repo is based on iceman fork for Proxmark3. It supports other Proxmark3 platforms as well. +This repo is based on iceman fork for Proxmark3. -It is dedicated to bringing the most out of the new features for Proxmark3 RDV4.0 new hardware and design. +It supports RDV4.0 and other Proxmark3 platforms as well. | Releases | Linux & OSX CI | Windows CI | Coverity | From ce4711cc13b5a0520a159545ed9f79bf039c84d5 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 16 Oct 2019 15:45:52 +0200 Subject: [PATCH 15/52] revert printf --- client/guidummy.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/guidummy.cpp b/client/guidummy.cpp index 2ea6c2e46..8557b0015 100644 --- a/client/guidummy.cpp +++ b/client/guidummy.cpp @@ -9,13 +9,12 @@ //----------------------------------------------------------------------------- #include -#include "ui.h" extern "C" void ShowGraphWindow(void) { static int warned = 0; if (!warned) { - PrintAndLogEx(INFO, "No GUI in this build!"); + printf("No GUI in this build!\n"); warned = 1; } } From 51022d4329ef4afaa74fe28141d2a112ad2095cc Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 16 Oct 2019 14:24:23 -0400 Subject: [PATCH 16/52] textual --- armsrc/spiffs.c | 72 +++++++++++++++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 26 deletions(-) diff --git a/armsrc/spiffs.c b/armsrc/spiffs.c index 629dff422..f242062be 100644 --- a/armsrc/spiffs.c +++ b/armsrc/spiffs.c @@ -536,21 +536,28 @@ int rdv40_spiffs_read_as_filetype(char *filename, uint8_t *dst, uint32_t size, R //////////////////////////////////////////////////////////////////////////////// ///////// MISC HIGH LEVEL FUNCTIONS //////////////////////////////////////////// +#define SPIFFS_BANNER DbpString(_BLUE_("Flash Memory FileSystem tree (SPIFFS)")); void rdv40_spiffs_safe_print_fsinfo() { rdv40_spiffs_fsinfo fsinfo; rdv40_spiffs_getfsinfo(&fsinfo, RDV40_SPIFFS_SAFETY_SAFE); + DbpString(_BLUE_("Flash Memory FileSystem Info (SPIFFS)")); - Dbprintf("-------------------------------------"); - Dbprintf("* Filesystem Logical Block Size.........%d bytes", fsinfo.blockSize); - Dbprintf("* Filesystem Logical Page Size..........%d bytes", fsinfo.pageSize); - Dbprintf("--"); - Dbprintf("* Filesystem Max Open Files.............%d file descriptors", fsinfo.maxOpenFiles); - Dbprintf("* Filesystem Max Path Length............%d chars", fsinfo.maxPathLength); - Dbprintf("--"); - Dbprintf("Filesystem\tSize\tUsed\tAvailable\tUse%\tMounted on"); - Dbprintf("spiffs\t%dB\t%dB\t%dB\t\t%d%\t/", fsinfo.totalBytes, fsinfo.usedBytes, fsinfo.freeBytes, - fsinfo.usedPercent); + + + Dbprintf(" Logical Block Size........." _YELLOW_("%d")"bytes", fsinfo.blockSize); + Dbprintf(" Logical Page Size.........." _YELLOW_("%d")"bytes", fsinfo.pageSize); + Dbprintf(""); + Dbprintf(" Max Open Files............." _YELLOW_("%d")"file descriptors", fsinfo.maxOpenFiles); + Dbprintf(" Max Path Length............" _YELLOW_("%d")"chars", fsinfo.maxPathLength); + DbpString(""); + Dbprintf(" filesystem size used available use% mounted"); + Dbprintf(" spiffs %6d B %6d B %6d B"_YELLOW_("%2d%")" /" + , fsinfo.totalBytes + , fsinfo.usedBytes + , fsinfo.freeBytes + , fsinfo.usedPercent + ); } // this function is safe and WILL rollback since it is only a PRINTING function, @@ -562,14 +569,16 @@ void rdv40_spiffs_safe_print_fsinfo() { // dont want, as prefix are way easier and lighter in every aspect. void rdv40_spiffs_safe_print_tree(uint8_t banner) { - int changed = rdv40_spiffs_lazy_mount(); - spiffs_DIR d; - struct spiffs_dirent e; - struct spiffs_dirent *pe = &e; if (banner) { DbpString(_BLUE_("Flash Memory FileSystem tree (SPIFFS)")); Dbprintf("-------------------------------------"); } + + int changed = rdv40_spiffs_lazy_mount(); + spiffs_DIR d; + struct spiffs_dirent e; + struct spiffs_dirent *pe = &e; + SPIFFS_opendir(&fs, "/", &d); Dbprintf(" \t \t/"); while ((pe = SPIFFS_readdir(&d, pe))) { @@ -592,29 +601,40 @@ void rdv40_spiffs_safe_print_tree(uint8_t banner) { rdv40_spiffs_lazy_mount_rollback(changed); } + +// Selftest function void test_spiffs() { - Dbprintf("---------------------------"); + Dbprintf("----------------------------------------------"); Dbprintf("Testing SPIFFS operations"); - Dbprintf("---------------------------"); - Dbprintf("(all test are made using lazy safetylevel)"); - Dbprintf("* Mounting filesystem (lazy)......."); + Dbprintf("----------------------------------------------"); + Dbprintf("-- all test are made using lazy safetylevel"); + + Dbprintf(" Mounting filesystem (lazy)......."); int changed = rdv40_spiffs_lazy_mount(); - Dbprintf("* Printing tree.............."); + + Dbprintf(" Printing tree.............."); rdv40_spiffs_safe_print_tree(false); - Dbprintf("* Writing 'I love Proxmark' in a testspiffs.txt"); + + Dbprintf(" Writing 'I love Proxmark3 RDV4' in a testspiffs.txt"); + // Since We lazy_mounted manually before hand, the wrte safety level will // just imply noops - rdv40_spiffs_write((char *)"testspiffs.txt", (uint8_t *)"I love Proxmark", 15, RDV40_SPIFFS_SAFETY_SAFE); - Dbprintf("* Printing tree again......."); + rdv40_spiffs_write((char *)"testspiffs.txt", (uint8_t *)"I love Proxmark3 RDV4", 21, RDV40_SPIFFS_SAFETY_SAFE); + + Dbprintf(" Printing tree again......."); rdv40_spiffs_safe_print_tree(false); - Dbprintf("* Making a symlink to testspiffs.txt"); + + Dbprintf(" Making a symlink to testspiffs.txt"); rdv40_spiffs_make_symlink((char *)"testspiffs.txt", (char *)"linktotestspiffs.txt", RDV40_SPIFFS_SAFETY_SAFE); - Dbprintf("* Printing tree again......."); + + Dbprintf(" Printing tree again......."); rdv40_spiffs_safe_print_tree(false); + // TODO READBACK, rename,print tree read back, remove, print tree; - Dbprintf("* Rollbacking The mount status IF things have changed"); + Dbprintf(" Rollbacking The mount status IF things have changed"); rdv40_spiffs_lazy_mount_rollback(changed); - Dbprintf("All done"); + + Dbprintf(_GREEN_("All done")); return; } From 5c0dfdbf6b8cd6ec24d8ede72851d1b6cf58b416 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Oct 2019 09:27:55 +0200 Subject: [PATCH 17/52] chg: send ref instead --- client/cmdhfmf.c | 2 +- client/mifare/mfkey.c | 44 +++++++++++++++++++++---------------------- client/mifare/mfkey.h | 6 +++--- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/client/cmdhfmf.c b/client/cmdhfmf.c index 3ae332397..16e4029db 100644 --- a/client/cmdhfmf.c +++ b/client/cmdhfmf.c @@ -2920,7 +2920,7 @@ void readerAttack(nonces_t data, bool setEmulatorMem, bool verbose) { if (k_sector == NULL) emptySectorTable(); - success = mfkey32_moebius(data, &key); + success = mfkey32_moebius(&data, &key); if (success) { uint8_t sector = data.sector; uint8_t keytype = data.keytype; diff --git a/client/mifare/mfkey.c b/client/mifare/mfkey.c index bdccd302e..ee0c9f052 100644 --- a/client/mifare/mfkey.c +++ b/client/mifare/mfkey.c @@ -89,25 +89,25 @@ uint32_t nonce2key(uint32_t uid, uint32_t nt, uint32_t nr, uint32_t ar, uint64_t } // recover key from 2 different reader responses on same tag challenge -bool mfkey32(nonces_t data, uint64_t *outputkey) { +bool mfkey32(nonces_t *data, uint64_t *outputkey) { struct Crypto1State *s, *t; uint64_t outkey = 0; uint64_t key = 0; // recovered key bool isSuccess = false; uint8_t counter = 0; - uint32_t p640 = prng_successor(data.nonce, 64); + uint32_t p640 = prng_successor(data->nonce, 64); - s = lfsr_recovery32(data.ar ^ p640, 0); + s = lfsr_recovery32(data->ar ^ p640, 0); for (t = s; t->odd | t->even; ++t) { lfsr_rollback_word(t, 0, 0); - lfsr_rollback_word(t, data.nr, 1); - lfsr_rollback_word(t, data.cuid ^ data.nonce, 0); + lfsr_rollback_word(t, data->nr, 1); + lfsr_rollback_word(t, data->cuid ^ data->nonce, 0); crypto1_get_lfsr(t, &key); - crypto1_word(t, data.cuid ^ data.nonce, 0); - crypto1_word(t, data.nr2, 1); - if (data.ar2 == (crypto1_word(t, 0, 0) ^ p640)) { + crypto1_word(t, data->cuid ^ data->nonce, 0); + crypto1_word(t, data->nr2, 1); + if (data->ar2 == (crypto1_word(t, 0, 0) ^ p640)) { outkey = key; counter++; if (counter == 20) break; @@ -121,26 +121,26 @@ bool mfkey32(nonces_t data, uint64_t *outputkey) { // recover key from 2 reader responses on 2 different tag challenges // skip "several found keys". Only return true if ONE key is found -bool mfkey32_moebius(nonces_t data, uint64_t *outputkey) { +bool mfkey32_moebius(nonces_t *data, uint64_t *outputkey) { struct Crypto1State *s, *t; uint64_t outkey = 0; uint64_t key = 0; // recovered key bool isSuccess = false; int counter = 0; - uint32_t p640 = prng_successor(data.nonce, 64); - uint32_t p641 = prng_successor(data.nonce2, 64); + uint32_t p640 = prng_successor(data->nonce, 64); + uint32_t p641 = prng_successor(data->nonce2, 64); - s = lfsr_recovery32(data.ar ^ p640, 0); + s = lfsr_recovery32(data->ar ^ p640, 0); for (t = s; t->odd | t->even; ++t) { lfsr_rollback_word(t, 0, 0); - lfsr_rollback_word(t, data.nr, 1); - lfsr_rollback_word(t, data.cuid ^ data.nonce, 0); + lfsr_rollback_word(t, data->nr, 1); + lfsr_rollback_word(t, data->cuid ^ data->nonce, 0); crypto1_get_lfsr(t, &key); - crypto1_word(t, data.cuid ^ data.nonce2, 0); - crypto1_word(t, data.nr2, 1); - if (data.ar2 == (crypto1_word(t, 0, 0) ^ p641)) { + crypto1_word(t, data->cuid ^ data->nonce2, 0); + crypto1_word(t, data->nr2, 1); + if (data->ar2 == (crypto1_word(t, 0, 0) ^ p641)) { outkey = key; ++counter; if (counter == 20) break; @@ -153,20 +153,20 @@ bool mfkey32_moebius(nonces_t data, uint64_t *outputkey) { } // recover key from reader response and tag response of one authentication sequence -int mfkey64(nonces_t data, uint64_t *outputkey) { +int mfkey64(nonces_t *data, uint64_t *outputkey) { uint64_t key = 0; // recovered key uint32_t ks2; // keystream used to encrypt reader response uint32_t ks3; // keystream used to encrypt tag response struct Crypto1State *revstate; // Extract the keystream from the messages - ks2 = data.ar ^ prng_successor(data.nonce, 64); - ks3 = data.at ^ prng_successor(data.nonce, 96); + ks2 = data->ar ^ prng_successor(data->nonce, 64); + ks3 = data->at ^ prng_successor(data->nonce, 96); revstate = lfsr_recovery64(ks2, ks3); lfsr_rollback_word(revstate, 0, 0); lfsr_rollback_word(revstate, 0, 0); - lfsr_rollback_word(revstate, data.nr, 1); - lfsr_rollback_word(revstate, data.cuid ^ data.nonce, 0); + lfsr_rollback_word(revstate, data->nr, 1); + lfsr_rollback_word(revstate, data->cuid ^ data->nonce, 0); crypto1_get_lfsr(revstate, &key); crypto1_destroy(revstate); *outputkey = key; diff --git a/client/mifare/mfkey.h b/client/mifare/mfkey.h index 36ca8ed11..e108d5fa7 100644 --- a/client/mifare/mfkey.h +++ b/client/mifare/mfkey.h @@ -17,9 +17,9 @@ #include "mifare.h" uint32_t nonce2key(uint32_t uid, uint32_t nt, uint32_t nr, uint32_t ar, uint64_t par_info, uint64_t ks_info, uint64_t **keys); -bool mfkey32(nonces_t data, uint64_t *outputkey); -bool mfkey32_moebius(nonces_t data, uint64_t *outputkey); -int mfkey64(nonces_t data, uint64_t *outputkey); +bool mfkey32(nonces_t *data, uint64_t *outputkey); +bool mfkey32_moebius(nonces_t *data, uint64_t *outputkey); +int mfkey64(nonces_t *data, uint64_t *outputkey); int compare_uint64(const void *a, const void *b); uint32_t intersection(uint64_t *listA, uint64_t *listB); From 2ae2e1fff5c5d94fca579ae7ccdde817fb5fb927 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Oct 2019 09:31:37 +0200 Subject: [PATCH 18/52] textual --- client/cmdlf.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/client/cmdlf.c b/client/cmdlf.c index 57c28c1b0..4d7c72acc 100644 --- a/client/cmdlf.c +++ b/client/cmdlf.c @@ -63,12 +63,12 @@ static int usage_lf_cmdread(void) { PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h This help"); PrintAndLogEx(NORMAL, " d delay OFF period, (0 for bitbang mode) (decimal)"); - PrintAndLogEx(NORMAL, " z time period ZERO, (decimal)"); - PrintAndLogEx(NORMAL, " o time period ONE, (decimal)"); - PrintAndLogEx(NORMAL, " c Command bytes (in ones and zeros)"); + PrintAndLogEx(NORMAL, " z ZERO time period (decimal)"); + PrintAndLogEx(NORMAL, " o ONE time period (decimal)"); + PrintAndLogEx(NORMAL, " c Command bytes (in ones and zeros)"); PrintAndLogEx(NORMAL, ""); - PrintAndLogEx(NORMAL, " ************* All periods in microseconds (ms)"); - PrintAndLogEx(NORMAL, " ************* Use lf config to configure options."); + PrintAndLogEx(NORMAL, " ************* " _YELLOW_("All periods in microseconds (us)")); + PrintAndLogEx(NORMAL, " ************* Use " _YELLOW_("'lf config'") "to configure options."); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, " lf cmdread d 80 z 100 o 200 c 11000"); return PM3_SUCCESS; @@ -77,7 +77,7 @@ static int usage_lf_read(void) { PrintAndLogEx(NORMAL, "Usage: lf read [h] [s] [d numofsamples]"); PrintAndLogEx(NORMAL, "Options:"); PrintAndLogEx(NORMAL, " h This help"); - PrintAndLogEx(NORMAL, " s silent run no printout"); + PrintAndLogEx(NORMAL, " s silent run, no printout"); PrintAndLogEx(NORMAL, " d #samples # samples to collect (optional)"); PrintAndLogEx(NORMAL, "Use 'lf config' to set parameters."); PrintAndLogEx(NORMAL, ""); From 945fb82b48054d4096f82fda892abd21422a0025 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Thu, 17 Oct 2019 13:58:22 +0200 Subject: [PATCH 19/52] make style --- armsrc/appmain.c | 4 ++-- armsrc/spiffs.c | 6 +++--- client/cmdlft55xx.c | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index e70b03cf8..b073598b2 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -365,14 +365,14 @@ void SendStatus(void) { Dbprintf(" Slow clock..............%d Hz", (16 * MAINCK) / mainf); uint32_t delta_time = 0; uint32_t start_time = GetTickCount(); - #define SLCK_CHECK_MS 50 +#define SLCK_CHECK_MS 50 SpinDelay(SLCK_CHECK_MS); delta_time = GetTickCountDelta(start_time); if ((delta_time < SLCK_CHECK_MS - 1) || (delta_time > SLCK_CHECK_MS + 1)) { // error > 2% with SLCK_CHECK_MS=50 Dbprintf(_RED_(" Slow Clock speed change detected, TIA needed")); Dbprintf(_YELLOW_(" Slow Clock actual speed seems closer to %d kHz"), - (16 * MAINCK / 1000) / mainf * delta_time / SLCK_CHECK_MS); + (16 * MAINCK / 1000) / mainf * delta_time / SLCK_CHECK_MS); } DbpString(_BLUE_("Installed StandAlone Mode")); ModInfo(); diff --git a/armsrc/spiffs.c b/armsrc/spiffs.c index f242062be..87321148d 100644 --- a/armsrc/spiffs.c +++ b/armsrc/spiffs.c @@ -543,7 +543,7 @@ void rdv40_spiffs_safe_print_fsinfo() { rdv40_spiffs_getfsinfo(&fsinfo, RDV40_SPIFFS_SAFETY_SAFE); DbpString(_BLUE_("Flash Memory FileSystem Info (SPIFFS)")); - + Dbprintf(" Logical Block Size........." _YELLOW_("%d")"bytes", fsinfo.blockSize); Dbprintf(" Logical Page Size.........." _YELLOW_("%d")"bytes", fsinfo.pageSize); @@ -573,7 +573,7 @@ void rdv40_spiffs_safe_print_tree(uint8_t banner) { DbpString(_BLUE_("Flash Memory FileSystem tree (SPIFFS)")); Dbprintf("-------------------------------------"); } - + int changed = rdv40_spiffs_lazy_mount(); spiffs_DIR d; struct spiffs_dirent e; @@ -614,7 +614,7 @@ void test_spiffs() { Dbprintf(" Printing tree.............."); rdv40_spiffs_safe_print_tree(false); - + Dbprintf(" Writing 'I love Proxmark3 RDV4' in a testspiffs.txt"); // Since We lazy_mounted manually before hand, the wrte safety level will diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index e1f84b32b..541a67fe4 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -371,7 +371,7 @@ static int usage_t55xx_dangerraw() { return PM3_SUCCESS; } -static int usage_t55xx_clonehelp(){ +static int usage_t55xx_clonehelp() { PrintAndLogEx(NORMAL, "For cloning specific techs on T55xx tags, see commands available in corresponding LF sub-menus, e.g.:"); PrintAndLogEx(NORMAL, _GREEN_("lf awid clone")); // todo: rename to clone From 3cd053218f7174761eed9da1fd32a71ebdef5978 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Oct 2019 20:08:17 +0200 Subject: [PATCH 20/52] chg: wait until ready --- armsrc/appmain.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index b073598b2..3b6976819 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1899,9 +1899,13 @@ static void PacketReceived(PacketCommandNG *packet) { break; } case CMD_TIA: { + + while ((AT91C_BASE_PMC->PMC_MCFR & AT91C_CKGR_MAINRDY) == 0); // Wait for MAINF value to become available... uint16_t mainf = AT91C_BASE_PMC->PMC_MCFR & AT91C_CKGR_MAINF; Dbprintf(" Slow clock old measured value:.........%d Hz", (16 * MAINCK) / mainf); TimingIntervalAcquisition(); + + while ((AT91C_BASE_PMC->PMC_MCFR & AT91C_CKGR_MAINRDY) == 0); // Wait for MAINF value to become available... mainf = AT91C_BASE_PMC->PMC_MCFR & AT91C_CKGR_MAINF; Dbprintf(""); // first message gets lost Dbprintf(" Slow clock new measured value:.........%d Hz", (16 * MAINCK) / mainf); From 9fdc29e91c02f8c0c1f86ea8ca11bb9955907583 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Oct 2019 21:58:57 +0200 Subject: [PATCH 21/52] chg: 'hf search' - add FeliCa detection --- client/cmdhf.c | 31 +++++++++++++--------- client/cmdhffelica.c | 61 ++++++++++++++++++++++---------------------- 2 files changed, 49 insertions(+), 43 deletions(-) diff --git a/client/cmdhf.c b/client/cmdhf.c index 85612f428..bf8a9dceb 100644 --- a/client/cmdhf.c +++ b/client/cmdhf.c @@ -70,6 +70,8 @@ static int usage_hf_tune() { return PM3_SUCCESS; } +#define PROMPT_CLEARLINE PrintAndLogEx(INPLACE, " ") + int CmdHFSearch(const char *Cmd) { char cmdp = tolower(param_getchar(Cmd, 0)); @@ -77,6 +79,7 @@ int CmdHFSearch(const char *Cmd) { PrintAndLogEx(INFO, "Checking for known tags...\n"); + PROMPT_CLEARLINE; PrintAndLogEx(INPLACE, "Searching for ThinFilm tag..."); if (IfPm3NfcBarcode()) { if (infoThinFilm(false) == PM3_SUCCESS) { @@ -85,6 +88,7 @@ int CmdHFSearch(const char *Cmd) { } } + PROMPT_CLEARLINE; PrintAndLogEx(INPLACE, "Searching for ISO14443-A tag..."); if (IfPm3Iso14443a()) { if (infoHF14A(false, false) > 0) { @@ -92,7 +96,8 @@ int CmdHFSearch(const char *Cmd) { return PM3_SUCCESS; } } - + + PROMPT_CLEARLINE; PrintAndLogEx(INPLACE, "Searching for ISO15693 tag..."); if (IfPm3Iso15693()) { if (readHF15Uid(false) == 1) { @@ -104,6 +109,7 @@ int CmdHFSearch(const char *Cmd) { DropField(); } + PROMPT_CLEARLINE; PrintAndLogEx(INPLACE, "Searching for LEGIC tag..."); if (IfPm3Legicrf()) { if (readLegicUid(false) == PM3_SUCCESS) { @@ -112,6 +118,7 @@ int CmdHFSearch(const char *Cmd) { } } + PROMPT_CLEARLINE; PrintAndLogEx(INPLACE, "Searching for Topaz tag..."); if (IfPm3Iso14443a()) { if (readTopazUid() == PM3_SUCCESS) { @@ -120,7 +127,17 @@ int CmdHFSearch(const char *Cmd) { } } + PROMPT_CLEARLINE; + PrintAndLogEx(INPLACE, "Searching for FeliCa tag..."); + if (IfPm3Felica()) { + if (readFelicaUid(false) == PM3_SUCCESS) { + PrintAndLogEx(NORMAL, "\nValid " _GREEN_("ISO18092 / FeliCa tag") " found\n"); + return PM3_SUCCESS; + } + } + // 14b and iclass is the longest test (put last) + PROMPT_CLEARLINE; PrintAndLogEx(INPLACE, "Searching for ISO14443-B tag..."); if (IfPm3Iso14443a()) { if (readHF14B(false) == 1) { @@ -129,6 +146,7 @@ int CmdHFSearch(const char *Cmd) { } } + PROMPT_CLEARLINE; PrintAndLogEx(INPLACE, "Searching for iClass / PicoPass tag..."); if (IfPm3Iclass()) { if (readIclass(false, false) == 1) { @@ -137,17 +155,6 @@ int CmdHFSearch(const char *Cmd) { } } - -// PrintAndLogEx(INPLACE, "Searching for FeliCa tag..."); - //if (IfPm3Felica()) { - // ans = CmdHFFelicaReader("s"); - // if (ans) { - // PrintAndLogEx(NORMAL, "\nValid " _GREEN_("ISO18092 / FeliCa tag") " found\n"); - // return ans; - // } - //} - - PrintAndLogEx(INPLACE, "No known/supported 13.56 MHz tags found"); PrintAndLogEx(NORMAL, ""); return PM3_ESOFT; diff --git a/client/cmdhffelica.c b/client/cmdhffelica.c index 22acf6344..d2583b5ff 100644 --- a/client/cmdhffelica.c +++ b/client/cmdhffelica.c @@ -36,7 +36,7 @@ static int usage_hf_felica_sim(void) { PrintAndLogEx(NORMAL, " v : (Optional) Verbose"); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, " hf felica sim t 1 "); - return 0; + return PM3_SUCCESS; } */ @@ -48,7 +48,7 @@ static int usage_hf_felica_sniff(void) { PrintAndLogEx(NORMAL, " t triggers to skip (decimal)"); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, " hf felica sniff s 1000"); - return 0; + return PM3_SUCCESS; } static int usage_hf_felica_simlite(void) { PrintAndLogEx(NORMAL, "\n Emulating ISO/18092 FeliCa Lite tag \n"); @@ -58,7 +58,7 @@ static int usage_hf_felica_simlite(void) { PrintAndLogEx(NORMAL, " uid : UID in hexsymbol"); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, " hf felica litesim 11223344556677"); - return 0; + return PM3_SUCCESS; } static int usage_hf_felica_dumplite(void) { PrintAndLogEx(NORMAL, "\n Dump ISO/18092 FeliCa Lite tag \n"); @@ -68,7 +68,7 @@ static int usage_hf_felica_dumplite(void) { PrintAndLogEx(NORMAL, " h : This help"); PrintAndLogEx(NORMAL, "Examples:"); PrintAndLogEx(NORMAL, " hf felica litedump"); - return 0; + return PM3_SUCCESS; } static int usage_hf_felica_raw(void) { PrintAndLogEx(NORMAL, "Usage: hf felica raw [-h] [-r] [-c] [-p] [-a] <0A 0B 0C ... hex>"); @@ -78,32 +78,30 @@ static int usage_hf_felica_raw(void) { PrintAndLogEx(NORMAL, " -p leave the signal field ON after receive"); PrintAndLogEx(NORMAL, " -a active signal field ON without select"); PrintAndLogEx(NORMAL, " -s active signal field ON with select"); - return 0; + return PM3_SUCCESS; } static int usage_hf_felica_dump(void) { PrintAndLogEx(NORMAL, "Usage: hf felica dump [-h] "); PrintAndLogEx(NORMAL, " -h this help"); - return 0; + return PM3_SUCCESS; } static int CmdHFFelicaList(const char *Cmd) { (void)Cmd; // Cmd is not used so far //PrintAndLogEx(NORMAL, "Deprecated command, use 'hf list felica' instead"); CmdTraceList("felica"); - return 0; + return PM3_SUCCESS; } static int CmdHFFelicaReader(const char *Cmd) { bool verbose = !(Cmd[0] == 's' || Cmd[0] == 'S'); - readFelicaUid(verbose); - return 0; + return readFelicaUid(verbose); } static int CmdHFFelicaDump(const char *Cmd) { if (strlen(Cmd) < 1) return usage_hf_felica_dump(); - dump(*Cmd); - return 0; + return dump(*Cmd); } // simulate iso18092 / FeliCa tag @@ -169,7 +167,7 @@ static int CmdHFFelicaSim(const char *Cmd) { while (!kbd_enter_pressed()) { if (!WaitForResponseTimeout(CMD_ACK, &resp, 1500)) continue; } - return 0; + return PM3_SUCCESS; } */ @@ -206,7 +204,7 @@ static int CmdHFFelicaSniff(const char *Cmd) { clearCommandBuffer(); SendCommandMIX(CMD_HF_FELICA_SNIFF, samples2skip, triggers2skip, 0, NULL, 0); - return 0; + return PM3_SUCCESS; } // uid hex @@ -219,7 +217,7 @@ static int CmdHFFelicaSimLite(const char *Cmd) { clearCommandBuffer(); SendCommandMIX(CMD_HF_FELICALITE_SIMULATE, uid, 0, 0, NULL, 0); - return 0; + return PM3_SUCCESS; } static void printSep() { @@ -392,35 +390,35 @@ static int CmdHFFelicaDumpLite(const char *Cmd) { if (kbd_enter_pressed()) { PrintAndLogEx(WARNING, "\n[!] aborted via keyboard!\n"); DropField(); - return 1; + return PM3_EOPABORTED; } if (timeout > 100) { PrintAndLogEx(WARNING, "timeout while waiting for reply."); DropField(); - return 1; + return PM3_ETIMEOUT; } } if (resp.oldarg[0] == 0) { PrintAndLogEx(WARNING, "\nButton pressed. Aborted."); - return 1; + return PM3_EOPABORTED; } uint32_t tracelen = resp.oldarg[1]; if (tracelen == 0) { PrintAndLogEx(WARNING, "\nNo trace data! Maybe not a FeliCa Lite card?"); - return 1; + return PM3_ESOFT; } uint8_t *trace = calloc(tracelen, sizeof(uint8_t)); if (trace == NULL) { PrintAndLogEx(WARNING, "Cannot allocate memory for trace"); - return 1; + return PM3_EMALLOC; } if (!GetFromDevice(BIG_BUF, trace, tracelen, 0, NULL, 0, NULL, 2500, false)) { PrintAndLogEx(WARNING, "command execution time out"); free(trace); - return 0; + return PM3_ETIMEOUT; } PrintAndLogEx(SUCCESS, "Recorded Activity (trace len = %"PRIu64" bytes)", tracelen); @@ -435,7 +433,7 @@ static int CmdHFFelicaDumpLite(const char *Cmd) { printSep(); free(trace); - return 0; + return PM3_SUCCESS; } static void waitCmdFelica(uint8_t iSelect) { @@ -524,7 +522,7 @@ static int CmdHFFelicaCmdRaw(const char *Cmd) { continue; } PrintAndLogEx(WARNING, "Invalid char on input"); - return 0; + return PM3_EINVARG; } if (crc && datalen > 0 && datalen < sizeof(data) - 2) { @@ -565,7 +563,7 @@ static int CmdHFFelicaCmdRaw(const char *Cmd) { waitCmdFelica(0); } } - return 0; + return PM3_SUCCESS; } int readFelicaUid(bool verbose) { @@ -576,7 +574,7 @@ int readFelicaUid(bool verbose) { if (!WaitForResponseTimeout(CMD_ACK, &resp, 2500)) { if (verbose) PrintAndLogEx(WARNING, "FeliCa card select failed"); //SendCommandMIX(CMD_HF_FELICA_COMMAND, 0, 0, 0, NULL, 0); - return 0; + return PM3_ESOFT; } felica_card_select_t card; @@ -587,19 +585,20 @@ int readFelicaUid(bool verbose) { case 1: { if (verbose) PrintAndLogEx(WARNING, "card timeout"); - break; + return PM3_ETIMEOUT; } case 2: { if (verbose) PrintAndLogEx(WARNING, "card answered wrong"); - break; + return PM3_ESOFT; } case 3: { if (verbose) PrintAndLogEx(WARNING, "CRC check failed"); - break; + return PM3_ESOFT; } case 0: { + PrintAndLogEx(NORMAL, ""); PrintAndLogEx(SUCCESS, "FeliCa tag info"); PrintAndLogEx(NORMAL, "IDm %s", sprint_hex(card.IDm, sizeof(card.IDm))); @@ -614,18 +613,18 @@ int readFelicaUid(bool verbose) { break; } } - return status; + return PM3_SUCCESS; } - int dump(const char *Cmd) { clearCommandBuffer(); char ctmp = tolower(param_getchar(Cmd, 0)); if (ctmp == 'h') return usage_hf_felica_dumplite(); + // TODO FINISH THIS METHOD PrintAndLogEx(SUCCESS, "NOT IMPLEMENTED YET!"); - return 0; + return PM3_SUCCESS; } static command_t CommandTable[] = { @@ -644,7 +643,7 @@ static command_t CommandTable[] = { static int CmdHelp(const char *Cmd) { (void)Cmd; // Cmd is not used so far CmdsHelp(CommandTable); - return 0; + return PM3_SUCCESS; } int CmdHFFelica(const char *Cmd) { From 2c4e6606050de08b647a8aaab35891d158e5ecc5 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Oct 2019 22:24:32 +0200 Subject: [PATCH 22/52] fix --- client/cmdhffelica.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/cmdhffelica.c b/client/cmdhffelica.c index d2583b5ff..6d7362c3c 100644 --- a/client/cmdhffelica.c +++ b/client/cmdhffelica.c @@ -95,7 +95,7 @@ static int CmdHFFelicaList(const char *Cmd) { } static int CmdHFFelicaReader(const char *Cmd) { - bool verbose = !(Cmd[0] == 's' || Cmd[0] == 'S'); + bool verbose = !(tolower(Cmd[0]) == 's'); return readFelicaUid(verbose); } From ed565d04f5cce3bdc323085027a8cb4170fc9996 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Oct 2019 22:28:49 +0200 Subject: [PATCH 23/52] chg: remark available in lua --- client/cmdmain.c | 2 +- client/cmdmain.h | 1 + client/scripting.c | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/client/cmdmain.c b/client/cmdmain.c index 7a04960f0..5a2c91904 100644 --- a/client/cmdmain.c +++ b/client/cmdmain.c @@ -38,7 +38,7 @@ static int CmdHelp(const char *Cmd); -static int CmdRem(const char *Cmd) { +int CmdRem(const char *Cmd) { char buf[22] = {0}; struct tm *ct, tm_buf; time_t now = time(NULL); diff --git a/client/cmdmain.h b/client/cmdmain.h index 8b440143e..68984efab 100644 --- a/client/cmdmain.h +++ b/client/cmdmain.h @@ -15,6 +15,7 @@ #include "cmdparser.h" // command_t int CommandReceived(char *Cmd); +int CmdRem(const char *Cmd); command_t *getTopLevelCommandTable(void); #endif diff --git a/client/scripting.c b/client/scripting.c index e5c3990fb..43bcbd9c7 100644 --- a/client/scripting.c +++ b/client/scripting.c @@ -32,6 +32,7 @@ #include "crc16.h" #include "protocols.h" #include "fileutils.h" // searchfile +#include "cmdlf.h" // lf_config static int returnToLuaWithError(lua_State *L, const char *fmt, ...) { char buffer[200]; @@ -1056,6 +1057,22 @@ static int l_ndefparse(lua_State *L) { return 1; } +static int l_remark(lua_State *L) { + //Check number of arguments + int n = lua_gettop(L); + if (n != 1) { + return returnToLuaWithError(L, "Only one string allowed"); + } + + size_t size; + // data + const char *s = luaL_checklstring(L, 1, &size); + + int res = CmdRem(s); + lua_pushinteger(L, res); + return 1; +} + static int l_searchfile(lua_State *L) { //Check number of arguments int n = lua_gettop(L); @@ -1141,6 +1158,7 @@ int set_pm3_libraries(lua_State *L) { {"ndefparse", l_ndefparse}, {"fast_push_mode", l_fast_push_mode}, {"search_file", l_searchfile}, + {"rem", l_remark}, {NULL, NULL} }; From a823c7821fa3055f737e9141f7e2448bf6b7ee30 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Oct 2019 22:30:18 +0200 Subject: [PATCH 24/52] chg: 'sc upgrade' - ignore case on all platforms --- client/cmdsmartcard.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/client/cmdsmartcard.c b/client/cmdsmartcard.c index c69e4f037..21066ffb7 100644 --- a/client/cmdsmartcard.c +++ b/client/cmdsmartcard.c @@ -548,7 +548,6 @@ static int CmdSmartUpgrade(const char *Cmd) { //Validations if (errors || cmdp == 0) return usage_sm_upgrade(); - char sha512filename[FILE_PATH_SIZE] = {'\0'}; char *bin_extension = filename; char *dot_position = NULL; @@ -556,11 +555,7 @@ static int CmdSmartUpgrade(const char *Cmd) { bin_extension = dot_position + 1; } - if (!strcmp(bin_extension, "BIN") -#ifdef _WIN32 - || !strcmp(bin_extension, "bin") -#endif - ) { + if (!strcmp(bin_extension, "BIN") || !strcmp(bin_extension, "bin")) { memcpy(sha512filename, filename, strlen(filename) - strlen("bin")); strcat(sha512filename, "sha512.txt"); } else { From 065a1b68486362891b54a8a1728e97e85b19c7d2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Oct 2019 22:32:09 +0200 Subject: [PATCH 25/52] chg: enforce PACKED on more structs --- include/mifare.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/mifare.h b/include/mifare.h index 9d444e833..23dbceb68 100644 --- a/include/mifare.h +++ b/include/mifare.h @@ -34,7 +34,7 @@ typedef struct { uint8_t signature[32]; uint8_t counter_tearing[3][4]; // 3 bytes counter, 1 byte tearing flag uint8_t data[1024]; -} mfu_dump_t; +} PACKED mfu_dump_t; //----------------------------------------------------------------------------- // ISO 14443A @@ -69,7 +69,7 @@ typedef struct { uint16_t modulation_n; uint32_t ProxToAirDuration; uint8_t par; // enough for precalculated parity of 8 Byte responses -} tag_response_info_t; +} PACKED tag_response_info_t; //----------------------------------------------------------------------------- // ISO 14443B //----------------------------------------------------------------------------- @@ -79,7 +79,7 @@ typedef struct { uint8_t atqb[7]; uint8_t chipid; uint8_t cid; -} __attribute__((__packed__)) iso14b_card_select_t; +} PACKED iso14b_card_select_t; typedef enum ISO14B_COMMAND { ISO14B_CONNECT = (1 << 0), @@ -121,7 +121,7 @@ typedef struct { FIRST, SECOND, } state; -} nonces_t; +} PACKED nonces_t; //----------------------------------------------------------------------------- // ISO 7618 Smart Card From 61c3c9b5d04d80d46fbf2a71353ebfb1c0d42ac4 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Oct 2019 22:51:27 +0200 Subject: [PATCH 26/52] Add: genuine VeriChip trace --- traces/README.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/traces/README.txt b/traces/README.txt index 4cc42ba74..63ebe18ee 100644 --- a/traces/README.txt +++ b/traces/README.txt @@ -27,4 +27,5 @@ HID-weak-fob-11647.pm3: HID 32bit Prox Card#: 11647. very weak tag/read but jus visa2000.pm3: VISA2000 ASK/MAN RF/64, Card: 480518 securakey-64169.pm3 Securakey Tag BitLen: 26, Card ID: 64169, FC: 0x35 -motorola_0437_00072.pm3 - Motorola Grey clamshell card, old. (RAW: A0000000E308C0C1) +motorola_0437_00072.pm3: Motorola Grey clamshell card, old. (RAW: A0000000E308C0C1) +verichip_1022000000084146.pm3: VeriChip, epoxy encased glasschip (ID: 1022-00000000084146) From 861f9bd8b2bbfbd99dd09c1dc7758bb9d4e65c57 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Oct 2019 22:51:59 +0200 Subject: [PATCH 27/52] and the file --- traces/verichip_1022000000084146.pm3 | 39999 +++++++++++++++++++++++++ 1 file changed, 39999 insertions(+) create mode 100644 traces/verichip_1022000000084146.pm3 diff --git a/traces/verichip_1022000000084146.pm3 b/traces/verichip_1022000000084146.pm3 new file mode 100644 index 000000000..9109d7599 --- /dev/null +++ b/traces/verichip_1022000000084146.pm3 @@ -0,0 +1,39999 @@ +18 +17 +17 +10 +-9 +-24 +-35 +-43 +-48 +-52 +-54 +-55 +-55 +-54 +-52 +-50 +-49 +-47 +-44 +-41 +-38 +-36 +-34 +-33 +-31 +-30 +-28 +-27 +-25 +-24 +-22 +-21 +-19 +-18 +-16 +-6 +15 +29 +40 +47 +51 +54 +56 +56 +56 +54 +53 +52 +50 +48 +46 +37 +17 +1 +-10 +-19 +-24 +-28 +-32 +-35 +-36 +-37 +-37 +-36 +-35 +-34 +-32 +-22 +-1 +13 +25 +32 +39 +42 +45 +46 +46 +45 +44 +44 +42 +40 +37 +29 +9 +-6 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-42 +-41 +-41 +-39 +-39 +-37 +-27 +-6 +9 +20 +28 +34 +38 +41 +43 +43 +43 +43 +42 +41 +39 +38 +29 +10 +-6 +-17 +-26 +-32 +-37 +-39 +-41 +-41 +-42 +-41 +-41 +-39 +-37 +-35 +-24 +-3 +12 +23 +30 +35 +39 +41 +42 +43 +43 +42 +41 +40 +38 +37 +29 +9 +-6 +-18 +-26 +-32 +-37 +-40 +-42 +-43 +-43 +-43 +-42 +-40 +-39 +-37 +-26 +-4 +11 +22 +30 +36 +39 +41 +42 +42 +42 +41 +39 +38 +37 +35 +27 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-42 +-43 +-44 +-43 +-42 +-40 +-39 +-37 +-27 +-4 +10 +21 +29 +35 +38 +41 +42 +43 +43 +43 +42 +40 +39 +38 +29 +9 +-6 +-17 +-26 +-32 +-36 +-38 +-39 +-40 +-40 +-39 +-38 +-37 +-35 +-34 +-24 +-2 +12 +23 +30 +35 +38 +41 +41 +42 +41 +41 +41 +40 +38 +37 +29 +9 +-6 +-17 +-27 +-34 +-39 +-42 +-44 +-44 +-44 +-43 +-42 +-41 +-39 +-37 +-26 +-4 +11 +21 +30 +36 +39 +42 +43 +43 +43 +41 +40 +39 +38 +37 +29 +9 +-6 +-17 +-26 +-31 +-35 +-38 +-40 +-41 +-41 +-41 +-40 +-39 +-38 +-36 +-26 +-4 +11 +23 +31 +36 +39 +41 +42 +43 +43 +43 +41 +39 +37 +36 +34 +32 +30 +29 +27 +26 +25 +23 +22 +22 +21 +20 +18 +17 +17 +15 +8 +-11 +-26 +-37 +-44 +-50 +-54 +-55 +-56 +-55 +-55 +-53 +-51 +-49 +-47 +-45 +-33 +-10 +5 +16 +24 +30 +34 +36 +38 +39 +40 +39 +38 +36 +35 +34 +26 +7 +-8 +-20 +-28 +-34 +-38 +-42 +-43 +-44 +-44 +-44 +-44 +-41 +-40 +-39 +-28 +-6 +9 +20 +28 +34 +38 +40 +41 +42 +41 +40 +39 +37 +36 +35 +26 +7 +-8 +-19 +-28 +-33 +-38 +-40 +-42 +-43 +-43 +-42 +-40 +-39 +-38 +-36 +-26 +-4 +10 +22 +30 +36 +39 +42 +43 +43 +43 +43 +41 +40 +39 +37 +28 +8 +-7 +-19 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-40 +-38 +-37 +-27 +-6 +10 +21 +28 +33 +37 +39 +41 +41 +41 +40 +39 +38 +37 +35 +28 +7 +-8 +-20 +-29 +-34 +-38 +-41 +-43 +-44 +-44 +-44 +-43 +-41 +-40 +-38 +-27 +-5 +11 +22 +30 +35 +38 +41 +42 +44 +43 +42 +41 +40 +38 +37 +29 +10 +-5 +-17 +-26 +-32 +-36 +-39 +-41 +-41 +-42 +-42 +-40 +-39 +-38 +-36 +-25 +-4 +11 +23 +30 +36 +39 +42 +43 +43 +42 +41 +40 +39 +38 +37 +29 +9 +-7 +-19 +-27 +-33 +-36 +-39 +-41 +-41 +-40 +-40 +-40 +-39 +-37 +-36 +-25 +-3 +11 +22 +31 +36 +39 +42 +44 +44 +45 +44 +43 +41 +39 +38 +29 +9 +-7 +-18 +-27 +-33 +-38 +-41 +-42 +-43 +-43 +-43 +-41 +-39 +-37 +-36 +-26 +-4 +10 +21 +28 +34 +37 +39 +40 +41 +40 +40 +39 +38 +36 +35 +26 +7 +-8 +-19 +-29 +-35 +-40 +-43 +-44 +-45 +-45 +-44 +-43 +-42 +-40 +-38 +-36 +-33 +-32 +-29 +-28 +-26 +-25 +-23 +-22 +-20 +-19 +-18 +-17 +-16 +-15 +-14 +-4 +19 +33 +43 +50 +54 +57 +58 +58 +58 +57 +55 +53 +51 +49 +48 +45 +43 +41 +39 +36 +35 +33 +31 +29 +28 +25 +23 +22 +20 +19 +18 +11 +-8 +-23 +-33 +-41 +-45 +-49 +-50 +-51 +-51 +-50 +-49 +-48 +-47 +-46 +-43 +-33 +-10 +5 +17 +26 +31 +35 +38 +39 +40 +39 +39 +38 +37 +35 +33 +25 +6 +-10 +-21 +-30 +-36 +-40 +-43 +-44 +-45 +-44 +-43 +-42 +-40 +-39 +-37 +-27 +-6 +9 +20 +28 +34 +37 +40 +41 +42 +42 +42 +42 +40 +38 +36 +28 +8 +-7 +-18 +-28 +-34 +-38 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-33 +-31 +-29 +-27 +-26 +-25 +-23 +-22 +-21 +-19 +-18 +-17 +-16 +-14 +-13 +-12 +-3 +19 +34 +44 +50 +54 +56 +57 +57 +57 +55 +54 +52 +50 +48 +46 +43 +41 +39 +37 +35 +33 +31 +30 +29 +27 +25 +23 +21 +19 +18 +17 +9 +-10 +-25 +-35 +-42 +-47 +-51 +-53 +-54 +-54 +-53 +-51 +-50 +-49 +-47 +-45 +-34 +-12 +4 +15 +23 +30 +34 +36 +38 +39 +39 +39 +38 +37 +35 +34 +26 +6 +-9 +-20 +-29 +-35 +-39 +-42 +-44 +-45 +-44 +-43 +-42 +-40 +-38 +-37 +-36 +-34 +-32 +-30 +-29 +-27 +-26 +-24 +-22 +-21 +-19 +-17 +-16 +-16 +-14 +-12 +-2 +18 +32 +43 +49 +53 +55 +57 +57 +57 +55 +53 +51 +49 +47 +45 +37 +17 +2 +-10 +-20 +-27 +-32 +-36 +-38 +-38 +-39 +-38 +-38 +-35 +-34 +-33 +-22 +-1 +14 +25 +34 +39 +42 +45 +46 +46 +45 +44 +42 +41 +39 +38 +36 +35 +33 +31 +29 +28 +26 +25 +23 +23 +21 +20 +18 +17 +15 +14 +6 +-13 +-27 +-38 +-45 +-51 +-54 +-56 +-56 +-56 +-55 +-54 +-52 +-50 +-47 +-45 +-42 +-40 +-38 +-36 +-34 +-32 +-31 +-30 +-28 +-27 +-25 +-24 +-22 +-20 +-19 +-18 +-7 +14 +29 +39 +46 +50 +52 +53 +53 +52 +51 +50 +48 +46 +44 +42 +40 +39 +37 +35 +32 +31 +29 +28 +26 +25 +24 +23 +22 +18 +17 +16 +9 +-10 +-25 +-36 +-43 +-48 +-51 +-53 +-53 +-52 +-51 +-50 +-48 +-46 +-44 +-42 +-32 +-10 +6 +17 +26 +31 +35 +37 +39 +39 +39 +38 +37 +36 +35 +34 +26 +7 +-8 +-20 +-29 +-35 +-39 +-42 +-44 +-44 +-44 +-43 +-42 +-41 +-40 +-38 +-36 +-33 +-32 +-29 +-28 +-25 +-24 +-22 +-21 +-19 +-19 +-18 +-17 +-16 +-15 +-13 +-4 +17 +30 +41 +49 +54 +56 +57 +58 +58 +57 +55 +53 +51 +48 +45 +43 +40 +38 +37 +35 +33 +31 +29 +28 +27 +26 +24 +23 +22 +20 +19 +11 +-8 +-23 +-33 +-42 +-46 +-49 +-52 +-53 +-53 +-52 +-50 +-48 +-46 +-44 +-41 +-30 +-8 +7 +19 +27 +32 +36 +38 +38 +39 +40 +39 +38 +37 +36 +35 +26 +7 +-9 +-20 +-29 +-35 +-39 +-42 +-44 +-45 +-45 +-44 +-43 +-42 +-40 +-38 +-36 +-34 +-32 +-30 +-28 +-26 +-25 +-22 +-21 +-19 +-18 +-18 +-17 +-16 +-15 +-14 +-4 +17 +31 +42 +49 +54 +56 +58 +58 +58 +57 +55 +53 +51 +49 +46 +43 +42 +39 +36 +34 +32 +30 +29 +27 +25 +24 +23 +22 +20 +19 +18 +11 +-8 +-23 +-35 +-42 +-48 +-51 +-54 +-54 +-54 +-54 +-52 +-51 +-48 +-46 +-43 +-41 +-39 +-37 +-35 +-34 +-32 +-30 +-28 +-27 +-24 +-23 +-21 +-20 +-19 +-18 +-17 +-8 +14 +29 +40 +46 +51 +53 +54 +55 +54 +52 +51 +49 +48 +46 +43 +35 +15 +0 +-12 +-20 +-26 +-30 +-34 +-35 +-36 +-35 +-36 +-36 +-36 +-34 +-33 +-22 +-1 +14 +24 +32 +37 +41 +43 +44 +45 +44 +44 +43 +41 +40 +38 +30 +9 +-6 +-19 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-36 +-26 +-4 +11 +21 +29 +34 +38 +40 +42 +43 +42 +42 +41 +40 +38 +37 +30 +10 +-5 +-17 +-25 +-31 +-36 +-38 +-40 +-41 +-42 +-41 +-40 +-38 +-37 +-35 +-25 +-3 +11 +23 +31 +37 +40 +43 +43 +43 +43 +42 +40 +39 +37 +36 +28 +8 +-7 +-19 +-27 +-32 +-36 +-39 +-41 +-42 +-41 +-41 +-40 +-39 +-38 +-36 +-26 +-5 +10 +21 +29 +35 +38 +40 +42 +42 +41 +41 +41 +39 +37 +35 +26 +7 +-9 +-21 +-29 +-35 +-39 +-42 +-43 +-44 +-44 +-42 +-40 +-39 +-38 +-36 +-26 +-5 +10 +20 +28 +33 +37 +39 +40 +41 +40 +40 +39 +38 +37 +36 +28 +9 +-6 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-42 +-41 +-40 +-38 +-37 +-35 +-24 +-2 +13 +25 +32 +38 +42 +44 +46 +47 +47 +45 +43 +41 +39 +38 +30 +10 +-5 +-16 +-24 +-31 +-35 +-38 +-39 +-39 +-38 +-39 +-38 +-36 +-35 +-34 +-24 +-2 +12 +23 +31 +37 +39 +42 +42 +43 +43 +43 +41 +40 +38 +37 +29 +10 +-5 +-17 +-26 +-32 +-37 +-40 +-41 +-42 +-42 +-42 +-40 +-39 +-37 +-36 +-25 +-3 +11 +23 +31 +36 +39 +42 +42 +43 +42 +42 +40 +39 +37 +36 +35 +33 +30 +29 +27 +26 +24 +24 +22 +21 +21 +21 +19 +17 +16 +15 +7 +-12 +-26 +-36 +-44 +-49 +-53 +-54 +-55 +-55 +-54 +-53 +-51 +-49 +-47 +-45 +-34 +-12 +4 +15 +23 +29 +33 +35 +36 +37 +37 +37 +36 +36 +34 +33 +25 +6 +-9 +-21 +-29 +-36 +-40 +-43 +-44 +-45 +-44 +-44 +-43 +-42 +-40 +-39 +-28 +-6 +9 +22 +29 +35 +38 +41 +42 +42 +41 +40 +38 +37 +36 +35 +26 +7 +-8 +-19 +-29 +-34 +-38 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-38 +-37 +-26 +-5 +10 +22 +31 +36 +40 +42 +43 +43 +44 +43 +41 +40 +38 +37 +28 +8 +-8 +-19 +-28 +-34 +-39 +-41 +-43 +-43 +-44 +-43 +-42 +-41 +-40 +-38 +-27 +-6 +9 +20 +28 +33 +36 +39 +39 +41 +41 +40 +39 +38 +36 +35 +28 +9 +-6 +-18 +-26 +-32 +-36 +-40 +-41 +-42 +-42 +-40 +-39 +-38 +-37 +-35 +-25 +-4 +12 +23 +31 +36 +40 +42 +43 +43 +43 +42 +40 +40 +38 +36 +28 +8 +-8 +-19 +-28 +-34 +-38 +-41 +-42 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-27 +-5 +10 +21 +30 +35 +38 +41 +43 +43 +43 +42 +41 +41 +39 +37 +29 +9 +-7 +-18 +-27 +-33 +-38 +-40 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-25 +-3 +11 +22 +30 +35 +37 +40 +41 +42 +41 +40 +39 +38 +36 +35 +27 +8 +-7 +-19 +-28 +-33 +-38 +-40 +-42 +-43 +-44 +-43 +-42 +-40 +-39 +-37 +-26 +-5 +10 +22 +30 +36 +40 +43 +43 +44 +43 +43 +41 +40 +38 +37 +28 +8 +-7 +-19 +-27 +-33 +-38 +-39 +-41 +-41 +-41 +-40 +-39 +-38 +-37 +-35 +-34 +-32 +-30 +-28 +-26 +-25 +-22 +-21 +-19 +-18 +-16 +-15 +-13 +-11 +-11 +-10 +0 +20 +33 +43 +49 +54 +56 +57 +57 +56 +55 +53 +52 +50 +47 +45 +36 +16 +-1 +-13 +-22 +-29 +-34 +-37 +-39 +-40 +-40 +-40 +-39 +-37 +-36 +-35 +-24 +-2 +12 +24 +32 +37 +40 +43 +43 +43 +43 +42 +41 +40 +38 +37 +29 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-40 +-42 +-42 +-42 +-40 +-39 +-37 +-36 +-25 +-4 +12 +23 +31 +36 +39 +42 +43 +44 +45 +45 +43 +42 +39 +37 +28 +8 +-7 +-18 +-27 +-34 +-37 +-39 +-41 +-43 +-42 +-41 +-40 +-39 +-36 +-35 +-24 +-2 +12 +22 +30 +35 +38 +41 +42 +43 +42 +42 +41 +40 +38 +37 +29 +9 +-6 +-18 +-26 +-32 +-38 +-40 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +12 +23 +31 +37 +41 +43 +43 +43 +42 +42 +40 +39 +37 +36 +28 +9 +-7 +-18 +-27 +-32 +-37 +-40 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-27 +-6 +10 +21 +29 +35 +39 +41 +42 +43 +43 +42 +41 +40 +38 +36 +28 +8 +-7 +-19 +-28 +-34 +-38 +-40 +-42 +-43 +-44 +-42 +-41 +-39 +-37 +-35 +-25 +-4 +11 +23 +30 +36 +39 +42 +43 +43 +43 +43 +41 +40 +38 +38 +29 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-25 +-3 +12 +24 +31 +37 +40 +43 +44 +45 +44 +42 +40 +39 +37 +36 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-41 +-41 +-41 +-40 +-39 +-38 +-36 +-35 +-25 +-3 +11 +22 +30 +36 +39 +42 +44 +44 +43 +43 +42 +40 +38 +37 +35 +33 +31 +29 +27 +26 +24 +22 +21 +20 +19 +18 +17 +15 +15 +14 +7 +-13 +-26 +-37 +-45 +-51 +-54 +-56 +-58 +-58 +-57 +-55 +-54 +-51 +-49 +-47 +-35 +-13 +2 +14 +22 +28 +32 +34 +35 +36 +36 +35 +34 +32 +31 +30 +22 +3 +-12 +-23 +-30 +-36 +-41 +-43 +-44 +-45 +-44 +-43 +-43 +-42 +-40 +-38 +-27 +-6 +9 +21 +29 +34 +38 +40 +42 +43 +43 +42 +42 +41 +39 +38 +29 +9 +-6 +-17 +-27 +-33 +-38 +-40 +-42 +-42 +-43 +-42 +-40 +-38 +-37 +-36 +-25 +-3 +12 +23 +31 +36 +39 +41 +42 +42 +42 +41 +41 +39 +38 +37 +29 +10 +-6 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-43 +-43 +-41 +-40 +-38 +-36 +-25 +-3 +11 +23 +31 +36 +39 +42 +43 +43 +42 +41 +40 +40 +37 +36 +27 +8 +-7 +-19 +-28 +-34 +-38 +-40 +-42 +-42 +-42 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +10 +21 +29 +34 +37 +40 +42 +43 +43 +43 +42 +42 +40 +38 +30 +10 +-6 +-17 +-25 +-31 +-35 +-38 +-39 +-41 +-40 +-40 +-39 +-37 +-36 +-34 +-23 +-1 +14 +25 +32 +39 +42 +43 +44 +44 +43 +43 +41 +40 +38 +37 +28 +9 +-6 +-18 +-27 +-32 +-36 +-39 +-40 +-41 +-41 +-41 +-40 +-39 +-38 +-37 +-26 +-4 +10 +22 +30 +35 +38 +41 +42 +43 +42 +42 +41 +40 +38 +37 +28 +8 +-8 +-19 +-28 +-34 +-39 +-41 +-43 +-43 +-44 +-43 +-42 +-40 +-38 +-35 +-25 +-3 +12 +22 +29 +35 +38 +40 +41 +42 +42 +41 +40 +39 +38 +36 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-43 +-43 +-42 +-40 +-38 +-36 +-25 +-3 +12 +22 +30 +36 +40 +43 +44 +44 +44 +43 +42 +40 +38 +37 +29 +9 +-6 +-18 +-27 +-31 +-36 +-39 +-41 +-41 +-40 +-40 +-39 +-37 +-36 +-35 +-25 +-3 +11 +23 +31 +36 +40 +42 +44 +45 +45 +44 +42 +41 +39 +38 +29 +10 +-6 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-43 +-43 +-41 +-39 +-38 +-37 +-35 +-33 +-31 +-29 +-29 +-27 +-27 +-25 +-25 +-23 +-22 +-20 +-18 +-17 +-16 +-15 +-4 +16 +31 +41 +48 +52 +54 +55 +55 +54 +54 +52 +50 +48 +46 +44 +35 +15 +-1 +-13 +-22 +-28 +-32 +-36 +-37 +-39 +-40 +-40 +-39 +-38 +-37 +-35 +-25 +-3 +12 +22 +31 +36 +39 +42 +44 +44 +43 +43 +41 +40 +38 +36 +34 +32 +31 +30 +28 +27 +25 +24 +23 +22 +20 +19 +19 +18 +17 +17 +10 +-9 +-24 +-35 +-42 +-48 +-51 +-53 +-54 +-54 +-53 +-52 +-49 +-47 +-45 +-43 +-32 +-10 +5 +17 +25 +31 +35 +38 +39 +39 +38 +39 +37 +36 +35 +34 +25 +6 +-9 +-20 +-28 +-34 +-38 +-39 +-41 +-42 +-43 +-42 +-42 +-41 +-40 +-38 +-28 +-6 +9 +21 +29 +35 +38 +41 +41 +42 +43 +42 +41 +39 +37 +35 +26 +6 +-9 +-20 +-29 +-35 +-39 +-41 +-43 +-43 +-44 +-42 +-41 +-40 +-38 +-36 +-34 +-32 +-31 +-29 +-28 +-26 +-25 +-23 +-21 +-19 +-17 +-16 +-16 +-14 +-13 +-12 +-2 +19 +33 +43 +50 +54 +57 +58 +59 +58 +57 +55 +52 +51 +48 +46 +43 +42 +38 +37 +34 +32 +30 +30 +28 +27 +24 +23 +21 +20 +18 +17 +9 +-10 +-25 +-35 +-43 +-48 +-51 +-53 +-54 +-54 +-53 +-51 +-49 +-47 +-45 +-43 +-32 +-10 +5 +16 +24 +29 +33 +35 +37 +38 +38 +38 +36 +36 +34 +33 +25 +6 +-10 +-21 +-29 +-35 +-39 +-42 +-44 +-44 +-44 +-43 +-43 +-42 +-40 +-38 +-37 +-34 +-32 +-30 +-28 +-26 +-24 +-22 +-20 +-18 +-17 +-16 +-14 +-14 +-12 +-11 +-3 +18 +31 +42 +49 +54 +57 +58 +58 +58 +57 +56 +54 +52 +50 +48 +46 +44 +41 +39 +36 +34 +31 +29 +27 +26 +24 +23 +22 +20 +19 +18 +11 +-8 +-22 +-33 +-41 +-46 +-49 +-52 +-53 +-54 +-53 +-52 +-50 +-49 +-47 +-45 +-34 +-12 +4 +16 +24 +30 +34 +38 +40 +41 +40 +39 +39 +38 +37 +35 +27 +7 +-8 +-20 +-29 +-35 +-40 +-42 +-44 +-43 +-44 +-43 +-42 +-40 +-39 +-37 +-26 +-5 +10 +21 +28 +33 +37 +38 +39 +40 +39 +38 +38 +37 +35 +34 +26 +6 +-9 +-20 +-29 +-34 +-38 +-42 +-43 +-44 +-44 +-43 +-43 +-42 +-40 +-38 +-27 +-5 +10 +22 +30 +35 +39 +41 +43 +43 +44 +44 +43 +41 +40 +39 +30 +10 +-6 +-16 +-26 +-31 +-36 +-38 +-40 +-41 +-41 +-40 +-39 +-37 +-36 +-35 +-32 +-31 +-30 +-28 +-27 +-26 +-25 +-23 +-23 +-22 +-21 +-20 +-19 +-17 +-16 +-15 +-5 +16 +30 +40 +47 +51 +54 +55 +56 +55 +53 +52 +50 +48 +46 +44 +35 +15 +0 +-12 +-21 +-27 +-32 +-35 +-37 +-37 +-37 +-36 +-35 +-34 +-33 +-32 +-22 +-1 +14 +25 +33 +38 +42 +45 +45 +45 +44 +44 +43 +41 +40 +38 +30 +11 +-5 +-17 +-26 +-32 +-37 +-41 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +11 +23 +31 +36 +40 +43 +43 +44 +43 +41 +40 +39 +37 +35 +34 +32 +31 +29 +28 +26 +24 +23 +21 +21 +20 +19 +18 +17 +16 +15 +7 +-13 +-28 +-39 +-46 +-51 +-54 +-56 +-57 +-56 +-55 +-54 +-52 +-50 +-47 +-45 +-34 +-12 +3 +15 +23 +29 +32 +34 +36 +37 +37 +37 +36 +35 +34 +33 +25 +6 +-8 +-20 +-28 +-34 +-37 +-40 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-35 +-33 +-31 +-30 +-28 +-26 +-24 +-23 +-21 +-20 +-18 +-17 +-16 +-15 +-14 +-5 +16 +29 +40 +46 +51 +53 +55 +55 +56 +55 +53 +51 +49 +48 +45 +43 +41 +39 +37 +34 +32 +30 +28 +26 +25 +24 +22 +21 +20 +19 +18 +10 +-8 +-23 +-34 +-41 +-47 +-50 +-53 +-54 +-54 +-53 +-52 +-51 +-48 +-46 +-44 +-33 +-11 +4 +16 +25 +31 +35 +37 +38 +39 +39 +38 +37 +35 +34 +34 +25 +5 +-10 +-21 +-30 +-36 +-39 +-42 +-43 +-44 +-43 +-42 +-40 +-39 +-36 +-34 +-24 +-2 +13 +24 +32 +38 +41 +43 +44 +45 +45 +44 +43 +42 +40 +39 +31 +11 +-4 +-15 +-24 +-31 +-35 +-38 +-40 +-41 +-41 +-41 +-41 +-40 +-39 +-37 +-27 +-5 +10 +21 +29 +34 +37 +40 +41 +42 +42 +41 +39 +38 +37 +35 +26 +5 +-9 +-21 +-29 +-36 +-39 +-42 +-44 +-45 +-44 +-43 +-42 +-41 +-39 +-37 +-27 +-4 +11 +21 +29 +34 +38 +40 +41 +42 +42 +41 +40 +39 +38 +36 +28 +9 +-6 +-18 +-26 +-33 +-38 +-41 +-43 +-43 +-43 +-41 +-41 +-40 +-38 +-36 +-26 +-4 +11 +22 +31 +37 +40 +42 +43 +43 +42 +42 +41 +39 +37 +36 +27 +8 +-8 +-19 +-28 +-34 +-39 +-41 +-42 +-42 +-41 +-40 +-40 +-39 +-38 +-37 +-27 +-5 +10 +21 +29 +35 +39 +42 +43 +44 +44 +43 +42 +41 +39 +38 +30 +10 +-5 +-17 +-26 +-33 +-37 +-40 +-41 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-24 +-2 +13 +24 +32 +37 +41 +43 +43 +43 +43 +42 +40 +39 +37 +36 +28 +8 +-7 +-18 +-27 +-33 +-38 +-40 +-42 +-43 +-43 +-43 +-42 +-40 +-39 +-38 +-37 +-35 +-33 +-31 +-30 +-28 +-26 +-24 +-23 +-21 +-19 +-17 +-17 +-16 +-16 +-15 +-6 +15 +29 +39 +45 +50 +53 +55 +55 +55 +54 +53 +51 +51 +49 +46 +37 +17 +0 +-12 +-21 +-28 +-32 +-35 +-37 +-37 +-38 +-37 +-37 +-35 +-34 +-32 +-21 +1 +16 +27 +35 +40 +43 +45 +46 +46 +46 +44 +43 +42 +41 +39 +31 +11 +-4 +-16 +-24 +-30 +-34 +-37 +-39 +-40 +-41 +-40 +-40 +-39 +-37 +-36 +-26 +-4 +12 +22 +30 +36 +39 +41 +43 +44 +43 +42 +41 +40 +38 +36 +28 +8 +-7 +-19 +-27 +-33 +-37 +-40 +-41 +-42 +-42 +-41 +-39 +-38 +-36 +-34 +-23 +-1 +14 +24 +32 +38 +41 +43 +44 +44 +44 +44 +43 +43 +41 +39 +31 +11 +-4 +-15 +-24 +-31 +-35 +-38 +-39 +-41 +-42 +-41 +-41 +-39 +-38 +-36 +-26 +-4 +11 +22 +29 +35 +38 +41 +42 +42 +41 +41 +39 +37 +35 +34 +25 +6 +-9 +-21 +-30 +-35 +-39 +-42 +-43 +-44 +-44 +-43 +-41 +-40 +-39 +-37 +-27 +-5 +9 +20 +29 +34 +38 +40 +42 +42 +42 +42 +41 +40 +39 +38 +30 +10 +-6 +-18 +-27 +-33 +-37 +-40 +-42 +-42 +-42 +-42 +-41 +-39 +-38 +-36 +-25 +-3 +12 +24 +31 +37 +41 +43 +45 +46 +45 +43 +42 +40 +38 +37 +29 +10 +-5 +-17 +-26 +-31 +-35 +-38 +-40 +-40 +-40 +-40 +-39 +-39 +-38 +-36 +-26 +-4 +11 +22 +30 +36 +39 +42 +43 +43 +43 +42 +41 +40 +38 +36 +28 +9 +-8 +-20 +-29 +-36 +-40 +-42 +-44 +-45 +-44 +-43 +-42 +-40 +-38 +-36 +-25 +-3 +12 +23 +30 +35 +38 +41 +42 +42 +42 +42 +40 +39 +37 +36 +34 +33 +31 +30 +29 +28 +26 +24 +22 +20 +19 +17 +16 +15 +14 +13 +6 +-13 +-27 +-38 +-45 +-51 +-53 +-55 +-55 +-55 +-55 +-53 +-52 +-50 +-47 +-45 +-34 +-12 +3 +16 +23 +29 +33 +36 +38 +39 +39 +39 +38 +37 +36 +34 +26 +6 +-9 +-21 +-29 +-35 +-39 +-42 +-44 +-44 +-44 +-43 +-42 +-41 +-39 +-37 +-27 +-5 +9 +21 +28 +33 +36 +39 +40 +41 +40 +40 +39 +38 +36 +35 +27 +8 +-8 +-20 +-28 +-35 +-39 +-42 +-44 +-44 +-45 +-44 +-44 +-42 +-40 +-38 +-28 +-6 +10 +21 +29 +34 +37 +40 +41 +42 +42 +41 +40 +39 +38 +37 +29 +9 +-5 +-16 +-26 +-32 +-35 +-39 +-41 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-25 +-3 +12 +24 +32 +37 +41 +44 +45 +46 +44 +43 +41 +39 +37 +36 +28 +8 +-7 +-18 +-27 +-33 +-38 +-40 +-42 +-41 +-40 +-39 +-39 +-38 +-37 +-35 +-25 +-4 +11 +22 +30 +35 +39 +42 +43 +44 +44 +43 +42 +41 +39 +37 +28 +8 +-8 +-19 +-28 +-34 +-39 +-40 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-25 +-3 +12 +23 +31 +37 +40 +42 +43 +43 +43 +43 +41 +41 +39 +38 +30 +9 +-6 +-18 +-27 +-34 +-39 +-42 +-44 +-44 +-45 +-44 +-43 +-42 +-41 +-38 +-27 +-6 +9 +20 +28 +34 +37 +39 +40 +41 +40 +40 +39 +38 +36 +35 +27 +8 +-7 +-18 +-27 +-32 +-37 +-39 +-40 +-41 +-41 +-41 +-40 +-39 +-38 +-36 +-34 +-32 +-30 +-28 +-26 +-25 +-24 +-22 +-20 +-18 +-17 +-16 +-15 +-15 +-14 +-14 +-5 +15 +30 +40 +47 +52 +55 +56 +57 +56 +54 +53 +51 +50 +48 +46 +43 +40 +38 +36 +34 +33 +30 +29 +27 +26 +24 +23 +21 +21 +19 +19 +11 +-9 +-23 +-34 +-42 +-48 +-52 +-54 +-54 +-54 +-53 +-52 +-50 +-48 +-46 +-43 +-41 +-39 +-37 +-35 +-33 +-31 +-30 +-28 +-27 +-25 +-23 +-22 +-20 +-19 +-17 +-16 +-6 +15 +29 +41 +47 +52 +54 +55 +55 +55 +54 +53 +50 +48 +46 +45 +42 +40 +37 +35 +34 +32 +30 +29 +27 +26 +24 +23 +21 +20 +18 +16 +9 +-10 +-25 +-35 +-43 +-48 +-51 +-53 +-54 +-54 +-53 +-51 +-50 +-48 +-46 +-44 +-42 +-40 +-38 +-36 +-34 +-32 +-31 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-5 +17 +31 +40 +46 +50 +52 +54 +54 +54 +52 +51 +50 +48 +46 +44 +41 +40 +38 +36 +34 +32 +30 +28 +27 +25 +23 +21 +20 +18 +17 +16 +8 +-10 +-24 +-35 +-42 +-47 +-50 +-52 +-53 +-53 +-53 +-52 +-51 +-49 +-47 +-44 +-42 +-40 +-37 +-35 +-33 +-31 +-28 +-27 +-25 +-24 +-22 +-20 +-18 +-16 +-15 +-15 +-5 +15 +30 +40 +47 +52 +55 +56 +56 +56 +55 +54 +52 +50 +47 +46 +42 +40 +38 +36 +34 +32 +30 +28 +27 +25 +24 +22 +21 +20 +18 +18 +10 +-9 +-23 +-35 +-42 +-48 +-51 +-54 +-55 +-55 +-54 +-53 +-51 +-49 +-47 +-45 +-42 +-39 +-38 +-36 +-33 +-32 +-30 +-28 +-27 +-25 +-24 +-22 +-21 +-19 +-18 +-17 +-7 +14 +29 +39 +46 +51 +54 +55 +55 +54 +53 +51 +49 +47 +45 +44 +42 +40 +38 +36 +33 +32 +30 +28 +26 +25 +23 +21 +20 +18 +17 +17 +10 +-9 +-24 +-34 +-42 +-48 +-51 +-53 +-53 +-53 +-52 +-51 +-50 +-48 +-46 +-45 +-42 +-40 +-38 +-36 +-33 +-32 +-29 +-28 +-26 +-24 +-22 +-20 +-18 +-17 +-16 +-15 +-5 +15 +29 +39 +46 +51 +54 +55 +56 +56 +55 +53 +52 +50 +49 +47 +39 +18 +2 +-11 +-20 +-26 +-31 +-34 +-36 +-37 +-37 +-36 +-36 +-35 +-34 +-32 +-22 +0 +15 +26 +34 +38 +42 +43 +44 +44 +44 +44 +42 +41 +39 +37 +28 +9 +-6 +-17 +-26 +-31 +-36 +-39 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-27 +-6 +9 +21 +29 +35 +39 +41 +42 +43 +43 +42 +41 +39 +38 +36 +28 +8 +-7 +-18 +-27 +-34 +-38 +-40 +-41 +-42 +-41 +-40 +-39 +-38 +-36 +-34 +-24 +-3 +12 +23 +31 +36 +40 +43 +44 +45 +44 +44 +43 +42 +41 +40 +31 +11 +-5 +-16 +-25 +-32 +-37 +-40 +-42 +-42 +-43 +-42 +-41 +-40 +-38 +-36 +-25 +-3 +12 +23 +31 +37 +39 +42 +43 +43 +43 +43 +41 +40 +38 +37 +29 +9 +-7 +-18 +-27 +-33 +-37 +-39 +-41 +-42 +-43 +-42 +-42 +-40 +-38 +-37 +-27 +-5 +10 +21 +29 +34 +38 +41 +42 +43 +43 +42 +41 +39 +37 +36 +27 +8 +-8 +-20 +-28 +-34 +-38 +-40 +-42 +-43 +-42 +-41 +-40 +-39 +-37 +-36 +-26 +-4 +10 +21 +28 +34 +37 +40 +41 +42 +42 +42 +41 +40 +39 +37 +29 +9 +-6 +-18 +-27 +-34 +-39 +-42 +-43 +-44 +-43 +-42 +-41 +-39 +-39 +-37 +-26 +-3 +11 +23 +32 +38 +41 +43 +44 +44 +44 +43 +42 +41 +40 +39 +30 +11 +-4 +-16 +-25 +-31 +-35 +-38 +-40 +-42 +-42 +-41 +-40 +-39 +-38 +-37 +-26 +-5 +10 +22 +30 +35 +38 +41 +43 +44 +43 +43 +41 +40 +38 +36 +35 +33 +31 +29 +27 +26 +24 +23 +22 +21 +19 +18 +17 +16 +15 +14 +6 +-13 +-28 +-39 +-47 +-53 +-56 +-58 +-59 +-58 +-57 +-56 +-54 +-52 +-49 +-47 +-35 +-13 +3 +14 +22 +28 +33 +36 +37 +37 +37 +37 +36 +35 +34 +32 +24 +4 +-10 +-21 +-29 +-36 +-40 +-42 +-44 +-44 +-44 +-44 +-43 +-42 +-40 +-39 +-29 +-7 +8 +20 +28 +34 +37 +40 +41 +42 +42 +42 +41 +40 +38 +36 +28 +8 +-8 +-19 +-28 +-34 +-37 +-40 +-41 +-42 +-41 +-41 +-40 +-39 +-37 +-35 +-24 +-2 +13 +23 +31 +36 +39 +42 +43 +43 +43 +42 +42 +41 +40 +38 +30 +11 +-5 +-16 +-24 +-30 +-35 +-38 +-41 +-41 +-41 +-41 +-40 +-39 +-37 +-35 +-25 +-3 +11 +23 +31 +36 +40 +43 +44 +45 +45 +44 +43 +41 +38 +37 +29 +9 +-6 +-18 +-26 +-32 +-36 +-39 +-41 +-41 +-41 +-40 +-40 +-38 +-36 +-34 +-25 +-4 +10 +21 +29 +34 +38 +40 +42 +42 +42 +42 +41 +40 +38 +36 +29 +10 +-6 +-18 +-28 +-34 +-38 +-42 +-44 +-44 +-44 +-43 +-42 +-40 +-39 +-37 +-27 +-5 +9 +21 +29 +35 +39 +41 +42 +43 +42 +42 +40 +39 +37 +35 +27 +7 +-8 +-19 +-28 +-34 +-38 +-41 +-42 +-42 +-42 +-42 +-41 +-40 +-38 +-36 +-26 +-5 +10 +21 +28 +34 +38 +41 +42 +42 +42 +43 +42 +41 +40 +38 +29 +9 +-6 +-18 +-27 +-33 +-37 +-39 +-41 +-42 +-42 +-42 +-41 +-39 +-37 +-35 +-25 +-2 +13 +24 +32 +37 +40 +43 +44 +44 +44 +44 +42 +41 +39 +38 +29 +10 +-5 +-17 +-25 +-31 +-35 +-38 +-40 +-41 +-41 +-41 +-41 +-40 +-38 +-36 +-35 +-33 +-31 +-30 +-28 +-27 +-25 +-23 +-22 +-21 +-19 +-18 +-16 +-16 +-14 +-13 +-4 +16 +31 +41 +47 +52 +55 +57 +57 +57 +55 +54 +53 +51 +49 +48 +45 +43 +40 +38 +36 +34 +32 +30 +28 +26 +24 +23 +21 +20 +20 +19 +11 +-9 +-23 +-33 +-41 +-47 +-51 +-53 +-54 +-54 +-54 +-53 +-51 +-49 +-47 +-45 +-34 +-12 +4 +16 +25 +30 +34 +37 +38 +39 +39 +38 +37 +36 +34 +33 +25 +5 +-10 +-21 +-30 +-35 +-40 +-41 +-43 +-43 +-43 +-43 +-41 +-39 +-38 +-36 +-26 +-5 +10 +22 +30 +36 +40 +42 +43 +43 +42 +42 +41 +40 +39 +38 +29 +9 +-7 +-19 +-28 +-34 +-39 +-41 +-43 +-43 +-44 +-43 +-42 +-41 +-39 +-37 +-35 +-33 +-31 +-29 +-28 +-27 +-26 +-24 +-24 +-23 +-22 +-20 +-18 +-17 +-15 +-15 +-4 +17 +31 +41 +48 +52 +55 +56 +55 +54 +53 +52 +50 +48 +46 +44 +41 +39 +37 +35 +33 +32 +30 +29 +26 +24 +22 +21 +19 +18 +17 +16 +7 +-11 +-26 +-36 +-44 +-49 +-52 +-54 +-54 +-54 +-53 +-51 +-49 +-47 +-45 +-43 +-32 +-10 +5 +17 +25 +32 +35 +38 +39 +40 +40 +40 +39 +38 +37 +35 +27 +8 +-7 +-18 +-27 +-34 +-39 +-41 +-43 +-43 +-43 +-41 +-41 +-40 +-38 +-36 +-35 +-33 +-31 +-29 +-28 +-27 +-25 +-24 +-23 +-21 +-19 +-17 +-16 +-16 +-15 +-14 +-4 +17 +32 +42 +49 +54 +57 +58 +57 +57 +55 +54 +52 +50 +48 +46 +37 +17 +2 +-10 +-19 +-26 +-31 +-33 +-35 +-36 +-37 +-37 +-36 +-36 +-34 +-33 +-23 +-2 +13 +24 +32 +37 +41 +44 +45 +46 +46 +45 +43 +42 +40 +38 +36 +35 +32 +30 +28 +27 +25 +24 +22 +21 +19 +19 +17 +18 +16 +15 +7 +-12 +-26 +-37 +-46 +-51 +-55 +-57 +-57 +-57 +-56 +-54 +-52 +-49 +-47 +-45 +-42 +-40 +-37 +-35 +-33 +-31 +-30 +-28 +-26 +-23 +-22 +-21 +-20 +-19 +-18 +-16 +-6 +15 +29 +40 +46 +51 +54 +56 +56 +56 +55 +53 +50 +49 +47 +45 +43 +40 +37 +36 +34 +32 +30 +29 +27 +26 +24 +23 +21 +20 +18 +17 +9 +-10 +-24 +-35 +-43 +-48 +-52 +-53 +-54 +-53 +-52 +-50 +-48 +-46 +-44 +-42 +-31 +-10 +6 +17 +25 +31 +35 +37 +39 +39 +39 +39 +39 +37 +37 +36 +28 +8 +-6 +-18 +-27 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-36 +-34 +-32 +-31 +-29 +-27 +-26 +-25 +-24 +-23 +-22 +-20 +-18 +-17 +-17 +-16 +-16 +-6 +15 +29 +39 +46 +51 +54 +54 +54 +53 +52 +51 +49 +48 +45 +43 +41 +39 +36 +34 +32 +31 +29 +28 +26 +24 +23 +21 +20 +18 +17 +15 +8 +-11 +-26 +-36 +-44 +-49 +-51 +-53 +-54 +-54 +-53 +-51 +-49 +-47 +-46 +-44 +-33 +-10 +6 +18 +26 +31 +35 +37 +39 +40 +40 +40 +39 +38 +37 +36 +29 +9 +-7 +-19 +-27 +-34 +-38 +-41 +-43 +-43 +-44 +-43 +-42 +-40 +-38 +-36 +-34 +-33 +-32 +-30 +-29 +-27 +-25 +-23 +-23 +-22 +-21 +-19 +-18 +-17 +-16 +-15 +-5 +16 +30 +40 +47 +52 +55 +57 +57 +56 +55 +53 +51 +49 +46 +44 +41 +40 +38 +36 +34 +32 +31 +29 +28 +27 +25 +23 +22 +20 +19 +18 +10 +-9 +-23 +-33 +-41 +-47 +-50 +-52 +-53 +-52 +-51 +-49 +-47 +-45 +-43 +-41 +-39 +-37 +-36 +-34 +-32 +-30 +-28 +-26 +-24 +-23 +-22 +-20 +-18 +-17 +-16 +-15 +-4 +17 +31 +41 +48 +52 +55 +57 +57 +56 +54 +53 +51 +50 +47 +45 +36 +16 +1 +-11 +-21 +-27 +-32 +-35 +-37 +-39 +-40 +-39 +-38 +-37 +-36 +-35 +-24 +-3 +12 +23 +31 +36 +40 +42 +42 +42 +42 +41 +39 +38 +36 +35 +27 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-36 +-24 +-3 +12 +23 +31 +37 +41 +44 +45 +45 +45 +44 +44 +42 +41 +39 +30 +10 +-6 +-17 +-26 +-32 +-36 +-39 +-41 +-42 +-41 +-41 +-40 +-39 +-37 +-36 +-26 +-4 +10 +21 +29 +35 +39 +42 +42 +43 +43 +42 +41 +40 +38 +37 +29 +10 +-5 +-16 +-26 +-32 +-36 +-39 +-41 +-42 +-42 +-41 +-41 +-39 +-38 +-36 +-26 +-4 +11 +23 +30 +35 +39 +41 +42 +42 +42 +41 +40 +39 +37 +36 +28 +9 +-6 +-17 +-25 +-31 +-36 +-39 +-40 +-41 +-42 +-41 +-40 +-39 +-38 +-36 +-26 +-4 +11 +22 +30 +35 +39 +42 +43 +44 +43 +42 +40 +39 +37 +35 +27 +7 +-8 +-19 +-28 +-34 +-39 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-37 +-26 +-5 +10 +21 +29 +35 +38 +40 +41 +42 +42 +41 +41 +40 +39 +37 +28 +8 +-7 +-19 +-28 +-34 +-38 +-42 +-43 +-43 +-44 +-43 +-42 +-41 +-39 +-37 +-25 +-4 +10 +21 +30 +34 +37 +40 +40 +41 +40 +40 +40 +38 +36 +35 +27 +8 +-8 +-18 +-27 +-33 +-38 +-41 +-42 +-43 +-43 +-43 +-42 +-40 +-38 +-36 +-24 +-3 +11 +22 +30 +35 +39 +41 +43 +43 +44 +42 +42 +40 +38 +36 +35 +33 +31 +29 +28 +27 +25 +24 +22 +21 +20 +19 +18 +17 +16 +15 +7 +-12 +-26 +-37 +-45 +-50 +-54 +-56 +-56 +-55 +-54 +-52 +-51 +-48 +-46 +-44 +-32 +-10 +5 +18 +26 +31 +36 +38 +39 +40 +39 +39 +38 +38 +36 +35 +27 +8 +-7 +-18 +-27 +-32 +-36 +-39 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-27 +-5 +10 +21 +30 +35 +39 +41 +43 +43 +43 +42 +41 +41 +39 +37 +28 +9 +-7 +-18 +-27 +-33 +-38 +-40 +-42 +-42 +-42 +-41 +-40 +-38 +-36 +-34 +-24 +-3 +12 +23 +30 +35 +38 +41 +42 +43 +43 +43 +42 +41 +39 +38 +29 +10 +-6 +-17 +-26 +-32 +-37 +-39 +-41 +-42 +-43 +-42 +-41 +-40 +-38 +-37 +-27 +-5 +10 +21 +29 +35 +38 +41 +42 +43 +42 +42 +41 +40 +38 +36 +28 +8 +-8 +-20 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-41 +-40 +-39 +-37 +-36 +-26 +-5 +10 +21 +29 +34 +38 +41 +42 +42 +42 +42 +40 +39 +38 +36 +28 +9 +-6 +-18 +-27 +-33 +-36 +-39 +-42 +-43 +-44 +-43 +-42 +-40 +-38 +-36 +-26 +-4 +11 +22 +30 +36 +39 +41 +41 +41 +41 +41 +39 +39 +38 +36 +28 +9 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-27 +-5 +10 +21 +30 +36 +40 +42 +43 +43 +44 +43 +42 +41 +39 +37 +29 +10 +-5 +-17 +-26 +-32 +-37 +-39 +-41 +-41 +-41 +-40 +-39 +-38 +-36 +-35 +-24 +-2 +13 +24 +31 +36 +39 +42 +43 +43 +42 +41 +39 +38 +37 +36 +27 +8 +-7 +-19 +-27 +-33 +-37 +-40 +-42 +-44 +-44 +-43 +-42 +-40 +-39 +-38 +-36 +-34 +-32 +-30 +-28 +-26 +-25 +-24 +-23 +-21 +-20 +-19 +-19 +-18 +-17 +-16 +-6 +15 +29 +39 +46 +51 +54 +56 +57 +57 +54 +52 +50 +48 +46 +44 +35 +15 +0 +-12 +-21 +-27 +-32 +-35 +-36 +-36 +-36 +-36 +-35 +-34 +-32 +-30 +-18 +2 +16 +26 +34 +40 +43 +45 +47 +47 +46 +45 +44 +43 +42 +40 +31 +11 +-4 +-16 +-25 +-32 +-36 +-40 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-35 +-25 +-4 +11 +23 +30 +35 +39 +41 +42 +43 +42 +42 +41 +39 +37 +36 +28 +9 +-6 +-18 +-26 +-32 +-36 +-39 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-37 +-27 +-5 +11 +22 +30 +35 +39 +42 +43 +43 +42 +42 +40 +39 +37 +35 +27 +7 +-8 +-19 +-28 +-34 +-38 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-38 +-36 +-26 +-5 +9 +20 +28 +34 +37 +40 +41 +42 +42 +41 +41 +39 +38 +36 +29 +9 +-6 +-18 +-27 +-32 +-38 +-40 +-42 +-42 +-43 +-42 +-41 +-39 +-37 +-34 +-24 +-2 +13 +23 +30 +36 +39 +41 +43 +43 +42 +41 +40 +39 +38 +36 +28 +8 +-7 +-18 +-27 +-33 +-38 +-41 +-43 +-44 +-44 +-43 +-42 +-41 +-40 +-38 +-28 +-6 +10 +22 +30 +36 +39 +42 +43 +43 +43 +42 +40 +39 +37 +36 +28 +8 +-7 +-18 +-26 +-32 +-36 +-38 +-40 +-40 +-41 +-40 +-39 +-38 +-37 +-35 +-25 +-4 +11 +22 +31 +37 +40 +42 +43 +44 +43 +43 +42 +41 +39 +38 +30 +10 +-5 +-17 +-26 +-33 +-37 +-40 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +11 +22 +30 +36 +39 +41 +42 +42 +41 +40 +39 +38 +37 +35 +35 +33 +31 +29 +29 +27 +25 +24 +22 +21 +19 +18 +17 +16 +15 +14 +6 +-12 +-25 +-36 +-44 +-49 +-52 +-54 +-55 +-55 +-54 +-53 +-52 +-50 +-48 +-46 +-35 +-12 +3 +15 +23 +29 +33 +36 +38 +39 +40 +40 +39 +38 +36 +35 +28 +8 +-8 +-19 +-28 +-34 +-39 +-42 +-44 +-44 +-44 +-43 +-42 +-40 +-38 +-36 +-26 +-4 +10 +21 +28 +34 +36 +39 +40 +41 +40 +40 +39 +38 +36 +34 +26 +7 +-9 +-20 +-28 +-35 +-39 +-42 +-44 +-45 +-45 +-44 +-43 +-42 +-40 +-39 +-28 +-6 +10 +21 +29 +35 +39 +41 +42 +43 +42 +41 +39 +38 +36 +35 +27 +7 +-8 +-19 +-27 +-33 +-37 +-40 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-37 +-25 +-4 +11 +22 +30 +35 +38 +40 +43 +43 +43 +43 +42 +41 +38 +36 +28 +8 +-7 +-19 +-27 +-34 +-38 +-41 +-42 +-43 +-42 +-42 +-41 +-39 +-38 +-36 +-25 +-3 +12 +24 +31 +35 +38 +41 +41 +42 +42 +41 +40 +39 +37 +36 +28 +9 +-6 +-17 +-26 +-32 +-37 +-40 +-41 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +11 +22 +30 +36 +40 +42 +44 +45 +45 +43 +42 +41 +39 +37 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-42 +-42 +-41 +-40 +-38 +-36 +-34 +-24 +-2 +13 +24 +31 +36 +39 +42 +43 +43 +43 +43 +41 +40 +38 +37 +29 +9 +-6 +-17 +-26 +-33 +-37 +-40 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-37 +-26 +-4 +11 +22 +31 +37 +39 +41 +42 +42 +43 +42 +40 +38 +36 +35 +27 +7 +-8 +-19 +-27 +-34 +-38 +-42 +-43 +-43 +-43 +-42 +-41 +-40 +-38 +-37 +-27 +-5 +10 +21 +29 +35 +38 +41 +43 +43 +43 +42 +41 +40 +39 +38 +30 +10 +-6 +-18 +-27 +-32 +-37 +-40 +-41 +-42 +-41 +-41 +-39 +-38 +-36 +-35 +-24 +-2 +14 +25 +32 +38 +42 +43 +44 +44 +43 +42 +41 +41 +38 +37 +29 +9 +-6 +-17 +-26 +-32 +-35 +-38 +-40 +-41 +-42 +-42 +-41 +-39 +-38 +-36 +-35 +-33 +-32 +-30 +-28 +-27 +-25 +-23 +-22 +-20 +-18 +-17 +-16 +-16 +-15 +-15 +-5 +15 +29 +40 +47 +51 +54 +56 +56 +55 +54 +54 +52 +51 +49 +47 +37 +18 +1 +-11 +-20 +-27 +-32 +-34 +-36 +-37 +-38 +-37 +-36 +-35 +-34 +-32 +-22 +0 +15 +26 +33 +39 +42 +44 +45 +45 +44 +43 +42 +40 +39 +37 +35 +34 +33 +31 +29 +28 +25 +24 +22 +20 +19 +18 +16 +15 +14 +13 +5 +-14 +-28 +-39 +-46 +-51 +-55 +-56 +-57 +-55 +-54 +-53 +-52 +-51 +-48 +-47 +-36 +-14 +1 +13 +22 +28 +32 +35 +37 +38 +38 +38 +37 +37 +36 +35 +27 +8 +-9 +-20 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-40 +-38 +-36 +-25 +-3 +12 +24 +31 +36 +39 +42 +43 +43 +42 +42 +41 +40 +38 +37 +29 +9 +-6 +-18 +-27 +-33 +-37 +-39 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-34 +-32 +-30 +-28 +-27 +-25 +-23 +-22 +-20 +-18 +-16 +-16 +-15 +-15 +-14 +-4 +16 +30 +40 +47 +51 +54 +55 +55 +55 +54 +53 +51 +50 +48 +47 +44 +43 +40 +37 +34 +32 +30 +29 +26 +25 +23 +22 +20 +20 +18 +17 +10 +-9 +-24 +-34 +-41 +-48 +-51 +-54 +-55 +-54 +-54 +-53 +-51 +-49 +-47 +-45 +-33 +-11 +4 +17 +25 +32 +35 +37 +39 +39 +39 +38 +37 +36 +34 +33 +26 +6 +-10 +-21 +-30 +-36 +-40 +-43 +-44 +-44 +-44 +-43 +-43 +-42 +-41 +-39 +-37 +-35 +-34 +-32 +-30 +-27 +-26 +-23 +-22 +-21 +-19 +-18 +-17 +-15 +-14 +-13 +-4 +17 +30 +40 +47 +51 +53 +55 +56 +57 +55 +53 +51 +49 +47 +46 +44 +42 +39 +37 +35 +33 +31 +29 +27 +25 +23 +22 +21 +20 +19 +18 +10 +-9 +-24 +-34 +-42 +-47 +-50 +-52 +-53 +-54 +-53 +-53 +-51 +-49 +-47 +-45 +-33 +-12 +4 +16 +25 +31 +35 +37 +39 +40 +40 +40 +38 +37 +35 +34 +26 +7 +-9 +-20 +-28 +-34 +-39 +-41 +-42 +-42 +-42 +-41 +-41 +-39 +-38 +-36 +-27 +-5 +11 +21 +28 +34 +37 +40 +41 +42 +41 +40 +39 +39 +38 +36 +28 +9 +-6 +-18 +-27 +-33 +-38 +-40 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-25 +-3 +12 +25 +32 +38 +41 +43 +44 +43 +43 +42 +41 +39 +38 +36 +29 +9 +-6 +-18 +-26 +-32 +-36 +-38 +-41 +-41 +-42 +-42 +-41 +-40 +-39 +-37 +-36 +-34 +-32 +-29 +-28 +-26 +-25 +-23 +-22 +-20 +-19 +-18 +-17 +-17 +-15 +-15 +-5 +16 +30 +40 +47 +52 +54 +55 +56 +55 +55 +53 +52 +50 +48 +45 +37 +16 +1 +-11 +-20 +-28 +-32 +-35 +-37 +-38 +-38 +-37 +-37 +-35 +-34 +-33 +-22 +0 +14 +25 +32 +38 +40 +42 +43 +43 +42 +42 +41 +39 +38 +36 +28 +8 +-7 +-18 +-26 +-32 +-36 +-39 +-41 +-42 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +11 +22 +30 +36 +39 +43 +44 +45 +44 +44 +43 +41 +39 +37 +35 +34 +32 +31 +29 +28 +26 +25 +23 +23 +21 +20 +20 +19 +17 +17 +8 +-11 +-26 +-36 +-44 +-49 +-51 +-53 +-55 +-54 +-54 +-52 +-50 +-48 +-46 +-44 +-33 +-11 +5 +17 +25 +30 +34 +37 +38 +38 +37 +38 +37 +36 +35 +34 +25 +6 +-9 +-20 +-28 +-34 +-38 +-42 +-44 +-44 +-44 +-44 +-43 +-42 +-40 +-39 +-37 +-35 +-33 +-30 +-28 +-27 +-25 +-23 +-21 +-20 +-18 +-17 +-16 +-15 +-14 +-14 +-4 +17 +31 +40 +47 +52 +55 +56 +56 +56 +55 +53 +51 +50 +47 +45 +43 +41 +38 +36 +34 +32 +30 +28 +27 +25 +23 +22 +21 +20 +19 +19 +11 +-8 +-23 +-34 +-42 +-47 +-51 +-53 +-54 +-54 +-53 +-52 +-50 +-48 +-46 +-43 +-32 +-10 +5 +17 +25 +31 +35 +37 +38 +39 +38 +38 +36 +36 +34 +33 +25 +6 +-9 +-20 +-29 +-35 +-39 +-42 +-45 +-45 +-46 +-45 +-45 +-43 +-41 +-38 +-28 +-6 +9 +20 +27 +34 +38 +41 +42 +42 +42 +42 +40 +39 +37 +36 +27 +8 +-7 +-19 +-27 +-33 +-38 +-40 +-41 +-41 +-41 +-40 +-39 +-38 +-36 +-35 +-25 +-3 +12 +23 +31 +37 +40 +43 +44 +45 +45 +44 +43 +42 +41 +39 +31 +11 +-5 +-17 +-26 +-32 +-36 +-40 +-41 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-24 +-3 +12 +23 +31 +36 +40 +42 +42 +42 +42 +40 +39 +38 +37 +34 +26 +7 +-9 +-20 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-43 +-43 +-41 +-40 +-39 +-28 +-6 +9 +20 +29 +34 +37 +40 +42 +42 +42 +41 +40 +39 +37 +37 +28 +7 +-9 +-20 +-29 +-35 +-39 +-42 +-44 +-44 +-43 +-42 +-41 +-39 +-37 +-36 +-25 +-3 +12 +22 +30 +35 +38 +41 +42 +42 +43 +42 +41 +40 +39 +38 +29 +10 +-5 +-17 +-25 +-31 +-36 +-39 +-41 +-42 +-42 +-42 +-41 +-40 +-38 +-36 +-26 +-3 +12 +23 +31 +37 +40 +43 +44 +44 +43 +44 +41 +40 +38 +36 +29 +9 +-7 +-19 +-27 +-34 +-37 +-40 +-41 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-35 +-34 +-31 +-30 +-27 +-26 +-25 +-24 +-21 +-20 +-19 +-18 +-16 +-15 +-14 +-13 +-3 +17 +32 +41 +48 +52 +54 +56 +56 +57 +55 +53 +52 +49 +47 +46 +37 +17 +2 +-10 +-19 +-26 +-31 +-35 +-37 +-38 +-38 +-38 +-37 +-36 +-35 +-34 +-23 +-2 +13 +24 +32 +38 +42 +43 +45 +45 +44 +43 +43 +41 +39 +37 +29 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-40 +-40 +-39 +-39 +-38 +-37 +-36 +-34 +-23 +-3 +12 +23 +31 +36 +39 +42 +43 +43 +44 +43 +43 +41 +39 +37 +29 +9 +-6 +-18 +-27 +-34 +-38 +-41 +-42 +-42 +-42 +-42 +-41 +-39 +-37 +-36 +-25 +-4 +11 +23 +30 +35 +38 +42 +42 +42 +41 +41 +39 +38 +37 +35 +27 +8 +-8 +-19 +-27 +-33 +-37 +-40 +-42 +-43 +-42 +-42 +-41 +-41 +-39 +-37 +-26 +-4 +11 +22 +29 +35 +39 +42 +44 +44 +44 +44 +43 +41 +39 +37 +29 +9 +-7 +-18 +-26 +-32 +-37 +-39 +-41 +-41 +-41 +-40 +-40 +-38 +-37 +-36 +-26 +-5 +10 +21 +29 +35 +39 +41 +42 +43 +43 +42 +41 +40 +38 +36 +28 +8 +-7 +-19 +-28 +-34 +-38 +-42 +-43 +-44 +-44 +-43 +-42 +-41 +-39 +-37 +-26 +-4 +11 +22 +30 +36 +39 +41 +41 +42 +40 +40 +39 +38 +36 +35 +26 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-41 +-41 +-40 +-39 +-38 +-36 +-25 +-3 +12 +23 +31 +37 +40 +43 +45 +45 +45 +44 +43 +42 +40 +38 +30 +10 +-5 +-16 +-25 +-31 +-36 +-38 +-40 +-40 +-41 +-40 +-39 +-38 +-36 +-35 +-25 +-3 +11 +22 +30 +35 +38 +40 +42 +42 +42 +41 +40 +38 +37 +35 +34 +33 +31 +30 +28 +25 +23 +22 +20 +19 +18 +17 +15 +14 +13 +12 +6 +-13 +-28 +-38 +-45 +-51 +-54 +-56 +-56 +-56 +-56 +-55 +-54 +-52 +-50 +-47 +-35 +-13 +2 +14 +22 +29 +33 +36 +38 +39 +39 +39 +37 +36 +35 +33 +25 +5 +-10 +-21 +-29 +-36 +-39 +-42 +-44 +-44 +-44 +-43 +-41 +-39 +-38 +-36 +-26 +-4 +10 +21 +29 +34 +38 +40 +42 +42 +42 +42 +41 +40 +39 +37 +29 +10 +-5 +-16 +-25 +-31 +-36 +-39 +-41 +-42 +-42 +-42 +-41 +-40 +-38 +-36 +-26 +-4 +11 +22 +30 +35 +38 +40 +41 +42 +42 +40 +38 +37 +36 +34 +26 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-39 +-37 +-26 +-5 +10 +21 +28 +34 +38 +41 +42 +42 +42 +42 +42 +40 +38 +37 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-41 +-41 +-39 +-38 +-36 +-34 +-24 +-2 +13 +24 +32 +36 +40 +42 +43 +43 +43 +42 +42 +40 +39 +37 +28 +8 +-6 +-18 +-26 +-33 +-37 +-41 +-42 +-43 +-44 +-43 +-43 +-41 +-39 +-38 +-27 +-5 +10 +21 +30 +36 +39 +42 +43 +44 +44 +43 +41 +39 +38 +36 +28 +9 +-7 +-18 +-27 +-32 +-37 +-40 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-36 +-26 +-5 +10 +21 +29 +34 +37 +40 +41 +41 +41 +40 +39 +38 +36 +35 +27 +8 +-8 +-20 +-28 +-35 +-40 +-43 +-44 +-45 +-44 +-44 +-43 +-41 +-40 +-38 +-36 +-34 +-32 +-30 +-28 +-27 +-25 +-23 +-22 +-21 +-19 +-18 +-16 +-16 +-14 +-13 +-4 +17 +31 +42 +48 +53 +55 +58 +58 +58 +56 +55 +53 +51 +48 +45 +43 +41 +39 +37 +34 +32 +30 +28 +27 +26 +24 +24 +23 +22 +20 +19 +11 +-9 +-24 +-35 +-42 +-47 +-50 +-52 +-53 +-53 +-52 +-50 +-48 +-46 +-44 +-41 +-39 +-36 +-34 +-32 +-31 +-29 +-27 +-25 +-24 +-22 +-21 +-19 +-18 +-17 +-16 +-14 +-4 +17 +31 +42 +48 +53 +55 +57 +57 +56 +55 +53 +51 +49 +47 +45 +42 +40 +39 +37 +35 +33 +31 +29 +27 +25 +23 +21 +20 +18 +17 +17 +9 +-10 +-24 +-35 +-42 +-47 +-50 +-53 +-53 +-53 +-51 +-50 +-48 +-47 +-45 +-43 +-41 +-39 +-37 +-35 +-33 +-31 +-29 +-27 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-5 +15 +28 +39 +46 +50 +52 +54 +54 +53 +53 +52 +50 +49 +47 +44 +42 +39 +36 +34 +32 +31 +29 +27 +25 +22 +21 +20 +19 +18 +17 +15 +8 +-11 +-25 +-35 +-43 +-48 +-52 +-54 +-55 +-55 +-54 +-53 +-52 +-50 +-48 +-46 +-43 +-41 +-39 +-37 +-34 +-31 +-29 +-28 +-25 +-24 +-24 +-22 +-21 +-19 +-18 +-17 +-6 +15 +29 +39 +47 +52 +54 +56 +57 +57 +55 +55 +53 +50 +47 +45 +42 +40 +37 +36 +34 +32 +30 +28 +27 +26 +24 +23 +21 +20 +19 +18 +10 +-8 +-22 +-33 +-41 +-46 +-50 +-52 +-53 +-54 +-53 +-51 +-50 +-47 +-45 +-42 +-40 +-38 +-36 +-34 +-32 +-30 +-28 +-27 +-26 +-24 +-23 +-22 +-21 +-20 +-19 +-18 +-7 +13 +27 +38 +45 +50 +52 +54 +54 +54 +52 +51 +48 +46 +43 +42 +39 +37 +34 +33 +30 +29 +27 +26 +24 +23 +22 +21 +19 +19 +17 +16 +8 +-12 +-26 +-36 +-44 +-49 +-52 +-54 +-55 +-55 +-54 +-52 +-51 +-48 +-46 +-43 +-40 +-38 +-37 +-35 +-33 +-31 +-29 +-27 +-25 +-23 +-21 +-19 +-18 +-17 +-15 +-13 +-3 +18 +32 +43 +49 +54 +57 +59 +58 +58 +56 +55 +53 +51 +49 +47 +39 +19 +4 +-8 +-17 +-24 +-29 +-32 +-34 +-35 +-35 +-35 +-35 +-34 +-33 +-32 +-21 +0 +15 +25 +34 +39 +43 +45 +46 +46 +46 +47 +45 +43 +41 +39 +31 +10 +-6 +-17 +-26 +-32 +-37 +-40 +-41 +-42 +-42 +-41 +-40 +-38 +-37 +-35 +-24 +-3 +11 +22 +30 +35 +37 +40 +40 +41 +41 +41 +39 +38 +37 +35 +28 +9 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-36 +-25 +-3 +12 +23 +31 +37 +40 +43 +44 +44 +43 +42 +40 +39 +37 +36 +28 +8 +-7 +-18 +-27 +-33 +-38 +-40 +-42 +-42 +-42 +-41 +-41 +-40 +-39 +-38 +-28 +-7 +8 +21 +29 +35 +38 +41 +42 +43 +42 +43 +41 +40 +38 +37 +28 +8 +-7 +-18 +-27 +-33 +-37 +-39 +-40 +-41 +-41 +-40 +-39 +-38 +-37 +-35 +-25 +-3 +12 +22 +30 +35 +39 +41 +41 +42 +41 +41 +40 +39 +38 +36 +28 +9 +-6 +-18 +-27 +-33 +-38 +-41 +-42 +-44 +-43 +-43 +-42 +-41 +-39 +-38 +-27 +-5 +10 +22 +30 +35 +38 +41 +42 +42 +41 +41 +41 +40 +37 +35 +27 +8 +-7 +-18 +-27 +-33 +-38 +-40 +-42 +-42 +-43 +-42 +-41 +-40 +-38 +-36 +-27 +-5 +10 +22 +30 +36 +39 +42 +43 +43 +42 +41 +39 +38 +37 +35 +27 +7 +-9 +-20 +-28 +-34 +-38 +-40 +-42 +-42 +-42 +-42 +-41 +-40 +-38 +-38 +-27 +-6 +10 +20 +29 +35 +39 +41 +42 +42 +43 +42 +41 +40 +38 +36 +35 +33 +31 +30 +28 +27 +25 +24 +22 +21 +20 +19 +18 +18 +17 +16 +8 +-11 +-26 +-36 +-45 +-50 +-53 +-55 +-56 +-55 +-54 +-53 +-51 +-49 +-47 +-45 +-34 +-12 +4 +15 +23 +29 +32 +35 +36 +37 +37 +36 +36 +35 +33 +32 +25 +5 +-9 +-21 +-29 +-35 +-38 +-42 +-44 +-44 +-44 +-43 +-43 +-41 +-40 +-38 +-28 +-5 +10 +21 +29 +36 +39 +42 +43 +43 +43 +42 +39 +39 +37 +36 +28 +7 +-8 +-19 +-28 +-34 +-39 +-41 +-43 +-43 +-43 +-42 +-42 +-40 +-39 +-38 +-27 +-5 +10 +20 +28 +33 +38 +40 +42 +42 +42 +42 +42 +41 +40 +38 +30 +10 +-5 +-17 +-25 +-31 +-36 +-38 +-40 +-41 +-40 +-40 +-39 +-38 +-36 +-35 +-24 +-2 +14 +25 +32 +38 +41 +43 +44 +44 +43 +43 +41 +40 +38 +37 +28 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-41 +-41 +-42 +-41 +-41 +-40 +-38 +-36 +-26 +-4 +11 +22 +30 +36 +39 +42 +44 +45 +45 +43 +43 +41 +40 +38 +30 +9 +-6 +-17 +-25 +-32 +-36 +-39 +-39 +-40 +-40 +-39 +-38 +-37 +-36 +-35 +-25 +-4 +11 +22 +29 +34 +38 +39 +41 +41 +41 +41 +40 +39 +37 +36 +28 +7 +-8 +-20 +-29 +-35 +-39 +-42 +-43 +-44 +-44 +-43 +-42 +-39 +-37 +-35 +-25 +-3 +11 +22 +29 +34 +39 +42 +42 +43 +42 +42 +41 +40 +39 +38 +29 +9 +-6 +-18 +-27 +-33 +-38 +-40 +-42 +-43 +-42 +-42 +-41 +-40 +-39 +-36 +-26 +-4 +10 +22 +29 +35 +38 +40 +40 +41 +40 +40 +39 +38 +36 +35 +26 +7 +-9 +-20 +-28 +-34 +-38 +-41 +-42 +-44 +-44 +-43 +-42 +-41 +-39 +-38 +-36 +-34 +-32 +-30 +-28 +-25 +-24 +-22 +-20 +-18 +-17 +-17 +-17 +-16 +-15 +-14 +-4 +17 +30 +41 +49 +53 +55 +57 +57 +57 +56 +55 +53 +51 +48 +46 +44 +42 +39 +37 +35 +33 +31 +30 +28 +26 +25 +23 +21 +20 +19 +18 +10 +-9 +-24 +-35 +-43 +-49 +-52 +-54 +-54 +-54 +-53 +-51 +-49 +-47 +-45 +-43 +-32 +-10 +5 +16 +24 +29 +33 +37 +39 +40 +40 +40 +39 +38 +37 +35 +27 +8 +-7 +-19 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-40 +-39 +-37 +-35 +-24 +-2 +13 +24 +32 +37 +40 +43 +44 +44 +43 +43 +42 +41 +39 +37 +29 +9 +-6 +-17 +-27 +-33 +-37 +-40 +-43 +-44 +-44 +-44 +-43 +-42 +-40 +-38 +-36 +-35 +-33 +-31 +-30 +-28 +-25 +-24 +-22 +-21 +-20 +-18 +-17 +-16 +-15 +-14 +-4 +17 +31 +41 +47 +52 +55 +57 +57 +57 +56 +55 +52 +50 +48 +46 +43 +40 +38 +36 +34 +32 +30 +28 +27 +25 +23 +21 +20 +19 +19 +18 +9 +-10 +-25 +-35 +-43 +-49 +-52 +-54 +-55 +-55 +-54 +-53 +-51 +-48 +-45 +-43 +-32 +-10 +5 +17 +25 +31 +34 +37 +37 +38 +38 +38 +37 +36 +34 +33 +25 +6 +-9 +-21 +-29 +-35 +-39 +-43 +-44 +-45 +-45 +-44 +-43 +-42 +-40 +-39 +-37 +-35 +-33 +-32 +-30 +-27 +-25 +-23 +-22 +-20 +-20 +-19 +-18 +-17 +-16 +-15 +-5 +15 +29 +39 +46 +51 +54 +56 +58 +57 +56 +55 +53 +51 +48 +46 +36 +16 +0 +-12 +-22 +-28 +-33 +-35 +-37 +-38 +-38 +-37 +-36 +-35 +-34 +-31 +-21 +0 +15 +25 +32 +37 +41 +43 +44 +44 +44 +43 +42 +41 +39 +38 +36 +35 +33 +32 +29 +29 +28 +25 +22 +21 +19 +18 +17 +16 +14 +14 +6 +-13 +-28 +-38 +-45 +-49 +-52 +-54 +-54 +-54 +-53 +-51 +-50 +-48 +-46 +-45 +-43 +-40 +-38 +-36 +-34 +-31 +-29 +-27 +-25 +-24 +-22 +-21 +-20 +-18 +-16 +-15 +-5 +16 +30 +39 +46 +51 +54 +55 +55 +55 +54 +53 +51 +50 +48 +46 +44 +42 +39 +38 +36 +34 +31 +30 +28 +25 +23 +22 +20 +19 +18 +17 +9 +-10 +-24 +-34 +-41 +-47 +-51 +-54 +-55 +-55 +-54 +-54 +-52 +-50 +-48 +-47 +-35 +-12 +3 +14 +23 +29 +33 +36 +38 +39 +39 +38 +38 +37 +35 +34 +25 +5 +-10 +-21 +-30 +-35 +-39 +-41 +-43 +-43 +-43 +-41 +-40 +-39 +-38 +-36 +-35 +-33 +-32 +-30 +-28 +-26 +-25 +-23 +-22 +-20 +-19 +-17 +-15 +-14 +-13 +-12 +-2 +18 +32 +41 +48 +52 +54 +56 +56 +55 +54 +53 +51 +48 +46 +44 +42 +41 +38 +36 +34 +32 +31 +29 +28 +26 +24 +23 +22 +21 +20 +19 +11 +-8 +-22 +-33 +-41 +-46 +-49 +-51 +-52 +-52 +-52 +-51 +-49 +-48 +-46 +-45 +-34 +-13 +3 +15 +23 +29 +33 +36 +37 +38 +38 +38 +37 +35 +34 +32 +24 +4 +-10 +-22 +-30 +-37 +-41 +-44 +-44 +-45 +-44 +-43 +-42 +-41 +-39 +-37 +-35 +-33 +-31 +-30 +-29 +-27 +-25 +-24 +-23 +-21 +-19 +-18 +-16 +-15 +-13 +-12 +-2 +19 +33 +44 +50 +54 +57 +58 +58 +57 +55 +54 +52 +50 +48 +46 +44 +42 +39 +38 +36 +34 +32 +30 +28 +26 +24 +23 +21 +20 +19 +17 +9 +-9 +-23 +-34 +-42 +-47 +-51 +-52 +-54 +-53 +-52 +-51 +-50 +-48 +-47 +-44 +-42 +-40 +-38 +-36 +-34 +-32 +-30 +-28 +-25 +-24 +-22 +-21 +-20 +-18 +-17 +-17 +-6 +13 +27 +37 +45 +50 +52 +54 +55 +54 +53 +52 +50 +48 +47 +44 +36 +15 +-1 +-13 +-22 +-28 +-33 +-36 +-38 +-39 +-39 +-38 +-38 +-36 +-35 +-33 +-23 +-2 +13 +24 +32 +37 +40 +41 +42 +43 +43 +42 +41 +40 +39 +37 +29 +9 +-6 +-17 +-25 +-32 +-37 +-40 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +12 +23 +31 +37 +40 +43 +44 +44 +43 +43 +41 +40 +38 +37 +28 +9 +-6 +-17 +-27 +-33 +-37 +-39 +-40 +-41 +-40 +-39 +-39 +-38 +-36 +-35 +-25 +-3 +12 +23 +31 +37 +41 +43 +44 +45 +46 +45 +44 +42 +40 +38 +29 +10 +-5 +-17 +-25 +-32 +-36 +-39 +-41 +-41 +-41 +-41 +-39 +-38 +-37 +-35 +-25 +-4 +11 +22 +30 +35 +38 +41 +42 +43 +42 +41 +40 +39 +37 +36 +28 +8 +-7 +-19 +-27 +-34 +-38 +-42 +-44 +-45 +-44 +-43 +-43 +-41 +-40 +-38 +-28 +-6 +9 +21 +29 +34 +38 +40 +41 +41 +41 +40 +39 +38 +37 +35 +27 +8 +-7 +-18 +-27 +-33 +-37 +-39 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-27 +-5 +10 +21 +29 +35 +38 +41 +43 +44 +43 +43 +41 +40 +38 +37 +28 +8 +-7 +-19 +-27 +-32 +-37 +-39 +-40 +-41 +-41 +-39 +-38 +-37 +-35 +-33 +-23 +-2 +12 +22 +31 +36 +40 +42 +43 +43 +43 +42 +41 +40 +39 +38 +30 +10 +-5 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +11 +22 +30 +35 +39 +41 +41 +42 +41 +41 +39 +38 +36 +35 +33 +32 +30 +28 +26 +25 +24 +22 +21 +20 +18 +17 +16 +15 +14 +13 +6 +-13 +-28 +-38 +-45 +-50 +-53 +-56 +-56 +-56 +-54 +-53 +-51 +-48 +-46 +-44 +-33 +-11 +4 +17 +25 +30 +34 +37 +38 +40 +40 +40 +39 +38 +37 +36 +28 +8 +-7 +-19 +-27 +-33 +-38 +-41 +-43 +-43 +-42 +-41 +-40 +-39 +-37 +-35 +-25 +-3 +11 +23 +31 +37 +40 +41 +41 +42 +41 +41 +39 +38 +36 +35 +27 +8 +-7 +-18 +-27 +-33 +-39 +-42 +-43 +-44 +-44 +-44 +-43 +-42 +-40 +-38 +-27 +-5 +10 +21 +29 +35 +37 +40 +41 +41 +41 +40 +39 +37 +36 +34 +26 +6 +-9 +-20 +-29 +-35 +-39 +-41 +-42 +-43 +-43 +-43 +-42 +-42 +-40 +-38 +-27 +-5 +9 +21 +29 +35 +38 +41 +42 +43 +43 +42 +41 +40 +39 +37 +28 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-40 +-38 +-35 +-34 +-24 +-3 +12 +23 +30 +36 +39 +41 +43 +43 +43 +42 +42 +40 +39 +37 +29 +10 +-5 +-16 +-25 +-31 +-36 +-39 +-41 +-41 +-41 +-41 +-40 +-38 +-37 +-35 +-25 +-2 +13 +25 +32 +38 +42 +44 +45 +45 +45 +43 +42 +41 +39 +38 +29 +10 +-6 +-18 +-26 +-31 +-36 +-38 +-39 +-41 +-41 +-42 +-41 +-39 +-38 +-36 +-26 +-5 +10 +21 +29 +35 +39 +42 +43 +43 +43 +42 +41 +40 +38 +36 +28 +8 +-8 +-19 +-28 +-34 +-38 +-40 +-43 +-43 +-43 +-42 +-41 +-38 +-38 +-36 +-27 +-5 +10 +21 +29 +34 +38 +40 +41 +41 +42 +40 +39 +38 +37 +36 +28 +9 +-7 +-18 +-27 +-33 +-38 +-40 +-42 +-43 +-43 +-42 +-42 +-40 +-38 +-36 +-35 +-33 +-31 +-29 +-27 +-24 +-23 +-21 +-20 +-19 +-19 +-18 +-17 +-16 +-15 +-14 +-4 +16 +31 +40 +48 +52 +55 +56 +56 +56 +55 +54 +52 +49 +47 +45 +36 +16 +0 +-12 +-21 +-27 +-32 +-35 +-36 +-36 +-36 +-36 +-35 +-34 +-33 +-32 +-22 +-1 +14 +25 +32 +38 +41 +43 +45 +46 +45 +45 +44 +42 +41 +40 +31 +11 +-4 +-16 +-25 +-31 +-35 +-37 +-39 +-40 +-40 +-39 +-38 +-37 +-36 +-34 +-24 +-2 +12 +22 +30 +35 +38 +40 +41 +42 +42 +40 +38 +38 +36 +35 +26 +7 +-8 +-20 +-28 +-34 +-38 +-42 +-44 +-45 +-45 +-44 +-44 +-42 +-40 +-37 +-27 +-6 +9 +22 +29 +35 +39 +42 +42 +43 +43 +43 +42 +40 +39 +38 +30 +10 +-5 +-17 +-25 +-31 +-35 +-38 +-39 +-39 +-39 +-38 +-38 +-37 +-35 +-34 +-24 +-2 +13 +24 +32 +37 +41 +43 +44 +45 +45 +44 +42 +41 +39 +37 +29 +8 +-8 +-20 +-28 +-35 +-40 +-43 +-44 +-44 +-44 +-43 +-43 +-41 +-39 +-38 +-27 +-5 +10 +21 +28 +34 +37 +40 +41 +40 +40 +40 +38 +38 +36 +36 +28 +8 +-7 +-18 +-26 +-32 +-36 +-39 +-41 +-41 +-41 +-40 +-39 +-38 +-36 +-34 +-24 +-3 +14 +25 +32 +36 +40 +43 +44 +45 +45 +45 +43 +42 +40 +38 +29 +10 +-6 +-18 +-27 +-33 +-37 +-41 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +10 +22 +29 +35 +38 +40 +41 +40 +40 +40 +39 +38 +37 +36 +27 +8 +-7 +-18 +-27 +-33 +-38 +-40 +-42 +-42 +-43 +-42 +-41 +-40 +-38 +-36 +-26 +-4 +11 +23 +30 +36 +39 +42 +43 +44 +43 +42 +41 +40 +38 +37 +35 +33 +31 +29 +27 +25 +23 +22 +20 +20 +19 +18 +17 +16 +14 +14 +6 +-13 +-28 +-38 +-46 +-52 +-55 +-57 +-58 +-58 +-56 +-55 +-53 +-51 +-49 +-46 +-34 +-12 +3 +14 +23 +29 +33 +35 +36 +37 +37 +37 +36 +35 +34 +33 +25 +5 +-10 +-21 +-29 +-35 +-39 +-42 +-43 +-44 +-44 +-43 +-42 +-40 +-39 +-37 +-26 +-5 +10 +21 +29 +36 +39 +42 +43 +44 +44 +43 +41 +39 +38 +36 +27 +7 +-8 +-19 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-42 +-40 +-39 +-37 +-26 +-4 +10 +22 +29 +35 +38 +41 +43 +44 +43 +42 +41 +40 +38 +37 +29 +10 +-5 +-16 +-25 +-31 +-36 +-38 +-40 +-41 +-41 +-41 +-39 +-39 +-37 +-35 +-24 +-3 +12 +23 +31 +37 +40 +43 +44 +44 +44 +43 +41 +40 +38 +36 +28 +8 +-7 +-19 +-28 +-33 +-36 +-39 +-40 +-41 +-41 +-41 +-40 +-39 +-38 +-36 +-25 +-4 +10 +21 +29 +35 +38 +41 +42 +43 +42 +42 +41 +41 +39 +38 +29 +8 +-7 +-19 +-28 +-34 +-39 +-41 +-43 +-44 +-44 +-43 +-42 +-40 +-38 +-37 +-26 +-5 +10 +20 +28 +33 +37 +39 +39 +40 +39 +39 +38 +37 +35 +34 +26 +7 +-8 +-19 +-28 +-33 +-37 +-41 +-43 +-43 +-43 +-43 +-42 +-40 +-39 +-37 +-26 +-4 +10 +22 +30 +36 +39 +42 +43 +44 +43 +42 +41 +40 +37 +36 +28 +9 +-7 +-18 +-27 +-33 +-38 +-40 +-41 +-41 +-41 +-40 +-40 +-39 +-38 +-37 +-26 +-4 +11 +22 +30 +35 +38 +41 +42 +42 +42 +42 +40 +39 +37 +36 +28 +9 +-7 +-19 +-27 +-33 +-38 +-39 +-42 +-42 +-42 +-41 +-40 +-38 +-36 +-34 +-24 +-3 +12 +22 +30 +35 +39 +41 +42 +42 +42 +42 +40 +40 +38 +36 +29 +9 +-5 +-17 +-26 +-33 +-37 +-40 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-37 +-27 +-5 +10 +22 +30 +36 +40 +43 +44 +45 +44 +43 +42 +41 +39 +39 +30 +10 +-6 +-17 +-25 +-31 +-36 +-39 +-40 +-40 +-40 +-39 +-38 +-37 +-36 +-35 +-33 +-32 +-31 +-29 +-28 +-26 +-25 +-24 +-22 +-21 +-19 +-18 +-17 +-16 +-14 +-13 +-3 +18 +32 +41 +48 +53 +54 +56 +56 +56 +54 +53 +51 +50 +48 +46 +37 +17 +1 +-11 +-20 +-26 +-32 +-35 +-38 +-39 +-39 +-39 +-38 +-37 +-35 +-34 +-23 +-2 +13 +24 +32 +37 +40 +43 +43 +44 +43 +43 +41 +40 +38 +37 +35 +34 +32 +31 +29 +27 +26 +24 +23 +23 +21 +20 +18 +17 +16 +15 +6 +-13 +-28 +-38 +-46 +-51 +-54 +-56 +-57 +-55 +-55 +-53 +-52 +-50 +-48 +-45 +-34 +-12 +3 +15 +23 +29 +33 +36 +38 +39 +39 +39 +38 +37 +37 +36 +28 +9 +-6 +-17 +-26 +-31 +-36 +-39 +-41 +-41 +-41 +-41 +-40 +-39 +-37 +-35 +-25 +-3 +12 +24 +32 +38 +40 +42 +43 +44 +43 +42 +41 +39 +38 +37 +28 +8 +-7 +-18 +-27 +-33 +-38 +-40 +-41 +-42 +-42 +-42 +-41 +-38 +-38 +-37 +-36 +-35 +-33 +-31 +-29 +-28 +-26 +-24 +-23 +-21 +-20 +-19 +-17 +-16 +-15 +-13 +-4 +17 +30 +40 +47 +51 +54 +56 +56 +56 +55 +54 +52 +50 +48 +46 +44 +42 +39 +38 +36 +34 +31 +30 +27 +26 +24 +23 +22 +21 +19 +18 +10 +-8 +-22 +-33 +-41 +-46 +-50 +-51 +-52 +-53 +-53 +-52 +-50 +-49 +-46 +-45 +-33 +-11 +4 +16 +25 +31 +35 +37 +38 +40 +39 +39 +37 +36 +35 +33 +25 +5 +-10 +-21 +-29 +-35 +-40 +-42 +-44 +-44 +-43 +-43 +-41 +-40 +-39 +-38 +-36 +-34 +-33 +-30 +-29 +-27 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-13 +-12 +-3 +18 +32 +42 +49 +52 +55 +56 +56 +56 +55 +53 +52 +50 +48 +46 +44 +42 +39 +37 +34 +33 +31 +29 +27 +25 +22 +21 +20 +18 +17 +16 +8 +-11 +-25 +-36 +-43 +-48 +-52 +-53 +-54 +-54 +-54 +-52 +-52 +-49 +-47 +-44 +-34 +-12 +4 +15 +23 +30 +33 +36 +37 +39 +39 +39 +38 +37 +36 +33 +25 +5 +-10 +-21 +-29 +-36 +-39 +-42 +-43 +-44 +-44 +-43 +-41 +-40 +-38 +-37 +-27 +-6 +9 +20 +27 +33 +36 +38 +39 +40 +40 +39 +39 +38 +37 +35 +28 +7 +-8 +-20 +-28 +-35 +-38 +-41 +-43 +-43 +-43 +-43 +-41 +-40 +-38 +-36 +-26 +-5 +10 +22 +30 +35 +38 +40 +42 +42 +41 +42 +40 +39 +37 +36 +28 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-41 +-41 +-42 +-41 +-41 +-39 +-38 +-36 +-35 +-33 +-31 +-29 +-27 +-25 +-23 +-22 +-21 +-20 +-19 +-17 +-16 +-15 +-14 +-13 +-4 +17 +31 +42 +49 +54 +56 +58 +58 +59 +57 +56 +54 +51 +49 +46 +38 +17 +1 +-11 +-20 +-27 +-31 +-33 +-36 +-36 +-37 +-36 +-36 +-35 +-34 +-33 +-23 +-2 +13 +24 +31 +37 +39 +42 +43 +44 +44 +44 +42 +41 +39 +38 +29 +9 +-6 +-18 +-27 +-33 +-38 +-40 +-42 +-43 +-43 +-41 +-40 +-39 +-37 +-35 +-25 +-3 +13 +24 +31 +37 +39 +42 +42 +43 +42 +42 +41 +39 +38 +37 +34 +33 +31 +30 +29 +27 +25 +24 +23 +21 +20 +18 +18 +17 +15 +15 +7 +-11 +-25 +-35 +-43 +-48 +-50 +-53 +-54 +-53 +-53 +-52 +-50 +-49 +-47 +-45 +-34 +-12 +3 +15 +24 +30 +33 +36 +38 +39 +39 +38 +36 +35 +34 +32 +24 +4 +-11 +-22 +-30 +-36 +-40 +-43 +-44 +-44 +-43 +-42 +-41 +-41 +-39 +-37 +-35 +-34 +-32 +-31 +-29 +-27 +-26 +-24 +-22 +-20 +-18 +-16 +-15 +-15 +-14 +-13 +-3 +17 +30 +40 +48 +52 +54 +56 +56 +56 +54 +53 +51 +49 +47 +45 +42 +40 +38 +36 +33 +32 +30 +28 +26 +24 +23 +22 +21 +20 +19 +18 +11 +-8 +-22 +-33 +-41 +-47 +-51 +-54 +-54 +-55 +-54 +-53 +-51 +-48 +-46 +-43 +-32 +-10 +5 +18 +26 +32 +35 +38 +39 +40 +40 +39 +39 +38 +36 +36 +28 +7 +-7 +-19 +-27 +-33 +-37 +-40 +-42 +-42 +-42 +-43 +-42 +-41 +-39 +-37 +-26 +-4 +11 +22 +30 +35 +40 +42 +43 +44 +43 +43 +42 +40 +38 +36 +28 +9 +-7 +-18 +-26 +-32 +-36 +-39 +-41 +-41 +-41 +-40 +-39 +-38 +-36 +-35 +-25 +-4 +11 +22 +29 +34 +37 +40 +41 +42 +42 +42 +41 +40 +38 +36 +28 +8 +-7 +-18 +-28 +-35 +-39 +-42 +-43 +-44 +-44 +-43 +-42 +-40 +-38 +-36 +-25 +-4 +12 +23 +30 +35 +39 +41 +43 +43 +42 +42 +41 +40 +38 +36 +29 +8 +-6 +-18 +-26 +-32 +-37 +-40 +-42 +-43 +-44 +-44 +-43 +-41 +-39 +-38 +-28 +-6 +9 +21 +29 +35 +39 +41 +42 +43 +43 +42 +40 +39 +37 +36 +28 +9 +-7 +-19 +-27 +-33 +-37 +-39 +-40 +-41 +-41 +-41 +-39 +-39 +-38 +-36 +-26 +-5 +10 +21 +29 +35 +38 +41 +42 +43 +43 +43 +42 +40 +39 +38 +29 +9 +-6 +-18 +-27 +-33 +-38 +-40 +-41 +-42 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +10 +22 +30 +35 +38 +40 +41 +42 +41 +41 +40 +39 +37 +36 +27 +8 +-7 +-19 +-27 +-33 +-38 +-42 +-44 +-44 +-44 +-43 +-42 +-40 +-39 +-37 +-35 +-33 +-31 +-29 +-27 +-26 +-24 +-23 +-23 +-22 +-21 +-20 +-18 +-17 +-16 +-15 +-5 +16 +31 +41 +48 +53 +55 +57 +57 +57 +57 +55 +52 +51 +48 +46 +37 +17 +1 +-11 +-20 +-26 +-31 +-34 +-35 +-37 +-37 +-37 +-36 +-36 +-34 +-33 +-23 +-2 +13 +25 +33 +37 +41 +44 +44 +44 +43 +43 +42 +40 +39 +38 +30 +9 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-42 +-42 +-42 +-41 +-39 +-37 +-35 +-25 +-3 +12 +23 +30 +35 +39 +41 +42 +43 +42 +42 +40 +40 +38 +37 +29 +10 +-6 +-17 +-26 +-32 +-37 +-40 +-41 +-43 +-42 +-42 +-41 +-40 +-38 +-36 +-25 +-3 +12 +24 +31 +36 +39 +42 +42 +42 +42 +41 +40 +39 +37 +36 +28 +8 +-7 +-18 +-26 +-33 +-37 +-40 +-42 +-43 +-43 +-42 +-40 +-39 +-38 +-37 +-26 +-4 +10 +22 +30 +35 +39 +42 +43 +43 +43 +42 +40 +39 +37 +36 +27 +8 +-8 +-19 +-28 +-34 +-39 +-41 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-38 +-28 +-7 +8 +20 +28 +34 +38 +40 +41 +41 +41 +42 +41 +39 +38 +36 +28 +8 +-7 +-18 +-26 +-32 +-37 +-40 +-41 +-41 +-40 +-40 +-39 +-38 +-36 +-35 +-24 +-3 +12 +23 +30 +35 +38 +40 +42 +42 +42 +41 +41 +40 +39 +37 +29 +10 +-6 +-17 +-26 +-32 +-36 +-39 +-40 +-41 +-42 +-42 +-41 +-39 +-37 +-35 +-25 +-3 +12 +23 +32 +38 +41 +43 +43 +44 +43 +43 +42 +41 +39 +38 +29 +10 +-5 +-16 +-25 +-31 +-35 +-38 +-39 +-40 +-41 +-40 +-39 +-38 +-36 +-35 +-24 +-3 +13 +24 +32 +37 +41 +44 +45 +46 +45 +44 +44 +43 +40 +38 +36 +34 +32 +31 +29 +28 +26 +25 +23 +22 +22 +21 +19 +18 +16 +15 +7 +-12 +-27 +-38 +-46 +-51 +-54 +-56 +-57 +-56 +-56 +-54 +-52 +-50 +-47 +-45 +-34 +-12 +3 +15 +23 +29 +33 +36 +37 +38 +39 +38 +37 +36 +36 +34 +27 +7 +-7 +-19 +-28 +-34 +-38 +-42 +-43 +-44 +-44 +-43 +-42 +-41 +-40 +-39 +-28 +-5 +10 +21 +29 +35 +38 +41 +41 +42 +41 +40 +38 +37 +35 +34 +26 +7 +-9 +-21 +-29 +-35 +-39 +-41 +-43 +-44 +-44 +-44 +-43 +-42 +-40 +-39 +-28 +-6 +8 +20 +28 +34 +37 +40 +41 +42 +41 +41 +40 +38 +36 +34 +26 +6 +-9 +-20 +-28 +-33 +-38 +-41 +-42 +-42 +-42 +-41 +-39 +-37 +-36 +-35 +-25 +-4 +11 +22 +30 +36 +39 +41 +43 +43 +43 +42 +42 +41 +39 +38 +30 +10 +-6 +-17 +-27 +-33 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-36 +-26 +-4 +12 +23 +32 +36 +40 +42 +43 +43 +43 +42 +41 +39 +38 +37 +29 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-41 +-42 +-42 +-42 +-40 +-39 +-38 +-36 +-26 +-4 +12 +23 +31 +36 +41 +44 +44 +44 +44 +43 +41 +40 +38 +36 +28 +8 +-7 +-19 +-27 +-34 +-38 +-40 +-41 +-41 +-41 +-40 +-39 +-39 +-37 +-36 +-25 +-4 +12 +23 +31 +36 +39 +42 +43 +44 +44 +43 +41 +40 +38 +36 +28 +8 +-7 +-19 +-27 +-34 +-38 +-41 +-41 +-42 +-41 +-41 +-40 +-38 +-36 +-36 +-35 +-34 +-32 +-30 +-28 +-27 +-25 +-24 +-22 +-21 +-18 +-17 +-16 +-15 +-14 +-14 +-4 +16 +29 +40 +46 +51 +53 +54 +54 +55 +54 +53 +51 +49 +48 +46 +44 +42 +39 +37 +35 +33 +31 +29 +28 +26 +24 +22 +21 +21 +20 +19 +12 +-7 +-21 +-33 +-41 +-46 +-50 +-53 +-53 +-53 +-53 +-52 +-50 +-48 +-46 +-44 +-42 +-39 +-37 +-34 +-32 +-30 +-28 +-27 +-26 +-25 +-24 +-22 +-21 +-20 +-19 +-17 +-7 +14 +28 +38 +45 +50 +53 +55 +55 +54 +54 +52 +49 +47 +45 +43 +40 +38 +36 +34 +32 +30 +29 +27 +26 +25 +23 +21 +20 +19 +18 +18 +9 +-10 +-24 +-34 +-42 +-47 +-51 +-53 +-54 +-53 +-52 +-50 +-48 +-46 +-44 +-42 +-39 +-37 +-35 +-33 +-32 +-30 +-28 +-26 +-24 +-23 +-21 +-18 +-16 +-16 +-15 +-14 +-4 +17 +31 +42 +49 +54 +57 +57 +57 +57 +56 +54 +52 +50 +47 +45 +43 +41 +39 +37 +35 +33 +31 +29 +28 +26 +24 +22 +21 +19 +18 +17 +9 +-10 +-24 +-34 +-42 +-47 +-51 +-53 +-53 +-53 +-52 +-51 +-50 +-48 +-46 +-44 +-42 +-40 +-38 +-36 +-34 +-32 +-30 +-27 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-16 +-6 +14 +28 +37 +44 +49 +51 +53 +53 +53 +52 +51 +49 +47 +46 +43 +41 +38 +36 +34 +32 +30 +28 +27 +25 +23 +22 +21 +20 +18 +17 +16 +8 +-10 +-24 +-34 +-42 +-47 +-51 +-53 +-54 +-54 +-53 +-52 +-50 +-48 +-45 +-43 +-40 +-38 +-36 +-33 +-31 +-29 +-27 +-25 +-24 +-22 +-21 +-19 +-18 +-17 +-17 +-16 +-6 +16 +30 +40 +47 +52 +54 +56 +57 +57 +55 +53 +51 +49 +46 +44 +41 +39 +37 +35 +32 +32 +30 +28 +27 +25 +24 +23 +21 +20 +19 +18 +10 +-9 +-24 +-35 +-43 +-48 +-51 +-53 +-54 +-53 +-52 +-51 +-49 +-47 +-45 +-43 +-40 +-38 +-37 +-35 +-33 +-31 +-29 +-28 +-26 +-25 +-23 +-22 +-21 +-19 +-18 +-16 +-6 +15 +29 +39 +46 +50 +52 +53 +53 +53 +52 +50 +49 +47 +45 +43 +34 +14 +-2 +-14 +-22 +-29 +-33 +-36 +-39 +-40 +-40 +-40 +-39 +-37 +-37 +-35 +-24 +-2 +12 +23 +31 +37 +40 +43 +43 +44 +44 +43 +42 +40 +39 +37 +29 +9 +-6 +-17 +-26 +-32 +-36 +-38 +-39 +-40 +-40 +-39 +-38 +-37 +-36 +-35 +-25 +-3 +12 +23 +31 +36 +39 +42 +43 +43 +43 +42 +41 +40 +39 +37 +29 +9 +-6 +-18 +-28 +-34 +-38 +-41 +-43 +-43 +-42 +-41 +-41 +-40 +-38 +-36 +-25 +-4 +11 +22 +30 +35 +38 +39 +40 +41 +40 +40 +39 +38 +37 +35 +27 +8 +-7 +-19 +-27 +-33 +-37 +-40 +-42 +-42 +-42 +-41 +-41 +-40 +-38 +-37 +-26 +-4 +11 +22 +30 +36 +40 +42 +44 +45 +45 +44 +43 +42 +39 +37 +29 +9 +-6 +-18 +-27 +-34 +-38 +-40 +-41 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-25 +-4 +10 +21 +29 +34 +37 +39 +40 +41 +41 +41 +40 +39 +37 +36 +28 +9 +-7 +-18 +-27 +-34 +-38 +-41 +-43 +-43 +-43 +-43 +-42 +-39 +-38 +-36 +-25 +-3 +11 +23 +31 +36 +40 +42 +43 +44 +43 +42 +41 +39 +39 +37 +28 +8 +-7 +-18 +-26 +-32 +-36 +-39 +-41 +-42 +-42 +-41 +-41 +-40 +-39 +-38 +-27 +-6 +10 +21 +29 +35 +38 +41 +42 +43 +43 +42 +41 +40 +39 +37 +28 +8 +-6 +-18 +-26 +-33 +-37 +-40 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-35 +-25 +-3 +11 +22 +30 +36 +39 +42 +43 +44 +43 +43 +42 +41 +39 +38 +36 +34 +31 +29 +27 +26 +24 +21 +20 +18 +17 +16 +15 +14 +13 +13 +5 +-14 +-28 +-39 +-46 +-52 +-56 +-58 +-59 +-59 +-58 +-57 +-54 +-52 +-50 +-48 +-37 +-14 +2 +14 +22 +28 +32 +35 +36 +37 +37 +37 +36 +35 +34 +33 +25 +7 +-9 +-19 +-27 +-34 +-38 +-41 +-42 +-43 +-44 +-43 +-42 +-40 +-38 +-36 +-25 +-4 +12 +24 +31 +37 +40 +43 +44 +44 +43 +43 +42 +41 +39 +37 +29 +9 +-6 +-17 +-25 +-31 +-35 +-37 +-38 +-39 +-40 +-39 +-39 +-38 +-37 +-36 +-26 +-4 +10 +22 +30 +35 +39 +42 +43 +43 +43 +42 +41 +40 +38 +36 +28 +8 +-8 +-19 +-28 +-34 +-38 +-40 +-41 +-41 +-41 +-40 +-39 +-38 +-37 +-35 +-25 +-4 +11 +23 +30 +36 +39 +42 +43 +43 +43 +43 +42 +41 +40 +38 +30 +10 +-6 +-18 +-27 +-33 +-38 +-41 +-42 +-43 +-43 +-42 +-40 +-39 +-37 +-36 +-25 +-3 +11 +22 +30 +35 +39 +42 +43 +43 +42 +42 +41 +40 +39 +38 +30 +10 +-5 +-16 +-25 +-31 +-36 +-39 +-40 +-41 +-41 +-40 +-39 +-37 +-36 +-35 +-24 +-2 +13 +25 +32 +38 +42 +43 +44 +44 +43 +42 +40 +40 +39 +38 +29 +9 +-6 +-17 +-26 +-31 +-36 +-39 +-41 +-43 +-43 +-43 +-42 +-41 +-39 +-37 +-26 +-5 +10 +21 +29 +34 +38 +41 +42 +42 +42 +40 +39 +37 +36 +34 +25 +6 +-9 +-20 +-29 +-35 +-39 +-41 +-43 +-43 +-43 +-43 +-41 +-39 +-38 +-36 +-27 +-5 +9 +21 +28 +34 +38 +40 +41 +42 +42 +42 +42 +40 +38 +37 +29 +9 +-7 +-18 +-27 +-33 +-38 +-41 +-42 +-42 +-42 +-42 +-40 +-39 +-37 +-35 +-34 +-32 +-30 +-29 +-28 +-27 +-25 +-24 +-22 +-21 +-20 +-19 +-17 +-16 +-15 +-13 +-3 +17 +32 +42 +49 +53 +56 +57 +57 +57 +56 +54 +52 +50 +48 +46 +44 +42 +40 +38 +36 +34 +33 +31 +29 +28 +26 +24 +23 +21 +20 +19 +11 +-7 +-22 +-32 +-40 +-45 +-49 +-50 +-50 +-51 +-50 +-50 +-48 +-46 +-44 +-42 +-31 +-10 +5 +17 +26 +31 +35 +37 +39 +39 +39 +40 +38 +37 +36 +34 +25 +6 +-9 +-21 +-29 +-35 +-39 +-43 +-44 +-44 +-44 +-43 +-42 +-40 +-39 +-37 +-27 +-5 +10 +21 +29 +34 +37 +40 +41 +41 +41 +41 +39 +38 +37 +35 +27 +8 +-7 +-19 +-28 +-35 +-39 +-42 +-43 +-44 +-44 +-43 +-42 +-41 +-39 +-37 +-36 +-33 +-32 +-30 +-29 +-27 +-26 +-25 +-23 +-22 +-21 +-19 +-17 +-15 +-14 +-13 +-3 +18 +32 +42 +49 +54 +57 +59 +58 +57 +55 +53 +51 +49 +47 +45 +43 +41 +39 +37 +34 +33 +31 +29 +27 +26 +25 +24 +22 +21 +19 +17 +9 +-10 +-24 +-35 +-43 +-48 +-52 +-54 +-54 +-54 +-53 +-52 +-49 +-47 +-46 +-44 +-32 +-11 +4 +15 +23 +28 +32 +34 +35 +36 +36 +36 +37 +36 +34 +33 +25 +5 +-10 +-21 +-30 +-36 +-40 +-42 +-44 +-44 +-44 +-44 +-43 +-41 +-39 +-37 +-35 +-33 +-31 +-29 +-27 +-25 +-23 +-22 +-21 +-20 +-19 +-18 +-16 +-15 +-14 +-13 +-3 +17 +32 +42 +49 +54 +57 +58 +59 +58 +57 +56 +53 +51 +48 +46 +36 +17 +1 +-11 +-21 +-27 +-31 +-34 +-36 +-36 +-36 +-36 +-35 +-34 +-33 +-31 +-21 +0 +16 +26 +33 +38 +42 +43 +44 +45 +44 +44 +43 +42 +40 +38 +36 +34 +32 +30 +28 +26 +24 +22 +21 +20 +19 +18 +17 +15 +14 +13 +6 +-13 +-27 +-38 +-45 +-50 +-55 +-57 +-58 +-57 +-56 +-54 +-53 +-50 +-48 +-44 +-42 +-40 +-37 +-35 +-33 +-30 +-28 +-26 +-24 +-23 +-22 +-20 +-19 +-17 +-16 +-15 +-4 +16 +30 +41 +48 +52 +55 +57 +57 +56 +55 +54 +51 +49 +47 +45 +42 +40 +37 +36 +33 +32 +30 +29 +27 +25 +24 +23 +22 +21 +19 +18 +10 +-9 +-24 +-34 +-42 +-47 +-50 +-53 +-54 +-53 +-52 +-51 +-49 +-46 +-45 +-43 +-32 +-10 +5 +16 +24 +30 +33 +36 +38 +38 +38 +38 +37 +37 +35 +34 +26 +6 +-9 +-21 +-28 +-34 +-38 +-42 +-43 +-44 +-44 +-43 +-42 +-40 +-38 +-37 +-35 +-32 +-30 +-28 +-26 +-25 +-24 +-23 +-21 +-20 +-19 +-18 +-17 +-16 +-15 +-14 +-4 +16 +30 +41 +48 +52 +55 +57 +56 +56 +54 +54 +51 +49 +46 +44 +41 +40 +37 +35 +33 +31 +29 +28 +27 +25 +24 +23 +21 +19 +17 +16 +8 +-10 +-25 +-35 +-43 +-48 +-52 +-54 +-56 +-55 +-54 +-53 +-51 +-48 +-46 +-44 +-33 +-11 +4 +15 +23 +29 +34 +37 +38 +39 +39 +39 +38 +37 +36 +35 +27 +8 +-7 +-19 +-28 +-34 +-39 +-41 +-43 +-43 +-44 +-43 +-42 +-40 +-39 +-37 +-35 +-33 +-31 +-29 +-28 +-27 +-26 +-24 +-24 +-22 +-21 +-20 +-19 +-17 +-16 +-14 +-5 +16 +30 +41 +48 +53 +55 +57 +57 +56 +55 +54 +52 +49 +47 +45 +43 +42 +39 +37 +35 +33 +31 +30 +28 +26 +24 +22 +21 +19 +18 +17 +9 +-10 +-24 +-35 +-42 +-47 +-50 +-52 +-53 +-52 +-51 +-50 +-48 +-46 +-44 +-42 +-41 +-39 +-37 +-35 +-32 +-30 +-29 +-27 +-25 +-22 +-21 +-20 +-19 +-17 +-16 +-15 +-5 +16 +29 +39 +45 +50 +53 +54 +54 +54 +54 +52 +50 +49 +47 +44 +36 +16 +0 +-12 +-21 +-29 +-33 +-36 +-38 +-39 +-38 +-37 +-37 +-37 +-35 +-34 +-23 +-1 +14 +25 +32 +37 +40 +42 +43 +44 +43 +43 +42 +41 +39 +37 +29 +10 +-5 +-17 +-25 +-31 +-35 +-39 +-40 +-42 +-42 +-40 +-40 +-38 +-37 +-35 +-25 +-3 +12 +24 +31 +37 +41 +43 +44 +44 +43 +42 +41 +40 +39 +37 +29 +9 +-7 +-18 +-27 +-33 +-37 +-40 +-41 +-41 +-41 +-40 +-39 +-39 +-37 +-36 +-26 +-4 +10 +22 +30 +36 +40 +42 +44 +45 +44 +43 +42 +41 +39 +37 +29 +8 +-7 +-18 +-28 +-34 +-39 +-41 +-42 +-42 +-42 +-42 +-40 +-39 +-38 +-36 +-27 +-5 +9 +21 +29 +34 +38 +40 +42 +43 +43 +41 +40 +39 +38 +37 +28 +8 +-7 +-19 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-39 +-36 +-26 +-4 +11 +21 +29 +35 +38 +40 +41 +41 +40 +40 +39 +37 +36 +34 +27 +7 +-8 +-18 +-26 +-33 +-38 +-41 +-43 +-43 +-44 +-43 +-43 +-41 +-39 +-38 +-28 +-6 +9 +21 +29 +35 +39 +42 +43 +44 +43 +42 +40 +39 +37 +35 +27 +8 +-8 +-20 +-29 +-34 +-39 +-41 +-43 +-44 +-43 +-42 +-41 +-40 +-39 +-37 +-27 +-5 +10 +21 +28 +34 +37 +40 +41 +42 +43 +42 +41 +39 +38 +37 +29 +10 +-5 +-17 +-27 +-33 +-37 +-40 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-37 +-26 +-4 +11 +22 +31 +37 +41 +42 +43 +43 +42 +42 +41 +38 +36 +34 +33 +32 +30 +28 +26 +25 +23 +22 +21 +19 +19 +18 +16 +14 +13 +12 +4 +-14 +-28 +-38 +-46 +-51 +-54 +-56 +-56 +-55 +-53 +-52 +-50 +-49 +-47 +-45 +-34 +-12 +3 +15 +23 +30 +34 +38 +39 +40 +41 +41 +39 +39 +37 +36 +28 +8 +-7 +-19 +-27 +-33 +-37 +-40 +-42 +-43 +-43 +-43 +-41 +-40 +-38 +-36 +-26 +-4 +11 +21 +29 +34 +38 +41 +42 +43 +43 +42 +41 +40 +38 +38 +30 +11 +-5 +-16 +-25 +-32 +-36 +-39 +-41 +-42 +-43 +-42 +-41 +-39 +-38 +-36 +-25 +-3 +12 +24 +31 +37 +41 +43 +44 +44 +43 +43 +41 +40 +38 +37 +29 +9 +-7 +-19 +-27 +-33 +-37 +-40 +-41 +-41 +-40 +-40 +-39 +-39 +-38 +-36 +-25 +-4 +10 +21 +29 +35 +38 +41 +42 +42 +42 +42 +41 +40 +39 +37 +29 +9 +-6 +-18 +-27 +-32 +-36 +-39 +-41 +-42 +-42 +-41 +-41 +-39 +-37 +-34 +-24 +-2 +13 +24 +31 +36 +39 +42 +43 +43 +42 +42 +40 +39 +38 +37 +28 +9 +-6 +-18 +-27 +-33 +-37 +-39 +-40 +-41 +-42 +-41 +-41 +-40 +-38 +-37 +-26 +-4 +11 +22 +29 +35 +38 +40 +42 +43 +43 +42 +41 +40 +38 +37 +28 +8 +-7 +-19 +-28 +-34 +-38 +-41 +-42 +-43 +-42 +-42 +-41 +-40 +-38 +-36 +-25 +-4 +11 +22 +29 +35 +38 +40 +41 +42 +41 +41 +40 +40 +38 +36 +27 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-44 +-43 +-41 +-39 +-39 +-37 +-26 +-4 +10 +21 +30 +37 +41 +43 +43 +44 +44 +43 +41 +40 +38 +37 +28 +9 +-6 +-18 +-27 +-32 +-37 +-40 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-36 +-35 +-33 +-32 +-30 +-28 +-26 +-25 +-23 +-21 +-20 +-19 +-17 +-16 +-14 +-14 +-14 +-4 +16 +30 +40 +46 +50 +53 +54 +55 +54 +53 +51 +50 +49 +47 +44 +36 +16 +0 +-13 +-22 +-29 +-34 +-38 +-40 +-41 +-41 +-40 +-39 +-38 +-36 +-35 +-24 +-3 +13 +24 +32 +37 +41 +43 +44 +44 +44 +43 +42 +41 +39 +37 +29 +9 +-6 +-17 +-26 +-31 +-36 +-39 +-40 +-41 +-41 +-41 +-41 +-39 +-38 +-36 +-26 +-4 +11 +22 +30 +36 +39 +42 +43 +44 +43 +43 +42 +40 +38 +36 +28 +8 +-7 +-19 +-27 +-33 +-37 +-40 +-42 +-43 +-42 +-41 +-40 +-38 +-37 +-35 +-24 +-2 +13 +24 +31 +36 +39 +42 +43 +44 +44 +43 +42 +40 +39 +37 +29 +10 +-5 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-42 +-42 +-41 +-40 +-38 +-36 +-25 +-4 +11 +22 +30 +36 +39 +42 +42 +43 +43 +44 +42 +40 +38 +36 +28 +8 +-7 +-19 +-27 +-33 +-38 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-36 +-26 +-4 +10 +22 +29 +35 +38 +42 +42 +43 +43 +42 +41 +40 +39 +38 +30 +10 +-6 +-18 +-26 +-33 +-37 +-40 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-24 +-3 +12 +24 +31 +36 +40 +42 +43 +43 +43 +42 +41 +39 +38 +36 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-42 +-41 +-41 +-40 +-39 +-37 +-27 +-6 +9 +20 +28 +33 +37 +39 +40 +42 +41 +41 +39 +38 +37 +36 +28 +8 +-7 +-19 +-28 +-35 +-38 +-41 +-42 +-43 +-42 +-41 +-40 +-38 +-36 +-35 +-24 +-2 +13 +24 +31 +37 +39 +42 +42 +43 +42 +42 +40 +39 +37 +36 +34 +32 +30 +30 +29 +27 +25 +24 +22 +21 +19 +18 +16 +15 +14 +13 +6 +-12 +-26 +-37 +-44 +-50 +-53 +-55 +-56 +-55 +-54 +-53 +-52 +-49 +-48 +-45 +-34 +-12 +3 +14 +23 +29 +33 +36 +37 +38 +39 +38 +38 +37 +36 +34 +26 +6 +-9 +-21 +-30 +-36 +-39 +-43 +-44 +-45 +-44 +-43 +-42 +-40 +-38 +-37 +-26 +-4 +11 +22 +30 +35 +39 +41 +42 +42 +42 +41 +40 +39 +36 +35 +27 +8 +-8 +-18 +-27 +-33 +-37 +-40 +-41 +-43 +-42 +-42 +-41 +-40 +-38 +-37 +-26 +-5 +10 +22 +31 +36 +39 +42 +44 +44 +44 +44 +43 +42 +40 +38 +30 +10 +-6 +-18 +-27 +-33 +-38 +-40 +-41 +-41 +-41 +-41 +-40 +-38 +-37 +-35 +-25 +-4 +11 +21 +29 +34 +38 +40 +41 +41 +42 +41 +40 +38 +37 +36 +28 +8 +-7 +-19 +-27 +-34 +-38 +-41 +-44 +-45 +-45 +-44 +-43 +-41 +-39 +-37 +-27 +-5 +10 +21 +29 +35 +38 +40 +41 +42 +42 +41 +39 +37 +36 +34 +26 +6 +-9 +-20 +-28 +-34 +-39 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-38 +-37 +-27 +-5 +9 +21 +28 +34 +38 +41 +42 +43 +43 +42 +41 +40 +38 +37 +28 +9 +-7 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-41 +-40 +-39 +-38 +-36 +-35 +-25 +-4 +10 +20 +28 +34 +38 +41 +41 +42 +42 +42 +40 +40 +38 +37 +29 +10 +-5 +-16 +-25 +-32 +-36 +-39 +-40 +-41 +-41 +-41 +-41 +-39 +-37 +-35 +-24 +-2 +12 +24 +32 +38 +41 +44 +45 +45 +44 +43 +42 +40 +38 +36 +29 +9 +-6 +-17 +-25 +-32 +-36 +-39 +-40 +-41 +-40 +-39 +-39 +-38 +-37 +-35 +-25 +-2 +12 +23 +31 +37 +40 +42 +44 +45 +44 +44 +43 +42 +40 +38 +29 +9 +-6 +-18 +-26 +-33 +-38 +-41 +-42 +-42 +-42 +-42 +-40 +-39 +-37 +-35 +-25 +-3 +11 +22 +30 +36 +39 +42 +43 +43 +43 +42 +40 +39 +38 +37 +28 +10 +-6 +-17 +-26 +-32 +-36 +-39 +-41 +-43 +-43 +-42 +-41 +-40 +-38 +-37 +-35 +-34 +-31 +-29 +-27 +-25 +-24 +-23 +-22 +-21 +-20 +-19 +-18 +-17 +-16 +-15 +-6 +16 +29 +40 +47 +52 +54 +56 +56 +56 +55 +54 +52 +49 +47 +45 +35 +15 +-1 +-13 +-22 +-27 +-32 +-35 +-37 +-38 +-38 +-37 +-36 +-35 +-34 +-32 +-22 +-1 +14 +25 +32 +37 +40 +42 +43 +44 +44 +43 +42 +41 +39 +38 +36 +34 +33 +31 +28 +27 +26 +23 +21 +20 +18 +17 +16 +15 +14 +13 +5 +-13 +-27 +-37 +-45 +-50 +-53 +-54 +-55 +-55 +-54 +-53 +-52 +-50 +-48 +-45 +-34 +-12 +4 +16 +24 +30 +34 +37 +38 +39 +39 +39 +38 +36 +35 +33 +25 +5 +-10 +-21 +-28 +-35 +-39 +-42 +-43 +-44 +-44 +-43 +-41 +-39 +-38 +-36 +-25 +-4 +10 +21 +29 +34 +38 +40 +42 +42 +42 +41 +41 +40 +38 +37 +29 +10 +-6 +-17 +-25 +-31 +-36 +-38 +-40 +-41 +-41 +-41 +-40 +-38 +-37 +-35 +-33 +-30 +-29 +-27 +-26 +-24 +-23 +-21 +-20 +-19 +-17 +-17 +-16 +-15 +-14 +-14 +-4 +16 +30 +40 +47 +52 +55 +57 +58 +57 +57 +56 +54 +52 +49 +46 +43 +41 +39 +36 +34 +32 +30 +28 +27 +25 +24 +23 +21 +20 +19 +18 +10 +-9 +-24 +-34 +-42 +-47 +-51 +-53 +-54 +-55 +-54 +-53 +-50 +-48 +-46 +-43 +-31 +-10 +6 +18 +26 +31 +35 +38 +38 +39 +39 +39 +37 +36 +35 +34 +25 +6 +-10 +-21 +-29 +-35 +-39 +-41 +-44 +-44 +-44 +-44 +-43 +-42 +-40 +-39 +-36 +-35 +-33 +-31 +-29 +-27 +-25 +-24 +-22 +-21 +-20 +-19 +-18 +-17 +-17 +-16 +-6 +15 +29 +39 +46 +50 +53 +55 +56 +56 +55 +53 +52 +50 +47 +44 +43 +40 +38 +36 +35 +33 +31 +29 +28 +27 +26 +25 +24 +23 +21 +20 +12 +-7 +-22 +-32 +-41 +-46 +-49 +-51 +-52 +-51 +-51 +-50 +-48 +-46 +-44 +-41 +-29 +-8 +7 +19 +27 +33 +36 +38 +39 +39 +39 +39 +37 +37 +35 +34 +25 +6 +-9 +-21 +-29 +-35 +-40 +-42 +-45 +-45 +-45 +-45 +-44 +-42 +-41 +-39 +-28 +-6 +9 +20 +28 +33 +37 +40 +41 +41 +41 +40 +38 +37 +36 +34 +26 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-42 +-42 +-43 +-42 +-41 +-39 +-38 +-37 +-26 +-5 +10 +22 +31 +36 +39 +42 +43 +44 +43 +43 +42 +42 +40 +39 +30 +10 +-6 +-18 +-27 +-33 +-38 +-40 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-35 +-32 +-31 +-29 +-28 +-27 +-26 +-24 +-23 +-22 +-21 +-19 +-18 +-16 +-16 +-15 +-4 +17 +31 +41 +48 +53 +55 +57 +57 +57 +55 +54 +52 +49 +46 +44 +36 +16 +0 +-12 +-21 +-28 +-32 +-35 +-37 +-37 +-37 +-37 +-37 +-36 +-36 +-35 +-24 +-3 +12 +24 +32 +38 +41 +44 +45 +46 +46 +45 +43 +41 +39 +37 +29 +9 +-7 +-18 +-27 +-32 +-37 +-40 +-42 +-42 +-43 +-41 +-40 +-38 +-37 +-35 +-25 +-3 +11 +22 +31 +35 +38 +41 +42 +43 +42 +42 +40 +40 +38 +37 +34 +33 +32 +29 +27 +25 +23 +21 +20 +19 +19 +17 +17 +16 +15 +14 +6 +-12 +-26 +-36 +-44 +-49 +-52 +-54 +-56 +-56 +-55 +-54 +-52 +-50 +-48 +-45 +-34 +-11 +5 +17 +26 +33 +37 +39 +39 +40 +39 +39 +38 +38 +36 +34 +26 +6 +-9 +-20 +-28 +-34 +-38 +-41 +-42 +-42 +-42 +-42 +-40 +-39 +-38 +-37 +-36 +-34 +-33 +-31 +-30 +-28 +-27 +-25 +-23 +-21 +-19 +-17 +-16 +-15 +-14 +-13 +-4 +16 +30 +39 +46 +51 +54 +56 +56 +56 +55 +53 +52 +50 +48 +47 +45 +43 +40 +38 +35 +33 +31 +29 +27 +25 +24 +22 +21 +20 +19 +18 +10 +-9 +-23 +-34 +-41 +-46 +-50 +-52 +-53 +-53 +-52 +-51 +-49 +-47 +-46 +-43 +-32 +-10 +5 +17 +26 +31 +36 +38 +40 +40 +41 +39 +38 +37 +36 +34 +26 +6 +-9 +-19 +-28 +-35 +-39 +-42 +-44 +-44 +-43 +-43 +-41 +-40 +-38 +-36 +-26 +-5 +9 +21 +29 +34 +38 +40 +41 +42 +42 +42 +40 +39 +38 +37 +28 +9 +-6 +-18 +-27 +-34 +-38 +-41 +-43 +-43 +-43 +-43 +-42 +-41 +-39 +-37 +-27 +-5 +10 +21 +29 +34 +37 +39 +40 +41 +41 +41 +39 +38 +37 +36 +27 +8 +-7 +-18 +-26 +-32 +-37 +-40 +-41 +-42 +-42 +-42 +-40 +-39 +-37 +-36 +-25 +-3 +12 +23 +32 +38 +41 +43 +44 +45 +44 +43 +42 +40 +39 +37 +29 +9 +-6 +-17 +-27 +-33 +-37 +-39 +-40 +-41 +-42 +-41 +-40 +-39 +-38 +-37 +-27 +-5 +10 +21 +29 +35 +39 +41 +43 +43 +43 +42 +41 +40 +39 +36 +28 +7 +-8 +-19 +-28 +-34 +-38 +-40 +-42 +-43 +-43 +-43 +-41 +-40 +-39 +-37 +-27 +-6 +9 +20 +27 +33 +37 +40 +41 +42 +41 +40 +40 +39 +37 +37 +28 +8 +-7 +-18 +-27 +-34 +-38 +-40 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-35 +-24 +-3 +12 +23 +31 +36 +40 +42 +43 +43 +43 +42 +41 +40 +38 +37 +29 +9 +-6 +-18 +-27 +-34 +-38 +-41 +-43 +-43 +-43 +-43 +-41 +-41 +-39 +-38 +-35 +-34 +-32 +-30 +-28 +-26 +-25 +-23 +-21 +-20 +-19 +-18 +-16 +-15 +-14 +-13 +-3 +17 +31 +41 +48 +53 +56 +57 +57 +56 +54 +53 +50 +49 +47 +45 +36 +16 +0 +-12 +-20 +-27 +-32 +-34 +-36 +-37 +-38 +-37 +-38 +-36 +-36 +-34 +-24 +-2 +13 +24 +32 +38 +41 +43 +45 +46 +46 +45 +44 +42 +40 +38 +29 +10 +-6 +-17 +-27 +-32 +-37 +-40 +-41 +-42 +-42 +-41 +-40 +-38 +-37 +-35 +-24 +-3 +12 +23 +30 +36 +39 +42 +43 +44 +43 +43 +41 +40 +39 +38 +29 +9 +-6 +-18 +-27 +-32 +-37 +-40 +-42 +-43 +-43 +-42 +-41 +-39 +-37 +-35 +-25 +-3 +11 +22 +29 +35 +38 +41 +42 +43 +43 +43 +41 +40 +38 +36 +29 +9 +-6 +-18 +-27 +-32 +-37 +-40 +-42 +-43 +-44 +-43 +-42 +-41 +-38 +-37 +-27 +-5 +10 +21 +30 +35 +39 +41 +42 +43 +42 +42 +40 +39 +37 +35 +27 +8 +-7 +-18 +-27 +-33 +-36 +-40 +-41 +-42 +-41 +-41 +-39 +-38 +-37 +-35 +-25 +-4 +11 +21 +29 +35 +38 +41 +42 +42 +42 +42 +41 +40 +38 +36 +28 +8 +-7 +-18 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-40 +-38 +-36 +-25 +-3 +12 +23 +31 +36 +40 +42 +44 +44 +43 +43 +42 +41 +40 +39 +30 +11 +-4 +-16 +-25 +-31 +-34 +-37 +-39 +-40 +-39 +-38 +-38 +-38 +-37 +-35 +-25 +-3 +11 +23 +31 +36 +39 +42 +44 +44 +43 +43 +42 +40 +37 +36 +28 +7 +-9 +-20 +-28 +-34 +-39 +-41 +-43 +-43 +-43 +-42 +-40 +-38 +-37 +-35 +-25 +-3 +11 +22 +30 +35 +38 +40 +42 +42 +42 +41 +40 +39 +37 +36 +34 +33 +32 +30 +29 +27 +25 +23 +21 +20 +19 +17 +16 +15 +15 +14 +7 +-13 +-26 +-37 +-44 +-49 +-53 +-55 +-57 +-56 +-55 +-55 +-53 +-51 +-49 +-46 +-35 +-13 +3 +15 +23 +29 +34 +37 +38 +39 +38 +37 +36 +36 +34 +33 +26 +6 +-9 +-20 +-28 +-34 +-38 +-40 +-42 +-42 +-42 +-42 +-41 +-40 +-39 +-38 +-27 +-5 +10 +22 +31 +36 +39 +41 +43 +43 +43 +42 +41 +40 +38 +36 +28 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +10 +21 +28 +33 +36 +39 +40 +40 +40 +39 +38 +38 +36 +35 +28 +9 +-7 +-18 +-27 +-33 +-38 +-40 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-25 +-4 +12 +23 +30 +35 +38 +40 +41 +42 +42 +40 +39 +38 +36 +35 +28 +8 +-7 +-18 +-27 +-33 +-38 +-41 +-42 +-43 +-43 +-43 +-42 +-40 +-39 +-37 +-26 +-5 +11 +22 +30 +36 +39 +42 +43 +43 +42 +41 +40 +38 +36 +35 +27 +8 +-8 +-18 +-27 +-33 +-38 +-40 +-42 +-42 +-43 +-42 +-41 +-41 +-39 +-38 +-28 +-6 +9 +20 +28 +34 +37 +40 +42 +43 +42 +42 +40 +40 +38 +36 +27 +8 +-8 +-19 +-28 +-34 +-38 +-40 +-43 +-43 +-44 +-42 +-41 +-39 +-38 +-35 +-25 +-4 +11 +22 +30 +35 +38 +41 +43 +43 +43 +42 +42 +41 +40 +38 +30 +11 +-4 +-16 +-24 +-30 +-34 +-37 +-39 +-41 +-41 +-40 +-39 +-38 +-36 +-34 +-32 +-31 +-29 +-27 +-25 +-24 +-22 +-21 +-20 +-19 +-18 +-18 +-17 +-16 +-15 +-14 +-4 +16 +30 +40 +48 +52 +56 +57 +57 +57 +56 +53 +51 +50 +47 +45 +42 +40 +38 +35 +33 +31 +30 +28 +27 +25 +24 +23 +21 +20 +18 +17 +9 +-10 +-25 +-36 +-44 +-49 +-53 +-55 +-55 +-55 +-54 +-51 +-49 +-47 +-46 +-43 +-41 +-38 +-36 +-34 +-32 +-30 +-29 +-27 +-25 +-24 +-22 +-21 +-19 +-18 +-17 +-16 +-6 +16 +31 +41 +48 +53 +55 +57 +57 +56 +55 +54 +52 +49 +46 +44 +42 +40 +37 +36 +33 +32 +30 +29 +27 +26 +24 +23 +21 +21 +19 +19 +11 +-8 +-23 +-34 +-43 +-48 +-50 +-53 +-54 +-54 +-53 +-51 +-50 +-47 +-45 +-43 +-40 +-37 +-35 +-33 +-31 +-29 +-28 +-27 +-25 +-24 +-23 +-21 +-19 +-17 +-17 +-15 +-6 +15 +29 +40 +47 +51 +54 +55 +55 +55 +53 +51 +49 +48 +45 +44 +42 +40 +38 +35 +33 +31 +30 +29 +28 +26 +25 +23 +21 +19 +18 +17 +9 +-10 +-25 +-35 +-43 +-48 +-51 +-53 +-54 +-54 +-53 +-52 +-50 +-48 +-46 +-44 +-42 +-40 +-38 +-36 +-34 +-32 +-30 +-28 +-25 +-24 +-22 +-21 +-19 +-18 +-16 +-15 +-5 +16 +30 +41 +48 +53 +55 +57 +56 +56 +55 +54 +52 +50 +48 +46 +44 +42 +40 +38 +36 +34 +32 +30 +28 +26 +24 +22 +20 +18 +17 +16 +8 +-11 +-25 +-35 +-43 +-48 +-52 +-53 +-54 +-54 +-53 +-51 +-50 +-48 +-46 +-44 +-42 +-40 +-38 +-36 +-33 +-32 +-30 +-29 +-27 +-25 +-23 +-22 +-20 +-17 +-16 +-15 +-6 +16 +30 +39 +46 +51 +53 +55 +55 +54 +53 +52 +50 +48 +46 +44 +42 +40 +37 +36 +33 +31 +29 +27 +25 +24 +22 +21 +19 +18 +17 +16 +8 +-11 +-24 +-35 +-43 +-48 +-51 +-53 +-54 +-54 +-53 +-52 +-50 +-48 +-46 +-44 +-42 +-39 +-37 +-34 +-33 +-30 +-28 +-27 +-25 +-23 +-21 +-19 +-18 +-16 +-15 +-14 +-5 +16 +29 +40 +46 +51 +54 +55 +55 +56 +55 +53 +51 +50 +48 +46 +37 +18 +1 +-11 +-21 +-28 +-33 +-36 +-38 +-38 +-38 +-38 +-38 +-36 +-35 +-33 +-22 +-1 +14 +25 +33 +38 +41 +43 +44 +45 +45 +43 +41 +41 +39 +37 +29 +9 +-6 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-42 +-43 +-42 +-41 +-39 +-37 +-26 +-5 +10 +21 +29 +35 +39 +42 +43 +43 +43 +43 +42 +40 +38 +36 +28 +9 +-6 +-18 +-26 +-32 +-37 +-40 +-41 +-42 +-41 +-40 +-38 +-37 +-36 +-35 +-24 +-3 +12 +23 +31 +36 +39 +42 +43 +43 +43 +43 +42 +41 +39 +38 +29 +10 +-5 +-17 +-26 +-32 +-37 +-40 +-42 +-42 +-42 +-42 +-42 +-40 +-39 +-37 +-27 +-5 +10 +22 +30 +35 +39 +41 +42 +42 +42 +41 +39 +38 +37 +35 +26 +7 +-7 +-20 +-28 +-35 +-38 +-40 +-41 +-41 +-41 +-41 +-40 +-39 +-37 +-36 +-26 +-5 +10 +21 +29 +35 +38 +40 +41 +42 +42 +41 +40 +39 +38 +36 +28 +8 +-7 +-20 +-28 +-34 +-38 +-42 +-44 +-45 +-44 +-43 +-42 +-41 +-39 +-37 +-26 +-4 +11 +22 +31 +36 +40 +42 +43 +44 +43 +42 +40 +39 +37 +36 +28 +8 +-7 +-19 +-28 +-33 +-38 +-40 +-41 +-41 +-42 +-41 +-41 +-39 +-38 +-37 +-27 +-6 +8 +20 +27 +33 +36 +39 +40 +41 +40 +40 +39 +38 +37 +36 +28 +9 +-8 +-20 +-29 +-35 +-38 +-41 +-43 +-44 +-44 +-43 +-41 +-39 +-37 +-36 +-25 +-3 +12 +23 +31 +36 +39 +41 +42 +42 +42 +41 +40 +38 +37 +36 +35 +33 +32 +30 +28 +27 +25 +24 +22 +21 +20 +18 +17 +15 +14 +13 +6 +-13 +-26 +-37 +-45 +-50 +-54 +-55 +-56 +-55 +-55 +-53 +-51 +-49 +-47 +-45 +-34 +-12 +4 +14 +23 +30 +33 +35 +37 +39 +38 +37 +37 +36 +35 +33 +25 +6 +-9 +-20 +-28 +-34 +-38 +-40 +-43 +-44 +-44 +-43 +-42 +-40 +-38 +-37 +-26 +-4 +11 +22 +31 +36 +40 +42 +44 +44 +43 +42 +40 +39 +37 +36 +28 +8 +-7 +-19 +-28 +-33 +-38 +-40 +-42 +-42 +-42 +-41 +-40 +-39 +-38 +-36 +-26 +-4 +11 +22 +29 +35 +38 +41 +43 +44 +44 +43 +42 +41 +39 +38 +30 +10 +-6 +-17 +-25 +-32 +-36 +-39 +-40 +-41 +-41 +-41 +-39 +-37 +-36 +-34 +-23 +-2 +13 +24 +31 +36 +39 +42 +42 +43 +43 +42 +40 +39 +38 +37 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-42 +-41 +-42 +-40 +-39 +-38 +-36 +-25 +-4 +11 +22 +30 +36 +39 +42 +43 +44 +43 +42 +40 +39 +37 +35 +26 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-40 +-39 +-37 +-36 +-26 +-5 +10 +20 +28 +33 +37 +40 +41 +41 +41 +40 +40 +38 +37 +36 +28 +9 +-6 +-18 +-27 +-33 +-38 +-42 +-43 +-43 +-44 +-43 +-42 +-40 +-38 +-36 +-26 +-4 +11 +22 +30 +36 +40 +43 +43 +43 +42 +42 +39 +38 +36 +34 +26 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-42 +-42 +-42 +-41 +-39 +-38 +-37 +-35 +-25 +-4 +11 +23 +32 +37 +40 +42 +44 +44 +44 +44 +44 +43 +41 +40 +31 +11 +-4 +-16 +-25 +-31 +-36 +-39 +-40 +-41 +-41 +-40 +-39 +-38 +-37 +-35 +-33 +-31 +-29 +-27 +-25 +-24 +-23 +-21 +-20 +-19 +-18 +-18 +-17 +-16 +-15 +-14 +-4 +17 +31 +41 +47 +52 +55 +57 +57 +57 +55 +54 +52 +51 +48 +46 +43 +40 +37 +36 +33 +32 +29 +28 +26 +25 +24 +23 +22 +21 +19 +18 +11 +-9 +-24 +-35 +-43 +-47 +-50 +-53 +-54 +-54 +-53 +-52 +-50 +-48 +-46 +-43 +-32 +-9 +6 +17 +25 +30 +34 +36 +37 +37 +37 +37 +36 +35 +33 +32 +23 +3 +-11 +-22 +-30 +-36 +-40 +-43 +-44 +-44 +-44 +-44 +-44 +-42 +-41 +-39 +-28 +-6 +9 +21 +29 +34 +38 +41 +42 +43 +43 +43 +42 +40 +39 +37 +28 +8 +-9 +-20 +-28 +-34 +-38 +-41 +-43 +-44 +-43 +-43 +-42 +-41 +-38 +-36 +-34 +-32 +-31 +-29 +-28 +-27 +-25 +-23 +-22 +-20 +-20 +-18 +-17 +-16 +-15 +-13 +-3 +17 +31 +42 +48 +53 +55 +55 +55 +55 +55 +54 +51 +49 +47 +45 +43 +41 +39 +37 +35 +33 +31 +30 +28 +28 +26 +24 +23 +21 +20 +18 +10 +-9 +-22 +-34 +-42 +-47 +-50 +-52 +-52 +-52 +-52 +-50 +-49 +-47 +-46 +-44 +-33 +-11 +4 +16 +24 +30 +34 +37 +38 +39 +39 +39 +38 +37 +36 +35 +26 +7 +-8 +-20 +-29 +-35 +-39 +-42 +-43 +-43 +-42 +-41 +-41 +-39 +-38 +-36 +-33 +-31 +-30 +-28 +-27 +-26 +-25 +-24 +-22 +-21 +-19 +-18 +-17 +-16 +-15 +-14 +-3 +18 +32 +42 +49 +54 +57 +57 +57 +57 +55 +53 +51 +49 +47 +44 +35 +15 +-1 +-12 +-22 +-28 +-33 +-36 +-38 +-39 +-39 +-39 +-39 +-37 +-36 +-35 +-25 +-3 +12 +22 +30 +36 +40 +42 +43 +44 +44 +43 +42 +41 +39 +38 +36 +34 +32 +31 +29 +28 +26 +26 +25 +23 +22 +21 +20 +19 +18 +17 +10 +-9 +-23 +-34 +-41 +-47 +-51 +-53 +-54 +-54 +-52 +-51 +-49 +-47 +-45 +-43 +-41 +-37 +-35 +-33 +-31 +-29 +-28 +-26 +-25 +-23 +-22 +-20 +-19 +-17 +-16 +-14 +-5 +16 +30 +41 +48 +52 +54 +56 +56 +56 +54 +52 +50 +48 +46 +44 +41 +39 +36 +34 +32 +30 +29 +27 +26 +24 +23 +21 +19 +17 +16 +15 +7 +-12 +-27 +-38 +-45 +-51 +-54 +-56 +-57 +-56 +-56 +-54 +-51 +-49 +-47 +-46 +-34 +-12 +4 +15 +24 +30 +33 +36 +37 +37 +37 +36 +36 +35 +35 +33 +25 +5 +-9 +-20 +-28 +-34 +-39 +-42 +-44 +-46 +-45 +-44 +-43 +-42 +-40 +-39 +-36 +-35 +-33 +-31 +-29 +-27 +-25 +-23 +-22 +-21 +-19 +-18 +-18 +-17 +-16 +-15 +-5 +15 +29 +39 +47 +51 +54 +56 +56 +55 +55 +53 +51 +50 +47 +44 +42 +40 +38 +36 +35 +33 +31 +29 +28 +26 +25 +23 +22 +21 +20 +19 +11 +-8 +-23 +-34 +-42 +-47 +-51 +-52 +-53 +-53 +-53 +-51 +-49 +-47 +-44 +-42 +-30 +-8 +7 +19 +27 +33 +36 +39 +40 +41 +41 +40 +39 +38 +37 +36 +28 +8 +-6 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-34 +-32 +-30 +-28 +-26 +-24 +-23 +-22 +-21 +-19 +-19 +-18 +-17 +-16 +-16 +-6 +15 +29 +40 +47 +52 +55 +57 +57 +57 +56 +54 +52 +51 +49 +47 +44 +42 +39 +38 +35 +33 +31 +29 +28 +26 +24 +22 +21 +20 +19 +18 +11 +-8 +-23 +-34 +-41 +-47 +-51 +-53 +-54 +-54 +-54 +-52 +-50 +-48 +-47 +-44 +-42 +-40 +-37 +-35 +-32 +-30 +-28 +-26 +-24 +-23 +-21 +-20 +-19 +-18 +-16 +-15 +-5 +16 +31 +41 +47 +52 +55 +57 +57 +58 +57 +55 +53 +51 +49 +46 +37 +16 +0 +-12 +-21 +-27 +-32 +-34 +-37 +-38 +-38 +-37 +-37 +-36 +-35 +-32 +-22 +0 +14 +25 +31 +36 +40 +42 +43 +44 +44 +43 +42 +41 +39 +37 +29 +9 +-6 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-44 +-43 +-42 +-40 +-38 +-36 +-26 +-3 +11 +23 +31 +37 +40 +42 +43 +43 +42 +42 +41 +40 +38 +37 +29 +9 +-6 +-17 +-26 +-31 +-36 +-38 +-40 +-42 +-42 +-43 +-42 +-41 +-39 +-38 +-27 +-6 +10 +21 +29 +35 +39 +41 +43 +43 +43 +42 +40 +39 +37 +35 +26 +7 +-8 +-19 +-28 +-34 +-38 +-40 +-41 +-41 +-41 +-40 +-39 +-38 +-37 +-36 +-26 +-4 +11 +22 +29 +35 +39 +42 +43 +44 +43 +43 +42 +41 +39 +37 +29 +9 +-7 +-18 +-26 +-32 +-36 +-39 +-40 +-41 +-41 +-40 +-38 +-37 +-36 +-34 +-23 +-2 +12 +23 +30 +35 +39 +41 +42 +43 +42 +42 +41 +40 +38 +37 +29 +9 +-6 +-18 +-27 +-33 +-38 +-41 +-44 +-44 +-44 +-44 +-43 +-41 +-40 +-38 +-27 +-5 +10 +21 +29 +34 +37 +39 +40 +40 +40 +39 +38 +37 +36 +34 +27 +7 +-7 +-19 +-27 +-34 +-38 +-41 +-43 +-44 +-44 +-44 +-43 +-41 +-40 +-38 +-26 +-5 +10 +21 +29 +35 +39 +42 +44 +44 +45 +43 +41 +40 +38 +37 +29 +9 +-6 +-17 +-25 +-31 +-35 +-38 +-40 +-41 +-40 +-39 +-38 +-38 +-37 +-36 +-26 +-4 +10 +21 +29 +35 +39 +42 +42 +42 +42 +43 +41 +40 +38 +37 +35 +33 +31 +29 +27 +26 +24 +22 +21 +20 +19 +18 +17 +15 +15 +14 +7 +-12 +-26 +-36 +-43 +-48 +-52 +-54 +-55 +-55 +-55 +-53 +-51 +-49 +-47 +-44 +-33 +-10 +5 +17 +25 +31 +35 +37 +39 +40 +39 +38 +37 +36 +35 +33 +25 +6 +-9 +-21 +-29 +-35 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-40 +-39 +-37 +-27 +-6 +9 +21 +28 +34 +38 +40 +41 +42 +42 +42 +41 +40 +39 +37 +30 +9 +-6 +-18 +-27 +-33 +-37 +-39 +-41 +-42 +-42 +-41 +-39 +-37 +-35 +-33 +-23 +-1 +14 +24 +33 +37 +41 +42 +42 +43 +43 +42 +42 +40 +39 +37 +29 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-41 +-42 +-42 +-42 +-42 +-40 +-39 +-38 +-27 +-6 +9 +20 +29 +34 +38 +41 +42 +43 +43 +42 +41 +39 +38 +36 +27 +7 +-8 +-19 +-28 +-34 +-38 +-42 +-43 +-43 +-44 +-43 +-42 +-41 +-38 +-37 +-27 +-5 +10 +21 +29 +35 +38 +41 +42 +43 +42 +43 +41 +41 +39 +38 +29 +9 +-7 +-18 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-40 +-38 +-35 +-25 +-3 +11 +23 +30 +36 +40 +42 +42 +42 +42 +42 +41 +40 +38 +37 +28 +9 +-6 +-18 +-26 +-32 +-36 +-39 +-41 +-43 +-43 +-42 +-41 +-41 +-39 +-37 +-27 +-5 +10 +20 +29 +35 +38 +41 +42 +42 +42 +41 +40 +38 +37 +35 +26 +6 +-9 +-20 +-28 +-34 +-38 +-41 +-42 +-43 +-42 +-42 +-41 +-40 +-38 +-36 +-26 +-5 +10 +21 +30 +35 +39 +42 +42 +43 +42 +42 +41 +40 +39 +37 +29 +9 +-6 +-17 +-26 +-33 +-37 +-40 +-42 +-42 +-43 +-42 +-41 +-39 +-38 +-36 +-34 +-32 +-30 +-28 +-26 +-24 +-23 +-21 +-21 +-19 +-19 +-17 +-16 +-15 +-14 +-12 +-2 +18 +32 +42 +49 +53 +56 +58 +58 +58 +56 +55 +52 +50 +47 +45 +36 +15 +-1 +-12 +-22 +-28 +-33 +-35 +-37 +-38 +-38 +-37 +-36 +-36 +-34 +-33 +-23 +-2 +12 +24 +31 +37 +40 +43 +43 +44 +44 +43 +43 +41 +39 +38 +29 +9 +-7 +-19 +-27 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-39 +-38 +-37 +-26 +-4 +11 +22 +29 +35 +37 +39 +40 +41 +40 +41 +39 +38 +37 +36 +28 +9 +-6 +-18 +-26 +-32 +-37 +-40 +-41 +-42 +-42 +-42 +-41 +-40 +-38 +-36 +-25 +-4 +11 +22 +31 +36 +40 +42 +43 +43 +42 +42 +41 +40 +38 +37 +29 +9 +-6 +-18 +-26 +-31 +-35 +-38 +-39 +-40 +-40 +-40 +-39 +-39 +-37 +-35 +-24 +-3 +11 +23 +31 +37 +39 +42 +43 +44 +44 +43 +42 +40 +38 +36 +28 +8 +-8 +-19 +-28 +-34 +-38 +-41 +-42 +-42 +-42 +-42 +-40 +-39 +-37 +-36 +-25 +-3 +12 +22 +29 +35 +39 +41 +43 +43 +43 +42 +42 +41 +40 +38 +30 +11 +-4 +-16 +-25 +-31 +-36 +-38 +-40 +-41 +-41 +-40 +-39 +-37 +-36 +-34 +-23 +-2 +13 +25 +32 +38 +41 +43 +45 +44 +44 +42 +41 +39 +37 +37 +28 +8 +-7 +-19 +-28 +-33 +-38 +-40 +-42 +-43 +-43 +-42 +-41 +-40 +-39 +-38 +-27 +-5 +10 +22 +30 +36 +39 +41 +43 +43 +43 +43 +41 +40 +38 +36 +28 +8 +-7 +-19 +-27 +-33 +-37 +-40 +-41 +-41 +-41 +-41 +-40 +-38 +-36 +-34 +-23 +-2 +12 +23 +30 +36 +40 +42 +43 +43 +43 +42 +41 +40 +39 +37 +35 +34 +33 +31 +29 +28 +26 +23 +22 +21 +19 +17 +16 +14 +13 +13 +5 +-14 +-29 +-39 +-47 +-51 +-54 +-56 +-56 +-55 +-55 +-53 +-52 +-50 +-48 +-46 +-35 +-12 +3 +15 +22 +29 +33 +36 +38 +39 +39 +40 +39 +38 +37 +35 +27 +7 +-8 +-20 +-28 +-35 +-38 +-41 +-43 +-43 +-42 +-42 +-41 +-40 +-39 +-37 +-26 +-5 +10 +21 +29 +34 +37 +40 +40 +40 +39 +39 +38 +37 +35 +34 +25 +6 +-9 +-21 +-30 +-36 +-40 +-42 +-44 +-46 +-46 +-45 +-43 +-42 +-39 +-37 +-26 +-5 +10 +22 +30 +35 +38 +41 +42 +42 +42 +42 +41 +40 +37 +36 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-42 +-41 +-41 +-40 +-37 +-36 +-25 +-5 +11 +22 +30 +35 +40 +42 +44 +44 +44 +43 +42 +41 +39 +37 +29 +9 +-6 +-18 +-26 +-32 +-37 +-39 +-41 +-42 +-41 +-40 +-39 +-38 +-38 +-36 +-25 +-4 +11 +22 +30 +35 +38 +41 +42 +43 +43 +43 +42 +41 +39 +37 +29 +10 +-6 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-42 +-42 +-40 +-38 +-37 +-35 +-24 +-2 +14 +24 +32 +37 +40 +42 +43 +43 +43 +42 +41 +39 +37 +36 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-28 +-6 +9 +21 +29 +34 +38 +40 +42 +43 +42 +42 +40 +39 +37 +36 +28 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-42 +-43 +-42 +-42 +-40 +-38 +-37 +-36 +-25 +-3 +12 +22 +30 +36 +39 +41 +43 +43 +43 +42 +41 +40 +39 +38 +30 +9 +-6 +-18 +-27 +-33 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-40 +-39 +-37 +-26 +-5 +10 +22 +30 +36 +39 +41 +42 +42 +41 +41 +39 +38 +37 +35 +27 +8 +-8 +-19 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-38 +-27 +-5 +10 +22 +30 +35 +39 +41 +42 +43 +42 +42 +40 +39 +37 +35 +26 +7 +-7 +-19 +-28 +-34 +-38 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-38 +-36 +-34 +-32 +-31 +-29 +-27 +-26 +-25 +-22 +-21 +-20 +-19 +-18 +-16 +-15 +-14 +-13 +-4 +17 +30 +40 +46 +51 +52 +54 +55 +54 +53 +52 +51 +49 +48 +45 +36 +16 +0 +-12 +-22 +-28 +-33 +-36 +-38 +-38 +-38 +-38 +-37 +-36 +-35 +-33 +-22 +-1 +15 +26 +34 +38 +42 +44 +45 +46 +44 +44 +43 +41 +39 +38 +36 +34 +32 +31 +29 +28 +26 +24 +23 +21 +19 +18 +17 +15 +15 +14 +7 +-13 +-27 +-37 +-44 +-49 +-53 +-54 +-55 +-55 +-55 +-54 +-51 +-50 +-48 +-46 +-33 +-11 +4 +15 +24 +30 +34 +37 +39 +40 +40 +40 +40 +39 +37 +35 +27 +7 +-7 +-19 +-27 +-34 +-37 +-39 +-40 +-40 +-40 +-40 +-40 +-38 +-36 +-34 +-24 +-2 +12 +23 +30 +36 +39 +42 +42 +43 +42 +42 +41 +40 +39 +38 +30 +9 +-6 +-18 +-27 +-34 +-38 +-41 +-43 +-43 +-43 +-43 +-42 +-40 +-38 +-37 +-35 +-33 +-32 +-30 +-28 +-25 +-23 +-22 +-21 +-20 +-19 +-17 +-16 +-15 +-14 +-13 +-3 +18 +32 +43 +49 +54 +58 +59 +59 +59 +58 +56 +54 +52 +49 +47 +44 +42 +40 +38 +36 +34 +31 +30 +28 +27 +26 +25 +23 +22 +20 +19 +11 +-8 +-23 +-35 +-42 +-47 +-51 +-52 +-53 +-54 +-52 +-51 +-49 +-48 +-46 +-43 +-33 +-11 +4 +15 +23 +29 +32 +35 +36 +37 +36 +36 +36 +35 +33 +33 +25 +5 +-10 +-22 +-30 +-37 +-41 +-45 +-46 +-46 +-46 +-45 +-44 +-42 +-41 +-39 +-37 +-35 +-33 +-31 +-29 +-27 +-26 +-25 +-24 +-22 +-21 +-20 +-19 +-17 +-16 +-15 +-4 +16 +31 +41 +48 +52 +55 +57 +57 +57 +55 +53 +51 +50 +47 +45 +42 +40 +37 +36 +33 +32 +30 +29 +27 +26 +24 +23 +21 +20 +19 +18 +10 +-9 +-23 +-34 +-42 +-48 +-51 +-53 +-54 +-54 +-53 +-51 +-48 +-46 +-45 +-43 +-32 +-10 +4 +15 +23 +29 +33 +36 +37 +38 +39 +38 +38 +36 +35 +34 +27 +7 +-8 +-19 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-43 +-42 +-40 +-38 +-37 +-26 +-4 +11 +22 +31 +36 +39 +41 +42 +42 +42 +41 +40 +39 +37 +36 +27 +7 +-8 +-19 +-27 +-33 +-37 +-40 +-41 +-42 +-43 +-42 +-41 +-40 +-39 +-36 +-26 +-4 +11 +22 +30 +36 +39 +42 +43 +44 +43 +43 +41 +40 +38 +36 +28 +8 +-7 +-19 +-27 +-33 +-37 +-40 +-42 +-43 +-42 +-41 +-40 +-39 +-37 +-36 +-34 +-32 +-31 +-30 +-28 +-27 +-26 +-24 +-22 +-21 +-20 +-18 +-16 +-15 +-14 +-13 +-3 +18 +32 +41 +48 +52 +55 +56 +56 +55 +54 +53 +51 +49 +47 +45 +36 +17 +1 +-10 +-19 +-25 +-30 +-34 +-36 +-37 +-38 +-38 +-37 +-35 +-35 +-33 +-23 +-1 +15 +26 +34 +39 +42 +44 +44 +44 +43 +42 +41 +39 +37 +36 +28 +7 +-8 +-19 +-28 +-34 +-39 +-41 +-43 +-43 +-43 +-43 +-42 +-40 +-39 +-38 +-27 +-6 +9 +20 +28 +34 +38 +41 +42 +44 +44 +43 +41 +40 +38 +36 +34 +32 +29 +28 +27 +26 +24 +24 +23 +21 +20 +19 +18 +17 +16 +14 +7 +-12 +-26 +-38 +-45 +-51 +-53 +-55 +-56 +-56 +-54 +-53 +-51 +-48 +-45 +-43 +-32 +-10 +5 +17 +25 +31 +35 +39 +40 +40 +40 +39 +38 +38 +37 +36 +28 +9 +-6 +-18 +-27 +-33 +-38 +-40 +-42 +-43 +-43 +-42 +-41 +-39 +-37 +-36 +-35 +-32 +-30 +-28 +-27 +-25 +-24 +-22 +-22 +-21 +-21 +-19 +-18 +-16 +-15 +-13 +-4 +16 +31 +41 +48 +53 +55 +57 +57 +56 +55 +53 +51 +49 +47 +46 +43 +41 +38 +36 +35 +33 +31 +30 +28 +27 +25 +23 +22 +21 +19 +18 +9 +-9 +-24 +-34 +-42 +-47 +-50 +-51 +-52 +-52 +-51 +-50 +-49 +-47 +-46 +-44 +-33 +-11 +4 +15 +24 +29 +33 +36 +37 +38 +38 +38 +37 +36 +35 +33 +24 +5 +-11 +-22 +-31 +-37 +-40 +-43 +-45 +-46 +-46 +-45 +-44 +-42 +-40 +-38 +-27 +-6 +9 +19 +27 +32 +36 +38 +39 +40 +40 +39 +38 +37 +36 +35 +27 +7 +-8 +-19 +-27 +-34 +-38 +-42 +-43 +-43 +-43 +-42 +-41 +-40 +-38 +-36 +-25 +-3 +13 +24 +32 +37 +42 +44 +44 +44 +43 +42 +41 +40 +38 +36 +28 +9 +-6 +-17 +-25 +-31 +-36 +-38 +-40 +-42 +-42 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +12 +23 +31 +37 +40 +43 +44 +44 +43 +43 +41 +39 +38 +37 +28 +9 +-6 +-18 +-26 +-32 +-36 +-39 +-40 +-41 +-41 +-41 +-39 +-39 +-38 +-36 +-26 +-4 +10 +21 +30 +36 +39 +42 +44 +44 +44 +44 +43 +42 +40 +38 +29 +9 +-6 +-18 +-27 +-33 +-36 +-40 +-41 +-42 +-42 +-41 +-40 +-38 +-36 +-34 +-24 +-3 +12 +22 +30 +35 +39 +41 +42 +43 +42 +41 +40 +39 +37 +36 +28 +8 +-8 +-19 +-28 +-33 +-37 +-41 +-43 +-44 +-44 +-44 +-43 +-42 +-40 +-37 +-27 +-5 +10 +21 +29 +35 +38 +40 +40 +40 +39 +39 +38 +37 +35 +33 +25 +5 +-10 +-21 +-29 +-35 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-41 +-39 +-37 +-35 +-33 +-31 +-29 +-28 +-26 +-25 +-23 +-21 +-19 +-18 +-17 +-16 +-15 +-14 +-14 +-4 +16 +31 +41 +48 +52 +54 +56 +57 +57 +55 +54 +52 +50 +48 +46 +36 +16 +0 +-12 +-21 +-28 +-33 +-36 +-38 +-39 +-39 +-39 +-38 +-36 +-35 +-33 +-22 +0 +14 +25 +32 +37 +40 +43 +44 +45 +44 +44 +43 +41 +40 +39 +31 +12 +-3 +-15 +-23 +-29 +-34 +-37 +-39 +-40 +-40 +-40 +-39 +-37 +-35 +-33 +-23 +-1 +14 +25 +33 +39 +42 +44 +45 +45 +45 +44 +43 +41 +39 +37 +28 +8 +-7 +-18 +-26 +-33 +-37 +-40 +-41 +-42 +-41 +-41 +-40 +-39 +-37 +-36 +-25 +-4 +11 +22 +30 +35 +39 +41 +42 +44 +43 +43 +41 +41 +39 +37 +28 +9 +-8 +-19 +-28 +-34 +-38 +-40 +-42 +-42 +-43 +-42 +-41 +-39 +-37 +-36 +-26 +-4 +10 +20 +28 +34 +37 +39 +40 +41 +41 +40 +39 +39 +38 +36 +28 +9 +-6 +-17 +-26 +-32 +-37 +-40 +-42 +-42 +-42 +-41 +-41 +-39 +-37 +-35 +-24 +-2 +13 +25 +32 +38 +41 +43 +44 +44 +43 +42 +41 +40 +38 +37 +29 +9 +-6 +-17 +-25 +-31 +-36 +-39 +-41 +-41 +-42 +-42 +-41 +-40 +-38 +-37 +-27 +-4 +10 +21 +29 +35 +39 +42 +43 +44 +44 +43 +42 +40 +39 +37 +28 +8 +-7 +-18 +-27 +-33 +-38 +-41 +-42 +-43 +-42 +-42 +-41 +-40 +-38 +-36 +-25 +-3 +12 +23 +30 +35 +38 +41 +42 +42 +42 +41 +40 +39 +37 +36 +28 +8 +-7 +-18 +-27 +-33 +-38 +-41 +-43 +-44 +-43 +-42 +-41 +-40 +-38 +-37 +-26 +-4 +11 +22 +31 +36 +40 +42 +43 +44 +43 +42 +40 +38 +37 +36 +34 +33 +31 +29 +27 +25 +24 +23 +21 +21 +20 +19 +17 +16 +14 +14 +6 +-13 +-27 +-38 +-46 +-51 +-55 +-56 +-57 +-56 +-55 +-53 +-51 +-49 +-47 +-45 +-33 +-11 +4 +16 +24 +30 +33 +36 +38 +40 +39 +39 +38 +37 +36 +35 +27 +7 +-8 +-20 +-28 +-34 +-37 +-41 +-43 +-44 +-44 +-44 +-42 +-41 +-39 +-38 +-27 +-5 +11 +22 +29 +35 +39 +41 +42 +42 +41 +40 +38 +37 +36 +35 +28 +8 +-8 +-19 +-27 +-34 +-37 +-39 +-40 +-41 +-41 +-41 +-39 +-38 +-37 +-36 +-25 +-3 +12 +23 +31 +37 +40 +43 +44 +44 +45 +44 +42 +40 +38 +37 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-42 +-41 +-39 +-38 +-36 +-35 +-25 +-3 +11 +22 +29 +35 +39 +41 +41 +42 +41 +41 +39 +38 +37 +36 +28 +8 +-8 +-20 +-28 +-35 +-40 +-43 +-45 +-45 +-44 +-44 +-43 +-41 +-39 +-38 +-27 +-5 +10 +21 +29 +34 +37 +39 +40 +41 +41 +40 +39 +38 +37 +36 +28 +8 +-7 +-19 +-27 +-32 +-36 +-39 +-40 +-41 +-42 +-41 +-40 +-39 +-37 +-35 +-26 +-4 +11 +23 +30 +36 +39 +42 +43 +44 +44 +43 +42 +40 +38 +37 +29 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-41 +-41 +-41 +-40 +-39 +-37 +-36 +-34 +-25 +-3 +12 +23 +31 +36 +39 +42 +43 +43 +43 +43 +42 +41 +39 +37 +28 +7 +-8 +-20 +-28 +-34 +-38 +-42 +-43 +-44 +-44 +-43 +-42 +-41 +-39 +-37 +-35 +-33 +-31 +-29 +-28 +-27 +-26 +-25 +-24 +-22 +-21 +-19 +-17 +-16 +-15 +-13 +-4 +18 +32 +43 +49 +54 +56 +57 +57 +57 +56 +54 +52 +51 +49 +47 +45 +43 +41 +39 +37 +34 +32 +30 +29 +27 +24 +23 +21 +20 +19 +18 +10 +-8 +-23 +-33 +-41 +-47 +-50 +-52 +-53 +-53 +-52 +-51 +-50 +-49 +-47 +-45 +-42 +-40 +-38 +-36 +-33 +-32 +-30 +-27 +-25 +-24 +-22 +-20 +-19 +-18 +-16 +-15 +-6 +15 +29 +40 +47 +52 +54 +56 +56 +56 +55 +54 +53 +51 +49 +47 +44 +42 +39 +37 +34 +32 +30 +29 +26 +25 +24 +22 +21 +20 +18 +17 +10 +-9 +-24 +-35 +-43 +-49 +-53 +-55 +-56 +-56 +-56 +-54 +-52 +-50 +-48 +-46 +-44 +-41 +-38 +-36 +-34 +-32 +-30 +-28 +-26 +-25 +-24 +-23 +-21 +-20 +-19 +-18 +-8 +13 +29 +39 +46 +51 +54 +55 +56 +55 +54 +52 +50 +49 +47 +44 +42 +40 +37 +35 +33 +32 +29 +28 +25 +25 +23 +22 +21 +21 +20 +19 +10 +-8 +-22 +-32 +-41 +-46 +-50 +-52 +-53 +-53 +-52 +-50 +-49 +-47 +-45 +-43 +-40 +-38 +-36 +-35 +-33 +-31 +-30 +-28 +-26 +-24 +-23 +-22 +-21 +-19 +-18 +-17 +-6 +14 +29 +40 +48 +52 +55 +57 +57 +57 +56 +54 +52 +50 +48 +46 +44 +41 +38 +36 +35 +33 +32 +30 +28 +27 +25 +24 +21 +20 +18 +17 +9 +-10 +-25 +-35 +-42 +-47 +-51 +-52 +-53 +-53 +-52 +-51 +-50 +-48 +-46 +-44 +-42 +-40 +-39 +-37 +-35 +-33 +-31 +-29 +-27 +-25 +-24 +-22 +-20 +-19 +-17 +-16 +-6 +15 +29 +38 +45 +49 +51 +53 +53 +53 +52 +51 +50 +48 +47 +44 +43 +41 +39 +36 +34 +32 +30 +28 +26 +24 +22 +21 +20 +18 +18 +17 +9 +-11 +-25 +-35 +-41 +-47 +-51 +-52 +-52 +-53 +-53 +-52 +-51 +-49 +-47 +-44 +-42 +-39 +-37 +-35 +-33 +-30 +-28 +-26 +-25 +-23 +-22 +-20 +-19 +-18 +-17 +-16 +-6 +15 +29 +40 +47 +51 +54 +55 +56 +56 +55 +53 +52 +50 +48 +46 +37 +16 +0 +-12 +-20 +-27 +-32 +-35 +-37 +-37 +-37 +-36 +-36 +-35 +-33 +-32 +-22 +-1 +14 +24 +31 +37 +40 +42 +43 +44 +43 +43 +42 +40 +38 +37 +29 +9 +-6 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-37 +-27 +-5 +10 +22 +30 +36 +39 +42 +43 +43 +42 +41 +40 +39 +37 +36 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-42 +-42 +-42 +-41 +-39 +-38 +-37 +-27 +-4 +10 +22 +29 +35 +38 +41 +43 +43 +42 +41 +40 +40 +38 +37 +29 +10 +-6 +-18 +-27 +-33 +-38 +-40 +-41 +-42 +-42 +-41 +-40 +-38 +-36 +-35 +-24 +-2 +13 +24 +32 +37 +40 +42 +43 +43 +42 +42 +40 +39 +38 +37 +28 +8 +-7 +-18 +-27 +-32 +-37 +-40 +-41 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-26 +-5 +10 +21 +29 +35 +39 +41 +43 +43 +43 +42 +40 +39 +38 +37 +28 +8 +-8 +-19 +-27 +-34 +-38 +-41 +-42 +-43 +-43 +-41 +-41 +-38 +-36 +-34 +-23 +-2 +12 +24 +31 +36 +39 +41 +42 +43 +42 +42 +40 +39 +38 +36 +28 +9 +-7 +-18 +-27 +-31 +-36 +-39 +-41 +-42 +-43 +-43 +-43 +-41 +-40 +-38 +-28 +-6 +9 +21 +29 +34 +38 +40 +41 +42 +42 +41 +40 +39 +37 +36 +27 +8 +-7 +-19 +-28 +-34 +-39 +-41 +-42 +-42 +-43 +-42 +-41 +-40 +-38 +-36 +-25 +-4 +11 +22 +29 +35 +38 +41 +42 +43 +43 +42 +42 +40 +39 +38 +37 +35 +33 +32 +30 +29 +27 +25 +23 +23 +21 +20 +19 +17 +16 +16 +8 +-10 +-25 +-35 +-42 +-47 +-51 +-53 +-54 +-54 +-53 +-52 +-51 +-49 +-47 +-45 +-34 +-12 +4 +14 +23 +28 +32 +36 +37 +38 +38 +38 +37 +36 +35 +33 +24 +4 +-11 +-23 +-31 +-37 +-41 +-43 +-45 +-46 +-45 +-45 +-43 +-42 +-40 +-38 +-27 +-5 +10 +21 +29 +35 +38 +39 +39 +40 +40 +40 +39 +38 +37 +35 +27 +8 +-7 +-18 +-26 +-32 +-37 +-40 +-42 +-42 +-42 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +11 +22 +30 +36 +39 +42 +43 +44 +43 +42 +40 +39 +37 +36 +27 +7 +-7 +-19 +-28 +-34 +-37 +-40 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-25 +-4 +11 +22 +30 +35 +39 +42 +43 +44 +44 +43 +42 +41 +39 +38 +29 +9 +-7 +-19 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-36 +-25 +-3 +11 +22 +30 +36 +39 +41 +42 +42 +42 +42 +41 +40 +38 +37 +29 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-41 +-43 +-42 +-42 +-40 +-38 +-36 +-35 +-24 +-2 +13 +24 +32 +36 +40 +43 +44 +45 +44 +43 +40 +39 +37 +36 +27 +7 +-9 +-20 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-39 +-29 +-7 +7 +19 +27 +33 +36 +39 +40 +41 +40 +40 +39 +39 +38 +36 +27 +8 +-7 +-19 +-28 +-34 +-39 +-42 +-44 +-44 +-44 +-43 +-42 +-40 +-38 +-36 +-25 +-3 +13 +24 +32 +37 +41 +43 +43 +43 +43 +42 +41 +40 +38 +36 +28 +9 +-6 +-17 +-26 +-31 +-36 +-38 +-40 +-40 +-41 +-41 +-40 +-38 +-37 +-36 +-34 +-32 +-30 +-28 +-27 +-25 +-23 +-22 +-20 +-18 +-17 +-16 +-15 +-15 +-14 +-13 +-4 +16 +31 +40 +48 +52 +55 +56 +57 +56 +55 +54 +52 +50 +48 +45 +43 +40 +39 +37 +33 +30 +29 +27 +25 +24 +24 +22 +21 +20 +19 +19 +11 +-8 +-23 +-34 +-42 +-47 +-50 +-52 +-53 +-54 +-53 +-51 +-49 +-46 +-45 +-42 +-30 +-7 +7 +20 +27 +33 +37 +39 +40 +41 +41 +40 +40 +38 +37 +35 +28 +8 +-7 +-18 +-27 +-32 +-36 +-39 +-41 +-41 +-41 +-42 +-41 +-39 +-37 +-35 +-25 +-4 +10 +21 +30 +35 +39 +42 +43 +43 +43 +42 +41 +39 +37 +35 +27 +7 +-9 +-20 +-29 +-34 +-38 +-39 +-41 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-33 +-32 +-30 +-29 +-27 +-25 +-24 +-22 +-21 +-20 +-18 +-17 +-16 +-14 +-13 +-13 +-2 +19 +33 +43 +49 +53 +56 +57 +57 +57 +55 +54 +52 +50 +48 +46 +44 +42 +39 +37 +34 +33 +30 +29 +28 +26 +24 +23 +22 +20 +19 +18 +9 +-10 +-25 +-35 +-43 +-48 +-52 +-54 +-55 +-54 +-54 +-52 +-50 +-49 +-46 +-45 +-33 +-11 +5 +16 +24 +30 +33 +36 +37 +38 +38 +37 +36 +36 +35 +33 +26 +6 +-8 +-20 +-29 +-35 +-40 +-43 +-45 +-45 +-46 +-45 +-44 +-42 +-41 +-39 +-37 +-35 +-33 +-31 +-29 +-28 +-26 +-24 +-22 +-21 +-20 +-18 +-18 +-17 +-17 +-16 +-6 +14 +28 +38 +45 +50 +54 +55 +55 +56 +55 +53 +52 +49 +47 +45 +36 +16 +0 +-13 +-21 +-27 +-32 +-35 +-37 +-37 +-37 +-37 +-37 +-36 +-35 +-32 +-22 +-1 +14 +25 +32 +37 +41 +43 +43 +43 +43 +42 +40 +39 +37 +36 +34 +32 +31 +30 +28 +26 +25 +24 +23 +21 +20 +19 +18 +16 +15 +14 +7 +-13 +-27 +-37 +-45 +-49 +-53 +-54 +-56 +-56 +-55 +-53 +-51 +-49 +-46 +-44 +-42 +-40 +-38 +-36 +-34 +-32 +-30 +-28 +-26 +-25 +-23 +-21 +-20 +-18 +-16 +-15 +-6 +16 +30 +40 +48 +52 +55 +56 +56 +56 +54 +53 +51 +49 +46 +44 +42 +40 +38 +36 +34 +32 +31 +30 +28 +26 +25 +24 +22 +20 +19 +18 +10 +-9 +-24 +-35 +-42 +-47 +-50 +-53 +-53 +-53 +-52 +-50 +-49 +-47 +-44 +-42 +-31 +-10 +6 +17 +25 +31 +34 +36 +38 +38 +38 +38 +37 +36 +34 +33 +25 +5 +-10 +-21 +-30 +-36 +-40 +-43 +-45 +-46 +-46 +-45 +-44 +-42 +-40 +-38 +-36 +-34 +-32 +-30 +-28 +-26 +-25 +-23 +-21 +-20 +-19 +-18 +-17 +-16 +-15 +-14 +-4 +16 +31 +41 +48 +53 +56 +58 +58 +58 +57 +55 +53 +51 +48 +46 +43 +41 +38 +36 +34 +32 +31 +30 +29 +27 +26 +24 +23 +21 +20 +19 +11 +-8 +-23 +-34 +-42 +-48 +-51 +-53 +-53 +-53 +-53 +-52 +-51 +-49 +-47 +-44 +-33 +-10 +5 +17 +24 +30 +33 +36 +37 +38 +37 +37 +36 +35 +34 +33 +25 +6 +-9 +-20 +-28 +-34 +-38 +-40 +-42 +-43 +-43 +-43 +-42 +-40 +-38 +-37 +-35 +-33 +-31 +-29 +-27 +-25 +-24 +-22 +-21 +-19 +-18 +-17 +-16 +-15 +-15 +-14 +-4 +18 +31 +42 +48 +53 +55 +58 +58 +58 +57 +55 +54 +52 +50 +48 +44 +42 +39 +36 +34 +32 +30 +28 +26 +25 +23 +22 +20 +19 +18 +17 +9 +-10 +-24 +-34 +-43 +-48 +-52 +-54 +-56 +-55 +-55 +-53 +-52 +-50 +-48 +-45 +-43 +-40 +-38 +-35 +-33 +-31 +-29 +-27 +-26 +-24 +-24 +-22 +-21 +-19 +-18 +-17 +-6 +15 +29 +40 +46 +52 +54 +56 +57 +57 +55 +53 +51 +49 +47 +45 +36 +16 +0 +-12 +-21 +-27 +-32 +-35 +-37 +-38 +-38 +-38 +-37 +-36 +-35 +-34 +-24 +-3 +11 +22 +31 +36 +39 +41 +42 +43 +43 +42 +42 +41 +39 +37 +28 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-38 +-37 +-34 +-24 +-2 +13 +23 +31 +36 +40 +42 +43 +44 +43 +43 +41 +40 +39 +38 +29 +9 +-6 +-18 +-27 +-33 +-37 +-40 +-42 +-42 +-42 +-42 +-41 +-40 +-38 +-36 +-25 +-3 +12 +23 +30 +36 +39 +42 +42 +42 +42 +41 +40 +39 +37 +36 +28 +8 +-6 +-17 +-26 +-32 +-36 +-40 +-41 +-43 +-42 +-42 +-41 +-40 +-38 +-37 +-26 +-4 +10 +21 +29 +35 +39 +41 +42 +43 +43 +42 +41 +39 +38 +37 +28 +8 +-7 +-19 +-27 +-33 +-37 +-40 +-41 +-42 +-42 +-41 +-41 +-40 +-38 +-37 +-26 +-5 +10 +21 +28 +34 +38 +41 +42 +43 +42 +42 +40 +39 +38 +37 +29 +8 +-7 +-19 +-28 +-34 +-38 +-40 +-42 +-42 +-41 +-41 +-40 +-39 +-37 +-36 +-25 +-4 +11 +22 +29 +34 +38 +40 +42 +43 +43 +42 +41 +40 +38 +37 +29 +10 +-6 +-18 +-26 +-33 +-37 +-40 +-42 +-43 +-42 +-41 +-40 +-39 +-37 +-35 +-24 +-1 +14 +25 +33 +39 +42 +44 +45 +45 +44 +42 +41 +41 +39 +38 +29 +9 +-6 +-17 +-26 +-32 +-36 +-38 +-40 +-41 +-42 +-41 +-41 +-40 +-38 +-36 +-26 +-5 +10 +21 +29 +34 +37 +40 +41 +43 +42 +41 +39 +39 +37 +35 +33 +32 +29 +28 +26 +25 +23 +22 +20 +20 +18 +18 +16 +15 +14 +13 +6 +-12 +-27 +-38 +-46 +-51 +-54 +-56 +-58 +-57 +-56 +-54 +-53 +-51 +-48 +-45 +-34 +-11 +5 +17 +25 +31 +34 +38 +39 +39 +39 +39 +38 +37 +36 +34 +26 +7 +-8 +-19 +-27 +-32 +-36 +-39 +-41 +-41 +-42 +-41 +-40 +-39 +-38 +-36 +-26 +-4 +11 +22 +30 +35 +39 +41 +43 +43 +43 +42 +41 +39 +37 +36 +27 +7 +-8 +-20 +-28 +-34 +-38 +-40 +-41 +-43 +-42 +-42 +-41 +-39 +-38 +-37 +-26 +-5 +9 +20 +27 +33 +36 +40 +41 +42 +41 +42 +40 +40 +38 +37 +29 +9 +-7 +-18 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-43 +-41 +-40 +-38 +-36 +-25 +-3 +11 +22 +30 +35 +38 +40 +42 +43 +42 +41 +40 +39 +37 +36 +29 +9 +-6 +-18 +-26 +-32 +-36 +-40 +-42 +-43 +-44 +-43 +-42 +-40 +-39 +-37 +-27 +-5 +10 +22 +30 +35 +39 +41 +42 +42 +42 +41 +39 +39 +36 +35 +26 +7 +-9 +-20 +-28 +-33 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-40 +-38 +-28 +-6 +9 +21 +28 +34 +37 +40 +42 +43 +42 +42 +40 +39 +38 +36 +28 +7 +-8 +-20 +-29 +-35 +-39 +-41 +-43 +-43 +-43 +-42 +-41 +-39 +-37 +-35 +-25 +-3 +11 +22 +30 +36 +39 +42 +43 +44 +43 +43 +41 +40 +38 +37 +30 +10 +-4 +-16 +-25 +-31 +-36 +-40 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-35 +-25 +-3 +12 +23 +32 +38 +41 +43 +44 +44 +43 +42 +41 +39 +38 +36 +28 +8 +-7 +-18 +-27 +-33 +-37 +-39 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-38 +-37 +-35 +-33 +-31 +-30 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-15 +-14 +-4 +16 +30 +40 +47 +52 +54 +56 +56 +56 +56 +54 +52 +51 +50 +47 +38 +18 +2 +-11 +-20 +-26 +-31 +-35 +-37 +-37 +-37 +-37 +-36 +-35 +-34 +-31 +-20 +1 +16 +26 +34 +39 +43 +45 +45 +46 +45 +44 +42 +41 +40 +38 +30 +11 +-4 +-16 +-25 +-30 +-34 +-38 +-40 +-41 +-41 +-41 +-41 +-39 +-38 +-36 +-26 +-4 +11 +22 +31 +37 +40 +42 +43 +44 +43 +42 +41 +40 +37 +36 +27 +7 +-8 +-20 +-29 +-35 +-39 +-42 +-43 +-43 +-44 +-43 +-42 +-41 +-39 +-38 +-28 +-6 +9 +19 +27 +32 +36 +38 +40 +40 +40 +40 +39 +38 +37 +35 +27 +8 +-8 +-20 +-29 +-35 +-39 +-42 +-42 +-43 +-43 +-43 +-41 +-40 +-38 +-37 +-26 +-3 +12 +23 +31 +36 +39 +41 +42 +43 +42 +42 +41 +40 +38 +37 +29 +10 +-5 +-16 +-25 +-31 +-36 +-39 +-41 +-41 +-41 +-41 +-40 +-39 +-37 +-35 +-24 +-3 +13 +24 +32 +38 +42 +44 +46 +46 +45 +44 +43 +41 +39 +37 +29 +9 +-6 +-17 +-26 +-32 +-37 +-39 +-42 +-42 +-42 +-42 +-41 +-39 +-38 +-37 +-26 +-5 +10 +21 +29 +34 +38 +40 +41 +42 +42 +41 +41 +40 +38 +36 +28 +8 +-8 +-20 +-29 +-34 +-38 +-41 +-43 +-43 +-42 +-42 +-41 +-40 +-38 +-36 +-25 +-3 +12 +24 +32 +37 +40 +42 +43 +43 +43 +42 +41 +40 +38 +37 +29 +10 +-6 +-17 +-25 +-32 +-35 +-39 +-41 +-42 +-42 +-42 +-41 +-40 +-38 +-36 +-26 +-4 +11 +22 +30 +36 +40 +42 +43 +43 +42 +41 +39 +37 +36 +35 +34 +33 +30 +29 +27 +25 +24 +23 +22 +21 +20 +19 +17 +16 +15 +13 +6 +-13 +-27 +-38 +-45 +-50 +-53 +-54 +-56 +-55 +-54 +-52 +-50 +-47 +-45 +-43 +-32 +-10 +4 +16 +24 +30 +34 +37 +38 +39 +39 +40 +40 +38 +37 +36 +28 +8 +-8 +-20 +-28 +-34 +-37 +-41 +-42 +-43 +-43 +-43 +-41 +-40 +-38 +-36 +-26 +-4 +11 +23 +31 +36 +40 +42 +43 +43 +42 +41 +39 +38 +36 +35 +26 +7 +-9 +-20 +-28 +-34 +-39 +-41 +-43 +-43 +-43 +-43 +-41 +-40 +-39 +-38 +-28 +-6 +9 +21 +28 +34 +39 +41 +41 +42 +41 +41 +40 +40 +38 +37 +29 +8 +-7 +-19 +-27 +-33 +-37 +-40 +-41 +-42 +-41 +-41 +-39 +-37 +-35 +-33 +-23 +-1 +14 +24 +32 +36 +39 +42 +42 +43 +43 +43 +42 +40 +38 +37 +29 +10 +-5 +-16 +-25 +-32 +-36 +-39 +-41 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-25 +-3 +13 +24 +32 +37 +41 +44 +45 +46 +45 +44 +43 +42 +39 +38 +29 +9 +-6 +-18 +-26 +-32 +-37 +-39 +-41 +-42 +-42 +-41 +-40 +-38 +-37 +-36 +-25 +-4 +11 +22 +30 +35 +38 +41 +42 +42 +42 +42 +41 +40 +38 +37 +29 +9 +-6 +-18 +-26 +-33 +-38 +-40 +-42 +-43 +-43 +-42 +-42 +-40 +-38 +-37 +-26 +-4 +10 +21 +29 +36 +39 +41 +43 +43 +42 +42 +40 +39 +37 +36 +26 +7 +-8 +-20 +-29 +-34 +-38 +-41 +-43 +-43 +-42 +-41 +-40 +-39 +-38 +-36 +-27 +-6 +10 +21 +28 +34 +37 +40 +41 +42 +42 +41 +40 +39 +37 +36 +27 +8 +-7 +-19 +-28 +-34 +-39 +-42 +-44 +-44 +-44 +-42 +-42 +-41 +-39 +-37 +-27 +-5 +10 +21 +29 +34 +38 +40 +41 +41 +41 +40 +39 +38 +36 +35 +27 +7 +-8 +-19 +-28 +-33 +-37 +-39 +-41 +-41 +-41 +-41 +-40 +-38 +-37 +-35 +-25 +-4 +11 +23 +31 +37 +40 +43 +43 +45 +45 +44 +43 +42 +40 +39 +31 +12 +-4 +-16 +-25 +-32 +-37 +-39 +-41 +-41 +-41 +-40 +-40 +-38 +-37 +-35 +-34 +-31 +-30 +-28 +-27 +-26 +-25 +-23 +-23 +-21 +-19 +-18 +-17 +-16 +-15 +-14 +-4 +17 +31 +42 +49 +54 +55 +57 +56 +56 +54 +52 +49 +47 +45 +43 +35 +14 +-2 +-14 +-23 +-29 +-33 +-36 +-37 +-38 +-38 +-37 +-37 +-36 +-35 +-34 +-23 +-2 +13 +24 +32 +37 +40 +43 +44 +45 +45 +45 +44 +42 +41 +40 +38 +36 +34 +32 +30 +28 +26 +26 +24 +23 +21 +21 +19 +19 +17 +17 +9 +-10 +-25 +-35 +-44 +-49 +-53 +-55 +-56 +-56 +-55 +-54 +-52 +-50 +-47 +-45 +-34 +-12 +4 +16 +23 +29 +32 +35 +36 +37 +36 +36 +35 +35 +33 +32 +24 +5 +-10 +-21 +-30 +-36 +-39 +-42 +-43 +-43 +-43 +-43 +-41 +-40 +-39 +-37 +-26 +-4 +11 +22 +30 +36 +40 +43 +44 +45 +44 +43 +42 +40 +38 +36 +28 +8 +-8 +-19 +-27 +-33 +-38 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-39 +-37 +-36 +-34 +-32 +-30 +-29 +-27 +-25 +-24 +-23 +-21 +-19 +-17 +-14 +-13 +-13 +-12 +-2 +18 +32 +42 +48 +53 +55 +58 +57 +58 +56 +55 +54 +52 +50 +48 +46 +44 +42 +39 +37 +35 +32 +30 +28 +26 +24 +23 +21 +20 +19 +18 +10 +-8 +-23 +-34 +-42 +-47 +-51 +-53 +-53 +-53 +-53 +-51 +-50 +-48 +-46 +-45 +-34 +-11 +4 +16 +25 +31 +35 +38 +39 +40 +40 +40 +38 +36 +34 +33 +25 +4 +-10 +-22 +-30 +-36 +-40 +-43 +-44 +-44 +-45 +-43 +-43 +-41 +-39 +-37 +-36 +-35 +-33 +-31 +-30 +-28 +-27 +-25 +-24 +-22 +-20 +-19 +-17 +-16 +-14 +-13 +-3 +17 +32 +41 +48 +53 +55 +56 +56 +56 +55 +53 +52 +50 +48 +46 +45 +43 +40 +39 +37 +35 +33 +30 +28 +26 +24 +22 +20 +19 +18 +17 +10 +-10 +-24 +-35 +-42 +-47 +-51 +-52 +-54 +-54 +-53 +-53 +-51 +-49 +-47 +-45 +-34 +-12 +3 +15 +24 +29 +33 +36 +38 +38 +39 +38 +37 +36 +34 +33 +25 +6 +-10 +-20 +-29 +-36 +-40 +-43 +-44 +-44 +-44 +-43 +-41 +-40 +-38 +-37 +-26 +-4 +10 +21 +29 +35 +38 +41 +42 +43 +42 +42 +41 +40 +39 +38 +31 +10 +-5 +-17 +-25 +-31 +-36 +-39 +-40 +-41 +-41 +-41 +-40 +-38 +-37 +-35 +-25 +-3 +12 +23 +32 +37 +41 +43 +44 +44 +43 +43 +41 +40 +38 +36 +27 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-36 +-34 +-33 +-32 +-31 +-30 +-29 +-27 +-25 +-23 +-22 +-20 +-18 +-17 +-17 +-15 +-14 +-13 +-3 +18 +32 +43 +49 +53 +56 +57 +57 +56 +54 +53 +51 +50 +48 +45 +37 +16 +1 +-11 +-19 +-26 +-31 +-34 +-36 +-37 +-38 +-38 +-38 +-37 +-36 +-34 +-23 +-2 +13 +25 +33 +38 +42 +44 +45 +47 +46 +45 +43 +42 +40 +38 +28 +8 +-7 +-19 +-28 +-34 +-38 +-41 +-43 +-44 +-44 +-43 +-42 +-40 +-39 +-37 +-27 +-6 +9 +20 +27 +32 +36 +38 +39 +39 +39 +38 +38 +37 +36 +35 +33 +32 +31 +29 +28 +26 +25 +23 +21 +20 +19 +18 +17 +16 +15 +14 +7 +-12 +-26 +-36 +-43 +-49 +-52 +-53 +-54 +-54 +-52 +-52 +-51 +-49 +-47 +-45 +-34 +-12 +4 +15 +24 +30 +34 +37 +38 +40 +40 +41 +39 +38 +36 +36 +27 +8 +-8 +-21 +-29 +-35 +-39 +-41 +-42 +-43 +-43 +-41 +-40 +-39 +-38 +-36 +-34 +-32 +-31 +-30 +-29 +-27 +-26 +-25 +-22 +-21 +-19 +-18 +-16 +-15 +-15 +-14 +-4 +16 +31 +41 +48 +53 +55 +56 +57 +56 +54 +52 +50 +48 +47 +45 +43 +41 +38 +36 +34 +32 +31 +29 +27 +25 +23 +22 +20 +18 +17 +17 +9 +-11 +-25 +-37 +-44 +-49 +-52 +-54 +-55 +-54 +-53 +-51 +-50 +-48 +-46 +-44 +-34 +-12 +4 +15 +23 +29 +33 +36 +37 +39 +39 +38 +37 +36 +35 +34 +26 +6 +-8 +-20 +-29 +-35 +-40 +-43 +-44 +-45 +-45 +-45 +-44 +-42 +-41 +-38 +-28 +-6 +9 +22 +30 +35 +38 +40 +41 +42 +41 +41 +39 +38 +36 +36 +27 +8 +-7 +-18 +-27 +-32 +-37 +-40 +-41 +-42 +-41 +-41 +-40 +-39 +-38 +-36 +-26 +-5 +10 +21 +29 +35 +39 +42 +42 +43 +43 +43 +42 +41 +40 +39 +30 +11 +-4 +-15 +-25 +-31 +-35 +-38 +-39 +-39 +-39 +-39 +-38 +-37 +-36 +-34 +-23 +-1 +14 +25 +33 +38 +41 +44 +44 +44 +43 +43 +41 +40 +39 +37 +29 +10 +-6 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-43 +-43 +-42 +-40 +-38 +-37 +-27 +-6 +9 +20 +28 +34 +37 +40 +41 +42 +42 +41 +40 +39 +37 +35 +27 +7 +-9 +-20 +-28 +-34 +-39 +-41 +-43 +-43 +-43 +-41 +-40 +-39 +-37 +-36 +-25 +-4 +11 +22 +29 +35 +38 +40 +41 +42 +42 +42 +41 +40 +38 +37 +29 +9 +-7 +-18 +-26 +-33 +-38 +-41 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-38 +-27 +-5 +11 +22 +30 +36 +39 +41 +43 +43 +42 +42 +41 +40 +38 +36 +28 +9 +-6 +-17 +-26 +-32 +-36 +-38 +-39 +-41 +-41 +-41 +-40 +-39 +-37 +-36 +-34 +-32 +-31 +-29 +-27 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-15 +-14 +-13 +-3 +17 +31 +41 +47 +53 +55 +57 +57 +58 +57 +55 +53 +51 +49 +48 +39 +18 +2 +-10 +-19 +-26 +-31 +-34 +-36 +-37 +-38 +-37 +-36 +-34 +-33 +-31 +-21 +0 +14 +25 +33 +38 +41 +42 +43 +44 +44 +43 +42 +41 +39 +38 +30 +10 +-4 +-16 +-25 +-31 +-36 +-38 +-40 +-42 +-42 +-42 +-42 +-41 +-38 +-36 +-26 +-4 +11 +21 +29 +34 +37 +40 +42 +42 +41 +41 +39 +38 +36 +35 +27 +8 +-8 +-19 +-28 +-34 +-38 +-41 +-42 +-42 +-41 +-40 +-38 +-37 +-36 +-35 +-24 +-3 +12 +23 +30 +36 +39 +42 +43 +44 +43 +43 +42 +40 +39 +38 +30 +10 +-6 +-18 +-26 +-32 +-36 +-40 +-41 +-42 +-42 +-42 +-41 +-40 +-38 +-36 +-25 +-3 +12 +23 +32 +37 +40 +42 +43 +43 +43 +42 +40 +39 +37 +36 +27 +7 +-7 +-19 +-27 +-32 +-37 +-39 +-41 +-41 +-41 +-40 +-39 +-39 +-38 +-37 +-27 +-6 +9 +21 +28 +34 +37 +40 +41 +43 +42 +42 +41 +41 +39 +38 +29 +9 +-6 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-43 +-43 +-42 +-40 +-39 +-37 +-25 +-4 +11 +22 +30 +36 +39 +41 +42 +42 +42 +40 +39 +37 +36 +35 +27 +8 +-7 +-19 +-27 +-33 +-36 +-39 +-41 +-41 +-41 +-41 +-41 +-40 +-39 +-37 +-26 +-5 +9 +20 +28 +34 +37 +40 +41 +43 +42 +42 +41 +40 +38 +37 +28 +8 +-7 +-19 +-28 +-34 +-39 +-41 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-37 +-26 +-4 +10 +22 +30 +35 +38 +41 +41 +42 +42 +42 +40 +39 +38 +38 +36 +34 +33 +32 +29 +28 +26 +24 +23 +21 +20 +18 +17 +16 +16 +15 +7 +-11 +-25 +-36 +-43 +-48 +-51 +-53 +-53 +-52 +-51 +-50 +-48 +-47 +-44 +-43 +-33 +-11 +5 +16 +24 +29 +33 +36 +37 +38 +38 +38 +37 +36 +36 +35 +27 +8 +-7 +-19 +-28 +-34 +-38 +-41 +-43 +-44 +-44 +-43 +-42 +-41 +-39 +-38 +-27 +-6 +10 +21 +29 +35 +38 +40 +42 +42 +41 +41 +39 +38 +36 +34 +26 +7 +-9 +-20 +-28 +-34 +-39 +-41 +-43 +-43 +-43 +-42 +-40 +-40 +-39 +-37 +-27 +-6 +9 +20 +28 +34 +37 +40 +41 +42 +41 +41 +40 +39 +37 +36 +28 +8 +-8 +-20 +-29 +-35 +-39 +-42 +-44 +-44 +-43 +-42 +-41 +-40 +-39 +-37 +-27 +-5 +10 +21 +29 +34 +37 +40 +41 +42 +40 +40 +38 +37 +36 +35 +26 +7 +-8 +-20 +-28 +-34 +-39 +-42 +-44 +-45 +-45 +-44 +-43 +-42 +-40 +-39 +-27 +-5 +9 +21 +29 +34 +38 +41 +42 +42 +42 +42 +40 +39 +38 +36 +27 +7 +-8 +-19 +-28 +-33 +-37 +-40 +-41 +-42 +-41 +-41 +-39 +-38 +-36 +-35 +-25 +-3 +12 +23 +31 +37 +40 +42 +44 +44 +45 +45 +44 +42 +41 +40 +32 +13 +-2 +-14 +-23 +-29 +-34 +-36 +-38 +-39 +-39 +-39 +-38 +-36 +-35 +-33 +-22 +-1 +14 +25 +33 +39 +42 +44 +45 +45 +44 +43 +41 +39 +37 +35 +27 +7 +-8 +-20 +-29 +-34 +-39 +-42 +-43 +-43 +-44 +-42 +-41 +-40 +-40 +-38 +-37 +-35 +-34 +-32 +-30 +-28 +-27 +-25 +-24 +-22 +-20 +-19 +-17 +-15 +-14 +-13 +-3 +17 +31 +41 +48 +52 +54 +56 +56 +56 +55 +54 +52 +50 +48 +46 +44 +42 +40 +38 +35 +33 +31 +29 +26 +25 +23 +22 +21 +20 +19 +18 +10 +-9 +-23 +-34 +-41 +-47 +-50 +-52 +-53 +-53 +-52 +-51 +-50 +-47 +-46 +-43 +-41 +-39 +-37 +-35 +-32 +-30 +-28 +-25 +-24 +-22 +-21 +-19 +-18 +-17 +-16 +-16 +-6 +14 +28 +39 +46 +50 +53 +55 +55 +55 +54 +53 +51 +49 +47 +45 +43 +40 +37 +35 +33 +31 +30 +28 +26 +25 +24 +22 +20 +19 +18 +18 +10 +-9 +-24 +-34 +-42 +-48 +-52 +-54 +-55 +-54 +-53 +-51 +-50 +-48 +-47 +-44 +-42 +-39 +-36 +-33 +-31 +-29 +-27 +-25 +-24 +-23 +-22 +-21 +-19 +-18 +-16 +-15 +-5 +15 +30 +40 +47 +52 +55 +57 +57 +56 +55 +53 +51 +49 +47 +44 +42 +40 +38 +36 +34 +32 +30 +29 +27 +27 +24 +23 +21 +19 +18 +17 +9 +-11 +-25 +-36 +-44 +-49 +-53 +-55 +-56 +-55 +-54 +-53 +-51 +-49 +-47 +-45 +-43 +-41 +-39 +-37 +-35 +-33 +-31 +-30 +-28 +-26 +-25 +-23 +-22 +-20 +-18 +-16 +-6 +16 +30 +40 +47 +52 +54 +55 +55 +55 +54 +52 +50 +48 +46 +45 +43 +41 +39 +37 +35 +34 +32 +30 +28 +27 +25 +23 +22 +20 +19 +17 +10 +-9 +-24 +-35 +-42 +-47 +-49 +-51 +-52 +-52 +-51 +-50 +-48 +-47 +-45 +-44 +-41 +-39 +-37 +-35 +-32 +-30 +-29 +-27 +-25 +-24 +-22 +-21 +-19 +-17 +-16 +-15 +-5 +15 +29 +39 +46 +51 +54 +56 +56 +55 +53 +52 +50 +48 +46 +44 +42 +40 +38 +36 +34 +31 +29 +27 +25 +23 +22 +21 +19 +18 +17 +16 +8 +-11 +-25 +-35 +-43 +-48 +-52 +-55 +-56 +-56 +-55 +-54 +-53 +-51 +-49 +-46 +-44 +-42 +-40 +-37 +-34 +-32 +-30 +-28 +-27 +-25 +-24 +-22 +-21 +-20 +-18 +-17 +-7 +14 +29 +39 +46 +51 +54 +56 +56 +56 +55 +54 +53 +51 +49 +46 +37 +16 +1 +-12 +-20 +-27 +-32 +-35 +-35 +-36 +-37 +-36 +-35 +-34 +-33 +-32 +-21 +0 +15 +25 +33 +38 +41 +43 +45 +45 +45 +43 +43 +41 +40 +39 +31 +11 +-4 +-16 +-25 +-31 +-36 +-39 +-41 +-42 +-42 +-41 +-40 +-39 +-38 +-36 +-26 +-3 +12 +23 +31 +37 +41 +43 +44 +44 +44 +42 +41 +40 +38 +36 +28 +8 +-7 +-18 +-26 +-32 +-37 +-40 +-41 +-42 +-42 +-41 +-40 +-40 +-38 +-36 +-25 +-4 +11 +22 +30 +35 +39 +41 +43 +43 +43 +42 +42 +40 +39 +37 +29 +9 +-6 +-18 +-27 +-34 +-38 +-41 +-43 +-43 +-43 +-43 +-41 +-39 +-38 +-36 +-25 +-4 +11 +22 +29 +34 +38 +40 +42 +42 +42 +42 +41 +39 +38 +36 +28 +8 +-7 +-18 +-27 +-33 +-38 +-41 +-43 +-44 +-45 +-44 +-43 +-41 +-40 +-38 +-27 +-6 +9 +21 +29 +35 +39 +42 +43 +43 +42 +41 +39 +38 +36 +35 +27 +7 +-8 +-19 +-28 +-33 +-37 +-39 +-41 +-41 +-41 +-40 +-39 +-38 +-37 +-35 +-25 +-3 +12 +23 +30 +36 +41 +44 +44 +45 +45 +44 +43 +42 +40 +39 +30 +10 +-6 +-18 +-27 +-32 +-37 +-39 +-41 +-41 +-42 +-41 +-39 +-38 +-37 +-35 +-25 +-3 +12 +22 +30 +35 +38 +40 +42 +42 +42 +41 +41 +39 +38 +37 +29 +9 +-6 +-17 +-26 +-32 +-36 +-40 +-42 +-43 +-43 +-43 +-42 +-40 +-39 +-37 +-27 +-5 +10 +22 +30 +35 +39 +42 +43 +43 +43 +42 +41 +39 +38 +36 +34 +34 +32 +31 +29 +27 +26 +25 +24 +23 +22 +20 +19 +17 +16 +15 +7 +-12 +-26 +-36 +-44 +-49 +-52 +-54 +-55 +-55 +-55 +-53 +-51 +-49 +-47 +-45 +-33 +-12 +4 +15 +24 +30 +34 +36 +37 +38 +38 +38 +37 +37 +35 +34 +26 +6 +-8 +-20 +-30 +-36 +-41 +-44 +-45 +-46 +-45 +-45 +-44 +-42 +-40 +-38 +-28 +-6 +9 +21 +29 +34 +37 +39 +40 +40 +40 +39 +38 +37 +35 +34 +25 +6 +-9 +-20 +-28 +-34 +-38 +-41 +-41 +-43 +-44 +-43 +-43 +-42 +-40 +-39 +-29 +-7 +8 +19 +28 +34 +37 +40 +41 +42 +42 +41 +40 +40 +38 +36 +28 +7 +-8 +-19 +-28 +-34 +-39 +-41 +-42 +-42 +-42 +-41 +-40 +-38 +-36 +-34 +-23 +-2 +14 +24 +32 +37 +40 +42 +44 +44 +44 +43 +43 +41 +40 +38 +30 +10 +-4 +-16 +-25 +-30 +-35 +-38 +-40 +-41 +-41 +-40 +-39 +-38 +-37 +-35 +-25 +-4 +11 +23 +31 +36 +39 +42 +44 +44 +43 +41 +39 +38 +36 +35 +26 +7 +-8 +-19 +-28 +-32 +-37 +-39 +-41 +-42 +-41 +-40 +-39 +-38 +-37 +-36 +-25 +-4 +11 +22 +30 +36 +39 +42 +43 +44 +44 +44 +43 +42 +40 +39 +30 +10 +-6 +-17 +-26 +-32 +-36 +-39 +-41 +-42 +-42 +-40 +-39 +-39 +-37 +-35 +-24 +-2 +13 +24 +32 +37 +40 +43 +43 +44 +44 +44 +42 +41 +39 +38 +30 +11 +-4 +-15 +-25 +-31 +-35 +-38 +-40 +-41 +-40 +-41 +-40 +-39 +-36 +-35 +-25 +-4 +11 +22 +31 +36 +40 +42 +43 +44 +43 +42 +41 +39 +37 +36 +27 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-43 +-42 +-40 +-38 +-36 +-35 +-33 +-31 +-29 +-28 +-27 +-25 +-23 +-22 +-20 +-19 +-17 +-16 +-15 +-14 +-12 +-3 +19 +33 +43 +49 +53 +55 +57 +58 +56 +55 +53 +51 +49 +47 +45 +42 +40 +39 +37 +35 +33 +31 +29 +27 +25 +23 +22 +21 +19 +18 +17 +9 +-10 +-25 +-35 +-43 +-48 +-51 +-53 +-54 +-53 +-52 +-51 +-49 +-47 +-46 +-44 +-34 +-12 +4 +16 +25 +30 +34 +36 +38 +38 +38 +37 +37 +36 +34 +33 +24 +4 +-11 +-22 +-31 +-36 +-42 +-44 +-46 +-46 +-45 +-44 +-44 +-42 +-40 +-37 +-27 +-5 +10 +21 +29 +35 +38 +40 +41 +41 +40 +40 +39 +38 +37 +35 +27 +8 +-7 +-18 +-27 +-33 +-38 +-40 +-43 +-44 +-44 +-44 +-43 +-42 +-39 +-38 +-36 +-34 +-33 +-31 +-29 +-27 +-25 +-23 +-22 +-21 +-19 +-18 +-18 +-17 +-16 +-15 +-6 +15 +29 +39 +46 +51 +54 +56 +57 +56 +55 +53 +51 +49 +47 +45 +43 +40 +38 +36 +34 +32 +31 +29 +28 +26 +25 +24 +23 +22 +21 +20 +12 +-7 +-22 +-33 +-41 +-47 +-50 +-52 +-53 +-53 +-52 +-51 +-49 +-47 +-45 +-43 +-31 +-9 +7 +18 +27 +32 +35 +37 +38 +40 +40 +39 +38 +36 +35 +32 +24 +4 +-10 +-21 +-30 +-35 +-39 +-42 +-43 +-44 +-44 +-43 +-42 +-41 +-39 +-38 +-36 +-34 +-32 +-29 +-28 +-26 +-24 +-22 +-21 +-19 +-18 +-17 +-15 +-14 +-14 +-14 +-4 +16 +30 +41 +48 +52 +54 +56 +56 +56 +55 +54 +52 +51 +49 +46 +37 +17 +0 +-12 +-21 +-28 +-33 +-36 +-38 +-39 +-39 +-39 +-38 +-37 +-36 +-34 +-24 +-3 +13 +24 +32 +37 +40 +42 +43 +43 +43 +42 +41 +40 +38 +37 +34 +33 +31 +30 +29 +27 +26 +24 +22 +21 +19 +18 +17 +16 +14 +14 +6 +-13 +-27 +-36 +-43 +-48 +-52 +-54 +-55 +-55 +-53 +-53 +-51 +-49 +-47 +-45 +-43 +-41 +-38 +-37 +-35 +-32 +-30 +-28 +-27 +-25 +-23 +-21 +-19 +-17 +-16 +-15 +-5 +15 +29 +40 +47 +51 +53 +55 +55 +55 +54 +53 +52 +50 +47 +45 +43 +41 +39 +37 +35 +33 +30 +28 +27 +25 +24 +23 +21 +20 +19 +17 +10 +-9 +-23 +-33 +-41 +-46 +-50 +-51 +-52 +-52 +-51 +-51 +-50 +-48 +-46 +-43 +-33 +-11 +5 +17 +26 +32 +35 +38 +39 +40 +40 +39 +39 +37 +36 +34 +25 +6 +-9 +-21 +-30 +-36 +-40 +-43 +-45 +-45 +-45 +-44 +-42 +-41 +-39 +-37 +-35 +-33 +-32 +-30 +-29 +-27 +-25 +-23 +-21 +-20 +-19 +-17 +-16 +-15 +-14 +-13 +-4 +17 +32 +42 +49 +53 +56 +57 +57 +56 +54 +52 +50 +48 +46 +44 +42 +40 +38 +36 +34 +33 +31 +29 +28 +26 +24 +22 +20 +19 +18 +16 +8 +-11 +-26 +-36 +-43 +-49 +-52 +-54 +-55 +-55 +-54 +-52 +-50 +-48 +-46 +-44 +-33 +-11 +5 +16 +24 +30 +34 +37 +38 +39 +39 +39 +39 +38 +36 +35 +26 +7 +-8 +-19 +-28 +-34 +-39 +-42 +-43 +-44 +-44 +-43 +-42 +-40 +-38 +-36 +-34 +-32 +-31 +-29 +-27 +-25 +-24 +-23 +-22 +-21 +-20 +-19 +-17 +-16 +-15 +-13 +-3 +17 +32 +43 +50 +55 +58 +59 +58 +58 +56 +55 +52 +51 +49 +46 +43 +41 +39 +37 +36 +35 +32 +30 +28 +27 +26 +25 +24 +22 +20 +19 +10 +-8 +-24 +-34 +-42 +-47 +-51 +-52 +-53 +-53 +-52 +-50 +-48 +-47 +-45 +-44 +-42 +-39 +-36 +-35 +-34 +-31 +-30 +-28 +-27 +-25 +-23 +-21 +-20 +-18 +-16 +-15 +-6 +15 +29 +38 +44 +48 +51 +52 +52 +52 +51 +50 +49 +47 +45 +43 +34 +14 +-1 +-12 +-21 +-28 +-32 +-36 +-38 +-39 +-39 +-39 +-38 +-37 +-36 +-34 +-24 +-2 +13 +24 +32 +37 +41 +44 +45 +45 +45 +43 +42 +40 +39 +37 +28 +8 +-7 +-19 +-28 +-34 +-37 +-40 +-41 +-42 +-42 +-41 +-40 +-39 +-38 +-37 +-27 +-5 +10 +20 +28 +34 +38 +40 +42 +43 +43 +42 +41 +40 +39 +37 +29 +9 +-6 +-18 +-26 +-32 +-37 +-40 +-41 +-42 +-41 +-41 +-39 +-38 +-36 +-34 +-23 +-2 +14 +25 +33 +38 +41 +43 +43 +44 +44 +43 +42 +41 +38 +37 +28 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-41 +-42 +-43 +-42 +-41 +-40 +-39 +-37 +-27 +-6 +9 +20 +28 +34 +37 +40 +41 +42 +41 +41 +40 +38 +36 +35 +28 +8 +-7 +-18 +-26 +-32 +-36 +-38 +-40 +-41 +-41 +-40 +-39 +-38 +-37 +-35 +-25 +-4 +10 +21 +29 +35 +38 +41 +42 +43 +42 +42 +41 +40 +38 +36 +27 +7 +-8 +-20 +-29 +-34 +-38 +-41 +-42 +-43 +-42 +-41 +-40 +-39 +-36 +-35 +-25 +-3 +12 +23 +31 +36 +39 +42 +43 +44 +43 +43 +42 +40 +39 +37 +29 +9 +-5 +-17 +-26 +-32 +-37 +-40 +-42 +-42 +-43 +-42 +-41 +-40 +-39 +-36 +-25 +-4 +10 +21 +29 +35 +38 +41 +41 +41 +41 +40 +39 +38 +36 +36 +27 +7 +-7 +-19 +-27 +-33 +-36 +-39 +-41 +-42 +-42 +-42 +-41 +-40 +-38 +-36 +-25 +-4 +11 +24 +31 +37 +40 +43 +44 +45 +44 +43 +42 +40 +39 +37 +36 +34 +32 +31 +29 +28 +26 +25 +24 +22 +22 +20 +19 +18 +17 +16 +8 +-11 +-26 +-36 +-43 +-48 +-50 +-52 +-53 +-53 +-52 +-51 +-49 +-47 +-45 +-43 +-33 +-11 +3 +15 +23 +29 +33 +35 +37 +38 +38 +37 +37 +36 +34 +34 +25 +5 +-11 +-22 +-30 +-36 +-40 +-43 +-45 +-46 +-45 +-44 +-43 +-41 +-39 +-37 +-27 +-5 +10 +21 +29 +35 +38 +40 +41 +41 +41 +41 +40 +39 +37 +36 +27 +7 +-7 +-18 +-26 +-33 +-37 +-40 +-42 +-43 +-43 +-42 +-42 +-40 +-38 +-37 +-26 +-5 +10 +21 +29 +35 +38 +41 +42 +43 +42 +41 +40 +39 +36 +35 +27 +7 +-8 +-19 +-27 +-33 +-38 +-40 +-42 +-42 +-42 +-41 +-40 +-39 +-38 +-37 +-26 +-5 +10 +22 +29 +35 +39 +41 +42 +43 +44 +43 +42 +41 +40 +39 +31 +10 +-5 +-17 +-26 +-32 +-37 +-40 +-42 +-42 +-42 +-41 +-39 +-38 +-36 +-35 +-23 +-2 +13 +24 +31 +36 +39 +42 +43 +43 +43 +42 +40 +39 +37 +36 +29 +9 +-6 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-37 +-26 +-4 +11 +22 +31 +36 +40 +43 +44 +44 +43 +43 +41 +40 +38 +36 +28 +9 +-7 +-18 +-27 +-32 +-36 +-39 +-41 +-41 +-41 +-41 +-40 +-40 +-38 +-36 +-26 +-4 +11 +22 +30 +35 +39 +42 +44 +45 +44 +43 +42 +41 +39 +38 +29 +9 +-6 +-19 +-27 +-34 +-38 +-41 +-43 +-44 +-43 +-43 +-42 +-41 +-39 +-37 +-26 +-5 +10 +21 +28 +34 +37 +38 +38 +39 +39 +39 +38 +37 +35 +34 +26 +6 +-9 +-20 +-28 +-34 +-39 +-42 +-43 +-45 +-44 +-44 +-42 +-42 +-39 +-38 +-36 +-33 +-32 +-30 +-28 +-26 +-24 +-22 +-21 +-19 +-19 +-18 +-17 +-16 +-15 +-13 +-3 +18 +32 +42 +49 +54 +57 +59 +59 +59 +58 +57 +54 +52 +49 +47 +38 +18 +3 +-9 +-19 +-25 +-29 +-33 +-35 +-36 +-35 +-35 +-35 +-34 +-33 +-32 +-21 +0 +14 +24 +32 +37 +41 +43 +45 +46 +46 +45 +44 +43 +41 +40 +31 +11 +-4 +-16 +-25 +-32 +-36 +-39 +-42 +-42 +-41 +-41 +-40 +-39 +-37 +-36 +-25 +-3 +11 +22 +30 +35 +38 +40 +40 +41 +40 +40 +39 +38 +36 +35 +27 +8 +-7 +-19 +-27 +-33 +-38 +-40 +-42 +-43 +-44 +-43 +-42 +-40 +-39 +-38 +-27 +-5 +10 +22 +30 +36 +39 +42 +43 +44 +43 +43 +42 +41 +40 +38 +29 +9 +-5 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-42 +-40 +-40 +-38 +-36 +-35 +-25 +-3 +11 +22 +30 +35 +38 +41 +41 +42 +41 +41 +40 +39 +37 +36 +28 +9 +-6 +-17 +-27 +-34 +-39 +-41 +-43 +-44 +-45 +-44 +-42 +-41 +-39 +-38 +-27 +-5 +10 +21 +30 +35 +39 +42 +42 +42 +41 +41 +39 +39 +37 +36 +28 +8 +-6 +-18 +-27 +-33 +-36 +-40 +-41 +-42 +-42 +-42 +-41 +-39 +-38 +-36 +-25 +-4 +11 +22 +30 +36 +40 +42 +43 +44 +44 +43 +42 +40 +38 +37 +28 +8 +-7 +-18 +-28 +-33 +-37 +-40 +-43 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-25 +-4 +11 +22 +30 +36 +39 +41 +43 +43 +43 +42 +41 +41 +39 +38 +30 +10 +-5 +-17 +-26 +-32 +-37 +-40 +-42 +-42 +-42 +-42 +-41 +-39 +-38 +-36 +-25 +-3 +12 +23 +31 +36 +39 +42 +42 +42 +42 +42 +41 +41 +39 +37 +35 +34 +32 +31 +29 +28 +26 +24 +22 +21 +19 +18 +16 +15 +14 +13 +6 +-13 +-27 +-38 +-46 +-51 +-54 +-56 +-57 +-57 +-56 +-54 +-53 +-51 +-49 +-47 +-35 +-13 +2 +14 +22 +29 +32 +36 +37 +39 +38 +39 +37 +37 +35 +34 +26 +6 +-9 +-20 +-29 +-35 +-39 +-41 +-43 +-43 +-43 +-41 +-40 +-39 +-38 +-36 +-26 +-5 +10 +21 +29 +34 +37 +40 +42 +43 +43 +42 +41 +40 +39 +37 +29 +9 +-6 +-18 +-27 +-33 +-38 +-41 +-43 +-44 +-44 +-43 +-42 +-41 +-39 +-37 +-26 +-4 +10 +21 +30 +35 +38 +41 +42 +42 +41 +40 +38 +37 +36 +35 +27 +8 +-7 +-19 +-28 +-33 +-38 +-40 +-42 +-43 +-43 +-43 +-42 +-40 +-39 +-37 +-27 +-5 +10 +21 +30 +35 +39 +41 +43 +43 +42 +42 +40 +39 +38 +36 +27 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-41 +-40 +-39 +-37 +-36 +-35 +-24 +-3 +12 +23 +32 +37 +40 +43 +44 +44 +44 +44 +43 +42 +40 +39 +30 +11 +-5 +-16 +-26 +-32 +-37 +-40 +-42 +-42 +-42 +-42 +-40 +-38 +-37 +-35 +-24 +-2 +12 +24 +31 +36 +39 +42 +43 +43 +42 +42 +40 +39 +38 +36 +29 +9 +-6 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-44 +-43 +-44 +-42 +-41 +-38 +-28 +-7 +8 +19 +27 +33 +36 +39 +40 +41 +41 +41 +39 +38 +36 +35 +26 +6 +-9 +-21 +-29 +-35 +-38 +-41 +-42 +-43 +-42 +-41 +-40 +-39 +-37 +-36 +-26 +-4 +10 +21 +29 +34 +37 +40 +41 +42 +41 +41 +40 +39 +39 +38 +29 +9 +-6 +-18 +-27 +-32 +-37 +-41 +-42 +-43 +-42 +-42 +-41 +-39 +-37 +-34 +-24 +-2 +14 +26 +33 +39 +43 +45 +45 +46 +45 +44 +43 +42 +40 +39 +31 +11 +-4 +-15 +-24 +-30 +-34 +-37 +-39 +-40 +-40 +-40 +-39 +-38 +-37 +-36 +-25 +-3 +12 +23 +31 +37 +40 +43 +44 +44 +44 +43 +42 +42 +40 +38 +29 +8 +-8 +-20 +-29 +-35 +-39 +-42 +-44 +-44 +-44 +-44 +-43 +-42 +-40 +-38 +-36 +-34 +-32 +-30 +-28 +-27 +-26 +-25 +-23 +-21 +-20 +-19 +-17 +-16 +-15 +-14 +-4 +17 +31 +42 +49 +53 +55 +56 +56 +56 +54 +52 +51 +49 +47 +45 +36 +16 +0 +-12 +-20 +-27 +-31 +-34 +-36 +-37 +-37 +-38 +-37 +-36 +-35 +-33 +-23 +-2 +14 +24 +32 +37 +41 +43 +44 +44 +44 +43 +43 +40 +38 +37 +35 +33 +32 +30 +28 +27 +26 +24 +23 +22 +20 +19 +19 +17 +15 +15 +6 +-13 +-27 +-37 +-44 +-49 +-53 +-54 +-55 +-54 +-53 +-52 +-50 +-47 +-46 +-43 +-33 +-11 +4 +16 +24 +29 +33 +36 +37 +37 +38 +38 +37 +36 +34 +33 +25 +6 +-10 +-21 +-29 +-36 +-40 +-43 +-44 +-44 +-44 +-43 +-41 +-40 +-38 +-35 +-25 +-3 +13 +24 +32 +37 +40 +42 +43 +43 +43 +42 +40 +39 +38 +36 +28 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-41 +-42 +-43 +-42 +-41 +-40 +-39 +-37 +-36 +-34 +-33 +-31 +-29 +-27 +-25 +-23 +-23 +-21 +-20 +-19 +-18 +-18 +-17 +-16 +-6 +14 +29 +39 +46 +51 +53 +55 +55 +55 +54 +52 +50 +48 +46 +43 +40 +38 +36 +35 +33 +30 +28 +27 +26 +24 +22 +21 +20 +19 +18 +17 +9 +-11 +-25 +-36 +-42 +-48 +-51 +-53 +-53 +-53 +-51 +-49 +-47 +-46 +-44 +-42 +-30 +-9 +7 +18 +26 +32 +35 +38 +39 +40 +40 +40 +38 +37 +36 +35 +27 +8 +-8 +-20 +-29 +-35 +-40 +-43 +-45 +-45 +-45 +-44 +-43 +-41 +-39 +-37 +-36 +-34 +-32 +-30 +-28 +-27 +-25 +-24 +-23 +-21 +-20 +-18 +-17 +-16 +-15 +-13 +-3 +18 +32 +43 +49 +54 +56 +57 +57 +57 +56 +55 +53 +51 +49 +47 +44 +43 +41 +39 +37 +35 +33 +32 +30 +28 +25 +24 +22 +21 +19 +18 +10 +-8 +-23 +-34 +-42 +-47 +-50 +-52 +-53 +-53 +-53 +-52 +-51 +-49 +-48 +-46 +-35 +-13 +2 +14 +23 +29 +32 +36 +38 +39 +38 +37 +36 +35 +33 +32 +23 +4 +-12 +-23 +-31 +-37 +-41 +-44 +-45 +-45 +-44 +-43 +-42 +-40 +-39 +-37 +-27 +-6 +9 +20 +28 +34 +38 +41 +42 +43 +43 +42 +41 +40 +39 +37 +29 +8 +-7 +-19 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-39 +-37 +-36 +-25 +-3 +12 +23 +31 +36 +39 +41 +42 +43 +43 +42 +41 +39 +38 +37 +29 +9 +-6 +-17 +-26 +-33 +-36 +-39 +-41 +-42 +-41 +-41 +-40 +-39 +-38 +-36 +-35 +-32 +-30 +-29 +-27 +-26 +-25 +-24 +-22 +-20 +-19 +-18 +-17 +-16 +-15 +-13 +-3 +18 +32 +42 +49 +53 +56 +58 +57 +57 +55 +53 +51 +49 +47 +45 +37 +17 +1 +-11 +-20 +-26 +-31 +-34 +-36 +-38 +-38 +-37 +-37 +-36 +-35 +-34 +-22 +-1 +15 +26 +33 +38 +42 +44 +45 +46 +46 +45 +44 +42 +40 +39 +30 +10 +-6 +-17 +-25 +-31 +-36 +-39 +-40 +-41 +-41 +-40 +-38 +-37 +-35 +-34 +-24 +-3 +12 +23 +31 +36 +39 +42 +44 +44 +43 +43 +42 +40 +39 +37 +36 +35 +32 +31 +29 +28 +26 +24 +23 +22 +20 +19 +18 +17 +16 +15 +8 +-10 +-25 +-35 +-43 +-49 +-52 +-54 +-55 +-56 +-55 +-54 +-52 +-50 +-47 +-45 +-34 +-12 +4 +15 +24 +29 +33 +35 +36 +37 +36 +35 +35 +34 +32 +31 +23 +3 +-12 +-23 +-31 +-37 +-40 +-43 +-45 +-45 +-45 +-45 +-44 +-43 +-42 +-40 +-38 +-36 +-34 +-31 +-30 +-28 +-25 +-23 +-22 +-20 +-18 +-17 +-16 +-15 +-15 +-14 +-3 +18 +31 +42 +49 +53 +56 +58 +59 +58 +57 +56 +54 +52 +50 +47 +45 +42 +39 +37 +35 +32 +31 +29 +28 +26 +24 +23 +21 +21 +19 +18 +10 +-9 +-24 +-35 +-43 +-48 +-52 +-54 +-55 +-54 +-53 +-52 +-50 +-48 +-45 +-43 +-32 +-10 +5 +17 +25 +30 +34 +36 +38 +39 +39 +38 +38 +37 +36 +35 +26 +7 +-8 +-19 +-27 +-33 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-25 +-3 +12 +23 +31 +36 +40 +41 +42 +43 +42 +41 +40 +38 +36 +35 +26 +7 +-8 +-19 +-28 +-33 +-37 +-40 +-42 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-26 +-4 +11 +22 +30 +35 +39 +42 +43 +44 +43 +42 +40 +39 +37 +35 +26 +7 +-8 +-20 +-29 +-35 +-39 +-42 +-43 +-43 +-43 +-42 +-41 +-40 +-39 +-37 +-27 +-6 +9 +20 +28 +33 +37 +40 +41 +42 +42 +42 +41 +40 +38 +37 +28 +8 +-6 +-18 +-27 +-33 +-36 +-39 +-41 +-42 +-41 +-41 +-39 +-38 +-36 +-34 +-23 +-2 +14 +25 +32 +37 +41 +43 +44 +45 +45 +44 +43 +41 +40 +38 +30 +10 +-4 +-16 +-24 +-30 +-35 +-38 +-40 +-41 +-41 +-41 +-40 +-39 +-37 +-35 +-25 +-3 +12 +23 +31 +36 +39 +42 +44 +43 +42 +41 +40 +38 +37 +35 +27 +7 +-8 +-20 +-28 +-34 +-39 +-41 +-42 +-43 +-44 +-44 +-43 +-42 +-40 +-38 +-28 +-6 +9 +21 +29 +34 +38 +41 +42 +42 +42 +42 +41 +40 +39 +37 +29 +9 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-34 +-32 +-31 +-29 +-28 +-27 +-25 +-24 +-23 +-22 +-20 +-19 +-17 +-16 +-15 +-14 +-13 +-3 +18 +32 +42 +49 +53 +55 +56 +57 +56 +54 +53 +51 +49 +47 +45 +36 +16 +0 +-10 +-20 +-26 +-31 +-34 +-36 +-38 +-39 +-39 +-38 +-37 +-36 +-35 +-25 +-3 +12 +23 +31 +37 +41 +42 +42 +42 +42 +40 +39 +37 +36 +34 +26 +6 +-9 +-20 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-35 +-25 +-3 +11 +23 +31 +37 +40 +43 +44 +45 +45 +45 +43 +42 +41 +39 +31 +10 +-5 +-16 +-25 +-31 +-35 +-38 +-40 +-40 +-40 +-39 +-38 +-36 +-34 +-32 +-22 +-1 +13 +24 +31 +37 +40 +42 +43 +44 +43 +42 +41 +40 +38 +37 +29 +9 +-6 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-3 +12 +23 +31 +37 +40 +43 +43 +43 +43 +42 +40 +39 +38 +36 +28 +8 +-7 +-18 +-27 +-32 +-36 +-39 +-41 +-42 +-42 +-42 +-41 +-39 +-38 +-36 +-25 +-4 +12 +23 +31 +36 +39 +42 +43 +44 +43 +43 +41 +40 +38 +36 +28 +8 +-8 +-19 +-28 +-33 +-37 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-36 +-25 +-4 +11 +22 +30 +35 +39 +41 +42 +43 +43 +42 +41 +40 +39 +38 +29 +9 +-6 +-18 +-27 +-33 +-38 +-41 +-43 +-43 +-43 +-43 +-41 +-40 +-38 +-36 +-25 +-4 +11 +22 +30 +36 +39 +41 +42 +42 +42 +41 +40 +38 +37 +36 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-43 +-44 +-43 +-43 +-41 +-41 +-39 +-37 +-26 +-5 +10 +22 +30 +36 +39 +42 +43 +43 +42 +41 +39 +37 +36 +34 +33 +31 +29 +28 +26 +25 +24 +23 +21 +21 +19 +18 +17 +16 +14 +13 +6 +-13 +-28 +-37 +-45 +-50 +-54 +-55 +-56 +-56 +-55 +-53 +-51 +-49 +-47 +-46 +-35 +-13 +2 +14 +22 +28 +32 +35 +37 +38 +38 +38 +37 +37 +36 +34 +26 +6 +-9 +-20 +-29 +-35 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-25 +-3 +12 +22 +30 +36 +38 +40 +41 +42 +41 +40 +39 +38 +37 +35 +27 +7 +-8 +-20 +-28 +-34 +-39 +-42 +-43 +-45 +-45 +-44 +-44 +-42 +-41 +-38 +-28 +-6 +9 +20 +28 +34 +38 +41 +42 +43 +43 +42 +41 +40 +39 +37 +29 +9 +-6 +-17 +-26 +-31 +-35 +-39 +-40 +-41 +-41 +-40 +-38 +-36 +-35 +-34 +-24 +-3 +13 +23 +31 +36 +40 +42 +43 +44 +43 +43 +42 +41 +39 +37 +29 +10 +-5 +-17 +-26 +-32 +-37 +-41 +-42 +-43 +-43 +-43 +-41 +-40 +-39 +-37 +-26 +-4 +11 +22 +31 +36 +39 +42 +43 +43 +42 +42 +40 +38 +36 +36 +28 +8 +-7 +-18 +-27 +-34 +-38 +-40 +-42 +-43 +-44 +-43 +-43 +-41 +-40 +-38 +-28 +-6 +9 +21 +29 +35 +38 +42 +42 +43 +43 +43 +42 +41 +39 +38 +29 +9 +-6 +-18 +-26 +-33 +-37 +-40 +-41 +-42 +-42 +-41 +-40 +-39 +-37 +-36 +-25 +-3 +12 +24 +32 +38 +40 +42 +42 +42 +42 +41 +40 +39 +37 +36 +28 +8 +-7 +-18 +-26 +-32 +-36 +-40 +-42 +-43 +-43 +-43 +-42 +-42 +-40 +-39 +-37 +-35 +-33 +-31 +-30 +-28 +-26 +-24 +-23 +-21 +-20 +-18 +-17 +-16 +-15 +-14 +-5 +16 +30 +40 +47 +52 +54 +55 +56 +56 +55 +54 +52 +50 +48 +46 +45 +43 +40 +37 +35 +32 +30 +28 +27 +26 +24 +22 +21 +21 +19 +18 +10 +-8 +-22 +-33 +-41 +-46 +-50 +-52 +-53 +-53 +-53 +-51 +-50 +-47 +-45 +-43 +-41 +-39 +-37 +-34 +-32 +-29 +-28 +-26 +-24 +-23 +-22 +-21 +-19 +-18 +-17 +-16 +-6 +15 +30 +40 +47 +51 +54 +56 +56 +56 +54 +52 +50 +48 +46 +44 +42 +40 +38 +36 +34 +32 +31 +29 +28 +26 +25 +24 +23 +22 +20 +19 +11 +-9 +-23 +-33 +-41 +-46 +-50 +-52 +-53 +-53 +-52 +-50 +-49 +-46 +-44 +-42 +-40 +-37 +-36 +-35 +-33 +-30 +-29 +-27 +-26 +-23 +-22 +-21 +-20 +-18 +-17 +-15 +-5 +16 +29 +40 +46 +51 +53 +55 +55 +55 +53 +52 +50 +48 +46 +44 +42 +40 +38 +36 +35 +33 +31 +30 +28 +26 +25 +23 +22 +20 +19 +19 +11 +-8 +-22 +-33 +-40 +-46 +-50 +-52 +-53 +-53 +-52 +-50 +-49 +-48 +-47 +-44 +-42 +-40 +-38 +-36 +-34 +-32 +-30 +-28 +-26 +-24 +-23 +-21 +-19 +-18 +-16 +-15 +-6 +15 +29 +39 +46 +50 +53 +54 +54 +54 +53 +52 +50 +49 +47 +45 +42 +40 +37 +35 +32 +31 +29 +26 +24 +22 +20 +20 +18 +18 +16 +16 +9 +-10 +-24 +-35 +-43 +-48 +-52 +-54 +-55 +-54 +-54 +-52 +-50 +-48 +-46 +-44 +-41 +-39 +-36 +-34 +-31 +-29 +-28 +-26 +-25 +-23 +-22 +-20 +-18 +-17 +-16 +-14 +-5 +16 +30 +41 +49 +54 +57 +58 +58 +57 +56 +54 +51 +50 +47 +45 +43 +41 +39 +37 +34 +33 +31 +29 +27 +25 +24 +22 +21 +20 +18 +17 +9 +-10 +-25 +-35 +-43 +-48 +-52 +-54 +-54 +-54 +-53 +-52 +-51 +-49 +-47 +-45 +-44 +-41 +-39 +-37 +-36 +-33 +-32 +-29 +-27 +-25 +-24 +-23 +-21 +-19 +-18 +-18 +-8 +13 +27 +36 +43 +48 +50 +52 +52 +52 +52 +50 +48 +46 +44 +43 +34 +15 +-1 +-13 +-23 +-28 +-34 +-37 +-39 +-40 +-41 +-40 +-39 +-37 +-36 +-34 +-23 +-1 +14 +25 +33 +38 +42 +44 +45 +45 +45 +44 +43 +42 +40 +38 +30 +10 +-4 +-16 +-25 +-31 +-35 +-37 +-39 +-39 +-40 +-40 +-39 +-38 +-36 +-35 +-25 +-3 +12 +23 +32 +37 +41 +44 +45 +46 +46 +45 +44 +42 +40 +39 +30 +10 +-5 +-16 +-25 +-32 +-36 +-39 +-40 +-41 +-41 +-40 +-39 +-38 +-37 +-36 +-25 +-4 +11 +21 +29 +34 +37 +39 +41 +42 +41 +40 +39 +38 +37 +36 +28 +8 +-7 +-19 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-38 +-37 +-36 +-25 +-3 +12 +24 +32 +37 +40 +42 +43 +43 +43 +43 +41 +40 +38 +38 +29 +9 +-7 +-17 +-26 +-31 +-36 +-38 +-40 +-40 +-41 +-40 +-39 +-38 +-37 +-36 +-26 +-4 +11 +22 +30 +36 +39 +42 +43 +44 +44 +43 +42 +41 +39 +36 +28 +8 +-7 +-19 +-27 +-33 +-37 +-40 +-41 +-42 +-41 +-41 +-40 +-38 +-37 +-35 +-25 +-3 +12 +23 +30 +36 +38 +41 +42 +43 +42 +42 +41 +40 +38 +37 +28 +9 +-7 +-18 +-27 +-34 +-39 +-42 +-42 +-44 +-44 +-44 +-43 +-42 +-41 +-39 +-28 +-5 +9 +20 +29 +34 +38 +40 +42 +42 +41 +40 +39 +37 +35 +34 +26 +7 +-8 +-20 +-28 +-35 +-39 +-42 +-44 +-44 +-44 +-44 +-42 +-41 +-40 +-39 +-28 +-6 +9 +20 +28 +34 +37 +40 +41 +42 +42 +42 +41 +39 +38 +37 +35 +33 +30 +29 +27 +26 +25 +24 +22 +21 +20 +18 +17 +17 +16 +15 +8 +-10 +-25 +-35 +-43 +-48 +-52 +-54 +-55 +-55 +-54 +-53 +-51 +-49 +-47 +-45 +-33 +-11 +4 +17 +24 +30 +34 +37 +38 +39 +38 +37 +36 +36 +34 +32 +24 +6 +-9 +-20 +-29 +-35 +-39 +-41 +-43 +-43 +-42 +-42 +-41 +-40 +-39 +-38 +-27 +-5 +10 +21 +29 +35 +39 +41 +43 +43 +44 +43 +42 +40 +39 +37 +29 +8 +-6 +-19 +-27 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-36 +-26 +-4 +10 +21 +29 +34 +37 +40 +41 +41 +41 +41 +40 +39 +38 +36 +28 +8 +-7 +-18 +-28 +-34 +-38 +-41 +-43 +-44 +-44 +-43 +-42 +-40 +-39 +-36 +-26 +-4 +11 +23 +31 +37 +41 +43 +44 +44 +43 +43 +42 +41 +39 +38 +30 +10 +-5 +-16 +-24 +-30 +-34 +-37 +-39 +-39 +-40 +-40 +-39 +-38 +-36 +-35 +-25 +-3 +12 +24 +32 +37 +41 +43 +44 +45 +45 +44 +43 +41 +40 +38 +30 +9 +-6 +-18 +-27 +-33 +-37 +-40 +-42 +-42 +-43 +-42 +-41 +-39 +-38 +-36 +-25 +-4 +11 +21 +29 +34 +38 +39 +41 +40 +40 +40 +39 +37 +36 +35 +26 +7 +-8 +-19 +-28 +-34 +-39 +-42 +-44 +-45 +-45 +-44 +-43 +-41 +-39 +-38 +-28 +-6 +9 +21 +29 +35 +39 +42 +43 +44 +43 +42 +41 +39 +37 +36 +28 +7 +-7 +-19 +-27 +-34 +-37 +-40 +-41 +-42 +-42 +-42 +-40 +-40 +-38 +-37 +-27 +-5 +10 +21 +29 +35 +38 +41 +42 +43 +43 +42 +41 +40 +39 +38 +29 +9 +-6 +-17 +-26 +-32 +-37 +-39 +-41 +-41 +-42 +-40 +-39 +-38 +-37 +-35 +-33 +-31 +-30 +-28 +-27 +-25 +-24 +-22 +-21 +-20 +-18 +-17 +-16 +-14 +-14 +-13 +-4 +18 +32 +43 +49 +53 +55 +56 +55 +55 +54 +52 +49 +48 +46 +43 +40 +39 +37 +35 +32 +31 +29 +28 +26 +25 +23 +22 +20 +19 +17 +16 +8 +-11 +-25 +-35 +-42 +-48 +-51 +-53 +-53 +-52 +-52 +-50 +-49 +-47 +-45 +-42 +-32 +-10 +5 +17 +25 +31 +35 +38 +39 +40 +40 +40 +39 +38 +37 +36 +28 +8 +-8 +-19 +-28 +-35 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-39 +-37 +-35 +-25 +-3 +13 +23 +30 +36 +39 +41 +42 +42 +42 +41 +40 +39 +38 +37 +28 +8 +-6 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-44 +-43 +-42 +-41 +-40 +-38 +-37 +-35 +-33 +-31 +-30 +-28 +-26 +-24 +-23 +-22 +-21 +-19 +-18 +-17 +-16 +-15 +-5 +16 +30 +40 +47 +51 +55 +56 +57 +56 +55 +53 +51 +49 +46 +44 +42 +39 +37 +36 +33 +32 +30 +29 +27 +26 +24 +23 +22 +21 +20 +18 +11 +-8 +-22 +-33 +-41 +-47 +-51 +-52 +-53 +-52 +-51 +-50 +-48 +-46 +-44 +-42 +-31 +-8 +6 +18 +26 +33 +36 +38 +39 +40 +40 +39 +39 +38 +37 +35 +27 +7 +-7 +-19 +-28 +-34 +-39 +-42 +-43 +-43 +-43 +-43 +-42 +-41 +-38 +-37 +-35 +-33 +-31 +-29 +-27 +-26 +-25 +-24 +-23 +-22 +-21 +-19 +-18 +-18 +-16 +-16 +-7 +14 +29 +39 +46 +50 +53 +55 +54 +54 +53 +51 +48 +46 +44 +42 +33 +13 +-2 +-13 +-23 +-29 +-34 +-36 +-38 +-38 +-38 +-37 +-37 +-36 +-35 +-34 +-23 +-2 +13 +24 +32 +37 +40 +43 +43 +44 +44 +43 +42 +42 +40 +39 +37 +35 +33 +31 +30 +28 +26 +25 +24 +22 +22 +21 +20 +19 +18 +17 +10 +-9 +-23 +-34 +-42 +-47 +-51 +-53 +-54 +-53 +-52 +-51 +-49 +-47 +-45 +-43 +-40 +-38 +-36 +-34 +-32 +-30 +-29 +-28 +-27 +-24 +-23 +-21 +-20 +-19 +-18 +-16 +-6 +15 +29 +40 +46 +51 +54 +55 +55 +55 +54 +52 +51 +49 +47 +44 +42 +40 +37 +35 +33 +32 +30 +29 +27 +25 +23 +21 +19 +19 +17 +17 +9 +-9 +-24 +-35 +-43 +-48 +-51 +-52 +-53 +-53 +-52 +-51 +-49 +-47 +-46 +-43 +-32 +-10 +5 +17 +25 +31 +35 +38 +39 +40 +39 +39 +38 +37 +35 +33 +24 +5 +-11 +-22 +-30 +-36 +-40 +-43 +-45 +-45 +-44 +-43 +-42 +-40 +-38 +-36 +-35 +-33 +-32 +-31 +-29 +-28 +-27 +-25 +-23 +-21 +-19 +-18 +-17 +-16 +-14 +-13 +-3 +17 +31 +40 +47 +51 +53 +54 +55 +56 +55 +53 +52 +50 +49 +46 +44 +42 +39 +37 +35 +33 +30 +29 +28 +26 +24 +23 +22 +21 +19 +18 +11 +-7 +-21 +-32 +-39 +-45 +-48 +-50 +-51 +-52 +-51 +-50 +-49 +-46 +-44 +-42 +-31 +-8 +7 +19 +27 +33 +37 +40 +40 +40 +40 +39 +38 +37 +35 +34 +26 +6 +-9 +-20 +-27 +-33 +-37 +-40 +-42 +-42 +-42 +-41 +-41 +-39 +-38 +-37 +-36 +-35 +-33 +-32 +-31 +-28 +-27 +-24 +-23 +-21 +-20 +-18 +-17 +-15 +-14 +-14 +-4 +16 +30 +40 +47 +50 +53 +55 +55 +55 +55 +53 +51 +50 +48 +46 +43 +41 +39 +36 +34 +31 +29 +28 +26 +24 +22 +21 +20 +19 +18 +17 +9 +-9 +-24 +-34 +-42 +-48 +-52 +-55 +-56 +-56 +-55 +-54 +-53 +-51 +-48 +-46 +-45 +-42 +-39 +-36 +-33 +-31 +-29 +-27 +-26 +-25 +-23 +-22 +-21 +-20 +-19 +-17 +-8 +14 +28 +38 +45 +51 +54 +56 +56 +56 +55 +53 +51 +49 +47 +45 +36 +15 +-1 +-12 +-20 +-27 +-32 +-35 +-37 +-38 +-38 +-37 +-36 +-36 +-35 +-33 +-23 +-1 +13 +23 +31 +36 +39 +41 +43 +43 +43 +42 +41 +39 +38 +37 +29 +9 +-6 +-18 +-26 +-33 +-38 +-41 +-42 +-42 +-42 +-42 +-41 +-39 +-37 +-36 +-25 +-3 +12 +24 +32 +38 +41 +43 +44 +44 +44 +43 +42 +41 +39 +38 +29 +10 +-6 +-17 +-25 +-31 +-35 +-38 +-39 +-40 +-39 +-39 +-38 +-38 +-36 +-35 +-24 +-3 +12 +23 +31 +37 +40 +42 +43 +44 +44 +43 +43 +41 +39 +38 +29 +9 +-6 +-18 +-27 +-34 +-38 +-40 +-42 +-43 +-43 +-43 +-42 +-41 +-38 +-37 +-26 +-4 +11 +21 +29 +35 +38 +40 +41 +41 +42 +41 +39 +38 +37 +35 +26 +7 +-8 +-20 +-28 +-34 +-37 +-40 +-41 +-42 +-41 +-41 +-39 +-38 +-37 +-36 +-25 +-4 +11 +22 +30 +36 +40 +43 +44 +44 +44 +44 +42 +41 +39 +37 +29 +9 +-7 +-19 +-27 +-33 +-38 +-41 +-42 +-43 +-42 +-41 +-40 +-39 +-37 +-35 +-24 +-2 +12 +24 +31 +36 +39 +41 +42 +42 +42 +42 +41 +39 +38 +37 +29 +9 +-6 +-17 +-25 +-31 +-35 +-39 +-40 +-41 +-41 +-40 +-40 +-39 +-37 +-36 +-25 +-4 +11 +22 +31 +36 +40 +42 +44 +44 +44 +43 +42 +41 +39 +37 +28 +8 +-8 +-19 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-5 +10 +21 +28 +34 +37 +39 +40 +41 +41 +40 +40 +38 +37 +36 +34 +32 +31 +29 +27 +26 +25 +23 +21 +19 +18 +17 +16 +15 +13 +12 +5 +-14 +-28 +-38 +-45 +-51 +-53 +-55 +-56 +-56 +-55 +-54 +-53 +-50 +-48 +-46 +-35 +-13 +2 +14 +23 +29 +33 +37 +38 +39 +39 +39 +38 +37 +35 +34 +26 +6 +-9 +-20 +-29 +-35 +-39 +-41 +-43 +-43 +-43 +-42 +-41 +-40 +-38 +-36 +-25 +-4 +12 +23 +31 +36 +39 +42 +43 +43 +43 +43 +42 +41 +39 +38 +29 +10 +-6 +-17 +-25 +-32 +-36 +-38 +-40 +-41 +-41 +-42 +-41 +-40 +-38 +-36 +-26 +-5 +11 +22 +30 +36 +40 +43 +44 +44 +43 +43 +42 +40 +38 +37 +28 +9 +-6 +-18 +-27 +-32 +-37 +-39 +-41 +-42 +-42 +-41 +-41 +-39 +-38 +-37 +-26 +-5 +10 +21 +30 +36 +39 +41 +42 +42 +42 +42 +40 +39 +37 +36 +27 +8 +-8 +-19 +-28 +-33 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-36 +-25 +-4 +11 +22 +30 +35 +37 +40 +41 +41 +41 +41 +41 +40 +38 +36 +28 +8 +-7 +-19 +-28 +-34 +-38 +-41 +-42 +-42 +-42 +-43 +-41 +-40 +-38 +-36 +-25 +-4 +11 +23 +31 +36 +40 +43 +43 +44 +44 +43 +42 +41 +39 +38 +30 +10 +-5 +-16 +-26 +-31 +-36 +-40 +-41 +-42 +-42 +-41 +-40 +-38 +-37 +-35 +-25 +-3 +12 +24 +32 +37 +40 +42 +43 +44 +43 +43 +42 +40 +38 +37 +29 +9 +-6 +-17 +-26 +-32 +-36 +-38 +-40 +-40 +-40 +-40 +-39 +-39 +-37 +-36 +-25 +-3 +12 +22 +31 +37 +40 +42 +44 +44 +44 +43 +41 +39 +37 +36 +27 +8 +-8 +-20 +-28 +-35 +-39 +-42 +-43 +-44 +-44 +-43 +-42 +-41 +-39 +-38 +-37 +-35 +-33 +-31 +-29 +-28 +-27 +-25 +-24 +-21 +-19 +-18 +-17 +-16 +-15 +-14 +-5 +16 +29 +40 +46 +51 +53 +56 +55 +55 +54 +53 +52 +51 +49 +47 +38 +18 +3 +-10 +-19 +-26 +-31 +-33 +-35 +-36 +-36 +-36 +-35 +-35 +-33 +-32 +-21 +0 +16 +27 +34 +39 +42 +44 +45 +45 +44 +43 +42 +40 +39 +37 +29 +10 +-6 +-17 +-26 +-31 +-36 +-38 +-41 +-41 +-41 +-41 +-40 +-40 +-39 +-37 +-27 +-5 +9 +21 +29 +35 +38 +40 +42 +42 +41 +41 +39 +37 +35 +34 +25 +6 +-9 +-21 +-29 +-34 +-39 +-42 +-43 +-43 +-43 +-42 +-41 +-40 +-38 +-36 +-26 +-5 +10 +21 +30 +35 +39 +42 +43 +44 +45 +44 +43 +42 +40 +39 +31 +11 +-5 +-17 +-25 +-32 +-36 +-39 +-40 +-41 +-41 +-40 +-39 +-38 +-36 +-34 +-23 +-1 +14 +25 +33 +38 +41 +43 +44 +44 +44 +43 +42 +40 +39 +37 +29 +9 +-6 +-18 +-26 +-33 +-36 +-40 +-42 +-43 +-44 +-44 +-43 +-42 +-39 +-38 +-28 +-6 +9 +20 +28 +34 +37 +40 +41 +41 +41 +40 +39 +37 +36 +35 +27 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-42 +-42 +-42 +-41 +-41 +-40 +-39 +-37 +-27 +-5 +10 +21 +30 +36 +39 +41 +43 +44 +44 +43 +42 +41 +39 +37 +29 +9 +-6 +-18 +-27 +-33 +-38 +-40 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-36 +-25 +-3 +11 +22 +30 +35 +38 +41 +42 +42 +42 +42 +40 +40 +38 +37 +29 +10 +-6 +-17 +-27 +-32 +-37 +-40 +-42 +-42 +-42 +-41 +-41 +-39 +-37 +-35 +-24 +-3 +12 +24 +31 +36 +39 +41 +42 +42 +42 +42 +40 +40 +38 +37 +36 +34 +33 +32 +30 +28 +26 +25 +23 +21 +19 +18 +17 +16 +15 +15 +7 +-12 +-26 +-36 +-44 +-49 +-52 +-54 +-55 +-55 +-54 +-54 +-52 +-50 +-47 +-45 +-34 +-12 +3 +15 +23 +29 +34 +38 +39 +39 +38 +38 +36 +35 +33 +32 +24 +5 +-11 +-22 +-31 +-36 +-40 +-43 +-44 +-45 +-45 +-44 +-44 +-43 +-41 +-39 +-29 +-8 +8 +19 +27 +33 +36 +39 +40 +41 +42 +41 +40 +39 +37 +36 +28 +8 +-7 +-19 +-28 +-34 +-38 +-40 +-42 +-43 +-43 +-43 +-41 +-38 +-37 +-35 +-25 +-3 +11 +21 +29 +34 +37 +39 +40 +40 +40 +40 +39 +37 +36 +35 +26 +7 +-8 +-20 +-29 +-36 +-40 +-42 +-44 +-45 +-45 +-44 +-42 +-41 +-39 +-37 +-26 +-4 +11 +23 +31 +36 +40 +42 +44 +44 +44 +42 +42 +40 +39 +37 +29 +9 +-5 +-16 +-25 +-31 +-35 +-38 +-40 +-40 +-41 +-40 +-39 +-38 +-37 +-36 +-26 +-4 +11 +22 +30 +36 +39 +42 +43 +44 +44 +43 +42 +41 +39 +38 +29 +9 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-42 +-42 +-41 +-40 +-38 +-35 +-25 +-3 +12 +22 +29 +35 +39 +41 +42 +42 +42 +41 +40 +39 +37 +36 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-44 +-43 +-42 +-41 +-40 +-38 +-27 +-5 +10 +22 +29 +35 +39 +42 +43 +44 +43 +42 +41 +40 +38 +36 +28 +9 +-6 +-18 +-26 +-32 +-36 +-39 +-39 +-40 +-40 +-39 +-39 +-38 +-36 +-35 +-24 +-3 +13 +23 +31 +36 +40 +42 +44 +44 +44 +43 +43 +41 +40 +38 +30 +9 +-7 +-19 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-39 +-37 +-35 +-25 +-3 +12 +23 +30 +36 +38 +41 +42 +43 +42 +42 +41 +40 +38 +37 +29 +9 +-6 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-36 +-26 +-5 +10 +22 +30 +35 +39 +41 +42 +42 +42 +40 +39 +38 +37 +35 +26 +7 +-8 +-19 +-28 +-34 +-38 +-41 +-42 +-42 +-42 +-42 +-42 +-40 +-39 +-37 +-36 +-34 +-32 +-30 +-29 +-27 +-25 +-24 +-22 +-20 +-19 +-17 +-16 +-15 +-15 +-14 +-5 +16 +30 +40 +48 +52 +55 +57 +57 +56 +55 +54 +52 +50 +48 +46 +37 +17 +1 +-11 +-20 +-27 +-31 +-34 +-36 +-37 +-37 +-37 +-36 +-35 +-33 +-31 +-20 +1 +16 +27 +35 +40 +43 +46 +47 +47 +47 +45 +43 +42 +40 +39 +37 +35 +34 +33 +30 +29 +27 +26 +24 +23 +22 +20 +18 +17 +16 +15 +7 +-11 +-26 +-36 +-44 +-49 +-52 +-54 +-54 +-54 +-53 +-52 +-51 +-48 +-46 +-44 +-34 +-12 +3 +14 +23 +28 +32 +35 +37 +38 +38 +38 +37 +36 +34 +34 +25 +5 +-10 +-21 +-30 +-36 +-41 +-43 +-45 +-45 +-46 +-45 +-44 +-42 +-41 +-38 +-28 +-6 +8 +20 +27 +32 +35 +38 +39 +39 +38 +38 +37 +37 +35 +35 +26 +7 +-8 +-19 +-28 +-33 +-37 +-41 +-42 +-43 +-44 +-43 +-42 +-40 +-39 +-37 +-35 +-33 +-31 +-29 +-27 +-25 +-23 +-21 +-19 +-18 +-16 +-15 +-15 +-14 +-13 +-11 +-2 +19 +33 +44 +50 +55 +57 +59 +60 +60 +58 +57 +55 +53 +50 +48 +45 +43 +40 +38 +36 +34 +32 +31 +29 +28 +25 +24 +22 +22 +20 +19 +11 +-7 +-22 +-34 +-42 +-48 +-51 +-54 +-55 +-55 +-54 +-53 +-51 +-49 +-47 +-45 +-34 +-11 +4 +15 +23 +29 +33 +35 +37 +38 +38 +37 +36 +35 +34 +33 +26 +6 +-9 +-21 +-30 +-36 +-41 +-44 +-45 +-46 +-45 +-44 +-43 +-42 +-40 +-38 +-36 +-34 +-32 +-30 +-28 +-26 +-25 +-24 +-23 +-22 +-20 +-18 +-17 +-16 +-15 +-14 +-3 +17 +32 +42 +49 +53 +56 +58 +58 +57 +55 +53 +51 +49 +47 +45 +42 +40 +38 +36 +34 +33 +31 +30 +29 +27 +25 +23 +22 +20 +19 +18 +10 +-9 +-24 +-34 +-42 +-47 +-50 +-52 +-52 +-52 +-50 +-49 +-47 +-46 +-44 +-42 +-31 +-8 +6 +18 +26 +32 +36 +39 +40 +41 +40 +41 +39 +39 +38 +37 +28 +9 +-6 +-18 +-27 +-33 +-38 +-41 +-42 +-43 +-43 +-43 +-41 +-40 +-39 +-37 +-26 +-4 +10 +22 +30 +36 +39 +41 +41 +42 +41 +40 +39 +37 +36 +34 +26 +6 +-9 +-20 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-42 +-41 +-40 +-38 +-27 +-5 +11 +22 +29 +35 +39 +41 +43 +44 +43 +42 +41 +40 +38 +36 +28 +8 +-7 +-19 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-39 +-37 +-36 +-35 +-33 +-31 +-30 +-29 +-27 +-25 +-24 +-22 +-21 +-19 +-18 +-16 +-16 +-14 +-13 +-3 +18 +32 +42 +49 +53 +55 +57 +56 +55 +53 +53 +51 +50 +48 +46 +37 +17 +1 +-11 +-19 +-26 +-31 +-34 +-36 +-37 +-38 +-38 +-38 +-36 +-35 +-34 +-23 +-2 +13 +25 +33 +39 +42 +44 +45 +45 +45 +44 +42 +41 +39 +36 +28 +8 +-7 +-18 +-26 +-32 +-36 +-39 +-40 +-41 +-41 +-40 +-39 +-37 +-36 +-35 +-24 +-3 +12 +23 +31 +37 +40 +42 +44 +44 +44 +43 +43 +42 +41 +39 +37 +35 +33 +31 +29 +27 +26 +24 +23 +22 +20 +19 +18 +17 +16 +15 +8 +-12 +-26 +-36 +-44 +-49 +-53 +-55 +-56 +-56 +-56 +-54 +-52 +-50 +-48 +-46 +-34 +-11 +4 +16 +24 +30 +34 +36 +37 +38 +37 +36 +36 +35 +33 +32 +25 +5 +-11 +-22 +-30 +-36 +-40 +-43 +-44 +-45 +-45 +-45 +-44 +-43 +-41 +-39 +-38 +-35 +-34 +-31 +-30 +-27 +-25 +-24 +-22 +-21 +-20 +-19 +-18 +-17 +-16 +-15 +-5 +16 +30 +40 +47 +51 +54 +56 +56 +57 +55 +53 +52 +50 +47 +44 +41 +39 +37 +35 +33 +32 +30 +28 +26 +25 +24 +22 +21 +20 +19 +18 +11 +-8 +-24 +-35 +-42 +-48 +-51 +-54 +-54 +-54 +-53 +-52 +-50 +-48 +-45 +-43 +-32 +-10 +6 +17 +25 +30 +33 +36 +37 +38 +37 +37 +37 +36 +35 +34 +26 +6 +-9 +-20 +-28 +-34 +-39 +-41 +-43 +-44 +-44 +-44 +-42 +-41 +-39 +-37 +-27 +-5 +10 +21 +29 +35 +38 +41 +42 +43 +43 +42 +40 +38 +37 +36 +29 +9 +-6 +-18 +-27 +-33 +-37 +-39 +-41 +-41 +-42 +-41 +-40 +-39 +-37 +-36 +-25 +-4 +10 +21 +29 +34 +38 +40 +41 +42 +42 +42 +40 +39 +37 +36 +27 +7 +-9 +-21 +-30 +-36 +-41 +-43 +-44 +-45 +-45 +-44 +-43 +-41 +-39 +-37 +-27 +-5 +10 +22 +29 +35 +37 +40 +41 +42 +41 +41 +40 +39 +37 +37 +29 +9 +-6 +-16 +-25 +-31 +-35 +-37 +-39 +-40 +-40 +-40 +-39 +-38 +-37 +-35 +-24 +-3 +12 +23 +31 +37 +40 +43 +45 +45 +44 +43 +42 +41 +38 +36 +29 +9 +-6 +-18 +-26 +-32 +-36 +-39 +-41 +-41 +-41 +-41 +-40 +-39 +-37 +-36 +-26 +-4 +10 +22 +29 +35 +38 +40 +42 +42 +42 +42 +40 +40 +39 +38 +29 +10 +-6 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-42 +-41 +-41 +-39 +-38 +-35 +-25 +-3 +12 +23 +31 +36 +40 +42 +43 +43 +43 +42 +40 +40 +38 +37 +29 +9 +-6 +-17 +-26 +-32 +-37 +-40 +-41 +-42 +-42 +-41 +-41 +-40 +-38 +-36 +-34 +-32 +-30 +-28 +-26 +-24 +-22 +-20 +-19 +-17 +-15 +-14 +-14 +-13 +-13 +-12 +-2 +19 +32 +42 +49 +53 +55 +57 +57 +57 +56 +55 +52 +51 +48 +46 +36 +16 +0 +-12 +-22 +-28 +-33 +-36 +-38 +-39 +-39 +-38 +-37 +-35 +-34 +-33 +-23 +-2 +13 +24 +30 +36 +39 +41 +42 +43 +42 +42 +41 +40 +38 +36 +28 +8 +-7 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-43 +-43 +-41 +-40 +-39 +-37 +-26 +-4 +10 +21 +30 +36 +39 +41 +43 +43 +43 +42 +41 +40 +38 +37 +28 +9 +-6 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-42 +-41 +-41 +-40 +-39 +-37 +-28 +-6 +9 +21 +29 +34 +38 +40 +41 +42 +42 +41 +40 +39 +38 +36 +27 +7 +-9 +-20 +-28 +-35 +-39 +-41 +-43 +-43 +-43 +-43 +-41 +-39 +-38 +-35 +-25 +-4 +11 +22 +30 +35 +39 +41 +42 +42 +42 +41 +40 +39 +38 +36 +29 +9 +-7 +-18 +-27 +-33 +-38 +-42 +-43 +-44 +-44 +-43 +-42 +-40 +-38 +-36 +-26 +-4 +11 +23 +30 +36 +39 +42 +42 +43 +42 +42 +40 +39 +38 +37 +29 +10 +-6 +-18 +-26 +-32 +-36 +-39 +-40 +-41 +-40 +-40 +-40 +-38 +-36 +-36 +-25 +-3 +12 +23 +31 +37 +41 +43 +44 +45 +45 +45 +44 +42 +40 +39 +31 +11 +-5 +-16 +-25 +-32 +-36 +-39 +-40 +-41 +-41 +-40 +-39 +-38 +-37 +-35 +-25 +-3 +11 +23 +29 +35 +38 +40 +41 +41 +40 +40 +39 +38 +36 +34 +26 +6 +-9 +-20 +-29 +-35 +-38 +-42 +-44 +-45 +-45 +-44 +-43 +-42 +-40 +-37 +-26 +-4 +10 +22 +29 +36 +39 +42 +43 +44 +44 +43 +42 +40 +39 +37 +36 +34 +32 +31 +29 +28 +26 +24 +23 +22 +21 +20 +19 +17 +16 +15 +8 +-11 +-26 +-37 +-44 +-49 +-52 +-54 +-55 +-54 +-53 +-52 +-50 +-48 +-46 +-44 +-33 +-11 +4 +15 +23 +28 +32 +35 +37 +38 +39 +39 +38 +37 +35 +34 +25 +5 +-10 +-21 +-31 +-37 +-41 +-43 +-45 +-45 +-45 +-44 +-43 +-42 +-39 +-38 +-27 +-5 +10 +21 +28 +33 +36 +39 +39 +41 +40 +40 +39 +38 +36 +36 +27 +8 +-7 +-19 +-28 +-33 +-38 +-41 +-43 +-43 +-44 +-43 +-42 +-40 +-38 +-36 +-25 +-3 +12 +24 +32 +38 +41 +44 +45 +45 +44 +44 +42 +41 +38 +37 +28 +8 +-7 +-17 +-26 +-32 +-36 +-39 +-41 +-41 +-41 +-40 +-40 +-39 +-38 +-37 +-27 +-6 +9 +20 +28 +34 +38 +40 +41 +42 +42 +41 +40 +39 +37 +36 +26 +6 +-9 +-20 +-29 +-34 +-39 +-42 +-44 +-44 +-44 +-42 +-41 +-40 +-38 +-36 +-26 +-4 +10 +22 +30 +35 +39 +42 +44 +44 +44 +44 +43 +42 +41 +40 +32 +12 +-3 +-14 +-24 +-30 +-35 +-38 +-39 +-40 +-40 +-39 +-38 +-36 +-35 +-33 +-22 +-1 +14 +25 +33 +38 +42 +44 +44 +45 +45 +44 +42 +41 +39 +38 +30 +10 +-6 +-17 +-26 +-32 +-36 +-40 +-42 +-42 +-43 +-43 +-43 +-42 +-40 +-39 +-29 +-6 +8 +20 +28 +33 +37 +40 +41 +42 +41 +40 +39 +38 +36 +34 +26 +6 +-9 +-20 +-30 +-36 +-40 +-42 +-43 +-43 +-44 +-43 +-42 +-40 +-38 +-37 +-35 +-34 +-32 +-30 +-29 +-27 +-26 +-23 +-22 +-20 +-19 +-18 +-17 +-15 +-14 +-12 +-3 +18 +32 +42 +48 +53 +54 +56 +56 +56 +55 +53 +52 +50 +48 +46 +44 +43 +40 +39 +36 +34 +31 +30 +27 +26 +24 +23 +21 +20 +19 +18 +10 +-8 +-23 +-33 +-41 +-46 +-49 +-51 +-53 +-53 +-53 +-52 +-50 +-49 +-46 +-44 +-42 +-39 +-37 +-34 +-32 +-30 +-28 +-27 +-26 +-24 +-23 +-22 +-22 +-20 +-19 +-17 +-7 +14 +28 +39 +47 +51 +53 +55 +55 +55 +54 +53 +51 +48 +46 +44 +42 +40 +37 +35 +34 +32 +31 +28 +26 +25 +24 +23 +22 +21 +20 +18 +10 +-9 +-24 +-34 +-42 +-47 +-51 +-53 +-54 +-54 +-53 +-52 +-49 +-48 +-45 +-43 +-41 +-39 +-37 +-35 +-33 +-32 +-29 +-28 +-27 +-25 +-23 +-22 +-21 +-19 +-17 +-16 +-6 +15 +29 +39 +47 +51 +54 +55 +55 +55 +54 +53 +51 +49 +47 +45 +43 +41 +39 +37 +34 +32 +30 +29 +27 +25 +23 +21 +19 +18 +16 +15 +7 +-12 +-27 +-37 +-44 +-49 +-52 +-55 +-56 +-55 +-55 +-53 +-51 +-49 +-47 +-46 +-43 +-40 +-38 +-36 +-34 +-32 +-30 +-28 +-26 +-24 +-22 +-21 +-20 +-18 +-16 +-15 +-5 +15 +29 +40 +47 +51 +54 +55 +55 +55 +54 +53 +50 +49 +47 +46 +43 +41 +39 +36 +34 +31 +29 +27 +26 +25 +23 +21 +20 +19 +18 +17 +10 +-9 +-23 +-33 +-41 +-47 +-51 +-54 +-55 +-55 +-54 +-53 +-51 +-49 +-47 +-45 +-43 +-40 +-38 +-36 +-33 +-31 +-29 +-27 +-26 +-25 +-23 +-21 +-20 +-19 +-18 +-17 +-7 +14 +29 +40 +48 +52 +54 +56 +57 +56 +55 +54 +53 +50 +48 +46 +43 +41 +39 +37 +34 +33 +31 +29 +28 +27 +25 +24 +23 +21 +20 +19 +11 +-8 +-22 +-33 +-41 +-46 +-49 +-51 +-52 +-52 +-51 +-49 +-47 +-46 +-44 +-42 +-39 +-37 +-35 +-34 +-32 +-31 +-28 +-26 +-25 +-23 +-22 +-21 +-21 +-19 +-18 +-16 +-6 +14 +28 +38 +45 +49 +51 +53 +53 +53 +52 +50 +49 +47 +45 +43 +35 +15 +-1 +-13 +-22 +-28 +-32 +-36 +-39 +-39 +-39 +-39 +-38 +-37 +-35 +-34 +-23 +-1 +14 +25 +33 +38 +41 +43 +44 +45 +45 +44 +42 +41 +39 +38 +29 +10 +-5 +-16 +-25 +-30 +-34 +-37 +-39 +-40 +-40 +-40 +-39 +-38 +-37 +-35 +-25 +-3 +12 +23 +30 +36 +39 +42 +44 +44 +44 +43 +42 +40 +39 +37 +28 +9 +-7 +-18 +-27 +-33 +-37 +-39 +-41 +-41 +-41 +-40 +-39 +-38 +-37 +-36 +-26 +-5 +10 +21 +29 +35 +38 +40 +42 +43 +42 +42 +40 +39 +37 +36 +28 +9 +-7 +-18 +-27 +-33 +-38 +-41 +-42 +-43 +-43 +-42 +-42 +-40 +-38 +-36 +-25 +-2 +12 +24 +31 +37 +41 +43 +45 +45 +44 +44 +43 +42 +40 +40 +31 +11 +-5 +-16 +-25 +-31 +-35 +-38 +-40 +-41 +-42 +-42 +-41 +-40 +-39 +-37 +-27 +-5 +10 +22 +30 +35 +38 +41 +42 +43 +42 +42 +40 +38 +36 +35 +27 +7 +-8 +-19 +-27 +-33 +-38 +-40 +-42 +-42 +-41 +-40 +-39 +-37 +-36 +-35 +-25 +-3 +11 +22 +30 +36 +39 +41 +42 +42 +42 +42 +40 +39 +38 +37 +29 +9 +-7 +-19 +-27 +-34 +-39 +-42 +-43 +-44 +-44 +-44 +-43 +-41 +-39 +-37 +-27 +-5 +11 +21 +29 +34 +37 +39 +40 +41 +40 +40 +39 +38 +37 +35 +28 +8 +-7 +-18 +-26 +-32 +-35 +-38 +-40 +-41 +-41 +-41 +-40 +-38 +-37 +-35 +-24 +-3 +12 +23 +31 +37 +41 +43 +45 +45 +44 +42 +41 +39 +38 +36 +35 +33 +32 +29 +28 +26 +25 +23 +22 +21 +19 +18 +16 +15 +14 +12 +5 +-14 +-28 +-39 +-47 +-52 +-55 +-57 +-57 +-57 +-56 +-54 +-52 +-50 +-47 +-45 +-35 +-13 +3 +14 +22 +28 +32 +35 +37 +38 +38 +38 +37 +37 +35 +34 +26 +6 +-10 +-21 +-29 +-35 +-39 +-42 +-43 +-44 +-44 +-43 +-42 +-39 +-38 +-36 +-26 +-5 +10 +21 +28 +34 +37 +39 +40 +41 +41 +40 +40 +39 +37 +35 +28 +8 +-7 +-19 +-27 +-34 +-38 +-43 +-44 +-45 +-45 +-44 +-43 +-41 +-40 +-37 +-27 +-5 +11 +23 +30 +36 +39 +42 +43 +43 +42 +41 +40 +39 +37 +37 +29 +9 +-6 +-18 +-26 +-31 +-36 +-39 +-41 +-41 +-42 +-41 +-40 +-39 +-37 +-36 +-25 +-4 +12 +23 +30 +36 +39 +42 +43 +43 +43 +42 +40 +39 +38 +36 +28 +8 +-8 +-19 +-27 +-33 +-37 +-39 +-42 +-42 +-42 +-42 +-41 +-40 +-37 +-36 +-26 +-4 +10 +21 +29 +35 +38 +41 +42 +43 +43 +43 +42 +40 +39 +37 +28 +8 +-7 +-18 +-27 +-32 +-37 +-40 +-41 +-41 +-41 +-41 +-39 +-37 +-35 +-34 +-24 +-3 +11 +22 +29 +35 +38 +40 +42 +42 +42 +41 +40 +38 +37 +36 +27 +6 +-8 +-19 +-28 +-34 +-39 +-42 +-43 +-45 +-45 +-43 +-42 +-40 +-39 +-36 +-25 +-3 +11 +23 +31 +36 +40 +42 +44 +44 +43 +42 +42 +41 +39 +37 +29 +9 +-6 +-17 +-25 +-31 +-35 +-38 +-39 +-40 +-41 +-40 +-39 +-38 +-38 +-36 +-25 +-3 +11 +23 +30 +36 +39 +42 +43 +44 +44 +43 +42 +40 +38 +36 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-42 +-41 +-41 +-41 +-39 +-38 +-36 +-34 +-32 +-31 +-30 +-29 +-27 +-25 +-23 +-22 +-20 +-19 +-18 +-16 +-15 +-13 +-12 +-3 +18 +32 +42 +49 +53 +55 +56 +56 +56 +55 +53 +51 +50 +47 +46 +44 +42 +39 +37 +36 +33 +31 +28 +26 +25 +23 +22 +20 +19 +18 +17 +9 +-10 +-25 +-35 +-42 +-48 +-52 +-53 +-55 +-56 +-55 +-55 +-53 +-51 +-49 +-47 +-35 +-13 +2 +14 +23 +29 +33 +35 +37 +38 +37 +37 +36 +34 +33 +32 +24 +5 +-10 +-21 +-29 +-34 +-38 +-40 +-42 +-42 +-42 +-41 +-41 +-40 +-38 +-36 +-26 +-4 +11 +23 +32 +38 +41 +44 +45 +46 +45 +45 +43 +42 +40 +39 +30 +10 +-5 +-16 +-26 +-32 +-36 +-39 +-41 +-42 +-41 +-41 +-39 +-38 +-36 +-35 +-33 +-32 +-31 +-30 +-29 +-27 +-26 +-25 +-24 +-21 +-20 +-19 +-19 +-17 +-16 +-15 +-5 +16 +30 +41 +47 +52 +54 +56 +55 +55 +54 +53 +51 +49 +48 +46 +43 +41 +39 +38 +35 +34 +31 +29 +27 +25 +24 +22 +21 +20 +19 +18 +10 +-9 +-23 +-33 +-40 +-46 +-49 +-52 +-52 +-52 +-51 +-51 +-49 +-48 +-46 +-44 +-33 +-10 +6 +17 +25 +31 +36 +38 +39 +40 +39 +39 +37 +36 +34 +32 +24 +5 +-10 +-21 +-29 +-35 +-39 +-42 +-43 +-44 +-43 +-43 +-43 +-41 +-39 +-38 +-36 +-35 +-33 +-32 +-30 +-28 +-27 +-25 +-23 +-22 +-20 +-19 +-18 +-17 +-16 +-15 +-5 +15 +29 +39 +47 +52 +54 +55 +56 +56 +55 +54 +52 +51 +49 +46 +37 +17 +1 +-11 +-20 +-27 +-32 +-35 +-37 +-38 +-38 +-38 +-35 +-34 +-33 +-32 +-22 +-1 +14 +25 +33 +38 +41 +43 +44 +45 +44 +43 +42 +41 +40 +38 +36 +35 +33 +31 +29 +28 +26 +24 +23 +22 +20 +18 +17 +16 +16 +15 +7 +-11 +-25 +-35 +-43 +-48 +-52 +-54 +-55 +-56 +-55 +-53 +-52 +-50 +-48 +-46 +-44 +-41 +-38 +-36 +-33 +-31 +-29 +-27 +-25 +-24 +-23 +-22 +-21 +-19 +-18 +-17 +-7 +15 +29 +39 +46 +51 +54 +56 +56 +55 +54 +53 +51 +50 +47 +44 +42 +40 +38 +36 +34 +32 +31 +29 +27 +26 +25 +23 +21 +19 +18 +17 +9 +-10 +-25 +-35 +-43 +-48 +-51 +-53 +-54 +-53 +-52 +-51 +-49 +-47 +-45 +-43 +-32 +-10 +4 +16 +25 +31 +35 +38 +39 +40 +39 +39 +38 +38 +36 +34 +26 +7 +-9 +-21 +-30 +-36 +-40 +-43 +-45 +-45 +-46 +-45 +-43 +-41 +-39 +-38 +-36 +-35 +-33 +-32 +-30 +-29 +-27 +-26 +-23 +-22 +-20 +-19 +-18 +-17 +-15 +-14 +-3 +18 +32 +42 +49 +53 +56 +58 +58 +58 +57 +56 +53 +51 +50 +48 +46 +43 +41 +39 +37 +35 +32 +30 +28 +26 +24 +22 +21 +20 +18 +17 +9 +-10 +-24 +-34 +-42 +-47 +-51 +-54 +-55 +-55 +-54 +-53 +-52 +-50 +-48 +-46 +-35 +-13 +4 +16 +25 +31 +35 +37 +38 +38 +37 +37 +36 +35 +34 +33 +25 +5 +-10 +-21 +-29 +-35 +-39 +-41 +-43 +-44 +-44 +-44 +-43 +-41 +-39 +-38 +-36 +-34 +-32 +-31 +-29 +-27 +-25 +-23 +-21 +-20 +-19 +-17 +-16 +-16 +-15 +-13 +-4 +17 +31 +41 +48 +53 +56 +58 +58 +57 +56 +54 +52 +50 +48 +46 +43 +40 +38 +36 +34 +33 +32 +31 +28 +27 +25 +24 +22 +21 +19 +17 +9 +-10 +-24 +-34 +-42 +-47 +-51 +-53 +-54 +-53 +-53 +-52 +-50 +-48 +-46 +-44 +-42 +-40 +-39 +-37 +-34 +-32 +-31 +-29 +-27 +-25 +-23 +-21 +-20 +-18 +-17 +-16 +-6 +15 +29 +39 +46 +50 +52 +54 +54 +54 +53 +52 +50 +49 +47 +46 +37 +18 +1 +-11 +-20 +-26 +-31 +-35 +-37 +-38 +-37 +-36 +-36 +-35 +-34 +-33 +-22 +-1 +14 +25 +33 +38 +41 +44 +44 +45 +44 +44 +43 +42 +40 +38 +30 +11 +-5 +-16 +-24 +-31 +-36 +-39 +-40 +-41 +-42 +-41 +-41 +-39 +-37 +-35 +-24 +-2 +12 +24 +32 +37 +40 +43 +44 +44 +44 +42 +41 +39 +38 +36 +27 +7 +-7 +-19 +-28 +-34 +-38 +-40 +-42 +-42 +-43 +-42 +-41 +-40 +-38 +-36 +-27 +-5 +9 +21 +29 +35 +38 +41 +42 +43 +43 +42 +40 +39 +37 +36 +27 +7 +-7 +-18 +-27 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-40 +-39 +-38 +-36 +-25 +-4 +10 +21 +30 +35 +39 +41 +43 +43 +43 +43 +42 +41 +39 +38 +30 +10 +-6 +-17 +-26 +-32 +-36 +-39 +-40 +-41 +-41 +-40 +-39 +-38 +-36 +-34 +-25 +-3 +12 +24 +31 +36 +39 +42 +42 +41 +41 +41 +40 +39 +37 +36 +28 +9 +-7 +-19 +-27 +-33 +-38 +-41 +-43 +-44 +-44 +-44 +-43 +-41 +-40 +-38 +-27 +-5 +9 +21 +29 +34 +38 +41 +42 +42 +42 +42 +41 +40 +38 +36 +28 +9 +-6 +-17 +-25 +-31 +-35 +-38 +-39 +-40 +-40 +-40 +-40 +-39 +-37 +-36 +-25 +-3 +12 +24 +32 +38 +41 +44 +45 +45 +45 +44 +44 +42 +41 +38 +30 +9 +-5 +-17 +-26 +-32 +-37 +-40 +-41 +-42 +-42 +-41 +-40 +-39 +-37 +-36 +-26 +-5 +10 +21 +28 +34 +37 +39 +40 +41 +41 +40 +39 +38 +37 +35 +33 +31 +29 +27 +25 +23 +21 +20 +19 +18 +17 +16 +15 +14 +14 +12 +5 +-14 +-28 +-39 +-46 +-52 +-56 +-58 +-58 +-58 +-57 +-56 +-54 +-52 +-49 +-46 +-35 +-12 +3 +15 +23 +29 +32 +36 +37 +39 +38 +38 +38 +38 +36 +35 +27 +8 +-7 +-19 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-43 +-41 +-40 +-38 +-36 +-25 +-3 +11 +23 +31 +37 +39 +43 +43 +43 +43 +42 +41 +40 +39 +38 +29 +10 +-6 +-17 +-25 +-31 +-35 +-39 +-40 +-42 +-42 +-41 +-40 +-38 +-37 +-36 +-25 +-3 +12 +24 +31 +37 +40 +43 +44 +45 +45 +44 +42 +40 +39 +36 +29 +9 +-6 +-17 +-26 +-32 +-36 +-38 +-39 +-41 +-40 +-40 +-39 +-38 +-37 +-36 +-25 +-3 +12 +23 +31 +37 +40 +43 +44 +45 +44 +44 +43 +41 +39 +38 +29 +9 +-6 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-42 +-41 +-40 +-39 +-37 +-35 +-25 +-3 +12 +22 +30 +34 +38 +40 +41 +41 +41 +40 +39 +38 +37 +36 +27 +8 +-8 +-19 +-28 +-35 +-40 +-43 +-45 +-45 +-45 +-45 +-44 +-42 +-40 +-38 +-28 +-6 +10 +22 +29 +34 +37 +40 +41 +42 +42 +41 +40 +39 +37 +36 +28 +8 +-7 +-18 +-27 +-33 +-38 +-40 +-42 +-44 +-44 +-44 +-42 +-41 +-39 +-37 +-27 +-5 +10 +21 +29 +35 +39 +42 +43 +43 +42 +41 +40 +39 +38 +36 +28 +9 +-7 +-18 +-26 +-32 +-36 +-39 +-40 +-41 +-40 +-40 +-39 +-38 +-37 +-36 +-25 +-4 +11 +23 +31 +36 +39 +41 +43 +43 +43 +42 +41 +40 +38 +36 +27 +7 +-9 +-21 +-29 +-35 +-39 +-41 +-42 +-43 +-43 +-42 +-41 +-38 +-37 +-35 +-34 +-33 +-32 +-30 +-28 +-27 +-26 +-24 +-22 +-20 +-18 +-17 +-16 +-14 +-14 +-12 +-2 +18 +32 +43 +49 +54 +56 +57 +57 +57 +56 +55 +54 +52 +50 +47 +38 +18 +2 +-10 +-20 +-26 +-31 +-35 +-37 +-38 +-39 +-38 +-37 +-36 +-34 +-33 +-22 +-1 +14 +25 +33 +38 +42 +43 +44 +44 +43 +43 +41 +40 +38 +37 +28 +8 +-6 +-18 +-26 +-32 +-36 +-39 +-41 +-41 +-42 +-42 +-41 +-40 +-39 +-37 +-26 +-4 +10 +21 +30 +35 +39 +41 +43 +44 +43 +42 +41 +39 +37 +36 +27 +7 +-8 +-19 +-28 +-34 +-37 +-40 +-41 +-42 +-42 +-41 +-39 +-39 +-38 +-36 +-25 +-4 +10 +21 +28 +34 +38 +41 +42 +43 +43 +42 +41 +40 +39 +38 +30 +10 +-5 +-16 +-26 +-32 +-37 +-39 +-40 +-42 +-42 +-42 +-41 +-40 +-37 +-35 +-24 +-3 +12 +23 +31 +37 +40 +42 +42 +43 +42 +41 +40 +39 +37 +36 +28 +8 +-7 +-19 +-27 +-32 +-37 +-39 +-41 +-42 +-43 +-42 +-42 +-40 +-39 +-36 +-26 +-4 +11 +22 +30 +35 +39 +41 +43 +43 +43 +42 +41 +40 +38 +36 +29 +9 +-6 +-18 +-27 +-33 +-38 +-40 +-41 +-41 +-41 +-40 +-39 +-37 +-36 +-35 +-25 +-3 +12 +23 +30 +35 +38 +41 +43 +43 +43 +42 +41 +40 +39 +37 +28 +8 +-8 +-19 +-28 +-35 +-40 +-42 +-44 +-44 +-44 +-43 +-42 +-41 +-39 +-37 +-26 +-4 +11 +21 +29 +34 +38 +40 +41 +41 +41 +41 +39 +38 +36 +35 +28 +9 +-6 +-17 +-26 +-32 +-36 +-40 +-41 +-41 +-41 +-40 +-40 +-39 +-38 +-36 +-26 +-4 +12 +22 +31 +37 +40 +42 +43 +43 +42 +42 +40 +39 +37 +36 +33 +32 +30 +29 +27 +27 +25 +24 +22 +21 +19 +17 +16 +15 +14 +13 +5 +-13 +-27 +-37 +-44 +-50 +-53 +-54 +-55 +-55 +-54 +-53 +-51 +-49 +-47 +-45 +-33 +-12 +4 +15 +24 +30 +34 +37 +38 +39 +39 +38 +37 +36 +35 +33 +24 +5 +-11 +-22 +-30 +-35 +-39 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-37 +-36 +-25 +-4 +11 +21 +29 +35 +39 +41 +43 +43 +43 +42 +41 +40 +39 +38 +30 +10 +-5 +-16 +-25 +-31 +-36 +-39 +-40 +-41 +-42 +-42 +-40 +-39 +-37 +-35 +-24 +-3 +13 +24 +32 +37 +40 +42 +43 +43 +44 +43 +42 +40 +38 +36 +28 +9 +-6 +-17 +-25 +-31 +-36 +-39 +-41 +-42 +-42 +-42 +-41 +-39 +-37 +-35 +-25 +-4 +12 +23 +31 +37 +40 +42 +43 +43 +42 +41 +39 +39 +37 +35 +27 +7 +-8 +-19 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-43 +-42 +-41 +-40 +-38 +-27 +-6 +9 +20 +28 +34 +38 +41 +42 +43 +43 +42 +41 +40 +37 +35 +27 +8 +-7 +-18 +-26 +-32 +-36 +-39 +-40 +-41 +-41 +-41 +-40 +-39 +-38 +-37 +-26 +-5 +10 +21 +29 +34 +38 +41 +42 +43 +42 +42 +41 +40 +38 +36 +27 +7 +-9 +-20 +-29 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-39 +-37 +-36 +-26 +-5 +10 +21 +29 +34 +38 +40 +42 +42 +42 +42 +40 +40 +39 +38 +29 +9 +-6 +-17 +-26 +-32 +-36 +-40 +-42 +-42 +-42 +-41 +-39 +-38 +-37 +-35 +-23 +-2 +12 +23 +31 +36 +39 +42 +43 +43 +42 +41 +40 +39 +37 +36 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-42 +-41 +-41 +-40 +-38 +-37 +-26 +-4 +10 +21 +29 +35 +39 +41 +42 +42 +41 +41 +39 +38 +36 +34 +26 +6 +-9 +-21 +-29 +-35 +-39 +-42 +-43 +-44 +-44 +-42 +-41 +-40 +-39 +-38 +-27 +-5 +10 +21 +29 +35 +38 +41 +43 +43 +43 +42 +42 +40 +39 +37 +29 +10 +-5 +-17 +-26 +-33 +-37 +-40 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-33 +-31 +-30 +-28 +-27 +-25 +-24 +-22 +-22 +-21 +-19 +-18 +-16 +-16 +-15 +-14 +-4 +17 +31 +41 +48 +52 +55 +56 +56 +56 +54 +53 +51 +49 +46 +44 +36 +16 +1 +-11 +-20 +-27 +-32 +-35 +-38 +-39 +-39 +-37 +-37 +-35 +-34 +-33 +-23 +-2 +13 +25 +33 +38 +42 +45 +46 +46 +45 +44 +44 +42 +40 +38 +36 +34 +33 +31 +30 +28 +26 +25 +24 +23 +21 +20 +18 +17 +16 +14 +7 +-12 +-27 +-36 +-44 +-49 +-52 +-54 +-55 +-54 +-54 +-52 +-50 +-47 +-45 +-43 +-32 +-11 +5 +16 +25 +30 +34 +37 +38 +39 +39 +40 +38 +37 +36 +35 +27 +7 +-8 +-20 +-29 +-35 +-39 +-42 +-44 +-44 +-44 +-43 +-42 +-41 +-39 +-37 +-26 +-4 +11 +22 +30 +35 +38 +41 +41 +42 +40 +40 +39 +39 +37 +36 +27 +7 +-8 +-19 +-27 +-33 +-38 +-41 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-37 +-36 +-33 +-32 +-30 +-28 +-26 +-24 +-23 +-21 +-20 +-19 +-18 +-16 +-16 +-14 +-14 +-4 +17 +31 +41 +48 +53 +56 +58 +58 +58 +57 +55 +53 +51 +48 +46 +44 +41 +39 +37 +35 +33 +31 +29 +28 +27 +25 +24 +22 +21 +20 +19 +11 +-9 +-22 +-33 +-40 +-46 +-49 +-52 +-53 +-53 +-52 +-50 +-49 +-47 +-45 +-43 +-32 +-10 +5 +17 +25 +30 +34 +37 +38 +39 +38 +38 +38 +37 +35 +35 +26 +6 +-9 +-20 +-29 +-35 +-40 +-42 +-44 +-45 +-45 +-43 +-42 +-40 +-39 +-37 +-35 +-33 +-32 +-29 +-28 +-26 +-25 +-24 +-23 +-22 +-21 +-19 +-18 +-17 +-16 +-14 +-4 +16 +30 +40 +47 +52 +54 +56 +56 +55 +54 +53 +51 +49 +46 +44 +43 +40 +38 +36 +34 +32 +31 +29 +27 +25 +23 +22 +20 +19 +17 +16 +8 +-11 +-25 +-36 +-43 +-48 +-51 +-53 +-54 +-54 +-53 +-51 +-49 +-47 +-46 +-43 +-33 +-11 +4 +16 +24 +30 +34 +37 +38 +39 +40 +40 +39 +38 +37 +35 +27 +7 +-9 +-20 +-28 +-34 +-38 +-41 +-43 +-43 +-44 +-43 +-41 +-40 +-38 +-36 +-26 +-5 +10 +21 +28 +34 +37 +39 +41 +42 +41 +41 +39 +39 +37 +36 +28 +9 +-6 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-42 +-42 +-40 +-39 +-37 +-36 +-25 +-3 +12 +24 +32 +37 +41 +43 +44 +44 +43 +42 +41 +39 +37 +35 +27 +7 +-7 +-19 +-27 +-33 +-37 +-40 +-41 +-42 +-42 +-42 +-41 +-40 +-39 +-37 +-36 +-35 +-33 +-30 +-29 +-27 +-26 +-24 +-22 +-20 +-19 +-17 +-17 +-16 +-15 +-14 +-5 +16 +30 +40 +47 +51 +54 +55 +56 +56 +55 +54 +52 +51 +48 +46 +37 +17 +1 +-12 +-21 +-27 +-32 +-34 +-36 +-37 +-37 +-37 +-36 +-34 +-33 +-32 +-21 +0 +15 +26 +34 +39 +42 +44 +45 +45 +45 +45 +43 +42 +40 +38 +30 +10 +-5 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-43 +-42 +-41 +-41 +-39 +-37 +-27 +-5 +10 +22 +30 +35 +38 +41 +42 +42 +41 +40 +39 +38 +36 +36 +34 +32 +30 +29 +28 +26 +25 +23 +22 +21 +19 +18 +17 +15 +14 +13 +6 +-13 +-27 +-37 +-45 +-49 +-52 +-54 +-54 +-54 +-53 +-52 +-51 +-48 +-46 +-43 +-33 +-11 +5 +16 +24 +30 +34 +37 +39 +40 +40 +40 +40 +38 +37 +35 +27 +7 +-9 +-20 +-28 +-34 +-39 +-42 +-44 +-44 +-44 +-43 +-42 +-40 +-38 +-36 +-34 +-33 +-31 +-30 +-29 +-28 +-26 +-25 +-24 +-22 +-21 +-20 +-18 +-17 +-15 +-14 +-4 +16 +30 +40 +48 +52 +54 +55 +55 +55 +55 +53 +50 +48 +46 +45 +43 +40 +39 +37 +35 +33 +31 +28 +26 +25 +23 +21 +20 +19 +19 +18 +11 +-8 +-22 +-33 +-40 +-45 +-48 +-50 +-51 +-52 +-51 +-50 +-49 +-47 +-45 +-43 +-32 +-9 +6 +18 +26 +32 +36 +39 +40 +41 +40 +40 +38 +37 +35 +34 +26 +6 +-9 +-20 +-28 +-35 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-39 +-37 +-26 +-5 +10 +21 +29 +35 +38 +41 +42 +43 +43 +42 +41 +40 +39 +36 +28 +8 +-8 +-19 +-28 +-34 +-38 +-41 +-42 +-43 +-42 +-42 +-40 +-38 +-37 +-35 +-25 +-3 +12 +22 +29 +35 +38 +41 +42 +43 +43 +42 +41 +40 +39 +37 +29 +9 +-6 +-18 +-27 +-33 +-38 +-41 +-41 +-43 +-43 +-42 +-41 +-39 +-37 +-36 +-25 +-3 +12 +23 +31 +37 +40 +42 +43 +43 +43 +43 +42 +40 +39 +37 +29 +10 +-6 +-17 +-25 +-31 +-35 +-38 +-40 +-40 +-41 +-41 +-40 +-39 +-38 +-37 +-26 +-5 +10 +21 +28 +34 +38 +41 +41 +42 +42 +41 +39 +37 +35 +34 +25 +5 +-10 +-21 +-29 +-36 +-40 +-43 +-44 +-44 +-44 +-44 +-42 +-40 +-39 +-38 +-27 +-6 +10 +21 +28 +35 +38 +41 +42 +43 +43 +43 +42 +41 +39 +39 +30 +10 +-5 +-17 +-26 +-32 +-36 +-39 +-41 +-41 +-40 +-40 +-38 +-37 +-35 +-34 +-23 +-2 +13 +25 +33 +38 +41 +42 +43 +43 +42 +42 +41 +39 +37 +35 +28 +8 +-8 +-19 +-27 +-34 +-39 +-42 +-43 +-45 +-45 +-44 +-43 +-42 +-40 +-39 +-36 +-34 +-32 +-30 +-28 +-27 +-25 +-24 +-22 +-21 +-20 +-19 +-17 +-15 +-14 +-14 +-4 +17 +31 +41 +48 +52 +55 +57 +58 +58 +56 +53 +51 +49 +47 +45 +36 +16 +0 +-12 +-21 +-27 +-32 +-35 +-37 +-37 +-38 +-38 +-37 +-36 +-35 +-34 +-24 +-2 +13 +23 +31 +36 +40 +42 +43 +44 +43 +43 +42 +40 +39 +37 +29 +8 +-7 +-19 +-28 +-34 +-38 +-40 +-42 +-42 +-42 +-41 +-39 +-38 +-36 +-35 +-24 +-3 +12 +23 +31 +36 +39 +42 +44 +44 +43 +43 +42 +41 +39 +38 +30 +11 +-4 +-16 +-25 +-31 +-36 +-39 +-41 +-42 +-42 +-41 +-40 +-39 +-37 +-35 +-25 +-4 +11 +23 +31 +36 +40 +42 +43 +43 +43 +42 +40 +40 +37 +36 +27 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-27 +-5 +10 +21 +28 +34 +37 +39 +41 +42 +41 +41 +40 +39 +37 +35 +26 +7 +-8 +-20 +-29 +-35 +-39 +-42 +-43 +-44 +-43 +-43 +-42 +-40 +-38 +-36 +-26 +-4 +10 +21 +28 +33 +36 +38 +39 +40 +39 +40 +39 +38 +36 +34 +27 +7 +-9 +-21 +-30 +-36 +-41 +-44 +-45 +-46 +-46 +-45 +-44 +-42 +-40 +-38 +-27 +-5 +10 +21 +29 +35 +39 +41 +42 +42 +42 +41 +40 +39 +38 +37 +29 +10 +-5 +-17 +-25 +-32 +-36 +-39 +-40 +-41 +-41 +-41 +-40 +-38 +-37 +-36 +-25 +-3 +12 +23 +32 +37 +40 +42 +43 +44 +44 +43 +43 +42 +40 +38 +30 +10 +-5 +-16 +-25 +-31 +-35 +-38 +-39 +-40 +-40 +-39 +-38 +-36 +-35 +-33 +-22 +-1 +14 +25 +32 +37 +41 +43 +44 +45 +44 +43 +42 +41 +40 +39 +37 +35 +33 +31 +29 +28 +25 +24 +22 +20 +19 +18 +17 +15 +14 +14 +6 +-12 +-26 +-36 +-44 +-49 +-53 +-55 +-56 +-56 +-55 +-54 +-53 +-51 +-48 +-46 +-35 +-13 +3 +15 +23 +29 +34 +36 +37 +38 +38 +37 +36 +34 +33 +31 +23 +3 +-12 +-23 +-30 +-36 +-41 +-43 +-45 +-45 +-45 +-44 +-43 +-42 +-41 +-39 +-28 +-7 +8 +20 +28 +34 +37 +40 +41 +42 +43 +42 +41 +40 +39 +37 +28 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-40 +-40 +-41 +-40 +-39 +-37 +-36 +-34 +-24 +-2 +13 +24 +32 +37 +40 +42 +44 +44 +44 +44 +43 +42 +40 +38 +30 +10 +-6 +-18 +-27 +-34 +-38 +-40 +-41 +-41 +-42 +-42 +-41 +-39 +-37 +-35 +-25 +-3 +11 +21 +29 +35 +38 +40 +42 +42 +42 +42 +41 +40 +38 +37 +29 +9 +-6 +-18 +-27 +-33 +-38 +-40 +-42 +-42 +-43 +-43 +-42 +-40 +-38 +-36 +-26 +-3 +12 +24 +31 +36 +39 +41 +43 +43 +43 +42 +41 +40 +39 +38 +30 +10 +-5 +-17 +-25 +-31 +-35 +-38 +-39 +-40 +-41 +-40 +-39 +-38 +-38 +-35 +-25 +-3 +11 +23 +31 +37 +41 +43 +44 +45 +44 +43 +42 +40 +38 +36 +27 +7 +-8 +-20 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-43 +-42 +-40 +-39 +-37 +-28 +-7 +9 +20 +28 +33 +37 +40 +41 +42 +41 +41 +41 +39 +38 +37 +29 +10 +-6 +-17 +-26 +-32 +-36 +-39 +-41 +-41 +-42 +-41 +-40 +-38 +-36 +-35 +-33 +-31 +-29 +-28 +-26 +-25 +-24 +-22 +-21 +-20 +-19 +-18 +-18 +-16 +-15 +-14 +-5 +16 +30 +40 +47 +52 +54 +56 +57 +56 +54 +53 +50 +48 +46 +44 +41 +40 +38 +35 +34 +32 +30 +29 +27 +26 +25 +23 +21 +20 +18 +18 +11 +-8 +-24 +-34 +-41 +-46 +-50 +-51 +-52 +-53 +-52 +-50 +-49 +-47 +-45 +-43 +-41 +-40 +-38 +-36 +-34 +-32 +-30 +-28 +-27 +-25 +-24 +-22 +-21 +-20 +-18 +-17 +-7 +14 +28 +38 +45 +50 +52 +54 +54 +54 +53 +52 +50 +49 +47 +45 +42 +40 +38 +35 +33 +31 +28 +26 +24 +23 +21 +21 +19 +18 +16 +16 +8 +-11 +-25 +-35 +-42 +-47 +-51 +-53 +-54 +-54 +-53 +-51 +-50 +-47 +-45 +-43 +-41 +-38 +-36 +-34 +-31 +-28 +-26 +-24 +-23 +-21 +-20 +-18 +-17 +-16 +-15 +-14 +-4 +17 +31 +42 +48 +53 +56 +57 +57 +57 +56 +55 +53 +51 +49 +46 +43 +41 +38 +36 +33 +31 +29 +28 +26 +24 +23 +22 +21 +20 +18 +17 +9 +-11 +-26 +-37 +-45 +-50 +-53 +-54 +-55 +-55 +-54 +-53 +-51 +-49 +-47 +-45 +-43 +-41 +-39 +-37 +-35 +-34 +-31 +-29 +-27 +-25 +-23 +-22 +-21 +-20 +-19 +-17 +-7 +14 +28 +39 +46 +50 +52 +53 +53 +53 +52 +52 +49 +48 +46 +44 +41 +39 +38 +36 +33 +32 +30 +28 +26 +23 +22 +21 +20 +18 +17 +16 +8 +-11 +-24 +-34 +-40 +-46 +-50 +-52 +-53 +-53 +-53 +-51 +-50 +-48 +-47 +-44 +-42 +-39 +-37 +-35 +-33 +-30 +-28 +-26 +-25 +-23 +-21 +-20 +-19 +-18 +-16 +-16 +-6 +14 +29 +39 +47 +51 +53 +54 +55 +54 +54 +53 +51 +49 +46 +44 +42 +39 +36 +34 +32 +30 +28 +27 +24 +23 +22 +21 +20 +19 +18 +17 +9 +-10 +-25 +-35 +-43 +-48 +-52 +-54 +-55 +-55 +-54 +-52 +-50 +-48 +-46 +-43 +-41 +-40 +-37 +-35 +-34 +-32 +-31 +-29 +-28 +-26 +-25 +-23 +-22 +-20 +-18 +-17 +-6 +15 +29 +39 +46 +51 +54 +55 +55 +55 +54 +52 +50 +48 +47 +44 +36 +15 +-1 +-13 +-21 +-27 +-31 +-34 +-37 +-38 +-38 +-38 +-37 +-35 +-34 +-32 +-22 +0 +14 +25 +33 +39 +43 +46 +46 +47 +46 +46 +44 +42 +40 +38 +30 +10 +-5 +-16 +-25 +-30 +-35 +-37 +-39 +-40 +-40 +-38 +-38 +-37 +-35 +-33 +-23 +-2 +13 +24 +32 +38 +41 +42 +43 +43 +43 +42 +41 +41 +40 +38 +30 +9 +-6 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-35 +-24 +-3 +12 +23 +30 +35 +38 +41 +42 +42 +42 +41 +40 +39 +38 +37 +29 +10 +-5 +-17 +-25 +-31 +-35 +-38 +-40 +-42 +-42 +-42 +-40 +-39 +-38 +-36 +-25 +-4 +12 +23 +31 +37 +40 +42 +43 +44 +44 +43 +41 +39 +37 +36 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-42 +-41 +-40 +-39 +-38 +-36 +-27 +-5 +10 +21 +28 +34 +37 +40 +41 +42 +42 +42 +41 +39 +37 +36 +27 +7 +-7 +-19 +-28 +-34 +-39 +-41 +-43 +-43 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-4 +10 +21 +28 +34 +37 +39 +40 +42 +42 +41 +40 +39 +38 +37 +29 +10 +-6 +-18 +-27 +-33 +-38 +-40 +-42 +-42 +-41 +-41 +-41 +-40 +-39 +-37 +-26 +-4 +11 +24 +31 +37 +40 +43 +43 +43 +43 +43 +42 +41 +39 +38 +29 +10 +-5 +-16 +-24 +-30 +-35 +-38 +-39 +-40 +-41 +-41 +-40 +-38 +-37 +-35 +-25 +-3 +12 +24 +32 +38 +42 +44 +46 +46 +45 +45 +43 +42 +39 +38 +36 +35 +32 +31 +29 +27 +25 +24 +23 +22 +21 +20 +19 +17 +15 +14 +6 +-13 +-27 +-37 +-45 +-50 +-54 +-56 +-56 +-56 +-54 +-53 +-52 +-50 +-48 +-46 +-35 +-13 +2 +14 +22 +28 +31 +34 +36 +37 +36 +37 +36 +36 +34 +34 +25 +5 +-9 +-20 +-30 +-36 +-41 +-43 +-45 +-45 +-45 +-44 +-43 +-42 +-40 +-37 +-27 +-5 +11 +22 +30 +35 +38 +40 +41 +41 +41 +41 +41 +40 +38 +36 +28 +8 +-7 +-18 +-27 +-33 +-37 +-39 +-41 +-42 +-42 +-42 +-40 +-38 +-37 +-35 +-25 +-3 +12 +24 +32 +37 +41 +44 +44 +45 +44 +43 +42 +41 +39 +37 +28 +8 +-6 +-18 +-27 +-33 +-37 +-40 +-41 +-42 +-41 +-42 +-41 +-40 +-39 +-37 +-27 +-5 +10 +21 +29 +34 +38 +40 +42 +43 +43 +42 +42 +41 +38 +36 +28 +7 +-9 +-19 +-27 +-33 +-38 +-40 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-35 +-25 +-3 +11 +22 +29 +34 +37 +40 +41 +42 +42 +41 +40 +39 +38 +36 +28 +9 +-6 +-18 +-27 +-34 +-38 +-41 +-43 +-44 +-44 +-43 +-42 +-40 +-38 +-36 +-26 +-4 +11 +22 +30 +36 +39 +41 +42 +42 +42 +41 +39 +38 +37 +36 +27 +8 +-7 +-18 +-27 +-32 +-37 +-40 +-42 +-43 +-43 +-43 +-42 +-40 +-39 +-36 +-26 +-4 +11 +22 +29 +36 +39 +41 +42 +43 +42 +41 +40 +38 +37 +35 +26 +6 +-9 +-21 +-29 +-35 +-39 +-42 +-44 +-43 +-44 +-42 +-42 +-40 +-39 +-37 +-27 +-6 +9 +20 +28 +34 +38 +40 +42 +42 +42 +41 +40 +39 +38 +37 +29 +9 +-7 +-18 +-27 +-33 +-37 +-39 +-41 +-41 +-41 +-39 +-38 +-36 +-35 +-33 +-31 +-29 +-27 +-26 +-25 +-24 +-22 +-21 +-20 +-18 +-17 +-15 +-15 +-14 +-13 +-12 +-2 +20 +34 +43 +50 +54 +56 +58 +58 +58 +56 +54 +52 +52 +49 +46 +43 +41 +39 +37 +35 +33 +31 +29 +27 +25 +24 +22 +20 +19 +17 +16 +8 +-11 +-25 +-35 +-42 +-48 +-51 +-53 +-54 +-54 +-54 +-53 +-52 +-50 +-49 +-47 +-35 +-13 +3 +14 +22 +29 +33 +36 +38 +39 +39 +39 +37 +36 +34 +33 +25 +5 +-10 +-21 +-29 +-35 +-39 +-41 +-42 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-27 +-6 +9 +20 +29 +35 +38 +41 +43 +42 +42 +41 +40 +39 +38 +36 +28 +8 +-7 +-19 +-27 +-34 +-38 +-41 +-43 +-43 +-42 +-42 +-41 +-39 +-37 +-35 +-33 +-32 +-30 +-28 +-25 +-24 +-23 +-23 +-22 +-20 +-19 +-18 +-17 +-16 +-15 +-14 +-3 +18 +32 +43 +49 +53 +56 +57 +58 +58 +55 +53 +51 +49 +48 +45 +43 +41 +39 +36 +34 +32 +30 +29 +28 +27 +26 +24 +22 +20 +19 +17 +9 +-10 +-24 +-35 +-43 +-49 +-52 +-54 +-54 +-54 +-53 +-51 +-49 +-47 +-45 +-43 +-33 +-11 +5 +17 +25 +31 +34 +38 +39 +40 +40 +40 +40 +39 +37 +36 +29 +9 +-7 +-19 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-42 +-40 +-38 +-36 +-35 +-33 +-32 +-30 +-28 +-27 +-26 +-25 +-24 +-22 +-21 +-19 +-18 +-17 +-16 +-14 +-4 +17 +31 +42 +48 +53 +55 +56 +55 +55 +53 +52 +50 +48 +45 +44 +35 +16 +0 +-11 +-20 +-27 +-32 +-34 +-36 +-36 +-37 +-37 +-37 +-36 +-35 +-34 +-24 +-2 +13 +24 +32 +37 +41 +45 +45 +45 +44 +44 +42 +41 +39 +37 +36 +35 +33 +31 +28 +27 +25 +24 +22 +21 +20 +19 +18 +17 +16 +15 +6 +-13 +-28 +-38 +-46 +-52 +-55 +-56 +-57 +-56 +-56 +-54 +-53 +-50 +-47 +-45 +-43 +-41 +-39 +-37 +-35 +-33 +-31 +-30 +-28 +-26 +-24 +-21 +-19 +-18 +-17 +-16 +-6 +16 +30 +41 +48 +52 +55 +56 +56 +55 +54 +53 +51 +50 +47 +45 +43 +41 +39 +36 +35 +33 +32 +30 +27 +26 +24 +23 +20 +19 +17 +16 +9 +-11 +-25 +-36 +-43 +-48 +-52 +-53 +-55 +-54 +-53 +-51 +-50 +-47 +-45 +-43 +-31 +-9 +5 +17 +25 +31 +35 +38 +40 +41 +41 +40 +40 +39 +38 +37 +30 +10 +-6 +-17 +-26 +-32 +-37 +-40 +-42 +-43 +-43 +-42 +-41 +-39 +-37 +-36 +-34 +-32 +-30 +-28 +-27 +-25 +-24 +-22 +-21 +-20 +-20 +-18 +-18 +-16 +-15 +-14 +-4 +17 +31 +41 +48 +53 +56 +58 +58 +58 +56 +55 +52 +50 +48 +45 +43 +40 +38 +36 +35 +33 +31 +29 +28 +26 +25 +24 +22 +21 +20 +19 +11 +-7 +-22 +-34 +-42 +-47 +-50 +-51 +-52 +-53 +-53 +-51 +-49 +-48 +-45 +-43 +-32 +-10 +5 +17 +25 +31 +35 +37 +38 +39 +39 +39 +37 +36 +34 +33 +26 +5 +-9 +-20 +-28 +-33 +-37 +-41 +-42 +-43 +-44 +-43 +-41 +-41 +-39 +-38 +-37 +-34 +-31 +-29 +-27 +-26 +-23 +-22 +-21 +-19 +-17 +-16 +-14 +-13 +-13 +-12 +-3 +18 +31 +41 +48 +53 +55 +57 +57 +56 +55 +53 +52 +50 +47 +44 +42 +39 +36 +33 +32 +29 +28 +26 +23 +22 +20 +19 +17 +17 +16 +16 +8 +-11 +-26 +-36 +-45 +-50 +-54 +-55 +-57 +-56 +-55 +-54 +-52 +-50 +-48 +-44 +-42 +-39 +-37 +-34 +-32 +-31 +-30 +-28 +-26 +-25 +-23 +-22 +-20 +-18 +-17 +-16 +-6 +15 +30 +40 +47 +52 +54 +56 +56 +55 +54 +52 +50 +48 +46 +45 +36 +16 +0 +-12 +-21 +-28 +-32 +-35 +-37 +-39 +-39 +-39 +-38 +-38 +-36 +-35 +-25 +-4 +11 +23 +30 +36 +39 +42 +43 +45 +44 +43 +42 +41 +39 +37 +29 +9 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-43 +-42 +-42 +-41 +-39 +-37 +-36 +-26 +-4 +11 +22 +29 +35 +37 +40 +41 +42 +41 +42 +40 +39 +37 +36 +27 +8 +-7 +-18 +-27 +-33 +-38 +-40 +-42 +-43 +-44 +-43 +-42 +-40 +-39 +-37 +-26 +-4 +11 +22 +30 +36 +40 +42 +43 +43 +42 +41 +40 +39 +38 +36 +29 +9 +-6 +-18 +-26 +-32 +-35 +-39 +-40 +-41 +-41 +-40 +-39 +-38 +-36 +-35 +-24 +-3 +12 +24 +31 +37 +41 +43 +44 +45 +45 +44 +43 +42 +40 +38 +29 +10 +-6 +-17 +-26 +-32 +-37 +-40 +-42 +-41 +-42 +-41 +-40 +-39 +-38 +-37 +-27 +-6 +9 +20 +28 +33 +37 +40 +41 +42 +41 +41 +40 +40 +38 +36 +27 +8 +-7 +-19 +-28 +-34 +-38 +-41 +-43 +-43 +-43 +-42 +-41 +-40 +-38 +-37 +-27 +-4 +10 +21 +29 +34 +37 +39 +40 +41 +41 +40 +39 +38 +37 +35 +28 +8 +-7 +-18 +-27 +-33 +-37 +-40 +-42 +-42 +-42 +-41 +-41 +-39 +-37 +-34 +-24 +-2 +13 +24 +32 +38 +42 +44 +45 +46 +45 +44 +42 +41 +39 +38 +29 +9 +-7 +-17 +-25 +-31 +-36 +-40 +-41 +-42 +-42 +-42 +-41 +-40 +-38 +-37 +-27 +-5 +10 +21 +29 +34 +38 +40 +42 +42 +42 +42 +41 +40 +38 +36 +35 +34 +31 +30 +27 +26 +24 +23 +21 +20 +18 +18 +17 +16 +15 +14 +7 +-11 +-26 +-37 +-45 +-51 +-54 +-56 +-57 +-57 +-56 +-54 +-52 +-50 +-48 +-45 +-35 +-12 +3 +15 +23 +29 +34 +36 +38 +38 +39 +38 +37 +36 +34 +33 +26 +6 +-9 +-20 +-28 +-34 +-38 +-40 +-42 +-43 +-43 +-43 +-41 +-40 +-38 +-38 +-27 +-6 +9 +20 +29 +35 +39 +41 +43 +43 +43 +42 +41 +39 +36 +35 +26 +7 +-8 +-20 +-28 +-34 +-38 +-40 +-41 +-42 +-42 +-42 +-41 +-39 +-38 +-36 +-26 +-5 +9 +21 +30 +36 +39 +42 +43 +44 +44 +43 +42 +42 +40 +38 +29 +9 +-7 +-18 +-27 +-34 +-38 +-41 +-42 +-43 +-43 +-43 +-42 +-40 +-38 +-36 +-26 +-4 +11 +22 +30 +36 +38 +41 +41 +41 +42 +42 +40 +39 +38 +36 +28 +9 +-6 +-17 +-26 +-32 +-37 +-39 +-41 +-42 +-43 +-42 +-41 +-40 +-38 +-36 +-26 +-4 +10 +21 +30 +35 +39 +42 +42 +43 +42 +41 +40 +39 +37 +35 +26 +6 +-9 +-20 +-29 +-34 +-39 +-41 +-42 +-43 +-42 +-42 +-41 +-40 +-38 +-37 +-27 +-5 +9 +21 +29 +35 +37 +40 +41 +41 +41 +41 +40 +39 +38 +37 +28 +8 +-7 +-19 +-28 +-35 +-39 +-42 +-43 +-44 +-44 +-43 +-41 +-40 +-38 +-36 +-25 +-3 +12 +23 +31 +36 +39 +42 +43 +44 +44 +43 +41 +40 +38 +37 +29 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-40 +-42 +-42 +-42 +-41 +-39 +-38 +-37 +-26 +-4 +11 +24 +32 +37 +40 +43 +44 +44 +44 +43 +41 +40 +38 +37 +29 +9 +-6 +-18 +-26 +-32 +-36 +-39 +-40 +-40 +-40 +-40 +-39 +-37 +-37 +-35 +-34 +-32 +-31 +-29 +-27 +-26 +-24 +-22 +-21 +-20 +-18 +-17 +-15 +-14 +-13 +-13 +-3 +17 +30 +40 +48 +51 +54 +55 +55 +54 +53 +52 +50 +49 +47 +45 +36 +17 +1 +-11 +-21 +-27 +-33 +-35 +-38 +-39 +-39 +-38 +-38 +-36 +-35 +-33 +-22 +0 +14 +26 +34 +40 +43 +45 +45 +46 +45 +45 +43 +42 +40 +39 +30 +10 +-5 +-16 +-24 +-30 +-35 +-38 +-39 +-40 +-41 +-41 +-40 +-39 +-38 +-36 +-25 +-4 +11 +23 +31 +36 +40 +42 +43 +44 +44 +43 +41 +39 +37 +36 +27 +7 +-8 +-20 +-29 +-35 +-39 +-42 +-43 +-43 +-43 +-43 +-41 +-40 +-39 +-37 +-27 +-6 +9 +20 +28 +34 +37 +40 +41 +41 +41 +41 +40 +39 +38 +37 +28 +8 +-7 +-18 +-28 +-34 +-38 +-41 +-43 +-43 +-44 +-42 +-42 +-40 +-39 +-37 +-26 +-4 +11 +22 +30 +36 +39 +41 +42 +42 +42 +41 +40 +39 +38 +37 +29 +10 +-6 +-17 +-25 +-31 +-35 +-38 +-40 +-41 +-42 +-41 +-40 +-38 +-37 +-36 +-25 +-3 +12 +23 +31 +36 +39 +42 +44 +44 +44 +44 +42 +41 +39 +37 +29 +9 +-6 +-17 +-26 +-32 +-36 +-39 +-40 +-40 +-40 +-39 +-38 +-36 +-35 +-33 +-23 +-2 +13 +24 +32 +37 +41 +43 +44 +44 +44 +44 +43 +42 +40 +38 +30 +10 +-6 +-17 +-26 +-32 +-37 +-39 +-41 +-42 +-43 +-42 +-41 +-39 +-38 +-36 +-26 +-3 +11 +23 +31 +37 +39 +42 +42 +42 +42 +41 +39 +38 +37 +36 +28 +8 +-7 +-18 +-27 +-32 +-36 +-39 +-41 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-28 +-7 +7 +19 +27 +33 +36 +39 +40 +41 +40 +40 +38 +37 +35 +33 +32 +30 +29 +27 +26 +25 +23 +22 +20 +19 +19 +18 +18 +17 +18 +16 +9 +-10 +-25 +-35 +-43 +-48 +-52 +-53 +-54 +-53 +-52 +-51 +-49 +-47 +-45 +-43 +-31 +-9 +5 +17 +25 +30 +35 +37 +38 +38 +38 +37 +37 +36 +35 +33 +25 +6 +-9 +-20 +-28 +-35 +-39 +-43 +-44 +-45 +-45 +-45 +-44 +-42 +-41 +-39 +-27 +-5 +9 +21 +28 +34 +38 +41 +42 +43 +42 +41 +40 +38 +37 +35 +28 +7 +-7 +-19 +-27 +-33 +-37 +-39 +-41 +-41 +-41 +-40 +-40 +-39 +-37 +-36 +-26 +-4 +11 +23 +30 +36 +38 +41 +43 +43 +43 +42 +41 +40 +38 +36 +27 +8 +-7 +-19 +-28 +-33 +-38 +-41 +-43 +-44 +-43 +-42 +-42 +-40 +-39 +-37 +-26 +-4 +10 +21 +29 +34 +37 +39 +40 +41 +41 +40 +39 +38 +37 +36 +28 +8 +-6 +-18 +-27 +-33 +-37 +-40 +-41 +-43 +-43 +-43 +-42 +-40 +-39 +-37 +-27 +-5 +11 +22 +29 +35 +38 +40 +40 +41 +40 +40 +39 +38 +36 +35 +26 +6 +-8 +-19 +-27 +-33 +-37 +-40 +-42 +-43 +-44 +-43 +-42 +-41 +-38 +-36 +-26 +-4 +11 +22 +30 +36 +40 +42 +43 +44 +44 +43 +42 +41 +39 +38 +29 +9 +-6 +-18 +-27 +-33 +-37 +-39 +-41 +-41 +-41 +-41 +-40 +-39 +-38 +-37 +-26 +-5 +10 +21 +29 +34 +38 +40 +42 +42 +42 +42 +41 +40 +38 +37 +28 +9 +-6 +-18 +-27 +-34 +-39 +-41 +-43 +-44 +-43 +-43 +-41 +-40 +-38 +-36 +-26 +-4 +11 +22 +30 +35 +39 +41 +41 +41 +41 +40 +38 +37 +35 +34 +26 +7 +-8 +-19 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-43 +-42 +-41 +-39 +-37 +-27 +-4 +10 +22 +30 +36 +39 +42 +43 +45 +44 +44 +42 +42 +40 +38 +29 +10 +-6 +-17 +-27 +-32 +-36 +-39 +-40 +-41 +-41 +-39 +-38 +-37 +-36 +-34 +-24 +-3 +12 +24 +32 +37 +40 +42 +44 +44 +44 +43 +42 +41 +39 +38 +30 +11 +-5 +-17 +-25 +-32 +-36 +-40 +-42 +-43 +-42 +-41 +-40 +-39 +-37 +-36 +-33 +-32 +-30 +-28 +-26 +-24 +-23 +-22 +-21 +-20 +-19 +-18 +-16 +-15 +-15 +-14 +-4 +16 +30 +41 +48 +53 +57 +58 +57 +57 +55 +53 +51 +49 +46 +44 +35 +15 +-1 +-12 +-22 +-28 +-33 +-36 +-37 +-38 +-38 +-38 +-37 +-37 +-36 +-34 +-24 +-3 +12 +23 +31 +36 +40 +42 +43 +43 +43 +42 +41 +39 +38 +36 +34 +31 +29 +28 +26 +25 +24 +22 +21 +20 +19 +17 +17 +16 +15 +15 +7 +-11 +-26 +-36 +-44 +-49 +-52 +-54 +-55 +-54 +-53 +-51 +-50 +-48 +-45 +-42 +-31 +-9 +7 +18 +26 +31 +35 +37 +39 +40 +39 +39 +38 +38 +37 +35 +27 +7 +-8 +-19 +-28 +-34 +-38 +-41 +-43 +-44 +-45 +-44 +-43 +-41 +-39 +-37 +-27 +-4 +11 +22 +30 +36 +40 +42 +43 +43 +42 +42 +40 +39 +38 +36 +28 +8 +-7 +-18 +-27 +-32 +-37 +-39 +-40 +-41 +-41 +-40 +-40 +-38 +-37 +-36 +-34 +-32 +-31 +-29 +-27 +-25 +-24 +-22 +-20 +-18 +-17 +-15 +-15 +-13 +-12 +-11 +-1 +19 +33 +42 +49 +54 +57 +58 +58 +58 +57 +55 +53 +51 +50 +48 +46 +43 +41 +38 +36 +33 +31 +29 +27 +25 +23 +22 +20 +19 +17 +17 +10 +-9 +-23 +-35 +-43 +-48 +-52 +-54 +-55 +-56 +-55 +-54 +-52 +-50 +-48 +-46 +-34 +-12 +4 +15 +23 +30 +34 +37 +38 +39 +39 +38 +37 +36 +34 +32 +25 +5 +-9 +-21 +-29 +-35 +-39 +-42 +-43 +-43 +-42 +-41 +-40 +-39 +-38 +-35 +-34 +-32 +-31 +-29 +-28 +-27 +-26 +-24 +-22 +-20 +-19 +-17 +-16 +-14 +-14 +-12 +-3 +18 +31 +41 +48 +52 +54 +56 +57 +57 +55 +54 +52 +51 +48 +47 +44 +42 +40 +38 +36 +34 +32 +30 +27 +26 +23 +21 +20 +19 +18 +17 +9 +-10 +-25 +-35 +-43 +-47 +-50 +-52 +-53 +-53 +-52 +-50 +-49 +-48 +-46 +-43 +-32 +-10 +5 +17 +26 +31 +36 +38 +40 +40 +40 +40 +38 +37 +35 +34 +25 +6 +-9 +-20 +-28 +-35 +-39 +-41 +-42 +-43 +-43 +-43 +-42 +-41 +-40 +-39 +-28 +-6 +8 +19 +27 +32 +36 +38 +39 +39 +39 +38 +38 +37 +36 +35 +27 +7 +-8 +-20 +-29 +-36 +-41 +-44 +-45 +-46 +-46 +-44 +-43 +-42 +-41 +-39 +-28 +-6 +10 +21 +29 +35 +38 +40 +41 +42 +41 +41 +40 +39 +37 +36 +27 +8 +-6 +-17 +-26 +-32 +-36 +-39 +-41 +-42 +-42 +-41 +-41 +-40 +-38 +-36 +-34 +-32 +-31 +-28 +-27 +-25 +-23 +-21 +-19 +-18 +-17 +-15 +-15 +-14 +-13 +-13 +-3 +18 +32 +42 +49 +54 +57 +58 +59 +59 +57 +56 +53 +51 +48 +46 +37 +17 +1 +-11 +-21 +-28 +-32 +-35 +-37 +-38 +-38 +-37 +-36 +-35 +-34 +-33 +-23 +-2 +13 +24 +31 +36 +39 +42 +42 +43 +42 +42 +40 +40 +38 +37 +28 +8 +-8 +-19 +-28 +-34 +-38 +-41 +-42 +-43 +-43 +-42 +-41 +-40 +-38 +-36 +-25 +-3 +12 +23 +31 +36 +39 +42 +42 +42 +42 +42 +40 +39 +37 +36 +35 +33 +32 +30 +29 +28 +27 +25 +23 +22 +20 +19 +17 +16 +15 +15 +7 +-11 +-26 +-36 +-44 +-48 +-51 +-53 +-54 +-54 +-53 +-51 +-50 +-48 +-46 +-44 +-33 +-11 +4 +16 +24 +31 +35 +37 +38 +40 +40 +40 +38 +38 +37 +34 +26 +5 +-10 +-21 +-29 +-35 +-39 +-41 +-43 +-43 +-44 +-43 +-42 +-40 +-39 +-37 +-36 +-34 +-33 +-32 +-30 +-27 +-26 +-25 +-23 +-22 +-20 +-19 +-17 +-16 +-15 +-14 +-5 +16 +30 +39 +45 +50 +52 +53 +54 +53 +53 +51 +50 +48 +46 +44 +42 +40 +37 +35 +34 +32 +30 +28 +27 +25 +23 +21 +20 +19 +18 +17 +10 +-9 +-23 +-34 +-41 +-47 +-50 +-52 +-53 +-54 +-53 +-53 +-51 +-49 +-47 +-45 +-33 +-12 +4 +15 +24 +30 +34 +38 +39 +39 +38 +38 +36 +36 +34 +33 +26 +6 +-9 +-21 +-29 +-35 +-39 +-41 +-43 +-43 +-44 +-44 +-43 +-42 +-40 +-37 +-27 +-5 +9 +20 +28 +35 +39 +42 +43 +43 +43 +42 +41 +40 +37 +36 +27 +7 +-8 +-19 +-27 +-33 +-37 +-40 +-41 +-42 +-41 +-40 +-40 +-39 +-38 +-36 +-26 +-5 +10 +21 +28 +33 +37 +40 +41 +42 +42 +41 +40 +39 +38 +36 +28 +9 +-7 +-19 +-27 +-34 +-38 +-40 +-42 +-42 +-42 +-42 +-40 +-39 +-37 +-35 +-24 +-3 +12 +23 +30 +36 +39 +42 +43 +43 +42 +42 From 65f7d8cac98196638bc059aaad4aab4c21b0dc13 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Thu, 17 Oct 2019 23:05:15 +0200 Subject: [PATCH 28/52] add: 'script run init_rdv4' - lua script to help setup your RDV4 initally --- client/luascripts/init_rdv4.lua | 96 +++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 client/luascripts/init_rdv4.lua diff --git a/client/luascripts/init_rdv4.lua b/client/luascripts/init_rdv4.lua new file mode 100644 index 000000000..4836cda77 --- /dev/null +++ b/client/luascripts/init_rdv4.lua @@ -0,0 +1,96 @@ +local getopt = require('getopt') + +copyright = 'Copyright (c) 2019 IceSQL AB. All rights reserved.' +author = 'Christian Herrmann' +version = 'v1.0.0' +desc = [[ +This script initialize a Proxmark3 RDV4.0 with + - uploading dictionary files to flashmem + - configuring the LF T55X7 device settings + ]] +example = [[ + + script run init_rdv4 +]] +usage = [[ +script run init_rdv4 -h + +Arguments: + -h : this help +]] + +local DEBUG = true +--- +-- A debug printout-function +local function dbg(args) + if not DEBUG then return end + if type(args) == 'table' then + local i = 1 + while args[i] do + dbg(args[i]) + i = i+1 + end + else + print('###', args) + end +end +--- +-- This is only meant to be used when errors occur +local function oops(err) + print('ERROR:', err) + core.clearCommandBuffer() + return nil, err +end +--- +-- Usage help +local function help() + print(copyright) + print(author) + print(version) + print(desc) + print('Example usage') + print(example) + print(usage) +end +--- +-- The main entry point +function main(args) + local dash = string.rep('--', 20) + + print( dash ) + print( dash ) + print() + + -- Read the parameters + for o, a in getopt.getopt(args, 'h') do + if o == 'h' then return help() end + end + + print('Prepping your Proxmark3 RDV4') + + -- Upload dictionaries + print('Uploading dictionaries to RDV4 flashmemory') + print(dash) + core.console('mem load f mfc_default_keys m') + core.console('mem load f t55xx_default_pwds t') + core.console('mem load f iclass_default_keys i') + print(dash) + + -- T55x7 Device configuration + print('Configure T55XX device side to match RDV4') + print(dash) + core.console('lf t55xx deviceconfig r 0 a 29 b 17 c 15 d 47 e 15 p') + core.console('lf t55xx deviceconfig r 1 a 29 b 17 c 18 d 50 e 15 p') + core.console('lf t55xx deviceconfig r 2 a 29 b 17 c 18 d 40 e 15 p') + core.console('lf t55xx deviceconfig r 3 a 29 b 17 c 15 d 31 e 15 f 47 g 63 p') + + print('') + print('') + core.console('hw status') + print(dash) + + print('all done!') + +end + +main(args) From 5fcb5f0ca5fa868664dc3495086ae1e17f1eed0c Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 18 Oct 2019 12:46:20 +0200 Subject: [PATCH 29/52] coverity 226278 --- armsrc/appmain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 3b6976819..35838ffab 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1591,7 +1591,7 @@ static void PacketReceived(PacketCommandNG *packet) { uint16_t offset = MIN(BIGBUF_SIZE - PM3_CMD_DATA_SIZE - 3, payload->offset); uint8_t *mem = BigBuf_get_addr(); - memcpy(mem + offset, &payload->data, PM3_CMD_DATA_SIZE - 3); + memcpy(mem + offset, &payload->data, PM3_CMD_DATA_SIZE - 3 - offset); reply_ng(CMD_LF_UPLOAD_SIM_SAMPLES, PM3_SUCCESS, NULL, 0); break; } From 39fd6b1910daff03811d4a4e5da70068250d8605 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 18 Oct 2019 16:58:24 +0200 Subject: [PATCH 30/52] coverity: separate crypto1 fcts ARM<>host into create/destroy and init/deinit --- armsrc/Standalone/hf_colin.c | 6 +++--- armsrc/Standalone/hf_mattyrun.c | 4 ++-- armsrc/mifarecmd.c | 18 ++++++++--------- armsrc/mifaresim.c | 6 +++--- armsrc/mifareutil.c | 4 ++-- common/crapto1/crapto1.c | 7 ++++++- common/crapto1/crapto1.h | 12 ++++++----- common/crapto1/crypto1.c | 35 ++++++++++++++++----------------- 8 files changed, 49 insertions(+), 43 deletions(-) diff --git a/armsrc/Standalone/hf_colin.c b/armsrc/Standalone/hf_colin.c index 6a0d9a19d..8efcb1003 100644 --- a/armsrc/Standalone/hf_colin.c +++ b/armsrc/Standalone/hf_colin.c @@ -857,7 +857,7 @@ int e_MifareECardLoad(uint32_t numofsectors, uint8_t keytype) { DbprintfEx(FLAG_NEWLINE, "Halt error"); }; - crypto1_destroy(pcs); + crypto1_deinit(pcs); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); @@ -894,12 +894,12 @@ int cjat91_saMifareChkKeys(uint8_t blockNo, uint8_t keyType, bool clearTrace, ui SpinDelayUs(AUTHENTICATION_TIMEOUT); continue; } - crypto1_destroy(pcs); + crypto1_deinit(pcs); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); *key = ui64Key; return i; } - crypto1_destroy(pcs); + crypto1_deinit(pcs); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); return -1; diff --git a/armsrc/Standalone/hf_mattyrun.c b/armsrc/Standalone/hf_mattyrun.c index bf13a39c0..9fff4a226 100644 --- a/armsrc/Standalone/hf_mattyrun.c +++ b/armsrc/Standalone/hf_mattyrun.c @@ -195,12 +195,12 @@ static int saMifareChkKeys(uint8_t blockNo, uint8_t keyType, bool clearTrace, ui SpinDelayUs(AUTHENTICATION_TIMEOUT); continue; } - crypto1_destroy(pcs); + crypto1_deinit(pcs); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); *key = ui64Key; return i; } - crypto1_destroy(pcs); + crypto1_deinit(pcs); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); return -1; diff --git a/armsrc/mifarecmd.c b/armsrc/mifarecmd.c index b0b7c95ab..f5e3fe961 100644 --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@ -103,7 +103,7 @@ void MifareReadBlock(uint8_t blockNo, uint8_t keyType, uint8_t *datain) { break; } - crypto1_destroy(pcs); + crypto1_deinit(pcs); if (DBGLEVEL >= 2) DbpString("READ BLOCK FINISHED"); @@ -264,7 +264,7 @@ void MifareReadSector(uint8_t arg0, uint8_t arg1, uint8_t *datain) { if (DBGLEVEL >= 2) DbpString("READ SECTOR FINISHED"); - crypto1_destroy(pcs); + crypto1_deinit(pcs); LED_B_ON(); reply_old(CMD_ACK, isOK, 0, 0, dataoutbuf, 16 * NumBlocksPerSector(sectorNo)); @@ -430,7 +430,7 @@ void MifareWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t *datain) { break; } - crypto1_destroy(pcs); + crypto1_deinit(pcs); if (DBGLEVEL >= 2) DbpString("WRITE BLOCK FINISHED"); @@ -847,7 +847,7 @@ void MifareAcquireEncryptedNonces(uint32_t arg0, uint32_t arg1, uint32_t flags, } LED_C_OFF(); - crypto1_destroy(pcs); + crypto1_deinit(pcs); LED_B_ON(); reply_old(CMD_ACK, isOK, cuid, num_nonces, buf, sizeof(buf)); LED_B_OFF(); @@ -1061,7 +1061,7 @@ void MifareNested(uint8_t blockNo, uint8_t keyType, uint8_t targetBlockNo, uint8 LED_C_OFF(); - crypto1_destroy(pcs); + crypto1_deinit(pcs); struct p { int16_t isOK; @@ -1510,7 +1510,7 @@ void MifareChkKeys_fast(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *da OUT: LEDsoff(); - crypto1_destroy(pcs); + crypto1_deinit(pcs); // All keys found, send to client, or last keychunk from client if (foundkeys == allkeys || lastchunk) { @@ -1660,7 +1660,7 @@ void MifareChkKeys(uint8_t *datain) { LEDsoff(); set_tracing(false); - crypto1_destroy(pcs); + crypto1_deinit(pcs); } //----------------------------------------------------------------------------- @@ -1780,7 +1780,7 @@ int MifareECardLoad(uint8_t numSectors, uint8_t keyType) { if (DBGLEVEL >= DBG_INFO) DbpString("Emulator fill sectors finished"); out: - crypto1_destroy(pcs); + crypto1_deinit(pcs); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); LEDsoff(); set_tracing(false); @@ -2110,7 +2110,7 @@ void MifareSetMod(uint8_t *datain) { break; } - crypto1_destroy(pcs); + crypto1_deinit(pcs); LED_B_ON(); reply_ng(CMD_HF_MIFARE_SETMOD, isOK, NULL, 0); diff --git a/armsrc/mifaresim.c b/armsrc/mifaresim.c index cdd8b556d..b055be6c7 100644 --- a/armsrc/mifaresim.c +++ b/armsrc/mifaresim.c @@ -571,7 +571,7 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain, uint1 EmSendPrecompiledCmd(&responses[ATQA]); // init crypto block - crypto1_destroy(pcs); + crypto1_deinit(pcs); cardAUTHKEY = AUTHKEYNONE; nonce = prng_successor(selTimer, 32); // prepare NT for nested authentication @@ -743,10 +743,10 @@ void Mifare1ksim(uint16_t flags, uint8_t exitAfterNReads, uint8_t *datain, uint1 if (DBGLEVEL >= DBG_EXTENDED) Dbprintf("[MFEMUL_WORK] KEY %c: %012" PRIx64, (cardAUTHKEY == 0) ? 'A' : 'B', emlGetKey(cardAUTHSC, cardAUTHKEY)); // first authentication - crypto1_destroy(pcs); + crypto1_deinit(pcs); // Load key into crypto - crypto1_create(pcs, emlGetKey(cardAUTHSC, cardAUTHKEY)); + crypto1_init(pcs, emlGetKey(cardAUTHSC, cardAUTHKEY)); if (!encrypted_data) { // Receive Cmd in clear txt diff --git a/armsrc/mifareutil.c b/armsrc/mifareutil.c index ca112f1f8..e36199bac 100644 --- a/armsrc/mifareutil.c +++ b/armsrc/mifareutil.c @@ -149,10 +149,10 @@ int mifare_classic_authex(struct Crypto1State *pcs, uint32_t uid, uint8_t blockN // ----------------------------- crypto1 create if (isNested) - crypto1_destroy(pcs); + crypto1_deinit(pcs); // Init cipher with key - crypto1_create(pcs, ui64Key); + crypto1_init(pcs, ui64Key); if (isNested == AUTH_NESTED) { // decrypt nt with help of new key diff --git a/common/crapto1/crapto1.c b/common/crapto1/crapto1.c index 66af2f41c..43e45c3db 100644 --- a/common/crapto1/crapto1.c +++ b/common/crapto1/crapto1.c @@ -124,6 +124,9 @@ recover(uint32_t *o_head, uint32_t *o_tail, uint32_t oks, return sl; } + + +#if !defined(__arm__) || defined(__linux__) || defined(_WIN32) || defined(__APPLE__) // bare metal ARM Proxmark lacks malloc()/free() /** lfsr_recovery * recover the state of the lfsr given 32 bits of the keystream * additionally you can use the in parameter to specify the value @@ -286,6 +289,7 @@ continue2: } return statelist; } +#endif /** lfsr_rollback_bit * Rollback the shift register in order to get previous states @@ -465,7 +469,7 @@ static struct Crypto1State *check_pfx_parity(uint32_t prefix, uint32_t rresp, ui return sl + good; } - +#if !defined(__arm__) || defined(__linux__) || defined(_WIN32) || defined(__APPLE__) // bare metal ARM Proxmark lacks malloc()/free() /** lfsr_common_prefix * Implentation of the common prefix attack. * Requires the 28 bit constant prefix used as reader nonce (pfx) @@ -504,3 +508,4 @@ out: free(even); return statelist; } +#endif diff --git a/common/crapto1/crapto1.h b/common/crapto1/crapto1.h index ab061e2e7..7fa16539e 100644 --- a/common/crapto1/crapto1.h +++ b/common/crapto1/crapto1.h @@ -25,23 +25,25 @@ #include struct Crypto1State {uint32_t odd, even;}; -#if defined(__arm__) && !defined(__linux__) && !defined(_WIN32) && !defined(__APPLE__) // bare metal ARM Proxmark lacks malloc()/free() -void crypto1_create(struct Crypto1State *s, uint64_t key); -#else +void crypto1_init(struct Crypto1State *s, uint64_t key); +void crypto1_deinit(struct Crypto1State *); +#if !defined(__arm__) || defined(__linux__) || defined(_WIN32) || defined(__APPLE__) // bare metal ARM Proxmark lacks malloc()/free() struct Crypto1State *crypto1_create(uint64_t key); -#endif void crypto1_destroy(struct Crypto1State *); +#endif void crypto1_get_lfsr(struct Crypto1State *, uint64_t *); uint8_t crypto1_bit(struct Crypto1State *, uint8_t, int); uint8_t crypto1_byte(struct Crypto1State *, uint8_t, int); uint32_t crypto1_word(struct Crypto1State *, uint32_t, int); uint32_t prng_successor(uint32_t x, uint32_t n); +#if !defined(__arm__) || defined(__linux__) || defined(_WIN32) || defined(__APPLE__) // bare metal ARM Proxmark lacks malloc()/free() struct Crypto1State *lfsr_recovery32(uint32_t ks2, uint32_t in); struct Crypto1State *lfsr_recovery64(uint32_t ks2, uint32_t ks3); -uint32_t *lfsr_prefix_ks(uint8_t ks[8], int isodd); struct Crypto1State * lfsr_common_prefix(uint32_t pfx, uint32_t rr, uint8_t ks[8], uint8_t par[8][8], uint32_t no_par); +#endif +uint32_t *lfsr_prefix_ks(uint8_t ks[8], int isodd); uint8_t lfsr_rollback_bit(struct Crypto1State *s, uint32_t in, int fb); diff --git a/common/crapto1/crypto1.c b/common/crapto1/crypto1.c index 9df30b356..bb501cd58 100644 --- a/common/crapto1/crypto1.c +++ b/common/crapto1/crypto1.c @@ -25,38 +25,37 @@ #define SWAPENDIAN(x)\ (x = (x >> 8 & 0xff00ff) | (x & 0xff00ff) << 8, x = x >> 16 | x << 16) -#if defined(__arm__) && !defined(__linux__) && !defined(_WIN32) && !defined(__APPLE__) // bare metal ARM Proxmark lacks malloc()/free() -void crypto1_create(struct Crypto1State *s, uint64_t key) { +void crypto1_init(struct Crypto1State *state, uint64_t key) { + state->odd = 0; + state->even = 0; + int i; - for (i = 47; s && i > 0; i -= 2) { - s->odd = s->odd << 1 | BIT(key, (i - 1) ^ 7); - s->even = s->even << 1 | BIT(key, i ^ 7); + for (i = 47; state && i > 0; i -= 2) { + state->odd = state->odd << 1 | BIT(key, (i - 1) ^ 7); + state->even = state->even << 1 | BIT(key, i ^ 7); } return; } -void crypto1_destroy(struct Crypto1State *state) { + +void crypto1_deinit(struct Crypto1State *state) { state->odd = 0; state->even = 0; } -#else + +#if !defined(__arm__) || defined(__linux__) || defined(_WIN32) || defined(__APPLE__) // bare metal ARM Proxmark lacks malloc()/free() struct Crypto1State *crypto1_create(uint64_t key) { - struct Crypto1State *s = malloc(sizeof(*s)); - if (!s) return NULL; - - s->odd = s->even = 0; - - int i; - for (i = 47; i > 0; i -= 2) { - s->odd = s->odd << 1 | BIT(key, (i - 1) ^ 7); - s->even = s->even << 1 | BIT(key, i ^ 7); - } - return s; + struct Crypto1State *state = malloc(sizeof(*state)); + if (!state) return NULL; + crypto1_init(state, key); + return state; } + void crypto1_destroy(struct Crypto1State *state) { free(state); } #endif + void crypto1_get_lfsr(struct Crypto1State *state, uint64_t *lfsr) { int i; for (*lfsr = 0, i = 23; i >= 0; --i) { From 6ba85af19943f12cb6dcd470df813f7993d967f1 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 18 Oct 2019 22:42:56 +0200 Subject: [PATCH 31/52] quick fix for felica, we can't leave repo broken so long... --- armsrc/felica.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/armsrc/felica.c b/armsrc/felica.c index ab22bc778..2b2b72201 100644 --- a/armsrc/felica.c +++ b/armsrc/felica.c @@ -756,6 +756,8 @@ void felica_sim_lite(uint64_t uid) { DbpString("Felica Lite-S sim end"); } +#define RES_SVC_LEN 11 + void felica_dump() { uint8_t ndef[8]; uint8_t poll[10] = { 0xb2, 0x4d, 0x06, FELICA_POLL_REQ, 0xff, 0xff, 0x00, 0x00, 0x09, 0x21}; // B24D0600FFFF00000921 @@ -774,9 +776,8 @@ void felica_dump() { } void felica_send_request_service(uint8_t *request_service) { - uint8_t len = sizeof(request_service) / sizeof((request_service)[0]); - Dbprintf("Send Service Request - len: d%", len); - TransmitFor18092_AsReader(request_service, len, NULL, 1, 0); + Dbprintf("Send Service Request - len: d%", RES_SVC_LEN); + TransmitFor18092_AsReader(request_service, RES_SVC_LEN, NULL, 1, 0); if (WaitForFelicaReply(512) && FelicaFrame.framebytes[3] == FELICA_REQSRV_ACK) { Dbprintf("Got Service Response!"); } @@ -793,7 +794,7 @@ uint8_t *felica_create_request_service_frame(uint8_t nodeNumber, uint8_t *idm) { nodeNumber = 1; } // Sync 2-Byte, Length 1-Byte, CMD 1-Byte, IDm 8-Byte, nodeNumber 1 <= n <= 32 1-Byte, Node Code List - uint8_t *request_service = BigBuf_malloc(sizeof(uint8_t) * 11); + uint8_t *request_service = BigBuf_malloc(sizeof(uint8_t) * RES_SVC_LEN); //{ 0xb2, 0x4d, 0x06, FELICA_REQSRV_REQ, 0xff, 0xff, 0x00, 0x00, 0x09, 0x21}; request_service[0] = 0xb2; //Sync request_service[1] = 0x4d; //Sync From f094e8fd508c02ec6cf53563e697a51b719c0379 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 13:13:00 +0200 Subject: [PATCH 32/52] Add - automatic try LF and HF search and if both fail, try lf read and save a trace file --- client/cmddata.c | 2 +- client/cmddata.h | 1 + client/cmdmain.c | 73 ++++++++++++++++++++++++++++++++++++++---------- 3 files changed, 61 insertions(+), 15 deletions(-) diff --git a/client/cmddata.c b/client/cmddata.c index 9bd18eb90..80c3bf076 100644 --- a/client/cmddata.c +++ b/client/cmddata.c @@ -1872,7 +1872,7 @@ int CmdPlot(const char *Cmd) { return PM3_SUCCESS; } -static int CmdSave(const char *Cmd) { +int CmdSave(const char *Cmd) { int len = 0; char filename[FILE_PATH_SIZE] = {0x00}; diff --git a/client/cmddata.h b/client/cmddata.h index a453fafb1..a4bba407c 100644 --- a/client/cmddata.h +++ b/client/cmddata.h @@ -53,6 +53,7 @@ int CmdHpf(const char *Cmd); int CmdLtrim(const char *Cmd); // used by cmd lf em4x, lf t55xx int CmdNorm(const char *Cmd); // used by cmd lf data (!) int CmdPlot(const char *Cmd); // used by cmd lf cotag +int CmdSave(const char *Cmd); // used by cmd auto int CmdTuneSamples(const char *Cmd); // used by cmd lf hw int ASKbiphaseDemod(const char *Cmd, bool verbose); // used by cmd lf em4x, lf fdx, lf guard, lf jablotron, lf nedap, lf t55xx int ASKDemod(const char *Cmd, bool verbose, bool emSearch, uint8_t askType); // used by cmd lf em4x, lf t55xx, lf viking diff --git a/client/cmdmain.c b/client/cmdmain.c index 5a2c91904..802d09fa9 100644 --- a/client/cmdmain.c +++ b/client/cmdmain.c @@ -18,6 +18,7 @@ #include #include #include // MingW +#include // calloc #include "comms.h" #include "cmdhf.h" @@ -38,20 +39,6 @@ static int CmdHelp(const char *Cmd); -int CmdRem(const char *Cmd) { - char buf[22] = {0}; - struct tm *ct, tm_buf; - time_t now = time(NULL); -#if defined(_WIN32) - ct = gmtime_s(&tm_buf, &now) == 0 ? &tm_buf : NULL; -#else - ct = gmtime_r(&now, &tm_buf); -#endif - strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%SZ", ct); // ISO8601 - PrintAndLogEx(NORMAL, "%s remark: %s", buf, Cmd); - return PM3_SUCCESS; -} - static int usage_msleep(void) { PrintAndLogEx(NORMAL, "Sleep for given amount of milliseconds"); PrintAndLogEx(NORMAL, ""); @@ -65,6 +52,63 @@ static int usage_msleep(void) { return PM3_SUCCESS; } +static int usage_auto(void) { + PrintAndLogEx(NORMAL, "Run LF SEARCH / HF SEARCH / DATA PLOT / DATA SAVE "); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Usage: auto "); + PrintAndLogEx(NORMAL, "Options:"); + PrintAndLogEx(NORMAL, " h This help"); + PrintAndLogEx(NORMAL, ""); + PrintAndLogEx(NORMAL, "Examples:"); + PrintAndLogEx(NORMAL, " auto"); + return PM3_SUCCESS; +} + +static void AppendDate(char *s, size_t slen, char *fmt) { + struct tm *ct, tm_buf; + time_t now = time(NULL); +#if defined(_WIN32) + ct = gmtime_s(&tm_buf, &now) == 0 ? &tm_buf : NULL; +#else + ct = gmtime_r(&now, &tm_buf); +#endif + if (fmt == NULL) + strftime(s, slen, "%Y-%m-%dT%H:%M:%SZ", ct); // ISO8601 + else + strftime(s, slen, fmt, ct); +} + +static int CmdAuto(const char *Cmd) { + char ctmp = tolower(param_getchar(Cmd, 0)); + if (ctmp == 'h') return usage_auto(); + + int ret = CmdLFfind(""); + if (ret == PM3_SUCCESS) + return ret; + + ret = CmdHFSearch(""); + if (ret == PM3_SUCCESS) + return ret; + + PrintAndLogEx(INFO, "Failed both LF / HF SEARCH,"); + PrintAndLogEx(INFO, "Trying 'lf read' and save a trace for you..."); + + CmdPlot(""); + lf_read(true, 40000); + char *fname = calloc(100, sizeof(uint8_t)); + AppendDate(fname, 100, "lf_unknown_%Y-%m-%d_%H:%M.pm3"); + CmdSave(fname); + free(fname); + return PM3_SUCCESS; +} + +int CmdRem(const char *Cmd) { + char buf[22] = {0}; + AppendDate(buf, sizeof(buf), NULL); + PrintAndLogEx(NORMAL, "%s remark: %s", buf, Cmd); + return PM3_SUCCESS; +} + static int CmdMsleep(const char *Cmd) { uint32_t ms = 0; char ctmp = tolower(param_getchar(Cmd, 0)); @@ -90,6 +134,7 @@ static int CmdRev(const char *Cmd) { static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help. Use ' help' for details of a particular command."}, + {"auto", CmdAuto, IfPm3Present, "Automated detection process for unknown tags"}, {"analyse", CmdAnalyse, AlwaysAvailable, "{ Analyse utils... }"}, {"data", CmdData, AlwaysAvailable, "{ Plot window / data buffer manipulation... }"}, {"emv", CmdEMV, AlwaysAvailable, "{ EMV ISO-14443 / ISO-7816... }"}, From 1694eaef0ab57112b02a9f7946833b91b31cbf74 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 15:38:53 +0200 Subject: [PATCH 33/52] detect iClass vs PicoPass --- client/cmdhficlass.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index bb20e5b3a..966762cb3 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -2806,16 +2806,18 @@ int readIclass(bool loop, bool verbose) { FLAG_ICLASS_READER_ONE_TRY; // loop in client not device - else on windows have a communication error - PacketResponseNG resp; while (!kbd_enter_pressed()) { clearCommandBuffer(); SendCommandMIX(CMD_HF_ICLASS_READER, flags, 0, 0, NULL, 0); + PacketResponseNG resp; + if (WaitForResponseTimeout(CMD_ACK, &resp, 4500)) { + uint8_t readStatus = resp.oldarg[0] & 0xff; uint8_t *data = resp.data.asBytes; - if (verbose) PrintAndLogEx(INFO, "Readstatus:%02x", readStatus); +// if (verbose) PrintAndLogEx(INFO, "Readstatus:%02x", readStatus); // no tag found or button pressed if ((readStatus == 0 && !loop) || readStatus == 0xFF) { @@ -2837,18 +2839,27 @@ int readIclass(bool loop, bool verbose) { printIclassDumpInfo(data); } + // if CSN ends with FF12E0, it's inside HID CSN range. + bool isHidRange = (memcmp((uint8_t *)(data + 5), "\xFF\x12\xE0", 3) == 0); + if (readStatus & FLAG_ICLASS_READER_AIA) { bool legacy = (memcmp((uint8_t *)(data + 8 * 5), "\xff\xff\xff\xff\xff\xff\xff\xff", 8) == 0); bool se_enabled = (memcmp((uint8_t *)(data + 8 * 5), "\xff\xff\xff\x00\x06\xff\xff\xff", 8) == 0); PrintAndLogEx(NORMAL, " App IA: %s", sprint_hex(data + 8 * 5, 8)); - if (legacy) - PrintAndLogEx(SUCCESS, " : Possible iClass (legacy credential tag)"); - else if (se_enabled) - PrintAndLogEx(SUCCESS, " : Possible iClass (SE credential tag)"); - else - PrintAndLogEx(WARNING, " : Possible iClass (NOT legacy tag)"); + + if (legacy && isHidRange) + PrintAndLogEx(SUCCESS, " : Possible iClass - legacy credential tag"); + + if (se_enabled & isHidRange) + PrintAndLogEx(SUCCESS, " : Possible iClass - SE credential tag"); + + if (isHidRange) { + PrintAndLogEx(SUCCESS, " : Tag is "_YELLOW_("iClass")", CSN is in HID range"); + } else { + PrintAndLogEx(SUCCESS, " : Tag is "_YELLOW_("PicoPass")", CSN is not in HID range"); + } } if (tagFound && !loop) { From 21f93ef12ae10d9231594b6def034fdab25205c8 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 15:57:16 -0400 Subject: [PATCH 34/52] shadowing --- armsrc/Standalone/hf_bog.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/armsrc/Standalone/hf_bog.c b/armsrc/Standalone/hf_bog.c index dc5c2e071..5e84d4cc1 100644 --- a/armsrc/Standalone/hf_bog.c +++ b/armsrc/Standalone/hf_bog.c @@ -217,12 +217,12 @@ void RAMFUNC SniffAndStore(uint8_t param) { if (DBGLEVEL > 1) Dbprintf("[!] Authentication attempts = %u", auth_attempts); size_t size = 4 * auth_attempts; - uint8_t *data = BigBuf_malloc(size); + uint8_t *buf = BigBuf_malloc(size); if (!exists_in_spiffs((char *)HF_BOG_LOGFILE)) { - rdv40_spiffs_write((char *)HF_BOG_LOGFILE, (uint8_t *)data, size, RDV40_SPIFFS_SAFETY_SAFE); + rdv40_spiffs_write((char *)HF_BOG_LOGFILE, buf, size, RDV40_SPIFFS_SAFETY_SAFE); } else { - rdv40_spiffs_append((char *)HF_BOG_LOGFILE, (uint8_t *)data, size, RDV40_SPIFFS_SAFETY_SAFE); + rdv40_spiffs_append((char *)HF_BOG_LOGFILE, buf, size, RDV40_SPIFFS_SAFETY_SAFE); } } From 3620236725b65d1281734249a288378ec62f259e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 16:04:16 -0400 Subject: [PATCH 35/52] shadow --- armsrc/Standalone/lf_hidbrute.c | 2 +- armsrc/Standalone/lf_proxbrute.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/armsrc/Standalone/lf_hidbrute.c b/armsrc/Standalone/lf_hidbrute.c index 48efcf119..7cae49a5b 100644 --- a/armsrc/Standalone/lf_hidbrute.c +++ b/armsrc/Standalone/lf_hidbrute.c @@ -65,7 +65,7 @@ void RunMod() { continue; // Button was held for a second, begin recording - if (button_pressed > 0 && cardRead == 0) { + if (cardRead == 0) { LEDsoff(); LED(selected + 1, 0); LED(LED_D, 0); diff --git a/armsrc/Standalone/lf_proxbrute.c b/armsrc/Standalone/lf_proxbrute.c index 25d62cc2a..3cdfa6819 100644 --- a/armsrc/Standalone/lf_proxbrute.c +++ b/armsrc/Standalone/lf_proxbrute.c @@ -96,7 +96,7 @@ void RunMod() { if (data_available()) break; // Was our button held down or pressed? - int button_pressed = BUTTON_HELD(280); + button_pressed = BUTTON_HELD(280); if (button_pressed != BUTTON_HOLD) break; Dbprintf("[=] trying Facility = %08x ID %08x", high, i); From 5c0d6b1c9cfa2de95a69960770fd268ce157f733 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 16:06:27 -0400 Subject: [PATCH 36/52] no need --- armsrc/appmain.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/armsrc/appmain.c b/armsrc/appmain.c index 35838ffab..84589ff00 100644 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@ -1711,8 +1711,10 @@ static void PacketReceived(PacketCommandNG *packet) { strncpy((char *)src, token, sizeof(src) - 1); token = strtok(NULL, ","); 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); + if (DBGLEVEL > 1) { + Dbprintf("> Filename received as source for spiffs RENAME : %s", src); + 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; @@ -1727,8 +1729,10 @@ static void PacketReceived(PacketCommandNG *packet) { strncpy((char *)src, token, sizeof(src) - 1); token = strtok(NULL, ","); 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); + if (DBGLEVEL > 1) { + Dbprintf("> Filename received as source for spiffs COPY : %s", src); + 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 29468ee8173b90b7befaf6fb624652762b8785f0 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 16:12:33 -0400 Subject: [PATCH 37/52] fix: wrong mess len --- armsrc/felica.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/armsrc/felica.c b/armsrc/felica.c index 2b2b72201..bbaf21e4c 100644 --- a/armsrc/felica.c +++ b/armsrc/felica.c @@ -615,7 +615,7 @@ void felica_sniff(uint32_t samplesToSkip, uint32_t triggersToSkip) { //crc NOT checked if (FelicaFrame.state == STATE_FULL) { endframe = GetCountSspClk(); - //*dest = FelicaFrame.crc_ok; //kind of wasteful + // *dest = FelicaFrame.crc_ok; //kind of wasteful dest++; for (int i = 0; i < FelicaFrame.len; i++) { *dest = FelicaFrame.framebytes[i]; @@ -756,7 +756,7 @@ void felica_sim_lite(uint64_t uid) { DbpString("Felica Lite-S sim end"); } -#define RES_SVC_LEN 11 +#define RES_SVC_LEN 11 + 3 void felica_dump() { uint8_t ndef[8]; @@ -806,10 +806,10 @@ uint8_t *felica_create_request_service_frame(uint8_t nodeNumber, uint8_t *idm) { request_service[7] = idm[3]; request_service[8] = idm[4]; request_service[9] = idm[5]; - request_service[9] = idm[6]; - request_service[9] = idm[7]; - request_service[10] = nodeNumber; // Node we like to ask for services - request_service[11] = 0x00; // Node Code List // TODO FIND OUT WHAT NEEDS TO BE IN HERE + request_service[10] = idm[6]; + request_service[11] = idm[7]; + request_service[12] = nodeNumber; // Node we like to ask for services + request_service[13] = 0x00; // Node Code List // TODO FIND OUT WHAT NEEDS TO BE IN HERE return request_service; } From c12bff8cdc6324eef85a917fc40bc843ef5eb368 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 16:21:08 -0400 Subject: [PATCH 38/52] fix limit sizes --- armsrc/lfops.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/armsrc/lfops.c b/armsrc/lfops.c index 042e5edbc..a298af4a9 100644 --- a/armsrc/lfops.c +++ b/armsrc/lfops.c @@ -1235,8 +1235,8 @@ void CmdAWIDdemodFSK(int findone, uint32_t *high, uint32_t *low, int ledcontrol) uint8_t *dest = BigBuf_get_addr(); - //big enough to catch 2 sequences of largest format - size_t size = 12800; //50 * 128 * 2; + //big enough to catch 2 sequences of largest format but don't exeed whats available in bigbuff. + size_t size = MIN(12800, BigBuf_max_traceLen()); //50 * 128 * 2; int dummyIdx = 0; @@ -1544,13 +1544,12 @@ void T55xxWriteBit(uint8_t bit, uint8_t downlink_idx) { // max_len - how many bytes can the bit_array hold (ensure no buffer overflow) // returns "Next" bit offset / bits stored (for next store) uint8_t T55xx_SetBits(uint8_t *bs, uint8_t start_offset, uint32_t data, uint8_t num_bits, uint8_t max_len) { - int8_t offset; int8_t next_offset = start_offset; // Check if data will fit. if ((start_offset + num_bits) <= (max_len * 8)) { // Loop through the data and store - for (offset = (num_bits - 1); offset >= 0; offset--) { + for (int8_t offset = (num_bits - 1); offset >= 0; offset--) { if ((data >> offset) & 1) bs[BITSTREAM_BYTE(next_offset)] |= (1 << BITSTREAM_BIT(next_offset)); // Set 1 From 768bf223118452f050a690b1c54e0a344974f97e Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 16:21:19 -0400 Subject: [PATCH 39/52] rename --- armsrc/frozen.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/armsrc/frozen.h b/armsrc/frozen.h index beb6c5f44..a81522a64 100644 --- a/armsrc/frozen.h +++ b/armsrc/frozen.h @@ -201,8 +201,8 @@ int json_printf_array(struct json_out *, va_list *ap); * Return number of elements successfully scanned & converted. * Negative number means scan error. */ -int json_scanf(const char *str, int str_len, const char *fmt, ...); -int json_vscanf(const char *str, int str_len, const char *fmt, va_list ap); +int json_scanf(const char *str, int len, const char *fmt, ...); +int json_vscanf(const char *str, int len, const char *fmt, va_list ap); /* json_scanf's %M handler */ typedef void (*json_scanner_t)(const char *str, int len, void *user_data); @@ -234,7 +234,7 @@ int json_escape(struct json_out *out, const char *str, size_t str_len); * Read the whole file in memory. * Return malloc-ed file content, or NULL on error. The caller must free(). */ -char *json_fread(const char *file_name); +char *json_fread(const char *path); /* * Update given JSON string `s,len` by changing the value at given `json_path`. From 729bf524371f7bc678ab77993c8959fc1c6d8a1b Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 16:25:51 -0400 Subject: [PATCH 40/52] fix: no crypto auth in MFU --- armsrc/mifareutil.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/armsrc/mifareutil.c b/armsrc/mifareutil.c index e36199bac..3ccf25737 100644 --- a/armsrc/mifareutil.c +++ b/armsrc/mifareutil.c @@ -276,7 +276,7 @@ int mifare_ultra_auth(uint8_t *keybytes) { uint8_t respPar[3] = {0, 0, 0}; // REQUEST AUTHENTICATION - len = mifare_sendcmd_short(NULL, 1, MIFARE_ULC_AUTH_1, 0x00, resp, respPar, NULL); + len = mifare_sendcmd_short(NULL, CRYPT_NONE, MIFARE_ULC_AUTH_1, 0x00, resp, respPar, NULL); if (len != 11) { if (DBGLEVEL >= DBG_ERROR) Dbprintf("Cmd Error: %02x", resp[0]); return 0; @@ -351,7 +351,7 @@ int mifare_ultra_readblockEx(uint8_t blockNo, uint8_t *blockData) { uint8_t receivedAnswer[MAX_FRAME_SIZE] = {0x00}; uint8_t receivedAnswerPar[MAX_PARITY_SIZE] = {0x00}; - len = mifare_sendcmd_short(NULL, 1, ISO14443A_CMD_READBLOCK, blockNo, receivedAnswer, receivedAnswerPar, NULL); + len = mifare_sendcmd_short(NULL, CRYPT_NONE, ISO14443A_CMD_READBLOCK, blockNo, receivedAnswer, receivedAnswerPar, NULL); if (len == 1) { if (DBGLEVEL >= DBG_ERROR) Dbprintf("Cmd Error: %02x", receivedAnswer[0]); return 1; @@ -444,7 +444,7 @@ int mifare_ultra_writeblock_compat(uint8_t blockNo, uint8_t *blockData) { uint8_t receivedAnswer[MAX_FRAME_SIZE]; uint8_t receivedAnswerPar[MAX_PARITY_SIZE]; - len = mifare_sendcmd_short(NULL, true, ISO14443A_CMD_WRITEBLOCK, blockNo, receivedAnswer, receivedAnswerPar, NULL); + len = mifare_sendcmd_short(NULL, CRYPT_NONE, ISO14443A_CMD_WRITEBLOCK, blockNo, receivedAnswer, receivedAnswerPar, NULL); if ((len != 1) || (receivedAnswer[0] != 0x0A)) { // 0x0a - ACK if (DBGLEVEL >= DBG_ERROR) From 0a978d8f8c1eb001843be578376923965b09f252 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 16:31:10 -0400 Subject: [PATCH 41/52] fix: clarity --- armsrc/thinfilm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/armsrc/thinfilm.c b/armsrc/thinfilm.c index bd8e696fb..46fa5a920 100644 --- a/armsrc/thinfilm.c +++ b/armsrc/thinfilm.c @@ -63,7 +63,7 @@ static void CodeThinfilmAsTag(const uint8_t *cmd, uint16_t len) { for (uint16_t i = 0; i < len; i++) { uint8_t b = cmd[i]; for (uint8_t j = 0; j < 8; j++) { - ToSend[++ToSendMax] = b & 0x80 ? SEC_D : SEC_E; + ToSend[++ToSendMax] = (b & 0x80) ? SEC_D : SEC_E; b <<= 1; } } From c9a390a480d68a8c203f80cc59123cecee1c361a Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 16:35:21 -0400 Subject: [PATCH 42/52] fix --- client/wiegand_formats.c | 6 +++--- client/wiegand_formats.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/wiegand_formats.c b/client/wiegand_formats.c index 4e2541cbd..1e08874ef 100644 --- a/client/wiegand_formats.c +++ b/client/wiegand_formats.c @@ -672,16 +672,16 @@ void HIDDisplayUnpackedCard(wiegand_card_t *card, const cardformat_t format) { char s[80] = {0}; if (format.Fields.hasFacilityCode) - snprintf(s, sizeof(s), "FC: %d", card->FacilityCode); + snprintf(s, sizeof(s), "FC: %u", card->FacilityCode); if (format.Fields.hasCardNumber) snprintf(s + strlen(s), sizeof(s) - strlen(s), " CN: %" PRIu64, card->CardNumber); if (format.Fields.hasIssueLevel) - snprintf(s + strlen(s), sizeof(s) - strlen(s), " Issue %d", card->IssueLevel); + snprintf(s + strlen(s), sizeof(s) - strlen(s), " Issue %u", card->IssueLevel); if (format.Fields.hasOEMCode) - snprintf(s + strlen(s), sizeof(s) - strlen(s), " OEM: %d", card->OEM); + snprintf(s + strlen(s), sizeof(s) - strlen(s), " OEM: %u", card->OEM); if (format.Fields.hasParity) snprintf(s + strlen(s), sizeof(s) - strlen(s), " parity: %s", card->ParityValid ? "valid" : "invalid"); diff --git a/client/wiegand_formats.h b/client/wiegand_formats.h index e3aca4b9c..b75f5e491 100644 --- a/client/wiegand_formats.h +++ b/client/wiegand_formats.h @@ -43,6 +43,6 @@ void HIDListFormats(); int HIDFindCardFormat(const char *format); cardformat_t HIDGetCardFormat(int idx); bool HIDPack(int FormatIndex, wiegand_card_t *card, wiegand_message_t *packed); -bool HIDTryUnpack(wiegand_message_t *packed, bool ignoreParity); +bool HIDTryUnpack(wiegand_message_t *packed, bool ignore_parity); #endif From 4ab474610472b6725fd754951dcbfd3269749e31 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 16:39:28 -0400 Subject: [PATCH 43/52] fix: bad bool --- client/cmdhficlass.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/client/cmdhficlass.c b/client/cmdhficlass.c index 966762cb3..b57996af1 100644 --- a/client/cmdhficlass.c +++ b/client/cmdhficlass.c @@ -2330,7 +2330,7 @@ static int CmdHFiClassCheckKeys(const char *Cmd) { uint8_t found_offset = 0; uint32_t key_offset = 0; // main keychunk loop - for (uint32_t key_offset = 0; key_offset < keycount; key_offset += chunksize) { + for (key_offset = 0; key_offset < keycount; key_offset += chunksize) { uint64_t t2 = msclock(); uint8_t timeout = 0; @@ -2849,11 +2849,13 @@ int readIclass(bool loop, bool verbose) { PrintAndLogEx(NORMAL, " App IA: %s", sprint_hex(data + 8 * 5, 8)); - if (legacy && isHidRange) - PrintAndLogEx(SUCCESS, " : Possible iClass - legacy credential tag"); + if (isHidRange) { + if (legacy) + PrintAndLogEx(SUCCESS, " : Possible iClass - legacy credential tag"); - if (se_enabled & isHidRange) - PrintAndLogEx(SUCCESS, " : Possible iClass - SE credential tag"); + if (se_enabled) + PrintAndLogEx(SUCCESS, " : Possible iClass - SE credential tag"); + } if (isHidRange) { PrintAndLogEx(SUCCESS, " : Tag is "_YELLOW_("iClass")", CSN is in HID range"); From e5df52fb8695dd58b8029fa5d337cd91ec74bec6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 16:42:37 -0400 Subject: [PATCH 44/52] fix: bools --- client/cmdlft55xx.c | 4 ++-- client/cmdlft55xx.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/cmdlft55xx.c b/client/cmdlft55xx.c index 541a67fe4..9175bdaf5 100644 --- a/client/cmdlft55xx.c +++ b/client/cmdlft55xx.c @@ -1083,7 +1083,7 @@ static int CmdT55xxDetect(const char *Cmd) { if (try_all_dl_modes) { for (uint8_t m = downlink_mode; m < 4; m++) { - if (AcquireData(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. @@ -1111,7 +1111,7 @@ static int CmdT55xxDetect(const char *Cmd) { } } - if (!found & usepwd) + if (!found && usepwd) try_with_pwd = !try_with_pwd; // toggle so we loop back if not found and try with pwd if (found) diff --git a/client/cmdlft55xx.h b/client/cmdlft55xx.h index 4f96006b5..71fda2a72 100644 --- a/client/cmdlft55xx.h +++ b/client/cmdlft55xx.h @@ -148,7 +148,7 @@ char *GetQ5ModulationStr(uint32_t id); char *GetModulationStr(uint32_t id, bool xmode); char *GetModelStrFromCID(uint32_t cid); char *GetSelectedModulationStr(uint8_t id); -char *GetDownlinkModeStr(uint8_t dlmode); +char *GetDownlinkModeStr(uint8_t downlink_mode); void printT5xxHeader(uint8_t page); void printT55xxBlock(uint8_t blockNum, bool page1); int printConfiguration(t55xx_conf_block_t b); From b0e01f9236b9c4fa20242f8869bc984b7efc1790 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 16:46:11 -0400 Subject: [PATCH 45/52] fix: double free --- client/emv/emvcore.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/emv/emvcore.c b/client/emv/emvcore.c index 8c9b2ea1e..c18521b6c 100644 --- a/client/emv/emvcore.c +++ b/client/emv/emvcore.c @@ -1089,7 +1089,7 @@ int RecoveryCertificates(struct tlvdb *tlvRoot, json_t *root) { char *icc_pk_c = emv_pk_dump_pk(icc_pk); JsonSaveStr(root, "$.ApplicationData.ICCPublicKeyDec", icc_pk_c); JsonSaveBufAsHex(root, "$.ApplicationData.ICCPublicKeyModulus", icc_pk->modulus, icc_pk->mlen); - free(issuer_pk_c); + free(icc_pk_c); return 0; } From 0dd9e66bcf42e3f29a48c249ed6d2ac503045060 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sat, 19 Oct 2019 23:40:34 +0200 Subject: [PATCH 46/52] text --- armsrc/felica.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/armsrc/felica.c b/armsrc/felica.c index bbaf21e4c..4d9712a0d 100644 --- a/armsrc/felica.c +++ b/armsrc/felica.c @@ -527,7 +527,7 @@ void felica_sendraw(PacketCommandNG *c) { arg0 = felica_select_card(&card); reply_mix(CMD_ACK, arg0, sizeof(card.uid), 0, &card, sizeof(felica_card_select_t)); if (arg0 > 0) { - Dbprintf("Error: Failed selecting card! "); + if (DBGLEVEL >= DBG_DEBUG) Dbprintf("Error: Failed selecting card! "); felica_reset_frame_mode(); return; } @@ -764,6 +764,8 @@ void felica_dump() { iso18092_setup(FPGA_HF_ISO18092_FLAG_READER | FPGA_HF_ISO18092_FLAG_NOMOD); TransmitFor18092_AsReader(poll, 10, NULL, 1, 0); + + // iceman, no exit path in this loop while (!BUTTON_PRESS() && !data_available()) { WDT_HIT(); TransmitFor18092_AsReader(poll, 10, NULL, 1, 0); @@ -773,6 +775,7 @@ void felica_dump() { felica_send_request_service(request_service); } } + } void felica_send_request_service(uint8_t *request_service) { From 29573f1ac5cfdef4468d18e397ceab4230a0dfda Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 20 Oct 2019 06:23:57 -0400 Subject: [PATCH 47/52] fix --- client/mifare/mad.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/mifare/mad.c b/client/mifare/mad.c index 5cf3e1852..fe41ac032 100644 --- a/client/mifare/mad.c +++ b/client/mifare/mad.c @@ -181,7 +181,7 @@ int MADCheck(uint8_t *sector0, uint8_t *sector10, bool verbose, bool *haveMAD2) if (!res) res = res2; - if (verbose & !res2) + if (verbose && !res2) PrintAndLogEx(NORMAL, "CRC8-MAD2 OK."); } From 7b2b49ff734dd161b1073a35d472ae82bc0deef3 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 20 Oct 2019 06:24:46 -0400 Subject: [PATCH 48/52] fix: sanity check --- client/cmdhfmfhard.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/client/cmdhfmfhard.c b/client/cmdhfmfhard.c index ab3e1a3d0..d83c60047 100644 --- a/client/cmdhfmfhard.c +++ b/client/cmdhfmfhard.c @@ -1052,6 +1052,11 @@ static void estimate_sum_a8(void) { static int read_nonce_file(char *filename) { + + if (filename == NULL) { + PrintAndLogEx(WARNING, "Filename is NULL"); + return 1; + } FILE *fnonces = NULL; char progress_text[80] = ""; uint8_t read_buf[9]; @@ -1061,6 +1066,7 @@ static int read_nonce_file(char *filename) { PrintAndLogEx(WARNING, "Could not open file %s", filename); return 1; } + snprintf(progress_text, 80, "Reading nonces from file %s...", filename); hardnested_print_progress(0, progress_text, (float)(1LL << 47), 0); size_t bytes_read = fread(read_buf, 1, 6, fnonces); @@ -1766,7 +1772,7 @@ static void add_matching_states(statelist_t *candidates, uint8_t part_sum_a0, ui } static statelist_t *add_more_candidates(void) { - statelist_t *new_candidates = candidates; + statelist_t *new_candidates; if (candidates == NULL) { candidates = (statelist_t *)malloc(sizeof(statelist_t)); new_candidates = candidates; From 6091894b72b226bcd3653d42f472d2c9da0ff731 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 20 Oct 2019 06:25:29 -0400 Subject: [PATCH 49/52] fix: unshadow --- client/hardnested/hardnested_bruteforce.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/client/hardnested/hardnested_bruteforce.c b/client/hardnested/hardnested_bruteforce.c index 4af190d71..682257415 100644 --- a/client/hardnested/hardnested_bruteforce.c +++ b/client/hardnested/hardnested_bruteforce.c @@ -250,16 +250,16 @@ void prepare_bf_test_nonces(noncelist_t *nonces, uint8_t best_first_byte) { uint32_t bf_test_nonce_temp[4]; uint8_t bf_test_nonce_par_temp[4]; uint8_t bf_test_nonce_2nd_byte_temp[4]; - for (uint8_t i = 0; i < 4 && i < nonces_to_bruteforce; i++) { - bf_test_nonce_temp[i] = bf_test_nonce[best_4[i]]; + for (uint8_t j = 0; j < 4 && j < nonces_to_bruteforce; j++) { + bf_test_nonce_temp[j] = bf_test_nonce[best_4[j]]; - bf_test_nonce_par_temp[i] = bf_test_nonce_par[best_4[i]]; - bf_test_nonce_2nd_byte_temp[i] = bf_test_nonce_2nd_byte[best_4[i]]; + bf_test_nonce_par_temp[j] = bf_test_nonce_par[best_4[j]]; + bf_test_nonce_2nd_byte_temp[j] = bf_test_nonce_2nd_byte[best_4[j]]; } - for (uint8_t i = 0; i < 4 && i < nonces_to_bruteforce; i++) { - bf_test_nonce[i] = bf_test_nonce_temp[i]; - bf_test_nonce_par[i] = bf_test_nonce_par_temp[i]; - bf_test_nonce_2nd_byte[i] = bf_test_nonce_2nd_byte_temp[i]; + for (uint8_t j = 0; j < 4 && j < nonces_to_bruteforce; j++) { + bf_test_nonce[j] = bf_test_nonce_temp[j]; + bf_test_nonce_par[j] = bf_test_nonce_par_temp[j]; + bf_test_nonce_2nd_byte[j] = bf_test_nonce_2nd_byte_temp[j]; } } From 2ba8d07e1bc752757676b663af6093b4aa3beeff Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 20 Oct 2019 06:28:49 -0400 Subject: [PATCH 50/52] fix: unshadow --- client/fido/cbortools.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/fido/cbortools.c b/client/fido/cbortools.c index b0d309db7..911244806 100644 --- a/client/fido/cbortools.c +++ b/client/fido/cbortools.c @@ -75,9 +75,9 @@ static CborError dumpelm(CborValue *it, bool *got_next, int nestingLevel) { } case CborSimpleType: { - uint8_t type; - cbor_value_get_simple_type(it, &type); - printf("simple(%u)", type); + uint8_t t; + cbor_value_get_simple_type(it, &t); + printf("simple(%u)", t); break; } @@ -206,7 +206,7 @@ int TinyCborPrintFIDOPackage(uint8_t cmdCode, bool isResponse, uint8_t *data, si if (err) { fprintf(stderr, - "CBOR parsing failure at offset %" PRId32 " : %s\n", + "CBOR parsing failure at offset %" PRIu32 " : %s\n", (uint32_t)(cb.ptr - data), cbor_error_string(err) ); From 339f499a255c9bfd8b6446ab32e4989a7099fd79 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 20 Oct 2019 06:30:09 -0400 Subject: [PATCH 51/52] fix: unshadow --- client/emv/emvjson.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/emv/emvjson.c b/client/emv/emvjson.c index 4a3ef9299..0d3e9bb29 100644 --- a/client/emv/emvjson.c +++ b/client/emv/emvjson.c @@ -1,4 +1,4 @@ -//----------------------------------------------------------------------------- +://----------------------------------------------------------------------------- // Copyright (C) 2018 Merlok // // This code is licensed to you under the terms of the GNU GPL, version 2 or, @@ -372,8 +372,8 @@ bool ParamLoadFromJson(struct tlvdb *tlv) { return false; } tlv_tag_t tag = 0; - for (int i = 0; i < buflen; i++) { - tag = (tag << 8) | buf[i]; + for (int j = 0; j < buflen; j++) { + tag = (tag << 8) | buf[j]; } if (!HexToBuffer("TLV Error value:", tlvValue, buf, sizeof(buf) - 1, &buflen)) { From 2f573ebfb3412a341c53a6e01450b155f4c95ddb Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 20 Oct 2019 06:31:49 -0400 Subject: [PATCH 52/52] fix: unshadow --- client/cmdwiegand.c | 10 +++++----- client/emv/emvjson.c | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/client/cmdwiegand.c b/client/cmdwiegand.c index 8c1b5e8cb..3c939261f 100644 --- a/client/cmdwiegand.c +++ b/client/cmdwiegand.c @@ -150,11 +150,11 @@ int CmdWiegandDecode(const char *Cmd) { bool errors = false; char cmdp = 0; while (param_getchar(Cmd, cmdp) != 0x00 && !errors) { - uint32_t strlen = param_getlength(Cmd, cmdp); - strlen++; // null termin - if (strlen > 2) { - char *s = calloc(strlen, sizeof(uint8_t)); - param_getstr(Cmd, cmdp, s, strlen); + uint32_t slen = param_getlength(Cmd, cmdp); + slen++; // null termin + if (slen > 2) { + char *s = calloc(slen, sizeof(uint8_t)); + param_getstr(Cmd, cmdp, s, slen); hexstring_to_u96(&top, &mid, &bot, s); free(s); gothex = true; diff --git a/client/emv/emvjson.c b/client/emv/emvjson.c index 0d3e9bb29..75b2e87bf 100644 --- a/client/emv/emvjson.c +++ b/client/emv/emvjson.c @@ -1,4 +1,4 @@ -://----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- // Copyright (C) 2018 Merlok // // This code is licensed to you under the terms of the GNU GPL, version 2 or,