Browse Source

ESP8266 support, preliminary support for Bitmaps

James Bowman 6 years ago
parent
commit
e6f6160c8e
5 changed files with 1158 additions and 79 deletions
  1. 179 52
      GD2.cpp
  2. 70 21
      GD2.h
  3. 882 0
      converted-assets/speedo_assets.h
  4. 2 1
      publish.py
  5. 25 5
      transports/wiring.h

+ 179 - 52
GD2.cpp

@@ -1,3 +1,10 @@
+/*
+ * Copyright (C) 2013-2017 by James Bowman <jamesb@excamera.com>
+ * Gameduino 2/3 library for Arduino, Arduino Due, Raspberry Pi,
+ * Teensy 3.2 and ESP8266.
+ *
+ */
+
 #include <Arduino.h>
 #include "SPI.h"
 #if !defined(__SAM3X8E__)
@@ -6,24 +13,19 @@
 #define VERBOSE       0
 #include <GD2.h>
 
-#define SD_PIN        9    // pin used for the microSD enable signal
+#if defined(ESP8266)
+#define SD_PIN        D9    // pin used for the microSD enable signal
+#else
+#define SD_PIN        9     // pin used for the microSD enable signal
+#endif
 
 #define BOARD_FTDI_80x    0
 #define BOARD_GAMEDUINO23 1
-#define BOARD_EVITA_0     2
 
 #define BOARD         BOARD_GAMEDUINO23 // board, from above
 #define STORAGE       1                 // Want SD storage?
 #define CALIBRATION   1                 // Want touchscreen?
 
-// EVITA_0 has no storage or calibration
-#if (BOARD == BOARD_EVITA_0)
-// #undef STORAGE
-// #define STORAGE 0
-#undef CALIBRATION
-#define CALIBRATION 0
-#endif
-
 // FTDI boards do not have storage
 #if (BOARD == BOARD_FTDI_80x)
 #undef STORAGE
@@ -104,6 +106,13 @@ class xy xy::operator-=(class xy &other)
   return *this;
 }
 
+class xy xy::operator<<=(int d)
+{
+  x <<= d;
+  y <<= d;
+  return *this;
+}
+
 long xy::operator*(class xy &other)
 {
   return (long(x) * other.x) + (long(y) * other.y);
@@ -135,6 +144,148 @@ int xy::nearer_than(int distance, xy &other)
 #undef SQ
 }
 
+void xy::rotate(int angle)
+{
+  // the hardware's convention that rotation is clockwise
+  int32_t s = GD.rsin(32767, angle);
+  int32_t c = GD.rcos(32767, angle);
+
+  int xr = ((x * c) - (y * s)) >> 15;
+  int yr = ((x * s) + (y * c)) >> 15;
+  x = xr;
+  y = yr;
+}
+
+////////////////////////////////////////////////////////////////////////
+
+void Bitmap::fromtext(int font, const char* s)
+{
+  GD.textsize(size.x, size.y, font, s);
+
+  int pclk = GD.rd16(REG_PCLK);
+  int vsize = GD.rd16(REG_VSIZE);
+  int hsize = GD.rd16(REG_HSIZE);
+
+  GD.finish();
+  GD.wr(REG_PCLK, 0);
+  GD.wr16(REG_HSIZE, size.x);
+  GD.wr16(REG_VSIZE, size.y);
+
+  GD.cmd_dlstart();
+  GD.Clear();
+  GD.BlendFunc(1,1);
+  GD.cmd_text(0, 0, font, 0, s);
+
+  GD.swap();
+  GD.cmd_snapshot(GD.loadptr);
+  GD.finish();
+
+  GD.wr16(REG_HSIZE, hsize);
+  GD.wr16(REG_VSIZE, vsize);
+  GD.wr16(REG_PCLK, pclk);
+
+  defaults(ARGB4);
+}
+
+void Bitmap::fromfile(const char* filename)
+{
+  GD.cmd_loadimage(GD.loadptr, OPT_NODL);
+  GD.load(filename);
+  uint32_t ptr, w, h;
+  GD.cmd_getprops(ptr, w, h);
+  GD.finish();
+  size.x = GD.rd16(w);
+  size.y = GD.rd16(h);
+  defaults(RGB565);
+}
+
+void Bitmap::defaults(uint8_t f)
+{
+  source = GD.loadptr;
+  format = f;
+  handle = -1;
+  center.x = size.x / 2;
+  center.y = size.y / 2;
+  GD.loadptr += 2UL * size.x * size.y;
+}
+
+void Bitmap::setup(void)
+{
+  GD.BitmapSource(source);
+  GD.BitmapLayout(format, 2 * size.x, size.y);
+  GD.BitmapSize(NEAREST, BORDER, BORDER, size.x, size.y);
+}
+
+void Bitmap::bind(uint8_t h)
+{
+  handle = h;
+
+  GD.BitmapHandle(handle);
+  setup();
+}
+
+void Bitmap::draw(int x, int y, int16_t angle)
+{
+  if (handle == -1) {
+    GD.BitmapHandle(15);
+    setup();
+  } else {
+    GD.BitmapHandle(handle);
+  }
+  GD.Begin(BITMAPS);
+
+  xy pos;
+  pos.set(x, y);
+
+  if (angle == 0) {
+    pos -= center;
+    GD.BitmapSize(NEAREST, BORDER, BORDER, size.x, size.y);
+    GD.Vertex2f(pos.x << 4, pos.y << 4);
+  } else {
+    pos <<= 4;
+
+    // Compute the screen positions of 4 corners of the bitmap
+    xy corners[4] = {
+      {0,0              },
+      {size.x,  0       },
+      {0,       size.y  },
+      {size.x,  size.y  },
+    };
+    for (int i = 0; i < 4; i++) {
+      xy &c = corners[i];
+      c -= center;
+      c <<= 4;
+      c.rotate(angle);
+      c += pos;
+    }
+
+    // Find top-left and bottom-right boundaries
+    xy topleft, bottomright;
+    topleft.set(
+      min(min(corners[0].x, corners[1].x), min(corners[2].x, corners[3].x)),
+      min(min(corners[0].y, corners[1].y), min(corners[2].y, corners[3].y)));
+    bottomright.set(
+      max(max(corners[0].x, corners[1].x), max(corners[2].x, corners[3].x)),
+      max(max(corners[0].y, corners[1].y), max(corners[2].y, corners[3].y)));
+
+    // span is the total size of this region
+    xy span = bottomright;
+    span -= topleft;
+    GD.BitmapSize(BILINEAR, BORDER, BORDER,
+                  (span.x + 15) >> 4, (span.y + 15) >> 4);
+
+    // Set up the transform and draw the bitmap
+    pos -= topleft;
+    GD.SaveContext();
+    GD.cmd_loadidentity();
+    GD.cmd_translate((int32_t)pos.x << 12, (int32_t)pos.y << 12);
+    GD.cmd_rotate(angle);
+    GD.cmd_translate(F16(-center.x), F16(-center.y));
+    GD.cmd_setmatrix();
+    GD.Vertex2f(topleft.x, topleft.y);
+    GD.RestoreContext();
+  }
+}
 
 ////////////////////////////////////////////////////////////////////////
 
@@ -147,7 +298,7 @@ GDClass GD;
 // The GD3 has a tiny configuration EEPROM - AT24C01D
 // It is programmed at manufacturing time with the setup
 // commands for the connected panel. The SCL,SDA lines
-// are connected to thye FT81x GPIO0, GPIO1 signals.
+// are connected to the FT81x GPIO0, GPIO1 signals.
 // This is a read-only driver for it.  A single method
 // 'read()' initializes the RAM and reads all 128 bytes
 // into an array.
@@ -293,7 +444,7 @@ void GDClass::tune(void)
 }
 
 void GDClass::begin(uint8_t options) {
-#if defined(ARDUINO)
+#if defined(ARDUINO) || defined(ESP8266)
   GDTR.begin0();
 
   if (STORAGE && (options & GD_STORAGE)) {
@@ -313,6 +464,7 @@ void GDClass::begin(uint8_t options) {
   GDTR.wr(REG_PCLK_POL, 1);
   GDTR.wr(REG_PCLK, 5);
 #endif
+
   GDTR.wr(REG_PWM_DUTY, 0);
   GDTR.wr(REG_GPIO_DIR, 0x83);
   GDTR.wr(REG_GPIO, GDTR.rd(REG_GPIO) | 0x80);
@@ -338,51 +490,22 @@ void GDClass::begin(uint8_t options) {
   }
 #endif
 
-  if (0) {
-    GDTR.wr16(REG_HCYCLE, 928);
-    GDTR.wr16(REG_HOFFSET, 88);
-    GDTR.wr16(REG_HSIZE, 800);
-    GDTR.wr16(REG_HSYNC0, 0);
-    GDTR.wr16(REG_HSYNC1, 48);
-
-    GDTR.wr16(REG_VCYCLE, 525);
-    GDTR.wr16(REG_VOFFSET, 32);
-    GDTR.wr16(REG_VSIZE, 480);
-    GDTR.wr16(REG_VSYNC0, 0);
-    GDTR.wr16(REG_VSYNC1, 3);
-
-    GDTR.wr16(REG_CSPREAD, 0);
-    GDTR.wr16(REG_DITHER, 1);
-    GDTR.wr16(REG_PCLK_POL, 1);
-    GDTR.wr16(REG_PCLK, 2);
-  }
-
-#if (BOARD == BOARD_EVITA_0)
-  GDTR.wr16(REG_HCYCLE,  1344);
-  GDTR.wr16(REG_HSIZE,   1024);
-  GDTR.wr16(REG_HSYNC0,  0   );
-  GDTR.wr16(REG_HSYNC1,  136 );
-  GDTR.wr16(REG_HOFFSET, 136+160);
-  GDTR.wr16(REG_VCYCLE,  806 );
-  GDTR.wr16(REG_VSIZE,   768 );
-  GDTR.wr16(REG_VSYNC0,  0   );
-  GDTR.wr16(REG_VSYNC1,  6    );
-  GDTR.wr16(REG_VOFFSET, 6+29  );
-  GDTR.wr16(REG_CSPREAD, 0   );
-  GDTR.wr16(REG_PCLK_POL,0   );
-  GDTR.wr16(REG_PCLK,    1   );
-  GDTR.wr(REG_GPIO, GDTR.rd(REG_GPIO) | 0x10);
-#endif
-
   w = GDTR.rd16(REG_HSIZE);
   h = GDTR.rd16(REG_VSIZE);
-  // w = 480, h = 272;
+  loadptr = 0;
+
+  // Work-around issue with bitmap sizes not being reset
+  for (byte i = 0; i < 32; i++) {
+    BitmapHandle(i);
+    cI(0x28000000UL);
+    cI(0x29000000UL);
+  }
+
   Clear(); swap();
   Clear(); swap();
   Clear(); swap();
   cmd_regwrite(REG_PWM_DUTY, 128);
-  GD.flush();
-// Serial.println("STOP"); for(;;);
+  flush();
 
   if (CALIBRATION & (options & GD_CALIBRATE)) {
 
@@ -603,7 +726,11 @@ void GDClass::cs(const char *s) {
   align(count + 1);
 }
 
+#if !defined(ESP8266)
 void GDClass::copy(const PROGMEM uint8_t *src, int count) {
+#else
+void GDClass::copy(const uint8_t *src, int count) {
+#endif
   byte a = count & 3;
   while (count--) {
     GDTR.cmdbyte(pgm_read_byte_near(src));
@@ -805,7 +932,7 @@ void GDClass::VertexFormat(byte frac) {
   cI((39UL << 24) | (((frac) & 7) << 0));
 }
 void GDClass::BitmapLayoutH(byte linestride, byte height) {
-  cI((40 << 24) | (((linestride) & 3) << 2) | (((height) & 3) << 0));
+  cI((40UL << 24) | (((linestride) & 3) << 2) | (((height) & 3) << 0));
 }
 void GDClass::BitmapSizeH(byte width, byte height) {
   cI((41UL << 24) | (((width) & 3) << 2) | (((height) & 3) << 0));

+ 70 - 21
GD2.h

@@ -1,6 +1,7 @@
 /*
- * Copyright (C) 2013-2016 by James Bowman <jamesb@excamera.com>
- * Gameduino 2 library for Arduino, Arduino Due, Raspberry Pi.
+ * Copyright (C) 2013-2017 by James Bowman <jamesb@excamera.com>
+ * Gameduino 2/3 library for Arduino, Arduino Due, Raspberry Pi,
+ * Teensy 3.2 and ESP8266.
  *
  */
 
@@ -209,7 +210,7 @@ class sdcard {
     desel();
 
   // for (;;) SPI.transfer(0xff);
-    delay(10);      // wait for boot
+    delay(50);      // wait for boot
     sd_delay(10);   // deselected, 80 pulses
 
     INFO("Attempting card reset... ");
@@ -235,6 +236,7 @@ class sdcard {
     REPORT(sdhc);
 
     INFO("Sending card init command");
+    attempts = 0;
     while (1) {
       appcmd(41, sdhc ? (1UL << 30) : 0); // card init
       r1 = R1();
@@ -243,15 +245,19 @@ class sdcard {
 #endif
       if ((r1 & 1) == 0)
         break;
+      if (++attempts == 300)
+        goto finished;
       delay(1);
     }
     INFO("OK");
 
     if (sdhc) {
-      cmd(58);
       uint32_t OCR = 0;
-      sdR3(OCR);
-      REPORT(OCR);
+      for (int i = 10; i; i--) {
+        cmd(58);
+        sdR3(OCR);
+        REPORT(OCR);
+      }
       ccs = 1UL & (OCR >> 30);
     } else {
       ccs = 0;
@@ -261,26 +267,28 @@ class sdcard {
     // Test point: dump sector 0 to serial.
     // should see first 512 bytes of card, ending 55 AA.
 #if 0
-    if (0) {
-      cmd17(0);
-      for (int i = 0; i < 512; i++) {
-        delay(10);
-        byte b = SPI.transfer(0xff);
-        Serial.print(b, HEX);
-        Serial.print(' ');
-        if ((i & 15) == 15)
-          Serial.println();
-      }
-      desel();
-      for (;;);
+    cmd17(0);
+    for (int i = 0; i < 512; i++) {
+      delay(10);
+      byte b = SPI.transfer(0xff);
+      Serial.print(b, HEX);
+      Serial.print(' ');
+      if ((i & 15) == 15)
+        Serial.println();
     }
+    desel();
+    for (;;);
 #endif
 
-#if !defined(__DUE__)
+#if !defined(__DUE__) && !defined(ESP8266)
     SPI.setClockDivider(SPI_CLOCK_DIV2);
     SPSR = (1 << SPI2X);
 #endif
 
+#if defined(ESP8266)
+  SPI.setFrequency(40000000L);
+#endif
+
     type_code = rd(0x1be + 0x4);
     switch (type_code) {
       default:
@@ -413,7 +421,9 @@ public:
   void rmove(int distance, int angle);
   int angleto(class xy &other);
   void draw(byte offset = 0);
+  void rotate(int angle);
   int onscreen(void);
+  class xy operator<<=(int d);
   class xy operator+=(class xy &other);
   class xy operator-=(class xy &other);
   long operator*(class xy &other);
@@ -421,11 +431,31 @@ public:
   int nearer_than(int distance, xy &other);
 };
 
+class Bitmap {
+public:
+  xy size, center;
+  uint32_t source;
+  uint16_t format;
+  int8_t handle;
+
+  void fromtext(int font, const char* s);
+  void fromfile(const char *filename);
+
+  void bind(uint8_t handle);
+
+  void draw(int x, int y, int16_t angle = 0);
+
+private:
+  void defaults(uint8_t f);
+  void setup(void);
+};
+
 ////////////////////////////////////////////////////////////////////////
 
 class GDClass {
 public:
   int w, h;
+  uint32_t loadptr;
 
   void begin(uint8_t options = (GD_CALIBRATE | GD_TRIM | GD_STORAGE));
 
@@ -437,7 +467,11 @@ public:
   void polar(int &x, int &y, int16_t r, uint16_t th);
   uint16_t atan2(int16_t y, int16_t x);
 
+#if !defined(ESP8266)
   void copy(const PROGMEM uint8_t *src, int count);
+#else
+  void copy(const uint8_t *src, int count);
+#endif
   void copyram(byte *src, int count);
 
   void self_calibrate(void);
@@ -671,9 +705,15 @@ public:
   }
 
   void fetch512(byte *dst) {
-#if defined(__DUE__) || defined(TEENSYDUINO)
+#if defined(__DUE__) || defined(TEENSYDUINO) || defined(ESP8266)
+
+#if defined(ESP8266)
+    SPI.transferBytes(NULL, dst, 512);
+#else
     for (int i = 0; i < 512; i++)
       *dst++ = SPI.transfer(0xff);
+#endif
+
     SPI.transfer(0xff);   // consume CRC
     SPI.transfer(0xff);
 #else
@@ -795,7 +835,7 @@ typedef struct {
 #define PIXELS(x)  int((x) * 16)
 
 // Convert degrees to Furmans
-#define DEGREES(n) ((65536UL * (n)) / 360)
+#define DEGREES(n) ((65536L * (n)) / 360)
 
 #define NEVER                0
 #define LESS                 1
@@ -1144,5 +1184,14 @@ public:
 
 #endif
 
+/*
+ * PROGMEM declarations are currently not supported by the ESP8266
+ * comppiler. So redefine PROGMEM to nothing.
+ */
+
+#if defined(ESP8266)
+#undef PROGMEM
+#define PROGMEM
 #endif
 
+#endif

+ 882 - 0
converted-assets/speedo_assets.h

@@ -0,0 +1,882 @@
+#define GAUGEFACE_HANDLE 0
+#define GAUGEFACE_WIDTH 256
+#define GAUGEFACE_HEIGHT 256
+#define GAUGEFACE_CELLS 1
+#define OFFSETNEEDLE_HANDLE 1
+#define OFFSETNEEDLE_WIDTH 76
+#define OFFSETNEEDLE_HEIGHT 64
+#define OFFSETNEEDLE_CELLS 1
+#define ASSETS_END 140800UL
+static const PROGMEM uint8_t __assets[13004] = {
+0, 0, 0, 5, 0, 0, 0, 1, 0, 1, 2, 8, 0, 1, 52, 7, 1, 0, 0, 5, 0, 0, 2,
+1, 64, 152, 0, 8, 64, 48, 49, 7, 34, 255, 255, 255, 0, 0, 0, 0, 120,
+156, 237, 125, 13, 144, 108, 199, 117, 214, 36, 1, 191, 39, 59, 49,
+111, 9, 32, 9, 28, 71, 25, 19, 226, 159, 74, 120, 246, 132, 178, 37,
+219, 137, 2, 19, 92, 86, 170, 194, 11, 246, 96, 91, 113, 57, 161, 192,
+55, 85, 114, 1, 34, 161, 116, 237, 200, 73, 108, 168, 194, 23, 91, 1,
+21, 80, 224, 9, 118, 162, 114, 85, 202, 214, 216, 10, 10, 169, 2, 71,
+99, 9, 83, 24, 156, 144, 177, 144, 93, 20, 182, 99, 239, 139, 169,
+114, 16, 9, 241, 62, 164, 221, 157, 153, 157, 221, 247, 134, 62, 125,
+238, 185, 253, 115, 187, 251, 118, 247, 189, 119, 238, 60, 105, 186,
+75, 218, 121, 187, 179, 187, 119, 239, 247, 157, 115, 190, 115, 250,
+220, 238, 94, 111, 55, 118, 99, 55, 118, 99, 55, 118, 99, 55, 118, 99,
+55, 118, 99, 55, 118, 99, 55, 118, 99, 55, 118, 99, 55, 118, 227, 186,
+30, 23, 122, 23, 123, 151, 122, 119, 247, 222, 211, 187, 191, 247,
+112, 239, 211, 189, 39, 216, 252, 26, 155, 255, 79, 154, 240, 111,
+248, 252, 167, 217, 59, 238, 103, 239, 188, 155, 125, 199, 69, 246,
+157, 187, 113, 125, 14, 64, 252, 61, 12, 203, 39, 20, 148, 99, 230,
+19, 236, 167, 188, 135, 179, 97, 55, 182, 125, 92, 100, 118, 251, 128,
+5, 243, 167, 246, 112, 62, 45, 102, 95, 250, 127, 49, 217, 123, 122,
+48, 205, 92, 120, 128, 253, 134, 29, 19, 182, 109, 220, 206, 109, 93,
+67, 11, 209, 38, 140, 251, 218, 171, 242, 103, 204, 175, 10, 70, 168,
+63, 29, 124, 194, 237, 93, 255, 217, 207, 250, 113, 11, 179, 198, 135,
+75, 86, 110, 193, 186, 127, 200, 255, 83, 230, 100, 181, 127, 85, 255,
+92, 159, 222, 95, 226, 68, 206, 5, 149, 7, 119, 179, 171, 216, 141,
+77, 143, 139, 204, 254, 158, 208, 113, 87, 61, 123, 25, 237, 242, 156,
+158, 30, 92, 171, 126, 151, 22, 33, 132, 87, 16, 113, 225, 61, 189,
+139, 123, 223, 212, 245, 77, 121, 86, 12, 21, 121, 13, 119, 63, 212,
+131, 241, 119, 49, 129, 243, 128, 199, 154, 207, 239, 189, 119, 239,
+229, 93, 223, 158, 103, 240, 184, 192, 124, 173, 140, 188, 240, 236,
+10, 234, 131, 35, 152, 230, 87, 248, 81, 188, 2, 252, 93, 239, 215,
+95, 169, 76, 144, 226, 196, 83, 197, 252, 252, 222, 223, 223, 219,
+235, 250, 86, 61, 227, 198, 37, 41, 206, 171, 17, 158, 80, 63, 244,
+65, 177, 46, 254, 197, 43, 69, 45, 200, 234, 32, 159, 191, 190, 247,
+99, 187, 120, 208, 200, 0, 171, 255, 154, 140, 252, 94, 201, 222, 253,
+177, 107, 12, 127, 205, 23, 232, 249, 2, 159, 255, 107, 231, 9, 106,
+142, 11, 44, 214, 139, 108, 206, 224, 235, 235, 206, 224, 248, 239,
+175, 14, 136, 5, 239, 221, 113, 32, 106, 92, 236, 61, 32, 176, 183,
+89, 253, 150, 225, 207, 57, 80, 102, 65, 255, 35, 253, 87, 116, 125,
+59, 175, 171, 113, 75, 129, 189, 102, 245, 102, 47, 46, 94, 209, 123,
+54, 227, 255, 77, 215, 33, 60, 65, 95, 157, 31, 233, 247, 187, 190,
+173, 215, 197, 144, 176, 87, 189, 61, 221, 99, 211, 220, 30, 252, 249,
+71, 201, 23, 40, 76, 216, 113, 192, 61, 46, 244, 238, 151, 176, 199,
+59, 88, 129, 252, 86, 226, 239, 242, 4, 255, 188, 255, 39, 187, 190,
+205, 91, 58, 238, 214, 124, 190, 98, 247, 229, 123, 252, 34, 11, 58,
+29, 199, 127, 135, 34, 40, 56, 240, 211, 253, 111, 238, 250, 102, 111,
+217, 184, 148, 87, 118, 158, 146, 235, 244, 224, 73, 237, 182, 94,
+109, 245, 91, 130, 127, 206, 2, 133, 1, 95, 24, 188, 161, 235, 91,
+190, 53, 227, 2, 213, 118, 246, 180, 106, 78, 157, 89, 229, 157, 241,
+227, 236, 172, 61, 255, 47, 191, 95, 120, 2, 156, 3, 248, 11, 127, 99,
+240, 237, 93, 223, 250, 45, 24, 63, 89, 228, 120, 53, 176, 79, 22,
+233, 114, 83, 248, 167, 139, 245, 58, 20, 127, 122, 53, 60, 154, 172,
+80, 17, 112, 6, 28, 14, 254, 214, 224, 91, 186, 6, 160, 195, 113, 75,
+239, 211, 185, 215, 231, 200, 39, 139, 236, 36, 206, 218, 39, 167,
+179, 51, 219, 215, 154, 198, 127, 52, 31, 175, 98, 241, 159, 158, 174,
+215, 195, 35, 201, 7, 28, 14, 254, 243, 224, 69, 93, 195, 208, 209,
+184, 91, 247, 250, 147, 21, 187, 59, 199, 254, 168, 87, 221, 237, 109,
+155, 163, 249, 122, 205, 236, 63, 143, 4, 146, 23, 248, 153, 103, 157,
+23, 200, 99, 190, 228, 245, 57, 106, 7, 215, 236, 118, 28, 54, 213,
+76, 76, 125, 213, 21, 254, 224, 109, 164, 127, 115, 14, 32, 3, 134,
+159, 25, 254, 169, 174, 33, 217, 224, 184, 132, 43, 58, 123, 66, 231,
+231, 115, 124, 178, 94, 167, 139, 102, 24, 224, 227, 157, 253, 43, 7,
+245, 244, 31, 204, 116, 201, 254, 182, 165, 198, 63, 158, 231, 50,
+252, 143, 134, 95, 31, 190, 177, 107, 88, 54, 52, 238, 151, 99, 190,
+94, 221, 217, 191, 74, 17, 249, 153, 134, 255, 193, 181, 253, 171,
+202, 231, 116, 6, 28, 13, 255, 229, 240, 143, 117, 13, 78, 203, 35,
+87, 124, 104, 249, 38, 165, 159, 176, 24, 137, 250, 170, 249, 105,
+194, 169, 252, 213, 38, 240, 47, 191, 31, 60, 219, 104, 174, 125, 85,
+242, 2, 57, 3, 62, 51, 252, 243, 93, 67, 212, 226, 184, 29, 253, 126,
+223, 138, 62, 204, 217, 89, 152, 10, 180, 97, 93, 198, 105, 112, 52,
+60, 30, 30, 143, 230, 48, 147, 57, 203, 25, 89, 214, 152, 46, 18, 152,
+240, 185, 99, 248, 42, 125, 111, 179, 115, 120, 188, 94, 79, 207, 28,
+239, 224, 106, 144, 51, 224, 235, 195, 97, 215, 48, 181, 52, 238, 150,
+21, 95, 142, 135, 1, 185, 17, 220, 171, 211, 102, 44, 30, 208, 6, 156,
+179, 229, 248, 100, 188, 154, 172, 166, 167, 211, 179, 25, 159, 251,
+87, 97, 130, 79, 198, 137, 159, 157, 158, 78, 78, 199, 171, 241, 73,
+198, 121, 193, 24, 97, 96, 147, 89, 77, 150, 95, 201, 239, 226, 121,
+223, 177, 51, 75, 193, 156, 240, 136, 115, 224, 31, 140, 254, 120,
+215, 96, 53, 62, 30, 64, 244, 7, 133, 221, 15, 11, 123, 83, 94, 129,
+175, 100, 121, 96, 50, 175, 135, 58, 195, 252, 4, 240, 70, 164, 15,
+174, 29, 92, 91, 231, 3, 94, 151, 231, 90, 25, 140, 23, 215, 128, 19,
+140, 15, 171, 236, 36, 93, 140, 138, 171, 137, 137, 255, 34, 239, 115,
+115, 8, 88, 0, 252, 103, 243, 87, 159, 81, 12, 184, 128, 81, 31, 149,
+142, 140, 190, 1, 127, 206, 0, 161, 149, 194, 112, 79, 230, 41, 179,
+244, 9, 71, 29, 49, 5, 108, 209, 190, 1, 203, 9, 179, 109, 152, 217,
+82, 159, 248, 249, 201, 138, 56, 35, 56, 113, 192, 153, 0, 223, 153,
+46, 147, 185, 136, 76, 254, 248, 99, 149, 169, 90, 87, 228, 126, 224,
+144, 51, 224, 191, 140, 254, 116, 215, 176, 53, 52, 110, 193, 181, 29,
+192, 30, 255, 90, 194, 222, 108, 255, 128, 127, 198, 114, 165, 108,
+105, 194, 216, 134, 124, 186, 24, 159, 76, 11, 220, 17, 117, 64, 28,
+125, 121, 10, 17, 254, 120, 144, 235, 236, 188, 234, 98, 156, 240,
+245, 17, 240, 136, 199, 12, 96, 3, 49, 9, 126, 42, 176, 40, 59, 73,
+22, 112, 181, 46, 79, 32, 127, 141, 242, 62, 95, 252, 65, 27, 195, 53,
+140, 126, 127, 244, 221, 93, 67, 215, 192, 184, 200, 53, 223, 83, 178,
+226, 51, 69, 125, 125, 138, 202, 172, 31, 242, 104, 177, 194, 86, 179,
+37, 32, 110, 195, 186, 168, 188, 21, 175, 68, 69, 86, 126, 5, 124, 0,
+46, 0, 19, 4, 183, 128, 89, 99, 137, 5, 238, 9, 239, 15, 82, 139, 92,
+9, 228, 12, 248, 75, 93, 195, 87, 115, 220, 110, 142, 250, 166, 169,
+122, 2, 140, 153, 190, 200, 11, 84, 208, 210, 209, 202, 185, 150, 58,
+34, 171, 214, 185, 32, 199, 124, 166, 55, 29, 62, 1, 127, 194, 168,
+196, 52, 153, 5, 54, 187, 134, 188, 47, 89, 184, 172, 94, 121, 37,
+113, 0, 253, 80, 242, 87, 187, 134, 176, 198, 16, 232, 87, 96, 143,
+113, 95, 48, 1, 94, 79, 152, 102, 30, 225, 235, 18, 242, 163, 121,
+182, 156, 20, 200, 231, 209, 121, 129, 184, 235, 147, 208, 87, 95, 13,
+14, 129, 95, 56, 185, 218, 172, 192, 95, 240, 32, 129, 223, 189, 2,
+255, 132, 172, 155, 172, 210, 37, 169, 130, 114, 36, 200, 78, 40, 151,
+169, 194, 95, 124, 39, 113, 0, 126, 215, 117, 204, 128, 75, 57, 250,
+188, 139, 99, 88, 133, 190, 226, 9, 240, 227, 236, 108, 148, 191, 46,
+144, 231, 26, 15, 172, 16, 173, 23, 238, 62, 179, 193, 57, 40, 38, 19,
+246, 118, 252, 97, 37, 22, 121, 48, 62, 153, 157, 249, 162, 111, 99,
+1, 168, 2, 200, 17, 234, 212, 21, 75, 248, 3, 3, 142, 57, 3, 254, 70,
+215, 80, 70, 140, 159, 44, 208, 63, 242, 68, 95, 179, 255, 225, 177,
+106, 247, 67, 244, 248, 197, 61, 159, 157, 217, 109, 222, 134, 191,
+73, 255, 29, 92, 75, 23, 254, 200, 11, 229, 128, 44, 0, 246, 136, 235,
+73, 244, 10, 95, 228, 43, 41, 10, 32, 3, 146, 174, 225, 12, 28, 151,
+124, 61, 191, 26, 245, 93, 209, 62, 89, 192, 211, 218, 20, 121, 65,
+223, 153, 176, 54, 199, 122, 251, 204, 150, 44, 211, 180, 96, 108,
+214, 132, 242, 196, 223, 151, 46, 72, 21, 236, 95, 29, 175, 146, 121,
+99, 21, 196, 167, 37, 6, 92, 79, 62, 224, 146, 98, 251, 222, 126, 95,
+247, 255, 226, 21, 96, 63, 227, 119, 24, 98, 61, 105, 251, 33, 214,
+74, 42, 60, 128, 205, 255, 227, 199, 131, 107, 217, 50, 132, 47, 54,
+79, 144, 46, 48, 26, 176, 43, 188, 42, 252, 64, 157, 117, 37, 193, 3,
+174, 3, 231, 233, 155, 186, 134, 213, 115, 220, 94, 15, 125, 157, 9,
+201, 2, 124, 44, 69, 123, 240, 248, 52, 101, 252, 227, 152, 48, 62,
+57, 184, 22, 235, 57, 116, 38, 96, 52, 216, 207, 89, 58, 62, 193, 154,
+97, 76, 252, 47, 43, 65, 200, 61, 216, 124, 93, 215, 208, 122, 140,
+139, 205, 161, 207, 117, 126, 30, 95, 17, 123, 180, 251, 230, 240, 95,
+175, 199, 39, 38, 252, 195, 88, 32, 123, 130, 100, 14, 81, 10, 245,
+64, 182, 20, 185, 97, 228, 106, 162, 206, 128, 87, 118, 13, 111, 197,
+184, 5, 170, 61, 77, 161, 159, 46, 65, 231, 139, 120, 31, 135, 186,
+29, 127, 254, 244, 71, 77, 171, 47, 191, 194, 88, 128, 28, 152, 158,
+38, 11, 217, 154, 171, 95, 33, 222, 154, 14, 228, 74, 128, 51, 224,
+201, 244, 123, 186, 134, 216, 49, 46, 40, 232, 71, 227, 143, 25, 62,
+249, 82, 25, 123, 29, 255, 80, 212, 101, 253, 159, 96, 133, 169, 54,
+234, 66, 9, 10, 149, 136, 154, 144, 34, 1, 172, 252, 53, 161, 4, 97,
+85, 139, 49, 224, 198, 174, 97, 182, 142, 79, 19, 250, 241, 216, 203,
+150, 15, 94, 159, 42, 122, 238, 25, 19, 9, 192, 158, 204, 154, 48,
+212, 39, 8, 78, 12, 143, 40, 90, 193, 53, 160, 110, 33, 47, 16, 229,
+255, 53, 37, 8, 181, 232, 244, 179, 233, 185, 174, 129, 54, 14, 190,
+194, 91, 31, 125, 166, 247, 10, 239, 9, 216, 195, 132, 187, 137, 245,
+22, 51, 23, 204, 248, 219, 153, 224, 206, 9, 226, 153, 0, 171, 15,
+240, 145, 175, 94, 112, 69, 56, 89, 17, 143, 71, 199, 238, 72, 96,
+199, 95, 101, 64, 182, 204, 62, 150, 157, 239, 26, 236, 210, 224, 59,
+53, 12, 180, 74, 223, 104, 30, 108, 249, 146, 223, 4, 173, 79, 248, 3,
+246, 84, 233, 115, 249, 1, 127, 79, 160, 127, 181, 10, 127, 31, 22,
+80, 68, 129, 154, 50, 121, 132, 108, 137, 121, 33, 243, 2, 206, 234,
+144, 23, 254, 79, 195, 243, 39, 140, 1, 89, 215, 112, 107, 227, 82,
+190, 194, 91, 75, 245, 65, 85, 159, 60, 38, 90, 62, 225, 10, 235, 176,
+46, 236, 171, 80, 167, 247, 113, 255, 185, 160, 245, 126, 172, 254,
+83, 63, 0, 173, 18, 211, 234, 81, 140, 38, 0, 91, 31, 159, 192, 71,
+121, 69, 9, 189, 0, 112, 154, 214, 129, 237, 179, 82, 43, 60, 13, 171,
+227, 108, 190, 185, 107, 200, 165, 113, 139, 200, 249, 92, 126, 29,
+86, 194, 92, 232, 143, 87, 216, 145, 5, 118, 46, 163, 13, 172, 48,
+169, 0, 31, 212, 105, 37, 95, 116, 117, 184, 39, 118, 138, 96, 215,
+128, 125, 253, 216, 134, 255, 232, 152, 186, 78, 212, 202, 33, 120, 1,
+136, 105, 240, 183, 185, 16, 134, 206, 167, 106, 53, 8, 118, 194, 230,
+139, 187, 134, 189, 24, 79, 32, 250, 67, 169, 191, 18, 60, 63, 125,
+164, 87, 147, 83, 43, 246, 140, 29, 194, 239, 163, 207, 71, 14, 192,
+255, 1, 59, 156, 16, 69, 69, 76, 176, 79, 129, 186, 192, 188, 220, 5,
+36, 38, 122, 2, 157, 35, 184, 194, 171, 86, 154, 41, 38, 152, 153, 0,
+248, 195, 239, 4, 164, 213, 175, 64, 70, 128, 113, 96, 114, 106, 239,
+38, 99, 156, 157, 251, 40, 65, 174, 2, 190, 52, 190, 161, 107, 224,
+249, 128, 126, 254, 167, 68, 220, 183, 227, 111, 183, 252, 180, 240,
+251, 112, 183, 117, 252, 1, 53, 248, 8, 26, 32, 91, 202, 248, 151, 89,
+128, 235, 114, 250, 42, 125, 222, 209, 57, 55, 121, 142, 178, 191,
+208, 185, 67, 157, 5, 228, 15, 236, 248, 243, 231, 151, 242, 248, 159,
+45, 245, 175, 82, 28, 152, 158, 81, 85, 192, 63, 254, 235, 58, 144,
+95, 227, 131, 93, 67, 223, 203, 35, 63, 215, 125, 220, 142, 203, 248,
+151, 153, 96, 138, 250, 249, 74, 250, 66, 70, 95, 224, 63, 89, 33, 50,
+232, 1, 100, 252, 9, 83, 120, 69, 43, 178, 180, 78, 64, 94, 92, 87,
+135, 126, 117, 3, 242, 34, 242, 207, 68, 5, 106, 215, 132, 162, 162,
+128, 58, 160, 236, 31, 160, 170, 177, 94, 67, 60, 171, 135, 63, 172,
+92, 49, 94, 191, 165, 99, 244, 111, 193, 190, 78, 225, 251, 85, 91,
+175, 214, 255, 80, 225, 165, 168, 175, 163, 47, 252, 255, 244, 148,
+152, 128, 17, 64, 159, 233, 2, 215, 97, 213, 21, 34, 25, 245, 106,
+188, 237, 153, 160, 254, 243, 49, 34, 152, 236, 31, 254, 18, 248, 10,
+244, 47, 210, 59, 202, 74, 0, 217, 158, 85, 106, 65, 183, 14, 4, 46,
+177, 249, 146, 78, 241, 231, 21, 159, 161, 20, 249, 171, 124, 189, 9,
+125, 176, 7, 57, 234, 235, 248, 195, 189, 7, 110, 192, 71, 221, 227,
+163, 213, 83, 165, 80, 84, 139, 244, 76, 208, 207, 230, 205, 248, 227,
+199, 81, 209, 121, 130, 190, 202, 196, 129, 225, 17, 198, 49, 168,
+255, 232, 234, 80, 84, 7, 193, 143, 129, 66, 168, 203, 0, 88, 25, 27,
+255, 118, 135, 42, 128, 63, 209, 33, 163, 111, 242, 250, 54, 37, 0,
+207, 224, 160, 226, 199, 92, 159, 175, 113, 46, 48, 11, 211, 39, 234,
+119, 204, 10, 201, 255, 163, 199, 23, 120, 168, 85, 98, 87, 150, 168,
+199, 255, 16, 118, 128, 47, 152, 72, 245, 41, 161, 9, 124, 50, 5, 161,
+4, 208, 7, 64, 54, 16, 234, 255, 229, 56, 192, 99, 192, 187, 58, 66,
+255, 22, 140, 252, 170, 234, 19, 179, 138, 9, 128, 62, 100, 75, 136,
+190, 142, 191, 153, 7, 194, 39, 64, 100, 150, 43, 69, 213, 57, 65,
+157, 149, 67, 221, 55, 80, 223, 15, 114, 128, 62, 27, 206, 128, 131,
+107, 196, 128, 48, 252, 137, 1, 195, 99, 158, 203, 116, 19, 3, 208,
+247, 31, 199, 225, 95, 104, 225, 83, 172, 188, 248, 227, 111, 194,
+222, 172, 9, 171, 241, 215, 153, 16, 162, 18, 176, 46, 193, 51, 186,
+21, 112, 32, 116, 13, 17, 116, 205, 193, 154, 24, 16, 135, 63, 228, 1,
+16, 3, 38, 207, 221, 56, 250, 224, 251, 149, 200, 239, 231, 245, 69,
+173, 7, 108, 31, 243, 61, 155, 215, 47, 91, 61, 162, 79, 213, 52, 191,
+181, 161, 50, 254, 33, 90, 64, 85, 2, 58, 198, 50, 7, 252, 123, 136,
+73, 9, 140, 142, 145, 197, 245, 86, 8, 65, 255, 76, 126, 118, 195,
+232, 163, 238, 63, 212, 209, 119, 219, 191, 120, 47, 102, 65, 104,
+251, 190, 86, 143, 95, 31, 231, 217, 2, 118, 2, 185, 42, 1, 254, 241,
+63, 196, 234, 117, 38, 160, 31, 192, 107, 130, 78, 178, 48, 31, 0, 12,
+168, 171, 4, 33, 6, 176, 249, 210, 141, 226, 255, 176, 240, 253, 102,
+244, 93, 156, 64, 12, 41, 238, 151, 39, 49, 66, 229, 132, 240, 250,
+160, 245, 84, 158, 232, 254, 95, 127, 21, 170, 4, 124, 184, 33, 115,
+66, 68, 51, 172, 21, 2, 182, 223, 239, 165, 9, 121, 20, 200, 179, 193,
+80, 255, 79, 156, 1, 143, 56, 121, 100, 131, 232, 95, 18, 186, 63, 4,
+125, 156, 88, 9, 183, 163, 175, 226, 47, 62, 78, 242, 92, 65, 199, 94,
+229, 65, 44, 254, 117, 187, 201, 32, 47, 32, 77, 63, 42, 158, 52, 244,
+99, 0, 102, 131, 180, 131, 93, 56, 254, 253, 67, 94, 193, 190, 115,
+99, 248, 63, 1, 53, 159, 112, 235, 71, 244, 233, 46, 145, 238, 243,
+193, 31, 45, 223, 84, 33, 244, 103, 66, 92, 78, 240, 195, 158, 248,
+227, 119, 161, 103, 227, 43, 189, 222, 43, 199, 184, 50, 0, 22, 65,
+207, 137, 249, 227, 79, 12, 0, 255, 51, 249, 195, 13, 169, 192, 187,
+37, 223, 239, 133, 191, 96, 73, 146, 87, 62, 76, 182, 175, 235, 127,
+61, 230, 219, 45, 223, 109, 235, 109, 43, 1, 21, 77, 236, 95, 128,
+122, 149, 143, 237, 203, 21, 33, 88, 23, 128, 213, 159, 88, 21, 56,
+61, 157, 222, 187, 1, 244, 47, 136, 172, 63, 212, 246, 105, 141, 15,
+172, 216, 53, 85, 251, 167, 200, 234, 99, 249, 190, 86, 223, 52, 19,
+100, 95, 15, 221, 10, 114, 28, 240, 155, 24, 21, 97, 133, 52, 88, 255,
+29, 113, 213, 113, 12, 85, 242, 233, 159, 107, 29, 255, 251, 201, 250,
+97, 141, 11, 24, 235, 141, 62, 207, 249, 72, 189, 97, 23, 134, 61, 6,
+208, 20, 126, 223, 237, 37, 124, 50, 199, 80, 78, 232, 154, 208, 151,
+9, 148, 17, 80, 78, 232, 242, 23, 34, 10, 192, 179, 8, 144, 11, 146,
+207, 247, 243, 255, 217, 9, 244, 27, 100, 203, 220, 3, 252, 155, 150,
+209, 199, 154, 95, 158, 245, 65, 238, 194, 174, 120, 229, 25, 249,
+243, 216, 72, 168, 11, 252, 109, 44, 16, 90, 193, 172, 9, 171, 243,
+197, 102, 241, 183, 121, 7, 83, 55, 33, 198, 244, 178, 18, 176, 51,
+96, 196, 45, 138, 233, 192, 133, 47, 254, 201, 130, 215, 80, 206, 208,
+103, 192, 46, 67, 108, 190, 172, 85, 252, 31, 128, 189, 219, 132, 239,
+199, 120, 14, 207, 80, 85, 161, 143, 43, 252, 160, 250, 125, 241, 199,
+10, 43, 213, 7, 237, 248, 251, 87, 142, 84, 149, 224, 195, 131, 58,
+57, 1, 102, 118, 176, 98, 229, 135, 63, 213, 132, 225, 59, 170, 241,
+103, 254, 158, 223, 249, 100, 33, 34, 1, 116, 77, 79, 63, 222, 34,
+250, 23, 101, 235, 23, 138, 30, 171, 248, 201, 194, 29, 249, 109, 186,
+207, 28, 255, 9, 125, 31, 132, 155, 213, 132, 110, 95, 95, 29, 255,
+117, 139, 6, 45, 248, 253, 158, 74, 48, 93, 96, 93, 108, 84, 161, 2,
+198, 232, 245, 79, 212, 207, 14, 14, 185, 7, 120, 117, 107, 248, 63,
+172, 90, 191, 152, 208, 183, 198, 175, 219, 130, 255, 164, 136, 252,
+178, 213, 219, 163, 63, 229, 81, 174, 156, 176, 189, 248, 111, 183,
+255, 80, 78, 144, 22, 244, 203, 6, 100, 21, 48, 44, 213, 250, 233, 85,
+186, 196, 202, 185, 88, 57, 212, 60, 192, 180, 37, 244, 185, 245, 219,
+179, 126, 244, 71, 176, 15, 66, 217, 247, 83, 228, 39, 175, 47, 94,
+233, 145, 0, 123, 115, 81, 61, 201, 252, 40, 227, 223, 84, 36, 240,
+241, 18, 114, 150, 16, 230, 39, 160, 38, 32, 24, 96, 138, 4, 170, 231,
+128, 125, 41, 240, 253, 38, 255, 15, 123, 98, 240, 167, 75, 230, 37,
+37, 152, 123, 0, 222, 39, 249, 154, 86, 240, 127, 128, 170, 62, 35,
+75, 230, 151, 230, 61, 174, 169, 162, 6, 208, 247, 207, 242, 138, 79,
+53, 254, 38, 244, 245, 232, 224, 194, 223, 206, 131, 50, 254, 58, 19,
+252, 163, 68, 72, 55, 153, 96, 64, 53, 254, 164, 2, 48, 6, 168, 248,
+67, 52, 57, 184, 38, 246, 144, 54, 85, 130, 64, 51, 207, 62, 209, 2,
+250, 23, 242, 154, 111, 69, 222, 159, 157, 160, 38, 21, 232, 143, 37,
+223, 95, 141, 127, 21, 250, 38, 38, 52, 133, 127, 91, 49, 1, 125, 128,
+77, 9, 150, 149, 3, 40, 170, 114, 38, 8, 254, 21, 118, 145, 116, 87,
+2, 97, 231, 52, 54, 95, 208, 56, 254, 247, 83, 236, 175, 174, 251, 76,
+86, 34, 39, 196, 186, 134, 88, 229, 119, 79, 204, 248, 228, 184, 111,
+195, 58, 68, 9, 202, 241, 63, 100, 170, 88, 251, 76, 119, 77, 136, 43,
+123, 15, 37, 56, 60, 66, 181, 76, 79, 13, 210, 58, 159, 95, 109, 136,
+123, 128, 15, 53, 140, 254, 5, 147, 242, 175, 158, 73, 94, 191, 161,
+29, 55, 221, 246, 79, 232, 251, 113, 165, 169, 154, 64, 92, 150, 16,
+222, 77, 12, 12, 192, 245, 65, 221, 254, 77, 153, 32, 90, 141, 222,
+29, 86, 182, 122, 83, 79, 80, 11, 30, 160, 168, 249, 135, 160, 15, 43,
+189, 170, 238, 119, 79, 204, 151, 77, 154, 192, 143, 15, 166, 72, 96,
+91, 49, 104, 86, 19, 202, 94, 194, 198, 8, 236, 246, 128, 78, 118,
+217, 95, 216, 52, 33, 222, 185, 204, 186, 38, 104, 199, 191, 207, 119,
+52, 155, 189, 187, 81, 252, 191, 134, 53, 127, 155, 242, 179, 232,
+193, 5, 214, 51, 16, 203, 201, 138, 118, 91, 132, 213, 238, 242, 164,
+170, 185, 234, 37, 100, 252, 253, 121, 80, 71, 19, 212, 195, 223, 21,
+47, 80, 217, 209, 142, 35, 122, 188, 24, 159, 208, 147, 227, 184, 158,
+140, 214, 64, 187, 200, 132, 224, 63, 98, 191, 103, 246, 71, 179, 111,
+109, 12, 253, 219, 35, 173, 127, 69, 157, 185, 194, 186, 241, 41, 46,
+211, 254, 203, 34, 78, 232, 246, 31, 130, 186, 25, 255, 208, 72, 80,
+199, 254, 93, 19, 234, 59, 176, 223, 92, 217, 254, 225, 137, 1, 248,
+9, 252, 252, 147, 67, 92, 21, 134, 215, 168, 2, 195, 240, 135, 147,
+180, 216, 125, 126, 107, 99, 248, 63, 204, 123, 189, 2, 241, 79, 151,
+179, 66, 249, 1, 150, 240, 108, 157, 205, 155, 147, 234, 247, 71, 90,
+143, 250, 97, 51, 52, 234, 151, 53, 161, 175, 34, 212, 179, 126, 208,
+246, 38, 29, 72, 79, 142, 1, 15, 112, 63, 66, 172, 4, 204, 162, 214,
+132, 129, 59, 251, 143, 54, 132, 254, 5, 170, 251, 132, 41, 191, 137,
+98, 253, 92, 149, 158, 153, 227, 190, 168, 244, 187, 84, 226, 245,
+230, 9, 204, 28, 33, 29, 72, 79, 153, 211, 231, 161, 78, 140, 95, 135,
+44, 79, 246, 22, 112, 26, 78, 168, 253, 247, 15, 249, 211, 174, 205,
+104, 192, 187, 139, 186, 79, 144, 245, 163, 130, 21, 190, 30, 254,
+109, 142, 254, 200, 115, 241, 239, 50, 254, 182, 122, 65, 28, 19, 66,
+188, 131, 15, 19, 124, 186, 201, 202, 42, 64, 229, 7, 84, 118, 232,
+21, 211, 253, 249, 103, 113, 69, 48, 49, 158, 136, 230, 238, 9, 3,
+143, 218, 144, 6, 124, 34, 60, 243, 35, 235, 151, 35, 61, 62, 121, 77,
+79, 62, 201, 214, 143, 113, 46, 6, 255, 144, 42, 81, 56, 19, 154, 196,
+95, 70, 155, 123, 103, 169, 30, 8, 19, 87, 139, 161, 219, 69, 216,
+255, 224, 16, 61, 0, 223, 169, 216, 58, 205, 149, 224, 17, 203, 32,
+247, 247, 27, 64, 255, 98, 76, 167, 175, 168, 248, 151, 39, 168, 92,
+249, 223, 34, 231, 175, 246, 255, 33, 17, 32, 222, 254, 205, 248, 135,
+248, 255, 42, 77, 8, 106, 151, 98, 0, 97, 77, 123, 92, 194, 221, 81,
+243, 64, 217, 3, 188, 200, 187, 39, 20, 158, 95, 223, 127, 109, 109,
+252, 239, 175, 170, 250, 155, 166, 106, 253, 42, 158, 240, 119, 10,
+43, 22, 190, 63, 30, 97, 51, 234, 177, 117, 66, 66, 61, 68, 19, 186,
+176, 54, 171, 0, 202, 4, 245, 181, 99, 220, 57, 74, 95, 13, 160, 90,
+176, 57, 214, 219, 234, 128, 12, 255, 15, 215, 198, 255, 107, 62, 85,
+255, 146, 242, 63, 195, 167, 113, 205, 246, 47, 252, 191, 168, 246,
+155, 103, 123, 74, 64, 176, 196, 103, 21, 217, 55, 18, 84, 107, 66,
+122, 149, 46, 184, 93, 107, 123, 88, 227, 190, 17, 106, 230, 80, 84,
+142, 29, 49, 160, 92, 37, 130, 124, 141, 225, 255, 141, 253, 111, 171,
+3, 254, 222, 203, 247, 158, 218, 11, 182, 126, 57, 151, 23, 26, 15,
+226, 27, 238, 165, 64, 95, 193, 167, 169, 205, 81, 34, 92, 9, 84, 51,
+161, 122, 13, 217, 223, 75, 212, 239, 38, 3, 92, 229, 106, 32, 62, 11,
+4, 251, 71, 168, 248, 163, 6, 240, 57, 25, 93, 223, 47, 172, 126, 4,
+216, 123, 47, 156, 215, 23, 154, 249, 97, 167, 151, 138, 36, 62, 241,
+165, 126, 222, 196, 19, 127, 252, 195, 53, 97, 211, 61, 4, 245, 240,
+135, 26, 191, 168, 5, 241, 53, 242, 51, 92, 29, 80, 241, 199, 74, 32,
+168, 133, 106, 6, 168, 248, 243, 8, 240, 139, 181, 240, 255, 60, 223,
+215, 41, 200, 251, 103, 222, 53, 127, 240, 5, 166, 247, 133, 161, 30,
+162, 9, 204, 254, 63, 100, 250, 162, 254, 195, 149, 153, 32, 174, 10,
+171, 42, 80, 173, 9, 136, 218, 32, 220, 209, 180, 242, 60, 52, 221,
+254, 121, 4, 168, 145, 3, 236, 125, 23, 243, 254, 129, 218, 63, 153,
+35, 147, 205, 216, 169, 30, 65, 86, 2, 54, 172, 99, 235, 255, 46, 252,
+227, 81, 143, 237, 38, 52, 107, 67, 212, 118, 34, 222, 151, 241, 199,
+213, 193, 17, 239, 250, 97, 89, 224, 177, 9, 109, 91, 39, 0, 76, 126,
+250, 229, 247, 70, 227, 255, 55, 153, 247, 127, 58, 44, 246, 167, 75,
+183, 162, 171, 182, 254, 240, 72, 96, 83, 2, 118, 239, 208, 94, 55,
+89, 88, 95, 49, 122, 0, 177, 167, 148, 141, 9, 122, 22, 232, 227, 255,
+161, 14, 0, 251, 171, 236, 255, 157, 104, 252, 127, 29, 189, 127, 144,
+246, 43, 213, 125, 204, 19, 85, 109, 245, 251, 226, 98, 130, 93, 19,
+202, 39, 125, 138, 169, 238, 1, 186, 185, 122, 49, 121, 128, 170, 110,
+66, 236, 7, 24, 123, 104, 64, 105, 30, 194, 19, 2, 241, 235, 0, 123,
+223, 68, 222, 63, 68, 251, 129, 247, 119, 41, 250, 56, 235, 175, 139,
+63, 190, 210, 81, 55, 77, 249, 185, 84, 98, 130, 47, 254, 49, 221, 36,
+16, 219, 73, 3, 216, 226, 4, 101, 134, 162, 31, 196, 215, 11, 12, 142,
+248, 233, 214, 81, 57, 224, 222, 15, 161, 247, 15, 210, 126, 146, 247,
+55, 71, 125, 66, 194, 207, 75, 52, 147, 255, 201, 200, 139, 189, 32,
+229, 157, 3, 201, 47, 136, 119, 133, 63, 87, 228, 139, 185, 154, 9,
+128, 7, 208, 107, 193, 166, 137, 117, 147, 212, 51, 2, 244, 177, 147,
+12, 86, 130, 97, 23, 203, 31, 141, 194, 255, 189, 112, 126, 87, 88,
+238, 47, 123, 127, 151, 254, 115, 231, 253, 49, 182, 110, 155, 132,
+61, 160, 91, 189, 91, 12, 62, 121, 66, 223, 225, 230, 64, 51, 125,
+133, 168, 1, 168, 226, 111, 155, 122, 29, 208, 199, 242, 41, 7, 100,
+185, 195, 63, 141, 194, 255, 63, 133, 70, 127, 236, 246, 171, 246,
+254, 229, 21, 159, 166, 166, 158, 57, 200, 72, 250, 227, 67, 39, 254,
+226, 119, 86, 107, 130, 122, 125, 229, 184, 26, 36, 222, 99, 142, 4,
+88, 29, 10, 143, 0, 163, 57, 195, 255, 241, 8, 244, 35, 162, 127, 230,
+169, 253, 245, 245, 222, 54, 166, 80, 122, 97, 216, 235, 158, 64, 68,
+139, 58, 248, 187, 188, 4, 238, 29, 35, 246, 53, 181, 117, 19, 218,
+115, 128, 201, 169, 53, 51, 224, 157, 37, 108, 62, 63, 24, 255, 151,
+187, 162, 191, 249, 89, 47, 63, 237, 143, 221, 30, 33, 218, 47, 102,
+18, 118, 49, 216, 11, 100, 240, 231, 32, 3, 226, 52, 97, 53, 254, 240,
+180, 56, 86, 248, 85, 252, 117, 79, 64, 253, 96, 229, 181, 96, 177,
+119, 140, 41, 7, 224, 123, 46, 252, 64, 40, 254, 253, 159, 230, 187,
+213, 90, 106, 63, 217, 73, 90, 122, 226, 87, 247, 254, 182, 248, 143,
+207, 66, 248, 91, 113, 245, 171, 178, 18, 36, 212, 226, 177, 23, 222,
+25, 127, 154, 75, 11, 212, 239, 38, 7, 139, 192, 171, 181, 107, 128,
+152, 8, 128, 157, 32, 12, 255, 159, 15, 198, 255, 35, 124, 87, 231,
+128, 218, 95, 170, 229, 116, 54, 196, 176, 11, 186, 73, 252, 203, 76,
+168, 107, 249, 101, 47, 64, 81, 192, 47, 39, 240, 177, 122, 121, 162,
+6, 20, 86, 111, 158, 244, 20, 81, 128, 2, 56, 196, 93, 2, 14, 126, 45,
+24, 255, 47, 132, 238, 240, 148, 105, 57, 157, 173, 234, 43, 175, 0,
+182, 55, 155, 66, 159, 24, 64, 236, 106, 174, 155, 76, 245, 50, 34, 2,
+216, 87, 142, 81, 95, 101, 149, 235, 0, 170, 7, 24, 30, 51, 252, 47,
+7, 162, 255, 205, 120, 242, 112, 8, 254, 246, 46, 62, 21, 255, 77,
+104, 191, 38, 209, 71, 180, 168, 154, 220, 78, 55, 161, 168, 3, 186,
+186, 137, 138, 231, 7, 130, 34, 192, 224, 40, 92, 1, 246, 95, 1, 39,
+77, 133, 225, 175, 87, 254, 204, 248, 251, 101, 136, 219, 133, 190,
+202, 0, 211, 202, 65, 29, 38, 224, 191, 176, 27, 64, 189, 242, 50, 19,
+120, 236, 12, 84, 0, 216, 83, 20, 166, 0, 251, 127, 93, 168, 63, 121,
+215, 94, 152, 166, 189, 222, 113, 213, 95, 239, 224, 23, 94, 83, 48,
+2, 25, 44, 62, 103, 70, 176, 206, 171, 54, 208, 215, 125, 64, 243, 74,
+64, 68, 0, 85, 255, 171, 10, 16, 189, 231, 40, 64, 1, 224, 211, 32,
+12, 255, 183, 5, 225, 255, 15, 117, 245, 87, 133, 63, 229, 254, 42,
+218, 250, 43, 168, 252, 152, 159, 254, 218, 102, 219, 87, 25, 160, 90,
+189, 15, 23, 124, 152, 64, 117, 96, 119, 231, 88, 94, 5, 14, 80, 0,
+113, 53, 192, 254, 191, 131, 167, 144, 205, 248, 155, 39, 85, 244,
+221, 214, 137, 207, 62, 180, 131, 60, 252, 150, 54, 209, 71, 148, 100,
+252, 155, 88, 57, 22, 175, 193, 183, 155, 79, 183, 17, 76, 192, 39,
+42, 195, 20, 192, 224, 136, 103, 0, 143, 5, 225, 255, 5, 225, 253,
+253, 240, 199, 157, 142, 170, 188, 51, 70, 185, 182, 240, 111, 27,
+125, 242, 1, 126, 61, 4, 161, 62, 1, 115, 64, 247, 19, 6, 216, 93,
+163, 119, 130, 84, 205, 81, 96, 6, 48, 248, 22, 222, 121, 226, 17,
+245, 203, 234, 207, 141, 127, 91, 185, 31, 222, 245, 246, 209, 71, 27,
+108, 167, 135, 4, 87, 130, 171, 56, 140, 235, 192, 33, 189, 128, 48,
+195, 50, 128, 193, 183, 203, 248, 87, 159, 225, 68, 61, 159, 85, 207,
+111, 242, 126, 196, 171, 194, 91, 235, 175, 92, 204, 113, 173, 38,
+226, 125, 223, 132, 245, 147, 7, 32, 212, 66, 108, 189, 106, 77, 136,
+158, 10, 42, 91, 189, 172, 4, 194, 21, 32, 76, 126, 62, 214, 11, 189,
+241, 31, 216, 241, 55, 43, 193, 116, 105, 126, 126, 87, 69, 88, 228,
+254, 110, 253, 31, 58, 17, 137, 205, 160, 143, 72, 9, 244, 155, 243,
+255, 168, 0, 176, 6, 96, 159, 161, 157, 96, 56, 167, 65, 25, 224, 224,
+13, 131, 67, 113, 146, 175, 143, 254, 71, 245, 79, 171, 165, 54, 139,
+109, 75, 253, 109, 210, 250, 17, 49, 217, 195, 55, 23, 9, 104, 29, 80,
+206, 18, 244, 191, 11, 125, 40, 102, 0, 28, 31, 47, 252, 39, 167, 33,
+25, 224, 224, 103, 6, 135, 195, 35, 213, 195, 187, 241, 23, 234, 191,
+108, 245, 2, 255, 144, 202, 255, 246, 90, 63, 204, 118, 240, 39, 5,
+168, 123, 7, 245, 55, 227, 211, 32, 67, 194, 159, 43, 129, 42, 22,
+240, 61, 216, 188, 215, 128, 6, 255, 72, 197, 223, 206, 132, 2, 255,
+66, 253, 19, 3, 76, 17, 94, 86, 127, 205, 249, 255, 208, 167, 245,
+154, 241, 0, 240, 27, 203, 10, 167, 30, 254, 164, 0, 77, 122, 65, 224,
+47, 50, 64, 129, 127, 213, 228, 207, 100, 120, 87, 0, 6, 255, 194,
+134, 191, 77, 19, 160, 42, 85, 239, 64, 89, 11, 96, 141, 219, 173, 16,
+85, 198, 84, 43, 65, 60, 5, 106, 179, 232, 35, 3, 68, 46, 88, 127, 31,
+18, 252, 11, 192, 183, 151, 79, 56, 213, 103, 76, 6, 8, 123, 198, 30,
+252, 178, 55, 254, 191, 193, 235, 141, 222, 234, 159, 178, 191, 42,
+100, 69, 237, 175, 142, 254, 215, 189, 127, 247, 248, 55, 97, 255,
+248, 62, 204, 0, 92, 246, 79, 25, 160, 106, 255, 85, 254, 63, 172, 2,
+52, 252, 76, 21, 250, 170, 18, 192, 174, 111, 83, 246, 39, 35, 44,
+175, 252, 153, 80, 143, 245, 254, 221, 225, 143, 221, 33, 46, 214,
+219, 153, 96, 226, 4, 250, 118, 252, 14, 64, 89, 120, 7, 60, 223, 24,
+59, 4, 242, 10, 192, 124, 40, 227, 175, 190, 42, 227, 31, 212, 5, 56,
+252, 31, 213, 214, 175, 226, 111, 203, 254, 117, 252, 73, 253, 55,
+133, 255, 166, 117, 159, 62, 125, 240, 175, 98, 130, 140, 63, 102,
+128, 248, 180, 135, 192, 31, 251, 67, 211, 5, 60, 1, 146, 239, 31,
+116, 38, 78, 211, 52, 224, 95, 138, 13, 188, 11, 212, 187, 2, 56, 252,
+122, 72, 244, 31, 30, 203, 248, 219, 227, 191, 13, 255, 58, 254, 191,
+107, 252, 237, 127, 109, 12, 254, 84, 1, 192, 87, 132, 63, 236, 245,
+143, 167, 163, 3, 15, 196, 78, 178, 5, 70, 30, 246, 31, 86, 1, 142,
+193, 31, 171, 63, 196, 99, 83, 44, 68, 252, 67, 238, 151, 203, 155,
+136, 138, 127, 23, 222, 31, 177, 47, 227, 95, 247, 9, 99, 192, 86,
+198, 31, 38, 188, 194, 191, 17, 172, 172, 216, 75, 58, 168, 2, 196,
+123, 128, 14, 188, 241, 247, 86, 127, 56, 89, 220, 42, 170, 127, 226,
+14, 224, 78, 118, 98, 210, 218, 143, 45, 59, 244, 245, 4, 219, 16,
+253, 197, 239, 13, 241, 255, 130, 27, 182, 110, 98, 172, 0, 169, 246,
+143, 168, 139, 87, 132, 127, 25, 135, 82, 36, 216, 20, 254, 88, 253,
+211, 240, 135, 125, 158, 100, 219, 149, 215, 254, 154, 242, 255, 219,
+128, 191, 218, 125, 170, 119, 9, 133, 49, 65, 197, 159, 98, 2, 189,
+18, 248, 243, 39, 198, 202, 72, 20, 168, 13, 142, 134, 138, 18, 224,
+248, 95, 243, 199, 127, 20, 128, 126, 129, 255, 137, 140, 63, 92, 117,
+40, 254, 225, 246, 143, 251, 104, 116, 131, 63, 76, 120, 46, 207, 214,
+135, 238, 135, 191, 202, 4, 188, 71, 240, 47, 129, 186, 26, 255, 147,
+185, 9, 255, 217, 85, 152, 252, 244, 31, 195, 132, 106, 1, 124, 175,
+47, 254, 252, 47, 59, 134, 239, 225, 235, 134, 214, 73, 191, 61, 43,
+225, 143, 149, 44, 213, 255, 99, 245, 215, 124, 31, 98, 153, 32, 86,
+200, 186, 197, 63, 204, 234, 237, 246, 143, 21, 96, 21, 127, 200, 221,
+0, 119, 136, 167, 144, 1, 230, 248, 47, 101, 252, 221, 56, 237, 95,
+197, 231, 128, 67, 241, 159, 88, 248, 52, 61, 69, 190, 233, 248, 11,
+29, 3, 251, 190, 18, 254, 244, 55, 98, 127, 75, 248, 61, 114, 241,
+165, 123, 252, 227, 177, 54, 87, 128, 240, 243, 180, 87, 42, 174, 6,
+224, 169, 96, 226, 9, 1, 205, 59, 43, 190, 126, 104, 169, 5, 1, 11,
+66, 241, 143, 245, 255, 224, 197, 48, 2, 200, 127, 63, 249, 54, 51,
+154, 113, 74, 64, 116, 198, 117, 131, 190, 234, 255, 203, 145, 32,
+132, 29, 58, 79, 92, 121, 66, 37, 38, 178, 18, 224, 255, 138, 177,
+255, 88, 252, 33, 94, 237, 240, 15, 99, 66, 216, 46, 181, 1, 232, 228,
+76, 104, 21, 255, 133, 140, 63, 238, 99, 74, 3, 78, 63, 196, 191, 34,
+4, 127, 255, 248, 191, 157, 248, 135, 107, 194, 176, 110, 146, 16,
+116, 10, 252, 191, 225, 141, 255, 239, 135, 253, 6, 194, 95, 175, 101,
+169, 241, 223, 142, 191, 123, 170, 119, 81, 189, 199, 93, 227, 175,
+230, 127, 122, 38, 24, 50, 195, 42, 71, 254, 216, 12, 242, 39, 7, 66,
+240, 79, 254, 55, 252, 6, 170, 37, 86, 255, 14, 172, 255, 141, 87,
+101, 252, 229, 127, 147, 182, 149, 57, 225, 170, 23, 251, 76, 185, 71,
+174, 43, 252, 235, 92, 127, 248, 51, 68, 225, 241, 31, 235, 191, 33,
+59, 1, 38, 255, 51, 204, 254, 69, 253, 95, 86, 177, 168, 2, 197, 95,
+233, 87, 255, 149, 171, 40, 213, 145, 0, 170, 224, 93, 226, 143, 79,
+134, 250, 251, 255, 38, 34, 1, 255, 171, 3, 189, 127, 216, 110, 240,
+201, 127, 13, 196, 127, 142, 248, 235, 89, 140, 122, 245, 88, 19, 240,
+181, 12, 63, 252, 225, 164, 148, 174, 24, 128, 251, 243, 251, 235,
+213, 242, 95, 181, 57, 252, 249, 62, 112, 159, 243, 198, 255, 223,
+135, 253, 134, 81, 254, 84, 130, 41, 155, 21, 76, 192, 93, 46, 124,
+253, 165, 184, 63, 238, 59, 219, 45, 254, 33, 249, 74, 19, 158, 32,
+22, 255, 176, 243, 128, 146, 127, 197, 159, 67, 228, 115, 224, 181,
+18, 128, 253, 63, 112, 117, 162, 103, 161, 204, 6, 236, 255, 81, 189,
+67, 108, 252, 167, 187, 136, 187, 100, 118, 131, 62, 170, 255, 102,
+244, 127, 53, 234, 244, 42, 70, 255, 167, 65, 103, 1, 36, 255, 24,
+148, 21, 245, 21, 17, 15, 10, 38, 24, 24, 129, 61, 41, 85, 248, 99,
+255, 159, 250, 57, 19, 19, 66, 56, 65, 167, 229, 117, 129, 63, 170,
+255, 102, 234, 63, 85, 248, 203, 115, 20, 140, 127, 118, 18, 178, 19,
+120, 154, 178, 251, 58, 15, 177, 127, 88, 163, 192, 76, 223, 140, 63,
+254, 29, 162, 2, 44, 171, 3, 95, 91, 55, 175, 18, 116, 165, 0, 132,
+247, 175, 154, 205, 71, 130, 112, 252, 249, 115, 215, 63, 231, 141,
+255, 155, 68, 140, 241, 195, 63, 203, 247, 242, 182, 219, 63, 92, 59,
+174, 110, 234, 30, 45, 132, 7, 166, 123, 215, 69, 4, 144, 189, 127,
+115, 248, 251, 120, 140, 56, 252, 39, 171, 253, 171, 254, 231, 65,
+166, 175, 100, 191, 103, 17, 130, 127, 154, 159, 88, 238, 246, 255,
+224, 37, 168, 75, 164, 57, 252, 147, 57, 236, 85, 177, 89, 252, 225,
+148, 110, 218, 21, 40, 124, 214, 193, 31, 230, 40, 56, 2, 76, 79, 103,
+103, 179, 215, 120, 227, 127, 35, 252, 22, 83, 23, 17, 50, 66, 188,
+42, 240, 47, 42, 128, 174, 189, 16, 41, 3, 52, 179, 35, 94, 9, 224,
+62, 249, 155, 181, 126, 217, 251, 55, 171, 250, 109, 86, 47, 217, 127,
+160, 245, 51, 252, 131, 78, 4, 79, 207, 229, 202, 186, 204, 128, 124,
+117, 81, 199, 159, 42, 0, 120, 127, 108, 248, 235, 253, 237, 54, 157,
+224, 126, 178, 202, 116, 119, 54, 235, 1, 116, 235, 223, 52, 254, 161,
+232, 231, 39, 194, 7, 156, 7, 157, 125, 41, 163, 254, 2, 47, 253, 79,
+79, 165, 152, 237, 95, 160, 43, 250, 91, 77, 185, 77, 8, 234, 234,
+253, 4, 68, 54, 229, 1, 134, 71, 240, 187, 98, 125, 127, 149, 54, 240,
+137, 4, 229, 231, 49, 221, 19, 172, 115, 246, 85, 127, 244, 25, 254,
+159, 204, 150, 248, 147, 141, 94, 223, 192, 4, 220, 255, 3, 159, 198,
+178, 225, 79, 253, 141, 246, 103, 33, 66, 172, 94, 198, 31, 61, 192,
+38, 24, 0, 190, 191, 255, 180, 185, 27, 173, 13, 252, 203, 76, 72,
+130, 241, 135, 204, 123, 246, 169, 32, 252, 51, 176, 210, 28, 227, 35,
+29, 255, 178, 255, 31, 30, 211, 105, 62, 174, 248, 95, 86, 0, 254,
+248, 219, 152, 64, 247, 103, 116, 188, 153, 24, 0, 232, 83, 222, 223,
+22, 254, 130, 7, 190, 248, 219, 120, 128, 74, 129, 159, 189, 125, 95,
+16, 254, 111, 230, 94, 213, 167, 179, 60, 103, 7, 245, 128, 152, 239,
+26, 241, 0, 20, 0, 214, 9, 252, 167, 47, 19, 0, 153, 182, 25, 128,
+191, 35, 4, 197, 102, 178, 62, 213, 251, 135, 70, 127, 216, 115, 213,
+63, 251, 227, 248, 191, 10, 174, 202, 103, 111, 1, 194, 95, 85, 128,
+54, 252, 105, 159, 203, 54, 240, 79, 230, 109, 51, 0, 34, 255, 224,
+176, 190, 239, 175, 199, 4, 95, 175, 47, 197, 230, 160, 236, 143, 227,
+127, 30, 246, 188, 38, 95, 47, 171, 127, 179, 18, 128, 207, 76, 78,
+113, 103, 34, 241, 60, 190, 73, 9, 208, 62, 151, 110, 172, 99, 50, 65,
+172, 4, 180, 167, 3, 1, 253, 58, 89, 127, 189, 72, 32, 94, 209, 158,
+11, 238, 157, 89, 68, 84, 24, 129, 250, 59, 155, 62, 47, 4, 255, 94,
+111, 252, 229, 50, 254, 180, 34, 96, 86, 2, 84, 3, 214, 241, 87, 153,
+128, 171, 128, 182, 8, 80, 71, 9, 144, 10, 104, 135, 1, 237, 162, 239,
+143, 127, 18, 140, 63, 116, 226, 76, 191, 18, 134, 62, 195, 255, 65,
+168, 230, 148, 241, 87, 189, 190, 140, 63, 157, 236, 44, 238, 153, 9,
+127, 211, 42, 80, 152, 215, 119, 123, 2, 100, 64, 211, 81, 0, 34, 75,
+155, 232, 251, 107, 136, 164, 180, 243, 158, 13, 127, 122, 149, 46,
+25, 254, 31, 15, 198, 255, 93, 144, 167, 133, 60, 99, 152, 119, 129,
+89, 20, 160, 224, 132, 56, 237, 68, 247, 19, 97, 170, 192, 228, 47,
+218, 97, 128, 140, 190, 31, 78, 237, 41, 193, 145, 130, 176, 59, 238,
+227, 251, 178, 19, 134, 255, 189, 193, 248, 223, 10, 59, 245, 132,
+224, 63, 42, 186, 0, 220, 119, 83, 221, 229, 38, 4, 117, 29, 235, 42,
+37, 216, 68, 28, 192, 124, 31, 206, 223, 106, 207, 246, 125, 248, 66,
+21, 47, 217, 238, 109, 86, 47, 208, 199, 157, 89, 25, 254, 175, 14,
+198, 255, 6, 56, 1, 11, 61, 123, 133, 254, 47, 52, 1, 61, 153, 102,
+178, 122, 217, 214, 97, 167, 99, 255, 28, 192, 142, 186, 43, 18, 160,
+205, 214, 245, 2, 244, 83, 154, 170, 247, 212, 101, 66, 217, 251, 171,
+145, 160, 28, 19, 160, 55, 139, 205, 64, 245, 7, 99, 242, 223, 88, 54,
+55, 31, 20, 145, 94, 158, 233, 114, 118, 181, 196, 132, 98, 21, 200,
+116, 39, 101, 252, 229, 125, 206, 170, 237, 63, 14, 127, 232, 13, 7,
+236, 226, 213, 32, 125, 127, 115, 213, 158, 250, 248, 187, 208, 55,
+51, 1, 246, 230, 153, 254, 78, 56, 250, 12, 255, 247, 195, 90, 237,
+208, 140, 63, 251, 169, 101, 79, 64, 251, 64, 185, 34, 0, 34, 41, 214,
+129, 100, 239, 208, 148, 255, 23, 95, 143, 229, 128, 248, 190, 77, 90,
+126, 21, 254, 178, 247, 247, 197, 31, 118, 93, 156, 126, 32, 10, 255,
+59, 38, 171, 44, 232, 196, 97, 218, 157, 150, 78, 51, 21, 119, 83,
+191, 191, 234, 137, 119, 54, 158, 184, 87, 147, 92, 44, 17, 60, 33,
+31, 238, 171, 7, 48, 222, 227, 251, 233, 103, 217, 20, 155, 143, 197,
+154, 227, 185, 233, 107, 213, 74, 48, 49, 98, 172, 103, 125, 178, 250,
+131, 157, 57, 25, 254, 63, 18, 133, 255, 115, 225, 4, 76, 92, 3, 240,
+101, 128, 28, 1, 92, 119, 27, 118, 135, 16, 74, 65, 85, 7, 33, 168,
+235, 250, 95, 246, 14, 38, 63, 64, 60, 208, 175, 13, 207, 88, 21, 239,
+193, 206, 126, 19, 214, 221, 217, 191, 191, 245, 203, 246, 31, 27,
+253, 57, 3, 30, 129, 40, 29, 194, 128, 209, 28, 207, 247, 81, 207, 49,
+49, 89, 55, 246, 2, 182, 137, 122, 57, 115, 82, 49, 54, 77, 244, 17,
+155, 247, 249, 62, 76, 8, 193, 159, 38, 228, 254, 147, 71, 226, 208,
+239, 245, 166, 239, 128, 253, 186, 66, 236, 31, 115, 128, 217, 213,
+234, 39, 179, 168, 14, 24, 103, 255, 54, 252, 171, 121, 128, 204, 196,
+14, 30, 68, 28, 187, 135, 100, 220, 183, 15, 127, 152, 110, 237, 111,
+158, 25, 156, 98, 124, 87, 52, 254, 47, 195, 189, 67, 76, 10, 208, 54,
+147, 34, 2, 184, 226, 191, 240, 0, 34, 2, 184, 241, 111, 158, 9, 98,
+226, 189, 118, 87, 103, 204, 152, 108, 10, 127, 238, 191, 34, 240,
+231, 167, 217, 191, 52, 22, 127, 198, 128, 175, 192, 78, 147, 65, 26,
+240, 24, 246, 26, 207, 247, 167, 179, 156, 99, 74, 79, 78, 202, 167,
+222, 250, 204, 80, 37, 168, 51, 37, 142, 29, 254, 28, 170, 167, 255,
+92, 239, 55, 213, 125, 93, 81, 31, 103, 178, 96, 232, 255, 110, 60,
+250, 12, 255, 15, 228, 17, 32, 96, 183, 97, 126, 218, 212, 53, 121,
+111, 30, 179, 39, 48, 159, 120, 20, 171, 4, 125, 60, 129, 15, 234, 49,
+158, 160, 125, 159, 16, 103, 253, 176, 231, 214, 228, 253, 181, 240,
+127, 53, 69, 0, 127, 252, 169, 10, 32, 171, 107, 252, 136, 123, 130,
+137, 175, 228, 167, 153, 45, 202, 22, 222, 132, 38, 220, 28, 234, 237,
+227, 159, 68, 224, 15, 117, 54, 134, 255, 109, 181, 240, 127, 222,
+244, 255, 242, 189, 134, 3, 240, 167, 147, 234, 5, 174, 136, 255, 244,
+20, 62, 135, 125, 162, 178, 7, 144, 207, 188, 106, 18, 255, 248, 110,
+194, 109, 179, 255, 242, 89, 235, 62, 19, 158, 183, 153, 252, 225,
+228, 185, 117, 240, 239, 245, 102, 31, 154, 157, 101, 161, 231, 205,
+21, 189, 64, 114, 204, 167, 221, 90, 208, 3, 224, 231, 242, 211, 44,
+156, 103, 222, 132, 71, 130, 102, 124, 66, 53, 39, 54, 197, 132, 24,
+235, 207, 189, 255, 47, 213, 67, 159, 225, 255, 154, 217, 25, 139, 0,
+1, 232, 115, 15, 144, 119, 3, 155, 206, 48, 135, 61, 44, 5, 47, 132,
+10, 140, 169, 211, 235, 254, 34, 76, 15, 134, 85, 147, 67, 24, 211,
+140, 55, 9, 173, 250, 170, 179, 190, 247, 207, 25, 240, 85, 218, 109,
+54, 192, 3, 44, 240, 60, 48, 213, 3, 160, 95, 152, 157, 201, 39, 154,
+226, 153, 198, 84, 9, 178, 97, 44, 35, 220, 172, 253, 215, 137, 9,
+155, 177, 255, 112, 252, 147, 69, 178, 72, 151, 117, 181, 127, 129,
+255, 187, 103, 103, 227, 85, 72, 21, 136, 103, 129, 43, 210, 0, 2,
+107, 96, 36, 236, 100, 56, 61, 149, 241, 135, 90, 176, 43, 6, 216,
+241, 111, 83, 19, 214, 177, 216, 102, 103, 132, 242, 99, 127, 31, 84,
+126, 126, 233, 93, 141, 224, 255, 2, 232, 31, 28, 30, 15, 43, 58, 1,
+116, 15, 128, 123, 194, 147, 7, 64, 29, 136, 59, 81, 173, 215, 2, 127,
+113, 170, 181, 205, 3, 232, 138, 176, 89, 252, 183, 221, 254, 227,
+172, 63, 89, 64, 255, 238, 248, 230, 38, 240, 103, 12, 248, 20, 236,
+219, 18, 22, 1, 68, 55, 136, 174, 0, 32, 3, 144, 241, 135, 181, 22,
+204, 3, 76, 85, 130, 80, 78, 196, 71, 253, 176, 138, 161, 202, 142,
+182, 152, 16, 163, 252, 209, 251, 51, 244, 127, 179, 25, 244, 25, 254,
+111, 101, 26, 240, 148, 236, 31, 78, 20, 71, 140, 233, 99, 85, 22,
+128, 245, 117, 154, 240, 4, 136, 206, 9, 60, 225, 134, 170, 198, 170,
+119, 8, 81, 131, 166, 124, 33, 76, 17, 134, 238, 77, 17, 231, 57, 124,
+163, 73, 184, 242, 79, 56, 254, 25, 88, 255, 91, 154, 194, 127, 255,
+219, 246, 191, 1, 103, 142, 134, 121, 128, 193, 17, 61, 19, 70, 121,
+31, 244, 147, 128, 46, 192, 218, 176, 176, 127, 248, 40, 119, 15, 87,
+161, 30, 30, 9, 202, 24, 199, 217, 255, 102, 35, 65, 140, 242, 47,
+172, 255, 15, 198, 55, 52, 133, 63, 99, 192, 207, 193, 142, 222, 97,
+43, 65, 228, 1, 48, 219, 31, 30, 225, 190, 176, 176, 54, 44, 119, 135,
+200, 234, 144, 86, 4, 67, 241, 15, 245, 255, 177, 248, 199, 89, 113,
+252, 12, 95, 241, 195, 216, 207, 173, 191, 17, 237, 87, 224, 255, 29,
+252, 236, 129, 96, 15, 144, 229, 251, 130, 136, 60, 80, 93, 7, 210,
+51, 65, 226, 71, 149, 18, 176, 225, 223, 94, 55, 161, 219, 179, 183,
+129, 127, 116, 236, 111, 84, 251, 21, 12, 248, 48, 121, 0, 31, 237,
+71, 107, 134, 180, 26, 104, 170, 4, 149, 167, 208, 129, 229, 248, 239,
+175, 4, 194, 57, 209, 108, 252, 183, 123, 137, 48, 78, 132, 163, 143,
+248, 195, 73, 123, 227, 113, 179, 232, 147, 7, 80, 87, 2, 76, 74, 176,
+127, 200, 247, 130, 59, 147, 243, 64, 170, 5, 83, 167, 133, 139, 1,
+106, 214, 168, 102, 142, 225, 154, 48, 150, 9, 229, 213, 196, 58, 140,
+136, 241, 28, 81, 43, 62, 34, 243, 123, 73, 211, 248, 51, 6, 60, 84,
+237, 1, 96, 31, 40, 58, 157, 84, 206, 3, 177, 190, 99, 199, 93, 96,
+156, 230, 149, 67, 196, 173, 137, 72, 224, 218, 145, 202, 108, 245,
+97, 145, 192, 100, 245, 245, 35, 65, 44, 250, 220, 250, 31, 108, 30,
+125, 134, 255, 107, 1, 25, 218, 21, 164, 60, 71, 252, 212, 146, 217,
+153, 222, 47, 130, 235, 193, 126, 49, 0, 240, 147, 247, 146, 242, 183,
+250, 24, 252, 109, 182, 30, 91, 9, 104, 14, 255, 136, 188, 111, 33,
+89, 255, 173, 109, 224, 223, 235, 29, 60, 6, 150, 105, 234, 7, 133,
+29, 166, 224, 132, 154, 212, 248, 196, 88, 90, 172, 6, 84, 249, 127,
+196, 82, 248, 128, 170, 30, 18, 159, 156, 32, 190, 135, 44, 198, 19,
+148, 99, 125, 56, 254, 177, 121, 95, 110, 253, 141, 213, 125, 74, 248,
+255, 0, 120, 242, 81, 145, 5, 82, 252, 135, 136, 15, 103, 190, 232,
+74, 64, 173, 4, 96, 79, 16, 206, 42, 37, 144, 150, 214, 143, 234, 41,
+129, 112, 159, 96, 211, 132, 177, 235, 133, 33, 149, 160, 88, 229,
+151, 224, 207, 120, 85, 91, 248, 51, 6, 252, 26, 121, 0, 194, 31, 118,
+254, 148, 35, 190, 25, 127, 236, 11, 23, 213, 96, 129, 191, 141, 9,
+105, 190, 126, 96, 234, 35, 36, 244, 235, 172, 24, 119, 199, 4, 225,
+47, 76, 248, 215, 70, 255, 99, 237, 161, 207, 240, 255, 62, 238, 1,
+114, 13, 32, 34, 190, 25, 117, 121, 98, 30, 224, 234, 11, 213, 49, 78,
+23, 88, 61, 194, 62, 162, 16, 171, 111, 62, 18, 180, 213, 77, 220, 68,
+228, 167, 154, 111, 254, 83, 95, 220, 38, 254, 140, 1, 191, 12, 207,
+119, 240, 93, 133, 86, 16, 241, 51, 135, 215, 215, 115, 3, 240, 233,
+84, 255, 171, 82, 2, 152, 13, 78, 79, 241, 204, 0, 51, 254, 237, 105,
+194, 50, 254, 33, 76, 136, 175, 250, 215, 182, 254, 15, 182, 139, 62,
+195, 255, 133, 224, 1, 224, 244, 201, 116, 57, 94, 149, 81, 183, 51,
+129, 50, 65, 168, 6, 86, 87, 2, 136, 1, 216, 71, 32, 119, 9, 55, 139,
+191, 153, 9, 62, 248, 215, 169, 23, 155, 153, 80, 7, 253, 20, 127,
+206, 77, 109, 227, 207, 24, 240, 243, 96, 147, 178, 6, 160, 73, 255,
+178, 49, 129, 186, 66, 112, 207, 110, 49, 203, 154, 64, 232, 196, 81,
+206, 26, 179, 18, 192, 72, 33, 107, 130, 48, 45, 32, 184, 209, 76,
+117, 40, 174, 78, 68, 156, 136, 65, 95, 177, 254, 119, 182, 143, 62,
+195, 255, 249, 7, 7, 96, 197, 58, 3, 92, 53, 65, 161, 3, 33, 166, 163,
+14, 244, 195, 159, 148, 128, 88, 27, 42, 107, 193, 56, 77, 168, 250,
+134, 238, 240, 175, 163, 251, 20, 235, 255, 63, 217, 249, 77, 224,
+207, 24, 240, 54, 176, 98, 185, 18, 228, 227, 255, 169, 22, 64, 88,
+218, 81, 183, 41, 1, 172, 10, 153, 176, 246, 209, 132, 106, 76, 240,
+71, 189, 126, 36, 168, 246, 255, 113, 29, 222, 5, 250, 248, 83, 222,
+188, 25, 244, 97, 172, 255, 35, 230, 124, 194, 7, 248, 226, 143, 213,
+32, 81, 15, 180, 89, 125, 217, 206, 225, 12, 11, 241, 204, 104, 29,
+171, 15, 123, 194, 208, 174, 9, 202, 248, 219, 153, 224, 82, 2, 209,
+232, 203, 214, 255, 201, 205, 161, 207, 240, 255, 139, 80, 241, 161,
+51, 200, 171, 240, 215, 153, 0, 231, 133, 83, 46, 232, 198, 95, 102,
+2, 196, 1, 244, 2, 184, 58, 96, 194, 63, 52, 55, 220, 28, 254, 118,
+79, 144, 70, 61, 217, 75, 214, 95, 252, 172, 150, 243, 190, 18, 3,
+126, 1, 226, 184, 192, 191, 106, 202, 218, 96, 120, 148, 229, 185,
+224, 104, 46, 235, 64, 93, 19, 202, 89, 2, 61, 163, 141, 223, 57, 59,
+195, 72, 224, 158, 58, 39, 226, 215, 144, 67, 166, 202, 146, 106, 78,
+32, 150, 250, 179, 155, 254, 248, 111, 78, 249, 41, 248, 255, 137,
+245, 127, 151, 99, 128, 13, 107, 249, 149, 236, 9, 198, 121, 221, 80,
+101, 128, 91, 9, 202, 57, 33, 214, 5, 124, 170, 131, 219, 137, 186,
+138, 126, 141, 216, 15, 232, 255, 214, 166, 148, 159, 194, 0, 30, 3,
+120, 109, 70, 233, 9, 240, 123, 5, 245, 35, 64, 81, 244, 131, 197, 68,
+2, 228, 128, 220, 47, 18, 98, 245, 177, 125, 229, 62, 250, 223, 39,
+18, 212, 69, 191, 43, 223, 95, 48, 128, 199, 128, 209, 92, 102, 128,
+191, 18, 192, 122, 16, 239, 248, 242, 80, 130, 186, 38, 148, 57, 32,
+158, 30, 138, 243, 250, 42, 254, 33, 246, 31, 143, 127, 99, 182, 191,
+76, 211, 110, 208, 47, 98, 192, 217, 232, 216, 55, 19, 84, 149, 32,
+85, 4, 49, 23, 168, 242, 250, 160, 25, 161, 147, 72, 230, 0, 236, 110,
+6, 63, 1, 58, 83, 112, 159, 167, 102, 61, 129, 15, 3, 170, 152, 208,
+60, 250, 170, 239, 79, 207, 117, 133, 63, 99, 192, 119, 174, 175, 192,
+202, 47, 245, 4, 84, 235, 64, 117, 14, 11, 61, 135, 167, 120, 217, 39,
+68, 10, 200, 0, 33, 226, 200, 241, 2, 252, 0, 60, 85, 70, 158, 192,
+84, 35, 106, 71, 19, 214, 169, 23, 129, 226, 87, 247, 106, 147, 119,
+113, 35, 148, 109, 154, 144, 178, 126, 54, 159, 76, 111, 236, 14, 125,
+206, 128, 159, 0, 171, 76, 22, 35, 73, 7, 138, 170, 160, 77, 9, 202,
+154, 48, 207, 6, 75, 85, 97, 89, 19, 66, 156, 67, 244, 232, 233, 65,
+221, 59, 192, 25, 39, 192, 1, 98, 129, 232, 31, 139, 69, 61, 182, 195,
+216, 222, 87, 38, 124, 131, 105, 239, 190, 42, 212, 149, 200, 159,
+119, 29, 165, 111, 234, 22, 125, 206, 128, 95, 201, 85, 128, 214, 25,
+230, 31, 9, 82, 142, 29, 174, 242, 184, 149, 64, 50, 231, 222, 198,
+104, 215, 112, 159, 225, 164, 19, 98, 193, 100, 37, 120, 80, 55, 18,
+212, 65, 93, 199, 31, 187, 232, 237, 168, 187, 241, 207, 209, 95, 114,
+6, 124, 180, 107, 236, 97, 48, 21, 240, 123, 216, 5, 160, 119, 7, 235,
+175, 204, 153, 32, 76, 124, 90, 148, 86, 121, 236, 248, 195, 187, 220,
+43, 135, 16, 15, 96, 207, 75, 140, 8, 192, 42, 136, 27, 176, 151, 121,
+238, 119, 35, 125, 125, 236, 19, 6, 186, 253, 147, 231, 143, 199, 63,
+93, 228, 232, 127, 177, 203, 200, 47, 15, 204, 4, 249, 115, 62, 82,
+103, 96, 25, 117, 209, 39, 82, 94, 37, 26, 241, 172, 158, 234, 194,
+200, 0, 189, 18, 4, 106, 81, 238, 33, 180, 49, 1, 209, 130, 94, 56,
+193, 3, 96, 2, 60, 121, 8, 251, 25, 193, 228, 125, 146, 39, 213, 145,
+192, 142, 127, 76, 15, 1, 162, 107, 62, 167, 193, 135, 9, 69, 220,
+135, 249, 61, 93, 227, 46, 6, 170, 0, 185, 30, 108, 154, 204, 119,
+175, 92, 90, 16, 43, 252, 251, 87, 179, 19, 147, 18, 128, 175, 194,
+231, 19, 75, 205, 208, 20, 57, 48, 42, 32, 19, 96, 215, 121, 193, 6,
+156, 106, 253, 40, 92, 19, 170, 44, 169, 226, 68, 200, 153, 77, 234,
+25, 14, 248, 145, 122, 124, 183, 37, 242, 203, 99, 253, 207, 160, 27,
+168, 172, 3, 171, 237, 95, 188, 26, 114, 37, 0, 63, 71, 196, 1, 154,
+208, 67, 142, 54, 139, 79, 143, 155, 170, 195, 110, 213, 79, 86, 137,
+149, 119, 248, 73, 242, 147, 70, 49, 117, 2, 95, 79, 128, 218, 192,
+133, 176, 143, 18, 84, 108, 255, 125, 93, 227, 173, 15, 166, 2, 254,
+45, 211, 129, 215, 248, 181, 90, 214, 132, 220, 153, 0, 126, 196, 149,
+94, 136, 3, 80, 89, 36, 140, 177, 195, 24, 135, 120, 122, 220, 31,
+127, 202, 3, 154, 172, 14, 249, 63, 97, 162, 103, 123, 49, 254, 95,
+81, 253, 31, 221, 150, 200, 47, 15, 172, 6, 161, 14, 52, 215, 132,
+125, 240, 31, 20, 43, 189, 251, 90, 109, 216, 182, 38, 228, 135, 191,
+234, 227, 55, 217, 77, 104, 63, 165, 199, 95, 9, 112, 221, 183, 204,
+241, 255, 236, 54, 162, 15, 3, 171, 65, 122, 38, 80, 133, 186, 41, 59,
+160, 218, 46, 104, 1, 122, 114, 208, 21, 235, 125, 122, 72, 76, 76,
+136, 139, 250, 33, 76, 8, 141, 245, 38, 38, 36, 164, 250, 183, 162,
+226, 227, 26, 44, 19, 184, 194, 43, 194, 133, 7, 8, 173, 8, 82, 221,
+8, 206, 173, 130, 186, 16, 158, 23, 108, 174, 12, 249, 79, 51, 59, 70,
+252, 212, 234, 48, 127, 17, 50, 99, 244, 158, 137, 19, 146, 234, 219,
+42, 213, 111, 26, 235, 31, 228, 185, 224, 153, 168, 7, 133, 219, 63,
+125, 76, 22, 114, 117, 95, 196, 1, 145, 29, 150, 237, 63, 196, 19,
+224, 138, 2, 33, 220, 228, 115, 69, 200, 255, 122, 168, 163, 253, 35,
+242, 5, 250, 175, 236, 26, 223, 234, 177, 254, 107, 130, 1, 170, 18,
+12, 197, 31, 79, 149, 196, 202, 16, 113, 160, 202, 255, 135, 224, 143,
+246, 31, 131, 191, 219, 255, 135, 159, 208, 108, 246, 255, 133, 231,
+167, 249, 186, 174, 177, 245, 27, 88, 13, 128, 222, 14, 85, 9, 134,
+227, 15, 175, 96, 39, 75, 224, 0, 84, 153, 199, 43, 200, 254, 93, 168,
+251, 117, 19, 210, 68, 255, 175, 226, 47, 51, 33, 220, 254, 155, 243,
+250, 154, 234, 219, 186, 140, 223, 53, 114, 6, 212, 86, 130, 162, 114,
+48, 206, 213, 0, 236, 69, 73, 103, 185, 184, 99, 189, 79, 55, 129, 45,
+254, 235, 76, 240, 101, 68, 19, 216, 171, 113, 191, 176, 253, 235, 8,
+125, 24, 235, 191, 167, 232, 128, 104, 37, 40, 20, 33, 244, 125, 97,
+253, 14, 106, 250, 84, 29, 168, 167, 4, 171, 245, 159, 206, 10, 27,
+39, 16, 53, 58, 15, 121, 200, 119, 203, 172, 143, 126, 129, 255, 79,
+117, 141, 103, 248, 144, 125, 0, 122, 129, 120, 251, 199, 87, 195,
+227, 100, 49, 94, 209, 10, 31, 172, 235, 208, 179, 132, 161, 145, 192,
+134, 191, 45, 18, 184, 237, 95, 66, 174, 22, 234, 2, 125, 140, 251,
+201, 117, 106, 251, 52, 20, 37, 56, 15, 81, 130, 248, 17, 86, 105,
+244, 26, 18, 196, 2, 56, 209, 24, 244, 0, 170, 66, 185, 11, 180, 190,
+255, 15, 197, 191, 73, 171, 87, 209, 191, 222, 84, 159, 105, 32, 3,
+102, 18, 3, 252, 241, 31, 205, 105, 79, 9, 131, 38, 60, 134, 253, 173,
+49, 127, 131, 243, 198, 144, 5, 163, 227, 48, 252, 241, 251, 213, 158,
+50, 91, 252, 55, 85, 14, 9, 177, 129, 225, 85, 61, 207, 255, 204, 64,
+31, 198, 250, 7, 177, 38, 136, 207, 181, 135, 212, 132, 32, 214, 235,
+26, 64, 173, 18, 38, 115, 90, 225, 69, 95, 0, 17, 129, 186, 0, 195,
+53, 161, 79, 244, 207, 87, 17, 196, 238, 86, 71, 67, 250, 216, 8, 19,
+180, 168, 255, 228, 245, 144, 239, 87, 13, 172, 9, 194, 238, 145, 121,
+62, 232, 197, 128, 116, 9, 235, 201, 62, 117, 194, 100, 161, 178, 64,
+116, 254, 148, 121, 160, 179, 34, 100, 13, 113, 88, 160, 237, 158,
+196, 15, 138, 8, 254, 76, 208, 86, 120, 159, 220, 246, 90, 159, 239,
+88, 127, 39, 172, 12, 193, 94, 17, 190, 74, 96, 112, 4, 153, 94, 200,
+211, 4, 200, 130, 217, 217, 254, 53, 228, 1, 124, 63, 244, 122, 96,
+231, 79, 90, 156, 251, 24, 97, 255, 199, 101, 220, 11, 187, 183, 91,
+125, 176, 253, 143, 228, 42, 63, 172, 242, 108, 113, 157, 63, 116,
+224, 234, 112, 81, 19, 170, 84, 2, 92, 151, 5, 60, 87, 152, 63, 87, 6,
+221, 30, 75, 88, 215, 135, 94, 15, 224, 1, 50, 65, 116, 254, 140, 243,
+190, 31, 218, 117, 65, 97, 194, 145, 254, 202, 195, 214, 53, 11, 143,
+245, 255, 165, 168, 255, 209, 228, 57, 93, 99, 214, 236, 96, 12, 248,
+5, 212, 130, 164, 4, 202, 187, 201, 211, 171, 33, 223, 43, 220, 23,
+117, 245, 21, 126, 63, 156, 126, 5, 39, 96, 128, 71, 152, 229, 93, 63,
+196, 6, 49, 247, 175, 86, 35, 236, 233, 235, 107, 197, 127, 45, 234,
+47, 210, 116, 91, 87, 120, 235, 13, 150, 13, 92, 193, 221, 31, 212,
+154, 128, 62, 33, 195, 15, 175, 15, 169, 28, 18, 76, 160, 14, 176,
+241, 10, 248, 192, 25, 113, 134, 189, 96, 245, 241, 175, 244, 13, 138,
+18, 48, 199, 132, 82, 212, 191, 206, 21, 191, 107, 48, 45, 200, 149,
+192, 120, 37, 199, 1, 21, 201, 100, 177, 94, 103, 39, 161, 248, 187,
+56, 161, 240, 129, 214, 212, 249, 253, 110, 19, 127, 213, 75, 104, 76,
+176, 217, 254, 23, 147, 191, 208, 53, 70, 237, 14, 22, 7, 126, 5, 171,
+66, 73, 209, 17, 171, 218, 174, 236, 151, 93, 190, 222, 172, 28, 204,
+149, 195, 141, 96, 108, 198, 218, 17, 9, 180, 10, 255, 150, 246, 117,
+53, 63, 214, 63, 177, 190, 130, 189, 61, 249, 206, 7, 199, 162, 58,
+204, 207, 7, 44, 118, 16, 190, 126, 240, 151, 152, 112, 236, 147, 255,
+73, 187, 119, 144, 223, 191, 78, 171, 188, 49, 227, 224, 133, 7, 143,
+99, 13, 127, 52, 151, 189, 0, 40, 191, 233, 153, 159, 214, 11, 199,
+127, 51, 156, 80, 243, 127, 137, 9, 146, 223, 47, 245, 117, 124, 54,
+249, 51, 93, 99, 178, 217, 113, 240, 124, 216, 71, 14, 106, 183, 228,
+5, 224, 94, 193, 46, 210, 195, 227, 38, 98, 191, 91, 29, 118, 229, 29,
+68, 174, 247, 108, 208, 251, 85, 227, 224, 251, 200, 11, 36, 252, 185,
+168, 116, 1, 79, 136, 212, 93, 41, 14, 193, 159, 44, 116, 147, 232,
+43, 106, 31, 44, 255, 25, 174, 248, 92, 131, 121, 129, 191, 139, 153,
+56, 116, 246, 164, 139, 137, 118, 214, 120, 136, 255, 135, 156, 34,
+52, 18, 96, 149, 177, 53, 188, 149, 42, 161, 193, 235, 47, 210, 159,
+122, 118, 90, 190, 60, 152, 23, 120, 44, 223, 203, 229, 132, 91, 134,
+146, 19, 248, 227, 79, 235, 5, 219, 131, 127, 193, 131, 99, 195, 170,
+238, 34, 253, 15, 207, 148, 250, 126, 253, 113, 240, 182, 131, 203,
+24, 9, 210, 165, 158, 23, 250, 226, 111, 127, 213, 37, 254, 70, 159,
+15, 207, 238, 62, 139, 212, 190, 207, 64, 61, 120, 249, 234, 254, 213,
+201, 41, 49, 32, 108, 189, 56, 70, 21, 8, 252, 5, 95, 154, 212, 132,
+134, 231, 54, 159, 197, 122, 175, 106, 236, 127, 7, 156, 50, 7, 115,
+178, 162, 72, 208, 52, 7, 196, 207, 66, 251, 159, 158, 54, 143, 186,
+192, 62, 41, 99, 255, 175, 159, 73, 235, 122, 205, 143, 253, 239, 133,
+115, 198, 144, 3, 252, 233, 201, 133, 30, 11, 194, 253, 191, 61, 18,
+180, 131, 191, 234, 243, 37, 236, 63, 186, 139, 248, 62, 67, 225, 192,
+82, 246, 4, 195, 173, 199, 223, 226, 241, 119, 216, 7, 142, 253, 215,
+18, 7, 160, 215, 155, 238, 167, 186, 231, 248, 118, 225, 175, 86, 117,
+53, 236, 159, 1, 125, 92, 155, 31, 204, 15, 252, 34, 245, 110, 140,
+79, 242, 251, 58, 23, 221, 3, 245, 213, 0, 224, 111, 83, 9, 85, 28,
+210, 172, 222, 134, 253, 251, 118, 118, 95, 103, 204, 94, 48, 123,
+247, 236, 143, 112, 205, 158, 119, 249, 22, 158, 64, 237, 33, 137, 83,
+130, 194, 254, 77, 88, 251, 218, 188, 49, 214, 195, 138, 78, 186, 211,
+122, 77, 140, 217, 183, 206, 222, 58, 251, 20, 114, 128, 121, 2, 210,
+4, 154, 46, 104, 206, 255, 251, 224, 175, 123, 251, 82, 109, 231, 77,
+187, 28, 175, 217, 193, 61, 193, 87, 115, 79, 0, 157, 222, 130, 5, 69,
+63, 81, 85, 95, 97, 93, 252, 229, 110, 61, 121, 74, 200, 127, 113,
+103, 245, 109, 142, 217, 107, 102, 247, 97, 60, 248, 212, 41, 248,
+130, 108, 169, 32, 49, 119, 51, 193, 142, 191, 236, 245, 117, 252, 5,
+234, 170, 197, 107, 54, 255, 36, 139, 245, 59, 157, 183, 129, 193,
+226, 1, 99, 193, 244, 43, 208, 205, 7, 147, 233, 2, 197, 27, 8, 143,
+32, 237, 195, 160, 32, 170, 235, 63, 142, 249, 161, 142, 184, 13, 117,
+194, 189, 56, 193, 227, 139, 128, 252, 206, 223, 111, 122, 76, 95, 54,
+189, 119, 58, 37, 22, 20, 221, 254, 26, 19, 84, 207, 64, 172, 192,
+137, 29, 40, 229, 169, 227, 173, 163, 142, 243, 157, 16, 231, 211,
+157, 190, 239, 118, 76, 159, 55, 253, 145, 233, 7, 84, 30, 16, 19, 44,
+92, 40, 230, 62, 246, 30, 56, 102, 138, 207, 100, 232, 231, 180, 126,
+50, 203, 210, 215, 237, 44, 126, 155, 6, 227, 193, 171, 153, 63, 248,
+248, 228, 119, 113, 135, 87, 49, 249, 19, 31, 57, 31, 240, 249, 26,
+92, 133, 87, 237, 90, 96, 93, 66, 155, 230, 151, 178, 143, 101, 239,
+204, 94, 213, 197, 105, 43, 187, 225, 63, 38, 207, 157, 220, 54, 185,
+115, 242, 254, 201, 35, 58, 23, 240, 233, 31, 247, 44, 97, 206, 108,
+61, 123, 243, 14, 245, 235, 115, 48, 46, 252, 89, 206, 134, 159, 29,
+255, 147, 241, 120, 252, 155, 227, 223, 30, 127, 153, 205, 63, 96, 83,
+96, 14, 255, 130, 207, 126, 57, 251, 45, 134, 246, 7, 25, 222, 239,
+228, 136, 223, 180, 195, 124, 55, 118, 99, 55, 118, 99, 55, 118, 99,
+55, 118, 99, 55, 118, 99, 55, 118, 99, 55, 118, 99, 55, 118, 99, 55,
+118, 99, 55, 118, 99, 55, 118, 163, 222, 216, 206, 90, 123, 122, 126,
+120, 239, 232, 206, 174, 175, 66, 31, 236, 170, 222, 209, 187, 210,
+91, 111, 215, 149, 165, 231, 217, 245, 92, 217, 95, 207, 214, 189,
+245, 112, 107, 174, 44, 59, 159, 220, 177, 119, 121, 134, 103, 199,
+177, 43, 27, 253, 120, 215, 87, 4, 35, 59, 159, 222, 182, 247, 248,
+84, 156, 106, 199, 174, 44, 185, 163, 235, 171, 98, 24, 222, 60, 120,
+168, 39, 14, 219, 91, 79, 214, 123, 143, 39, 183, 117, 109, 155, 25,
+240, 93, 186, 170, 217, 122, 239, 242, 232, 142, 174, 175, 42, 61,
+159, 220, 182, 119, 121, 191, 184, 170, 253, 117, 239, 202, 232, 206,
+180, 115, 63, 150, 222, 212, 87, 48, 100, 214, 248, 142, 238, 175, 74,
+199, 176, 183, 30, 124, 56, 189, 185, 235, 171, 98, 119, 235, 37, 123,
+143, 207, 164, 171, 218, 123, 60, 237, 156, 239, 250, 221, 58, 224,
+204, 234, 254, 170, 202, 119, 107, 240, 161, 54, 175, 42, 187, 185,
+255, 104, 111, 93, 204, 43, 54, 15, 153, 221, 48, 146, 238, 214, 62,
+243, 14, 233, 109, 237, 93, 21, 187, 11, 47, 221, 251, 189, 123, 214,
+31, 100, 243, 193, 245, 251, 128, 49, 22, 30, 167, 55, 247, 37, 31,
+207, 238, 214, 125, 217, 13, 237, 93, 85, 118, 158, 197, 54, 118, 61,
+120, 93, 111, 7, 251, 178, 96, 147, 176, 247, 29, 72, 119, 43, 185,
+181, 189, 171, 2, 63, 57, 248, 16, 93, 215, 152, 71, 96, 115, 231, 28,
+190, 79, 230, 86, 187, 94, 139, 249, 201, 199, 222, 158, 95, 87, 182,
+222, 187, 98, 187, 11, 140, 243, 151, 137, 243, 7, 156, 133, 237, 90,
+98, 114, 235, 222, 229, 123, 242, 235, 186, 103, 221, 127, 44, 51,
+178, 11, 209, 38, 20, 167, 235, 254, 163, 237, 122, 83, 246, 251, 238,
+232, 93, 73, 243, 235, 178, 91, 62, 160, 152, 73, 40, 142, 222, 209,
+238, 221, 226, 90, 152, 93, 21, 93, 215, 240, 94, 203, 117, 221, 36,
+244, 214, 1, 67, 187, 93, 15, 193, 126, 223, 185, 193, 125, 242, 117,
+153, 149, 1, 187, 171, 183, 130, 102, 166, 187, 197, 80, 108, 217,
+203, 167, 231, 251, 15, 189, 49, 191, 174, 247, 1, 235, 141, 247, 1,
+227, 207, 65, 113, 93, 195, 251, 218, 142, 62, 204, 26, 31, 29, 229,
+215, 117, 143, 213, 167, 102, 231, 225, 174, 94, 19, 236, 250, 241,
+182, 175, 43, 97, 17, 239, 237, 249, 117, 37, 12, 31, 243, 239, 203,
+216, 93, 29, 203, 62, 162, 101, 118, 161, 151, 72, 242, 235, 98, 190,
+254, 33, 11, 235, 111, 22, 172, 159, 57, 34, 85, 115, 3, 248, 124, 79,
+126, 93, 220, 135, 27, 125, 125, 34, 249, 212, 201, 186, 255, 80, 251,
+250, 20, 188, 151, 116, 93, 22, 62, 51, 220, 10, 107, 28, 179, 171,
+175, 252, 177, 235, 186, 243, 187, 214, 104, 141, 232, 39, 134, 150,
+119, 13, 216, 213, 144, 53, 2, 239, 171, 174, 233, 194, 250, 229, 222,
+243, 21, 235, 191, 204, 230, 95, 97, 243, 13, 236, 90, 222, 184, 254,
+219, 140, 79, 111, 103, 54, 120, 143, 116, 93, 15, 178, 57, 89, 63,
+194, 226, 204, 239, 176, 57, 91, 127, 149, 233, 134, 253, 245, 55,
+216, 53, 29, 248, 93, 87, 224, 53, 61, 235, 175, 107, 91, 113, 148,
+174, 109, 235, 120, 223, 200, 104, 201, 79, 212, 191, 174, 109, 245,
+171, 175, 146, 227, 80, 255, 19, 150, 235, 186, 105, 239, 115, 74, 28,
+186, 169, 237, 235, 74, 94, 172, 198, 109, 243, 157, 72, 55, 31, 183,
+111, 220, 83, 117, 142, 241, 78, 48, 21, 253, 129, 13, 235, 156, 115,
+253, 79, 8, 93, 216, 179, 100, 67, 76, 109, 223, 37, 235, 66, 155,
+125, 52, 121, 93, 112, 39, 20, 29, 109, 96, 88, 122, 110, 211, 58, 58,
+121, 206, 224, 46, 53, 239, 176, 50, 95, 202, 59, 108, 247, 181, 185,
+145, 158, 27, 190, 94, 205, 211, 44, 217, 246, 57, 53, 79, 107, 191,
+70, 8, 158, 66, 202, 107, 31, 181, 48, 255, 220, 232, 78, 45, 175,
+109, 217, 87, 128, 69, 138, 58, 64, 239, 192, 134, 16, 243, 40, 74,
+29, 96, 244, 250, 118, 159, 0, 76, 158, 211, 87, 234, 38, 195, 59,
+205, 167, 2, 1, 146, 106, 221, 36, 105, 249, 186, 134, 119, 202, 117,
+166, 190, 245, 247, 201, 72, 66, 157, 105, 212, 50, 247, 71, 47, 238,
+93, 150, 235, 114, 137, 101, 39, 6, 217, 38, 209, 139, 181, 203, 253,
+228, 70, 181, 142, 201, 44, 212, 56, 152, 237, 106, 117, 204, 182,
+189, 133, 239, 128, 104, 170, 214, 125, 187, 95, 81, 128, 193, 238,
+216, 93, 106, 157, 124, 104, 140, 15, 155, 31, 236, 142, 125, 78, 93,
+87, 72, 110, 221, 134, 43, 83, 239, 88, 238, 47, 90, 87, 99, 62, 131,
+89, 73, 121, 221, 106, 11, 238, 88, 242, 156, 209, 173, 250, 58, 223,
+112, 11, 214, 249, 184, 54, 186, 171, 180, 46, 218, 114, 84, 242, 188,
+178, 155, 250, 159, 208, 215, 145, 71, 91, 192, 255, 244, 92, 114,
+171, 190, 238, 62, 218, 130, 117, 119, 174, 123, 94, 223, 147, 250,
+20, 182, 167, 131, 34, 57, 55, 124, 203, 246, 245, 117, 192, 224, 26,
+252, 10, 187, 170, 183, 116, 125, 37, 250, 96, 150, 121, 239, 118,
+221, 43, 26, 170, 13, 254, 127, 1, 20, 8, 210
+};
+#define LOAD_ASSETS()  (GD.copy(__assets, sizeof(__assets)), GD.loadptr = ASSETS_END)
+
+static const shape_t GAUGEFACE_SHAPE = {0, 256, 256, 0};
+static const shape_t OFFSETNEEDLE_SHAPE = {1, 76, 64, 0};
+struct {
+  Bitmap gaugeface;
+  Bitmap offsetneedle;
+} bitmaps = {
+ /*        gaugeface */  {{256, 256}, {128, 128},      0x0UL,  6,  0},
+ /*     offsetneedle */  {{ 76,  64}, { 38,  32},  0x20000UL,  6,  1}
+};

+ 2 - 1
publish.py

@@ -11,7 +11,8 @@ inventory = {
     '3.Peripherals' : "sketch tilt noisy song",
     '4.Utilities'   : "viewer radarchart selftest",
     '5.Demos'       : "cobra jnr kenney sprites widgets",
-    '6.Games'       : "nightstrike chess invaders frogger chip8",
+    '6.Games'       : "nightstrike chess invaders8080 frogger chip8",
+    '7.GD3'         : "movie cube2 wifi",
 }
 
 import zipfile

+ 25 - 5
transports/wiring.h

@@ -1,6 +1,16 @@
 #ifndef CS
+#if defined(ESP8266)
+#define CS D8
+#else
 #define CS 8
 #endif
+#endif
+
+#if defined(ESP8266)
+#define YIELD() yield()
+#else
+#define YIELD()
+#endif
 
 class GDTransport {
 private:
@@ -9,8 +19,8 @@ public:
   void ios() {
     pinMode(CS, OUTPUT);
     digitalWrite(CS, HIGH);
-    pinMode(9, OUTPUT);
-    digitalWrite(9, HIGH);
+    pinMode(SD_PIN, OUTPUT);
+    digitalWrite(SD_PIN, HIGH);
 
     SPI.begin();
     // for (;;) SPI.transfer(0x33);
@@ -22,7 +32,7 @@ public:
 #ifdef TEENSYDUINO
     SPI.beginTransaction(SPISettings(3000000, MSBFIRST, SPI_MODE0));
 #else
-#ifndef __DUE__
+#if !defined(__DUE__) && !defined(ESP8266)
     SPI.setClockDivider(SPI_CLOCK_DIV2);
     SPSR = (1 << SPI2X);
 #endif
@@ -86,6 +96,10 @@ public:
     }
     wp += 4;
     freespace -= 4;
+#if defined(ESP8266)
+    // SPI.writeBytes((uint8_t*)&x, 4);
+    SPI.write32(x, 0);
+#else
     union {
       uint32_t c;
       uint8_t b[4];
@@ -95,6 +109,7 @@ public:
     SPI.transfer(b[1]);
     SPI.transfer(b[2]);
     SPI.transfer(b[3]);
+#endif
   }
   void cmdbyte(byte x) {
     if (freespace == 0) {
@@ -126,6 +141,7 @@ public:
   }
 
   void flush() {
+    YIELD();
     getfree(0);
   }
   uint16_t rp() {
@@ -140,7 +156,7 @@ public:
     __end();
     __wr16(REG_CMD_WRITE, wp);
     while (rp() != wp)
-      ;
+      YIELD();
     stream();
   }
 
@@ -208,7 +224,7 @@ public:
       *dst++ = SPI.transfer(0);
     stream();
   }
-#if defined(ARDUINO) && !defined(__DUE__)
+#if defined(ARDUINO) && !defined(__DUE__) && !defined(ESP8266)
   void wr_n(uint32_t addr, byte *src, uint16_t n)
   {
     __end(); // stop streaming
@@ -234,8 +250,12 @@ public:
   {
     __end(); // stop streaming
     __wstart(addr);
+#if defined(ESP8266)
+    SPI.writeBytes(src, n);
+#else
     while (n--)
       SPI.transfer(*src++);
+#endif
     stream();
   }
 #endif