From d95929e710879c20279c7b715c4d5b457e6f722a Mon Sep 17 00:00:00 2001 From: jpx13 Date: Fri, 23 Aug 2024 11:55:31 +0200 Subject: [PATCH 01/14] Uploaded 4.3 version with TT-GO 1.14 display Trial to adapt the ESP32 miner to the Lilygo TT-GO 1.14 WIP Seems to crash after a while --- ESP_Code4.3/ESP_Code/Counter.h | 53 ++ ESP_Code4.3/ESP_Code/DSHA1.h | 201 ++++++++ ESP_Code4.3/ESP_Code/Dashboard.h | 151 ++++++ ESP_Code4.3/ESP_Code/DisplayHal.h | 492 ++++++++++++++++++ ESP_Code4.3/ESP_Code/ESP_Code.ino | 817 ++++++++++++++++++++++++++++++ ESP_Code4.3/ESP_Code/MiningJob.h | 423 ++++++++++++++++ ESP_Code4.3/ESP_Code/Settings.h | 237 +++++++++ 7 files changed, 2374 insertions(+) create mode 100644 ESP_Code4.3/ESP_Code/Counter.h create mode 100644 ESP_Code4.3/ESP_Code/DSHA1.h create mode 100644 ESP_Code4.3/ESP_Code/Dashboard.h create mode 100644 ESP_Code4.3/ESP_Code/DisplayHal.h create mode 100644 ESP_Code4.3/ESP_Code/ESP_Code.ino create mode 100644 ESP_Code4.3/ESP_Code/MiningJob.h create mode 100644 ESP_Code4.3/ESP_Code/Settings.h diff --git a/ESP_Code4.3/ESP_Code/Counter.h b/ESP_Code4.3/ESP_Code/Counter.h new file mode 100644 index 00000000..58a4a0e6 --- /dev/null +++ b/ESP_Code4.3/ESP_Code/Counter.h @@ -0,0 +1,53 @@ +#ifndef _COUNTER_H_ +#define _COUNTER_H_ + +#include +#include + +template +class Counter { + +public: + Counter() { reset(); } + + void reset() { + memset(buffer, '0', max_digits); + buffer[max_digits] = '\0'; + val = 0; + len = 1; + } + + inline Counter &operator++() { + inc_string(buffer + max_digits - 1); + ++val; + return *this; + } + + inline operator unsigned int() const { return val; } + inline const char *c_str() const { return buffer + max_digits - len; } + inline size_t strlen() const { return len; } + +protected: + inline void inc_string(char *c) { + // In theory, the line below should be uncommented to avoid writing outside the buffer. In practice however, + // with max_digits set to 10 or more, we can fit all possible unsigned 32-bit integers in the buffer. + // The check is skipped to gain a small extra speed improvement. + // if (c >= buffer) return; + + if (*c < '9') { + *c += 1; + } + else { + *c = '0'; + inc_string(c - 1); + len = max(max_digits - (c - buffer) + 1, len); + } + } + +protected: + char buffer[max_digits + 1]; + unsigned int val; + size_t len; +}; + +#endif diff --git a/ESP_Code4.3/ESP_Code/DSHA1.h b/ESP_Code4.3/ESP_Code/DSHA1.h new file mode 100644 index 00000000..58dc41b2 --- /dev/null +++ b/ESP_Code4.3/ESP_Code/DSHA1.h @@ -0,0 +1,201 @@ +#ifndef DSHA1_H +#define DSHA1_H + +#include + +class DSHA1 { + +public: + static const size_t OUTPUT_SIZE = 20; + + DSHA1() { + initialize(s); + } + + DSHA1 &write(const unsigned char *data, size_t len) { + size_t bufsize = bytes % 64; + if (bufsize && bufsize + len >= 64) { + memcpy(buf + bufsize, data, 64 - bufsize); + bytes += 64 - bufsize; + data += 64 - bufsize; + transform(s, buf); + bufsize = 0; + } + while (len >= 64) { + transform(s, data); + bytes += 64; + data += 64; + len -= 64; + } + if (len > 0) { + memcpy(buf + bufsize, data, len); + bytes += len; + } + return *this; + } + + void finalize(unsigned char hash[OUTPUT_SIZE]) { + const unsigned char pad[64] = {0x80}; + unsigned char sizedesc[8]; + writeBE64(sizedesc, bytes << 3); + write(pad, 1 + ((119 - (bytes % 64)) % 64)); + write(sizedesc, 8); + writeBE32(hash, s[0]); + writeBE32(hash + 4, s[1]); + writeBE32(hash + 8, s[2]); + writeBE32(hash + 12, s[3]); + writeBE32(hash + 16, s[4]); + } + + DSHA1 &reset() { + bytes = 0; + initialize(s); + return *this; + } + + // Warmup the cache and get a boost in performance + DSHA1 &warmup() { + uint8_t warmup[20]; + this->write((uint8_t *)"warmupwarmupwa", 20).finalize(warmup); + return *this; + } + +private: + uint32_t s[5]; + unsigned char buf[64]; + uint64_t bytes; + + const uint32_t k1 = 0x5A827999ul; + const uint32_t k2 = 0x6ED9EBA1ul; + const uint32_t k3 = 0x8F1BBCDCul; + const uint32_t k4 = 0xCA62C1D6ul; + + uint32_t inline f1(uint32_t b, uint32_t c, uint32_t d) { return d ^ (b & (c ^ d)); } + uint32_t inline f2(uint32_t b, uint32_t c, uint32_t d) { return b ^ c ^ d; } + uint32_t inline f3(uint32_t b, uint32_t c, uint32_t d) { return (b & c) | (d & (b | c)); } + + uint32_t inline left(uint32_t x) { return (x << 1) | (x >> 31); } + + void inline Round(uint32_t a, uint32_t &b, uint32_t c, uint32_t d, uint32_t &e, + uint32_t f, uint32_t k, uint32_t w) { + e += ((a << 5) | (a >> 27)) + f + k + w; + b = (b << 30) | (b >> 2); + } + + void initialize(uint32_t s[5]) { + s[0] = 0x67452301ul; + s[1] = 0xEFCDAB89ul; + s[2] = 0x98BADCFEul; + s[3] = 0x10325476ul; + s[4] = 0xC3D2E1F0ul; + } + + void transform(uint32_t *s, const unsigned char *chunk) { + uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4]; + uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15; + + Round(a, b, c, d, e, f1(b, c, d), k1, w0 = readBE32(chunk + 0)); + Round(e, a, b, c, d, f1(a, b, c), k1, w1 = readBE32(chunk + 4)); + Round(d, e, a, b, c, f1(e, a, b), k1, w2 = readBE32(chunk + 8)); + Round(c, d, e, a, b, f1(d, e, a), k1, w3 = readBE32(chunk + 12)); + Round(b, c, d, e, a, f1(c, d, e), k1, w4 = readBE32(chunk + 16)); + Round(a, b, c, d, e, f1(b, c, d), k1, w5 = readBE32(chunk + 20)); + Round(e, a, b, c, d, f1(a, b, c), k1, w6 = readBE32(chunk + 24)); + Round(d, e, a, b, c, f1(e, a, b), k1, w7 = readBE32(chunk + 28)); + Round(c, d, e, a, b, f1(d, e, a), k1, w8 = readBE32(chunk + 32)); + Round(b, c, d, e, a, f1(c, d, e), k1, w9 = readBE32(chunk + 36)); + Round(a, b, c, d, e, f1(b, c, d), k1, w10 = readBE32(chunk + 40)); + Round(e, a, b, c, d, f1(a, b, c), k1, w11 = readBE32(chunk + 44)); + Round(d, e, a, b, c, f1(e, a, b), k1, w12 = readBE32(chunk + 48)); + Round(c, d, e, a, b, f1(d, e, a), k1, w13 = readBE32(chunk + 52)); + Round(b, c, d, e, a, f1(c, d, e), k1, w14 = readBE32(chunk + 56)); + Round(a, b, c, d, e, f1(b, c, d), k1, w15 = readBE32(chunk + 60)); + + Round(e, a, b, c, d, f1(a, b, c), k1, w0 = left(w0 ^ w13 ^ w8 ^ w2)); + Round(d, e, a, b, c, f1(e, a, b), k1, w1 = left(w1 ^ w14 ^ w9 ^ w3)); + Round(c, d, e, a, b, f1(d, e, a), k1, w2 = left(w2 ^ w15 ^ w10 ^ w4)); + Round(b, c, d, e, a, f1(c, d, e), k1, w3 = left(w3 ^ w0 ^ w11 ^ w5)); + Round(a, b, c, d, e, f2(b, c, d), k2, w4 = left(w4 ^ w1 ^ w12 ^ w6)); + Round(e, a, b, c, d, f2(a, b, c), k2, w5 = left(w5 ^ w2 ^ w13 ^ w7)); + Round(d, e, a, b, c, f2(e, a, b), k2, w6 = left(w6 ^ w3 ^ w14 ^ w8)); + Round(c, d, e, a, b, f2(d, e, a), k2, w7 = left(w7 ^ w4 ^ w15 ^ w9)); + Round(b, c, d, e, a, f2(c, d, e), k2, w8 = left(w8 ^ w5 ^ w0 ^ w10)); + Round(a, b, c, d, e, f2(b, c, d), k2, w9 = left(w9 ^ w6 ^ w1 ^ w11)); + Round(e, a, b, c, d, f2(a, b, c), k2, w10 = left(w10 ^ w7 ^ w2 ^ w12)); + Round(d, e, a, b, c, f2(e, a, b), k2, w11 = left(w11 ^ w8 ^ w3 ^ w13)); + Round(c, d, e, a, b, f2(d, e, a), k2, w12 = left(w12 ^ w9 ^ w4 ^ w14)); + Round(b, c, d, e, a, f2(c, d, e), k2, w13 = left(w13 ^ w10 ^ w5 ^ w15)); + Round(a, b, c, d, e, f2(b, c, d), k2, w14 = left(w14 ^ w11 ^ w6 ^ w0)); + Round(e, a, b, c, d, f2(a, b, c), k2, w15 = left(w15 ^ w12 ^ w7 ^ w1)); + + Round(d, e, a, b, c, f2(e, a, b), k2, w0 = left(w0 ^ w13 ^ w8 ^ w2)); + Round(c, d, e, a, b, f2(d, e, a), k2, w1 = left(w1 ^ w14 ^ w9 ^ w3)); + Round(b, c, d, e, a, f2(c, d, e), k2, w2 = left(w2 ^ w15 ^ w10 ^ w4)); + Round(a, b, c, d, e, f2(b, c, d), k2, w3 = left(w3 ^ w0 ^ w11 ^ w5)); + Round(e, a, b, c, d, f2(a, b, c), k2, w4 = left(w4 ^ w1 ^ w12 ^ w6)); + Round(d, e, a, b, c, f2(e, a, b), k2, w5 = left(w5 ^ w2 ^ w13 ^ w7)); + Round(c, d, e, a, b, f2(d, e, a), k2, w6 = left(w6 ^ w3 ^ w14 ^ w8)); + Round(b, c, d, e, a, f2(c, d, e), k2, w7 = left(w7 ^ w4 ^ w15 ^ w9)); + Round(a, b, c, d, e, f3(b, c, d), k3, w8 = left(w8 ^ w5 ^ w0 ^ w10)); + Round(e, a, b, c, d, f3(a, b, c), k3, w9 = left(w9 ^ w6 ^ w1 ^ w11)); + Round(d, e, a, b, c, f3(e, a, b), k3, w10 = left(w10 ^ w7 ^ w2 ^ w12)); + Round(c, d, e, a, b, f3(d, e, a), k3, w11 = left(w11 ^ w8 ^ w3 ^ w13)); + Round(b, c, d, e, a, f3(c, d, e), k3, w12 = left(w12 ^ w9 ^ w4 ^ w14)); + Round(a, b, c, d, e, f3(b, c, d), k3, w13 = left(w13 ^ w10 ^ w5 ^ w15)); + Round(e, a, b, c, d, f3(a, b, c), k3, w14 = left(w14 ^ w11 ^ w6 ^ w0)); + Round(d, e, a, b, c, f3(e, a, b), k3, w15 = left(w15 ^ w12 ^ w7 ^ w1)); + + Round(c, d, e, a, b, f3(d, e, a), k3, w0 = left(w0 ^ w13 ^ w8 ^ w2)); + Round(b, c, d, e, a, f3(c, d, e), k3, w1 = left(w1 ^ w14 ^ w9 ^ w3)); + Round(a, b, c, d, e, f3(b, c, d), k3, w2 = left(w2 ^ w15 ^ w10 ^ w4)); + Round(e, a, b, c, d, f3(a, b, c), k3, w3 = left(w3 ^ w0 ^ w11 ^ w5)); + Round(d, e, a, b, c, f3(e, a, b), k3, w4 = left(w4 ^ w1 ^ w12 ^ w6)); + Round(c, d, e, a, b, f3(d, e, a), k3, w5 = left(w5 ^ w2 ^ w13 ^ w7)); + Round(b, c, d, e, a, f3(c, d, e), k3, w6 = left(w6 ^ w3 ^ w14 ^ w8)); + Round(a, b, c, d, e, f3(b, c, d), k3, w7 = left(w7 ^ w4 ^ w15 ^ w9)); + Round(e, a, b, c, d, f3(a, b, c), k3, w8 = left(w8 ^ w5 ^ w0 ^ w10)); + Round(d, e, a, b, c, f3(e, a, b), k3, w9 = left(w9 ^ w6 ^ w1 ^ w11)); + Round(c, d, e, a, b, f3(d, e, a), k3, w10 = left(w10 ^ w7 ^ w2 ^ w12)); + Round(b, c, d, e, a, f3(c, d, e), k3, w11 = left(w11 ^ w8 ^ w3 ^ w13)); + Round(a, b, c, d, e, f2(b, c, d), k4, w12 = left(w12 ^ w9 ^ w4 ^ w14)); + Round(e, a, b, c, d, f2(a, b, c), k4, w13 = left(w13 ^ w10 ^ w5 ^ w15)); + Round(d, e, a, b, c, f2(e, a, b), k4, w14 = left(w14 ^ w11 ^ w6 ^ w0)); + Round(c, d, e, a, b, f2(d, e, a), k4, w15 = left(w15 ^ w12 ^ w7 ^ w1)); + + Round(b, c, d, e, a, f2(c, d, e), k4, w0 = left(w0 ^ w13 ^ w8 ^ w2)); + Round(a, b, c, d, e, f2(b, c, d), k4, w1 = left(w1 ^ w14 ^ w9 ^ w3)); + Round(e, a, b, c, d, f2(a, b, c), k4, w2 = left(w2 ^ w15 ^ w10 ^ w4)); + Round(d, e, a, b, c, f2(e, a, b), k4, w3 = left(w3 ^ w0 ^ w11 ^ w5)); + Round(c, d, e, a, b, f2(d, e, a), k4, w4 = left(w4 ^ w1 ^ w12 ^ w6)); + Round(b, c, d, e, a, f2(c, d, e), k4, w5 = left(w5 ^ w2 ^ w13 ^ w7)); + Round(a, b, c, d, e, f2(b, c, d), k4, w6 = left(w6 ^ w3 ^ w14 ^ w8)); + Round(e, a, b, c, d, f2(a, b, c), k4, w7 = left(w7 ^ w4 ^ w15 ^ w9)); + Round(d, e, a, b, c, f2(e, a, b), k4, w8 = left(w8 ^ w5 ^ w0 ^ w10)); + Round(c, d, e, a, b, f2(d, e, a), k4, w9 = left(w9 ^ w6 ^ w1 ^ w11)); + Round(b, c, d, e, a, f2(c, d, e), k4, w10 = left(w10 ^ w7 ^ w2 ^ w12)); + Round(a, b, c, d, e, f2(b, c, d), k4, w11 = left(w11 ^ w8 ^ w3 ^ w13)); + Round(e, a, b, c, d, f2(a, b, c), k4, w12 = left(w12 ^ w9 ^ w4 ^ w14)); + Round(d, e, a, b, c, f2(e, a, b), k4, left(w13 ^ w10 ^ w5 ^ w15)); + Round(c, d, e, a, b, f2(d, e, a), k4, left(w14 ^ w11 ^ w6 ^ w0)); + Round(b, c, d, e, a, f2(c, d, e), k4, left(w15 ^ w12 ^ w7 ^ w1)); + + s[0] += a; + s[1] += b; + s[2] += c; + s[3] += d; + s[4] += e; + } + + uint32_t static inline readBE32(const unsigned char *ptr) { + return __builtin_bswap32(*(uint32_t *)ptr); + } + + void static inline writeBE32(unsigned char *ptr, uint32_t x) { + *(uint32_t *)ptr = __builtin_bswap32(x); + } + + void static inline writeBE64(unsigned char *ptr, uint64_t x) { + *(uint64_t *)ptr = __builtin_bswap64(x); + } +}; +#endif diff --git a/ESP_Code4.3/ESP_Code/Dashboard.h b/ESP_Code4.3/ESP_Code/Dashboard.h new file mode 100644 index 00000000..30c88924 --- /dev/null +++ b/ESP_Code4.3/ESP_Code/Dashboard.h @@ -0,0 +1,151 @@ +#ifndef DASHBOARD_H +#define DASHBOARD_H + +const char WEBSITE[] PROGMEM = R"=====( + + + + + + + Duino-Coin @@DEVICE@@ dashboard + + + + + +
+
+

+ + @@DEVICE@@ (@@ID@@) +

+

+ Self-hosted, lightweight, official dashboard for your Duino-Coin miner +

+
+
+
+
+
+
+

+ Mining statistics +

+
+
+
+ @@HASHRATE@@ kH/s +
+
+ Hashrate +
+
+
+
+ @@DIFF@@ +
+
+ Difficulty +
+
+
+
+ @@SHARES@@ +
+
+ Shares +
+
+
+
+ @@NODE@@ +
+
+ Node +
+
+
+
+
+
+
+

+ Device information +

+
+
+
+ @@DEVICE@@ +
+
+ Device type +
+
+
+
+ @@ID@@ +
+
+ Device ID +
+
+
+
+ @@MEMORY@@ +
+
+ Free memory +
+
+
+
+ @@VERSION@@ +
+
+ Miner version +
+
+
+
+ @@SENSOR@@ +
+
+ Sensor reading(s) +
+
+
+
+
+
+
+
+ +
+
+
+ + +)====="; + +#endif diff --git a/ESP_Code4.3/ESP_Code/DisplayHal.h b/ESP_Code4.3/ESP_Code/DisplayHal.h new file mode 100644 index 00000000..57e05f76 --- /dev/null +++ b/ESP_Code4.3/ESP_Code/DisplayHal.h @@ -0,0 +1,492 @@ +// Abstraction layer for handling various types of screens +// See Settings.h for enabling the screen of your choice +#ifndef DISPLAY_HAL_H +#define DISPLAY_HAL_H + +// Abstraction layer: custom fonts, images, etc. +#if defined(DISPLAY_SSD1306) + static const unsigned char image_check_contour_bits[] U8X8_PROGMEM = {0x00,0x04,0x00,0x0a,0x04,0x11,0x8a,0x08,0x51,0x04,0x22,0x02,0x04,0x01,0x88,0x00,0x50,0x00,0x20,0x00}; + static const unsigned char image_network_1_bar_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x50,0x00,0x50,0x00,0x50,0x00,0x57,0x00,0x55,0x00,0x55,0x00,0x55,0x70,0x55,0x50,0x55,0x50,0x55,0x50,0x55,0x57,0x55,0x57,0x55,0x77,0x77,0x00,0x00}; + static const unsigned char image_network_2_bars_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x50,0x00,0x50,0x00,0x50,0x00,0x57,0x00,0x55,0x00,0x55,0x00,0x55,0x70,0x55,0x70,0x55,0x70,0x55,0x70,0x55,0x77,0x55,0x77,0x55,0x77,0x77,0x00,0x00}; + static const unsigned char image_network_3_bars_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x50,0x00,0x50,0x00,0x50,0x00,0x57,0x00,0x57,0x00,0x57,0x00,0x57,0x70,0x57,0x70,0x57,0x70,0x57,0x70,0x57,0x77,0x57,0x77,0x57,0x77,0x77,0x00,0x00}; + static const unsigned char image_network_4_bars_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x77,0x00,0x77,0x00,0x77,0x00,0x77,0x70,0x77,0x70,0x77,0x70,0x77,0x70,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x00,0x00}; + static const unsigned char image_duco_logo_bits[] U8X8_PROGMEM = {0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0xff,0x00,0xc0,0x01,0x9f,0x01,0x20,0x01,0x20,0x01,0x20,0x01,0x9f,0x01,0xc0,0x01,0xff,0x00,0x7f,0x00}; + static const unsigned char image_duco_logo_big_bits[] U8X8_PROGMEM = {0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x01,0x00,0x00,0xfc,0xff,0xff,0x0f,0x00,0x00,0xfc,0xff,0xff,0x3f,0x00,0x00,0xfc,0xff,0xff,0x7f,0x00,0x00,0xfc,0xff,0xff,0xff,0x00,0x00,0xfc,0xff,0xff,0xff,0x01,0x00,0xfc,0xff,0xff,0xff,0x03,0x00,0xf8,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xfe,0x0f,0x00,0xfc,0xff,0x03,0xf8,0x0f,0x00,0xfc,0xff,0x0f,0xf0,0x1f,0x00,0xfc,0xff,0x1f,0xe0,0x1f,0x00,0xfc,0xff,0x3f,0xe0,0x3f,0x00,0xfc,0xff,0x7f,0xc0,0x3f,0x00,0xfc,0xff,0xff,0xc0,0x7f,0x00,0xf8,0xff,0xff,0x80,0x7f,0x00,0x00,0x00,0xfe,0x80,0x7f,0x00,0x00,0x00,0xfc,0x81,0x7f,0x00,0x00,0x00,0xfc,0x01,0x7f,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x81,0x7f,0x00,0x00,0x00,0xfe,0x81,0x7f,0x00,0x00,0x80,0xff,0x80,0x7f,0x00,0xfc,0xff,0xff,0xc0,0x7f,0x00,0xfc,0xff,0xff,0xc0,0x7f,0x00,0xfc,0xff,0x7f,0xe0,0x3f,0x00,0xfc,0xff,0x3f,0xf0,0x3f,0x00,0xfc,0xff,0x1f,0xf8,0x1f,0x00,0xfc,0xff,0x0f,0xfc,0x1f,0x00,0xf8,0xff,0x01,0xfe,0x0f,0x00,0x00,0x00,0xc0,0xff,0x0f,0x00,0xfc,0xff,0xff,0xff,0x07,0x00,0xfc,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0x01,0x00,0xfc,0xff,0xff,0xff,0x00,0x00,0xfc,0xff,0xff,0x7f,0x00,0x00,0xfc,0xff,0xff,0x1f,0x00,0x00,0xfc,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; +#endif + +#if defined(DISPLAY_114) + static const unsigned char PROGMEM image_duco_logo_bits[] = {0xff,0xf8,0x00,0xff,0xfe,0x00,0xff,0xff,0x80,0x00,0x07,0xc0,0x00,0x03,0xe0,0x00,0x01,0xf0,0xff,0xf1,0xf0,0x00,0x18,0xf8,0x00,0x0c,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x0c,0x78,0x00,0x18,0xf0,0xff,0xf0,0xf0,0x00,0x01,0xe0,0x00,0x01,0xc0,0x00,0x07,0xc0,0xff,0xff,0x80,0xff,0xff,0x00,0xff,0xf8,0x00}; + static const unsigned char PROGMEM image_check_contour_bits[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x50,0x20,0x88,0x51,0x10,0x8a,0x20,0x44,0x40,0x20,0x80,0x11,0x00,0x0a,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_wifi_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x46,0x0c,0x40,0x88,0x02,0x20,0x10,0xe1,0x00,0x23,0x18,0x80,0x04,0x04,0x00,0x08,0x42,0x00,0x01,0xb0,0x00,0x02,0x08,0x00,0x00,0x40,0x00,0x00,0xa0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_wifi_2_bars_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x46,0x0c,0x40,0x88,0x02,0x20,0x10,0xe1,0x00,0x23,0x18,0x80,0x04,0x04,0x00,0x08,0x42,0x00,0x01,0xf0,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_wifi_3_bars_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x46,0x0c,0x40,0x88,0x02,0x20,0x10,0xe1,0x00,0x23,0xf8,0x80,0x07,0x1c,0x00,0x0c,0x46,0x00,0x05,0xf4,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_wifi_4_bars_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x47,0xbc,0x40,0x8e,0x0e,0x20,0x18,0xe3,0x00,0x33,0xf9,0x80,0x17,0x1d,0x00,0x0c,0x46,0x00,0x05,0xf4,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_wifi_5_bars_bits[] = {0x01,0xf0,0x00,0x07,0xbc,0x00,0x1e,0x0f,0x00,0x31,0xf1,0x80,0x77,0xbd,0xc0,0xce,0x0e,0x60,0x58,0xe3,0x40,0x33,0xf9,0x80,0x17,0x1d,0x00,0x0c,0x46,0x00,0x05,0xf4,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_paint_0_bits[] = {0x7f,0xff,0xff,0xf0,0x00,0x00,0x7f,0xff,0xff,0xfc,0x00,0x00,0x7f,0xff,0xff,0xff,0x00,0x00,0x7f,0xff,0xff,0xff,0x80,0x00,0x7f,0xff,0xff,0xff,0xe0,0x00,0x7f,0xff,0xff,0xff,0xf0,0x00,0x7f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x07,0xfc,0x00,0x00,0x00,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x01,0xfe,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x7f,0xff,0xff,0xc0,0x7f,0x00,0x7f,0xff,0xff,0xf0,0x3f,0x80,0x00,0x00,0x00,0x38,0x3f,0x80,0x00,0x00,0x00,0x1c,0x1f,0x80,0x00,0x00,0x00,0x0e,0x1f,0x80,0x00,0x00,0x00,0x07,0x1f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x07,0x0f,0x80,0x00,0x00,0x00,0x0e,0x1f,0x80,0x00,0x00,0x00,0x1c,0x1f,0x80,0x00,0x00,0x00,0x38,0x3f,0x80,0xff,0xff,0xff,0xf0,0x7f,0x80,0xff,0xff,0xff,0xc0,0x7f,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x0f,0xfe,0x00,0x00,0x00,0x00,0x3f,0xfc,0x00,0xff,0xff,0xff,0xff,0xf8,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0xe0,0x00,0xff,0xff,0xff,0xff,0x80,0x00,0xff,0xff,0xff,0xfe,0x00,0x00,0xff,0xff,0xff,0xf0,0x00,0x00,0xff,0xff,0xff,0xc0,0x00,0x00}; +#endif + +#if defined(DISPLAY_16X2) + static byte duco_logo[] = {0x1E, 0x01, 0x1D, 0x05, 0x1D, 0x01, 0x1E, 0x00}; + static byte check_mark[] = {0x00, 0x00, 0x00, 0x01, 0x02,0x14, 0x08, 0x00}; + static byte kh[] = {0x08, 0x0A, 0x0C, 0x0A, 0x00, 0x0A, 0x0E, 0x0A}; + static byte msec[] = {0x0A, 0x15, 0x11, 0x06, 0x08, 0x04, 0x02, 0x0C}; +#endif + + #if defined(DISPLAY_SSD1306) + void drawStrMultiline(const char *msg, int xloc, int yloc) { + //https://github.com/olikraus/u8g2/discussions/1479 + int dspwidth = u8g2.getDisplayWidth(); + int strwidth = 0; + char glyph[2]; glyph[1] = 0; + + for (const char *ptr = msg, *lastblank = NULL; *ptr; ++ptr) { + while (xloc == 0 && *msg == ' ') + if (ptr == msg++) ++ptr; + + glyph[0] = *ptr; + strwidth += u8g2.getStrWidth(glyph); + if (*ptr == ' ') lastblank = ptr; + else ++strwidth; + + if (xloc + strwidth > dspwidth) { + int starting_xloc = xloc; + while (msg < (lastblank ? lastblank : ptr)) { + glyph[0] = *msg++; + xloc += u8g2.drawStr(xloc, yloc, glyph); + } + + strwidth -= xloc - starting_xloc; + yloc += u8g2.getMaxCharHeight(); + xloc = 0; lastblank = NULL; + } + } + while (*msg) { + glyph[0] = *msg++; + xloc += u8g2.drawStr(xloc, yloc, glyph); + } + } +#endif + +#if defined(DISPLAY_114) + void drawStrMultiline(const char *msg, int xloc, int yloc) { + //https://github.com/olikraus/u8g2/discussions/1479 + int dspwidth = 240; + int strwidth = 0; + char glyph[2]; glyph[1] = 0; + + for (const char *ptr = msg, *lastblank = NULL; *ptr; ++ptr) { + while (xloc == 0 && *msg == ' ') + if (ptr == msg++) ++ptr; + + glyph[0] = *ptr; + strwidth = 10; + if (*ptr == ' ') lastblank = ptr; + else ++strwidth; + + if (xloc + strwidth > dspwidth) { + int starting_xloc = xloc; + while (msg < (lastblank ? lastblank : ptr)) { + glyph[0] = *msg++; + xloc += tft.drawString(glyph,xloc, yloc ); + } + + strwidth -= xloc - starting_xloc; + yloc += 10; + xloc = 0; lastblank = NULL; + } + } + while (*msg) { + glyph[0] = *msg++; + xloc += tft.drawString(glyph,xloc, yloc ); + } + } +#endif + +#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + void screen_setup() { + // Ran during setup() + // Abstraction layer: screen initialization + + #if defined(DISPLAY_SSD1306) + u8g2.begin(); + u8g2.clearBuffer(); + u8g2.setFontMode(1); + u8g2.setBitmapMode(1); + u8g2.sendBuffer(); + #endif + + #if defined(DISPLAY_16X2) + lcd.begin(16, 2); + lcd.createChar(0, duco_logo); + lcd.createChar(1, check_mark); + lcd.createChar(2, kh); + lcd.createChar(3, msec); + lcd.home(); + lcd.clear(); + #endif + + #if defined(DISPLAY_114) + tft.init(); + tft.begin(); + tft.setRotation(1); + tft.fillScreen(TFT_BLACK); + + #endif + } + + + void display_boot() { + // Abstraction layer: compilation time, features, etc. + + #if defined(DISPLAY_16X2) + lcd.clear(); + #if defined(ESP8266) + lcd.print("ESP8266 "); + #elif defined(CONFIG_FREERTOS_UNICORE) + lcd.print("ESP32S2 "); + #else + lcd.print("ESP32 "); + #endif + #if defined(ESP8266) + lcd.print(String(ESP.getCpuFreqMHz()).c_str()); + #else + lcd.print(String(getCpuFrequencyMhz()).c_str()); + #endif + lcd.print(" MHz"); + + lcd.setCursor(0, 1); + lcd.print(__DATE__); + #endif + + #if defined(DISPLAY_SSD1306) + u8g2.clearBuffer(); + + u8g2.setFont(u8g2_font_profont15_tr); + u8g2.setCursor(2, 13); + #if defined(ESP8266) + u8g2.print("ESP8266 "); + #elif defined(CONFIG_FREERTOS_UNICORE) + u8g2.print("ESP32S2/C3 "); + #else + u8g2.print("ESP32 "); + #endif + + #if defined(ESP8266) + u8g2.print(String(ESP.getCpuFreqMHz()).c_str()); + #else + u8g2.print(String(getCpuFrequencyMhz()).c_str()); + #endif + u8g2.print(" MHz"); + + u8g2.setFont(u8g2_font_profont10_tr); + u8g2.drawLine(1, 27, 126, 27); + u8g2.setCursor(2, 24); + u8g2.print("Compiled "); + u8g2.print(__DATE__); + + + u8g2.drawStr(2, 37, "Features:"); + u8g2.setCursor(2, 46); + String features_str = "OTA "; + #if defined(USE_LAN) + features_str += "LAN "; + #endif + #if defined(LED_BLINKING) + features_str += "Blink "; + #endif + #if defined(SERIAL_PRINTING) + features_str += "Serial "; + #endif + #if defined(WEB_DASHBOARD) + features_str += "Webserver "; + #endif + #if defined(DISPLAY_16X2) + features_str += "LCD16X2 "; + #endif + #if defined(DISPLAY_SSD1306) + features_str += "SSD1306 "; + #endif + #if defined(USE_INTERNAL_SENSOR) + features_str += "Int. sensor "; + #endif + #if defined(USE_DS18B20) + features_str += "DS18B20 "; + #endif + #if defined(USE_DHT) + features_str += "DHT "; + #endif + #if defined(USE_HSU07M) + features_str += "HSU07M "; + #endif + drawStrMultiline(features_str.c_str(), 2, 46); + u8g2.sendBuffer(); + #endif + + #if defined(DISPLAY_114) + tft.fillScreen(TFT_BLACK); + tft.setTextColor(TFT_WHITE,TFT_BLACK); + // tft.drawBitmap(0, 3, image_duco_logo_bits, 21, 24, 0xFC00); + tft.drawBitmap(0, 4, image_paint_0_bits, 41, 51, 0xFC00); + tft.setTextSize(2); + tft.setCursor(55, 15); + #if defined(ESP8266) + tft.print("ESP8266 "); + #elif defined(CONFIG_FREERTOS_UNICORE) + tft.print("ESP32S2/C3 "); + #else + tft.print("ESP32 "); + #endif + + #if defined(ESP8266) + tft.print(String(ESP.getCpuFreqMHz()).c_str()); + #else + tft.print(String(getCpuFrequencyMhz()).c_str()); + #endif + tft.print(" MHz"); + tft.setTextSize(1); + tft.setCursor(2, 70); + tft.print("Compiled "); + tft.print(__DATE__); + + delay(3000); + + tft.drawString("Features:",2, 85,1); + String features_str = "OTA "; + #if defined(USE_LAN) + features_str += "LAN "; + #endif + #if defined(LED_BLINKING) + features_str += "Blink "; + #endif + #if defined(SERIAL_PRINTING) + features_str += "Serial "; + #endif + #if defined(WEB_DASHBOARD) + features_str += "Webserver "; + #endif + #if defined(DISPLAY_16X2) + features_str += "LCD16X2 "; + #endif + #if defined(DISPLAY_SSD1306) + features_str += "SSD1306 "; + #endif + #if defined(DISPLAY_114) + features_str += "TT-GO "; + #endif + #if defined(USE_INTERNAL_SENSOR) + features_str += "Int. sensor "; + #endif + #if defined(USE_DS18B20) + features_str += "DS18B20 "; + #endif + #if defined(USE_DHT) + features_str += "DHT "; + #endif + #if defined(USE_HSU07M) + features_str += "HSU07M "; + #endif + drawStrMultiline(features_str.c_str(), 2, 102); + delay(3000); + #endif + } + + void display_info(String message) { + // Abstraction layer: info screens (setups) + + #if defined(DISPLAY_SSD1306) + u8g2.clearBuffer(); + u8g2.drawXBMP(-1, 3, 41, 45, image_duco_logo_big_bits); + u8g2.setFont(u8g2_font_t0_16b_tr); + #if defined(ESP8266) + u8g2.drawStr(42, 27, "ESP8266 "); + #elif defined(CONFIG_FREERTOS_UNICORE) + u8g2.drawStr(42, 27, "ESP32S2/C3 "); + #else + u8g2.drawStr(42, 27, "ESP32 "); + #endif + u8g2.setFont(u8g2_font_t0_13b_tr); + u8g2.drawStr(41, 14, "Duino-Coin"); + u8g2.setFont(u8g2_font_6x10_tr); + u8g2.drawStr(98, 36, "MINER"); + u8g2.setFont(u8g2_font_6x13_tr); + u8g2.drawStr(1, 60, message.c_str()); + u8g2.setFont(u8g2_font_5x8_tr); + u8g2.drawStr(42, 46, "www.duinocoin.com"); + u8g2.setFont(u8g2_font_4x6_tr); + u8g2.drawStr(116, 14, String(SOFTWARE_VERSION).c_str()); + u8g2.sendBuffer(); + #endif + + #if defined(DISPLAY_16X2) + lcd.clear(); + lcd.setCursor(0, 0); + lcd.write(0); + lcd.print(" Duino-Coin "); + lcd.print(SOFTWARE_VERSION); + lcd.setCursor(0, 1); + lcd.print(message); + #endif + + #if defined(DISPLAY_114) + tft.fillScreen(TFT_BLACK); + tft.setTextColor(0xFFFF); + tft.setTextSize(2); + #if defined(ESP8266) + tft.drawString("ESP8266",54,24); + #elif defined(CONFIG_FREERTOS_UNICORE) + tft.drawString("ESP32S2/C3",54,24); + #else + tft.drawString("ESP32",54,24); + #endif + tft.setTextColor(0x4E04); + tft.drawString(String(SOFTWARE_VERSION).c_str(),180, 27); + tft.setTextColor(0xFFFF); + tft.drawString("Duino-Coin",14,69 ); + tft.drawString("MINER",156,69 ); + tft.setTextSize(1); + tft.drawString(message.c_str(),3,110 ); + tft.drawString("www.duinocoin.com",120,95 ); + tft.drawBitmap(0, 4, image_paint_0_bits, 41, 51, 0xFC00); + tft.drawString("Rev", 189, 8); + delay(3000); + #endif + } + + + void display_mining_results(String hashrate, String accepted_shares, String total_shares, String uptime, String node, + String difficulty, String sharerate, String ping, String accept_rate) { + // Ran after each found share + // Abstraction layer: displaying mining results + Serial.println("Displaying mining results"); + + #if defined(DISPLAY_SSD1306) + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_profont10_tr); + u8g2.drawStr(67, 26, "kH"); + if (hashrate.toFloat() < 100.0) { + u8g2.setFont(u8g2_font_profont29_tr); + u8g2.drawStr(2, 36, hashrate.c_str()); + } else { + u8g2.setFont(u8g2_font_profont22_tr); + u8g2.drawStr(3, 35, hashrate.c_str()); + } + + u8g2.setFont(u8g2_font_haxrcorp4089_tr); + u8g2.drawStr(52, 12, node.c_str()); + + u8g2.setFont(u8g2_font_t0_11_tr); + u8g2.drawStr(17, 47, (accepted_shares + "/" + total_shares).c_str()); + u8g2.setFont(u8g2_font_5x7_tr); + u8g2.drawStr(88, 47, ("(" + accept_rate + "%)").c_str()); + + u8g2.setFont(u8g2_font_profont12_tr); + u8g2.drawStr(20, 12, (ping + "ms").c_str()); + u8g2.drawStr(69, 36, "s"); + + u8g2.setFont(u8g2_font_6x13_tr); + u8g2.drawStr(125-u8g2.getStrWidth(uptime.c_str()), 61, uptime.c_str()); + + u8g2.drawStr(85, 38, sharerate.c_str()); + u8g2.drawStr(85, 27, difficulty.c_str()); + u8g2.drawLine(67, 28, 75, 28); + + u8g2.drawXBMP(2, 38, 13, 10, image_check_contour_bits); + + if (WiFi.RSSI() > -40) { + u8g2.drawXBMP(1, 0, 15, 16, image_network_4_bars_bits); + } else if (WiFi.RSSI() > -60) { + u8g2.drawXBMP(1, 0, 15, 16, image_network_3_bars_bits); + } else if (WiFi.RSSI() > -75) { + u8g2.drawXBMP(1, 0, 15, 16, image_network_2_bars_bits); + } else { + u8g2.drawXBMP(1, 0, 15, 16, image_network_1_bar_bits); + } + + u8g2.setFont(u8g2_font_4x6_tr); + u8g2.drawStr(14, 61, String(WiFi.localIP().toString()).c_str()); + u8g2.drawStr(14, 55, ("Duino-Coin " + String(SOFTWARE_VERSION)).c_str()); + u8g2.drawXBMP(2, 11, 9, 50, image_duco_logo_bits); + u8g2.drawStr(111, 27, "diff"); + u8g2.drawStr(107, 38, "shr/s"); + + u8g2.sendBuffer(); + #endif + + #if defined(DISPLAY_16X2) + lcd.clear(); + lcd.setCursor(0,0); + lcd.print(hashrate); + lcd.setCursor(4,0); + lcd.write(2); // kh + + lcd.setCursor(7, 0); + lcd.print(difficulty); + lcd.print(" diff"); + + lcd.setCursor(0, 1); + lcd.write(1); // checkmark + lcd.print(accepted_shares); + + lcd.setCursor(7, 1); + lcd.print(ping); + lcd.write(3); // ms + + lcd.setCursor(12, 1); + lcd.print(sharerate); + lcd.print("s"); + #endif + + #if defined(DISPLAY_114) + tft.fillScreen(TFT_BLACK); + tft.setTextSize(1); + tft.setTextColor(TFT_WHITE,TFT_BLACK); + tft.drawString("kH/s", 128, 45,2); + if (hashrate.toFloat() < 100.0) { + tft.setTextColor(TFT_ORANGE,TFT_BLACK); + tft.drawString(hashrate.c_str(), 1, 27,6 ); + } else { + tft.setTextColor(TFT_ORANGE,TFT_BLACK); + tft.drawString(hashrate.c_str(), 1, 27,6 ); + } + + tft.setTextColor(0x2FF2); + tft.drawString(node.c_str(),100,3,2 ); + tft.drawLine(0, 21, 240, 21, 0xFFE0); + + tft.setTextColor(0xFFFF); + tft.drawString((accepted_shares + "/" + total_shares).c_str(),21,80,2 ); + tft.drawString(("(" + accept_rate + "%)").c_str(),169, 84,1 ); + tft.drawLine(0, 70, 240, 70, 0xFFE0); + tft.drawString("Uptime", 162, 107,1); + tft.drawString((ping + "ms").c_str(),31, 3,2 ); + + tft.drawString(uptime.c_str(),150, 118,2 ); + tft.drawString(sharerate.c_str(),208, 45,2 ); + tft.drawString(difficulty.c_str(),204, 28,2 ); + + tft.drawBitmap(4, 79, image_check_contour_bits, 13, 16, 0x7E8); + tft.drawLine(0, 100, 240, 100, 0xFFE0); + if (WiFi.RSSI() > -40) { + tft.drawBitmap(3, 3, image_wifi_5_bars_bits, 19, 16, 0xFFFF); + } else if (WiFi.RSSI() > -60) { + tft.drawBitmap(3, 3, image_wifi_4_bars_bits, 19, 16, 0xFFFF); + } else if (WiFi.RSSI() > -75) { + tft.drawBitmap(3, 3, image_wifi_2_bars_bits, 19, 16, 0xFFFF); + } else { + tft.drawBitmap(3, 3, image_wifi_bits, 19, 16, 0xFFFF); + } + + tft.drawBitmap(1, 108, image_duco_logo_bits, 21, 24, 0xFC00); + tft.drawString(String(WiFi.localIP().toString()).c_str(),28, 122,1); + tft.drawString("Duinocoin", 28, 109,1); + tft.drawString(String(SOFTWARE_VERSION).c_str(),87,109,1 ); + + tft.drawString("diff", 173, 28,2); + tft.drawString("sh/s", 165, 45,2); + + + #endif + } +#endif + +#endif diff --git a/ESP_Code4.3/ESP_Code/ESP_Code.ino b/ESP_Code4.3/ESP_Code/ESP_Code.ino new file mode 100644 index 00000000..1d178f54 --- /dev/null +++ b/ESP_Code4.3/ESP_Code/ESP_Code.ino @@ -0,0 +1,817 @@ +/* + ____ __ __ ____ _ _ _____ ___ _____ ____ _ _ + ( _ \( )( )(_ _)( \( )( _ )___ / __)( _ )(_ _)( \( ) + )(_) ))(__)( _)(_ ) ( )(_)((___)( (__ )(_)( _)(_ ) ( + (____/(______)(____)(_)\_)(_____) \___)(_____)(____)(_)\_) + Official code for all ESP8266/32 boards version 4.3 + Main .ino file + + The Duino-Coin Team & Community 2019-2024 © MIT Licensed + https://duinocoin.com + https://github.com/revoxhere/duino-coin + + If you don't know where to start, visit official website and navigate to + the Getting Started page. Have fun mining! + + To edit the variables (username, WiFi settings, etc.) use the Settings.h tab! +*/ + +/* If optimizations cause problems, change them to -O0 (the default) */ +#pragma GCC optimize("-Ofast") + +/* If during compilation the line below causes a + "fatal error: arduinoJson.h: No such file or directory" + message to occur; it means that you do NOT have the + ArduinoJSON library installed. To install it, + go to the below link and follow the instructions: + https://github.com/revoxhere/duino-coin/issues/832 */ +#include + +#if defined(ESP8266) + #include + #include + #include + #include +#else + #include + #include + #include + #include + #include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "MiningJob.h" +#include "Settings.h" + +#ifdef USE_LAN + #include +#endif + +#if defined(WEB_DASHBOARD) + #include "Dashboard.h" +#endif + +#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + #include "DisplayHal.h" +#endif + +#if !defined(ESP8266) && defined(DISABLE_BROWNOUT) + #include "soc/soc.h" + #include "soc/rtc_cntl_reg.h" +#endif + +// Auto adjust physical core count +// (ESP32-S2/C3 have 1 core, ESP32 has 2 cores, ESP8266 has 1 core) +#if defined(ESP8266) + #define CORE 1 + typedef ESP8266WebServer WebServer; +#elif defined(CONFIG_FREERTOS_UNICORE) + #define CORE 1 +#else + #define CORE 2 + // Install TridentTD_EasyFreeRTOS32 if you get an error + #include + + void Task1Code( void * parameter ); + void Task2Code( void * parameter ); + TaskHandle_t Task1; + TaskHandle_t Task2; +#endif + +#if defined(WEB_DASHBOARD) + WebServer server(80); +#endif + +#if defined(CAPTIVE_PORTAL) + #include // This needs to be first, or it all crashes and burns... + #include + #include + char duco_username[40]; + char duco_password[40]; + char duco_rigid[24]; + WiFiManager wifiManager; + Preferences preferences; + WiFiManagerParameter custom_duco_username("duco_usr", "Duino-Coin username", duco_username, 40); + WiFiManagerParameter custom_duco_password("duco_pwd", "Duino-Coin mining key (if enabled in the wallet)", duco_password, 40); + WiFiManagerParameter custom_duco_rigid("duco_rig", "Custom miner identifier (optional)", duco_rigid, 24); + + void saveConfigCallback() { + preferences.begin("duino_config", false); + preferences.putString("duco_username", custom_duco_username.getValue()); + preferences.putString("duco_password", custom_duco_password.getValue()); + preferences.putString("duco_rigid", custom_duco_rigid.getValue()); + preferences.end(); + RestartESP("Settings saved"); + } + + void reset_settings() { + server.send(200, "text/html", "Settings have been erased. Please redo the configuration by connecting to the WiFi network that will be created"); + delay(500); + wifiManager.resetSettings(); + RestartESP("Manual settings reset"); + } + + void saveParamCallback(){ + Serial.println("[CALLBACK] saveParamCallback fired"); + Serial.println("PARAM customfieldid = " + getParam("customfieldid")); + } + + String getParam(String name){ + //read parameter from server, for customhmtl input + String value; + if(wifiManager.server->hasArg(name)) { + value = wifiManager.server->arg(name); + } + return value; + } +#endif + +void RestartESP(String msg) { + #if defined(SERIAL_PRINTING) + Serial.println(msg); + Serial.println("Restarting ESP..."); + #endif + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + display_info("Restarting ESP..."); + #endif + + #if defined(ESP8266) + ESP.reset(); + #else + ESP.restart(); + abort(); + #endif +} + +#if defined(BLUSHYBOX) + Ticker blinker; + bool lastLedState = false; + void changeState() { + analogWrite(LED_BUILTIN, lastLedState ? 255 : 0); + lastLedState = !lastLedState; + } +#endif + +#if defined(ESP8266) + // WDT Loop + // See lwdtcb() and lwdtFeed() below + Ticker lwdTimer; + + unsigned long lwdCurrentMillis = 0; + unsigned long lwdTimeOutMillis = LWD_TIMEOUT; + + void ICACHE_RAM_ATTR lwdtcb(void) { + if ((millis() - lwdCurrentMillis > LWD_TIMEOUT) || (lwdTimeOutMillis - lwdCurrentMillis != LWD_TIMEOUT)) + RestartESP("Loop WDT Failed!"); + } + + void lwdtFeed(void) { + lwdCurrentMillis = millis(); + lwdTimeOutMillis = lwdCurrentMillis + LWD_TIMEOUT; + } +#else + void lwdtFeed(void) { + Serial.println("lwdtFeed()"); + } +#endif + +namespace { + MiningConfig *configuration = new MiningConfig( + DUCO_USER, + RIG_IDENTIFIER, + MINER_KEY + ); + + #if defined(ESP32) && CORE == 2 + EasyMutex mutexClientData, mutexConnectToServer; + #endif + + #ifdef USE_LAN + static bool eth_connected = false; + #endif + + void UpdateHostPort(String input) { + // Thanks @ricaun for the code + DynamicJsonDocument doc(256); + deserializeJson(doc, input); + const char *name = doc["name"]; + + configuration->host = doc["ip"].as().c_str(); + configuration->port = doc["port"].as(); + node_id = String(name); + + #if defined(SERIAL_PRINTING) + Serial.println("Poolpicker selected the best mining node: " + node_id); + #endif + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + display_info(node_id); + #endif + } + + void VerifyWifi() { + #ifdef USE_LAN + while ((!eth_connected) || (ETH.localIP() == IPAddress(0, 0, 0, 0))) { + #if defined(SERIAL_PRINTING) + Serial.println("Ethernet connection lost. Reconnect..." ); + #endif + SetupWifi(); + } + #else + while (WiFi.status() != WL_CONNECTED + || WiFi.localIP() == IPAddress(0, 0, 0, 0) + || WiFi.localIP() == IPAddress(192, 168, 4, 2) + || WiFi.localIP() == IPAddress(192, 168, 4, 3)) { + #if defined(SERIAL_PRINTING) + Serial.println("WiFi reconnecting..."); + #endif + WiFi.disconnect(); + delay(500); + WiFi.reconnect(); + delay(500); + } + #endif + } + + String httpGetString(String URL) { + String payload = ""; + + WiFiClientSecure client; + HTTPClient https; + client.setInsecure(); + + https.begin(client, URL); + https.addHeader("Accept", "*/*"); + + int httpCode = https.GET(); + #if defined(SERIAL_PRINTING) + Serial.printf("HTTP Response code: %d\n", httpCode); + #endif + + if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { + payload = https.getString(); + } else { + #if defined(SERIAL_PRINTING) + Serial.printf("Error fetching node from poolpicker: %s\n", https.errorToString(httpCode).c_str()); + VerifyWifi(); + #endif + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + display_info(https.errorToString(httpCode)); + #endif + } + https.end(); + return payload; + } + + void SelectNode() { + String input = ""; + int waitTime = 1; + int poolIndex = 0; + + while (input == "") { + #if defined(SERIAL_PRINTING) + Serial.println("Fetching mining node from the poolpicker in " + String(waitTime) + "s"); + #endif + delay(waitTime * 1000); + + input = httpGetString("https://server.duinocoin.com/getPool"); + + // Increase wait time till a maximum of 32 seconds + // (addresses: Limit connection requests on failure in ESP boards #1041) + waitTime *= 2; + if (waitTime > 32) + RestartESP("Node fetch unavailable"); + } + + UpdateHostPort(input); + } + + #ifdef USE_LAN + void WiFiEvent(WiFiEvent_t event) { + switch (event) { + case ARDUINO_EVENT_ETH_START: + #if defined(SERIAL_PRINTING) + Serial.println("ETH Started"); + #endif + // The hostname must be set after the interface is started, but needs + // to be set before DHCP, so set it from the event handler thread. + ETH.setHostname("esp32-ethernet"); + break; + case ARDUINO_EVENT_ETH_CONNECTED: + #if defined(SERIAL_PRINTING) + Serial.println("ETH Connected"); + #endif + break; + case ARDUINO_EVENT_ETH_GOT_IP: + #if defined(SERIAL_PRINTING) + Serial.println("ETH Got IP"); + #endif + eth_connected = true; + break; + case ARDUINO_EVENT_ETH_DISCONNECTED: + #if defined(SERIAL_PRINTING) + Serial.println("ETH Disconnected"); + #endif + eth_connected = false; + break; + case ARDUINO_EVENT_ETH_STOP: + #if defined(SERIAL_PRINTING) + Serial.println("ETH Stopped"); + #endif + eth_connected = false; + break; + default: + break; + } + } + #endif + + void SetupWifi() { + #ifdef USE_LAN + #if defined(SERIAL_PRINTING) + Serial.println("Connecting to Ethernet..."); + #endif + WiFi.onEvent(WiFiEvent); // Will call WiFiEvent() from another thread. + ETH.begin(); + + while (!eth_connected) { + delay(500); + #if defined(SERIAL_PRINTING) + Serial.print("."); + #endif + } + + #if defined(SERIAL_PRINTING) + Serial.println("\n\nSuccessfully connected to Ethernet"); + Serial.println("Local IP address: " + ETH.localIP().toString()); + Serial.println("Rig name: " + String(RIG_IDENTIFIER)); + Serial.println(); + #endif + + #else + #if defined(SERIAL_PRINTING) + Serial.println("Connecting to: " + String(SSID)); + #endif + + WiFi.begin(SSID, PASSWORD); + while(WiFi.status() != WL_CONNECTED) { + Serial.print("."); + delay(100); + } + VerifyWifi(); + + #if !defined(ESP8266) + WiFi.config(WiFi.localIP(), WiFi.gatewayIP(), WiFi.subnetMask(), DNS_SERVER); + #endif + + #if defined(SERIAL_PRINTING) + Serial.println("\n\nSuccessfully connected to WiFi"); + Serial.println("Rig name: " + String(RIG_IDENTIFIER)); + Serial.println("Local IP address: " + WiFi.localIP().toString()); + Serial.println("Gateway: " + WiFi.gatewayIP().toString()); + Serial.println("DNS: " + WiFi.dnsIP().toString()); + Serial.println(); + #endif + + #endif + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + display_info("Waiting for node..."); + #endif + SelectNode(); + } + + void SetupOTA() { + // Prepare OTA handler + ArduinoOTA.onStart([]() + { + #if defined(SERIAL_PRINTING) + Serial.println("Start"); + #endif + }); + ArduinoOTA.onEnd([]() + { + #if defined(SERIAL_PRINTING) + Serial.println("\nEnd"); + #endif + }); + ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) + { + #if defined(SERIAL_PRINTING) + Serial.printf("Progress: %u%%\r", (progress / (total / 100))); + #endif + }); + ArduinoOTA.onError([](ota_error_t error) + { + Serial.printf("Error[%u]: ", error); + #if defined(SERIAL_PRINTING) + if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed"); + else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed"); + else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed"); + else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed"); + else if (error == OTA_END_ERROR) Serial.println("End Failed"); + #endif + }); + + ArduinoOTA.setHostname(RIG_IDENTIFIER); // Give port a name + ArduinoOTA.begin(); + } + + #if defined(WEB_DASHBOARD) + void dashboard() { + #if defined(SERIAL_PRINTING) + Serial.println("Handling HTTP client"); + #endif + String s = WEBSITE; + #ifdef USE_LAN + s.replace("@@IP_ADDR@@", ETH.localIP().toString()); + #else + s.replace("@@IP_ADDR@@", WiFi.localIP().toString()); + #endif + + s.replace("@@HASHRATE@@", String((hashrate+hashrate_core_two) / 1000)); + s.replace("@@DIFF@@", String(difficulty / 100)); + s.replace("@@SHARES@@", String(share_count)); + s.replace("@@NODE@@", String(node_id)); + + #if defined(ESP8266) + s.replace("@@DEVICE@@", "ESP8266"); + #elif defined(CONFIG_FREERTOS_UNICORE) + s.replace("@@DEVICE@@", "ESP32-S2/C3"); + #else + s.replace("@@DEVICE@@", "ESP32"); + #endif + + s.replace("@@ID@@", String(RIG_IDENTIFIER)); + s.replace("@@MEMORY@@", String(ESP.getFreeHeap())); + s.replace("@@VERSION@@", String(SOFTWARE_VERSION)); + + #if defined(CAPTIVE_PORTAL) + s.replace("@@RESET_SETTINGS@@", "• Reset settings"); + #else + s.replace("@@RESET_SETTINGS@@", ""); + #endif + + #if defined(USE_DS18B20) + sensors.requestTemperatures(); + float temp = sensors.getTempCByIndex(0); + s.replace("@@SENSOR@@", "DS18B20: " + String(temp) + "*C"); + #elif defined(USE_DHT) + float temp = dht.readTemperature(); + float hum = dht.readHumidity(); + s.replace("@@SENSOR@@", "DHT11/22: " + String(temp) + "*C, " + String(hum) + "rh%"); + #elif defined(USE_HSU07M) + float temp = read_hsu07m(); + s.replace("@@SENSOR@@", "HSU07M: " + String(temp) + "*C"); + #elif defined(USE_INTERNAL_SENSOR) + float temp = 0; + temp_sensor_read_celsius(&temp); + s.replace("@@SENSOR@@", "CPU: " + String(temp) + "*C"); + #else + s.replace("@@SENSOR@@", "None"); + #endif + + server.send(200, "text/html", s); + } + #endif + +} // End of namespace + +MiningJob *job[CORE]; + +#if CORE == 2 + EasyFreeRTOS32 task1, task2; +#endif + +void task1_func(void *) { + #if defined(ESP32) && CORE == 2 + VOID SETUP() { } + + VOID LOOP() { + job[0]->mine(); + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; + float accept_rate = (accepted_share_count / 0.01 / share_count); + + long millisecs = millis(); + int uptime_secs = int((millisecs / 1000) % 60); + int uptime_mins = int((millisecs / (1000 * 60)) % 60); + int uptime_hours = int((millisecs / (1000 * 60 * 60)) % 24); + String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; + + float sharerate = share_count / (millisecs / 1000.0); + + display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), + String(node_id), String(difficulty / 100), String(sharerate, 1), + String(ping), String(accept_rate, 1)); + #endif + } + #endif +} + +void task2_func(void *) { + #if defined(ESP32) && CORE == 2 + VOID SETUP() { + job[1] = new MiningJob(1, configuration); + } + + VOID LOOP() { + job[1]->mine(); + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; + float accept_rate = (accepted_share_count / 0.01 / share_count); + + long millisecs = millis(); + int uptime_secs = int((millisecs / 1000) % 60); + int uptime_mins = int((millisecs / (1000 * 60)) % 60); + int uptime_hours = int((millisecs / (1000 * 60 * 60)) % 24); + String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; + + float sharerate = share_count / (millisecs / 1000.0); + + display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), + String(node_id), String(difficulty / 100), String(sharerate, 1), + String(ping), String(accept_rate, 1)); + #endif + } + #endif +} + +void setup() { + #if !defined(ESP8266) && defined(DISABLE_BROWNOUT) + WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); + #endif + + #if defined(SERIAL_PRINTING) + Serial.begin(SERIAL_BAUDRATE); + Serial.println("\n\nDuino-Coin " + String(configuration->MINER_VER)); + #endif + pinMode(LED_BUILTIN, OUTPUT); + + #if defined(BLUSHYBOX) + analogWrite(LED_BUILTIN, 255); + for (int i = 255; i > 0; i--) { + analogWrite(LED_BUILTIN, i); + delay(1); + } + pinMode(GAUGE_PIN, OUTPUT); + + // Gauge up and down effect on startup + for (int i = GAUGE_MIN; i < GAUGE_MAX; i++) { + analogWrite(GAUGE_PIN, i); + delay(10); + } + for (int i = GAUGE_MAX; i > GAUGE_MIN; i--) { + analogWrite(GAUGE_PIN, i); + delay(10); + } + #endif + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + screen_setup(); + display_boot(); + + #endif + + assert(CORE == 1 || CORE == 2); + WALLET_ID = String(random(0, 2811)); // Needed for miner grouping in the wallet + job[0] = new MiningJob(0, configuration); + + #if defined(USE_DHT) + #if defined(SERIAL_PRINTING) + Serial.println("Initializing DHT sensor (Duino IoT)"); + #endif + dht.begin(); + #if defined(SERIAL_PRINTING) + Serial.println("Test reading: " + String(dht.readHumidity()) + "% humidity"); + Serial.println("Test reading: temperature " + String(dht.readTemperature()) + "°C"); + #endif + #endif + + #if defined(USE_DS18B20) + #if defined(SERIAL_PRINTING) + Serial.println("Initializing DS18B20 sensor (Duino IoT)"); + #endif + sensors.begin(); + sensors.requestTemperatures(); + #if defined(SERIAL_PRINTING) + Serial.println("Test reading: " + String(sensors.getTempCByIndex(0)) + "°C"); + #endif + #endif + + #if defined(USE_HSU07M) + #if defined(SERIAL_PRINTING) + Serial.println("Initializing HSU07M sensor (Duino IoT)"); + Serial.println("Test reading: " + String(read_hsu07m()) + "°C"); + #endif + #endif + + #if defined(USE_INTERNAL_SENSOR) + #if defined(SERIAL_PRINTING) + Serial.println("Initializing internal ESP32 temperature sensor (Duino IoT)"); + #endif + temp_sensor_config_t temp_sensor = TSENS_CONFIG_DEFAULT(); + temp_sensor.dac_offset = TSENS_DAC_L2; + temp_sensor_set_config(temp_sensor); + temp_sensor_start(); + float result = 0; + temp_sensor_read_celsius(&result); + #if defined(SERIAL_PRINTING) + Serial.println("Test reading: " + String(result) + "°C"); + #endif + #endif + + WiFi.mode(WIFI_STA); // Setup ESP in client mode + //WiFi.disconnect(true); + #if defined(ESP8266) + WiFi.setSleepMode(WIFI_NONE_SLEEP); + #else + WiFi.setSleep(false); + #endif + + #if defined(CAPTIVE_PORTAL) + preferences.begin("duino_config", false); + strcpy(duco_username, preferences.getString("duco_username", "username").c_str()); + strcpy(duco_password, preferences.getString("duco_password", "None").c_str()); + strcpy(duco_rigid, preferences.getString("duco_rigid", "None").c_str()); + preferences.end(); + configuration->DUCO_USER = duco_username; + configuration->RIG_IDENTIFIER = duco_rigid; + configuration->MINER_KEY = duco_password; + + String captivePortalHTML = R"( + Duino BlushyBox + + )"; + + wifiManager.setCustomHeadElement(captivePortalHTML.c_str()); + + wifiManager.setSaveConfigCallback(saveConfigCallback); + wifiManager.addParameter(&custom_duco_username); + wifiManager.addParameter(&custom_duco_password); + wifiManager.addParameter(&custom_duco_rigid); + + #if defined(BLUSHYBOX) + blinker.attach_ms(200, changeState); + #endif + wifiManager.autoConnect("Duino-Coin"); + delay(1000); + VerifyWifi(); + #if defined(BLUSHYBOX) + blinker.detach(); + #endif + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + display_info("Waiting for node..."); + #endif + #if defined(BLUSHYBOX) + blinker.attach_ms(500, changeState); + #endif + SelectNode(); + #if defined(BLUSHYBOX) + blinker.detach(); + #endif + #else + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + display_info("Waiting for WiFi..."); + #endif + SetupWifi(); + #endif + SetupOTA(); + + #if defined(WEB_DASHBOARD) + if (!MDNS.begin(RIG_IDENTIFIER)) { + #if defined(SERIAL_PRINTING) + Serial.println("mDNS unavailable"); + #endif + } + MDNS.addService("http", "tcp", 80); + #if defined(SERIAL_PRINTING) + #ifdef USE_LAN + Serial.println("Configured mDNS for dashboard on http://" + String(RIG_IDENTIFIER) + + ".local (or http://" + ETH.localIP().toString() + ")"); + #else + Serial.println("Configured mDNS for dashboard on http://" + String(RIG_IDENTIFIER) + + ".local (or http://" + WiFi.localIP().toString() + ")"); + #endif + #endif + + server.on("/", dashboard); + #if defined(CAPTIVE_PORTAL) + server.on("/reset", reset_settings); + #endif + server.begin(); + #endif + + #if defined(ESP8266) + // Start the WDT watchdog + lwdtFeed(); + lwdTimer.attach_ms(LWD_TIMEOUT, lwdtcb); + #endif + + #if defined(ESP8266) + // Fastest clock mode for 8266s + system_update_cpu_freq(160); + os_update_cpu_frequency(160); + // Feed the watchdog + lwdtFeed(); + #else + // Fastest clock mode for 32s + setCpuFrequencyMhz(240); + #endif + + job[0]->blink(BLINK_SETUP_COMPLETE); + + #if defined(ESP32) && CORE == 2 + mutexClientData = xSemaphoreCreateMutex(); + mutexConnectToServer = xSemaphoreCreateMutex(); + + xTaskCreatePinnedToCore(system_events_func, "system_events_func", 10000, NULL, 1, NULL, 0); + xTaskCreatePinnedToCore(task1_func, "task1_func", 10000, NULL, 1, &Task1, 0); + xTaskCreatePinnedToCore(task2_func, "task2_func", 10000, NULL, 1, &Task2, 1); + #endif +} + +void system_events_func(void* parameter) { + while (true) { + delay(10); + #if defined(WEB_DASHBOARD) + server.handleClient(); + #endif + ArduinoOTA.handle(); + } +} + +void single_core_loop() { + job[0]->mine(); + + lwdtFeed(); + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; + float accept_rate = (accepted_share_count / 0.01 / share_count); + + long millisecs = millis(); + int uptime_secs = int((millisecs / 1000) % 60); + int uptime_mins = int((millisecs / (1000 * 60)) % 60); + int uptime_hours = int((millisecs / (1000 * 60 * 60)) % 24); + String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; + + float sharerate = share_count / (millisecs / 1000.0); + + display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), + String(node_id), String(difficulty / 100), String(sharerate, 1), + String(ping), String(accept_rate, 1)); + #endif + + VerifyWifi(); + ArduinoOTA.handle(); + #if defined(WEB_DASHBOARD) + server.handleClient(); + #endif +} + +void loop() { + #if defined(ESP8266) || defined(CONFIG_FREERTOS_UNICORE) + single_core_loop(); + #endif + delay(10); +} diff --git a/ESP_Code4.3/ESP_Code/MiningJob.h b/ESP_Code4.3/ESP_Code/MiningJob.h new file mode 100644 index 00000000..bb200914 --- /dev/null +++ b/ESP_Code4.3/ESP_Code/MiningJob.h @@ -0,0 +1,423 @@ +#pragma GCC optimize("-Ofast") + +#ifndef MINING_JOB_H +#define MINING_JOB_H + +#include +#include +#include +#include +#include + +#include "DSHA1.h" +#include "Counter.h" +#include "Settings.h" + +// https://github.com/esp8266/Arduino/blob/master/cores/esp8266/TypeConversion.cpp +const char base36Chars[36] PROGMEM = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' +}; + +const uint8_t base36CharValues[75] PROGMEM{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, // 0 to 9 + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 0, 0, 0, 0, 0, 0, // Upper case letters + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 // Lower case letters +}; + +#define SPC_TOKEN ' ' +#define END_TOKEN '\n' +#define SEP_TOKEN ',' +#define IOT_TOKEN '@' + +struct MiningConfig { + String host = ""; + int port = 0; + String DUCO_USER = ""; + String RIG_IDENTIFIER = ""; + String MINER_KEY = ""; + String MINER_VER = SOFTWARE_VERSION; + #if defined(ESP8266) + // "High-band" 8266 diff + String START_DIFF = "ESP8266H"; + #elif defined(CONFIG_FREERTOS_UNICORE) + // Single core 32 diff + String START_DIFF = "ESP32S"; + #else + // Normal 32 diff + String START_DIFF = "ESP32"; + #endif + + MiningConfig(String DUCO_USER, String RIG_IDENTIFIER, String MINER_KEY) + : DUCO_USER(DUCO_USER), RIG_IDENTIFIER(RIG_IDENTIFIER), MINER_KEY(MINER_KEY) {} +}; + +class MiningJob { + +public: + MiningConfig *config; + int core = 0; + + MiningJob(int core, MiningConfig *config) { + this->core = core; + this->config = config; + this->client_buffer = ""; + dsha1 = new DSHA1(); + dsha1->warmup(); + generateRigIdentifier(); + } + + void blink(uint8_t count, uint8_t pin = LED_BUILTIN) { + #if defined(LED_BLINKING) + uint8_t state = HIGH; + + for (int x = 0; x < (count << 1); ++x) { + digitalWrite(pin, state ^= HIGH); + delay(50); + } + #else + digitalWrite(LED_BUILTIN, HIGH); + #endif + } + + bool max_micros_elapsed(unsigned long current, unsigned long max_elapsed) { + static unsigned long _start = 0; + + if ((current - _start) > max_elapsed) { + _start = current; + return true; + } + return false; + } + + void handleSystemEvents(void) { + #if defined(ESP32) && CORE == 2 + esp_task_wdt_reset(); + #endif + delay(10); // Required vTaskDelay by ESP-IDF + yield(); + ArduinoOTA.handle(); + } + + void mine() { + connectToNode(); + askForJob(); + + dsha1->reset().write((const unsigned char *)getLastBlockHash().c_str(), getLastBlockHash().length()); + + int start_time = micros(); + max_micros_elapsed(start_time, 0); + #if defined(LED_BLINKING) + #if defined(BLUSHYBOX) + for (int i = 0; i < 72; i++) { + analogWrite(LED_BUILTIN, i); + delay(1); + } + #else + digitalWrite(LED_BUILTIN, LOW); + #endif + #endif + for (Counter<10> counter; counter < difficulty; ++counter) { + DSHA1 ctx = *dsha1; + ctx.write((const unsigned char *)counter.c_str(), counter.strlen()).finalize(hashArray); + + #ifndef CONFIG_FREERTOS_UNICORE + #if defined(ESP32) + #define SYSTEM_TIMEOUT 100000 // 10ms for esp32 looks like the lowest value without false watchdog triggers + #else + #define SYSTEM_TIMEOUT 500000 // 50ms for 8266 for same reason as above + #endif + if (max_micros_elapsed(micros(), SYSTEM_TIMEOUT)) { + handleSystemEvents(); + } + #endif + + if (memcmp(getExpectedHash(), hashArray, 20) == 0) { + unsigned long elapsed_time = micros() - start_time; + float elapsed_time_s = elapsed_time * .000001f; + share_count++; + + #if defined(LED_BLINKING) + #if defined(BLUSHYBOX) + for (int i = 72; i > 0; i--) { + analogWrite(LED_BUILTIN, i); + delay(1); + } + #else + digitalWrite(LED_BUILTIN, HIGH); + #endif + #endif + + if (String(core) == "0") { + hashrate = counter / elapsed_time_s; + submit(counter, hashrate, elapsed_time_s); + } else { + hashrate_core_two = counter / elapsed_time_s; + submit(counter, hashrate_core_two, elapsed_time_s); + } + + #if defined(BLUSHYBOX) + gauge_set(hashrate + hashrate_core_two); + #endif + + break; + } + } + } + +private: + String client_buffer; + uint8_t hashArray[20]; + String last_block_hash; + String expected_hash_str; + uint8_t expected_hash[20]; + DSHA1 *dsha1; + WiFiClient client; + String chipID = ""; + + #if defined(ESP8266) + #if defined(BLUSHYBOX) + String MINER_BANNER = "Official BlushyBox Miner (ESP8266)"; + #else + String MINER_BANNER = "Official ESP8266 Miner"; + #endif + #elif defined(CONFIG_FREERTOS_UNICORE) + String MINER_BANNER = "Official ESP32-S2 Miner"; + #else + #if defined(BLUSHYBOX) + String MINER_BANNER = "Official BlushyBox Miner (ESP32)"; + #else + String MINER_BANNER = "Official ESP32 Miner"; + #endif + #endif + + uint8_t *hexStringToUint8Array(const String &hexString, uint8_t *uint8Array, const uint32_t arrayLength) { + assert(hexString.length() >= arrayLength * 2); + const char *hexChars = hexString.c_str(); + for (uint32_t i = 0; i < arrayLength; ++i) { + uint8Array[i] = (pgm_read_byte(base36CharValues + hexChars[i * 2] - '0') << 4) + pgm_read_byte(base36CharValues + hexChars[i * 2 + 1] - '0'); + } + return uint8Array; + } + + void generateRigIdentifier() { + String AutoRigName = ""; + + #if defined(ESP8266) + chipID = String(ESP.getChipId(), HEX); + + if (strcmp(config->RIG_IDENTIFIER.c_str(), "Auto") != 0) + return; + + AutoRigName = "ESP8266-" + chipID; + AutoRigName.toUpperCase(); + config->RIG_IDENTIFIER = AutoRigName.c_str(); + #else + uint64_t chip_id = ESP.getEfuseMac(); + uint16_t chip = (uint16_t)(chip_id >> 32); // Prepare to print a 64 bit value into a char array + char fullChip[23]; + snprintf(fullChip, 23, "%04X%08X", chip, + (uint32_t)chip_id); // Store the (actually) 48 bit chip_id into a char array + + chipID = String(fullChip); + + if (strcmp(config->RIG_IDENTIFIER.c_str(), "Auto") != 0) + return; + // Autogenerate ID if required + AutoRigName = "ESP32-" + String(fullChip); + AutoRigName.toUpperCase(); + config->RIG_IDENTIFIER = AutoRigName.c_str(); + #endif + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - Rig identifier: " + + config->RIG_IDENTIFIER); + #endif + } + + void connectToNode() { + if (client.connected()) return; + + unsigned int stopWatch = millis(); + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - Connecting to a Duino-Coin node..."); + #endif + while (!client.connect(config->host.c_str(), config->port)) { + if (max_micros_elapsed(micros(), 100000)) { + handleSystemEvents(); + } + if (millis()-stopWatch>100000) ESP.restart(); + } + + waitForClientData(); + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - Connected. Node reported version: " + + client_buffer); + #endif + + blink(BLINK_CLIENT_CONNECT); + + /* client.print("MOTD" + END_TOKEN); + waitForClientData(); + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - MOTD: " + + client_buffer); + #endif */ + } + + void waitForClientData() { + client_buffer = ""; + + while (client.connected()) { + if (client.available()) { + client_buffer = client.readStringUntil(END_TOKEN); + if (client_buffer.length() == 1 && client_buffer[0] == END_TOKEN) + client_buffer = "???\n"; // NOTE: Should never happen + break; + } + } + } + + void submit(unsigned long counter, float hashrate, float elapsed_time_s) { + client.print(String(counter) + + SEP_TOKEN + String(hashrate) + + SEP_TOKEN + MINER_BANNER + + SPC_TOKEN + config->MINER_VER + + SEP_TOKEN + config->RIG_IDENTIFIER + + SEP_TOKEN + "DUCOID" + String(chipID) + + SEP_TOKEN + String(WALLET_ID) + + END_TOKEN); + + unsigned long ping_start = millis(); + waitForClientData(); + ping = millis() - ping_start; + + if (client_buffer == "GOOD") { + accepted_share_count++; + } + + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - " + + client_buffer + + " share #" + String(share_count) + + " (" + String(counter) + ")" + + " hashrate: " + String(hashrate / 1000, 2) + " kH/s (" + + String(elapsed_time_s) + "s)\n"); + #endif + } + + bool parse() { + // Create a non-constant copy of the input string + char *job_str_copy = strdup(client_buffer.c_str()); + + if (job_str_copy) { + String tokens[3]; + char *token = strtok(job_str_copy, ","); + for (int i = 0; token != NULL && i < 3; i++) { + tokens[i] = token; + token = strtok(NULL, ","); + } + + last_block_hash = tokens[0]; + expected_hash_str = tokens[1]; + hexStringToUint8Array(expected_hash_str, expected_hash, 20); + difficulty = tokens[2].toInt() * 100 + 1; + + // Free the memory allocated by strdup + free(job_str_copy); + + return true; + } + else { + // Handle memory allocation failure + return false; + } + } + + void askForJob() { + Serial.println("Core [" + String(core) + "] - Asking for a new job for user: " + + String(config->DUCO_USER)); + + #if defined(USE_DS18B20) + sensors.requestTemperatures(); + float temp = sensors.getTempCByIndex(0); + #if defined(SERIAL_PRINTING) + Serial.println("DS18B20 reading: " + String(temp) + "°C"); + #endif + + client.print("JOB," + + String(config->DUCO_USER) + + SEP_TOKEN + config->START_DIFF + + SEP_TOKEN + String(config->MINER_KEY) + + SEP_TOKEN + "Temp:" + String(temp) + "*C" + + END_TOKEN); + #elif defined(USE_DHT) + float temp = dht.readTemperature(); + float hum = dht.readHumidity(); + #if defined(SERIAL_PRINTING) + Serial.println("DHT reading: " + String(temp) + "°C"); + Serial.println("DHT reading: " + String(hum) + "%"); + #endif + + client.print("JOB," + + String(config->DUCO_USER) + + SEP_TOKEN + config->START_DIFF + + SEP_TOKEN + String(config->MINER_KEY) + + SEP_TOKEN + "Temp:" + String(temp) + "*C" + + IOT_TOKEN + "Hum:" + String(hum) + "%" + + END_TOKEN); + #elif defined(USE_HSU07M) + float temp = read_hsu07m(); + #if defined(SERIAL_PRINTING) + Serial.println("HSU reading: " + String(temp) + "°C"); + #endif + + client.print("JOB," + + String(config->DUCO_USER) + + SEP_TOKEN + config->START_DIFF + + SEP_TOKEN + String(config->MINER_KEY) + + SEP_TOKEN + "Temp:" + String(temp) + "*C" + + END_TOKEN); + #elif defined(USE_INTERNAL_SENSOR) + float temp = 0; + temp_sensor_read_celsius(&temp); + #if defined(SERIAL_PRINTING) + Serial.println("Internal temp sensor reading: " + String(temp) + "°C"); + #endif + + client.print("JOB," + + String(config->DUCO_USER) + + SEP_TOKEN + config->START_DIFF + + SEP_TOKEN + String(config->MINER_KEY) + + SEP_TOKEN + "CPU Temp:" + String(temp) + "*C" + + END_TOKEN); + #else + client.print("JOB," + + String(config->DUCO_USER) + + SEP_TOKEN + config->START_DIFF + + SEP_TOKEN + String(config->MINER_KEY) + + END_TOKEN); + #endif + + waitForClientData(); + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - Received job with size of " + + String(client_buffer.length()) + + " bytes " + client_buffer); + #endif + + parse(); + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - Parsed job: " + + getLastBlockHash() + " " + + getExpectedHashStr() + " " + + String(getDifficulty())); + #endif + } + + const String &getLastBlockHash() const { return last_block_hash; } + const String &getExpectedHashStr() const { return expected_hash_str; } + const uint8_t *getExpectedHash() const { return expected_hash; } + unsigned int getDifficulty() const { return difficulty; } +}; + +#endif diff --git a/ESP_Code4.3/ESP_Code/Settings.h b/ESP_Code4.3/ESP_Code/Settings.h new file mode 100644 index 00000000..b18c5660 --- /dev/null +++ b/ESP_Code4.3/ESP_Code/Settings.h @@ -0,0 +1,237 @@ +// Settings.h +#ifndef SETTINGS_H +#define SETTINGS_H + +// ---------------------- General settings ---------------------- // +// Change the part in brackets to your Duino-Coin username +extern char *DUCO_USER = "discopepereland"; +// Change the part in brackets to your mining key (if you have set it in the wallet) +extern char *MINER_KEY = "170373"; +// Change the part in brackets if you want to set a custom miner name +// Use Auto to autogenerate, None for no custom identifier +extern char *RIG_IDENTIFIER = "esp32_TT-GO"; +// Change the part in brackets to your WiFi name +extern const char SSID[] = "High_speed"; +// Change the part in brackets to your WiFi password +extern const char PASSWORD[] = "&mariagele4mai1996@"; +// -------------------------------------------------------------- // + +// -------------------- Advanced options ------------------------ // +// Uncomment if you want to host the dashboard page (available on ESPs IP address and mDNS) +// #define WEB_DASHBOARD + +// Comment out the line below if you wish to disable LED blinking +#define LED_BLINKING + +// Uncomment if you want to use LAN8720. WLAN-credentials will be ignored using LAN +// Select correct Board in ArduinoIDE!!! Really! +// #define USE_LAN + +// Comment out the line below if you wish to disable Serial printing +#define SERIAL_PRINTING + +// Edit the line below if you wish to change the serial speed (low values may reduce performance but are less prone to interference) +#define SERIAL_BAUDRATE 500000 + +// ESP8266 WDT loop watchdog. Do not edit this value, but if you must - do not set it too low or it will falsely trigger during mining! +#define LWD_TIMEOUT 30000 + +// Uncomment to disable ESP32 brownout detector if you're suffering from faulty insufficient power detection +// #define DISABLE_BROWNOUT + +// Uncomment to enable WiFiManager captive portal in AP mode +// The board will create its own network you connect to and change the settings +// #define CAPTIVE_PORTAL +// -------------------------------------------------------------- // + +// ------------------------ Displays ---------------------------- // + +// Uncomment to enable a SSD1306 OLED screen on the I2C bus to display mining info in real time +// Default connections (can be overriden by using a different u8g2 initializer, see line 140): +// GND - GND +// VCC - 5V or 3.3V depending on display +// SCL - GPIO22 (ESP32) or GPIO5 (D2 on ESP8266) or GPIO35 (ESP32-S2) +// SDA - GPIO21 (ESP32) or GPIO4 (D1 on ESP8266) or GPIO33 (ESP32-S2) +// #define DISPLAY_SSD1306 + +//uncomment to enable Lilygo tt display 1.14 module +// #define DISPLAY_114 + +// Uncomment to enable a 16x2 LCD screen on a direct bus to display mining info in real time +// See line 150 for connections and initializer +// #define DISPLAY_16X2 + +// Uncomment if your device is a Duino BlushyBox device +// #define BLUSHYBOX +// -------------------------------------------------------------- // + +// ---------------------- IoT examples -------------------------- // +// https://github.com/revoxhere/duino-coin/wiki/Duino's-take-on-the-Internet-of-Things + +// Uncomment the line below if you wish to use the internal temperature sensor (Duino IoT example) +// Only ESP32-S2, -S3, -H2, -C2, -C3, -C6 and some old models have one! +// More info: https://www.espboards.dev/blog/esp32-inbuilt-temperature-sensor/ +// NOTE: Mining performance will decrease by about 20 kH/s! +// #define USE_INTERNAL_SENSOR + +// Uncomment the line below if you wish to use a DS18B20 temperature sensor (Duino IoT example) +// NOTE: Mining performance should stay the same +// #define USE_DS18B20 + +// Uncomment the line below if you wish to use a DHT11/22 temperature and humidity sensor (Duino IoT example) +// NOTE: Mining performance should stay the same +// #define USE_DHT + +// Uncomment the line below if you wish to use a HSU07M sensor (Duino IoT Example) +// NOTE: Untested as of right now +// #define USE_HSU07M +// -------------------------------------------------------------- // + +// ---------------- Variables and definitions ------------------- // +// You generally do not need to edit stuff below this line +// unless you're know what you're doing. + +#if defined(ESP8266) + // ESP8266 + #define LED_BUILTIN 2 +#elif defined(CONFIG_FREERTOS_UNICORE) + #if defined(CONFIG_IDF_TARGET_ESP32C3) + // ESP32-C3 + #define LED_BUILTIN 8 + #else + // ESP32-S2 + #define LED_BUILTIN 15 + #endif +#else + // ESP32 + #ifndef LED_BUILTIN + #define LED_BUILTIN 2 + #endif + #if defined(BLUSHYBOX) + #define LED_BUILTIN 4 + #endif +#endif + +#define BLINK_SETUP_COMPLETE 2 +#define BLINK_CLIENT_CONNECT 5 + +#define SOFTWARE_VERSION "4.3" +extern unsigned int hashrate = 0; +extern unsigned int hashrate_core_two = 0; +extern unsigned int difficulty = 0; +extern unsigned long share_count = 0; +extern unsigned long accepted_share_count = 0; +extern String node_id = ""; +extern String WALLET_ID = ""; +extern unsigned int ping = 0; + +#if defined(USE_INTERNAL_SENSOR) + #include "driver/temp_sensor.h" +#endif + +#if defined(USE_DS18B20) + // Install OneWire and DallasTemperature libraries if you get an error + #include + #include + // Change 12 to the pin you've connected your sensor to + const int DSPIN = 12; + + OneWire oneWire(DSPIN); + DallasTemperature extern sensors(&oneWire); +#endif + +#if defined(USE_DHT) + // Install "DHT sensor library" if you get an error + #include + // Change 12 to the pin you've connected your sensor to + #define DHTPIN 12 + // Set DHT11 or DHT22 type accordingly + #define DHTTYPE DHT11 + + DHT extern dht(DHTPIN, DHTTYPE); +#endif + +#if defined(DISPLAY_SSD1306) + // Install "u8g2" if you get an error + #include + #include + // Display definition from the U8G2 library. Edit if you use a different display + // For software I2C, use ..._F_SW_I2C and define the pins in the initializer + U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); +#endif + +#if defined(DISPLAY_16X2) + #include "Wire.h" + // Install "Adafruit_LiquidCrystal" if you get an error + #include "Adafruit_LiquidCrystal.h" + + // initialize the library with the numbers of the interface pins + // RS E D4 D5 D6 D7 + Adafruit_LiquidCrystal lcd(1, 2, 3, 4, 5, 6); +#endif + +#if defined(DISPLAY_114) + // Install "lilygo lib TFT_eSPI.h" if you get an error + #include + #include + #include + // Display definition from the tft_eSPI library. Edit if you use a different display + TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h +#endif + +#if defined(USE_HSU07M) + #include "Wire.h" + #define HSU07M_ADDRESS 0x4B // Change this if your sensor has a different address + + float read_hsu07m() { + Wire.beginTransmission(HSU07M_ADDRESS); + Wire.write(0x00); + Wire.endTransmission(); + delay(100); + Wire.requestFrom(HSU07M_ADDRESS, 2); + if(Wire.available() >= 2) { + byte tempMSB = Wire.read(); + byte tempLSB = Wire.read(); + int tempRaw = (tempMSB << 8) | tempLSB; + float tempC = (tempRaw / 16.0) - 40.0; + return tempC; + } + return -1.0; + } +#endif + +#if defined(BLUSHYBOX) + #define GAUGE_PIN 5 + #define GAUGE_MAX 190 + #define GAUGE_MIN 0 + #if defined(ESP8266) + #define GAUGE_MAX_HR 80000 + #else + #define GAUGE_MAX_HR 200000 + #endif + extern float hashrate_old = 0.0; + + void gauge_set(float hashrate) { + float old = hashrate_old; + float new_val = hashrate; + + if (hashrate_old == 0) { + float delta = (new_val - old) / 50; + for (int x=0; x < 50; x++) { + analogWrite(5, map(old + x*delta, 0, GAUGE_MAX_HR, GAUGE_MIN, GAUGE_MAX) + random(0, 10)); + delay(20); + } + } else { + float delta = (new_val - old) / 10; + for (int x=0; x < 10; x++) { + analogWrite(5, map(old + x*delta, 0, GAUGE_MAX_HR, GAUGE_MIN, GAUGE_MAX) + random(0, 10)); + delay(10); + } + } + hashrate_old = hashrate; + } +#endif + +IPAddress DNS_SERVER(1, 1, 1, 1); // Cloudflare DNS server + +#endif // End of SETTINGS_H From f5c294ba60c90d87ff24e200a9da4879d1f4a6cd Mon Sep 17 00:00:00 2001 From: jpx13 Date: Fri, 23 Aug 2024 12:06:17 +0200 Subject: [PATCH 02/14] Add files via upload --- ESP_Code4.3/ESP_Code/Settings.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ESP_Code4.3/ESP_Code/Settings.h b/ESP_Code4.3/ESP_Code/Settings.h index b18c5660..86ce1270 100644 --- a/ESP_Code4.3/ESP_Code/Settings.h +++ b/ESP_Code4.3/ESP_Code/Settings.h @@ -4,16 +4,16 @@ // ---------------------- General settings ---------------------- // // Change the part in brackets to your Duino-Coin username -extern char *DUCO_USER = "discopepereland"; +extern char *DUCO_USER = "your username"; // Change the part in brackets to your mining key (if you have set it in the wallet) -extern char *MINER_KEY = "170373"; +extern char *MINER_KEY = "your key"; // Change the part in brackets if you want to set a custom miner name // Use Auto to autogenerate, None for no custom identifier extern char *RIG_IDENTIFIER = "esp32_TT-GO"; // Change the part in brackets to your WiFi name -extern const char SSID[] = "High_speed"; +extern const char SSID[] = "your ssid"; // Change the part in brackets to your WiFi password -extern const char PASSWORD[] = "&mariagele4mai1996@"; +extern const char PASSWORD[] = "your wifi pass"; // -------------------------------------------------------------- // // -------------------- Advanced options ------------------------ // From df84a6f6180bdaf0609059481bf77841b9b99f8b Mon Sep 17 00:00:00 2001 From: jpx13 Date: Sat, 24 Aug 2024 10:45:43 +0200 Subject: [PATCH 03/14] New revision for ESP32 tt-go 1.14 added handleSystemEvents to core 1 and core 2 as suggested Also added the User_Setuo.h for the tft_eSPI library --- ESP_Code/DisplayHal.h | 789 ++++++++++++-------- ESP_Code/ESP_Code.ino | 1656 +++++++++++++++++++++-------------------- ESP_Code/MiningJob.h | 846 ++++++++++----------- ESP_Code/Settings.h | 464 ++++++------ ESP_Code/User_Setup.h | 391 ++++++++++ 5 files changed, 2385 insertions(+), 1761 deletions(-) create mode 100644 ESP_Code/User_Setup.h diff --git a/ESP_Code/DisplayHal.h b/ESP_Code/DisplayHal.h index dfde2490..b8e46fa3 100644 --- a/ESP_Code/DisplayHal.h +++ b/ESP_Code/DisplayHal.h @@ -1,296 +1,493 @@ -// Abstraction layer for handling various types of screens -// See Settings.h for enabling the screen of your choice -#ifndef DISPLAY_HAL_H -#define DISPLAY_HAL_H - -// Abstraction layer: custom fonts, images, etc. -#if defined(DISPLAY_SSD1306) - static const unsigned char image_check_contour_bits[] U8X8_PROGMEM = {0x00,0x04,0x00,0x0a,0x04,0x11,0x8a,0x08,0x51,0x04,0x22,0x02,0x04,0x01,0x88,0x00,0x50,0x00,0x20,0x00}; - static const unsigned char image_network_1_bar_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x50,0x00,0x50,0x00,0x50,0x00,0x57,0x00,0x55,0x00,0x55,0x00,0x55,0x70,0x55,0x50,0x55,0x50,0x55,0x50,0x55,0x57,0x55,0x57,0x55,0x77,0x77,0x00,0x00}; - static const unsigned char image_network_2_bars_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x50,0x00,0x50,0x00,0x50,0x00,0x57,0x00,0x55,0x00,0x55,0x00,0x55,0x70,0x55,0x70,0x55,0x70,0x55,0x70,0x55,0x77,0x55,0x77,0x55,0x77,0x77,0x00,0x00}; - static const unsigned char image_network_3_bars_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x50,0x00,0x50,0x00,0x50,0x00,0x57,0x00,0x57,0x00,0x57,0x00,0x57,0x70,0x57,0x70,0x57,0x70,0x57,0x70,0x57,0x77,0x57,0x77,0x57,0x77,0x77,0x00,0x00}; - static const unsigned char image_network_4_bars_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x77,0x00,0x77,0x00,0x77,0x00,0x77,0x70,0x77,0x70,0x77,0x70,0x77,0x70,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x00,0x00}; - static const unsigned char image_duco_logo_bits[] U8X8_PROGMEM = {0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0xff,0x00,0xc0,0x01,0x9f,0x01,0x20,0x01,0x20,0x01,0x20,0x01,0x9f,0x01,0xc0,0x01,0xff,0x00,0x7f,0x00}; - static const unsigned char image_duco_logo_big_bits[] U8X8_PROGMEM = {0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x01,0x00,0x00,0xfc,0xff,0xff,0x0f,0x00,0x00,0xfc,0xff,0xff,0x3f,0x00,0x00,0xfc,0xff,0xff,0x7f,0x00,0x00,0xfc,0xff,0xff,0xff,0x00,0x00,0xfc,0xff,0xff,0xff,0x01,0x00,0xfc,0xff,0xff,0xff,0x03,0x00,0xf8,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xfe,0x0f,0x00,0xfc,0xff,0x03,0xf8,0x0f,0x00,0xfc,0xff,0x0f,0xf0,0x1f,0x00,0xfc,0xff,0x1f,0xe0,0x1f,0x00,0xfc,0xff,0x3f,0xe0,0x3f,0x00,0xfc,0xff,0x7f,0xc0,0x3f,0x00,0xfc,0xff,0xff,0xc0,0x7f,0x00,0xf8,0xff,0xff,0x80,0x7f,0x00,0x00,0x00,0xfe,0x80,0x7f,0x00,0x00,0x00,0xfc,0x81,0x7f,0x00,0x00,0x00,0xfc,0x01,0x7f,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x81,0x7f,0x00,0x00,0x00,0xfe,0x81,0x7f,0x00,0x00,0x80,0xff,0x80,0x7f,0x00,0xfc,0xff,0xff,0xc0,0x7f,0x00,0xfc,0xff,0xff,0xc0,0x7f,0x00,0xfc,0xff,0x7f,0xe0,0x3f,0x00,0xfc,0xff,0x3f,0xf0,0x3f,0x00,0xfc,0xff,0x1f,0xf8,0x1f,0x00,0xfc,0xff,0x0f,0xfc,0x1f,0x00,0xf8,0xff,0x01,0xfe,0x0f,0x00,0x00,0x00,0xc0,0xff,0x0f,0x00,0xfc,0xff,0xff,0xff,0x07,0x00,0xfc,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0x01,0x00,0xfc,0xff,0xff,0xff,0x00,0x00,0xfc,0xff,0xff,0x7f,0x00,0x00,0xfc,0xff,0xff,0x1f,0x00,0x00,0xfc,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -#endif - -#if defined(DISPLAY_16X2) - static byte duco_logo[] = {0x1E, 0x01, 0x1D, 0x05, 0x1D, 0x01, 0x1E, 0x00}; - static byte check_mark[] = {0x00, 0x00, 0x00, 0x01, 0x02,0x14, 0x08, 0x00}; - static byte kh[] = {0x08, 0x0A, 0x0C, 0x0A, 0x00, 0x0A, 0x0E, 0x0A}; - static byte msec[] = {0x0A, 0x15, 0x11, 0x06, 0x08, 0x04, 0x02, 0x0C}; -#endif - - #if defined(DISPLAY_SSD1306) - void drawStrMultiline(const char *msg, int xloc, int yloc) { - //https://github.com/olikraus/u8g2/discussions/1479 - int dspwidth = u8g2.getDisplayWidth(); - int strwidth = 0; - char glyph[2]; glyph[1] = 0; - - for (const char *ptr = msg, *lastblank = NULL; *ptr; ++ptr) { - while (xloc == 0 && *msg == ' ') - if (ptr == msg++) ++ptr; - - glyph[0] = *ptr; - strwidth += u8g2.getStrWidth(glyph); - if (*ptr == ' ') lastblank = ptr; - else ++strwidth; - - if (xloc + strwidth > dspwidth) { - int starting_xloc = xloc; - while (msg < (lastblank ? lastblank : ptr)) { - glyph[0] = *msg++; - xloc += u8g2.drawStr(xloc, yloc, glyph); - } - - strwidth -= xloc - starting_xloc; - yloc += u8g2.getMaxCharHeight(); - xloc = 0; lastblank = NULL; - } - } - while (*msg) { - glyph[0] = *msg++; - xloc += u8g2.drawStr(xloc, yloc, glyph); - } - } -#endif - -#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) - void screen_setup() { - // Ran during setup() - // Abstraction layer: screen initialization - - #if defined(DISPLAY_SSD1306) - u8g2.begin(); - u8g2.clearBuffer(); - u8g2.setFontMode(1); - u8g2.setBitmapMode(1); - u8g2.sendBuffer(); - #endif - - #if defined(DISPLAY_16X2) - lcd.begin(16, 2); - lcd.createChar(0, duco_logo); - lcd.createChar(1, check_mark); - lcd.createChar(2, kh); - lcd.createChar(3, msec); - lcd.home(); - lcd.clear(); - #endif - } - - - void display_boot() { - // Abstraction layer: compilation time, features, etc. - - #if defined(DISPLAY_16X2) - lcd.clear(); - #if defined(ESP8266) - lcd.print("ESP8266 "); - #elif defined(CONFIG_FREERTOS_UNICORE) - lcd.print("ESP32S2 "); - #else - lcd.print("ESP32 "); - #endif - #if defined(ESP8266) - lcd.print(String(ESP.getCpuFreqMHz()).c_str()); - #else - lcd.print(String(getCpuFrequencyMhz()).c_str()); - #endif - lcd.print(" MHz"); - - lcd.setCursor(0, 1); - lcd.print(__DATE__); - #endif - - #if defined(DISPLAY_SSD1306) - u8g2.clearBuffer(); - - u8g2.setFont(u8g2_font_profont15_tr); - u8g2.setCursor(2, 13); - #if defined(ESP8266) - u8g2.print("ESP8266 "); - #elif defined(CONFIG_FREERTOS_UNICORE) - u8g2.print("ESP32S2/C3 "); - #else - u8g2.print("ESP32 "); - #endif - - #if defined(ESP8266) - u8g2.print(String(ESP.getCpuFreqMHz()).c_str()); - #else - u8g2.print(String(getCpuFrequencyMhz()).c_str()); - #endif - u8g2.print(" MHz"); - - u8g2.setFont(u8g2_font_profont10_tr); - u8g2.drawLine(1, 27, 126, 27); - u8g2.setCursor(2, 24); - u8g2.print("Compiled "); - u8g2.print(__DATE__); - - - u8g2.drawStr(2, 37, "Features:"); - u8g2.setCursor(2, 46); - String features_str = "OTA "; - #if defined(USE_LAN) - features_str += "LAN "; - #endif - #if defined(LED_BLINKING) - features_str += "Blink "; - #endif - #if defined(SERIAL_PRINTING) - features_str += "Serial "; - #endif - #if defined(WEB_DASHBOARD) - features_str += "Webserver "; - #endif - #if defined(DISPLAY_16X2) - features_str += "LCD16X2 "; - #endif - #if defined(DISPLAY_SSD1306) - features_str += "SSD1306 "; - #endif - #if defined(USE_INTERNAL_SENSOR) - features_str += "Int. sensor "; - #endif - #if defined(USE_DS18B20) - features_str += "DS18B20 "; - #endif - #if defined(USE_DHT) - features_str += "DHT "; - #endif - #if defined(USE_HSU07M) - features_str += "HSU07M "; - #endif - drawStrMultiline(features_str.c_str(), 2, 46); - u8g2.sendBuffer(); - #endif - } - - void display_info(String message) { - // Abstraction layer: info screens (setups) - - #if defined(DISPLAY_SSD1306) - u8g2.clearBuffer(); - u8g2.drawXBMP(-1, 3, 41, 45, image_duco_logo_big_bits); - u8g2.setFont(u8g2_font_t0_16b_tr); - #if defined(ESP8266) - u8g2.drawStr(42, 27, "ESP8266"); - #elif defined(CONFIG_FREERTOS_UNICORE) - u8g2.drawStr(42, 27, "ESP32S2/C3"); - #else - u8g2.drawStr(42, 27, "ESP32"); - #endif - u8g2.setFont(u8g2_font_t0_13b_tr); - u8g2.drawStr(41, 14, "Duino-Coin"); - u8g2.setFont(u8g2_font_6x10_tr); - u8g2.drawStr(98, 36, "MINER"); - u8g2.setFont(u8g2_font_6x13_tr); - u8g2.drawStr(1, 60, message.c_str()); - u8g2.setFont(u8g2_font_5x8_tr); - u8g2.drawStr(42, 46, "www.duinocoin.com"); - u8g2.setFont(u8g2_font_4x6_tr); - u8g2.drawStr(116, 14, String(SOFTWARE_VERSION).c_str()); - u8g2.sendBuffer(); - #endif - - #if defined(DISPLAY_16X2) - lcd.clear(); - lcd.setCursor(0, 0); - lcd.write(0); - lcd.print(" Duino-Coin "); - lcd.print(SOFTWARE_VERSION); - lcd.setCursor(0, 1); - lcd.print(message); - #endif - } - - - void display_mining_results(String hashrate, String accepted_shares, String total_shares, String uptime, String node, - String difficulty, String sharerate, String ping, String accept_rate) { - // Ran after each found share - // Abstraction layer: displaying mining results - Serial.println("Displaying mining results"); - - #if defined(DISPLAY_SSD1306) - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_profont10_tr); - u8g2.drawStr(67, 26, "kH"); - if (hashrate.toFloat() < 100.0) { - u8g2.setFont(u8g2_font_profont29_tr); - u8g2.drawStr(2, 36, hashrate.c_str()); - } else { - u8g2.setFont(u8g2_font_profont22_tr); - u8g2.drawStr(3, 35, hashrate.c_str()); - } - - u8g2.setFont(u8g2_font_haxrcorp4089_tr); - u8g2.drawStr(52, 12, node.c_str()); - - u8g2.setFont(u8g2_font_t0_11_tr); - u8g2.drawStr(17, 47, (accepted_shares + "/" + total_shares).c_str()); - u8g2.setFont(u8g2_font_5x7_tr); - u8g2.drawStr(88, 47, ("(" + accept_rate + "%)").c_str()); - - u8g2.setFont(u8g2_font_profont12_tr); - u8g2.drawStr(20, 12, (ping + "ms").c_str()); - u8g2.drawStr(69, 36, "s"); - - u8g2.setFont(u8g2_font_6x13_tr); - u8g2.drawStr(125-u8g2.getStrWidth(uptime.c_str()), 61, uptime.c_str()); - - u8g2.drawStr(85, 38, sharerate.c_str()); - u8g2.drawStr(85, 27, difficulty.c_str()); - u8g2.drawLine(67, 28, 75, 28); - - u8g2.drawXBMP(2, 38, 13, 10, image_check_contour_bits); - - if (WiFi.RSSI() > -40) { - u8g2.drawXBMP(1, 0, 15, 16, image_network_4_bars_bits); - } else if (WiFi.RSSI() > -60) { - u8g2.drawXBMP(1, 0, 15, 16, image_network_3_bars_bits); - } else if (WiFi.RSSI() > -75) { - u8g2.drawXBMP(1, 0, 15, 16, image_network_2_bars_bits); - } else { - u8g2.drawXBMP(1, 0, 15, 16, image_network_1_bar_bits); - } - - u8g2.setFont(u8g2_font_4x6_tr); - u8g2.drawStr(14, 61, String(WiFi.localIP().toString()).c_str()); - u8g2.drawStr(14, 55, ("Duino-Coin " + String(SOFTWARE_VERSION)).c_str()); - u8g2.drawXBMP(2, 11, 9, 50, image_duco_logo_bits); - u8g2.drawStr(111, 27, "diff"); - u8g2.drawStr(107, 38, "shr/s"); - - u8g2.sendBuffer(); - #endif - - #if defined(DISPLAY_16X2) - lcd.clear(); - lcd.setCursor(0,0); - lcd.print(hashrate); - lcd.setCursor(4,0); - lcd.write(2); // kh - - lcd.setCursor(7, 0); - lcd.print(difficulty); - lcd.print(" diff"); - - lcd.setCursor(0, 1); - lcd.write(1); // checkmark - lcd.print(accepted_shares); - - lcd.setCursor(7, 1); - lcd.print(ping); - lcd.write(3); // ms - - lcd.setCursor(12, 1); - lcd.print(sharerate); - lcd.print("s"); - #endif - } -#endif - -#endif +// Abstraction layer for handling various types of screens +// See Settings.h for enabling the screen of your choice +#ifndef DISPLAY_HAL_H +#define DISPLAY_HAL_H + +// Abstraction layer: custom fonts, images, etc. +#if defined(DISPLAY_SSD1306) + static const unsigned char image_check_contour_bits[] U8X8_PROGMEM = {0x00,0x04,0x00,0x0a,0x04,0x11,0x8a,0x08,0x51,0x04,0x22,0x02,0x04,0x01,0x88,0x00,0x50,0x00,0x20,0x00}; + static const unsigned char image_network_1_bar_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x50,0x00,0x50,0x00,0x50,0x00,0x57,0x00,0x55,0x00,0x55,0x00,0x55,0x70,0x55,0x50,0x55,0x50,0x55,0x50,0x55,0x57,0x55,0x57,0x55,0x77,0x77,0x00,0x00}; + static const unsigned char image_network_2_bars_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x50,0x00,0x50,0x00,0x50,0x00,0x57,0x00,0x55,0x00,0x55,0x00,0x55,0x70,0x55,0x70,0x55,0x70,0x55,0x70,0x55,0x77,0x55,0x77,0x55,0x77,0x77,0x00,0x00}; + static const unsigned char image_network_3_bars_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x50,0x00,0x50,0x00,0x50,0x00,0x57,0x00,0x57,0x00,0x57,0x00,0x57,0x70,0x57,0x70,0x57,0x70,0x57,0x70,0x57,0x77,0x57,0x77,0x57,0x77,0x77,0x00,0x00}; + static const unsigned char image_network_4_bars_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x77,0x00,0x77,0x00,0x77,0x00,0x77,0x70,0x77,0x70,0x77,0x70,0x77,0x70,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x00,0x00}; + static const unsigned char image_duco_logo_bits[] U8X8_PROGMEM = {0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0xff,0x00,0xc0,0x01,0x9f,0x01,0x20,0x01,0x20,0x01,0x20,0x01,0x9f,0x01,0xc0,0x01,0xff,0x00,0x7f,0x00}; + static const unsigned char image_duco_logo_big_bits[] U8X8_PROGMEM = {0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x01,0x00,0x00,0xfc,0xff,0xff,0x0f,0x00,0x00,0xfc,0xff,0xff,0x3f,0x00,0x00,0xfc,0xff,0xff,0x7f,0x00,0x00,0xfc,0xff,0xff,0xff,0x00,0x00,0xfc,0xff,0xff,0xff,0x01,0x00,0xfc,0xff,0xff,0xff,0x03,0x00,0xf8,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xfe,0x0f,0x00,0xfc,0xff,0x03,0xf8,0x0f,0x00,0xfc,0xff,0x0f,0xf0,0x1f,0x00,0xfc,0xff,0x1f,0xe0,0x1f,0x00,0xfc,0xff,0x3f,0xe0,0x3f,0x00,0xfc,0xff,0x7f,0xc0,0x3f,0x00,0xfc,0xff,0xff,0xc0,0x7f,0x00,0xf8,0xff,0xff,0x80,0x7f,0x00,0x00,0x00,0xfe,0x80,0x7f,0x00,0x00,0x00,0xfc,0x81,0x7f,0x00,0x00,0x00,0xfc,0x01,0x7f,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x81,0x7f,0x00,0x00,0x00,0xfe,0x81,0x7f,0x00,0x00,0x80,0xff,0x80,0x7f,0x00,0xfc,0xff,0xff,0xc0,0x7f,0x00,0xfc,0xff,0xff,0xc0,0x7f,0x00,0xfc,0xff,0x7f,0xe0,0x3f,0x00,0xfc,0xff,0x3f,0xf0,0x3f,0x00,0xfc,0xff,0x1f,0xf8,0x1f,0x00,0xfc,0xff,0x0f,0xfc,0x1f,0x00,0xf8,0xff,0x01,0xfe,0x0f,0x00,0x00,0x00,0xc0,0xff,0x0f,0x00,0xfc,0xff,0xff,0xff,0x07,0x00,0xfc,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0x01,0x00,0xfc,0xff,0xff,0xff,0x00,0x00,0xfc,0xff,0xff,0x7f,0x00,0x00,0xfc,0xff,0xff,0x1f,0x00,0x00,0xfc,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; +#endif + +#if defined(DISPLAY_114) + static const unsigned char PROGMEM image_duco_logo_bits[] = {0xff,0xf8,0x00,0xff,0xfe,0x00,0xff,0xff,0x80,0x00,0x07,0xc0,0x00,0x03,0xe0,0x00,0x01,0xf0,0xff,0xf1,0xf0,0x00,0x18,0xf8,0x00,0x0c,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x0c,0x78,0x00,0x18,0xf0,0xff,0xf0,0xf0,0x00,0x01,0xe0,0x00,0x01,0xc0,0x00,0x07,0xc0,0xff,0xff,0x80,0xff,0xff,0x00,0xff,0xf8,0x00}; + static const unsigned char PROGMEM image_check_contour_bits[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x50,0x20,0x88,0x51,0x10,0x8a,0x20,0x44,0x40,0x20,0x80,0x11,0x00,0x0a,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_wifi_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x46,0x0c,0x40,0x88,0x02,0x20,0x10,0xe1,0x00,0x23,0x18,0x80,0x04,0x04,0x00,0x08,0x42,0x00,0x01,0xb0,0x00,0x02,0x08,0x00,0x00,0x40,0x00,0x00,0xa0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_wifi_2_bars_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x46,0x0c,0x40,0x88,0x02,0x20,0x10,0xe1,0x00,0x23,0x18,0x80,0x04,0x04,0x00,0x08,0x42,0x00,0x01,0xf0,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_wifi_3_bars_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x46,0x0c,0x40,0x88,0x02,0x20,0x10,0xe1,0x00,0x23,0xf8,0x80,0x07,0x1c,0x00,0x0c,0x46,0x00,0x05,0xf4,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_wifi_4_bars_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x47,0xbc,0x40,0x8e,0x0e,0x20,0x18,0xe3,0x00,0x33,0xf9,0x80,0x17,0x1d,0x00,0x0c,0x46,0x00,0x05,0xf4,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_wifi_5_bars_bits[] = {0x01,0xf0,0x00,0x07,0xbc,0x00,0x1e,0x0f,0x00,0x31,0xf1,0x80,0x77,0xbd,0xc0,0xce,0x0e,0x60,0x58,0xe3,0x40,0x33,0xf9,0x80,0x17,0x1d,0x00,0x0c,0x46,0x00,0x05,0xf4,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_paint_0_bits[] = {0x7f,0xff,0xff,0xf0,0x00,0x00,0x7f,0xff,0xff,0xfc,0x00,0x00,0x7f,0xff,0xff,0xff,0x00,0x00,0x7f,0xff,0xff,0xff,0x80,0x00,0x7f,0xff,0xff,0xff,0xe0,0x00,0x7f,0xff,0xff,0xff,0xf0,0x00,0x7f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x07,0xfc,0x00,0x00,0x00,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x01,0xfe,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x7f,0xff,0xff,0xc0,0x7f,0x00,0x7f,0xff,0xff,0xf0,0x3f,0x80,0x00,0x00,0x00,0x38,0x3f,0x80,0x00,0x00,0x00,0x1c,0x1f,0x80,0x00,0x00,0x00,0x0e,0x1f,0x80,0x00,0x00,0x00,0x07,0x1f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x07,0x0f,0x80,0x00,0x00,0x00,0x0e,0x1f,0x80,0x00,0x00,0x00,0x1c,0x1f,0x80,0x00,0x00,0x00,0x38,0x3f,0x80,0xff,0xff,0xff,0xf0,0x7f,0x80,0xff,0xff,0xff,0xc0,0x7f,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x0f,0xfe,0x00,0x00,0x00,0x00,0x3f,0xfc,0x00,0xff,0xff,0xff,0xff,0xf8,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0xe0,0x00,0xff,0xff,0xff,0xff,0x80,0x00,0xff,0xff,0xff,0xfe,0x00,0x00,0xff,0xff,0xff,0xf0,0x00,0x00,0xff,0xff,0xff,0xc0,0x00,0x00}; +#endif + +#if defined(DISPLAY_16X2) + static byte duco_logo[] = {0x1E, 0x01, 0x1D, 0x05, 0x1D, 0x01, 0x1E, 0x00}; + static byte check_mark[] = {0x00, 0x00, 0x00, 0x01, 0x02,0x14, 0x08, 0x00}; + static byte kh[] = {0x08, 0x0A, 0x0C, 0x0A, 0x00, 0x0A, 0x0E, 0x0A}; + static byte msec[] = {0x0A, 0x15, 0x11, 0x06, 0x08, 0x04, 0x02, 0x0C}; +#endif + + #if defined(DISPLAY_SSD1306) + void drawStrMultiline(const char *msg, int xloc, int yloc) { + //https://github.com/olikraus/u8g2/discussions/1479 + int dspwidth = u8g2.getDisplayWidth(); + int strwidth = 0; + char glyph[2]; glyph[1] = 0; + + for (const char *ptr = msg, *lastblank = NULL; *ptr; ++ptr) { + while (xloc == 0 && *msg == ' ') + if (ptr == msg++) ++ptr; + + glyph[0] = *ptr; + strwidth += u8g2.getStrWidth(glyph); + if (*ptr == ' ') lastblank = ptr; + else ++strwidth; + + if (xloc + strwidth > dspwidth) { + int starting_xloc = xloc; + while (msg < (lastblank ? lastblank : ptr)) { + glyph[0] = *msg++; + xloc += u8g2.drawStr(xloc, yloc, glyph); + } + + strwidth -= xloc - starting_xloc; + yloc += u8g2.getMaxCharHeight(); + xloc = 0; lastblank = NULL; + } + } + while (*msg) { + glyph[0] = *msg++; + xloc += u8g2.drawStr(xloc, yloc, glyph); + } + } +#endif + +#if defined(DISPLAY_114) + void drawStrMultiline(const char *msg, int xloc, int yloc) { + //https://github.com/olikraus/u8g2/discussions/1479 + int dspwidth = 240; + int strwidth = 0; + char glyph[2]; glyph[1] = 0; + + for (const char *ptr = msg, *lastblank = NULL; *ptr; ++ptr) { + while (xloc == 0 && *msg == ' ') + if (ptr == msg++) ++ptr; + + glyph[0] = *ptr; + strwidth = 10; + if (*ptr == ' ') lastblank = ptr; + else ++strwidth; + + if (xloc + strwidth > dspwidth) { + int starting_xloc = xloc; + while (msg < (lastblank ? lastblank : ptr)) { + glyph[0] = *msg++; + xloc += tft.drawString(glyph,xloc, yloc ); + } + + strwidth -= xloc - starting_xloc; + yloc += 10; + xloc = 0; lastblank = NULL; + } + } + while (*msg) { + glyph[0] = *msg++; + xloc += tft.drawString(glyph,xloc, yloc ); + } + } +#endif + +#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + void screen_setup() { + // Ran during setup() + // Abstraction layer: screen initialization + + #if defined(DISPLAY_SSD1306) + u8g2.begin(); + u8g2.clearBuffer(); + u8g2.setFontMode(1); + u8g2.setBitmapMode(1); + u8g2.sendBuffer(); + #endif + + #if defined(DISPLAY_16X2) + lcd.begin(16, 2); + lcd.createChar(0, duco_logo); + lcd.createChar(1, check_mark); + lcd.createChar(2, kh); + lcd.createChar(3, msec); + lcd.home(); + lcd.clear(); + #endif + + #if defined(DISPLAY_114) + tft.init(); + tft.begin(); + tft.setRotation(1); + tft.fillScreen(TFT_BLACK); + + #endif + } + + + void display_boot() { + // Abstraction layer: compilation time, features, etc. + + #if defined(DISPLAY_16X2) + lcd.clear(); + #if defined(ESP8266) + lcd.print("ESP8266 "); + #elif defined(CONFIG_FREERTOS_UNICORE) + lcd.print("ESP32S2 "); + #else + lcd.print("ESP32 "); + #endif + #if defined(ESP8266) + lcd.print(String(ESP.getCpuFreqMHz()).c_str()); + #else + lcd.print(String(getCpuFrequencyMhz()).c_str()); + #endif + lcd.print(" MHz"); + + lcd.setCursor(0, 1); + lcd.print(__DATE__); + #endif + + #if defined(DISPLAY_SSD1306) + u8g2.clearBuffer(); + + u8g2.setFont(u8g2_font_profont15_tr); + u8g2.setCursor(2, 13); + #if defined(ESP8266) + u8g2.print("ESP8266 "); + #elif defined(CONFIG_FREERTOS_UNICORE) + u8g2.print("ESP32S2/C3 "); + #else + u8g2.print("ESP32 "); + #endif + + #if defined(ESP8266) + u8g2.print(String(ESP.getCpuFreqMHz()).c_str()); + #else + u8g2.print(String(getCpuFrequencyMhz()).c_str()); + #endif + u8g2.print(" MHz"); + + u8g2.setFont(u8g2_font_profont10_tr); + u8g2.drawLine(1, 27, 126, 27); + u8g2.setCursor(2, 24); + u8g2.print("Compiled "); + u8g2.print(__DATE__); + + + u8g2.drawStr(2, 37, "Features:"); + u8g2.setCursor(2, 46); + String features_str = "OTA "; + #if defined(USE_LAN) + features_str += "LAN "; + #endif + #if defined(LED_BLINKING) + features_str += "Blink "; + #endif + #if defined(SERIAL_PRINTING) + features_str += "Serial "; + #endif + #if defined(WEB_DASHBOARD) + features_str += "Webserver "; + #endif + #if defined(DISPLAY_16X2) + features_str += "LCD16X2 "; + #endif + #if defined(DISPLAY_SSD1306) + features_str += "SSD1306 "; + #endif + #if defined(USE_INTERNAL_SENSOR) + features_str += "Int. sensor "; + #endif + #if defined(USE_DS18B20) + features_str += "DS18B20 "; + #endif + #if defined(USE_DHT) + features_str += "DHT "; + #endif + #if defined(USE_HSU07M) + features_str += "HSU07M "; + #endif + drawStrMultiline(features_str.c_str(), 2, 46); + u8g2.sendBuffer(); + #endif + + #if defined(DISPLAY_114) + tft.fillScreen(TFT_BLACK); + tft.setTextColor(TFT_WHITE,TFT_BLACK); + // tft.drawBitmap(0, 3, image_duco_logo_bits, 21, 24, 0xFC00); + tft.drawBitmap(0, 4, image_paint_0_bits, 41, 51, 0xFC00); + tft.setTextSize(2); + tft.setCursor(55, 15); + #if defined(ESP8266) + tft.print("ESP8266 "); + #elif defined(CONFIG_FREERTOS_UNICORE) + tft.print("ESP32S2/C3 "); + #else + tft.print("ESP32 "); + #endif + + #if defined(ESP8266) + tft.print(String(ESP.getCpuFreqMHz()).c_str()); + #else + tft.print(String(getCpuFrequencyMhz()).c_str()); + #endif + tft.print(" MHz"); + tft.setTextSize(1); + tft.setCursor(2, 70); + tft.print("Compiled "); + tft.print(__DATE__); + + delay(2500); + + tft.drawString("Features:",2, 85,1); + String features_str = "OTA "; + #if defined(USE_LAN) + features_str += "LAN "; + #endif + #if defined(LED_BLINKING) + features_str += "Blink "; + #endif + #if defined(SERIAL_PRINTING) + features_str += "Serial "; + #endif + #if defined(WEB_DASHBOARD) + features_str += "Webserver "; + #endif + #if defined(DISPLAY_16X2) + features_str += "LCD16X2 "; + #endif + #if defined(DISPLAY_SSD1306) + features_str += "SSD1306 "; + #endif + #if defined(DISPLAY_114) + features_str += "TT-GO "; + #endif + #if defined(USE_INTERNAL_SENSOR) + features_str += "Int. sensor "; + #endif + #if defined(USE_DS18B20) + features_str += "DS18B20 "; + #endif + #if defined(USE_DHT) + features_str += "DHT "; + #endif + #if defined(USE_HSU07M) + features_str += "HSU07M "; + #endif + drawStrMultiline(features_str.c_str(), 2, 102); + delay(2500); + #endif + } + + void display_info(String message) { + // Abstraction layer: info screens (setups) + + #if defined(DISPLAY_SSD1306) + u8g2.clearBuffer(); + u8g2.drawXBMP(-1, 3, 41, 45, image_duco_logo_big_bits); + u8g2.setFont(u8g2_font_t0_16b_tr); + #if defined(ESP8266) + u8g2.drawStr(42, 27, "ESP8266 "); + #elif defined(CONFIG_FREERTOS_UNICORE) + u8g2.drawStr(42, 27, "ESP32S2/C3 "); + #else + u8g2.drawStr(42, 27, "ESP32 "); + #endif + u8g2.setFont(u8g2_font_t0_13b_tr); + u8g2.drawStr(41, 14, "Duino-Coin"); + u8g2.setFont(u8g2_font_6x10_tr); + u8g2.drawStr(98, 36, "MINER"); + u8g2.setFont(u8g2_font_6x13_tr); + u8g2.drawStr(1, 60, message.c_str()); + u8g2.setFont(u8g2_font_5x8_tr); + u8g2.drawStr(42, 46, "www.duinocoin.com"); + u8g2.setFont(u8g2_font_4x6_tr); + u8g2.drawStr(116, 14, String(SOFTWARE_VERSION).c_str()); + u8g2.sendBuffer(); + #endif + + #if defined(DISPLAY_16X2) + lcd.clear(); + lcd.setCursor(0, 0); + lcd.write(0); + lcd.print(" Duino-Coin "); + lcd.print(SOFTWARE_VERSION); + lcd.setCursor(0, 1); + lcd.print(message); + #endif + + #if defined(DISPLAY_114) + tft.fillScreen(TFT_BLACK); + tft.setTextColor(0xFFFF); + tft.setTextSize(2); + #if defined(ESP8266) + tft.drawString("ESP8266",54,24); + #elif defined(CONFIG_FREERTOS_UNICORE) + tft.drawString("ESP32S2/C3",54,24); + #else + tft.drawString("ESP32",54,24); + #endif + tft.setTextColor(0x4E04); + tft.drawString(String(SOFTWARE_VERSION).c_str(),180, 27); + tft.setTextColor(0xFFFF); + tft.drawString("Duino-Coin",14,69 ); + tft.drawString("MINER",156,69 ); + tft.setTextSize(1); + tft.drawString(message.c_str(),3,110 ); + tft.drawString("www.duinocoin.com",120,95 ); + tft.drawBitmap(0, 4, image_paint_0_bits, 41, 51, 0xFC00); + tft.drawString("Rev", 189, 8); + delay(2500); + #endif + } + + + void display_mining_results(String hashrate, String accepted_shares, String total_shares, String uptime, String node, + String difficulty, String sharerate, String ping, String accept_rate) { + // Ran after each found share + // Abstraction layer: displaying mining results + Serial.println("Displaying mining results"); + + #if defined(DISPLAY_SSD1306) + u8g2.clearBuffer(); + u8g2.setFont(u8g2_font_profont10_tr); + u8g2.drawStr(67, 26, "kH"); + if (hashrate.toFloat() < 100.0) { + u8g2.setFont(u8g2_font_profont29_tr); + u8g2.drawStr(2, 36, hashrate.c_str()); + } else { + u8g2.setFont(u8g2_font_profont22_tr); + u8g2.drawStr(3, 35, hashrate.c_str()); + } + + u8g2.setFont(u8g2_font_haxrcorp4089_tr); + u8g2.drawStr(52, 12, node.c_str()); + + u8g2.setFont(u8g2_font_t0_11_tr); + u8g2.drawStr(17, 47, (accepted_shares + "/" + total_shares).c_str()); + u8g2.setFont(u8g2_font_5x7_tr); + u8g2.drawStr(88, 47, ("(" + accept_rate + "%)").c_str()); + + u8g2.setFont(u8g2_font_profont12_tr); + u8g2.drawStr(20, 12, (ping + "ms").c_str()); + u8g2.drawStr(69, 36, "s"); + + u8g2.setFont(u8g2_font_6x13_tr); + u8g2.drawStr(125-u8g2.getStrWidth(uptime.c_str()), 61, uptime.c_str()); + + u8g2.drawStr(85, 38, sharerate.c_str()); + u8g2.drawStr(85, 27, difficulty.c_str()); + u8g2.drawLine(67, 28, 75, 28); + + u8g2.drawXBMP(2, 38, 13, 10, image_check_contour_bits); + + if (WiFi.RSSI() > -40) { + u8g2.drawXBMP(1, 0, 15, 16, image_network_4_bars_bits); + } else if (WiFi.RSSI() > -60) { + u8g2.drawXBMP(1, 0, 15, 16, image_network_3_bars_bits); + } else if (WiFi.RSSI() > -75) { + u8g2.drawXBMP(1, 0, 15, 16, image_network_2_bars_bits); + } else { + u8g2.drawXBMP(1, 0, 15, 16, image_network_1_bar_bits); + } + + u8g2.setFont(u8g2_font_4x6_tr); + u8g2.drawStr(14, 61, String(WiFi.localIP().toString()).c_str()); + u8g2.drawStr(14, 55, ("Duino-Coin " + String(SOFTWARE_VERSION)).c_str()); + u8g2.drawXBMP(2, 11, 9, 50, image_duco_logo_bits); + u8g2.drawStr(111, 27, "diff"); + u8g2.drawStr(107, 38, "shr/s"); + + u8g2.sendBuffer(); + #endif + + #if defined(DISPLAY_16X2) + lcd.clear(); + lcd.setCursor(0,0); + lcd.print(hashrate); + lcd.setCursor(4,0); + lcd.write(2); // kh + + lcd.setCursor(7, 0); + lcd.print(difficulty); + lcd.print(" diff"); + + lcd.setCursor(0, 1); + lcd.write(1); // checkmark + lcd.print(accepted_shares); + + lcd.setCursor(7, 1); + lcd.print(ping); + lcd.write(3); // ms + + lcd.setCursor(12, 1); + lcd.print(sharerate); + lcd.print("s"); + #endif + + #if defined(DISPLAY_114) + tft.fillScreen(TFT_BLACK); + tft.setTextSize(1); + tft.setTextColor(TFT_WHITE,TFT_BLACK); + tft.drawString("kH/s", 128, 45,2); + if (hashrate.toFloat() < 100.0) { + tft.setTextColor(TFT_ORANGE,TFT_BLACK); + tft.drawString(hashrate.c_str(), 1, 27,6 ); + } else { + tft.setTextColor(TFT_ORANGE,TFT_BLACK); + tft.drawString(hashrate.c_str(), 1, 27,6 ); + } + + tft.setTextColor(0x2FF2); + tft.drawString(node.c_str(),100,3,2 ); + tft.drawLine(0, 21, 240, 21, 0xFFE0); + + tft.setTextColor(0xFFFF); + tft.drawString((accepted_shares + "/" + total_shares).c_str(),21,80,2 ); + tft.drawString(("(" + accept_rate + "%)").c_str(),169, 84,1 ); + tft.drawLine(0, 70, 240, 70, 0xFFE0); + tft.drawString("Uptime", 162, 107,1); + tft.drawString((ping + "ms").c_str(),31, 3,2 ); + + tft.drawString(uptime.c_str(),150, 118,2 ); + tft.drawString(sharerate.c_str(),208, 45,2 ); + tft.drawString(difficulty.c_str(),204, 28,2 ); + + tft.drawBitmap(4, 79, image_check_contour_bits, 13, 16, 0x7E8); + tft.drawLine(0, 100, 240, 100, 0xFFE0); + if (WiFi.RSSI() > -40) { + tft.drawBitmap(3, 3, image_wifi_5_bars_bits, 19, 16, 0xFFFF); + } else if (WiFi.RSSI() > -60) { + tft.drawBitmap(3, 3, image_wifi_4_bars_bits, 19, 16, 0xFFFF); + } else if (WiFi.RSSI() > -75) { + tft.drawBitmap(3, 3, image_wifi_2_bars_bits, 19, 16, 0xFFFF); + } else { + tft.drawBitmap(3, 3, image_wifi_bits, 19, 16, 0xFFFF); + } + + tft.drawBitmap(1, 108, image_duco_logo_bits, 21, 24, 0xFC00); + + tft.drawString(String(WiFi.localIP().toString()).c_str(),28, 122,1); + tft.drawString("Duinocoin", 28, 109,1); + tft.drawString(String(SOFTWARE_VERSION).c_str(),87,109,1 ); + + tft.drawString("diff", 173, 28,2); + tft.drawString("sh/s", 165, 45,2); + + + #endif + } +#endif + +#endif diff --git a/ESP_Code/ESP_Code.ino b/ESP_Code/ESP_Code.ino index e0fa6171..f2072555 100644 --- a/ESP_Code/ESP_Code.ino +++ b/ESP_Code/ESP_Code.ino @@ -1,817 +1,839 @@ -/* - ____ __ __ ____ _ _ _____ ___ _____ ____ _ _ - ( _ \( )( )(_ _)( \( )( _ )___ / __)( _ )(_ _)( \( ) - )(_) ))(__)( _)(_ ) ( )(_)((___)( (__ )(_)( _)(_ ) ( - (____/(______)(____)(_)\_)(_____) \___)(_____)(____)(_)\_) - Official code for all ESP8266/32 boards version 4.3 - Main .ino file - - The Duino-Coin Team & Community 2019-2024 © MIT Licensed - https://duinocoin.com - https://github.com/revoxhere/duino-coin - - If you don't know where to start, visit official website and navigate to - the Getting Started page. Have fun mining! - - To edit the variables (username, WiFi settings, etc.) use the Settings.h tab! -*/ - -/* If optimizations cause problems, change them to -O0 (the default) */ -#pragma GCC optimize("-Ofast") - -/* If during compilation the line below causes a - "fatal error: arduinoJson.h: No such file or directory" - message to occur; it means that you do NOT have the - ArduinoJSON library installed. To install it, - go to the below link and follow the instructions: - https://github.com/revoxhere/duino-coin/issues/832 */ -#include - -#if defined(ESP8266) - #include - #include - #include - #include -#else - #include - #include - #include - #include - #include -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include "MiningJob.h" -#include "Settings.h" - -#ifdef USE_LAN - #include -#endif - -#if defined(WEB_DASHBOARD) - #include "Dashboard.h" -#endif - -#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) - #include "DisplayHal.h" -#endif - -#if !defined(ESP8266) && defined(DISABLE_BROWNOUT) - #include "soc/soc.h" - #include "soc/rtc_cntl_reg.h" -#endif - -// Auto adjust physical core count -// (ESP32-S2/C3 have 1 core, ESP32 has 2 cores, ESP8266 has 1 core) -#if defined(ESP8266) - #define CORE 1 - typedef ESP8266WebServer WebServer; -#elif defined(CONFIG_FREERTOS_UNICORE) - #define CORE 1 -#else - #define CORE 2 - // Install TridentTD_EasyFreeRTOS32 if you get an error - #include - - void Task1Code( void * parameter ); - void Task2Code( void * parameter ); - TaskHandle_t Task1; - TaskHandle_t Task2; -#endif - -#if defined(WEB_DASHBOARD) - WebServer server(80); -#endif - -#if defined(CAPTIVE_PORTAL) - #include // This needs to be first, or it all crashes and burns... - #include - #include - char duco_username[40]; - char duco_password[40]; - char duco_rigid[24]; - WiFiManager wifiManager; - Preferences preferences; - WiFiManagerParameter custom_duco_username("duco_usr", "Duino-Coin username", duco_username, 40); - WiFiManagerParameter custom_duco_password("duco_pwd", "Duino-Coin mining key (if enabled in the wallet)", duco_password, 40); - WiFiManagerParameter custom_duco_rigid("duco_rig", "Custom miner identifier (optional)", duco_rigid, 24); - - void saveConfigCallback() { - preferences.begin("duino_config", false); - preferences.putString("duco_username", custom_duco_username.getValue()); - preferences.putString("duco_password", custom_duco_password.getValue()); - preferences.putString("duco_rigid", custom_duco_rigid.getValue()); - preferences.end(); - RestartESP("Settings saved"); - } - - void reset_settings() { - server.send(200, "text/html", "Settings have been erased. Please redo the configuration by connecting to the WiFi network that will be created"); - delay(500); - wifiManager.resetSettings(); - RestartESP("Manual settings reset"); - } - - void saveParamCallback(){ - Serial.println("[CALLBACK] saveParamCallback fired"); - Serial.println("PARAM customfieldid = " + getParam("customfieldid")); - } - - String getParam(String name){ - //read parameter from server, for customhmtl input - String value; - if(wifiManager.server->hasArg(name)) { - value = wifiManager.server->arg(name); - } - return value; - } -#endif - -void RestartESP(String msg) { - #if defined(SERIAL_PRINTING) - Serial.println(msg); - Serial.println("Restarting ESP..."); - #endif - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) - display_info("Restarting ESP..."); - #endif - - #if defined(ESP8266) - ESP.reset(); - #else - ESP.restart(); - abort(); - #endif -} - -#if defined(BLUSHYBOX) - Ticker blinker; - bool lastLedState = false; - void changeState() { - analogWrite(LED_BUILTIN, lastLedState ? 255 : 0); - lastLedState = !lastLedState; - } -#endif - -#if defined(ESP8266) - // WDT Loop - // See lwdtcb() and lwdtFeed() below - Ticker lwdTimer; - - unsigned long lwdCurrentMillis = 0; - unsigned long lwdTimeOutMillis = LWD_TIMEOUT; - - void ICACHE_RAM_ATTR lwdtcb(void) { - if ((millis() - lwdCurrentMillis > LWD_TIMEOUT) || (lwdTimeOutMillis - lwdCurrentMillis != LWD_TIMEOUT)) - RestartESP("Loop WDT Failed!"); - } - - void lwdtFeed(void) { - lwdCurrentMillis = millis(); - lwdTimeOutMillis = lwdCurrentMillis + LWD_TIMEOUT; - } -#else - void lwdtFeed(void) { - Serial.println("lwdtFeed()"); - } -#endif - -namespace { - MiningConfig *configuration = new MiningConfig( - DUCO_USER, - RIG_IDENTIFIER, - MINER_KEY - ); - - #if defined(ESP32) && CORE == 2 - EasyMutex mutexClientData, mutexConnectToServer; - #endif - - #ifdef USE_LAN - static bool eth_connected = false; - #endif - - void UpdateHostPort(String input) { - // Thanks @ricaun for the code - DynamicJsonDocument doc(256); - deserializeJson(doc, input); - const char *name = doc["name"]; - - configuration->host = doc["ip"].as().c_str(); - configuration->port = doc["port"].as(); - node_id = String(name); - - #if defined(SERIAL_PRINTING) - Serial.println("Poolpicker selected the best mining node: " + node_id); - #endif - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) - display_info(node_id); - #endif - } - - void VerifyWifi() { - #ifdef USE_LAN - while ((!eth_connected) || (ETH.localIP() == IPAddress(0, 0, 0, 0))) { - #if defined(SERIAL_PRINTING) - Serial.println("Ethernet connection lost. Reconnect..." ); - #endif - SetupWifi(); - } - #else - while (WiFi.status() != WL_CONNECTED - || WiFi.localIP() == IPAddress(0, 0, 0, 0) - || WiFi.localIP() == IPAddress(192, 168, 4, 2) - || WiFi.localIP() == IPAddress(192, 168, 4, 3)) { - #if defined(SERIAL_PRINTING) - Serial.println("WiFi reconnecting..."); - #endif - WiFi.disconnect(); - delay(500); - WiFi.reconnect(); - delay(500); - } - #endif - } - - String httpGetString(String URL) { - String payload = ""; - - WiFiClientSecure client; - HTTPClient https; - client.setInsecure(); - - https.begin(client, URL); - https.addHeader("Accept", "*/*"); - - int httpCode = https.GET(); - #if defined(SERIAL_PRINTING) - Serial.printf("HTTP Response code: %d\n", httpCode); - #endif - - if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { - payload = https.getString(); - } else { - #if defined(SERIAL_PRINTING) - Serial.printf("Error fetching node from poolpicker: %s\n", https.errorToString(httpCode).c_str()); - VerifyWifi(); - #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) - display_info(http.errorToString(httpCode)); - #endif - } - https.end(); - return payload; - } - - void SelectNode() { - String input = ""; - int waitTime = 1; - int poolIndex = 0; - - while (input == "") { - #if defined(SERIAL_PRINTING) - Serial.println("Fetching mining node from the poolpicker in " + String(waitTime) + "s"); - #endif - delay(waitTime * 1000); - - input = httpGetString("https://server.duinocoin.com/getPool"); - - // Increase wait time till a maximum of 32 seconds - // (addresses: Limit connection requests on failure in ESP boards #1041) - waitTime *= 2; - if (waitTime > 32) - RestartESP("Node fetch unavailable"); - } - - UpdateHostPort(input); - } - - #ifdef USE_LAN - void WiFiEvent(WiFiEvent_t event) { - switch (event) { - case ARDUINO_EVENT_ETH_START: - #if defined(SERIAL_PRINTING) - Serial.println("ETH Started"); - #endif - // The hostname must be set after the interface is started, but needs - // to be set before DHCP, so set it from the event handler thread. - ETH.setHostname("esp32-ethernet"); - break; - case ARDUINO_EVENT_ETH_CONNECTED: - #if defined(SERIAL_PRINTING) - Serial.println("ETH Connected"); - #endif - break; - case ARDUINO_EVENT_ETH_GOT_IP: - #if defined(SERIAL_PRINTING) - Serial.println("ETH Got IP"); - #endif - eth_connected = true; - break; - case ARDUINO_EVENT_ETH_DISCONNECTED: - #if defined(SERIAL_PRINTING) - Serial.println("ETH Disconnected"); - #endif - eth_connected = false; - break; - case ARDUINO_EVENT_ETH_STOP: - #if defined(SERIAL_PRINTING) - Serial.println("ETH Stopped"); - #endif - eth_connected = false; - break; - default: - break; - } - } - #endif - - void SetupWifi() { - #ifdef USE_LAN - #if defined(SERIAL_PRINTING) - Serial.println("Connecting to Ethernet..."); - #endif - WiFi.onEvent(WiFiEvent); // Will call WiFiEvent() from another thread. - ETH.begin(); - - while (!eth_connected) { - delay(500); - #if defined(SERIAL_PRINTING) - Serial.print("."); - #endif - } - - #if defined(SERIAL_PRINTING) - Serial.println("\n\nSuccessfully connected to Ethernet"); - Serial.println("Local IP address: " + ETH.localIP().toString()); - Serial.println("Rig name: " + String(RIG_IDENTIFIER)); - Serial.println(); - #endif - - #else - #if defined(SERIAL_PRINTING) - Serial.println("Connecting to: " + String(SSID)); - #endif - - WiFi.begin(SSID, PASSWORD); - while(WiFi.status() != WL_CONNECTED) { - Serial.print("."); - delay(100); - } - VerifyWifi(); - - #if !defined(ESP8266) - WiFi.config(WiFi.localIP(), WiFi.gatewayIP(), WiFi.subnetMask(), DNS_SERVER); - #endif - - #if defined(SERIAL_PRINTING) - Serial.println("\n\nSuccessfully connected to WiFi"); - Serial.println("Rig name: " + String(RIG_IDENTIFIER)); - Serial.println("Local IP address: " + WiFi.localIP().toString()); - Serial.println("Gateway: " + WiFi.gatewayIP().toString()); - Serial.println("DNS: " + WiFi.dnsIP().toString()); - Serial.println(); - #endif - - #endif - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) - display_info("Waiting for node..."); - #endif - SelectNode(); - } - - void SetupOTA() { - // Prepare OTA handler - ArduinoOTA.onStart([]() - { - #if defined(SERIAL_PRINTING) - Serial.println("Start"); - #endif - }); - ArduinoOTA.onEnd([]() - { - #if defined(SERIAL_PRINTING) - Serial.println("\nEnd"); - #endif - }); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) - { - #if defined(SERIAL_PRINTING) - Serial.printf("Progress: %u%%\r", (progress / (total / 100))); - #endif - }); - ArduinoOTA.onError([](ota_error_t error) - { - Serial.printf("Error[%u]: ", error); - #if defined(SERIAL_PRINTING) - if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed"); - else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed"); - else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed"); - else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed"); - else if (error == OTA_END_ERROR) Serial.println("End Failed"); - #endif - }); - - ArduinoOTA.setHostname(RIG_IDENTIFIER); // Give port a name - ArduinoOTA.begin(); - } - - #if defined(WEB_DASHBOARD) - void dashboard() { - #if defined(SERIAL_PRINTING) - Serial.println("Handling HTTP client"); - #endif - String s = WEBSITE; - #ifdef USE_LAN - s.replace("@@IP_ADDR@@", ETH.localIP().toString()); - #else - s.replace("@@IP_ADDR@@", WiFi.localIP().toString()); - #endif - - s.replace("@@HASHRATE@@", String((hashrate+hashrate_core_two) / 1000)); - s.replace("@@DIFF@@", String(difficulty / 100)); - s.replace("@@SHARES@@", String(share_count)); - s.replace("@@NODE@@", String(node_id)); - - #if defined(ESP8266) - s.replace("@@DEVICE@@", "ESP8266"); - #elif defined(CONFIG_FREERTOS_UNICORE) - s.replace("@@DEVICE@@", "ESP32-S2/C3"); - #else - s.replace("@@DEVICE@@", "ESP32"); - #endif - - s.replace("@@ID@@", String(RIG_IDENTIFIER)); - s.replace("@@MEMORY@@", String(ESP.getFreeHeap())); - s.replace("@@VERSION@@", String(SOFTWARE_VERSION)); - - #if defined(CAPTIVE_PORTAL) - s.replace("@@RESET_SETTINGS@@", "• Reset settings"); - #else - s.replace("@@RESET_SETTINGS@@", ""); - #endif - - #if defined(USE_DS18B20) - sensors.requestTemperatures(); - float temp = sensors.getTempCByIndex(0); - s.replace("@@SENSOR@@", "DS18B20: " + String(temp) + "*C"); - #elif defined(USE_DHT) - float temp = dht.readTemperature(); - float hum = dht.readHumidity(); - s.replace("@@SENSOR@@", "DHT11/22: " + String(temp) + "*C, " + String(hum) + "rh%"); - #elif defined(USE_HSU07M) - float temp = read_hsu07m(); - s.replace("@@SENSOR@@", "HSU07M: " + String(temp) + "*C"); - #elif defined(USE_INTERNAL_SENSOR) - float temp = 0; - temp_sensor_read_celsius(&temp); - s.replace("@@SENSOR@@", "CPU: " + String(temp) + "*C"); - #else - s.replace("@@SENSOR@@", "None"); - #endif - - server.send(200, "text/html", s); - } - #endif - -} // End of namespace - -MiningJob *job[CORE]; - -#if CORE == 2 - EasyFreeRTOS32 task1, task2; -#endif - -void task1_func(void *) { - #if defined(ESP32) && CORE == 2 - VOID SETUP() { } - - VOID LOOP() { - job[0]->mine(); - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) - float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; - float accept_rate = (accepted_share_count / 0.01 / share_count); - - long millisecs = millis(); - int uptime_secs = int((millisecs / 1000) % 60); - int uptime_mins = int((millisecs / (1000 * 60)) % 60); - int uptime_hours = int((millisecs / (1000 * 60 * 60)) % 24); - String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; - - float sharerate = share_count / (millisecs / 1000.0); - - display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), - String(node_id), String(difficulty / 100), String(sharerate, 1), - String(ping), String(accept_rate, 1)); - #endif - } - #endif -} - -void task2_func(void *) { - #if defined(ESP32) && CORE == 2 - VOID SETUP() { - job[1] = new MiningJob(1, configuration); - } - - VOID LOOP() { - job[1]->mine(); - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) - float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; - float accept_rate = (accepted_share_count / 0.01 / share_count); - - long millisecs = millis(); - int uptime_secs = int((millisecs / 1000) % 60); - int uptime_mins = int((millisecs / (1000 * 60)) % 60); - int uptime_hours = int((millisecs / (1000 * 60 * 60)) % 24); - String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; - - float sharerate = share_count / (millisecs / 1000.0); - - display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), - String(node_id), String(difficulty / 100), String(sharerate, 1), - String(ping), String(accept_rate, 1)); - #endif - } - #endif -} - -void setup() { - #if !defined(ESP8266) && defined(DISABLE_BROWNOUT) - WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); - #endif - - #if defined(SERIAL_PRINTING) - Serial.begin(SERIAL_BAUDRATE); - Serial.println("\n\nDuino-Coin " + String(configuration->MINER_VER)); - #endif - pinMode(LED_BUILTIN, OUTPUT); - - #if defined(BLUSHYBOX) - analogWrite(LED_BUILTIN, 255); - for (int i = 255; i > 0; i--) { - analogWrite(LED_BUILTIN, i); - delay(1); - } - pinMode(GAUGE_PIN, OUTPUT); - - // Gauge up and down effect on startup - for (int i = GAUGE_MIN; i < GAUGE_MAX; i++) { - analogWrite(GAUGE_PIN, i); - delay(10); - } - for (int i = GAUGE_MAX; i > GAUGE_MIN; i--) { - analogWrite(GAUGE_PIN, i); - delay(10); - } - #endif - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) - screen_setup(); - display_boot(); - delay(2500); - #endif - - assert(CORE == 1 || CORE == 2); - WALLET_ID = String(random(0, 2811)); // Needed for miner grouping in the wallet - job[0] = new MiningJob(0, configuration); - - #if defined(USE_DHT) - #if defined(SERIAL_PRINTING) - Serial.println("Initializing DHT sensor (Duino IoT)"); - #endif - dht.begin(); - #if defined(SERIAL_PRINTING) - Serial.println("Test reading: " + String(dht.readHumidity()) + "% humidity"); - Serial.println("Test reading: temperature " + String(dht.readTemperature()) + "°C"); - #endif - #endif - - #if defined(USE_DS18B20) - #if defined(SERIAL_PRINTING) - Serial.println("Initializing DS18B20 sensor (Duino IoT)"); - #endif - sensors.begin(); - sensors.requestTemperatures(); - #if defined(SERIAL_PRINTING) - Serial.println("Test reading: " + String(sensors.getTempCByIndex(0)) + "°C"); - #endif - #endif - - #if defined(USE_HSU07M) - #if defined(SERIAL_PRINTING) - Serial.println("Initializing HSU07M sensor (Duino IoT)"); - Serial.println("Test reading: " + String(read_hsu07m()) + "°C"); - #endif - #endif - - #if defined(USE_INTERNAL_SENSOR) - #if defined(SERIAL_PRINTING) - Serial.println("Initializing internal ESP32 temperature sensor (Duino IoT)"); - #endif - temp_sensor_config_t temp_sensor = TSENS_CONFIG_DEFAULT(); - temp_sensor.dac_offset = TSENS_DAC_L2; - temp_sensor_set_config(temp_sensor); - temp_sensor_start(); - float result = 0; - temp_sensor_read_celsius(&result); - #if defined(SERIAL_PRINTING) - Serial.println("Test reading: " + String(result) + "°C"); - #endif - #endif - - WiFi.mode(WIFI_STA); // Setup ESP in client mode - //WiFi.disconnect(true); - #if defined(ESP8266) - WiFi.setSleepMode(WIFI_NONE_SLEEP); - #else - WiFi.setSleep(false); - #endif - - #if defined(CAPTIVE_PORTAL) - preferences.begin("duino_config", false); - strcpy(duco_username, preferences.getString("duco_username", "username").c_str()); - strcpy(duco_password, preferences.getString("duco_password", "None").c_str()); - strcpy(duco_rigid, preferences.getString("duco_rigid", "None").c_str()); - preferences.end(); - configuration->DUCO_USER = duco_username; - configuration->RIG_IDENTIFIER = duco_rigid; - configuration->MINER_KEY = duco_password; - - String captivePortalHTML = R"( - Duino BlushyBox - - )"; - - wifiManager.setCustomHeadElement(captivePortalHTML.c_str()); - - wifiManager.setSaveConfigCallback(saveConfigCallback); - wifiManager.addParameter(&custom_duco_username); - wifiManager.addParameter(&custom_duco_password); - wifiManager.addParameter(&custom_duco_rigid); - - #if defined(BLUSHYBOX) - blinker.attach_ms(200, changeState); - #endif - wifiManager.autoConnect("Duino-Coin"); - delay(1000); - VerifyWifi(); - #if defined(BLUSHYBOX) - blinker.detach(); - #endif - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) - display_info("Waiting for node..."); - #endif - #if defined(BLUSHYBOX) - blinker.attach_ms(500, changeState); - #endif - SelectNode(); - #if defined(BLUSHYBOX) - blinker.detach(); - #endif - #else - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) - display_info("Waiting for WiFi..."); - #endif - SetupWifi(); - #endif - SetupOTA(); - - #if defined(WEB_DASHBOARD) - if (!MDNS.begin(RIG_IDENTIFIER)) { - #if defined(SERIAL_PRINTING) - Serial.println("mDNS unavailable"); - #endif - } - MDNS.addService("http", "tcp", 80); - #if defined(SERIAL_PRINTING) - #ifdef USE_LAN - Serial.println("Configured mDNS for dashboard on http://" + String(RIG_IDENTIFIER) - + ".local (or http://" + ETH.localIP().toString() + ")"); - #else - Serial.println("Configured mDNS for dashboard on http://" + String(RIG_IDENTIFIER) - + ".local (or http://" + WiFi.localIP().toString() + ")"); - #endif - #endif - - server.on("/", dashboard); - #if defined(CAPTIVE_PORTAL) - server.on("/reset", reset_settings); - #endif - server.begin(); - #endif - - #if defined(ESP8266) - // Start the WDT watchdog - lwdtFeed(); - lwdTimer.attach_ms(LWD_TIMEOUT, lwdtcb); - #endif - - #if defined(ESP8266) - // Fastest clock mode for 8266s - system_update_cpu_freq(160); - os_update_cpu_frequency(160); - // Feed the watchdog - lwdtFeed(); - #else - // Fastest clock mode for 32s - setCpuFrequencyMhz(240); - #endif - - job[0]->blink(BLINK_SETUP_COMPLETE); - - #if defined(ESP32) && CORE == 2 - mutexClientData = xSemaphoreCreateMutex(); - mutexConnectToServer = xSemaphoreCreateMutex(); - - xTaskCreatePinnedToCore(system_events_func, "system_events_func", 10000, NULL, 1, NULL, 0); - xTaskCreatePinnedToCore(task1_func, "task1_func", 10000, NULL, 1, &Task1, 0); - xTaskCreatePinnedToCore(task2_func, "task2_func", 10000, NULL, 1, &Task2, 1); - #endif -} - -void system_events_func(void* parameter) { - while (true) { - delay(10); - #if defined(WEB_DASHBOARD) - server.handleClient(); - #endif - ArduinoOTA.handle(); - } -} - -void single_core_loop() { - job[0]->mine(); - - lwdtFeed(); - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) - float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; - float accept_rate = (accepted_share_count / 0.01 / share_count); - - long millisecs = millis(); - int uptime_secs = int((millisecs / 1000) % 60); - int uptime_mins = int((millisecs / (1000 * 60)) % 60); - int uptime_hours = int((millisecs / (1000 * 60 * 60)) % 24); - String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; - - float sharerate = share_count / (millisecs / 1000.0); - - display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), - String(node_id), String(difficulty / 100), String(sharerate, 1), - String(ping), String(accept_rate, 1)); - #endif - - VerifyWifi(); - ArduinoOTA.handle(); - #if defined(WEB_DASHBOARD) - server.handleClient(); - #endif -} - -void loop() { - #if defined(ESP8266) || defined(CONFIG_FREERTOS_UNICORE) - single_core_loop(); - #endif - delay(10); -} +/* + ____ __ __ ____ _ _ _____ ___ _____ ____ _ _ + ( _ \( )( )(_ _)( \( )( _ )___ / __)( _ )(_ _)( \( ) + )(_) ))(__)( _)(_ ) ( )(_)((___)( (__ )(_)( _)(_ ) ( + (____/(______)(____)(_)\_)(_____) \___)(_____)(____)(_)\_) + Official code for all ESP8266/32 boards version 4.3 + Main .ino file + + The Duino-Coin Team & Community 2019-2024 © MIT Licensed + https://duinocoin.com + https://github.com/revoxhere/duino-coin + + If you don't know where to start, visit official website and navigate to + the Getting Started page. Have fun mining! + + To edit the variables (username, WiFi settings, etc.) use the Settings.h tab! +*/ + +/* If optimizations cause problems, change them to -O0 (the default) */ +#pragma GCC optimize("-Ofast") + +/* If during compilation the line below causes a + "fatal error: arduinoJson.h: No such file or directory" + message to occur; it means that you do NOT have the + ArduinoJSON library installed. To install it, + go to the below link and follow the instructions: + https://github.com/revoxhere/duino-coin/issues/832 */ +#include + +#if defined(ESP8266) + #include + #include + #include + #include +#else + #include + #include + #include + #include + #include +#endif + +#include +#include +#include +#include +#include +#include +#include + +void handleSystemEvents(void) { + #if defined(ESP32) && CORE == 2 + esp_task_wdt_reset(); + #endif + delay(10); // Required vTaskDelay by ESP-IDF + yield(); + ArduinoOTA.handle(); + } + +#include "MiningJob.h" +#include "Settings.h" + +#ifdef USE_LAN + #include +#endif + +#if defined(WEB_DASHBOARD) + #include "Dashboard.h" +#endif + +#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + #include "DisplayHal.h" +#endif + +#if !defined(ESP8266) && defined(DISABLE_BROWNOUT) + #include "soc/soc.h" + #include "soc/rtc_cntl_reg.h" +#endif + +// Auto adjust physical core count +// (ESP32-S2/C3 have 1 core, ESP32 has 2 cores, ESP8266 has 1 core) +#if defined(ESP8266) + #define CORE 1 + typedef ESP8266WebServer WebServer; +#elif defined(CONFIG_FREERTOS_UNICORE) + #define CORE 1 +#else + #define CORE 2 + // Install TridentTD_EasyFreeRTOS32 if you get an error + #include + + void Task1Code( void * parameter ); + void Task2Code( void * parameter ); + TaskHandle_t Task1; + TaskHandle_t Task2; +#endif + +#if defined(WEB_DASHBOARD) + WebServer server(80); +#endif + +#if defined(CAPTIVE_PORTAL) + #include // This needs to be first, or it all crashes and burns... + #include + #include + char duco_username[40]; + char duco_password[40]; + char duco_rigid[24]; + WiFiManager wifiManager; + Preferences preferences; + WiFiManagerParameter custom_duco_username("duco_usr", "Duino-Coin username", duco_username, 40); + WiFiManagerParameter custom_duco_password("duco_pwd", "Duino-Coin mining key (if enabled in the wallet)", duco_password, 40); + WiFiManagerParameter custom_duco_rigid("duco_rig", "Custom miner identifier (optional)", duco_rigid, 24); + + void saveConfigCallback() { + preferences.begin("duino_config", false); + preferences.putString("duco_username", custom_duco_username.getValue()); + preferences.putString("duco_password", custom_duco_password.getValue()); + preferences.putString("duco_rigid", custom_duco_rigid.getValue()); + preferences.end(); + RestartESP("Settings saved"); + } + + void reset_settings() { + server.send(200, "text/html", "Settings have been erased. Please redo the configuration by connecting to the WiFi network that will be created"); + delay(500); + wifiManager.resetSettings(); + RestartESP("Manual settings reset"); + } + + void saveParamCallback(){ + Serial.println("[CALLBACK] saveParamCallback fired"); + Serial.println("PARAM customfieldid = " + getParam("customfieldid")); + } + + String getParam(String name){ + //read parameter from server, for customhmtl input + String value; + if(wifiManager.server->hasArg(name)) { + value = wifiManager.server->arg(name); + } + return value; + } +#endif + +void RestartESP(String msg) { + #if defined(SERIAL_PRINTING) + Serial.println(msg); + Serial.println("Restarting ESP..."); + #endif + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + display_info("Restarting ESP..."); + #endif + + #if defined(ESP8266) + ESP.reset(); + #else + ESP.restart(); + abort(); + #endif +} + +#if defined(BLUSHYBOX) + Ticker blinker; + bool lastLedState = false; + void changeState() { + analogWrite(LED_BUILTIN, lastLedState ? 255 : 0); + lastLedState = !lastLedState; + } +#endif + +#if defined(ESP8266) + // WDT Loop + // See lwdtcb() and lwdtFeed() below + Ticker lwdTimer; + + unsigned long lwdCurrentMillis = 0; + unsigned long lwdTimeOutMillis = LWD_TIMEOUT; + + void ICACHE_RAM_ATTR lwdtcb(void) { + if ((millis() - lwdCurrentMillis > LWD_TIMEOUT) || (lwdTimeOutMillis - lwdCurrentMillis != LWD_TIMEOUT)) + RestartESP("Loop WDT Failed!"); + } + + void lwdtFeed(void) { + lwdCurrentMillis = millis(); + lwdTimeOutMillis = lwdCurrentMillis + LWD_TIMEOUT; + } +#else + void lwdtFeed(void) { + Serial.println("lwdtFeed()"); + } +#endif + +namespace { + MiningConfig *configuration = new MiningConfig( + DUCO_USER, + RIG_IDENTIFIER, + MINER_KEY + ); + + #if defined(ESP32) && CORE == 2 + EasyMutex mutexClientData, mutexConnectToServer; + #endif + + #ifdef USE_LAN + static bool eth_connected = false; + #endif + + void UpdateHostPort(String input) { + // Thanks @ricaun for the code + DynamicJsonDocument doc(256); + deserializeJson(doc, input); + const char *name = doc["name"]; + + configuration->host = doc["ip"].as().c_str(); + configuration->port = doc["port"].as(); + node_id = String(name); + + #if defined(SERIAL_PRINTING) + Serial.println("Poolpicker selected the best mining node: " + node_id); + #endif + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + display_info(node_id); + #endif + } + + void VerifyWifi() { + #ifdef USE_LAN + while ((!eth_connected) || (ETH.localIP() == IPAddress(0, 0, 0, 0))) { + #if defined(SERIAL_PRINTING) + Serial.println("Ethernet connection lost. Reconnect..." ); + #endif + SetupWifi(); + } + #else + while (WiFi.status() != WL_CONNECTED + || WiFi.localIP() == IPAddress(0, 0, 0, 0) + || WiFi.localIP() == IPAddress(192, 168, 4, 2) + || WiFi.localIP() == IPAddress(192, 168, 4, 3)) { + #if defined(SERIAL_PRINTING) + Serial.println("WiFi reconnecting..."); + #endif + WiFi.disconnect(); + delay(500); + WiFi.reconnect(); + delay(500); + } + #endif + } + + String httpGetString(String URL) { + String payload = ""; + + WiFiClientSecure client; + HTTPClient https; + client.setInsecure(); + + https.begin(client, URL); + https.addHeader("Accept", "*/*"); + + int httpCode = https.GET(); + #if defined(SERIAL_PRINTING) + Serial.printf("HTTP Response code: %d\n", httpCode); + #endif + + if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { + payload = https.getString(); + } else { + #if defined(SERIAL_PRINTING) + Serial.printf("Error fetching node from poolpicker: %s\n", https.errorToString(httpCode).c_str()); + VerifyWifi(); + #endif + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + display_info(https.errorToString(httpCode)); + #endif + } + https.end(); + return payload; + } + + void SelectNode() { + String input = ""; + int waitTime = 1; + int poolIndex = 0; + + while (input == "") { + #if defined(SERIAL_PRINTING) + Serial.println("Fetching mining node from the poolpicker in " + String(waitTime) + "s"); + #endif + delay(waitTime * 1000); + + input = httpGetString("https://server.duinocoin.com/getPool"); + + // Increase wait time till a maximum of 32 seconds + // (addresses: Limit connection requests on failure in ESP boards #1041) + waitTime *= 2; + if (waitTime > 32) + RestartESP("Node fetch unavailable"); + } + + UpdateHostPort(input); + } + + #ifdef USE_LAN + void WiFiEvent(WiFiEvent_t event) { + switch (event) { + case ARDUINO_EVENT_ETH_START: + #if defined(SERIAL_PRINTING) + Serial.println("ETH Started"); + #endif + // The hostname must be set after the interface is started, but needs + // to be set before DHCP, so set it from the event handler thread. + ETH.setHostname("esp32-ethernet"); + break; + case ARDUINO_EVENT_ETH_CONNECTED: + #if defined(SERIAL_PRINTING) + Serial.println("ETH Connected"); + #endif + break; + case ARDUINO_EVENT_ETH_GOT_IP: + #if defined(SERIAL_PRINTING) + Serial.println("ETH Got IP"); + #endif + eth_connected = true; + break; + case ARDUINO_EVENT_ETH_DISCONNECTED: + #if defined(SERIAL_PRINTING) + Serial.println("ETH Disconnected"); + #endif + eth_connected = false; + break; + case ARDUINO_EVENT_ETH_STOP: + #if defined(SERIAL_PRINTING) + Serial.println("ETH Stopped"); + #endif + eth_connected = false; + break; + default: + break; + } + } + #endif + + void SetupWifi() { + #ifdef USE_LAN + #if defined(SERIAL_PRINTING) + Serial.println("Connecting to Ethernet..."); + #endif + WiFi.onEvent(WiFiEvent); // Will call WiFiEvent() from another thread. + ETH.begin(); + + while (!eth_connected) { + delay(500); + #if defined(SERIAL_PRINTING) + Serial.print("."); + #endif + } + + #if defined(SERIAL_PRINTING) + Serial.println("\n\nSuccessfully connected to Ethernet"); + Serial.println("Local IP address: " + ETH.localIP().toString()); + Serial.println("Rig name: " + String(RIG_IDENTIFIER)); + Serial.println(); + #endif + + #else + #if defined(SERIAL_PRINTING) + Serial.println("Connecting to: " + String(SSID)); + #endif + + WiFi.begin(SSID, PASSWORD); + while(WiFi.status() != WL_CONNECTED) { + Serial.print("."); + delay(100); + } + VerifyWifi(); + + #if !defined(ESP8266) + WiFi.config(WiFi.localIP(), WiFi.gatewayIP(), WiFi.subnetMask(), DNS_SERVER); + #endif + + #if defined(SERIAL_PRINTING) + Serial.println("\n\nSuccessfully connected to WiFi"); + Serial.println("Rig name: " + String(RIG_IDENTIFIER)); + Serial.println("Local IP address: " + WiFi.localIP().toString()); + Serial.println("Gateway: " + WiFi.gatewayIP().toString()); + Serial.println("DNS: " + WiFi.dnsIP().toString()); + Serial.println(); + #endif + + #endif + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + display_info("Waiting for node..."); + #endif + SelectNode(); + } + + void SetupOTA() { + // Prepare OTA handler + ArduinoOTA.onStart([]() + { + #if defined(SERIAL_PRINTING) + Serial.println("Start"); + #endif + }); + ArduinoOTA.onEnd([]() + { + #if defined(SERIAL_PRINTING) + Serial.println("\nEnd"); + #endif + }); + ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) + { + #if defined(SERIAL_PRINTING) + Serial.printf("Progress: %u%%\r", (progress / (total / 100))); + #endif + }); + ArduinoOTA.onError([](ota_error_t error) + { + Serial.printf("Error[%u]: ", error); + #if defined(SERIAL_PRINTING) + if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed"); + else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed"); + else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed"); + else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed"); + else if (error == OTA_END_ERROR) Serial.println("End Failed"); + #endif + }); + + ArduinoOTA.setHostname(RIG_IDENTIFIER); // Give port a name + ArduinoOTA.begin(); + } + + #if defined(WEB_DASHBOARD) + void dashboard() { + #if defined(SERIAL_PRINTING) + Serial.println("Handling HTTP client"); + #endif + String s = WEBSITE; + #ifdef USE_LAN + s.replace("@@IP_ADDR@@", ETH.localIP().toString()); + #else + s.replace("@@IP_ADDR@@", WiFi.localIP().toString()); + #endif + + s.replace("@@HASHRATE@@", String((hashrate+hashrate_core_two) / 1000)); + s.replace("@@DIFF@@", String(difficulty / 100)); + s.replace("@@SHARES@@", String(share_count)); + s.replace("@@NODE@@", String(node_id)); + + #if defined(ESP8266) + s.replace("@@DEVICE@@", "ESP8266"); + #elif defined(CONFIG_FREERTOS_UNICORE) + s.replace("@@DEVICE@@", "ESP32-S2/C3"); + #else + s.replace("@@DEVICE@@", "ESP32"); + #endif + + s.replace("@@ID@@", String(RIG_IDENTIFIER)); + s.replace("@@MEMORY@@", String(ESP.getFreeHeap())); + s.replace("@@VERSION@@", String(SOFTWARE_VERSION)); + + #if defined(CAPTIVE_PORTAL) + s.replace("@@RESET_SETTINGS@@", "• Reset settings"); + #else + s.replace("@@RESET_SETTINGS@@", ""); + #endif + + #if defined(USE_DS18B20) + sensors.requestTemperatures(); + float temp = sensors.getTempCByIndex(0); + s.replace("@@SENSOR@@", "DS18B20: " + String(temp) + "*C"); + #elif defined(USE_DHT) + float temp = dht.readTemperature(); + float hum = dht.readHumidity(); + s.replace("@@SENSOR@@", "DHT11/22: " + String(temp) + "*C, " + String(hum) + "rh%"); + #elif defined(USE_HSU07M) + float temp = read_hsu07m(); + s.replace("@@SENSOR@@", "HSU07M: " + String(temp) + "*C"); + #elif defined(USE_INTERNAL_SENSOR) + float temp = 0; + temp_sensor_read_celsius(&temp); + s.replace("@@SENSOR@@", "CPU: " + String(temp) + "*C"); + #else + s.replace("@@SENSOR@@", "None"); + #endif + + server.send(200, "text/html", s); + } + #endif + +} // End of namespace + + +MiningJob *job[CORE]; + +#if CORE == 2 + EasyFreeRTOS32 task1, task2; +#endif + +void task1_func(void *) { + #if defined(ESP32) && CORE == 2 + VOID SETUP() { } + + VOID LOOP() { + job[0]->mine(); + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; + float accept_rate = (accepted_share_count / 0.01 / share_count); + + long millisecs = millis(); + int uptime_secs = int((millisecs / 1000) % 60); + int uptime_mins = int((millisecs / (1000 * 60)) % 60); + int uptime_hours = int((millisecs / (1000 * 60 * 60)) % 24); + String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; + + float sharerate = share_count / (millisecs / 1000.0); + + while(displayLock) { + handleSystemEvents(); + } + displayLock = true; + + display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), + String(node_id), String(difficulty / 100), String(sharerate, 1), + String(ping), String(accept_rate, 1)); + displayLock = false; + #endif + } + #endif +} + +void task2_func(void *) { + #if defined(ESP32) && CORE == 2 + VOID SETUP() { + job[1] = new MiningJob(1, configuration); + } + + VOID LOOP() { + job[1]->mine(); + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; + float accept_rate = (accepted_share_count / 0.01 / share_count); + + long millisecs = millis(); + int uptime_secs = int((millisecs / 1000) % 60); + int uptime_mins = int((millisecs / (1000 * 60)) % 60); + int uptime_hours = int((millisecs / (1000 * 60 * 60)) % 24); + String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; + + float sharerate = share_count / (millisecs / 1000.0); + + while(displayLock) { + handleSystemEvents(); + } + displayLock = true; + + display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), + String(node_id), String(difficulty / 100), String(sharerate, 1), + String(ping), String(accept_rate, 1)); + displayLock = false; + #endif + } + #endif +} + +void setup() { + #if !defined(ESP8266) && defined(DISABLE_BROWNOUT) + WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); + #endif + + #if defined(SERIAL_PRINTING) + Serial.begin(SERIAL_BAUDRATE); + Serial.println("\n\nDuino-Coin " + String(configuration->MINER_VER)); + #endif + pinMode(LED_BUILTIN, OUTPUT); + + #if defined(BLUSHYBOX) + analogWrite(LED_BUILTIN, 255); + for (int i = 255; i > 0; i--) { + analogWrite(LED_BUILTIN, i); + delay(1); + } + pinMode(GAUGE_PIN, OUTPUT); + + // Gauge up and down effect on startup + for (int i = GAUGE_MIN; i < GAUGE_MAX; i++) { + analogWrite(GAUGE_PIN, i); + delay(10); + } + for (int i = GAUGE_MAX; i > GAUGE_MIN; i--) { + analogWrite(GAUGE_PIN, i); + delay(10); + } + #endif + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + screen_setup(); + display_boot(); + + #endif + + assert(CORE == 1 || CORE == 2); + WALLET_ID = String(random(0, 2811)); // Needed for miner grouping in the wallet + job[0] = new MiningJob(0, configuration); + + #if defined(USE_DHT) + #if defined(SERIAL_PRINTING) + Serial.println("Initializing DHT sensor (Duino IoT)"); + #endif + dht.begin(); + #if defined(SERIAL_PRINTING) + Serial.println("Test reading: " + String(dht.readHumidity()) + "% humidity"); + Serial.println("Test reading: temperature " + String(dht.readTemperature()) + "°C"); + #endif + #endif + + #if defined(USE_DS18B20) + #if defined(SERIAL_PRINTING) + Serial.println("Initializing DS18B20 sensor (Duino IoT)"); + #endif + sensors.begin(); + sensors.requestTemperatures(); + #if defined(SERIAL_PRINTING) + Serial.println("Test reading: " + String(sensors.getTempCByIndex(0)) + "°C"); + #endif + #endif + + #if defined(USE_HSU07M) + #if defined(SERIAL_PRINTING) + Serial.println("Initializing HSU07M sensor (Duino IoT)"); + Serial.println("Test reading: " + String(read_hsu07m()) + "°C"); + #endif + #endif + + #if defined(USE_INTERNAL_SENSOR) + #if defined(SERIAL_PRINTING) + Serial.println("Initializing internal ESP32 temperature sensor (Duino IoT)"); + #endif + temp_sensor_config_t temp_sensor = TSENS_CONFIG_DEFAULT(); + temp_sensor.dac_offset = TSENS_DAC_L2; + temp_sensor_set_config(temp_sensor); + temp_sensor_start(); + float result = 0; + temp_sensor_read_celsius(&result); + #if defined(SERIAL_PRINTING) + Serial.println("Test reading: " + String(result) + "°C"); + #endif + #endif + + WiFi.mode(WIFI_STA); // Setup ESP in client mode + //WiFi.disconnect(true); + #if defined(ESP8266) + WiFi.setSleepMode(WIFI_NONE_SLEEP); + #else + WiFi.setSleep(false); + #endif + + #if defined(CAPTIVE_PORTAL) + preferences.begin("duino_config", false); + strcpy(duco_username, preferences.getString("duco_username", "username").c_str()); + strcpy(duco_password, preferences.getString("duco_password", "None").c_str()); + strcpy(duco_rigid, preferences.getString("duco_rigid", "None").c_str()); + preferences.end(); + configuration->DUCO_USER = duco_username; + configuration->RIG_IDENTIFIER = duco_rigid; + configuration->MINER_KEY = duco_password; + + String captivePortalHTML = R"( + Duino BlushyBox + + )"; + + wifiManager.setCustomHeadElement(captivePortalHTML.c_str()); + + wifiManager.setSaveConfigCallback(saveConfigCallback); + wifiManager.addParameter(&custom_duco_username); + wifiManager.addParameter(&custom_duco_password); + wifiManager.addParameter(&custom_duco_rigid); + + #if defined(BLUSHYBOX) + blinker.attach_ms(200, changeState); + #endif + wifiManager.autoConnect("Duino-Coin"); + delay(1000); + VerifyWifi(); + #if defined(BLUSHYBOX) + blinker.detach(); + #endif + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + display_info("Waiting for node..."); + #endif + #if defined(BLUSHYBOX) + blinker.attach_ms(500, changeState); + #endif + SelectNode(); + #if defined(BLUSHYBOX) + blinker.detach(); + #endif + #else + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + display_info("Waiting for WiFi..."); + #endif + SetupWifi(); + #endif + SetupOTA(); + + #if defined(WEB_DASHBOARD) + if (!MDNS.begin(RIG_IDENTIFIER)) { + #if defined(SERIAL_PRINTING) + Serial.println("mDNS unavailable"); + #endif + } + MDNS.addService("http", "tcp", 80); + #if defined(SERIAL_PRINTING) + #ifdef USE_LAN + Serial.println("Configured mDNS for dashboard on http://" + String(RIG_IDENTIFIER) + + ".local (or http://" + ETH.localIP().toString() + ")"); + #else + Serial.println("Configured mDNS for dashboard on http://" + String(RIG_IDENTIFIER) + + ".local (or http://" + WiFi.localIP().toString() + ")"); + #endif + #endif + + server.on("/", dashboard); + #if defined(CAPTIVE_PORTAL) + server.on("/reset", reset_settings); + #endif + server.begin(); + #endif + + #if defined(ESP8266) + // Start the WDT watchdog + lwdtFeed(); + lwdTimer.attach_ms(LWD_TIMEOUT, lwdtcb); + #endif + + #if defined(ESP8266) + // Fastest clock mode for 8266s + system_update_cpu_freq(160); + os_update_cpu_frequency(160); + // Feed the watchdog + lwdtFeed(); + #else + // Fastest clock mode for 32s + setCpuFrequencyMhz(240); + #endif + + job[0]->blink(BLINK_SETUP_COMPLETE); + + #if defined(ESP32) && CORE == 2 + mutexClientData = xSemaphoreCreateMutex(); + mutexConnectToServer = xSemaphoreCreateMutex(); + + xTaskCreatePinnedToCore(system_events_func, "system_events_func", 10000, NULL, 1, NULL, 0); + xTaskCreatePinnedToCore(task1_func, "task1_func", 10000, NULL, 1, &Task1, 0); + xTaskCreatePinnedToCore(task2_func, "task2_func", 10000, NULL, 1, &Task2, 1); + #endif +} + +void system_events_func(void* parameter) { + while (true) { + delay(10); + #if defined(WEB_DASHBOARD) + server.handleClient(); + #endif + ArduinoOTA.handle(); + } +} + +void single_core_loop() { + job[0]->mine(); + + lwdtFeed(); + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; + float accept_rate = (accepted_share_count / 0.01 / share_count); + + long millisecs = millis(); + int uptime_secs = int((millisecs / 1000) % 60); + int uptime_mins = int((millisecs / (1000 * 60)) % 60); + int uptime_hours = int((millisecs / (1000 * 60 * 60)) % 24); + String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; + + float sharerate = share_count / (millisecs / 1000.0); + + display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), + String(node_id), String(difficulty / 100), String(sharerate, 1), + String(ping), String(accept_rate, 1)); + #endif + + VerifyWifi(); + ArduinoOTA.handle(); + #if defined(WEB_DASHBOARD) + server.handleClient(); + #endif +} + +void loop() { + #if defined(ESP8266) || defined(CONFIG_FREERTOS_UNICORE) + single_core_loop(); + #endif + delay(10); +} diff --git a/ESP_Code/MiningJob.h b/ESP_Code/MiningJob.h index bb200914..6d88f2a1 100644 --- a/ESP_Code/MiningJob.h +++ b/ESP_Code/MiningJob.h @@ -1,423 +1,423 @@ -#pragma GCC optimize("-Ofast") - -#ifndef MINING_JOB_H -#define MINING_JOB_H - -#include -#include -#include -#include -#include - -#include "DSHA1.h" -#include "Counter.h" -#include "Settings.h" - -// https://github.com/esp8266/Arduino/blob/master/cores/esp8266/TypeConversion.cpp -const char base36Chars[36] PROGMEM = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' -}; - -const uint8_t base36CharValues[75] PROGMEM{ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, // 0 to 9 - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 0, 0, 0, 0, 0, 0, // Upper case letters - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 // Lower case letters -}; - -#define SPC_TOKEN ' ' -#define END_TOKEN '\n' -#define SEP_TOKEN ',' -#define IOT_TOKEN '@' - -struct MiningConfig { - String host = ""; - int port = 0; - String DUCO_USER = ""; - String RIG_IDENTIFIER = ""; - String MINER_KEY = ""; - String MINER_VER = SOFTWARE_VERSION; - #if defined(ESP8266) - // "High-band" 8266 diff - String START_DIFF = "ESP8266H"; - #elif defined(CONFIG_FREERTOS_UNICORE) - // Single core 32 diff - String START_DIFF = "ESP32S"; - #else - // Normal 32 diff - String START_DIFF = "ESP32"; - #endif - - MiningConfig(String DUCO_USER, String RIG_IDENTIFIER, String MINER_KEY) - : DUCO_USER(DUCO_USER), RIG_IDENTIFIER(RIG_IDENTIFIER), MINER_KEY(MINER_KEY) {} -}; - -class MiningJob { - -public: - MiningConfig *config; - int core = 0; - - MiningJob(int core, MiningConfig *config) { - this->core = core; - this->config = config; - this->client_buffer = ""; - dsha1 = new DSHA1(); - dsha1->warmup(); - generateRigIdentifier(); - } - - void blink(uint8_t count, uint8_t pin = LED_BUILTIN) { - #if defined(LED_BLINKING) - uint8_t state = HIGH; - - for (int x = 0; x < (count << 1); ++x) { - digitalWrite(pin, state ^= HIGH); - delay(50); - } - #else - digitalWrite(LED_BUILTIN, HIGH); - #endif - } - - bool max_micros_elapsed(unsigned long current, unsigned long max_elapsed) { - static unsigned long _start = 0; - - if ((current - _start) > max_elapsed) { - _start = current; - return true; - } - return false; - } - - void handleSystemEvents(void) { - #if defined(ESP32) && CORE == 2 - esp_task_wdt_reset(); - #endif - delay(10); // Required vTaskDelay by ESP-IDF - yield(); - ArduinoOTA.handle(); - } - - void mine() { - connectToNode(); - askForJob(); - - dsha1->reset().write((const unsigned char *)getLastBlockHash().c_str(), getLastBlockHash().length()); - - int start_time = micros(); - max_micros_elapsed(start_time, 0); - #if defined(LED_BLINKING) - #if defined(BLUSHYBOX) - for (int i = 0; i < 72; i++) { - analogWrite(LED_BUILTIN, i); - delay(1); - } - #else - digitalWrite(LED_BUILTIN, LOW); - #endif - #endif - for (Counter<10> counter; counter < difficulty; ++counter) { - DSHA1 ctx = *dsha1; - ctx.write((const unsigned char *)counter.c_str(), counter.strlen()).finalize(hashArray); - - #ifndef CONFIG_FREERTOS_UNICORE - #if defined(ESP32) - #define SYSTEM_TIMEOUT 100000 // 10ms for esp32 looks like the lowest value without false watchdog triggers - #else - #define SYSTEM_TIMEOUT 500000 // 50ms for 8266 for same reason as above - #endif - if (max_micros_elapsed(micros(), SYSTEM_TIMEOUT)) { - handleSystemEvents(); - } - #endif - - if (memcmp(getExpectedHash(), hashArray, 20) == 0) { - unsigned long elapsed_time = micros() - start_time; - float elapsed_time_s = elapsed_time * .000001f; - share_count++; - - #if defined(LED_BLINKING) - #if defined(BLUSHYBOX) - for (int i = 72; i > 0; i--) { - analogWrite(LED_BUILTIN, i); - delay(1); - } - #else - digitalWrite(LED_BUILTIN, HIGH); - #endif - #endif - - if (String(core) == "0") { - hashrate = counter / elapsed_time_s; - submit(counter, hashrate, elapsed_time_s); - } else { - hashrate_core_two = counter / elapsed_time_s; - submit(counter, hashrate_core_two, elapsed_time_s); - } - - #if defined(BLUSHYBOX) - gauge_set(hashrate + hashrate_core_two); - #endif - - break; - } - } - } - -private: - String client_buffer; - uint8_t hashArray[20]; - String last_block_hash; - String expected_hash_str; - uint8_t expected_hash[20]; - DSHA1 *dsha1; - WiFiClient client; - String chipID = ""; - - #if defined(ESP8266) - #if defined(BLUSHYBOX) - String MINER_BANNER = "Official BlushyBox Miner (ESP8266)"; - #else - String MINER_BANNER = "Official ESP8266 Miner"; - #endif - #elif defined(CONFIG_FREERTOS_UNICORE) - String MINER_BANNER = "Official ESP32-S2 Miner"; - #else - #if defined(BLUSHYBOX) - String MINER_BANNER = "Official BlushyBox Miner (ESP32)"; - #else - String MINER_BANNER = "Official ESP32 Miner"; - #endif - #endif - - uint8_t *hexStringToUint8Array(const String &hexString, uint8_t *uint8Array, const uint32_t arrayLength) { - assert(hexString.length() >= arrayLength * 2); - const char *hexChars = hexString.c_str(); - for (uint32_t i = 0; i < arrayLength; ++i) { - uint8Array[i] = (pgm_read_byte(base36CharValues + hexChars[i * 2] - '0') << 4) + pgm_read_byte(base36CharValues + hexChars[i * 2 + 1] - '0'); - } - return uint8Array; - } - - void generateRigIdentifier() { - String AutoRigName = ""; - - #if defined(ESP8266) - chipID = String(ESP.getChipId(), HEX); - - if (strcmp(config->RIG_IDENTIFIER.c_str(), "Auto") != 0) - return; - - AutoRigName = "ESP8266-" + chipID; - AutoRigName.toUpperCase(); - config->RIG_IDENTIFIER = AutoRigName.c_str(); - #else - uint64_t chip_id = ESP.getEfuseMac(); - uint16_t chip = (uint16_t)(chip_id >> 32); // Prepare to print a 64 bit value into a char array - char fullChip[23]; - snprintf(fullChip, 23, "%04X%08X", chip, - (uint32_t)chip_id); // Store the (actually) 48 bit chip_id into a char array - - chipID = String(fullChip); - - if (strcmp(config->RIG_IDENTIFIER.c_str(), "Auto") != 0) - return; - // Autogenerate ID if required - AutoRigName = "ESP32-" + String(fullChip); - AutoRigName.toUpperCase(); - config->RIG_IDENTIFIER = AutoRigName.c_str(); - #endif - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - Rig identifier: " - + config->RIG_IDENTIFIER); - #endif - } - - void connectToNode() { - if (client.connected()) return; - - unsigned int stopWatch = millis(); - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - Connecting to a Duino-Coin node..."); - #endif - while (!client.connect(config->host.c_str(), config->port)) { - if (max_micros_elapsed(micros(), 100000)) { - handleSystemEvents(); - } - if (millis()-stopWatch>100000) ESP.restart(); - } - - waitForClientData(); - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - Connected. Node reported version: " - + client_buffer); - #endif - - blink(BLINK_CLIENT_CONNECT); - - /* client.print("MOTD" + END_TOKEN); - waitForClientData(); - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - MOTD: " - + client_buffer); - #endif */ - } - - void waitForClientData() { - client_buffer = ""; - - while (client.connected()) { - if (client.available()) { - client_buffer = client.readStringUntil(END_TOKEN); - if (client_buffer.length() == 1 && client_buffer[0] == END_TOKEN) - client_buffer = "???\n"; // NOTE: Should never happen - break; - } - } - } - - void submit(unsigned long counter, float hashrate, float elapsed_time_s) { - client.print(String(counter) + - SEP_TOKEN + String(hashrate) + - SEP_TOKEN + MINER_BANNER + - SPC_TOKEN + config->MINER_VER + - SEP_TOKEN + config->RIG_IDENTIFIER + - SEP_TOKEN + "DUCOID" + String(chipID) + - SEP_TOKEN + String(WALLET_ID) + - END_TOKEN); - - unsigned long ping_start = millis(); - waitForClientData(); - ping = millis() - ping_start; - - if (client_buffer == "GOOD") { - accepted_share_count++; - } - - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - " + - client_buffer + - " share #" + String(share_count) + - " (" + String(counter) + ")" + - " hashrate: " + String(hashrate / 1000, 2) + " kH/s (" + - String(elapsed_time_s) + "s)\n"); - #endif - } - - bool parse() { - // Create a non-constant copy of the input string - char *job_str_copy = strdup(client_buffer.c_str()); - - if (job_str_copy) { - String tokens[3]; - char *token = strtok(job_str_copy, ","); - for (int i = 0; token != NULL && i < 3; i++) { - tokens[i] = token; - token = strtok(NULL, ","); - } - - last_block_hash = tokens[0]; - expected_hash_str = tokens[1]; - hexStringToUint8Array(expected_hash_str, expected_hash, 20); - difficulty = tokens[2].toInt() * 100 + 1; - - // Free the memory allocated by strdup - free(job_str_copy); - - return true; - } - else { - // Handle memory allocation failure - return false; - } - } - - void askForJob() { - Serial.println("Core [" + String(core) + "] - Asking for a new job for user: " - + String(config->DUCO_USER)); - - #if defined(USE_DS18B20) - sensors.requestTemperatures(); - float temp = sensors.getTempCByIndex(0); - #if defined(SERIAL_PRINTING) - Serial.println("DS18B20 reading: " + String(temp) + "°C"); - #endif - - client.print("JOB," + - String(config->DUCO_USER) + - SEP_TOKEN + config->START_DIFF + - SEP_TOKEN + String(config->MINER_KEY) + - SEP_TOKEN + "Temp:" + String(temp) + "*C" + - END_TOKEN); - #elif defined(USE_DHT) - float temp = dht.readTemperature(); - float hum = dht.readHumidity(); - #if defined(SERIAL_PRINTING) - Serial.println("DHT reading: " + String(temp) + "°C"); - Serial.println("DHT reading: " + String(hum) + "%"); - #endif - - client.print("JOB," + - String(config->DUCO_USER) + - SEP_TOKEN + config->START_DIFF + - SEP_TOKEN + String(config->MINER_KEY) + - SEP_TOKEN + "Temp:" + String(temp) + "*C" + - IOT_TOKEN + "Hum:" + String(hum) + "%" + - END_TOKEN); - #elif defined(USE_HSU07M) - float temp = read_hsu07m(); - #if defined(SERIAL_PRINTING) - Serial.println("HSU reading: " + String(temp) + "°C"); - #endif - - client.print("JOB," + - String(config->DUCO_USER) + - SEP_TOKEN + config->START_DIFF + - SEP_TOKEN + String(config->MINER_KEY) + - SEP_TOKEN + "Temp:" + String(temp) + "*C" + - END_TOKEN); - #elif defined(USE_INTERNAL_SENSOR) - float temp = 0; - temp_sensor_read_celsius(&temp); - #if defined(SERIAL_PRINTING) - Serial.println("Internal temp sensor reading: " + String(temp) + "°C"); - #endif - - client.print("JOB," + - String(config->DUCO_USER) + - SEP_TOKEN + config->START_DIFF + - SEP_TOKEN + String(config->MINER_KEY) + - SEP_TOKEN + "CPU Temp:" + String(temp) + "*C" + - END_TOKEN); - #else - client.print("JOB," + - String(config->DUCO_USER) + - SEP_TOKEN + config->START_DIFF + - SEP_TOKEN + String(config->MINER_KEY) + - END_TOKEN); - #endif - - waitForClientData(); - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - Received job with size of " - + String(client_buffer.length()) - + " bytes " + client_buffer); - #endif - - parse(); - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - Parsed job: " - + getLastBlockHash() + " " - + getExpectedHashStr() + " " - + String(getDifficulty())); - #endif - } - - const String &getLastBlockHash() const { return last_block_hash; } - const String &getExpectedHashStr() const { return expected_hash_str; } - const uint8_t *getExpectedHash() const { return expected_hash; } - unsigned int getDifficulty() const { return difficulty; } -}; - -#endif +#pragma GCC optimize("-Ofast") + +#ifndef MINING_JOB_H +#define MINING_JOB_H + +#include +#include +#include +#include +#include + +#include "DSHA1.h" +#include "Counter.h" +#include "Settings.h" + +// https://github.com/esp8266/Arduino/blob/master/cores/esp8266/TypeConversion.cpp +const char base36Chars[36] PROGMEM = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' +}; + +const uint8_t base36CharValues[75] PROGMEM{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, // 0 to 9 + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 0, 0, 0, 0, 0, 0, // Upper case letters + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 // Lower case letters +}; + +#define SPC_TOKEN ' ' +#define END_TOKEN '\n' +#define SEP_TOKEN ',' +#define IOT_TOKEN '@' + +struct MiningConfig { + String host = ""; + int port = 0; + String DUCO_USER = ""; + String RIG_IDENTIFIER = ""; + String MINER_KEY = ""; + String MINER_VER = SOFTWARE_VERSION; + #if defined(ESP8266) + // "High-band" 8266 diff + String START_DIFF = "ESP8266H"; + #elif defined(CONFIG_FREERTOS_UNICORE) + // Single core 32 diff + String START_DIFF = "ESP32S"; + #else + // Normal 32 diff + String START_DIFF = "ESP32"; + #endif + + MiningConfig(String DUCO_USER, String RIG_IDENTIFIER, String MINER_KEY) + : DUCO_USER(DUCO_USER), RIG_IDENTIFIER(RIG_IDENTIFIER), MINER_KEY(MINER_KEY) {} +}; + +class MiningJob { + +public: + MiningConfig *config; + int core = 0; + + MiningJob(int core, MiningConfig *config) { + this->core = core; + this->config = config; + this->client_buffer = ""; + dsha1 = new DSHA1(); + dsha1->warmup(); + generateRigIdentifier(); + } + + void blink(uint8_t count, uint8_t pin = LED_BUILTIN) { + #if defined(LED_BLINKING) + uint8_t state = HIGH; + + for (int x = 0; x < (count << 1); ++x) { + digitalWrite(pin, state ^= HIGH); + delay(50); + } + #else + digitalWrite(LED_BUILTIN, HIGH); + #endif + } + + bool max_micros_elapsed(unsigned long current, unsigned long max_elapsed) { + static unsigned long _start = 0; + + if ((current - _start) > max_elapsed) { + _start = current; + return true; + } + return false; + } + + /* void handleSystemEvents(void) { + #if defined(ESP32) && CORE == 2 + esp_task_wdt_reset(); + #endif + delay(10); // Required vTaskDelay by ESP-IDF + yield(); + ArduinoOTA.handle(); + }*/ + + void mine() { + connectToNode(); + askForJob(); + + dsha1->reset().write((const unsigned char *)getLastBlockHash().c_str(), getLastBlockHash().length()); + + int start_time = micros(); + max_micros_elapsed(start_time, 0); + #if defined(LED_BLINKING) + #if defined(BLUSHYBOX) + for (int i = 0; i < 72; i++) { + analogWrite(LED_BUILTIN, i); + delay(1); + } + #else + digitalWrite(LED_BUILTIN, LOW); + #endif + #endif + for (Counter<10> counter; counter < difficulty; ++counter) { + DSHA1 ctx = *dsha1; + ctx.write((const unsigned char *)counter.c_str(), counter.strlen()).finalize(hashArray); + + #ifndef CONFIG_FREERTOS_UNICORE + #if defined(ESP32) + #define SYSTEM_TIMEOUT 100000 // 10ms for esp32 looks like the lowest value without false watchdog triggers + #else + #define SYSTEM_TIMEOUT 500000 // 50ms for 8266 for same reason as above + #endif + if (max_micros_elapsed(micros(), SYSTEM_TIMEOUT)) { + handleSystemEvents(); + } + #endif + + if (memcmp(getExpectedHash(), hashArray, 20) == 0) { + unsigned long elapsed_time = micros() - start_time; + float elapsed_time_s = elapsed_time * .000001f; + share_count++; + + #if defined(LED_BLINKING) + #if defined(BLUSHYBOX) + for (int i = 72; i > 0; i--) { + analogWrite(LED_BUILTIN, i); + delay(1); + } + #else + digitalWrite(LED_BUILTIN, HIGH); + #endif + #endif + + if (String(core) == "0") { + hashrate = counter / elapsed_time_s; + submit(counter, hashrate, elapsed_time_s); + } else { + hashrate_core_two = counter / elapsed_time_s; + submit(counter, hashrate_core_two, elapsed_time_s); + } + + #if defined(BLUSHYBOX) + gauge_set(hashrate + hashrate_core_two); + #endif + + break; + } + } + } + +private: + String client_buffer; + uint8_t hashArray[20]; + String last_block_hash; + String expected_hash_str; + uint8_t expected_hash[20]; + DSHA1 *dsha1; + WiFiClient client; + String chipID = ""; + + #if defined(ESP8266) + #if defined(BLUSHYBOX) + String MINER_BANNER = "Official BlushyBox Miner (ESP8266)"; + #else + String MINER_BANNER = "Official ESP8266 Miner"; + #endif + #elif defined(CONFIG_FREERTOS_UNICORE) + String MINER_BANNER = "Official ESP32-S2 Miner"; + #else + #if defined(BLUSHYBOX) + String MINER_BANNER = "Official BlushyBox Miner (ESP32)"; + #else + String MINER_BANNER = "Official ESP32 Miner"; + #endif + #endif + + uint8_t *hexStringToUint8Array(const String &hexString, uint8_t *uint8Array, const uint32_t arrayLength) { + assert(hexString.length() >= arrayLength * 2); + const char *hexChars = hexString.c_str(); + for (uint32_t i = 0; i < arrayLength; ++i) { + uint8Array[i] = (pgm_read_byte(base36CharValues + hexChars[i * 2] - '0') << 4) + pgm_read_byte(base36CharValues + hexChars[i * 2 + 1] - '0'); + } + return uint8Array; + } + + void generateRigIdentifier() { + String AutoRigName = ""; + + #if defined(ESP8266) + chipID = String(ESP.getChipId(), HEX); + + if (strcmp(config->RIG_IDENTIFIER.c_str(), "Auto") != 0) + return; + + AutoRigName = "ESP8266-" + chipID; + AutoRigName.toUpperCase(); + config->RIG_IDENTIFIER = AutoRigName.c_str(); + #else + uint64_t chip_id = ESP.getEfuseMac(); + uint16_t chip = (uint16_t)(chip_id >> 32); // Prepare to print a 64 bit value into a char array + char fullChip[23]; + snprintf(fullChip, 23, "%04X%08X", chip, + (uint32_t)chip_id); // Store the (actually) 48 bit chip_id into a char array + + chipID = String(fullChip); + + if (strcmp(config->RIG_IDENTIFIER.c_str(), "Auto") != 0) + return; + // Autogenerate ID if required + AutoRigName = "ESP32-" + String(fullChip); + AutoRigName.toUpperCase(); + config->RIG_IDENTIFIER = AutoRigName.c_str(); + #endif + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - Rig identifier: " + + config->RIG_IDENTIFIER); + #endif + } + + void connectToNode() { + if (client.connected()) return; + + unsigned int stopWatch = millis(); + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - Connecting to a Duino-Coin node..."); + #endif + while (!client.connect(config->host.c_str(), config->port)) { + if (max_micros_elapsed(micros(), 100000)) { + handleSystemEvents(); + } + if (millis()-stopWatch>100000) ESP.restart(); + } + + waitForClientData(); + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - Connected. Node reported version: " + + client_buffer); + #endif + + blink(BLINK_CLIENT_CONNECT); + + /* client.print("MOTD" + END_TOKEN); + waitForClientData(); + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - MOTD: " + + client_buffer); + #endif */ + } + + void waitForClientData() { + client_buffer = ""; + + while (client.connected()) { + if (client.available()) { + client_buffer = client.readStringUntil(END_TOKEN); + if (client_buffer.length() == 1 && client_buffer[0] == END_TOKEN) + client_buffer = "???\n"; // NOTE: Should never happen + break; + } + } + } + + void submit(unsigned long counter, float hashrate, float elapsed_time_s) { + client.print(String(counter) + + SEP_TOKEN + String(hashrate) + + SEP_TOKEN + MINER_BANNER + + SPC_TOKEN + config->MINER_VER + + SEP_TOKEN + config->RIG_IDENTIFIER + + SEP_TOKEN + "DUCOID" + String(chipID) + + SEP_TOKEN + String(WALLET_ID) + + END_TOKEN); + + unsigned long ping_start = millis(); + waitForClientData(); + ping = millis() - ping_start; + + if (client_buffer == "GOOD") { + accepted_share_count++; + } + + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - " + + client_buffer + + " share #" + String(share_count) + + " (" + String(counter) + ")" + + " hashrate: " + String(hashrate / 1000, 2) + " kH/s (" + + String(elapsed_time_s) + "s)\n"); + #endif + } + + bool parse() { + // Create a non-constant copy of the input string + char *job_str_copy = strdup(client_buffer.c_str()); + + if (job_str_copy) { + String tokens[3]; + char *token = strtok(job_str_copy, ","); + for (int i = 0; token != NULL && i < 3; i++) { + tokens[i] = token; + token = strtok(NULL, ","); + } + + last_block_hash = tokens[0]; + expected_hash_str = tokens[1]; + hexStringToUint8Array(expected_hash_str, expected_hash, 20); + difficulty = tokens[2].toInt() * 100 + 1; + + // Free the memory allocated by strdup + free(job_str_copy); + + return true; + } + else { + // Handle memory allocation failure + return false; + } + } + + void askForJob() { + Serial.println("Core [" + String(core) + "] - Asking for a new job for user: " + + String(config->DUCO_USER)); + + #if defined(USE_DS18B20) + sensors.requestTemperatures(); + float temp = sensors.getTempCByIndex(0); + #if defined(SERIAL_PRINTING) + Serial.println("DS18B20 reading: " + String(temp) + "°C"); + #endif + + client.print("JOB," + + String(config->DUCO_USER) + + SEP_TOKEN + config->START_DIFF + + SEP_TOKEN + String(config->MINER_KEY) + + SEP_TOKEN + "Temp:" + String(temp) + "*C" + + END_TOKEN); + #elif defined(USE_DHT) + float temp = dht.readTemperature(); + float hum = dht.readHumidity(); + #if defined(SERIAL_PRINTING) + Serial.println("DHT reading: " + String(temp) + "°C"); + Serial.println("DHT reading: " + String(hum) + "%"); + #endif + + client.print("JOB," + + String(config->DUCO_USER) + + SEP_TOKEN + config->START_DIFF + + SEP_TOKEN + String(config->MINER_KEY) + + SEP_TOKEN + "Temp:" + String(temp) + "*C" + + IOT_TOKEN + "Hum:" + String(hum) + "%" + + END_TOKEN); + #elif defined(USE_HSU07M) + float temp = read_hsu07m(); + #if defined(SERIAL_PRINTING) + Serial.println("HSU reading: " + String(temp) + "°C"); + #endif + + client.print("JOB," + + String(config->DUCO_USER) + + SEP_TOKEN + config->START_DIFF + + SEP_TOKEN + String(config->MINER_KEY) + + SEP_TOKEN + "Temp:" + String(temp) + "*C" + + END_TOKEN); + #elif defined(USE_INTERNAL_SENSOR) + float temp = 0; + temp_sensor_read_celsius(&temp); + #if defined(SERIAL_PRINTING) + Serial.println("Internal temp sensor reading: " + String(temp) + "°C"); + #endif + + client.print("JOB," + + String(config->DUCO_USER) + + SEP_TOKEN + config->START_DIFF + + SEP_TOKEN + String(config->MINER_KEY) + + SEP_TOKEN + "CPU Temp:" + String(temp) + "*C" + + END_TOKEN); + #else + client.print("JOB," + + String(config->DUCO_USER) + + SEP_TOKEN + config->START_DIFF + + SEP_TOKEN + String(config->MINER_KEY) + + END_TOKEN); + #endif + + waitForClientData(); + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - Received job with size of " + + String(client_buffer.length()) + + " bytes " + client_buffer); + #endif + + parse(); + #if defined(SERIAL_PRINTING) + Serial.println("Core [" + String(core) + "] - Parsed job: " + + getLastBlockHash() + " " + + getExpectedHashStr() + " " + + String(getDifficulty())); + #endif + } + + const String &getLastBlockHash() const { return last_block_hash; } + const String &getExpectedHashStr() const { return expected_hash_str; } + const uint8_t *getExpectedHash() const { return expected_hash; } + unsigned int getDifficulty() const { return difficulty; } +}; + +#endif diff --git a/ESP_Code/Settings.h b/ESP_Code/Settings.h index 70f39a4c..e1b54e45 100644 --- a/ESP_Code/Settings.h +++ b/ESP_Code/Settings.h @@ -1,225 +1,239 @@ -// Settings.h -#ifndef SETTINGS_H -#define SETTINGS_H - -// ---------------------- General settings ---------------------- // -// Change the part in brackets to your Duino-Coin username -extern char *DUCO_USER = "my_cool_username"; -// Change the part in brackets to your mining key (if you have set it in the wallet) -extern char *MINER_KEY = "mySecretPass"; -// Change the part in brackets if you want to set a custom miner name -// Use Auto to autogenerate, None for no custom identifier -extern char *RIG_IDENTIFIER = "None"; -// Change the part in brackets to your WiFi name -extern const char SSID[] = "SSID"; -// Change the part in brackets to your WiFi password -extern const char PASSWORD[] = "PASSW0RD"; -// -------------------------------------------------------------- // - -// -------------------- Advanced options ------------------------ // -// Uncomment if you want to host the dashboard page (available on ESPs IP address and mDNS) -// #define WEB_DASHBOARD - -// Comment out the line below if you wish to disable LED blinking -#define LED_BLINKING - -// Uncomment if you want to use LAN8720. WLAN-credentials will be ignored using LAN -// Select correct Board in ArduinoIDE!!! Really! -// #define USE_LAN - -// Comment out the line below if you wish to disable Serial printing -#define SERIAL_PRINTING - -// Edit the line below if you wish to change the serial speed (low values may reduce performance but are less prone to interference) -#define SERIAL_BAUDRATE 500000 - -// ESP8266 WDT loop watchdog. Do not edit this value, but if you must - do not set it too low or it will falsely trigger during mining! -#define LWD_TIMEOUT 30000 - -// Uncomment to disable ESP32 brownout detector if you're suffering from faulty insufficient power detection -// #define DISABLE_BROWNOUT - -// Uncomment to enable WiFiManager captive portal in AP mode -// The board will create its own network you connect to and change the settings -// #define CAPTIVE_PORTAL -// -------------------------------------------------------------- // - -// ------------------------ Displays ---------------------------- // - -// Uncomment to enable a SSD1306 OLED screen on the I2C bus to display mining info in real time -// Default connections (can be overriden by using a different u8g2 initializer, see line 140): -// GND - GND -// VCC - 5V or 3.3V depending on display -// SCL - GPIO22 (ESP32) or GPIO5 (D2 on ESP8266) or GPIO35 (ESP32-S2) -// SDA - GPIO21 (ESP32) or GPIO4 (D1 on ESP8266) or GPIO33 (ESP32-S2) -// #define DISPLAY_SSD1306 - -// Uncomment to enable a 16x2 LCD screen on a direct bus to display mining info in real time -// See line 150 for connections and initializer -// #define DISPLAY_16X2 - -// Uncomment if your device is a Duino BlushyBox device -// #define BLUSHYBOX -// -------------------------------------------------------------- // - -// ---------------------- IoT examples -------------------------- // -// https://github.com/revoxhere/duino-coin/wiki/Duino's-take-on-the-Internet-of-Things - -// Uncomment the line below if you wish to use the internal temperature sensor (Duino IoT example) -// Only ESP32-S2, -S3, -H2, -C2, -C3, -C6 and some old models have one! -// More info: https://www.espboards.dev/blog/esp32-inbuilt-temperature-sensor/ -// NOTE: Mining performance will decrease by about 20 kH/s! -// #define USE_INTERNAL_SENSOR - -// Uncomment the line below if you wish to use a DS18B20 temperature sensor (Duino IoT example) -// NOTE: Mining performance should stay the same -// #define USE_DS18B20 - -// Uncomment the line below if you wish to use a DHT11/22 temperature and humidity sensor (Duino IoT example) -// NOTE: Mining performance should stay the same -// #define USE_DHT - -// Uncomment the line below if you wish to use a HSU07M sensor (Duino IoT Example) -// NOTE: Untested as of right now -// #define USE_HSU07M -// -------------------------------------------------------------- // - -// ---------------- Variables and definitions ------------------- // -// You generally do not need to edit stuff below this line -// unless you're know what you're doing. - -#if defined(ESP8266) - // ESP8266 - #define LED_BUILTIN 2 -#elif defined(CONFIG_FREERTOS_UNICORE) - #if defined(CONFIG_IDF_TARGET_ESP32C3) - // ESP32-C3 - #define LED_BUILTIN 8 - #else - // ESP32-S2 - #define LED_BUILTIN 15 - #endif -#else - // ESP32 - #ifndef LED_BUILTIN - #define LED_BUILTIN 2 - #endif - #if defined(BLUSHYBOX) - #define LED_BUILTIN 4 - #endif -#endif - -#define BLINK_SETUP_COMPLETE 2 -#define BLINK_CLIENT_CONNECT 5 - -#define SOFTWARE_VERSION "4.3" -extern unsigned int hashrate = 0; -extern unsigned int hashrate_core_two = 0; -extern unsigned int difficulty = 0; -extern unsigned long share_count = 0; -extern unsigned long accepted_share_count = 0; -extern String node_id = ""; -extern String WALLET_ID = ""; -extern unsigned int ping = 0; - -#if defined(USE_INTERNAL_SENSOR) - #include "driver/temp_sensor.h" -#endif - -#if defined(USE_DS18B20) - // Install OneWire and DallasTemperature libraries if you get an error - #include - #include - // Change 12 to the pin you've connected your sensor to - const int DSPIN = 12; - - OneWire oneWire(DSPIN); - DallasTemperature extern sensors(&oneWire); -#endif - -#if defined(USE_DHT) - // Install "DHT sensor library" if you get an error - #include - // Change 12 to the pin you've connected your sensor to - #define DHTPIN 12 - // Set DHT11 or DHT22 type accordingly - #define DHTTYPE DHT11 - - DHT extern dht(DHTPIN, DHTTYPE); -#endif - -#if defined(DISPLAY_SSD1306) - // Install "u8g2" if you get an error - #include - #include - // Display definition from the U8G2 library. Edit if you use a different display - // For software I2C, use ..._F_SW_I2C and define the pins in the initializer - U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); -#endif - -#if defined(DISPLAY_16X2) - #include "Wire.h" - // Install "Adafruit_LiquidCrystal" if you get an error - #include "Adafruit_LiquidCrystal.h" - - // initialize the library with the numbers of the interface pins - // RS E D4 D5 D6 D7 - Adafruit_LiquidCrystal lcd(1, 2, 3, 4, 5, 6); -#endif - -#if defined(USE_HSU07M) - #include "Wire.h" - #define HSU07M_ADDRESS 0x4B // Change this if your sensor has a different address - - float read_hsu07m() { - Wire.beginTransmission(HSU07M_ADDRESS); - Wire.write(0x00); - Wire.endTransmission(); - delay(100); - Wire.requestFrom(HSU07M_ADDRESS, 2); - if(Wire.available() >= 2) { - byte tempMSB = Wire.read(); - byte tempLSB = Wire.read(); - int tempRaw = (tempMSB << 8) | tempLSB; - float tempC = (tempRaw / 16.0) - 40.0; - return tempC; - } - return -1.0; - } -#endif - -#if defined(BLUSHYBOX) - #define GAUGE_PIN 5 - #define GAUGE_MAX 190 - #define GAUGE_MIN 0 - #if defined(ESP8266) - #define GAUGE_MAX_HR 80000 - #else - #define GAUGE_MAX_HR 200000 - #endif - extern float hashrate_old = 0.0; - - void gauge_set(float hashrate) { - float old = hashrate_old; - float new_val = hashrate; - - if (hashrate_old == 0) { - float delta = (new_val - old) / 50; - for (int x=0; x < 50; x++) { - analogWrite(5, map(old + x*delta, 0, GAUGE_MAX_HR, GAUGE_MIN, GAUGE_MAX) + random(0, 10)); - delay(20); - } - } else { - float delta = (new_val - old) / 10; - for (int x=0; x < 10; x++) { - analogWrite(5, map(old + x*delta, 0, GAUGE_MAX_HR, GAUGE_MIN, GAUGE_MAX) + random(0, 10)); - delay(10); - } - } - hashrate_old = hashrate; - } -#endif - -IPAddress DNS_SERVER(1, 1, 1, 1); // Cloudflare DNS server - -#endif // End of SETTINGS_H +// Settings.h +#ifndef SETTINGS_H +#define SETTINGS_H + +extern bool displayLock = false; + +// ---------------------- General settings ---------------------- // +// Change the part in brackets to your Duino-Coin username +extern char *DUCO_USER = "discopepereland"; +// Change the part in brackets to your mining key (if you have set it in the wallet) +extern char *MINER_KEY = "170373"; +// Change the part in brackets if you want to set a custom miner name +// Use Auto to autogenerate, None for no custom identifier +extern char *RIG_IDENTIFIER = "esp32_TT-GO"; +// Change the part in brackets to your WiFi name +extern const char SSID[] = "High_speed"; +// Change the part in brackets to your WiFi password +extern const char PASSWORD[] = "&mariagele4mai1996@"; +// -------------------------------------------------------------- // + +// -------------------- Advanced options ------------------------ // +// Uncomment if you want to host the dashboard page (available on ESPs IP address and mDNS) +// #define WEB_DASHBOARD + +// Comment out the line below if you wish to disable LED blinking +#define LED_BLINKING + +// Uncomment if you want to use LAN8720. WLAN-credentials will be ignored using LAN +// Select correct Board in ArduinoIDE!!! Really! +// #define USE_LAN + +// Comment out the line below if you wish to disable Serial printing +#define SERIAL_PRINTING + +// Edit the line below if you wish to change the serial speed (low values may reduce performance but are less prone to interference) +#define SERIAL_BAUDRATE 500000 + +// ESP8266 WDT loop watchdog. Do not edit this value, but if you must - do not set it too low or it will falsely trigger during mining! +#define LWD_TIMEOUT 30000 + +// Uncomment to disable ESP32 brownout detector if you're suffering from faulty insufficient power detection +// #define DISABLE_BROWNOUT + +// Uncomment to enable WiFiManager captive portal in AP mode +// The board will create its own network you connect to and change the settings +// #define CAPTIVE_PORTAL +// -------------------------------------------------------------- // + +// ------------------------ Displays ---------------------------- // + +// Uncomment to enable a SSD1306 OLED screen on the I2C bus to display mining info in real time +// Default connections (can be overriden by using a different u8g2 initializer, see line 140): +// GND - GND +// VCC - 5V or 3.3V depending on display +// SCL - GPIO22 (ESP32) or GPIO5 (D2 on ESP8266) or GPIO35 (ESP32-S2) +// SDA - GPIO21 (ESP32) or GPIO4 (D1 on ESP8266) or GPIO33 (ESP32-S2) +// #define DISPLAY_SSD1306 + +//uncomment to enable Lilygo tt display 1.14 module + #define DISPLAY_114 + +// Uncomment to enable a 16x2 LCD screen on a direct bus to display mining info in real time +// See line 150 for connections and initializer +// #define DISPLAY_16X2 + +// Uncomment if your device is a Duino BlushyBox device +// #define BLUSHYBOX +// -------------------------------------------------------------- // + +// ---------------------- IoT examples -------------------------- // +// https://github.com/revoxhere/duino-coin/wiki/Duino's-take-on-the-Internet-of-Things + +// Uncomment the line below if you wish to use the internal temperature sensor (Duino IoT example) +// Only ESP32-S2, -S3, -H2, -C2, -C3, -C6 and some old models have one! +// More info: https://www.espboards.dev/blog/esp32-inbuilt-temperature-sensor/ +// NOTE: Mining performance will decrease by about 20 kH/s! +// #define USE_INTERNAL_SENSOR + +// Uncomment the line below if you wish to use a DS18B20 temperature sensor (Duino IoT example) +// NOTE: Mining performance should stay the same +// #define USE_DS18B20 + +// Uncomment the line below if you wish to use a DHT11/22 temperature and humidity sensor (Duino IoT example) +// NOTE: Mining performance should stay the same +// #define USE_DHT + +// Uncomment the line below if you wish to use a HSU07M sensor (Duino IoT Example) +// NOTE: Untested as of right now +// #define USE_HSU07M +// -------------------------------------------------------------- // + +// ---------------- Variables and definitions ------------------- // +// You generally do not need to edit stuff below this line +// unless you're know what you're doing. + +#if defined(ESP8266) + // ESP8266 + #define LED_BUILTIN 2 +#elif defined(CONFIG_FREERTOS_UNICORE) + #if defined(CONFIG_IDF_TARGET_ESP32C3) + // ESP32-C3 + #define LED_BUILTIN 8 + #else + // ESP32-S2 + #define LED_BUILTIN 15 + #endif +#else + // ESP32 + #ifndef LED_BUILTIN + #define LED_BUILTIN 2 + #endif + #if defined(BLUSHYBOX) + #define LED_BUILTIN 4 + #endif +#endif + +#define BLINK_SETUP_COMPLETE 2 +#define BLINK_CLIENT_CONNECT 5 + +#define SOFTWARE_VERSION "4.3" +extern unsigned int hashrate = 0; +extern unsigned int hashrate_core_two = 0; +extern unsigned int difficulty = 0; +extern unsigned long share_count = 0; +extern unsigned long accepted_share_count = 0; +extern String node_id = ""; +extern String WALLET_ID = ""; +extern unsigned int ping = 0; + +#if defined(USE_INTERNAL_SENSOR) + #include "driver/temp_sensor.h" +#endif + +#if defined(USE_DS18B20) + // Install OneWire and DallasTemperature libraries if you get an error + #include + #include + // Change 12 to the pin you've connected your sensor to + const int DSPIN = 12; + + OneWire oneWire(DSPIN); + DallasTemperature extern sensors(&oneWire); +#endif + +#if defined(USE_DHT) + // Install "DHT sensor library" if you get an error + #include + // Change 12 to the pin you've connected your sensor to + #define DHTPIN 12 + // Set DHT11 or DHT22 type accordingly + #define DHTTYPE DHT11 + + DHT extern dht(DHTPIN, DHTTYPE); +#endif + +#if defined(DISPLAY_SSD1306) + // Install "u8g2" if you get an error + #include + #include + // Display definition from the U8G2 library. Edit if you use a different display + // For software I2C, use ..._F_SW_I2C and define the pins in the initializer + U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); +#endif + +#if defined(DISPLAY_16X2) + #include "Wire.h" + // Install "Adafruit_LiquidCrystal" if you get an error + #include "Adafruit_LiquidCrystal.h" + + // initialize the library with the numbers of the interface pins + // RS E D4 D5 D6 D7 + Adafruit_LiquidCrystal lcd(1, 2, 3, 4, 5, 6); +#endif + +#if defined(DISPLAY_114) + // Install "lilygo lib TFT_eSPI.h" if you get an error + #include + #include + #include + // Display definition from the tft_eSPI library. Edit if you use a different display + TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h +#endif + +#if defined(USE_HSU07M) + #include "Wire.h" + #define HSU07M_ADDRESS 0x4B // Change this if your sensor has a different address + + float read_hsu07m() { + Wire.beginTransmission(HSU07M_ADDRESS); + Wire.write(0x00); + Wire.endTransmission(); + delay(100); + Wire.requestFrom(HSU07M_ADDRESS, 2); + if(Wire.available() >= 2) { + byte tempMSB = Wire.read(); + byte tempLSB = Wire.read(); + int tempRaw = (tempMSB << 8) | tempLSB; + float tempC = (tempRaw / 16.0) - 40.0; + return tempC; + } + return -1.0; + } +#endif + +#if defined(BLUSHYBOX) + #define GAUGE_PIN 5 + #define GAUGE_MAX 190 + #define GAUGE_MIN 0 + #if defined(ESP8266) + #define GAUGE_MAX_HR 80000 + #else + #define GAUGE_MAX_HR 200000 + #endif + extern float hashrate_old = 0.0; + + void gauge_set(float hashrate) { + float old = hashrate_old; + float new_val = hashrate; + + if (hashrate_old == 0) { + float delta = (new_val - old) / 50; + for (int x=0; x < 50; x++) { + analogWrite(5, map(old + x*delta, 0, GAUGE_MAX_HR, GAUGE_MIN, GAUGE_MAX) + random(0, 10)); + delay(20); + } + } else { + float delta = (new_val - old) / 10; + for (int x=0; x < 10; x++) { + analogWrite(5, map(old + x*delta, 0, GAUGE_MAX_HR, GAUGE_MIN, GAUGE_MAX) + random(0, 10)); + delay(10); + } + } + hashrate_old = hashrate; + } +#endif + +IPAddress DNS_SERVER(1, 1, 1, 1); // Cloudflare DNS server + +#endif // End of SETTINGS_H diff --git a/ESP_Code/User_Setup.h b/ESP_Code/User_Setup.h new file mode 100644 index 00000000..c3e92fa5 --- /dev/null +++ b/ESP_Code/User_Setup.h @@ -0,0 +1,391 @@ +// USER DEFINED SETTINGS +// Set driver type, fonts to be loaded, pins used and SPI control method etc. +// +// See the User_Setup_Select.h file if you wish to be able to define multiple +// setups and then easily select which setup file is used by the compiler. +// +// If this file is edited correctly then all the library example sketches should +// run without the need to make any more changes for a particular hardware setup! +// Note that some sketches are designed for a particular TFT pixel width/height + +// User defined information reported by "Read_User_Setup" test & diagnostics example +#define USER_SETUP_INFO "User_Setup" + +// Define to disable all #warnings in library (can be put in User_Setup_Select.h) +//#define DISABLE_ALL_LIBRARY_WARNINGS + +// ################################################################################## +// +// Section 1. Call up the right driver file and any options for it +// +// ################################################################################## + +// Define STM32 to invoke optimised processor support (only for STM32) +//#define STM32 + +// Defining the STM32 board allows the library to optimise the performance +// for UNO compatible "MCUfriend" style shields +//#define NUCLEO_64_TFT +//#define NUCLEO_144_TFT + +// STM32 8-bit parallel only: +// If STN32 Port A or B pins 0-7 are used for 8-bit parallel data bus bits 0-7 +// then this will improve rendering performance by a factor of ~8x +//#define STM_PORTA_DATA_BUS +//#define STM_PORTB_DATA_BUS + +// Tell the library to use parallel mode (otherwise SPI is assumed) +//#define TFT_PARALLEL_8_BIT +//#defined TFT_PARALLEL_16_BIT // **** 16-bit parallel ONLY for RP2040 processor **** + +// Display type - only define if RPi display +//#define RPI_DISPLAY_TYPE // 20MHz maximum SPI + +// Only define one driver, the other ones must be commented out +//#define ILI9341_DRIVER // Generic driver for common displays +//#define ILI9341_2_DRIVER // Alternative ILI9341 driver, see https://github.com/Bodmer/TFT_eSPI/issues/1172 +//#define ST7735_DRIVER // Define additional parameters below for this display +//#define ILI9163_DRIVER // Define additional parameters below for this display +//#define S6D02A1_DRIVER +//#define RPI_ILI9486_DRIVER // 20MHz maximum SPI +//#define HX8357D_DRIVER +//#define ILI9481_DRIVER +//#define ILI9486_DRIVER +//#define ILI9488_DRIVER // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high) +#define ST7789_DRIVER // Full configuration option, define additional parameters below for this display +//#define ST7789_2_DRIVER // Minimal configuration option, define additional parameters below for this display +//#define R61581_DRIVER +//#define RM68140_DRIVER +//#define ST7796_DRIVER +//#define SSD1351_DRIVER +//#define SSD1963_480_DRIVER +//#define SSD1963_800_DRIVER +//#define SSD1963_800ALT_DRIVER +//#define ILI9225_DRIVER +//#define GC9A01_DRIVER + +// Some displays support SPI reads via the MISO pin, other displays have a single +// bi-directional SDA pin and the library will try to read this via the MOSI line. +// To use the SDA line for reading data from the TFT uncomment the following line: + +// #define TFT_SDA_READ // This option is for ESP32 ONLY, tested with ST7789 and GC9A01 display only + +// For ST7735, ST7789 and ILI9341 ONLY, define the colour order IF the blue and red are swapped on your display +// Try ONE option at a time to find the correct colour order for your display + +// #define TFT_RGB_ORDER TFT_RGB // Colour order Red-Green-Blue +// #define TFT_RGB_ORDER TFT_BGR // Colour order Blue-Green-Red + +// For M5Stack ESP32 module with integrated ILI9341 display ONLY, remove // in line below + +// #define M5STACK + +// For ST7789, ST7735, ILI9163 and GC9A01 ONLY, define the pixel width and height in portrait orientation +// #define TFT_WIDTH 80 + #define TFT_WIDTH 135 +// #define TFT_WIDTH 172 // ST7789 172 x 320 +// #define TFT_WIDTH 170 // ST7789 170 x 320 +// #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320 +// #define TFT_HEIGHT 160 +// #define TFT_HEIGHT 135 + #define TFT_HEIGHT 240 // ST7789 240 x 240 +// #define TFT_HEIGHT 320 // ST7789 240 x 320 +// #define TFT_HEIGHT 240 // GC9A01 240 x 240 + +// For ST7735 ONLY, define the type of display, originally this was based on the +// colour of the tab on the screen protector film but this is not always true, so try +// out the different options below if the screen does not display graphics correctly, +// e.g. colours wrong, mirror images, or stray pixels at the edges. +// Comment out ALL BUT ONE of these options for a ST7735 display driver, save this +// this User_Setup file, then rebuild and upload the sketch to the board again: + +// #define ST7735_INITB +// #define ST7735_GREENTAB +// #define ST7735_GREENTAB2 +// #define ST7735_GREENTAB3 +// #define ST7735_GREENTAB128 // For 128 x 128 display +// #define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 offset) +// #define ST7735_ROBOTLCD // For some RobotLCD Arduino shields (128x160, BGR, https://docs.arduino.cc/retired/getting-started-guides/TFT) +// #define ST7735_REDTAB +// #define ST7735_BLACKTAB +// #define ST7735_REDTAB160x80 // For 160 x 80 display with 24 pixel offset + +// If colours are inverted (white shows as black) then uncomment one of the next +// 2 lines try both options, one of the options should correct the inversion. + +// #define TFT_INVERSION_ON +// #define TFT_INVERSION_OFF + + +// ################################################################################## +// +// Section 2. Define the pins that are used to interface with the display here +// +// ################################################################################## + +// If a backlight control signal is available then define the TFT_BL pin in Section 2 +// below. The backlight will be turned ON when tft.begin() is called, but the library +// needs to know if the LEDs are ON with the pin HIGH or LOW. If the LEDs are to be +// driven with a PWM signal or turned OFF/ON then this must be handled by the user +// sketch. e.g. with digitalWrite(TFT_BL, LOW); + +// #define TFT_BL 32 // LED back-light control pin +// #define TFT_BACKLIGHT_ON HIGH // Level to turn ON back-light (HIGH or LOW) + + + +// We must use hardware SPI, a minimum of 3 GPIO pins is needed. +// Typical setup for ESP8266 NodeMCU ESP-12 is : +// +// Display SDO/MISO to NodeMCU pin D6 (or leave disconnected if not reading TFT) +// Display LED to NodeMCU pin VIN (or 5V, see below) +// Display SCK to NodeMCU pin D5 +// Display SDI/MOSI to NodeMCU pin D7 +// Display DC (RS/AO)to NodeMCU pin D3 +// Display RESET to NodeMCU pin D4 (or RST, see below) +// Display CS to NodeMCU pin D8 (or GND, see below) +// Display GND to NodeMCU pin GND (0V) +// Display VCC to NodeMCU 5V or 3.3V +// +// The TFT RESET pin can be connected to the NodeMCU RST pin or 3.3V to free up a control pin +// +// The DC (Data Command) pin may be labelled AO or RS (Register Select) +// +// With some displays such as the ILI9341 the TFT CS pin can be connected to GND if no more +// SPI devices (e.g. an SD Card) are connected, in this case comment out the #define TFT_CS +// line below so it is NOT defined. Other displays such at the ST7735 require the TFT CS pin +// to be toggled during setup, so in these cases the TFT_CS line must be defined and connected. +// +// The NodeMCU D0 pin can be used for RST +// +// +// Note: only some versions of the NodeMCU provide the USB 5V on the VIN pin +// If 5V is not available at a pin you can use 3.3V but backlight brightness +// will be lower. + + +// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP8266 SETUP ###### + +// For NodeMCU - use pin numbers in the form PIN_Dx where Dx is the NodeMCU pin designation +//#define TFT_MISO PIN_D6 // Automatically assigned with ESP8266 if not defined +//#define TFT_MOSI PIN_D7 // Automatically assigned with ESP8266 if not defined +//#define TFT_SCLK PIN_D5 // Automatically assigned with ESP8266 if not defined + +//#define TFT_CS PIN_D8 // Chip select control pin D8 +//#define TFT_DC PIN_D3 // Data Command control pin +//#define TFT_RST PIN_D4 // Reset pin (could connect to NodeMCU RST, see next line) +//#define TFT_RST -1 // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V + + +//#define TFT_BL PIN_D1 // LED back-light (only for ST7789 with backlight control pin) + +//#define TOUCH_CS PIN_D2 // Chip select pin (T_CS) of touch screen + +//#define TFT_WR PIN_D2 // Write strobe for modified Raspberry Pi TFT only + + +// ###### FOR ESP8266 OVERLAP MODE EDIT THE PIN NUMBERS IN THE FOLLOWING LINES ###### + +// Overlap mode shares the ESP8266 FLASH SPI bus with the TFT so has a performance impact +// but saves pins for other functions. It is best not to connect MISO as some displays +// do not tristate that line when chip select is high! +// Note: Only one SPI device can share the FLASH SPI lines, so a SPI touch controller +// cannot be connected as well to the same SPI signals. +// On NodeMCU 1.0 SD0=MISO, SD1=MOSI, CLK=SCLK to connect to TFT in overlap mode +// On NodeMCU V3 S0 =MISO, S1 =MOSI, S2 =SCLK +// In ESP8266 overlap mode the following must be defined + +//#define TFT_SPI_OVERLAP + +// In ESP8266 overlap mode the TFT chip select MUST connect to pin D3 +//#define TFT_CS PIN_D3 +//#define TFT_DC PIN_D5 // Data Command control pin +//#define TFT_RST PIN_D4 // Reset pin (could connect to NodeMCU RST, see next line) +//#define TFT_RST -1 // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V + + +// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP32 SETUP ###### + +// For ESP32 Dev board (only tested with ILI9341 display) +// The hardware SPI can be mapped to any pins + +//#define TFT_MISO 19 +#define TFT_MOSI 19 +#define TFT_SCLK 18 +#define TFT_CS 5 // Chip select control pin +#define TFT_DC 16 // Data Command control pin +#define TFT_BL 4 // LED back-light + +#define TFT_RST 23 // Reset pin (could connect to RST pin) +//#define TFT_RST -1 // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST + +// For ESP32 Dev board (only tested with GC9A01 display) +// The hardware SPI can be mapped to any pins + +//#define TFT_MOSI 15 // In some display driver board, it might be written as "SDA" and so on. +//#define TFT_SCLK 14 +//#define TFT_CS 5 // Chip select control pin +//#define TFT_DC 27 // Data Command control pin +//#define TFT_RST 33 // Reset pin (could connect to Arduino RESET pin) +//#define TFT_BL 22 // LED back-light + +//#define TOUCH_CS 21 // Chip select pin (T_CS) of touch screen + +//#define TFT_WR 22 // Write strobe for modified Raspberry Pi TFT only + +// For the M5Stack module use these #define lines +//#define TFT_MISO 19 +//#define TFT_MOSI 23 +//#define TFT_SCLK 18 +//#define TFT_CS 14 // Chip select control pin +//#define TFT_DC 27 // Data Command control pin +//#define TFT_RST 33 // Reset pin (could connect to Arduino RESET pin) +//#define TFT_BL 32 // LED back-light (required for M5Stack) + +// ###### EDIT THE PINs BELOW TO SUIT YOUR ESP32 PARALLEL TFT SETUP ###### + +// The library supports 8-bit parallel TFTs with the ESP32, the pin +// selection below is compatible with ESP32 boards in UNO format. +// Wemos D32 boards need to be modified, see diagram in Tools folder. +// Only ILI9481 and ILI9341 based displays have been tested! + +// Parallel bus is only supported for the STM32 and ESP32 +// Example below is for ESP32 Parallel interface with UNO displays + +// Tell the library to use 8-bit parallel mode (otherwise SPI is assumed) +//#define TFT_PARALLEL_8_BIT + +// The ESP32 and TFT the pins used for testing are: +//#define TFT_CS 33 // Chip select control pin (library pulls permanently low +//#define TFT_DC 15 // Data Command control pin - must use a pin in the range 0-31 +//#define TFT_RST 32 // Reset pin, toggles on startup + +//#define TFT_WR 4 // Write strobe control pin - must use a pin in the range 0-31 +//#define TFT_RD 2 // Read strobe control pin + +//#define TFT_D0 12 // Must use pins in the range 0-31 for the data bus +//#define TFT_D1 13 // so a single register write sets/clears all bits. +//#define TFT_D2 26 // Pins can be randomly assigned, this does not affect +//#define TFT_D3 25 // TFT screen update performance. +//#define TFT_D4 17 +//#define TFT_D5 16 +//#define TFT_D6 27 +//#define TFT_D7 14 + +// ###### EDIT THE PINs BELOW TO SUIT YOUR STM32 SPI TFT SETUP ###### + +// The TFT can be connected to SPI port 1 or 2 +//#define TFT_SPI_PORT 1 // SPI port 1 maximum clock rate is 55MHz +//#define TFT_MOSI PA7 +//#define TFT_MISO PA6 +//#define TFT_SCLK PA5 + +//#define TFT_SPI_PORT 2 // SPI port 2 maximum clock rate is 27MHz +//#define TFT_MOSI PB15 +//#define TFT_MISO PB14 +//#define TFT_SCLK PB13 + +// Can use Ardiuno pin references, arbitrary allocation, TFT_eSPI controls chip select +//#define TFT_CS D5 // Chip select control pin to TFT CS +//#define TFT_DC D6 // Data Command control pin to TFT DC (may be labelled RS = Register Select) +//#define TFT_RST D7 // Reset pin to TFT RST (or RESET) +// OR alternatively, we can use STM32 port reference names PXnn +//#define TFT_CS PE11 // Nucleo-F767ZI equivalent of D5 +//#define TFT_DC PE9 // Nucleo-F767ZI equivalent of D6 +//#define TFT_RST PF13 // Nucleo-F767ZI equivalent of D7 + +//#define TFT_RST -1 // Set TFT_RST to -1 if the display RESET is connected to processor reset + // Use an Arduino pin for initial testing as connecting to processor reset + // may not work (pulse too short at power up?) + +// ################################################################################## +// +// Section 3. Define the fonts that are to be used here +// +// ################################################################################## + +// Comment out the #defines below with // to stop that font being loaded +// The ESP8366 and ESP32 have plenty of memory so commenting out fonts is not +// normally necessary. If all fonts are loaded the extra FLASH space required is +// about 17Kbytes. To save FLASH space only enable the fonts you need! + +#define LOAD_GLCD // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH +#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters +#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters +#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm +#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-. +#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-. +//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT +#define LOAD_GFXFF // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts + +// Comment out the #define below to stop the SPIFFS filing system and smooth font code being loaded +// this will save ~20kbytes of FLASH +#define SMOOTH_FONT + + +// ################################################################################## +// +// Section 4. Other options +// +// ################################################################################## + +// For RP2040 processor and SPI displays, uncomment the following line to use the PIO interface. +//#define RP2040_PIO_SPI // Leave commented out to use standard RP2040 SPI port interface + +// For RP2040 processor and 8 or 16-bit parallel displays: +// The parallel interface write cycle period is derived from a division of the CPU clock +// speed so scales with the processor clock. This means that the divider ratio may need +// to be increased when overclocking. It may also need to be adjusted dependant on the +// display controller type (ILI94341, HX8357C etc.). If RP2040_PIO_CLK_DIV is not defined +// the library will set default values which may not suit your display. +// The display controller data sheet will specify the minimum write cycle period. The +// controllers often work reliably for shorter periods, however if the period is too short +// the display may not initialise or graphics will become corrupted. +// PIO write cycle frequency = (CPU clock/(4 * RP2040_PIO_CLK_DIV)) +//#define RP2040_PIO_CLK_DIV 1 // 32ns write cycle at 125MHz CPU clock +//#define RP2040_PIO_CLK_DIV 2 // 64ns write cycle at 125MHz CPU clock +//#define RP2040_PIO_CLK_DIV 3 // 96ns write cycle at 125MHz CPU clock + +// For the RP2040 processor define the SPI port channel used (default 0 if undefined) +//#define TFT_SPI_PORT 1 // Set to 0 if SPI0 pins are used, or 1 if spi1 pins used + +// For the STM32 processor define the SPI port channel used (default 1 if undefined) +//#define TFT_SPI_PORT 2 // Set to 1 for SPI port 1, or 2 for SPI port 2 + +// Define the SPI clock frequency, this affects the graphics rendering speed. Too +// fast and the TFT driver will not keep up and display corruption appears. +// With an ILI9341 display 40MHz works OK, 80MHz sometimes fails +// With a ST7735 display more than 27MHz may not work (spurious pixels and lines) +// With an ILI9163 display 27 MHz works OK. + +// #define SPI_FREQUENCY 1000000 +// #define SPI_FREQUENCY 5000000 +// #define SPI_FREQUENCY 10000000 +// #define SPI_FREQUENCY 20000000 +#define SPI_FREQUENCY 27000000 +// #define SPI_FREQUENCY 40000000 +// #define SPI_FREQUENCY 55000000 // STM32 SPI1 only (SPI2 maximum is 27MHz) +// #define SPI_FREQUENCY 80000000 + +// Optional reduced SPI frequency for reading TFT +#define SPI_READ_FREQUENCY 20000000 + +// The XPT2046 requires a lower SPI clock rate of 2.5MHz so we define that here: +#define SPI_TOUCH_FREQUENCY 2500000 + +// The ESP32 has 2 free SPI ports i.e. VSPI and HSPI, the VSPI is the default. +// If the VSPI port is in use and pins are not accessible (e.g. TTGO T-Beam) +// then uncomment the following line: +//#define USE_HSPI_PORT + +// Comment out the following #define if "SPI Transactions" do not need to be +// supported. When commented out the code size will be smaller and sketches will +// run slightly faster, so leave it commented out unless you need it! + +// Transaction support is needed to work with SD library but not needed with TFT_SdFat +// Transaction support is required if other SPI devices are connected. + +// Transactions are automatically enabled by the library for an ESP32 (to use HAL mutex) +// so changing it here has no effect + +// #define SUPPORT_TRANSACTIONS From 468245d6748617bcbd35f2862d2fe3d7a9eb8332 Mon Sep 17 00:00:00 2001 From: jpx13 Date: Sun, 25 Aug 2024 14:35:39 +0200 Subject: [PATCH 04/14] changed settings.h --- ESP_Code/Settings.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ESP_Code/Settings.h b/ESP_Code/Settings.h index e1b54e45..536ae068 100644 --- a/ESP_Code/Settings.h +++ b/ESP_Code/Settings.h @@ -6,16 +6,16 @@ extern bool displayLock = false; // ---------------------- General settings ---------------------- // // Change the part in brackets to your Duino-Coin username -extern char *DUCO_USER = "discopepereland"; +extern char *DUCO_USER = "your username"; // Change the part in brackets to your mining key (if you have set it in the wallet) -extern char *MINER_KEY = "170373"; +extern char *MINER_KEY = "your mining key"; // Change the part in brackets if you want to set a custom miner name // Use Auto to autogenerate, None for no custom identifier extern char *RIG_IDENTIFIER = "esp32_TT-GO"; // Change the part in brackets to your WiFi name -extern const char SSID[] = "High_speed"; +extern const char SSID[] = "your wifi ssid"; // Change the part in brackets to your WiFi password -extern const char PASSWORD[] = "&mariagele4mai1996@"; +extern const char PASSWORD[] = "your wifi password"; // -------------------------------------------------------------- // // -------------------- Advanced options ------------------------ // From 7406a5ee3f7ad1af9a17b3892218ac24e609d494 Mon Sep 17 00:00:00 2001 From: jpx13 Date: Fri, 30 Aug 2024 16:54:38 +0200 Subject: [PATCH 05/14] New Mining display screen Changed the mining display screen to new version changed font --- ESP_Code/DisplayHal.h | 116 ++++++++++++++++++++++++++---------------- 1 file changed, 73 insertions(+), 43 deletions(-) diff --git a/ESP_Code/DisplayHal.h b/ESP_Code/DisplayHal.h index b8e46fa3..97bab144 100644 --- a/ESP_Code/DisplayHal.h +++ b/ESP_Code/DisplayHal.h @@ -15,14 +15,17 @@ #endif #if defined(DISPLAY_114) + static const unsigned char PROGMEM image_duco_square_bits[] = {0xaa,0xaa,0xa0,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x03,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x7f,0xff,0xf0,0x00,0x00,0x00,0x00,0x1f,0xff,0xf8,0x00,0x00,0x00,0x00,0x07,0xff,0xf8,0x00,0x00,0x00,0x00,0x03,0xff,0xf8,0x00,0x00,0x00,0x00,0x03,0xff,0xfc,0xff,0xff,0x80,0x00,0x01,0xff,0xfc,0xff,0xff,0xf0,0x00,0x00,0xff,0xfc,0xff,0xff,0xfe,0x00,0x00,0xff,0xfe,0xff,0xff,0xff,0x00,0x00,0xff,0xfe,0xff,0xff,0xff,0x80,0x00,0x7f,0xfe,0xff,0xff,0xff,0xc0,0x00,0x7f,0xfe,0xff,0xff,0xff,0xe0,0x00,0x7f,0xfe,0xff,0xff,0xff,0xe0,0x00,0x7f,0xfe,0x00,0x0f,0xff,0xf0,0x00,0x3f,0xff,0x00,0x00,0xff,0xf0,0x00,0x3f,0xff,0x00,0x00,0x7f,0xf0,0x00,0x3f,0xff,0x00,0x00,0x3f,0xf8,0x00,0x3f,0xff,0x00,0x00,0x1f,0xf8,0x00,0x3f,0xff,0x00,0x00,0x1f,0xf8,0x00,0x3f,0xff,0x00,0x00,0x1f,0xf8,0x00,0x3f,0xff,0x00,0x00,0x1f,0xf8,0x00,0x3f,0xff,0x00,0x00,0x1f,0xf8,0x00,0x3f,0xff,0x00,0x00,0x1f,0xf8,0x00,0x3f,0xff,0x00,0x00,0x1f,0xf8,0x00,0x3f,0xff,0x00,0x00,0x3f,0xf8,0x00,0x3f,0xff,0x00,0x00,0x7f,0xf0,0x00,0x3f,0xff,0x00,0x00,0xff,0xf0,0x00,0x3f,0xff,0x00,0x07,0xff,0xf0,0x00,0x3f,0xff,0xff,0xff,0xff,0xf0,0x00,0x3f,0xfe,0xff,0xff,0xff,0xe0,0x00,0x7f,0xfe,0xff,0xff,0xff,0xc0,0x00,0x7f,0xfe,0xff,0xff,0xff,0xc0,0x00,0x7f,0xfe,0xff,0xff,0xff,0x80,0x00,0x7f,0xfe,0xff,0xff,0xfe,0x00,0x00,0xff,0xfe,0xff,0xff,0xf8,0x00,0x00,0xff,0xfc,0xff,0xff,0xc0,0x00,0x01,0xff,0xfc,0xaa,0xa0,0x00,0x00,0x01,0xff,0xfc,0x00,0x00,0x00,0x00,0x03,0xff,0xfc,0x00,0x00,0x00,0x00,0x07,0xff,0xf8,0x00,0x00,0x00,0x00,0x0f,0xff,0xf8,0x00,0x00,0x00,0x00,0x3f,0xff,0xf0,0x00,0x00,0x00,0x00,0xff,0xff,0xf0,0x00,0x00,0x00,0x1f,0xff,0xff,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xff,0xfa,0x80,0x00,0x00,0x00}; static const unsigned char PROGMEM image_duco_logo_bits[] = {0xff,0xf8,0x00,0xff,0xfe,0x00,0xff,0xff,0x80,0x00,0x07,0xc0,0x00,0x03,0xe0,0x00,0x01,0xf0,0xff,0xf1,0xf0,0x00,0x18,0xf8,0x00,0x0c,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x0c,0x78,0x00,0x18,0xf0,0xff,0xf0,0xf0,0x00,0x01,0xe0,0x00,0x01,0xc0,0x00,0x07,0xc0,0xff,0xff,0x80,0xff,0xff,0x00,0xff,0xf8,0x00}; static const unsigned char PROGMEM image_check_contour_bits[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x50,0x20,0x88,0x51,0x10,0x8a,0x20,0x44,0x40,0x20,0x80,0x11,0x00,0x0a,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; - static const unsigned char PROGMEM image_wifi_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x46,0x0c,0x40,0x88,0x02,0x20,0x10,0xe1,0x00,0x23,0x18,0x80,0x04,0x04,0x00,0x08,0x42,0x00,0x01,0xb0,0x00,0x02,0x08,0x00,0x00,0x40,0x00,0x00,0xa0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; - static const unsigned char PROGMEM image_wifi_2_bars_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x46,0x0c,0x40,0x88,0x02,0x20,0x10,0xe1,0x00,0x23,0x18,0x80,0x04,0x04,0x00,0x08,0x42,0x00,0x01,0xf0,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; - static const unsigned char PROGMEM image_wifi_3_bars_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x46,0x0c,0x40,0x88,0x02,0x20,0x10,0xe1,0x00,0x23,0xf8,0x80,0x07,0x1c,0x00,0x0c,0x46,0x00,0x05,0xf4,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; - static const unsigned char PROGMEM image_wifi_4_bars_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x47,0xbc,0x40,0x8e,0x0e,0x20,0x18,0xe3,0x00,0x33,0xf9,0x80,0x17,0x1d,0x00,0x0c,0x46,0x00,0x05,0xf4,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; - static const unsigned char PROGMEM image_wifi_5_bars_bits[] = {0x01,0xf0,0x00,0x07,0xbc,0x00,0x1e,0x0f,0x00,0x31,0xf1,0x80,0x77,0xbd,0xc0,0xce,0x0e,0x60,0x58,0xe3,0x40,0x33,0xf9,0x80,0x17,0x1d,0x00,0x0c,0x46,0x00,0x05,0xf4,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_ButtonRight_bits[] = {0x80,0xc0,0xe0,0xf0,0xe0,0xc0,0x80}; + static const unsigned char PROGMEM image_clock_bits[] = {0x07,0xc0,0x18,0x30,0x29,0x28,0x41,0x04,0x61,0x0c,0x81,0x02,0x81,0x02,0xe1,0x0e,0x80,0x82,0x80,0x42,0x60,0x2c,0x40,0x04,0x29,0x28,0x19,0x30,0x07,0xc0,0x00,0x00}; static const unsigned char PROGMEM image_paint_0_bits[] = {0x7f,0xff,0xff,0xf0,0x00,0x00,0x7f,0xff,0xff,0xfc,0x00,0x00,0x7f,0xff,0xff,0xff,0x00,0x00,0x7f,0xff,0xff,0xff,0x80,0x00,0x7f,0xff,0xff,0xff,0xe0,0x00,0x7f,0xff,0xff,0xff,0xf0,0x00,0x7f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x07,0xfc,0x00,0x00,0x00,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x01,0xfe,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x7f,0xff,0xff,0xc0,0x7f,0x00,0x7f,0xff,0xff,0xf0,0x3f,0x80,0x00,0x00,0x00,0x38,0x3f,0x80,0x00,0x00,0x00,0x1c,0x1f,0x80,0x00,0x00,0x00,0x0e,0x1f,0x80,0x00,0x00,0x00,0x07,0x1f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x07,0x0f,0x80,0x00,0x00,0x00,0x0e,0x1f,0x80,0x00,0x00,0x00,0x1c,0x1f,0x80,0x00,0x00,0x00,0x38,0x3f,0x80,0xff,0xff,0xff,0xf0,0x7f,0x80,0xff,0xff,0xff,0xc0,0x7f,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x0f,0xfe,0x00,0x00,0x00,0x00,0x3f,0xfc,0x00,0xff,0xff,0xff,0xff,0xf8,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0xe0,0x00,0xff,0xff,0xff,0xff,0x80,0x00,0xff,0xff,0xff,0xfe,0x00,0x00,0xff,0xff,0xff,0xf0,0x00,0x00,0xff,0xff,0xff,0xc0,0x00,0x00}; + static const unsigned char PROGMEM image_network_1_bits[] = {0x00,0x0e,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xea,0x00,0xaa,0x00,0xaa,0x00,0xaa,0x0e,0xaa,0x0a,0xaa,0x0a,0xaa,0x0a,0xaa,0xea,0xaa,0xaa,0xaa,0xee,0xee,0x00,0x00}; + static const unsigned char PROGMEM image_network_1_bar_bits[] = {0x00,0x0e,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xea,0x00,0xaa,0x00,0xaa,0x00,0xaa,0x0e,0xaa,0x0a,0xaa,0x0a,0xaa,0x0a,0xaa,0xea,0xaa,0xea,0xaa,0xee,0xee,0x00,0x00}; + static const unsigned char PROGMEM image_network_2_bars_bits[] = {0x00,0x0e,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xea,0x00,0xaa,0x00,0xaa,0x00,0xaa,0x0e,0xaa,0x0e,0xaa,0x0e,0xaa,0x0e,0xaa,0xee,0xaa,0xee,0xaa,0xee,0xee,0x00,0x00}; + static const unsigned char PROGMEM image_network_4_bars_bits[] = {0x00,0x0e,0x00,0x0e,0x00,0x0e,0x00,0x0e,0x00,0xee,0x00,0xee,0x00,0xee,0x00,0xee,0x0e,0xee,0x0e,0xee,0x0e,0xee,0x0e,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x00,0x00}; + static const unsigned char PROGMEM image_network_3_bars_bits[] = {0x00,0x0e,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xea,0x00,0xea,0x00,0xea,0x00,0xea,0x0e,0xea,0x0e,0xea,0x0e,0xea,0x0e,0xea,0xee,0xea,0xee,0xea,0xee,0xee,0x00,0x00}; #endif #if defined(DISPLAY_16X2) @@ -438,54 +441,81 @@ #if defined(DISPLAY_114) tft.fillScreen(TFT_BLACK); - tft.setTextSize(1); + tft.drawBitmap(2, 2, image_duco_square_bits, 56, 69, 0xFC00); + tft.setFreeFont(); + tft.setTextSize(3); tft.setTextColor(TFT_WHITE,TFT_BLACK); - tft.drawString("kH/s", 128, 45,2); - if (hashrate.toFloat() < 100.0) { - tft.setTextColor(TFT_ORANGE,TFT_BLACK); - tft.drawString(hashrate.c_str(), 1, 27,6 ); + if (hashrate.toFloat() < 100.0) { + tft.drawString(hashrate.c_str(), 120, 10 ); } else { - tft.setTextColor(TFT_ORANGE,TFT_BLACK); - tft.drawString(hashrate.c_str(), 1, 27,6 ); + tft.drawString(hashrate.c_str(), 120, 10 ); } - - tft.setTextColor(0x2FF2); - tft.drawString(node.c_str(),100,3,2 ); - tft.drawLine(0, 21, 240, 21, 0xFFE0); - - tft.setTextColor(0xFFFF); - tft.drawString((accepted_shares + "/" + total_shares).c_str(),21,80,2 ); - tft.drawString(("(" + accept_rate + "%)").c_str(),169, 84,1 ); - tft.drawLine(0, 70, 240, 70, 0xFFE0); - tft.drawString("Uptime", 162, 107,1); - tft.drawString((ping + "ms").c_str(),31, 3,2 ); - - tft.drawString(uptime.c_str(),150, 118,2 ); - tft.drawString(sharerate.c_str(),208, 45,2 ); - tft.drawString(difficulty.c_str(),204, 28,2 ); - - tft.drawBitmap(4, 79, image_check_contour_bits, 13, 16, 0x7E8); - tft.drawLine(0, 100, 240, 100, 0xFFE0); + tft.drawLine(115, 40, 238, 40, 0x418); + tft.setTextSize(1); + tft.drawString("kH/s", 211, 24); + tft.setTextColor(0x400); + tft.drawString("Rev", 66, 8); + tft.setTextSize(2); + tft.drawString(String(SOFTWARE_VERSION).c_str(),66,22 ); + tft.drawLine(0, 75, 240, 75, 0x41F); + tft.setTextColor(0xFC00); + tft.drawString("uinocoin MINER", 61, 57); + tft.drawBitmap(1, 76, image_check_contour_bits, 13, 16, 0x7E8); + tft.setTextColor(0x410); + tft.setTextSize(1); + tft.drawString((accepted_shares + "/" + total_shares).c_str(),18,81 ); + tft.drawLine(240, 41, 114, 41, 0x15); + tft.setTextColor(0xAD55); + tft.drawString("IP:", 130, 44); + tft.setTextColor(0x8430); + tft.drawString(String(WiFi.localIP().toString()).c_str(),149, 44); + tft.drawBitmap(6, 92, image_ButtonRight_bits, 4, 7, 0x7E0); + tft.setTextColor(0x410); + tft.drawString("acc. sh", 69, 92); + tft.drawString(("(" + accept_rate + "%)").c_str(),18, 92 ); + tft.drawLine(119, 76, 119, 134, 0x41F); + tft.drawLine(237, 39, 116, 39, 0x57FF); + tft.drawLine(0, 105, 240, 105, 0x41F); + tft.setTextColor(0xA800); + tft.drawString("diff:", 125, 81); + tft.setTextColor(0xFFE0); + tft.drawString("sh/s:", 125, 92); + tft.setTextColor(0xAD55); + tft.drawString(sharerate.c_str(),164, 92 ); + tft.drawString(difficulty.c_str(),162, 81 ); + tft.drawString("Wifi", 199, 81); + tft.drawString("Ping", 123, 123); + tft.setTextColor(0x8410); + tft.drawString("Miner Uptime", 28, 110); + tft.drawString(uptime.c_str(),35, 122 ); + tft.drawBitmap(5.5, 112, image_clock_bits, 15, 16, 0x8410); + tft.drawLine(115, 40, 115, 1, 0x418); + tft.setTextColor(0xAD55); + tft.drawString("ESP32", 69, 44); + tft.drawLine(116, 39, 116, 2, 0x7FF); + tft.drawString("Node", 123, 111); + tft.drawLine(114, 41, 114, 0, 0x15); + tft.setTextColor(0x4666); + tft.drawString(node.c_str(), 149, 111); + tft.drawString((ping + "ms").c_str(),156, 123 ); + tft.drawLine(117, 2, 237, 2, 0x87FF); + tft.drawLine(115, 1, 238, 1, 0x418); + tft.drawLine(237, 2, 237, 39, 0x87FF); + tft.drawLine(238, 2, 238, 39, 0x418); + tft.drawLine(115, 0, 239, 0, 0x15); + tft.drawLine(239, 1, 239, 40, 0x15); + if (WiFi.RSSI() > -40) { - tft.drawBitmap(3, 3, image_wifi_5_bars_bits, 19, 16, 0xFFFF); + tft.drawBitmap(218, 87, image_network_4_bars_bits, 15, 16, 0xFFFF); } else if (WiFi.RSSI() > -60) { - tft.drawBitmap(3, 3, image_wifi_4_bars_bits, 19, 16, 0xFFFF); + tft.drawBitmap(218, 86, image_network_3_bars_bits, 15, 16, 0xFFFF); } else if (WiFi.RSSI() > -75) { - tft.drawBitmap(3, 3, image_wifi_2_bars_bits, 19, 16, 0xFFFF); + tft.drawBitmap(218, 86, image_network_2_bars_bits, 15, 16, 0xFFFF); } else { - tft.drawBitmap(3, 3, image_wifi_bits, 19, 16, 0xFFFF); + tft.drawBitmap(218, 86, image_network_1_bar_bits, 15, 16, 0xFFFF); } - tft.drawBitmap(1, 108, image_duco_logo_bits, 21, 24, 0xFC00); - - tft.drawString(String(WiFi.localIP().toString()).c_str(),28, 122,1); - tft.drawString("Duinocoin", 28, 109,1); - tft.drawString(String(SOFTWARE_VERSION).c_str(),87,109,1 ); - - tft.drawString("diff", 173, 28,2); - tft.drawString("sh/s", 165, 45,2); - #endif } #endif From 727648eac0bd099c439f478f55fa3a7eb623117c Mon Sep 17 00:00:00 2001 From: jpx13 Date: Tue, 3 Sep 2024 13:14:02 +0200 Subject: [PATCH 06/14] dded support for TFT 7735 160 x 128 display Also both settings are available in the User_Setup.h the user has to comment out or uncomment the lines according to its display type note: For st7735 the pins can be assigned differently upon user need, so they are not carved in stone as it is an excternal display. I used the pins I had already soldered on my own display and ESP --- ESP_Code/DisplayHal.h | 244 +++++++++++++++++++++++++++++++++++++++++- ESP_Code/ESP_Code.ino | 22 ++-- ESP_Code/Settings.h | 24 +++-- ESP_Code/User_Setup.h | 29 +++-- 4 files changed, 293 insertions(+), 26 deletions(-) diff --git a/ESP_Code/DisplayHal.h b/ESP_Code/DisplayHal.h index 97bab144..e9953f16 100644 --- a/ESP_Code/DisplayHal.h +++ b/ESP_Code/DisplayHal.h @@ -27,6 +27,14 @@ static const unsigned char PROGMEM image_network_4_bars_bits[] = {0x00,0x0e,0x00,0x0e,0x00,0x0e,0x00,0x0e,0x00,0xee,0x00,0xee,0x00,0xee,0x00,0xee,0x0e,0xee,0x0e,0xee,0x0e,0xee,0x0e,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x00,0x00}; static const unsigned char PROGMEM image_network_3_bars_bits[] = {0x00,0x0e,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xea,0x00,0xea,0x00,0xea,0x00,0xea,0x0e,0xea,0x0e,0xea,0x0e,0xea,0x0e,0xea,0xee,0xea,0xee,0xea,0xee,0xee,0x00,0x00}; #endif + +#if defined(DISPLAY_7735) + static const unsigned char PROGMEM image_duco_bits[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xfc,0x00,0x00,0x07,0xff,0xff,0x80,0x00,0x07,0xff,0xff,0xc0,0x00,0x07,0xff,0xff,0xe0,0x00,0x07,0xff,0xff,0xf0,0x00,0x00,0x00,0x03,0xf8,0x00,0x07,0xfe,0x01,0xfc,0x00,0x07,0xff,0xc0,0xfc,0x00,0x07,0xff,0xe0,0x7e,0x00,0x07,0xff,0xf0,0x3e,0x00,0x07,0xff,0xf8,0x3f,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0x78,0x1f,0x00,0x00,0x00,0x7c,0x1f,0x00,0x00,0x00,0x7c,0x1f,0x00,0x00,0x00,0x7c,0x1f,0x00,0x00,0x00,0x7c,0x1f,0x00,0x00,0x00,0x78,0x1f,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x01,0xf8,0x1f,0x00,0x07,0xff,0xf0,0x3f,0x00,0x07,0xff,0xf0,0x3e,0x00,0x07,0xff,0xe0,0x7e,0x00,0x07,0xff,0x80,0xfc,0x00,0x00,0x00,0x01,0xfc,0x00,0x00,0x00,0x07,0xf8,0x00,0x07,0xff,0xff,0xf0,0x00,0x07,0xff,0xff,0xe0,0x00,0x07,0xff,0xff,0xc0,0x00,0x07,0xff,0xff,0x00,0x00,0x07,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_check_contour_bits[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x50,0x20,0x88,0x51,0x10,0x8a,0x20,0x44,0x40,0x20,0x80,0x11,0x00,0x0a,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_ButtonRightSmall_bits[] = {0x80,0xc0,0xe0,0xc0,0x80}; + static const unsigned char PROGMEM image_clock_bits[] = {0x07,0xc0,0x18,0x30,0x29,0x28,0x41,0x04,0x61,0x0c,0x81,0x02,0x81,0x02,0xe1,0x0e,0x80,0x82,0x80,0x42,0x60,0x2c,0x40,0x04,0x29,0x28,0x19,0x30,0x07,0xc0,0x00,0x00}; + static const unsigned char PROGMEM image_duco_logo_bits[] = {0xff,0xf8,0x00,0xff,0xfe,0x00,0xff,0xff,0x80,0x00,0x07,0xc0,0x00,0x03,0xe0,0x00,0x01,0xf0,0xff,0xf1,0xf0,0x00,0x18,0xf8,0x00,0x0c,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x0c,0x78,0x00,0x18,0xf0,0xff,0xf0,0xf0,0x00,0x01,0xe0,0x00,0x01,0xc0,0x00,0x07,0xc0,0xff,0xff,0x80,0xff,0xff,0x00,0xff,0xf8,0x00}; +#endif #if defined(DISPLAY_16X2) static byte duco_logo[] = {0x1E, 0x01, 0x1D, 0x05, 0x1D, 0x01, 0x1E, 0x00}; @@ -105,7 +113,42 @@ } #endif -#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) +#if defined(DISPLAY_7735) + void drawStrMultiline(const char *msg, int xloc, int yloc) { + //https://github.com/olikraus/u8g2/discussions/1479 + int dspwidth = 160; + int strwidth = 0; + char glyph[2]; glyph[1] = 0; + + for (const char *ptr = msg, *lastblank = NULL; *ptr; ++ptr) { + while (xloc == 0 && *msg == ' ') + if (ptr == msg++) ++ptr; + + glyph[0] = *ptr; + strwidth = 10; + if (*ptr == ' ') lastblank = ptr; + else ++strwidth; + + if (xloc + strwidth > dspwidth) { + int starting_xloc = xloc; + while (msg < (lastblank ? lastblank : ptr)) { + glyph[0] = *msg++; + xloc += tft.drawString(glyph,xloc, yloc ); + } + + strwidth -= xloc - starting_xloc; + yloc += 10; + xloc = 0; lastblank = NULL; + } + } + while (*msg) { + glyph[0] = *msg++; + xloc += tft.drawString(glyph,xloc, yloc ); + } + } +#endif + +#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735) void screen_setup() { // Ran during setup() // Abstraction layer: screen initialization @@ -135,6 +178,14 @@ tft.fillScreen(TFT_BLACK); #endif + + #if defined(DISPLAY_7735) + tft.init(); + tft.begin(); + tft.setRotation(1); + tft.fillScreen(TFT_BLACK); + + #endif } @@ -291,6 +342,75 @@ drawStrMultiline(features_str.c_str(), 2, 102); delay(2500); #endif + + #if defined(DISPLAY_7735) + tft.fillScreen(TFT_BLACK); + tft.setTextColor(TFT_WHITE,TFT_BLACK); + tft.drawBitmap(0, 3, image_duco_logo_bits, 21, 24, 0xFC00); + tft.setTextSize(2); + tft.setCursor(26, 12); + #if defined(ESP8266) + tft.print("ESP8266 "); + #elif defined(CONFIG_FREERTOS_UNICORE) + tft.print("ESP32S2/C3 "); + #else + tft.print("ESP32 "); + #endif + tft.setTextSize(1); + #if defined(ESP8266) + tft.print(String(ESP.getCpuFreqMHz()).c_str()); + #else + tft.print(String(getCpuFrequencyMhz()).c_str()); + #endif + tft.print(" MHz"); + tft.setTextSize(1); + tft.setCursor(2, 70); + tft.print("Compiled "); + tft.print(__DATE__); + + delay(2500); + + tft.drawString("Features:",2, 85,1); + String features_str = "OTA "; + #if defined(USE_LAN) + features_str += "LAN "; + #endif + #if defined(LED_BLINKING) + features_str += "Blink "; + #endif + #if defined(SERIAL_PRINTING) + features_str += "Serial "; + #endif + #if defined(WEB_DASHBOARD) + features_str += "Webserver "; + #endif + #if defined(DISPLAY_16X2) + features_str += "LCD16X2 "; + #endif + #if defined(DISPLAY_SSD1306) + features_str += "SSD1306 "; + #endif + #if defined(DISPLAY_114) + features_str += "TT-GO "; + #endif + #if defined(DISPLAY_7735) + features_str += "7735 "; + #endif + #if defined(USE_INTERNAL_SENSOR) + features_str += "Int. sensor "; + #endif + #if defined(USE_DS18B20) + features_str += "DS18B20 "; + #endif + #if defined(USE_DHT) + features_str += "DHT "; + #endif + #if defined(USE_HSU07M) + features_str += "HSU07M "; + #endif + drawStrMultiline(features_str.c_str(), 2, 102); + delay(2500); + #endif } void display_info(String message) { @@ -353,6 +473,33 @@ tft.drawString("Rev", 189, 8); delay(2500); #endif + + #if defined(DISPLAY_7735) + tft.fillScreen(TFT_BLACK); + tft.setTextColor(0xFFFF); + tft.setTextSize(2); + #if defined(ESP8266) + tft.drawString("ESP8266",25,12); + #elif defined(CONFIG_FREERTOS_UNICORE) + tft.drawString("ESP32S2/C3",25,12); + #else + tft.drawString("ESP32",25,12); + #endif + tft.drawBitmap(0, 3, image_duco_logo_bits, 21, 24, 0xFC00); + tft.setTextSize(1); + tft.setTextColor(0x4E04); + tft.drawString("Rev", 115, 8); + tft.drawString(String(SOFTWARE_VERSION).c_str(),115, 20); + tft.setTextColor(0xFFFF); + tft.drawString("Duino-Coin",4,60 ); + tft.drawString("MINER",75,60 ); + tft.setTextSize(1); + tft.drawString(message.c_str(),3,110 ); + tft.drawString("www.duinocoin.com",40,87 ); + + + delay(2500); + #endif } @@ -516,6 +663,101 @@ } + #endif + + #if defined(DISPLAY_7735) + tft.fillScreen(TFT_BLACK); + tft.drawBitmap(-2, 6, image_duco_bits, 35, 35, 0xFC00); + tft.setTextColor(0xFC00); + tft.setTextSize(1); + tft.setFreeFont(); + tft.drawString("uinocoin MINER", 30, 32); + tft.setTextColor(0x540); + tft.drawString("Rev", 118, 32); + + tft.setTextColor(0xFC00); + tft.setFreeFont(); + tft.drawString("duinocoin.com", 73, 78); + tft.setFreeFont(&FreeSansBold12pt7b); + // tft.setTextSize(3); + tft.fillRect(66, 4, 89, 21, 0xFD60); + tft.setTextColor(0x0); + if (hashrate.toFloat() < 100.0) { + tft.drawString(hashrate.c_str(), 67, 5 ); + } else { + tft.drawString(hashrate.c_str(), 67, 5 ); + } + + tft.setFreeFont(); + tft.setTextSize(1); + //tft.setTextColor(0x0); + tft.drawString("kH/s", 129, 16); + tft.setTextColor(0x400); + tft.drawString(String(SOFTWARE_VERSION).c_str(),138,32 ); + tft.drawRect(64, 3, 92, 24, 0xB208); + tft.setTextColor(0xA815); + tft.drawString("ESP 32", 3, 45); + tft.drawRect(63, 2, 94, 26, 0xD2EB); + tft.drawLine(0, 58, 0, 126, 0xFFEA); + tft.drawRect(0, 0, 160, 58, 0xFFEA); + tft.drawLine(0, 0, 0, 0, 0xFFFF); + tft.drawLine(159, 126, 159, 58, 0xFFEA); + tft.drawRect(62, 1, 96, 28, 0xFAAA); + tft.setTextColor(0xAD55); + tft.drawString("Ip:", 52, 45); + tft.drawString(String(WiFi.localIP().toString()).c_str(),72, 45); + + tft.drawBitmap(3, 59, image_check_contour_bits, 13, 16, 0x540); + tft.setTextColor(0x52BF); + tft.drawString((accepted_shares + "/" + total_shares).c_str(),17,64 ); + + tft.drawBitmap(99, 65, image_ButtonRightSmall_bits, 3, 5, 0x540); + tft.drawString(("(" + accept_rate + "%)").c_str(),107, 64 ); + + tft.drawLine(0, 75, 170, 75, 0xFFEA); + tft.setTextColor(0xAD55); + tft.drawString("wifi", 35, 20); + tft.setTextColor(0xA800); + tft.drawString("diff.", 3, 79); + tft.setTextColor(0x57EA); + tft.drawString("sh/s:", 3, 90); + tft.setTextColor(0xAD55); + tft.drawString(difficulty.c_str(),35, 79 ); + + tft.drawString(sharerate.c_str(),38, 90 ); + + tft.drawBitmap(71, 92, image_clock_bits, 15, 16, 0x540); + tft.drawString(uptime.c_str(),92, 96 ); + + tft.drawLine(-2, 126, 169, 126, 0xFFEA); + tft.setTextColor(0x555); + tft.drawString("Ping:", 3, 103); + tft.setTextColor(0xAD55); + tft.drawString((ping + "ms").c_str(),35, 103 ); + + tft.setTextColor(0x211D); + tft.drawString("Node:", 3, 115); + tft.setTextColor(0xAD55); + tft.drawString(node.c_str(), 35, 115); + + + if (WiFi.RSSI() > -40) { + tft.drawRect(51, 5, 2, 11, 0xFFFF); + tft.drawRect(47, 7, 2, 9, 0xFFFF); + tft.drawRect(43, 10, 2, 6, 0xFFFF); + tft.drawRect(39, 13, 2, 3, 0xFFFF); + } else if (WiFi.RSSI() > -60) { + tft.drawRect(47, 7, 2, 9, 0xFFFF); + tft.drawRect(43, 10, 2, 6, 0xFFFF); + tft.drawRect(39, 13, 2, 3, 0xFFFF); + } else if (WiFi.RSSI() > -75) { + tft.drawRect(43, 10, 2, 6, 0xFFFF); + tft.drawRect(39, 13, 2, 3, 0xFFFF); + } else { + tft.drawRect(39, 13, 2, 3, 0xFFFF); + } + + #endif } #endif diff --git a/ESP_Code/ESP_Code.ino b/ESP_Code/ESP_Code.ino index f2072555..b1e3cb74 100644 --- a/ESP_Code/ESP_Code.ino +++ b/ESP_Code/ESP_Code.ino @@ -68,7 +68,7 @@ void handleSystemEvents(void) { #include "Dashboard.h" #endif -#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) +#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735) #include "DisplayHal.h" #endif @@ -149,7 +149,7 @@ void RestartESP(String msg) { Serial.println("Restarting ESP..."); #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735) display_info("Restarting ESP..."); #endif @@ -222,7 +222,7 @@ namespace { Serial.println("Poolpicker selected the best mining node: " + node_id); #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735) display_info(node_id); #endif } @@ -273,7 +273,7 @@ namespace { Serial.printf("Error fetching node from poolpicker: %s\n", https.errorToString(httpCode).c_str()); VerifyWifi(); #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735) display_info(https.errorToString(httpCode)); #endif } @@ -393,7 +393,7 @@ namespace { #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735) display_info("Waiting for node..."); #endif SelectNode(); @@ -509,7 +509,7 @@ void task1_func(void *) { VOID LOOP() { job[0]->mine(); - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735) float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; float accept_rate = (accepted_share_count / 0.01 / share_count); @@ -544,7 +544,7 @@ void task2_func(void *) { VOID LOOP() { job[1]->mine(); - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735) float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; float accept_rate = (accepted_share_count / 0.01 / share_count); @@ -600,7 +600,7 @@ void setup() { } #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735) screen_setup(); display_boot(); @@ -721,7 +721,7 @@ void setup() { blinker.detach(); #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735) display_info("Waiting for node..."); #endif #if defined(BLUSHYBOX) @@ -732,7 +732,7 @@ void setup() { blinker.detach(); #endif #else - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735) display_info("Waiting for WiFi..."); #endif SetupWifi(); @@ -807,7 +807,7 @@ void single_core_loop() { lwdtFeed(); - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735) float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; float accept_rate = (accepted_share_count / 0.01 / share_count); diff --git a/ESP_Code/Settings.h b/ESP_Code/Settings.h index 536ae068..5f45b3d5 100644 --- a/ESP_Code/Settings.h +++ b/ESP_Code/Settings.h @@ -6,16 +6,16 @@ extern bool displayLock = false; // ---------------------- General settings ---------------------- // // Change the part in brackets to your Duino-Coin username -extern char *DUCO_USER = "your username"; +extern char *DUCO_USER = "your_username"; // Change the part in brackets to your mining key (if you have set it in the wallet) -extern char *MINER_KEY = "your mining key"; +extern char *MINER_KEY = "your_mining_key"; // Change the part in brackets if you want to set a custom miner name // Use Auto to autogenerate, None for no custom identifier -extern char *RIG_IDENTIFIER = "esp32_TT-GO"; +extern char *RIG_IDENTIFIER = "your custom miner name"; // Change the part in brackets to your WiFi name -extern const char SSID[] = "your wifi ssid"; +extern const char SSID[] = "your_wifi_ssid"; // Change the part in brackets to your WiFi password -extern const char PASSWORD[] = "your wifi password"; +extern const char PASSWORD[] = "your_wifi_psswd"; // -------------------------------------------------------------- // // -------------------- Advanced options ------------------------ // @@ -57,7 +57,10 @@ extern const char PASSWORD[] = "your wifi password"; // #define DISPLAY_SSD1306 //uncomment to enable Lilygo tt display 1.14 module - #define DISPLAY_114 +// #define DISPLAY_114 + +// uncomment for tft7735 display + #define DISPLAY_7735 // Uncomment to enable a 16x2 LCD screen on a direct bus to display mining info in real time // See line 150 for connections and initializer @@ -181,6 +184,15 @@ extern unsigned int ping = 0; TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h #endif +#if defined(DISPLAY_7735) + // Install "lilygo lib TFT_eSPI.h" if you get an error + #include + #include + #include + // Display definition from the tft_eSPI library. Edit if you use a different display + TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h +#endif + #if defined(USE_HSU07M) #include "Wire.h" #define HSU07M_ADDRESS 0x4B // Change this if your sensor has a different address diff --git a/ESP_Code/User_Setup.h b/ESP_Code/User_Setup.h index c3e92fa5..6e282c84 100644 --- a/ESP_Code/User_Setup.h +++ b/ESP_Code/User_Setup.h @@ -42,9 +42,11 @@ //#define RPI_DISPLAY_TYPE // 20MHz maximum SPI // Only define one driver, the other ones must be commented out +// select ST7789_DRIVER for tt-go 1.14 display, st7735_DRIVER for TFT 7735 display + //#define ILI9341_DRIVER // Generic driver for common displays //#define ILI9341_2_DRIVER // Alternative ILI9341 driver, see https://github.com/Bodmer/TFT_eSPI/issues/1172 -//#define ST7735_DRIVER // Define additional parameters below for this display +#define ST7735_DRIVER // Define additional parameters below for this display //#define ILI9163_DRIVER // Define additional parameters below for this display //#define S6D02A1_DRIVER //#define RPI_ILI9486_DRIVER // 20MHz maximum SPI @@ -52,7 +54,7 @@ //#define ILI9481_DRIVER //#define ILI9486_DRIVER //#define ILI9488_DRIVER // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high) -#define ST7789_DRIVER // Full configuration option, define additional parameters below for this display +//#define ST7789_DRIVER // Full configuration option, define additional parameters below for this display //#define ST7789_2_DRIVER // Minimal configuration option, define additional parameters below for this display //#define R61581_DRIVER //#define RM68140_DRIVER @@ -82,13 +84,13 @@ // For ST7789, ST7735, ILI9163 and GC9A01 ONLY, define the pixel width and height in portrait orientation // #define TFT_WIDTH 80 - #define TFT_WIDTH 135 + #define TFT_WIDTH 128 // st7735 // #define TFT_WIDTH 172 // ST7789 172 x 320 // #define TFT_WIDTH 170 // ST7789 170 x 320 // #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320 // #define TFT_HEIGHT 160 // #define TFT_HEIGHT 135 - #define TFT_HEIGHT 240 // ST7789 240 x 240 + #define TFT_HEIGHT 160 // st7735 // #define TFT_HEIGHT 320 // ST7789 240 x 320 // #define TFT_HEIGHT 240 // GC9A01 240 x 240 @@ -101,7 +103,7 @@ // #define ST7735_INITB // #define ST7735_GREENTAB -// #define ST7735_GREENTAB2 + #define ST7735_GREENTAB2 // #define ST7735_GREENTAB3 // #define ST7735_GREENTAB128 // For 128 x 128 display // #define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 offset) @@ -206,10 +208,22 @@ // ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP32 SETUP ###### -// For ESP32 Dev board (only tested with ILI9341 display) +// For ESP32 Dev board (7735 tft) // The hardware SPI can be mapped to any pins +// only one display type should be uncommented + +// FOR TFT 7735 Display uncomment the following lines + +#define TFT_MOSI 23 +#define TFT_SCLK 18 +#define TFT_CS 15 // Chip select control pin +#define TFT_DC 16 // Data Command control pin + + +#define TFT_RST 4 // Reset pin (could connect to RST pin) + +// FOR Lilygo TT-GO 1.14 uncomment the following lines -//#define TFT_MISO 19 #define TFT_MOSI 19 #define TFT_SCLK 18 #define TFT_CS 5 // Chip select control pin @@ -217,7 +231,6 @@ #define TFT_BL 4 // LED back-light #define TFT_RST 23 // Reset pin (could connect to RST pin) -//#define TFT_RST -1 // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST // For ESP32 Dev board (only tested with GC9A01 display) // The hardware SPI can be mapped to any pins From cbbff9b1bc36d1fb97cf3131a529c771fb701e54 Mon Sep 17 00:00:00 2001 From: jpx13 Date: Tue, 3 Sep 2024 13:26:03 +0200 Subject: [PATCH 07/14] added both display size in the Use_Setup.h file Comment or uncomment acording to your display type --- ESP_Code/User_Setup.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ESP_Code/User_Setup.h b/ESP_Code/User_Setup.h index 6e282c84..a1b63b60 100644 --- a/ESP_Code/User_Setup.h +++ b/ESP_Code/User_Setup.h @@ -83,16 +83,19 @@ // #define M5STACK // For ST7789, ST7735, ILI9163 and GC9A01 ONLY, define the pixel width and height in portrait orientation +// for TT-GO 1.14 by Lilygo, set TFT_WIDTH to 240 and TFT_HEIGHT to 135 +// FOR ST7735 DISPLAY, SET TFT_WIDTH to 128 and TFT_HEIGHT to 160 // #define TFT_WIDTH 80 #define TFT_WIDTH 128 // st7735 +// #define TFT_WIDTH 135 // Lilygo TT-go 1.14 // #define TFT_WIDTH 172 // ST7789 172 x 320 // #define TFT_WIDTH 170 // ST7789 170 x 320 -// #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320 +// #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320 and Lilygo TT-GO 1.14 // #define TFT_HEIGHT 160 // #define TFT_HEIGHT 135 #define TFT_HEIGHT 160 // st7735 // #define TFT_HEIGHT 320 // ST7789 240 x 320 -// #define TFT_HEIGHT 240 // GC9A01 240 x 240 +// #define TFT_HEIGHT 240 // GC9A01 240 x 240 and Lilygo TT-GO 1.14 // For ST7735 ONLY, define the type of display, originally this was based on the // colour of the tab on the screen protector film but this is not always true, so try From d6b963558d3fc05a4d0eaab31f231c49bf4e877a Mon Sep 17 00:00:00 2001 From: jpx13 Date: Tue, 3 Sep 2024 13:28:14 +0200 Subject: [PATCH 08/14] slight texct correction --- ESP_Code/User_Setup.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ESP_Code/User_Setup.h b/ESP_Code/User_Setup.h index a1b63b60..23a7d34a 100644 --- a/ESP_Code/User_Setup.h +++ b/ESP_Code/User_Setup.h @@ -90,7 +90,7 @@ // #define TFT_WIDTH 135 // Lilygo TT-go 1.14 // #define TFT_WIDTH 172 // ST7789 172 x 320 // #define TFT_WIDTH 170 // ST7789 170 x 320 -// #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320 and Lilygo TT-GO 1.14 +// #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320 // #define TFT_HEIGHT 160 // #define TFT_HEIGHT 135 #define TFT_HEIGHT 160 // st7735 From 6d7e0f9732d211bc6d760a33bb007d02637cfa75 Mon Sep 17 00:00:00 2001 From: jpx13 Date: Tue, 3 Sep 2024 13:31:18 +0200 Subject: [PATCH 09/14] Full version with latest changes sorry, still learning github... From c2d6c0324cf075a1e1e3b6d157157ac4c576fc16 Mon Sep 17 00:00:00 2001 From: jpx13 Date: Wed, 4 Sep 2024 10:24:34 +0200 Subject: [PATCH 10/14] commented lines that were forgotten --- ESP_Code/User_Setup.h | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/ESP_Code/User_Setup.h b/ESP_Code/User_Setup.h index 23a7d34a..b739a474 100644 --- a/ESP_Code/User_Setup.h +++ b/ESP_Code/User_Setup.h @@ -213,7 +213,7 @@ // For ESP32 Dev board (7735 tft) // The hardware SPI can be mapped to any pins -// only one display type should be uncommented +// ONLY ONE DISPLAY TYPE SHOULD BE UNCOMMENTED // FOR TFT 7735 Display uncomment the following lines @@ -221,19 +221,16 @@ #define TFT_SCLK 18 #define TFT_CS 15 // Chip select control pin #define TFT_DC 16 // Data Command control pin - - #define TFT_RST 4 // Reset pin (could connect to RST pin) // FOR Lilygo TT-GO 1.14 uncomment the following lines -#define TFT_MOSI 19 -#define TFT_SCLK 18 -#define TFT_CS 5 // Chip select control pin -#define TFT_DC 16 // Data Command control pin -#define TFT_BL 4 // LED back-light - -#define TFT_RST 23 // Reset pin (could connect to RST pin) +//#define TFT_MOSI 19 +//#define TFT_SCLK 18 +//#define TFT_CS 5 // Chip select control pin +//#define TFT_DC 16 // Data Command control pin +//#define TFT_BL 4 // LED back-light +//#define TFT_RST 23 // Reset pin (could connect to RST pin) // For ESP32 Dev board (only tested with GC9A01 display) // The hardware SPI can be mapped to any pins From e2c526f3c1785daa23dd7c57f4fa7ff0a8f318eb Mon Sep 17 00:00:00 2001 From: jpx13 Date: Fri, 7 Mar 2025 14:08:24 +0100 Subject: [PATCH 11/14] Added new Display for CYD ESP32_2432S028 Features displays for Lilygo ttgo 1.14, generic 7735 display and the Cheap Yellow Display ESP32 2432S028 dev board. To be able to flash the CYD sketch, you need to select in the IDE the option for minimal SPIFF as the flash memory requirement is higher than for the other displays. This new display adds A sntp synced clock with time and date, and also Balance fetching from the API every 5 minutes (displays balance, username and number of miners) The TFTeSPI library is required, and according to your device, you might do changes in the User_Setup.h file. --- ESP_Code/Counter.h | 106 +++++------ ESP_Code/DSHA1.h | 402 +++++++++++++++++++++--------------------- ESP_Code/Dashboard.h | 302 +++++++++++++++---------------- ESP_Code/DisplayHal.h | 295 ++++++++++++++++++++++++++++++- ESP_Code/ESP_Code.ino | 194 ++++++++++++++++++-- ESP_Code/MiningJob.h | 6 +- ESP_Code/Settings.h | 47 ++++- ESP_Code/User_Setup.h | 58 ++++-- 8 files changed, 953 insertions(+), 457 deletions(-) diff --git a/ESP_Code/Counter.h b/ESP_Code/Counter.h index 58a4a0e6..172a99f7 100644 --- a/ESP_Code/Counter.h +++ b/ESP_Code/Counter.h @@ -1,53 +1,53 @@ -#ifndef _COUNTER_H_ -#define _COUNTER_H_ - -#include -#include - -template -class Counter { - -public: - Counter() { reset(); } - - void reset() { - memset(buffer, '0', max_digits); - buffer[max_digits] = '\0'; - val = 0; - len = 1; - } - - inline Counter &operator++() { - inc_string(buffer + max_digits - 1); - ++val; - return *this; - } - - inline operator unsigned int() const { return val; } - inline const char *c_str() const { return buffer + max_digits - len; } - inline size_t strlen() const { return len; } - -protected: - inline void inc_string(char *c) { - // In theory, the line below should be uncommented to avoid writing outside the buffer. In practice however, - // with max_digits set to 10 or more, we can fit all possible unsigned 32-bit integers in the buffer. - // The check is skipped to gain a small extra speed improvement. - // if (c >= buffer) return; - - if (*c < '9') { - *c += 1; - } - else { - *c = '0'; - inc_string(c - 1); - len = max(max_digits - (c - buffer) + 1, len); - } - } - -protected: - char buffer[max_digits + 1]; - unsigned int val; - size_t len; -}; - -#endif +#ifndef _COUNTER_H_ +#define _COUNTER_H_ + +#include +#include + +template +class Counter { + +public: + Counter() { reset(); } + + void reset() { + memset(buffer, '0', max_digits); + buffer[max_digits] = '\0'; + val = 0; + len = 1; + } + + inline Counter &operator++() { + inc_string(buffer + max_digits - 1); + ++val; + return *this; + } + + inline operator unsigned int() const { return val; } + inline const char *c_str() const { return buffer + max_digits - len; } + inline size_t strlen() const { return len; } + +protected: + inline void inc_string(char *c) { + // In theory, the line below should be uncommented to avoid writing outside the buffer. In practice however, + // with max_digits set to 10 or more, we can fit all possible unsigned 32-bit integers in the buffer. + // The check is skipped to gain a small extra speed improvement. + // if (c >= buffer) return; + + if (*c < '9') { + *c += 1; + } + else { + *c = '0'; + inc_string(c - 1); + len = max(max_digits - (c - buffer) + 1, len); + } + } + +protected: + char buffer[max_digits + 1]; + unsigned int val; + size_t len; +}; + +#endif diff --git a/ESP_Code/DSHA1.h b/ESP_Code/DSHA1.h index 58dc41b2..2593ecd9 100644 --- a/ESP_Code/DSHA1.h +++ b/ESP_Code/DSHA1.h @@ -1,201 +1,201 @@ -#ifndef DSHA1_H -#define DSHA1_H - -#include - -class DSHA1 { - -public: - static const size_t OUTPUT_SIZE = 20; - - DSHA1() { - initialize(s); - } - - DSHA1 &write(const unsigned char *data, size_t len) { - size_t bufsize = bytes % 64; - if (bufsize && bufsize + len >= 64) { - memcpy(buf + bufsize, data, 64 - bufsize); - bytes += 64 - bufsize; - data += 64 - bufsize; - transform(s, buf); - bufsize = 0; - } - while (len >= 64) { - transform(s, data); - bytes += 64; - data += 64; - len -= 64; - } - if (len > 0) { - memcpy(buf + bufsize, data, len); - bytes += len; - } - return *this; - } - - void finalize(unsigned char hash[OUTPUT_SIZE]) { - const unsigned char pad[64] = {0x80}; - unsigned char sizedesc[8]; - writeBE64(sizedesc, bytes << 3); - write(pad, 1 + ((119 - (bytes % 64)) % 64)); - write(sizedesc, 8); - writeBE32(hash, s[0]); - writeBE32(hash + 4, s[1]); - writeBE32(hash + 8, s[2]); - writeBE32(hash + 12, s[3]); - writeBE32(hash + 16, s[4]); - } - - DSHA1 &reset() { - bytes = 0; - initialize(s); - return *this; - } - - // Warmup the cache and get a boost in performance - DSHA1 &warmup() { - uint8_t warmup[20]; - this->write((uint8_t *)"warmupwarmupwa", 20).finalize(warmup); - return *this; - } - -private: - uint32_t s[5]; - unsigned char buf[64]; - uint64_t bytes; - - const uint32_t k1 = 0x5A827999ul; - const uint32_t k2 = 0x6ED9EBA1ul; - const uint32_t k3 = 0x8F1BBCDCul; - const uint32_t k4 = 0xCA62C1D6ul; - - uint32_t inline f1(uint32_t b, uint32_t c, uint32_t d) { return d ^ (b & (c ^ d)); } - uint32_t inline f2(uint32_t b, uint32_t c, uint32_t d) { return b ^ c ^ d; } - uint32_t inline f3(uint32_t b, uint32_t c, uint32_t d) { return (b & c) | (d & (b | c)); } - - uint32_t inline left(uint32_t x) { return (x << 1) | (x >> 31); } - - void inline Round(uint32_t a, uint32_t &b, uint32_t c, uint32_t d, uint32_t &e, - uint32_t f, uint32_t k, uint32_t w) { - e += ((a << 5) | (a >> 27)) + f + k + w; - b = (b << 30) | (b >> 2); - } - - void initialize(uint32_t s[5]) { - s[0] = 0x67452301ul; - s[1] = 0xEFCDAB89ul; - s[2] = 0x98BADCFEul; - s[3] = 0x10325476ul; - s[4] = 0xC3D2E1F0ul; - } - - void transform(uint32_t *s, const unsigned char *chunk) { - uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4]; - uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15; - - Round(a, b, c, d, e, f1(b, c, d), k1, w0 = readBE32(chunk + 0)); - Round(e, a, b, c, d, f1(a, b, c), k1, w1 = readBE32(chunk + 4)); - Round(d, e, a, b, c, f1(e, a, b), k1, w2 = readBE32(chunk + 8)); - Round(c, d, e, a, b, f1(d, e, a), k1, w3 = readBE32(chunk + 12)); - Round(b, c, d, e, a, f1(c, d, e), k1, w4 = readBE32(chunk + 16)); - Round(a, b, c, d, e, f1(b, c, d), k1, w5 = readBE32(chunk + 20)); - Round(e, a, b, c, d, f1(a, b, c), k1, w6 = readBE32(chunk + 24)); - Round(d, e, a, b, c, f1(e, a, b), k1, w7 = readBE32(chunk + 28)); - Round(c, d, e, a, b, f1(d, e, a), k1, w8 = readBE32(chunk + 32)); - Round(b, c, d, e, a, f1(c, d, e), k1, w9 = readBE32(chunk + 36)); - Round(a, b, c, d, e, f1(b, c, d), k1, w10 = readBE32(chunk + 40)); - Round(e, a, b, c, d, f1(a, b, c), k1, w11 = readBE32(chunk + 44)); - Round(d, e, a, b, c, f1(e, a, b), k1, w12 = readBE32(chunk + 48)); - Round(c, d, e, a, b, f1(d, e, a), k1, w13 = readBE32(chunk + 52)); - Round(b, c, d, e, a, f1(c, d, e), k1, w14 = readBE32(chunk + 56)); - Round(a, b, c, d, e, f1(b, c, d), k1, w15 = readBE32(chunk + 60)); - - Round(e, a, b, c, d, f1(a, b, c), k1, w0 = left(w0 ^ w13 ^ w8 ^ w2)); - Round(d, e, a, b, c, f1(e, a, b), k1, w1 = left(w1 ^ w14 ^ w9 ^ w3)); - Round(c, d, e, a, b, f1(d, e, a), k1, w2 = left(w2 ^ w15 ^ w10 ^ w4)); - Round(b, c, d, e, a, f1(c, d, e), k1, w3 = left(w3 ^ w0 ^ w11 ^ w5)); - Round(a, b, c, d, e, f2(b, c, d), k2, w4 = left(w4 ^ w1 ^ w12 ^ w6)); - Round(e, a, b, c, d, f2(a, b, c), k2, w5 = left(w5 ^ w2 ^ w13 ^ w7)); - Round(d, e, a, b, c, f2(e, a, b), k2, w6 = left(w6 ^ w3 ^ w14 ^ w8)); - Round(c, d, e, a, b, f2(d, e, a), k2, w7 = left(w7 ^ w4 ^ w15 ^ w9)); - Round(b, c, d, e, a, f2(c, d, e), k2, w8 = left(w8 ^ w5 ^ w0 ^ w10)); - Round(a, b, c, d, e, f2(b, c, d), k2, w9 = left(w9 ^ w6 ^ w1 ^ w11)); - Round(e, a, b, c, d, f2(a, b, c), k2, w10 = left(w10 ^ w7 ^ w2 ^ w12)); - Round(d, e, a, b, c, f2(e, a, b), k2, w11 = left(w11 ^ w8 ^ w3 ^ w13)); - Round(c, d, e, a, b, f2(d, e, a), k2, w12 = left(w12 ^ w9 ^ w4 ^ w14)); - Round(b, c, d, e, a, f2(c, d, e), k2, w13 = left(w13 ^ w10 ^ w5 ^ w15)); - Round(a, b, c, d, e, f2(b, c, d), k2, w14 = left(w14 ^ w11 ^ w6 ^ w0)); - Round(e, a, b, c, d, f2(a, b, c), k2, w15 = left(w15 ^ w12 ^ w7 ^ w1)); - - Round(d, e, a, b, c, f2(e, a, b), k2, w0 = left(w0 ^ w13 ^ w8 ^ w2)); - Round(c, d, e, a, b, f2(d, e, a), k2, w1 = left(w1 ^ w14 ^ w9 ^ w3)); - Round(b, c, d, e, a, f2(c, d, e), k2, w2 = left(w2 ^ w15 ^ w10 ^ w4)); - Round(a, b, c, d, e, f2(b, c, d), k2, w3 = left(w3 ^ w0 ^ w11 ^ w5)); - Round(e, a, b, c, d, f2(a, b, c), k2, w4 = left(w4 ^ w1 ^ w12 ^ w6)); - Round(d, e, a, b, c, f2(e, a, b), k2, w5 = left(w5 ^ w2 ^ w13 ^ w7)); - Round(c, d, e, a, b, f2(d, e, a), k2, w6 = left(w6 ^ w3 ^ w14 ^ w8)); - Round(b, c, d, e, a, f2(c, d, e), k2, w7 = left(w7 ^ w4 ^ w15 ^ w9)); - Round(a, b, c, d, e, f3(b, c, d), k3, w8 = left(w8 ^ w5 ^ w0 ^ w10)); - Round(e, a, b, c, d, f3(a, b, c), k3, w9 = left(w9 ^ w6 ^ w1 ^ w11)); - Round(d, e, a, b, c, f3(e, a, b), k3, w10 = left(w10 ^ w7 ^ w2 ^ w12)); - Round(c, d, e, a, b, f3(d, e, a), k3, w11 = left(w11 ^ w8 ^ w3 ^ w13)); - Round(b, c, d, e, a, f3(c, d, e), k3, w12 = left(w12 ^ w9 ^ w4 ^ w14)); - Round(a, b, c, d, e, f3(b, c, d), k3, w13 = left(w13 ^ w10 ^ w5 ^ w15)); - Round(e, a, b, c, d, f3(a, b, c), k3, w14 = left(w14 ^ w11 ^ w6 ^ w0)); - Round(d, e, a, b, c, f3(e, a, b), k3, w15 = left(w15 ^ w12 ^ w7 ^ w1)); - - Round(c, d, e, a, b, f3(d, e, a), k3, w0 = left(w0 ^ w13 ^ w8 ^ w2)); - Round(b, c, d, e, a, f3(c, d, e), k3, w1 = left(w1 ^ w14 ^ w9 ^ w3)); - Round(a, b, c, d, e, f3(b, c, d), k3, w2 = left(w2 ^ w15 ^ w10 ^ w4)); - Round(e, a, b, c, d, f3(a, b, c), k3, w3 = left(w3 ^ w0 ^ w11 ^ w5)); - Round(d, e, a, b, c, f3(e, a, b), k3, w4 = left(w4 ^ w1 ^ w12 ^ w6)); - Round(c, d, e, a, b, f3(d, e, a), k3, w5 = left(w5 ^ w2 ^ w13 ^ w7)); - Round(b, c, d, e, a, f3(c, d, e), k3, w6 = left(w6 ^ w3 ^ w14 ^ w8)); - Round(a, b, c, d, e, f3(b, c, d), k3, w7 = left(w7 ^ w4 ^ w15 ^ w9)); - Round(e, a, b, c, d, f3(a, b, c), k3, w8 = left(w8 ^ w5 ^ w0 ^ w10)); - Round(d, e, a, b, c, f3(e, a, b), k3, w9 = left(w9 ^ w6 ^ w1 ^ w11)); - Round(c, d, e, a, b, f3(d, e, a), k3, w10 = left(w10 ^ w7 ^ w2 ^ w12)); - Round(b, c, d, e, a, f3(c, d, e), k3, w11 = left(w11 ^ w8 ^ w3 ^ w13)); - Round(a, b, c, d, e, f2(b, c, d), k4, w12 = left(w12 ^ w9 ^ w4 ^ w14)); - Round(e, a, b, c, d, f2(a, b, c), k4, w13 = left(w13 ^ w10 ^ w5 ^ w15)); - Round(d, e, a, b, c, f2(e, a, b), k4, w14 = left(w14 ^ w11 ^ w6 ^ w0)); - Round(c, d, e, a, b, f2(d, e, a), k4, w15 = left(w15 ^ w12 ^ w7 ^ w1)); - - Round(b, c, d, e, a, f2(c, d, e), k4, w0 = left(w0 ^ w13 ^ w8 ^ w2)); - Round(a, b, c, d, e, f2(b, c, d), k4, w1 = left(w1 ^ w14 ^ w9 ^ w3)); - Round(e, a, b, c, d, f2(a, b, c), k4, w2 = left(w2 ^ w15 ^ w10 ^ w4)); - Round(d, e, a, b, c, f2(e, a, b), k4, w3 = left(w3 ^ w0 ^ w11 ^ w5)); - Round(c, d, e, a, b, f2(d, e, a), k4, w4 = left(w4 ^ w1 ^ w12 ^ w6)); - Round(b, c, d, e, a, f2(c, d, e), k4, w5 = left(w5 ^ w2 ^ w13 ^ w7)); - Round(a, b, c, d, e, f2(b, c, d), k4, w6 = left(w6 ^ w3 ^ w14 ^ w8)); - Round(e, a, b, c, d, f2(a, b, c), k4, w7 = left(w7 ^ w4 ^ w15 ^ w9)); - Round(d, e, a, b, c, f2(e, a, b), k4, w8 = left(w8 ^ w5 ^ w0 ^ w10)); - Round(c, d, e, a, b, f2(d, e, a), k4, w9 = left(w9 ^ w6 ^ w1 ^ w11)); - Round(b, c, d, e, a, f2(c, d, e), k4, w10 = left(w10 ^ w7 ^ w2 ^ w12)); - Round(a, b, c, d, e, f2(b, c, d), k4, w11 = left(w11 ^ w8 ^ w3 ^ w13)); - Round(e, a, b, c, d, f2(a, b, c), k4, w12 = left(w12 ^ w9 ^ w4 ^ w14)); - Round(d, e, a, b, c, f2(e, a, b), k4, left(w13 ^ w10 ^ w5 ^ w15)); - Round(c, d, e, a, b, f2(d, e, a), k4, left(w14 ^ w11 ^ w6 ^ w0)); - Round(b, c, d, e, a, f2(c, d, e), k4, left(w15 ^ w12 ^ w7 ^ w1)); - - s[0] += a; - s[1] += b; - s[2] += c; - s[3] += d; - s[4] += e; - } - - uint32_t static inline readBE32(const unsigned char *ptr) { - return __builtin_bswap32(*(uint32_t *)ptr); - } - - void static inline writeBE32(unsigned char *ptr, uint32_t x) { - *(uint32_t *)ptr = __builtin_bswap32(x); - } - - void static inline writeBE64(unsigned char *ptr, uint64_t x) { - *(uint64_t *)ptr = __builtin_bswap64(x); - } -}; -#endif +#ifndef DSHA1_H +#define DSHA1_H + +#include + +class DSHA1 { + +public: + static const size_t OUTPUT_SIZE = 20; + + DSHA1() { + initialize(s); + } + + DSHA1 &write(const unsigned char *data, size_t len) { + size_t bufsize = bytes % 64; + if (bufsize && bufsize + len >= 64) { + memcpy(buf + bufsize, data, 64 - bufsize); + bytes += 64 - bufsize; + data += 64 - bufsize; + transform(s, buf); + bufsize = 0; + } + while (len >= 64) { + transform(s, data); + bytes += 64; + data += 64; + len -= 64; + } + if (len > 0) { + memcpy(buf + bufsize, data, len); + bytes += len; + } + return *this; + } + + void finalize(unsigned char hash[OUTPUT_SIZE]) { + const unsigned char pad[64] = {0x80}; + unsigned char sizedesc[8]; + writeBE64(sizedesc, bytes << 3); + write(pad, 1 + ((119 - (bytes % 64)) % 64)); + write(sizedesc, 8); + writeBE32(hash, s[0]); + writeBE32(hash + 4, s[1]); + writeBE32(hash + 8, s[2]); + writeBE32(hash + 12, s[3]); + writeBE32(hash + 16, s[4]); + } + + DSHA1 &reset() { + bytes = 0; + initialize(s); + return *this; + } + + // Warmup the cache and get a boost in performance + DSHA1 &warmup() { + uint8_t warmup[20]; + this->write((uint8_t *)"warmupwarmupwa", 20).finalize(warmup); + return *this; + } + +private: + uint32_t s[5]; + unsigned char buf[64]; + uint64_t bytes; + + const uint32_t k1 = 0x5A827999ul; + const uint32_t k2 = 0x6ED9EBA1ul; + const uint32_t k3 = 0x8F1BBCDCul; + const uint32_t k4 = 0xCA62C1D6ul; + + uint32_t inline f1(uint32_t b, uint32_t c, uint32_t d) { return d ^ (b & (c ^ d)); } + uint32_t inline f2(uint32_t b, uint32_t c, uint32_t d) { return b ^ c ^ d; } + uint32_t inline f3(uint32_t b, uint32_t c, uint32_t d) { return (b & c) | (d & (b | c)); } + + uint32_t inline left(uint32_t x) { return (x << 1) | (x >> 31); } + + void inline Round(uint32_t a, uint32_t &b, uint32_t c, uint32_t d, uint32_t &e, + uint32_t f, uint32_t k, uint32_t w) { + e += ((a << 5) | (a >> 27)) + f + k + w; + b = (b << 30) | (b >> 2); + } + + void initialize(uint32_t s[5]) { + s[0] = 0x67452301ul; + s[1] = 0xEFCDAB89ul; + s[2] = 0x98BADCFEul; + s[3] = 0x10325476ul; + s[4] = 0xC3D2E1F0ul; + } + + void transform(uint32_t *s, const unsigned char *chunk) { + uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4]; + uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15; + + Round(a, b, c, d, e, f1(b, c, d), k1, w0 = readBE32(chunk + 0)); + Round(e, a, b, c, d, f1(a, b, c), k1, w1 = readBE32(chunk + 4)); + Round(d, e, a, b, c, f1(e, a, b), k1, w2 = readBE32(chunk + 8)); + Round(c, d, e, a, b, f1(d, e, a), k1, w3 = readBE32(chunk + 12)); + Round(b, c, d, e, a, f1(c, d, e), k1, w4 = readBE32(chunk + 16)); + Round(a, b, c, d, e, f1(b, c, d), k1, w5 = readBE32(chunk + 20)); + Round(e, a, b, c, d, f1(a, b, c), k1, w6 = readBE32(chunk + 24)); + Round(d, e, a, b, c, f1(e, a, b), k1, w7 = readBE32(chunk + 28)); + Round(c, d, e, a, b, f1(d, e, a), k1, w8 = readBE32(chunk + 32)); + Round(b, c, d, e, a, f1(c, d, e), k1, w9 = readBE32(chunk + 36)); + Round(a, b, c, d, e, f1(b, c, d), k1, w10 = readBE32(chunk + 40)); + Round(e, a, b, c, d, f1(a, b, c), k1, w11 = readBE32(chunk + 44)); + Round(d, e, a, b, c, f1(e, a, b), k1, w12 = readBE32(chunk + 48)); + Round(c, d, e, a, b, f1(d, e, a), k1, w13 = readBE32(chunk + 52)); + Round(b, c, d, e, a, f1(c, d, e), k1, w14 = readBE32(chunk + 56)); + Round(a, b, c, d, e, f1(b, c, d), k1, w15 = readBE32(chunk + 60)); + + Round(e, a, b, c, d, f1(a, b, c), k1, w0 = left(w0 ^ w13 ^ w8 ^ w2)); + Round(d, e, a, b, c, f1(e, a, b), k1, w1 = left(w1 ^ w14 ^ w9 ^ w3)); + Round(c, d, e, a, b, f1(d, e, a), k1, w2 = left(w2 ^ w15 ^ w10 ^ w4)); + Round(b, c, d, e, a, f1(c, d, e), k1, w3 = left(w3 ^ w0 ^ w11 ^ w5)); + Round(a, b, c, d, e, f2(b, c, d), k2, w4 = left(w4 ^ w1 ^ w12 ^ w6)); + Round(e, a, b, c, d, f2(a, b, c), k2, w5 = left(w5 ^ w2 ^ w13 ^ w7)); + Round(d, e, a, b, c, f2(e, a, b), k2, w6 = left(w6 ^ w3 ^ w14 ^ w8)); + Round(c, d, e, a, b, f2(d, e, a), k2, w7 = left(w7 ^ w4 ^ w15 ^ w9)); + Round(b, c, d, e, a, f2(c, d, e), k2, w8 = left(w8 ^ w5 ^ w0 ^ w10)); + Round(a, b, c, d, e, f2(b, c, d), k2, w9 = left(w9 ^ w6 ^ w1 ^ w11)); + Round(e, a, b, c, d, f2(a, b, c), k2, w10 = left(w10 ^ w7 ^ w2 ^ w12)); + Round(d, e, a, b, c, f2(e, a, b), k2, w11 = left(w11 ^ w8 ^ w3 ^ w13)); + Round(c, d, e, a, b, f2(d, e, a), k2, w12 = left(w12 ^ w9 ^ w4 ^ w14)); + Round(b, c, d, e, a, f2(c, d, e), k2, w13 = left(w13 ^ w10 ^ w5 ^ w15)); + Round(a, b, c, d, e, f2(b, c, d), k2, w14 = left(w14 ^ w11 ^ w6 ^ w0)); + Round(e, a, b, c, d, f2(a, b, c), k2, w15 = left(w15 ^ w12 ^ w7 ^ w1)); + + Round(d, e, a, b, c, f2(e, a, b), k2, w0 = left(w0 ^ w13 ^ w8 ^ w2)); + Round(c, d, e, a, b, f2(d, e, a), k2, w1 = left(w1 ^ w14 ^ w9 ^ w3)); + Round(b, c, d, e, a, f2(c, d, e), k2, w2 = left(w2 ^ w15 ^ w10 ^ w4)); + Round(a, b, c, d, e, f2(b, c, d), k2, w3 = left(w3 ^ w0 ^ w11 ^ w5)); + Round(e, a, b, c, d, f2(a, b, c), k2, w4 = left(w4 ^ w1 ^ w12 ^ w6)); + Round(d, e, a, b, c, f2(e, a, b), k2, w5 = left(w5 ^ w2 ^ w13 ^ w7)); + Round(c, d, e, a, b, f2(d, e, a), k2, w6 = left(w6 ^ w3 ^ w14 ^ w8)); + Round(b, c, d, e, a, f2(c, d, e), k2, w7 = left(w7 ^ w4 ^ w15 ^ w9)); + Round(a, b, c, d, e, f3(b, c, d), k3, w8 = left(w8 ^ w5 ^ w0 ^ w10)); + Round(e, a, b, c, d, f3(a, b, c), k3, w9 = left(w9 ^ w6 ^ w1 ^ w11)); + Round(d, e, a, b, c, f3(e, a, b), k3, w10 = left(w10 ^ w7 ^ w2 ^ w12)); + Round(c, d, e, a, b, f3(d, e, a), k3, w11 = left(w11 ^ w8 ^ w3 ^ w13)); + Round(b, c, d, e, a, f3(c, d, e), k3, w12 = left(w12 ^ w9 ^ w4 ^ w14)); + Round(a, b, c, d, e, f3(b, c, d), k3, w13 = left(w13 ^ w10 ^ w5 ^ w15)); + Round(e, a, b, c, d, f3(a, b, c), k3, w14 = left(w14 ^ w11 ^ w6 ^ w0)); + Round(d, e, a, b, c, f3(e, a, b), k3, w15 = left(w15 ^ w12 ^ w7 ^ w1)); + + Round(c, d, e, a, b, f3(d, e, a), k3, w0 = left(w0 ^ w13 ^ w8 ^ w2)); + Round(b, c, d, e, a, f3(c, d, e), k3, w1 = left(w1 ^ w14 ^ w9 ^ w3)); + Round(a, b, c, d, e, f3(b, c, d), k3, w2 = left(w2 ^ w15 ^ w10 ^ w4)); + Round(e, a, b, c, d, f3(a, b, c), k3, w3 = left(w3 ^ w0 ^ w11 ^ w5)); + Round(d, e, a, b, c, f3(e, a, b), k3, w4 = left(w4 ^ w1 ^ w12 ^ w6)); + Round(c, d, e, a, b, f3(d, e, a), k3, w5 = left(w5 ^ w2 ^ w13 ^ w7)); + Round(b, c, d, e, a, f3(c, d, e), k3, w6 = left(w6 ^ w3 ^ w14 ^ w8)); + Round(a, b, c, d, e, f3(b, c, d), k3, w7 = left(w7 ^ w4 ^ w15 ^ w9)); + Round(e, a, b, c, d, f3(a, b, c), k3, w8 = left(w8 ^ w5 ^ w0 ^ w10)); + Round(d, e, a, b, c, f3(e, a, b), k3, w9 = left(w9 ^ w6 ^ w1 ^ w11)); + Round(c, d, e, a, b, f3(d, e, a), k3, w10 = left(w10 ^ w7 ^ w2 ^ w12)); + Round(b, c, d, e, a, f3(c, d, e), k3, w11 = left(w11 ^ w8 ^ w3 ^ w13)); + Round(a, b, c, d, e, f2(b, c, d), k4, w12 = left(w12 ^ w9 ^ w4 ^ w14)); + Round(e, a, b, c, d, f2(a, b, c), k4, w13 = left(w13 ^ w10 ^ w5 ^ w15)); + Round(d, e, a, b, c, f2(e, a, b), k4, w14 = left(w14 ^ w11 ^ w6 ^ w0)); + Round(c, d, e, a, b, f2(d, e, a), k4, w15 = left(w15 ^ w12 ^ w7 ^ w1)); + + Round(b, c, d, e, a, f2(c, d, e), k4, w0 = left(w0 ^ w13 ^ w8 ^ w2)); + Round(a, b, c, d, e, f2(b, c, d), k4, w1 = left(w1 ^ w14 ^ w9 ^ w3)); + Round(e, a, b, c, d, f2(a, b, c), k4, w2 = left(w2 ^ w15 ^ w10 ^ w4)); + Round(d, e, a, b, c, f2(e, a, b), k4, w3 = left(w3 ^ w0 ^ w11 ^ w5)); + Round(c, d, e, a, b, f2(d, e, a), k4, w4 = left(w4 ^ w1 ^ w12 ^ w6)); + Round(b, c, d, e, a, f2(c, d, e), k4, w5 = left(w5 ^ w2 ^ w13 ^ w7)); + Round(a, b, c, d, e, f2(b, c, d), k4, w6 = left(w6 ^ w3 ^ w14 ^ w8)); + Round(e, a, b, c, d, f2(a, b, c), k4, w7 = left(w7 ^ w4 ^ w15 ^ w9)); + Round(d, e, a, b, c, f2(e, a, b), k4, w8 = left(w8 ^ w5 ^ w0 ^ w10)); + Round(c, d, e, a, b, f2(d, e, a), k4, w9 = left(w9 ^ w6 ^ w1 ^ w11)); + Round(b, c, d, e, a, f2(c, d, e), k4, w10 = left(w10 ^ w7 ^ w2 ^ w12)); + Round(a, b, c, d, e, f2(b, c, d), k4, w11 = left(w11 ^ w8 ^ w3 ^ w13)); + Round(e, a, b, c, d, f2(a, b, c), k4, w12 = left(w12 ^ w9 ^ w4 ^ w14)); + Round(d, e, a, b, c, f2(e, a, b), k4, left(w13 ^ w10 ^ w5 ^ w15)); + Round(c, d, e, a, b, f2(d, e, a), k4, left(w14 ^ w11 ^ w6 ^ w0)); + Round(b, c, d, e, a, f2(c, d, e), k4, left(w15 ^ w12 ^ w7 ^ w1)); + + s[0] += a; + s[1] += b; + s[2] += c; + s[3] += d; + s[4] += e; + } + + uint32_t static inline readBE32(const unsigned char *ptr) { + return __builtin_bswap32(*(uint32_t *)ptr); + } + + void static inline writeBE32(unsigned char *ptr, uint32_t x) { + *(uint32_t *)ptr = __builtin_bswap32(x); + } + + void static inline writeBE64(unsigned char *ptr, uint64_t x) { + *(uint64_t *)ptr = __builtin_bswap64(x); + } +}; +#endif diff --git a/ESP_Code/Dashboard.h b/ESP_Code/Dashboard.h index 30c88924..9281758c 100644 --- a/ESP_Code/Dashboard.h +++ b/ESP_Code/Dashboard.h @@ -1,151 +1,151 @@ -#ifndef DASHBOARD_H -#define DASHBOARD_H - -const char WEBSITE[] PROGMEM = R"=====( - - - - - - - Duino-Coin @@DEVICE@@ dashboard - - - - - -
-
-

- - @@DEVICE@@ (@@ID@@) -

-

- Self-hosted, lightweight, official dashboard for your Duino-Coin miner -

-
-
-
-
-
-
-

- Mining statistics -

-
-
-
- @@HASHRATE@@ kH/s -
-
- Hashrate -
-
-
-
- @@DIFF@@ -
-
- Difficulty -
-
-
-
- @@SHARES@@ -
-
- Shares -
-
-
-
- @@NODE@@ -
-
- Node -
-
-
-
-
-
-
-

- Device information -

-
-
-
- @@DEVICE@@ -
-
- Device type -
-
-
-
- @@ID@@ -
-
- Device ID -
-
-
-
- @@MEMORY@@ -
-
- Free memory -
-
-
-
- @@VERSION@@ -
-
- Miner version -
-
-
-
- @@SENSOR@@ -
-
- Sensor reading(s) -
-
-
-
-
-
-
-
- -
-
-
- - -)====="; - -#endif +#ifndef DASHBOARD_H +#define DASHBOARD_H + +const char WEBSITE[] PROGMEM = R"=====( + + + + + + + Duino-Coin @@DEVICE@@ dashboard + + + + + +
+
+

+ + @@DEVICE@@ (@@ID@@) +

+

+ Self-hosted, lightweight, official dashboard for your Duino-Coin miner +

+
+
+
+
+
+
+

+ Mining statistics +

+
+
+
+ @@HASHRATE@@ kH/s +
+
+ Hashrate +
+
+
+
+ @@DIFF@@ +
+
+ Difficulty +
+
+
+
+ @@SHARES@@ +
+
+ Shares +
+
+
+
+ @@NODE@@ +
+
+ Node +
+
+
+
+
+
+
+

+ Device information +

+
+
+
+ @@DEVICE@@ +
+
+ Device type +
+
+
+
+ @@ID@@ +
+
+ Device ID +
+
+
+
+ @@MEMORY@@ +
+
+ Free memory +
+
+
+
+ @@VERSION@@ +
+
+ Miner version +
+
+
+
+ @@SENSOR@@ +
+
+ Sensor reading(s) +
+
+
+
+
+
+
+
+ +
+
+
+ + +)====="; + +#endif diff --git a/ESP_Code/DisplayHal.h b/ESP_Code/DisplayHal.h index e9953f16..99b7f228 100644 --- a/ESP_Code/DisplayHal.h +++ b/ESP_Code/DisplayHal.h @@ -27,6 +27,20 @@ static const unsigned char PROGMEM image_network_4_bars_bits[] = {0x00,0x0e,0x00,0x0e,0x00,0x0e,0x00,0x0e,0x00,0xee,0x00,0xee,0x00,0xee,0x00,0xee,0x0e,0xee,0x0e,0xee,0x0e,0xee,0x0e,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x00,0x00}; static const unsigned char PROGMEM image_network_3_bars_bits[] = {0x00,0x0e,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xea,0x00,0xea,0x00,0xea,0x00,0xea,0x0e,0xea,0x0e,0xea,0x0e,0xea,0x0e,0xea,0xee,0xea,0xee,0xea,0xee,0xee,0x00,0x00}; #endif + +#if defined(DISPLAY_2432S08) + static const unsigned char PROGMEM image_duco_2_bits[] = {0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0x80,0x00,0x00,0x00,0x00,0xff,0xff,0x80,0x01,0xff,0xc0,0x00,0x7f,0x00,0x00,0xff,0xff,0xf0,0x00,0xff,0xe0,0x00,0x0f,0xe0,0x00,0xff,0xff,0xfc,0x00,0x7f,0xe0,0x00,0x03,0xf8,0x00,0xff,0xff,0xfe,0x00,0x3f,0xf0,0x00,0x00,0x7e,0x00,0xff,0xff,0xff,0x00,0x3f,0xf0,0x00,0x00,0x1f,0x00,0xff,0xff,0xff,0x80,0x1f,0xf8,0x00,0x00,0x0f,0x80,0xff,0xff,0xff,0xc0,0x0f,0xf8,0x00,0x00,0x0f,0x80,0xff,0xff,0xff,0xc0,0x0f,0xf8,0x00,0x00,0x1f,0xc0,0x00,0x00,0x7f,0xe0,0x0f,0xfc,0x00,0x00,0x3f,0xc0,0x00,0x00,0x3f,0xe0,0x07,0xfc,0x00,0x00,0x79,0xe0,0x00,0x00,0x1f,0xe0,0x07,0xfc,0x00,0x00,0xf0,0xe0,0x00,0x00,0x0f,0xf0,0x07,0xfc,0x00,0x01,0xe0,0xe0,0x00,0x00,0x0f,0xf0,0x07,0xfc,0x00,0x03,0xc0,0x60,0x00,0x00,0x0f,0xf0,0x03,0xfc,0x00,0x07,0x80,0x70,0x00,0x00,0x07,0xf0,0x03,0xfc,0x00,0x0f,0x00,0x30,0x00,0x00,0x07,0xf0,0x03,0xfc,0x00,0x1e,0x00,0x30,0x00,0x00,0x07,0xf0,0x03,0xfc,0x00,0x3c,0x00,0x30,0x00,0x00,0x0f,0xf0,0x03,0xfc,0x00,0x78,0x00,0x10,0x00,0x00,0x0f,0xf0,0x07,0xfc,0x00,0xf0,0x00,0x10,0x00,0x00,0x0f,0xf0,0x07,0xfc,0x01,0xe0,0x00,0x10,0x00,0x00,0x1f,0xf0,0x07,0xfc,0x03,0xc0,0x00,0x00,0x00,0x00,0x1f,0xe0,0x07,0xfc,0x07,0x80,0x00,0x00,0x00,0x00,0x3f,0xe0,0x07,0xfc,0x0f,0x00,0x00,0x00,0xff,0xff,0xff,0xc0,0x0f,0xf8,0x1e,0x00,0x00,0x00,0xff,0xff,0xff,0xc0,0x0f,0xf8,0x3c,0x00,0x00,0x00,0xff,0xff,0xff,0x80,0x1f,0xf8,0x38,0x00,0x00,0x00,0xff,0xff,0xff,0x80,0x1f,0xf0,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0x3f,0xf0,0x00,0x00,0x00,0x00,0xff,0xff,0xfc,0x00,0x7f,0xf0,0x00,0x00,0x00,0x00,0xff,0xff,0xf8,0x00,0xff,0xe0,0x00,0x00,0x00,0x00,0xff,0xff,0xe0,0x01,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xc7,0x0e,0x1f,0xc0,0xfc,0x00,0x00,0x00,0x0f,0xff,0x87,0x0e,0x3f,0xe1,0xfe,0x00,0x00,0x00,0xff,0xff,0x07,0x0e,0x7f,0xe3,0xcf,0xff,0xff,0xff,0xff,0xfe,0x07,0x0e,0x70,0x03,0x87,0xff,0xff,0xff,0xff,0xfc,0x07,0x0e,0x60,0x03,0x03,0xff,0xff,0xff,0xff,0xf8,0x07,0x0e,0x60,0x03,0x03,0xff,0xff,0xff,0xff,0xf0,0x07,0x0e,0x60,0x03,0x03,0xff,0xff,0xff,0xff,0xe0,0x07,0x0e,0x70,0x03,0x87,0xff,0xff,0xff,0xff,0x80,0x07,0x9e,0x7f,0xe3,0xcf,0xff,0xff,0xff,0xfe,0x00,0x03,0xfc,0x3f,0xe1,0xfe,0xff,0xff,0xff,0xf0,0x00,0x01,0xf8,0x1f,0xc0,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0xff,0xe1,0x80,0x10,0x7f,0xf8,0x1f,0xfc,0xf8,0xf9,0xff,0xf3,0xc0,0x38,0xff,0xfc,0x3f,0xfe,0xfd,0xf8,0xff,0xe3,0xe0,0x38,0xff,0xf8,0x7f,0xff,0xef,0xb8,0x0e,0x03,0xf0,0x38,0xe0,0x00,0x78,0x07,0xe7,0x38,0x0e,0x03,0xb0,0x38,0xe0,0x00,0x70,0x03,0xe2,0x38,0x0e,0x03,0xb8,0x38,0xe0,0x00,0x70,0x03,0xe0,0x38,0x0e,0x03,0x9c,0x38,0xe0,0x00,0x78,0x07,0xe0,0x38,0x0e,0x03,0x9c,0x38,0xff,0x00,0x7f,0xff,0xe0,0x38,0x0e,0x03,0x8e,0x38,0xff,0x80,0x7f,0xfe,0xe0,0x38,0x0e,0x03,0x87,0x38,0xff,0x00,0x7f,0xfc,0xe0,0x38,0x0e,0x03,0x87,0x38,0xe0,0x00,0x70,0xe0,0xe0,0x38,0x0e,0x03,0x83,0xb8,0xe0,0x00,0x70,0x70,0xe0,0x38,0x0e,0x03,0x81,0xf8,0xe0,0x00,0x70,0x38,0xe0,0x38,0x0e,0x03,0x80,0xf8,0xe0,0x00,0x70,0x1c,0xe0,0x38,0xff,0xe3,0x80,0xf8,0xff,0xf8,0x70,0x0e,0xe0,0x39,0xff,0xf3,0x80,0x78,0xff,0xfc,0x70,0x07,0x40,0x10,0xff,0xe1,0x00,0x30,0x7f,0xf8,0x20,0x03}; + static const unsigned char PROGMEM image_check_big_bits[] = {0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x03,0xf0,0x00,0x03,0xf0,0x00,0x03,0xc0,0x00,0x0f,0xc0,0x00,0x0f,0x00,0xf0,0x3f,0x00,0xf0,0x3f,0x00,0xfc,0xfc,0x00,0xfc,0xfc,0x00,0x3f,0xf0,0x00,0x3f,0xf0,0x00,0x0f,0xc0,0x00,0x0f,0xc0,0x00,0x03,0x00,0x00,0x03,0x00,0x00}; + static const unsigned char PROGMEM image_clock_bits[] = {0x07,0xc0,0x18,0x30,0x29,0x28,0x41,0x04,0x61,0x0c,0x81,0x02,0x81,0x02,0xe1,0x0e,0x80,0x82,0x80,0x42,0x60,0x2c,0x40,0x04,0x29,0x28,0x19,0x30,0x07,0xc0,0x00,0x00}; + static const unsigned char PROGMEM image_hand_thumbs_up_bits[] = {0x00,0x10,0x00,0x28,0x00,0x28,0x00,0x48,0x00,0x50,0x00,0x90,0x01,0x3e,0xfa,0x03,0x8c,0x05,0x88,0x03,0x88,0x05,0x88,0x03,0x88,0x05,0xa8,0x02,0x8e,0x06,0xf9,0xfc}; + static const unsigned char PROGMEM image_music_radio_broadcast_bits[] = {0x07,0xc0,0x18,0x30,0x27,0xc8,0x48,0x24,0x93,0x92,0xa4,0x4a,0xa9,0x2a,0xa3,0x8a,0x06,0xc0,0x03,0x80,0x01,0x00,0x03,0x80,0x02,0x80,0x06,0xc0,0x04,0x40,0x00,0x00}; +// static const unsigned char PROGMEM image_duco_bits[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + static const unsigned char PROGMEM image_network_1_bits[] = {0x00,0x0e,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xea,0x00,0xaa,0x00,0xaa,0x00,0xaa,0x0e,0xaa,0x0a,0xaa,0x0a,0xaa,0x0a,0xaa,0xea,0xaa,0xaa,0xaa,0xee,0xee,0x00,0x00}; + static const unsigned char PROGMEM image_network_1_bar_bits[] = {0x00,0x0e,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xea,0x00,0xaa,0x00,0xaa,0x00,0xaa,0x0e,0xaa,0x0a,0xaa,0x0a,0xaa,0x0a,0xaa,0xea,0xaa,0xea,0xaa,0xee,0xee,0x00,0x00}; + static const unsigned char PROGMEM image_network_2_bars_bits[] = {0x00,0x0e,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xea,0x00,0xaa,0x00,0xaa,0x00,0xaa,0x0e,0xaa,0x0e,0xaa,0x0e,0xaa,0x0e,0xaa,0xee,0xaa,0xee,0xaa,0xee,0xee,0x00,0x00}; + static const unsigned char PROGMEM image_network_4_bars_bits[] = {0x00,0x0e,0x00,0x0e,0x00,0x0e,0x00,0x0e,0x00,0xee,0x00,0xee,0x00,0xee,0x00,0xee,0x0e,0xee,0x0e,0xee,0x0e,0xee,0x0e,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x00,0x00}; + static const unsigned char PROGMEM image_network_3_bars_bits[] = {0x00,0x0e,0x00,0x0a,0x00,0x0a,0x00,0x0a,0x00,0xea,0x00,0xea,0x00,0xea,0x00,0xea,0x0e,0xea,0x0e,0xea,0x0e,0xea,0x0e,0xea,0xee,0xea,0xee,0xea,0xee,0xee,0x00,0x00}; +#endif #if defined(DISPLAY_7735) static const unsigned char PROGMEM image_duco_bits[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xfc,0x00,0x00,0x07,0xff,0xff,0x80,0x00,0x07,0xff,0xff,0xc0,0x00,0x07,0xff,0xff,0xe0,0x00,0x07,0xff,0xff,0xf0,0x00,0x00,0x00,0x03,0xf8,0x00,0x07,0xfe,0x01,0xfc,0x00,0x07,0xff,0xc0,0xfc,0x00,0x07,0xff,0xe0,0x7e,0x00,0x07,0xff,0xf0,0x3e,0x00,0x07,0xff,0xf8,0x3f,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0x78,0x1f,0x00,0x00,0x00,0x7c,0x1f,0x00,0x00,0x00,0x7c,0x1f,0x00,0x00,0x00,0x7c,0x1f,0x00,0x00,0x00,0x7c,0x1f,0x00,0x00,0x00,0x78,0x1f,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x01,0xf8,0x1f,0x00,0x07,0xff,0xf0,0x3f,0x00,0x07,0xff,0xf0,0x3e,0x00,0x07,0xff,0xe0,0x7e,0x00,0x07,0xff,0x80,0xfc,0x00,0x00,0x00,0x01,0xfc,0x00,0x00,0x00,0x07,0xf8,0x00,0x07,0xff,0xff,0xf0,0x00,0x07,0xff,0xff,0xe0,0x00,0x07,0xff,0xff,0xc0,0x00,0x07,0xff,0xff,0x00,0x00,0x07,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; @@ -113,6 +127,41 @@ } #endif +#if defined(DISPLAY_2432S08) + void drawStrMultiline(const char *msg, int xloc, int yloc) { + //https://github.com/olikraus/u8g2/discussions/1479 + int dspwidth = 320; + int strwidth = 0; + char glyph[2]; glyph[1] = 0; + + for (const char *ptr = msg, *lastblank = NULL; *ptr; ++ptr) { + while (xloc == 0 && *msg == ' ') + if (ptr == msg++) ++ptr; + + glyph[0] = *ptr; + strwidth = 10; + if (*ptr == ' ') lastblank = ptr; + else ++strwidth; + + if (xloc + strwidth > dspwidth) { + int starting_xloc = xloc; + while (msg < (lastblank ? lastblank : ptr)) { + glyph[0] = *msg++; + xloc += tft.drawString(glyph,xloc, yloc ); + } + + strwidth -= xloc - starting_xloc; + yloc += 10; + xloc = 0; lastblank = NULL; + } + } + while (*msg) { + glyph[0] = *msg++; + xloc += tft.drawString(glyph,xloc, yloc ); + } + } +#endif + #if defined(DISPLAY_7735) void drawStrMultiline(const char *msg, int xloc, int yloc) { //https://github.com/olikraus/u8g2/discussions/1479 @@ -148,7 +197,7 @@ } #endif -#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735) +#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735)|| defined(DISPLAY_2432S08) void screen_setup() { // Ran during setup() // Abstraction layer: screen initialization @@ -179,6 +228,14 @@ #endif + #if defined(DISPLAY_2432S08) + tft.init(); + tft.begin(); + tft.setRotation(1); + tft.fillScreen(TFT_BLACK); + + #endif + #if defined(DISPLAY_7735) tft.init(); tft.begin(); @@ -343,6 +400,79 @@ delay(2500); #endif + #if defined(DISPLAY_2432S08) + tft.fillScreen(TFT_BLACK); + tft.drawBitmap(110, 80, image_duco_2_bits, 80, 74, 0xFC00); + delay(2500); + tft.fillScreen(TFT_BLACK); + tft.drawRect(0, 0, 319, 239, 0xFFE0); + tft.setTextColor(TFT_WHITE,TFT_BLACK); + tft.drawBitmap(17, 20, image_duco_2_bits, 80, 74, 0xFC00); + tft.setTextSize(2); + tft.setCursor(55, 110); + #if defined(ESP8266) + tft.print("ESP8266 "); + #elif defined(CONFIG_FREERTOS_UNICORE) + tft.print("ESP32S2/C3 "); + #else + tft.print("ESP32 "); + #endif + + #if defined(ESP8266) + tft.print(String(ESP.getCpuFreqMHz()).c_str()); + #else + tft.print(String(getCpuFrequencyMhz()).c_str()); + #endif + tft.print(" MHz"); + tft.setTextSize(1); + tft.setCursor(6, 140); + tft.print("Compiled "); + tft.print(__DATE__); + + delay(2500); + + tft.drawString("Features:",6, 160,1); + String features_str = "OTA "; + #if defined(USE_LAN) + features_str += "LAN "; + #endif + #if defined(LED_BLINKING) + features_str += "Blink "; + #endif + #if defined(SERIAL_PRINTING) + features_str += "Serial "; + #endif + #if defined(WEB_DASHBOARD) + features_str += "Webserver "; + #endif + #if defined(DISPLAY_16X2) + features_str += "LCD16X2 "; + #endif + #if defined(DISPLAY_SSD1306) + features_str += "SSD1306 "; + #endif + #if defined(DISPLAY_114) + features_str += "TT-GO "; + #endif + #if defined(DISPLAY_2432S08) + features_str += "2432S028 "; + #endif + #if defined(USE_INTERNAL_SENSOR) + features_str += "Int. sensor "; + #endif + #if defined(USE_DS18B20) + features_str += "DS18B20 "; + #endif + #if defined(USE_DHT) + features_str += "DHT "; + #endif + #if defined(USE_HSU07M) + features_str += "HSU07M "; + #endif + drawStrMultiline(features_str.c_str(), 6, 180); + delay(2500); + #endif + #if defined(DISPLAY_7735) tft.fillScreen(TFT_BLACK); tft.setTextColor(TFT_WHITE,TFT_BLACK); @@ -474,6 +604,32 @@ delay(2500); #endif + #if defined(DISPLAY_2432S08) + tft.fillScreen(TFT_BLACK); + tft.setTextColor(0xFFFF); + tft.setTextSize(2); + tft.drawRect(0, 0, 319, 239, 0xFFE0); + tft.drawBitmap(17, 20, image_duco_2_bits, 80, 74, 0xFC00); + #if defined(ESP8266) + tft.drawString("ESP8266",10,110); + #elif defined(CONFIG_FREERTOS_UNICORE) + tft.drawString("ESP32S2/C3",10,110); + #else + tft.drawString("ESP32",10,110); + #endif + tft.drawString("Duino-Coin",10,140 ); + tft.drawString("MINER",130,140 ); + tft.setTextColor(0x4E04); + tft.drawString(String(SOFTWARE_VERSION).c_str(),250, 140); + tft.setTextColor(0xFFFF); + tft.setTextSize(1); + tft.drawString("Rev", 228, 145); + tft.drawString(message.c_str(),10,160 ); + tft.drawString("www.duinocoin.com",160,220 ); + + delay(2500); + #endif + #if defined(DISPLAY_7735) tft.fillScreen(TFT_BLACK); tft.setTextColor(0xFFFF); @@ -495,20 +651,102 @@ tft.drawString("MINER",75,60 ); tft.setTextSize(1); tft.drawString(message.c_str(),3,110 ); - tft.drawString("www.duinocoin.com",40,87 ); - - + tft.drawString("www.duinocoin.com",40,87 ); delay(2500); #endif } + void display_background() { + tft.fillScreen(TFT_BLACK); + tft.drawRect(0, 0, 319, 239, 0xFFE0); + tft.drawBitmap(17, 14, image_duco_2_bits, 80, 74, 0xFC00); + tft.drawLine(1, 98, 318, 98, 0xFFE0); + tft.drawLine(116, 61, 116, 0, 0xFFE0); + tft.drawRect(116, 60, 203, 39, 0xFFE0); + tft.fillRect(160, 166, 154, 68, 0xFFE0); + tft.setTextColor(0x7E0); + tft.setFreeFont(); + tft.setTextSize(1); + tft.drawString("Balance", 121, 64); + tft.drawString("Miners", 278, 64); + tft.drawString("Bal update every 5 m", 195,100); + tft.setTextColor(0x0); + tft.setTextSize(1); + tft.setFreeFont(&FreeSansBold9pt7b); + tft.drawString("kH/s", 272, 217); + tft.drawBitmap(8, 173, image_check_big_bits, 20, 17, 0x7E0); + tft.drawBitmap(121, 9, image_clock_bits, 15, 16, 0x41F); + tft.drawLine(160, 166, 1, 166, 0xFFE0); + tft.drawBitmap(11, 193, image_hand_thumbs_up_bits, 16, 16, 0x7E0); + tft.drawBitmap(270, 9, image_music_radio_broadcast_bits, 15, 16, 0x41F); + tft.setTextColor(0x7E0); + tft.setTextSize(1); + tft.setFreeFont(); + tft.drawString("Diff:", 7, 219); + tft.drawString("shares/s", 108, 219); + tft.drawString("shares", 121, 177); + tft.drawString("accepted", 107, 199); + tft.setTextColor(0x408); + tft.drawString("Node:", 121, 46); + tft.drawString("Ping:", 246, 47); + tft.setTextColor(0x41F); + tft.drawString("IP:", 207, 32); + tft.setTextColor(0x400); + tft.drawString(String(SOFTWARE_VERSION).c_str(),79,15 ); + tft.setTextColor(0xAD55); + tft.drawString("Miner Uptime", 147, 8); + tft.drawString("ESP32 ", 121, 32); + tft.drawString(String(getCpuFrequencyMhz()).c_str(),157,32); + tft.drawString("MHz",180,32); + } + void display_balance(String result_balance_balance,String total_miner, String result_balance_username){ + + #if defined(DISPLAY_2432S08) + + tft.setFreeFont(); + tft.setTextSize(1); + tft.setTextColor(0x410); + if (first_display == true) { tft.drawString(result_balance_username,168,64); + first_display = false; + } + // tft.fillRect(168, 64, 108, 9, 0x0); + // tft.drawString((result_balance_username),168,64); + tft.setTextColor(0xC618); + tft.setTextSize(2); + tft.fillRect(120, 76, 156, 16, 0x0); + tft.drawString(result_balance_balance + " D", 120, 76); + tft.fillRect(278, 76, 35, 16, 0x0); + tft.setTextColor(0x4410); + tft.drawString(total_miner, 278, 76); + #else {} + #endif + } + + void display_time(String(mytime)){ + + #if defined(DISPLAY_2432S08) + + tft.setFreeFont(&FreeSans18pt7b); + tft.setTextColor(0xFFFF); + tft.setTextSize(2); + tft.fillRect(19, 104, 170, 55, 0x0); + tft.drawString(mytime, 19, 104); + tft.setFreeFont(); + tft.setTextSize(1); + tft.fillRect(215, 120, 100, 40, 0x0); + tft.drawString(myday, 215,120); + tft.drawString(mydate, 215, 135); + #else {} + #endif + } + void display_mining_results(String hashrate, String accepted_shares, String total_shares, String uptime, String node, String difficulty, String sharerate, String ping, String accept_rate) { // Ran after each found share // Abstraction layer: displaying mining results Serial.println("Displaying mining results"); - + #if defined(DISPLAY_SSD1306) u8g2.clearBuffer(); u8g2.setFont(u8g2_font_profont10_tr); @@ -665,6 +903,53 @@ #endif + #if defined(DISPLAY_2432S08) + + tft.setFreeFont(); + tft.setTextColor(0x0); + tft.setTextSize(4); + tft.fillRect(173, 183, 116, 28, 0xFFE0); + if (hashrate.toFloat() < 100.0) { + tft.drawString(hashrate.c_str(), 188, 183 ); + } else { + tft.drawString(hashrate.c_str(), 173, 183 ); + } + tft.setTextSize(1); + tft.setTextColor(0x41F); + tft.setFreeFont(); + tft.fillRect(39, 177, 78, 7, 0x0); + tft.drawString((accepted_shares + "/" + total_shares).c_str(),39,177 ); + tft.fillRect(39, 199, 65, 7, 0x0); + tft.drawString(("(" + accept_rate + "%)").c_str(),39, 199 ); + tft.setTextColor(0xF800); + tft.fillRect(78, 219, 25, 7, 0x0); + tft.drawString(sharerate.c_str(),78, 219 ); + tft.fillRect(40, 219, 27, 7, 0x0); + tft.drawString(difficulty.c_str(),40, 219 ); + tft.setTextColor(0xAD55); + tft.fillRect(228, 32, 70, 7, 0x0); + tft.drawString(String(WiFi.localIP().toString()).c_str(),228, 32); + tft.fillRect(145, 18, 85, 7, 0x0); + tft.drawString(uptime.c_str(),160, 18); + tft.drawString(node.c_str(), 155, 46); + tft.fillRect(279, 47, 37, 7, 0x0); + tft.drawString((ping + "ms").c_str(),279, 47 ); + + + + tft.fillRect(290, 8, 15, 16, 0x0); + if (WiFi.RSSI() > -40) { + tft.drawBitmap(290, 8, image_network_4_bars_bits, 15, 16, 0xFFFF); + } else if (WiFi.RSSI() > -60) { + tft.drawBitmap(290, 8, image_network_3_bars_bits, 15, 16, 0xFFFF); + } else if (WiFi.RSSI() > -75) { + tft.drawBitmap(290, 8, image_network_2_bars_bits, 15, 16, 0xFFFF); + } else { + tft.drawBitmap(290, 8, image_network_1_bar_bits, 15, 16, 0xFFFF); + } + + #endif + #if defined(DISPLAY_7735) tft.fillScreen(TFT_BLACK); tft.drawBitmap(-2, 6, image_duco_bits, 35, 35, 0xFC00); diff --git a/ESP_Code/ESP_Code.ino b/ESP_Code/ESP_Code.ino index b1e3cb74..638caa5e 100644 --- a/ESP_Code/ESP_Code.ino +++ b/ESP_Code/ESP_Code.ino @@ -6,7 +6,7 @@ Official code for all ESP8266/32 boards version 4.3 Main .ino file - The Duino-Coin Team & Community 2019-2024 © MIT Licensed + The Duino-Coin Team & Community 2019-2025 © MIT Licensed https://duinocoin.com https://github.com/revoxhere/duino-coin @@ -48,6 +48,19 @@ #include #include + +//-----------------------------used for the balance display interval-------------------// +boolean runEvery(unsigned long interval) { + static unsigned long previousMillis = 0; + unsigned long currentMillis = millis(); + if (currentMillis - previousMillis >= interval) { + previousMillis = currentMillis; + return true; + } + return false; +} +//-------------------------------------------------------------------------------------// + void handleSystemEvents(void) { #if defined(ESP32) && CORE == 2 esp_task_wdt_reset(); @@ -68,7 +81,7 @@ void handleSystemEvents(void) { #include "Dashboard.h" #endif -#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735) +#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735)|| defined(DISPLAY_2432S08) #include "DisplayHal.h" #endif @@ -111,6 +124,7 @@ void handleSystemEvents(void) { WiFiManagerParameter custom_duco_username("duco_usr", "Duino-Coin username", duco_username, 40); WiFiManagerParameter custom_duco_password("duco_pwd", "Duino-Coin mining key (if enabled in the wallet)", duco_password, 40); WiFiManagerParameter custom_duco_rigid("duco_rig", "Custom miner identifier (optional)", duco_rigid, 24); + void saveConfigCallback() { preferences.begin("duino_config", false); @@ -121,6 +135,8 @@ void handleSystemEvents(void) { RestartESP("Settings saved"); } + + void reset_settings() { server.send(200, "text/html", "Settings have been erased. Please redo the configuration by connecting to the WiFi network that will be created"); delay(500); @@ -149,8 +165,11 @@ void RestartESP(String msg) { Serial.println("Restarting ESP..."); #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735)|| defined(DISPLAY_2432S08) display_info("Restarting ESP..."); + #if defined(DISPLAY_2432S08) + display_background(); + #endif #endif #if defined(ESP8266) @@ -208,12 +227,14 @@ namespace { static bool eth_connected = false; #endif + + void UpdateHostPort(String input) { // Thanks @ricaun for the code DynamicJsonDocument doc(256); deserializeJson(doc, input); const char *name = doc["name"]; - + configuration->host = doc["ip"].as().c_str(); configuration->port = doc["port"].as(); node_id = String(name); @@ -222,7 +243,7 @@ namespace { Serial.println("Poolpicker selected the best mining node: " + node_id); #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735)||defined(DISPLAY_2432S08) display_info(node_id); #endif } @@ -273,8 +294,11 @@ namespace { Serial.printf("Error fetching node from poolpicker: %s\n", https.errorToString(httpCode).c_str()); VerifyWifi(); #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735)|| defined(DISPLAY_2432S08) display_info(https.errorToString(httpCode)); + #if defined(DISPLAY_2432S08) + display_background(); + #endif #endif } https.end(); @@ -293,7 +317,7 @@ namespace { delay(waitTime * 1000); input = httpGetString("https://server.duinocoin.com/getPool"); - + // Increase wait time till a maximum of 32 seconds // (addresses: Limit connection requests on failure in ESP boards #1041) waitTime *= 2; @@ -304,6 +328,8 @@ namespace { UpdateHostPort(input); } + + #ifdef USE_LAN void WiFiEvent(WiFiEvent_t event) { switch (event) { @@ -393,12 +419,14 @@ namespace { #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735)|| defined(DISPLAY_2432S08) display_info("Waiting for node..."); #endif SelectNode(); + } + void SetupOTA() { // Prepare OTA handler ArduinoOTA.onStart([]() @@ -509,7 +537,7 @@ void task1_func(void *) { VOID LOOP() { job[0]->mine(); - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735)|| defined(DISPLAY_2432S08) float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; float accept_rate = (accepted_share_count / 0.01 / share_count); @@ -520,6 +548,8 @@ void task1_func(void *) { String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; float sharerate = share_count / (millisecs / 1000.0); + + printTime(); while(displayLock) { handleSystemEvents(); @@ -527,8 +557,13 @@ void task1_func(void *) { displayLock = true; display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), - String(node_id), String(difficulty / 100), String(sharerate, 1), + String(node_id), String(difficulty / 100), String(sharerate, 2), String(ping), String(accept_rate, 1)); + + display_balance(String(result_balance_balance),String(total_miner),String(result_balance_username)); + + display_time(String(mytime)); + displayLock = false; #endif } @@ -543,8 +578,9 @@ void task2_func(void *) { VOID LOOP() { job[1]->mine(); - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735) + + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735)|| defined(DISPLAY_2432S08) + float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; float accept_rate = (accepted_share_count / 0.01 / share_count); @@ -555,6 +591,8 @@ void task2_func(void *) { String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; float sharerate = share_count / (millisecs / 1000.0); + + printTime(); while(displayLock) { handleSystemEvents(); @@ -562,14 +600,56 @@ void task2_func(void *) { displayLock = true; display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), - String(node_id), String(difficulty / 100), String(sharerate, 1), + String(node_id), String(difficulty / 100), String(sharerate, 2), String(ping), String(accept_rate, 1)); + + display_balance(String(result_balance_balance),String(total_miner),String(result_balance_username)); + + display_time(String(mytime)); + displayLock = false; #endif } #endif } +//------------------------- Settings and code for time display on ESP32-2432S028 CYD------------------------- + +void notify(struct timeval* t) { + #if defined(SERIAL_PRINTING) + Serial.println("SNTP synchronized"); + #endif +} + +void initSNTP() { + sntp_set_sync_interval(4 * 60 * 60 * 1000UL); // 1 hour + sntp_set_time_sync_notification_cb(notify); + esp_sntp_setoperatingmode(ESP_SNTP_OPMODE_POLL); + esp_sntp_setservername(0, "pool.ntp.org"); + esp_sntp_init(); + setTimezone(); +} + +void setTimezone() { + setenv("TZ", "CET-1CEST,M3.5.0,M10.5.0/3", 1); // Paris TZ, get your TZ at https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv + tzset(); +} + +void printTime() { + struct tm timeinfo; + getLocalTime(&timeinfo); + #if defined(SERIAL_PRINTING) + Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S"); + #endif + strftime (mytime, sizeof (mytime), "%H:%M", &timeinfo); + strftime (mydate, sizeof (mydate), "%d/%m/%Y", &timeinfo); //date in European format + strftime (myday, sizeof (myday), "%A", &timeinfo); +} + +//--------------------------------------------------------------------------------------------------------- + + + void setup() { #if !defined(ESP8266) && defined(DISABLE_BROWNOUT) WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); @@ -600,9 +680,9 @@ void setup() { } #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735)|| defined(DISPLAY_2432S08) screen_setup(); - display_boot(); + display_boot(); #endif @@ -721,7 +801,7 @@ void setup() { blinker.detach(); #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735)|| defined(DISPLAY_2432S08) display_info("Waiting for node..."); #endif #if defined(BLUSHYBOX) @@ -732,13 +812,24 @@ void setup() { blinker.detach(); #endif #else - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114)|| defined(DISPLAY_7735)||defined(DISPLAY_2432S08) display_info("Waiting for WiFi..."); #endif SetupWifi(); #endif SetupOTA(); + #if defined(DISPLAY_2432S08) + preferences.begin("duino_config", false); + strcpy(duco_username, preferences.getString("duco_username", "username").c_str()); + preferences.end(); + #if defined(SERIAL_PRINTING) + Serial.println("---- Welcome ---- 2438S028 user ! ----"); + Serial.println(duco_username); + Serial.println("--------------------------------------"); + #endif + #endif + #if defined(WEB_DASHBOARD) if (!MDNS.begin(RIG_IDENTIFIER)) { #if defined(SERIAL_PRINTING) @@ -790,6 +881,17 @@ void setup() { xTaskCreatePinnedToCore(task1_func, "task1_func", 10000, NULL, 1, &Task1, 0); xTaskCreatePinnedToCore(task2_func, "task2_func", 10000, NULL, 1, &Task2, 1); #endif + + #if defined(DISPLAY_2432S08) + display_background(); + #endif + +//----------------------------------SNTP connect------------------------------------------------// + + initSNTP(); + +//----------------------------------------------------------------------------------------------// + } void system_events_func(void* parameter) { @@ -807,7 +909,7 @@ void single_core_loop() { lwdtFeed(); - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735) + #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114)|| defined(DISPLAY_7735) // || defined(DISPLAY_2432S08) float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; float accept_rate = (accepted_share_count / 0.01 / share_count); @@ -820,7 +922,7 @@ void single_core_loop() { float sharerate = share_count / (millisecs / 1000.0); display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), - String(node_id), String(difficulty / 100), String(sharerate, 1), + String(node_id), String(difficulty / 100), String(sharerate, 2), String(ping), String(accept_rate, 1)); #endif @@ -836,4 +938,58 @@ void loop() { single_core_loop(); #endif delay(10); + +// displaying user balance and number of miners, update every 300 s (can be changed in Settings.h) + +#if defined(DISPLAY_2432S08) + + if ((runEvery(run_in_ms)) || (first_start == true)) + { + + String ducoReportJsonUrl = ("https://server.duinocoin.com/v2/users/" + String(duco_username)); + + #if defined(SERIAL_PRINTING) + Serial.println("retrieving balance from the API..."); + Serial.println(String(ducoReportJsonUrl)); + Serial.println(); + #endif + + first_start = false; + String input2 = httpGetString(ducoReportJsonUrl); + DynamicJsonDocument doc (30000); + DeserializationError error = deserializeJson(doc, input2); + + if (error) { + Serial.print("deserializeJson() failed: "); + Serial.println(error.c_str()); + return; + } + + JsonObject result = doc["result"]; + + JsonObject result_balance = result["balance"]; + + total_miner = 0; + + for (JsonObject result_miner : result["miners"].as()) { + result_balance_balance = result_balance["balance"]; + result_balance_username = result_balance["username"].as(); // Assign as String + total_miner++; + + +// for (JsonObject result_miner : result["miners"].as()) { +// result_balance_balance = result_balance["balance"]; +// result_balance_username = result_balance["username"]; +// total_miner++; + } + #if defined(SERIAL_PRINTING) + Serial.println(); + Serial.println("Username : " + String(result_balance_username)); + Serial.println("Balance : " + String(result_balance_balance) + " DUCO"); + Serial.println("Total miners : " + String(total_miner)); + #endif + } + +#endif + } diff --git a/ESP_Code/MiningJob.h b/ESP_Code/MiningJob.h index 6d88f2a1..7394f383 100644 --- a/ESP_Code/MiningJob.h +++ b/ESP_Code/MiningJob.h @@ -66,7 +66,7 @@ class MiningJob { dsha1->warmup(); generateRigIdentifier(); } - + void blink(uint8_t count, uint8_t pin = LED_BUILTIN) { #if defined(LED_BLINKING) uint8_t state = HIGH; @@ -333,10 +333,12 @@ class MiningJob { } } + + void askForJob() { Serial.println("Core [" + String(core) + "] - Asking for a new job for user: " + String(config->DUCO_USER)); - + #if defined(USE_DS18B20) sensors.requestTemperatures(); float temp = sensors.getTempCByIndex(0); diff --git a/ESP_Code/Settings.h b/ESP_Code/Settings.h index 5f45b3d5..9791c78b 100644 --- a/ESP_Code/Settings.h +++ b/ESP_Code/Settings.h @@ -6,21 +6,35 @@ extern bool displayLock = false; // ---------------------- General settings ---------------------- // // Change the part in brackets to your Duino-Coin username -extern char *DUCO_USER = "your_username"; +extern char *DUCO_USER = "your username"; // Change the part in brackets to your mining key (if you have set it in the wallet) -extern char *MINER_KEY = "your_mining_key"; +extern char *MINER_KEY = "your mining key"; // Change the part in brackets if you want to set a custom miner name // Use Auto to autogenerate, None for no custom identifier -extern char *RIG_IDENTIFIER = "your custom miner name"; +extern char *RIG_IDENTIFIER = "rig id"; // Change the part in brackets to your WiFi name extern const char SSID[] = "your_wifi_ssid"; // Change the part in brackets to your WiFi password extern const char PASSWORD[] = "your_wifi_psswd"; // -------------------------------------------------------------- // +//-------------------------Balance display settings--------------------------// +extern bool first_display = true; +extern bool first_start = true; // to activate balance fetching on boot without waiting for the delay +extern String ducoReportJsonUrl = ""; // url init +extern const int run_in_ms = 300000; // 5 minutes between each balance update +extern double result_balance_balance = 0; +extern String result_balance_username = "username"; +extern unsigned int total_miner = 0; +//---------------------------------------------------------------------------// + +//---------------------------Time Display------------------------------------// +extern char mytime[6] =""; +extern char mydate[12] = ""; +extern char myday[10] = ""; // -------------------- Advanced options ------------------------ // // Uncomment if you want to host the dashboard page (available on ESPs IP address and mDNS) -// #define WEB_DASHBOARD + #define WEB_DASHBOARD // Comment out the line below if you wish to disable LED blinking #define LED_BLINKING @@ -43,7 +57,7 @@ extern const char PASSWORD[] = "your_wifi_psswd"; // Uncomment to enable WiFiManager captive portal in AP mode // The board will create its own network you connect to and change the settings -// #define CAPTIVE_PORTAL + #define CAPTIVE_PORTAL // -------------------------------------------------------------- // // ------------------------ Displays ---------------------------- // @@ -60,7 +74,10 @@ extern const char PASSWORD[] = "your_wifi_psswd"; // #define DISPLAY_114 // uncomment for tft7735 display - #define DISPLAY_7735 +// #define DISPLAY_7735 + +//uncomment to enable ESP32 2432S08 module + #define DISPLAY_2432S08 // Uncomment to enable a 16x2 LCD screen on a direct bus to display mining info in real time // See line 150 for connections and initializer @@ -110,17 +127,21 @@ extern const char PASSWORD[] = "your_wifi_psswd"; #else // ESP32 #ifndef LED_BUILTIN - #define LED_BUILTIN 2 + #define LED_BUILTIN 2 #endif #if defined(BLUSHYBOX) #define LED_BUILTIN 4 #endif + #if defined(DISPLAY_2432S08) + #define LED_BUILTIN 4 + #endif #endif #define BLINK_SETUP_COMPLETE 2 #define BLINK_CLIENT_CONNECT 5 #define SOFTWARE_VERSION "4.3" + extern unsigned int hashrate = 0; extern unsigned int hashrate_core_two = 0; extern unsigned int difficulty = 0; @@ -184,6 +205,18 @@ extern unsigned int ping = 0; TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h #endif +#if defined(DISPLAY_2432S08) + // Install "lilygo lib TFT_eSPI.h" if you get an error + #include "esp_sntp.h" + #include + #include + #include + + + // Display definition from the tft_eSPI library. Edit if you use a different display + TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h +#endif + #if defined(DISPLAY_7735) // Install "lilygo lib TFT_eSPI.h" if you get an error #include diff --git a/ESP_Code/User_Setup.h b/ESP_Code/User_Setup.h index b739a474..117dbbe0 100644 --- a/ESP_Code/User_Setup.h +++ b/ESP_Code/User_Setup.h @@ -42,11 +42,11 @@ //#define RPI_DISPLAY_TYPE // 20MHz maximum SPI // Only define one driver, the other ones must be commented out -// select ST7789_DRIVER for tt-go 1.14 display, st7735_DRIVER for TFT 7735 display +// select ST7789_DRIVER for tt-go 1.14 display, st7735_DRIVER for TFT 7735 display, ILI9341_2 for ESP32-2432S028 //#define ILI9341_DRIVER // Generic driver for common displays -//#define ILI9341_2_DRIVER // Alternative ILI9341 driver, see https://github.com/Bodmer/TFT_eSPI/issues/1172 -#define ST7735_DRIVER // Define additional parameters below for this display +#define ILI9341_2_DRIVER // Alternative ILI9341 driver, see https://github.com/Bodmer/TFT_eSPI/issues/1172 +//#define ST7735_DRIVER // Define additional parameters below for this display //#define ILI9163_DRIVER // Define additional parameters below for this display //#define S6D02A1_DRIVER //#define RPI_ILI9486_DRIVER // 20MHz maximum SPI @@ -86,15 +86,15 @@ // for TT-GO 1.14 by Lilygo, set TFT_WIDTH to 240 and TFT_HEIGHT to 135 // FOR ST7735 DISPLAY, SET TFT_WIDTH to 128 and TFT_HEIGHT to 160 // #define TFT_WIDTH 80 - #define TFT_WIDTH 128 // st7735 +// #define TFT_WIDTH 128 // st7735 // #define TFT_WIDTH 135 // Lilygo TT-go 1.14 // #define TFT_WIDTH 172 // ST7789 172 x 320 // #define TFT_WIDTH 170 // ST7789 170 x 320 -// #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320 + #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320 & ESP32-2432S028 // #define TFT_HEIGHT 160 // #define TFT_HEIGHT 135 - #define TFT_HEIGHT 160 // st7735 -// #define TFT_HEIGHT 320 // ST7789 240 x 320 +// #define TFT_HEIGHT 160 // st7735 + #define TFT_HEIGHT 320 // ST7789 240 x 320 & ESP32-2432S028 // #define TFT_HEIGHT 240 // GC9A01 240 x 240 and Lilygo TT-GO 1.14 // For ST7735 ONLY, define the type of display, originally this was based on the @@ -106,7 +106,7 @@ // #define ST7735_INITB // #define ST7735_GREENTAB - #define ST7735_GREENTAB2 +// #define ST7735_GREENTAB2 // #define ST7735_GREENTAB3 // #define ST7735_GREENTAB128 // For 128 x 128 display // #define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 offset) @@ -217,20 +217,40 @@ // FOR TFT 7735 Display uncomment the following lines -#define TFT_MOSI 23 -#define TFT_SCLK 18 -#define TFT_CS 15 // Chip select control pin -#define TFT_DC 16 // Data Command control pin -#define TFT_RST 4 // Reset pin (could connect to RST pin) +//#define TFT_MOSI 23 +//#define TFT_SCLK 18 +//#define TFT_CS 15 // Chip select control pin +//#define TFT_DC 16 // Data Command control pin +//#define TFT_RST 4 // Reset pin (could connect to RST pin) // FOR Lilygo TT-GO 1.14 uncomment the following lines -//#define TFT_MOSI 19 -//#define TFT_SCLK 18 -//#define TFT_CS 5 // Chip select control pin -//#define TFT_DC 16 // Data Command control pin -//#define TFT_BL 4 // LED back-light -//#define TFT_RST 23 // Reset pin (could connect to RST pin) +////#define TFT_MOSI 19 +//#define TFT_SCLK 36 +//#define TFT_CS 37 // Chip select control pin +//#define TFT_DC 35 // Data Command control pin +//#define TFT_BL 38 // LED back-light +//#define TFT_RST 33 // Reset pin (could connect to RST pin) + +// For ESP32 Dev board (only tested with ILI9341 display) Tested and working with ESP32-2432S028 aka CYD +// The hardware SPI can be mapped to any pins + +#define TFT_BL 21 // LED back-light control pin +#define TFT_BACKLIGHT_ON HIGH // Level to turn ON back-light (HIGH or LOW) + +#define TFT_MISO 12 +#define TFT_MOSI 13 +#define TFT_SCLK 14 +#define TFT_CS 15 // Chip select control pin +#define TFT_DC 2 // Data Command control pin +// #define TFT_RST 2 // Reset pin (could connect to RST pin) +#define TFT_RST -1 // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST + +//#define TOUCH_MISO 39 +//#define TOUCH_MOSI 32 +//#define TOUCH_SCLK 25 +#define TOUCH_CS 33 +//#define TOUCH_IRQ 36 // For ESP32 Dev board (only tested with GC9A01 display) // The hardware SPI can be mapped to any pins From 5f14beaaa9edd2b0b4b34fdaab1f14142ff8a4d3 Mon Sep 17 00:00:00 2001 From: jpx13 Date: Fri, 7 Mar 2025 14:10:26 +0100 Subject: [PATCH 12/14] Delete ESP_Code4.3/ESP_Code directory --- ESP_Code4.3/ESP_Code/Counter.h | 53 -- ESP_Code4.3/ESP_Code/DSHA1.h | 201 -------- ESP_Code4.3/ESP_Code/Dashboard.h | 151 ------ ESP_Code4.3/ESP_Code/DisplayHal.h | 492 ------------------ ESP_Code4.3/ESP_Code/ESP_Code.ino | 817 ------------------------------ ESP_Code4.3/ESP_Code/MiningJob.h | 423 ---------------- ESP_Code4.3/ESP_Code/Settings.h | 237 --------- 7 files changed, 2374 deletions(-) delete mode 100644 ESP_Code4.3/ESP_Code/Counter.h delete mode 100644 ESP_Code4.3/ESP_Code/DSHA1.h delete mode 100644 ESP_Code4.3/ESP_Code/Dashboard.h delete mode 100644 ESP_Code4.3/ESP_Code/DisplayHal.h delete mode 100644 ESP_Code4.3/ESP_Code/ESP_Code.ino delete mode 100644 ESP_Code4.3/ESP_Code/MiningJob.h delete mode 100644 ESP_Code4.3/ESP_Code/Settings.h diff --git a/ESP_Code4.3/ESP_Code/Counter.h b/ESP_Code4.3/ESP_Code/Counter.h deleted file mode 100644 index 58a4a0e6..00000000 --- a/ESP_Code4.3/ESP_Code/Counter.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef _COUNTER_H_ -#define _COUNTER_H_ - -#include -#include - -template -class Counter { - -public: - Counter() { reset(); } - - void reset() { - memset(buffer, '0', max_digits); - buffer[max_digits] = '\0'; - val = 0; - len = 1; - } - - inline Counter &operator++() { - inc_string(buffer + max_digits - 1); - ++val; - return *this; - } - - inline operator unsigned int() const { return val; } - inline const char *c_str() const { return buffer + max_digits - len; } - inline size_t strlen() const { return len; } - -protected: - inline void inc_string(char *c) { - // In theory, the line below should be uncommented to avoid writing outside the buffer. In practice however, - // with max_digits set to 10 or more, we can fit all possible unsigned 32-bit integers in the buffer. - // The check is skipped to gain a small extra speed improvement. - // if (c >= buffer) return; - - if (*c < '9') { - *c += 1; - } - else { - *c = '0'; - inc_string(c - 1); - len = max(max_digits - (c - buffer) + 1, len); - } - } - -protected: - char buffer[max_digits + 1]; - unsigned int val; - size_t len; -}; - -#endif diff --git a/ESP_Code4.3/ESP_Code/DSHA1.h b/ESP_Code4.3/ESP_Code/DSHA1.h deleted file mode 100644 index 58dc41b2..00000000 --- a/ESP_Code4.3/ESP_Code/DSHA1.h +++ /dev/null @@ -1,201 +0,0 @@ -#ifndef DSHA1_H -#define DSHA1_H - -#include - -class DSHA1 { - -public: - static const size_t OUTPUT_SIZE = 20; - - DSHA1() { - initialize(s); - } - - DSHA1 &write(const unsigned char *data, size_t len) { - size_t bufsize = bytes % 64; - if (bufsize && bufsize + len >= 64) { - memcpy(buf + bufsize, data, 64 - bufsize); - bytes += 64 - bufsize; - data += 64 - bufsize; - transform(s, buf); - bufsize = 0; - } - while (len >= 64) { - transform(s, data); - bytes += 64; - data += 64; - len -= 64; - } - if (len > 0) { - memcpy(buf + bufsize, data, len); - bytes += len; - } - return *this; - } - - void finalize(unsigned char hash[OUTPUT_SIZE]) { - const unsigned char pad[64] = {0x80}; - unsigned char sizedesc[8]; - writeBE64(sizedesc, bytes << 3); - write(pad, 1 + ((119 - (bytes % 64)) % 64)); - write(sizedesc, 8); - writeBE32(hash, s[0]); - writeBE32(hash + 4, s[1]); - writeBE32(hash + 8, s[2]); - writeBE32(hash + 12, s[3]); - writeBE32(hash + 16, s[4]); - } - - DSHA1 &reset() { - bytes = 0; - initialize(s); - return *this; - } - - // Warmup the cache and get a boost in performance - DSHA1 &warmup() { - uint8_t warmup[20]; - this->write((uint8_t *)"warmupwarmupwa", 20).finalize(warmup); - return *this; - } - -private: - uint32_t s[5]; - unsigned char buf[64]; - uint64_t bytes; - - const uint32_t k1 = 0x5A827999ul; - const uint32_t k2 = 0x6ED9EBA1ul; - const uint32_t k3 = 0x8F1BBCDCul; - const uint32_t k4 = 0xCA62C1D6ul; - - uint32_t inline f1(uint32_t b, uint32_t c, uint32_t d) { return d ^ (b & (c ^ d)); } - uint32_t inline f2(uint32_t b, uint32_t c, uint32_t d) { return b ^ c ^ d; } - uint32_t inline f3(uint32_t b, uint32_t c, uint32_t d) { return (b & c) | (d & (b | c)); } - - uint32_t inline left(uint32_t x) { return (x << 1) | (x >> 31); } - - void inline Round(uint32_t a, uint32_t &b, uint32_t c, uint32_t d, uint32_t &e, - uint32_t f, uint32_t k, uint32_t w) { - e += ((a << 5) | (a >> 27)) + f + k + w; - b = (b << 30) | (b >> 2); - } - - void initialize(uint32_t s[5]) { - s[0] = 0x67452301ul; - s[1] = 0xEFCDAB89ul; - s[2] = 0x98BADCFEul; - s[3] = 0x10325476ul; - s[4] = 0xC3D2E1F0ul; - } - - void transform(uint32_t *s, const unsigned char *chunk) { - uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4]; - uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15; - - Round(a, b, c, d, e, f1(b, c, d), k1, w0 = readBE32(chunk + 0)); - Round(e, a, b, c, d, f1(a, b, c), k1, w1 = readBE32(chunk + 4)); - Round(d, e, a, b, c, f1(e, a, b), k1, w2 = readBE32(chunk + 8)); - Round(c, d, e, a, b, f1(d, e, a), k1, w3 = readBE32(chunk + 12)); - Round(b, c, d, e, a, f1(c, d, e), k1, w4 = readBE32(chunk + 16)); - Round(a, b, c, d, e, f1(b, c, d), k1, w5 = readBE32(chunk + 20)); - Round(e, a, b, c, d, f1(a, b, c), k1, w6 = readBE32(chunk + 24)); - Round(d, e, a, b, c, f1(e, a, b), k1, w7 = readBE32(chunk + 28)); - Round(c, d, e, a, b, f1(d, e, a), k1, w8 = readBE32(chunk + 32)); - Round(b, c, d, e, a, f1(c, d, e), k1, w9 = readBE32(chunk + 36)); - Round(a, b, c, d, e, f1(b, c, d), k1, w10 = readBE32(chunk + 40)); - Round(e, a, b, c, d, f1(a, b, c), k1, w11 = readBE32(chunk + 44)); - Round(d, e, a, b, c, f1(e, a, b), k1, w12 = readBE32(chunk + 48)); - Round(c, d, e, a, b, f1(d, e, a), k1, w13 = readBE32(chunk + 52)); - Round(b, c, d, e, a, f1(c, d, e), k1, w14 = readBE32(chunk + 56)); - Round(a, b, c, d, e, f1(b, c, d), k1, w15 = readBE32(chunk + 60)); - - Round(e, a, b, c, d, f1(a, b, c), k1, w0 = left(w0 ^ w13 ^ w8 ^ w2)); - Round(d, e, a, b, c, f1(e, a, b), k1, w1 = left(w1 ^ w14 ^ w9 ^ w3)); - Round(c, d, e, a, b, f1(d, e, a), k1, w2 = left(w2 ^ w15 ^ w10 ^ w4)); - Round(b, c, d, e, a, f1(c, d, e), k1, w3 = left(w3 ^ w0 ^ w11 ^ w5)); - Round(a, b, c, d, e, f2(b, c, d), k2, w4 = left(w4 ^ w1 ^ w12 ^ w6)); - Round(e, a, b, c, d, f2(a, b, c), k2, w5 = left(w5 ^ w2 ^ w13 ^ w7)); - Round(d, e, a, b, c, f2(e, a, b), k2, w6 = left(w6 ^ w3 ^ w14 ^ w8)); - Round(c, d, e, a, b, f2(d, e, a), k2, w7 = left(w7 ^ w4 ^ w15 ^ w9)); - Round(b, c, d, e, a, f2(c, d, e), k2, w8 = left(w8 ^ w5 ^ w0 ^ w10)); - Round(a, b, c, d, e, f2(b, c, d), k2, w9 = left(w9 ^ w6 ^ w1 ^ w11)); - Round(e, a, b, c, d, f2(a, b, c), k2, w10 = left(w10 ^ w7 ^ w2 ^ w12)); - Round(d, e, a, b, c, f2(e, a, b), k2, w11 = left(w11 ^ w8 ^ w3 ^ w13)); - Round(c, d, e, a, b, f2(d, e, a), k2, w12 = left(w12 ^ w9 ^ w4 ^ w14)); - Round(b, c, d, e, a, f2(c, d, e), k2, w13 = left(w13 ^ w10 ^ w5 ^ w15)); - Round(a, b, c, d, e, f2(b, c, d), k2, w14 = left(w14 ^ w11 ^ w6 ^ w0)); - Round(e, a, b, c, d, f2(a, b, c), k2, w15 = left(w15 ^ w12 ^ w7 ^ w1)); - - Round(d, e, a, b, c, f2(e, a, b), k2, w0 = left(w0 ^ w13 ^ w8 ^ w2)); - Round(c, d, e, a, b, f2(d, e, a), k2, w1 = left(w1 ^ w14 ^ w9 ^ w3)); - Round(b, c, d, e, a, f2(c, d, e), k2, w2 = left(w2 ^ w15 ^ w10 ^ w4)); - Round(a, b, c, d, e, f2(b, c, d), k2, w3 = left(w3 ^ w0 ^ w11 ^ w5)); - Round(e, a, b, c, d, f2(a, b, c), k2, w4 = left(w4 ^ w1 ^ w12 ^ w6)); - Round(d, e, a, b, c, f2(e, a, b), k2, w5 = left(w5 ^ w2 ^ w13 ^ w7)); - Round(c, d, e, a, b, f2(d, e, a), k2, w6 = left(w6 ^ w3 ^ w14 ^ w8)); - Round(b, c, d, e, a, f2(c, d, e), k2, w7 = left(w7 ^ w4 ^ w15 ^ w9)); - Round(a, b, c, d, e, f3(b, c, d), k3, w8 = left(w8 ^ w5 ^ w0 ^ w10)); - Round(e, a, b, c, d, f3(a, b, c), k3, w9 = left(w9 ^ w6 ^ w1 ^ w11)); - Round(d, e, a, b, c, f3(e, a, b), k3, w10 = left(w10 ^ w7 ^ w2 ^ w12)); - Round(c, d, e, a, b, f3(d, e, a), k3, w11 = left(w11 ^ w8 ^ w3 ^ w13)); - Round(b, c, d, e, a, f3(c, d, e), k3, w12 = left(w12 ^ w9 ^ w4 ^ w14)); - Round(a, b, c, d, e, f3(b, c, d), k3, w13 = left(w13 ^ w10 ^ w5 ^ w15)); - Round(e, a, b, c, d, f3(a, b, c), k3, w14 = left(w14 ^ w11 ^ w6 ^ w0)); - Round(d, e, a, b, c, f3(e, a, b), k3, w15 = left(w15 ^ w12 ^ w7 ^ w1)); - - Round(c, d, e, a, b, f3(d, e, a), k3, w0 = left(w0 ^ w13 ^ w8 ^ w2)); - Round(b, c, d, e, a, f3(c, d, e), k3, w1 = left(w1 ^ w14 ^ w9 ^ w3)); - Round(a, b, c, d, e, f3(b, c, d), k3, w2 = left(w2 ^ w15 ^ w10 ^ w4)); - Round(e, a, b, c, d, f3(a, b, c), k3, w3 = left(w3 ^ w0 ^ w11 ^ w5)); - Round(d, e, a, b, c, f3(e, a, b), k3, w4 = left(w4 ^ w1 ^ w12 ^ w6)); - Round(c, d, e, a, b, f3(d, e, a), k3, w5 = left(w5 ^ w2 ^ w13 ^ w7)); - Round(b, c, d, e, a, f3(c, d, e), k3, w6 = left(w6 ^ w3 ^ w14 ^ w8)); - Round(a, b, c, d, e, f3(b, c, d), k3, w7 = left(w7 ^ w4 ^ w15 ^ w9)); - Round(e, a, b, c, d, f3(a, b, c), k3, w8 = left(w8 ^ w5 ^ w0 ^ w10)); - Round(d, e, a, b, c, f3(e, a, b), k3, w9 = left(w9 ^ w6 ^ w1 ^ w11)); - Round(c, d, e, a, b, f3(d, e, a), k3, w10 = left(w10 ^ w7 ^ w2 ^ w12)); - Round(b, c, d, e, a, f3(c, d, e), k3, w11 = left(w11 ^ w8 ^ w3 ^ w13)); - Round(a, b, c, d, e, f2(b, c, d), k4, w12 = left(w12 ^ w9 ^ w4 ^ w14)); - Round(e, a, b, c, d, f2(a, b, c), k4, w13 = left(w13 ^ w10 ^ w5 ^ w15)); - Round(d, e, a, b, c, f2(e, a, b), k4, w14 = left(w14 ^ w11 ^ w6 ^ w0)); - Round(c, d, e, a, b, f2(d, e, a), k4, w15 = left(w15 ^ w12 ^ w7 ^ w1)); - - Round(b, c, d, e, a, f2(c, d, e), k4, w0 = left(w0 ^ w13 ^ w8 ^ w2)); - Round(a, b, c, d, e, f2(b, c, d), k4, w1 = left(w1 ^ w14 ^ w9 ^ w3)); - Round(e, a, b, c, d, f2(a, b, c), k4, w2 = left(w2 ^ w15 ^ w10 ^ w4)); - Round(d, e, a, b, c, f2(e, a, b), k4, w3 = left(w3 ^ w0 ^ w11 ^ w5)); - Round(c, d, e, a, b, f2(d, e, a), k4, w4 = left(w4 ^ w1 ^ w12 ^ w6)); - Round(b, c, d, e, a, f2(c, d, e), k4, w5 = left(w5 ^ w2 ^ w13 ^ w7)); - Round(a, b, c, d, e, f2(b, c, d), k4, w6 = left(w6 ^ w3 ^ w14 ^ w8)); - Round(e, a, b, c, d, f2(a, b, c), k4, w7 = left(w7 ^ w4 ^ w15 ^ w9)); - Round(d, e, a, b, c, f2(e, a, b), k4, w8 = left(w8 ^ w5 ^ w0 ^ w10)); - Round(c, d, e, a, b, f2(d, e, a), k4, w9 = left(w9 ^ w6 ^ w1 ^ w11)); - Round(b, c, d, e, a, f2(c, d, e), k4, w10 = left(w10 ^ w7 ^ w2 ^ w12)); - Round(a, b, c, d, e, f2(b, c, d), k4, w11 = left(w11 ^ w8 ^ w3 ^ w13)); - Round(e, a, b, c, d, f2(a, b, c), k4, w12 = left(w12 ^ w9 ^ w4 ^ w14)); - Round(d, e, a, b, c, f2(e, a, b), k4, left(w13 ^ w10 ^ w5 ^ w15)); - Round(c, d, e, a, b, f2(d, e, a), k4, left(w14 ^ w11 ^ w6 ^ w0)); - Round(b, c, d, e, a, f2(c, d, e), k4, left(w15 ^ w12 ^ w7 ^ w1)); - - s[0] += a; - s[1] += b; - s[2] += c; - s[3] += d; - s[4] += e; - } - - uint32_t static inline readBE32(const unsigned char *ptr) { - return __builtin_bswap32(*(uint32_t *)ptr); - } - - void static inline writeBE32(unsigned char *ptr, uint32_t x) { - *(uint32_t *)ptr = __builtin_bswap32(x); - } - - void static inline writeBE64(unsigned char *ptr, uint64_t x) { - *(uint64_t *)ptr = __builtin_bswap64(x); - } -}; -#endif diff --git a/ESP_Code4.3/ESP_Code/Dashboard.h b/ESP_Code4.3/ESP_Code/Dashboard.h deleted file mode 100644 index 30c88924..00000000 --- a/ESP_Code4.3/ESP_Code/Dashboard.h +++ /dev/null @@ -1,151 +0,0 @@ -#ifndef DASHBOARD_H -#define DASHBOARD_H - -const char WEBSITE[] PROGMEM = R"=====( - - - - - - - Duino-Coin @@DEVICE@@ dashboard - - - - - -
-
-

- - @@DEVICE@@ (@@ID@@) -

-

- Self-hosted, lightweight, official dashboard for your Duino-Coin miner -

-
-
-
-
-
-
-

- Mining statistics -

-
-
-
- @@HASHRATE@@ kH/s -
-
- Hashrate -
-
-
-
- @@DIFF@@ -
-
- Difficulty -
-
-
-
- @@SHARES@@ -
-
- Shares -
-
-
-
- @@NODE@@ -
-
- Node -
-
-
-
-
-
-
-

- Device information -

-
-
-
- @@DEVICE@@ -
-
- Device type -
-
-
-
- @@ID@@ -
-
- Device ID -
-
-
-
- @@MEMORY@@ -
-
- Free memory -
-
-
-
- @@VERSION@@ -
-
- Miner version -
-
-
-
- @@SENSOR@@ -
-
- Sensor reading(s) -
-
-
-
-
-
-
-
- -
-
-
- - -)====="; - -#endif diff --git a/ESP_Code4.3/ESP_Code/DisplayHal.h b/ESP_Code4.3/ESP_Code/DisplayHal.h deleted file mode 100644 index 57e05f76..00000000 --- a/ESP_Code4.3/ESP_Code/DisplayHal.h +++ /dev/null @@ -1,492 +0,0 @@ -// Abstraction layer for handling various types of screens -// See Settings.h for enabling the screen of your choice -#ifndef DISPLAY_HAL_H -#define DISPLAY_HAL_H - -// Abstraction layer: custom fonts, images, etc. -#if defined(DISPLAY_SSD1306) - static const unsigned char image_check_contour_bits[] U8X8_PROGMEM = {0x00,0x04,0x00,0x0a,0x04,0x11,0x8a,0x08,0x51,0x04,0x22,0x02,0x04,0x01,0x88,0x00,0x50,0x00,0x20,0x00}; - static const unsigned char image_network_1_bar_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x50,0x00,0x50,0x00,0x50,0x00,0x57,0x00,0x55,0x00,0x55,0x00,0x55,0x70,0x55,0x50,0x55,0x50,0x55,0x50,0x55,0x57,0x55,0x57,0x55,0x77,0x77,0x00,0x00}; - static const unsigned char image_network_2_bars_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x50,0x00,0x50,0x00,0x50,0x00,0x57,0x00,0x55,0x00,0x55,0x00,0x55,0x70,0x55,0x70,0x55,0x70,0x55,0x70,0x55,0x77,0x55,0x77,0x55,0x77,0x77,0x00,0x00}; - static const unsigned char image_network_3_bars_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x50,0x00,0x50,0x00,0x50,0x00,0x57,0x00,0x57,0x00,0x57,0x00,0x57,0x70,0x57,0x70,0x57,0x70,0x57,0x70,0x57,0x77,0x57,0x77,0x57,0x77,0x77,0x00,0x00}; - static const unsigned char image_network_4_bars_bits[] U8X8_PROGMEM = {0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x77,0x00,0x77,0x00,0x77,0x00,0x77,0x70,0x77,0x70,0x77,0x70,0x77,0x70,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x00,0x00}; - static const unsigned char image_duco_logo_bits[] U8X8_PROGMEM = {0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0xff,0x00,0xc0,0x01,0x9f,0x01,0x20,0x01,0x20,0x01,0x20,0x01,0x9f,0x01,0xc0,0x01,0xff,0x00,0x7f,0x00}; - static const unsigned char image_duco_logo_big_bits[] U8X8_PROGMEM = {0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x01,0x00,0x00,0xfc,0xff,0xff,0x0f,0x00,0x00,0xfc,0xff,0xff,0x3f,0x00,0x00,0xfc,0xff,0xff,0x7f,0x00,0x00,0xfc,0xff,0xff,0xff,0x00,0x00,0xfc,0xff,0xff,0xff,0x01,0x00,0xfc,0xff,0xff,0xff,0x03,0x00,0xf8,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xfe,0x0f,0x00,0xfc,0xff,0x03,0xf8,0x0f,0x00,0xfc,0xff,0x0f,0xf0,0x1f,0x00,0xfc,0xff,0x1f,0xe0,0x1f,0x00,0xfc,0xff,0x3f,0xe0,0x3f,0x00,0xfc,0xff,0x7f,0xc0,0x3f,0x00,0xfc,0xff,0xff,0xc0,0x7f,0x00,0xf8,0xff,0xff,0x80,0x7f,0x00,0x00,0x00,0xfe,0x80,0x7f,0x00,0x00,0x00,0xfc,0x81,0x7f,0x00,0x00,0x00,0xfc,0x01,0x7f,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x01,0xff,0x00,0x00,0x00,0xfc,0x81,0x7f,0x00,0x00,0x00,0xfe,0x81,0x7f,0x00,0x00,0x80,0xff,0x80,0x7f,0x00,0xfc,0xff,0xff,0xc0,0x7f,0x00,0xfc,0xff,0xff,0xc0,0x7f,0x00,0xfc,0xff,0x7f,0xe0,0x3f,0x00,0xfc,0xff,0x3f,0xf0,0x3f,0x00,0xfc,0xff,0x1f,0xf8,0x1f,0x00,0xfc,0xff,0x0f,0xfc,0x1f,0x00,0xf8,0xff,0x01,0xfe,0x0f,0x00,0x00,0x00,0xc0,0xff,0x0f,0x00,0xfc,0xff,0xff,0xff,0x07,0x00,0xfc,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0x01,0x00,0xfc,0xff,0xff,0xff,0x00,0x00,0xfc,0xff,0xff,0x7f,0x00,0x00,0xfc,0xff,0xff,0x1f,0x00,0x00,0xfc,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; -#endif - -#if defined(DISPLAY_114) - static const unsigned char PROGMEM image_duco_logo_bits[] = {0xff,0xf8,0x00,0xff,0xfe,0x00,0xff,0xff,0x80,0x00,0x07,0xc0,0x00,0x03,0xe0,0x00,0x01,0xf0,0xff,0xf1,0xf0,0x00,0x18,0xf8,0x00,0x0c,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x04,0x78,0x00,0x0c,0x78,0x00,0x18,0xf0,0xff,0xf0,0xf0,0x00,0x01,0xe0,0x00,0x01,0xc0,0x00,0x07,0xc0,0xff,0xff,0x80,0xff,0xff,0x00,0xff,0xf8,0x00}; - static const unsigned char PROGMEM image_check_contour_bits[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x50,0x20,0x88,0x51,0x10,0x8a,0x20,0x44,0x40,0x20,0x80,0x11,0x00,0x0a,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; - static const unsigned char PROGMEM image_wifi_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x46,0x0c,0x40,0x88,0x02,0x20,0x10,0xe1,0x00,0x23,0x18,0x80,0x04,0x04,0x00,0x08,0x42,0x00,0x01,0xb0,0x00,0x02,0x08,0x00,0x00,0x40,0x00,0x00,0xa0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; - static const unsigned char PROGMEM image_wifi_2_bars_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x46,0x0c,0x40,0x88,0x02,0x20,0x10,0xe1,0x00,0x23,0x18,0x80,0x04,0x04,0x00,0x08,0x42,0x00,0x01,0xf0,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; - static const unsigned char PROGMEM image_wifi_3_bars_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x46,0x0c,0x40,0x88,0x02,0x20,0x10,0xe1,0x00,0x23,0xf8,0x80,0x07,0x1c,0x00,0x0c,0x46,0x00,0x05,0xf4,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; - static const unsigned char PROGMEM image_wifi_4_bars_bits[] = {0x01,0xf0,0x00,0x06,0x0c,0x00,0x18,0x03,0x00,0x21,0xf0,0x80,0x47,0xbc,0x40,0x8e,0x0e,0x20,0x18,0xe3,0x00,0x33,0xf9,0x80,0x17,0x1d,0x00,0x0c,0x46,0x00,0x05,0xf4,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; - static const unsigned char PROGMEM image_wifi_5_bars_bits[] = {0x01,0xf0,0x00,0x07,0xbc,0x00,0x1e,0x0f,0x00,0x31,0xf1,0x80,0x77,0xbd,0xc0,0xce,0x0e,0x60,0x58,0xe3,0x40,0x33,0xf9,0x80,0x17,0x1d,0x00,0x0c,0x46,0x00,0x05,0xf4,0x00,0x03,0xb8,0x00,0x01,0x50,0x00,0x00,0xe0,0x00,0x00,0x40,0x00,0x00,0x00,0x00}; - static const unsigned char PROGMEM image_paint_0_bits[] = {0x7f,0xff,0xff,0xf0,0x00,0x00,0x7f,0xff,0xff,0xfc,0x00,0x00,0x7f,0xff,0xff,0xff,0x00,0x00,0x7f,0xff,0xff,0xff,0x80,0x00,0x7f,0xff,0xff,0xff,0xe0,0x00,0x7f,0xff,0xff,0xff,0xf0,0x00,0x7f,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x07,0xfc,0x00,0x00,0x00,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x01,0xfe,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x7f,0xff,0xff,0xc0,0x7f,0x00,0x7f,0xff,0xff,0xf0,0x3f,0x80,0x00,0x00,0x00,0x38,0x3f,0x80,0x00,0x00,0x00,0x1c,0x1f,0x80,0x00,0x00,0x00,0x0e,0x1f,0x80,0x00,0x00,0x00,0x07,0x1f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x03,0x0f,0x80,0x00,0x00,0x00,0x07,0x0f,0x80,0x00,0x00,0x00,0x0e,0x1f,0x80,0x00,0x00,0x00,0x1c,0x1f,0x80,0x00,0x00,0x00,0x38,0x3f,0x80,0xff,0xff,0xff,0xf0,0x7f,0x80,0xff,0xff,0xff,0xc0,0x7f,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x0f,0xfe,0x00,0x00,0x00,0x00,0x3f,0xfc,0x00,0xff,0xff,0xff,0xff,0xf8,0x00,0xff,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xff,0xff,0xe0,0x00,0xff,0xff,0xff,0xff,0x80,0x00,0xff,0xff,0xff,0xfe,0x00,0x00,0xff,0xff,0xff,0xf0,0x00,0x00,0xff,0xff,0xff,0xc0,0x00,0x00}; -#endif - -#if defined(DISPLAY_16X2) - static byte duco_logo[] = {0x1E, 0x01, 0x1D, 0x05, 0x1D, 0x01, 0x1E, 0x00}; - static byte check_mark[] = {0x00, 0x00, 0x00, 0x01, 0x02,0x14, 0x08, 0x00}; - static byte kh[] = {0x08, 0x0A, 0x0C, 0x0A, 0x00, 0x0A, 0x0E, 0x0A}; - static byte msec[] = {0x0A, 0x15, 0x11, 0x06, 0x08, 0x04, 0x02, 0x0C}; -#endif - - #if defined(DISPLAY_SSD1306) - void drawStrMultiline(const char *msg, int xloc, int yloc) { - //https://github.com/olikraus/u8g2/discussions/1479 - int dspwidth = u8g2.getDisplayWidth(); - int strwidth = 0; - char glyph[2]; glyph[1] = 0; - - for (const char *ptr = msg, *lastblank = NULL; *ptr; ++ptr) { - while (xloc == 0 && *msg == ' ') - if (ptr == msg++) ++ptr; - - glyph[0] = *ptr; - strwidth += u8g2.getStrWidth(glyph); - if (*ptr == ' ') lastblank = ptr; - else ++strwidth; - - if (xloc + strwidth > dspwidth) { - int starting_xloc = xloc; - while (msg < (lastblank ? lastblank : ptr)) { - glyph[0] = *msg++; - xloc += u8g2.drawStr(xloc, yloc, glyph); - } - - strwidth -= xloc - starting_xloc; - yloc += u8g2.getMaxCharHeight(); - xloc = 0; lastblank = NULL; - } - } - while (*msg) { - glyph[0] = *msg++; - xloc += u8g2.drawStr(xloc, yloc, glyph); - } - } -#endif - -#if defined(DISPLAY_114) - void drawStrMultiline(const char *msg, int xloc, int yloc) { - //https://github.com/olikraus/u8g2/discussions/1479 - int dspwidth = 240; - int strwidth = 0; - char glyph[2]; glyph[1] = 0; - - for (const char *ptr = msg, *lastblank = NULL; *ptr; ++ptr) { - while (xloc == 0 && *msg == ' ') - if (ptr == msg++) ++ptr; - - glyph[0] = *ptr; - strwidth = 10; - if (*ptr == ' ') lastblank = ptr; - else ++strwidth; - - if (xloc + strwidth > dspwidth) { - int starting_xloc = xloc; - while (msg < (lastblank ? lastblank : ptr)) { - glyph[0] = *msg++; - xloc += tft.drawString(glyph,xloc, yloc ); - } - - strwidth -= xloc - starting_xloc; - yloc += 10; - xloc = 0; lastblank = NULL; - } - } - while (*msg) { - glyph[0] = *msg++; - xloc += tft.drawString(glyph,xloc, yloc ); - } - } -#endif - -#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) - void screen_setup() { - // Ran during setup() - // Abstraction layer: screen initialization - - #if defined(DISPLAY_SSD1306) - u8g2.begin(); - u8g2.clearBuffer(); - u8g2.setFontMode(1); - u8g2.setBitmapMode(1); - u8g2.sendBuffer(); - #endif - - #if defined(DISPLAY_16X2) - lcd.begin(16, 2); - lcd.createChar(0, duco_logo); - lcd.createChar(1, check_mark); - lcd.createChar(2, kh); - lcd.createChar(3, msec); - lcd.home(); - lcd.clear(); - #endif - - #if defined(DISPLAY_114) - tft.init(); - tft.begin(); - tft.setRotation(1); - tft.fillScreen(TFT_BLACK); - - #endif - } - - - void display_boot() { - // Abstraction layer: compilation time, features, etc. - - #if defined(DISPLAY_16X2) - lcd.clear(); - #if defined(ESP8266) - lcd.print("ESP8266 "); - #elif defined(CONFIG_FREERTOS_UNICORE) - lcd.print("ESP32S2 "); - #else - lcd.print("ESP32 "); - #endif - #if defined(ESP8266) - lcd.print(String(ESP.getCpuFreqMHz()).c_str()); - #else - lcd.print(String(getCpuFrequencyMhz()).c_str()); - #endif - lcd.print(" MHz"); - - lcd.setCursor(0, 1); - lcd.print(__DATE__); - #endif - - #if defined(DISPLAY_SSD1306) - u8g2.clearBuffer(); - - u8g2.setFont(u8g2_font_profont15_tr); - u8g2.setCursor(2, 13); - #if defined(ESP8266) - u8g2.print("ESP8266 "); - #elif defined(CONFIG_FREERTOS_UNICORE) - u8g2.print("ESP32S2/C3 "); - #else - u8g2.print("ESP32 "); - #endif - - #if defined(ESP8266) - u8g2.print(String(ESP.getCpuFreqMHz()).c_str()); - #else - u8g2.print(String(getCpuFrequencyMhz()).c_str()); - #endif - u8g2.print(" MHz"); - - u8g2.setFont(u8g2_font_profont10_tr); - u8g2.drawLine(1, 27, 126, 27); - u8g2.setCursor(2, 24); - u8g2.print("Compiled "); - u8g2.print(__DATE__); - - - u8g2.drawStr(2, 37, "Features:"); - u8g2.setCursor(2, 46); - String features_str = "OTA "; - #if defined(USE_LAN) - features_str += "LAN "; - #endif - #if defined(LED_BLINKING) - features_str += "Blink "; - #endif - #if defined(SERIAL_PRINTING) - features_str += "Serial "; - #endif - #if defined(WEB_DASHBOARD) - features_str += "Webserver "; - #endif - #if defined(DISPLAY_16X2) - features_str += "LCD16X2 "; - #endif - #if defined(DISPLAY_SSD1306) - features_str += "SSD1306 "; - #endif - #if defined(USE_INTERNAL_SENSOR) - features_str += "Int. sensor "; - #endif - #if defined(USE_DS18B20) - features_str += "DS18B20 "; - #endif - #if defined(USE_DHT) - features_str += "DHT "; - #endif - #if defined(USE_HSU07M) - features_str += "HSU07M "; - #endif - drawStrMultiline(features_str.c_str(), 2, 46); - u8g2.sendBuffer(); - #endif - - #if defined(DISPLAY_114) - tft.fillScreen(TFT_BLACK); - tft.setTextColor(TFT_WHITE,TFT_BLACK); - // tft.drawBitmap(0, 3, image_duco_logo_bits, 21, 24, 0xFC00); - tft.drawBitmap(0, 4, image_paint_0_bits, 41, 51, 0xFC00); - tft.setTextSize(2); - tft.setCursor(55, 15); - #if defined(ESP8266) - tft.print("ESP8266 "); - #elif defined(CONFIG_FREERTOS_UNICORE) - tft.print("ESP32S2/C3 "); - #else - tft.print("ESP32 "); - #endif - - #if defined(ESP8266) - tft.print(String(ESP.getCpuFreqMHz()).c_str()); - #else - tft.print(String(getCpuFrequencyMhz()).c_str()); - #endif - tft.print(" MHz"); - tft.setTextSize(1); - tft.setCursor(2, 70); - tft.print("Compiled "); - tft.print(__DATE__); - - delay(3000); - - tft.drawString("Features:",2, 85,1); - String features_str = "OTA "; - #if defined(USE_LAN) - features_str += "LAN "; - #endif - #if defined(LED_BLINKING) - features_str += "Blink "; - #endif - #if defined(SERIAL_PRINTING) - features_str += "Serial "; - #endif - #if defined(WEB_DASHBOARD) - features_str += "Webserver "; - #endif - #if defined(DISPLAY_16X2) - features_str += "LCD16X2 "; - #endif - #if defined(DISPLAY_SSD1306) - features_str += "SSD1306 "; - #endif - #if defined(DISPLAY_114) - features_str += "TT-GO "; - #endif - #if defined(USE_INTERNAL_SENSOR) - features_str += "Int. sensor "; - #endif - #if defined(USE_DS18B20) - features_str += "DS18B20 "; - #endif - #if defined(USE_DHT) - features_str += "DHT "; - #endif - #if defined(USE_HSU07M) - features_str += "HSU07M "; - #endif - drawStrMultiline(features_str.c_str(), 2, 102); - delay(3000); - #endif - } - - void display_info(String message) { - // Abstraction layer: info screens (setups) - - #if defined(DISPLAY_SSD1306) - u8g2.clearBuffer(); - u8g2.drawXBMP(-1, 3, 41, 45, image_duco_logo_big_bits); - u8g2.setFont(u8g2_font_t0_16b_tr); - #if defined(ESP8266) - u8g2.drawStr(42, 27, "ESP8266 "); - #elif defined(CONFIG_FREERTOS_UNICORE) - u8g2.drawStr(42, 27, "ESP32S2/C3 "); - #else - u8g2.drawStr(42, 27, "ESP32 "); - #endif - u8g2.setFont(u8g2_font_t0_13b_tr); - u8g2.drawStr(41, 14, "Duino-Coin"); - u8g2.setFont(u8g2_font_6x10_tr); - u8g2.drawStr(98, 36, "MINER"); - u8g2.setFont(u8g2_font_6x13_tr); - u8g2.drawStr(1, 60, message.c_str()); - u8g2.setFont(u8g2_font_5x8_tr); - u8g2.drawStr(42, 46, "www.duinocoin.com"); - u8g2.setFont(u8g2_font_4x6_tr); - u8g2.drawStr(116, 14, String(SOFTWARE_VERSION).c_str()); - u8g2.sendBuffer(); - #endif - - #if defined(DISPLAY_16X2) - lcd.clear(); - lcd.setCursor(0, 0); - lcd.write(0); - lcd.print(" Duino-Coin "); - lcd.print(SOFTWARE_VERSION); - lcd.setCursor(0, 1); - lcd.print(message); - #endif - - #if defined(DISPLAY_114) - tft.fillScreen(TFT_BLACK); - tft.setTextColor(0xFFFF); - tft.setTextSize(2); - #if defined(ESP8266) - tft.drawString("ESP8266",54,24); - #elif defined(CONFIG_FREERTOS_UNICORE) - tft.drawString("ESP32S2/C3",54,24); - #else - tft.drawString("ESP32",54,24); - #endif - tft.setTextColor(0x4E04); - tft.drawString(String(SOFTWARE_VERSION).c_str(),180, 27); - tft.setTextColor(0xFFFF); - tft.drawString("Duino-Coin",14,69 ); - tft.drawString("MINER",156,69 ); - tft.setTextSize(1); - tft.drawString(message.c_str(),3,110 ); - tft.drawString("www.duinocoin.com",120,95 ); - tft.drawBitmap(0, 4, image_paint_0_bits, 41, 51, 0xFC00); - tft.drawString("Rev", 189, 8); - delay(3000); - #endif - } - - - void display_mining_results(String hashrate, String accepted_shares, String total_shares, String uptime, String node, - String difficulty, String sharerate, String ping, String accept_rate) { - // Ran after each found share - // Abstraction layer: displaying mining results - Serial.println("Displaying mining results"); - - #if defined(DISPLAY_SSD1306) - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_profont10_tr); - u8g2.drawStr(67, 26, "kH"); - if (hashrate.toFloat() < 100.0) { - u8g2.setFont(u8g2_font_profont29_tr); - u8g2.drawStr(2, 36, hashrate.c_str()); - } else { - u8g2.setFont(u8g2_font_profont22_tr); - u8g2.drawStr(3, 35, hashrate.c_str()); - } - - u8g2.setFont(u8g2_font_haxrcorp4089_tr); - u8g2.drawStr(52, 12, node.c_str()); - - u8g2.setFont(u8g2_font_t0_11_tr); - u8g2.drawStr(17, 47, (accepted_shares + "/" + total_shares).c_str()); - u8g2.setFont(u8g2_font_5x7_tr); - u8g2.drawStr(88, 47, ("(" + accept_rate + "%)").c_str()); - - u8g2.setFont(u8g2_font_profont12_tr); - u8g2.drawStr(20, 12, (ping + "ms").c_str()); - u8g2.drawStr(69, 36, "s"); - - u8g2.setFont(u8g2_font_6x13_tr); - u8g2.drawStr(125-u8g2.getStrWidth(uptime.c_str()), 61, uptime.c_str()); - - u8g2.drawStr(85, 38, sharerate.c_str()); - u8g2.drawStr(85, 27, difficulty.c_str()); - u8g2.drawLine(67, 28, 75, 28); - - u8g2.drawXBMP(2, 38, 13, 10, image_check_contour_bits); - - if (WiFi.RSSI() > -40) { - u8g2.drawXBMP(1, 0, 15, 16, image_network_4_bars_bits); - } else if (WiFi.RSSI() > -60) { - u8g2.drawXBMP(1, 0, 15, 16, image_network_3_bars_bits); - } else if (WiFi.RSSI() > -75) { - u8g2.drawXBMP(1, 0, 15, 16, image_network_2_bars_bits); - } else { - u8g2.drawXBMP(1, 0, 15, 16, image_network_1_bar_bits); - } - - u8g2.setFont(u8g2_font_4x6_tr); - u8g2.drawStr(14, 61, String(WiFi.localIP().toString()).c_str()); - u8g2.drawStr(14, 55, ("Duino-Coin " + String(SOFTWARE_VERSION)).c_str()); - u8g2.drawXBMP(2, 11, 9, 50, image_duco_logo_bits); - u8g2.drawStr(111, 27, "diff"); - u8g2.drawStr(107, 38, "shr/s"); - - u8g2.sendBuffer(); - #endif - - #if defined(DISPLAY_16X2) - lcd.clear(); - lcd.setCursor(0,0); - lcd.print(hashrate); - lcd.setCursor(4,0); - lcd.write(2); // kh - - lcd.setCursor(7, 0); - lcd.print(difficulty); - lcd.print(" diff"); - - lcd.setCursor(0, 1); - lcd.write(1); // checkmark - lcd.print(accepted_shares); - - lcd.setCursor(7, 1); - lcd.print(ping); - lcd.write(3); // ms - - lcd.setCursor(12, 1); - lcd.print(sharerate); - lcd.print("s"); - #endif - - #if defined(DISPLAY_114) - tft.fillScreen(TFT_BLACK); - tft.setTextSize(1); - tft.setTextColor(TFT_WHITE,TFT_BLACK); - tft.drawString("kH/s", 128, 45,2); - if (hashrate.toFloat() < 100.0) { - tft.setTextColor(TFT_ORANGE,TFT_BLACK); - tft.drawString(hashrate.c_str(), 1, 27,6 ); - } else { - tft.setTextColor(TFT_ORANGE,TFT_BLACK); - tft.drawString(hashrate.c_str(), 1, 27,6 ); - } - - tft.setTextColor(0x2FF2); - tft.drawString(node.c_str(),100,3,2 ); - tft.drawLine(0, 21, 240, 21, 0xFFE0); - - tft.setTextColor(0xFFFF); - tft.drawString((accepted_shares + "/" + total_shares).c_str(),21,80,2 ); - tft.drawString(("(" + accept_rate + "%)").c_str(),169, 84,1 ); - tft.drawLine(0, 70, 240, 70, 0xFFE0); - tft.drawString("Uptime", 162, 107,1); - tft.drawString((ping + "ms").c_str(),31, 3,2 ); - - tft.drawString(uptime.c_str(),150, 118,2 ); - tft.drawString(sharerate.c_str(),208, 45,2 ); - tft.drawString(difficulty.c_str(),204, 28,2 ); - - tft.drawBitmap(4, 79, image_check_contour_bits, 13, 16, 0x7E8); - tft.drawLine(0, 100, 240, 100, 0xFFE0); - if (WiFi.RSSI() > -40) { - tft.drawBitmap(3, 3, image_wifi_5_bars_bits, 19, 16, 0xFFFF); - } else if (WiFi.RSSI() > -60) { - tft.drawBitmap(3, 3, image_wifi_4_bars_bits, 19, 16, 0xFFFF); - } else if (WiFi.RSSI() > -75) { - tft.drawBitmap(3, 3, image_wifi_2_bars_bits, 19, 16, 0xFFFF); - } else { - tft.drawBitmap(3, 3, image_wifi_bits, 19, 16, 0xFFFF); - } - - tft.drawBitmap(1, 108, image_duco_logo_bits, 21, 24, 0xFC00); - tft.drawString(String(WiFi.localIP().toString()).c_str(),28, 122,1); - tft.drawString("Duinocoin", 28, 109,1); - tft.drawString(String(SOFTWARE_VERSION).c_str(),87,109,1 ); - - tft.drawString("diff", 173, 28,2); - tft.drawString("sh/s", 165, 45,2); - - - #endif - } -#endif - -#endif diff --git a/ESP_Code4.3/ESP_Code/ESP_Code.ino b/ESP_Code4.3/ESP_Code/ESP_Code.ino deleted file mode 100644 index 1d178f54..00000000 --- a/ESP_Code4.3/ESP_Code/ESP_Code.ino +++ /dev/null @@ -1,817 +0,0 @@ -/* - ____ __ __ ____ _ _ _____ ___ _____ ____ _ _ - ( _ \( )( )(_ _)( \( )( _ )___ / __)( _ )(_ _)( \( ) - )(_) ))(__)( _)(_ ) ( )(_)((___)( (__ )(_)( _)(_ ) ( - (____/(______)(____)(_)\_)(_____) \___)(_____)(____)(_)\_) - Official code for all ESP8266/32 boards version 4.3 - Main .ino file - - The Duino-Coin Team & Community 2019-2024 © MIT Licensed - https://duinocoin.com - https://github.com/revoxhere/duino-coin - - If you don't know where to start, visit official website and navigate to - the Getting Started page. Have fun mining! - - To edit the variables (username, WiFi settings, etc.) use the Settings.h tab! -*/ - -/* If optimizations cause problems, change them to -O0 (the default) */ -#pragma GCC optimize("-Ofast") - -/* If during compilation the line below causes a - "fatal error: arduinoJson.h: No such file or directory" - message to occur; it means that you do NOT have the - ArduinoJSON library installed. To install it, - go to the below link and follow the instructions: - https://github.com/revoxhere/duino-coin/issues/832 */ -#include - -#if defined(ESP8266) - #include - #include - #include - #include -#else - #include - #include - #include - #include - #include -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include "MiningJob.h" -#include "Settings.h" - -#ifdef USE_LAN - #include -#endif - -#if defined(WEB_DASHBOARD) - #include "Dashboard.h" -#endif - -#if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) - #include "DisplayHal.h" -#endif - -#if !defined(ESP8266) && defined(DISABLE_BROWNOUT) - #include "soc/soc.h" - #include "soc/rtc_cntl_reg.h" -#endif - -// Auto adjust physical core count -// (ESP32-S2/C3 have 1 core, ESP32 has 2 cores, ESP8266 has 1 core) -#if defined(ESP8266) - #define CORE 1 - typedef ESP8266WebServer WebServer; -#elif defined(CONFIG_FREERTOS_UNICORE) - #define CORE 1 -#else - #define CORE 2 - // Install TridentTD_EasyFreeRTOS32 if you get an error - #include - - void Task1Code( void * parameter ); - void Task2Code( void * parameter ); - TaskHandle_t Task1; - TaskHandle_t Task2; -#endif - -#if defined(WEB_DASHBOARD) - WebServer server(80); -#endif - -#if defined(CAPTIVE_PORTAL) - #include // This needs to be first, or it all crashes and burns... - #include - #include - char duco_username[40]; - char duco_password[40]; - char duco_rigid[24]; - WiFiManager wifiManager; - Preferences preferences; - WiFiManagerParameter custom_duco_username("duco_usr", "Duino-Coin username", duco_username, 40); - WiFiManagerParameter custom_duco_password("duco_pwd", "Duino-Coin mining key (if enabled in the wallet)", duco_password, 40); - WiFiManagerParameter custom_duco_rigid("duco_rig", "Custom miner identifier (optional)", duco_rigid, 24); - - void saveConfigCallback() { - preferences.begin("duino_config", false); - preferences.putString("duco_username", custom_duco_username.getValue()); - preferences.putString("duco_password", custom_duco_password.getValue()); - preferences.putString("duco_rigid", custom_duco_rigid.getValue()); - preferences.end(); - RestartESP("Settings saved"); - } - - void reset_settings() { - server.send(200, "text/html", "Settings have been erased. Please redo the configuration by connecting to the WiFi network that will be created"); - delay(500); - wifiManager.resetSettings(); - RestartESP("Manual settings reset"); - } - - void saveParamCallback(){ - Serial.println("[CALLBACK] saveParamCallback fired"); - Serial.println("PARAM customfieldid = " + getParam("customfieldid")); - } - - String getParam(String name){ - //read parameter from server, for customhmtl input - String value; - if(wifiManager.server->hasArg(name)) { - value = wifiManager.server->arg(name); - } - return value; - } -#endif - -void RestartESP(String msg) { - #if defined(SERIAL_PRINTING) - Serial.println(msg); - Serial.println("Restarting ESP..."); - #endif - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) - display_info("Restarting ESP..."); - #endif - - #if defined(ESP8266) - ESP.reset(); - #else - ESP.restart(); - abort(); - #endif -} - -#if defined(BLUSHYBOX) - Ticker blinker; - bool lastLedState = false; - void changeState() { - analogWrite(LED_BUILTIN, lastLedState ? 255 : 0); - lastLedState = !lastLedState; - } -#endif - -#if defined(ESP8266) - // WDT Loop - // See lwdtcb() and lwdtFeed() below - Ticker lwdTimer; - - unsigned long lwdCurrentMillis = 0; - unsigned long lwdTimeOutMillis = LWD_TIMEOUT; - - void ICACHE_RAM_ATTR lwdtcb(void) { - if ((millis() - lwdCurrentMillis > LWD_TIMEOUT) || (lwdTimeOutMillis - lwdCurrentMillis != LWD_TIMEOUT)) - RestartESP("Loop WDT Failed!"); - } - - void lwdtFeed(void) { - lwdCurrentMillis = millis(); - lwdTimeOutMillis = lwdCurrentMillis + LWD_TIMEOUT; - } -#else - void lwdtFeed(void) { - Serial.println("lwdtFeed()"); - } -#endif - -namespace { - MiningConfig *configuration = new MiningConfig( - DUCO_USER, - RIG_IDENTIFIER, - MINER_KEY - ); - - #if defined(ESP32) && CORE == 2 - EasyMutex mutexClientData, mutexConnectToServer; - #endif - - #ifdef USE_LAN - static bool eth_connected = false; - #endif - - void UpdateHostPort(String input) { - // Thanks @ricaun for the code - DynamicJsonDocument doc(256); - deserializeJson(doc, input); - const char *name = doc["name"]; - - configuration->host = doc["ip"].as().c_str(); - configuration->port = doc["port"].as(); - node_id = String(name); - - #if defined(SERIAL_PRINTING) - Serial.println("Poolpicker selected the best mining node: " + node_id); - #endif - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) - display_info(node_id); - #endif - } - - void VerifyWifi() { - #ifdef USE_LAN - while ((!eth_connected) || (ETH.localIP() == IPAddress(0, 0, 0, 0))) { - #if defined(SERIAL_PRINTING) - Serial.println("Ethernet connection lost. Reconnect..." ); - #endif - SetupWifi(); - } - #else - while (WiFi.status() != WL_CONNECTED - || WiFi.localIP() == IPAddress(0, 0, 0, 0) - || WiFi.localIP() == IPAddress(192, 168, 4, 2) - || WiFi.localIP() == IPAddress(192, 168, 4, 3)) { - #if defined(SERIAL_PRINTING) - Serial.println("WiFi reconnecting..."); - #endif - WiFi.disconnect(); - delay(500); - WiFi.reconnect(); - delay(500); - } - #endif - } - - String httpGetString(String URL) { - String payload = ""; - - WiFiClientSecure client; - HTTPClient https; - client.setInsecure(); - - https.begin(client, URL); - https.addHeader("Accept", "*/*"); - - int httpCode = https.GET(); - #if defined(SERIAL_PRINTING) - Serial.printf("HTTP Response code: %d\n", httpCode); - #endif - - if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) { - payload = https.getString(); - } else { - #if defined(SERIAL_PRINTING) - Serial.printf("Error fetching node from poolpicker: %s\n", https.errorToString(httpCode).c_str()); - VerifyWifi(); - #endif - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) - display_info(https.errorToString(httpCode)); - #endif - } - https.end(); - return payload; - } - - void SelectNode() { - String input = ""; - int waitTime = 1; - int poolIndex = 0; - - while (input == "") { - #if defined(SERIAL_PRINTING) - Serial.println("Fetching mining node from the poolpicker in " + String(waitTime) + "s"); - #endif - delay(waitTime * 1000); - - input = httpGetString("https://server.duinocoin.com/getPool"); - - // Increase wait time till a maximum of 32 seconds - // (addresses: Limit connection requests on failure in ESP boards #1041) - waitTime *= 2; - if (waitTime > 32) - RestartESP("Node fetch unavailable"); - } - - UpdateHostPort(input); - } - - #ifdef USE_LAN - void WiFiEvent(WiFiEvent_t event) { - switch (event) { - case ARDUINO_EVENT_ETH_START: - #if defined(SERIAL_PRINTING) - Serial.println("ETH Started"); - #endif - // The hostname must be set after the interface is started, but needs - // to be set before DHCP, so set it from the event handler thread. - ETH.setHostname("esp32-ethernet"); - break; - case ARDUINO_EVENT_ETH_CONNECTED: - #if defined(SERIAL_PRINTING) - Serial.println("ETH Connected"); - #endif - break; - case ARDUINO_EVENT_ETH_GOT_IP: - #if defined(SERIAL_PRINTING) - Serial.println("ETH Got IP"); - #endif - eth_connected = true; - break; - case ARDUINO_EVENT_ETH_DISCONNECTED: - #if defined(SERIAL_PRINTING) - Serial.println("ETH Disconnected"); - #endif - eth_connected = false; - break; - case ARDUINO_EVENT_ETH_STOP: - #if defined(SERIAL_PRINTING) - Serial.println("ETH Stopped"); - #endif - eth_connected = false; - break; - default: - break; - } - } - #endif - - void SetupWifi() { - #ifdef USE_LAN - #if defined(SERIAL_PRINTING) - Serial.println("Connecting to Ethernet..."); - #endif - WiFi.onEvent(WiFiEvent); // Will call WiFiEvent() from another thread. - ETH.begin(); - - while (!eth_connected) { - delay(500); - #if defined(SERIAL_PRINTING) - Serial.print("."); - #endif - } - - #if defined(SERIAL_PRINTING) - Serial.println("\n\nSuccessfully connected to Ethernet"); - Serial.println("Local IP address: " + ETH.localIP().toString()); - Serial.println("Rig name: " + String(RIG_IDENTIFIER)); - Serial.println(); - #endif - - #else - #if defined(SERIAL_PRINTING) - Serial.println("Connecting to: " + String(SSID)); - #endif - - WiFi.begin(SSID, PASSWORD); - while(WiFi.status() != WL_CONNECTED) { - Serial.print("."); - delay(100); - } - VerifyWifi(); - - #if !defined(ESP8266) - WiFi.config(WiFi.localIP(), WiFi.gatewayIP(), WiFi.subnetMask(), DNS_SERVER); - #endif - - #if defined(SERIAL_PRINTING) - Serial.println("\n\nSuccessfully connected to WiFi"); - Serial.println("Rig name: " + String(RIG_IDENTIFIER)); - Serial.println("Local IP address: " + WiFi.localIP().toString()); - Serial.println("Gateway: " + WiFi.gatewayIP().toString()); - Serial.println("DNS: " + WiFi.dnsIP().toString()); - Serial.println(); - #endif - - #endif - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) - display_info("Waiting for node..."); - #endif - SelectNode(); - } - - void SetupOTA() { - // Prepare OTA handler - ArduinoOTA.onStart([]() - { - #if defined(SERIAL_PRINTING) - Serial.println("Start"); - #endif - }); - ArduinoOTA.onEnd([]() - { - #if defined(SERIAL_PRINTING) - Serial.println("\nEnd"); - #endif - }); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) - { - #if defined(SERIAL_PRINTING) - Serial.printf("Progress: %u%%\r", (progress / (total / 100))); - #endif - }); - ArduinoOTA.onError([](ota_error_t error) - { - Serial.printf("Error[%u]: ", error); - #if defined(SERIAL_PRINTING) - if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed"); - else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed"); - else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed"); - else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed"); - else if (error == OTA_END_ERROR) Serial.println("End Failed"); - #endif - }); - - ArduinoOTA.setHostname(RIG_IDENTIFIER); // Give port a name - ArduinoOTA.begin(); - } - - #if defined(WEB_DASHBOARD) - void dashboard() { - #if defined(SERIAL_PRINTING) - Serial.println("Handling HTTP client"); - #endif - String s = WEBSITE; - #ifdef USE_LAN - s.replace("@@IP_ADDR@@", ETH.localIP().toString()); - #else - s.replace("@@IP_ADDR@@", WiFi.localIP().toString()); - #endif - - s.replace("@@HASHRATE@@", String((hashrate+hashrate_core_two) / 1000)); - s.replace("@@DIFF@@", String(difficulty / 100)); - s.replace("@@SHARES@@", String(share_count)); - s.replace("@@NODE@@", String(node_id)); - - #if defined(ESP8266) - s.replace("@@DEVICE@@", "ESP8266"); - #elif defined(CONFIG_FREERTOS_UNICORE) - s.replace("@@DEVICE@@", "ESP32-S2/C3"); - #else - s.replace("@@DEVICE@@", "ESP32"); - #endif - - s.replace("@@ID@@", String(RIG_IDENTIFIER)); - s.replace("@@MEMORY@@", String(ESP.getFreeHeap())); - s.replace("@@VERSION@@", String(SOFTWARE_VERSION)); - - #if defined(CAPTIVE_PORTAL) - s.replace("@@RESET_SETTINGS@@", "• Reset settings"); - #else - s.replace("@@RESET_SETTINGS@@", ""); - #endif - - #if defined(USE_DS18B20) - sensors.requestTemperatures(); - float temp = sensors.getTempCByIndex(0); - s.replace("@@SENSOR@@", "DS18B20: " + String(temp) + "*C"); - #elif defined(USE_DHT) - float temp = dht.readTemperature(); - float hum = dht.readHumidity(); - s.replace("@@SENSOR@@", "DHT11/22: " + String(temp) + "*C, " + String(hum) + "rh%"); - #elif defined(USE_HSU07M) - float temp = read_hsu07m(); - s.replace("@@SENSOR@@", "HSU07M: " + String(temp) + "*C"); - #elif defined(USE_INTERNAL_SENSOR) - float temp = 0; - temp_sensor_read_celsius(&temp); - s.replace("@@SENSOR@@", "CPU: " + String(temp) + "*C"); - #else - s.replace("@@SENSOR@@", "None"); - #endif - - server.send(200, "text/html", s); - } - #endif - -} // End of namespace - -MiningJob *job[CORE]; - -#if CORE == 2 - EasyFreeRTOS32 task1, task2; -#endif - -void task1_func(void *) { - #if defined(ESP32) && CORE == 2 - VOID SETUP() { } - - VOID LOOP() { - job[0]->mine(); - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) - float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; - float accept_rate = (accepted_share_count / 0.01 / share_count); - - long millisecs = millis(); - int uptime_secs = int((millisecs / 1000) % 60); - int uptime_mins = int((millisecs / (1000 * 60)) % 60); - int uptime_hours = int((millisecs / (1000 * 60 * 60)) % 24); - String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; - - float sharerate = share_count / (millisecs / 1000.0); - - display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), - String(node_id), String(difficulty / 100), String(sharerate, 1), - String(ping), String(accept_rate, 1)); - #endif - } - #endif -} - -void task2_func(void *) { - #if defined(ESP32) && CORE == 2 - VOID SETUP() { - job[1] = new MiningJob(1, configuration); - } - - VOID LOOP() { - job[1]->mine(); - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) - float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; - float accept_rate = (accepted_share_count / 0.01 / share_count); - - long millisecs = millis(); - int uptime_secs = int((millisecs / 1000) % 60); - int uptime_mins = int((millisecs / (1000 * 60)) % 60); - int uptime_hours = int((millisecs / (1000 * 60 * 60)) % 24); - String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; - - float sharerate = share_count / (millisecs / 1000.0); - - display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), - String(node_id), String(difficulty / 100), String(sharerate, 1), - String(ping), String(accept_rate, 1)); - #endif - } - #endif -} - -void setup() { - #if !defined(ESP8266) && defined(DISABLE_BROWNOUT) - WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); - #endif - - #if defined(SERIAL_PRINTING) - Serial.begin(SERIAL_BAUDRATE); - Serial.println("\n\nDuino-Coin " + String(configuration->MINER_VER)); - #endif - pinMode(LED_BUILTIN, OUTPUT); - - #if defined(BLUSHYBOX) - analogWrite(LED_BUILTIN, 255); - for (int i = 255; i > 0; i--) { - analogWrite(LED_BUILTIN, i); - delay(1); - } - pinMode(GAUGE_PIN, OUTPUT); - - // Gauge up and down effect on startup - for (int i = GAUGE_MIN; i < GAUGE_MAX; i++) { - analogWrite(GAUGE_PIN, i); - delay(10); - } - for (int i = GAUGE_MAX; i > GAUGE_MIN; i--) { - analogWrite(GAUGE_PIN, i); - delay(10); - } - #endif - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) - screen_setup(); - display_boot(); - - #endif - - assert(CORE == 1 || CORE == 2); - WALLET_ID = String(random(0, 2811)); // Needed for miner grouping in the wallet - job[0] = new MiningJob(0, configuration); - - #if defined(USE_DHT) - #if defined(SERIAL_PRINTING) - Serial.println("Initializing DHT sensor (Duino IoT)"); - #endif - dht.begin(); - #if defined(SERIAL_PRINTING) - Serial.println("Test reading: " + String(dht.readHumidity()) + "% humidity"); - Serial.println("Test reading: temperature " + String(dht.readTemperature()) + "°C"); - #endif - #endif - - #if defined(USE_DS18B20) - #if defined(SERIAL_PRINTING) - Serial.println("Initializing DS18B20 sensor (Duino IoT)"); - #endif - sensors.begin(); - sensors.requestTemperatures(); - #if defined(SERIAL_PRINTING) - Serial.println("Test reading: " + String(sensors.getTempCByIndex(0)) + "°C"); - #endif - #endif - - #if defined(USE_HSU07M) - #if defined(SERIAL_PRINTING) - Serial.println("Initializing HSU07M sensor (Duino IoT)"); - Serial.println("Test reading: " + String(read_hsu07m()) + "°C"); - #endif - #endif - - #if defined(USE_INTERNAL_SENSOR) - #if defined(SERIAL_PRINTING) - Serial.println("Initializing internal ESP32 temperature sensor (Duino IoT)"); - #endif - temp_sensor_config_t temp_sensor = TSENS_CONFIG_DEFAULT(); - temp_sensor.dac_offset = TSENS_DAC_L2; - temp_sensor_set_config(temp_sensor); - temp_sensor_start(); - float result = 0; - temp_sensor_read_celsius(&result); - #if defined(SERIAL_PRINTING) - Serial.println("Test reading: " + String(result) + "°C"); - #endif - #endif - - WiFi.mode(WIFI_STA); // Setup ESP in client mode - //WiFi.disconnect(true); - #if defined(ESP8266) - WiFi.setSleepMode(WIFI_NONE_SLEEP); - #else - WiFi.setSleep(false); - #endif - - #if defined(CAPTIVE_PORTAL) - preferences.begin("duino_config", false); - strcpy(duco_username, preferences.getString("duco_username", "username").c_str()); - strcpy(duco_password, preferences.getString("duco_password", "None").c_str()); - strcpy(duco_rigid, preferences.getString("duco_rigid", "None").c_str()); - preferences.end(); - configuration->DUCO_USER = duco_username; - configuration->RIG_IDENTIFIER = duco_rigid; - configuration->MINER_KEY = duco_password; - - String captivePortalHTML = R"( - Duino BlushyBox - - )"; - - wifiManager.setCustomHeadElement(captivePortalHTML.c_str()); - - wifiManager.setSaveConfigCallback(saveConfigCallback); - wifiManager.addParameter(&custom_duco_username); - wifiManager.addParameter(&custom_duco_password); - wifiManager.addParameter(&custom_duco_rigid); - - #if defined(BLUSHYBOX) - blinker.attach_ms(200, changeState); - #endif - wifiManager.autoConnect("Duino-Coin"); - delay(1000); - VerifyWifi(); - #if defined(BLUSHYBOX) - blinker.detach(); - #endif - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) - display_info("Waiting for node..."); - #endif - #if defined(BLUSHYBOX) - blinker.attach_ms(500, changeState); - #endif - SelectNode(); - #if defined(BLUSHYBOX) - blinker.detach(); - #endif - #else - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2)|| defined(DISPLAY_114) - display_info("Waiting for WiFi..."); - #endif - SetupWifi(); - #endif - SetupOTA(); - - #if defined(WEB_DASHBOARD) - if (!MDNS.begin(RIG_IDENTIFIER)) { - #if defined(SERIAL_PRINTING) - Serial.println("mDNS unavailable"); - #endif - } - MDNS.addService("http", "tcp", 80); - #if defined(SERIAL_PRINTING) - #ifdef USE_LAN - Serial.println("Configured mDNS for dashboard on http://" + String(RIG_IDENTIFIER) - + ".local (or http://" + ETH.localIP().toString() + ")"); - #else - Serial.println("Configured mDNS for dashboard on http://" + String(RIG_IDENTIFIER) - + ".local (or http://" + WiFi.localIP().toString() + ")"); - #endif - #endif - - server.on("/", dashboard); - #if defined(CAPTIVE_PORTAL) - server.on("/reset", reset_settings); - #endif - server.begin(); - #endif - - #if defined(ESP8266) - // Start the WDT watchdog - lwdtFeed(); - lwdTimer.attach_ms(LWD_TIMEOUT, lwdtcb); - #endif - - #if defined(ESP8266) - // Fastest clock mode for 8266s - system_update_cpu_freq(160); - os_update_cpu_frequency(160); - // Feed the watchdog - lwdtFeed(); - #else - // Fastest clock mode for 32s - setCpuFrequencyMhz(240); - #endif - - job[0]->blink(BLINK_SETUP_COMPLETE); - - #if defined(ESP32) && CORE == 2 - mutexClientData = xSemaphoreCreateMutex(); - mutexConnectToServer = xSemaphoreCreateMutex(); - - xTaskCreatePinnedToCore(system_events_func, "system_events_func", 10000, NULL, 1, NULL, 0); - xTaskCreatePinnedToCore(task1_func, "task1_func", 10000, NULL, 1, &Task1, 0); - xTaskCreatePinnedToCore(task2_func, "task2_func", 10000, NULL, 1, &Task2, 1); - #endif -} - -void system_events_func(void* parameter) { - while (true) { - delay(10); - #if defined(WEB_DASHBOARD) - server.handleClient(); - #endif - ArduinoOTA.handle(); - } -} - -void single_core_loop() { - job[0]->mine(); - - lwdtFeed(); - - #if defined(DISPLAY_SSD1306) || defined(DISPLAY_16X2) || defined(DISPLAY_114) - float hashrate_float = (hashrate+hashrate_core_two) / 1000.0; - float accept_rate = (accepted_share_count / 0.01 / share_count); - - long millisecs = millis(); - int uptime_secs = int((millisecs / 1000) % 60); - int uptime_mins = int((millisecs / (1000 * 60)) % 60); - int uptime_hours = int((millisecs / (1000 * 60 * 60)) % 24); - String uptime = String(uptime_hours) + "h" + String(uptime_mins) + "m" + String(uptime_secs) + "s"; - - float sharerate = share_count / (millisecs / 1000.0); - - display_mining_results(String(hashrate_float, 1), String(accepted_share_count), String(share_count), String(uptime), - String(node_id), String(difficulty / 100), String(sharerate, 1), - String(ping), String(accept_rate, 1)); - #endif - - VerifyWifi(); - ArduinoOTA.handle(); - #if defined(WEB_DASHBOARD) - server.handleClient(); - #endif -} - -void loop() { - #if defined(ESP8266) || defined(CONFIG_FREERTOS_UNICORE) - single_core_loop(); - #endif - delay(10); -} diff --git a/ESP_Code4.3/ESP_Code/MiningJob.h b/ESP_Code4.3/ESP_Code/MiningJob.h deleted file mode 100644 index bb200914..00000000 --- a/ESP_Code4.3/ESP_Code/MiningJob.h +++ /dev/null @@ -1,423 +0,0 @@ -#pragma GCC optimize("-Ofast") - -#ifndef MINING_JOB_H -#define MINING_JOB_H - -#include -#include -#include -#include -#include - -#include "DSHA1.h" -#include "Counter.h" -#include "Settings.h" - -// https://github.com/esp8266/Arduino/blob/master/cores/esp8266/TypeConversion.cpp -const char base36Chars[36] PROGMEM = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' -}; - -const uint8_t base36CharValues[75] PROGMEM{ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, // 0 to 9 - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 0, 0, 0, 0, 0, 0, // Upper case letters - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 // Lower case letters -}; - -#define SPC_TOKEN ' ' -#define END_TOKEN '\n' -#define SEP_TOKEN ',' -#define IOT_TOKEN '@' - -struct MiningConfig { - String host = ""; - int port = 0; - String DUCO_USER = ""; - String RIG_IDENTIFIER = ""; - String MINER_KEY = ""; - String MINER_VER = SOFTWARE_VERSION; - #if defined(ESP8266) - // "High-band" 8266 diff - String START_DIFF = "ESP8266H"; - #elif defined(CONFIG_FREERTOS_UNICORE) - // Single core 32 diff - String START_DIFF = "ESP32S"; - #else - // Normal 32 diff - String START_DIFF = "ESP32"; - #endif - - MiningConfig(String DUCO_USER, String RIG_IDENTIFIER, String MINER_KEY) - : DUCO_USER(DUCO_USER), RIG_IDENTIFIER(RIG_IDENTIFIER), MINER_KEY(MINER_KEY) {} -}; - -class MiningJob { - -public: - MiningConfig *config; - int core = 0; - - MiningJob(int core, MiningConfig *config) { - this->core = core; - this->config = config; - this->client_buffer = ""; - dsha1 = new DSHA1(); - dsha1->warmup(); - generateRigIdentifier(); - } - - void blink(uint8_t count, uint8_t pin = LED_BUILTIN) { - #if defined(LED_BLINKING) - uint8_t state = HIGH; - - for (int x = 0; x < (count << 1); ++x) { - digitalWrite(pin, state ^= HIGH); - delay(50); - } - #else - digitalWrite(LED_BUILTIN, HIGH); - #endif - } - - bool max_micros_elapsed(unsigned long current, unsigned long max_elapsed) { - static unsigned long _start = 0; - - if ((current - _start) > max_elapsed) { - _start = current; - return true; - } - return false; - } - - void handleSystemEvents(void) { - #if defined(ESP32) && CORE == 2 - esp_task_wdt_reset(); - #endif - delay(10); // Required vTaskDelay by ESP-IDF - yield(); - ArduinoOTA.handle(); - } - - void mine() { - connectToNode(); - askForJob(); - - dsha1->reset().write((const unsigned char *)getLastBlockHash().c_str(), getLastBlockHash().length()); - - int start_time = micros(); - max_micros_elapsed(start_time, 0); - #if defined(LED_BLINKING) - #if defined(BLUSHYBOX) - for (int i = 0; i < 72; i++) { - analogWrite(LED_BUILTIN, i); - delay(1); - } - #else - digitalWrite(LED_BUILTIN, LOW); - #endif - #endif - for (Counter<10> counter; counter < difficulty; ++counter) { - DSHA1 ctx = *dsha1; - ctx.write((const unsigned char *)counter.c_str(), counter.strlen()).finalize(hashArray); - - #ifndef CONFIG_FREERTOS_UNICORE - #if defined(ESP32) - #define SYSTEM_TIMEOUT 100000 // 10ms for esp32 looks like the lowest value without false watchdog triggers - #else - #define SYSTEM_TIMEOUT 500000 // 50ms for 8266 for same reason as above - #endif - if (max_micros_elapsed(micros(), SYSTEM_TIMEOUT)) { - handleSystemEvents(); - } - #endif - - if (memcmp(getExpectedHash(), hashArray, 20) == 0) { - unsigned long elapsed_time = micros() - start_time; - float elapsed_time_s = elapsed_time * .000001f; - share_count++; - - #if defined(LED_BLINKING) - #if defined(BLUSHYBOX) - for (int i = 72; i > 0; i--) { - analogWrite(LED_BUILTIN, i); - delay(1); - } - #else - digitalWrite(LED_BUILTIN, HIGH); - #endif - #endif - - if (String(core) == "0") { - hashrate = counter / elapsed_time_s; - submit(counter, hashrate, elapsed_time_s); - } else { - hashrate_core_two = counter / elapsed_time_s; - submit(counter, hashrate_core_two, elapsed_time_s); - } - - #if defined(BLUSHYBOX) - gauge_set(hashrate + hashrate_core_two); - #endif - - break; - } - } - } - -private: - String client_buffer; - uint8_t hashArray[20]; - String last_block_hash; - String expected_hash_str; - uint8_t expected_hash[20]; - DSHA1 *dsha1; - WiFiClient client; - String chipID = ""; - - #if defined(ESP8266) - #if defined(BLUSHYBOX) - String MINER_BANNER = "Official BlushyBox Miner (ESP8266)"; - #else - String MINER_BANNER = "Official ESP8266 Miner"; - #endif - #elif defined(CONFIG_FREERTOS_UNICORE) - String MINER_BANNER = "Official ESP32-S2 Miner"; - #else - #if defined(BLUSHYBOX) - String MINER_BANNER = "Official BlushyBox Miner (ESP32)"; - #else - String MINER_BANNER = "Official ESP32 Miner"; - #endif - #endif - - uint8_t *hexStringToUint8Array(const String &hexString, uint8_t *uint8Array, const uint32_t arrayLength) { - assert(hexString.length() >= arrayLength * 2); - const char *hexChars = hexString.c_str(); - for (uint32_t i = 0; i < arrayLength; ++i) { - uint8Array[i] = (pgm_read_byte(base36CharValues + hexChars[i * 2] - '0') << 4) + pgm_read_byte(base36CharValues + hexChars[i * 2 + 1] - '0'); - } - return uint8Array; - } - - void generateRigIdentifier() { - String AutoRigName = ""; - - #if defined(ESP8266) - chipID = String(ESP.getChipId(), HEX); - - if (strcmp(config->RIG_IDENTIFIER.c_str(), "Auto") != 0) - return; - - AutoRigName = "ESP8266-" + chipID; - AutoRigName.toUpperCase(); - config->RIG_IDENTIFIER = AutoRigName.c_str(); - #else - uint64_t chip_id = ESP.getEfuseMac(); - uint16_t chip = (uint16_t)(chip_id >> 32); // Prepare to print a 64 bit value into a char array - char fullChip[23]; - snprintf(fullChip, 23, "%04X%08X", chip, - (uint32_t)chip_id); // Store the (actually) 48 bit chip_id into a char array - - chipID = String(fullChip); - - if (strcmp(config->RIG_IDENTIFIER.c_str(), "Auto") != 0) - return; - // Autogenerate ID if required - AutoRigName = "ESP32-" + String(fullChip); - AutoRigName.toUpperCase(); - config->RIG_IDENTIFIER = AutoRigName.c_str(); - #endif - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - Rig identifier: " - + config->RIG_IDENTIFIER); - #endif - } - - void connectToNode() { - if (client.connected()) return; - - unsigned int stopWatch = millis(); - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - Connecting to a Duino-Coin node..."); - #endif - while (!client.connect(config->host.c_str(), config->port)) { - if (max_micros_elapsed(micros(), 100000)) { - handleSystemEvents(); - } - if (millis()-stopWatch>100000) ESP.restart(); - } - - waitForClientData(); - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - Connected. Node reported version: " - + client_buffer); - #endif - - blink(BLINK_CLIENT_CONNECT); - - /* client.print("MOTD" + END_TOKEN); - waitForClientData(); - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - MOTD: " - + client_buffer); - #endif */ - } - - void waitForClientData() { - client_buffer = ""; - - while (client.connected()) { - if (client.available()) { - client_buffer = client.readStringUntil(END_TOKEN); - if (client_buffer.length() == 1 && client_buffer[0] == END_TOKEN) - client_buffer = "???\n"; // NOTE: Should never happen - break; - } - } - } - - void submit(unsigned long counter, float hashrate, float elapsed_time_s) { - client.print(String(counter) + - SEP_TOKEN + String(hashrate) + - SEP_TOKEN + MINER_BANNER + - SPC_TOKEN + config->MINER_VER + - SEP_TOKEN + config->RIG_IDENTIFIER + - SEP_TOKEN + "DUCOID" + String(chipID) + - SEP_TOKEN + String(WALLET_ID) + - END_TOKEN); - - unsigned long ping_start = millis(); - waitForClientData(); - ping = millis() - ping_start; - - if (client_buffer == "GOOD") { - accepted_share_count++; - } - - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - " + - client_buffer + - " share #" + String(share_count) + - " (" + String(counter) + ")" + - " hashrate: " + String(hashrate / 1000, 2) + " kH/s (" + - String(elapsed_time_s) + "s)\n"); - #endif - } - - bool parse() { - // Create a non-constant copy of the input string - char *job_str_copy = strdup(client_buffer.c_str()); - - if (job_str_copy) { - String tokens[3]; - char *token = strtok(job_str_copy, ","); - for (int i = 0; token != NULL && i < 3; i++) { - tokens[i] = token; - token = strtok(NULL, ","); - } - - last_block_hash = tokens[0]; - expected_hash_str = tokens[1]; - hexStringToUint8Array(expected_hash_str, expected_hash, 20); - difficulty = tokens[2].toInt() * 100 + 1; - - // Free the memory allocated by strdup - free(job_str_copy); - - return true; - } - else { - // Handle memory allocation failure - return false; - } - } - - void askForJob() { - Serial.println("Core [" + String(core) + "] - Asking for a new job for user: " - + String(config->DUCO_USER)); - - #if defined(USE_DS18B20) - sensors.requestTemperatures(); - float temp = sensors.getTempCByIndex(0); - #if defined(SERIAL_PRINTING) - Serial.println("DS18B20 reading: " + String(temp) + "°C"); - #endif - - client.print("JOB," + - String(config->DUCO_USER) + - SEP_TOKEN + config->START_DIFF + - SEP_TOKEN + String(config->MINER_KEY) + - SEP_TOKEN + "Temp:" + String(temp) + "*C" + - END_TOKEN); - #elif defined(USE_DHT) - float temp = dht.readTemperature(); - float hum = dht.readHumidity(); - #if defined(SERIAL_PRINTING) - Serial.println("DHT reading: " + String(temp) + "°C"); - Serial.println("DHT reading: " + String(hum) + "%"); - #endif - - client.print("JOB," + - String(config->DUCO_USER) + - SEP_TOKEN + config->START_DIFF + - SEP_TOKEN + String(config->MINER_KEY) + - SEP_TOKEN + "Temp:" + String(temp) + "*C" + - IOT_TOKEN + "Hum:" + String(hum) + "%" + - END_TOKEN); - #elif defined(USE_HSU07M) - float temp = read_hsu07m(); - #if defined(SERIAL_PRINTING) - Serial.println("HSU reading: " + String(temp) + "°C"); - #endif - - client.print("JOB," + - String(config->DUCO_USER) + - SEP_TOKEN + config->START_DIFF + - SEP_TOKEN + String(config->MINER_KEY) + - SEP_TOKEN + "Temp:" + String(temp) + "*C" + - END_TOKEN); - #elif defined(USE_INTERNAL_SENSOR) - float temp = 0; - temp_sensor_read_celsius(&temp); - #if defined(SERIAL_PRINTING) - Serial.println("Internal temp sensor reading: " + String(temp) + "°C"); - #endif - - client.print("JOB," + - String(config->DUCO_USER) + - SEP_TOKEN + config->START_DIFF + - SEP_TOKEN + String(config->MINER_KEY) + - SEP_TOKEN + "CPU Temp:" + String(temp) + "*C" + - END_TOKEN); - #else - client.print("JOB," + - String(config->DUCO_USER) + - SEP_TOKEN + config->START_DIFF + - SEP_TOKEN + String(config->MINER_KEY) + - END_TOKEN); - #endif - - waitForClientData(); - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - Received job with size of " - + String(client_buffer.length()) - + " bytes " + client_buffer); - #endif - - parse(); - #if defined(SERIAL_PRINTING) - Serial.println("Core [" + String(core) + "] - Parsed job: " - + getLastBlockHash() + " " - + getExpectedHashStr() + " " - + String(getDifficulty())); - #endif - } - - const String &getLastBlockHash() const { return last_block_hash; } - const String &getExpectedHashStr() const { return expected_hash_str; } - const uint8_t *getExpectedHash() const { return expected_hash; } - unsigned int getDifficulty() const { return difficulty; } -}; - -#endif diff --git a/ESP_Code4.3/ESP_Code/Settings.h b/ESP_Code4.3/ESP_Code/Settings.h deleted file mode 100644 index 86ce1270..00000000 --- a/ESP_Code4.3/ESP_Code/Settings.h +++ /dev/null @@ -1,237 +0,0 @@ -// Settings.h -#ifndef SETTINGS_H -#define SETTINGS_H - -// ---------------------- General settings ---------------------- // -// Change the part in brackets to your Duino-Coin username -extern char *DUCO_USER = "your username"; -// Change the part in brackets to your mining key (if you have set it in the wallet) -extern char *MINER_KEY = "your key"; -// Change the part in brackets if you want to set a custom miner name -// Use Auto to autogenerate, None for no custom identifier -extern char *RIG_IDENTIFIER = "esp32_TT-GO"; -// Change the part in brackets to your WiFi name -extern const char SSID[] = "your ssid"; -// Change the part in brackets to your WiFi password -extern const char PASSWORD[] = "your wifi pass"; -// -------------------------------------------------------------- // - -// -------------------- Advanced options ------------------------ // -// Uncomment if you want to host the dashboard page (available on ESPs IP address and mDNS) -// #define WEB_DASHBOARD - -// Comment out the line below if you wish to disable LED blinking -#define LED_BLINKING - -// Uncomment if you want to use LAN8720. WLAN-credentials will be ignored using LAN -// Select correct Board in ArduinoIDE!!! Really! -// #define USE_LAN - -// Comment out the line below if you wish to disable Serial printing -#define SERIAL_PRINTING - -// Edit the line below if you wish to change the serial speed (low values may reduce performance but are less prone to interference) -#define SERIAL_BAUDRATE 500000 - -// ESP8266 WDT loop watchdog. Do not edit this value, but if you must - do not set it too low or it will falsely trigger during mining! -#define LWD_TIMEOUT 30000 - -// Uncomment to disable ESP32 brownout detector if you're suffering from faulty insufficient power detection -// #define DISABLE_BROWNOUT - -// Uncomment to enable WiFiManager captive portal in AP mode -// The board will create its own network you connect to and change the settings -// #define CAPTIVE_PORTAL -// -------------------------------------------------------------- // - -// ------------------------ Displays ---------------------------- // - -// Uncomment to enable a SSD1306 OLED screen on the I2C bus to display mining info in real time -// Default connections (can be overriden by using a different u8g2 initializer, see line 140): -// GND - GND -// VCC - 5V or 3.3V depending on display -// SCL - GPIO22 (ESP32) or GPIO5 (D2 on ESP8266) or GPIO35 (ESP32-S2) -// SDA - GPIO21 (ESP32) or GPIO4 (D1 on ESP8266) or GPIO33 (ESP32-S2) -// #define DISPLAY_SSD1306 - -//uncomment to enable Lilygo tt display 1.14 module -// #define DISPLAY_114 - -// Uncomment to enable a 16x2 LCD screen on a direct bus to display mining info in real time -// See line 150 for connections and initializer -// #define DISPLAY_16X2 - -// Uncomment if your device is a Duino BlushyBox device -// #define BLUSHYBOX -// -------------------------------------------------------------- // - -// ---------------------- IoT examples -------------------------- // -// https://github.com/revoxhere/duino-coin/wiki/Duino's-take-on-the-Internet-of-Things - -// Uncomment the line below if you wish to use the internal temperature sensor (Duino IoT example) -// Only ESP32-S2, -S3, -H2, -C2, -C3, -C6 and some old models have one! -// More info: https://www.espboards.dev/blog/esp32-inbuilt-temperature-sensor/ -// NOTE: Mining performance will decrease by about 20 kH/s! -// #define USE_INTERNAL_SENSOR - -// Uncomment the line below if you wish to use a DS18B20 temperature sensor (Duino IoT example) -// NOTE: Mining performance should stay the same -// #define USE_DS18B20 - -// Uncomment the line below if you wish to use a DHT11/22 temperature and humidity sensor (Duino IoT example) -// NOTE: Mining performance should stay the same -// #define USE_DHT - -// Uncomment the line below if you wish to use a HSU07M sensor (Duino IoT Example) -// NOTE: Untested as of right now -// #define USE_HSU07M -// -------------------------------------------------------------- // - -// ---------------- Variables and definitions ------------------- // -// You generally do not need to edit stuff below this line -// unless you're know what you're doing. - -#if defined(ESP8266) - // ESP8266 - #define LED_BUILTIN 2 -#elif defined(CONFIG_FREERTOS_UNICORE) - #if defined(CONFIG_IDF_TARGET_ESP32C3) - // ESP32-C3 - #define LED_BUILTIN 8 - #else - // ESP32-S2 - #define LED_BUILTIN 15 - #endif -#else - // ESP32 - #ifndef LED_BUILTIN - #define LED_BUILTIN 2 - #endif - #if defined(BLUSHYBOX) - #define LED_BUILTIN 4 - #endif -#endif - -#define BLINK_SETUP_COMPLETE 2 -#define BLINK_CLIENT_CONNECT 5 - -#define SOFTWARE_VERSION "4.3" -extern unsigned int hashrate = 0; -extern unsigned int hashrate_core_two = 0; -extern unsigned int difficulty = 0; -extern unsigned long share_count = 0; -extern unsigned long accepted_share_count = 0; -extern String node_id = ""; -extern String WALLET_ID = ""; -extern unsigned int ping = 0; - -#if defined(USE_INTERNAL_SENSOR) - #include "driver/temp_sensor.h" -#endif - -#if defined(USE_DS18B20) - // Install OneWire and DallasTemperature libraries if you get an error - #include - #include - // Change 12 to the pin you've connected your sensor to - const int DSPIN = 12; - - OneWire oneWire(DSPIN); - DallasTemperature extern sensors(&oneWire); -#endif - -#if defined(USE_DHT) - // Install "DHT sensor library" if you get an error - #include - // Change 12 to the pin you've connected your sensor to - #define DHTPIN 12 - // Set DHT11 or DHT22 type accordingly - #define DHTTYPE DHT11 - - DHT extern dht(DHTPIN, DHTTYPE); -#endif - -#if defined(DISPLAY_SSD1306) - // Install "u8g2" if you get an error - #include - #include - // Display definition from the U8G2 library. Edit if you use a different display - // For software I2C, use ..._F_SW_I2C and define the pins in the initializer - U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); -#endif - -#if defined(DISPLAY_16X2) - #include "Wire.h" - // Install "Adafruit_LiquidCrystal" if you get an error - #include "Adafruit_LiquidCrystal.h" - - // initialize the library with the numbers of the interface pins - // RS E D4 D5 D6 D7 - Adafruit_LiquidCrystal lcd(1, 2, 3, 4, 5, 6); -#endif - -#if defined(DISPLAY_114) - // Install "lilygo lib TFT_eSPI.h" if you get an error - #include - #include - #include - // Display definition from the tft_eSPI library. Edit if you use a different display - TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h -#endif - -#if defined(USE_HSU07M) - #include "Wire.h" - #define HSU07M_ADDRESS 0x4B // Change this if your sensor has a different address - - float read_hsu07m() { - Wire.beginTransmission(HSU07M_ADDRESS); - Wire.write(0x00); - Wire.endTransmission(); - delay(100); - Wire.requestFrom(HSU07M_ADDRESS, 2); - if(Wire.available() >= 2) { - byte tempMSB = Wire.read(); - byte tempLSB = Wire.read(); - int tempRaw = (tempMSB << 8) | tempLSB; - float tempC = (tempRaw / 16.0) - 40.0; - return tempC; - } - return -1.0; - } -#endif - -#if defined(BLUSHYBOX) - #define GAUGE_PIN 5 - #define GAUGE_MAX 190 - #define GAUGE_MIN 0 - #if defined(ESP8266) - #define GAUGE_MAX_HR 80000 - #else - #define GAUGE_MAX_HR 200000 - #endif - extern float hashrate_old = 0.0; - - void gauge_set(float hashrate) { - float old = hashrate_old; - float new_val = hashrate; - - if (hashrate_old == 0) { - float delta = (new_val - old) / 50; - for (int x=0; x < 50; x++) { - analogWrite(5, map(old + x*delta, 0, GAUGE_MAX_HR, GAUGE_MIN, GAUGE_MAX) + random(0, 10)); - delay(20); - } - } else { - float delta = (new_val - old) / 10; - for (int x=0; x < 10; x++) { - analogWrite(5, map(old + x*delta, 0, GAUGE_MAX_HR, GAUGE_MIN, GAUGE_MAX) + random(0, 10)); - delay(10); - } - } - hashrate_old = hashrate; - } -#endif - -IPAddress DNS_SERVER(1, 1, 1, 1); // Cloudflare DNS server - -#endif // End of SETTINGS_H From 965ded41217f04e6103780dac8273e15abb7b2a8 Mon Sep 17 00:00:00 2001 From: jpx13 Date: Fri, 7 Mar 2025 14:13:16 +0100 Subject: [PATCH 13/14] Update User_Setup.h --- ESP_Code/User_Setup.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ESP_Code/User_Setup.h b/ESP_Code/User_Setup.h index 117dbbe0..d0a16e68 100644 --- a/ESP_Code/User_Setup.h +++ b/ESP_Code/User_Setup.h @@ -45,7 +45,7 @@ // select ST7789_DRIVER for tt-go 1.14 display, st7735_DRIVER for TFT 7735 display, ILI9341_2 for ESP32-2432S028 //#define ILI9341_DRIVER // Generic driver for common displays -#define ILI9341_2_DRIVER // Alternative ILI9341 driver, see https://github.com/Bodmer/TFT_eSPI/issues/1172 +#define ILI9341_2_DRIVER // Alternative ILI9341 driver, see https://github.com/Bodmer/TFT_eSPI/issues/1172 // FOR CYD ESP32-2432S028 //#define ST7735_DRIVER // Define additional parameters below for this display //#define ILI9163_DRIVER // Define additional parameters below for this display //#define S6D02A1_DRIVER From 29b2fca5823bf431d80b7046a34189031d34bd47 Mon Sep 17 00:00:00 2001 From: jpx13 Date: Fri, 7 Mar 2025 14:19:15 +0100 Subject: [PATCH 14/14] ESP32 CYD binary Uploaded a binary of the 2432S028 Duinocoin miner for those who can't or don't want to compile it by themselves. --- ESP_Code/ESP_Code.ino.jczn_2432s028r.bin | Bin 0 -> 1325472 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ESP_Code/ESP_Code.ino.jczn_2432s028r.bin diff --git a/ESP_Code/ESP_Code.ino.jczn_2432s028r.bin b/ESP_Code/ESP_Code.ino.jczn_2432s028r.bin new file mode 100644 index 0000000000000000000000000000000000000000..fbf6404ec482b23614f2dcddbe50ed7401739f33 GIT binary patch literal 1325472 zcmd44OLJRUvhTNTha=8a-1f*3ce+(=R#DaBQz}(8TT(X&fFfFapaD=)byWod1V9ok z5J2G}l70Gk;;Dy@@W3NSc;N6Id+M<#j_|~vz!8q{#8VH?{rz*TwI6s;taFau+EE-5>s+$p80`|EP!mD31Q{`~UU-`cIYK7IOT z^V#O^#_o5!8<*{iZtMBQx9#74x6$d1r*|sz-~ar7{@4HSY5l)gtN+h${)hkRKmTw4 zm!JOk|LW2H#(%T*fBf5DfBf%G{>Lb4hpPWYe(NWVYCO3cw6Dg)LGQ2K4z<4T9rWUH zw>=yTy6tIiaJjj;sm99V@o@aZ+U%#jI4aDhSMfos*QdmO_p&z#FXSt_g2|U!x83c1 z>L%~yK__{xj)#}y?qsqTug%uheic0;QEkK7Rd#!#Pz3-k+y5mpXG2eEd zKijQu?|#Q)R5A=M4toRYtelieJ+^Mep1<_Z&s7cDp;88j3OYPFMM=fJVQS z>Yi&OJ{wJY*9I4XATFuS$*AAD6BbwI zQ*GQHGr=@?+#1Z7%YZ~0c~=WyG#vIf2h-8!aBO2LmKz&8#d5vz^!VB4H=El}k9W59 zyY(!J8h-{pg{Se_e!SL+*S?R}4)@lM_txsvV~_gnY^_~yt$oiUd4cQJS6_Yc#g9Lp z|J}vE9y}WVYWlCh)A7va<)YP}=wSfbD}U*%cv@kee*gR5Khpb~(^KAryW?*BLlpfK zZ^U|!4H4pB+cT5KltuAXYjOpMy3mwZNEEL}lP8a?Okwg-^LQ~F$E|qKy@~%aJhwN^ z9r^!wy8l#lseVsmI+o|A2XUG}&EnxjOdIES)9xgWl=-TATc3`pcC+6dTu!gnpTw_U z#jWwUb$4VR;;&=T0+z`1yXN%k7{n*{ABX3Adr8^G@Jz`Cm0D+3C)3zf`sLF&6m(C| zcAHZTGukTd{dh*VCqMpWblaQ#SQ@rx*U+-bkG2}M7=Hv|n?=?|Gc4BR%a2JfHm}@x ztF19er_llk{u2y}Is9tH={k=GRBMYNlTSFSWe84sSk5)N6lKWor||yGM^QBc}dG zaq{2GX>Z!^zP9vuzdxH?-R%!=Uv9b2*^HCv9T_uU;`n^nxr_fk_lb|K_Q%Wda5m^{ zw1@p6z4&$K`T51g?(gO@hSX;-^uK)SKjiYB&!$r-#X?KN+YMGuXLz$0Z;x*6-|jOW zHooQ0ueZP1`F49dU+FBV6sJ$R!7&*RAT-hjP1-$H(_dV|qy`v28bEr-DQ zKVhoAwg2)1iJ_tYELi?BSiRhuTT;>cR?jwQ5%xfs4#EoeJAAs(wUwreJ%-a{X-8Mn z>1eXIwdEL`JlnE$*_~D)56Wi*&d5hR8?-*bu(re`nm3cB1&PeRTPheE)y&DW#KozBlZx?U9X1eTI(1sleTJ zV#_Kxb=W4)he#hW6heb%?8>{zGJ_hglO_4;_)mDSyUDbB-GonLpJ`sq28a&R*5u<( z=6TmY-wV%AyIUIQgciqLcF*o7(c*K*8ai?;*cGZ3+haQLC|aSc#XnAl1Gd-;6BGnX z?SW#uVqQFNsYm!cm{oc;7N-o8CJpleb50(P{B*^PpBP$A9~qZz!pA2z7pWW*n~PcgNX8zsx>%@8b2|Mcf@|S#-3zG?O>2e!mOj;yB}* zPE?#trfj-4FPVKDyn|aG4qAPm7p^(tA6cTi;cOgM63w{xq)(?Gqw@7=dRGx0jVc4p zEKPR9`zO$+<6cgN$KC7U_zv6{mb%?h)YM{WdPzLG>rSE;(r9xw>JM9;$W}@8m-b%= z#z##Mdd6B_&GuCnT$)UhoXxdK^t5=m7d<_#mQSLm@5@#GR13{&{jELhCQnU1hqrRU zWqX#S?kYLFvI<HD(P@~l}tL0~+qG|J8W=FV?-oBNeU^t9e6&~mL_uk1xfwdkp; zUEALMu(#?@T^^g)zn59SH6IevLojHv%JUglU=`6fd zs_&jRj|ndF4}~vZVN8PlNtAE)VdQo zgl~i4G{|2R%GA>zPNvad7*D1E@mf#DiULQt;b=M>#(mTi@tCy6xHXtuz%7+QS8)^U zUdZ>30#Pe609C{{ja4fdMW&Fe>2$p#DPQ+K|05_47aZd|&?Ty)Bn{nn({ zjvTK(z5CtIuXdicuV#af-44&&n>$ax*00;FY}bh5-$iRJ#7kt$^PG6uy&d%sSYJig zt=o;(W%pIo8D6(~gICe0HNARebqojnJ7x^dup5;?CP8TmTsDqO99sl>bi|G)q9a*+ zqc|LX>~$mG!=&5Mn{p#MEEh^q%=YZDY1*GeeXtf1G3>LUpVw`YSwZmV;sFi~jl4wH zMuYM7Qy~p_ZZA(3q`1OpM4wwfs!RPJ3r;t<^UaSVgagJq`O(n$M{4RILUsM?v(25& zogdL4j$7=dlOL0w{5To6f0SegZf&+lqiFjU@*V&pHOO!R>%`FEuFpY&jSWaxYc%Tj z97wiqH&Ehiz%X2I%*Oq$@D#+nMp@Dup%&SSP^6&tDV2}PjdD~yYec8j2AZvU)TkAT z<*0aC{XRN=TRc6Aj!)l_qjp+7sGOASp;~AZ52G{N=%QMAU*FG8?59vX;!E|k)}VBu z*r>d#G`^3DhvnkiQyMug*B~p$^>U#`4JW6K%E9*(t)K1Ji?zzWdSV&gLLIn8u4n%D@9WrYqvc#k)al#}IXw^16j!(f8v^1500OD}wWEgvR zN>v113vYmZD!Dei9~;d2-MDx)?6td-=y-?%D6V#?NgN1RTkm$`Q;|s8oW{qH1Z3Ne z)^<$)ZrQN9uq#aR9qI`*ykHnSPluPEXKdNg*+Bc2mN})Wtvl%hERn38=wLWL?{yHF zt@Z;+n$a;7dDw~7TmgcALpFOhLE0EwYdF^UsmxtWq6^J7w7Jxyv1uf(_TpmV$r!ug?XrIn8~Y);5To#!+4ov{FyDdf02+7|zqeh= zr@2pMDKZ1N-KU!NucU%$TpkQ(msfEe0@pQI*QI59!zzOuyY0`4ge~v5^bHFLzAIGn zo@0i~__%f1YsdSj~aRUzYpf|o2$+Sia<4aSPu}D~?rcO{Jn&-nMR`S*x_e;0ikqQ+<(G@4!b_PxE%bxR`Y`XYT# zwRE1gXQ*~4zX4MOX8y>^6FLkLlR{F{_SVg|CsJVU^>D<3@5cL}2m~3XqHUaYwDV2W zjJ|ALkA4?@8GYHG{w{hMeR;{xm%o1Y+uucB@w@Y4`*%VCF+0%>w8kE0PF)UJ9Km$! zXN)SJ?OUpl=t6UCPZBJ|(X>aii*fhoh(BE_7)96J>&Zt+-}ZD34?ebC(rKDoquz)e z=DOA9@0D1S*64gPp(*t2;g>ADUEbKY*?9yjIMK68wTFXSPB^ZqaF+GR?6YBW4V>%|DA*0=9XI}Cs#=&0f4hT|oZ0y8*dc5x`2n8#v^sbhPpf~Bo~ zlDiE@+D+cdw>=og7P3pAGti!mwmv+CTx}qhjd{8Ti#C{GNlgNqA)ZcX*io)@gvL0$ zjF$}7@XtnADNW)w2bJQ*#PCev5#m;VbcNcTg*RrciUFELXLj<_iJQQ?Y2`V98h7C} zkv;$jqjF!J%6%_s%P9bK?7?=e%s$^!r=}MljRa2`EdArCz_!O$tJzWi_9EBy2w>ap zAb>XAH>4;w6K2ECd<<+h+;B+M5uw%rnbAH->JPm96jEKc^52FZ6W|+%5ZQsB4*R6@ zM#4e7;iSnXwJxX?>ffIf0h<$GI}0g}m_yfNG4H1Q01i6Ffq^xch3}k#Cf}@nEjSb5 z1A>MRdn)f`o5#$6$3abitJ}^?Lhk6~>^LqSRggpLG(l$26Q!E)P6sftPTbHeu@b14 zWR{1+O4}!e{gr_c1=4OI4Dd$N>(SoaC#L&-<)HEtbF8|x+Q4|xqva{^{9_PwFM+qs zxTA|YZUYveuOSqFVKKsj5<>?aGV&ur2xSsYe7V)>zm8sBJ$nu1pG{wG@$~X){Q9Ln z8`0@?E<|2liXV(y>^H*!$F=S}^Q$-p+hDI=eFbUw>h(*fj(_cN{^gc`eYvH=q>i^< zKcX?J*Q4uekB+&n7ISAYC*}8O$M#?iHA7W@)R-<04Fc7pj?q0z=F8U$@5&{s0WPx} zw=P7NI$aJ$h0&gPStWi|Ok1HMBjX;?CQ&%Hj?1+|y;c`!cnCZGtigcd9r<9e#^~bqGmSjAIk3_5^RL5 zV^lze`ss;b*pja&r_DmOd2o7$6u7jQv7-lt$`Jw|xH|#(aJ8C(wx&V{x)bQ<0=)ze zjBQIPtP$AoIiS1B2As-$6FvxM(();7hH}TP%VA`M8)(@^>PR+g1f~*J{tgnFATW(+ za{?{E8%qV5v|8Pk#pWE^1{IsE#HN7`5w}@6LCv=`wNQJ5)^%XJb*Pr#PWMTYABD>R z?Xl-%e>i>nQw;0ZRMSm5gT}%-lUe@Dk^_9i*$X887re#72c*n$DaQRL?OP7}M==mX*c9IjQ(q4TA?R5Gvn9n9lWN8>9CW&MK&Krdy{;W0k44Z`gbrL(G$@xT9h z^bgVBU-9qf-akZjPv+vMac9__7;as6LAj>X^w+cNKVbucw4G22(H(YuIN-@uB%DaM z%eLR#v-_n@rjd`R1Vd$qUG^;@9I$uDwQLVHOr2QxXlCmT)JysQ9z_WEfaQ@BWc3t8 zGqEl}0QNfW!5H{QuN_X_y$U&bXAAKp&el{);Wl1VolOs_wK&?|wEt=RLH~e?#55}K zEpR+-&r3U=#uSS>APWpbZ8)6TOO`i`sz?ggttjx*5lRQCE2H}GVp^#B_2KPzI5+4a zk!Svk0`QWrmZyovE;8Ox5G^NnI*)B{LS1Ifhs^zuZFy zqV?;^ljywLA|Gmh_yMR1b5Iu+(s@H>&K631^Se4bj`%*+MV`#2vD^e35tW%O@bcaO)#$U~*n0XA`R5%Vifom#h zvQ>z3J6y-^$AK-Au1y!_jt(Fl3hX*|6Vkao5nCyTT;hu+oYiq4?$)1i?0fFTkQBtr zG-aY`Ct_Bm=}^T+cc6G$9Vx#9_OU}cnq-`-VdH>h>e|(c)%Fi26z9LhKh)2P7_!xW zLMMsb0lf@p;;6BzRs9RZIBd0xRUSAyRVy#Lx0T_vLN!o>WK=(;Hn7N9$%VcGK}x+*zxSjEgnVcs5Y66(ypwj$>635OSk# zjY3D0&4*Pp8@ZM|s@NB3YDr+tbfD&1lfod={q=MnpR6hn#yZDA+ey(x>~K4aAN}EQ z;GH%`Wss=;Y)c zLp<~cY1Tan?I_C~*nN3)g1Ian;{r0WrJ$bka!P`IDXAfa#hRKo3Alm z*Sdz=dh)QkCHt=Ktwi>R)noF$Dq7mdx{&^16&bZ!Sy54HwueP%1W0Ps;Vf(}q0*=tfj3q#yO1d@P>UaRP|o7>ZHt zxY49`{m@utw++X_T_y&`CigNZzxf!oY-@tbexvfOHx`dzO){b()Qv@ zS4n7mXod#;tFmre?U@fd$%k6L0Izf=&F|iG*-78c7U%sL??nt!>MV<9y;R7(a@MWX z`VqWMlIY(^<4h?jS$vy)J+9PGbMHVt`(9@jOUK8|4e<6)$0+ISTWLEy?1YEi@bE0c zq=%DrRzbOTBKMSPC4H$KS2Ay^JIQxkEM;CwAX<`CeP4^Tny?NkYZ@{yphlWf1NYK5 zq2%_??z89Ly!iIJ-?q-%o$f_6K+D7S;7%nrO55*Ce|oX;?pf|V^O8>r3A^v9ixLFFjJT07bhq1wQtZ#Zg* zSbVWwbXp(S=D1dVBWIuHL8W|DvJJi@GY43|%bw2tCStB*`-a?{$@}CB862)ZUgtk_ zm`&;NpP0A7_U*Hai*5b)#Ij_QUt(XV#3v3pFXWzpOpjq?n(s+e*e|lty*aG> z@$J#^$!YaZwR+?1-TM#U|Jkjw%d6gBKK8E%!_m*<$#nMV=JxKd=}P>~7PfS;Go&x)2;{AAi?ZxKKMf`RjznwTXu~|p^6U($R zU%{Oj!fc1k%j-LKDzHqw%k!BP3Z`1FeU2DEF3a~l`kj+u^eX)?-tWRBcVpu$V-w-9 zyG{Ok6ghbx{uPkLGV|&7!^rFxS-@x!&MHQd>buF)v+z_*z7^ANFGA{Jl3IO^j?Jrn z<^B?LSY)PTnHFhJBy_{kHGBNi3-{?y-$W(o|?<}k%13i}RHf4#l4eXFwN z>+`N1@H!I{*C-x5nUre1RyZa>@zdF6OzNaZg@wzf5X}Irc3SW-k^valZ zUnWDa+A8I8IsR^YcXQ{P&F7ig*fnW4isOBVmnJ$?sY;_ik^Crfot8Lb=wQf^T@>o_ zcK}MuVsrZRl}l&G)#&71 zz4^BMeLX54oYl+C@-bF}kVu$W;}oQvFGXky#9|#B)UiWuG>*zVNWm-PqA*%#ShD*( zYi$A+6rJyFEVI-t9X%R48b;pq1}N$#nM{Wq)yJoGKn#E!HrJ~gI4#8Qym48YQgDW% z3n}~N;Nhphh)LoKSfi;>%w?mcq^Xed4ujGbhk_x+cE&yTH*XQY_s2%zO`(I@ygPmc zkJjQ)@@awxb<9hyyRSHXXgbrgr_ckDgIBxHx1ZV)(DHcob8qP0EbTj=B;0-V{P^ja z8RQ%4z54Ag=1bd8kKnOHbTBF|n_G&1DRs|hmq*yE^k1Q)>OM8O)!K3If9_r4Yin)# z&Sv0o@TdI~K_iShq1`;>sk=PSv#F1A8$rR2)mQ8TuO68o7EmURC6+M(`)BoLCc{k zctXDQwaycVgw{v6jB}2~oI$#MK?^7EHDl#S^+^kCuRE*Lk@@{BujR|KyX(fnK7S5} z8~+C4vHi_6Sl!>m>q(1W$IqXvV1^%Dc!5=(cM)1HWv2}6!hpr+O~wRo1l#&& zfV+@C3*zw<7nflZ+s5_}JiCGYw23IT0>t+gmphPS^2Fv|b$4=}lPQar+lKb_JC^n6K)e}8>v?`tBsG>4-}Zk}Ym;p|aJ z#bmOTNA&A!EMk0$nK|GqUmlNN!J~W!6Fa)Pn>2@*WXF$R#c&tRgCio4G>Zj19(LhT z>Zbc#bXvq!12;8UXqx|`?-&wmZ>pLkFGu>Qe0Jm;zr z0kR^8Vbha%%LIVo#kzuAxX>0k+8`Q_(bz-OWXhJM0@kUUvHH7$mgjTK6K@-P4#Uh- zL)Lm)-5I+YA&o5|@547SUiVRS-or`S79GqI)x+(Y1yO!K`)3UCvjB!e3R7nMk>SF; zuJD)FG7l=e-(){_eVqeWSWj4bn0dp~81Fr2DzwJYzFVjkkt4I)Rjwt3N=+cc8CMi@ zUv>P`T4z%QF`ISYp$YC=e#Ne;f?nTOg$AL;j#ss4b#5r~P&ccfxlHl&26v!*^N2Ui z3seYKR*koEGl3U!agDp3?0JL^M2K2g(3$#!AA07KRcniL{v&G>aHB>|s$9Uc8pmYdvE!&+mPA`kF#(21>ff3PPcT5F z4fH2!JYI+NTbvc^J5|b-=l7`f?x||hy)?%)w_mMwz?(M8hKWq@OqrA|>t>sA6MDy# z5VCh0e8pbO4w%~p(meUr=V56S%R|GDZ~MDGlb3Ba3^nxCS8lM#=dAnDFb;Dc7S+Ml zMPO64&OlEcw#~=U7N3@{DAP|NC{hh@f9k*=0wUx~xG54>f#siUtZv5axm^Xp$t<~a zpOG@gPp2Q>)0_$9&Wq!Hw3jJ8iydV0T6wCu#x4K=|_$O^JvL?0U92X(db+*Icq-x6)-xRkmk- z5$4%-@~MoVeSd@D&1}GA0MsvXfN+aRyb~L-BUgg%qXOhA_Ui}&rL!Xrk7Wst!9oq&2=Vc*N|?s&Cz0!wF#c6+qC@jYwinF;QouYX zx?C1@HJB*c8>$+VhRtIMBeq^We2ffmoml)8QnLT8hi3)375vHVm2N+M91kcmA_kzKA;~7hz_&Nfnq2Ensnp>`6 zB`Fc3OIXm(@Y1X=2lC2f>qC0O#v4!Yc8D zzUGQZ!d;RlOh)5YUZqE_oYR z*|N)W85YKfz$brVf}Gg0jo(Qu&n+n)|mKIQCh3)WQRqBgXrU$D= z5AFn+hi^jW7vbUC@bF!D_-%ODaaBi!9al9Eu4*1!)jYVWd2m%n^+L_cN97O2Vu3?X zJ-kyG{6=Y!0;sr$BEESIzNGu0%>8ErN6|W)iKT&?X6m)a}{j`-YQ*ag|3mN0Qds26t`#ZG6oWDCx zqaX)(!s8k3G6bP2=ZS)GcLhH9vemB$v1aDw8`bYHWhPv0=9`5aG`@t8Lak06ZC=;E z>L79_=~U!QRjikgyi)HI;T87p{@fi8!I^ihKA~yYcRt|_cS-9>Wrcq4av<5*wOTC| z5GLmuSDm22tAQe{Lew!TYoO)K7~| z*~WAR{1 z(k*w#;~ZGTB*fxbjXhr*na07vBbKt__Q_M{$^r3*sKN)!O41(W<%&%>K{%3E?{(b7 zvvuK{EW068-aR(ttXKY=ew2{pJc&a#6PwPeGPQKp9Ohfws2rDNW*l;b$^b@{AXaIG zA)#0+E@bw>+!wwd7t*}eAsl$?h;d0qeMB}Ru3zRGHYodrOv^G#QATgoj?w_P{t3Fo?Zz!N6t7VPnXI=S2x7eWGG|Yb2=F|bq zm?f(ca~_W>O2IvyAb~5|$0U9^IElB=^wT_#SJe5TQ70s0v9@fqN-LFDrxg$2>lT5e zVoF-x9cxTU^#zR97-hqBFV1+Hr;LE8mg2uk%Z^_GCUxfl*A(QS=bS0j{Pz~-ElE5( zs^-yFAG9P5)ccimrj?M)+$p$d+(wuprQ*|kR4KB?n@5HHa*7Q~OANA>r0v%VC&j}i z>sb_y7ed5^dSxz_TUPp@p|hxP5)p$|9v$r$6xlUD>nfF`1pwud-VX1qveUOscam4c5hIK-`O>U#UYuP=E`@k{ zWx88x5`-_EkK!rr3F)h_$`gXK6BxphA<4dC(Wa6O zT;W>zj|)STgIA$82kRRA5hhZ?X!h*6x#Db<NA;@5i0fKcM(^nD(e z{Wn3%VsV68{r4=dl4Q+sHU4W3Y)Q^}j>RWbD}=NXlhs;Bn(D|9u|ut%{s? zVyR+zc?qR1RdI#A;MhFO?z4-@#luQEE>dc08N348m44* zmk~iFmK=SrV?vb@9wy0+TC-H!ms2P^&)l*Mnd)^39*qRL_vLd7R}Sulvm->#d#Y4c zNLSUEEd%z->>s|_{%y19MuH#B=PG5>X%;o`dontv@tzEBIjqP~eJh~S6$!j6@(66w zV{iuSdGZWaXJKoA;6{i0Dr!`OvYyqQYw-Q)(Sgm;XXYuJ?*YIM*$tAAb|RwR-@ah+ zkbL(7CTSHGa_Jm}3?3^H4DJEP(n%B%sy8Jb=LmiJc^UtY-vsUfSq8wq1QIy6$y?go zZmRl`!Ln7jPfpoYn-j5fX-#9!QzpVChQ`t4CM(;eKoD7eO{^VGQt>NEsx}Wfj|sFO z^O>6;)4j@l7h6l5fs7{AeQ#jkpH}gn)rkVazAp_NI@sBeF1xItnY?vOw!gv+pQd4#1-LeA2>cc962OL1H=-bUh$6!PfWmTQiq|;JRAFrkb{38DCf}W>gXe&2jUnJMPnm1lHjub+@$%N1I!3~QP-e8IEz&7FSQB;fus`GrdeUS$6N)r2-SmZ zEnrBfifaDKG4dD0)Wd9E8TDYsLzuY9b6!4szCnTe3v6ZSPpIZO~A-@IglNsyL575dd4chQim?#je0o6Xm+=tBRt=T07 zlV=sj?Mt{NsG*h1Tk8;h25|hVH-s}+b_85 zYb4JOenMPYYf7K3IbD`zsIq)%W!G;oRl9DDxmZdbq;C3h%OIAUo#H%t=(7|syl2T| zF$T(Nt5+pm3s#4N69!kBGG)Lr%dRd-Tb#_=SJ|E#fzDUcQ-D)fRnoY!&8@=EbTr)q ztfy9A78qfgVoDhRCzL`ke#xliokC^&9(+I!YsU#OU^dC~v zS_qzO3x;H*j<(W`k1Yu26@{;asLQgCD9W85U>a=i)J~rLh;!MBy}^thoCOb?Bi98^ z6Ep6#0(_!&Ld~yp6+08ZT=^V-B~uI-bwxDxT4G+`paP+mOEEp>N#%hDb@Bk!s_esr zxYgx9hSWz_qNg&K!NkRk_?%_&vcU}d9Y^tW6=kqv2_B8%{iRvSz#^lXVS>Qs$Ia3=oXC$9H#m&fADlIt;SGq?J<_yb@xWpNY2 zP0(D&oR{F7yBPNgc4MT|#D9bZX7PxOEqEHjF2}DHoW&MOnmaSju+Ow5*&%t1fsf-a z@K=;GY_mOXQA0`O+t*FA*_o*MfPb(n z9nvg=@XP$@G3@qUk2)48)iHfJJUx9|p9}gR@8RN6?SVl?e9o+!^t}NsL}(Y>h3^ZQ z!B(9MHi&EgjSL&xcWo{`1&YshzkTuTXGv|aF2{mV{gYWg5DbqwAkMWw%=($aH*?9V zHp{0;9D-Qe@CDsLBF}Xydbax(Es0Do&0>+LKp6B-hl`Gq&vrkq&Nyj}o0$pE^%1(O zY3+LFWx0@%S)6c_So>{UCM4D2@g~O&>@**+zlkj{60OiBI25MQ9zI8SGO+dZ85UqF z1Ae^*zZp}ftbaL`Z;Ep%coNBJadGOj-N-Fv3l9h9B{3UO+35C9v+k^0m+O~Z|J7Zh z07=RoP>CEHHr|@?_ZAAQnWlV6EgP?Ax5rQ*{Fo>2-Nh{6)ryQq?#fr68r{~+^GloP zy8Ta7N0%`+r|}b%TTkLA(QRE44-+D)PGo}E#-R-K=A?ULuhD39TbCnR+r8d$5ua|e z8+W7IL-S{aMWBVzrwTXKHHMbUB&EP$5x&SV38Cv6moi)P*1@xU@6N1yR_!e&@pn~! zb*oiNTe;l3$}A+I4{jz@zXOMczmusg8dy#^y!?`@-p<9K7JNl=vze52cA zIa&fM8*^?{!g3FnkUDA~N*0j}c^_mpQvh$e1`gp2VH*XgTtV2;Fyi=$YfRIyk9!i? zZF9~SFc@XZc}VL0T>l?3vomu6#Vnp17PtrXC7|E^hA}KG=#{I+9Hng4G>ZF- zqwP=>(sNfxVq>bS{7(TlzB9B3RifGLV!NYTYKi6@I5kx;_*RFYR??ke-HveRNcy}d zg5QZnDLTCnKAR)wdOU~B%*5}ljvRIgEB6*ZJEUW2s+Hg%>yU=b^EH5aWkrHhcX&P< zn0QPV8O`iA6d%_KHj9*kpcylIo{FsA_$Nmj=6ZX!qM((72T@b^76+E>VW(V&r>A7u zP%RW?5%kNud0U)uCz1Hww_c;!)SiZj$@*ZV!fM!l2RsSETc`!wwEba>sBSA(N z|M5QgAznb)pIla9rV*#^-EsKY7`iXK zG0{coFpa#$dQJBl1KyWfL3DcKb&9fDGa}9#uScJft#g5JMQj0v2_n4rkO=MRu1NmHnLDFWVpd*J>9 z6>Q2ad;rc>ceZ)%Avm^gLpZQf$Ao-hD7_UaG7d)fZT&v}yxj zrYU+kyWK}*c1!92?ZlUe4nB(c_Suoc_-)o%K9}KpTDZvV2&;;wx!^)qRPTqcHbf7A zSzs#ZlD@JuMcvDT&ZgKuPD%tqomQ~fDMjm*(S1#a-EzLKj`&FwV3?B-!pB%Wh`(5y zd=bubB$c~(1so=Lmv}_=o5$!KJaSiEJak654hRX6c@d+1w+-Uqyo1C7N&H*4)9zr> z+R{5y`t{de+tqsf#s$P8dFKX6N}7VH`WvN!Q#b+L%nuKTM1N|t7h~pB)m5WiJ17qF zu9V7l>?6;7wV?2Gbj4{+b>4tHJad8Lg3fSlgnTag=@7TUozR*cGjLr!a*fQQRSgHm zD`f~ot_Gvc?Al{cK)d(2iYj2(sSIob*L@$%=IUm`lm?MTLhM+pq;X9!=1;5^Cya1Q z05J947J>cZ3{7|vyn&!WBs)d^LSsa^;i3@E&fzGi`O0uJWrrijWy9Osw&z%8k*h0^ zb)FTDoU5+wRf#m?2uO1ZZYz}8^)>RU1yXr%Zd7?Qv~ygW;>vAxx}UbRdWQXOG@4#X zi!+BSc)eP%E%;X50gX5>Btx8^fb>}f$^nNFb6I_j7Dj1hZhzCGswK}wtB*cWfKTf) zpu5gZ?40`X61}=_Ys>#K0ol$ea;~Y=W+P!7w@@!{YBsRO3_7&J5oHWT?W@|AaeuFI4xXO8?o#tLJi6 z#iA!BQgY<41}wy-j3iWtui^`*NKwD7r@6VX0a$>6hfGM(AJr!-LC|*VbZkDg+qZMN z@le9wUZ(u=y|sMnquUz7%DIWc5H*v|f(iw4=JW+~xkj^gO%gf;Dqoz0_mJqWF=}&# zW|@W#{27VpPF}2f&Nj7T))iBSes1|+CVHW9>lL%TkYEZ0mh(b_m5{0^3k8PJ0CQK= zZ^Fe~b`kc)?1i?4EEN7NG_bNqq0p*MIo2`{HMXT$+Y1To_-y!`y1DJ1{V1fNh+XK0 zA1AVsI%NBr>Om=_Bi4NO+v8TEvxu18Od+SHT0O1E0G|8!W#!xLxmw_4f$WW7h_VN`6@(YpjyVb~L zRP2{x*Vj(7yNlfK9})ip!Yvh7S)3N-R!X<8pM-U~3d+m!t^)S0V}DI-)iJq$m#%^C z)iA8xKRfUN0f_la(XZ zZPHF8bVse{DWjARf8*=?cM+CAS(Y_tng$`4LD1x;Z2JxvA)SSpc4kG_7J48RYqp$K zxpW=`_(jM|R+tb$#VL~J^e@suJXrEc}`3%lv5|CnL7xU=hZOd4#9F@PwyE8vLQ-! zopky3IX}2B|MXTD1AGR2;|FCT3iRizYCkBKJ9U?}+Hzn7BW4R`7tfqEq|Wt&5Q6>i zItFgz$@A~NY1;J;U|c5zLgLx522*fFps|C&)(!TTlaK3P+SOq?3{+gK9|Cs$v`J=` z*O#$fC}}n#avA5g$Q8Vun=8BE&G>rNv>-b<6n3ntS?4VuuT8$Thx?||G8v|?2Hg3W z7-XNDZbZoQbte!7sZ26f8x_J@nkPw4r(T`VN7&||XqU>sJC+S(B9 z$6cQ9xeAtbU#gVJA+M|O%sYEZfR#Ou^kK{ ztGJtCNp8#`lM?4Lyvmiy?kP?gtUE99nZPVgq2U&nNSbR!hP0EG75x|6Pv~Q|J+GL^ z=rE?ufyT5$KE!_em+S43en}jn*r_xGlmm<^E?1lT>M1&ca zv6GCbxkJM;L*$tcv)Se-v#lHKHK`ekr#yzIkk$0tuyT{>+ZJNx+Mf;nIXxJBnnVh& z%q9ZX<|+=1L9jSSHR!b)`HqKt3PWtZ%P4BfTqi8wXLtQj>k~4()Ypcq<6EQl1Zo{j zbn1_=^K4fv%-k&_%j<2dtathg>z&X4I@Xo%fvhYa<9y#ARz{J;wST;h*&+Nh8Y`of zo!O{QOhdPempvSyX!G16mBsv^Yb4Wn#RW=}qH35GRpZQk2t!bW_)Nxum0X)+n+iY805 z>+3rQh+qYpt|r3=}3C**iSS6ylR8y%RG|G^dui30bHy&%Cv-J9bZ5(&zAD<25HN$=78ITs0%f zWG)U{mCJY6IO@dt#%SuKult)8SG($Vz=E!=Vm6g&oT#3cv7^c{2{v@AGWd1^Be#U< z3rknkrHtkL)GSB0%t#*C0?K^t$tzjV(3?r8Wmh9UU=k+n{zJ2x9kn{mUEqtf&qgm_ zIbGzpF@wQaHs@+i7(CZQ&Wb#DJ|Xz&@}g>4@>F6G{+a18Ve>P2+IAGyz8Z3?j+TmN z46x#bkizSjg@^99xU^m;$1|&Ym|LQsXX5X17@yc1gf;i;jc#t2_NO!{9kw+KY*j$A0W;Gz03)8Kd1O)Q{l<{bd|>T<9;E zLnN~(|8^1c)_wz;s3T49(P7V6?VIr9yfJt))r7yab)5=eE!*fCxEYs& zfY6C8ng{uK2?)yO0_WyuQ{C2?FY95x^RAMI7m`QBFD>Ke<`W zLr883OSOZAA?HDJe{s-&RYm)PEE1O_bQ~|5=6R6_)=goHE>l?lQcut%oPfp`V3I|ZjE?J~V5)9RPc*||(i|@4GbKUdeOp5p z0A939r9)?wiicf?Lw(xRxrV;1NTv{`V*Z+Y6ON;ryF<<>n{6vZUaC~VK-Nu&QqA(2 z-aU?xZ(E%^bGxuc@K4V}UaccDqqs`@7l!UfVYW-Yv>bYkmIQ#OaqtJ-snufp3>3aj z2o^%?H3&}nu0kZeioczMe7y^h6{FJy%CK5H77@cr@2=b#6p`JJDU8?ZmzHsit8s0rr+w( z=I8HwNU)PL3AT<&_cP$uz_&U?&}c{erFsotez@|_vm3_}JR}`MTM5;4o!A;|Ra34f z0gA1@6amquJw}di#uwIH-<+`@T!0I};oOlQ(kXJ%sj(DxVGY>}NJuOjB6kt?VqIVG z8%?r zgl73zm*>zBUwEiF3fxpisS=DTSfvo|`8w~Xtwx-0CdP=xO9u(v~0sXn%;e_gglc9v_Sm<19+>;y$ zSc9%YVWj;6-yA(kZFsFn^8M$eLy(y!7Xn>-!)VxppA+83I;o)rE9HoxhE>mE=S}N> z9cpdpZ}~xG&R=?iCy~1>laN7X5W=rz51&oGlIaYP8eY33>*Tcc5%QOXcoc4`5^E%x z&X`UvHPjV{R>m}f>^hw5yP2_^ZeNbZtsC0_F`xY;p4Y8}Rv*rb;aaCht-C%qrz9tm zItb7{#AS-w7)OY+-RVOJDQ$r+SPl{kh5ndiab*@_@l7}Wi_Ek{O0J|3#P1@`ed2U)-a){Vc|6Av%u~5C*k=oo0Ib7m!Kg%J6 zUI!}fh&WV$JIjfQ);?Fi(?OyMu^a{kClXGsX4B5_hWpHtbq_EpnZ^Zaa0|tUqKl8K zUW)eG&G21HJ@)HE335rFUUQu#ciba-355fugZZuo!moWcr>pWIITg8f<9(sRX?;>{ zPd$K@o-lN7)M{&roHnR8*tmcpy>g=SLrOS%8=;gpaYzfPmFr$dm;TbUmb`l4MlQ(v zbrnG3X$!=GMSpM3WK3E3Q7HNTxjsy99@2g`7kCPbhZMjaybgy`bZCnZJYc`pn0oR> z(E}DflP)|}S`83!ST$jJ+7Y)lFc}VNW9Nuzu&#BDjPHmZ6s8Lf?MW|<^yd!6$)yW_ z)k2c)sHKr6C=8w5Ot)U%x#kv`Mt4U)w*3j-8T|l0?!4#f@dGz?qPFF07Bq|q?MzW; zvO9>xLVF#iCCz`fn4*u=#i%0nA~~ndcrHtUX6z zfbdn`vvfb3Esvr1RhS_fKAX{s(0^Xyb+22syL=r^tjyZFkb-$JXVRg2mr}M`x5XvY zY8lE(ivkMy3(>_km?^zzo!eDqlkTW>!U)*t;OC?TGL2}$=?Mot=j^M@ubBs~JXj{b z^j20TwkCrIEIk$|2J8MVWE6R zKQfM>CvzM|rZ%{gVcQ1*%)=m)>7v)~H=V96yZ;B4P40Hk47E>Kv4JNWuU^Y9PlqqM zTCwZDnm3;8DQ!r;Bs05M*p7~E1ryK4N{GKO0Vj793jIMXrhP|zk63p*g8Vc=G=q`t z-jl9*aO{P}KeTe!Jq}nAKI3&mAJ2Ut(@E}q0^0|L;-WgS{5%=Vr6ARGB#0-_`Jt^K zq!u%=>D#7g9`uf%c5xN`EW#*&^o|s>7F-%UConNcb_WJ39g|!#N7l_QTsaq&?rfb)*ix4#KR21O z7ohf%#Oy~Wk9!UnyTLTOSm7xldmM9Y{WL6xnfaLJ0taopZb|3A&oQ(v%K{f$t2YeJ z$w?F_(S02G)oe*x-coPmp`zo@to|uBM~@AKXJ&Pm08Z{!dZ0L1gY5OVFRl1?AE%LKnMe5pm&JydkClP98I4yK%-g9zJLnY`upc~Xe4?a_u$rWj)446f6lfvnD zS3tDLOIV(u`@=F$4o!8ia%uX_Mm1}*>0B|DP*pLsRCr;*bl0Dlj#h!5C4oI;u)Wcz z=Ub|bAzPge>6*p}?r9@bWC`tSrdRz9At0b=cK?jKR;b?Odd6(g<%NFZtFl@?Q$zFo zPJ7jS+b{2JmMI@VqUQ_!CVsxU!}G8UaC8PLZcv_UxSmk?!=}iv*Ed2#~(0AU8t~orZ02NbO?UjQM|BQ>quB=PN#^*$sKCxRK68B5w#5eHBD;Q z2QO$w@LnnZ|A1v+n9&6v$HEQ%y2B0~T&C){+~-7fQ*IFd(qBT?gd#M)cfH=C*Cks7wx)8G2F0-~&t==9K*9M|jQF}bn1zwLlYo}btfe&8 zS~@yCF%uS87WEV?Vs4CFPPR|*5Iglt6qDkZOiAb1DmiE)^GeJ1nSu5=dFHIeo$5Vw zrc{V|(vPEokOGX-knlC}UY7`aVwHRKpHoH>9W+zOX$V!0I8~QDGciglNJ?DNj5frF zE{dKCXi+?PJQUD)RE|@TkF${rM6&0VkrtIC(Mtnb7k_lJtc28j?q>1D!v44?Q^A9K zIC@S8Szl5|gUvgin^#Z5IfgZHp{GJzFFiHA(V~rF{v6m;|F$N3qvuT(qw!zRRa0+K z#18$%dWvpnI})QQ-hb3XvGDj8Re6DLAytaXya=+|FC>&NegRUvu#M_P(xTt0+>g2P zi+Nkz0VFdJ>Cc1T^_FfviGL&GHaJ%85S$ZD1KHdh4X#XLtCm8#}P&O|lSE?_XhoajL z!$NBkR5z4)Xp!rFM?iXL_JQU8IlI$2QxC*Iq8OR6oz6SLbrfB6p6Hm}0sd!NF;v)M zi%#`GjSbtT{o(6)ubN^{nV+SS$X@=Hggt;MxSNfki=cvl7!S6x38!= ztwzRHnQFZ0BswC6jthJsI$oy<*hbtNbH9RlcwsWlY0ZtK2#XkGhFc!kNrnl+c?;tR z)98Bh5}3;w20V5O1C8>*OG8PS|0r^9u+)p}!v(fWSGg?AitHamXq*tIA=?0R=8YP) zvx7(nt#`8@Fk}#gG9c#7`CJ4Z_y_{Zm>mU6RCYET03*XZicHQ^%y*=`+S{gCcr|s? z74{zLiTQA`l+5Z)=6;yi!N55Ox+b<|7O{W*OFlclxu;HatlNcyTq1tJm1a)~F3t70 zrTU_cX*$DH{%rU5RyKT1eboe`+!UK+_Fmy|Hhg6LeFhU{%Ev#Bi_WRcDsdLJES2^r zO^AIA3R9aQXQ85#%kC|@G)^&{3d>KL)|RQX>^xdR)Fe`6O@v0rDS5g_@33XMoL#em zAJ|RyOS-wNHu;M9szUOfjlqaua%2nFi+No*_0ptqk0m!N#dUDyI_ zxKwU4Ks)JfmI3%uv<^gJECy(p4Pl#;Ma$R4AFr$X9&9U^7Jh_TIZA4Nh)5BIY~Y*m?M>Z(%BcTsImwr)EtKgP?1Hr zC#MO%VWSiQ;F8BMkdp-%>PJ|FkYG}HmEfa6oa{K`6*R9j>hI(*MmkuU+5l{gE-R88 z*z~dg!O2q*@{^M8K;)lR)_0g$vRiTdL^?Ghqq)%xdip5UvVg#=gTD9|!<6h&0m-oz z0)NcwNCtA*g%|~`gQ$!~LY-=p$H;1V99ac!sfe*=uD26yL=L=3#z|*WNA1>6PZH{f zXIvs%5`DvxOtzHgccwy_Oi_bMU@?_A67u8E3e#f#A3)>i8?q22uE^k7q+)7d7jXd6 zq;Ez?MS>b)4Io~Iyf?!!Wi zmbuTV*S}&rYQWswCKJ|d*=3oWay*l359`m17UoWd<6IL~aeV{XO;lk3s1*Ln5~6dQ z_t9zN_IwAG|7@UP`dkYQU>-~lFE}p}^|crSS?<$W-o}|8smg^~^l`*7b_*?O9G6b& z0YXY}H;yT3E}>E_R-^qHel?gyqI#v%?cScZNOCk92;0egC$0wmw`TmWk!cXJ zYa-JH;fwmLdQE{pZhGtJSFg4M!GE?U$ut0uZ^uz>Dt+i;`2#G^?OXCg( zOLK6R7CbeR#e+o_2u}Bm^vkk=gH>4}#ASh@)*bcl%a<&%7R-s`-_Qd9i;}XU2KBx0q1ab|K@0ncj=p}1n(z{q_Irs}$R^NlXh@$?bxd>I^%@HjugSd$pCO%&T zM{xE;Sy*vmyD%-gegt<79zpRxkeC1B+y)05tC*2fn*OuKK&o!71$+#}{YOU{Y9*x%}Hc83l z?*$}fWpQ^N6WhG_DR)d{eiABPU=BTV8wIjug0cbO45VvwF>yHE7Zy3ZNQ!VNCf1c& z>hcS3!O7nx>)IOFdz9qeck02!9h!C=^B2j*XUd@%TvjR}GHDm<$dlW&nH(o2?%%&sMc9g}gsSVOO ziIf|agZp*>&3a}VFeGrwN+iz;{shznA#a@3MUXer{a}M!Im)czx^Oue9aSKGwo&B) zUGZnB7>ID>$G(?OhN+a37C?ff8E8c86)fZ7TwID!O=as8M(2}!)Foe&e^q@6DPwzq zt%iTk=k!Exj&;W_30n^Ake6nro7Y|DFR=glOvQ|J;!Gs+>AD#p_Qn(Wlw*Q&fF$A; zZD)d012N}4)fYIud?jbW1=B9*^;`qK<6I3zRH26;P?ip86Y_YNKr*0>>dUvS-2EE_ z8cm=di8$L7likXkqvR^KvP8lnWV>afVVh?99ZQnz5JJqGQR^A*!<2OTM}!inA_9_R zlgRE_(0(hga_BxCj4E#$Z|6S!qx~0ETfOm3kB0IE>VaJ2Ys@A26<$7Cu>)JVf8&!|r#wV}E4w~zDXpi_=B@KK z(&Ob-?=K(w*Ms5cXAH4spKfmN{<{0@`8V7thxwv&+&l$9JRYa7)%; zqw|lQi(Q(OvYCj81VrZ+YQ#ZlL)bcVq^K?f_e^4309K||WKRauxD?c}xLE|Mc@1=~ zpqGt3-{&^{v0>QbN6`(zy=*VZHU7T0anLi_Sur~Et0Cp5I%uK6K$qEvPzezNFe12$ z%Ju5W>HA#GX=%5CC9`AE#OK-TGm3v?sn!r)^ zc@8Yeoapo6aL2bOv_zD97h-?s*JpMT*k4$q$gGs0ihJ{>1N57_#*x`y1B1DM+M$z% z)HZlOZqQ3k=~M zu{-QDa~(iB)x^(H_%I19AZP?fVLAfJqYCb0bEG^wh9X-bj=&s}cy}(BIo~B_NvT*D zm{Wi4v{2HSp|AM9ytOjn>}2G$JTH~9-JfH1xir1l?f1EP5UpIQ%L`IozEzQ?gav~C zlXlyxFi{+KZ$s=BTf}zE$oZPPpm$Na zIG^e+kSV6{eQtSRqPX$%-0bnk#NbG-tVUL_V>|F!zMr7%c#5$nkM!wDwBL|w#n%$= z*Xwg%N{Y8aCZA%jR)^Hj+0gLI*01bpInwN7 zmPIPt6c%u^n3TZio1NQjF`7S`QdCvU!E`0@D^s2+e30S}AtdNMKfPh4xr&(RsonbJ zt7H?&_B5qvuBYY!La-korS<3PP!Qg^awmvi{)!MY%va`#B7+GsHuSjyX+vz!Vwr51 zOKMItUi4>zgmIq_=~3FY(A$st0)|Uhu4D(@kOPzOep!jRylHn_zmxH0+PHTV9{)7 zq+o;++7UFm2BTPWi)^u{!A&G%fO`KtoSZhw0eapHE<=1NJJ;zIu*ywLWLtOXWO`+5d|p2mdg}!Rkpa{%*|BcMwJZTy0jykk;)s6+>FZTYgfIas zo#9$kIXO7Z?fIco?;HziN@YjtAKtN)wBctxZdo0oWVBrVKtSr%t(KGgzqHNJZ!Tbm zbr=xZ+Z+7Le^C6Pe6f5ds)dtE5i3zn!H()nNB=&*%gL)Dvu^L9S5<48V_o(QlhGXV z1l8BWCNu?-gTgbG$Zr6@9g~{ayd|t6$~0k+R*O zV*4D>0fPjjq+O0Zjs0TD1DeV7BasZe>r6(%l0HpopO&P3o*gw?T7N&OAmAi1eWl}5 zZFG5gPOVAQH$Ehvlv^dKT;S*`@xyV!Dp<-u$t*%zR0 z*BqzhS}M9@!$h0yN!>ce8`cm(M8ioZ?S}JDSWx_nT6iP9h={}?*hMHX&zY=^-DraY zc_jC-4kRW~lO{JN`71R=OFHnn_1U?OZK!!-(OQGGmPKr(*6y6*B$PYNTirUtWJCye zZsTmEF_9%qSUuX>+~Vw$RnjrjJMUttW= zaV3VikA4A|q$89y8T2}wxfDhmi_ zG`mzjDtwNa;iQzuooWVvvJ7B#IKO#qL)dP~<}F_$ zZ39&})LxzdNcQTkq_0AC4%^cF^Q1+x4DJ|;uW?@!Y0XefXlrL>18#p){(OBL-NvPi z!C5{vO`-nQ1isLzC9(@rH56q1W|TEw-qNbE)K8|_$)~2nw*z5^Ryiyv&(F!{isE!Y*pk!@)OEw9!Xjrh$)o9XtI_BD<1QQy>F4pBRp1XB{UMzi55>5I62G87 z^93_q=`86=a&?BEAvp!hxX{Cw=#n{F5_S~}ChGM;dDIR$g8bEPjpml-0JX~u6B5T$ znMcd=Dynr5QlbN5yq&^8Kj#TgXwETj!B!pDIBejFnKBZkmhbdH7n?xAuVv1QfxW2H zGOStN6S@o%=hIw^=BJ@P%1gR0TTUO3o|rm;4FHGrIa45CQy9bbY(Q27=CO!q(6*^= zZ=sJgXXioTXv;6EUsjtob>E}A?i`H`JrTfLJ|0)n=%?Ozs^cy#AU2%kt-49=8SCI$ zc@(W*L5OrQ?SDyJkS6<1{qzI}sQTM*%jHrc;M||LjECl+${)69ff7K)NHT=Mj%rVi zEAC-`pHmZRF6zg~TzkLY&>wu-^%%Y#mF=m1RNRjEvlE>i7AxEKcPDDR*={zr zi3ahmeB@qsGB58-jm+Cop_snzWQ*~V7TalNi}5`z_NH1nway&WPLG?#>e+S_o_3O_ z-Q?+6#8p0Yx>~_7qFTWQqFQ+tRd(y!`olm9wFU#>uX`p#i3Sc&>y1e90|cb%`{Ql> z*@+Q#m|GZ)JXJF3(-+ze@$m3mri)=rr$SSZ-0 zY4L(KGnN~{3}bE)NM(SGjcQ%zwjXpb?%gmfz~>NyU1zB3P}eHV7&Ovl%?6SbCM_-V zHImt`bL7Z16}SRs09R`aW2Jg&Ex0o!wK*eRt9a|Ck8V#MO-jWiJ6Cboxtzk2uq1u@ zC(kM@iNboz^6o40dwZaJOL&KQHc?#xg;TI@(@IJ}TNe$eLTfTfP@t7^4QAiv3+|%j zl9w)%no!&IXHS?H=|7x8WLf!Ar7pMAa$vX42e=?Ezy$yoNfZr{kSyDjEpFNj$q)gEq%7LnB1-X+HWF8f zwicMAEXtM%kl+GRs}(!86UA22q{+)m`uF=ceRccNXShluw{>kd?R!o8oER$8Fi8^& zuG5OHXyX0O%)J*EAV|utn=fDc?#019cjnB@nKNhBI}4p-F=v=+S*wLj8l!$17H1-0 ziDPFsCVVoH#jq2K@=h%l-uzRJBf=UeXg0gUY{<%zC4-6>+3u}P6%BRuTN>!U$zO3_ zDZl}Xx0d4@+LLb8U^{0rpz;0CT`MFo=WNpjdHePI+a2fDbCHD zeyGvTOq9m*Od?%a`s_E8p*iD~BBr!NOAS+_oHt;NGK1*n@G}#iAfK-gOs`CJ>?PA+ zc7IY*Ap=>abVwu9g_x2O8OY{|V~XT5rH0N+jrInD*Jx);k=guB<9BD%y{R=)nsid^ ziLd$Gr^RuGd&OQAYl?k(;gDjf6AIUYnU+e)mdQdX*;1@{Xqnt77U^zML_S+IH6k6m zGvcZdWk@`YMU5zf)RDMob84h%MHw7u`6P`h16OnVbpsw{BGH)FCFv||X`~r=qr!Sd zEYmb}1`YX>rlm7zGO#s+=0^EZRDp|OE>C6>Xi=Y!9gT24o;1P?nw7$vMwmfb4R!bI z^xuoaGE#ao8JZNk(B#hGo&pkXRf4okpGq(bt4SZ`la5~vX3kVsi8An#R52o&g`b&3 zvy}m}@ssL9hNMg-$iT-;f;1i|Gwa$5YMj#qGYeIkWHL}?U}+Yr416`*7-N~pGH{ko zHVbQ+$TISlD%uQ*LlM=NrmCuB^bN!_GC_t!NF6s&Q!8U^(|w#ZzL^L!@R-ubQbW$b zVn(_Q9L}Jdg~5z;I{viGgE52KE4J^b*zLcYal@MRt14z1(m+c(B~Lxn?0RR)iy#*- zO3{@hL-dnm+6(t>_pT&ao%TY$sV|&t^Cm=FN2z}&V%Gw4qaM#5>u*UxfzP!+O^`n^okRQ?FVB8p6PXVg?Lmy*U1|W<9HG+=aJ9k!f@r>mg}bhBB8xoAi(*--HEBe0LIB_aru5=uX;h)+X7eO;<{iG}18* zV)Yk3eb8r|Zg?p6#HTO+^qr5^zJmp^i7W=LHD>EELXGv@H2oa&62zPW+CvswA=9qb z9XJV2m?oXj#G{$})t2+=Q<&Ms&l$!?FD(d?2Qh}hapFN?tu}1Voc7v~B+c83luV=Q=Q9459E7xcCA#P>Q+3Jx3G| ziBj1oca9XIQ|fgLBF;KT*v=9w`IJPZWx9NVh|Yh$ldL}Fd3q=W+xVuew6!R9hvTvr zA2bx}xr1+qmBn`#UZ6e4&H)Ep4e)^cm zH+vwt@#6!M+D(Z^fp#9o#=6_;Z#c_v(s{LkQ_Y@jxHWj^pTCj7v>=ai2qcYzVbt0B zY-htZ@P)P9geY^(LEUi#OW){$Sw0F45nvh@`Jw0oB~Nca+1-u%GdnvX9Q12kjh|HA zLv#n)dn=%R_=>88vPZYy8{gsr#||s`w)x9YlI%nlz_xXm5{qf@{LE6! z2oSpui(qNiD{TNN)Fg#oTWC&7dW>fU%yq={1C%sck)iRX6>DmFhuxVf_gB)?Y0SXc zUxmGoRc^5w7z?zy)+^5EO;K#HQQ?|3&v4t_n5>PH60u|z8!sbplz2To6jjnSC3K;W zm>tC%x;!s%w>K94F6c>>C`i&(h1g3^AI!<(JC^Ve)C@@y?rG+GjPdNuxb3|#)zXl3 zK)<(NIc-DhBK@EuyrB-0sF9!40%wKrVP~ckOiyv*^534|ANJq7Fh6)OS)HT(tf?RJv5f#eKN~?m;mQy38L`E+d zUB2ta`V;I$qXo8eQ-jOjw7s%Mv>dok`f^KU>SIuux~8=^8apD~gGnx;^wcrP87Et1 zOGqS?E^;gVwQ`F;zr8bc!7g3&PH{{H!>hKs*|1=#+@Ao9}cfg^UZ0P1?ao#}404Slhl4 zRWHtj%;*Jgn2}Sy4O%h-L!vZ;9xG&4F-c|+mM)R6)Awi97>K%v{8_jKmpYxUjg6yNT`-RJO46^?@|MccpTfXigW6*D@=;cx{lE5)u~O~qyU`0?(CXf` z{cavOEi&q)`Sj2_QY|7lbfoR*!FDAe(5hRgYUK%KMU`u@Sq3>3Waw$48diF^ykA3h zY1;}S1l9jKG2=_~4zbiGc`38M4q#g$(V;=7hsq+*q*TIu9VVDcvh3fwb35q-KiZ`` z*`7ljv3*jKTgI@fiqh=RZk#U%Nl~**QEgY&UBGia9p+MF`e^nv)DMDJMtm+W;(>1y9JxORkbee6a1muT`_0Y6^>{x`E z|4@Hg5NM@b&L?P!L)bXcMvaqF{0PT>7iRalYARQ| zwznT^5)0&ZCgJ#56 zr>1yC=k%dg9jCr2}nMg^7ZipYdh4CH; zw*sDID#<}R-yKv87PMo>MzuaT)Y9J8bFh1FclSZQr|w?vm>*GHz5+|`8Z&c*Y>>(p z4MOO=(jrujttK*BV4`z-Al;T^ieQmx^lo_14#u-YO-(1ga4DN=JU~{;5kD|SFAoR) zVd)|^lXvZ=6Pu8XM4ptIGEkytfv8eMGmBD)PH56Ag{+QtfkJK8g9?UfH!(&bG-lS$ zv#{QRWwFPo9YP0aAhRlCQaJaS4^C-%!3T7>-Y8+t+1LcRuVA8o z$U@UdQyuOrz7{H_S&!y~?^!~pLy9cP>2&2S6)t=T8AlIbFs`dYOfVPKpc*V1Ahh%q zJ%?j_PX949L_|DjBor%Yk#|G^Oi~c>z}O8v`Mz(G~0jf~7CYDIk`O>yJT)Cs2gT@e)JOrheG#UIZzH(R{Si}-;Z1f{qU(`HNs&BQ%)rFQ?m1?S` zw!$b5)HD_Ku0E%tF79kUNM9O2q9!s`#dMs!7}tZ`Q_hy>xn1-|xm&dfqN-~JuM1Sa z#L;P@Vutc`9PL7ZhcZ?uT?I0@TBC{uN>t(CNN=@?L4s~ZbFlS5*AZ+Zi@HPWCn(a; zjwf{Pr!+eR5kfCcGu1>eg;8!Xgi#Ja}%l-5hqha|H~ zUqNl*rZk+88E8z9_iFk6xJN}vt3^g=0RGWFMnX~MgeK8Oy7#ZGUO(sX0rh<58EsYk z*d@-?Kx}s)J`k?5;6V+8Qlf6x?y9<7TdV4tc75of4keg$Z`8=o9IMa=j1~u-&@#(- zfSz*R0SG-Y-wEypJmtOg8=y;mAxR}xy74*@@Xi8H^;Al2q(x;@FLJ7?&?M7$B2@8V zS#%2;*h&aZbY3C<%9IpG`H@a6Am{0-jT6s7-<`T*%T?ap-tPL1R@a6NYTKk2x`!2b zSO|^75Xf`YH+`E}U(hQ(OJzt5dbHAo4hM>tq}arGfzoVNBD0x)@8B%}Dna)j<_8=> z6gXmrT;rRC8glA*jpBZ;;TnZx7n)d^2k{kxdW<0|UneqEQ)>8X&qh?(M_PIPgB{}V z-2tT@MnjaomA3OB*e8oeyE-sdg6f4I0i;A9-?EXl8C=9d#o}`wcu4>C;!%) z(Oy{b)|DUAa#F^T^rmV+8T@P7UIS;!Mljs|7`4IGF*c|qMvRpKW3h7q+9iyeVF-k* zNXe;IK^4svSgpdu=S!8eLD>%oextdd^udy6W|5>s6e-!&VF@+Tf=PcXUlFd5iD6gz zY>Y3ZT9~OW>Z$2~Y@zt4@-l1FSc%pq@ku%PJ(-Jy8VbZWh}04Eq(CO-!`p@o60ij|MijOyCkxmZFM5y}5khP0zMYu?Y{wg9hnVlEkp>174|PgzQJ( zwCD0hVTOp&BMS7;m!Ty6tSY0<51N_xbT(?5&&+?A0hHnr`A(S+q7Hv)Qyv7VZYBn* zbKL-^QnFwQ54Kj>bT@pZ)SoCr|+O=cn1BgK#WjU0c znW90(P?8e;1hGApI7oy(WKe4pQ(=(mDP+n~BWO86<&t}Qk+=hx`jAEp=^@MCxEoz< zlNPC6yLQk_AwJPV8~nsslH8P!&QKOacH)QRQJz!B)OT+6@7}y)7b(ij&NpPJq`Z!d zQa+ieY4ee^76Q%ipl|{hl}7jN5W{pagfX9n395O^7sWF)eP{m+x&>p>nzpKaRz(Ms z{6jD3dk-dR@LrnUQ6sM#H4Sr>Hz@k9SH%@f?_|~#(i6>|b+&G!nww(JGqX0TC$a*R z2#QBETDBDqn(%c~3{BEIRruucC=TSrKrcFwm~w^sv$Kb`$kV1~bTi?Y{*&#f49zYb zolpkSW-9ae`DJ1&a_XQr>wQ-oaS>L{o=D^sdL(?S07?^V2rc5ys4s!0gXmEtho6M; z>>e_#I;J)U9u+l8jlg9|jR;KNB2}b;YrZyFp~LLFIVmysPoX4Cq(ufl_iVoxXL)R= zBV3W~>UPxABK_($_pe~L4{sU1mS@N{NG#COeji4o5WfF#+v7R-cRQ7peY)h$h8^-NqjoeAEV3;VBtRn#C4b!Y**AMffy~S<*HR{ zlGgMhVq>&w1X$!l>doClmMTHENWbEuRz}IwP~Whcr;*}^!N{81yJ^NNQJ`&2D0!jUFXZ-^HLKdw1YDi{?PL#usrH1D z{T(=^`hGD76x_VNQ8E~aEka~=$8t$BS`5In$*FLM`J<{uPSQe5O;s)Ok`{}L-JPC%t6g{Rb|^oB$=#eqVHZ68tz zDTb+}N}ONcXp)TS#E4rOv4|}ZOKHRut5jkoo_%(iHMK@r6~_(janW z%M70H5e%J=MuQ!w`WcUfIc&|?D#*2&kHq@B+MDr(P@I2VzS+Nh1>3WvkOFIMufXwvovj$7MkfnH2|e9x z6B*FiEt<)mC3b}vEr>nzX%+5oQH(I`gfc*wHmIADz{I5z<|~BQx`)n~^&jlvN0njU zTYi!)-o@EvR5%V#ZbG30#;_X>cC!q$gTt;K8hB^mpPRV!V?i_-6TG;TAcz>v9cq4X z)u9hLdUDNh&k|cIS75kN{ql>C$_j534W03xB{wUsnxTa>6ZUwjJJKv}%nxDHyEJk2 zYVLu0(GfLV0(Be}k>6u7lh>R8A6L4LD-;}OdrY!oOKmIKR|cm$E65%bS1`EbyT>pn zRS#rh%2r$)>DrGig&yNyt+=N``;96~zqcx?k*( zr)s{kO%uH2wKFlqhgi3ZaYTIMq48E_RB?~Vp@d7DgEnh^?c{IjmQV1DYY+SqWRxM9 zLPHr91Ux@dU`M++!%a8~1AST6v>leWD}n5%>Brn!%+2EzcN4`O3WfNpaWZpTORL)Skwffts0%&c_mldrZ9E12;JE2L1Tm{C|(BQt_zmaMA;8zDnad zNBQ#(`KOg_BC8zjY-4*MYG^9cY!;JqOy)(+=-9MdX41=C6q{`c|i4tUOjh7xsH~QT@JiSK}xBI3eWTh6lL0u-(*fcjNXs?8!A6 z6LUG9)tcPS|lt_OC~wo{pD1lJAoP-!vWvuSH%-Ru$1WX*ZcWFdmynPz2_ zvgDk+{K7>`%5GV4N7dT9HrCzUxTEQT=Jx#$A9^Gh9zFT=Ghg_vuYU7)fA8g2{^ass zy*>U9KfU_yb=q&N0*%g;{l+l5fu#b}aYx0Owi&XpJJQiXyMxV2f-0oF`Oxh4_=1R9 zYF6jMdPX3R?WKhVbeJV7Q-PO1$WOE^r{k8e;cbRJca?7pVy{gMDxo0a8}JHL?6^h} zsMz0{x*aTHO2gyS8AV+;JG0H`oM(=S-Z>w26<^|Bj zm*|qtYOVN^w5Qof6;!EiaIIOXDK$Dd_f|CWgP#$VinLdybF(ttSoCSqjg_v=gP`RN!{E~aNJW4Cmx6E2|Bv{`mJ z=8j-e8{Y(z5BDCRJ#Y`>U;tjKiR@X|unXrXH`bxN)0K6Ur)SvE=#Q=iBfiqplvf(F zQRkDS6KNwsUG0w^p=l)L;0eq%sJm!(lb`xES9x$SP+Nj$; z!xMx+<1WhAd`yL)Q6dDb4D9uE9mQ;@HhhWWF2RR79{%B6s8QCp;P_yTIL&<)Nlca{81Hd9KDeO>|w2PyLXQkyN7)eGW^M>6V?j~_j7Df`PA?!}mEK*yMWYnb;-_Met zANbe(%1o&~mm{n{p%oFBQpD@9m;8+!U1oozjUGAzHr8IA0Q@>*|y^jFPN` z-oXs>wrH13ytQ=@l0Cz5XU*C*$_|^pg?&o|(o9G21o1^#+V zFXeZ&01?xI@f8ndbUNm&zTsFv^#jFH*Eaq#zfbsd({+eXC{&mcf~l@)X<65NC+l#x zcC23A%GRx4x2FBh4%XVzvZki(&WbLqus|>f^`}wwX(kV7Onr0@8 zDx6Gqv&p4xF1cj#D3eI$^hDLB9ZijVw_1L1@R4q8m&~=Q@__3`)aky?&7Dc-V!6Ry zQmF2aka*1l%lsx@oZvO8v97U~AX4tnI+phIQ_BtJ-R+SzB|pdsTBA!-wbq zTf4TornRj@RZ``Zb+)&+yQ^2#)L@1TEdYUH-qMN>37CR|?Q>aYM=xt>JzRz9Z!PWY z(EdX`thMJLYd+N7c9hY|2aHj*wbQ@_YwpHg^Q;+LTKCe<#Pm3Fq#J>wRgJD~pnLDp z)*3t>!IM7@i3jMCOdOz|I-Ogwrg{&co)u58(OXl-DaVImIzq0oK zoq~0?NHpnd{AU%&qAW-nAuHV#I9d16%Cz%JDdk%o&NPw^F zfPgA7!@iA#TuGAGOatA=glXW=!`zmp$uf{2RWYHHwUDz)bgj50f8!W9r3153W$@R) z0gMZf=RjJHaSSI>s0d$o#(6-q2M3g3Y)S;$japRyj_J=`2#~u6&UJ+QdZ=S>yYL@a z7spz9aK1Cgy1G>CP|FdRK^b^t@uXE-h#+BzA884XULYw1m>uZES8_x;P>HG6O0-)K zSMsWkB1o<&e&UJf0qH*6rg|0N%#kJMjgY-UL)bx_2uGzmsR$N_wcukJIqm@KA`%@! zu9%y_V}g-S9C@Y4rn!CZfmOo18+hR1y;`av9dIfGc}dcNYo6x(8_8Utds~&< zm3;5wxsBcrwRW#p!oyql(Y-BcZym{Z9PQGwSNGofNGE?KX{7NAzHzh(7ucbPp(j{& z2*ngqz739U_qg3KRk@4Jg z->PbMU&GFdHR4fIy@u^T508IvVE66h8~@Q0`|aQW365aay+G>f?%hV%>I!_{V)tR~ z32hT75bF8~JGi6mb2PUVn-z;4_rVcd?}ckRmO_x%@7$>qf+*F&_qyK@H#>;Wws;Rv zta`c#J%%p>c;GDgZfq=%6~pv$2%Q~@Ym z0LqTT?FTC>adw}Mh?K|$t?t1LZVFj%rHdbGRPrr_v(!pF#flE4q5Mu!PO-pAE!<*5 zS}gUl#Gy~eQy6KgQx{H)W+{F5SA~m!gaBKQ(j;`6K#>w)lP(gxF%MBwubZF#uwzf% zmc5@`l@i!4%Lqv=Wac-*`>o-?vgTCEW2bvEm2hFI*h3th9^nzZ2rHlcpd5ezK z5^~FChh4QBX&_$=z0Ek-An89Q`5!#m*3Ltup}K2Br4g~9Vm1{EqZ+Q$S8`Q#BoD!d6&hFmYxT)^``}gkNv)zvqdz#phmWMbYM?~vn zKc-?KewFP9;Pa7#DZwMsP0C><8O-^|yQA1ag`Z(XYQuY(tO;7TX;(x2F4yk+T{}_6 z?4q?#$Um3?)628brroYhn_P{U3x|;~zD)&2D0gjk(Pt6Yj(f!b5p|GY+JMrFrp{0i zf!%^y#nR6zIv%Z!AJbCRign94p!LYXitTq-RdS0eI-aMZ6D{A0W9!ybAo%^qRMK7Rmy{8Q6)rAkDenBLp64yqjNvLSpG^`Xd|xnxAh!pu0U~t z{d2&`zi*^@h=;Haj7s$CnpLaUtX+4fd%b^CU46r5hU1mlcK>!%gLFCsz71|~-u|m# zh$H}h)azRndA?IC^L!WaRL!>HJpgzX@amxwUlewK@!D$}v;XF1&!XS|OZTzY?pXEo z(?4Eb_TP47Gv@L$_Ub0)b8dEh`+sizvzu%W{?4C#p@;nX+;epOf%oyE-?{tBV}ss` zI_E$B{kjtGhEvslf97~Y?YBq2|IGjYy$hbzU;Wzuy7^xk*KhplFY7&%KgsQaSQip_Ss*j`)9bxUXB)5-}dU3<)1nK<$M0i?Y}i({XQ=&G=~Pxkig5Uv@r?QXDRRG}+;3{m?Kk!tuh>EZp-uZ%`b;az z7gx(sxMy+tN#Yk}cKle}OTVcp`g!B@BjYHO82u871b4`>De{72i6j=~DCiRK92a4e z8YY~O*|cV+IA*LY5#ol3xxf;MkOAQZ$(J}w#F#w>Y>EYAOqv8XP3*Bg3WH;1goVlw zoIM0AYEQw+q6{wWV8IK_8I4#vMkH8QQw~EDqXt5*=GEmGQhnTR9 zk*vfeB`({_q9km4V#MaXLc&fYWLt3j4TP4MmTduPgs>^uwoj4>o7AwlhQ&0xko>%G zJI$mi_y-4ZW|$OVD1pxX2m}&WLXO~M+0^9wiT9%J#FTgXgUQ5r%$=AFCa%6@lj80e z>y;psBP{$9umEBGlfc}B zg$Q#Z%<<4P<`qWS=8(g;fV9T~f9SmuG4Hj=J3s>}+ry=s9$-R+#C~ zr4<$2jA-lm5x{j={Et=J2RkZg&;*|z+AuKPas*4EHNtI;yD{;)6<-9}lZG^Guk&Fy zKBca7t*WkBk2Q{bNwDVpKu=GgdqY(fR!bZ>+JesXp(^?w)JtnDs>C_OtzcpXJ+~qo za>8vZD%2QZs=PpXq%nNZOigiY@6)q!+0mYk3iq;fYnoNDaT&FXX!+|hYA@mo1jvtd zw)Gs?DCQ_((h^>1NSl_i9;`q+{$TsY8og(H@JFrL%}$y7%+QzY4ovwqT_>l%T5$?RBwg014E3q%v@LzqhOT*hYLkYtJ0A z2$1>$8<%xrXt=!!ZvK5a@Khbp)WFknr0uva$+1BxU$ftO5b}e}#jB2Wt~XdAgJs*C zg4CfIqk&y%G@R~0jY`IoH3JDJ>pZkyr4!;npCOsLAHVo1Q1#Mjp$FZ*g9mHNeZIze zpKpbyO1x{js5*iCYLX(;OfkZ#2n~n7(;T5$qT7@#GghK_*ngnsSUdf%#H@WxbEElG zT2aE+BOQlExjbkdWBG_K1A#wbM6Lbyt_*AjQn~b0A>Go9TDsB zJ$z8^uHdKj(kS^nQONAYGO&ljZsRhftSDMH)U0hkbOU~+`^OcL7^3cK#airHQc-<_ z-f*w5-UBNN+mIVkyU_qF(!}T6;&0lr3zHvwJ}4n5YF!U+shV4m5)yx7n zwSl9S^XWy^zf)_YzWq^j0MRd^m56-0{+v?&Pu|=}Hpb_alA4Bd=z&V2K0mfvNu($B z*FH`bZ!jkMShOCYR`;(_bAmceAE!*xbLhXN38-Yl#`=$w!T$(}wyj~?j$IG@`X=0F z9OQvbz-a5_|Ce-XVMb4%?~@I?ni_X(|Mg8f^t3VGOPM$M|57hC^_m*CH|^N<>zjB@ z7`4XgZmf!+es_8IieGU8&QrL~VLgl0Y{uy$V3bVydKLp86|_bOi&kmAHWrO!Zcyso zq>j3*n{U)*i}-+WBsr9?*A>oCvu?;6p9C;OxpS|-z8(rR3p=V0G)4{wo)!$-Xl^`J zEtw<1!>VeY-SXBJoal7dth(UQ^GV+>QpV)xVKs$z_8>k^_U0K|o`>OiTz|AE_v}2DbUfFUAZ;$&_W5Emq|tUv^Gz zp3UyaFDNWpuy9fF;*y)3OG?XJOPAd&2{JZ}d$@*Iq4>H)cVd7S=!;8Io=#~%c4&Np*> zzrZ;?O*%lNxOp#d*^*;?AI~5_$}$-ec=iLbjAnKn&oG%Ah4~wwbNNQL&0hg>M!zAp>2+tMx za-y;3aPum{%{hjD1;4Q}Kb9vl<2|Pb9pW_aR{1N8Mf#)dk zT?bs1VFPfJqGQ{EtGaQYFz5d418%X1cpU(qZOCROq{~CVC8N-#hsiuU+i(r$y@V@i zGz#3Rm_JRpV*X{F`HR4_6xsd(ncH%>KYyyD|2}XjPvnaq05|1}aDU8cgbx3+j^L1;Vb1Z_h#ngk(Yy#u zg4oh`_3f8?e2a(oe~?(6dujD_;<@4GbB?mIA11uv=v0|?YWmu{F`wIUqWZh8@A|&$ zI}uuc!B8u;8e2`RxwRIj%`kaa_$99)R=fYv@pqi>U7q#^62B~Nb#|X|kDnPBVdAd-_um-Dv=KQ5_=gw^Uw%7R4o#LBLhu4pNv2r9E5+PTyc-L_k;#{tJsQo$^jh2Rh_fAo0TW zaJD~!BW@Ge|<=*$E%R-5>Q?Yk!u|ApqY_Y3T2{1G1w8_^$ zh{gi$vc#nR)oEk)k@v@6sx?I2iL%(?yzv*_{3r6BLc$Cff!cs#5{z<9kT_%SILFTf z-myog?SToK`^xLKnEpZ-!7GW8>9U^(f4A>1uHX6dx1aAj{{Fe|!Dq zJ13@sBk^gQy+2V3@1%HHXiARV6@K0mjAD|`3)e@$!==QvshCp=1;D4C?#ll-3%c0# zkVT2`JGR6dJm!de+-tvnIo@ZODx;ZMOD?~B1#!L%p(Fkf1R)}ZuS|L=h9HRV+iweu z=T=|3u(IC@^tm{VS88 zL{gRYUs!+HhDkJ2>n|5ydTE^;4cH)0nF&pb2Lgd!H2@_f>=j#NHc)k0=1iS0yA58TjuUrj&Av$&J-8f{h&0?^yS{lheo6zjfG+R8LG_eLOL}esW^`g)@EP5x5$JOOgGe zrDYR$fwjIRuLnm$SG`yHOWEs*|M9vMin$T`2b`2bC(o}Ykkj4cA<7N*OHtpw-`UY|_{SX``>Qd}?R7jK#e4LTGmKsQ zrr*2rzlb&!wTZ-KO}42@a!nI3q;{0mnrrw8o(lkl#f9vrcy0$cN(+rY#&Zm?WN{g% z`3K-dix(M*p4t_XRpxj(aLdwMiTrF7xPkD8fM;jhjD#Np?r;4A zw$A)59lZ^8nd;UDTy^`XFz0T+23#t%N|=7hs6Lg71y1#8etwaWX5IaeaBC5-Q~pV3 zz6kY;y`+%KWD9Ut*>WzE?*Ly|vWVlkXw(*#EaEix0AE2&1fIXRi1T?0xV12sn|}$otuUYC-vKT!$~OEAe*P_R)z1%r=NIN< zf-+;bVz%kx!o?hK0q#)DBf#@-5;T7d++LW^!}>9B6mkd5Huef0vdx}&KaubzVppP0w={x@nz_Z^#I*$G zlfH5(RK3rf%gJRTmoV$t8~08=?s?BSZsRu_XYaAcSun(>)AmVrNgfxsy}LFz<(;(0 zBt|#N3D(PEc2s(aD1wz)!0ndUrBJci$zqR0rIAx;m&90bm>DJmNIfaa+`*7xWSTkM z0d}cBYAZIgShQM}rBDE@h7wV?G-U|MAwwMD+oudyVrc(G>F-L+=3&P|a-5yO1ZC+B zXYcXL(p#~zGi)+ux3NInK7uB~2bU5ydo-R%{HxDw&dn_@c2}bw-4|1@eR!*O7Z>N| znlbOV8Yo(8Hk(;(rO0NylNhCr{l4QFV z?W&nqtZdRdb)q(4kK4%`Mz@`nG7p=S;&QYMh?@o2J{D8-2Cc+tIWZEx6nZbTKI%jp zkQ@Y=7gMH@n5B4?;^@;(Gc0|LVfL;U4NC@3+_0TwlZHv@CCM$jZEmN#*p2Gay$@4< zDdLzNPE^WWmar$zCN49~rH>-;09zmTPM0Olh9@u=-h&za2#2hu*j3hz1fy_bOcJ6g zbtC$M>+#st$;8xDZQLee7?bzO0f@&_>zzWI7nL;+*$f|@tQesSXHi4c5Rz~Uk%%P( zxgc>eIc}fEeC_aMRRX>CQoEcmBqU6eem}Y-3hg2ZOrckllz=QG?Frc8wwPH-GJC+@ z>-8qeuF02~%)kSj5#|&{f#3oT3c`!}B)FZ`8-S+p+^p<+< z=mE%qUOV~|HUTj_V@?9J;0fH$c%au4=$-2A^}ZcbDGI9gqZe+R3uxJ{GOQoY$Be3E+WxiPFzh~4N*wITad; z29n>XE7l~`3#H4N^MdscEV;4U5VRD*?81;f?bW-UuTnX zyBvynY*G{?phHd3ONrzmxAvHt7n~4T0RBZq*2wT0BqpaOQJ?W2R_%!2JM5VFO|S{^ z8}Gj?epfDyh+k|%R(^e=gDpd`@k1R)nJ^fYX|aubmGuSWiBO+Mz7p*#m1D6!WVqfw zX(Z<9Gfc#6ee7CH#$ue9G>yXAFwM(tLn3ZSpfD*j#H3eZ$RCuIPDFlD!HBvG{y4GjTE~FBrarp(qy9j$4FEPrf z$QLogL-P8}ZIh_Q(c8@cF>OKi*vY=^^1k^6jJq~g9 zcvL>i+`UjmkK7+cJ@Rf$Izy#3lmlzrLa6be_IHI)j(U0xuS84j2INkLq(|8wVAn!Y z6wQM;N@Fzmr2d%Q5OqpX@(cVcf_`L7~2SeVFJxXbh>^z0)@bTyq z@xI{oviHMr7?bZO(5T&q_K}dG2!(w2D8Ab~?_V0RK@=z&p=JT)Azv=L=1q9Ky=YPi z#?^l`vFsrzeBB}xLg-dFxr84O)d;jZlbRrykL>UHrpew%kBy3LU-uri$i^A zk3-sFw0+|!X;2(7D(gJ>9AInV$sAprJIcAs|=AUk~CxADwZ zo<9ao?@YOR{{m~x0c(sl-?=}_^Qq?b-^=s00m%H+8%gtn|Cr|+1e_Zv@xAtwJf8>8 zul+2~*Yo2%-`9YyYDAI!g_Y#3^dQeT?lsf<2?eX|3#j!9Pe+E zy>k5o_=|9}6@EwYoYdLHfWHQ_H3;i1JmWe$)jjb`_}@L`^FER9^9};e0zL=$DnO-s zGt1_C3-C37YIY(IG5~xzT;lsafZ{gju=)Nv$L9M9V0W&~SB^NHgB``~uWdG8uHEMA zh4~iH9kAMb-vaE+w)rMOgFy%10f1vL8Nay4=BwUl^SuT$RKGlor+~-S+k8L5^E)up z%kLEEe{>fB=HI{5<}(eI_%48srBUgOhrFgCYQ~?gcd<~u(0A9crz-hoPz^4EY0QLd) z10Du+0iFO115N>+0(=4RdB9e{R{`Gy{2|~afXer?El3Z*Prz>+FbQD8B|Zzl0VoEz z0Of#cfa>l*tIc;2@FL87fZqVPx{xM#?!)r};4MHD;5?d4>wU-Y-fQ!{)C_yT8p1nm zJ~!O$hJPmT(%4b49s7V+Y-{dmJ%FPP_}bixtzu^r?C(T7*Nbi9StU*GP_L^hQs`5yI1w$@O;R(at;W?G>hQ|_ogKPYg+9$tM^O1tAcOx8 z1=>?glMX7e7B=~&^3z*EOJw!tDqh+BXo^pQe;D4;o09GteNRsc|9biKR&+p>DpDva zkIYMtb8HXO)Oa35hHIJhY;qs@eGXGd~Lv0JN4=OJ)3VO z!2QSY^PH$h9TC)rzm2-|i#FfXSHaKM5ug8xa`qeG@0;KQ_A3F!fbT?YzWZOW`35f{ zUZC#cZ zeJ~JNaqi})T+cW^S8}2F`GpsY&d4VVPvwl|pR`Bv$MPfgvBHRLv?!7{x^N_KbkRs| zq?kj_=;D#=NJ%D$SR*A#7%d*njwmp?a4Z{;Gg@>qXRP26z`J5T-pdmV<&mSdf@NrT;weSmzKkt0T^%>V^ zmwc{-dC?-eEFaw-3@-Yw*{S!}D~EB9RPb9o`G16)&_9Qj5VanXZvspGSKpFP zN~)Ek7C^zv4J6pRu3HJCz3o${T|sA?cy~qboKk;8ZG8PjOUClq^zPT zjqN0q=49Sj0hFfTOGOtKJ`bgNw(RL;=gP;RG;2sfDEUV37`y%Cic{sM%TM2S=GL>f zoV(@R@+WUTzw9&1KC^U;MOin?hE-8SxDN55V2wQxo=Bir*Atg-Z&NL$rZ_9<<~{=Vf}`B_XK-~s)nn$hHy!7 z4H4S0{K;jXaXnpnnnjkJGDeo16dJK4VvZ~skt0intdS+*oXC>?JcZ9>x_w+&&=3ra zp_qB9Oe<#QQUHJyb*vNHP^a8!mF!x06H!Vi)e1&yfEptPu#c(qml zWiEnJFF>xPYR&m9uhzy;;OMU{8R~h(e%+JVx?3@n^^OVeTatF&saw+oO1==*EGw;XWvuh4e;KPRVpMgGDHXsk0 zamxe2;w0+2?Tr0g-ub+9hLEM-aK!5R>H1wPEO2pY8T&@Zt2Z7~;OJz!%^0dmjY6{eS%4Ho#WEhYjafMgQ}^`*6H9=;)(=`{CTC z$0-pl$VGFp)9?S+m{6Cz7 zJL^~Y4;CK_J|3~3&OT>-QXVo7nZZa_I2TL^SQuU~Xgg^=C!aT;HiWYxGFZ(Cn+9_s zwmb!LA;z2`)1Y-2ks6cE8U{_Lje}WZSz&oN7+f1H8MG>QaAOkfSr)NlEC|64XANf! zSs{rWc$62GAa4ojVoZm@yg?}p7!-k-hO;7BPnplKuzb=O&K@>}!7M-u+WFm?i#RxckyM@tFX43>D%O7L2|@J>lV_VN%IJezYmhujR|Ey?QO3^s{v zuu1?{2Tf3ctk1|#TF>T<27@(sepcc)@yhSPBHX~}U%}`NH~mwb`2Rv377R8mA4Uw$ zWS_G@bY>wuN;8B=!Xp6)VVFq$PD1U@n4f~UhD}gl6BL=#5tr#g#yb}tr7lST!b9>5 z6aVO%Mi7GyPg=x1Ks@0dScH3F*f^3CW+$yrTFz67LTp1Meb^Hyx0W^;yw5pp9|;Cm zHIOKV3Wp1a3r6z8EKJ}C8#tdf@XHeynx`Z#rBFCKEQgUwVQbie+ln`sJY(c{z81L3 zL@;>I%_H{HIp-`~_hwT7N&}?LP~J(~sN_Kz(vjVso4Z8!Dg$TiG`@u# z1Z)T70{;A;{N6)=a==Z1pS|n%{sG`QKm>3c&;vLGs0YY^AH_ifhyd;blmo6_^?P3f zdm>%3j2e=Jj1pK!j`MoCqI{*&AUyl2|-vT@dI1E@1$OgRl z_kM3bU=!drz%Q?$KMyzqI11>W~;eOMA2|g+R5T6Ml8)1Uu7-l|0#*h&lkuBV$J+t7cS%IM8Zg?-^L2L++ zG>qaxwg3z*SO)IjgBRnxkTqZ&kiyb10v|N=x7c}P;P((45)q@wX?Iu}sJUk_YXolK zcNQX+Jtz;$gQP8Z8;}N!Bc`EG*7UOh!w`f9!}R;EPlpZtCWI%24TDlYg-?9SNx(aq zlReRyL7%JLWuNLdgb~YOunTUoKx#(P=$z9#nUg)yaeCE*@=p)S5fd6TaMq8Ik!Bcf zQ33BHF$wmjh&*@*VGTm6XwM)ch_EQUIpLuo1c8bh?uN*vaS*~n8j{|TEI#ai@Frx# zdG9+GBm0S)^bqNQ*h!?fNQx}fd1Q)Yg&DuOHY0%tnuPE6c|$OS4Fi_>i0^P{36=X% zWH&=MQW6%4oKZJK@|z)M2zt~!REUPwAgL#$J{QCo|IFee^i{)P0~+!BC#kBQ^8IyDTPv= zXvJC(CMv6e;4L;V0T#6qjhAL%keK9A!haS(U*huU!B-K*!-XhDq>lm+w+W&)k6K28 z#=OsGp{Abe-d{8%kCFqV3Z)DI3hunYoZ+0I+;ARGDI?;-Aq=`P^Kf^;Nz*9_X(@oGLSov8_pfbL#oK=9wEmr_{6XQV>5=~ z)`#)R4g2#3@`!LCn0p6&l?K-E|19)DOn^mt!&PO}aDcsNF5q(-qRs(@G76Beag4eI zNG#+GQIUWe16S=Xw4A8Kp}K@xHUtz)j9HFw4^@wpCp;UFMze<6ooHgAvxoT5KXv=i zo5NG|>gd1Ig+X1k;>b51C}&{MG=>x)Mp23-8Ksh${5D14_mWX*RN_A6^fP1(?f{uz z)Iqv<309U98#GFVLWz77p;0PPyeNENVAra6*;b}Rjx0!G#JN0Z8KMTG#uOOTA`9`3 zQWEgCrNT8ivV`gTuZ&uo#E^q9T9yglFq}DCjoCpmPqtQ5<)8(x%7)k={?%42DRfqd z>;Ihp6^~F#4XnC<$S`z3;F{_*!E?FaG-4P*af*At16jw~Zw?vy4I$&GG-O886?p@y zYzm=7S|`H}Z8`u2tYtv{##!O|qc8@x^1vl=Cpc6sb>ylis<*NkvZc@5ls9`83}z3b z&PR1X{1H&`gMtPFeK|uY#K9QqB}9*U<5|??M5YGifN4mIpouj`l6#gLG7MYMfu}YKl?yU((Yn%Hhu|N|FF6#c?${(vE7WrR$yObcQ~wh*4#X+&7NnsS?qS~hhko6$7RWtZMg+` zdDyfu&u(BBF+choAOr{i_5pSRe1K|z3*Z1SK>T0vO%CuTAPRU9a1n405CQ}M`v5xu zK0r0V1#kcuApSnw1KtEg0WShB0?q+KfB;}0U?;!_s0O$I4gdqhC*d9t1-uBj2sj4_ z0Rn)1fSmvzpc>!+FhKko+yUMML;)`X&H(~|eSn<+AD|lG0yqE+5dRmr1H1`{0$v1M z1e^ne00F>0z)pY=9Q^N?ga5D5h=5yf**z4&T~F3tU#ts;DrSs1m)+{?eDupC20=9v1KTe+4Uzg-ZY2S8zS=!=4p%K^{CsnVMfiK9|En3CykeANFoazHmFD z(Tt)|7LDrY`MYXM^4`3`Xf*W-6TH`xnVP~HfBm4loEt1(zC6Ky%lYfYix>G*`$GWyVm{3% ziI}mmqs3~KWZ7bt%vrKUyClhMHe0OfJJ^@A)fWq4CfOugvt+uk0~)p-H=%(6Z@4co z$&#`}24uCL+VQE{+J|>MTVK#l&g=Ve>=Ij-C`*vHOMW+UG1)QSDS6Mv~wfB_Tpd0T@=K< z{Py7O1veL3+FI5%e$us*S!C>1=UnDz%)iXZZg&RBvs#OVg#y*sEE*SM`}Q#eWir-& zqOqZtZ3_BWS7T%2=B56|ZL5om3WAQ?8X6kbd+up$tnn|+x612ayKZx1;|i>)FGAqH zHTbg>E%O)Ag@B4IM#BSEbFKe3AJ~4PAiv;5kX+RI{r+V^{MFK{KWMdD4KVvecMx0z znLp@fE}!3P2$EMpO7@`9X$%G-iy*nJB^U7Y6H7lGv@Tw;`BwO{N-_iuk{7hzGMCR) z=JmOK-qs>ZQLAL?HA&46G;XV76eg7tE(RoMG8&8~p;VG=VXob~dwoF^GH!Q0N^<;_ z2i?1O?=EJRKC7|#%U{0G8$=%HW%W<^z@Kj;3-W3S9AXpcUQ_Q0vL(0fsp93!iwUO4 z%(4Z(EH|0F^~*iTE+?Ge&*|}1`#h*(%ImkDJ9q9xecSG>^~|yk$%DNUkVfk)jMy`J zZoT6PuW!;e;=~V)=@Ay!@8(_=(+n8YsRecAv<$1{+tA{8nw*vSrn( zd(aNs;P)?mY{Mp>tCxM@;>9P{BSz~tLQWe!lts7nHP&_9Q8iU{N5Z<|UtG~hpH+fa z$H9616MnSg?pfvb`IbG#9?Q<|dLnOe%@en-SW#7uzZJJuZ`tN^xw*38&t2ts^&5X! zwrI#ksv`*)sfDsCM1+b-ELKa6=vm?C3V$#IlMXOclmH30gdyLqB2E`DkizQ(^+xPa8h8DP z+i$NeLN#JG8~bp#?rHS5!op+n^|?x2WN3WuD-&ON&Ut&|?ar-ThOVvE_iWo%UA?7u zOZB%~9^AaK7Rku^3z1!G z+pTsK9>v9A1r=AdFJUlXgMULQTfAgZ0rTJ@F14%ZWC`}Wz&cf|i>-e1|C074fH7TB z|1bL@A|kPeu_nmA5DCd-LF|#lzKqGtBpI2^OlBqv5n|U`YHhW&r6_7Iiq?|qVyP;+ ztG0BdXi+Un>;F6V-j~co^y~Nihm+qu=dSPG`|fh?@^JnX=UeyA!uiwLbeBTyS=ZKZ zw+8My0=EHUfpQ?RANwi?feI)r5Zxnj54a0-2y_u-e~-k5PjC(vboM;X-k!r*Ur;sT z?ge)~FlPci7vdfS(97YtPa!EKc>{0@C@@5sOtRH2xtw^ivzHMsr)?X;=#!lp6D@_+ z^OMYKi@Hc9^~H@53Zuz}Pb8NZwYWw;#i-C(Ecj-PNuw#jcUq*;rV@n)pRd&zOje!3 zhVQPM@qO)31%1aHA6YKb8w~7g=6YiZtW63_iBTGC(v~1xW=Ef6#}~nk3bi6nSB7uB zYO6fwS*j!5!x^Fg>|GSh_yRw<1VE%mXe@fRNzM?4g*l&!Osm=#uaDV~p+ zrT+M|AYJ^Br_Wa)*GNjKvkFIP$O#);lWkm_nNPS=ZV6_n$W|4YnZAqymdINpq-loHsM{G&GwA!SKs7jc%Nz6XQ!am

z2^pL* z1*|C2?DT>1*SqZ9)H>*k@0}MY=*!af_KMueHl4NBRa$}Gta#G%4o7u&EH?U@xm8gS zT}dyT989hyBB@tFOcGTje5ED^jD^>`!R*^`iZBKHQXIY!Xns5`3fvB&H>h(Bluq$* zHU6>-b+|gk@hOH|by`J)BF9AS1b-Y#0V+JCNSf4(CCF?s<>MW;DoWLc5?$|L*as_$ z)a5WmR|Y5HW1hkRjB>m=x+1dtIDO??{x&_!DTVm{qD7Z$GEwVKC-&eq4EBV+31{@Re>5|)Zwy)n2;IQy=9xK?k)MK_Zby%jn`IIldtgM$^x zieMuy^9fcYD1z~odTO+T6Dzxf*b4O4F715b+Rn}R2eE=&qmP@9J&vl5_3(CEyz z-ofFBEA&a%cOY+bOKdi@rueM8UD`yrXakG%wqUue3lt~}Uc&fN6!VA5Ou2#bFH#!} zNxj4;zk!uP;XFIZZ{dxxO4X9Eba@w<$Q<;PKw}(vQe1Y zq`^942}=g*JBe5zEG~OrW%@ild=fbL&Mq*ODX87!!vwT9_$InlLDd~K3|YeLFf_pc zpacyIs$+OaL?nfS9HyZ~m;WhR8cv9)$>TcycMSu_pX7bnwpxbZitV>bMw&noZ^sb0`f&X#{6KHnr%AFeGFR6BSC` zNF#I@5OOiBXmqH+Fse3?dczdydMqqdE4-w&!HKq&2F<*EtuKBWoYp3QxcX`e)l}Z_ z*HjJB9k5Y0wE`9zTGIfKM#E}(sH`Z#xYfW~@5k#n4Mo)oy_LTNjhkMPH?h8mlUoErN*Fw?uZIg z8}#|c1pc|mM0V3vp1MeHn4Ex5p=vRtu0*F7%G&Z!tImL@t}v^$^p(woICDAoKx3+e zC|yxv5n4{Ykt`IEiTFl&7;MO8uF0a+S;8Qx6G=Ys-brw7Tr8)smqSh4VTWI1IhVNLzMTe+7b&O7vD7d`5yhH;&9~)Mn z)8`l15~9OnDfKKfdESIa*FH|&rwL}A<9Lw)2~o&AtI43(Dnu-m;bj)JSz%vV23?*l zQFO}*dLxTF*I?2VCSo`m#`kmhm+A0MF`!7PXr< z%n8)JSE>^VOsER7Kk?*sog!~^7D`8DcyWcuhN$i=0jx?yCd#!YQbF~`uIgDR&+HN& z6HoODLm^uNvqFgB#bJ>N>O3^36?SD|Hd!(1Fd4(j6C$~zsDE`7MhW5$qyODuOtkDU z=HDI0BCR~c*nfA}J(fE(B;@MQuIrxg9AWtGM!B3-VeIkgZ9)_V1u~ZB3Y9)2Ji<^I zM388eZ0KYYf`i42!wSH@FzT%`b~$R%nRUo^qbZD=>}$T9+jt$3jr4xkz7_29zJwBs zAtaa@x`dj`2;s=8>mD1bACWpVt1NP0zkCz4s3}9ThZpo2o)1$$VpE2tr3?n7>&EoA z3?jjRzNv#p^cfWq5fM-9fBdCq444#WAjfGjS=l*;!72SG4T;eYC@LbM?cEg-!!VwG%9XV%CN!Z zIT=$1_SB5XHkPKBm!-$&_AQUkEEvB7wVa-AWJ zy|D?3=q{llWQPvYWGJDR1I5)dT5HyKsi>(aRAt!9q_D4r|MxN+#L}G4%P=i(aJPX4 z^bmta{9nqDJ-+ypo-))jlxj&zx{;S>pX~lqvigmwEz|sglhOtagNw8xUZ(k}J+$em zX{Nztefo^bDjH}QF*;^YL`2MxK?Rei6!$OA9-f~+IliRaSdf+#H`o+kKFHQBDpozF zM_F0EwX`%dCBl?f+Ou11Y)nk-@KK|T`K7ttM_Kz842>9JN{i02W|#IH(4#y))i`?4 z$Zjc6RW9 z*F7>NYFOsbtjPuOu_Fc!nlwpUnwQzPs9QIE&psoIBV%IY5$B|Wf}C!#+Wxs|BfE{9 zG)7<4Gi6|5?C>#zjmES-B`kCL82aWEW|s^rN=rliuzM9*f1~J0T`+t7D=S&=D!0DT zyi;IpGMQOF&AK_een+R%iOw&K+8Vh7LCYjMX(kmN39fx%Q78&xD|r7OW;2=5YYHaU zgy~xmZ^h8hhi8h8jtA|~pR#bmGbyBcC*?>r{r35po2gHTMQ z5)_fvL@|cpiZ`7_41&Uud9}^8$Xt;}Jn{t6D3t0dM5GCEk)0In^hIohZ?wt5mZ|kN zhp2gaBCVA)pbXa=>2d3cDzZEMOSE^zhM>ZSLhZm6L@DG7Ktn5gUkX;6#RHJ#m+B%kw2`L_HF&T8d^+oyPE97<=LpcmmFeIaV2#M;F z_?VzF0VPjUOs%3Ouc`hdLOabz=UgpNSIrch1g(5ZCe)0W_HaEEY4y@fB~WzJtVGO7 zxNkVDS!@sz+^&qlfw+QLK`JUJ_3Flgd?!_)P=^hv4VHA>vXTt5o{G}S3JdAe>r;r? zY1=TxlQrdzzPVycSEH9H!^}s~KT}bmr+nb5nh3HMQ9yxerwfy{UlCAX3bhzCHZ{7U zq*T=Px(XnnZJ|kZjrJ@8x=kw-Q}qQRYh9pGV(S|Alf}owX2}#^Cl?Y@z7!9AY|Xt`j6x9tv7k2v!)m zA{uw9=i3TkWdJWLsY_u-rA+dcNQur8EcJqRTxY=2l!b?rRAED{VM3^9Sw#E~*Bo*c zq?qNgB6vJ?HDNmhZbf;p#Sb2~P-#-~t#aaFz#L0XdQ3F*nwWcH3I#0zbcncAT1eDp zJ@oUKDfbp?Q|MGRx&m}7I(iH|r>Nm}4`&XBde3UbN*rFl$I@Vy(*T2A8oI{@3+<>` z_zhM##$~3scv0}Yk*CkWOv`G84v)Mt`2>&EwQ?O>!{PorGDTa78waK+@rp)EO1U`pSx8bA7E) zv7(}Y99k+n$qfivDg|q=gVA84NTBBnV>yaI;S5=(x1lu`j0S5(*51LzisG<};!0|j zc!(l2TKnCOHQ+~}u@TDT^`PsZxJYGk73c&gP@zm#fqE50@%jm*MIn}YpoC_EDQ2nX zlp7n~{8Cy)3TWyd47dEc_#|0{uh4}2n-1R!-93MS45Z&rvDqwobn`ksJ!5$p+-2%i z1G-3SNC~XoUn#q-ji7Kz^H-fb<`F`Ia2m-o)gQ%S*7mX zJGiF)Ckt6HJz{Wz%+=Vl&X--tkF0K&J~S<7bY>rD?~AZtKz|ij2*~dptTW=h;f01e z4b2~0&!9T4wqa;y!yAto7gi&9CiX^j2A#P8T9n>K=y-cEPgstzpcC&MJUpjwSiCG1 zVU_B2Wi;fn3xjEMdW*>(V?xDhOBmGUsIpO^C0J`<42>%&Dl9*;>dY$}H&UJTx}Z!> z2~{R9@1jg@6{Sq>jBl8Pf}%hPpmb1s$ld2ElcRwtpe&FUR1BI0dKUC5sH?JJ(L zDg|Nv5-XLG7P}0rMk&8c!aekSrAA`Cw?v9%Noa&6rZJY7K3*b~x7RFx5TQ#x;a`8IV?iMu13mLpyu0=UeM-kjg&sX zHNa0mdqIA<>;4Xqz6~S$?FiWw_#3sqR<;2$<-tbEcOkn3x&t~r5Bqx#G*ZroT_*4} z=pyJQ$Q5qo@a)n4Zhd=sefe=6X?h5{2r4+t^D%TO;)GcN$^hB>3w4sDQO?-mkIlOi zy(FpHAG^alA(nxlXF-?2(?`sYfo5ahq}MNKTq$xzp2mh7^|0rO|l zszh_n!vT+P;h^EE3D#6%!^&?RS5KDN`(}d@N1t3|?}+M@R!`$Aw6;7}5}8Y=+L^Q> zAtW;BO7UDQ+1Q3+sT(jPb;D)OsQ=);C`>JO9g)wP=c^IwMC|nnO3aUWg2>(rXDv1j zFO8Z|@euHd9m*9)D{Ri84OJ38MCvKIct%Pt5;k9Ff-*o#P&_CS6arF!*8Y*) z925`A0gVFLK;@tnAllnP`%TbD=h4n6m9AW;!59%ai`+138KQvf+*u3M(Q(~Xc_?#h zK|L0v`W|C5%~R? ztWr@WuueudTEyI_@{9thxLD{Ej;c&+Lmr~Jldvv}1_qOSM@xt$%zkMKk*ibbwP>nq zJnF3$N5?ERHP*D<4b8bq4aKjG(&*$wsba~tS`e*4M@3khbCMJ~2J;|L5~v?26Eqr> z3n~QJK$W1mpl3j~K(#QFeKE}Cpy{Bwphch+pw*yPK-k~yL3yY#6v{>aSlKgsi^*z*9swn0w4psU zYFR;P9K@pTRE7B|b7DP}eX_EKW})`brty9%zDGGZN12Qr+EONXXP^q`0<;2MflmS5 zfG+{vfxCbn!1sZkz|VkQz~6x0K$nTiCpd0W5pgZsi&;#hCMts25Krdi-pf_+RumMm9^Z`x>HUz!^^abt(HUfSG^aK6^ zYz*|wRVMobI|7>kmB0YtSYRM`GhhqgZJ>lPS|bgf2dDr#1A78p zfFpsfKr7G<_zX}Al%$)#eIy4?>IgYd58eeh6X*(D4Rix; z1-b(d13iFef#_bO?|@#w-+|shSA4gy0kA312N()$2uuO`0!ING0gHkDz^8#tfNOvO zz`ejg;Avn};P=30z=y!*K>vK?J1`2^5;zpt3Rnbe4V(##0lo~31-=1{1D*zIftP?f z;2mHd(5C?3Pz1IG769XbdSHLxBw#ME5I6;B06qgO0Q3UmWz1KojBfF8i*Ku_QsKri6e zKyTm!U<06{2+svf0yYFr1WFUpP5_;NtANhH9Y7c0aiA;kN1z+f)rk0j9f0^?t&|9K z0uBZ`1M`6{z^Oo2;0mA{a0k#G_#w~(_#@C0cpoTL;XsQC;Q+&c&cNY77vL12EAUmI z8}LJ*JMcEp0~lyVIKT*?A8-h;F|Y{e4_pRp0(=t~0Q?ac2n;Ajc>oiD&43zUbKq=X z3*bgzOW;XhE8wrd)<;v>DwBHvLxAzX{y=F7 z+6AB!a0c;f@m>)R+zoUFen|3Nn3j?pc!%UbKO6D|7zT6&_5->BbAj%_$v_X_QlKYr z3s9<-q(eX_;Kx8`;BBBQut^F01A73av#6IqCtxwq8MqSY0z3e81zrNW0o_UwAFvzH z1K1zv3Csijs}6!jV{Fu?RT)hAVva~XZVg9T3kiBYbkb@w4H2Q)(%1WvuEZ>YW-~y$Or$Eo@&XZRRkVe| zF)MjK*?C}zvQl}oXQAP@1uJ`EE`wPb+DG~$RV8EOfw`L9@6una-?o#$_<*%R4zj9x zWYWXO{VM8_DeI9Jy6z-HlR&6JfgiJz@kMNuk zZOyN$9+`v@fufE(MLjZQJ+g`Q$g1j*t*u8^U61TiJu(R+mB-Rok4#yQY+^mKs(NH= z>ycI0BfIptEVBxIgr6jNL;XR&;ou2h9~LN;|a zi{BGd5&Y~jl`4pY4CKG68WVUse>4@OrqS+)x3Q{*RVr$XlGF)i5udXU$?abxirSTg z?59u)13_ny@aNZNci)^ z)DFMegz?yG@=0m`2$aXOS$xh?Bl5`@OL23b-{~!HPV6s1Y zriIL(>;D)ZJ+ADpU5!6y2}>9vSxT6ySdQSY{6n@lF@Kas1!x6}&y!RHvPb@Wa7W(7 zuZmcTF9<}>y6V6BLx#%!D6BRA)gK~}{ZW~${jdIzdf6Y9*@pk>kJ=Wvr{`-3+WcSr zDQf-EJFxA)`cu~W!%C90>%aP|s`b|j{u+QtuS9VZdJ80TeLu<*ijUqodd~XX)Rj>i zOz$bxk-BzN->AY+op1xu4^@S|jFg{DXJ#%@m0*O3wz-C{<**meKni`WsfgJ+ED14& znr#)<^HtbIX@Mq{DTC#JnG2m3gJkS3s|lV-X{`yTETLJ&;M0nA2n{K)tr`q+*=h?k z=2$f&0R?U~l~^=bV1g&EHj`yC)=V`Lj@#nN*Tmf`D02vVa{ z(MF=0^)1R9THzrbBW5r5X3{3=EJg^eDy!O}GMmbv^cIR-$ETtMQlfc2Q<(IA5K+F{ z|Nbjae(6`AdpT@5e3>V=vipDYFT0`esXoZz*!w3t`q{fBp6VR^UeITBwKL2&YCwFq*P^&RWn(9^&RTQIRTdA%f)-9kT1R46G3^fE zj2WGaEVpA&? z33;+~Y`+s82=6VA+|G}XU?(PKh1h3{&9lb*nsofTZ8p1QL%5+N55~$`Ii3tB%#cnw zG8pT((Ak(ggY6EKUGvA`>2Z|x)7f~8sU>+(Kv*4ZxetdViO0-h%SPonSVlq+X}r-R zE`v2@eNC1$WVs|e=#K{O3AXleWYVrOZH|fgMUMC9hr{(&-4Ii@Jt&3Uk~tT|%B`v-S539IZoG@^esjWDm~dsd30=$*kddWgCJ$ zZE|w0xFH|~T`7wN^~Yk%#$qXTOco(4vEszLmLlwL9Zl=7S-7SHTQjs2jYB?XL#4(9 zXc=(X41Dk=A}1}iMouk;lr!dGasg-+Xf{X*3ISmXCzY}+>W8D4X3@Zu*GdpWs@{gW zUn@$(@}#A%kXjoi!_usg^i4IrUuh;*Iq7I}8ma>w+MtDC?nJF&&n215$xUsIMy_Bm zP?|!A#i6dkLN;C`suvc@PkwDjU2FL@61K>SOuo1;T0U(WUxCM?u#otRQWGfaq;W}v zL7xkirKZrzml645IC~zPDVd_Pm?Zm$!y+_$bGT4EPK}TSgy90+;$yZIpvlv!im1uL zaEd~y5#oTp23u-mHyUKH5zW8wg4&?Lemjkdb^m$S|131RxvW*=B|Z`d1=66EmC9>v>NJ1$o?t}>>Fc;gOV<}ey=+qS zIfgS>UEUuH?#$+~xa|YZ!qr9=Be|9P7CYy)miEDm;vH_zG0A@HBDb@pw?nX^p?kv~m)Bi%8!e1M* zv6E7vklR}CwHan7Of#7$lRGp)rm~tK9a4~r%X@gA#}X$z2q}p~RCbcusAQqtX*M%q z&hls*AKqN-l;i&L5sj@J`&Fn1=eldAh-R+IlG{MZ%w8^>IN<(JkJ7BP?tdUM#DAfa4B0@172y0GWT z9-D5>s$A+PY67VvB3E?c0xLsw9;MdZW5UurE6TZ)Y5i$&hC5{$&5ah;NMN6mTG&y; z%B^@?%hHgCY9T5?p2lc1a0hwT$wrMBbI)HuE4}zVEfB`*FdulzPdOVzR{xt{i13qv zaL>+n^q(=;PuY5wpYqB~KjmJKeYjOsjy&1zn(n8p`u0KcX3$xX0 z&2=;w!gSM$N@rqiK9`7jGdh}@H7+^~Mzw;^Q)&L~==6VdXfUCW>4H4F-_-Sf$`zoh z4SvcmfRVsapaY9 zBehq2EH=nFJG*elvaA0)(wzL=3%m}xepOo+H$!$4bWzy-Z(?XI!ifcD*o8@9j00~2 z%?GWiV>havxE4ajDzkxBYRzi2mWDDtv;jJs6{AMn4#`G*LMSA(WP)piY_d}W-TK5C z3^u7!^3B64O|C?tpd}zh8ah52iDFJ9qF@`0Wv6T>D4kBG*)MM`P$3L#_{rQ`bed9D z`XyR44cNQOL!t1CFh5selca^q$fe4rF>{W$)6_>oZ-?k@5>pa#vz#Ktgw=mx?~rC5 z2*2t~LZHYTF;?d7o(c!oWjP;USXD*1$VQb%_x#B=Y(Op;R^>%V&>7Y|B^T9UF}^6Y z;oOXkmkGO7l1?qv5!JA`z>IE^Fy^y;^uix>m+baM%ww5^r2yw~P)=w%$iU|wXy38* zl<~+As5)^e4D`6Nl8RT-2Lz<&y@W+?GXIxfI2>W00UH%D1K&L%X-%~Kz|2QWW|Ij! zARJlQfxJJX#)-WE>qMhclRJXigA|}Ppw^(4pyr^apa76R$PeTT@&S2+JVEXtSI|8- zKS=>CwbIECdT&pVpVSMhUd@4nu(>5u%8+niSD!~?8xv|BZHccbGHxR_Hq>Low)Z~n zft1T4R5nbUjKHh*;~);^j0eyp3?C<`Eg(^98>yOv0-0}86$C;D`VKqj5gMO2stsr z1!g1szyfld911bUddwU43ULE9D6)ucYQeHIw&imXl0X}MXq!IU$s@e7Too=@G6rvv=VjC&fj2oBY^ zhGhmmi9!3rEh#oumH5SzT9sLYqoZg%$b~Ksksvy>dsYz^_lSCp5@2rNUQQj^v06fg z+E!GB-TTZbg5u#)qs=6^fs7;D+C<*0x_nGn%#*nXOeJka+_U^_lw0n$B5y(li%PsOwEDtA_R-kY~l9E+J z7}nF&i0G6BbHlnD9vR~uo!N=#R11qqP7J$WQ#_QMLQG55lZA}cJ86Xhx;D@f&_a-l zyHE4TiRDf-iov%G*pGrW;lPF1ScM!V{cLUW5F_oI;$mKi$WYSaGdJ?t6$%Eeg;htr zKQXm6hxAp*OXN%$c2${jxyM2s_E#C?V0iN&HeQH#ghFBU3GF@((2%x?C6*sILkY8O zWA+Iap|Hh3`TA-*FTA-DZyX(k5k+MY71*LH$Bm<^JREOiF>&6`sIp*sLjekxVA)X` zG#quLV)qymi&Tk((y0|*UmfLkPMJ|>iN6j={~-rs=Ip*ev>Vm<^AQv@8jfrwU2xX#4RAF~m1 z94q0W6K_FtfXlxzVvwZ2Kvh+Zm2?Es?*hlu=Q-|;_E+A)z<9poucWb@efuVOiH-4? zK3*8nIFJmddE}R#SbMYG>q=JabtMC3Xl>g_5>{zx|4$y|uXGv48*?C( zvpfvmg|n@b%#v4qJO;>{o%nm{}-L!M%Ui!t&>Y@_pZ2`MQt&Y z=7-KCaYoc=<~SZY~<~Pa3uyve5NR$cj95Qb#_$t+So*6PEk3?satgj zfi<&odL_LEqe}KJVVq>frc=zeNyHPP&xa9ZT&km6Aw{<*)sb?Z!r-P!xC#9+=QTp% z+hi(4c+45jxyPzRW}#;k9Q~&ix z5#(9ayjFClc(JG13yj+Cm|D>`<9xb^zs}g-i7$K8*q`#UyJP9B)Q?|HyL$KD3_nk&4%38*#6F;QH#&LY`pgKUsF%~@#U;2Z^cso<}RDc!t?g!^y>4$;nZzk zzLfdQZx8Z*`TGmoN!Qdx*-h0in-#8G0;7Z9>OSbqd*4pD@%h7o`In!cvi0{j=VbY$ zJy+aj;<|tkw>>=)I)C_0`bXdXJ>vS+RTH0j@RsE@cg-`F0OgCr+IQL-8|i+q*^u9k z|1<9Nr(aLn^8JDGr*EyEXZ6ipnb|sJeO%X$yPL*)eDtXAuU}ux`S9Ao+|Bo2FfZ_& zJ!56dP0Qa1J+|@Vq|5tnDm_oO$m;f0f_BIaRcX6tNW$5 zn`d}^oH(ZIj}r_-?^aGTcyFAwxB1+q&xL=#>2|N`edkiUd=Q`M{bj2>({IykgZ>`B zV4w4b=b!bPxAXVT-yJ?1`}R9M2ZWq!IjX_W(~ZVI#!VgU^ZuOA+x+<4osg<^OB2@b zc|Co=hhsm*Zrp#KM8nm>+bez z4=#(Gb-ZH8q)$hU>;HZ4Nujsels8(D;;%G=LO~bP{FV1o{gutvwp6BrCZcw9s74)v zIkd08@{4qT<=H;|$^$@Hv0r3VbWChq_a5;*)wvoRUyw>C(f9_#2aM=3cHkX6UqS>+ zr*|4|7UTO*;N2%8UJ z1WWxJ`v02AJ&Q>8inkZ-1$DK#lbJfEt}TDj>q_B=8c42FvI~n3&iM3*UFX0~*4Ond z<`8woqUpde=EDu#A{gnAKr+*>*%f7SyK3xDUE{AT07ZfpzUZ%X zea&CldcD7L9LVz}#I?Sqa>EP$%BhIEYNNmM`g1TtzF~vEvLoCFfILAICjBDe|MXRy znY7|XLb;;+_>w#x4E?JZZ86m;)gYQqsPlBVw&WVlTS6z#ol*Bknm=~uPOX@YMzP4C zXD=LgN^gmy1e**oO@p!o+sEwvq9?5@qJ=+_VMqdCLpWS~A`hg66jvW&ix*Z4XtRE8 zfE2M~cq|A?xwveAB@lUH1Cj21%{hPNe9)Dv{>nq=QKr8j4?$Bw6G4|CtA^d0>&V|f z{gt1v&6NvLV4hj>1nf7<5U;K-|qO;)!b zHo$Z8;#k+Oe_PpN&xZ+Vts=X57u{9`^cZ?MuBd3(u|7Y{*;kr7VcPq52Bltowa1OZ z29L(QamRiCjbGynAB=hG<&8UD?$~(hz_vg256K&L{fDu=k4aMxtkWEITXi9$d+XsJ zzo2iLy!r2rAE{>P#&@{5e*3enbAKP9n3MI^OP_Y}FhBcjQNB;ykO7BQx!$rFJWqA7 z2FvMo#{GG;w?;*%$D%iGuJUkpYU3BsszFsvTw=B(YIe?rp~Fgc6JCH zk&(8?&f3L3Zc0lXYgfCZv7|csc6F;wIe!v|z!6!^gK_Jo_Hk2MX%(pE}m99ew*WboAXi$RTh< z<`6g{^K08CsCBEBEt)rL8W_+7Hy1SWZRpd$+so4f%a1P3PL1n0aH`|Lzm5ak_23W! zf^-N0K{_~~IPD!!oc0b_qU;>7MAc1sL2@N zpeAF4gW84kpEIY?&1#8PfrA`(+4NPq3yjEKCY~+M7a!@wx{$kS@ z`={i>nrGnQK>dv~BYd67F=H_|;Z9f@aSdvn?1fmWEe4H+PQ7E`UdI*WbtF^|C@D0{ z!nP??jd~oQ3X92EZ4|U1hu7gr>&QiXCE8M|*PtwD83|hkk)P1fkp`HQL_&3kaU@glqFhQs6#a~^ZYwxZElay$&pEF41-x2?$+b%|{bxj0|dFoo%QGLXh65seF}q>GA5 zkOj2Viy0GLV$UytB600~UBt{vXuM52YD z$u;zmb?@n7_jA>_)Z4j~6N_}9-N1C8esq#d35uyXyF%x}Aj9KTfs|Nv=WU!gw+UG_ zllwtVTM_8oBn3^0ql>fDR?Hg6SU|NHn-Xx}&DQ}b$v=U91^oef0CEdVN%jW$fm(n% zfI>iFpcqh3P+w3sNDVTBDnU zmqFV=Z-U+jodli^E4*bNRPsU3$d#ZG|Y%QH%abiR*H z%;1$Lg)}rawBG|i&CG0^Ka%IF{PuXNyZml?o_2CazaJ)Zy(yXLUehi%lshr_Rd056 z!Wf_7^IYWc7ZpvS`%u@mOi5-7S>SDk0Oi@j0Ob;aWw=Wi^J-S3jji~5OM%ciS;|L$ z$;%nHeX@ESi7HFy9w?9fQNQUNCgpJ?%*}vw&dVRwo%9u?$AHX<>OGYO{L(d4tj_yO zm)J3P(rGk3zgD(LeB;*ps9xA{G3HKG?*Me^=p4S)rd*I#Nyjc1hf&Ur2hv2(__v%2;&+VhYhlBSO zd{^+<;61##eKh!T@P2|X2md1Y0O5Wz_~YQ43j2lNZ-EaI_KU!`>PYG1;kknE1K!Qe zo2AbUydJ!V;5&g|MD||XJ`DU`@Vzx z3*g&@Q2g9}HTXf`n+pHiB@V0|r4c^b2^KXDZ3f@iF?+5=qcn@K}0=!2T zil4h*2|fh8hu~LLqkRJ(ApAcM-U7a<@V^ZFYVbkAemVGe!M7FmkHFsm-`T4H%g&v_&G3(P;~3&1~O z{yAR=zGF9vpO>Ewd>`;V1V0IU9{40to?7tpz{d$*1Aa5}&)=`1;LkAsoX-V+hxzCH z5b!NS$v@}S;ITl4_<4If7<@kX9)h0;elhqY(cTUMzmNIn?u)@+WbS!=FoSmqqwqOD z9(-5uO3{Dx2cHeThv3J7p9(%n^fwvcH!}ac|5JfK!~FC2dm#8fnSaht0N*B@{BwQ) z_`cxd1TWz?YJBb3WAka;(*}ACM13puKQF@#^{X#~sQ(QC6-pQ@0I7fL3G+_idJy%8 z3qX}1D~S51cO}}RBT4kEl%LrkdQQsAKA>)(2+&Is-gQC{jRUB!%$N9>p$W_}Fz*1q z0-6hY8Z;F|eKz%rMOQ6iDyu zbD*uDA`q2dKIk?2Cb1mz+S)zP!!BvK)#?b zP$!Tpi2B(npf@EN(_xJO=5o+{5cLUEPjW$-paGyEpkAOI$gk}Z?y3Z>1TBY*+7uH= z585W-en-#>&@%9=Kt@mjXe<0~kx*Y@-U(a;dIsi|pe>+6kPft2!ksC=9l(X4#V}Jl zz8N$Lqy@Qy{6LAI1W-@VJ_&svC=8Scat1kp8dL*82Vp({3J2{5?E-~@=;!S0O8?xQ z-RUm_cUN~$CiI2a+u0pFp{uix4|D15&fR(Yg7tNWjk_l~!Wh__+;i_fU|rpPoc-P5 z-kJYF96sdS-Ps3@yzvkIJn`Sv*V~6h!NWwj0SFBK-H`@_&Y!9I!qj9Jq}dPX3iJfJ z(L(^?M7p;iHQ57r6X*%N0`vl20(t|#0QLi(1!e$G0Q&>0fenBMfIh%oz=puhzyUxT za3IhC^aaKP8v!GMe!vi5XW*TuQr=1LJ|cfIWe+ zzyx3@km_YeAibZhfz%EJ0F!{1=BFkn1HS+&foFmAZmt2Q0#^XjfD3`?z}Y}*-=+fl z0&PG5`x()un^*L0Jd1F7pT?^Qm!&t}PB=TQ@tcIRQX3y9oSD*?>dljW7ySa2MB6~C zK%bBwtup8`p(Z)#SHj$+pnnUa0RD*LK^;L4;AcrrZ&%LpGXPNsQ}qLjP!2N{h`uP&o<|529yl zF3=NruW_LA66iE&E&P~QL#0^#zm4Tlge>(a0#=D_CJAq{hhpB3D20`W6DH>5WB zNxwUIMj|<{jO17A*J28xrcsNzgt@*g{w<6u_$QL{Y8m`2**vi0ON1K+bbO*;__^5# zbpUh%l-VRu`5O7jX(+uxnC&ASBg|?bogqx`FI^x^%aDE|OzkJ#CXDr#oT7m-UXmYS zw5QaTu%n06jj)5e)Pu0So0JCh3viW&5;k#>#uEBFvwkWb@wWy&MBTgusup!s3)wE1 zSAk}OO5eg=z5ck@8g0E3G(ocks@AMLv_5lT$K7Xl4_`Cux3RA29Ytgke(Yybio9ot8)&GD*b)W_GOZi9>^%-bC zor__n{-rr|N;6=lKBX1R3t*=H2W_#_YM807K>O^p5oUVt&=x!GgqiX_P`V@?g_-)5 z0GLn0Onq__sapCNX6lbf*Yq{a)JLJccKR7+7;Anf(Mgb><$Ge02`E8rtLOnO7MdvMpQpP0>H+#mIPp#2> z=6n9+o;`~qKk#^XGG@n5pCm7M_v%*%Ui|vCWu9LoG-~rB=Da-aF-8*`RV8nh-n zy4@Jj5ffhvne+b4u!u)9LVl`R|5Mj>AMQvkcz?CDdT?d&|B!z=o$FQS==q6$ z?@TY;`9{J=n>x8}GZ>q;-7_NRhF5V!;I}D1Wll4VZxm7#zkX($g9`(*dv#86nVH&n z#?rEOef#=`bXj_TsN0&$+ELg4>C#|-Zq}zCtz3L<_qYwm?kh@yjy&CF=O_KXdwt$- zul4<`d+epoSFZRS_W9@3^sl}jdTZLx>-)_wOn!U+jD%NTdDQ2lf}7gbL5&Ax{`KtK z{Rt~heznrM=iaHG=3YzM=sQ3B)$JMgH@d&{&EIrOo6HM-edyv>jvQON)9sA6r=^!q;KJVT&wQsM`?^O|6RF?4;+8>6 zx@`J*TZhK`r??yHdx zwmheIjX0hYG%jcHjj$$t%8s23QU|o`d+)iw-@Wio+`VZzxzT4{IGmlHaIC}O?=J^` zb8zSW84n{e28Mnxa@q$6cbs4FhR4E3%`cuVJahT(xGqg+uRJ>S^S8d-7x{bozyVhc z<1Ti#H@`i+>cP*Crldrc{Q2w1$k2x+USlfDvW;znGMXqt6rDfq@MogYQYU>WDc#R5 zoN)eV;@XUzKV97M=0EbL7J&yo@q6&h*?wzU4BJ#Qek6{0;hbArB+Jeg5X)n6Z7<$$fIsk57(&(cjcGi;iDx%@-OX@1J-zVRh@-RS%^miaeTLL$Mn+`j zoqM@-#gX~SW0qIuntR2mJ+>!19n5@B+4;_d=PkcJ7n+w8-0bkqW(Dc1NA^$uW7U_f zDns|Go*w5~o%lleq%J+1BaFPmKOT#kHtqiE)Jb#R-jfmY&E`k11iu~hPsr$>e=D0X zaNV1|2NzD<8FH`PzGSzaGqh_`_pa=a_d(K2A6|8J-S575&inL`$(et=_aCH!;X)+phS%&GFrfd$=t)(*D%E*M94I{o@-a z=5&4WT=>(AdX9L1%)BO<&v*v7_@~VH$G9e_d5f@n-xsE+P>gg^2`7ZVQq0b&$^+lha>+Y0;K0=mg@rT|~lJ)L7Zd{)(UpGm* zdEnA3O-WMwi=8ITd49&H>DqoCW7d|WefZP2?FT*RaChH)O^?Ivg2pxetSUOTedA*z zK7QL}z`-R=qNg9-TX@*VcmLi;!#kw)Y!LkB7e_zezbid+M0Cm@Tlcv7%<*>HOYzFT z+L*YB!%-fEWFX!Pg8#3#G{qnT6p;TJ(~Hq z_oF+~{B>#96i282xg>Iz@8(6#cOUHg_VsTL{L??Oqh;&WO^tr8TJvKIw{}`N%(~@9 z>7wzGvWl;_MFMFoq)_s;zScl$n*xB;ZukKYjNxOacYxo6$i5Ru8q4JkfZaeO??Cb= z{4(H%#(TqnV}yI1kQsrKg?X;PXMit&D1DoRY!~n?5RK(d2-!K{MG!q#eZQ;1-EH8< z&^OX^-G`ad`v|BKW{+_^uExNq2|TT>gsc-#3mK&)LdbdopM#9jk|tz>fu|sQQd&mB zp5h%3?0|UN!K{Uu@}&qk1w?r}4@hw>1+D>+pG`ux8+Zsr#b`E$EB=>8ua`^oW zJ9_SGKq3mezF)T)u2MUR{n#lrQZTQ#5e}uB#@0ksx0I{6eu&25 zL^LjcAl%XToru!WSGc3GJ`s)m2MHO?3yA2MvxJPs>_n8;qlApc_e7M}6NHTB1w=GY za79_ubJG047iP+@AR(i9MKH{iU)_a_<{(O#>6z;L4HfQ218GkKJ#RkD6ov^n4Mfko z2uNvP4qOeQ=dJIz6?T-qeZW(~9fkS1kY5Jg15sEccNg`~4;TWXbdtQMkf#C13Ny(K z!dwbm45GXv`O8AS1^70I@{i=_VWzn1#`^{2^o*B)H-#H2FG1DV5&wVvORFNDPF#Em0zHk~l%m2unsE+Sc`V6;?KVtc3_cv9W+%K-S-CF(j+xpc%%4e8CxTse9iKk>=3i$VuCX&9fKWA)a(A&KmXaBINv+wwUhjszP+J^r=driL1h`i`ws1j-Q&}`=YZF~7&7$K znz6r|!V7+#`Han^*;pP>eqy$#^YMj$Jvy@Fnjv$;-Szj6+%7ME|NlD!|BnS{@2&lg zkk6?cKGglzfyyExaqx92k3(NQHG|3|eqYA#R4y&fy1hYVvwCQYom4)}XB1taGD>xJ zSx@D3#ANP6Wwr42ABIqQeYf|~r&MO9rz&n!x$Sp!A0JU`&p zOH_{EcN!W`Wx4Oug$t-Wb!)bjQJI!FcN5PT zO6BYqy*G@?I=S70RaD+T`2Kc;%KX?fn|o8aciQB=oXXxb)8!JCzuD;PO?BX5#QDBd z4?3UhJdWzZjjr#Gq5AOco|P|Bo%lwxa{<+h&99gBqPp?ZjvM``ek8`t44^uqb-6W& z>WNci>LIEtOP{-Umg-C7ksNobGtIMp`;6+1-xl3)sykg3#UrWy960w@G}WOKXU`v? zdX&92Wf;|^=dUgPmg>{yjMbN^PHD!Re2?nY2T!MbPj$=sy{3%n*ZKpme@1oe;p@MR zr+PLqqFEZ%HOtnU>!`k6@2PD`buOfhrUTWxtA}TPLv=53^82q-{p*%(`JU?F8g=Ji z&Ljn&@;FxA?)ZVZ=h|Gm^xnZ1TTewFI&w15`^ZbZ1~v3s^KO1n+8e1! z9~}AQy+K{4=^n1>GJW**zdlRYYWhIcY*fDi3tOZccwH19u$CrvM5}AYY76Am8R*$^ zV1HSX6n|p`^Ceb$-h=&8*e`;PgxFPADFQ z?Edt(@!#$GYFUqztUSDxAPtIHOz++Io3CM>?S_VoI$ zK@Z;eO!4lb8M;57`ryT~_eZ9UX!eP+<=|?K;rsn3w3D)5i(ln)XZ4Ng?MrulozP%Z z{(Sd$;u<{4VDUzcW*=c!v5v7rk|Fuy==Ve>?T%fxj+B6`tGP zqW|Gx&;I(u=9CMMJ{&%``w?~4y|;X4X6RqI)bFKnt^;EOCwJcTO_v?ZKA(N{{F~!{ ze{a{(4T;6+eY-upX8QEcfPbc%$5j3u(R^0ZjZ53Qt+Z`mKdM~+(v06fe=zm?o- z-DYe5^Y*wo-`($VrFF@-#(uY276)~C?r; zjD9=FJ*9B?&FA&MtZBYO^X<=XN!Gjv&kmaNLxNYI*BbrmcP(uCoi5ux+P-vA`H7YH zBhGy2Ic0wQxLI98`h9ia`0@?@*^lP=Ms;sDD#K}U4_ox9tGoAa_4)kW5viR$R!#i! zjf0Jq*A)v7uRS^2wSR|OLo?epx%fr(OC!I3r$U$L{7ll7PRo7_{QB=^TaJG6!nF5# z=KoXrV%nz5Xa6X;-741Xw*Ki)C(qp+`TnqhZC(xjGw!^xW7C}TZtzRB* zs`9p^uQn`cFgB)gOxEw}b$54tmOQoSM!=a_D^2fxn_f>AY-Jp?HY@S7Jzc(!n4Nu2x}kWud+ekSj`SQbXw*k%e|zmg+TfTu zeeOF?&+PT`=3(oV&n$Z}{*Oa%TxjR_==bv<`ZT$&dM>@$yPKx<){bvsoj7CY#r9p7 z%B=7_|9qlH(V|a>Y%z?u^NViE4$n8sJB7D? zb?^IEzP7a;czD6n=A?aj87_bNs^dl;ocngrOPBAhYOMcq@ru=L=3PBAJmlMj>z-Y;qiC^OeI8@dMXRUBntU1nWwI-Q7Kc}-^bmpvcaK}!~ zaM-QYqem@eJA0(FXmmD=&VoH^-r`YPoYk_om(3Jj@1*2j#J9rXwGN7Q?a54WFuyP( zs?H>%@DdW^d&*%^94V=3N;-2#_T56dbaldy+Rhr}CdR_X$sD?;`iGIf?C4O~XXA~b zLCfauoZ2?&;)DjT_WX4Gmt%$*7QFCam#y2)+24K;TUxZ`oNGYBH;tp$WZ(Yhqj#os zyfRV$+S+xwIc+X!{iO9JPygig^}JahF0uak;?b-xPP{+E)I@W2)60jt+>h8>?*4P} zCtK$)vK+j(t$WvAx0D~hl@_?YtZL@<;2-D2`K0`|yhS_TA-cl{p1F1=QuSWT%cuJF zcKU3@;D&jp!~7MypC5E=n%n-UW}lBzw`$#}Y4i5!ukTyxx%pw{*~+J$8@uw+`FAt! ze&zE2$a@z!o2vJJeC>VqS?8RYa}G1+?smv6xeQGuDH}sbHJ?nSQihokHJHq((Z{DI zrick46fq$QNs%OJ%7hR?C}Ltl5<-!b-}_nnGJDSKbM*Us|CitY^kNt?bM93!#`j0+6aDs$;%f$_;OzH&dI;K-fBAW{T>Iq^xeDh zw%;Z_T0ddvyR8pD@9TYLcJ_(+%jTRcZ29=2>uy~5#S3>{|JT4i)7yJqsadeE^VZW% ze(ayr@s`o6_V1o~e1iOQM2ou1hrKk;pE&le$hW;Cqn>Se?13M?yLD5vlAoUZ%*tl> z4oX|MqpZ!A=I_+loO`A1VD|vl=<7e%{L=Ngydgz%PxV~i>NDwRf`<%5G#HQ4%bMc-)%uk{ogoj6WJG7_i__lX+-d|_V?Dm@*|J(OOzxo&V-uC*ajE~l>oe-CD=lbEVESb3G z=@s(IcjhhK_gZ|?4O=g~+W*1hjqX!_$n;$Q>C73=54wCZ;=5tJ2h4Bfez)23{LeqR zv0=NcdN;RNnEYevU*qOxkA3|7HQj4|{jbtLc9z`xMyE?%YL&HKw5r2(pIzDXX5d9O z`S#N%K8)pGeGvW3$Jf?a?NVk@~HK!k++BNab2EX|4zN>Eb zluuq*{qCeuKiA)OTk?T^k9-lCwD5^@2~&h>6aV1 zk1xu&JUDIfj*|bp@#26P=?~R=rTj|P&YESc`}_+d_K$ZQ{m#?z`)OnQj*-9WIr;j$ zM}I%}`m>)NzGv3HCYx^BaLaSkhuu+YU1qDFM!r=%cj(%Q*Z%g$s@8w4e4t<^f9zPd zC)Vt4yrlEEc`scW?)vE7i>H=G+}NY}pbqVRU7$AG_3w|r?DARck$28NwXtwc$((`D z-m-P_gjG);@6&5>-uoL)-_-i2yGO4}zta27Uv~|wQ}f5BmkthUS$Fw;<33+;^fTyJ zfjVltj7EjIB{`+tp?Ccd_)GmZR?`>^i5 z3zx?2D_2~j`3UDAz{M(AiHxIoX#c?2@1bY{uvA`hg;DXBDgY2kw=Hf?T14j(a)ITbL zs7Kupul9zW2ixh!O1mA;UObPyDPC;_y9#z-yGrYTpKRS*;?+g%%vb~ za^m}Pl7oI%1M|I$rJY57kg!8R6G+TO4z5o)lt)m9c)49JoH$3|r znemkrB)GN>?w;q2S3?|xj@-^Z&r!}f<=kLST~$HGp5eI51# zSlZ8yh#Z`qo!u_EZJRdu`5<2PGa$P^ep1FNsr1`Z{B}|M)u)B7{iIF*`I&`I@4?3J z!tf3p@j{be1TPf>f_I|O+fFQCW?p~G6Mk|!fPPL)ubngVS3PTZHxUMMysEY`Q0AZ^ z{j#3Q#_LThY5hmwmEM-eJiOf6@{ID~cYY)BJ81nKf0aQAGRVd|BZD~cbp-I@7sgfM zM2&^v16n0P+!ZdsUh$1;$9%Y>V4v5YC+hy0I{gi}i(yy7eg^v$>>k)7u$Pi+s~@zf zw2|FTH@ijlwiPW|+a*8GhT01+cf{vThL7xqtzm1_ zz3G*Wwn%zG7re_$e7nsWJ>I&6?_@!`iP)9Cr-uA@EzsV((;MG>5^o+R5Z}|v>_0qA z0JC(xM`YqhnRzr04Lg^lTI~=#7r;IWn+n?ow!`_V_C3&=fR+kd1b;E?>#&{hY}hh9 ze*;?q>jFIi)?L$!YsU)4eo7e=i{xaj)-ZO6aTbqp{ToInE`-xaEVFqyl_mUH9UlSw zUd%5oaC*BK^9s55-b=r?j9`lw)1CZC_B$>*6a5KXup{>fE(#OA@d*uo@pa8DyGx^w z!9`=j2Q<~fcfuVw;(HGlrOAB`cjL${#YJp#H(_^-(y72aLVTTZp_$y_m}dxo1M?TT z9|iHX^lNldVj^T@9va9A`C7RD*O-iv32Lyt2DEJ0W;PgwCG0WST-Z+kNl@30N>C5} zyQ<9r{pfR=od@?D*uR6G`{20{mhcs@x4`DWz6@IiOEkjhnZgl9JQS`O?A7pPqZ8EE zVJE>p13MD-voJOv*w14U)bC)wf!zW7CG6!ewhY*ViG_{X9r*dfqO|qwhbvctpXs$M zSIAz?I2F7C<;oRU$${UA;g<*@IlPg>Gw;FlHAsvJy$0hA$831!?b-SF&^zCSuhWp+ ztP$e#Z|temY~zb%se^~-kL-+Bn-i@czJi8%=bnPjv<%2&PvMg%dT+m{0KGjG@5<|h z=|zMM2K4gK7fT1>#kx6|1@NlwDnA}KFw7Tt=g6@9N^l5%T24n``2Dw7u!y&n(JM&? zh?o7bn$6C1WKCcj!8U{qoau=7?^V7@6yi@CE4pz=lFQ+wFL{ufp*ZowXT|x{#su|7 z*mPL(zXtnBknMu!OjrYFz4LF*F36nih|acQ8nfNcb8 z^u)ln1T_VA^426_N9{~dOW<#|9r6qMW!T>NZIeYr!-w}DN$)+R*ILjwi(n|ueAo`K zz4P0&!TZVa5){1s4zmnlvtcPcU~M%n9n^VO16!)&c%y2+VR#oDy{_1ZdtW7f6Xk(c z4dPX?nJAVX$3=v(mMLvVf|>=}9rmu9`}KQt=!kxq1qE$W`q8iPwU6#*W{a}*&;z@Jk1Pr@#+(6YWxz<%A zc6YX|oBT)jr$#^6;nTclzrQVdSz?(z)flL+vDCYMm|}| zzUS{xd9n-Jbl0OpK3md--THDyMV}wKsKp-?)O|NLHSP4_JrzlJq)z$fPQLw2Ve0Qa zf7mFu{2+DZ>)(#-Qg9-5$D~AcPjRAJ4twiMiRym1uY=YTb|~zD$%*O*pkIdTdRcoW znn5Sb&Qe$_{kR^Fl|CE1!zUsxxPG{A!hQ=IhjdlA3&7J0mfQl}l7H6JMD>@Ynq6w~ z6Rp4H`91izP1C}C3HN~RZ!kSkZT1hWkw!T89mG>OqcT6?!VF z?F)F&bwwFt*PNK_wy|D+|(QuqU~Z(C?a`b1x_B~g{O zR=VVG4q9dy`wTF$_>~-1%nq!comefqu*&pcRT_zXS|9VX8e+e@&hA9D;n#_33)mN7 zo5KFID^Z;ey9Tz|H%NbHqS_s9Z&-RZEYU+*3Twqu^k*ymIMP~&IGVve2>UB+W289% zwiy01$lFX2B|%iE2HhKj4>2jM9G}b@ney`iJy7Bzn-WnjAE&2I{zy)P@S)PY?SdY*W~u zc#=9Db`5MZcM{GNaHkV)Z&-RZEYU+*3Twqu^k*ymIMP~&IGVve2>UB+W289%wiy01 z$lFXZV%l*u~U*d?H^bpjc{&a=Opz6Y`8F1ET(7GuutBl zJ?GzDNxytgrQgbH=cn{f2c^FUWg}XYPX7(h#5<{5lA4J0=iOO}QTnf;&PH0&->BCi z(XS>y^s3#!;M~mi0lILVofXI*7NGA_1Oz~DIAuYAcu(i8jk5wc@PHEx-#@t9;6QK~ z5gEM=G=PJYN3*YQAHW_=VA#L_cD05LAK8Ef1!x;OfIXtUOEh4-inP6!eY{Z?3F0Hc zVrwdZH;{@0u7Efa76p!AcV-U>XfTyCfOn<_dUp!^OMK($&K_L?Lk8!G&teG#AG!&2 z&cw&k0(U+-BtL);?+nRqhF5Q*99*~0?^^70^3bbOa( z8?OIQA${S(pvYH=1tCa;!$pD^&^fi^L3H|ILjsMH+ZMDB^@qmLP?%t{D-7!SYB{AK z;j(H}F~026e@IvX(FQyeD2MjSv#X7%x>O7vmYI)_y=rH=?J>G)O-LUl6@w+piFefo zhHC8qAz#^uI& zE%a_N45F@mBgsS?_#&7QJH50!fQF~8QxHJM(7xzNeL*{T7}9?zIwyTRG$1}37{I4< z&_jm|fb41o(x*A?s39MbAOL;4wla<^`ef4J%zzGt=BAGLPr?}yQkKJJN00ET;V^Os zw7XRL#EEy0i)ky6H~8snYB~H&i;mObZ4tohh)49#v4PBL9nv31H)b^zvC~C%?ZPDaBw<3hF(M4t2~_hVa~_^|%a$OaDYG z-IN@RxAW^dT2*SNw5EB1PIufH$Qyz05KvZ|_U_a*(6s>HipIxn19xPPY>H7PKY+Ni zhGlCd8HCSB1iH8F8pzg)6e8~4x|&Q8QfPe5R@6WXh{)hf)KDJ8`iT*PNdgCq40K9k z;!>v&ZatT%QHZ~&LHdq$+eZTf2Iu3A?9?~#b&R2Tfnh^)sG+s)MiV&Zn!H=9H@bd) zPqB#`T!S?g-qeJ&9wMZlhD|6$7?xo3-fucTD4-G=t`NHAuYaq%(Iw%Mnbh4l8yO{ zhMz99qy1YNmLR zzOLot(Wp6nfYxh<6k1xR3bpjs@R}y172m<@KeTljX-P$-OXGDv@J-xdK zA9TzoZf!h5OK^y}?*1o=xafOBhYf8>A7rO>4ZcM}y%86Jx*AGMWs&|#j9JhJX}A`H z9LB*O_fc#@4MyvpzK3eC__92edS9Wv+FiG3sFW?LVm6FdS4;p#@=@!`HRj8&e@-)IKhb zb@0Icc-=xEe>gS;jd%wSEMOqu8NyC=D0Tp_!GP;@_=OBj+_=fC4gDrmDUf-YgV60r z)4@F5A~1L$*zfiDEzqLb}!w#fMR3<7yTY(Lv z8BJe3q3p!(VTOi5HaXKH*8?sh# z@w`)t$7S1AF|%E)JD=ua_wg|CFE@wvt zWsOTK78Q+beR?f*J>HjH$KQ}xdp<)#F=tCGoeyP$w4k-)7fSfqmc-XP*g>fuW9#Lf zZ#fw9C@Lr_ehT1q68}(UJEa%lN3^x$H{;sFS%uH#Y^<|A-e~0HV^A~B4g&TkJb;(U z$DNeedHHaNf2 z((%UE!&~_HAl9{;h^9t8EZN`&hpAT%+e5xWp#$*JbvFtdZgZ za3{!ovy*-2_*8;3k)#0GYFK+I5<=t7cd)|}FLAKb;B>Gn5Vet_-JG9v zu^Z!$bJlynVa`65>dxb+ucXZ`_NJVH_n~Dee+D zX36|hH(M;%nG%5>(r7{iJ0~ao>|s|NQ>3FFHs8t1J#2-O@Ar@(@A0r5PCnnmes=P& zBiNr#zBPi4=X_%Xo6h-+2)2py{Sj=vi-UKUi|>hGhg^J)hn;ru(H=J4P4qc#e!|Tv z^rG~sk0Q0=m)z_&zS_g?;43`rA->GRhVhp??3q3CCmy!f(PXNqw%0vqFb@AZh0pY` z%}VqV5BpVV2Fg4qALn7qoK0SFv(X-{nu?_uc&_0G-K;GY_CuM^iDVn(I2w5}rA(1dM6get{Kp8k9Yu~{2T|k*b`nL7U}HHIb_S=yE)<1*pYzWnSOp4; zrgm}gqJXHJKV5u>hfQ$vRmdoc8Nt@Lso-d(}}N{tXU(Sz$*V#I=|t2tu(- zZjPT|+`$jGVtu1dwqoO@d(i3?2nU zD0^LeMN4)Jf02%xgR;WS%dcbWg@24^jyx-wt&8MEE!l2JDx&srQ1<)yE6MD4;V<$> zZEelo@)Lc9pMTk!ovOh%v}W^a^7XCRo|^o4OEx}=|Jaf(ifV46a zN^(yEWo~a0`AhXVs936nH`L$5i|Vrhwf5C#Q>3`k`ZU0OQ=gSd4dBP9^k#j?)hzdp z`t0ur{zZLO9Le9U&(=rAf>IvIFV$mbBBL(UV&J#DB~ zXEA{D6B0XXaDyCG`#X$Wmu3DHW_QP7+?58gW|R3KqL+Lxv%e`SN($CX9WB7SU?>r^ z$FJeD@q;7Y6Pfxq6>g5irlHSCY>C7-N;HA)lQ04DKPgc@K}J8}S7iK*2mHUw!}dDa zDF@%=WPdvN7fv=-p$@rDi3j~VC3=gKO?7hk59nQSWIRfFJ%66Fjtvhw@!Id`4>_BO z-pw)PMvdd_J1GW~a}s}zvvD$qf11qaaaJNHV$R+tHvy%{!52|cliq});fM$2w1a=F zP&ZwmV9dG`lru`rC7iwGbijW_PyB`i{;7;|u9ex{{3Dq?!dJ`#gRPcz&OiC4(%48>d|*MxTo1z9CG9Ooc?PDE9g z=Fa*Y?<{S_-;-DezKqnW7bLcb*bs#JL=0~zrSSHwGe~BixK^rHy9w37VM!Xu$4Jss z{Fo%YDe)x|TS3fvNRiA^nS}f%4n3+H|4CxK`B8~waHvd^AVJY=ynOe#X!f(rCqk>Ve$sbc^Ts5q;72CiJ*|41&WJ* z}V(2nx9jk08WwdFjnt~ zVjzk~m=u0L)EN>z$X;Wq4ym`zFa~0<&XER?=SlBqi8M-6!cbjNPtL%VWwiLN2)2%Y z28|v>uNPtBc>r33cuu$tZclz(VuQMhb-;KTiv?9+e$qPHb)P1&ITSOvZ^?o?oUe0W z*u(D>f0sC3rd=#|5^C!Ng&oA82lbk|)C320^BE56=5y(jAYlJmt^-diJ}DlZ>Zcf% z*8slRQq&(Y?6O2uth(NgWh)@^@$6HXAB$sKWL^=+_R9Q+IH+9wU>rLy^S!Z9yvV=C z!4JjKTBb0L)>{}|K2(xG|4!j!;;?{e3O^LP7vk7jXCnO2%3h3va!z4pa$X$A-sOB! z9Q&9jO^IU%IG=!3or_{#;o|e-*yk?(N*w!HP%gRn!ZM908C zx)z@p%jVUJr!cj&Dhi&?#Wq2JXRsFCgkXB>AzU-wm63cyP-APrZGxFT1sYOs{*uHV z!_-9GhvPTBsk|RcYoI+-7m2UiPD}&9Ka!{|n(_75WXPg~&@G?x}M8Jjv)Eun5H`B@+g!KyFCH5Pz>u{O~80o$h+YNg-RsfHS z()da1X?6cNiPjTZ`Dg*uuu>25tEiOwIp*D|5{iWqyBj)^u^JKnhE&}R`KvPe_;i`w z#ea}kUyiQ?Sx_clcI?UBviT5{gn$W(7f z7IY&KHj&2bG(J;?C>@bV-GCRvngA)XTJ`X&^M{}yu*Ys&E79~Npj!2?x6+Sel{xet zY#m^SLXiEmhUk{|k;K*;6sqIqk1UYbGJ`_4DYCi_-8>BJ^^z?Q5 z1nO?h)7XPr`Zbzhs|tI5pGnY6uM=5{M2XKzBo}yOiBe6PSL^Y6urzrLvz&D<^+r3O znnn*bnweTsNNj+2Hd2Tp39iqdBen5CBVcf#S~Na1>GF!q@+ zo&?`xygZhT1(O7C^`1ecvr&#C;0r;_@dNP*1Be#Yho2aK_v0X%A zpfa3|g|<)^er%%t7R$Ck65_FQ!!O1{Du_N!;eTSl$L3c&dspFq$FhwI(N8M;In0lO z4%MkBj?Hxvz0AqS#?jU#{D+);Jf>UWe}VIt5QZm$Uds98IJTWrnEjkjjbrCH@y>Md z>6m9-M29NyY8>0@Y5@Q5EA zUxXPPvtT?s;^9l;pe>Vsd<0(>$L2>+_^lEAy*Rc%g6PL0_?|d+B_bOB*CP41P#_|S z4vqQ%@)=nV{&SK1P#l}!r7#P<{BRum&`V*~d-;!0LA){W|LNuDJZ{Nom_#vpM`@qxh6~HaCiL2p#4Xq#i|K_D1oU@$7U|8~7JS z^I53>XljMS(R@xk`!)JH_!rdTcu&TPS|ZL`d;z#>kwjgn#ovl&lVT{&#W8$wJo`9? z!fcG;?;uw(@$mm0!F-7#Pr{@EoS}E634QBmc&1G(n!4$qmuA%!~E}Le@Ubn zyoen&Cz~(x-3@^jdi6Mk&3opG|~v9re6%i=I$k%N!Mt~AyzPPSS2u`7JpNh?2u znWOM2VxFJGv8Tz4u|J@2_)jSOMW9X!^P0XVK3z&eH8iii%+2nIUgBn%e6i*h)Ea=Oj9{f&YX)e%%m{4epz0j=G)yEwQX9OzKbbMVNObn%^-mZIG!A zaKy1$ssYMeeT0lAiMWxE!hDRAli7N7KB}M&MCprj4&>|hBn+EvIbKiJnRJH?K3`$O z>y;?%Rf+%XfJ$;V{FkLDtaPTzQ5PJjjRv3`6B`|ua;%j1S6k zs1;9Pn+zdaHkgXZ67o31fsK-GVq^P|gH{RHyV)*Bed{1?^CJgap=Ue(I%K~+A1guk z!@K#6MBQ_F*9geT8O`QiaWv+QNSTYZHY82!3d8PqY{h9S$-oV=})5{tFTx z>%c0y7W`Nyic&6=6Y4UkA3MCr^*k>`;(Z@Yg=pB#5-pmcenYmPd1DI_6B7gmdsAgH z?QS2E*;$!imTBWq%HeSXmq+nw!ZIwc$+^O&b3Ol9niwbRj zPj#||PQKhp#~xdqwDLUeqzR}9T0ZA*aJG!ow%rDt4d9>&+v1#^$5P$P3S9~B`e^Do z;bkAX_&zWCM?+9%xcM~D-TY-A+vet=9C7p4eC(W?&+xI=JVbfd!%KYZQxAXL$Bqih zpB}!@$0kJZ`9LF{K^ROWZ~HKn#KOOsb^}nyLQAoz`N7Zeq}nv2y}n!E=}FZ#U?M~a ztPQ9SHN`fUfbQVWL-TEn@1;uoMQpA~4~jsBXleuIUzG!9Y-?zRkP_@A&X5wv$WT(X zvDcl1y|q*=ckru7v`S3cV2$0r^%7p;f_xZBXaGj>4U)E~xvl;HF}#mM@08-7SFrOQ z^_)T?u+f1nMhGpI1hW(xhOvXOUdI0PVH|IuDP`&E17`?3iOAp|ntp|Fi|J@`*y#8lWNY;0iv)xkk|OPs*0a74`&<2rO#jO%}* zQ|KCOYZBp(w3tf67?(@ZiHT(;hA`>cZ)7^!+$ckiYr(%v7ki^3s^zvuZR|gx(_mk7 zi!siGs(vGqYBStTEuO%~q|tp8_JM@q8DsDT1zV{D8OoJ}lFo6^SWxbWI*;8n2j7F5 zrsXE8v0)Nc#5ZzmFr_x2J^Upy7G`*J#&;5Ry?J`}8_@{ao;I3$^06`-bn9m_>A2W^ zE|XOF7wh4?0j?b^w1%jLL6jH&#Bm-VYJPLY@UNW)!#Jryj%e58hAeIfDB(H(GT zi7q4awLTj3@YP?LZ}G9yGT-E*V}LKv&uHYse7oC6i|em_)a|!{lgfhatnbl}6#ku$ zZBY1La1wcplOOf5Sx$b$M`vo-%z^GH&Sp>hXmkA}Mjy_90w+zy&^a&q*fGw3^ReGK zKkH+2X&QvG`JA7&R{r*}?_B&(9~(nk4Cwsh{p?*gAM0o9+`P!ojuH7!H=pWfGdz5< zpDpz8m;7uyt%sm#&h|5O{a5{@X-@aEPiaNCIfBpiv%}=Q0G-p%CPngPel{nPFY&XD zks$BKhK!$`jpY0MP%!y70KI&rpKbG2onoqqg&{B1dY=JQ_FOJ~beQZlaEc`!3@SSM+$d>T0iR9lP&PYG} z$Iw3D^=Vc1AFZpD;vkq~t9K~>&B>mwwO(kQ@Ip!YT4jG=Dg4W@SB^{PiX50Mi zkfYufKaxy@NUl@rgML)uU;Eh=g~LA)-OA5ibMoB~Y0RiK=(@#GKl{ZQeG;OM-i7En z(bu9&L8v)D?WcogP%fdX`Pr+k=s*2zm5X2WQ~v_}IC@+Sb`CubJ;_ZJY-SeKU|+bS z$0LX6ay8fs9->b}KdZs!qMy}Z>jh<}hfl4+e)UAZioBtt)nMx)8X)A+h=d<&p#Att za7FS(HL&Z;XV*X{YXUm@*JhwzzOe?IE zqF-zEf83+qlCHz#aTlNB!VX0dX9J_34__0P`iH$`$YA((S9Yld*2<2tFBO3l=j;IQ;?O2Y>KUj&l*b;>ox@ds> z3zuS)*khbl=b&SCKFP&q;xdtot#U?y@}0ga$w_EIdc`UQS)Ht~0=`KhN%{iwq{NpC zg@2vIHcEVlL^pYG%8DaAOb<{YXUQ~mf27ckDUK{p%k{uD)xp;)$ZItGpE~&GP|qB< zz`ujB`AMmF9rUfDZSbtYRG~)>>5kgru9}pGeOp83*A`UkNU-d22MQT zpr$RO(@t!|p(>JSAZ|@pL(-86+WUmkdc}e5L_$NRP>(hSui+CNtaZ`^2fI5O2dIzn zt)!V?4~bZ->@e2rjNrZb?-DjSw@cKv(7Po5hs4%McZ%Tgv~ionaa-;B_BdpU`$9B; zfSS~vjwsh)?I}ZEp)x>FUvXd?3CbI$1}NwibSnjE#wSif$mJ5h=wPK1?E;^bUO=e; z-O(JE%b@;$3@MdnfQH!}a=6jKFW>^8BMNuaFy4KS6Ltmq!$yU_j0LU2C%V`nB?{+4 zmlQtE1)cswt#tP$VBJqT1Xkp@gzy2@mbxZ^Vf6&`2@JOm?DsEm@Rw=j9);CCj;Jus z{^hs@)vVCz{wXDTA`bAKd;+KOOyskFLs~xHMCJU(lJmO(XI2CVex(IY9YG`OYYN&e(T}qi^xTVG@94O;Si6frxVD0CqsMi?>AHCKr{MH>5XW)m zc&VisjW`Or_LjlMr5CRQGg*S)jKwdWW5$d79$LIKW?kbjLx>ozcXY*ViAwxx&(}F_ z#d@|fe1pnU6cJxzhq-euo|`&ugmPOM{#u8*yRVhtpFbNF=p8Tdb)*{TN5dMO_Q412 zKxR0pp&`6e3IhucqQvI=TRY_(Rk6k38O1J)Q}FOaC%KWnM~}umEgE3!jSfIi|qkMe_LL4-kfv6gCqWgqbNP4|VRSV|eW^ z>jS$L*e=3gbv{fhTD%2tOI!NXD1uqOQz^jcU6sLk2>?q4W?Oz>>A>iHWWjuWfb|W*mk%r_1m9#}`M_{tw_2P_ zflUL3y)mX-HtRc=+5!_OD;t`mVz^<-u5z<22&(|L4;Z$#n6kGj#vp-x+xk>&Ct1@= zBfdJo45O8gp0u`a7Y0iQR_7+4x)7n2{bqW}6lX55GGN~j2CKKbN*K0>OcR_QR<3Mz zJD-ZpJf{3@#wqfN#X8Gr?^7QltnLp+*#$;Z?WS9NYICZywpB4~JF)Y(q1}n^UnVB< zl0e~ApE{nhNV&4eb_%e`z)C1grpZ@`Xhfe$2i-81a^#Bg+hbb!fhDK<)Cpi#UNhqr z*dkzSfvqBJaa9aT2Fvg2Q=ca6ld4#`eR=`P%jGawg2*@m!C1;5_)_dKQQv96&LA(} zBW{h467h>N###9I!++NXSK4CSZXjCV4co>3j(Rc&m?(>@i-C{r$(cn0OE4zPkz zKJ|Cv4IDP)O5};~4#0B@ed;erL-~)1Qx|50_XVEuyiZNU9dM=A5rZE}s)mmOK5C** z9ST>u&%{OEh<`TdC#U*UXw^(PXyT#MohEKg66`?fy(cm}pN0*3tedJTI&|*sAQ3EeD>W=3BlrMcM)HrLs3mNGH z%rIJ;(33WHkT2YPla4qcBGuyTK#aNxj zjX2xEwZti8c~b~Js@Doz%xhR)@iG;9(kTc__{^VK6TVl5T?enuWnq!(bGhootD^ z1vYuJPdx=!OHatiWco{aRbdOa_|$9QTJQkz_Jv&l>`+y##NZtTdeK&&3KgshFU30( zb~Z3OnO+HOIk3BJ_;!HCzVfLz+F&O^YX=N^dbRZ2sPimfLKgsT%w3e1M!*Vy3H>7K zn9-+28A-O50=plsrTn6dR0kwm%681N6eX-4Z#l@K{tC&X8x5xiO@2bj7R4JvwnV&y z??b#9NcUR!?a~D~Y?~K@w+`i<0&4TP$STFH!Ya~AZ2}R->##8jRMw; z*kG;oOl`gZ7>-@4Vbtaqf!VbywR!SR`?jMtPX#90F1BjhQJWV4`?P9$rffF@-fovq zy`d@|Ael%7W*Ds;^yC*ZkpV0hd{aQNl+kP(sz_zGPc0&s*tGgJ`$dU;+{u*gT43Y8 z@u}^r@`^lBo0skJsrV#_HC}<8w~td`H8D1v1YdC7Qd_sMA2+B7Vr=bYkDF!90p4h@ zPwihdPlBJyQw)3@@S#<4p@)$EdJ$OXs+h?Oa#$HAoQ$P?%z0P^y~94e%!!q9;Uxwb z2gAY+D>@o~$mSz#JGfd?se;x5&xR3c_ydBT3gS|Pe-5q|zMPKo#CVwetxpY@bS->7 zo(*G-rx?UEgr_`d@o3=};JGj8V(le{V~xJnh=jtEU(e6(5cHEF=n6HiZmjXpcwiVS zJq7d}oBZ?weUwf9vp^pQx>(0r@;@p>{L^gcBs*ln&0DjP#&zHoc{LgWJjAQQZu$E_MJ7B*K zr*cziHWhIQEM5KEk* zPg9!IPL~gc7{h@zI%Ge`t^}3_tX0*#iaOr`tPq&p{Cg6ZVS?+;jWNP77ECLD7)-Ut zR4QLzdraiBAPk0|e3{0Q7r`eM2s#>!Z4JYB99RkJ1;^t|xz-$~L_UQWgorah0vQ79 z5C-cL2FnK)D7SATnlw{FU`v5@2j)Y5w6aqoTA#qqE9(P{#>ZfcvTxVFsf_}#c72qv z4zPx?)U~LyJ^*r%9&U40ORw5EESRS#QbQ+he@lZKVf-c4jOZZ~YFM{4MDEtCE8%9g_ z>hnpRAAITsFlp&(^V>-y5~7pezeCJ>)#sB8k^gY>Nz7q=-_eqPnokU4%_q$#hOyHB zcjgn4zojAKDFZzj`3at{4uGBtdhk44P1n-rVK4e}x=r{-pl8|8JAj^VL#MsMBGAQH zX{jI5wG3mehoTVl*&*mSIy8+no@(QiUapD|;c2gMrcM57UuhBOVmz?qzXkbqV@)?T z1ifzvI*n6?(c(!K@>X1p9thb#S0jHm}aS^bfwTHl#0y~a!sc^wR4tT9) z5Lhv=9AIDCV2gmYJ8nO}(YVqJm>9orHs^K`XF0HG28MX8ZFCvfa$t7nG70E&TY+7V zFqXQ`pz@^vV<)igr08JvI7Pjr5vCgrqX%v7t2VBP0NVULE)3s-Fj#3A>;Pe7>}B_& zJ)fvE8dr)?zH7j4DWAZSfh_`NcRtoDcwErRr&65_3WF8dVBuAHfmvyWl;IL1DlCBanHe8XF?{jfE@=mh%nWZ zPk|KzOFOA!eX3%!fvpB6&SY{;OyqMlu+(3CDz58V(-V0?GGWKFgwytWF&)4cN*C+{ zEDL-i;Ua1Lp$gXIn#QwoU};2#H8ARrG@d1&!8rzzVRekUC8K&<4%_TkdwJRlECm?u z*jRZ*`HzE^4lH1Uk)D(fjN-SXDfj}wihr;;kTwI%5TqCLS#{Xc+$@M)Z5@H#b%lrgl)Cw%_ZzOu*tvq)b}XOl_sCakAl9P z`n%pQzA!N%ZvkM7fQj_BnwUtB^rYh#pr27*&X|};uaEtBA^7s`F~K+49uxUo8U{nL z!pd-qKdP3W90;4&3 zDX;*MVGWGhp62AOz;2@Yti(*&CmB{Q+s~mS!ySOdQJ6|zktWG-Ip z9GIr>9yj;jMfri92R6ipZ!)l~zwFnYr0eI0z%~IZ0%li+3SfrO%12MyILjaxvqQvL z$6jVcy|lB(gkC_p{!+x*9 zy1odYm*0Nw5_zd(k7?x(gQbVTa)AXG~?L1~wSo3&;ZYSXE5)?J{6H zfZ6G><-jh6z%By|NcMbmFQ7ZHNmbL!rS_wH0sDYG7=%$jqNKUFf(Xer+GeuAC%4WWuccC5LRa%5!J4>r$ z_K`xPkI-DTJJPSl5F4yDO`5BY1G6g!%~f^0e%o~->09Z*?Bb-kY7j8Hy-w1%3V_LQ zEqTeHGSXZ%%BRafvRMvMr!-eB02ZvL5g*M}yMZyAIBBlh?f0uUQL$n5vWq&UxyoC^ zub!@oiM-HUbs1PtTZp`bnyV-;G*@-6>DSh?mFWpSdJHFPgp<+oNj_~(Az3p_FxJNa z;09wPYmW&=KO1#gg6uJp;T+(B8<1a;n{g)%JeRO>z?R?Sw_VpP0A?6O4QBeIjlrd1 zFuE^km|(t(VKDm9wqb(#=#`&_3C4Pb!3No58B}&M;pU%kd*!n+=7-uVUkQxj*YXL0 z*XxYtpRLs~A>TCrQ~(RokpxEbkMcaeElMt|E{g)A`DY*6&+eXk1+a_2IuZ-4&L{Fl z^G~~Wer-Rl5)*OK{8I)jC@%pj6U{#r!2Y1PM!03hZk0PX_oNu9}`o`K0-$6j+z4SQ=rMfho7>YYsf?^^!|i0{VzywDQrD zCiApco&mnmpjgVDL40YzDu5+d#Y7osuRNxMUww+OPt5X(e9~TdF|Ywu`2@BAm|=qR zQW^$35C*##28$t4)lG1Ev{!DJU@XL5xhQ*xy>cOEMToQet$uY6B35>o^&&7z%dT(I zco!ghTQwcs)GbuthOy*T#M{>Z;94+|*8n%V<f)48%y1ZGK4r=5tvYB zL-2*zmlpl;zu1=+^}=X)uAZL2uC_1TY;2P4?-*%c+8k3TZp)g1_NCofeswsJYng2% z%1-;zqkv@+7Q{#U(&fPH^t&=(h6%3g@-P_fOB*JbPyAjj+pi8rfZ)8)zH|;SyS_&I z($j!7vf-oOtE~oRw|6uSm|=uh{L%ES1!1t#Fc@BIWg6iXf3)AuU4&m5sPCy!C`%i~ zU~W$U_85_`G22MUL^7}sU84}`%f?#uSLC{Kb50d!-nTS_;@9xFG}O}EFz+(7B(1K)}=ErVa_ zWtK^lcd|XN$kS4LOrGd&R}gQ{>6Sb*gDF%uJcsRPXWgkPOV ze3MN~$Voe3vw=NI*g_K%c}WLm7)#v=zFd1u3ma>aIp;CLSl%`*b7hf?ljfGbw>~a_^0lMNiWr{I$H3Q>O=C$fKATnUPRfcUKTv9pLcdLWnS=wkR`!KvUC7^;?C@yRryGk(*EsN$G}w{HZj3R zva}mmJ(`n-m{=~2jbwuF8JK6$+R!e}&08Q`F7$J8Psc(}1^xUeeSInD+If9nidZ*7 zX7qD;>SJ~Oqt73fc#1(+K^MPQvd|ZRo(uZ5a5a@ui+?SiXWPWH8}w4pYntJ;bNQ2a z-T}IpV=VF0x%5e!c&Lxne8#W6JH`?|1$4t$%hf9cJu3u#R0w*twW?lkOA$U5`3WF# zU9}eNLT81BvF7JM2>SUDbZ_wbQct&02s*7*4P#B0&ZP}wrPE%mVXX9`5cJt0=qp3e zw}zlsgrHvzL9ez~>(}J11<8PJwES!I)M|81-uhOfC$oPtr%gs1zmIf88oIy}AB{t~ z&*Ch#DkjDZ8uyk06Z83avwsVW`rAHWt!?;d9C8=xeG7g=uqeHyuqnXo*2gpsjRIz; zuT=n>3C!+3AB{uHLtxb3HUWzPzoqP=474{CYA-S!n7Ky-UcC$|l_3|{0mS(Wktdq< zBIeLyU|XN_t4_Gen^iG78`(YDuO1{mSfgI*z+0`qi2(i*u!uEM1w1Rq__g0BtTp2` zaoQUyEYiiE82Pkwh7h`lS&rotR5w;$D&tlIfE$b*4}&SFljX>3P&tw*&H%7b zYo!jrwt_F{oKW!5KIlncVjU4zwZ8L#6^^&p>uGafS_q8hmPNp(Q~9o`8Yk_`s1tN7 zxhh7oz7JS4xXP_2Ci2N37lsM0vpQigy7T0H$*;O7&P+2-(PwFHiJ7R&{*xvq+Me#A z^ab`Lm4Oo0#!j)9UJPtEFuHH4ykPR3K@y_RE(JbwDsZ^Uk0x&Jr_kKece<_%RK^|f zk{>2mf6}OWKJKs3KtAs=($MRGq8aZ;bE0Ct@XMt!R0Z2P&6`c$aCPkkx{d=z(Zdeo=NU-zp=C_R3@$~a7Y zs%(y5eZFd5L_eiIWtiad5k1_R$%ap~J;|D3g5xAvGfXf>vSyfIEQG9yx+b1*`BcZ* z&n5qpd={19{154B`4sXZ>N8wEsZSWjQa-^KqEBRy3|1ISaD(}%PZ-96iFP2Js>2(8 zwY|wF@+sVW_nMuD~TLfm&$sSFDcEcFAuEfUSK zNu*Z_toy2JcTNOG_Z4nvEQQ&ao(1Hm$r2CGBsl>dl3=m09>AcM_Ry++v!s))FVXSxth=do1!ATC5+Tz-KJ@83v z(^%uq1(kU5(HzrM;@WR3=|$^?3C05Un5ZjyKcrzSd;$ycen^4k+w-MSJ}28_f^R9X zMIq**O~7&?U-J-$mKPF!O-?H8;}r76!kkmpvBv~oJ9|u&fzI1v*7<|q)h5c2YtJXJ z;xO2vFj$#ACh}Px2D@yJiM%AZjg~d)lb*HuObLUf0ZT8fcBU@!k^`&+SR=$_X`=wO z`?xT1E(n8_+GC=>9i1^ESg+Fi}Q2Z!?Sq%OE~F zZ!?Sq6LHdcn_(=N*h2_$-c~vPh2W($L!7sXyoNY$6BwPhm7%Rjf7kLO`je0iI&U+K zC9i3eUWoHH5htCuwfo$!;=5JWI0Z)MZHBSLDP)7r+YA$o{TJtLB0V~9GfZ%tblzqd z3nuvJyv;DdSg$bHpfFgGJ(foGSz?cgdRZF=+ZP5qZ;z=o2i5c%r8C-yp0zoS@{??f zYxgXA*<+&K28F?j>@ltU_Lx?FdraJi+h>b;UDRo)92aeIZ7z+WAH?aVvW>kiV=hgx z#kH|9%^nl^%?X2zv&S+hulV$qX)5!h)p@BsCek|)2D=yri}9Pu>HUV~Ja|89t0;no3?R>{5G7%ypY=vC4Np zAGgJ|yC%l3&s1``Yt~b}g{SL|LZUW9B~9N_$+?=MH;J z#CsB0A?kfHGHR)Ja~}25OVdJ>g~;LdNCMmZY72z1#4Fmf18BW~&9}k&fMys=-3h+` zb}whC5h2{*I5&mCD#Bol6eisS$4Pr6h6%=KkK_!>emeqanCL@7HfWEe-FEvs*R)4s znBX{RkEAd7?9O3mkHj#+e6&Ymm|(0t3`Tn-h6(1QJrctNW3)$Nm|!f#9*Jo8oG^T$ z_DE$1a&7k8VqlGI zFe+au^4Ze{qw;yb)_;cqzn&Mfdq0D*d?GK@Z_fj}-Uho`zumF3 z+Hb!^oYZeqcIk6hx>?r(yIQ}^0N)!`^P*B6QomJp+s}v8Z|eXXSCvnsNBwpIFuQj& zgy^@TKB?cX1)tp+JN4V$zydbuffQDj2q&Yp1Nk(a>A&bJV!jH|R|-*VM)fug*87e9 zdmokqO9dwGG{A3_?XC2zo8Y`2HvqW7m_iBbCKwCYW1_x0guy7f|91Qd^?fPopDWQ{ z8p74`S+#%e0~S1g)InJ4pM6kgt*Y{on2GwPIvof6j;gqjMXJ-?!0xues7@R0vFD>Y z%>_p4S#VydP76a|RHsXU*_}Vod0ZK=0TgE+vyZAIGqj#>w%4z|K-eG?OCyXFtmVK2 z-+xR@@X?uBsPj)ckBiwC`aG@~uvAJ9)+&eplQZrd#M#6q&T!{(bjEEMEid$>^-((G zo`yIBpakc05wMlOXv|bzs#-5}_ORnyzxodGEif@rpLF(6_?>!T-VNl(N{zx7#!@-G9fMEqu)(~7#G-})FPn2&zzW0+v<|E}Nq z^!Z-@J$i$x`J~_aq#v|D_omA zrRk(zA9~lqa`1Hyk)Lt)=L16C763aB-Zs=117?~cucg46{i0(xSHFmrLbH26o^q^f^?j;{U@a|8gY3 zsP58$*SugqhW#)0-UlwKD*yk#{1HbToko41jEcI*i^O!MT`)pM@`7u_l9a(b-TVgGgdD#4( zlH~sRl9A=~gS&=!kCZFH1r;Gt$hrufJ?AvVtg^@%^t6 zhx_?D582{qbV_+6{W4`|A+pREo4!HHJJ&B$ZB&V@7nypmBkLP#)A?0vExOk)lOq>ReA9z`^Kmxg{kcis^t08@nY?49Df>ZxSrW1p$o{2l z?Jt{)Y}qKAK0@rdroSu?SxKzT7>9TIWvU*9$TlBu(@&FpmHlOvl8<+zLhY{_k#)t{ zg69*b)NePkXO3MAnOJvZy?wSKXI1B1=fH=~JZd zd;L27`vv*zA!D4`SJS@rwQ;W4E1x|Sj<@NXCGVAfnQT2Z@n5W!em>ErUny;}#V=QW zkk1~XdwYkZnh{Lh5*tKc5GJo6KIg{Uhx-H~8j!7ZU>y7=*Tx9#mr`FmFBhEE{ zr&!sVhs=>;_W!*8vO;8;XPEhJ?=P!Fw&F~i{!^*P{eGDmbB)Nlkafu%_o&EZp|B2? zL8sau`JObJ{zAp0!(wE8m)LZ@QPwpNY)!Bb)Jj z`(1vY$V!mShel`imvzANT>*9)b;p5w$u~p#My@|!uGk{yPxf0` zS44KRU#9woeAZ_Dg)QVcqMX_LuA|CBFwptyK%bA4-F?(&AZq-IuPwg~EfZfm!^p(f zI(1O@p@ak5NPOLhOomnT8h_pWzV1L4>K;yf-4{lt;g{IkZ2A?V69mpd;%na(>@)Fo z0r{j&0`e(a#MhSe5#BvpKB^#%jYBE#zQ-@?)Bx(%)yvvH>x#fV!)EnaEOqWefT4(Bjbfls`+5 zm6LBfdIRjtlD_3ZmVF2JcKv0l4qK2dLl*qIEzX4l3W=0c3dt$O@4yr+!%|4z6G20QnjRknJ8o){U%% z^0*BPEKk+J%Ds&53a+1P09i(8nd-lyZ=khh54L2ICZO)h7Fow97uiCdy(|!=<`ryb zn9oaul2sq+21wI!U+Fl&pNm%^+qN*3ms8Px}m;h7nw zGtAneWU{vSt^mI%nXE0oD_C~acO$3-#&dLG))u8x))wCtpi}ue%-W)4vbOlHfP6}) ztS!DPSSD+W?+TD9owBz0t^k=j-|0bCN}nhufgv-_MUsij92#bAQTE8%;=2O%O1>~_ zi^>;fZBeptYm3z^DEPf&Yccz7Wah1bvRRUbn!{wBb%O54IU|D_Hj8sc)JYc*yLI5Z z0_vpvn1di?gH4y|Ga#>$E%#;e%Y6N5+KgGit-gWS_AaS*Sg` z>@#*Fb3y}jDqqV!qX${2w(US>-4uGfXmkz-vQYDZ>@$*(g&Iq84;!wHWS@~rzPbJF zRDE0a870VmCbAd(_ZCVf`;1;>L3LO4lYNHcNn6Ng?*83AgQC(<%QX2C|Q_&hLVNZ zXDC^ieTI_BK4T+wh?hEuR|D3M?|Gl0%Ulphsd-;(o6l@D0dn(uw1EsD(U4Tg+RX4zmN36_1q2Le$SYr{4Vv+LeB+$Jq4;= zWuH?CKe(M_4y}VPeJilsnebae@H652E~CCqr9TgTdx-Qa;P=80?l)`U$G%`Qp2ZCC zkL+`n!#^p=9+^X{;RpAFz3_ckpglcd_*Uk)&FGmBq<=E}J@AA5oC@D}1?rc5PFDzf zj=EPHVfd#cjGoG)_(s3ld=%f%(;9{^`yAgDXlGv-{!w#i*zd73%FU2AGB2P0aO3Jf zomcwnHNH1b##N~KW0@~8)MtmZnT#vn709plF`bIiA98A7B+qK2)b3rnxPbRW-$+FKs*E=Pj?6rKCveB%7$Ts=}&|sPDwR~5wtivaO z2FQ|C-Gj%BN?_cV$vjbxotcuax4)gT*YaHfI#nHHujRV}WNN-ShBF;yXP7e`|Es&f z^Sr;!)I4MK=Om2UOMQaplMMLItv2Jk_5;#Of1C^72@RYlrTrGem;UGDTM5e*Y)232 zg3A*-qW{FRJ3`I!!sXw)&Ab;^>CEq)B;Vv_v;Qc5mYR>H9*aZpr5+pMpW`pjNH6v1 z3c;6pCH>iEJl`JRk81e7OSS8W0#)wO#6YikWCR8 z@OAd@qI2>ap`Y&(opX_;h`KTU^3=Su0A3+7HNFU&<*E5Y`nvBjY>}8T&&iy-k$kbx zU^_QTGV=<~_wVN1CUpLTya77>b8cnZQRf;;CVjmTS*ZI|HRrx*-p7ee0qaeeIam4R zd!BQZ&ZGLes^kc#)$~>HJeY&sbB>s-#wkVm{(t%F3=QyRmPU-)yyY0bekgA=-^na!E-}V0#bgFx&bNZJj z=R3QR#Zj)|Goz8DjgFe@RRZJl1nK`>aR0Q|5tWO|4;s{-S}O%-2VB>kd^vm z1^s2=_8elT^#68WzQX?b+L8ILfIgvY=|h(CJG*`n38KsU=acgt-xZuM%=wPeDd#(- z=+wy^?dh*m=K2<786vCeFO%~fYq{Mx>u>5Wt45ZMOwB`W{bh2#Q|Xhn_m}NO=DULH zAm=+BzI@&N^Br|>qB0-(94YA@(-v)*Z;erP4|BewWMMu>QnC`d+%j~An)Bs+r!?c@@$_*+Pq{iPl6iN*{dWC5sKGbx^~)sv z19p81^Fd&_)$sEw?D}Ls-$=g&e(5^9{(xW4kv+EaLDmX?xdy+Bbd{BM<2R-P>J^RN zjEC&T@5U;=u}778w+z1eeb<2Wvd8X%ubv}Rd_(`ydu&5b9_f9T^1XQ$vI72!KiKuV z5eC-x=smWf=jc7Q(JnIY`mR9zd*K&8Y}X%!n*LYq)kEA>WjB6PT-mRy_O%AjQ>LA= z$4*#p*K_@Pay1!;at*XzuXx06eBNaD&rhl^%6eUk>=dZ7*Dy}W7QowsEIEWs`i-U9 z9`g6!WW7#C7HVHD>-B;#GFh(+k)=R`ZRvp5h-_jAnXK1)k^Qj0OpQ_LH%T?2?UeO8 z8`+8d^QpSadR>U@AMV{NzB+6hFPz} z?t$y5ulg)3VB964ttA9M1AaSvJJjqls^7{yqdjWZok4u*FU}BrnP+tP>X|yTTq``e zg7@gPq*Lu5WM3=%r$}$uVT>QKZ^dJF1Gkt?E_W3Tu^#)(;^IZnt zsePC6)=n9`c5+ldmhsl@lg0KQi!$DPmnzFFFq}WM$L+>(c|$#S%^e?eHb+%P-*!&;$P-KR?Uw&$=H6aD&)c~;hyF8J#6&4Bc~;rlMrP0F4w9}^nLmvzN=8GK{DmiZxTW8ivew7aY; z9{7tyPe8e{u0(IL>#zCwh96{IX@f8I4(x|3;AcE(H-7UmK#!~|jqvXgeTr|aqq44K z*3o``zG0`#4{Ph~x;!6Yq%TnQ-7EY*+KqQJlpbSUmvzN=1=d&AmCDU_z0Yr_kzUr7 zil+nDS3|#?-SomwL$^_`kzPJ)NPW((=lkvaZfDi~Y%&{2#*>VTEzjG7pXF6^oQwa@&lWw(S4JO`KJU9slfvHT$G&Jc&ToS9 z>+oGD3DlcGd@=mkAbt+<74WwP@Wa_l5_K7N>8j0-w%6cGdA`e64=G#9^IblExbk{m za_HBQ*jJD5GS}tqaD;q+QrffxnHsw;f7|%mv>I8ul$F$9CT;4wl)a|W-^G^f)-lHO zWTL>Rgj%!37R$>HeUGq%WYWLdkzE`@CblHEICQ~PfS3J>L$7CiMJN0HQYgb&$~s7Xj zZ!(Zcp9rpp_$C*bEl3uw{}hl`{RU^y_~?LtrsxRZXApPpbQs@RVe-T2EhSx`Uh#!o z1MPWR$TNvF(K$!z8%}>0X#@8%-$j3)PydpCufOnhhkl#bqUw2M9QVOb^7D=PNc`e@ z!_jZ;{4Vy8OH9!uC}BZ$rgU|AU1K;uyQzV8YyZzF=W=sX=7z2b;( zq&(^SzAHFihfe?vmT3%tR-ew&{yJq1k8U%|TiahId;C;n((Z;%qoau}vd8yb!R3A5 zd;D{bxlfC91Wa{3BaNxa`?3eAk z9meNjET2b3)X)vv=>0q9Y6A7DQz*#>HN zpV|PO|JVG|{#S?b8QVsGyZ@K{V*i`NI9rs82HexjJ;vlPvj4~LF_h1~=X(sL^LxI> zFy`3*{2oKu^6#Ee3DK`rd10PWQL-@aIxAV2dkkeun0pK*`)|C*P~{!NJ%*~^G2COQ z^1?i$qI4d^J%-X5<{m@I!aSp*$_sOkp=4q1F_g|Q_ZUhR<{m@o{GRVIRC!_UF_bLK zJ%+O7816BY&i}@H3{_s3dkiHDbC03wH_$zXjP?I;jZ-@Rhphd|mjBAyU&1;T^j%R( zXP9#|B@460DcOJJ9IYK&l4YrtMhRGN!#vla%iit(!{=zqpZ|M~CY{08CnRLt=Y}~) zQ$7px9Hx?e&ug60c?{=hYR)=_HBOZmW{p#_Fl(GD?|WY3RC)hH);ML$_q@g_o&Q7D zIAzPRu5tg3=V+>*eb47;N@tjJG$jjjj;3Va^EsN*8Ri^Kwb3!0qp5tyaE_+(eb47; zs(%0O94+_nj*#C+8|HU{m7QVE(NuZIaE_+(eb47;%Fb}-XtLKx4s*sPvdjTwi$lv) z9ZEvWlr5eCWLpN1?FlVY<@F#drTr#ibMQXPJ`ARL1)S+9TapHlNtXX`53OuDhCQ^( zcMPAWt2!LR`I#aOayK$MzSKzS-(n7W63=D44p5zesB z-TmK6*Zr2m_^xU7*vOG{=+?I#`VAOm+y-Q+=khX$r|fkY@5QO~xr(17>Hg_3-X}Bl zNV|!zlHk8Da``OD_&R${WO9ydf5)M(IU@7OQK-nIpHw5O3?Y+yE&W|nCZEw*2djLs z1f`$sMP`SZw=c@RKH^>QvxRTi5%&4Xf(}Q(d)mhHN=f9agCDF{{Lut|jObPMHqwhf z_QF?Zzp=)>Z8&VJR`%L`C>I!}vb937Wy@%f}Y~lNTs`+l2 znY>TDca&Y<7;o3Nylc^$cH8yVjidD1D`WM2Jntyy|NF*kS(;PJ>K@u-g@F*Hz!aCZX-UHbr;yT`dytm}T(SE)W`_RV#`wE;9IC8;x`> zGyhB<<$X=b-}bga3(fSc^US!J&a!os(!19zPgnd1E!(70Zx>&V6oE3n65M?o_%)~i zzXy*3zIw>btNQL%P;y6_Tgvqzk8tiMnidnQy9=}a<#vGtpb3({aBE&KDZb-X@Gp17 zf091A2S0Opxr926I692DjtyLqzPQ-L6=lYy4uO|1Ss+iszI5T_zN6+)@;!SGyS-lb zA4QK0pQA3l$G!N(bY<5PlNOkCnMs#JSAarL0!l#{5M2rXJnT+!({E4fb8ms_dY`-c z9O=hCx0pUE?D5;7>eKy&YDb@KlKxmOUw$7A){(k2p8jXp;!9)14WIaUn)!Ktgh?Y! z8fDT!CXF%aV3Ydt2UChX*hhneDl0gxb=nYp`=vwlHn10TgWgMq=*ud`=yN-GpC+BT zB+a5%X7UaI@rn=ZdN$~N&#spb?Zt#&_*{X}ewD4V=VNbc>z^7MrMrHi8zg z2kZmAK=R8KY+rEPNF%*1@Cx#$(j@s z{K~HH0X?_lAEoy@q*LX5hjh##M{Mv}3T3Vc$w%e?%YTKhv9dO4P2%f)Oc=?x&>yI- z@8=_=jj}e3(i`cct_v-CD#!$T;B5w_gqMMoCr0Uo#Ix_U=&{5lz2iKik7X0DKvoTM z2^X@)pjLb8Pn+JcKo^sz_L))ocKByTtN-y}TJ*9(wiDhA z?8IxKm7pAyfC7*Q_L8mxNc&1(GB2lZr&Ykp>0=%XJ$e-P*J8{!22a*NUtDNlT>7@e zeeGIJ+vZ(t)Lp2g7b@w5N?M`OCY8tGBrZ#XP}zbDl|C(09+43`)TDCTDskDX3LS1z zd3R9a^4^6|*;@;h@8T0W(xfsbB`$kfq4NHwP}wUBmG77pD)$XSa%AQ=Pd>5k7 z1e40M=n|KAc7%>MsnetrOghn|lT13R?O?sM1<=#U0vrL*|(lbmd@1ltOER&|1^lX#LcTtI4 zHZe&jTJ-pi5fJ>5-}($I@%H;(}U(L zOLs3@o$mJhI^Ep|s!P+|ZN&B8q`UVKj)k{^a8B*2eMi(J;1@Z@qMMjV(l044H$SkF+5D%mha%mDenb0g1^7$enA}>-yV)`putdUx4 z0U;xenKIr*dga*(;|M9w#?Bxlo*gu9BB9aLU??^4(a52*BMq+%8Yg+giz4^YsMwR? ziVx%A_K&H&$~(uXTiNStpQwJZBf6u8$~TGlJwNnh>{Xuc$M2u2e=Jh+7@nuLQXBjo z5Rw`y&-;B9F;sc}h(FELc-|M%j5KD-aemKF^n2cM#PcE*j}9_DD>O1Tm72KdLxWT~ z!SX1j)9;;rvB=|SHPiE=Tf8H!=A)66?WEPwt?co&rjHJ&TkML&E@zarpXaT9&-df^ zPt`vbDR~Ufqt)!`reA0StKl_5eqTjcmFN8}AvHDoyf35~Y0Q-7=qS{d|199FCL$st zXKkOl=a>D?_kGFUtUxwA!>rM%j5vw6%SK|TBPLl(R`I5*i4RG(B=JoLA}@S_f0kT- zyn7dM>k@z5HHo-wq+ef_4Brux{rWs*#D~vS>64Q=f=ZsQMZ~6MYf-UjmuXRx)6XN6 zK1cq|=St{e`FDlpX5hsuJO4VC?JEHnn%{^4k~Pu>XiJxVV7qR1D}Mo$PZVuzYD&6ueRs`0$=^5KdQ^g zG(te^8}N!aN-D?P>XP5|-bhE5{afMv6>1MB`#Dx6Riz4UQl$T_I3#EJ|9kzf2MiB5 zwc&d5?IW}bJ_pHtiSL+*(B18q^||Fc66ABi1()}^XTqB~x6hpkT>$dHGEf560uLB} z*Qb}%K^s96_;E>^dk=K;oIZCQ=peii+5@eHYLVoHTA>aw8RYTVO%gPN@@GPI34<(< z2g*Sus0J+=eeSV~fqo(r--%fo5z#S*5>WMBu~g=y{rc*{Wv zC<7J118TuWumxPUiE;YtG5SL6Zz68b;PcoWtRs)7xf}6IGuRHl9dv+wpbM0XeozP6 zfYwVLw3hU4WYN*IPg9BVfgFf0n+iD?G}=}8?ScXvHTTH zFF#4sXC`TS?ddUk*=aHQVstyfElV`*CeDKoF8-kO>D~^GNha%UBY%`8>B9}T&}!%k zXbC6-6`&G$z(%kc{B-1)7mq&IB6cdmr)LK-P_$8$LSkia(WK@Wh43xqM z+;!2SEc(k8diFF;&!9bY^k#v@U>R5eO2E2b6kl2O>03AL-7@xff7`a`RcArGUJ1V% z)Pg3Ede<1e3)%;^WDM7PZXBbxfwjX(1NH#T%KQM9oWkek)Fm70g3g4-Lak5@njvX` zg?g-o)`E>-GiV2EN!J5icHVHk4?6Re;d+YrbT~HucDO#1a021Fis5>0(r|qbV`CqP z7T-Mowq}>ZM>Pz*-oq^1a$b_aw!~SbR`@sAsKSwtIo?fUM%fn2Z!7DI6KNZ!3SS}VoB3$9Lcw{N9C&@bNt?}HCPf}MKd z)A@OfCBli|B#;cw0Ox{Bz~x{eC;+#CJHR^7@#8q%xfozmo7nZUbhqVCY3>BVC9T8t z!q zKAQQ8I_l{*tpe(iwUxZ`omiWR%lG8S_vmayM=N!79UQJ_;cNL`n(RBr=m~&FA>7NM zn@Q6~p6(mc-F1Yc`xpZ?V{|)czaU1HU0FRw7hk=Rlji0tOx<6Aufg3@boU=F)!h-t z(Qd#BMuIWG30&Z0a2oi<-K+sF-F-IU3~&L+2D#vR@Kf+}(2gxm%5J4h`Hdd!#WZ&+ zc8*|v8V;;rb~)=6wlT*}6;b&Jy7@?A<<_+j}H{7YVG=hsQ|9_Rsz8EE%Iugw6mdAd`3wSOO+fze4C0@UH=liRtccP>%g~6VC(EPCtg;4pxHS zfrlBF4?rIRkAfYPy9wF=wt>HZz2GBo0Q7=(&|lRdz>QV%f|ZK)B>o`u(lP z>y_l~`6KD^yB+!Q;D_K(;DeOkM#=YAHQ$it{xk8vgDz}2ur1B~1yp>t7hWB6_W}^z zl;-|`_@Lu;_m>YC^^-QS6X(9zUP`~vKso8MR`|Z$LHEtzc2Eu~!QiKp&Apbo=PVkb>-fPA8c3s|=TA`Sdy|)q(D#rg7Ju!%ZG@in%Mp43=`weuxhq)9 z?Kj1<_QmV%=(67!uRE5+>j^i+>vN&YLB(&4HXU*XYYX$x%%8;TgXo*3=qMvjmvyJ0 zOMFffyI0VUyP)ECnKOC_%WoUm>F@h~*yk=gn|1PnKKD?3J_<|$XMhVq4nV#84p0uN zz&7wY_!Ru(27CyWvhtWyqsLHAn)~d$4ae)dpEzDGh3=!QI+;ItW~dfg4H~oh+#8|X z*E*W|ejj1)W8V9m{qEs3_hxKw1e-~dg3ZUH^A?Z;uNPiYgndK~dvxvO=@ItT^f~g( zgm$pc-Uv;B+JDEG275^Fh~V=QAU?{0I@lZU=J~rU*&|e?VO3oNvaayWgEE z3;G09=8H{GhNYXK>V6(<0WyCxq}?wAjyT+H6Vu(fQIri`23-o;;NLPh-F+3h_7EN# zlkR>G+CC`VeL1{+g#S$V0Q7RweF=StxEC5je8^bceH@q%FCIF9{1c&9K$D=qhn^1A z!F1A`2OS2z5Sm2(dC>0YboZ6e*P)A`PeK<%S3_@t=0k6Ro(G-1MR!ky-bOqIS_J)w zdaQ)LNm;*v?jZj2$?5L3gdZnd4c!1%Q0_C()$p32*IoCayOC!l{z_P5tVM!BU@QK< zep0%7TV%TXI%os*M^F#+TIgfY3&y0o$B_0y;!~ib;YEB(Td=pjl=x4;3UCkD0KP%K zlC(Osk+>}?-Te#V6~td6{ul5i*fYhZFZk;S_B12(Q72#{xETBh+yR~jJHSrxSI_|t zfG^Oq1bq(r)W`UB&^X!!lo3vZo(6_c=C4SzjI`$xzXV(ct^hZKUxSB0J$M;(f|&8T zI~F8^Ge9N%`a660q;J4rppb@lz4?x5Od<*t44k!PO z=VE1C;>+>yP5~EzYr(Bx4fq3i85{=VCNgJ%OTc_^6Icn>fk=EN^ISFI8?kjUXe1m9 z9hpFXBK%h{XcGMsoC?kZ*MYmhBj5$F3w#I;1KVW!4VVH_z#>ox>c9^0KB!de<19EPD012 z;3V+zH1-$J%@fhTMR(UAPeA8P_Ez1A7X5YNCqq!Fa5_5A1E-_!5cYI~N8qQh z7Cj4n0qg*;1KFef3pxV3zJ*poTP~M=o$emSJ~`cz?jDCf5(rNMNnqMM`XBUsa22=_ z+yU+ZkASDa%it~W4(M8M(RJ>Jx(P?)rvz{YxCGn)?gusCPvBj!9~=UMPSo8efYZQ5 zAP3w83W4lLJ07v<<%DHFQi!iN5pD*3z;+UQA#fVdB~0D3p?RPXc)%9W3O)taB>W7{ z12=+)!7T6$Xa;YC&%l?!bu#x0U^%D+n}J68uR{L@z5tF>*oT2L!3E$-a5HFUjco;u zpn`ZG^mf{6IpBy&&bs;3j{qbEolVn?{e{%g`U`$53SJq=VIPzYGG#xs#dub*m$B29 z$5{>c92wlZ)Do{|9`t~h(9?5=O;7%uXYFp_o{s0VQhIpyjx;IgXyPIAb{Tt=(E$pG zSA$Zp>`RM2_j1;9^lSv%zu>ty=-ghO2h8C-@}05gYMZx5TRmU6Gye_`6o4&nTlCyL zJnuN0IAu6mG`;&1i{AYi&&G7|{2Y*H^_sM9_jWLsX92AbbN2NIO+7off^-EuUntL{ zClo~HCL~AX_EPrRuPpj@ZHT^E_Ej8=HuCU$ulQ-DO&`n{wj|PDp-+RhQtH)W*Iv4E z#Za%i+uQiDMbDWsL@%AkbBG7A4gH&`OXI!Vx4Sx^##{2n;-*~+* zdc85)H{LH_^gbL3Jw$wl);)euQ~UTqT5b~cY2|F`${~7EB+nwhL0x(FQQEDPx)*}R z{IPmDbUC=;diE>W*CIB8J>Wg?3HSm;{D3_Uhy&xniQrUlIyf6#04@iMz)!(1K`FQo zc)%v`9B2V=flt6!V8~4FS->=K2AB&j2l?P;Pz=_9^`H(s54MAy;BVkvun+79hry83 zun|lG)4@65La+c_2V{@D7a!(i_qmg4e-4jEWE%8c!iT{(_Qz~`8$OBUx%<}j{5~Tn zsNy%%fYpgHs59g;nPx7p5HGPvg_ip$P zfeoM${29Cs{sH!ZufUMgIWv0yYxhUYv5j(%Z(eITo0s5RXfl22IMT^)urDUujt$GO zp`GVUbC}oUcYS5gJeU3dihm5!D?u%`CA>XI-_3LM6UbZrf<>2mK}nZQ9p#zV>tCLkVe6f zoRaRoWEOK9ad`s4H!iP&*Np6L=og@Z@RStxAJF;GWze?2QU+KIW`ZZ-=b3pHbTenS zMQKggld{XE=YdM#xSg{ka6A0o6`ZBtMPFfXuORLu@2lt-b_Qz)mVNmPy~Jh?gI~l$H5=Li{NkIJ@7F&2)+XCw8MTNYpiw_<$}|}W#DFT z4|oE+1l|Q-fl;Ztd+B24edtVZA-Duw16G2kz#h;+og&U=uL%;tEO0fr0o)GCfd@2z z7r|@b4R9cz^%}Ytbb|e$7et)HS_!P+3F5~?6TvCqOmI247W@LpJ;uGzP2hR(D&X}d zcL(%a@DDfZ1n3xR(VaTyL|_5(jggyv<1D1pL;pIcWggVb<-va)M9ql@MDs)_vK_3LpcMiL|>C+kKvG&5B z2k$Lt8MGPtB)A_GfyH1RNCDevvpS7+el~svCxJG2lfSm<^9j$ImhN5$eGJHZC=Jld z;Ppa}hi0r9qYs;qki<=0~fL9Ls2%k$DJ_#snJ4Mqq*7~kD2I(&Jjk=J18kh&} z1K)Tx&3PJoKIX`FsVlsFAU2aTb!>bdx*ha^ITzv2wHEzO=u6;hF!^G}EqEAc+UGC6 z1daG1_le+KV0GHHwUm1a;e*L(ZA)GmjcNPd+PGX-8O>ywf&P3LQzQgWhkORLp zOZJ5Hze~9H%^9L=_$din3%@z+?wHJb2fCEHNAlN za*;*z-VXJYeM8?QyR4xv@@p?IZlN#AdbOLj+Ite~HSz7B8i>zz>i7ZWEr*t)Co`4x z{Vd)sxWYI$m2)-jgI_#}cm~J<*MMSh7kCJ40FA(Ma=QC>wAY^ri|((X3tadGdI)&I zh$|V7pyM3&_oR=$%Gm4do6PS<5nc>0l@HU}*|RSGEB5}Awx-Qpr*IESAIQFj`#i#% zpvmY?LRL*WD|`CAGwF|S;j``@_r^Bf8)e__1g)TMRHxPrPG1qFS<1%5>@L!D&!BET zpYL|}MRmI?@STVHx6eQybjY>TpK{)zoPESM|Al=HX=({;+P~aM3!rYh)izQd|xy$ck|Fm$dz9o08 ze)X-i)#>T(-$HANPu7R1=SdzW{zLdrLtg`*fYP%#kL115J*3%AU0RtVH>1m*LO%vl zH>pGP{d}%*2kkkFa|Y-$pdIW7@;rj`4bHB4C%R2^fGoyj!8;axXA$EkE#3VU)PtRa zis>)RWj8_FSBzyZz0JFa^uHvY0KetdboVO4Yrx;Y0rH-7C+ibq{Vl>3=)m44?e?*H z4t=)l#v%G?$X`UZH=X{2t}}>dfW3PUyMGStfOdg8;lDXZ?;||2ggK7#=0JOh&x4+E z+kLM&zSXqNgb#qYyVx&*TfrmXCD2Bns>TNU*%o~=H~{Y|^qjbo`)k(m1pJisz!-fF zyj;e23u&83w}kLAuo$G`o4LSFS{Hdz$a@ZGC2bM3fV{E?XeCVxNG8n+*4`B8Ri)U0 z{59xa=;CYo+;82_KJ9{Z_q|Xn@xc$U7va70TF?jzLC;r*-5K;VC*d6QOor}(R|n1G zebmiRIggLNg|q$&<^uNqZuH1It!?OR0oy^ztD2s+pcSNB23naTIUe*Tzsr3IvW{!U>KUMC zKj#9h^EY428DlN$+j{IEjSJXG7s2ZzE&t-3y-(>k+zY++!*us^q-lAQd6{qu>ADEl z6aFXs48ngPTnYUxRC{WS{wqlbT>_1GM8?0(+r4RwekE}$=`x@vgIKTvxdwd%x`I5_ zl=(Tf{e^fhIH8(-3wRIS_0TEsvcPJ>Ua$AdHuyQ@`xCSY-bUypHJmez7^454@B+fW zf&Kxy0D2bqi13L}`=i{WP|qmBao`8U^T2)J1<-mC_jA|S^$!V8evG{&zAM3pUCfR9 zkmU&v>?Yg_?aN}F!aqs)F&Q{P%jwLS#dcjj_ix&9G7oZ|t+oI7G_9~?oR<4RoaRZK zqRBHN@*F@^BXvSgB<(T?=;%v@o(4S;%pq)pIzb*`d8b<5qrQ-MG*|#`g1;Q>$EOZx z3O2}ddMnkoaoCavpWjrRna63BLrg zu{WxoJ^(HNKLNFKS$~(OyYC?^=UBe;F*%PLPu`c{%bA><>&;v{MjsCEFlGD$e2(l} zo@aZV@c0IFf?L3IfIg_sWaNCtcc1?W>3Wbk|A@bVoSn&;SQ~qql6!gX2mN(mE9ve> zz7F~`PztUF&G0UQegc(y!W6<|He(<71<0a)d>==Xcl;<#&fzLJBb2>aEwUVBg?!#s z3JM5!*?4vbT6cWBUOSpT2ug`B1AVs`XNb$0_xniK3rd+6OMrSuAAL{bhd$__r+H2Y z+z4&~55TX0z6jjUU>lJ0rjp_Dx|~zU`Oa;m`8oV2z`J1dv)t!^d%$jFx!_g8Gr9Uk z@cDFnye{`{au2w7WV~L8jcadZ{|J?PyP4Rz`wI4!7qHji!@{-jzb1bfw2bFz5*$2p z#yFE_YxaWdY(7VQfPT=F_wu2@hYe$K>#_U6XVHdxT3Ce(+qivzQ?p&VBA+2R0&(0CF!ttX`K_Ml}q1* zSAVdl>R?Z2r|X1n6)*bKOj9#{T7xHcQ)JP;o_33NLN{qQMdkmj*-W?I6I;|FlA?Ee zZXbGK!-X4G54IoYOuTs7$%9Fh`YMQ@254Q~rQy(%K@A3Y1-?rCyrrO_8&0x4d2 z(u}9FSMoq_{qCNsww{`Qx~$e+p1iHrO);JBVe6}U@?V>>DJK6M3D&$S!CAv@A9~%H zZ)}a(G$?=GFzbk|Bi3(o{&U365uI*Vv8QfKX~Q<>nYD?_UGq15y)|b2w$#L|VGW+9 z_1hL$PqALq?5WK^+tsjb0fNq3T=Q?}l{CvbFB-PqQ%j>(TqC?qQJq&epFC9gEcuU4 zd|p#JEkIuX`<|+`Jxh@XqyB#XW_0r4=?eC;rLTh7FUo^^>%kZ@kjTUf59cqiJO)S}m*BsIuSF zmM-q8U#8k|aMdEA#S2H#_BGpF^*`;|6hSaQZd(1qp7q<333tvKX0h4ppM zq=~wj)9UA&1tr>0=cFWim1xg@7JXts;^*iSPR$`#QD#rGXQ(Jl6NRGZY0=Yp>a_aV zrkL-{wYP_yyRc)iZTJovNen37|{SRD4qa|&l zMJn3os*m-R*cX^HzuH$~yRXD|T~$MS$dv#4sauEQH$!uN;SQE+3V>582$m8P?`f11dZlQeO5`cp=_&R1QMC3*HCuR*)L zJ9-Ju?vsCAUc)CfEh?3B$3E|luMxz2$iE#O-j!bpec!wC3!&|#Rt@};N^PJ0Pq+-2 z*>6KvzU{@hl^=Rnej;iA>Rq|dJNq4P%tzi$F-5=lT;}04ZGz`>#($NzCNg^3J-0^< zzCLpHh=@7YpV4wp(Sx6_PtaC97#TA;qV!qMvuTAd)a@DDJbH|$F0bu{y5_62^_Pz+ zzb`g!U3|+u%?a8oRWY2O@m8-{6g#xlRTWi5t3PLwTzREd`t0gO6-8^} zwRM;598&I6oRwF2mr|T2ikGgw1jRA8E5$cyEop}09s4oJs8mSB*PqmqwkSc%RZ5Fp z5xGryg_(70qN5irj9C;be%g_yRIb$4$BLyZ{}G_@kn$3i9y;PB=e$@g%cm~OnO8Wm z4yVss7&UKX)ZmY=rQRz~(;7xae=U(h4`!9Xc@rpVxWvx;NA{U#T@H zpU?j)nj);0;`Hd!>4)ZN#g~tnbzkJlQ!!!ohhDAao)x{tIa+Z}M8!QMIzO6j+Bmf| zvUYIXPriD#V#tmHO?$Q?a`v^_H^Ul-%|FSz<6ZBXky<$g{<^N#QC^tmDXsfv$Qnn~ zCd=xGb;o@*q2O6(%|E^CM~^9u=$){BfmU(cA&QJYt@PO)2l0_BdkkdN@mqoZST`(@wvHsYzX z4|t15k6FEN<@5c7t~P{LGjC}cgKo!J{SwUmi{#$%5w=PGr8}DXiCwKCjzM{V!E;{< zR9b}6*>-Q^Bzjp?+-om9TQO*dU3=CsUb*@z@9a;$?N^<}+eGEc{wfzV2CBRVl`Hpt z+po-LNHA%~zr0q9Y&8~W-DxuAoW4-2FF3R*l4-W)cdp{**wxc(r?W{(XUBEBaPwx}cIwq??tH{GuQ{XsvO}8&iSReB`il;&Z_Xy%`D=DVH%4xf z&1}t2UCf$EhiIIv8mDufdR6AW#FLA9r=)F2}_E-Fi`4`hK zA?z&Dtd=#AT5;O=+oQ@?JDoF}>pfcBSJCqa54!FZ``C%a&0fTXcQzHyxO2)Y`x~OP zyQ7LN5zVi)H>8bgdgRWrKbY_Ort+(z(+{nlzJ5Yf!OKp4H@lp1YtqJzotPgRPv#A` z&OhT@*_<`Ev|C@WZfe?kXK~uN+kVqfrK4cg6Bk?^<+<|S%Nr&ZO+IvE$JtM zi9yYe@B6@cSJTv|8IRVXzn=I+#@$i355<_VKZtAmGVY@u){(oTVmM%?URBz{4-YQ2 zAChG;#yV`%U;?Y_i^ht(E*X6&XT+OB5A7Ur$a6u1=caygC)(IUmnbSDrZDOX2RG_gAHZ* zKXh16LavFt*>h9sFNu76kVt*kL5h?{vAOu4|J-DA|B@iFb*|!wlNz=q+`2EKaj7aU zaX8xmCChTvzjILWI)`x&5P_PaeWJ42Q)c}M`ae|q|K`&_#8toBOmA^jy>$@%iQ1I< zwu9DjyF8v|PmEzl=L?Sd)`LbFHF>W3SIuzeCRcrn8BQd;!wlzdbk%S7rGG-~CGV~K zBG*qC-0azG{fSiLAKt31s=TifO~o0q3#q7AEwXA|yz~e|(wQD8iIN19%oT)Zk2YU)y!(1qf)3`yBQ65ij$_KXTNsk$AJG*hui9qrO~xTvV>gzrp9PEPvZY zHcS|-a(r!+UGss%sBGd)SN&qKw@9*@ZFs9va~oyc)9mR`Wz@7giX&~#2B-9cNLtG@ zCh=WIeE|vgHhVlOVd6WEszu`I{PzegatYnF_*`po2D9Dfbqa8(a4!(J&=|^jqbb3+hbiD6bbTIAU&Jnw+&aoQI{H<}j zJj)KI9^5+IIwEzik#I}g!C432_e|a8d9B%#+TdAcHqdd7gVW(>?D9O=?0K}o<1wB0 zRb0bk?f7h_n50JLY!wX+|U1h0x*)i|2_BY2IOcQl7@vZw5k3XO99sur&%e5*-Z-@AGZm7#X^^t<>+W5ix2-D-&08JyUrM~$ zv&3L*anyefqu%G3d#SwQw>u z8MWx#;P4NW=vC`RpJ1Ar|Mk=WzM6+>3e0(Eo*1Xr%Y|9pOK&4O41ydYDGoT*=VSWGh{V8;_3^PPZvuO z8fCcjK2`Un%KlaBPL)|$22L$o5gEhz_d3{No~Om^_8RIxRz5M)$IIN2f33_N!$q^) zuPvR`UH@aL*h1mdPnX~Y65KS{dQwrEgsisIUt!rU&xU5t;s(#Cnk~!;ixX0}vXjX# zbC7UY(IsYz2M!mA=q2V}e?HJyX*x-OK{) zxr%0}B8P2?E=o|L3ki*s(7_Si39mDMHG7_I@N6>nR&{Y|Uzhl%tLXIZtf60LIli`Q z7cyD@+#WgmQB6(Rkqr~IU7lx~JzI=CcRH+NrJ!#PptPZSJo+R2WsXuIoApOkk*@lY^aB-6b2SzT?;Kb0P@Cs@wLT1Gj3=#7MJ3)&zgG!& z(lO9^LbK=Pq+c4cnz;H1Q%~ZDQyZ&{l$~d|>c2UF&d#&?>wMYN*?Fs}GrwhOeeVIO z$S$c!=BH9Z!b8oTw+;Od#}!A}wnniPXqZI(-_GnZ>e6|$Bk4CP?N(pf{K~lE!8Y#V zWPPKd-%ctsbS!n$?>vBio|6((4Q_1qaO%-vs;Y=vy7T~slT}PUJfvZpZnc`{Hs?+) zj&O6xCKgPv%4}d}tN964PzO$1rZ#x)5xqHACnOmV&U@R>IYDdfpF?>G?i31>KBd;a57tB&udCw_*o$3JO$`?0ApUz%xa9-X>v zXh2%)s`!|g9Z=Y1Z}7rXDj|02X+os&aK%t$)GPzsz2?3Vc3&L42xN{ z?gYim-)~lMjR@CF7_7`P%&xJB*$v8U<-@xDZ%!7wsq?m7`>S^C=R{DV3&oY4zaGiQ z5mJG)#Hz8%OR*=^k1@*beDp}!oD~{n*L-M{UGwXJvVAVor0jeBWiN`1k6Sr;Q6y`G zb;z3Z_~M08h0C2A_solQ{472G@;G-~;>kHJtByZ!?#RlLmWjo&QL8E=Xa7_iTef=Q zs~Ph$EX9%WD?j(P%qvZQIVEz(4sC43y7YM#jm-1X9hcw#V#P=_k1TiH+dlEQ6S^DI zTjsrdR^*O{w6Sl$mA-zMW*xUa-SK{UeBAR>4tZ`V>fE37)t6&NKDI70=2C5qC9=3B za{dsnb;b$ZD17p+x67DZR_l7 zUU{Xwe3|u|2hLt&9o|%W9BIl+oiCpmIs0bqLX|hlpEo|i$a{Wp-mQ^4c6-T8PUXwO zib-hLu}Hh>H>)u@+Byb{*He1$Xl3;5vx1F&K63VUZ_~Qt3RgP|%X_TD*1zRyNRRh; zdKw<_QkTc@+^O37wJz%s??exOJwYd)-SGdkuw0M8vy2A3p?1rZb z>+s*u^=V^^(-O)b?Mdh@zkk_djq}ROv+Gtni_=c9_IXyOdG24fYD;9yDO$0oz3>d@ zjI?oUwvEFH9e-OeaeZvm*q5%{{MhlQyfSgvx)~Q*W(?8hkNOsiW6t*$S82ubtk#J# zeHMF~RNfQTY&#*Q+pF!1yz;U=BZ|KG?1`7gUe-ID3Ju}7+$F=h%4LD}s zag}E_PMmjT)Y#V^ANk6}=Qqr_z%pzdN20yMOUG}GUN_<6<2DUvj@fsd)lo5__~K{| ziAD}v7sIzuvk#kRjeF*G>%^7sdOc-nRB64ZyKbG+lj7ufWk%ZgHQUDT*y+_4&^{@H zs{ZoX*shAGkItM}G3|-g)hNcIsP-YW&%WczHoPCuJ{3`=@k+=7>nJ`iI_3e~EBAqG zBI9q5jC(6$O{8PX8S7v9(&Jf{u>7%<d~xWX#eCT5ir7 zQL<)^1Ht^q`z8*yj>TKngyuQcV$XFPw9md2&t3OG<0ZwOWkh#mL=<~|DF^U5-2L8E z)%)4qL#$To3D3qy?s!y-`^Ckp2%H&FJT#(tPW;#naVf5fIgOV;dq(8S=@Da}dv4B} zA=<7v@su~a$D6cV6#h!fX(ZF^UurA<4|VSz*VM7~5ASRsgs{C}H9&$&0ufX^ReRG) zTd{4#TdTIlOYJGKM(xE`?L}+rd9vdl=3q&??(-uL}|o`2rYhfkQjXJ*ZsHS0EOF8gLy$aE1HZsNqZnc0%X zzgN#?`e2G}o{TCGZC|`VR$NR#csLLe%j94u|5o@lt$I+9d-if+Q=MlrqtRVv!Wvhb z21{@DSqfZF3OXtfjBa(hs--#B#olt4T}Ihol-lnTd~j{{v{1zhAxp6~@SDJTAg#65 zRUKzVA*aiffR2 z;@0I?(86mJ`|0KU#yb0ChKVpnTas#HgiC3Ccr5EKxAmp{sNIsE(%>-mxwGX^P>3djA)q@a2@Bv|b zzXZUtlNr^k0lig`X?ewj@<{?qk|aG96N8UQGZ#)6qs>VLMtiy_J$zntQR1>BN%I36 ze%s)`eM2t|$&}El8fwe-t$jCSw|?V&?3Z^p^sA4cszlU*!L-Ut$t*IXUP|L<0nN+< zne8uA3>MXAJ$IQAGn=QsG|8$>*`C@(xK@9#4hAH1Uu6Chqw~KStv`4?bIyo!(j;dl zp?G?HP*hau-J&9MVjM6`=m#}9_822_7V4+QFA9%ODb4(ZHteTT8iAkTLyC!A6fUni zAh)cn_tn+G+L-NDLH;-aBlh^}nW2ox_0K$OY5y_}GqzAf8x#TN^AvfmoT!>wppiO#tmh3X(!py+_(81) z&3A5FT8G;^BjXim@d|6a#hYXHjtV8n((xm`Gqd!q3VmytJzG)kX|?F(5tn67Ds5uU z23F@xaJkcdA6tmV>#Y&qOY!-S#V+bA=B9zER0xwYQ*V15bo zmw@?fw(UVx2<6>ktvi_G+>-C04Q2sA$gc2Y&j048MomqDWE6#FnX&3&yX^;uO|Q+7 zXB5JK%n+z$&)JS%$}FdaQw5Z$#&-D9S?H_LRQMv1)nL6(gxe-Z$d<&*M4vju&iZI>1LEPlAtx%Q>S0xg$n}<7MKoK&S`Xc3@d7oG!_&>o)TxLv5f)ENRA#WFg>4-$Qs(udPiE&7E+`NG~m;ec#f? zj70$fSHZ%Nzoz@fhuhY zq|^|EDg&IR^EtX0nrHRlD^*VgmW8KmC=wdQ*i8ZO66Z8lcPUF+9PJAaFwkL4YB98( z!4oh>7bS53oJLc+s4?2ST7MrUA8@HjV_Dgllw_uT9}23=bopssi_09V(=E<1x+KO$ z%%DXvA(z7>VUbwNSu%xIji-jqrwvJzQDlz^*+IXJ6Hem>1n z{FQM`^{hsDN1CdNG*A+GnStJbC@@>Ae05&$+p0mA0ywZ|`{f9O7;B60wdOK1r?4Cw)jfk_B%3F6R77sh$+_No&}EF< zSY(eADB`H3a@sIJpcovRBwHcd0pGT&xvO=vtNnAzv+bt$>pX?^zuK)j?_ct&``KTN zsb)(0S<;&1a7D2w8`&tgj$E&pPkH7G&;r2kbGfb;$F?4F-HhA$85%IfQTgTaoXt@M z1+sF_LIGO;rQD?o>oPq@shBR4oys3T`^p3m+!>+FB;prR`tOMmU@VzsG5YUqNXC_A zmi5tp{|!mvE$tHqlB2m%mM9{slk@{ZN@z@sd?U%kD5=Iddny_x`HGHEr>_7=JOPBrjr(a)5&CG zCMm4ww9UV$ul_x=`H--@lgfSe;#`dP*e*t_n%V^>QH6pCO`Vkdsf$LK=y)G|>WN9AYp6P!Fo2&is#Qbz)}jSk#>upTWc| z7soHln>jOM;uP?eqWvYjVK<*h@Ro~gIO^qUSTT(uX9d(f?Q=zGo zq89a~nXN=#y>E}aa-f1%RSOPBz)}_z5L;O#U}8bb2e3#UEzRA3VP1GXHY%`G(O&3O ztHo6mtIJu8|Mpn2>n5(o{$!~BIcj*sE3vR~dpaSXk^!ma3Py@m0fklPlLhn=X|D6a z8X@4Q@~NV){vD258h3$*GbLg^fn)C^mA3Mggr5JdlCyUu-$%i|eMZz1>6@>!vq)r? zR?xblc+7{mQDGt>ab?l)o2VR1l&rj zvBbH+7>*h2Jp*s3!N!{y$<+Hx_eN%8w}`9MRV~}N(JOsD!ZrqZI*&w({c-%B8YgR=BG=8J} z=B&$NN%@DcsOKvbFUA^TyLel^Q6^k}SEvOT&|9)7(fkz?16^SFF+iSIjSM~`BIFqq zBbhd^+dc7PR)(&Ff9GDbH+yX;2JcTVTwK2ecMr4!`qMy;R_lQhO_u z5dY+`f~~SnH4>Ksvo+jq2drTR1gQb}k< z@|TDh0KHNStn5~fGper1b#0-*X<@|Zr+r4~2e&ON?JtH%?ufc+ZjRentl(+xp?!}9 zX>RyBAluOqqMMU{wlzr77vNs*YPEM ztkyfOqM?m)$%2bjLk0SwRAwr+Rt9o5L}hQ3?f1MSujI3tnmH- zHT5a;-iZ^hAIdBWgTf)@r}5>(y33c>L7!#qoisOAb+judJ1Sc*v)dO6fKiU!rP|g- zv2)JP6x}v#y2~)a_wN1)f!L{kY<)pxck8~hT}I6a1wqzPEdsLVq>tWADbf(>spyLk zVWYfLERi;&i?_a1%!xI89x#e~w2q`^KR3K%l=Jo&$H1+*mO{aVwG%Et-HtTL+6ENp zTRcmt#`t6OF9#^I$Q)ZDYLa7pg=p~bMmfikGeQjuKtqZ+uqF^7K=5k(l3@065y32f z@T2At1ha}hsJ9jJTnDTy1S_E;pdUej`LNH7Q-_lB3LY`XGeAt`3Q(pIRJ|r>UopzJ zYmwilIL$GAk2#HC#n;CY3Sa-xUBUWON&SzyeSc=GFZC|glm+bSj&(Ey$SlHoA`v9b z(ACRmRVtMpB3ayTS;DJ}UyngoZa#3s!D+x2lDyjtN z2#T2Z#=EY+a^EW6|M)l#~=3WdsKpV>koEqz~V#pBu}FN|T`dlEb$| z8fkMRGHFW^kSs`I9=waC+KoGmD~m*AJ}UqiTUrO{j(jM7$-3OLm_W!BWg+pp>xHGX?}vb|A)pUW zWyb5)hw6ssVfW;+2WEt1EYljQ0#oFesR7_-9w4_Z(>Cf4@c8w4?M^J(C_B&`^>7=- zCU#7b^R%p-K7UMB8sb)cN_C)XUOI+g$bL-PY$%}3rnoz@ zV!#(Z$H7l&MtLUAY&VXnu~fdhYaB${VE;;TjGC6n?A^v$ zhs6iwx_t=%SvjerX-t`>2l7V_u5<<|%~-6D#ut_)*d}$1&cgc1&tKxv%|=%vr=01F;)(;G{VY2Zg_`H z+>!IKo{1wNKnqL4znK)m4SIRFE?=Hu@veSFVe2~QraB~B1lBpA#mwi@tRL$^j9?9{ zWhGHZZk)4MPG`2%?Y2icUAxm^s|tJ92W)>`jDd11`c zHEYeL8REFRh7hX2RBRdx9(~GM5WjlhNc%y-*ifo)|G6BK4)Zav7dcmSFv>r8Sap)QCR69 zsD%~hz@kLD>z;~Y|3)6ROZU6ypzOqbI>>kH?&>hY&y28`tahEp`nqRoD0t0d9g5{x zp|=aX)-y)R-<1++1nIV~48en*_l_G%^@4~ZQ=?s7es-&vkqSQvaJm(-mqf~9a@tMS zQBbe-hXpHEWHi}Vthg@B3ji|V0aWhRvm{_}jV{{52MoG{xpC+7F+iPpq)A{5<_M5*2iIZ}LfR`J>P%9Ke~fww&B zmk%CVu_503SrplW@KKuX?`hdt)@AR!YOJfaM_%z(rFmqQo?NHIWOjfr+&jUbhef4Os#jAgY z%K6M&(eJQ$;@{)*pP=L%%Gj{cwm{l z^iU_wa>&|gWe00Xj24H9JKFQEL=kG<$KQd8WVpdWN{Qno;97mYXPb% znW|3~v|A%^R``v8=Cq%1o*O?#Ayl`pECi~1wt`YCDPL>|oL%iBU#=5JzG}>iyCo~# zi;3t(dZamJL>bt|o(_&OZgU#5wn0m+6x1oNI64wB2rc3jT z+hm*7JMJ8gWQH>`-}wNh%{v#y-6Sq%GCgwhsK^R&S>A|*D!5@lz-fdMGj3Z8h{Ey! zS4_2>Dqmj=EJyAGo^dw`8?UFz@|@dDI7Yt#3McMX=6KroI*Q$6MK=R6^Bm2LV}=tEOcl#YA%=0ch`hdz@e5W1-r7P^Zz}MvmHCE;$Ts^RADeL)OfYN* zZTOm6Mqd_Y>>ATBjPiX+ANk!s>v#XP$`ocGn7EZ^;!po069?`w@rQ(oAOF8);t#u- z_*p9FQ*TAz!{SY$`Hy$=@cAGQU%1D^7dRe1#q+R=@bEA1dVdEGI|AV0eruooPdxl7 zR(}4ChaDd)FNrx8Hg*bs#S$1JG92kbID!$W9*12d&%XwrFJgk{+O4aCElQvWKjad+ zb_t5|Waa9DpWJnRemq8IfsrsCaJoa|Zs(UT=oyS@yB!~*j_)pXs4Po;J~X$|Z^9T( zV3G-QX0J~bgYk{qUNZ{k2CUn3kYa=)(Ha!s2BkXtz0y3{2KC6(xqG;3H*KRQ>>UQ&bdlWSxK3-~3Qk z+%W(DPFIa2J^^&dSxw+U!4$vkD7;_e_~bz!@@3xZqNm$*|F?&jrMS*{$zj zQ1k}{cI!}(*SAa1o4hLt4~&6K*2ehm$EpIU8QXin-$Vh`I23>tF+N2Ak_lRRsIRZU zm^Y7>mB!s#G$;hxPqkmbYd@GEGzgm+)PD_Mt{mfkRjUXSr6hLizDb) zmT;O42bN_!wp`<23ol}?-waN%O?^^<034^-gqKLr0|myt_iy@a45!cZ&}S#X#Bn!I zl)lqTnJNFOR6jbSF;BKty;aBte%9YpWp?XmPqhH!V6qO~TlPB0flVmr635O9lw_+NX>7S=mk5F;q==`0%#KC-w8QDa{QDizSfNCeYes*)Wa)fxy zQA!p(oqOiz|3(b=1gJmCp<}jEU6TqqJgMGs%~t=j9e9stMp^Qjk3!_L5cvzTNo^pf zH{!}?m6DnXJ#r|79BvJ7+w$`on%A`lqgK5BP{zi1Zz0jO*3UVIAv@0G4K#j9UeoS)2n}$vKD#|hqpv*3M~XUkuJ-d``*u}n6p;jT3}ymY<21j z%z$8hkIl(VQfyi;GQ9$w%b2KslMPb(_Q7ep>KFm zRSr>Z#ZIz;rFk1=zHMmD_gN=}kQTyRB@`?gIL2;WLg<$TqXu341I6oS4bcnG4%VUh zpieQ5&fa4!e+(vhPr1+iMC>q(Bd=_=7$)Pk7eFn;f=+4_r`Zhoozx6o#~td*ZT$(- zZ|D;s-W((Hb-~_qDT5UJEi2s^V<_%4{Dn)a&0h)o2HeL<6T*%z+tHt(0EBcG`{Pg0 zV5op=TWU$B?@$+K<8OU!t0rZ9=epSMNf{rOI4IkU*IS?a+=1#m z+5U}jhMAp0_%nO~Mm4i@Q@F6;Zg2jKP)Z7vw#@_->8@~D7e*~oHKUWt$ zJ7~k9xzBlipg;iV& zB>!%rdcj}oU2w_6kpYU+pP6Qrnr5qlE2p(~NaCdGds-4JGH&&1q4A;6o_-$R7 z;p|;ZGPp@4Eqt33-xQ)^h@+p;no(dR6YbXG^%-x5Wo@%=_xc{|>?yCp7c`+N?v>97 zmd_|&kB~stwoW1RsPDh9DvHh!!_7H|%3l&C*@HBypB8oVBFRNCwzn%Wl==gGE+s-t zA^+9=yXF6x-Zb`KNK{|o^-*KJFg?(lcFOZ;?mjjpIK(5e_^AXY5~@pGJ&nNLolTU~ z^vxYgIQ||hyal0BwUad<>+3;Y@Ez+k=WUEtRd%{VIDTGokIWb=WqYEeAkx;aoA*>J zI8ClP(8>ACzD?Mi!9*B-zr*Q~-Ccys;kz6FT{p%E3p;bKv;za*3)pRnxLp>P551+k z%a6Mcx}Q%O#&_ziZ*?Oj=2{U(1k8Er@n5r7+QHGdogsTYn24LBIT{nyHA3jf2z7Eh zLLq<0o{v0r^?qA>JER0reu9ti=|EAQdTpWmOgki1^&{~E)l(d~rwC4lT?DwruQ}e1 zp;KM%`lB2;>cM}f2!|z~0sJ+=Il`;K|8EBUq@Cf;nM72CmxK%R`VB= zW|YbLk<^lHu|(-L<4jhwF{;2lR--h@`%Tgeo2^M&q)EP}8Q!iLQLhnX6!Z11MQjz>opHmX&zps8BegTO4Q2}O_jf7XJPphdw}IKv%pii zVpTd8ksc)lyor*rB9C={wE#D0VbvDzv?mY@^Xlc}oEl_E_hoNj!tL_=D}-p1WLE&D z6fkvJ@brF>TI}*D&#rl{GN^`mB!3_BaZ}VU$jsg#wG^%N>>6EOwkn;RH*=IF+P-ZA zX-)D8B+@{F#6k@T5}V}Xf^jOtaBPJ~y9Jxcf(r2~y&y?}hWOrl$1kuW&zYT#nYRao zg2~woFL4|#Oor;&FSWR`bU>Dg$oMKAnFJqCqNKSG5tTGA*eRK-Ur+$y22=uGK7N|T zq!};#F3{cG2tc@3|BFQR)CiA!oO;5o+>!03Ss6qU4G6;$G(jopKC4ETvzauDN{T6@ zQRR+A_3cp5P`&1Q?oh7McxEKmba^>&F=@uZv~t!GQ^01v<$}$Oh$FO~gW=zvcxoyE zQF?)Lo+B4)2lAs{9vvX8f6 zl@f2rqbiX--FC>vU$^yi;-Mo|$f``?kE!js!=6A{X4NuMRy#bAKf~=$MuGs-CMVkJ z+8ELS?MH)bKk!LM-XPoIHugu-y6sRKdzd6RjwfrkB(^pM6_i_?{9(StAXIHa5UO91 z=&>$_FU($V6QB|LH8uL0E!?ru0i?!Q_qLP(Ja;Kl5mq#+M_%}|1u zHWA&y6?&_x7UR+X3}BN-l9iKKI>!2He3cdFtEZF9S5bC)#&)6u99fAehwxwdAu1Fh zq)#ds6H~as+L%~Mdk#HCvNH)hQho#XE)hxpKlrNJ>_qoJxiKY$%*(}CAgx?T%Bs-L zLcSg4dcLqDGtvEK8?dogzK$Z=r%>c|zKCC!$m}5R{*j3Dy@W2Agra;wWq(kO1KJM> zt`~ig;QB`r1UG*l4y|wG8y2~LXvI1v4_7-e5rIi=q_rD_YH2h-=-@X-$`^o zPiUZAomfGxpi#b^=$^^FcsG&#q;;LRRK!&z2s@^tVk$aF(km0)lSw(pTZ!w$%+87s zzIWPml$p*W{br(jB1d18eVioxD-zi!+Cl^&+!^c<;CpUt7fy8DCb`p5bzuZAJlV6-kMl{%Q2G_&fX3`3V2&qXz`0v`{7Q`5>!kj*1U((Sx?{9a zA*nuVoHQ(k7FwVwso?l+O4N&~Vc0;J7jWNb+|yA!h50S`=4p3Sc6*4*X3} z)m{#w>c133RY?*AL&wDg+mL%0Vt+;n&U`K<*Pq2mDYse_Z)@MsT+jWNLXb!l)J;7HGta16$ zIvU|>{9GVE?f6k0#gBpbeh4Ghwz&pqbwPa)%d;tc84R`h}N)6o>{o{}U;hqa9f?!wj}*lP(m z;g8`5yhWU%(TeUh>W46MN?EGutQj@APCZlLae(|9Aju_2-UX}gN*Z-P@Uc7ULHhV zdlu9pJ6BRs$scwPZ|!*KBtk6hghVjnaxpgD7&cQL1uYqg-%wJA(8e$1aOTAO;Y9ah zj=tj(E4Z6w9wM~-JE5iD2u!*1-vx2U>1iH!$G1GE)3X&ccgvObsOK@v-1{DyRT0kj zMtLd$JqvQy$pj)fgtr{c3GVb(Tx`ldLx@u$-Z^4j7=uMFg7&opcUr3*dl4q{d9o#| z4)otB-Tv^IiZFW>$C?)sR#l}!U2zqZ7l6hz^iuc|wdR^+Z;W0MWwIt!KG^E1nvP3k zNeJXc>fLOaKAbXz3$iz2Z+*cQoF7C8tiY(BMvYu8+sEUj{UXuowBj%Kg)^<$QAA&s zga9XHL`4wsJ?MKJA8@d@dKG7Y;5g1CB@4}G8m3><) zxYOS8ct=LjF*q^kjtos?C!FCO08St{`dlHAC`oIcL}euGg;x}hf5`q)FbSsGg*`M z;t7P;oq}=YlJ%kK&8ashk3$y)i@x(_EJ>3su`Y>v^<`!d=7ZsfL)i74icXSvlA=vD z6E}qwjzjy89j=`>ChMKJx0eNAc4T+A|`ZyObMGp)+H!gD_^iy=@CxXn?G@BA+=XV&-ue>!Y zOSAFA<_}YE;n0m?FAiX*BAmX=D8H%6Hl)vbQJC?BH)~8u_=0aM!r5u0d;0Gume6y_ zsY>&hsZ&9|NlT-3#op9AFNz8$9LJtojsCD#XGoJ7twmAJE6z{OYjoLjO6aAah4|*I z_WBT2Sm}W80s@opbf5ya&EOxea zHI+WmnsdWyVX^%wr-03v`NskbVK*Nq@!;myTMGVE~-o= zu}cHRY{ZleB=mdSc8+`-3O3P&<7tHB8pErjOOuKoSvL8$@n#xus%yPbcZF@m-(}WY zcf;Gl*5U6I>+;@k)v{jv9b&Dn8`gcS3xDNohV@1U--qoi&nD;JZ2GT*|1A5gco%7M zkevPLv{|%CoKxVn{d_vVT;@J=nsH_kAKM|3<5$~XZaaCJls(hGG`GkWM+8{;nOlM3KRD5^W=q1`D^s!S zi|fgPH`uiV&^7DM+gER~CH;iU0(!wTd)jm&ez>%QC+0L}Jcwy<1_*|~#bah9pL)7{ zlDD!6f#f0j#dRza}IQy>j{w+G#Eo+GmrIjBfwA=c7cBM83 zqB%F@w2_$^dz&0(HfAwcbC?>E#$8&vbtnwY&QhtplEl4~ixS+|TKKfKFu`N%55I#% zVA8ESNO!c#1W9<`Rq}zQaw@!eqV+cWOABZ=Q+k_XFEq+2QFBpRF4Hp6d%Gf>n{I09 zfNxm9HmHRl*djOB0_hjV)}%~K*BYMhBBCs`9~ej)Ug|a_N$g3{Q>QR7`43`K3*|IU z;-zb0mtHW{o;HohGtO7?EI5^!0u~g$7$668dH1DL0fFEg)@Oou^hgs*)AW&;e!XlQ zDM|Mmr;+JbUI2SxIbHi@0zdgueHd_m(!#ydPD}7*2lx&~H&3+PW=pvaif>ao(!m(g z!Q-bUR-%JGAI|x9V`&)MWqg63u^H9|3}=Zz{|ksuv8PSV93K_LdI~ciSgY#b4Cn>v z_OvOP<0ZkYbmkS(AzZy3;v0f7)C(rt)6z4?j|=8cX5K?Sj)y~jq*sVgd_e|;Nw{h~ zbx(oygRc`ijb!MH^#YYWZF1)L{!poDDwBK=Vl z!qrWGfQ8$PcC*G)D0Q#V<%Dhgp$Q1z;Ktcdobly&-smjiah2FTNqms+YYZ@5g-xv!sEE(QqK`|<2e@`Bq3FNDu9 zmw;m1$h+cMq-VwPGsL#HPUTK%u^#i-(pz#q@>oCjO#J7Vx(0d9r*iA(V{|RpDeBcZ zz3h`M)^En>mV0#XdDtgfUR|!s_N;wRr$_?PA0*7v-m&%+Zu)}15}y05>J2%ckT z0-oG4E&QYQuL&k=ZNaQf;tDW-Nf@qdLLu!i=o5~{{`m>+zC`ByFC=Ud+pVXZD=UQL zy3yr?qW%QTy?7m_otxkeB?Yzfp@aCDf1U~uXTX=Ikj&N&IzD+%Z0 zU!|lw_FW65&|R3$b-!2c4WjcEK}YJutwaR8@HVD#-8Ay=3DQWrhX?Wj0Ydm@H=!BF zQqE$ZpUnJjke}c1gD)@;IPJKlk4L~293B_n5UIXPp*l>;lbgH|DZ7O<&k!Y~3{M*+ zNe5+6yA$axJn45RR3}JX(jcxc$F%e&dHkWLy7GC+WsKOc z2u>gMU)k zY^!;}Y4{+xUy@l=~I#p(n==m_l>mEXOgRzJmQ%GlnF$^W-|Q zeFP>sF}Zh7u38jhS{j>s`=r(SylJU4_tr_%Qd#Z~CoSQ*hfi9f$xjmbd4&8-mSiWG zY6hm>8FTjJqyqynB@#NRijcVJ&d-6Dqs_(pyeRS*&KO}@1fx)1Yq#p`nrJw^RZF8i zl^IMQ=JvbUAx)9f_TjWCrgb^BY&|!vb6Ib=_zBPsHm8M5>%6WTUVeJCpRKEV-lMtC zt{I4%ykspBi>#m`^=`rE?Uf7n?x%hE)ZsqlR3IT%lMDV$y_~K}iq6@p!%n*s*lYV5 zRpSH>_NCFNUtc+WW7CE*QlC^_O5q$4v$3KNA9Fe$?8k;0CblpY(~okCyS5oohbnGr zNSfHLu+f}|FY}c_i*slLQg>7y#rxM7Gi2RD}LWIA@%qKi!Aa~JW%!akl zhR3MGeYyGNIF4pX5)7E>&_qUx?UD%6Gh%}&0JIHzF}LaihB({@v}__1T|aIRBXdMd zu$nJmkgzuygM?|jsd9RAQ~Od$lRP+el@rj7a$hE3L|84}!x0rBmN7iPe&zBcNz7x= zYQae~`WS)|H5Uj%hePX^O4^r37d*g5k@`4+@pNE%-<&Jn!+kL(IITN|(8fcM=okYe zF5GUE0}br+2O9dyh1WPnxzIsM1`!Dm*+WQVjKLcy3H3dPC{`*TzF!g~p_U}b(D}8B zqLuis)$&TqzgSU31mE#MSP|zpy{zCPS1&906_7;=+wG>go5A9zSsxtwE*YNfy{HRDiHZr0-t}fyBJhV00t)*m8 zyWPf<1S(t5%*d)m>xeU;bq8$K&8uD|ck2_34|L`Fo7kV4;JF0-$+rj{DvvZDsc&XA zB+V}5em`pF{mIwJ(~(2X#Gjl`(z%UIJ^tik@}kF|{FbXYgZ%RTWGL|`&ot$J*-ZS& zJL{^Z}AgQmC)X6xVmNmkMAPeMf3a=PU!#eeW8 z|Av_tj0d5$N8w&U3c@h<_>*t(2HcSrw0CKw?O?+bk?!^wJ#~yabS1iPmV&R-u~pPgr>dx$+Zf$ zoxlzHlgkwM{K++>=>I2wa&pk0R0ao7$wMH+oQP!i_$46S?N2I@4*HWw^8Td!PyS^5 zpZv+83bq5?`-4CEih})_>qpRDEmXKaZVLL7&k!_v`I8Aj2T{hO>5!8Apg$R_a35~s z{mBP{{^Xco@t8mOlhKOYil#NO!s}fn;T~%#`&}a#&~~7aQ)R@V+*NqGD! z!uS6BdO4Hid4R%J{)akPi{*IBSk&$Q^$$|BKS5LK#BLmDx!ar?ywmNoY5Vep{C)2A zMM=`#{vU&Mkmim^qPy zK_VqSMPtjbe^G?#p0g-^5vM*bMUZ#9QiATZvM`)4L!Q}nL>F-Raj1ju?r<)*e-wcu zHCFA4^L$Z+y54G?t5nC&*Zh|V05XM(~LRsm3*i>waKR7>TmCEkMEZM zBIkkB-R!RDkZ^<}ec}*O7T@{<9sC`ng0|w8sxQ{12vI$R=;fusb}13}3f0kPUbQ=7 zddS3qbo~6sKKhS!(}dri<&Y5=pvf0SJPHSig*M6Oa*U8^d0~`r@GmHVp&>}}_WleH z6T`#R(VqTe8(Im035dab|F;pmw{cS58+I&lg_N_4dP4_etL_9KUp_LaG7ujEAHoCc zb2}9LU~cyC3Gf$LqpLmfK^MU?!em`xiOTKURN1%5-LJ{^?Foy3>DSU1dHj-{|HpWD zQ==WTWD;ahUXhRa08g!@AyQ{>b5SS^Z!0Mf4CH7h5{K1&f)xKqjPcUvRF`8`!~m|y~x zi;wylpz@1tawAZIg1U3B!D=K+*-ZpO6?PI^aXT9+F*v}!-^fVcBOxQ@t`M8?1hPmI z$3t+v`jr#5D<`<+5#@!!?)yo%`K}<$ThDd5vg3r?e*(em;QMQX^#Uv%gB09d{;9TM zgq8gVT-`l)d_xGrE0nM0nh#HKPu!j(ZDTjk<0ss81SoG2FaHVV%7Kl%lCL6A`G%F{ zJz%wEBv~QkhwErJ%&HUaeLXOh9e;wUp&R-A7Zvwl`u7k(LHK**wjE?ZwWkLcg}ASt zu-A}~w&Se4CGou`rCN^2x@lPd4f`kFgUQIr5c+>ouuWnkTMl9tSLChfFVjd}9%p#iW)*qLSN4 zzM?@IS~19-8B8mYHUKVOYu_B?o^^s@xCg%>&c3Y!ZyhfXr$)Q+CP?Q_ZsZ5Ti;nV) z>0f-Sho=6|$nFJzCtG=sPQ5cQ@c(Ip6%ynZY(^;=7k~ zT(yIQb3*lDp-a+fLq5G^9!|5<40G@ZhX%X7q00J7y>&$eEt&n6J)9t+Y7qbl!$HBC zaC>yfhSkGH&?=w69!?!V+utD}05-l#0h>?SGh7pNw+H&7Nvx_mb!eB+C0{N%{tDl= z?*n=m+WuUCFMN0oiBOgw_Fa&s-g>5pY})ackiq5)yeA(Q0_u)$1ASFvDSg!Jv^5Qr z&E!7)vGQTKlVEhO3uet?X3(mb5Lg0__01~lDttO-RG8$QmwEEyXeN3l%jdn=hRo<0D}s%Yy9rji_8%~XhfY3E3%?TBqseDc zRnur|X4+_SYXPnwk2{1HoWY<^2sotpPG^91{QH$C*6{`AN8{WtxItrNjomq}q# z>rw->Gts<6=V}N2Pj%Y6>$LT*;~4lq)j82!r=fQpzx3bhXudgK5?)Gn>S;UiwLK*x`pn zyHLJz8|fiOLjvPp0_%eK9`^A+A+L3~H#gW`C6$$-@=8mC+tN^Pof(YT{3^hZx<3i_ zXD)zyK>~hhObs>fy{FcdPPuy%>4$Qse4W_+!f~|1GsC+foc?cR7@)zws=($2=xp9+ z*e-X+aSUHXct4%%$1NZkLJf?h5zVcBta^3yuajA2ahQuwkGdR8* z&%V~6dFlAo=fHR4*x68wtwa=S(V*~}W`bVxC@H&$(aRqt_8W)EUw(tR1*5o{l4(oDFfUF7<;AJwZNcEw5d_z!A(2be!@3wLd9duk^=UF|>3VJrcwx6s{?7sI z{^K49xnKn&Efeu4SR9}1AtxP8*ilfro~$V?@?Nm6cFSI-&($FfmB|h6!40;-4fPtT-6{YIj)J|+kgL*$N_m4@+F+A5oEJb6 zkfF5fB^dteCf<=m9B)TF$oa;~z7M+lH}Gz9KjM**7kwIReHxfJR@MM@f_MH? z?rs+i8=Y*vV}G{)_=EsOfo?%32qT3%v5qid`pVa<$T*jTRfuM5`s+2sIq^I0;<{F9 zGVJ)rT`=O%>P0atbmTM0lJw8x=ZuDx!JXf#WnC1EAU^3bvoI~k=~^R&1zhotOENjq zr5Fu6A0Pj=FS(1_3q$!9%^S+1n3)`$+8Ey(v=^mfNGV}g=bCUy^qnk?#a6~1T-lV% zvAOb`%cwEiO4;g_jk$(6?i%smu%^>fis1TluQKG!wMf!KeFj z`b6sn)?3i~o)VY&odToRY;TFoF{R~LtT{$6uEg2eFY{5fk+azwU!?b1^xjgt)8aMi z%ge}F`5i1+5dV^i=}eT6uAKMZX;I*s9sSm%6BwXL%#9Cuo$ho_XT3Z*jhX+sXB zw~orp7lEZ_YU3w;*G+#jBPE~D5PNujb?LcpeOx79`pE5M%n%3P9;)q;V7q9)I)NI9K$wuVS=DieoQX^-{;pp z|A}8!N&j#7^>0)!epOBB;a9_1isM&1}vhOj4&5?)+O_K?m`QYaPODHL>a?^g#5`T$N)ci#OZnNr=oE4+gv;zd_Cg;t0!i$Nr2%ROB} z`+n(SN|^hYP;W|nW!}-fsiFg$hg~%tE&L|_&qal2yEqc_wSBh(*28*Nh2Gj}uPMHL zry?Z(QG7QHB_e<5hJSmX?ovX&XS?A<*MHmo2Z4L-zt!FTs{h#js=)tk`!5IBWk(^x zqr|QW@z6^uTsb-WsD4*^xPQ8=TO$n$Y<$=@>!|aABhq6CiqI7y>}#YF(GSkMmG>Px za^EqWD@MebT|(Xy{qXr+u3Qw+7Y5s13VT1Lf$Uvb8eB8Dmz%0KeNiRHl7BQ;ZW^g) z)Ql28M!r+PKG_>5!xSoQ6pvG%UN{Mx1OEopajZAchwlN!1{UMh+8D#%?&c0TIy2(7 zp%9y5r~?*SZT!eBJ<3RRhr9t96W64=(&0s`1MR~%v?&2$Z_-MdE?xO)ld^Er} zg}QJMCISY+@Dw%ws_NaYKNrFKo+3}6h#?kRm(jZLrMqmP9@i=h9|+_Mjxv48md(>$ zs^17Mxbsh4`<3nYdM4Ie?%hjFqE43q6X~^PsKy7_8}&?IXhGqyF4f~GzY1t=fr^7} z8)-D$?b;Non$#tE-k;W9kI^&i2}s`F%(m4VmY}TU=bx|}46l7z0m*mYu_x<&k>HqK z08|qJ0H|>8niR+3;Ji52#KVUV`tz%ic5!n8b z$2VeC&%(cn5I)+KTUAf!{Tq?ewl3ZRsi*)^=r48Q(!f|+B@VE=BH^$hHlEVHuLA7dBOI1|IqjnO%9}@eh-qY0WOov_jRM{_V1`m$+y0l( z9y*O-QN9%KzSOHqr0O%iAn`X}jCcEc=Na(L4|Ji2Trb3{_6LMt2UHaSUrBe*QPDp? z9-EoTPUeNq9qced9HEEgbN7&A&FTY0j7kx6ttQxCt?kuDKSOoER}jEG?7*3WcEYc(T9YVF8_6euQzN@4>AJkB|<84I#fFLvn>j-TjY}{Ri3J zOq>9@BVg&HIEyC1w?qU-?bg~LUoHb(_PZC>2OpPWzKZkum_hRM*M0FM#J`1qSVzhR z3rCk|Q69w(Nq%v9e3nG(-I~Vvi{gcR~QmgxY6QZ6HgkaJZk~mBZTUu|gT&&k9 zNFY?jepO#(Z7t3vTN8Gzk=E)pO17rHy>hX1pL1usMvlNKpeR#s7gwswHG08EBwlxx z)<>mlHXd1uc->F*Sh@U<@j6U_T4+X!xm2-jl6BSpVe8uinz*w6Clg2@j0&g$5>yfz zK&n-=t?0VDLR+-T?yBA5qxIVcH=tHqVQqaBcbTyZ6QwQ2R)e+QounNNRFu$%h++X- z-r!?f>ssBa-B@ewuDX3#U-^B`Oi;VO??1`Ry?4%ioqO)N=bU?vRdUoze}tcfR%t0D zcMA;0t;MS3E~kP7qh)QkC3j2MoP#8}n+iEy3rX%$A(K2nk~@g-%J$}c&-=~+0B{*8f)H9D4tWVuC(EVuS{lh?3iHE0e)GDaUB zG-#l1J03{b*!C74sL5p>JcNCPGJnNG_-82dCfcr3#k{($8h+vtihwmr`?PW@?TPMl5kD&&ZZDoGm zK%?76&HFp6dyT>9&e9*5<7RamnY%|9hwIE_Azpjc?>y2oLN|szJ1Fey%PDU2Y*04E4 zHQq=CcLw7@>02}&Xd=o6;z5hv=5TmW`ewjG_*dwgUgL_?U6C9=f_8>!<^YM<5E6;; zw*~w`ji3)pG)V5~9U@ycRpW|d=3qY>!B+0b8e3E6GgT^adlI{VTy29{oOrM{29j(z zp4Cm%!0x?%q=ru=%I5Y93C!hJk5muZI|6-gOVMO2D`?7H67N;huzD7G#?hj|(xIsZ zGG3AF7=gC?Ra8W9O01roL;XS4Qr5G&9tNm50iEi^gN8cZjt3SPnDa3nv^1#)@j$59 z){KYnA5rE29(486vORc4tjGvGg2CnNWoRgZ4A#>W5`KfO_%|NLfS78a^B~d^mt_3x zR~QyW2caQ7z*VL`Rn-HiG)TTrp=}10wgpDrrfs&LMs%Dxe?;VP!WEV>bA}HF6*(P3 z{nN_I&1*R6nRb}SU&9Eh+jAsDRtFJ@^?$GKjE)r4a2GX}^FfV0lju9g2ly^Ti)~j3 zhDxF@E8t!^qEhClBz_bGBrte^6I<>+wGPLm+fda68#X+XVo@ecfN z6!@z`@WYd?o&orVK~MmzCf8~I1=}$v35J`V0R+?b&K;P6bGKpI&W)(I#1~tP+g=p) zu6r4TJ*d^Y?D4=Rr02bH3t6t1hXspe=ib>8<7+8hQrBQKem+A;g?Wq;)1aXR1Jz<2Ch{(*L=+nao9gy-BLg_W2< zo2ue==Nj(nfvfR9c*Jw^5Y5+?5&Zo}uC{oNA1ZxSQXQn&{z@Ilw-|q>kLYjzKIkL* z+duD)KEfRSGkpYg4??X+hdvsV%Aj;S~qj|SV>w@?P*KD#mqsB&hf#g6>7A~gz$;W zU#K&-cc1rQx0tdkRBjbypD4G9;vFio&!<({XU9UwKGk@KWeL$kyf|1_#)*P%TS zH(E4)|DntNL!6!)4q;=Zk8kdbX|9QZyG`lsteTyr9nW{w)SdA5MuZ%7)-+4i&8Pp7 z1RHk#BrHCxp87-V;@IHNtu)Io5RZo;MGfKP%<4O4la0Pm+@)hz1b|HD`dP zR-0|moHEpZbhxf=g}G+W{(q0%(`?>Xcd8Uc>!thlz$^EgO#SXJ>fVFA@sz&(jsL+1 zqduqfi_EBf_}ATJsB3j3Zmiie`B!UNagc0c=_vU=!~Ji+tg&vN)V!~9O*f=BWjh%F z@pfriKT>3k2hMse(T$%O)0w)@n)B`%?(I#1+LR#@7(TKDoYnHw%`{Y)GKJUe?Z3sw4 zAvgQfr2~mN78otBVrAVxo{j}pwv1%%pY_q=QcI{N7SG*XX8%pVi9d8V9A%-(%kCm8DOFYv z+&jGN>`lh_@;UxLeUN)$IpEl@%Lz94Tb?--B4O3s-b4gfR2rYtg$azV)xv3hJBY8%HEI&X zSCvgd<+t9_mxab{7tS|n+b3$82BAdMO5vl!r3C-NhSHVE?e*K+9tyTRa)^uQJmcir zuH96}>g`+1<&XQ|A8zI#1b;jMBr7`9$LT627WLrIlX+UUv1PFCtDtf8EsNBL@95UjS)8H&wSJc~gR4k-ua0n`zP8me1lQ*k`E@N- zCuUGxaH-*WqmR??0VOn$MoJBh<Q9NuF>*}5^-Peqj2e@VT!j4~?bM+Ph+NQ4jduwzWqQc-iLT7thKJgME2E-0; z3a80Xaup0ZA0{BT_j>uMJNxDTjPQKZ`?J0N1#~U&iF~H8Z|1;jx+q-Y1%YUT)Fo=K zzwG!8oXyV#akmP>HOLp}t^i)>tR6a$&Kq(0*j)ezl_%KXkx0qL>HmxVCtA;QM&ukL zD_mSLDEo=*0^57hOuQcs!e9HHe#yTdk@HpX!7RppuD8hBH(N5mM%kesR;!c$g%Cc0 z!yJiBknfK_l;lmaEk)NEAwO)`C8Pz61#4N3y_nvlt<}qa8i9Belade`3wPgfImV}z ze_5cYwbC|0lSe$xgFNHcA8M77YBi46YR8WKt|jb{Km5>?DJ!_&eXBX8VClqP}DZ7QPn9`TB;Ps}IZ;p;P6Rftqvj1dXFM#l$6H@BF4f>Dw^#Th28NIh%geN%kGmG)K z`()+iL5sF%aj#-CERthO!TyA8l=kErj;x4XmM8El>Y?z_ja78M@5+$jK!V43RQgS`D6 z_)CeO;Qyd6B`t$~Gw=1k-^LzAf?L1@1_{ zA2r(kJ-i0Svdg`@Dot=RQp)dE+Oz&Ue+{+g+u`+=(aYcw4JEZBY6_NEbGrNcUL^N< zQyJrQjhhuDp}dN77_@Vi=tR9Q-WD|z1N2}Pyi8;z)9{L_@0h0w-ikq4!JfgHfoJkX zRyTlw7HUBGrdUB*hjhfJK}O&r+or=F@ottNfu3Xt9&$4POX^mMLn8yv)(Vykm(*82 zauBlWcRy?rJwjh&gFIOs?x&P0%M<3w+hjo+SiUJikX};Z(1M=ERn++8CAHkWZKs0V z)$&c9g7lZWvTJ>k3^D1{QR-Mv6hA-%=Wktm4>J6XZ zW&@Y{#|HS;&GJw8Ia&URzL62iIy$qUZ!IehtXL$*ZM(|F4!gw9>1&zS=ZiSSmR#rO zQ4JhxG~A-gmpCUp*5~`=K$B`ke9AtIa+i0!M=<_^6B^(Zx)31)L zW##W#%fo#lyDgrd($|vRhYKoz{18E24a>WJoNei;2f*PP+y@wK*fy#4t@E52hZ)-? zlmXkAwyu921HV5&S;k@3Na;zHXcg7Vr}trsgnTA&Gsxf5=aQJJh*~!Aonm5ue6-_c zFtHnpMe0G#)OW4mkxZfx!8kMczxL4NP=rds{#4#34af3tP?F0+vnHf5q!yjZ1WIK= z%NVcTH2#wj!Wg5-;Qos3+^!GSW0lGO364gf#T%{CduX1wWr*z$wSx2qVb-tV0H-)> z?fN1yV|Lc_!c>ItWAd{~jO4!6adubY)zYqo<{onIH$jLR}yNWHhbD#fKK5%hKCRl{7GwSwMXUNyvJu?VU6 zl~+Z%^a#bhAN?%EP6*lJd3$|xEr_8GW zyCt{=p|!AG>HLygR?U7~ogkdhXzb~scIaph?QxEi>`8p7K#n8G@Xx@O{eqDf$}>Ft zdkTaLH;ewaw^rMv4{RSk+VGAaGqioU|BYUS|O20i^#@0R$86iBEJ2K^8%3qk&hQA{0tkUyeZwh^@= z{KP4=Pij_a-$T8P4S|caak?zZM8a#@FTo(lxpKin@q)D639{R)kiN;d_7O0F^x^Je z!DBswRCFhA)HZ-ms7?F^zQjWG?LMrw+w{%$pS$SWT9$vP*9kw_&SG%Ug3|?5%T5!d zTh4m^m%aToZ*ngvo+!rdOjGF(Z|ZHy>;+*;I+|3!JII>}6^titB8ob=d9TFCo0#fY zVsVv#wbhY7G==Vs?DgoCoS`AQXWPzNti1}|V|!bY2t4RsIDx*K z?yc(vv9R?pchj=i-aE7`x;I42Y`&k-vdO5PU)Bw1m`{t={#>^bA5>Iv{RuJFcr_9Y z+{KPI+(=jVbpwBrXkXrv2<4ssQh8gC%ds{$TexI+VD|zJJ01i61H@LDH-$xjyV`k< z44I4awnWSS9!CG8Z0i3s`CrQWA8h}E#bhZLWvX%DPJy&-y@kd{zBufPR60^)3PLM! zv}Iar%c%O6Xd>%AHt)h!j>Q#!bxu85-JDt82R0Gm=|&rR(rJZb6Tqf`;_|DkvFn!c z-COkOWl$5Hy2e3kGP>~rVQ^{)kBwhyFnaQvtZ}-QivrQv;BiFNZt!ykeg}2<4=T(doy_;gM4)J8ow-?ktT zmte3+V747!nm!hTRi;E$L05>s*vNG+FI|C4`_!zFYO|gateT2dn2^`mlQkC)a;!&7 zt1q;_z{di(uvtvNB&&T!4{TS0dDCw~&B!pc=QP{^Df;uSQ4u>bTPj`xyZNVGxp;ox zD|IM@)l_49()k#kFCs!m)u>yC(mHZ3BgHFRX`%g|{OqaC&FO4+Lqa%QKo= z+N9g+k-ymK#g>p*)8rEZjrOmv%O3HUxxoRHFX$V zls~rxQFTEg8ll-`V5q*uJ(NxwOQPfgcFvNM#5+0)e^>Th&?OZ?y52U15!ic;9a@*v zxy7B#B~&$TOz)|WWQ?Cr_f+Y)dC-i)HVQGS7gseFh-}W^gNSbIGNc(1AZ+!P_?_hwheo+8D_0~& zk<+>(!Ht7@%KyF@al_FF_(yU{?d228CnunJ2t}{^0{$aA9w;qc@xffE=z=mg!J!Qi#Ii6i$+)Z)~u3FzvLcAI+lu%8dVX$ebErdNLnis8etRr2U~h#4te8Xtol*P`p{^K z9`3rEKZpzD)4ohcE0;ytm$4cZo6-w!V_)tg8dvcpw{%-N7e$+7-%d;glh<`4<8U{( zbOyF)+n$}cXo)&TQ@lF#!NU~Y+r>ozqKJ){mZ3e$aTP8$yZ0{kS z^z%N+kN+31fj-625&R_esfu9cUASr0j3r&SN;jAyrVFR#zfztm^>PJ0Tj|oP?P1K0 zFg15r$h+p7AU^z+PLxAmdB&xgg2q|x`YO8vVXTYXFq7HV=(WUFX{s$=OUzAubZcz}&(JJoqmul|pbrv{DJPzIc1plMhW*vqjF{D;GvKw$qca&)@L zu^(&lr6#?pM&389UXmJ%=$0>Idj)IqrPa!sTm(lPtu15gTZRxGJ<9q!I+a0FSb!)D zn%wg?HGtZ#;9B6xAkYX@99v+;dgDTLUd~e6sPOGi_dmmah(Nx;64Q@w)%U=&{qLa2 z1=#MC^^bzcwiU7fs@8?QVtZ#(xPlW3MvM`pL(Ul9+$}~-fT9mbA{C?zu?SK{$_ns3 zFBiPT=1gEXclm32L3+g*)23$%UYjCFuR3G6ihj-o2S3NFJO4l4C#<`%!M5No-iMCa zWob-c|Jz(c`D@{VR0;7(Vtn~)20c#-KMRNdyiqB=Rgfg(ci#(=r{E6|r6b>q&)_7w;P(bccA+4>rT9xL zxQ7#@w+YC5P^Ey6yFXHpWOOArrze>5Fq`uUzT6HY7mOChw!$T{E~#LPTW9-|f}bwQ zy~UjN~*TFkJ<(=;4j0=3XB{`z6Mw? zLr`;WnttQOu1Zl#qjM*(&3dTQ{&g2kMp)9!6;_?POBUv358>iH|LlTuBF8)IN%W1u zqk=z$G->zHMhUw|hwp6!v#8`tIYXlJ1*f(;Vur|n*5&`K%c!8$Js{|+f$0|sm1oRVtYD*Y7}R6 z6x;826z${>cHx-VbCrNj8)vr`+i@PVp%#}%^6q-tR8>>$h+U9p_`W9q;Yni`7A9nU zf7yhl!>xfaLeKMEMela`BDjIvfL=Y=K!M6!+{(Y*#SKI<5{d6zOQ|O(@lq&tdAq`n zuB7CmH@n2Ro=nHA1=Vrjb@Jvia^3=OA&}OATMRhLs!Vr57X%IuXfU9NN))0i4q^gB z&)|LP)HPy&k&sUnUJ~HopMqe1=d8dQOXHKwZdmP@TD&K#9 z3tv(vR>c&}?#kCQc`4yICQN1c-_ys&#@PI+OwLe-8~n0v`MOQUt5=^cOG;X|&ba96 zteh?(oVn;D(619{$CMxe&LF_HOSk+}x;#4ShWxmOi){-7onrDI0jr?^UauMV2*ypp z=Fou%L}4r=zxcL2rHe3S?lu0$&RJ<)-WJ9frAmMvT=()zn zApu7ULYqsJG;3&=Z)nAQ$1fIOMu&QBjByR)n6v;3$Qdr5ds2`zI7dMK44ll{`Xf%= zp%a$pL?621y29m3dq%srY6Fr$7;|iI;7Z}=#3(&V5qJH-?lp$Otx?i`# zaf2$QZGvF%XF7@M;F)KNY=o1FG}Ku{xbMtz!bh^0ye*!*e<0EaV2a}@MX-l^T%EmP z-F}+rCp4oCK=T5s6A;`*3YhW)GO=8yU=-#BkZeF5T4MW(rvOeyqYenxFAGj?+JXm;Wo@cHyr4Da|WTtK%CbiSS2->G*9h z1QT8PeNa+WBg#4()`{6oqT#ojJH084aVx_QqgN~voe;-tbC>!g|Ip6Tno3+2=i?}= zTGwPaxx_n%;iEf2U0jP8E?qtnALQ7I=~lxi#+t08 z*RqLG{O4_Gn))s9;#NPcQu03ezw$sw|JDYS!a@LPt|dMfeP*Xj`7S?gusGk9j zBxzjQVEMa5I>FFUUw>K)vWBnvgCapbtfzw*_!E(>Wreh%=ud%RkiaGxkB6yAgOF5= z_s_IV~QLdOvIGs%Qp(UgQes)I;=Q5 z$;u`HG4*r=rm+r8GKdbpW>c#I1@8(!K1o6R{sQNs*tKNF1m%Oc26kZ`;S_^ z$F61%8y+c|fN_+WX0Sv0y+wu)9vL*f6|;96bayI@}9&5|q1iXm7Oh;XcX z-CDL1J_W*hCQezusY0~sha@FEO+9p_vO=o1yedK!8X70va!(LbOXoGGJ}|UCRU@Rb zrTa=#Vjt;cAwhWeot$WTekZ=4 zS2xIHVv`Ui$|O~dg%~PtWYp##4P3(VzgU>KDNL0I z20NBVV>mWnGH{0KqH6o(pH@zcc4r7J@uk(0+kkiwRY_F_F0zWR+PLwxcAs43alal_ zu*EdT9bOxbT2RI2nlRt%{Ffh-7r(9bi32J(Tk5KsD?iNGd!%k}Oy$1js+P((q{CG) zl{L+ETVrq!N2-#zCy+n_htH#H!>i87SAv@-G49u^pN? zS8CTdF#|MPa!c+=(Xu5Xxg&;qxk*cCQj@XW6kB7RTK}m#re-`UsEUC+jbVD0k%h9rnIWL&KU#T!!a4Ji355y)G5|!aRjJSqRUzD zD=fLPZ4F6s0*A1&M;rcop#V2lXs&fM9(ge6(C}id4ppJZskzB=b zQ>F7fn5{%;7<)A{{DPgaoyrh2;RR_C4HoPL%M*uPDsZR6{t-@7l1|2#Ty@W4#26g; zF|gn%%M)}*HHqCVq%)F>6A_T^ti({R1lca?uqVPlltOEg8OZKb$}DvyK@i14AgAs* z#a70+gXMBdu6x_V9It#(U>c^7sx%BVrEb_^dl`ulN@Aw60u=hiYudf7iO~7V*Mr{H zA&%?B+$eps-3m^g0dCe7S}%6SYYoG0=;#az*05rni7evmZXoSy&FYxd*{f&EKL%%b z96tude56{$;?)}D#jMU>T^#rxIr8^Gkp9*6tGz^6Xr6H~*05GP5qB)K{6MM&TfNDd z&i|ur;v}a*WG7 zY5!Hvca#>Yr{n*w$M#LAo+h;(AIThT#UCVYKs{%adK#2^_Jry=t<=*`PiotUoX8pluw?QstEyoKMKna8aZ-<(E*mnhdQ{G;~yf$KP>3mYoNkLqP&7Xycs) zo2N$N<6mHL1Z{9w-V@W@l|)luyJb_(f{6dIGSj$$U;aACmE?=$;)%M69!X4cMq&{+ zeWWhp*)7p`R`Jl#Dh~fYSFzKU*wdsVB0ehP*m^BLi(2T0KyPJvLOLepcl1t#$t$t) zk_?=LUCH6-5NK^gPo(&e(}*76@GZKyfu(_Wxd9u%PlBL{V>VyAZtS|wm6TlPrp-8W zO4E8W8U(yn?~HMHGd8DRTcpW5_7nGH$@Rp6Ge1r0&$Y?pH$(Hbl#)+{_ooKl8ozn{ zkLuVszO|LyXg%57+!ak@;&d1Sjoi~P`Oz>!5x{L3x zWh;v7-i_hMh0sIc@nYAqC*uR})q!PE^n`pwTSJ7cyH14bUM;UzMl^ymj*f8cx+$e> z+FB!(Z7Q`!=Zyo)awEcj^JCA=kGaIfn(iMHe|1Vfr6(q^)g(?RP1%IoexO{~YrRsE z?ZLY0)Vyog+Rg>hjdRLAZD)*+g$W4$c2!F*-=e8eZ^CkX)cF_0u)UG4&ahUg0erF7 zt__TS$7kgRl-%g{+p_Dp*c8)1Uq;0mXkPi?L3~D2jx(`c^AQ-?kk)pLXx*Qg-4cNh zBT8;GX`C8cab1Dw-=fCoyOlY6RW>(t<)#du#@Ka};CxGPbfh4JSsWU~$b0GmOg)++ zUMq>5lNtH(w>si_O2nxU+KGibGaEGGN?#NV5|1|@etli#;T1i5UAr^3iih7!Dt&!j z#l(t=(;QRWo>T_5Mo0}a#)o4(cIjeMU^Mrlj{4+EJrQ`p&e*Eaj^6_kC@tic(<` z#9`oYP|`YCaj-L%e~LarB%N6ezVx&U~B^i}9$~#RMk2MfG6MkIipCE$Zsq&pY*^al;NoI-5$+#R6xc_`;%C=gQ)? z(?VO)*pqO`OHNhnilebV;0FA;_mqMnPv*&iq6w zC&q%i034n%ei^kYd(muHYxMHG=0|5eT2z%WF>9iI<{V45RQgN(xuJuXZ*ETc`y#LO z^p1p?DV@uIsVhrj$hBuYuchYaHR{H-g9o96AT=_t25wQNs0qq$oVPV>T>I0sl2POb zDl&cLjrmcJmwkmxRq#TH)XU0;CKixFf4&Ik-3=KVk?pIWw@& zhdYPDl{_+Rhk`yN2o9asfk7I@kESNUF|f8)30&|+uwhnfSCZmL-|>%NgLQ#n%D!f> zjCJo@2(BFT9BQpAh@n2h4SFN=?* zN9>MJu%ci<3VNDasdJV=_$9CBRR{PDR7U;vyid8xxnIfj5V+l~$k&0kFqmYV%RUQ2 znMOklJ+QsH_0bG!k*F;zJEo`@60bgE~Kvhz?Q&jG*oCGDP(oHW2 z$xGDKQ&HV#dRgFOYcvhtnIOgX!Jenskbvj&LLRW53Cyn-BqHp-*oyhK!aB4gRj?U?8}g-n&6pcog)$1h4C9F#v|re%@*J|$ zY+?KhTU)XSudo%E@mGC$wPtb5Jj|8P8D9DI54(+DVpMq*O<6pR8sU|rKG+tru|C6W9Naol!K=teEf_vrFIc8E4jv@3 znAGYR^E57e)ofq>qwKs{4cR+z7jrC=X<7NkA4n9K#{ZKltZzwsR6j3n!wz&HusOK6 za3YW_jsGp>^&?q!T7>7P7QlB|2ICiZ_NvU_6jAJ9D(1QJv%G{n8m(hq5iV^(p`4!C zS)=$)Dp=nV|EPan3+z8p!d4kXE^cUzv&Zt|DBBm)klm_An0Nzu_w%DEm82LbnDb9! z&yTez&`LS3-v1<{ZeSuw65c86Izqe|g( zLOS3@`i<)sQ0C^y^;|nMeamv7hFJDp1maa_V z?Mk`njJcp7=VOIVK$fH@*+sKrhRM$heN%9LpxFvzCG*OHssB`HHraLZvqIU0ZvDO1 z97R*2q|cyqMR{?$yejM$*0M`MCH;}x>6ef`!&-JhP5<@nble9Bd%_BiODR9`cKQvZ zKVwD6R3&}0Yc2B!knaSi4Is_|xx zFEO_%EbylqF+XpWMv(p((ky}v^t84@9i1C&yPqjY3m2rGoU1{h;!~-Ewu=B&rgTNIF;3)~!eF1jye4Gp!Rp$A%EDAMxn!ek`>Pk@hcV~> z-AZO0X(bJ%FGYWl79o6e?SnM7;Qk@d%0g{nyukE^W5B)+>NMy}$~|9&aL{M%nUppT zFI<%4r`@9s{W4~s^=Evn?fmXLe60P`)}kY=KHZz>kZz~x1u@bWnQGFUT!XU+-`m>K z*BVk17ZMrkF;welJCR?{rS;^+NoFhK(9~h0p|yobfDzo{7o39|45@DzDqdVJN)XtA ztu~7@YRZ5U=-ZxFj5A~|wyTONiTdlcYI-KoI%m!;{E^fn`8wWD)m3NvV!3BEE;e&u-XE{?e{F4%TFEK`>h4VX zR!ZK4RfwBgDxJaPd<)$b#O=4=F9s#c-S6K7bEiRz9J)FX8efR0z79(Fgv!}9Z|aLY z&AwO#$LlSl@GsbtjRyFX7qTV`S-%&umO@E6&Dimf@y5{OzwgZAxSjzW4tVq#J=zy*e0YdpiOyRT>x(6d|7tGw zcyHHr?}@s+6EPS<7{&$;<>r}UxOniu-j?M;R-(gUu5VcmMbrBTnsXlag+G|jw*7+f z&ElUR$iFdQhnuI2Zr%bzUc&%ij&aEV{`Zvf&U)v@YJTSWu~Q>h-55rCExKebWVchq z=JJV#DeI%n?tNkv@7$QlFWNZaf$%vGvSl{LXXhWGkEO@QPW?;7gh}B$9)zC+@ZbEe zDY=@*<)dFJPa83_eMegoCy(OHj&r$SpwT&B>^3)-CS(nQdDGF|e>RES@DsSitxruv{S7Gr7Kmzy{LhA*}iK}n(< z`*Z1O3TF=NQ=aD5ODsw(%DVWVFLtypP@D_pTiPaX*A2{vRJIP%0+{w%#{%s@PZ=gR z3P|@(5SCO5F4=Lmv|Mkg=<4?K*J)>j_Q#Nx5yCS}CQby{*DAI;{-^*BU0%UjQFShq zci#59TrrMIAX)H8wE*&8W=Cr){^*OZm?SPLNYm1)f<}zbHO>zzCK1Hb)@n2U^P#Fe z({fc9MyDU6H%pks!M1U2M891lEbyS96f_A}G;yF~n)tIC<5A7fR?QIqp%y2c5b%#u z)3LR%jvt5zR5@8KNSR|ckus9C_y*@~#R)i|1>b?euWtzp{5dzT>sGx*v9ca$CgaXK zACasO2=aLaTX-Ws)>mgs+^TJ8+$g%-AFJx2Y8T9UkbzJ(be))f+2)E1;yPDk^n9fAw;ey|nWAs#&EF zAC|6gW?T}VcUmr$KJSdVB(A9D>&`!4cli0bjull|PR*rDD{yxk=CuajP=1XvaR#GuY9yAf#9Xt||Abn|@uFE;S&C9cRLVc6rN`vY3w^)ZEQZ&t z6f@C?aLSz3f}%KiQdKL>{@=CKtW@7@D+!3#rs1a$l;0R&485YJ?;;je@f`R81Jcg|7GaC2=5c{J}LCR9Pd-{J|Xn}9Ny>P{r=GVvv@DW zdq(Je8Qxd^VSxX>(ECzqqyJv@On|F}|5;J& z{QcE(NrvV3P^?M^VZv<8h8k_tyugsXmAZltb#Da(`o(-4e}3P8~T!!TIqD!h%-h zq$zmp?{2QjPzKNOnAzXgOyYQ8l|0*Av*T!Zbb2}_pf{W|t91qr!8t`8m)IY_Q@(EU zw?a{_0{ES|#tOw6eZC~u-_$(&;~{l5QiBT7@f+kSdf_mS3?XgZZRXUP@!F*V6~HCn-RbC3rD-*^^8wEY7@mb(F#-zSx>VA7NGj^7Y7I_8S;DefHz zg${^2OgKFC%aF0=#wI6W+$xC=_8cdNGDJ$cDE20Gh@tJ!{+p#ARAKKQS^P2D$mm6 z3OlMrW7yQZ_{fUE<7UT_VvMVCw2i4|H(!96F=|z+&kcl+gO)5SMl9ao<)ZS^^t?n} zZ8C7V-j-y?Th-)GE+&yvwGbQYV`;+_p^i>U>_JO}S&_EGzPvCl$PNb{e4NYtT5Ap}^T_sH4}zuT!f`7K!NawYWJOsCeDUzBtC_+3)zuDKLcMk5#_Mk5(|A8XUTMgS&og+pn-X1n8bx#}=f`skb1m^%Mg7 z9G3GG3?%JmJ_j*9(6Pl0*yz^R(VAx^77?_yYZ+nZhwQR|io#~G0i3oC;YP4l0o}8bbieR+H ziet69!1%<(D4dqU2u29cm2aA~y--T+Ot(!`zmxC(*>{ey>UTfv|Jire-9gmvc;t5d z^#{j-O2&I~?OL6ku_UOI~36C{X`hrsWk)hOf-H5xUwIw9W}7^&8B zifR$FQzD+sZymD1kM>@oolVdr7A%_Q&JZnF{fgy>dlsH{y4~J_gksU+{@j-Mfw0s_{OwWL?wlO;hNCfKZg>ui79;W!VE*FE#_f(*xQJ64E|-e} z_B$Ffa3iLFeEGHmASIAZz#4(JgxfUZ$!^T1R~=Ezr|{N!r#T@ zn6UaC515Mc2N&lLDb61X)K%#NnevF|L0!-ttgr0ZDS`R#dGm)DYqUVR{GsAwTy>Pl zrGxz5TUx!&@$8uD>=eUr=;h%#bl?nY6*Gsh z>Ik7DOnj^$enB^`wDGUd;1NZJ71~qPpx#q8LTpN6&z&_lM}v8Sb}z%3im8}@shBF- zopW#$jPqqT>23NkDTYd4wqoZ13LW@&G8db377A`$IwX;}ZGJTl>k8Q0K;4fCb6_u_ z7#_qWa_}*NeYI%r{%B7UCQ%G+I=I>zu$o}vscq5(z9li(-6o#$vmv@VYx;g51!1EN zHnp@{3HCv@5vD00C6O5?3nNv!$=`M_!vOanSG|pU54bcDFah7PB`cI9-A!ZHb;{T#>QR2&<88^?M^y1X6WExsdHPSl6PR5+s$Lvc5jq?+NPbG`FYqchwI@@Ng9+9l zJ4I#b4TZf?K|~y(25dfa70mctnG$YB;236v6n#LdzypL)d0TIU?4?Mh*gDqskO>0^ z>IJ+G{G?ds0e_3F#%Vr`T;woNH(`+543epcE+tIEH z1nBf3hC{Zct70hmmmb*qLfNVSwavgGK5vc9Uk#uX?MD8GNyh@F5jL`IF!gMitdx_d zp&Y6|Vf7>Wh8ku3b5mJ33UYDkmyTvr*{LAY1|2!cW^z^dkC@^0!~Yt-d6J+XHEuU>hXRdi$m-6drx5AB@@^z)lF)sAEt;e@fqqn=AE6p^+*w>&Os;iGsa5)$toMR68l|u7((OE*z2O zw!s()#8p=se;O4x;XIH_g+E1?!S7N=z--2`Pk|9QK^;Vz{0<(JujpYieNkfqCkA|b zDAbR@0JCU8li|80RP=<2z|&W$_*pwS4(Kf??hn^%LyQyO5qWy0l2 zV3fXW3AAt2lz_MYdwQUz1Uv*NrvQ_EH3*vswN8g*!kq`CV1N5pBh4M4aA8K{xt!P0 zZsH5R#z+xrr!oi;tKj$`ei%(N4u?zNJu8H`9}v!mnhJSQM1O~)%=K+b`ye53Q|%X8 zYH0#&4v`tr@r%^)yoNCU!T$O@ch$GYR4-LD_ILL?pbS;`g9+UZ(brRY`Ckgn<|$KCxRMw+ie4yB z@=22pib$*irFG}~hfzKp0%?1}v?!%}mZ;0j6f|adXPcXWi*(OXw|WgY9OzDKnPqgh zZV4qx1SjhOtLvPWGe(u>>HC$J<& z(vrZ%pU^lhGqnZroS5@*5N>f82BK?p6W0k~6Rj3;JYy>RFbF>g*emP^wQ|d9*9sp6 zU4M^$)Kb1z$Hh+(W1JSBWo=lX@!e$xjy*ZQM1Xbm;Jk*&b8)OLjhVT!8GhVM@xBcH zA?l7XJ#zU|8OtAUp7~UGik>w-5CMsX#g`@;3iMIpB4rFXlX3rz_8siZ_D$}LCY^7j z+aem8J0B8#$QHG|2FPo53k(o<;JwLEW8E>dLL6L?3FdR51|h;?0)yilV%*xgzcjli z_C`2k8b7Gj!X#acK~Xnb_E`|;5&yd-`DLF3nUWuI62g1kyHj4xfHvsZ`TtCHvAVt> z6xrCzVfUpymQ2clA=LbeHNI5Q(0^$J`QFxPwt3)`Gv&GXO>@w1d|(ckL3xgH7y-Ws z4pgzNTg!F}mb3e6Bbr#n2pUs`2xgM#`ukwGe3~;*m@`CZALX5TPgS{V&fq2%4n4C7 zpO=}0_Q~{$8<_OI6z{o8HqE^J3|^n~e+#%ya?dL-G0kpYifk$ySZvB}FY$l1Pc8x>G0|1yfGW2cIdzocT>`4cTKj97?%y zLg9E2Y30jDO^Pv;1OG}z(@Z|9-GP5YNM!kB)f z{ImSJy?6(^iDMALmcyGdBz!rSDU^+B<7Q{DkMQqOX-o*5Irvgx?j)q?kZ{ff>pGeh zAx)20nCms@#nhe8T%0Dt>Vp%~Sfn;&%-At9gRdqCSXnati*d$jH=L;rsm9N*yW<4C z`9^{-)ulI!hVDH=+K`otryehFjT?xP#;%|0;|BXu`K?NO_54Qqhgks5T0T7^Cc6#Y z?e2*PlGB<>h?Y11`fW4;EnpfZl&Q8%B(uR)I-aNRjp<=N>+NoAH{s3p{SAS=ry^5e zcV3*PWGbk3a-A4E(Yg(aJ1pWg^eq=P!^=NUPYREVeQo^S$?qsjT@eF0FJr9b6Q*S> z!Xh491OIKv>pyeCb=w+Z!)&s2%0N5bC`2&C6kRk~Tj4tfp3Rj#`+xfB)xE%GxV)h+ z-Z5dDG+h71$BOF_s$-ye)OA%wBLB^_z))ZqjFZb`YS{wAsOu`@_OglNnzY@XQ;IC% zoC$L8C^g4m&W%#(=OKK&c}~Z7DVC z_o0T$Ng>h~7-5?Hj`9umWPkWR3Js}}^-R;|Ps3pS&2dTtM_(tXQ)*Z(w&GF~dqnwwTJa3_~sgsHwno-PK^liQCyZrX28QkRgOCvpxS7mRinE zh=L&ypk{v&%pqH4On|~sI35bM-ZlhV4hqPFO>G-Pgg6j;H!)9O%U&fG=luo@vpOJw z=nyd{$k71MhUIfL2u?WX#$9qnoOET7J2o(Z5=o9LH{9`)1#7_A3cCH7y)%RZH-ZyW zC%>btboqVLDZ}OqFq7?uY9G}EI!*r18r2P3cA92=+PD+jm)dmE^dw?4?jwo)oPnW4 zN4cpCc1NKSWx%Ao3pYaheVEccMd%2L+Y;);i;{QhNOHQO;KBVS?3Jx89O7BGTC^Br zRqp0Ej6-0k2xB7K80f|kqDK8Fn4q-A7EB=Q4?(X|Y$OY4=&%*4>j(1Fh5h4DLdyup zLgOZKCAyim%#!Z?U4nI7t2O;3-219b>Z_=@$*_4k?t`mMv9$(u_rrVz&Vwd0TsX&q zzLnG0Jr_#UfS|TF@Qn_q`-W5u;Z7RDV`w42Tq!lZGzRWC4EF?0 zRDpY&8mrP9*ERqQaQeA;b~dPdYI?~tsqO})V#mb`3xY3&i%6gc0Ouq``Z8m?A@iD>sr#PoWJSe+e00~zHUFZ=dQI=gk%58^IB26-yNcEww0z)SIf8Fixu9kP?~U) zGFLVRmys2HK>xt9We*TR4$P2dw@+5AU1)(h!u!b>c2Dx^fi(FKST~_HcO=0mT<4bJ z0H6|J$13D;CH?f+vC@>nvZ*yg{r}#p60G0dy(&q~M${;@kTwU2LQ^AdCJ6c&#FqZp z8?H*7DYXi?tK{3d63Bs$^6com8$S|=ZNdP(N(0pGk=ql%ONL}HJ}dlh&>pSaJGQ18 zQ?)|-4O~dC6Jyq|6s)N$zjGa+j zA(9M`|3G(1jy1lk0)W}N&0j>Wl{VTdm-18Kq(tMkybY1CaZMkt^X+d-G!L+9fE#supb4JcL z)Z0~BJyd>*I$7U7*V}#^3r0vaxl+wuTs%O;f%^94-u6paE|aF>dV${Ybwa&V*|-PY zl+WW)qQ@i~J=Qhu;kJ3($2zX>K=@%wpTcdEuk8@@hocIFsWS!r5n<}AwPD0_U@dK& zu!o~7-(qC{F_vhA{8$ayw@2?K)=Pd>Vckag>YhmQKfL!h#4sb-b~ZtE6C7 zf@7;QyeZ>F(@J-|$GQgqRWb>~S~f?C$|PGQLBHIXsq2{PN;Ngi*}Cm$s+o(2k8>{K z#J)yxPTKzZLFi3#_5N+4D?xn7{aAi$yfeFMcKyNlTIl1b zsT~QkThrw53aGch3=-T4a=vTu+e(t;V?lkaA|Xi zb;(Nl60jB%U5B1lsr7o0S9Vn1L8-`ng=)f?aW4C4#S#n(MY$BwrQ+%zKVB z@C&IR7hmVxw0`l-cbm67IEvG6GfD*u>+MYC_85LG0cgOrzs5a#V_=Y-QCSeP*g_+u z*oiJP=)MmsCiBYa<2&eyOV=;y)zKv$6bk$&s2hlxfdB}N`4!cbw>jKv(NH(;309Qj zHm{zyQyu&S%2j_+_GwC6W&j)o@VCK=_Zy%eoCzQGk5iUtSN7!&gA@(V0B#8Hf4ixxIO8n4*muELd>8Xq zqnAo#h0IW1!K)O?bG(d~y3mVUk-$ZAxZ#rFvOnOGE^!fF`&h62ehPy-ly`HgXjeC)pI*iS=|AR&~oXN9;b#dZ^t4Ov?ZGWsDAgN z=&DjQxNdK0sQs@|qseFPBBjxerxRTGGThuwJ~}(;Q^yFH)*zrCK5lG8$5n%v%AbE1 zcrrmkV{2ov*Jjmjg52g9_UE7ucG7!QU4;`;iz=(yTt zC6>x0)u1K}>z>^zATO$egv! z0^LE@J$nd$bJY5tr}_XSRR#rP20>u-l>POb8KmZeulL;Ul2f}-nD8XiXtUyqm5Ni} zYxeABc;YW52JqxANZfphLskuK^ZIcLU#Tjdz|Nsg;OXXo-hUHM!uP-ve89DZ)Ys4G z?~D-CKfbIpY=+H&A3_@Yr31P{@As^H24$9^Zm<{(lDGyz56l zW*RQYc4oLrCSaz`a%pHtlG{QV65K`oNC2H`1n^Bi8u+^t4_G(vk0P&2j9z~I?|5+k zotk`Z03MXgn|M(EdJ_-7?#F|2w!a>f1xg1ZLMgcw5z5$pM0l6(Vx-0Ys_zzD2oL=S zTnJALzy)qY>(bE{(Vh(Lok*30Zd0c!aE$J&XI=Nv#Ld$)UFsB?BZ2SPvyOO8{^7)e zI9jI1{GetOjweR;jQK&`x;{zVd^H69OYUhisD#T;?yS{Ghzp$lG32vv>7S~+#~1ud|6=;b(i^%< z?VK>WfAIJ0QAtjCFA+qV48@w0S~mtIdapw0PDCf94d{}Vf1jG4O#oN!SAms^k4$98 zMy0s{SV)o^N?beB8a=z0P&MDZPX8cd+Hr`htM$6}v+Zn3y%cm(nz}*?`bwI*5-y2l_+u`wm2L2}%(gRaIsTczq&*qS zG3rt5ea=a558RWX@{`m@oCxxDQoc50&xee4;ph7eWV6FobLopqvNuU)<5c89>EpKdiN| zVE}m*iofD3zu~mM;0NNAxwpYJePa$j-da~H1$CR|oJLrXva~^E5R_~OrpHap(jz{W z%QBu=AHu7@Ya8*VK}-5@>Cf)ya9LNRUe?_qW)c?$DdgPyS6|K;^e0J3mqJHy2CFbi zdZ0-=!wOf;Rw0uRw$bF6uG%Bhi9@+;t~iGXR6Jz(bk|^7m)*(-uFUv%&8jR-IFN|E z{2!^P>0Fo;+GMipy<@feD)+S;b&cF}TGnS1tBqh|5%1dN&_R9y7{);COvinT zH1I0?fmQ_rlQlj=u)KmZ3w!8IbP1!>XWZAk3_JMvhH`yrlKp5Za&b2fKFNiZD!NOJMg{h?{sGD@0gN%6TZEK zk3c7sPt08mAF3?mv>8Iy0p-A81n}tIMde=8pc4+8;rd0#1nSz4#RM$aD9dh@lpv*Q_3RbUdfNm@UY7Oj&)ie0mM-6QLzxE(g+WJ!icC^`Y))f) zeO4?--4-4)k&n6Jp7zx~tXQjyy1wdwKpoSgI#y|Tel~CUzI3_zSiRFU12;a_fj*~2DmE%=;rt<5);<<2t%Ve1DyZhh_ zWG2W}XSIxMSsT5sv}V@s+|CkQBt(fPXt}k|YR&D=sQO$o+_8NAZ7p(?RB%UUK~(a1 ztk!ZtO{po%4|miBbk^5#5g4`&3x?&)-!#*TOsn+XueFK=$AGHTy9Rz2 z>SE}B!Q5J+rYT?F=d=-bR*Pix;0KjBf3#2*Td&9N%@;KScwK zUuG^|`?oej*IGn)CApHC7kmE{SUBC-Sp7C`7eZ=Epee@%7n}pdvF1bKI@{ zA}ucdo9zZHH`=%^A_~XdDvVe`jKhf-@dtU3_c@%KNqZZ&a0uAIT((j=^L-gl`M_-8 z-E)LLj2SHD4U>=H-uPH}O)KQ~KAVep5y-}u4EAYyc8^vA$K(yOImnvEL4A+^FoC>b zLJj?-L5FVxbtRQAwp0Bjh$u0P;@MT5mcph~wR%1y4{yAJeIEfTMn*^@ja$r9#i2gU zhumW~y-)qW^C1^zOW}jAkq@~owtBU8;Um<3^!qE!s~SSFpsNPB{6SykBWv{NVOs0a zBe-l4GR^X5@H2NTyrDG!>y%+j;aL-k(YFzt!Z8M?$7hGr_$^5f!^>MURi`?>JL~=b z;rLFua8+}B$G{{W2BIKyTg155wK?`pTh>1rxu>OZm}6&X@j6^VnU-C$e^&k1aQp7f ziTdjMb@tCzU&m`?{)fABJZpPbwXEBeJf1UEt$;@-m~~nmI@ieCpty)WsMx@otNF+* ze*FgQO&6w<1FO~N==O)vi=>}|UQ_pFTuQs!S`eaoq4m5upaFTDvt~r4A&#GU$fk$54*&MV2X-nBFhDWDI7m zUHP4ima)b^hzjCRfhH1+RsL6k^PfIu`-mFdZ(Xn31LIWK^9WlKZWvYu{TO;8nAJKC zsDRYfn@!bfJ})R_gwU{^`K!de{{+;n@yIH4wx9U93C_<@J%&+fzP@i2aKsH}I9dSb z-oR0cE!r0JXa-^C1k~@LeC!_EkC4xUm9MEMV~(Up!_N;C^=NGf_iAecytX*ef~th; zh9m!=WOU+y7XroB406s1ETC#EUjjurQh6>5?ZLO`Xn!B4!y)yCAk-PU7cCV z$*YjPe|?qK5~6Q7Z}d5yLi^%w4Rl%$H7t0qil(=+jm-VW5!)#&zuDo^vESROU7v>| z)>jLaSY&KSA$N?3W6(tJnuo-Qw-%5m#v==kz!T%ChEoS%Sk6S{$F6#g5QdF9Qsu>V zu#}d0RRq)J7Z=l;_*?q#QZINuy{cX*90TCu%hUwz0X5;(^$%fAIclP7>>#ppQeKW^ zjh3u2k~J1K7cdNvtY)ZaOL>nEJzGEuG0;C=@?s0q$CRPh`joGOc?K&<7QdwC80|6D zVPgFFRWzLlN7-EG@o>_GQGWCKdY7_7aJj}cx|B=!J>TdO4lc4B35OknkFq1~9U=zi zR;T2_GA!l(nhu+@It9_!3tY~)niAVj)rW(`ryyrRAR?EMT9m_UHa2`^cX~=zii|WT zg5XPH9kyY1@zEvaHf&2z7Nx3mC#8I^qjU7_VEJ@OIq>Az4r{BYZx^SxbUKEVzvwEj$Sr>_ z!&j2n(i)Ahyi$p|d_8l;`pPY?SbZJKq>?0JV4}txO$rrH(t@lxalGHd?(43NCTy%e zxAC?XpwX2w5&!KGTaxsKOPDKMn&%-Y_xG@@NRoz!chiVTuJh|EZHL9NzQS-- zX83mfk4A60&vW=h$U&;hUB3tn$HE{8eyaakxusfP@HUt+`tTQjh1YL&jayj8-A2Si z=Br5O4+u0*moWJF5~1Q*Oc+@-*+Yt6`+DZ=a-6P0sXA^nD%R7J zM96>eK)IS*hgt5L=U+_!#yw`Wl@E4YFHF8PKtmg3Y z5$#mTmip?H(E3c?m13mV&5-kLIOhD(II|)o@D zEF@>>M&~1>0`4w)UPazN&Bp-+K2aJRcJq_fyRt6l+g zwN3z~G$#}n9qT^qt@P5sRTG}t3@V=Z=ZL0O9X%|1J47!xi0*jBb(AA5tRfOkR=om1 zdZ-$qAwi7aiJ4u^=C>TKD*gy}Y{$-U+fEe0-W4*7+X)7d7E_*9SgB;KFem<(#`Tyh z?qWvL!Fit)9dEv6@&!R8t|UEnScI2FIUV}bXC!RLa0iMW718$v*{ z($420?Jbw0s{guWi}?=7iKSzel`)~%HQhC|i&v+t#ebNfBo@2lw+l1lL6K5g1QQk9 z3s1Ac3(bfiC4Ckuhnre;uGhYH)R&9XsD5cgYTbO->#G~<#Ruqp$aHMAc$q;jX<-m^ z!UH?Jp=x^*{FblM@o!-90~>&P8eQT<%1Jf2#0fWRaEX)YWxdNSsr#3^M%}-ZCl|SP z*4*5wnKjNQ)`UGIHXcZ z;H11VN;s;;YpU~kwk^33MHzr&RlgafMV##xz~~w1eeY)ZpO7Ru))L%;I}ru^X53Hcy02X z>WG5ta=7z`#+U8(fj+&<*S6OTYO#~6?{XV$G#|lt{%2I#}dRy-j#HSd4P5R#{AGb7zsTK;aBtVg5KNFt4oB%N(V}tmW zI17kHZvy44PN#0x%r_U2zO5X(G&OH5xg~%@nvmmV#UGG}r#dAP|1lLR6CcAAa-Z2I zR|4%2dzDXJO9_7@kBi!!#Fd1Xz{jZ~G5690Im2{1h^&7Y5N>w@NBpjbP6zhTEwwwx z!Z+25N=V`{Cl0^f(ox^ytZ(r-Z>MT^wn#@|{r40iXSy6CM4kX%V}!R}J7)y<(GW4C zM%D6wm$u-QFR*9f)dbHA=ra=-y0<4tskzCrRGM4x6{HR%rV|zl%8#zJ@~VQk4Eztx&eqxutT7o%EG1k$!z?pfLs1TPt$Xsh)e@qMbO zzJ9PL8nN0Osnn^n38ltk$hMJdNq%;5Wy?u9dWLLES-zXxKfp>v45OxIOmE0oX`B*r z^zNWMYc>qD!mBO!Y)Lht(k|$>sj6b#aQiwUvJ?tds6X5mq-u+NpU@pN#pr>51=iko z2{QD9N`v(UDY}V`p{YiF1*VrJn~dLv%qwU)5nSFqY(u^SudHNhS~K0!6p zp@NwShBJP{6+c9`Ad(40Bs7o2AaQ*2njjjlaBuz2yfP+BE*q)pow}zbSRvVQRB^}K zf>$xQ_}~OsV6ED#e&^>U;G_CsOajux2N{(_B$smL&aNA65$&y;pvqmj9(V3l94^^d zUOtkFEp99)e5BDcBwOmMkVmhr%hfl2b3&U@YwERxhN<|(Dsb}&@>G-gQOR=ezAO;+ z{D^s_E#;*k>U+z~gRNc1RX%MWX|d~ct}dnwN>okypi>A$*K03`OX*=u_>8$jt}HUz zjK2)6fiq@+#J`4k5P2Vrh?H$*rQttd+bFW$D_N&_|JP2}ekNzmO7K38=LZR~6BE3T z;`wnryYEi$7UTID>emG7NI%|`Yo-Bsb3aHQSyvP@%LmkG2)JSjeBu)rN-xnuI3%mS zb?OmEY^MYIqGMe9S5woUQc-W-PPL*t10%z})g&~`4piihK}D3x$0XQiUvE$$dNL^@XR0Y&^IJC%~?&zxW_vyZExHVl-Bs>@U>u5Ly#bjqi-^K_&pCjpcZF$E{kt z7kAlI3x6-cr*+E+=%#43znwsLfBUn=cIsN>=cNX$CsjDF?9W!avY)!rUymCzB~XtN zn!p*n;TppENePCjM4zL(0%iFR`pe!N2928Z_+(LG5SkKj2a1vmp=z^2I~66`Cg?F^ z@L46dK9l#mH#MZ26MXwuYh%1B0X$}{9{Ied-qbp3QY%sK0)88WOT7T>{8f`$hx>}j zWH5M-YE|;F2?b%)3$^o?Obce)XPXk2shO3FrhKr3J zLW6aDa`DmO1M3w2Vyd`X$901|xq~!>8gaVcpvt|kYG_eH0=QjGHU2h%ENcRYai7+J z=1-f7ClEUOK^D4AuuedV+VO8p^6ZMoF{g30%{1ec|0f|pgX&O45(&~6K2AL}5fJQy zaLR;xJnb9xUWn`e=02%*KCnD>n5rFBwe2_XK*Nm{Y#qgG{^^ERQQgW&Jf+uT@XGp6&KtoS*BDw?x-9EuaSKk$sfc}5o!f`AefY1JkW&Udrb?bs-xmQU=p{H zHB9x$k!)*$Qg~Nk5EaYa7E>1Navu{ny@7r%0vjngpY7)(XB2x4Z>svUUzzf{;=I9c zsz*!Zq{*v$)73SC8aio$#y13xv{)-2m{@+{1C!5v3`f6JRIhzvRHClJuY<}#k>x(C z^}ePDTz{srN{7ky=QskS!!*N93GGyl%!8kyf-cK_kU$!NQCAOTbN^^Ul5hVrGuUM~ zkVtQjyLwn(GF+3Ei5WYXJ4K;Qi>RSB7zJPUXXKC+DeL5e_e&a}n6385&#FL>!&*GbF=F0|_+E;z?g$9nAH z2MzX`HhsB=;##3!_G6yYjWspL&>lCcCcJ5Kf0G9dDnjav_=du`Wi`llHSH!}Zc6$Y zB+DJ|UxozP1ob2P#6?C7Xu)r20^eM}juA;~%kFFRJaGMbff5+$yIm&lie`;6EeZ0( z-c?a%UDuR8&=4L}!WJAFVJoj{gw4|f5w?3fhIz`EP{bdTEcb9B<&WI&vt-X6kz(3w zkPcj*A3m?NrG=P}>@ssffcZciP%s~XshV?F3o?O2IXONW6Lzv@M7!UFiZEX%@AVyE z%wd-)IUj<7f8$xA2>+-|%x^BsikMfSamZz!GBJlf&6wM;e1S2tU`puG5y3^o90OvX z<=)EFyTBcro({VOPB2N+190-`1gB~t6vuey{DOb@^DNo(id#-T5{af9L z=VBPAtyykK8(N+oXw7nqG_;W07(Tp#i^Kw4XTxBasijv8>kGijKW{3yy{}?uA9ODu z8q*cb>+3qr)YHE0=Z%!rrY>l$!T9}e{pH-xnGApHEBLan;BS7+8F&hU7DrBLJ1Agg zsRM|gZ5q^%{ul;-Ynf+x#Yg^veg3qmOcwA}(8gajb~-rE62VTH^jK}fY-QrPPWNg`f9Vv@<`!C6bN!mlylf(kva}_SHR0Eq&xN*9 z$Pnt@F;hcyRZ>BkKKYR`<{8T?U-???55^gd(IBo?6)hhDqjHE$1D;V8u^(3Z`*@P7 zXN)8o0eL~soG-70&u80-HHU$@;=l*AXf()n^M3~<&AGDchd1r5P*t0 zZ*-GNC{LN-CXDVtX8keE#sN(O8iR{kx6`P>odgz3aks)fvnE=D2 z4X~ex9$iY>%M{O*#W&mHr%+pgQptbbvs*1AJV}Ivep4uAAi=%pW*KD?p6j%HX}GuE ziY+Z_Z#nEQd@1m>`9>#-^)h4Sk?I6~7YoZiZ|@tdDq$vpgB41vTG@jx;5+*W1t!yl z!G!O2HMjfWYsHhlqlEY0(3*VcTJh)KQp$UQl%i{EjHc;PNW%$D&E@{wgxTS!ql(oo z@Wp|-L4)j`M;&5qDr4x;+Z?E^0IyBnSG4vYFm*bb0B}+-mJLQ9#85f31%)5gUyYDv zDp-Z}1`Cc#Dgqn;2Ii1E6*N_+5|qLN=T+<~g6B z#d|;q{nhd*rn&@FtQr*H9B$2D6Vf$@Rq$M(Ka*~)LD`|!pyGR|$+YWwHSpv#*LoXW zgqi6k18f0{UkC-8V@kh`u{kT+NQuWZopZUH#81f=$x8@zR_%NmG5P53)@8wccMjYP z`tZGnz8|sVpgcIy+iXK^V_790RtZz7eH@ZdYOABK>kr_%a=65r@TKlL6za6(%R~2P zB~als8*5!kGpbxxfuPeNysR9&xc5ofa{yjH)rMX&+J`obZLC3=nxS^1y#ZI`S+?6W z7B)gx06P~Q?Bn!c@d|KX;j&<@a+L&g23JaO{e*nUl3zJN-<7Uj{44)!ClIoMO@2O- z)&hoJ!KjUu5`pnU$R#Wnw8SgnCPO#)gQX7J($8Xv5oGGszcluKAGzE#@+!yfiuc4~ zO*n2yW<2=pookF|AYC;;=9m0VqsmJ0l-k><${}a(B>h+!0(sd!cNgpD^hf4aauHBn zTohJ85j|kRUN8nGd8B6ieWRu=TW;#D9rLvIBA8$RqOH46nn-V!7D}P9&z@2|DFlol zBV?jX4yXKr=oUq_`4&&~6WBBPu|UW^6(LvR)ic|J1MqbjO8gqW zF2$>~tz3*}%o)Gya)r+ionI9W#o1TzlmCb%zq4aCQws!a{QG^yN!Kb~Ri{y%x?bD{ zaGJc{M)v0B2sk=itFK4Up1OHqRm38s?vZW_k9(A5!$+bQ1{oH)vF4AlUvp zdcOu7r>?V2fki6eW*On{@mNf;h6UEvky6lJEJoVeI+~59GM}xj&uiGZ8h^{O%?ktO zy6|PZDdCLI(S*5I`(U&V31;Y&ZRad21Eb-=&Wl2K$G*>&MYTC{dA#&p2uSUR)O0|YUObU%BQ zV%mzMh>ahRM@kD-Gr|2b9ccMwYQ8%LxVi%EQ_2RG99He75t6tMFgGL%? zLh~|!JvL=@ovO#CyfyF}(_@>gHbLzM@YzFfYxoqq8=zoj z(^t)fX^R=@&@2<5r%ec6sl+wvgIQcf4^W&^L+-IY@Yns1zkcUugqDH;0XxA^zia)-~}g{j%|~;sj+#GhK!#GEzDF<{D$u^uy0Lc%N@L z7$W|PAtFq8&MoWVP;5n87$!ee5XPT<6G*3IftK{NBZ7EhkH( zbKV{{ud$quF~NV(@Ou~1;T#v&e~w3}q2-wWuHo4O^SK9`;QiP)JiF^WRK#(bRr^aV zycR1B&&K(>{A~xTgYQ5caM;)Ypc>-g3y5H*e1lOO`C8s~;0FI)Wb#f%9_97;3YG`( zS^)QL^b5FC;8q8U77$o2u7?t3d80!JGgZyie8U38At9`LfsCP#L>oqDNmaK_@xKdX0EpFfnbB8|?iDncJbIG2VaTy%S@(5h#|N^#I$je(}^#5E%*Sh(US93 z?|v##(eC$t;4!?1I?j9l%<}K^8=45-%i4RZTHvC$oeDq+&fDhc@}a;L@4Hl>Yp1{K zRiaxie5vID%>LdoECsagKd4z!^8D;Tl61baJ&ad6G4k%H$0w zqdY-ngeTN8f4ilO$_8Lvq($os_US+9N$_9Z@NV&-R+V9_iXSswJoMi(3t!xjEP384 z&q^7;mLox~v~WITH3ML-MS1=(&XHOk5$K zPO5%|yABN05NaeZevIlrPN}DzqGJeirX@Uw;4E5RrAEsu+z0rEX`XM~YHnI0-lcj~ zmVAqr)tw!md#N5-u^3Y;j`-gASt%ZGibvg)`A6cJDHMSqJRHvr?d%w$?dl5oX=CYG z@#=Cl5&PEttH0Y~AMK6tuq1v~JQ#3;non64Pli zaVk};EV;G7I)7IZ)XZB<^TWK?>WMJmNvyh%43pi{dqYh7v_x_-j6AErAr>qV1FJ0^3sCY@AWwIN+C+pRP`2P5kFR3t{nSh_XTgyKm zD4(j8=i|K}Ywbe)jGfU~H}AcroUl3ouSJ8`67TH_z?*%uoN&)A<&+hH_U_QyyFK2! zJJ4QMymuFYN@$&UOF7~9f%cNM_LAeRmIsc119vb?gZmF`7xIEW$)~EmD^*7b->|jK zppuxdG~VkZ8X|nIj`wv%spS@f^3v0QO0cygsb+3k3obG*f9L%MIQ4=2`vQ}HLl%CPWZ`UnVXtj^&3iu`Py$ZR znV(P|R!O1aVcI2sG(sggI6%uVM%N$6&4O(@Ij1co=d|6F%h5wK19ST%G~YtS_bKgo ztxE3UtRG8Myd?gDdjI@ZDB99t+r7w-#aN{h!@ztspP|1mP=5g^))XmZFsb962t62r zhPy+A^R(6g{?)Iwk@}My#;ipc^umz%1BXeUPi^8St$y9W`V)s!>(6dg$=lr*hdKiM zHsh&Twvc>G|$U+S$V0r}Fl5)J)LDS~B;wX68pTEX{(dYJQrQaX>r~YVw6O zEP2!ksV^5g2@wQ~N+OF&xJM6*!-?O;GJ`LVeg#mJOusm!z7yf6zY>#iOla2I4pVXu zn0Vw7H_@6%F#g0ki&!ZH|3bh&My&dmZw&qk1e)F09d5U^k>62-$b`B6&+51n@3~UH z5{`;6WTK8>S&3kpz%yr9pkENPfTdrhQIv--$owxs-?3(ki>Pf3RU$P<!Jl%PCgUe!$ACyZ>y^kG9WTUGrM$XDBi#-_ zv0p@JWWP-BZWt!s7;zFMV0MWU)h~}nieK(PlJnG#e)L1Ceh>P5oYF}as3SHUWzz#? z(^y%Atri;z2hNWNmQAG1i~sdj+$t4(>nDxdyRpyp?9k{K6iIkuTb%L@u0xOS@oBUD z8~-V63m|PAhtz!(VIhb(UfKVwG`B?MU%oNg{3Erc z&TH91)4I1%%qO7aO#JKDzpb{!N;`wr+1BXWLaXLXO=J-sT_a;U_jAlOZV1b4TGc0w zj51~Qkt@Y4L~#VAtNfiEymcE2)lI5Sk4;S+RGp3>r&SAFJz2tKgu~v{^(1H3yC|V*t;i~EIG2&)UQ$g!8YL{0Wgqkxx<5OoET4(svzRe%_jlZIP z!&>p{9aakkPg0LKKbAJ6r3tbp)>b zM$kURr*5Th5GS1@5hSfk^!{ZW+6*)(B*&jHBGi`iWp!bFors=tHNrlTfk_V>Qrr!3 zhLeG>o?F_h2CWUE@z*+0uay;Ek7N57wlC~s{qd|3+ltJx*;tXZCS9kT=%a%o@DC}% zDw3yPbfG$i_Y$3W+0`9Pv>4tR>!Ag?CgVfBJ!W@ILvT$jrDqV{VT+(wOj}tQ`0D(@ z#SH9agSLmP%vf3yva}>r+{371_{x&HaBd7a-{8=aJl<9!54X)C$APS~m;LfAyTxW9 z;}3i00jDjqrbHa65&i(br)J3B{UA9Ggfx7>hamR3P8TLU z!5-M?csCr$!;|LOe`~$E#2|*<(gNAYDPd}Vb0Kx?MO~l<1f~w0xkbtCmE1P{3<;VZ zHqzr!>f@?Av6Cyhh6swYiHV{u4codrbko7C4{5ZmmfV+l$Qm= zK5LY#Gamv!S5!8(sO-+7vT;Ra8AWB8s_XMje#voM{cf8@l~&_iXkJ%Y z{aH{^**!&N*+pejipuUSD!Z?!ET^a}x2P=JcH3OkkGHmdfU!IceHcQrTQk zlbUg5oT{(1GEQ}Oz9NpfKUY4%q4By}{9`}j5^twzfT+ZE>^B2l;Gd225Pp>WOPa=& z4}j9vU3?@8U3zvWZ||h+Y8w1o+uGOAH=ydQhpS`61rswsvOQ^vwq4 z_A8LzL_sfDxD5i`xlFX#P9(xao2gWf%aT!?9_F%UpqFrvx(L0^ZglbVI|lF1;Ma_I z{2mG7yIEIU?k@Zu2PKJ5vnlQ9rRVwTvje#o#6d8|XI*MG2=Q02K#C>oTW6fR3|~U{ zvN%KpFs?|F(t-d&b6CZfn!F0&{_OWTpP_lt=fpQQSHIHD(z%v)&Zl`mTpx@tCCk`i zdxWnud%ctJbNRBI(Yi#kCd;|5&ef82h?Ej4!3kyxLV1y?1HY?J7F##E94|=LVXBP( zojxf#ZoN|~%9p*8b-3IiSx3l+B`Ys~C0R+CoF8*ZJ;(Q6JY$sf`>N)%J1b#u3_#E< zugSon;I|A)kgjzsiYbvXF6*7D*pmP7B0O$b#+KqzY6RlD>nn=DD!Dr7ps!rG_NhOLRb><}XG|mOINE+a-rA9gD5cBL6DFPtoubMZyDdHq}$LiW1LL1ytnc zTZ^>z7P$OeLWL7MQ?~dX0dUIzGG6kXT1>1`!VH^3U_)7a23w{){J*flXuOGaMla6k zFIO5D5x9Mzu=Tiq$SV%P{R56^g~3C5#0M#-9I^&l>2lnGw{1!C2wVCArb=+xzfy1b ziS=s80r5V{2#|8=cZJ@x>*|4eaRaqCFS|9 zO8NE0vBZA&vuHCZ@%37JOlx|LS=J*oMF(e1V@I;H{sSFtWF7|>9CRNcE~C~E2Z{L0 zB^uTO71jI+uq6=?n4s`kQ(|_qV5_nLtzmk~`s2r_si|uF+HAp&r|+6fe205`?b41Y zh`GXTVJgE8V}>aUYOobFo~3ZerI${Xzowgh=(YnaU`9^BCohB$B&T^+*^ zk?+8c-J(<$TwM|&PNvQgZDi2{oAW|800*AOGaUQ{lru~m7sz&}noS%-zx|}de4Ohc z`lPk%V}ceZ@c@6)tk2Bl#GN#=m=BZhJyW?MvhjddjYZMV`%+o=z+AX>Fk;tcCmW3) zqC9NxScF@yx^)#nfw1L5vu<2AG#jI`3E z?=3-tE7-Ld_72MXqT2rIb5(#c&_3PkXzdeseK3T-5#Z0L%nB+~wa$}Au!P{5wXN2- zM6C~O^nm*246IMxIw)9V-Br(2bb+Y~$YF~pfCtk|Vg|)uppE9lKel z_{fgtU`uCIWvo$ri1Hy~SK3;lRk|a@S|^s#2!X#W!3{>xQU|1{0q#pY3=8?%3U* z?U>t`+{n*pUSzDB+#KRQx+D3KMmImb`3Yn1s%C?GMl;<^s=T|<=fa8K;QrQyg)-EA z!v%p*sQViiStE-h3F=?M{z@opZVu%Oo6|CKMy{pn6Y9fDdW$~pMDTH|C#~u#SvtV7 zIhpm-to9Qz18-=1DkAy8(YkVfGeozxJV_sCN(*vXf=xX-r39K&I$NfchyB=P(VJHJ z-NjBMNmg31(2f|k1H%iuRa|STJR{*x=)?JR1&w>WibV!fwLb18Sh`W{&f^P?rPYnC z8(tT}B~}+MhD&*sTPF&FH|;(qhaZ?f;#gYM!K(MGUgMI*Gc>Jk=45pP>SBUgU)3X& zIz1NgYs$orPSxm);e*KXxE>g(6;IG-*l@EkAAk$iCa3RhK(2-2r-7DO8|?nF73IW3 zx19Pq5zc_obRv-H?p>NEz0O7t?z0*~6q`{6Aw`?^jP*!arg&-f&^P z1~4cgoWET4c_7dTKPJu)#^Q#s1DV_0hs!oPxG;g{U2%pBOtwwyymCEOOa4o&DuDY- zY!||Us|63LY5YL~R5MGZJ2ZAPaeplY1z7j%UImh9pG1Fa|6_m4wf_G7U;6ut{{D_j zB_r+uJ?`=K0A99f{jI;x{NG|T{^w?&d1XMKl_7Bz1NtmP4D7R;r#{0j{p)Ijo_sO( zamEenHc9zRmPB|E&S-cL-c|dow8eIPtl@!gQ`6l0{sSJAObrin19-qZnc}k2w9!q1 z5N$!`f;?+poHcK8bBM5cM^-G%D1(((b~M%}HwqEWYm9a4+JfEh(sU1V*SnfSlrC38 z9+rnNcSJK0w6D{Qy(fdHusA(bURqvvS9#T4IW^Ixa=I%o4(mghIGVmTSWN4#OBQo+ z+I4Pd&WUKckP#E<3v2>$4;eH}j;^eE9S@k|;O+R>)P_tP8>)U^9g5FOD{GRF>W)rz zS%a}g(4|uxq9vjY0~`rh^WqA~ZWw+yJuw_it{3UYMqo;fvu!H33@dg;V2Q+X2o89- z?r^wkz4Kr&M0rGG|M0JOiXjAtsnLKCtm~brCdzX4u;nfzOLVaI&v z5YZ;cPj*CsWorjxWdVYfzN|M$oFT2q9e-h)d2>UZqgo{mDFf@chV}}9v+mN`h zRYrY%i)i+r+fjsQHaAF)G0l%SeB8O-IqrQj=Adf-P5>XHYMYWQ1aFmuWWLD{-Bkwf z8-7l&R`(`qSLOCAcFd2_;O18VZq*%$@Iw=vJ6yfaAQv2f91A5?W^?(RDt9XkPDMG! zb$!pEU!1lH&>O(?=)1lJD3qNzVX=e2X82#EHzgUpUMI(j$*!iP!*8Gqh%d`9^ci)4 zarV898l&$L8aEK%$o>oDbA9nu=S z#@LWyQ>jwv@Y7u-8y9dO=+E(?} zOCk_t-qkTex#wcVw|*V}G2gV%eToNq-fvoec+!$U8O&E%v~OfCq&C*X*hEMJr4+rX z)mRN>7e`R_hkwN4iH+$@))^B@zjsS%1UZn!1+2vd8*MR$zxz$2!b}$p7~X;%!k(r@ z2>O-m79MlGWSlv@eILTj+oIdZIgHZmOSrmW3Hb|t zj?1xbSZ^&v8M~SaNWBw>iy+iOrE_*1gt9F@z2}sp;Ybt9=Q~XWudy=`w%%zOwE6a~ zQ;|>D1qHjid1#=rMsSf{js3P}!-i#l8Z}rB?#_@|Bq!jz>u3M``_=Vm@{W66c)}Qv zUrpN4=pId{HNKg~O|9oNLOoE`C9dj_U>fhZxuub%)dp;vM(=wLb(NatqVN)wtfqIf_7e8LhGK)wRS1-~XyGsn*ZoU^Hafl4&IoXOB|6zMDWh2rS^cAwQ_eg?*AfV6^`sh* zvHq5D!C)pi=y_ERs$A&jXxUn3P5CcyasNlS zLNvJeml$04L!6_+l}~Wx1FjYS87^f9!L{T+!j;$$SBWlzbI@FyApw(+Cc~B7(oV9p zRPtiA-J8#gwRVmm>Z0MwjVFKOXEh2T zu_fzh$vOrelO+TIvyNqQJmJ9@m*bPRVD`di$66gRWndZY8n z?Y@o}LZ$PP6qMj?eie(O6l6LV6n`ox?nqE{;Z{Qu@Kve2dEZq2*v|oIl9-XwYm5GOpGH2 zAEShhsCSTLpeFi@YQ`sZ07s< zDtGwBrPq^&)yEADI7(3#!~&1%TB;`;ub@iC(tRrC#>v>jlk9BZ3eg#!%kDxP~B6v zp<*re(&9qMD@Ut&pw{5BYEiy__FFsiUDkAU|2c4p?wjUuO+}7R2yH+5=N9=o=BabW z&EpI+kH+m>3?oM6WGvJ$N@$o;d-N4!KszDg6ZC4TjTBQ~MQ-@-Ljh$i(GBm2YBQ2L z5fK6xR@>ylwko}8M zRM9~ra$>(m4tL09Nq;{mZq5;J$g2lcr)$cqF=|(9E|CbGkf>R)(e;&~70WiMNKrT4 zomA^p>JQaAPhCg+m%Kl1R~t~asdXtYUka2F-n+zHtj|+di<}rP4L9&QU8(66l>ml~4UJVuY@i-qp>z`Uwg_KOcdO8a-kt0aV%( z%aZbwWEfkBI&}=v*rd>G1M-e zlK1z4@&1E0-oL+u8i@K>4ZH*Qj4Fs2d$i+1weDdUdfG=EhgcY#r&L@B?*>rtusR%V zF$J4o3&kpOZzWKEGZ2)6Mg)9Ok6f3$k8D>-@L3fMVbLY1`1Q`=!VS!P+6n)QYTHk% z0knyTg7gKWN-%iF1ZYM5d{`(jwB*;54vE;CU$@ut&Z1B3S_2J@B3y(MUK}hOTKV? zUGeYw_LZjIb(i<^Z3nR~vEmQKkoe8?P~X0E$^CZu^e4TaY=eOd`>4#k&^1_BSDT!V z^D!XFVvwl&*L^y}1Hgd_TO>h1`#Hv$H*BAWn0Eg+_h$?Ba@F)h2dSlsrGWFWh|~N zOp`;sj%`|JreX3jx#4dvs1Xx#U_uHnx}>O*79{DNrf`Fc`PFyd8`Y)CN0go$*pziT z=UcUCnSUUf!6#4XJx01)Oiok6{4!F%W~e|+Cfg&mDSplcm%~T{F)2#r_B0S4x=``k zK%R##IR8+43ndXFp32@j z8uze`^!jjrwxG6+R7SM>v*Vc-&Brx6UC<02<^I|3TwQyLyuosv@PhxVXw$kIQV>_Y zGoe<7_$i`%6bW!Dej>Jx;CM-&^6)m({80Q)HP1|WXj^L9bo!r_pHj3fweVj0KPM|? z*0$97ne>0fn3S2@Qsq>xCgs=LwwQ0HH@lhJo$^b(MIkNKW90stG6QdV{AY5HVG=pm z2C!A{A1ib|QafZ2$0>QyBspg=fU5FH&=F&^*fMQ-wj!H#Y3C5zQo3*RW^c2(;G4hG z2A9!L>?U%Np>)1+=r$?uK`F0;NHT-FTn#79dEKZGT<2n1CxGiA8m>K=z^8bEQayR} z_&Ggd_*|A>-~vIi2D3(eHmmJOs`0jJeLI)D0bau#%lPAi7>p@F^ENCiiKu;vF7-Wz zIad6*N|K8&gh^1#ky^VKmkHgd)x9?ev!y7OVqC^<~e z${`IA)gOkyPOsAu1s1STPs zFQ+5?oX;V-96?Gs4F4NW**c3SUxULWhsY%<&zm@NjvP&?h>66tl3Z0A9}wsdey$tP zApvx_aeqxKZ4Gk77>-@0+LkC=9g@D=R2bM%~hG^Vzm`U2=}@Eob?g?c^Wx4d=O!uIs{bT3R+D1VD1{Rk`+MUxcn@ z&$yPBWxi>;Z)9WYK66e@djY94Miu5b8bzu5a&irAL0E+J-Q1NeNq292tBwO@az?8| zf5hQGwG&pocdYj|ZiS0%pT4_RrnW9RdtR=8Om7$o6WpQ6jr;3QI5*XxJL*B4c_gst zXu`g0|3(f)u}kaYTVs0m`XY6JB)ONh%kH;|U_%q0bEw5Tb8i$rWyRp_{RwKxF4Hy0wluzCxoE zIx9NITw}neS0e6w<;=|Nl@#hz~>q8=*wZ+L6$G-MGtg6gaawAoh z+(@>FU-)%zbl^tvbAP83XFlu(>0$vZn{*B-Z+Iyoj}lDAs|D|~C5zT9`N;LG)>F9M z+vD$r8+Qmjxhytyh+Z+N2l35*)7(DKDfijH}yfH`&>|&PHFNx_K-=2`+HcMs%h>w z*ab71CfIyu3aj-U8_Ka9b)=?6dyX8R9=0IHp6QA}^WSYr3gf12fDh!n4oUxDuiRbK znu&SJ?~0c69V6$PXbt(wU;H`UUB2z-j%nSJERn_Y2T7LOio@|gm(%E>#1(vWvhJ8 z>Z|RqwmTdbdX8~}w(N;Ka{Fn%=czUSpGhH^I z&sBjwEA`QGQLAs=Uab5@a`kRs@#Rp2^7z2dg>@aFNqxi-gqtGghj#auQN=x12sJyf zl2H(2Zm8}=G+4t~vOgMv7~K>#aD=-ry7=R3>fJ`QpIZUPL97^mBO0Iw zfC9(*IWfw=u>t*sGb8t6HaOFUT_Zsb@1kBjrQvFw5XIZ0*i)>bLGr zQNGrTH)^@Ws2U=Ink@E@rO4qk185S@*UJ5U-FU8+yK0X>#)gQEXKOtX<(q)3+;J*$ zi~;N-9ESdZ>yxVW`Dea^UPKur z&%|zM^TkhV?bJ4mDn?$uC?2`B?2+1yA5+>j7xnqYX*yh@1!y_n zv?3UM8&E+4SK#9PTHxZnTK*HgxcA>Mu?HyuOw_=;H0ggy`WF{uOe&d{YYkdFbLRQt z`9n!T^VsN2%TT%GlqGp`R<-5!Z-X( zOVWmlmddddlM{Nv@IqAaBx+@^#kDgZF7I@N&fV+kC=~i$6-#T& zw?v-~7lm5RbUA#noLjzfm_0-MO>OyKqvh}o_S_98hH+IOozfug0%y$YC~SNitP<)k z`XAk{h*fy_>tOt|vMJjdKJwb7ybv~*wX#vG!hY?YSWyBIB@x~0D*NCvb`+rV6!NqG-U6XlY^3`7+Q zUHo!8aq)C>Xxk{~u9wN_dFmsPcF{Sew)VwFIS+i$#ww4!L|#(+N{urs_slUlms=b5 z)bH&2%Nh3Ft+TLrrXcE%0h9}CCOIW?Joc8H+}wq7@$YWnMm6lIL3aJI4EussT!jPG zaBt{M9*+zYYyMt1EBTRy`O{{V3bLdx0A$6Ne?CQ6}U)uG{B@Sjq{bkm0GvW8C+bv45gq|IqBnYI!3RfV%^ z<>`gctPit!r~OoTcOxzWcshz4<$Kn_`(yH6 z+s55XZZxw5D6gTkLqXPk&w)w|*C zc1DKD%NH+R2Az(&?m%)A(``;Kmra&f+iClf`AIa1CU)IVmNgP zNI&=1Ei(folMpnSa7cm&e z_tekY<1YWijUlSLJhbV{(}qoZ7${Qw#=DTSB23NU!p$UFo7n?^;v!OG#del&Ji2xvF9W zxw9(pY*mxFVntP*+3V=Jv3tQU*0Ij(Wz70A0rR0MvRn>1mX0L=i(~oW3s@*Wr|IZ@ z9GYs}HS26vK~Jy4zOlz2IyWTr)t1bb6SOdY*0I)fUYAFoOn0tJYC%IS)KE*6ledKb zk21l)*O%-9`!(SCO8H;F3qJ!wm4G#W%JeZ<@adNoVgr9aGqsvYcI@iBgh8-&^N>(< z&(phxR#jwytbv=U<5<6*=4%k?O{@O~j}>U$*cNZ8AM$QJrlmhHt3EVq>tM^;_8J) z@LgbpoEvraeeoXsX``q5P(o3n&NDRSgtM^zlZ$cH`og}?oSb*adcsIIP(i3foiE9g zK5|;huF^ummQuCx#lvN%5#+<_@tsB)J_$I}w)()ct>Zb%Ui5*Y)Jwkh{^;wpZvW`3 zxZp#-fAFz>%a5Vomp2`<5=ho;S6vQ_fEr$(FueMnoOi;AvyflIs_4D&X0Ob|?A=jtSu`l>c&Xr8j@TBRQlAO(HuJ?VT{bTD){;~D;k>vP&%zF4}0>(J6 zZ`fMubd5>*F2!^4W~_g4&v?w`r^`{~y~IH$Tn)Zsruxz(s|N`sHlbIGhq$i9YVVPN zdPl~joG3rxU-oUer`sTp^W2zHk8^GPX`8!g?B5b6ohknNkW}*zRrQCf{HeWIqnT}& znnwy(ig)*OZTEQtVK&36ObqVv*GLJYhRtv;$EnMCdX42hbBbqD760~Gp|rB*v)^gS z!G4nQOy!FH{`zal}rk`1z`gu#|e%|7%7()FVtj&jEvHhIWm5pZ#A5Z9pBXrKO zPHh}-hryxu))$O^>YsmPTF}vF>x%~P^~Az^Ei+!&TB9HGQ2jhMxO3{QtDURUHq5bD zi=0Ji&gT>IAiOcs6FOFeuGD`k^*>YZGF;PtN{Q|NJR0X2A6n1EP+-=(?x$#|aR-Wq zI#wo}+t^7aoY~k(CY;$=adsnU@cl-xbd^cU;4}#71Pi9H&}&F(Wl+C*LIs|1f;F^k zI_({ydldGb;?*P2QdOL1(dF!uS#=d)J4gwv&0fb%%~cM4-!w=0KnLtC?%wgm!}bSz zC)_bIKrcuXbvuKgQFdZ1{O1g4KylT5zap#GbRHK^=W+3DtSF&zSuB*^Sz*8Y~SvsfaCY{cgziH(HSke|+bj2C{ z`_c^k5_AJ!8}88VcGl&Q6T93nx3mC1u!}LZ1sA+lWv+AA~)D&!?q$N&=qzO`ekc#+SlF z?sfYr%E#{f#DrHrFK2n`PTLM8z*RZYkLx`8T2Q6#a@J|<3G1PRiCiCiaCXmMWQ^WZ z&T$wwyBDM5;eF+-8sLrIiMs!*Rvxp2By{?8Z&;Q zH@u6W6^Hlz5UHx+ne!GYqht3D2v;S^PS52`lrjv4keVcuj4aQw$-`b-1K>#*@(C3 zTq!3Ig*_kfy&y~$C*ENl+?3_~V^V$7nEFDzB#FeiU0a%I?QUS|Uy~`b^^&z}r!ppo zLV`7A|9au~NWElbDHfhD7w4o2(ArrWzHA}IS(8LN(ru&%)^u&zLk;ZeP)QA+0W@f8 z_r+Qfu2*U|fVwYl*!89SL7c1R8q!vGBCXKNHy^s7C%4?=_GOj0JlQxYZd|Uj@3#nD zJT5GLIX7drRc95Lbtxc$t|;RZljwI|m^JG$p=Vw0vD_dw|CQ$t-+i=vw;Oi!rizp; zunTM(c3{tpu|YqKfF*{exG|{)y5ZA_~u(nXq!GCqu>wY&VZ*PWm@Sp z!{Kms0E7Ll#h2B=1VV3O1Dm#$d7N}Prm}&>_`bp9$*QbO#lwF0JhIBj?wLeq0~;aeZxYmh@>2qT<2XfSq%=&aTHjYs8%KU1jGWFe&4% zRiGc()3w_R=}o!;^#6))*1Nu5?=865TX2gvhzj1Rvv442@%o#C*=fOSF__&ynB7p4 z?4F9V)NY%+CFYXeB{!CgD49^PVtp{X)m<>$T`$lKa?-+JYN{Qy=ga*u4ck5iNkipwS^f5iIqtxISIrpEO&E5T>O2$SoH^(^C;CT{O+J(=Bl z)7JUDjx~U9&!c!F2RoIU_|>v0RIaJb&kPd9i?-bvGB z1Ywm=(SZ;>G>wol1=ls=4u`IAj=spDD_lhX*ZSx5pZ=JzP3)dXI{h4QM{6%Gnp@X# zou1jITtBbtKx=^O%DRdx>(IGN>-Yc_#>JexfJ5VGKG2xq(g}$)`Z$R_A`m7tfJ|~D z&S)vQ$?!>7Skw3sVz2nC$uEnK^A`Ie@>i9QgaiLv_th(5;e^mEd@tt4;c2{{;Oi?3 zraB6;bL73m-B+ajjMvpYjMt?`0evaR-qJc8-8psA_1-$DH_>&*)fn5C{p%|BQ(xZU zeUTrEqmaJRAxPZ~st#1?ykFk84r8@z9rnvp<6N&r0SzZg3}-3Pv8wfdfFWoKvlxLN z;l?NqrR5L9qv&|`L;O4qnl$3?WB3hEojZ|xB%C@3zm6akq8is280DmQ@OL$Sf52c# zAK>RARDK_S4zkoY6s5Xa3O+sFC7%vs;#by+}gw(gfgOMp7#Lw^W z69?Ax^8l~%9#UZ^mG^~Hk*YS~C!xHT=kCYPcky!%>j5yQj>y!3{p`%V*8e7czZ)L) z5`OLq&wLoa-U$<{N_7}y0DK!|6{Nn&0XBqFsb~XIahqOzgB6lO_~}OB`tabTC|i%8 z=TQo$)>ixk{si#VFbxyV+iU$T_=&^ntEjRsJeUCD&l>y!+V~^k&-Z}Ne*yWKlkjT~ zDk8M2ygNMkPW;5l?@Oq$i-7^|jDSGeiu(MI$o~NKTK|_w#dSDj;uc@(!wmJ*rKtaU zSim3Y^>AtmegWgh@$0ql;5{hvT6iXY$*+b-9mFr-|1f^lGD1htSHh#Nq5}V;?qtZw zJ6Uz^#?Zn&;ul zn0c;SSD~Z1(N@XkxtbXl^e>V=u+gN5Jvh8viAiyxvNm5YrpLL?MnPz^;tW!vvtsaH zF|(zO*C5hT88b&uM1c%&{j;*-pOwJl3&I1-igZII`Wa=6&i6wTQ2A zbU%B@&Znh4nqNo0&W8)I(5!ukaa=O=v~kME6{xgs`9-_Y0kn7JVcJO(R-F|`F;bm5C5iDN8~zJWxyUF#0y=T z^7rFBARX&Co#(VJB8fc!%O^Gcyw)@q*=u7-xVEz5Icm3*w<}s%yHCB4zU}2&i>|@% ze9GTXXBl1ZSGHPHtM$j`U!GT;JF;oX?vkNZW4=vCXS?c7ru)Xga=UPLW@E~*O=F9W z!=qv%bP{Hd#iAyZti>(FJ4TqirdIo0ox?Ym)&Q@mZ(;W&_kf$q>KrBk#syen@K~qL z^`}a1qH%OFQS=4qbhY|aj0%or{R7j=u{=;3TUnGDl{nMK$v)RU?sPp^Dco?(BrF0y zl-OJkRL*#z$uzi{ehIGoD(8V|Tf%YHZC0|rpJ#gZNmFL~CE-5&{&rAmJN>aazf1C0 zr~6+{bN-tS_J^EFgF8w~%Y_!c%cE#?yl%BA^U5V*B7WE0DbTrNjcxF5`U7XwmTj~Z z46-(2$_+}r!pgBNLwfn9H0O(Ss6ToemWd?49||^Y2&#n0$@njorK&r*-+*oKx1Gwx zoVPGVY!H!H(~W+4hMi2)GO<$qM(46bc|n_#=1y~x<_GZ;pn>K%9OgeU8ge#G)I1+4 zj?Kd%bByiGXVj}-O?OW7CfI|SeYf2o%UwfP82abAo<*UbZ9a8LeBH!&p z4|xOcdwnol)2Nt*>xI7i65tZ6eijZidf~k!9oGfk_6k<@3*GN6fe^mLFL3KL@DF^+ zp937CELJ52jdcD~)&Ka!pmA(7UhoKx8yk4Ti!^VcUi}y``GsCn_`!jBZxAT%HOJuh zGU2z4@O%H4_+jtgB~p=Sa?i1$usqW(_noBev$!Mqx&r-bOtaQ!XqW5SP8r^}agtj; zXCfKF8_N?1Hnm37y*W>R&8yWO(#t zpLw81q9a@T;{j}7$VEmN;|7U0J({} zP_!@XPDxmZC!Y3%3sT}|zo|Fu3eTEd?@5_8>%y$Ua(Zpokl;1M+ov0Gkrzn14aREy z-aE7OeQ|8P$>SX6MkCH)9r)g{O>4?=lh*|8GqyG0KD9IMBF7y_MUC4Hj*MD|UixLn!K<^qvOpr2cpQUVG;elj#^1RZ8wOw?1 zcedAN2c4N2xMX1Z9vYlG*XT;8qV^^6-XvpQ&o~6KFZVcM<3@)*8K84MHOq~9)6qoG zUZ+ENdr%7TmA;3m(D9p~Vw!Q;c~!Z;%HLo% z*9}c;4wb~gfb$-%R?EfVrgTpnmHjvRHzY8oKf-R!(m?yC)u$Aq!+2g)*t8Y?-;d}v zj!Yaft-f%vzVTmSCmMfHSBUh7b;54SpGi-ajq&B%Ys|iJRr9Oo`|d!pAwyT4TM{Qe z^gmx2{aMC)}-W+*v zL+^yGqsHyrR`2UgE8w>B@@;;v#YjZ*KV35hL$d{rhU0bRzIvFTd}Gqyck6a#_>7n5 z`*xkcd*`RS)W2H~BeoHWmnW{EaWlF@$VgNE2ki@%U~bQ#vDFi2|E`Dg#f;!=hf~J? z8Ntkc4&%QFuXh4F!flAoF>a@GK*rI`exG9JJWY3bobQfHh|V^06b<^0Ov9H(YAK1@dMcNBoU<&)|bMDj?-mWhir|WOm7u}=t8Bcfd?Q))| zKSb*aFf1C4F~F!!t2gW*@?ro66*m4o43aliV|?oIcMJaVk;ku`jZ}<2ehMG{tiCR{ zD(TyFco;T>ZYE}MWfAv72TLm20*C6VF^zA8b*x-T9P>nEq@ zmiz;2yUizE$b$$7_ydE}x#v-F&;e(2#?>y*Yed;X&99c5Xg)GK8T;rlvBJL&!YWgcJXbK57P|E>E+}v;C=eGE^e-sLD8sP{9*sGP zx?B6}7Zfn*+z|Q$z`1j8aqTKchTSsCt$$%b(k*-ExE&*R=$DWbo-rLVn0-O^mQM5N zJ(p4R!ELakWO$S3k{pMT5jq>kME~MuA9AK9&jsbDIX!rqH<8-ZmL05Ic_xzo5r|Ib zEY$QmhP4zY!Sw3ImB;*Ug4u29Ta~`K$(!B{51a@BTB$RsSyzG95>F73r`A>n^Yz~3 zC(zVW4?2+zCBmH#FY-~oFK2k%y&$kl&N<<)QV!Xifhcx(a5+DTH44(PRRmd8`Oe`P z;sao4(7b9))e-wK3sxVH9feroomKT%aSt;fW5~Ka2BaV5PJUuWmAAJJuEEY0%G=V* zhQqpSPhEo}gQ)=kamP#WEE<6Wf+`$=Wq)PXHC62Vu%6|jJ%?Czr1%A^H{C!$JQ?nM zxL2TawOC^ucaGe%#B-Fs9Hl2deW`b6I1TCM4nBa+;655Ry<+bC5up)7$@$Ig7_r3D zVAAdH_n2qQ_RAO|&}fs#cdoR=_a)kbwLO9}!UXy%2)ScpfbW6#7;f}*n{J0mT~rM` zz#UI{oY2UC2^(pLdJoKK4nqMvM@q&Ny-TN6Zgbzw!`po)(U;?-y4sm&)Y#K z1g>hAy^nSCh-yGXOQDh^4PIBc`PaF;{_w_>XEzV<=?i;3>X~~iP&X9EpnRUW9o@=~ z`SNSiyU(jZ55UPaIP*C+-!rEvQ0FR1f?jZn1coQ+gym4eyjQj1g}4BjCeehQU&KGuOkE8+2DN~L#{xG zl>czyw161rP2fE7QoA>K9)>TaY7-VZIlAhp>a(_* z?7HlrUMKVw1aXS3CfWYEVbr>} z6#kuhqjSVc;iA`{;GDZME8Co%ZJC;FEyxyhuV#pM+qRFa)mwCXGCsKzrWh+eHVi_D zEP0TvNKYzEb+UN7EpH^YinKSKFcg=`suwJ~Dz6I`_W7wg+2vv*Hnn(TyeE5WFKbpo z0^OJSvn^N?MwB&>~rFf&NisMq(9lJ7YH^A`6b>L zL=mk_bu!F9cAw5Qhgu<-FFk0>ps;(_M{6GE8wsj}3hry@FM7nhyVwMaJiKEHTm34$lpB-6uRi}k?+ z@i@H^@7CTtdG#D-t^;Q}de@1ysO2$2V_@%-xjv`guFvRy8ayQAMsfN8u{?54HLn5cp~h>d-n3x>=s*52WF{ zKtCEhcj{u3cl+M$A07+VCfiRo1ohp-9AUYo`uyCl_@Jn_1~-p$2aLkh;+_V<(cc&+ zWMfAHQ^T!@@{PvN{u1fR4G^vZf za_eukPfu_s+l#v+26grM60I5O<{KeZx4R*&B+1jz7GDx~vfx;-$qW3T z35X8})#pJyt*$&UIKXZAA^ep?XmA)%#9d%4ai4EUI|2VTd4d3E0Q9%|eBMNMqeX`& z;G{V~=N!;p@JhJZgDU&Fs1KswK}Xl4epu3Uf>jcO6p@X`G{cox&X+{9yzzQ@{)@O~ zx!h9R2mRYT5&e4<0BwuEqK(q6f+=gNy@Z$>qM`g5_?gAE6i(myE2E4*5 zcgGC^C<=z4!;Eluax(oa@oIC&Q(#{N&A^;DTo3V)SY6{ij-bGJ^NHRy4>}T5TXnF& zkhi;hP*44X*-HL~VifTCgwA~B*ByN& zysQ<{ioGbo`r|ndytjLTnO(ta@))p2rrS8$?$HBH`QKqso;L(jReON9Ble_rcDHKn z06XbF*0Om*GHza?G3wt}xNmh8S}-g}M%O^r!OySo4pC!c+ko-knYY%!u__&%`kXXQ5e>y7s_VVRU+ymJsN@hK;m|Rwo@mFe@#t<3!CPy3mpKC#nLNGr#g`TuXPZ2RB_6A1!2nFl*LK8-pKgXp z&Cp_G3oUTEHdeJG8mn43;0lzYBc6C)4+LE9SJkIvV2vIEfnH`WqTpK7Kugef! zu7%Y<3JdoqpQEzAcu$Wii?1I-H{Z(N>@@ty;LQWPZZ0>2hl|L+3a>M6Oa4D_`%?^V z7)ug;qY}$Icn`nTTK+p9rx;yvUB71S!f(yE(4n^v(51_3g)VH|cwMzM5kth+3mP}v zah!<|p0wwRJj+0f&bq`y@sSskMs;Nu3FSqJCn$MV!?C@*r!kiP|S z58+Mog<`AT-MI~gR?+7Y+3RN1+}gy3P-<;R0FJbN-PRSW7p2cna20T%;s&?*(uvx%Sa=r z$!Z|&s7p#S6rcLdWq)o$nSEWPd;i||hY8vCiEXYr5`}Oj2MpJ(Yq1f-0a(dYSJv8n z2_*%B>5ySW@&pGQQnF<2Z5GVmqjU$?JN`BY-ksDRvU_v^wFDDY%KibkAg)vko})>3 ztR*rS_K`Fqs`hec+PAtVu{L7~ zPZ#$jDoJa#fp{u0J8*g8-TU-B2%2~d*RU1q+CvGPla7TOEr<|_NYOONpCA)YZ}B)# z;`YQw5_XDiEz6Z(Pef=9up$e*u?_7l&D(=J>l9sA`dxG+5b0_pVfXGj4V~IVT5ve~ zOitw0C&!kr!jZmfa|zM+QsfPz{HhY=-(`$4U`0k3_DK z=2DAE#GZf|8Jox6IGRT7aM><>Zw(fVrtg5RVoHhPWo?>w=$BJ4iV`-Ra}(!e3>cQV zp?hF_2@-v*r-+sCC+g``gD&uVSDIdexn6YQE$;k^p?cHU}{Z^?>rE);Rzyuye=YJOCqE3x0=jmQHN?PKF=GnQ-o^IRgLe}c-5Uxi(dmhCXk zfYTfx%VmiIi|+D;)$m2Q@dRC_w(%+(#K@#Vz5`q%vhPL84y06jp98BQIV0@nSeMqzu2c zYPBq`E8}yuZz8Z#J$(3>{Qb8FH&;L>54*=s<0btd?6XiH4r-@BV?blq+CUjzv*jca zCnYL3M@Uzic#sWqaU#MSXl+i=cwDt>_3gw&F|oEuPRnJQoR)fMa$4=qcr8{=?%^ z`-A636A_=)`l%*p{ge{4`5YhZFQ)!c49>HxzX)>`N`<(CF3H3J(}zMIu2DW*vm;(E z3x|%bQI6tMT@wx+;h!S^JhBE>0ti>JG+eem^!^&pko{cCWZQ`?WULCMb4g-CvA&Bd`MS12aGM{GW*Z;y||qT)8)YG0%aO!WvU@`>6ooH6gNNH19UKwSi$N4{9Cs7 zs|}fg2=}kh1X=@sB30moy@iGzBC4-EXPx}%+2)DLGi$&d*!(t9(Y){4zgLRrB|yAe zm_OK~Jjr;N26g%RG!E1YctS@K}_Rs8_i9m_vYAq`rfwvyi&A=O&am>aNu@| z>@97_#NY+gE{V#DH4P!{232mg0ab0?d?XPR)~dDG>P8ZbX((+xd?%)S8&6OpU_N2amC4kK3s6=d3OxRoE7E{mbLuGR9dNbgmv# zUzgDY3J^GUR+H}RB}3?$iEL4J)~E%H5{e$Q5@9=I=U`>V%wXnjMV6v7Y=+? zj3(6@0TLq>t0kj(N}@8T11=(;72T~@ZjMm&R1_{2_sBS@hY4!DFs0$)z~gKT{v6vUxy`1$)&W-<87^v$QyMh5;s;T< z^3V>r;;S}$vQgR10pktPq0@>XTL{bf1RJ85(?q>wQ#KQD&i~S_8efaA*tGIb3J5OV zg=#)2Y3hJN3$veKjR*2J?7e#BCOSm{QzO0y~BfJQei1aAm8PSGhd zHQ?&2QQ%lLI_Bd>+jg(=0EaF23@d-sV9WQMRfa|TB=!j#CR3j#M&P|111~8G&uiN} zRms-iC5HpkNe-)H&gS@a%5Ng{cqv*}wsq7MpC?>y<8{@a_+b67~lZjRGRt_;(&)?|I;Z6N%fa;c<)Cq=6^_UdXI zuOY3r)k76NhyM_P3-_lo^2hTv?8(AO1(BYoWgN0n^bE0w=%^i|uH zgb00uXO+i+Rz#mT*=|^cErzl#0&iIiynjXE&9ZG@sg!B(TG|8WRs%Ju>TGCQNm-xJ z{Uu5s&y&7w&v_J6JpyiF47ks2boH36mFmMbdv~L~i+hAGrKz^f-6MSwkG6*%C@E?pdfy-E(7b3p=}<>K^**BaB&|E| zw<{AO5M3aa)C{`;)(Q3 zJ=kvOPB3rLV9K+iFvYiR_gXmV;+2QSpTlr@%0a|i_Jq3OVmRlgFpR^EKT?p_obzFvQ6Lg7&OvhU zRQ8#0I6Ls|${j*~7#3(&yZUDfaO;w_(m5 z)%wOP-5b+yg|ThQo}_L8rp1)^IGPmS6nA*7-|6wUAgqX|;Vb`R&NKB&wI}HKYfB4@ z6MbC3cWv;2-L+P_+O!!v_zxXq8OSzb1lt=YkXF84WG$#|0~TBqcl@rkJ2owGtCmB zG?RM7&`cc`rI`eI+RFAab2-h@qcoE*Vuwe3hWm;gG*h2$w@Y!#T8(J(PRe3zroN() zOnSW&$0j8*zv7#1>Gnep=sJ*}<73)_Zo!-ns}If$2khSuMiDqJL|qZt(;Lxla+K-is80gt}M2XsmmbY0ew!{9*e zTk367uHt(cA^1Mj^krI^M{RID)Y5AOrA#X$HAl;+vrq;TgX&5<1!a|1Mm!KLBmV(q z;&~bIWkFf4l~MOc%Sba(CV`hxUlNo*NAP(!T1K3KG6oHw8bNtNDWd?;@g38t+B(gXvjS=@iT zMxy}g@b^^ILxN!in8TYFxx+#5$pIz78=6 zp!O;K(f(v4s&8QSSGGI@=S`2vJs_cfuO#K>qW%L0XxV+*aW1Fa7%APmUCGqG#WsP> zLS9hn)vnx7gy_0}w!~9y^7OHvO!lO2={185&rE86C(xd$k+M;Ma$yLD{zy2``2SI( zpWdeYr3f!#aIj)eXuYgV1*QrcaQYx{a=G9ex~2DZXi(`=MChYR!+&0rI>xc9S^ z{F9fHO12Js(EMFx%K=kcjz2f-|2!i z`du=gP;^3&5r((5D}P+g<)%l7_%7Vk&QjDra!E-Vd&idH-(Hp{K2CX^eHZLRmx#XK z!yWplbGvlFpe_o-TUaoM-e2t<-%J=05(_yp>fmrl|)kGet|ucd=D zN27n=cBNeFvhew5CTQ2fu#Cx@7tUiy7%#y(aI}?u z2WOm#oK0vu%=R<)qmW!5A>a52!s9x~2WDb^CZ$9?YOCMHxiM%z$5KU_Fl{t# z7++z}`>ZQ8p))-hKi?lNa6FM$6n`)klIV2K63 zk9}NsuExur`GF@~t`Vyn{2v@tN^+@RQ_chnp1@0YZxA2HayQ;FgKpv4`HOU>RI7>? zmIX+K2dNcyez>T+{Tp&SQ|+7m4>}hj@E{1|s61YM)Zq=?u(}1$^iIO%_e8ipd0Vz6 zNgg>^Q0aDfk2)%f|2FL56QQ1~j~3uoCY^1|H-xEH_tnBA{6bZjOKTn8praD!PSR@G zzA2tnuJAf4k9EfaHv(}KLzdOAJ*xM~PLuhU8$In9T z)$kqVB~;6q4*J8u!qlg~f}v=3OBsxhm>mP>!v6;8FFQecE=xfqD5B&R_aj}SW`0D~ z`m#-R4*#Bd*LS=iWUgRbtY4hG*n#q{f6!XBIE$5yO|OedKa#NuMe$y6tzR$q1~&qR z@*1VV|1xmVDSl$14Gw7crEdPm&d|%N_-qj91_OQO)3!++5LRkd!AM2@7%C`R@jZkn zHU!gsNJA(M`z1C<>oDC}Mh{E^W)bNjD4S85*`aO{8iFRJ+p78orZTcF3WfZ? zt#li7_LBx>=_-b#^d~`C9O*zm0h~n;zy3L5^20ze(=s(AE~MihUM*kil4`&Q!@?ja zbHImG{o62!GM2i#ttg(5Ezp{qBPjW+aOe+wIgv;(vyyrNH=~$5Z)gj?aFW`4-Au@i z2dr-NQzx)0a+sXqyy;ADhoE1GJoPW$K#`L^c3IGU4pMBhaw5pBooev)pSUQ8#1`xE z6>CnsMl$(lR3nr``k4$GxkW^dewL#pVtqt&B)fU5ZR;AA>zD`f;SQ{j{tz#_|CxCVY zOg>{hsDMTBDZSjL*!VE0hr^tXvLEhB$U{UH22TE-lcPh{k0yljHCZoz8$sY(D%N2I zBcH;qM6?cBFMeZXvYs!LL<^Ji8e7-ph~4J4YwUyfb^mYnLH|k^OEml7CM&+VeefM> zK58G_xDwqj;1;{f))@O>FYs){J~#>M@k;97z3^>-eehL+p;7n?^pw%>b817g4?fh! zrP_?Pnz&s__IYtiDq%ykT}Q?CCAfkN1~(v9bs|!S4M+M|gROoPB{u0_WWy0Bc^jDx zXU_^CgMUQ3T`Ne!XbvJ>QA%EERyMB;7TldxkgYM$ch*|R-EPNNcrom$=d5AJ(yn#q zH#qsBu8MatHxAabc57(uN+@0tElt(dY3U%w4rSE?+GtA$tVbQ$A@@oI~52iEH->#kdtbP)9?U;idhkKx2R08Zxasctqn3Rn^2pjWra% zQcDzfx4Q$!O5I*l*M;B4%`q_zQ!G7wlco7U=qh$F+$TYPv)$h1=YVAewcL2RaOA4c zPi}x9O+tOWoof^~As$r|6?o9xcudnSf{Z*&4@jU;k)Mzj_S3WA8>TD5e);3GQ~8+# zI_yXoL6aoEyWOF8XFk$89ni#FvpcgKcj(>zA?{;;**g69)aLKZ!P$2)0%!{bvlJL1%Pq0nK6eDqOnx zOPgf7!9DoOtK3ZiRQ>Jao2upT41sW*Bt0g&uQ*XQ6xpF~q)NVoZA0 zia-rzz1%tR4TgAaza_6|3(bg@Ro~S3duf#CAdve5jC!s@>)+zoJf@dUrT$>eWBdp? z{X6g@;pj0oB%mee4}>sV^I;gj3j|HmkVEt8n~O8Db}4PcQ~p<$p57+bZcz+ z9g*_$t@(>wP}*j_LFL3Xcv3S`NnF}S^Ow@4^R1CHR_RHr{ekNO1E~@DxzqheQeZsg zdN)&;#M7-x#O~;&z7THFf)F1WFZOr*2f`TNq zDN|7?jjNT?_o&72EW{`?eMz#?EqAK=536Aq>3^**)`IkPEAI*wlb-AhSAC>S85M=A zsv2B*mIhaxWyR|p-h?{k4p;8?uHvdbp>H@`^;~P{KQ7#ip>D`0TXDu(*efa2!gIwR zTJec7)D@0T3VlJ8rDA7VL&se(0rj8$-64b4m(#6?o}qy`)mn52nzZsEhaw+q#Tl-S z_v1mvClOo2R04MhJjCEmi_K#^6k5)CNGotZ)Jg1-K`iXlc$zfT%Fns+KQ_vSD8IeB zJoK82@f(Tc4qltp&L)6*U7NDQrKtyVtjbIHrWvcwwqn(9z{v_fNC647j7i#@6en4g ze>r(g^)ajRcMXbopf$AFrF`J)R)5Pi5$U%?b$(Vx8c1&%6X`XK385>E(t54l*)cdwPhs|-hiG^}a;ijhXLURKPCgx(YMSXLSemmd-yKINlIw?sK9~vv$Cye%y+3ypS{$b+r2O5bHh)ssm7vVeY^W!Ix9} zc$5uJ{`Rpr!J1>%rBnW{|>PTL1c;mY~b2BpM zY3+^Rc>@~%!Sl8wPtw}EgXi^X)Cjj1d9$?kZsU2T#+|%gGx8SjJarh$6E0)5V|_S| zyir=g0}wDyMZddC{^Fdhw5EAsBu+Pj(OH8rkdd9Mh_8?UuDnCI0s zuH|{D$h%u>ZxGL`ZY<(?gOT@Jt-TwGW`fV)Xl;pHPq(R5G&>q&7Ni_)-9f>+S+OZ$1&IX?BRg(XdY_w>niN*k@9dCw;`3f> z??Oy_Khn2yVugmg?N?xl`p&SViBa6;vr$;;83yZ4r`C+=S71qPt)1|a?}@@vzl*{W z*|)M+!%Ob+E3o9tonb*dchFS)55ZzxmsEW2-Iu`WFu@9y$(``g@#*e_5BK&WswQ!& zO5?0#%%T*lmXZU2dli%R3-Sp97>e@8$4!(TuZ_mtRys?flpnPb$+kj*gZ+TcK0Rw! z_IAcqyq$36_>ChRT@{dK4<-CGf9MEp2PkB=-Jh26L|Q}q$;kM}Iax&yxgyfk0l z-a$tBh@}Yqpq_AI%7-mLs5Cb_BtV{X@5|k#>B#c_*gU4+ zlu$>sHj1xpL%JB-h7{J$Yu=89!|lT(v^JzrY#wXlsc0MdPcG&6b`8;sf8r08<$7hs ziiVJY5u1`mzGdPiP2=Bdp*wM;!pNsBp=VaG{R6XdU)1`$+X4f3gXuSPBu6#N+H)UV ziXY4`?C+=CUAn^cnO?W=;*RfnC>~!;@ojn`QLynM$4*hSgnKRi0V_#JAtVK$sGCkT zzZROgLIWzj+s2rHj^c<3dS{}HG_Zp2U}~d1#$NSn;*Vj}Wl~$2-T{05kfqE;kQ{kp zjQQ%WR^{#$2N5F=H1ESzvT#9p@SHvUYX^ zNksTPGgdu+iuNox_b2*E+gn370uE*ipBVC28U?plnrlP-B7K$LXbTvYI{c)Miw8~# zCJ+WhY2F>`6)7UUM&#f;hVy}e1ig1;`~#h+LFWTMEYXMoCm2Q#?8QzkxyGLKzxX2> zlmDB&an-Z1;Ar;7`w<00vo}@~{iF8ArPxD7?2U>g#@=|u616AATa^WDt4ChNus3cb z7+h5q*J0<)l;=unL$fy~x5BqBo)92X-A6e9%?uIw^aH8tR7MSLw^4-y5e?w;8bIl} z*aG}WE4~8SHRu*3y5S$$82uge!uy9HehG8ooUWN@u~U0v`Y;^u>`7vq9PvUD2-c9U z`xOt)JE9a5M-!UdLOU~-V)rSx#8B+-WF=wu2S{xf{}H8`e9oeXZ0GtTuIhkh6QeX! zosll$BSJGVd=)f%bGb&Hkufxrr)V^j?}{Z!tPiKWR0An4r6Ms~24Z*VTsdYO==MN_ zZa5?Q)3dms_i%dyZqBA)nn)8NtuKg!Ou^t`M4B6jU<2ZtKLsW(!AU;K(2euIol+h} zC3!l94gOgG6zE;uX}^I}&8+2m*9dCH)7{qv@f0$uEF}Y7dC%79OR`+k zo@McMjILEg4IngxBlHVcI)asIVX*o~VY$1Qsx0n_CeJVc8|k|HSwPH=K>U*iF@?$# zU-aqViw>q(6tUYAQ*`p{m5&lz{HkAXEe#2uN9y%auK0x7iO!>%e{&VaN2BQBA|ZOxpWCg>Sf*;kYaG#qy(}r|1M$##?lm z1M)mJcV?!2fGza#a>^nmz^S-{rzDb-~T{LkX^p{KqIJ#aKMya7gnIQi*QH(ByNj}QH0 zIrB=H!IvuLV*}xwufA0tdSm$xoN=ksSyR$BYHH`3WG0YnI@(gJSsM??OU;I_!%ER& zv?sYvDK*O*LQi4EkWL}|OB}QoU1$r#TzsI7?M(R^2VPvb`2Qf&)tdjxi(R95{)|nR#QC^fEh~Y)?=_oJCTP;f4GVr2Y!+FsW!Fp5nddl%N@KJD}Ua~ zIA!W`M6XL~uibk8&OJ%c6s0*BR&bvBPveov%W?88+_~*h6!|v1BSD;e%AfYMbiz1$ z_wgMG(j@xjZfHaFfj0&m4E<>t4YoM4E$DwtK5oQi3*!4Rx(3HA`(E9V5zD#0tbPqo zhFQe%m$ZoIx5wdK=cgYUnwzjVG;}$!c|wPgr00ZmBFC+5T<`uMoQ-`!yq_*wd+2^P z&G(nuph?-?@jDUBHV5Hcvuv7qMEYAhyexGW2hbZK?s%nak#@X!)JPW5RAD=+iw{J{ zO})>eB+>X%n`%(b^MAsebvW|5}y)I_1OSi@F%p8lNr@5}q<8wWeVDNz! zFPk|Hxfsg3^HbdYZZ4}126y^{PM|N|{FB>Jv87jTXxcKGen^5D zAasA^2TYWL5haSZI^fmR@?g>oIE9wY@rsXv>mlVMn<!NC-43IV2G)fR71?U z!2EAn!LEQuiPCX1`YG6`n}E?YzHWF*GgV)1De4OQf&-VRCeQHTRkK>=TC4tOZU{~8 zfT@m-!jvr-?@B=yxJN77i%La>bQ6q+YPluQh6FAE;)Z#5i zLo?A@WSri|ETIhX2*D>Hhcz0gAK+s!QY89F#fSR7nQtH8H>WH#;EE=%Ass?K!BCsE zs!}uOtH?mjCb-$^3XP^npaNbX81ivu?pFRe| zeU=-`b&XfUjm+I1V!^c#Y)g8kb7AN;W-p2O%DD5%(?R{P)sw8eveZ2wvwttWvIF#@ zPRd`HLoY2Q=LLS)r(V^3WaPIrhZcHE3y~onyB>RCc4%=jawH)=d6l18Jj9DgsTMd2Vg_P>`M$avn1PMR8|H{V z>N8hEuB95zVq+^GpVy+(nyuyIsDlF`W?ALhPEvukySEa}G&<}gTxkVn0+dyF1tSE* z4|ly`w7qfR|3Q{Y_WvqNLrXejsaz11r7GbQm8Eq{fLj3mGm*-c(%zQb>z0(2;!Kc! zst2J;^EI~5)#Ig5WtsG2&eh~$U`QhyplB;ch{AIutb+$Gk6N^~u8-2TgiBL-VVed) z+;0~2u+W7rEs4zh7g{5B7V&L!==_q7b8huZZqiYoHzP7JKMEJ0XWeIe476PYrrAn; z!s1GEO@1cA4^YQ|<^R6dmwxK@U-$Z>q8uTOiE>1KEJxg@+#16Xesk;h@&VcVjr1CKM2<7PK*$HUvrrTQd$;e zg$`X>KL0%5>pv9X1s+4rblZZsaeI4v{qr|gJ|6Ne*`YrHfrUL?aDO|C(dAn?Gr-p^jE{(BqF;Aq{) zxZct+t{sCqJhE56=5D0=DGlqd?$!4bNx9A>_KS|{_e6^5JpTtaaN0bV-7)iA3`WOP z{@AR%z8K>mf6B-7bAq9X*T*6QfRBj%M!msIcO!GOK~=A(EN=2*p9CtS(~x$|ZS|1| zyhow~8kyVj$ItV9y80I&K=iuyZlq&z^ls$*<9~_xooMly^1Hho*~jO&kLn9d>1F>3 z*_SYvZ6G9F4gbdAcHEs;&E$aD7%Ui@|NdX{UbKV~JLd1~R=B1omBa~MzX}ZIF=Dw# ztyuHDZd=B(lf`}LA>mM$CD>%MmFuxqz!npXN?I<`21@I$T41x#B1eSb?=e&1l-_d&d4NUjp0ukfOu zkV51-31_dz@S$EdU_6<_WEE<=w?#_d8mWJ) z8P^gU5y5~Wy@D@6C)^K`KjksP#^}_qiMzmt7+E1@>oCNU<&pBFk2N27vj6{OL9ib> zjF_+sl&2Q$pmm2`1%hcO?|^w9;+PT%9x;dhw7A2sPny%llEuMh%1r+L)V9!EjHjmE zAHuykZrfKMHirtM_0-4Oa{4l!@tTJ1FfRO7A9R!mDXv+xn}Nb^pV5jq*vE#1@)j5O zF}VZ!;!SCx2O^9jHHFy^ZPmN26>FV(%Dz1=s%m@u z%rJ9i7>)^OBLWpOdH@l-prxQzV21eUUa=%!i8Fc-Q418q3cr_gDwt8cAyy9Nz0FJ= z9Z1u|y(zxB4A)3a`zrUAW_q*7Ni!=oQ^3dk*4pRH06l)6&zC=#efDduz4qFBuf6u# zYxjLt>8EGH{dWY($Xag#WA%_X7pa`Z^@Y)`dW~iOx9jw4O0|7@PMc&e&%XGwa^;6@ zp{44TDmFi=&HM2teHoY*Ih!@9Xp7;YO329C4Q2RRq%CX$l)Rh)h@AaNlmE+taR|P}A$tU2{?BoFd$(1KY=R#`vzkYx6`mr7iL`b%z``= zd-eoDrseGTD6qwypD>|0#v`ue z2jS|cXkKpMLBcq!qvow`I{rZnwLvqyZYnFK(z}ovlC=486TFf}ijG)zS$mqVve!;F2=u>v~^a^x5+<4UFTx1LOlNjPKau`*3Y3@ ztn_Q6#36_o2tvMP{1piK`7Xw2dvc|-l!;kn6S5PAtP8;rOH??@@wXU7;5^U`N8GEz z5ziQmfMWCJT6{#I|rN0MH_vv$Qu1uDBNrE`q=q+zo?!SB1fyFiQ7#lk0K_ zMmM>h?&623GS-t^KF7!lnt*zG}j9XCpMhhWGTehot|>f+760fU{{3x<6A zC+w3e$QnxfWuFQ|K5Uc>AsFJI_9(Wni4m;M1|ZG!rpW?$L7ZhEVD; zJ&fq$^L_&-aZoRuxI+Y|_->rIb^yk899Wyr6rp*NY&E;fVXYgH004F%H7!XND zmaj4TqT#-MGUV|mz-p)7?GZQKfc2!#LbQQ!FGWj_A;PofBX34?bo zB@DJqO8A>Vl@k6skfVgZ2*7b7hCdI0$ti@fJNF|RRUZd(P6gm0-?slkWG>$vq{q%4 z^q7hC$T`t{b)T&1uo8;S08-liFxeW#z%dkF#fJwu?#4q3+;2a&ET~5TdMHYi|IdE= zY~SD8Z-2Lop>yA{~YXN^RM za$D&alu_lSpx!21BnT*H6ho0galc)R7+{_xOj7pSB#2d|8lici$>Gk_IIr7oprPmuh=oQ;duYVz^ZhF1egI+6p(#zF@ULP8z zwS-ZIf>KND%t7XBn#=B zxDWpVI}{j9`%1fMwx{&}z+>W`-=*2KZkow-H_e{uO|yyJG~>7)G?QQKrWx04l(LX! z+#ZEyTsO_c3Bd+JK;f~un2J1hyi6sJCPXrs!XQ>f_aa${$HZ~L`o?t=EU44rnpGYv z3DS$FN}noK?HGY2adASmM$xF`dsG{>r;W#bWuccXUwdwrv zqbm;X8aP3y#4@b$Aulk^=kV$q_#}!U?2n&ruQbcv)w+cux(J0le@P2^$5-!V_ z!@@)$8A@AP0Hq3ulV7;d^g)G^SI##ok=!8TjOw_NzFk}THPq>K(v6b(4RB_q6sYVj zApXs`*5pi564(TzBWbJa;0EbZi5l}i7yQdsw0{sho)l-^RO`RXSkd9U6Y!r7E?OA6 ztvw(u0wfV3cBD~SxS|ztA~?U%sm6mALwDRib45*zKc>t!58Je#c+_~aQ+iS@%ndh6 zv%3q6ud9VQGbwB;17k3M?h3F-AeGB+bV@-&i1!)^ArL70FQa#%N((XCC`|}fpW2;A zZh<^1O}I#-^iUB0l{(kvD8v>fcqF{SDDfpvnvMd#gjem*&r4K$=2Dnu6!_c-quKKLjXZ?w+)`fCCYU%Hxk;fa`J}EWtxZQXO}tQ~GyVEAktXfm<2mx1RueB!qayAdMl=@k^e1fw`+! z`5!u^XO?%DFAJ9cFGXO)+#S;g}(9c&)>2T!y@MscFr*GMWh#VEPD3yH$*r2`^RIC9ASH93aCz0hGdtzg!T|bIu0Zjs>cYqd4Mv z8n8q8ZNt<4Kj3-cFZ@}2+NJ12|I#TXm#O;DFAP#5goFCfvj*j~J*W>Y>QqEg@c<~8 z$X`pDH8PVF-RgC&_V`YtbVJR@j_FkHq^4q?_d8nw zp`8h#IutaxX1tm#(1-HGWoquN&5)m4-39q^3@Iw&(Q2EyccEblEb$IwRU|pO5v#lK z9sA^Pc0ajrlA6!34ie)_LaBj~5A@O~{8<~Ctr zz!lD4a9x{hbjd5wk5d$M_6E^$82lN_LplV`)g_Ho*+h05 zr2B&GbHUIYEx6s4dn=V@a64fvOi|7!&Zu>9FBqg`m0!;pfVy`hbqm4zCr;&8*&tbh zHNs*N%@0LZz{5fYyX0Gg6swm1%Ft$kCHU{9DtTN0AErKq^?tZa_z|hderJ&GKt&+? zJ>+=6gn5w6^0$y@iekVigDkBh%EAkV{U(C52y?X39V>&CmP24{9C1AKjG?5Y46qAB z>}a^>XaLKnEnBoXpTW~@YWp`se@$s}>w!-Z+z8-F(!I+K=@$^`{b4InCl1}z+LJ#% zy$s!?WEFqvfX77D@Y4t#oAI>4ynz^-PEpE(O9C)lMUSPJEPi}hEwIEOXeN8zHH}^{ z#zQ3(o^WvoX=0j3Fxh1AA6nLqNa~c`iKw!&T%-cyiVW#~L>5l8fTOW~9?`|aLqf!l zF5}!rg6BI{K{t`$f?)9ly>XRS^}w#Xl%1zz4id6>x zik`TNFRQq6kEy`qX@>Ntd*RA1>4_`1JA^Cu?+~uspMu5z*c(^qrq&)jz`d*D%1u#l zg(JBhJiz+8ah0Dp_$T+oRemuzo#m>)*jz9@Xk6B=J?$bp&-T+D=^vHAyt<$4Z|51R zXpn`yUN<>Yl3%(~^)rYTz$!8r`CkpF{^Ga;hP;8x%ok`W4HoWHNM@fj;97@F%gq5H zVr;8Fl}ts*WnY5_0WcJe$9&5H5o9awpcwu3Qo)jf*TbCH_9M|Ez7}Y@}$R9u;NBT8`x%bWBYQj z_IDpD$Gx8!-zW zzZNEpRGQ4)tE`~%Faw{olq{meE*tNqfaX!QMDBD18gxjRbcuvATR>EwON(?bk#g$D2EI@^uL%h3Gp#dp2QXH(p0?*4i z;C~s`UU=1k=!dJoDYK#<2FdhVpbcbIc*z06Al`zY`XzbEAqbpJ=*F45M+sx!i+2P3 z_^K0Nb`HL#t_P~nP1}^Vjv)AWL=Tdxzy~G#|3tk{39|0#CI1J#8~ef?zo*+RD*+9c zYJdK}G=vr1t_x|{t*cxNLq*l?LO*rucDYBfixobWD-Dvp1R5m^u>OE1z8dRL`8qO4 z@V*9sf%fN>n2LJ0pPp89Z0unKuUs`bgh8z8BRVKAfmW^C2NfF;tk2XfcM-iCe=qWj zqT8)o0zvr0J5RMs{(pKmd6eP!;irG4cN29)T>F*YjScG=KTyv{B2d_htRN6aenFL% zEm?}^-sHIn@cINMbXMaL^YEd%@GWWqJPEDJ=YpF{C3=9a-~=}*uR*jFNS(SfI?z7PCKy6)i) za1AHuGh03Jhg>bwn;oe=jcEjA$hrdKoGc21{=Z*2m z@yJ{VHN_x3v3M!eM6mq%JPkFeeI@RqL6HumM%SuS6)d?iH27?Q?PrreOF3{JjC^O7 z98W3m*~|{8!c1RR^Z%WO+YuDC={5DcN$p2jf&l3e2^m@;iU|aUr&R}4{SD+Y1EM8A z14DeO8gGOFN+P$>`!&i&gT4PocV1g}UQw^+W#5Lpihx$!A?RZ+#;9~|P`HO}P`D>} zN<0FNM5!igHKWQSWw&6FR!Ouu*k59=G6UoI*HN&Z)U-LH8`H2;E^!~jir>1S9FBB7yN|6aT#{-rlBiEC9}VlhBQLQRO5WSN#Y zm6yaH>2Cgbs0V+11?7;UtTV(Pxj;*VEmte7!BzL_=HUHR(hn~M$^BAy9&-LUfR905 zr~+O%MtI>LfvUy;y%qJ3D+wQfOjce@Y~9o~AFl^-e-7lY?yGK|b2_AvPb>TKdRiI@ zy%|r8EMylgjesu{2w4~1?xtFaOLTSV`S_A5Up)`V;U^wY|&AN7b@inOas}PD=sAGa0x1+* z;|R<13K@s&Qdn6K39b};o4~JJf;0@B%MU}>4Xwk3e_4_ss;y-_v zUWGmA712$v)xGKUWDj~3_oSDz2fg;w(&L0)|5WJpY!7-(3APUcA$lFY4)uLzZ!4uhs^_FyJ@s!eX7-;s-Pm4+<=zEI=t`fBR=)S`{|~r$KW-; zt;mN@(~#(WXKSnj%(WGVeH<5xlcJtd;^a3mZoi3Cqej^=s`Z_H;9@QOslx{e4aE7q zfywt`CM>m;0GEdazc(r0skAhGsY1TKT|oCb%WTpK)dOep{~&wIclMDQl87$+W0o^H`9t<@8c0QD(J zUUw~e=EACNLy@G9)2;4W>EorbM-+YaoEwlu@y}(Ug`|GjuNLPQ!P#20*=UfCEG3!5 zu&$;LGL&_V74%IXJgzE^cnFs$#&u$)9vxi}6Nkt2P$!%|s=n5y>8}8Yz?c5AcK?i4 zKN!;~Z=;L*&w+2Ee=G&tFLLcKrPB^Rg6X%+$&sG_6k$i+IQM{QbH7Oc)}?2{KnJe+ z2PnVM>PbEPfy6A?#vCezd~E&ogQe!xee39@ zy@koFk7B~>HDA(OnLnKg1L2qWFpgP`|hVv|4S2i>^^7`RzoY* zjDc0N*1vLT?3wQNjqhr^o1%s%73Z{oxJnu#KtsU&)lMeYX<;&)QDD8OG=#aU?FgKw za!cVn6^Y21J2&@B075{!lb`vGcKiRi7^)Q@!+Ff`8}-43njl9|^pU^&r-cX**{QT) z`#JxkOV5~?$x4T?H#>m8>MTQ%%UJNSHI%=B>V#l5@(q0`-2q;)&mw=%L=8d}oFfyy zh50?d=>Iam+kSU`|6wuAs_J^UO%Gv3FBFaAse3(?7k96ROwaj!Xpi~5fR;|<8>O60 zncp>7hq@mA02%-?F+m_Szc0c0{V7BMN{K#93C{2T#1E`%8xkWVT=bmZzg4T0&nxr_ z$rMI@3(^y0I1nHrkZ`yrenFLn7fD+dBh`}tEd~SRwG1wx4?3uq@1&)#mZ)p}<21C%k=}jG{&=^t4NCfg#b!I@)-y) zSmccUc=clc;U&T8TRhcayR}de2F1-f|A8gIGw7)YOP%ac2FYtW|37=gbMR0r3V_@; zoqtb{c=?PPU$67O+asR)k6O8e0 z;Kzd2P1{t%VHg*c?GWdC#UV zv+0(>yE@Bp#dQpN*0#yWq@ueL2ERu*ZH__CJXD(_AUW}}BhO`ZS{=6fJlF6KJE~g3nxh6q(c5VP)m5nM$L%M zOwZ6(bfvx8;`U^NUUN&m(PLl2PemSQ1~}47o?X7NJgul@!>DzJs0Zv3L?iB>>zm5EmF+GbPD(GKf2?a{F6xIW-rT$oHbqT?LS=({e7 zN^#CmxPlK7< z$FL>C;$lOP;~IL5ee_p&2k%485sZDv3F>;70Zd3eyl30gisF#`13V3;tus!Ad(L2z zxic4z6WR9y%nZR^2egHJ%dFIJJGE()_k%R{O}I+Wx-@e>gxm603!x%){9Y z3D;IJ{f2aG@eCkiq!qNt+8B&`SC6NcB!BKX$lB_UgrykugyPRIiIM%T>lZXg;};?@ zg7XK6SC7uE{}L$DhLK8P_EkO53fm21(O>9q!uhd>ZGmB2J2@SDvqR90CQgtv-ETG! zH=)|9Cn$ar0`x@-DHOcNN`m|ri~<>_RmZ1dFz@X`f;V^eoS@4zue{;Iip9@C!-BF8 z@WlCmC%cG=fFL{S9K7DJ$6vcx6?Wv;J6eoAs*A=*1&gIY2D5iY!)^q;n7ppP=`&x&RK|JSfDI;go4B#NYbltyv zal4;k#;EJ|dkPSlCu-V-m^*kcm4(bjJ@DD9;`3)cWAx8oyv-nt&t%46BVX=N1dn^J zS8Y=-lvZH>1*ao;VB&4$+9$D(=<9);?ls>wv(Oh!x@S0XtK+;3dfZ&dCWMVNuZ#sq zlNSpQk5o;?L`TOmFb6Um0Vh<}g$Oz&j2Li8s~0I$V6W-TlXU(E7kArBywo8W4x4>Z z!l1-WDlO*WWG};G*D&VOYvS@Pb9rkF*mVO3d1S^ zh?v_c=?cAmBHy~tO_mfCxi;PLtVMvmx;^8*y-A-20aGx1=HZZYjQ^Cz!L}b}$i2{pACw%d? z*1s7Ny$c^w(&wndg;m^!$pdc+?A>Og-v75?73{1Ih(_a;glpj+OaR&tL zhxyG$KOaJ1T1Qh-f%(Jpyo>wL1Mi)HgM*#f*qACJSCaLvL@&)*q%5Y~3|Ko=9TK}$ zk7ogdv`^{%(-)z-Kp_n~9qjZ7eMbiuR1A>iFB1YdN3ofD`X$)U6a;bMCK6mG8~7Ey zagkSra1j^krA!qU@lV~jaBqfi;W)j2cn@5-DJm}Pa1|FZUByLCQ*q(aRR1%7>Abjl zoPN~B`;?yN{t+<4(am9S?pw@6y9cjV$t*tDL4#W>e|nI_;sYv)Hv|OzsC`DOe(W^w zCGaH4Zp!s17jHAD!+(r2U9-iP{A@7{PV6%|vm@u>fK@*R6p0iCZ}6C-Z$mWqv6ems zV-3m3B`V7#k!8^hSlcr=$ii@tsW}Ggb5Pt?v$l7fAYI;5=9hVZ2~K*;9md2Hh8MPjyc7oSZdHN-ZK22J5-DkGPi!J7*~V1F`d! z_2;k=A8CcRcC04uh_vT6;rJ1cYRmUTkUZQ+TCf)&3*`~5*Zv6L{tXJBo{tw0cNSv8 zxmBjqCjVE9@NyWIP3~X}RmHHrV(Y)T0a6b>kLdFpLQ`jmV{d%J!~oKQ-HzFhb$I@@ z00Q!T=L$zpklKUe|5}GK5peHyNk`R4?&l6H@-JfDyChlPP^ z^2`aX2U&Ws%m|HABA08ca*%GkX8|+?F7{#GG_2_XJz8b^(?I*7fET~+0+BIYJ@5+$ zt|K#OxZaUon4zsY89;>g{1Tx*_CP2@4@a7mRDv=XWR{;H{7#^a)cak)?`gqV`Yzyi zOkl%QIHDE;*hE>Qm!4gqq{majZ^EeC;jIZecFTwc9ks`l+5i_Q(JOGBf$|4|c41jmJFVH6&7G|&N%qL{E z{7<@^SI`z!N#d^Ph~*TiTfD3zV}5>X1pN~@hdakf4=xf~`?vd7GE*vj2_R%T(*YOpryD|R0<5x_FlQUwKgC8} zfyh*6o-|^S;MRLB`X<}mg6*Dm|3YRCCSSVYZN)pDVwBF?`Zxqw43uC}q>h*uLQw7t zL7%c*WAK0?OK^8U7>v)bcpn|CNcM*WdsZEgZlX@GkHZU?_VI%Kk+Cy`i7|pFezhR= zTLgI75X=po?Y@PACv~;3pN2S8v&o%0!83NX0LC8BEGLikc0kk=HP1SXxDF9>NS4!X;;M9CxAP#WfbCfI=Mig|+F2J5BWE_iAH{M8}=<%b;XPdZ`CF~Po&zf#16 z3wGQ~)#bhg+bMf-UGCO7ChxQpOssd>NpEgboqZ|uoHw_*qC>Dh&7Ui>(F+CpGX9&Q zI(vy=U(U-AC>88wf_;U6&#IC390wrsML?`$H9&vPZhzixudv%!DQy#McVPMjo!~VB zTK@}ZDPHr$Z*}%|*a8VTF=O$)Fu`68ANi3&j#cmuhOFlbfi!}Ru<19Xm1_n2U+O$m zUH;vIy%t`V73}Mw#W_<2@8ghvcM-`Sh2Xx@F&WGd!CueT&acZU66~)F-jdY<$v|90 z_&Nk{6Wa|DzFY9y?mZ^h1{C8g$-M;% zlxg0xnEy>M8Q7*D=e-0UvbST>I7Qv(?I0skjtS&E0{7~4{66G*xLUG@{L*|g{(3C~ z_?=3?%>P3P+{sHypg+G|3H0N)DS>GIZ6$zB7kBHt7Ni-wTj#rs5zRW^7x)do*j3^# zosaMZ{7U$}Q|I$wI{dD~?{{@R9>3wY6uiYo2ggaX6 zzce50s>`Lo1QGoW@hQjxP0`V6)$ih3s_YvL!%XmeF~3M@E1!TFyA##78V=eamgq0C zsfg)E^`M!7npUBBz)CuXeqv-46Az++BDaYvakZvWFGB0E-P|yJ@r#0yDt5#bf%zjC zbs0z(u<*jX4)`4Nu(hB};om_x>N=pHD*u^+S#w%6(=pGXae9GxOonuHp)k#iZ$x6j zEig?Z;n1CNA1C2N!Yq8UzN)-#@nc6VzKN;zpH+2V=i>-*F$rUqnR# z0VY~WpOalA7*P^`Q3T@)ikMF4f{qWZx9%F3(xMjDFRFz>X(42V5^0frl=L+l(3ec0F# z1>u<(j(fztpvB&Hb>6(I+rsR5I({0)dJkV(IC^fYTT66>CjL4$iAfy;{h=t`0Crte zcw&dP%0hVw25v`!H>wZ*cdvBUN2;heXdF)G6CJJjF5P6XT8LET9Qm~3K{}|&*5-_W zk>I#e>EO&WZlSF}6snZdus1#mG_|HFVfn1CN<&eOFG0Mamcm92GsrewzPU??HUpbg zI-)8a_rZTa!0Y}qAn84INx?_R1CR3zcy53hOvode!Qm88mI%l=r->s-w_}xD4wC;4 zq=oxb0`@z|z47YUc~0Gsh&qZ!zq?pg4pZ15s9+x$#TP3|J*-ZALI+bB44NZ0sFCPC zy;cfz+T!O#p$+nx&ssByzlKFn_lI+_csmde5-GnI%Mck3y-v)hz8P1*e_vQ>bwd^0 z!TXL(s7muL|WKhI!o@IrZKIcbPchF7JFe*P`U1 z_ttD=Qn;b_dOj;;e;not!>4F!lh-FC%mX7c{zRd}=nR8{S%NG7aiQ0$7wnW6cDJH` zCu_y+K$Cj`(1fp3FjU*6K{Ut3h%*L*%9Lcs_IRzq_(?tDZB*$$3*q#~e3G)fR|o@X zrFK&_1KM(MbT>KG#P7p4H5eFe{)Jm@odIcQp=W1dt6P(BC1IJ3Vjg7rWF3i;FOiG( zS|++O=>>Q&1};k~G;WQio2|ZR5Mbq_gTPb0bwUiGae)dw-ygEWyVfSnK{}%%UC~)=~Dqu7RG~A#8+dc#8}2x%9mqsn@;@xu15{@Hw1rJ z^RjJNJD!<+AyrdraoIiPL1m-ClivyVdL+H>Iwv!#gfb2oGxt*TMkb0h3*G znGz7D#R}n?rf^D)cVRrt0K&B7{0nqb+t)%wR9!@*5?L1!J+AE&sy?c+K0%1+SLx6| zPUkWqqEB4}6U=f)Fukvu{w1@d=>Y9*oyPwI+k(Bpz|kW!Z*v0I77#39TOH-D#6|YI zE;Y5CZ*@m{TjTi#%o)!#wVi}b(73i%Uc?A6l8q}Y%xQ%+8|Ws4O;Plu+(Th7Sen6) zGdnq~>Ly9EYV(_64@AkAh8@}Hxx}$e!(x2MGo2!U9WXcbK0HDoPyIT zjANYRuzT?AL9lAgxtcmHW3Hz>UviTrr-gew4y7Rm`kSXf845!m<^=XufHBG649jn% zJO??}hZue{%xl%Qx?$O-#5(~I`D=ov`1LT)KQW8L>iLLN$^HqdbXvWw{rMB!yav7& zI|HdW_f^aTf)RMDv{_kK<$Zx8v#^bTBS4qG2Tz#hQ}9%@d^J$>cUO`S)?b*|AATpM zI+8p)35d+}ad}2DH%`#R=O?50$q5XN6U0c69jw~SbQsk6MPWd!Q%K_tocubpK>l=? z7=<(j;nrO0FB||rnLL!LlefedMo#bO=*<(-u0-- z+;yut-4_c_XYk3`$`)h#gxH!*UkA|U)Jkkap zjX@F&;~(KFZu)=*4F5P%q%iiPFa2Q3kqSN&KXa}JuB7O{j5W5Wgf*pTd?xN%z?V*w zTf)#rDHnMyt>r45uEPSSt|>ePvQ3lU$eVELf_9W#Pxzi*b6nA-u=p4TnQM4z-H!#z z9hC4#=_0(9?<`%Vh1aZLzIrBO1U!M06?RMaz5Wcm#Iv7<35@H4vYsysLQ^Hk@_POm zl;O!-2f|@%e_14=FRpEZRtHX4%^6_1f7hjP0Cenyb`hZidy866q+U-8fiqR2ciijwB-l z!3_d6mF9W@yh-ODx}CLpeSXnxL95R<-u7va>SQ@GzxWmk2VX?ypSlVA-Omy8VJ5hd zg=5=B+1@TteACd(K%~YfU|<+Kx>`pXyyODRJuu7p!X_X19M{UXa1&UUg#U?t@FD&_ ztj#-!T62P7_Uq)%$oxsS97$_V^mabu3p=WT)a!uD4Y;*|qxFlh9JrEB`UK8?-C#Ag|3Z}b zmIV#QBajo7i7^2@&&zLKj7JL+>ZjUz{z>(3)sFSihmK)C1HUtV$&YS zXjkkgS6@d;lFQ^Utu&l&u8+upO)@}W=qpUV0n=gn~yxXrD?dE&rXWbyS>>-8!rm(OVxD`@bj_1 zT*ecNhQqJJSO*upYjjy4q7PYLWq>-9_IxaCk6bO7Pu>)^&s#0jxP(?mO|IacT3zSE z9nW+G=qOEcY1>!|?;Y@Y1ck;9N9mN#(n$-dGa3Gac`NfO%LRw6vb@!iKBdz#oF>(J5fSG6(R#YB6063F>5W}AP7r4D%xA$Xy41T)O zr*y5=ZrG#ex6i9|3hVR*wGQvPp$jUjvYp|f%3{S&1F)$6lgxE+t%6U+vdQT%PuM8@ zCK^_P)jfb!AAXa9m0-~VTI&1+GHdEe@Kci1tgX5mSRYUlU(lE*>5sztqX8D>2V$)t zf_-9BL_ko)HduD2gVz=$Y;tAwU}tH3$EfD)H6FO7ls^lY6_h!D)?D0Eal7JHTr2r} zMnfafCEWt3m95cyxjle>bjh)(SfOg$bYWp*}mCl3-Uuo8cJG0XSoilIL{LM^^ z)7ExQ;d{Ur=PsC%)5_RqHRfX2H-XsFgf4P%T`gTd7ttbes{|rLwqf7Dn3#iFoV6T} zJ>wVvslJL2kHb%c1^zW#Hg0R0M8(zn;AMLQ3`$rg&di4v7sl!x-q8-H7cvp;5Ns8! z8h9K{&qrgrNz|(=p0zwXYn*OkI-@t2gX)5B#PlakKH&hzL6hjfbUZ7s5f9q-n~Fs~1!H`|ejWb~sob`@u(G@bDVS*1f@dj* z)m(J7c^uRN`Px1L{^2RAb&%TMf5kE|&o@|{d22k3ad&!VwiBGs!lic7=4^_u$1Jmp zS4C{usf&Al*C>7Y>&%v&;rx1xhf@Lyw6G8=A9HQj2JOPpm(+5en)%ECeyvhJu;7ie z<(h<*>-nnrC5;K#Ax6)O^ZA!Bofqc2%Ol<8X%PLaQ7!M)(%_Z;wbfxw9ttVQKToRC z>f%4EaYQ(nh&p#c^T`Hcuz@uvCgHLLkYv3~fn`vmx!tbPf;I{3;}zv_I;;Oi0fYZ>JB zlJV`(GRWga&G2uL3;yLM!@n8HS-Fo-&C?kQ<3J;+1$S;P?J5%_I2yce9yBBn6c(Av zztL7DP&EfY#R7Z%BLVl81b0c9%e!v~6I1z8+F3``v3lIYIMaOqQOJ&{*~9eN3yM~T zPee=vO+;mNLM3=2f`bv$z7>QfFcmo1!lI#$^om2EzhnmXs-O`o_)y}_y~+RV9__Wnp~Z=%*X+eYiz8}vwXeD6xu)#_ zz8&)wTU)GADG-;LJTYTt?vWH+W8j7j*;4SkF$;KP!8I_Ugw&Pv2>-Rcq`bDJJgTz1 z(zna%(d>(b)%QKjy3JrW&{l(<{Z9a=Lmc+oXpYr{KD6Rsjc->F3RxZ9SP;~k2qVJl zc9-!-?Cy=VE%i|w9kA~|WM`tQCz|Bz@DQ^b)h1enM;xdzn{H29VA*V+R0ZU7^02keb2OVz#***Vg0DIM zxj0|mq(bpP0MF!G3Zr-*A+5ck%6#}quO$X5i{s~GT*GVT#yRjgIo`w(WNJ(}rg=lWL62EOB=r z>y^qnTSS(#l0mQV^_M-X?C=ZrjL^}mnOJvyg2PA>NGy{A5#65^c;%oTg*#V~_f&_% zO!cVxhwrxoJ->6OPW}29lR!n6G7U^ssw6W*hI?za3L<0O0{fM%_tcJa7&y@=uNqSOfY+bx%; zV{}00njWj1jxt?_}@T@t=gos2%Dw&79gWI^y`fcDNSR zNr`vsX)Z+f|=}qqMb`Rb;TH7{(@*e7dc!+eJcf0>n`?u_b`Y4qq z=P~x6cPj;?J$CGsW1nJEKRt-CCre6Rf!LB~G3wcq@UJd8s$~bp?H~lME5hluF1cSz z%YS-A_9KyzJz~g=kQ`mHMgiTTmX3yut_)^$?JMuL)NAIE*!m1oy8n)Pr~m=i6=7@Y zlJD#hbElHW>o)!(Pw?|j!9u%AE2oy#CX^+-1asP;Pcp)++XHY$oi)CeTMtT3Tg&*U zEJvlUIcEcs8OWvl2cj)*bl11ky05l11*rQ6f%p{04yLJP5Q6=oIEZFuZwr%O48V_p zgCC4#t)O@3hSK?y^vrAWOMz`+VhU|uZ2@~#_%&Hz(9NF=o2}WJd<(aY$!o?fp={2~opHx-)ijB;|kPjB} zmAH`4=_G3~SXLNP6b>*|K+&Gn2+^4M*YX0}X^nl%d^5ye|$uA;QYAge30NJW?T)LGz7NL1$) zCN}Fg@?7ef$JeR{RU8lOhnWsQfNEtEv(jSy^4_HR^!P;u^V4 zfk}lh?G~5&cA00rsqVT=*xD-RZRk)CbU<@;ThGo9L=+-J00+po^!et~IaLA5#rrdC zUmogzGVj8s!IS|XT6 zavlL$9ah=4rvMb}MPQwrna*f;CTZJ-Q_n5rV{FgmBb8?O-Zd9TJ6<)8={p)*;%{sjgB0);F>z^ogHsX`*H=_=qv^A= zYAF(voT_tsr@P0uFxq|NJy+-Xf1c-dw0M4+mo;R5<<=Jxc7O!4D>*Y^V#{;+>#od0 zq-OeF1>*1l#O31GjBefc^PVH5bb^!sQVdz4n=v&7E}*RbS1UusIRN@06DU_H->WGj z_{*5;9zTEdi`DBB%m;3)J3a5YD&#_^%gCfaUPpr>ia8tLEZq0%!SwxMa5t$B?X^G$cW<4U=*CB13fjwe-FwXm1T_fT5{yNlk-TeP@~mI1?2!pS7n^2ykqlP za-t@!fDA&C_DC|G)o1e5#*thg}tJ4`cB6<0t6Fc-loHaoN*ysUf}l`f#m!2bp& zD6D`eBG)T%eR{-+E=t&rLk9GlmsvRNlqeHMw~o&zU-7zVzZe zuiL_UL7OozHAVEmj_A1WG7{wbce(83yCR=b5Q2POr77#n3$E%ICS2b)X;jD zg}H}v4#L+*`cp3q+Ggm~bixtJm2AtE?1X8yaJiu0qwt2cp*c_45W=i{F1kYlaU1F4 zI>7PDM9P7C)S0L$6DBesqVCv-n~vcV`@k&Ajp!HmgfFV%_8G%beQF$ANu545&yFPZ zCTiQ=6yel9NP}&9u&1xu4VGP&Fc`8WCla8*P<9n%K6MksUFa$+b`|oQ2J_Q9K@PZD zrRYHYnsx8ZnuvHf!WX5(k6`-)a9CQ}RqT$$Xny3pmc*!(m6(zQhX$I8t9;We`0`r* z0RLUa4I8ypU~~OQfzlh^BrVF?*YUG3_Bdpz1OB@TLZ-RiAo%+;rqqUKoVo_1a8M_> zTj0vAcl+b;b~oHIX_V$G&o=5m+@`Eab2*Uw}6q__Yb-w;*Se-BZlj|7lq za31@fhISv-LCeV&B9iYYz~PmQt+XDQsGNmj1=flihtj{b@T7u+>E|tlv0q?2wJ^@0 zotp-p(F5Wz){gZ95q`${VWyb|UM^tzOhWO)H%Nv5Hv<0x*`E{G0J#on9?5@NfHYUI zJ@Q;d=df_x1CXIP1j$=xqrWZXNd+$3`O?BzoKwBwR0T+AWt&dbSt4&4>NTiqCy0pu zi-@dTFIb}fYI@elw*oFH3N8#&Zv&0t^N5Sf1{OR3Mw!!*2uV?Sy9!z+L`~wLej%~P z9FqtG@_&>*CUXp}j5kfimEMyBhk4*47?gLIN4elQ0gj1mhS}!FDBGpk^XAXz-^3he zObbW+-0x6H{qw60iZ zsl(np$+-?TntA;lqwCXm!%1d??UPTbvv8|5rnW9S!J(oKS_cX&&-0x`id_1o9}Pf(?6m-|J?QbFS=bKzsFw$Z-h`Gh1z{S;UJx^~ORJNch5seH`cMCk;_?NIXrm-rtr zcGsw@<*%RFGV%v7-gw{=9DgDY^9fk-={+2Ur>Wcs`m_lSQww7v_&7`eojR9Bd&~u} zRULp4?7e*}#x#BQ+>xTflf$q0L%t z{HK-y1sh_9SMS#5jHc?`cUW}rIjB0*X1Ospab@f^$1uy!a}zV7uH{BsF3nAhG2;JZ zt>xletOP%1{A~GgZer1o5S7yvV0K$B&)pF7MRjIBrXHd;#C&4;Zf>IMnC1Lj;6TfT zxrx35@E`0M;un#uJF7GAj~@b28)DwB&g^gbW^Q7$H-4Z+hKP-pFXrOR5I@oKHGHm# zpK19DeqXShotyJ{Aie=Jx$xRvb!J?=)ABif(Vqt5>n&$62>fRGbZ*;!0`a>opOLio zfaTO&aJrIu2=IX%ZASyx^g&eWOr=QGA*k!&)Pa_dN&YtY8W`VcIfh?VtpUqNa|;h@ z;j*^n@Z7fd0;!pnqa@$HKSceoybz0uX zVB0$Zi+^s;wm@ow%mYs8}UJHzUR>{$}9*V|~ooV?y$zK~7yU5an!K$?Z%eJ|6 z4Zw6-wv)2Xz}R|-!+NU%maTK!Uc_+)Qef&zctIEB`K0DBRN_>`9@SPhYMQoF{AL^q zZnrLf*6p#bQ5k1<4l;tG7Z34rZyo8EfAwbR>vM6NwLusHt6=qd?Uw#grzfR+z!)=` ziK)}3F!m{Zobhmg2gK``0GOY+I-%11)wk%c3H%a(&uGgtl00kXmVA)VAIxiY2Qc%(xkusNNPsU?@|yU0N?xlG?Fv*J)Vy=lyt9LO zrw8-)A$cPNY)hY-H~Fb^E3NKKumFPDTT9<2>m$_FLg?^8#vPuCa}nr7tjL{!q6Ff# z6f9P1URwqZ@u~+E8fh#IgB^VHf&>H0KRmTLA`Dd4IpHDk(*VcHIX@$f(b}bEgWX`F zs-Uc1DJvL^Ol(aDvoSF_Vu~p-gNA){Y^8U-B1?$rSla|sur@FqVb7qS%$~SJ{2nfH z3c)2JSQ-=$pQ^Y7+rj)^SvHB34ecR7EdVbdk#?A)wZ3Q&6Uv?h(iFyCalj|6<(Wn5 zzF{uLtMmft-)z_UqEU1#Qu1GRXcGsGN*s{~Wn3pcSDsY2%qQ`CWnsUmUU#LUk*Qzl zi&pEL7_5^NVq()8HEJHE7>##^P>yn){B@#t`=0>@=)0788F1S7C27HUwFQO!MmV&d zV^3oFWECAE9wvK^1kpW69d|Zku8Sd(eXAQ+INk4!E9Zs!d*V8# zC$8ZNuHqiVRX+PWxDEo^vPgU}kbgl3w8hN#D72+^Cf~uVNlXqG4&EAjgAf){k+R~q zi0d{jpgMd4%tmoXpcbzFm$(MWiuG>@;cCPEJFG^TQ4=i*X`lt#`7l|NB<4x4n-$*< zND&Z7lp6z*2?9wR1j3(8T`e~R^1_~MnIAPP(G_iOU`kibNgSlDx(|12tL6ZoPcc>! zU9@*0cwn0Y?8=v8w6Oi3m5S2HP`tu704IwlG5%3gVeF49wNUyZe&X;fXJV&@hFZBA zll99OI7moZtn(~(_x72 z4>U&sIXEdGeKZHo*}lHj22N=}FEJ8xHbmz?cZJ>uP6Z8xBUpX{#xXGzsPPmfyP-6D z4&a-O@%;O9at^_y!#_xJC5N(PlBQ>1Y{khcba{jGIT=${H)TFS`v$=L8jtBXzZ#h5 zu%W(M*NV#e;JoL~n)GbUQvpbZ^EJ_?aCGo!bSkXz(OLKZp+5PQ3rtHEy3ouu*ry`h3ok^b! zeIqwsqzaZkk!3V=D1Yz>sGZmIse0l1LVhsc_d4T%RwBi|pxj%ju7vg#p5 zrjfItBWNTJ@%xY{G zCQxe)apn1|Z-4SEY>bB0O`wLZ1jUb*zl~TykqM|>Aa&M3jThExrE9Z?g{=zPu*axY z2;Sg_FN#fTnyDhgUrHHi%O4b&w#}Vm^AX=Vp`29>Fe3x zsO21fB$wWGY4q}v((L13%&xczgC9IdEY>>N$2AZ$L9E{M>fDxMG3-j^Z1?rxQi3hV!<~5}6 zw(tw_%aQJ~Y>u`0vYYd;h5QE?$r$I2Z>b#rSVOk2ba&oSU1|jX4z|TnIw`m2iPTT) z##3?QnE_1r)MsCqRmiL#s|5)*qOg#*!ga&(RL)*#*YSw}mCwfN;tJ_@FhCw=d?1`Y z9q?s0S@isMOaMV7t?^+{O(kqhfN~38)m%IgHy&d7&6s@DbSA=U(P8$7@ca1v`LK}k zsTjug!R<0C^}H}%Gju$W-$vTBrR$~x?*X5J*$)1Et!y^&hjw)M=y$cJ{ENw>Rcv%2lhBHr-E_J)W#@y)-q@W3UT}rqy(XQo8}`c*4?~HsE!nfH&=ebCPxi=^$*Q@7j8bgV#Tn2h1$AsU z|KMx~@O4x|!ivh;6_gdOxRlje6DnbyvIg5K-U_(gE4+sTR=1Xl&4QzfT0*mJaM$Xn zo_h-Xo-om1sStz#2X|n30*cr(G&{FvBEajB#y!(3%?1lF+WhwMC@FIGbB+8n$Rly%hn9o?AGCAwO=FDsj4f{>e4K8M zG5FG3w}T_({`?f|ck_kYf<>R0VZ4?bml&fhOuonUrMcmjGuv?mZ|k(CL7pm@P!e;$ zNu2Q&4N|$oYxdo6Xt!yJXZOvq?+Dr~FeKE(n=`r`-XpoZ4{>lbd0P{(EIh&hBlV9x zc+5AAJ*!o9X})RVSHZAgMQxCf4ATGh_;&V~!WqOA#zeuGcFrUdkV*rXM52-~BtbOL2H(C$ zjkan#sqvDkxzt2-zTY}$@Y47D|DWgc@!`zbXYaMwUVHDg*Is+AwNbG0TJ4hNh5oDZ zSGn)VF~-du#cnb7M!Ul@%Krsld96H}Pf(4LWm?!@Ba3W&ZSn_;5xr1{hAhbCag7XZ z>r7wsIDNlnR5w$JsA^`?1QJb93VB(bN;luM__ogUQ zR-4z6F~j{Z+>bOa()nGyd-Xcx@NVO|-z0)_*%!W!?YMpA>z)MK(|$k@u@aU?f7LwC z|1y7R9@SQj*7at=6hN zI9YVglUG{mchQ4u5qsi<*+34ICA&Ijhj^~`JZ88syUU=YopWBpNb{@J4nDl80rtBz z?o?_)4^%NYX^j64Skd!y8NM=KzF*wRJ9+G*(SMi$3*=$jlgb{Y0g77LEczkmMU#dC zg`YrPIWvDa4ZyiC61o3LOv+Ax!ABIM;kXZ>m)TuZ4M5?J}!wtyO={8hX@f=&^=*R8PB9D;%m{ zbXZ4rmULK0b(VRoksa3X&NVLU=niWHu%oKwHoE^e&My+qGptH~G%OZ$PM(^-VP1iU zZK7{NA-Ph7v!By?w^jj0^x7)Z3zNRU16L}D$vFI4Lj`)=8gfZRk$F^PDiwi=?Ob}9 zXN~Gr?DbFv^h703%as@^uM5BHajU?juek#*HFwGx(+q*L z8)Va&9i8bg5cw)F`w#nGnc2as7QQ<9*oU`zcz$2(7gMqL%-p4}b@!HSHR9^V?l5uY>pL5domZ`Xu6s*``_QN9O)6L*wxH+SZ`j$l z)TO;W0j_5M{$vD*cciAkGfn-4%aQ1CkYJJlpaxsx~JdVaHXFZI!35UpEbmY+`&Z9wmeLYQ2tR^ zRJiXG_r1kuKLGk-v3u~eSb}iDP&?H$VmHD&EsbkLOLdY?TvPofpKaz`8g8CORriLa z_#;bQ-9yF24;fE}2(NVu(RXv!W}dDj>D<) zw>J9L7vGW~G4mV_f57{zO5vFD2Q!nZ_^P7;moCaUK13`t_Gu==td6-T18aO7>7u?R z!F4#WC)avh<VaX%vvt(5J5d&^9PgKJpcr>E1COW4gRIAmY#*zu1NlOdO4h;MlYA^Cx;q8ri zB|W^T!>#hZ9FYDx{~V-RMX~1HKD@RmbLt5;f{LMd3O$2(ki<%BThd)=)LDlk$(Ds7JGPngM2yVu6gS5aO`2F zjB&q4RJW?d6$J?d@3(0%F*_!5=HI57#qRCLspJI83GD`Ux}w_sQHIOIiOqHW8Bj5( z@nx0ai)aMIV`JrPP)H9LWaY!x^sc~On%Rxt@ZkXN1=vbF!M>u8iVUHKqc2kS&^{wb z547*7JG`goi4J$Xe+uyt31J1&J}EgMceGj_IdX{3Fcdm~3!xDE{Z3b_X&=1kE_f9D z@fU1g$#9*r$Mt-S*?-EL8(omVI(!fAdsV8-A&cWn-YU5%oArl0llDy6GGFX~`n0AH zHt^Om6>vZ(9c!89Tv-S^K+PF299yZx6m`Xur;dX{Vi&SUsE*m!i?mJ6@i7}gsLvY2rgxEZ3-;s7$F#whmAy|Tv^ckv=_7IBEDr9jh^^po z>tSG)_Kami3615`D&eKW_0D!!q6OO_%Sd3zPpHzFbuXEHH66&Lv76`?X)(KuQ0L%BQR=+wkpCW*jMepUP$D>aNEHYeN2OuJwy|2 zlL5Npn}L>za$f@x4v2}+m*L@Tr!A1>!S5bW32$`x9u$6O{_tFP-8#qNbZC^Y9GIu|9QsL!>u_qF zeO=fA1Q^cgI%WEstY}r(2SuI)3@`Q((lQ zM9i50wAjUBv_hs!yBaVM9ReLd`6=WIo~Cc_g=2FNob5|Ew|!ks!}&YVq6yk(1P%D0 z^$<(Fzn1BPcQ$T5-krQDD##xwp2y@clsH5s^C&Lf_!^zPdHl4{zXX%Zv}Q4 zU^1@rzJt#~to-x3QZAU!AIt~M7kxGD9fkvuNK-qeG(+}B=H?v=hc_}iNx9um+dFzy zts%B}4*nw!-Gqu2>0(7|2*R$^v<#rDStX4d`Gd*xmVIg6({7Q1xj1qr2%#&hUAf`% zw^6thvN=aw-g`A5<~*~!zj;y4$_3cpWO2Rc0xLxd8_o5~@eR^Fy13W7ZO|@aJqBHj z=eT3%xVW~Z9_*lQ1!o)cltPnS+sq`Ik#Q;Kv_Ayc?`3W=JjNXSs8-%?f7)Rkg~f|^ zMq*2_(AXxb4XJWyD5yn7VfJHA<0fYKT7TX?pk`Aj=jyg^ zszPXFtodL0+rB~aN=n8u6v8$06g9k3KlQ_K`?PRbK2Pr)11&KW{%d3;tH-Zo$4QZb za!&@qJ!udON}cGf#gqshTr&j3gnvR7+#bcPkBq4}*2xJ&bVmfcpO8x5C#?RkTL|0u z2AdFs6E;nu=8VWZz8E+kSL9s4*@SUWaelJM*G?BB_jOLd!Sf|d<6Xq`XHn_?{SFQ>sfH^AY==8b#i5EQtVWNiQh# z5gc(FN2^FMm`ZqK4F-?${-EGSfd3XSZsWjhC>?xM9#d=iQCvmh_I(S;pqMEk3!}R)7 zK&jaKFNGGZ>hwqxl{!CSy1H~T`T+5hs-T-@19I(0XkSBw^xvi_6cmMVEmq7{6UtJzPoG1 zqxEj&-7uc}UoiX!0OJ6`*h(;DSqrLBpfDVD4lr&8RW`DWzwBNZ&UWvT4Wi(kdrPTb_Sw3t{?oV1%X7iohKpRLQ}~=pnerRscAdOzIIVrK z7m*n>wz;=x%$mM{VF+6hY<>H}1z>jnpi3Zw^J!1O^HB=>MG(NAe3~0wb3uX!pT4X+ ztr^hz^JO^RvjnGf7)}=8*bp^v7>=Sg>rW(0je{@dZzR#!)D=MR6-Nb2k% zB5uo@F&}lQmrsjo+B=rrqBhBb^kn)5UwNFfvAXf!WFnvAABqGHR-2q|7wIpUQB(vp~B{_>g`@1u1;p4}{==fr82Tzf@!-#C!U9 z4)Q5;sKYl>jt%Er!_HEnixQKE*MQ+7%6Pw!hn~Dj=oEo(4nf2u0-l)uXbTpJsfir> zvw|yTIC|{wf&Q6zY*prd|9mvE7Qdwfzyy zPetd}iXdb&rJt%fmQ7|MZ_o>3vMkwds25V@;#c)gSvvue89qvQJX6;&RauaxnqxwVH>Y%aaUOlvZJ4i#fCRuhQNo}_fr zbx~g}p%=HK8+su=XZmcHZWI(j+w+L`?m3P+NDf%UHN(tj*9F|av|g9rgl^rQ%ynQu zlu%&`_jZ@xvP{QJ`XJNMs#FF#J`#o?FESY4lqbz2cd|cv4=(3#<3eVz zyKcz1xXZg&HVqGq$yD?nWaK^t?`QG!scEl(PNBP=_?Zb-t0MnW{o|Fdq4L)e$$Y;f zKIU=Kup`UN1ekyV4&@tl8@Ih9d7M9t>S-bCaE2p^rFMj9#769h_IdsRyAlu%Ehddp|{OIi?D-%k@W4F#>%G8aT9R()&OS`u@L+*vhbe2*Lu%S|5fNA9Y~^Dz^F^1NTLuXx z7n^`lt0xi{NtlRP)}_u*V27y8GAqv7hp7G)(W|TD>?z%}X?aHmH?;%tWJO+!_%xy} z=({A3tycPsYQv6nk;$7)8BM^ChVz^BaTCAFP}saFYu#wyQze6%R;2P;6{J$RA95ZJ*&6bsrbyqu z16woKH*+yqoC$Uow6M;{|An*stj2HG?r4 zzB>@FE9kX{AJw4Z`V;F`cE>s5wok@c8Fy4Y>R{=UI_`Ahu}4Nesn1U09GX$)r-`7; z9^g>&87hfI1kqgC!?Za=+S8QQQVsbLJ^CeD)~Z+XVXsko@`l`Q`-$!@{lJLUkVe&s zc$P#ZkH-UcgX-jhE)CH`)2Mnc9?*&jT4(%#0e-l#!5RwW8YmWM9{p-it*mHq-d!J# z_E{l)664)F;}8^vA{EZ1(w*@!M*zt{zvUG@ow6aGKgaE?S-AjH`ababM%Cen6Y;=% zmIA*o;&^=N$(svz@Kt{f2Eb6Lw^K;Wb&F{~OdJ+iR|3I6g_s z`XU}^PM|Csj~sdDz4*fst^CTLvS>=_i|CB+KGF?*z94-VV2!2ZmN!v&cUrJGsIqaG zCNf0?$`ho>aVkeff-Hnm|S*0jh}j*~Ww* zyAt_c*lscOAQ*Muyi%GyyQR#(Sy~Fa7oG%>tI_|r|{_!8V=->hPEyGe) zp18e~hN5v1NkRjZ5#z|XF(htY-1a1HUIMo&1V=dRFZ87}MH5!B`guE+CiW>MEKgSr z<;PSkt>|9hV#>)fJFKD#96+9T$kB?v3~9!yT)UDrQYl%f z2ORJDc9QL-Z)|K4{sx&b^0fb9o>Vv2biX2VKt`%8Jo83`ymi1INJq`{>@A+kKDT6< z)dIUy&k+@CBP>@Lj59+h0+U2w5!+3R{iduZvZ}gNEpL*>Xb$3U$T96qQMjIsZKra< z_`aqTcL3A-`|}JTZs##st)t9K87h&zuAzFue1HX12&khnkyAw7{g}rKx{Cldr zW;IVWZlo9y&r-_}IJO3x#{{;Eax_oHS$DadK2=Vi%63q?EQbpE<^*S2?GK+^Rh(UM z)W%+i;+5|U;4ttzn$@-}>0xpMWDWWutXKdsgZWR^`x8jDC zXWp{ScwWIFi}J|gI{`ml`xFAyVOfls7M5xJht|CDDY(1pDZr9!2=p{zvC1H5j42_t z|J@T$<_fejoFFnbCqU$9Pf(WJH1lWOdoEMiV95oPj5C9l+SlQ1YRG?`^($qdi=Ip0 z#I%}BxqUR-G%=aYQ~PI5(ZKUbVTst`pnuBHR{*J)@YoQj2q2unv~6V4EKvI#Iy4P|Wt!7L^-xNYb(SW1+1|eK7O3OM(Rgw~V03{o&^&b$<^VeG zCLu=3%`fjI;0zG3woiukEoCA4Q5@BY!U$P8ca0La8k*C~qdqsL++vsLJzIt??Ja;; z@lnJAfOX<5|JOI!1^QSU?VqahUO%O9$=YaJrK@(a2ZLV*7_L+o=Im8b#3)ng^?$4aDQB~F!azc9kKVTjg93s?N< zI%tGxmw+wKzlr=xy7|*}som>3B#zRr-j#kk^JOIwFd!Su7H1m(2LS<6o42tqhVz$k z^#@BJpwpb+KyyBgex=#%&nKO~AWTmc=?r5Mxg`<)tRtAWVLg%?DQ`nsUET9ZUtXwh zDM6qSu^Z3S7L|SHW-2H9>{7Wm|BvOQT_wVd)J9cP)X4gsCDN-U1mo3`y8xiPEZ#wE zRVohqBybDI;7EeaDNxfc_+PghxfThg{8VrS-5%?NHto2%NF~VO6|X z(pDW&lVIgXa+!$>U*@x);-;vHgTHX2gq5_xS8KuA5ZWd$-|;4Nz22enCBI{pC6c|w zUhQtsJNBr$MOBTn8un2W=m<#+r6?D5(B6_=c0@4NL8yG5C(&`(bJVNwN6H#C>^6V_ zX?l6cnEy@hr-*{UOX?EqYwW$Ep;p@y`i6u!4Fzy!jcY;mu;nvB#aCc8lny{JCvXiB58}925D}|>T0)JbazHM zLSx(BeuqMb_3LLN7#Cq!Z!H0*Np;#?aH!6`?ZM=A4oxv+?+$=T*j^q=LaX-#*z^)< zc8Ptn+m+1SO^?rMul#?YN2@wW5%yz+9<6FeW-zV-*rRFl(4&UZ8h`IA0UTiYw+k-|zk++A!2QS%%>%7c(AUnSCfhu!2`0sm(~HNazAcunqRd-t0+s3EM<``b55!y4V;lUBG8c+{ z7mB5SpiDE1q%s}6aJvlZ;SMB10V%Ke^8AEhUGX{`W3A#B$2-$7>oI2#mgEsW`^OxP zM%rFLC@^OPH$U;1i6+kDiQC5_bgJovq1q$EM8au?_nD!zgT!08sf5Yc0MUvT?dx5OD+1ruCu58UxNF zP!PVyRC25umH7Xkdy3kY4YA)-o$Eb1I93N~xGvPVQ7_j?42VL~+MXRU9=YS<6ypEc z5UVdfhma4+c2EYS90;krVOkSfi}+r>y@8&1ip03|7~N|ZVtQi8xbfChtDx-;^ify| ztuTw)y9D#{nl)pDw(qX|1<1d6$T;&GG2W3e65{n8P(Q^P&q9>>PE2#;jH>!fmI>J} zi@`_R;9M%o?v^xG*vh-o;8sa#?G?p{DgDe)`wPXwOdFoh!;MelUoq6au2@)NTS07} z@?oz7A;GwwL&zIbo7j=e8xnTO)G&d#ZeI2YlKNB<>p@PMuyk1P8d?(Bw?P6{TVs*N_N-CvE%p z$k$^Sfq{8w{1`dkjaHqlDG=8Z4y8{VEHT72N?r@)%{rh5&&67Chg(D3Q>2v-G97;>nAt^2zBT}NLF_AsSug*4uqE}TQKe`!7x^Y zh&qgMnRc(;fx(<}Yd5kjb73ORs^`+ew0=uFErcYgtVnafH*x9n*n|5!LwBuAaNCzA zbl+9WuM|9!IF`hmL< zH(uckD+kwnYONmyAd)AzReN5HnI;(9{wJdNbT=!=D?aW1^mK&%vdLdp(F>WBew@l zCVdae+=zFiIqDt*QMSW3%D*-Ai|7!5%KjQGfG}5$a^z^qiWqViq7Lr4MtfYeRpuww zU_D^9a(ThTLOluG?XFHykS6}6&<=sL%`)wVW`J;)&MS12Vg2|HEHZG|8)vJ$2iCY@ zSY;%?8m&5!FTJio&GnIU+r#JjM$X+T)GpZ?8g}y2EhKGbhARA&8^lEjq z@AkoVo@{p&X>>!$jCgS4#cQ6iIMW)-z=^dFb0wGNw53NZNhI1ez7v*zU-ZOBA-vM43;x(5aLV^WFQwoPK~#8u=%a>HE5$UU zKBmL{06u-F7sk5hZv)b$561{0?87-EFN@9k+LK4!Fx2B9k+J>M#tIE3I~t-KV@J5+qjofma)iV-r0rK+M_^H4^TlI@25a(i8)hRhx!+h)y#_agn)WjNLJ2Uz8q; zf&W+f(rA6jt8>h4V`e@q&bQm~L5C&fWj!KCktqKgagodYq5VbNO+E$`RKC8bFWs+c zSVP|z@V5VW}W!vc||xH=x&5_`4AUKM^Ys(#&^wx)=d#-7j-t8iYQxG;8t3=oT+>ER%B zl0rbl@*s4!;x@I1BdqM4JEEc0=mJqXaw1Xgt&6GRU%Q|5wAgP)8JAG9|;0j88GIb z!quK{mNJL&&@CvPQr~o{Q5KuOZLq86|mT>;^S(_VrbK z%#taFrp|C^yzZlFZ6)fIr2s?2%E3nY~w_qz9WCa$572J1aWwi&I_Fffx zfLe!1PqYA!=}#b?fP>eR{ky1kecAU#Omyh6?Z}aHcCFCTYL?BJCjC%< zx@dJvj}Ub_R2X`pHm-Ag)2wk}eV^`fH-x$mbl2_d-Zx|9r=mMqpM5qEBNjAjhXPxL zUNX~`Wm)^W+27ATT0KKo-(OVYOi*+f(0PTd4bg1nUkjNzH7UBFJcX}{!&29Oa+M~% z0a2va=4qUv=A`cXuB^qONg2P|V@c>!K{4jZ<{a)+#8_#Fw^xM6ly2qI8%7IJN`6x} zyb7MwR8i$PZ0YDzEq%j+0MG!?QKmNiJK)LU&Xh;YK12?oF{afogj3;UrEo$wZtHmY@8LB43s(S zfpEw@`vl6ktg2ZKmz7tX67j(cF9G`SAW~KE=)}B%_!J(p$!$@gk7-J zcSQF3_+UQQJ^AW``JPeWg=Md|1oMga%I+8AYb+S)CSXdXe|vS)!#qwn(>vZy#SI zJzV7djuN7ZaIakZ*di&d2)c3Gx0E)zXdKeQi=-)(X8MNGMiwnZT3C@ZiPHSnC@r)o z2Wi?O$wX=1tCXfGT8=bTkrZEKyOIU^UCC;XE0XyH46N|}uPnBSkSmKV+O@Ggy2u0f zUBo)kdM{^5QAMW9DC57BC56 ziLkoPZQo7TPTmr`8{tW$GljO(S*=>r=`87Qh5l1$x$RVzbh^+)KmDI)QK$=CJQDEM zt8mD%ahz?3>Pg%=6e8va$H~X{p!N~HT{iSREDaRi4D0wf%KKTC!=x(B4U>)(`j2Ia zCh2gYalNXe?~2PkN;*`yZw9Y@fJ;K`u6R!RsL=bDEa}Zc+h2f^*P$XeZ!YP;&zrrEP`PukzWs0o?Wto#B?kDvCQR)fQF_zgvRokI}QHu)CxN$bO; zt%cbt@L*1=F7yv%X|4FqNxvxsd!~ncE+V~A*rhl1XK4|GRq_;iKgp7$LenQ%ou;Ip z{`9+NC*rOAK_0=&zMB;$y;fNIhi{~vh1$UYekaZ1al3-lSeQK!z>H@ zK_r!5SUrk|qO(9xo^JOVN{M}h>eI7ahGZ5|jAgjH)5I<}m(0KkJ3k~$XPaXVz zR{M*E(u;-uuB`UW^uwn7*j(s6m?dp4v>nWX&!$PI907x$OZGz3fvom|LXYAU|7KuK zTp?lfUKVRAK!wJWTzgg_=9KLXOg39*mb9+WzYleJ_hm`X6$&~No@)#J@5;Cr-7p@( z6&c>gZeU2IXrx~h!sEj94q<7zfx{SMzD8P6=--P3zx4*UKQSpRM6wn7JE*ibb2z1} z(BGaVMHkxIvtZ2Pa3@#qa7#}V+S;;W^KCbNfE~8h6n3M_puI#kgWGwP^i;tBycz;* z8R4wEkjxemOJMU0aouKgdvW3AFlU6r{m-j~g}$Ofr^@tU7I-JvG{*`H6W}|VC+fjT z6Wqj66JV%}r!xT}3+)XFenAj^z5+jqJto7SrNEyagn#Dh%tGJ81iwpx&mJP^mG9jP zJzR#4!yJ+s7`HuAB~2@c>%q=T&88|9Jjf=>6(kqp;z;yO`-H-_i*eM3<5v?3eX*zm zBp+@=OrfX;lej){`UH4*MVdKLqAGR{tLb^>B(T`|a!41C2;(VJql7?mh+#@u*HHQz zDAj{)SKjH%kzVBtR>3n=!85@0!+74LAME>rAfDeA1o0fa`a^;5T7gq#+jASws|Ej` zc($;w3u+S1Bt$qQ!q3S=tRZ|({{O(!v2q0adx70yKO;ue7Zp^`Xz7qP44y3TeO@4a zUcffx1Iu7v9?w_C%4d{DW2IkiLSKPARz5CJ#>$6RKP~X}5dQAl_zx6#S_3I!eSd*N z&+Qa}V*}#GQ+GD%wKzXh#!7b({s+VG-loRu3(p3L4#aDg2cDKEZ0$Z{p#xlJ{PJmy{uFL$?HX~)DR;5 zt^oTmH3XYT6b25&<42~1Ra^>()S$6f;1-=!))9Y05 zq(k8iT>O`+QhgSiF1IR(;B z3fLK9*b3d`=yj4Mh-ij_s7yD%cn{suhVe`t#?vI@8Gjd^vBP+ZS05_yMN|L2aGP$n za+z*PGToA?EP^Dl`-yJ%{|DXf3!*bYK}V*WE!d62bQ>{@k1&jnO2+4Ae)|vkjxzA( zS26K1<%Q_0kp<{g-*@@IXO)7_yHAZ_-%>#)6tsVpPwZauw1P8ZrV5u#WsB7rHlEE z%bgYMGSvkC=(?70`+@MfovHRMsq#J~I3`c#1?SBP0;0Pxnf*z|?MS}DyJ$>)oF8Og z?N`s_`#wZlY)h54NQ3z_6#tuwta(3QOfR3VvtLx(w`!c}(vf@x7D6H=K*cms-K_IR zXmGXSFwZ%Vr|_KpO4XCtTXNNZ$S0md6*uK8Z0F$B5A%Iq)azfQ)XQGaSD<>5Iqw*a zmh5trIrgT~9yRk0w`Zpe^wqoCQ$O6EudeW7OSA(_xu-_xlR?@BlBiJ_vQl|;k$JNKhY4D~* zYfqM!Khjgv>H9i4L%X~f2HUlIxSxJG+^(nPb}h|se^MTEQuysLw=ti_++w0vR&dN^ zjAo1E{Oj`DOK8kV5g2n|DM^V5Nz;;&MvpSdfdEZ^2!MCNWQy~4fn(U-4rG%<1TF{d zg>9C53b@W4L%J|cB~@1ulyaKtfv6sZ3yZ)dd&ck5lwqd?d&NTAUZ z`kz(_F%^@=>Tx`dDRCnD3Hs0;s5(P5@;)W&0lm)!d3Ue>arn}xmwQFl0kM5~IAX#b zLuRw4I5R@jo2Nyj&VB%YVPGK@);Mr_kKD58K#jRRTwYEwH^x=|Ag7?2tc|K`yQjMF zx@lD745h~4oOwMr$lE-*LEg55x`u7byTjXF%2RmT8_8EY@_e;?;JGx$PbSqI}c4t*2n!gEhd3< zAF{nGoaIXMdG47}bqGDU}WO>9c zUa8*-;BBzQXxZKVS#HxT$R?SC&OBdDo>Y^^bktlKJ%JaaFd*Dws$|bYiZhfwLjZff zAihKr#W!#!!_AK}KFbw)_q{D+!&3+&w20 zOc7e3xxHP%>z%>ndA=2S($jhDEU5_yui(8xje4w8OY&GIfs@CYjFb1GjMHQpr()n# zKaA5t8K*+vWV@aTK(trkq&yj?sWML1J2+)2I2{~6j1w+cXy2kB`dMu9} zybCGZiIfVkGF}hmvHNAb5Ft^a72*>Ut>o$5o&vmRm6vHXO~xw;c=^A&gIA)AmmuR6 zdk3!xGG2@Bp;ftp*1%wFo-aO68lT6u--Q;9Y#FCfdF*@Y+dH)KAD3}DOR4Q4z{xv| zQ@D(iiu%ug2d7)P)PMh^?CjsUw};aYxzvA)?xmGkLF&Zd*SWr%xzabeY|ULr-A$`6 zbJ>5(coD5ET>aOG@^>>-cun}}3tOg1S8}^+>}UemgB@|CUVP|WUutz1f39z#+y2nG zJQ@)mImOerFs9#=r+Tmv_Jnikx+46iJ_bzbuelC`$}UE@3>9JciQ@p`MeO9dFB4u23LPn_yhiB?+u!lT6_ecm$F6oWCJ6Q(8{ z9g7@y$H*%o%}%g->i-`3gbd4qzXE5l2)etGZI+3?KUbN-zV~uXf6k;6gq{>S2HtY@ zle5@rh9Q<)JH7 z9?pJA@6GY1S7qOR(4pV+5)aCNh@;PVDj1XdXS3nU43)~RzZ(vT^zkl)wm=xpH z_5xmSx52`dxN?(2O06MMeXi|U=(oxZ5re1-3VmHI7~ zU+azsOo(fMX?mLLUzyNz1&sB+D=`Tbu73=!%k7ZtzUOkKU*@tCgaH2Gj1{iqrB=FR z33?44he=bt=K|;@m})N?S8BVpe&VSnvO2|D222mt;t7tBH6GhJ9F!4xFo=6$>|ETt(5Xc}>+; zi_46J(8d*~wSaU!fPnD%2O$3~E`!mKkS)tV7UG|!*Hm!j1f62F0zx33+Bs+iwQ_xy zTxnJ=^HO_E3puiDr)Vx5jBP;$|9r0YLR`w`rg6Gj+Z02uisOW_xVOId6s;3y;lvhB zn%?7gE@Zb|#KEG`5Wp8(7w55z1hqZBRPRBA#=F?=v5b=6!JTpYgejq5vM6&!Y8>49?{pM+C?6mZ6t?}ZqDKVm8iL9ZoJLjqSELsE`B zxFiR`7_WZ^?-L;gPOU;DB9dkwN3+mZAm{+$cfruAvh`vFlpFY}c+LbzH-rA5739R3 ztg~T-z$Z-_B~0qn<7jEMecijsI&_FUZeXFcx_ccg%Kd}nl|w?N?O%xEtYR(1a@x=4 z1lgJ}&v!WoSf~7grkngSSh?8f6fl<|y;D z@|y2-j_u`4iW!B`0dHV=oC?u6-x;1Q7`M2}Sh?vP?VE?AGmPNhY+l8~Z>e;;erssz zZ#I{9>efdlNZL#3!uPlt#?f~LcQp7v4HOy7&u?y3AyBCIV4y$Uy>MHt4He1l6jfoO zSv zxTfugflKzkaSs_U$Ju$LOjZAqS=yb03Pj?WjMX1&iTSm9v1}jfe4HP?|AUa(rDwN zG+|tLMTF3>@p;HV8`5ePAU=|&;uSJ`m@IVZJial^N&s=RQeTrpw>SKVbGchwCyIAO z@x2cs6GBl^ZR@BuA!c?y+f1lE3f*XE{lBvtLK_VYWsNf%)->khvh>D?#w9M5u`$}E z8rPW8;Hz_M>gqMFj1(7!XT~H~#$+^wts@ARQjmZ*1dH*-c|MF%nCFn@nGaW~*B**1 zQdj*C`WnD?jfWh{wL~P+J?Tqd@@mo25nuF}cdqz>Oh)c(h)Wx(Q4IK4egZ@XI9b$Yg2Zo^Ug z%sKvNGs&N;epb#iq0JV5n99ie*=0FnIx+_LKj}HPXEL=f$$Cmz-(BfIb^*yUFCR7RpUC9 zSF;&`GJ{(%&VMXmTym@G29}U9%tV;LnjYC5D-j%El3_-4UWzl{Pjd}>CgSxnA7vvc zCpz!$_VH-navz@~1+v*Z`krhZw#R|J5Uhr9nu{PbC*fg8pm>;Pt$Y`ZR#D%{><+ipcOqLlnaz?2 zVHcm0AdR>*1CzBmH+^R8l5Gi+X2;Ai4byi{Yt}pTllq$n)a=hhVzTgL)3d=)M1A$n zYh)P4j?f3}Xm8iie{Im0{lrDz$JvrEn~k6|nxf!$>O>GfV-Uzl0s_?v+dT|L?x(H%fQH7M8({v+_hz=_&SsbH zfVs3g2qrOKX=aSM?(I{HQ|sPFdjE;e>HGH*%*K0QUevS}V?~dEK4*jobb0%(pS0ZGR^5CtuX! zT668~u~bI=qXy;HX2*W+`&G8IHk*Aw@Pm|_5Nz}~mwr;S{?w$?AzhlDWc85`*-fIa zYd@g8_#j1;>Pr6m|8~kq!Bfs$irWv=>O9{tXU>x-rB_u%Yqh za3?}MS}H~)xVehXv9@Iaab|V;D3oguqIT?4!J3fdtCBOc1wZ{)DoAEmxaQ z=gozfu|e7TKWz12=XgR5bG@PU!WOhDjrt4T&|z>G{3o?=@WE^voe%|KA-2MC+z2Q6 zoui1wLFb^V9yL$m7^bQe3eL1nfpN-Q~q zV}3;Dc?NfqxlS1EleRTY9U!baJ1@G9;{GND!4C6TuyTW`yorz z?@DIBr5^7x_^xM3INq20U$7<|HCEw9t3)nLxfjbx)!`;9T;7+H{84#Ih{J8qNj@O( zg64dC=~{iokN9ld=&5ytsqC-B=QlQ%xnfi`jbXc8hwpdq+&jIj?v?oTNk6l9X9}U_ z!`p-r*nS-18&v^@po+E&<(E(8ABE;>6J z=B@8qBL)v;bx5Oqhq9!eEOsLUt!5u**%R6tcrlV}-5i$mPGQi8Ok;dqS>$l-*rTe0 z-bYl`@6W8+Ts`W)>mFn`ZyGaZ)43k zd)ruaubVSuF!|Yy@hp-0 zyFn4h^VdwyhYS4 z0R{?1F{jwCvV=&yi7Q~Lm=q<<67hUDnPy%}LU4{5*K#!LZeqES*QYLCDD+?}zG|4q z01g(ImGnwBzWpaxRN!bCzVqeXLe$da%`zMYcft{yc-jW@0ye#S`q(*YAW}~okSbsr zDqq?cXF)N!IE%Lb8I{+kD2g$*h~O6?GUj)Q7wZi_saxVHUSL50oMM}MX}KGAQA<~L zC-C9+ga`ydpSXW2J3`<`JT=d~3P#TQ_31o)IJ3%@{G=sKuQ146ZPpq%!?2 z!|_(2e004_7qM0sX|IT=tB4ERAOY|gyYlb5t7uQoLM`?Rsv=pgVuQ+mJOfHh(#NcgOL!}=Cml4p6bNpJ4#h!rbZ0{Z z8^W^$dRVGg1p;;Zp{A3EGaTeSs)c2iQBuriF1GZ z$)F(2+=qn*d-@dsVuYRfrA%BAw*Drw2g|CnPV=j# z$H1k!zjarnrsDr}3;truQW3k*m>p7jSao;}E1;?%gzALozBTQGnU}*3t9+kkdb=}( z6wk@HDi{l$*9i9wgaGP=7FU_h`*omUjdADq?JFMzI=GS^QzEQ-d_22l0VHDwhmiQl zi*2*5h;u!VE*O?Hx}HwQK}4{N&?lSt4hhB*>^-^V>KVF%bnO4{i>-y7JcSu7O$jl2 z^&TBUaK6U78@ADPqtBQfn~5c#=WJQrZuq(CD7z^K7q3DS^JOjqAtjtDW#g3gwEr&i zrbgDk{4UeKH$zBBI2s2`5tRxTZ~G4ihIYb~KQ^TLod-&dx0rznEsg*gG_aYd0}=4m zSD%UVytWLAjvp&JmZxj~MfXC(F&mC^xFs3waPTpk5WFmXS7(R&%>EAHK9Qd+)U+VB z(-d6f>X?}B=!-)^0bwT6EA~z}wT@jOrq^DPNfejS+mJa!<==f5g4E~m_13TAT?y$s zcQ&4Nxp(b!&G1b>nLqni(5G@O*=dyX3Tc*{xScP>*=P1WpYPYDW{GkRLK+BGq^HW`^ z-~`6qng$<447N9j(o7kp>-9c!<_xeA@6L=~9oOJHwVVAx$(yrz@_sgf2)E(+R)BjZCnpXV@_GOuO0(ZXbIBQr_&{#3! zlhzTo?!d-`)eE|Nj|GI#b8m2nHQ-7@&x>d6jomXFUFGT8W_dnKyJj!*MG50*@{r!H z@v6)Huf`JSp|s{5o9nvQmFA62J+!&>(ikDSVYIykF)ViMFGz}vVr4-}p3e}Xah`E4 zQRTauVXDf29M)V0U$`*ac#h_khW(v#GRJIyZ>9+8s>OXaD9HozHsy9 z5aGVM-fgX##x!p)&ATNxj{3%|fNA!CwpC-Jp;DUigY&fd8HnQ^OCjvj5CpFgH6CeC;{EucPL@3pRueS1~QxVb!cKR?W z@Ilj~cf!}zRGSHXWOBUXw?%!><5sc9sJX%ZV`WzCg0TOrb+DPk=@?_#GC~90O&U%bmBB_47%3#f4_c?t zlBSFg%xy!45Zb9{p&5-)jmeGE>-8DVsg3Y4 z&_UO(#m3q8eE?C_=oEl85lCDnwji#pJg&UrY->oD*7RS>o@6TzKKNa7_?hGg_TSc& z6^UrX=o0`odLb{9kD;Az=HgsRR~KF0X^z48FkG+jF zfd}oLC5U94*sR4CXd%66$+wts?d?|K36C#^U3!eNXa$|)P^!anKL82QXL2H*)Un;x zm7VO5G73LouUZA6=0zcF&}&_JdN*#k!)Fvct&4q$HCTJz;A&p%@WouMv*rgpD>!MF zb!{2PHc*9|3`x;AOWruxVD&XxrA8}TN6E{2pD=pqL>|3~z6AqP^l!ox)9|$bl>Vel zXVZ$Zjn*^IM{KNuWZW5|m;+Uh&6Y*5Hv&bno{o26`>^D|n{Kg=mHd~j_F9gP5 z4$816f8z@vh7QE|wcId1TaEr_&(I4xFDYe@jL}APN9-0>F6ROLK|Y*uu&3x9$_UU; zT5T0@WjS0X1(a}?ktx>{V9L3Tbi*SP8cT`A~$1V5`TV`!lHR#1CX9Sj= zM)_wWI1c+6!EaTuCxg!?=!t9T76qRRgU?cW1_6RbF$rM~=pOo0r~(tN!3@S5Wkr}j zunth_1uv~$<_?XkeYpCONF0uaRY11xPKYSoC*SLX^U{U1-~iqlvo-FwX{*;$ zZ|Zh$bg#xGr)#@Qqg9g)rYix@p;X*wAV)CeaMd}zVDX`Ogtk3s?eVM;M!2yCwz zRdOpQ-fkr#*04#0KAM?8&$gb3xc+X|I5V!_{b_%Mz274|+WoNwsv#AN3uc@Ud`8g| z^cWL-jt)K}={Zb~GS2h*d7RFrjkaz=6j^wh>ahS!WdZV)3u(7yfIppAQ`u$ z?T%;9(G=R9b_OTPH!S`y0?o@!Uk0QfEVeHKrn3RT&@oZVhKP$PD8fX?xahic*<$+# zF1z9U=L6D3i}&yNO#vUJFD7EX{gc6U}jDUs$j-UL-iB(IJY*7ZQ$9 z0{epg78&q9K);@-@tlltzwL3q;pmaChkuJugu?An&{fNhP#!!F2cJFk1l9b14~PqE zr^`)m4Y8fX^*quMiz9;&x19(`krrH9&>8{*0en3kDEY`@4dIO6sHG1r5cC1?k3oQ~ z!RH=&njXkJl_HK4mLx@Kg_TLkDj}a8pbyf!7F^qI>f*eAf~Rn+&XGkGc^A(FDpvWo z|74&F@#irn>)YV*KM?A1hrCcTt}}FEOmzQ&Zqbd45EW$&M=oNJQhI6ZVJRBeH}#>+ir(?6xGn`N{?kKZD}=!aP_;g=C04Cu1pb16NQ zQ9^L51KwXDu%~LU!qVaXx$gyw^n!(%s4Lm?loQZzugCAp$?h4u@2tOUl?D6U7|2`t zhA2Vb|D`a#PE1w0Q?8_GyrCylz-=}Sp^&zOND^F7FZ(%_3x)DA2Buk2{pW=!dt<6g z9tLu`zNn^HLyum-l{~na0|zF0S>&OzYl<2h*MoQI1+}|>S3am*% zSV@4@?K4@Vi59k9fyKk!0qXIKfn6t=6S-W{IHQ$vv?{j@Ed|c8nwUdIkTXL^ytJrVYq@MiF8F8 zr4Ao&kwPr&Il0hEc9ovYM}G_2nU?w;3+mu4bBDCichfB0GBY?LUVaDUP*x&ET`!}=nrCCcs8L{TE z6Xq_ArP5rUouFLp$ITAUYsxO^>Nzty!FSdSd!^T{@+j$F%U-5R;EvLR%~&*o)WVR0 zY$-8L1YJKiJi28C5V_drlntxP;D4i0(|kwGQlFVUOO5hgM_B!{e>V3>4-NL4+y7){ z8C0{>Z^k8MUvRbi&whe$4-bB9hI*Qdi?=}N|B`fhtN2>0BSH0U?nL%SD&g?(?R(5P z@yAxy;|A;IufA{geL(0oDCm|*W`w9n=9x#yuWomnmA0W_SNEEIZzHp5yS4XgcvHjB zLB%dmMjX6c+R0v_pY1P$9-%>cG=Ux}Uo%zUvVzVRA4QJde*_%79`a@T>t;tjO$f+6 z{%P1yl(yV#Hf{*nJ(2WyUj-Z{&Xue(hN^^6_-xDL$&|stHI&1dviyo$LFGPKXNID& zRD}JXf_7*7T52XKSqSeMv#%03cx#kKlCbk5qV^PnRBnbX;07wy;hO+Fpi{WCgbh3< zPqi{i$5h*BKIifIerA?7nAx8w4TsfQ4Gant^c|`RrPqlMN%PHYIepKDy_W5R!0_JH z59{Sfc{nI?c3G~OBD0BFF>25HOVz9$)frc)SXQvUr_4U9S$fLM_EN(C%h%VyMOkJ4 zKQjz713VU>4G35R3Ns9#ya@vef)y&-u3F+tFDn#?mb>CssNwG1vEUiB7N~SaZJTEd z8AuAKRn&E3sF0LeskW?ivvw&fw^dW~mHB_qok8vQ|NZ};&wS>2o_o(d_uTh$&pqc{ zNnIIv3<7dYAe|2uvk= zH{EAfSsZ$YDt1;uLZp`djmp@W1*f*KrfI0U?UgLSm$zp^!GDy;1LeC4*b5X=sV;(2 z>!O6dlitpP0(h=M?hq9a5hU5i1KK-+XfAo@60RCTpPLt608KdX3~U0WuNqY#Y24c8 zcue|-J+?G5UzarLS`nNRjHN#(?t(=TB(I;+-%i6cfD=2Wq%e${!Gr>jcba@h0b4~O z7|d>Vg+_(5m@9UTr=qfG`u|U`=lrx)pVA$n^4J3Q2*K~FqYOAQb{lTjWMc?&QQEO5 zy5!4);RT-X0{O>jtdTmV7*R`(wF`a-D7Z(Z8%>vpMii`hUNqOeJ5f?^pUI9>zK~;o zG3~fY{?{}%n{t4O8w(($=-*0us=Z#JdI6*)Y?$KdQ;dr5^ule@j0JHV(P2NL_XyG8 zG?p`h=nTDZSH5eWul|Qpz0b?x-}1vBn08zv_f2Cd1cnU0rDtCU$q1})p%w2gnChUZ#ZQ>}?OIwR#|>+p>w?*wth2w34S1aGGs3j+phANOxax(4{zUI*C4ept@J z;d>!{`8N_ouyWr`9&ESz5Hpl4`DgxUo{8K)%a2T?V^;*&4mvt=tAzzP z@lOfMqDB=guvndfwVZb;&fw>G!9YAo@Fh>)g4f6C)z<>-aK4{kkEQvQ{f?qew1tV0 zjc?^UU4?o{fiu9ZTRZp#?A@w|%zfMKU^--gw?3|&=4 zu6S+mSZ$lZ3a8l&te60u8G3k&IG{4r_7= z92Hpfju$qspukK45S3dCK_FD}A-_iGL<&t6*h)Qu zL<_oNZ~SHOOz{zX;zz$5`VDjj1KAiNgS}04K=Xg8&>1$Z*BR*Ygs=~$AaK9jd>K|g z`DIRvIIb6eWPoHfgfEr!vWAA9by;}xEG1r~pAm+q%~umtmQ_CltXi)knT_9$MfR@y@q93c&S^KLOjHQe5+9b?+)nQdU(-%ji_Qf>3?Og z{9%5)65FaFg;ze3U#{?G1I3a2A;CKXFMrQ37rYDc@_v4^*SCewQYbnP=l437k{{hC zseVO`+@C*mZ5Rj9O0V3PAAfDQ42$)<`OQ~{Pt=8lHtH?YE%l36JOj<4VDO;vSBB-k z1*&k$Vnl^5wjvzIoop?|cD*8qCRR_V~@}q zo)7aUcA)I5JnTL{qcw1SF!rB4^oFO709-o@oO@i(7Qg5~CS(vD+#`knV!t2qFZ2|H zo6mUJ!Ru&V^GB)(O)_K<<8MavoF7q$cn=V@`eAp_6FSJOh@wf$(&=1N#qOl9fwnGZ z=U{riCpEw5JqS`*Ca2GXg_>TR-v?NoPRl-*rOo=jMjYkq^3Lx^-_!pFCvE~m~F6j(nCj^0_2c9+%HjMm|@hLZ$Z(CA@Cc z9L0peBJ)L)rCMKpJ1%}^ty2&rj_$}%6pHyc71L9y)Ha&4T2+Nw3X1+k&}~x?q@y5b z9huVr(55O3qtGx4UDc+qy22R}I=mJ+;4>qDnyL$V2vt+)T%L(*nNW2$kG4|^4q6fF ztRS4rH8J(gpZesFrKj@5^Hrzv;9SA_`T;7!H+e-L5D(>Buw&ZTE^3cv{UNK`!cgD1c$JnAy z@#JAR#nf-A#AEQSyqK*+k14QQJdoGxtQW?8mDc!TbFG z2k$NaH{PIM;=M3FS!Pt7N{%lh3?t{MJke&^V0qG}?bhyTQqYO0ye5xbzPWzHtwWs( zACLUoT(B^|qqZU**&>b&z0M;q&qaOyf=8~T2KwK4h+ej z1&wp2;!9pM+4sp?p7*bg9|AfKsN{mY@{?Zl^0S1?`9pxST@|w{W;XkbzFBS_Ne1J8 zP;6Qve#f%&99n>WM^QdR=tBj3ha}!sm6k_}Tnl9E8S1jbSX!Pqw%C8xz=5q10S0@9 zHA1;io8s1>f8j7Lmz|%2-E}3ar)obCd{pxvwMU;P>+{&p6vE!6|BcmZ_~gergSiVT z#GTQ3a!ek(gOA0iJn$tfDz9!&die~fLo0@0K&-6_rxvgl5}8(oK$?qgaV!ht181gy z7oY_%Eot!V`w_xcA2^mUyfkTUr1P0y`Y<(VXwvZEyB^LQR2}Lenll=&P4&rEPdr(F zE6G;X9a4u8*VRT#8y&Idr;hApTyf&+xRC0$acmBiuk-X&2q^ptDL+mfvJ|p93b!8o zMoiyryk(s!B<_G_RosW{B<1B>`@1*n1gkzpu>XEF93YNWz@b@Rs=&UUnvkgVt%2;H zQz5lfi|?Hc(0(1DI=Z8Ge8`hF)$(B1Ar&_7XQz+)dOF#-ti@%7d*eQv|DLNXAau>W z5KwgO8r!%d$7$=ew0;<47lW4CH$>NMm7tN<1NFC{J;qxat1=txU6wzkHEfQBf`!xZ zVbgSy-n0kApY`Gb%bH6#0||8~5~A)1+3#e9WPz~_PQ1e!wm)vEeH<1Cc<*rNVHs=< zn1Fz@#xq-bt6|QdtsZ7j)_MNTF8jxw7o(vc@H^@*!#(=s8&k^3Zb1L*GMe+fQ zXkWeXaOd@Kt_RroK(2&~uVZnL*G5ffmz)kgWlH_iF3Fpx`h988H=pC+qgN^aDwjP! zwPoxr@;$lE)*klU)XwLoI=LTA_gVn9(t)Ep4F$!sE0Ma;-q>R%Ji22$x?aK46{~c% zztR#-2kSVrI72)!q31l4QkS8^7N;kJC~D%i>3(nT@{>eQszdLRsU!MB396E|+rOZm zTejOJxTru9pNt>;80`=I{^OgR7JLwyPdFVt4ISqSoagprDjS^VI(50+EqrU>9yo>{ zL!RY3$K*ENmTTFzLDaUGebzKW{TtAJji#E}8$=lpzo)V*zlppXLB12dn=8V~E5a5_ zk+GI%sTz27)a}o?DTr#u^$Ij^Z7Oy?r&}ePr`Ck6{dM~LIl~yD{Coq4$RK9IALJt>e1$9N#xjsjDU496lFc>}`XTtqr-{@wdX$r$5&34?De|%Cc80 ze$g@ovZKcbKc3?Ga0&$dydKUP$8;UK)X{M+`*&ji)@2;i(J^5+rllmI>(E7nBhY=a zqvK=eYlZr@unr%abkem;IC0_y%BtVFKlH>8l*M=b4ZfhG&TXM59Qq?21mHM&v49REBZUN7vyPiLWvv4UFMSUFoQDNXn6U?aUoP0a_L%t9+xt} z=~SVVh-)%V_Vt6BEA&-4x$6t^oR0X=U&eRspdJbUVgL1XdY4iO$fbOyLX;0*=YaWo z*FvC6iEcMxt`EjIxpNiuAz#Piu?kL$!k>2eFJci$#G_p7ktr*o2E9f*0DGPTbdOUh ztvj36Ni*!(m=5aW*3=dG&nMX8{|Q^dVe8%1>^^#H12COAWHBKIQa+Liy-8h)&7R`V zAb?oKnFI?DUG8ce-prs6Noj|ZT$|D!D~0134#O!p!uq`}&R!^`BOu*APl64sZMwZw znvdsvdzDm%XBmj2vrxwEUU3-+ER$mccPhTEYb1kG|@1pL?L;F87?yZb&v-Xdvg-40*#DtJXqMx=dQ`hZ=vdN=^KjnIU z%9Vf2WuIlE97pa8lh5TAKa+|{Xn)wgeYWg&tvKMAacLn-rg-~|?jZNreQi>9>rDCk z+`Z=3ML4z(3T>^txN!TF)-}ZoQWrQy?aXDiXQI7L?~Q>c-=<|M+_ZIeSz!E0@5P1o z8KiMEZy;9+JZ642Kvd1x95wh!ZkMys^I>k$an#}9hxoF3KFEc9P7r6eYi-$GUuanm z@z_%Kz>4U*to;*e&v@Nyx~py3>=1=RYc5+?JltOmyDcTrIlcF)7*M1Z+)tyC-ic)0 z1a)e>6qp!jvqoo3e`iAW=C9>9h(ovU!5{1~$A+;tvM3Lg?SD1?qo(jc(Ah&0&US*(r{?+UK0h0;IvQW(W!sA{NOP=hP- zo&PKQ=u#m6ngDCC037)Jbv9d@+qgFOKS87sQuk6I9c95}E2t%D+{Lk%+ge`LaU%q$ zWJGtCD|74Hntiv0MoVaO2!b%q8XwJN%ZYceY=~_v&ou^_aJo%;^Ch|KY5tM4__O`Y z9?FGpC2rDi#oq8jVGq{T#-7lzLSl89CluDi>du9^)@6Zg6IEGfNv`L<+>U{sE8A~| zo$d*3SM}T*%Qg_u;61tGrURq_%kHHrkQU~_BXZ3^$UpYHIJv&oSdGpvEvwTh`{D(u z8dengxL7tL*Ai!ClX!<9!6_NJDT@kl2uLXHqo+7}9HH(2=dRG!0LSQ-R*apB!OUDw zX0ALrmjzSBZXEyV{%I%2e`|sp%gVvjTu(|a&3jv3GqGMXb~F8~gxc;vFr;vbi{np@ zJ{sUL=E}xgL?fIv(0}y)JY~^8yfJeQs9gt*?AMgLq&}{~Fuc{Q%k9QZ-V0w=iKErQ zf_>bUwtG*G+Vk4!Z%sja67Lj8i`qVw;QXLxPwRAx4He&G(}@8NwHO%_bZ~Ff_BGbt zF|93K2aWB@_x8lhp<2x*{Kkd4kA5uc8`HPf+i zhq&lTN$hZi=}kRuD0@5OQaLZp&Jp?Y#T@c+F_9POXX5P2j6&MEoT@W9x;_D#I@^uL zg_t~B!b4&<@!f11RUN-s62R;f^=C0gGT>;zo?Vx#5XFXVJw1+|rSDmn9po$*^=S3rN)D zM6?>9$oES?8V|^6hbFoc4+NraHZ|6L4*zy-YPR)xnAurO zp(VX)7*OA|Y9L66{Mi~ISlr_^Cw~;*+j1yua9d879Oc=TBX7%Lzo8Zv zZ4FyPODUdAT`z`WAH+auCqN`(prPCntE3X2HU z3+egB|AgDaR^on?lFtLh*?g`OStTWbet4To9Kfj}+snJKa#h1!r`IY{dsM>IF!`w* zoDiYEH>jrEV2XdEgdw$nqTU;WkiHti9*EJo1 zd!`=mR(9-5)m#a5%6D(s_xF`r$%y4ZNKCNB6=80pxd&GfMQ&}9GqSeqyQAi^bH}@l zUFNM#TlR(5KrE+dOv0f6I5E%Zp#>DZH~}gg#{&$m>yV{uN!4G2$sUTaV-(hMh1KyW{FBTpvUd0Px|BC%!ws5uIh7pX`GiXjP6^51-_`2ni zXa_0ZRj4|eV#9uJZMznvRtSQFT?@WP)Ax5?BBY&Uz_&2qcBw#D1oZhl`w>)-2?*NO9Co>$Fc^yOV7h}$n84X*k8 z$PfCmErN4rXv@RFqUp%~Q0GqlksnfhNH6dDE_id706SwPE($nKbt09v!*{`2ts|2C zm%jHrtU*iL`8;Yf`xvLD*ce@qS}L_cA+E0*vxHdh!?!&l=JE_!ApXO9K;7R7slAQT zZF%^13Jw|kqq$3N_b{{i2u`Yr#5S32APBbxSLQkQD?Bykp0-ewzEz_h@FL%@GZBjw z3cXBO^kYy>Ao*8je7T%2IolL)Rb~sqgpb+2afZ2}%~|su{Czjr zm^~Om1>6^xZDyr@65DvjzU|~-p}EU-%2QyLlg#WiMcATikHY;*a7q8UK6sYX@|$X@ zoMe|Nf-IK6mdNP$HSQo-I6DJ7lg!Og*U0(q96Zf_2~YE|5x5IJ5aDOfm9BvK+$#5$|E-6NXI(+lEc zpYehmWImvrDwdDBDsGZBX6RoHiB}=Le3YrF#-UZU9=7@|k%P=jy=A!gji15IxQ3458kdFypY``hkDLu%jdJ1o$43eUR|!H z>*_w&$Y-)S*>{u&UKJk&4}FrV75T0VZi)O&lP1982(xOG7Kh%dQ3;S^N_v+j(9%YV z6YRgK1glY4U^1*B&smLMWpA+uO&!brnO$FBxAzYAA*ULSYHsM;al-$Ry<9OATj1-# ze7)sut4;`rFYU=b0{4BjmN=s@<7=$TnbzJb7iP{(+OeYTf-wjOjd06Rj7m>fos_#7 zH)2As$70Du_p@?YS8i=mM(*x*O|MpghGe@lKw~WgH_by{GW!sOlBX4H7pH3{(WO7j zo5u4-_E03+C8QQIEA$Ka_-JA-4z`_Fx@T85#O%#Fz<{@bAbE(k9qNSOGuF2+Uoehg zTR3o|zpNgaY)>ohjkIb6O=URy6UD+r(v}Sa$!*z1r@ZW$>?3VqZRVu5Hg|7;0`?vo ziPjiQFJL55BvhzRN0<9hr2bEL1qDK}-)Dlu`BM1NBy~!>mkMwg#h&0)th%|zm7ew4 z@gcs-#(Df8mduJ^EoiUh3>i*_W8kCYTdeJBaY^&vy$BFrm7Blu!mn5Xbl65*sY;ie=_*j=GnB*@x{yxb0_i2RTVSX7e6&Enp4P1S6||#YLIBR{ zP}qngY^|DY=a|0CVn=TfLiN0vhkuqu`>rDtRh63szKInR0_!X4kwfUJLp=B{3I;}; zg0niF^l%n?`vywhc8o{7!*TBCIOBQZ$sFgam!Jg*6s?-7zwqEmH{o2(lkU!9ul*9I z{1>VNHwBW5h0?ApyZS2ba{Z6G@y#sgAHG6FB?dKiWqEdG5%Qqq@0+a{xdZ!P@%0*2 z5NpY5)yg}v*cQT4GF>G`&)pvuQ_N;lEX*xUsJq`$4o-u@A_!ebQ77SVs_AF}+*9J27# zWDUJNjpkkC)447Sy#Pm;n70}*lqgJInxYFZ)enW!vT?y?^$A z8a>`e*YuMb`Z z(}VD=E_t;lJWCGGVvI1AhGmJx@KU^kV3tLN4Bi5W$2~z=P>^OKdN&KX>5pp)jL=r4 z&FT)9BI=^GG-0TzzPsZjLtQlHG^XUA>F}JzKZj`yQbP12K938{w{V3;e6vfFMeHFP zFHE+<6APZmJB1jv#ymve6XBPET&t4ivL*`2^s^36#)$ zn$9SAccpyFFW-=lRvn*wtgBs<*pj%64G}F6hS*x5B(`j%!a9#n2HCGoLR{yu$*mFi zc$I$~o!n}`hnqgSBV5b)*}y*t2YfIa*hl`iY<7g+is;-9W95U%q7s{Lj-ASQfXJlw z#(upH-i`u8nSQ;>CR;tJwnnjkR_x+5Tp8HOJcQ(ck_4vBGlE8T47}c8>sFp4bkyss z_D-gbje{O2#%XL3Jd>d`!5$%LwoLhck3(6P`)~9z-OSv+UGkJ z(5Qvd&7nhw-rZcIfT&`u!3@RiwjC)D$F}7V5!kvrLQDx_UCP`Nx3D}+|#avt!TVSAih9oIN2lK@vT{T)+zLS-gEkR&o|=&ORingeQ@c! zkgZK(5!D@gdMx{U z;GWyxFVJ?ndjsW%CW{&$vs4a|lbS7>EC!PqD7frhYoWfjVDe0DyJ}J7fk4l23cHUQ zaeeU05YLqqaa6nNKp>k-L9OHEIg{50EFaBg5p@Ie{j+mrxEKwhmfBL+C|A9g+OVs~ z9GCi=v=+z@LonlXNIl;~1|M5vb(UF=YFoN*WnZNrc}%4(xaKT$LWJ0?$utD{^i_V` z8y^N!+91yEZ1Cl1q7cv@Gth}4Vs~JDkOwwR80R4&KEpgsH2s^>qFQRgu?S0K3fCY)q6*SzYd^k zgI`vhzvC3TRwIbw0R?oThKU?|n51xw#s!%H9X4!pdf;Fi^RI3E$eM@p#E1JElE&aq zln5JEakNouGD(pw)G_P#@5{i%MDagRyl=_iWB6ny`zN1jzNPse$|~Pv%KxHQ*lT}A z5jXmXd_0qV#9@zR%AXUAQOo$#tYsfigfEZg&BMH?oGo(J_B6hqDMrp2;O;|R-hJuu=OTbEDm1Zj1fyTgGHl3#}$aabDmTZYci1*Rx>^9Agt@uV))LHk4h zJiT5SQ})+oQiRJOBp9QO5pGRIcoL4Y+|*1VZG49gBV-8pnM@QpS6~&Ou9W;?%jUlW z31IgUKEQ_i`HCt>CU}s}&6)8Sbte6>T&Q)vMlkG!OibtNkXL!E0B*!zwVb}Ie7D4D zWhSc2&ic&j+tUZEXKFJ&b(!(zX*Z==3EDSp-t@c_u*qy5y*mSz|6%|HnNL$**r507 z4h`o-iNy({6`J;)1r*3-$K$@=*>$uLX!HwiTGkL`8tbuEky6iwH zB1Cd)E*P`fuc<1*j=xEWz!7ZDu^JSp`p6hIn<^e&bE6Ul@5$`iahvC!O!=Nn_9vp) z4JF!Mr+~(0bLbm#=a@2IpOf#-1fTmOC0?&&cV-&3C0&ACkjcKMAizk<>c}6Baoi9b zG?k224CZEbIW3;tOgT4`RTI870o%Wo3~r4r05>k;*gXoi#t{fdjg6;xXgoosis|Y7 zrgm^SMP{I|m9XFudv|>=$7RyC;1DlLqjt7H=zrRcmhQwp)0TI>;y5T>A<;NLbVlf7|0@c~HVTkIDdNxt)N z*e`~-P)mV)5Gf&*~{cO-;cs;#p zzxuPo)T)LL1G{F+ZK^efzH{D9_vS>v&EqMr-B4{G;PtvI6>6?x(gt1c6J1pN0eZp3zXvncXxUek zVrB3>Av(h-bA(ZoyRR5p|-r zp>_jz=&XW6=h_WdyB8U*#*1@$k7<+9V-)OFYHdtS+dr2y=&i+4gl!3q1S@*Ir{)=Non0bgFm`*4Xv32;P1 zyEDuyP}lqgKieEAG{fNEX9!R66NXu8Mx_=$2VwIbxh$9Xv4*F5EY&^COr(KLV~H8! z*cP;X5Z23v>K<}f5}&cUQc-@16qv5_{$l;miD92Uv}qE!!6Zumf7uMiPonm^*=Dde z4I%%VK6HKj@nJEDg=E03l2Q)N02sGbasE&DhX{T6LoInuVL z)8#Yi>=XJ#ZyI;n^J99KQ@QF}{fAf%z7S)g%BzRr)Hs;EODT_DV~c%l*TOMRE~^)!n$&FSu8hbgdG zH{AG1I&P-oDJ+)z`~sdJw}uVUGKRC)B^OvT&;LBj@#o)5`S+!($>lor4}FtU-Z`nj zVR1T~daEAVUP0m|Xfbocz4`VF=CP@J!bGv-uW3u2j}L9V zlwGY|_2yr&FBp395;@WZK6%$f)=u;#gpWyxGg)810wK|fj4<8Tg0Bv&uYZY)uxHeP>jzDN*L%fmPg$huX-f+(q}qM)J!HrhpF z5QxmCQElNB{eZ2b6k=q9M6!IIhVVR2p=?b$xeljuC;jS%c~7K6qKn~Ec2JyKVS&L= zC!yi$IzP}*V82bb#5pCUWUh!bt$W7x`diSPLFa?IG47Z4=>~G0^BYPhrXN`lcKC@E)m)a=!Yjm-zNCUziQR3Lv7HRHCjj0y3x96t z2GGGTUaiXm*mi>F=QoA8P&XatH)T#q9jA@CzMt#WP7p_ROD?TnV(A*pRWts&i??SX$5?I(w>+1~4e)&cLg>|7czl)F26YxmJTiI_OM z`?o}EyH9qsIdg&?-N?_^W?u=bae=Z{RNI)Xab2CQaGiwBRO7$WY^58et&+V|K9Oci zJ8Xl)+t{u35MV&pk=*OsjRRwgluGewas2esu++Vwx+(GC@Srx$=21CnK9}a%sc%W7 zVd0L&n=OaUrYJv#oS99^l9KN(Hz^C|$K9%%6sq=GQZ!%X1goN4rcoh>Q$zh`|l@&tqA}Wwodb z-9OF|5o@NyQkCk@)=8h8aQ0-mtLN&Qx_2*2h2n&Di)yYk?o4Y~&>_WhTBld4*d3hM zc!JL<;Pas^#~sU}D46cah1TupO?GQs*ru5z0nmnmbr-T1HrDcaNYNp08=tE z+*%eUnXF}_rQnLnTQSO~-$z)ZtkW0Zi6T(47k$MAmu7Elde7@C1d{94obQSY(?y@} zjT@u;>$!q~hhcr`@giU6T|I4*cw2hh7-vQgvH&nP%*ZCaY)r}Mvs5*4;e`4Rg!P!qdybN+JWT%KIuJXN%DV`@`&o>umDFX-;#8eLSy;y>$Q7G3w4;$_4JU z^5LsuQ~_>HAZ>GMTm4AeeoQd)rgpdf3UZhIw8`8*TEXng*%k>q>f zGmW5%wo{2pj-D28lVlglQZ`22gF2o!CvEQHP~CzQ@iuu@+KB}UIIOLR(av?~yNYRk zY?vN+;x5I9%9xU8sioX&@Ygzszy86Vp2zXD8YA&<^WabN_|*N~9%$m%!IbdVgkdDq z6)XBQ{^j^I?xoNb9A;y>bwb^Dsu0Oqs_pgYyRGgtN7&G%t2q0QN^6t&?CCPz1~jc- z;m`e*-`Ii&?LC8_MQ7$Ndfd$HVY&(7;#dgG5$2dFuCZIKrD38ry)--|1Q8$ zCUjd}agn{#Ntz4d+4*Et47>qpdBbhofKFXSm_APHn2EPE>B~t~p&TO!&Xv=*#6|)QKsHt!cf>|yv3p$jWI=52* z)gYF-6pfgt{gZ@zAhqTvmP)Wit=_F~d=hZBOF3cdesv!ekm}7yak?=IiFMCk=+;@_ zK7M}>%$Rq1rTI+&g${SE%DXwhyYCI!9=l^P2BIkqDq1RBXKvh<+K_<}LZ!QTej80N zO|n9w7{^TAzu)9;7Z#(vQC||XmWHz}sXi|ZMFYcvFk|^69Jz`Ty3?9_uVRK#(nrme z!cD29I&+PtHX1~B8bV3GEb_>_2wj$QdE$CR# zA=)GwbjV|7(NkW-^1J2V02Lb?K{S(7jD6e)B5I-vy}SU)SwBIEv)Ig33r)K|Jd28! zdxeAFk#h!KFMs1eA?~!H-B-!S$LW#f2doL5{5i}`n7hW3TAtmU>bIf@ShoPR*uj(1 z-7)f{ROj_9_*{1@^gO5EXXTSs(F(MKEADozJuIC#8&ayi(bH?ohCf|y=EQ6xj6}tW z|7~r1fntd~?w*7fr}p0AhSw+PqEtNjMgjn7Y4NXIg{@yms-@0}OP^z#W>QJm)12P5 z;C$tPo9Gp#+6kBkzg@m-o_EsREwG?(N(@LCyIdTrcZ3mMxPIiBvEPr7*TcK$*-5|X zqJXjG6h8y^VBr03Lxpa;Iw#oIgKa);-)1YOdMhI|s0=C4WgJ(#kL#XuQ>~^_qO&PB zw4vdNl38{Bcl%^r;?G56hc^|mFQ~^L7@P&?%M#dB!qxfdB&!?)FHR8NojE?q^YJ9` zWpFNaHLvC@hu(c>3`^&b1ArX&pOE9hXFi(b`Dl_&L3)(r0JQY2Nk`(s4zKp}Zf1hs z7-!mvZT}%!kHK7JQW)eYu(0BM;emkN=@VEC$GaPN6a1XvTa%z1@dnXQe$HpSCGVev zES#v{;@v3CwV+ zq;FUAKvqXs{Qh03Emm;?LO{UE8)X?!WznE4AW%Yr2%eYJKPHzJ4-`qx(0| zt-nFr@I=sdVj|p?y>*?o(vK%%tgh}AmsVS_*kWkTp`^a9*c=9jG>qfA-i|)}X&nCm z@E^T_|69V}Px$xx@nawN*NNBnaaax6WJ<{POynCm=ox0D+Le$gDy7y`s57=ow4sAh zT?WlwIc8=eaK4W#gwBFiJrf4_}BC341x2~Cw7FfgEXR7219LZJ=?hkG<>jwc40Iu^87nA{!P+nSeN6QFBi| z>@tl#@qxbK4a@vnM1%bX4ToLtyBklb_x&&$H+hKd!v%w4Z-6jHqTisM#fZW0MJ^Q1y>nDrSY zf4L%+>iPrG2Oy?N3!Zp*;kt)?yQzfS1vOVTRwGU8EHu4^%Cl}qcU8H;zulrv%(q+Z zfq27KdJTbK*Lo?X*ao?;%Xm9GmWUuKx_mB03@NUsqQ|g43hl!>?q8D^Qo_!&DOT4z z{{C^>M9+UyeEnm?NdMUUhEiT&f~)2!>^>^3=KE+ii>Le-QuguAqM7K?ptC>}FKm8C zDbF&!ufpwCY~~1j9*6%F@CP~kl@!m_6u?7Ydh@$VInVTdAka_sfyb~k4t^Nm{T%$i zDV{R`uZ8uUu=x|EoMw7oP54ts62$WaZy~{ZJi)(GJl_!h_bI`h0XQ=bz(LO5;ZyZu z672qea}jMDFf{IBW4%d_3l8B`7IoES6rdv7@#bGx9pT;lbO2lh!Sz}B?%`91kWSTn z|3w_hs)h_m4t~5j^uH|X(4iJ;!Z&2CX<;yd0XyHYm2rN&z*tl{e z4bM{vM}L%V1*Q9>h}L}BD^7)pt8(bIVcc(up-ocFdns>qyq-u`4;e4A2Tb}nCuBP~ z^H6uE6N)8-0#}caj){K0o|ch+Qc&mG6zh%|{w9`FJWrx(;M%Wzq=kiJ&$Ev?;O_u9 zlh@#u6wel_!SnECJf^xbiVbjp3INRF0DnsHGynigp>*f&nNjQ=9{&*Hi+OxqipNIr zLtbh0?wK*{uROj4@w0jSA5%OJQal%*1jJ}6&-+k$J@a^qry8K~ zOY(|7f`7F5mSO2(ahAolp&dK%WLTMm41JUjd&??au#&laNNS+BJ0*p#HaYW1if2A0 zFUhNY+bhg{vEj(9u*Q^>!;fs`3pnmZXrVM4A3qS-Xh_*wjg_Q%cYb4hO7SeI%08iD zrc#|Ci2GV1m1-l+9Fk35kb>2lMxRaU#Ior!o3v{v_2RDaN@k#S0h&akS(N`RgWc|XL&3J^_XdnX?43g|=3{kV zPn5Q6nomFnF#h-z?A?Gzvcdd{Yx5U2$m+K+S@wOj1BZCGHCD3J7EuX>sGiZhHb8 z-qWEOpVlxQ@JjNE>4cZ_MCi}cd4D$X;=G$|ZI1I7=X|oKH<|Zm^GIpH0wkZnVpWMd zZ%SGfY#dM2jYQ*l(M~3N{(&S#XT9t@BEk-Kr?twJ7|otD;&Y%lPS*6D@)kc{yyb`^ zjJc8zFRn*%Vb4>_Vh9&J7~NtoW!sat+PksI>n9%0J;nJN+0;8f+t5Gt$dSiG273NX zx6&PJJ7z<)J^I__`mW}T!9&TOL&@@?Wags0HXYdH;QKd#G(CztntkgNl;LWVP4C%7 zSK_$$N?9d=!uMDrO>@Ot*dLNDjt)B)zOF?=M<->_iOpDl>9I?`cl+dHi^Wlrh{I@+ zmc1Dqg;Ko-_Dm=V`<~W<#>bM2s~f62xWM0TK+0b%EMF50lc|ct5Ic7MJ#`tX+~v;Q zJ?x=mlTlJ)TgVCtF^t7WNlNmwPkAL%P>K2yN3swAEwV7bR0EX^;`Qu2eLB*Ah^~Z<=JI4uDyOA+^aw4; z<~a^#1lUJBo2AK~r9=a5N7=aK6J=p57Qy3hNwX^OCZ&H zY8c|m$0*$1xizlgt{!_}_dHi(B>R$*fq7Xy3^lM3{@~ZVJl`i-o3Ho>+xTS9w@G~N zC|8WsQPmeot5!QD&9Q!VCr@x339j-Ah)DKaN#gB=%4eS?fr-SOg6MxrR!pE06h*?3;Uw$MK#nRf+0zeH*oZY>nu_Ce^i{YFJdlJ1(5^h@U=uj} zTY$%1>S)YMNuFbX2M3P1Z5)r>gGk(@g~+o>p0kMT`@t(+5|vGfqoF%y3n=o*3uJ*7 z&QPA@RU`@Zm;Ku$kK0%F<}*|M@`}doNhhX<726hROPUodfT#I0(uDDBK2P%Or)@k3KL?qrW9wYi(0LYoZD9tNF0hM7$vQo)P7>$R3@*q4;Fu{5b5$Ko0<+~`rt z@)G!bWJf8wyNam0htf#_P1+dU-g7q{gWXOb2~kS0WJEbTMBh??eG!hp+8mBWVvvv8 zA}rBln?-H#I>B@nqdvd8&JUcClCU8wLbb+!M(%IW38o~SNDoV0WPt~8DF}zOPr8j* ztK#i2${I=rzc7^IElf)~Tvsf$Yiq7xxqp@L+5;DTCsl2FLJV&Gu63_#xrjTAc2Wc; z$Nwha$>NjNJ)XPB9T=Z63}y(8Q_} z%fcFeG_AmnsKl%nV+sbKb6*2BxSuF7-TB7D#MzJ)vmYs})p}}cyOQ*e)m;qvi5$VBoh~?05`GRYy$OKah$6xvfy|aE~p|M zDg8)T^o_9Sk+3KVo66yIBVo7S2n!nt8+Rj2q_C#ANLN{m?$WuYxG0?i|IxY}{NJwo z>?asYg!IOZ>w%#J?oRvStaJPGC2P;JS525$&6rrHm*705YdZYcD;()f^R-Q7VNGS> zO=Y8-=9|#f9P^vXbbDQ5NMgWR<>K&JXW44%C*rG^H?IuaOH1~Gvti$uNG;eQ+d7-C zUc-S*tu7<{ExV}vcJZ_vv=<{A9XL}Cojo2J@Lxa`|w#M*N|7Ej&Q zPuTzmSOyA?a|&8ap4UJ@?LT>+raP}i5a?0vZXhVMxYtc&M!kIC9HjpySqd5Vz_=Kc7s*XMmf2-(o&Twk|0 zitXg^g@7;M@Xwk&&jKFvKAUXv@e%#(B?3Y}%{KAt@F1n}JY$M~aVi!7fyU1n1pC`K|8N&c)q4;FOj5D}%H5>Dcc%hEb+#xM%Tru;(Guaz)W;Z(Of9 zH;&8Cl&ppz_+87F^011o^HG9p6KKt5_xdW>u0`ca#2MPs=q(Mt0`P3&?#>*sc*Ui+ zFTH}Nn>>+i*+&Kh##ns{1;I_3^%Zy^!7Fz*1(0?MN0KH2#Z)u`y)|wG9@Q;|bLVyq zabbQveb6(>gc*dlId`q%ck_lsO|b#sRvWhV>`wefemSAZ8IbBww7|97O9@zt<(Co~ z|D0gix`BMoK~filzY)0>i~9eT5xfk5Td9mAgmaf}E&Iuh3d+X4yzye=fV}1`6aeKv zCa`ym@SVs0kYIsJw;m(=o3WvO1K^EXSP7{`+VqY1bmK`|{vSTwh=Zs(The_Q35a0y zd-h{uyOQ@qV`PFdsOFM`2t=eLp(SxiGbx$^4mO;)Tj2^*`C3%>tx7(Th;M;^2hIC3 zvGjPNJMh_HquP*&EByjsZXxt*XLldmG9@JLL|53pt*{uUDZrs+pAf^)8kh+6W%=)k z>@-bN(n5<t!bh0XlwSJf8ltk*Y{ASep(>5B0@}lYcc-ek2u11&4-arG(Wp+!N0J3xpi5NhQX=~lO@MGAJs3oVi=x*B^l z%y0X=B_84m^nNwkn4R8e8qU-_EXvY%U3cE@g<5*{_w+BkM&B|R|?AU69 zetM3{Hrf_o8)H-1ZnFiJ?*;3@cJVnouy9kNA-)Xv#*HyFD{J8Z{u$IZHrTK5=$Lud zL{uecGY3XzoOmOw@Q;aZ6|+#iZrUd*?SW8HYgMfc%E8T)%uZ=^^EKsfc-f2os`}>y zgsJ;+V!Tke%~!G@cQwl7-qNBSW1WC&Kj;pL&c_ntU-P1*l1&8^5TXSa4Y>%z*6X0Xu2b80p%Oj(F^+i?j3s7%hph?*4R+o0l3@OpX7Pe zd#ZS8G^M{zl+<;GTje>4Y$XNx+YnqhJRQ;5qfQD;7;Q)xzo_IV)znLdoMQcpg_gZe zF{=B1A)MSF>y-|?*UkiaTDT-YMa(*?J!>M!e zX~ZY$k7Bby$X82!QCaj(=zwFdH%1Ggx$Bj3AD}vwA`3Vm?w^pKHWEFrdt+u6b)uZ| zA1SY*L?9n8KgIJk2y!)l!M6RCa>^o7S+v6&BdMFcxQvjZ)Uks67*7am)8&Lwz0Dib z-?!Z>UaZ~b71tDP^@?V-1N9qOyTvOSi#B`3Md}yvU0M6QSL`lo@``qKBfj0WfAWe) zi=Oj}C)Lm5KI%2K8@(~+qIz#kq}qmWV{M%`W>HbCH>Ohkj5nscZ-Y0+UTgKnxQm!K z=BU~Nn3J`C@Q*J#7Yk!|QJdd1CWV1F*)$3R4%jBZ-@mdpo!kr5W(Xx2!z|5+S*2+V zJjsgM?C*ja8dXrGNNU))!L~w7vW`(&EMpRkqr@o*W^ITBy`~_`-siyx#b3Ktvg9)2 z)13hpD{QGPZ#<9bUyHGI5uswpj7p8=8I_oXaDX?Dp&?$9`!iv*kI^Mw=)TYX$d+iO z`lz?%WQusPZkw{GNZ8Y@RF4-bo>CUwEnL_*r(%jyjhESJ717F~yM&4)`iE>?(;Pjl zyL?9d9+jMA6wTekCF{x8Emupe&_h<)%sk7j9$@iSI-?=}m_TS!^HIys^$#P=Mlq?;ukui~YElNid z5p+7T_{y?BtnVnAi(n?9wh3U8(D|(alJJ;r`kKg7+VNVOBE-0T&n|Sc{b5Ci(4GX7 zgckKb`|F~WMGfB0BZj_S@0|Vc?bFxe?UIv=-a@gvoWCtP;GLSJ{;OA*vmY8CUCzzu z|6R`h+C2d70PTPAcD>S}eiPe+7Hv@%0vnJ|2cET1vh3_NaG4(nhZTHn8&ZBn9v<;1 z`hxJkQV#14d==~uQ||!$n}#A8;hmj^qL=CUnxW_=dcJBX+D1>ep$J``=K1wX1ftDx zu{XOs9zAb+Jz~L={7fI4_O)v|n+@z7eH`1jeY&2F*<^+p^(Gg4k#kT-udgSpfd?4- zF4K7`diS8+&?Q%T>;~CxU{eW0MTU-944iQlaUFa?lQvW|HjuyjiaT{|t)bvoDqo~> zI@j1yUxM!ZQ-t;biSkiHIOxaCfP0B&gF$8n7Eibz*o3|Y6BT+FBU53nIC{ifaU{*- zNK@viHpq_~SR{vo*(LC?`+YRoBNKwcy5x|--x)l=Gsr6p>{f!x@pG1_uTmi=jgQ(&3Pwp)coY;rta}FsyW&R`fjW%J`2ed376<2n+9c1f4AjusFWzmhNEn-m+uQ*$ z7j8)^g5$(5XlS4FLZfIV+{Z7>MLv&1#O2>U+3)x zF^)aPKZ98)&)rD5!*($amOX)n)O;0R;nR78B2Pd6PW>YkC49jXWspM+?9Di!WS0^E zyheMt8XYj4up$2%VifRwE60u&^=TjX`C2H%o~CnR5P^Qv`JaSdry!sDKa{--SX9^5H$G?X38mCgFHPRhAr2Rt^c8E1SZq1R2F@V9fzikeA?eH{69*!RkQ-iT z9g-p{w!yTCG5S_*h?kf~iScgc|6At(nza4D-}gK|IOm+b*Is+=z1LoQ?R81DC#v8v zck0X3?pHJWzf5iaGL`#JqDehC9?IEo-|_q922$YyG{=?G7^4)7h`K1G!{temz-0&t zeVBz05RGvAh%kgN&X>QZ-=MJ0 zdV{%1Fzvr*@Ym9a$UOA_Tg(KV_^8GTVI(M3Sslz^bm-ZxV1K~w*m64R>b+ZXa)+Kb%CtCu7>8+mh?baVrxrS!wadMrk0$F zId$QVM1-Uc-(~C!bC~+V;XjuFSwEviCBnA9EzzKEJ)a5tWCpP4JajE2e)V?{uD`v5 z>&8?>YDKtBTol;JmuhH^AtMto^uK}9hiD8epW|EK!9Z4*LeTN)T0otkliF(o9mHP) zI|#OT7!dpI3+hnQ-pY_MNsuLYe+$i=xfX-Do-)Gk=|8MUN)&WLZ+>1l#!ZCzx=5dZ z)CcjwzMa4>kx(XjN^l2Wy#v>B?1ylXs`OvL_51FEJAh!ZaxU*~xM76v@9x0${{?U_ z58->?>%f=2SA@HW>?A~dUlj3uNrEdr*qaINy?4VE=d&BHrTP44n$PnBX7QwcrA{N{UD7^Yaj~)E(Gq3%)pl6k+Ezc5NZM; z(od{kKT^Mk>Yoo}(GnpTB!vx)uK)RA7z6)JFuo;@Gy=n4Hw?qlO?|?gl@=P!5vf0W z#Qtm=hT^X!D4!FQp*cdhScG9X{w{)(Nz;Q?Mp7c-Bdu8x68QP>Y55u{S@PVZH1AI0N!x^X~IBnm9<6l1v$Fg%6 z&W}Yn^M3%xQZWq2zK-C$D8iw$=wZbPo;PiQchbUJ7};*mL`7u3O2rcDK7zpKo%y1Hpg<9fac zjj!dp2|5Bm>(r&XBo_8mr3t=+xC0@E#xqI$Y!WAUCYPU`ApXeVXPcNeEj<{o!rX`QT(n+3_0h*Yw(Ho=zWi6#tl1YE&2P!OSz1A6zgP z9Dh2PzAT!JSTLTts#(TZ&LIuVx_GjMk&Q>+#cM$-d)b38l7 zvk9%7i5@#VJA9tLZclR5o+`Z4OYi!8p1P5Dqoj9rs5kOX_r1Cad!kyaI2FA+!u&af z>D%#z&+`}d)~0tqwE^e?qVG}L@l2=MnC6b~sS~z8sBx-It?tGNNhJo1jZAi$xqpy4 zaQT-1VqmyYOMX5eG&Vtvc!szKb*7w72JWDGpT%&e|j>*#lS zegnAN^Ww0OLYcQAHAT2kFFd`|6%9pcmD@8n$e!JaV1q}amtD$jFWx0rBVTG5t9?-I z=A7M8tSaAwYC5Ma(zUoP%w5KPOj@xGI#*fW+Tv*oJ=Mtut;+C;(PxfWz47U)N&C7z z`7q{d{Vf#MiL=nBfY-qYms-!Zg z+FQFp#YP%Fxfw`H{2AuX$&+grjHf0YW&Uf-SL$`~LK*4IP^G>l+5aSiMmx(4wKrk1 zhXAe(G_4E|U*5&_Y(>98%>ud_;USBhLxyl5E3H$8;ljsaS_}qfoDSxkP~wB2T~J5X zb<|-SrN%skej_tBlhLrO-STnB+N4TCHo0it99Qi6F{|R4r76s^4RVJ!xn>{6+2w7_ z!77v$$7S`Hu+L!fIX$63!*CM|#=E1t6b{D0xyvm5A$Tj5HJ^vm(b4FdgoE6f6twF! z6ElM8V~uGFcjg`t%4s8GiUs4l6t4E==LVxQ1E;|M_A}Ol2=w_-xlvVl0~aeYJ~}h8 zy!MHn`qZVcpTt5#`r6_bR^DA_nOJAw{gCy%BCrUfCRXV7 z%t3@C`w8ZjZt)+hpf?Fy=-5)fG#X8=n|yn6BjcGOaI(2x6Acqkn6{Bo@ zIlq(WN{w&%wZCIAP>y%Oa=c=K%>cESg#uD#?;F5 zzGGjvzCk4OxHcl6a9>O1T<51>H@ys}rDkKG;fN=6SP9~uwrTyRLZ{8z;yC$f*kxFM zFpD1Io*<%P-Yk4=-_>d9;#{J(X*SVR^1sEPFUx5%rMdPdreGq~K7kd?{^|7pL?dOy zgh-J}Q%=bm9!g;oHq&gPQ40f4!&<;kr!Cf*Vk$B{jv?|cFg5D4Q)ryVr`Q;5W()rc z1$vhvgK5(actaP?-_``YU#TT=Eh9RE@xRU#sAaORG$+)e)v-LIY~TwhV8IcEvc`nB zIJ4BFShR$+0oZTN)S=;74!k&13hq>a7BE5~vKu}Y4UE>6;0?Ch&^tb-4)ubaoIeMja94H)~&BRN3?D_evY~$FIXxwl(T2c2t$w@ z#|q2dkX5I`Qs-`%i2`QAj#e#p^>Uo4M*~CN6LQ+r(vE&Y)lHm)mGO2 zc^glgM`$&GJ8^OEXu6+Wj$T7Gg*AeuAvFuycYE^Ov^M3I+K{34h8oIdq&q>J6Km#W zL%a&pVc{Q>(J2(@LP9qF=!%+zDb`hkEndNE=)F|=sgQ##Vl}(uJvlNgYoA$n+7lAt zQnFtE@0g)F^6I@IwzlAZhT6xs5ft3a0z`PV@FCXJrSa_AVwirT^2?6TzTUliXX8fe zt}l^|9*e}IQX@C;}7`jdNZ3KO+9HbU=plJA>op@jVg-Q^Paq# zt*Kb75|v3O^;(E~R+==T3`wm13GNx1G1zfzXkTJ+CsdATq5-0sG4`K@thKjZ(&6yX z(ffN)4aS&O#|^%>vugd8)vMQ9_g@d#FgmBfrA38%Mz)h8V+yc$NIQuU@IbkNLSWI?RQC&@&Obtu9{x!jUqNg6KI%7KN&6LeOsZMj zuV#wZ{4TmKm)MKAVHKHXs(spb8!f%c)D<7?r|w=-EO7J)+E3p z#9^!16@(Cd=6iW^0`fi_#sr-!p*hEGY@Q1xOiH-mNa21#_(Lpm%X_Ye95J}|!+7P% zeBC+zTcN@foxz|;>A8iFeC744%P+1d_mmsL*X-Zn+ds=5kg0ElI^}KhoqOtc?zwn! zPxSmf+!#{qVN|BzJQGYt&yjFxO$v=VPBd1HoQ+$jur7)A?xt^dA8LMroD@Ty_ZHrD zs42a3s3~Oz5}CSr*s5{GK6Iv8s^Gq)YQtxmv-EK1O!GNCN@tq!ERHmEF8Q1Ej?OeA z?~Y0D=u9*6?yvu%?uYd5G}DJ;jlrUn4mI!4q2@G91P!#o9JQS-J3h^+GM;fq`cydC zXkjkm*|w!|f^umbju)=ye9wtAl1Sm&CfFSr^4IbILR1~mz%J)spJgK^J+ zV@8L@XrBv4b-PQ`rYMQ$cGHmy=jrQ&{|0sS%Oi7@lNF|z5c@XJUs>%m*RPv`4v*|;7G$g%tS)Qjt$bz-`I=y2arK1k zgHTOdci+et7k|=0?i0d%$am~|XBK-a7a_zpwdT(wCj@R6q1lDxJUQ6~Bnfj>1OuGv z82EI-$B=X7Mv0H$vJUIBAt4z%fuu*=AV&outdrygaNhwJBvn>xofe(HKc`J;=?i7= zpY@W0)s5Hw5>7;-Hr{!FS)8V{#wqx;Xz>QP5aj zkY0nELL{>4Zgr_)7&n<7h?nFw3FL18+c)&Y|9(jP9|_J&@~p4nwuUb@QHlo{w3<-} znLCcEq5Y?+edy!?SGuP$oB2YS|2|6g=3hL-slivUAASdWRBj2CC+3ZJPI(OWm^CM$ zHoC2zxQ}LGbB0qJ&F14*pQA$?709vJF-z{0M`)xJk7nXW$&_1y%Fi7s-?AV{tTA8{ zYe?{=@(^0?G+}Vdq;gOEQ@J~E>snA|d{Q9C|JeU;`(n8TC}&x8ryMVj5kntpfS@5q z&TFI|9Tz}u1NA@gMu#TqE9D6VT9`Uuy$g?FdPvl$lW5>?7=~>lnhnw5{bYdOI~RD~ z><{GF9Vl~Qm6JhWm5u|QJCP0zXMiT>fj`vqTX49jD_M}v=ZOLYGs;11nRvB01`<5N zHJ2Horqr_iH$TKpK}26RQfwFYCy|==HFx3YkvX510W6ReuS=T44h1EeZ$_!UOd)Id zHbvTVQWTIR;3aWFW$FHQ_&x%A(Vh495AJ#&$nH`cR{Hmguh0hwNnDWT`_MdDSU(w! z4}*lkytPz@5qfvH{J;7Br{V7qt75Q2{#SBtwnN_cFt?f3okTGaUuw^PS9`Xi6=J4%9Ew%H?Ik#K(|SH zY=ojdP?s-4*Xh>kD(lyQX5tn(9!il|Vd@nc|HA(xkvQG+h(vLR^O8 z{n;SmwJD_jAlSeE5@PFHr>T9O63$NTZ_q)lf>czcy3&Nwd8NxsSCy_Wtu1XTZ7n@t zdZTbvRN*Sqv$|ZkM8f${ZSjXT>zen&aL={aV3Jjs+!|mN@5--O+!t1n?10Al$f`yRM~sI}GI^qR zya&0xK=AE33%jViWgr9%MoSj#lN6R>y8b#C$N~vmDC;?%$FiN+&ny=~>kHFdHA2>1 z6fAetfP&>hBLcnf#mJQ*(kqZFP4A5_@0R*!4LLoVEl4Gin zmMG+=I?}2yi1Cw^mM0OMEn1L!0(nQ?WOl4W8lUuPl?>K&DdFtY?C{R%J3I5Xzo zNOV_Ta}+w(G*4%5aSb$|D9#EACnB_te9|f623ds1YAUZ)o~w}ix@T3yRHRg7JMx|R zdK7S+b_}j5jN+_>;F>~uMJ$2%#{7oFO9i)*W#7gJ|8WKGsIvV?Lv0tV3Brq zjyztY=ko}*|3+wh#Gzn|*O#Ujbe(C!QW19Z zD&SsB-E+0$4=gE7qq%HCspU-N^)>sABpV@QCv^=Ls~AiC7{=3=q8F`lH^>1oMOY_7 ztg8ikm4;Ww!;!o=3X&gR9LX1ta!j?H3{~SA9DQ_UR~~JHWndKBQF#C?4taViH*s;) z^6)8Dq=hTHOpP zPR>JE#c4%?ntk+85Y+2T>o}A=Z4cDpIxV(m`}-NoNX-m>J3ie;m1VzC-olF?P$V z$H=%&>f)wgm&(^|xt(I6c{h9i zeyH8|{w(`@A?x}Z#59qdz4%e!YCw?40hzCuYC%!B8!qSnK>%k-Po_ag9Yk zyx~!v!XbR}?6-D8Tm5;0HQStlbwXjhhX+RgA;o5OJD0kfEM z#LH$@&7yr5Le`rhD=e$eq-q~`T}=)94-8#rT1{@AG-xN37&aO-SE)E=7g{^d%(Umt zeB?4aVcsEZ3YRfl$D8>0mDt%FQEczfT;vm6RUm~zv}e16y3$mj^skZvvDne012*Bi4hTy&{-c2Sw+ezr_Zb2bAf!LkI z!*E{w@1%~PzD=IrZ5%o-;-ljdca3Di?jSJ(C3le?F!h!r-Ckh;9KQ}d?FETtrO@M9q-wGk} z3VeYthPt$lEFccFyQzYZWnBf&*rH6G4@k87L?prmU%WXH4}=BW!Py8bGoXqa9@-zf zVID53{xIljoUvE*kc5h61_IEZev8l+rDy0pDob=cg%jpl__LAb(_w?cfy+s9Wp^K- zBfNOW1f~1t@O`x#>vxl$gVKTInin&xq403S9i^^>9gF!_ohozXl^~DIhT`0>Fb`dW z^+i8-ovwfJ=}xn|%=sqMbf`x$ki@z>t)jt_pnvvy10(xw-153<8}HtV(u zox!vn-)XjNLg9aFX22*2WWM5hOJ$9D_f zqVylr6s8k^s6fN=(#f4T?-VK;6w*Q@%|0^mVI@{SB;$&yE)Lon%b&2Yj?cqQ3e~nB zlNQDDTP2HN7J5X(v_*Ux&Dp5*(dfG6PK|t(+r7vMov2yfXjCCzU5)!AS5|W_)HClL zu`#&Gger7GyNOL}|`ukN%O%ywDLvz=XaWAq&wr zU3sNp?4;_KLMXY_1kgTDXuC;X@aGWJ?8ZK)W^|3I2lnPbxp8ZkkXK5E<3mdc_v*pD ziC6J0)-CR39A&U3aFsO)H4hj&qEm3vcnfC!xIp5~F>sBln!5#_^xeS);-+?!q^t|; z$7`!LJ`Fvxts}Sq3tLVN3%0&i+}zie!x@F_F~!T?M|Ftn!A?f^)Srde4@h#HFnrzy z9oGLZbSMRGA|(>OPYEPYeH6xppoFLpyKroX660inG73-m5uxcVyh8yP?hs?ZM&3i8 z3Zqksr#`y|{ol{zQ2*DX_h$6oXVzF=fu%&ucH+D2 zH1zI^5NJ^iTC^!dYH)88{KO{&TU8O_`xKlV>iu!4_d}hZa!Lk`p>0|st{+aQq`uKi zP|w`A7BfSf3b8a5+Hj#)5$$IDd$Dy2Wqq}6+77eMz8z2E=+gQkIaI~fQ@ePQc#N6h z#wI=}FYG2Am*@uQv?aQ-H@UA=OnWk+arpxfN5@ATR=XgJLI`l>iW_$GF&rr;dG$Y} zTfuG_w~pY$Is56THMs5wCesGQ{eoVC*SFqsaj6;P?BMzaf>^~j&e&vV2c3^4qxr;g zr{~v=jR#$mD$iq)sLK%yHsAAWfKY6#z%9j*;AGgxK&8jPMgSMuEl8thUG+_; zcgb`)Hc@!*Shj-Y4^~V9)8CJ|X?0(5#+o50J|^eRFEVe z4Z+O7^>-Z1|L*b@W#~YZa5PCYxvO>ZCm5!uSp-n~t&8g`W%ZTc_Kbl`g^2~N6&3;3 z0atN70Uk}yoKY;h`wH?a2FF_}5E85J1`cuPto^x=L8nXh=9UL8_}gp~+|Nn|J2SgHh%0sHp=3RiURe^U8ZXp{|He z5f%@fL{O}2bclm~f00%9Wq?b~low2tC7!6hgtDw2rUsR}5r?y~79-vBOlaLV*r3W` z53~w+OLOKd)wj+&chS#arW}Y#<$0~30u;daDDUv*TwTr60VWdnEmIW z@F$j+tHGpjtO3F|sw+bDVW2Ej;2XXYpmW2b#R(haZ3-#Mgdj%QYBxL$3%8kXN8>EX z7e`gzO3KMD*6&KY>%dD#$2+E!(4ik21urkHydVocOK@#SMDB(+2(4#zhT2G00ipSb zPj*;MC(Ye&NhX+&>UJ#0WShF;wPfy9Dm!zWIBm>iax19lru=>xw}rm=K9+A*j}QB$ zCS9?VieANYze*qpUpF=z1C#4`jM21x4vh zPYqXY64aMMojLe*NPsSg?~P)O*&oSgB9l8@d;St4bD%=A&KG1Y+R%1`hJO>s4sbak z%jvld9Y~&IHqYp5b{Y8DbdtusJRwo=A>~76s{a&9lH+h%-G?=ZuM)4yL&D>}>Ea`f zO{LT)sDZ?@;bL6L(4ER&ZOK%$az4m%xb3hw_4q?y2R)CwN<4N+cY>3(ZVmD zFwfs^Q|G5K*@k3`2Bod%Z_(VcC*aEeC6&ju1sBRVp`IJEd#HbIBXrDG*9{brQSlqs zd42L!R~AHTh=p91g!iHC-2L=R4Y`|-ORhptom}nau%&S?X(4w%tAZscPDPYW8E07B z?Y@cosob&$#jE46KpDCRInl5iUd40E7Z+;DH1NyNp^mojU5oG=LFy`RaHhm1Il6`Z zdQa=cldaM7TiZt^a-*nGWN=SV&Yu@soNH{+ z;;sm(&x7gQJ_2X0yqT`#_bYKrC?BNXf4RAEwZKYm1kWK)VRmMJ(!65DSYJ4fqQGXM#4I< z2r1`YpkHld&+b16dY?ysmnAg-#Kq55j>Ir_yO zg9gR5gw@suwy2*E4cVsB*6YawmP6L5YeLp}gScu$?{MbvAqVpNuG5Yb1%D*B)JLUMO9g5miP z0x0=1U52W5=y+X5k`t@?cu5lS;ZQ+Qdt0}@OYQ&pcdWeP&N&wKJCeISO41r`rOZ{E zI=VekTm${==r*!-+<((gQJ0v942<0#2205yl}uu}8u~T8gH7Uo`@M396$J4&cfBi2 zVQ{=bMljNzK-!mY-onl?(2N-n5yU2CJJZ_qCRV?a&DXG&TU$VEOei6Sb2fx(&FJ^?qaw-27K?*^g%KrM1FO7|5j7St7n5- zOx~?XR6+C+NK1kW20{Mfxm8q! z4HM$sbE-8sS$UL5uhrqvV^wn>QHw2d94jgZaVPw(B$K7b^!Yko{ieUd6#S*B`cz1m z+8jVrvm1BcOYP)SJ5$}Wg?M3(BVIia5)*bM%||$+KZx-1t(o7cza$?768%WNEA_sl zd^aVPi>L2MyW9SxiQ?W|Dl`QPO}tG8T{#Bja(2$>B{>P4j;gdTH1Xan zG2F}(rr;72!r%;s%B&`e1$X9Xq;#0?;^L)p&Rj+SsX+I2uk=1O1oBOov zv@MKt5u`_TXB%1~UEI;KDhqf zJY()W#^W(jd@M&2s2kEebZFF2j;u5}R~ij*DvF27MNt{wN~8k1%qA>enZS*bUKlWb zSOb_VxP|Q)XV?jYUg!^3#`n$jY}$g*xm-Z(=T}BCWYKk_`i~*m;+2U#Uxhv`qseqz zY;t~YyKiM2U{#BcrjBuON6U78x)A{yeJf+Fn{Rqv+G5SP>Avj#+_^H!xiS%`Iaek? zj~WamJL|jTi#{?gT!x%aZq9Q4N`TG+LTgpkw=#hgH;z_BajN>3el@MC5d%0KGrBl< zMg%`Gc6xnbD*qp@PSEXL&Q*%Yb{l!`D}*l)ytLmK{LqNm=0{qF#*mC#D;C)$^{2;J z@Eh21zyFB~2D2Qs+A=HQE65^Ltxg1qOE(kjh^_ESXVU#v!o*f=Dxia_1mQBo6cBiDmkhmu*^v0i#Zrv|Fr1(|Kh)F{~M|?(!PZ|F1DXy)Y-2DRrE$!c=o2}NA9gu~7rs^3xo+=)3fd2@5QKT{bpo&x`cU&V?QYu`;tWszvgZ6~E+AI@3RR_$&#V#IXAt;H+$gvGR#};F zSXtG|bi66!SgPakD3PYqxVm=Zj!v)IcvuNwDhXH;_ksxQ7=RrVsdGI(cq1N>8&9CW z+Z2i&fAwCEKdk8RD7b4hi>ZA3}JcYrAjiyv5 ziu;vVXCLbPMNPg|Q@18@zZBo?!MjgHILG3HCkPHr-iH10$$XWgEE8T=9;a3g-IrG3 zZr}D8LSwWc#-fbZGH#@j3A2<9Qj|S=`yl%(=!|Lx+3-F@)W**ZgPj~AL@SV@`VgVf z*}$?C*5&{`Z2OC%D1ISsxZ0GKX9m8mm)#pQ1yGUTD$mrFZ~8=HDD|4 z<%6!WOb4Qv)*^%D&bf1Pmm(AimK=n13XdHalpz0luo`DAtb?cI7ar!OiT(Wz`U~EJ zSe$|QAP!|T5iNU12Hd517twg{r=t8T;q7bV#r^rE_~6SZT7Z!B!qchHyFV#g_pnt9 zRzqlUH{+^WeV$kI$`SA8$FggRHq~iG#1RGCJGL{{f0Rz-2{+nQ{-;9=e^H9 z-VsIAhkLg~?O~AT(HBdG*zP&_aj z$pKmN44sIHy+kD)1dkygCB7Y^Z6m$(c|5~!*;XpqyVD&t^rn}dk4n!hfpH)89os-J zbLzLgv(L>8mCKPf6<0udc9!Uf%Y6}xzN>$Sy{MmlwHq)@W|HE&yu)*_g(tBc&w7kAW$cC zEL}XP{r`Cd;ZH~plF2)=GS?x+1^Wv34}+9M&n&hIbv%;k2Hr0pk_-+SNSZik07tg)(iX)-4Ht|eGhUm@VRMw(e}tt) z7Ax3mhv4LiaH;`EHw0(52&a?a_&1Ee0R$108Zq2+79tc%oL00Q;DT>%x6& z!II)c;6DNI7;&~Y7=jxC7c6OD%?L|6?&QM7a*I$dRxDQ|l~aEkD$+-EC}aa<=m5dW2q8_2FOgfjnRa2i-FJy`gFxCM8-;;;zJCblax`=xh<_&kezqXdL_B zPw#H~f>C5LaCN?R=aSa(vf%a3DMMC?yw>KpODNCA)Rm2_~Syj zctoFJd623fL!*F1kh7r1M*kdnZE|q{VxdpF%qGoy3yb+osOQ5FWReZ?rxfp|Sfn#y z`%$!iTWnu%2%daIBcHJJ$LN?h;)K9YF`;(hD4pOxcQ zh)t~geI;DN0t(EmJ<&7&!Cd_2kHL#^NNv`CG0w1Cbv(eG5dm$F8xb>uU&Pr9rmCTf z&(TesK5pTp==Zin2-Av;5mi;nz&uhdAPe`FOF0Rw(eTQ52gjy$A&uzyNo>s2KQOF3 zSxAPS2uK>zZ*Zdt_=7rMYFw9++fEOpacR2bOO1u>{~^6t-zXHg%goQkr7n$J??@JQ zipC8>`s@-tHW~XXA@2P+9~{z!D&HL11KTtMkAS1v9}NXyyy%MSv^X-|SJ;e>q9}KP zV~WGt@&y#~4^xr(ApyxA)-O#)7G8}@HSKX!|9AZM4Z?-HM7(oi?LL;B-Kq8X_jSK= zcHhCLfi3RFq=QgVLYUBAWc-UzP_*8PV=)smyHHAu>5@g`4mAp1zenP|Z7cuHEFdzY#j#%1$7w zuT5UW=j=O%cY)Ah^`>^}z(?ZNV7{M-Bl?SJ2;brLiS`?sVo5DY3swl*)PVoc`uL;& zqH+7na0^yVn}o}07AV0D&zh;kZYZ_DTrRd0>p_iE_)Zr~@{IcW#> zhzMF<4t1MzHcJG7iB28zQRhRdcNbm@YF zdhfJ2E|It$cP<)#0R;zK=%%;_;-Ex@NStPhND=2%T?dy%)ubW_MoSMpq;(d{j~8VT zqpUt9IXU?<3Z*O^E=u1U#?g1)B&({rT$O@IrW2{iGN}l)mqg!Fj51WFBen?B7)N2u zsSN%}cs1zbSoONx)t@&gEO!@T#9~5i-IB zcqXz5f{6{o&z3Emnox#xp`!oc*GTu~3i>U<_A+tYyF>-jHeU|;ufWuh;l3kEa<|35 zH}uGl&fTQn-Ya@;#~qRpzVzxfde!i)UO(YE9AOP# zjl2|}yLAHAKJYCM<4u~ z-g0{iQO;T$T6d~Dh&a~mpXn{zVW4#@lRG7%|2I7}ufnC81i3mBfew!ZXSRQYCT8JE z$rfd4MbWn3()o#^cJ3AuEPDP2-6|Ly!3)T_yQmzJopz=0*eM*H>Dwx!P+ok;1iKH zyuSMtRsSY^JFn+z#JU^wM?C88U;_AYC4j==^KtS0S_x*AKF9&4s6&-;74#`suHSbM z8jtp8_4a2756r&VVx3~C&d>G1Ur?PBq(rg&*G&q@dh81KBeBeX>ajyX>$*xGd=`az zK7y=alW}GA5emE2;{S=h?W?(;(a&dLZo)`M!uJ0V!3S69(Zi!txMKQF=KCi|Kzj-f zbqr^rckPcz1()c1E{EE!`fijtNM#1%a(GWzO;ZH==y-?sOy(b<^^KVHal~6T=pbw# zfpr=?u5ZUmpU_u4e;QYY+&fg*8>6>`U9G!uDhnVt_TR5>zei6> z8}ce^qXI)~3u{%a=duZ=r88t*jx;g!yG*XbXJAHG6R zcWAg&v0#dx*T`-e2hNeZ`fLKrndt+UOn>X;=%U!L&_SyjDIzE1u(W^H>cVTblJO;_=Uo zUS<~ZYSJXjJ6e&(9jbQN=2z#n#X8D-N=DW?w!G(V&)$f>sSTLT9jLa za$D|{%la4P5}%kpEA_8(_3=<*d0|gdbwAxVtx1{C;d%A2W_Jfng#;0Ru76`}hu0S5 zW4#+=xo>H);u}xj%)g4=9?z^FD=it~C7b0F)Ts&!g46blm$BEUA|6Ag?A@{Y4tPx8 zaKg3e#RsPaVD77vy_Yaays~j*`8@l$CuvXIpcAs1n^<-GGqDZN#I}X?h8H&*it5bZ zWLyum>+~`ch9c9?cON-$>u5yXhQuP=6DDqRhkLepD#B6~6QGZ(>P&9k&OJ#ec6(lh z1&M}hq59dy6BZZWS6F<1oxD`ehQSg5JnU8WCJHa6!Z=6*#{xvvq{9?9cjW<8G^4e+GeIwtA{cDPzZPlq~uC4bz z7&~)iGM7xC*n5H#Vh@&Y*5s5;{BUjY3lZKaLnIXgusF4h%sn2VkvSx3Oc!YTq&~wDRKD$+tRXxWF`GIy z4LaoM@ubr{&l5c>JrAXLWHq@l4L4(|g!)>C4;Z(O6(dlJWmrwQ6QR>+@3|Q=WHNka zx}jHwc$#&kGaC`697rdYXTP6B$8nl35Tm%SsVn&VlpH?TNDgHCD&~mi)$!j6+7*JQ zW*flGQSaTlX557GNt07GS;yXXm=9}kJ(Trn^f`ummud@USJu(!v&`|#)xPBBbvYOnV#IaRauEBJ%`TWc(eTl9vC+Te37jcp?Inn~~ zY3k!f#M?$$Hr*kw{B{D}LXEx{U-Tqg{nPF{f#4Nr^;zAvOl{sDV^|e*wgJLpfv(}5 zn9X6otbMp6jFIgbTNFM8$?p&+0nXCrp*3n#O0udm?S7CSqXe+rFQ{fUO*#_t@mq}; zSXiBIK>eB6yK;l}s!J1J8UfSrG)l_J_EKWTHZ^|2ql?=`t4GjLJYbr)3OEjK&=C)P zJ5(3{aVv$9hBuPf1tGpK=ScyUAOtU_OLsyAh+=P`dmw*}Asnh9wTrOqCnZ?^H~$${ z+W#Xg|7Q}cf!2S9HTC}y*1*RSEF9MUsgLD%!O9m$4D`W*1m`YW9z*P82GNz97c(t~ zSI9JHqpF9PWsOaRr8U>Q*rq7WvwRThl5f!AI6OheRY#$QAx-vi$M>R(Z)O}`R_G2+ghZZZ zIMC2H2lF3FL7FD|6YN(E&}N@UELOSLV9%w{35NY|IA_o^up<5dXO^xIEPg!elLzXk zt)Kquw)ix062kOQoYbf>OcV802t)ulLKCt}?Fs=P?~&Ivbtwj32nmgSt|x_&2~8lr zN7w4>p&!x}X(%@6*z~$4x+CcfZI9O_(Xt*|5t_6TWzt#nVQBq7kNVFduaM>Wkg&Z= zM`XvwAhvT@H@pI|TD}g63vdKin6-9D?JO_Rr4{Lt&W^MJ$d+2Lm2m4E#H%j29*Qpl z&cnUN=t*;o#*Wr6L_!hY+NHWekFr>GHz;($z9W>BzP<5FK~q!xIr+!fe>;Toz{ZfU ze+cElP`o|zFg4Oed;*i?ZiJ=r8rV*>n!qeRikL{8Vlc4AN zT>~${ur!J=ju8y&RT=jiLK46n(hiJB7&J1~(t@DS8YA-vvq&b!LP7;KZmy)h;*e~= z5h5XT2!4YIzgvW##&E?W@Q1yE`Lq~u@c%F7DO4<5FlO8v1P!Sf)9aQj)uh>J;M7Cl zfF3xHzZBCT)>?vTAS&=NMj}-YD^L+i{mY>)`Xx>(;0blTKYG^t!PRTOz!=ts^22;jLesw zR+v8Sqz)*<8>N4`;OOr;fcsM0%vl%PR8_M)1a2o)+S|mMoU>@n&{;x1@dfit6+kqry3h+>g?QD|>O&X1Y2F=x;ROpG8+IGpSM zK>zowLzD#-G5E(q!Xm>BwKH?9!L9b8o72<_U-ca6)o16?&G4b#`JJ~lEzD_iOrU*@ zE%s!XjLIu`uev5d+i5!tY0mx_LKSL`n8Uiw+Rk9W<~N7xYU*Ib&%IA=p>5w#+aCHK zSyYyU5@+$fN!9xhF0(GZ)L5!@HPp?;ZHNh>ugc&_h$QOtyYgo9pdjDb8C|t!U)3Iu zD}|d9RpscY|6Nv9wHb-Hs`l(m+=F)7M7VO~dyvTtAO9nufv!J5@6?^4dIzNZBU)Mf zvj*QB#s@)PRDcTJjyX)n98utR3tr4aZ%;d_lboGlPOe(prpV1g%20h&gFdPkX+riJ zlRCqi4|UvYG5m@-87@O^DlvmOn)+{Q3d9fRSnkpMSOS5B7EBDyF{Hx zk~xO?4>IP|JyMW+dXXvE=Zf*T`C12j`As|jmbH8D z{^<-Gc1-Avu620&co*aOl=rxOY{EKoQ}gOSXRY7x$y8X8%MQ9%|7u@T6Pr+u@;Xd+ zPszSuLnIr~hKmcXk{Sta#$!ufn`YM{yjn-E*zgt`!aw=%xx%KGtsYgR3uD8HkmIkg zWWeswASD<2%&i)gAt|z?J)ZZt_@mRRQhv^r-1$J|R*s?*t++0bWt7Qa5SiIL@Rely zD%JHqIjT!OFq^0;$_w6QqmUWAVCWgPQd;j5qc*iW%qe-aC1u+b_JxwphstxZ&6;J4 zp3-iR^UT8BtZZ}i+`LlU+c$qB#1^>{1;y+V!|?~`s$;P%cT%?GQV(RaYi9<#iodQ_L-o zh=d^;ZjZj`4Mir^ZEEMHQQKW|TPU&{u43Oswm{umVc@=_*Zf}@Hq(41a*fCXxoeS5 zCaD6El-K|~xY>D*l%zTMu}tpBF3p!>EOg2H76X48TJ~7_uLfRK;g%4x494SBVQ@0y zBwxZ^2XBk!Z832Caj5(37y_||LzTQSxvwO}(_26Sh~aJZQGMmnng~^jr?2Rx&#bX( zR%=L$Fz9tIW!gFNp6>|eAV#tG({}r>Rf6|uyMaRfE+{JfY3hW|L1sbVl;JmeR&kn{ zbHp6oZI0@^l$%$YyEY`*UiwT zcn(0r0#7v<4;1_r=hW-<_21&<_FZyl_23R%^pc$NvN8*-E!SM9tjn&c5%!s7Qzt~R zrOvzspp6=iW^3{m&`bI>3ZL*c+anwFVAlNW{vAgD_MXpG6$Fsy=_Qy= z!!e_kai4Nua@wMNwrHma1DcVB-$uGm;hryV0si2vn>PFt`LlOfq-7hz7t z$ty(iAeenie*^#>3hE-OKMJ|yVY5*`Y2O7UoYE7Nje8>cwfK52D37FhDSNMFZ2hie z%VxE&nCbQ;)x}!BxcpkoTbhBL0Zo_O-)pFb#!V)h8}ENwjV&8kQJyTS}Km?3`oNpk&f%A<}qo5HAd9e)l0Rd)9e2+uJq(>#O4Iu`3+PlOr z+7WxNvX3L$Xs;18_=AiMs{W56I$n(o9*OY&A%csb(tWS>e~5RZf`=p2IK9ewg??)3 z&#hXGOW~eWd0pm43M_{LEwd%=v1m`+BltzsDCd=$b3_XYhZ$)mvV^gYJYf>7j|}l25d6V9{W{-! zqY7D|TdwiGsG%mG6PrYqEK0ziJ z9Ay^*6W>>!L`LmkQb2A0yTOyZ)*7Q0%8qOMp9d9I2A_}cRzyhnI1I3dFB7yWMkT8a zOy1riPs^EpWSq<}f#Jt7b-nXH?=0K2r#q1aB;4F-U9%i35m)VTtn9wW0%f@d%TJ9d zPY_B&nvB4>sx|vOEjw4QzTBDc-cCdZ$to7?wS6z0& z6&?;XDV~c^A7P%gDGiUy3^9ylhPrMN6hF1Y>tE(yX(Zznl(9cy;N_#NMyCHiBRYKJ zgHJ_xABo_$5Oopq8iqoAJ_&Zso%e3!^J%`Za?9g}x-~GMgsU~YZbkZ)#H^D$V)*<> zJUQS7S8#>ex5hC2^CCLDRl#`?-iZ<127+q&F*VrN+nq)R03CCw*v`7FmwRD|zsm5h?FOt?M z1OYzJh&7tW=TVdwNtBCL@QY}ex%b2_Y8?%N+2MuA*A9^{2$8R!XN7MpHsu&wSNn#kAXT^sH{m^r@m+fE!CUXhL&onv{c15o5VJ0 zshXuGe8F@_gESip?p~`lS#$onH6Opn*fR|H{}Wl?*zod-HTFzthQlLuAj3d%#@P^L zTtn@51F448v1_hOn#CKG){QDyb_rv_I(RGby4TWizNmL3JJpefxk^n*-r{Y_e1j_6 zptf7EMal-o8*tm!|1vuxG59iDfc$Nfrlmfd-|u4Cp9WoQ$7ee4I+p99E+gWR2y(z| z=!v3jzr&zHntJU{$3~}>?s*`pBKn;4^9o(wTWJ?(jc^|azR0h^m9Q`A*u->gUw2y= z0;II5?T13ur1DwQcQmkg@2br@c5`nbtJ~kCOqb(&@~rkuqv^Fc?P;T2^D~OwQMVR9 zKZ%rAr^>89NBXi&LIL!YGM`(yWBH65XH&{E$FK>9wI>g5*|%?P^Z3<&HJ?1;IT}F; zn-6+F?2Fo0yTxZx?Wny_g3{ULnXnleDLq3fePn{{`^D9UOyz|Dn{+h4P5a@FEwtn6 zuJE3R$^#TzW3}J>VXG&gqdIlo?SdROnjM82Uy9agQ|vPPKacCg9UDS?Sl4}r9Iv#N zc&yRuHMs>1W7sOeBiPVK1Xd93`xx&A3^hj&$QI_ovDTrtreVU_CFI_D6( znxO6bw0{B${8w-iOESr@W*F<#CL<zJAA-sybjq1@ZePgxJqBOK* z(d4-rs$1^TuW%>3^?@wE(vVo5mUgfJMu4~jS(eA@*tm)QjdXj8?pAO!G#Or2URnm8 zjAKVjI})L!-R~;HMqqPcfni zbbO`Ltg9VR|3Ajw1gxnm{R6%UAqjA`B!n0NrvVKj)efjtu(r8SMO-?gR&g2I0-A_c zTeZ~PY3@}aLE1vxf~9Q|O$}5krdDyA5^50@r=nfdYPHrVwIBfjQ7QR;=SDg+|L^&p z=i}j*_w46A>pkmx>W|d#BFuehs|!1|C81OS*&yFUGxgRw+HZVnOQbPHSx0B=qL+Oc zjWwUD5Mtr59WEdrFx`Xj6TwHKaRlftq?T4iD|ZDqM%3&QU5E%YM~EvzPRlL}ev39| z1$jEdNz`?+OM=GeRmU)YM(m~cORsc=`6GG|5?24u>Xzv0d({u#lp3=lV<6MYl(lcr zzF zS`{zBSdN627zwdOx>6h&5LcqYR)px9!+V#@$$D_{eljyh@j?tc`OOMLQ<_F*u9|Yv zQ5Ha|nKM{3f%KBfMQHr<~I? z3ME_2ds$ukt1tTuJ~Ruf=!Tu}^`U!P2suH@E)L1mTMc@v<65|7+Uzw$)@ZInVfn4} zA?8+_6Kwhr!|Z{&y}0G5@r2(FpGe1}f!MM_bk6YUR)O+J#x2Kn1>I9h zt0DI|WQJ2zl4UA3u{gw-5@+HsVq=*j8V43r$oJEet~|SH^iBvp)Z}2t z%d;9nuapIW%m2V}%If&R*wNd@&;w9sjDt;C#?hwbke13CXW?+91VZrR=p276w6sPd z!gF!l1oCloiV)FY(`X2USs3UTk6CTh;GJJoh#->ODc1Z-^5HmcI}OyF=(mB4NG^~@ zv4$MDd%ZW8Dasf@2P#*48!iRAc1O5>47TkHW-k+mQ@>PWe5RX)K`XzThW?o)`L`79 zSviRmwQ{ydAJ-ppN2Q}1|MH};$Dy#5D$)92e2f39tZ%F@_Z;+>btMU$l(l14FBi^W z-S2#@3yKcdkh9pimz;Ur$tkCM^JS(XmM-5r&Q#e!kt#FUca5?jfEInxU9 z?CS-0Fix(X2tavpSz^sFANfL@0n3h${3ZVi;h2=Xj_FNPj4Y6enXerE5PgS4{42?F zeA~f4mcwzp0I%?1J=W6(ZV|bEow?WUS|G92kV8@aKEO?_NyG?xGIAKg`w9Xq!F55^ z+eYg9D|N}J?c~@DLUn{;#hnk#zfv{fh>{&f7~`yKN%!v<1>X2Q+)RsFIY)#+>4iEk zhJux!skypa=gYR@>GH~g(5tgEEnBY!abkhl`T$K=9~YR3N|!EJAMALa^sMoZ*?uJ4 zMZsA3UWd`cX(;nqwda#Qy~KkCzgn!J9H z{e>3SK@L96LE1cVK4q*o?UXNjS|9kMrHhJ3FA3vPM$$QpY>N&odJg45ICRwkEJm$gs$KGn;&Zh$XiPgh)G z?Jxdz6gzN8?1-?~uvgfxh?A(CKi`#h*9XPa^e~mVQwpX?)y|FNjX*0dhE)#@9;%9s z2^d;1)Z+d+h;eSjf_iZ{z84udpIt#h;jD}JiJJR334#uZDu|L2De0&Hj<3nP^Z0(F znOVYF8z1RvaKjpc%2wIWoVS)+F>>+9eYMxf{P92aw~wRgKXq5IsCWuiq$bFF7i?S+08)Db=<_i{JFjCAg#TttXyPU;FsU-rn2nRvp;*~;Wjdc)` zXLrwIQ;CP+c&RWeVtQ7jzEN=Fs<30mkB<_#yA zp{eZQqW@BQiB>re7pCE{tvet7T@k9A=(lbpGBYw1Fyk5suv2=7XC zTudz9$o(Dv3j0abL>}ot*=egU1gBoUK1VnU2H9vXX%yCCixC;&SN>AK!^1$TK zlAT+HXcC>HTe{5`*P>j+t^UJ9J+IxFz;1r zLYc7kIbK34Z}1v15dVdW9rw!Z8DsQ=jv2*=(uK8SFnHBn?1{>z<8?#BZ3d~vt5B|> zSPMzR5R!t19wO01jW_eunM5F7>?V2aNg-rA_pWab5!Mc)$iXUW4;FR~rB`5}r(FHW z7>E0JoHP+qq00gxMunb3SW^gbuMe9JnEDFyZupE6<)sHs$dqD>rG^5#AupvQ-2Ymu zDbQfDp2ua>UDcH)88$mHMTXX-Nvk4XS+iBj2RF}b4Stej+_+iek0R|bqUcN)rq%hJ z63vQmbjrHuetFkObd6q1oU+9GWafmeQ{C4+G1jHnq(P|0hkBLB6qxr3)-cj=-iHsR z_7L%x)65TY4W`i8y71Ub(%7otlEAd>n0Y7FwqczEGaouG&HHEC%7`b`U8hA{*Bj0r zKK@3d6Pq%A{;b5L?hZIwbH~q79FgwH1tsAej`*4{cE*C+3!-BcX|aQZV$6F;qQqN? zr`5Me{@&uGBhqjWC3Zn}Y_1UEA+dRL=_ag=H({N0lQwbEBz)SATWD1p1jG8%gMg5p z8*rhz!AXZhuqV9bT!*3RI#@aVb1y5khr!Bt|4U4Hc>99S)3=Fl<5f6JzS`?BufoR- z39YU4JIPy&x}ltN#W+MMz4BxaL|D7WXX(;I2Eu$_?8s+sk9#Us5rtIcP4RJY2@q$A zia98DhA=N3`r&CGV;ZFzXvh=Qen{+#gQZ1AQai*JXcMu07*noN|a0=$x zpm#x=5@bxsF-H3oa1mw$LDO~J+FJ;(5vU(2W7NRZJyK@Db28=z%)AqYR1@eFxMNbE zq73ZJ_0!?c1OFDdNuQOfozw4d!?rO}hVXa-<{MzY4fq^t5Bz=zdSjB9nTjy#fb+1E z!rw2T7U-8O?$+i2=Sw3P70eTW;Ny(81^#-_7-k=rGRI*T1G6re2`K?JbN)lEVN4K3 z&YzPlTmj|tz4(%hsmxB*hK`dl>k(cG+)oBb*vDUxF^fRoh12sDQpWm?l$kw2#ti)^ zf*A)40;a?5BE-EC)bdIY^9g7s^!q@opbwo9#Kg=_)t*E+Ct22@U#F?C4u$l)?(67;tbMl;+#27J{N<%2$` zn$bQ3oP)X;co}K~!Yu-_+>Cbm+*IwmFe?Lcq1FP=0mq3FuIm9RM8&`ZFjE+5s9`!)S$2$AP{Gbb#M^@G}$YyHFdDj!occ z8>k*;op8G!wDRK!KL4Ac_kBQ7KZ9NXP6LO5OK{Tz?1Op_unlOs@mO0mFIB7l8g(5s z5p*uF3u@99^iXex`UM~oupnLt}jlfzU z7W(C&FM}=u%>{i8bSAJ1>M9@^>IXC?CQs4f^nJ80~Yw%YYsj1YS0P z7Q)@8RPS*gaXQ-q^>Qcx(1=O!QBG*f4Y{@THz)MbO!XR zfCOL~^mh1P2kHPW0HRZj_FLE`gDwEx2TlODfKxEP_;PlriNpsS2daUSKyV#+gZ*DY z4?_PB(1EX}YHOf&0`EY7ANKp8{s`(y&=a5`a8m|#IZy}u0JGab2M~Cg(T)XH0efJ# z1C*3m0{k3mq2RaFu1uTPpALv;?^ev-}0@8pt0S`xvwjs2j8g?yiAO1?>VI0~*LuI zhIAB3$1bQzU%CzEHsC$zzX6Q}jRXRLZt%i^jzk=nVfPinybap#dq%qf>SsY`0Utn3 z!kPrS4*GoniDNJH*}zO-@&dF?fc}BeMngXqQ~{cRuqQ!17V0(VN1NfdtcRi&!0a5% zia@^tZb01*I_S-A?Y!GECJr?AM|=a3*O{P0p}&D|EFk;~z98`D-Zs2zz)YE_j=*I#hVb+E+9}CI=NkBTn^1^H!)cE>f^G_Vgtcs)-!Tmb; zwS#_EUS6IG`z60J+5(tW!0ZN42Q_t>(T)I`pneC`0W?6Zn4hXmhaZxMe?ULt3ep2J z26P!v3e1F_@Vptc8u~hvZ4bVIH$d0H%nRO%Ko@PJRmgV(8an%&-QOdQr|~g5HMt5|}CA*9g5hSR5=2 z45kbuF6c>oyFl;5ofBcTkC!t8uc0qOKF)x@8BlKkwgR(fb!#g?4+4#F>(xjZ($*hB zT@ABtq*1*B=>{!2A3)JiO92(I{z@QI3Pk-B$TSnTOZzj+9!Z a2W{Go$@vVX8I) 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%0A&Tx)xbUr=MD4!e4HKHo1BG&|VU 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�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

~rd>xDjs5;5nl@oH8-GHbY)}Wyo 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
IAz6TG2lZjoi$ilQFss=Ygo#d7cg-UL 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 f@QC$Xy8@96&*8DpNI literal 0 HcmV?d00001