ratack0
Published © GPL3+

Arduino Light Controller Using MKR IoT Carrier

Tired of just flipping a switch? Try this!

AdvancedFull instructions provided4,484
Arduino Light Controller Using MKR IoT Carrier

Things used in this project

Hardware components

Arduino MKR WiFi 1010
Arduino MKR WiFi 1010
Any MKR board (I think...?) This is the one I have, so I am using it
×1
Arduino UNO Wifi Rev.2
Arduino UNO Wifi Rev.2
You can use any WiFi board, but you will need to change the libraries to meet that
×1
Solderless Breadboard Half Size
Solderless Breadboard Half Size
Any size will do
×1
Jumper wires (generic)
Jumper wires (generic)
Generic M-M wires
×5
Arduino MKR IoT Carrier
×1
LED (generic)
LED (generic)
Any color (symbolizes lights)
×1
Relay (generic)
I am using a Songle SRD-05VDC-SL-C module
×1
Resistor 220 ohm
Resistor 220 ohm
Use a 10 ohm resistor instead if using 3.3V power
×1
Resistor 10k ohm
Resistor 10k ohm
×1
Graphic OLED, 128 x 64 Pixels
Graphic OLED, 128 x 64 Pixels
128x64 monochrome display that is compatible with U8G2 library
×1
18650 battery
I could not find these anywhere
×1
Generic button
×1
Arduino MKR IoT Carrier
×1

Software apps and online services

Arduino IDE
Arduino IDE
Arduino Web Editor
Arduino Web Editor
Blynk
Blynk

Story

Read more

Custom parts and enclosures

MKR IoT Carrier case

Ready-to-print files for the case of the IoT carrier.

Arduino WiFi Rev2 + 9V battery case

Ready-to-print file for a bottom for the WiFi Rev2 with a built-in 9V battery holder

Schematics

Connections for the WiFi Rev2 board

Code

MKR IoT Carrier code

C/C++
Upload this code to the MKR board attached to the carrier.
#include <Arduino_MKRIoTCarrier.h>  // include the IoT carrier library
#include "Images.h"                 // Bitmap images file
#include <SPI.h>                    // include needed libraries
#include <WiFiNINA.h>
#include <BlynkSimpleWiFiNINA.h>
#include <utility/wifi_drv.h>       // needed for RGB LED

WidgetBridge bridge1(V0);         // data transfer widget (bridge)
BlynkTimer timer;                 // timer for sending data
WidgetLCD lcd(V2);

#define GREEN_LED_pin   25        // RGB LED pins (wifi_drv)
#define BLUE_LED_pin    27
#define RED_LED_pin     26

char ssid[] = "Your SSID";     // SSID, password, and auth token
char pass[] = "Your password";
char auth[] = "Your auth token (Blynk)";

const int brightness = 120;       // brightness of the lights
int batteryPercent;               // battery percent
int color;                        // color of battery, set to nothing to start
int lastBatteryPercent = -1;      // set it to -1 so that it thinks the battery has changed percent, and do the battery

bool relayCanChange = true;       // can the relay change?
bool relayOn;                     // is the relay on?
bool lastRead = relayOn;          // last state of the relay
bool ownLights = false;           // are the lights on the carrier on?
bool autoReconnect = true;        // auto reconnections?

MKRIoTCarrier carrier;             // init the IoT carrier as "carrier"
uint32_t white = carrier.leds.Color(brightness, brightness, brightness); // color white (R, G, B) not actually used currently (full brightness)
#define BLYNK_PRINT Serial         // Blynk debug output
void setup() {
// insert this line of code in here (setup()) to change the color
// carrier.display.setTextColor(ST77XX_(your color));
// currently it is set to CYAN (ST77XX_CYAN)
  carrier.display.setTextColor(ST77XX_CYAN);    // Set text color
  // set up RGB LED
  WiFiDrv::pinMode(RED_LED_pin, OUTPUT);        //RED
  WiFiDrv::pinMode(GREEN_LED_pin, OUTPUT);      //GREEN
  WiFiDrv::pinMode(BLUE_LED_pin, OUTPUT);       //BLUE

  //turn off RGB led
  WiFiDrv::digitalWrite(RED_LED_pin, LOW);
  WiFiDrv::digitalWrite(GREEN_LED_pin, LOW);
  WiFiDrv::digitalWrite(BLUE_LED_pin, LOW);
  // start the carrier and check for errors
  if (!carrier.begin()){
    while(1){
      // if there is an error, flash the RGB LED red
      setLEDColor(255, 0, 0);
      delay(1000);
      setLEDColor(0, 0, 0);
      delay(1000);
    }
  }
  // set LED color to RED (connecting...) (setLEDColor(r, g, b) is a custom function at the bottom)
  setLEDColor(255, 0, 0);
  Serial.begin(9600);                       // Start Serial
  Blynk.begin(auth, ssid, pass);            // Start Blynk
  carrier.display.fillScreen(ST77XX_BLACK); // clear display
  carrier.display.setRotation(0);           // set display settings
  carrier.display.setTextSize(2);
  // for some reason it cannot draw things until Blynk is connected
//  carrier.display.drawBitmap(20, 60, loading, 200, 100, ST77XX_WHITE);
  while (!Blynk.connected()){               // wait for Blynk connections
//    carrier.display.drawBitmap(20, 60, loading, 200, 100, ST77XX_WHITE);
  }
  lcd.clear();
  carrier.display.fillScreen(ST77XX_BLACK); // clear display (fill with black. If you know another way, please tell)
  carrier.display.setCursor(50, 50);
  carrier.display.print("Connected!");      // print success message to display
  setLEDColor(0, 255, 0);                   // set LED to green (connected)
  delay(5000);                              // wait 5 seconds
  carrier.display.fillScreen(ST77XX_BLACK); // clear display
  timer.setInterval(250L, sendData);        // set up timer (every 250 ms do sendData())
  doGUI();                                  // do the GUI for the project (displays "Light controlling")
}

void loop() {
  Blynk.run();              // handle Blynk and timer
  timer.run();
  doBetterBattery();        // output battery data at the top (optional)
  if (Blynk.connected()){   // set the LED color based on Blynk connection
    setLEDColor(0, 255, 0); // green
    drawWiFi();             // draw the wifi
  }
  else{                     // If not connected:
    setLEDColor(255, 0, 0); // red
    clearWiFi();            // clear the wifi
    clearDisplay();         // clear display
    carrier.display.setTextColor(ST77XX_RED);   // set text color to red
    textAt(5, 120, "WiFi Disconnected!");       // display "WiFi Disconnected!"
    carrier.display.setTextColor(ST77XX_CYAN);  // set text color back to cyan
    if (autoReconnect){     // if auto reconnect is true
      textAt(20, 150, "Reconnecting...");
      reconnect();          // reconnect
      clearDisplay();       // clear display
      textAt(20, 150, "Reconnected!");
    }
    else{
      textAt(20, 150, "Waiting for manual   reconnections...");
      // wait for a button press
      while (isAnyButtonPressed()){
        
      }
      textAt(40, 180, "Reconnecting...");
      reconnect();          // reconnect
      clearDisplay();       // clear display
      textAt(20, 150, "Reconnected!");
    }
    delay(5000);              // wait 5 seconds
    clearDisplay();           // clear display
    doGUI();                  // do the GUI
    lastBatteryPercent = -1;  // do this so it thinks the battery percent has changed, and show the battery
    doBetterBattery();        // do the better battery display
  }
  Blynk.virtualWrite(V3, rssiPercent());      // write the WiFi strength and battery percent to Blynk
  Blynk.virtualWrite(V4, getBatteryPercent());
  carrier.Buttons.update();         // update buttons
  if (carrier.Button4.getTouch()){  // if button 4 is pressed, toggle the lights on the carrier (built in flashlight)
    ownLights = !ownLights;         // toggle the flashlight
    delay(100);
  }
  if (carrier.Button3.getTouch()){ // if button 3 is pressed, change if the lights can change
    relayCanChange = !relayCanChange;
    delay(90);
  }
  if (carrier.Button0.getTouch()){    // if the first button is pressed:
    autoReconnect = !autoReconnect;   // toggle auto reconnect
    String tempText;
    if (autoReconnect){
      tempText = "   On";
    }
    else{
      tempText = "   Off";
    }
    // display if auto reconnect is on or off
    textAt(20, 175, "Auto reconnections: " + tempText);
    delay(3000);
    carrier.display.fillRect(0, 170, 240, 40, ST77XX_BLACK);
  }
  carrier.leds.clear();             // clear LEDS
  if (ownLights){                   // if the flashlight is on, set the LEDs on to the brightness  R (0-255)    G (0-255)   B (0-255)
    carrier.leds.fill(white, 0, 5); // fill the LEDs
  }
  carrier.leds.show();              // show the LEDs
  carrier.display.fillRect(15, 60, 240, 20, ST77XX_BLACK); // clear this output:
  if (relayCanChange){
    textAt(15, 60, "Lights can change");
  }
  else{
    textAt(15, 60, "Lights cannot change");
  }
  if (lastRead != relayOn){   // if the relay has changed
    lcd.clear();              // clear the virtual lcd
    if (relayOn){             // display light on/off
      lcd.print(0, 0, "Light on");
    }
    else{
      lcd.print(0, 0, "Light off");
    }
  }
  lastRead = relayOn;         // set the last state of the relay to the current state
  delay(50);                  // delay a bit so as not to overwhelm the MKR board and display
}

void sendData(){    // do this when the timer "ticks" (every 200 ms)
  int proximity;    // proximity variable
  if (carrier.Light.proximityAvailable()){        // update proximity and buttons
    proximity = carrier.Light.readProximity();    // get proximity
    carrier.Buttons.update();                     // update buttons
    // if something is close or button 2 is pressed and the relay can change
    if (((proximity < 150) or (carrier.Button2.getTouch())) and (relayCanChange == true)){
      relayOn = !relayOn;         // toggle the relay
      delay(90);                  // wait a small amount
    }
  }
  if (relayOn){ // send data ON and draw sun
    bridge1.virtualWrite(V5, 1);  // write the data to other device through the bridge
    drawSun();                    // draw the sun
  }
  else{ // send data OFF (and maybe draw clouds, its a work in progress)
    bridge1.virtualWrite(V5, 0);  // write the data to other device through the bridge
    clearSun();                   // clear the sun
  }
}

BLYNK_WRITE(V6){                // when receiving data on V6
  int value = param.asInt();    // get the value
  if (value == 1){              // if the value is 1
    relayOn = !relayOn;         // toggle the relay
  }
}

BLYNK_CONNECTED() {  // connected now, set the bridge auth token
  bridge1.setAuthToken("Other auth token");
}
void setLEDColor(uint8_t R, uint8_t G, uint8_t B){ // custom function to help manage RGB LED
  //R, G, and B values should not exceed 255 or be lower than 0.
  
  //set ESP32 wifi module RGB led color
  WiFiDrv::analogWrite(RED_LED_pin, R);   // Red
  WiFiDrv::analogWrite(GREEN_LED_pin, G); // Green
  WiFiDrv::analogWrite(BLUE_LED_pin, B);  // Blue
}
int getBatteryPercent(){    // return the battery percent as int
  int sensorValue = analogRead(ADC_BATTERY);        // read battery pin
                                                    // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 3.7V):
                                                    //  float voltage = sensorValue * (3.7 / 1023.0);
  int percent = map(sensorValue, 0, 1023, 0, 100);  // convert battery reading to percent reading
  return percent;                                   // return reading
}
void drawBatteryShell(){ // draw battery shell
  carrier.display.drawRect(108, 5, 27, 13, ST77XX_WHITE);
  carrier.display.fillRect(135, 9, 3, 5, ST77XX_WHITE);
}/*
void drawFirstBar(){ // draw first bar
  carrier.display.fillRect(110, 7, 7, 9, ST77XX_WHITE);
}
void drawSecondBar(){ // draw second bar
  carrier.display.fillRect(118, 7, 7, 9, ST77XX_WHITE);
}
void drawThirdBar(){ // draw third bar
  carrier.display.fillRect(126, 7, 7, 9, ST77XX_WHITE);
}*/
void drawBatteryShellRed(){ // draw the shell as red color (used when battery is low)
  carrier.display.drawRect(108, 5, 27, 13, ST77XX_RED);
  carrier.display.fillRect(135, 9, 3, 5, ST77XX_RED);
}
/*
void doBattery(){ // do the battery and draw it
  // this took a lot of fine-tuning
  batteryPercent = getBatteryPercent(); // get battery percent with the function
  drawBatteryShell(); // draw the shell
  if (batteryPercent > 10){ // draw the bars (change these percent as you like)
    drawFirstBar();
  }
  if (batteryPercent > 40){
    drawSecondBar();
  }
  if (batteryPercent > 80){
    drawThirdBar();
  }
  textAt(110, 40, String(batteryPercent) + "%"); // display battery percent
}*/
void textAt(int x, int y, String text){ // much easier function to use
  carrier.display.setCursor(x, y);      // set the cursor to (x, y)
  carrier.display.print(text);          // print the text
}
void clearDisplay(){ // fill screen with BLACK color
  carrier.display.fillScreen(ST77XX_BLACK);
}
void drawSun(){       // draw the sun bitmap (to show light is on)
  carrier.display.drawBitmap(100, 120, sun, 50, 50, ST77XX_YELLOW);
}
void doGUI(){         // output GUI
  textAt(10, 100, "Light controlling");
}
void clearGUI(){  // clear the GUI by drawing a filled black rectangle around it
  carrier.display.fillRect(10, 100, 100, 20, ST77XX_BLACK);
}
void clearSun(){  // clear the sun the same way
  carrier.display.fillRect(95, 115, 60, 60, ST77XX_BLACK);
}
void drawWiFi(){  // draw the WiFi bitmap and clear a dot that goes with it
  carrier.display.drawBitmap(60, 5, wifi, 50, 30, ST77XX_WHITE);
  carrier.display.fillRect(55, 25, 10, 10, ST77XX_BLACK);
}
void clearWiFi(){ // clear the WiFi bitmap
  carrier.display.fillRect(58, 3, 55, 35, ST77XX_BLACK);
}
BLYNK_WRITE(V1){  // when receiving data on V1
  int val = param.asInt();    // get the value
  if (val == 1){              // if the value is 1, change the relay
    relayOn = !relayOn;
    delay(150);
  }
}
void doBetterBattery(){       // draw a more modern battery
  batteryPercent = getBatteryPercent();                       // get the battery percent
  if (batteryPercent != lastBatteryPercent){                  // if the battery percent has changed
    int length = map(batteryPercent, 0, 100, 1, 25);          // map the battery percent to 25 pixels
    carrier.display.fillRect(107, 4, 140, 60, ST77XX_BLACK);  // clear the battery display
    if (batteryPercent < 5){                                  // if the percent is < 5
      color = ST77XX_RED;                                     // color is red
      drawBatteryShellRed();                                  // draw the shell red
    }
    else{                                                     // else
      color = ST77XX_WHITE;                                   // color is white
      drawBatteryShell();                                     // draw the shell as white
    }
    carrier.display.fillRect(110, 7, length, 9, color);       // draw the bar as the color selected
    textAt(110, 25, String(batteryPercent) + "%");            // display the battery percent
  }
  lastBatteryPercent = batteryPercent;                        // last battery percent is the current battery percent
}
int rssiPercent(){                              // function to get RSSI as percent
  return (map(WiFi.RSSI(), -100, 0, 0, 100));   // return the percent
}
/*
 * Old, unused code: 
 * 
  if (carrier.Button0.getTouch()){ // if button 0 is pressed:
    brightness -= 20; // lower brightness
    if (brightness < 0){
      brightness = 0;
    }
    delay(90);
  }
  if (carrier.Button1.getTouch()){ // if button 1 is pressed, increase brightness
    brightness += 20;
    if (brightness > 255){
      brightness = 240;
    }
    delay(90);
  }
 */
void reconnect(){                     // reconnect to Blynk
  while (!Blynk.connected()){         // while not connected
    Blynk.begin(auth, ssid, pass);    // begin Blynk again
  }
}
bool isAnyButtonPressed(){      // is any button pressed
  carrier.Buttons.update();     // update buttons
  // return if any button is pressed
  return ((carrier.Button0.getTouch()) or (carrier.Button1.getTouch()) or (carrier.Button2.getTouch()) or (carrier.Button3.getTouch()) or (carrier.Button4.getTouch()));
}

Arduino WiFi Rev2 code

C/C++
Upload this code to the Arduino WiFi Rev2 with the relay pins to +5V, GND, and D2
//#define BLYNK_PRINT Serial // debug output for Blynk

#include <U8g2lib.h>
#include <Wire.h>
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);

#define GREEN_LED_pin   26 // pins for the RGB LED (built in to the Arduno)
#define BLUE_LED_pin    27
#define RED_LED_pin     25

#include <Blynk.h>                  // necessary libraries
#include <SPI.h>
#include <WiFiNINA.h>
#include <BlynkSimpleWiFiNINA.h>
WidgetBridge bridge1(V0);           // bridge widge for receiving data

char auth[] = "Auth token"; // auth, ssid, and pass
char ssid[] = "SSID";
char pass[] = "Password";

int receivedVal;              // received data
bool relayOn = false;         // is the relay on?
bool lastRelayState = false;  // last relay state
const int relayPin = 2;       // relay pin
const int buttonPin = 3;      // button pin for manual control
const int reconnectPin = 4;   // button to reconnect
bool canReconnect = true;    // default to false, changeable by button press
/*   CONNECTIONS
  RELAY ----- Arduino
  +     ----- 5V
  -     ----- GND
  S     ----- D2
  
  RELAY                 -----    Light (can be LED, etc)
  
  NC (normally closed)  -----    Nothing
  Middle pin            -----    One pin of light
  NO (normally open)    -----    Power (wall, +5V, etc)
  Normally open means that when the relay does not have power, the circuit is open, meaning the light is off. I decided to use this side because I wanted a saftey, like if my Arduino loses power, short circuits, or anything else bad, it would stop powering the relay, meaning the lights would go off.
  
  LED connections (using LED as an example)
  shorter end (GND)  ----- 220 ohm resistor ----- GND
  longer end (power) ----- +5V
  Use 10 ohm resistor for 3.3V power
*/

void setup() {
  u8g2.begin();
  u8g2.setFont(u8g2_font_7x14B_tf);
  u8g2.clearBuffer();
  u8g2.sendBuffer();
  // set up RGB LED (buitlin LED)
  WiFiDrv::pinMode(RED_LED_pin, OUTPUT);   //RED
  WiFiDrv::pinMode(GREEN_LED_pin, OUTPUT); //GREEN
  WiFiDrv::pinMode(BLUE_LED_pin, OUTPUT);  //BLUE

  //turn off RGB led
  WiFiDrv::digitalWrite(RED_LED_pin, LOW);
  WiFiDrv::digitalWrite(GREEN_LED_pin, LOW);
  WiFiDrv::digitalWrite(BLUE_LED_pin, LOW);
  
  pinMode(relayPin, OUTPUT);      // set up relay
  pinMode(buttonPin, INPUT);      // set up both buttons
  pinMode(reconnectPin, INPUT);
  Serial.begin(9600);             // begin Serial
  setLEDColor(255, 0, 0);         // set LED color to red
  clear();
  textAt(25, 25, "Connecting");
  send();
  Blynk.begin(auth, ssid, pass);  // begin Blynk
  while (!Blynk.connected());     // wait for Blynk connections
  setLEDColor(0, 255, 0);         // set the LEDcolor to green (connected now!)
  clear();
  textAt(25, 25, "Connected");
  send();
  delay(5000);
  clear();
  send();
}
bool lastState, currentState;
void loop() {
  Blynk.run(); // handle Blynk
  currentState = Blynk.connected();
  if (currentState){ // set LED color based on WiFi connections
    setLEDColor(0, 255, 0);  // green (connected)
    if (digitalRead(buttonPin) == HIGH){
      bridge1.virtualWrite(V6, 1);
      delay(150);
    }
  }
//  Serial.println(
  if (digitalRead(reconnectPin) == HIGH){
    canReconnect = !canReconnect;
    clear();
    textAt(5, 30, "Auto reconnect:");
    if (canReconnect){
      textAt(5, 60, "Yes");
    }
    else{
      textAt(5, 60, "No");
    }
    send();
    delay(2000);
    clear();
    send();
  }
  if (!currentState){
    setLEDColor(255, 0, 0);
    if (canReconnect){
      clear();
      textAt(5, 30, "Reconnecting...");
      send();
      while (!Blynk.connected()){
        Blynk.begin(auth, ssid, pass);
        manualControl();
      }
      clear();
      textAt(5, 30, "Reconnected!");
      send();
      setLEDColor(255, 0, 0);
      currentState = true;
      delay(5000);
      clear();
      send();
    }
    else{
      manualControl();
      delay(100);
    }
  }
  Blynk.virtualWrite(V2, rssiPercent());
//  Serial.println(rssiStrength);
  if (relayOn != lastRelayState){ // if the last state is not the current state
    clear();
    if (relayOn){
      textAt(5, 30, "Light: On");
    }
    else{
      textAt(5, 30, "Light: Off");
    }
    send();
  }
  if ((!currentState) and (currentState != lastState)){
    setLEDColor(255, 0, 0);
    clear();
    textAt(5, 30, "Disconnected");
    send();
  }
/*  if (!currentState){   // removed because of optional auto-reconnect
    manualControl();
    delay(100);
  }*/
  lastState = currentState;
  lastRelayState = relayOn;
}

BLYNK_WRITE(V5){ // when receiving data on V5 (make sure this is the same on the sending side)
  receivedVal = param.asInt();  // get the value
  if (receivedVal == 1){        // if it is 1
    relayOn = true;    // turn it on
  }
  else{ // else
    relayOn = false;   // turn it off
  }
  if (relayOn){ // if it is true, turn the relay on
    digitalWrite(relayPin, HIGH);
  }
  else{ // if it is false, turn the relay off
    digitalWrite(relayPin, LOW);
  }
}

void setLEDColor(uint8_t R, uint8_t G, uint8_t B){
  //R, G, and B values should not exceed 255 or be lower than 0.
  
  //set ESP32 wifi module RGB led color
  WiFiDrv::analogWrite(RED_LED_pin, R); //Red
  WiFiDrv::analogWrite(GREEN_LED_pin, G); //Green
  WiFiDrv::analogWrite(BLUE_LED_pin, B);  //Blue
}
BLYNK_CONNECTED(){ // connected, now set the auth token of the other device
  bridge1.setAuthToken("Other auth token");
}
void manualControl(){
  if (digitalRead(buttonPin) == HIGH){
    relayOn = !relayOn;
    delay(100);
  }
  digitalWrite(relayPin, relayOn);
}
void clear(){
  u8g2.clearBuffer();
}
void send(){
  u8g2.sendBuffer();
}
void textAt(int x, int y, String text){
  u8g2.setCursor(x, y);
  u8g2.print(text);
}
int rssiPercent(){
  return map(WiFi.RSSI(), -100, 0, 0, 100);
}
/*
 * This does not work:
 * Modify if you want
 * put after if (Blynk.connected()){
 * }
  else{
    setLEDColor(255, 0, 0);
    clear();
    textAt(5, 30, "Disconnected...");
    textAt(5, 60, "Reconnecting");
    send();
    bool result = Blynk.connect();
    delay(10000);
    if (result){
      textAt( ... );
    }
  }
 */
  /*
  else{
    setLEDColor(255, 0, 0);  // red (disconnected)
    clear();
    textAt(5, 30, "Disconnected");
    send();
    manualControl();
    delay(100);
  }*/

Images.h

C/C++
Add a new tab in the MKR carrier code and add this
const unsigned char sun [] PROGMEM = {
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 
  0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 
  0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xef, 0xff, 0xc0, 0xff, 0xfe, 0x7f, 0xbf, 0xcf, 0xff, 0xc0, 
  0xff, 0xfe, 0x3f, 0xbf, 0x9f, 0xff, 0xc0, 0xff, 0xff, 0x1f, 0xbf, 0x3f, 0xff, 0xc0, 0xff, 0xff, 
  0x8f, 0xfe, 0x7f, 0xff, 0xc0, 0xff, 0xff, 0xce, 0x0e, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf8, 0x07, 
  0xff, 0xff, 0xc0, 0xff, 0xff, 0xf1, 0xe3, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf3, 0xf1, 0xff, 0xff, 
  0xc0, 0xff, 0xff, 0xe3, 0xf9, 0xff, 0xff, 0xc0, 0xff, 0xf0, 0xe7, 0xf9, 0xc3, 0xff, 0xc0, 0xff, 
  0xe0, 0x67, 0xf8, 0x81, 0xff, 0xc0, 0xff, 0xff, 0xe7, 0xf9, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf3, 
  0xf9, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf1, 0xe3, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xf8, 0x07, 0xff, 
  0xff, 0xc0, 0xff, 0xff, 0xde, 0x0e, 0xff, 0xff, 0xc0, 0xff, 0xff, 0x8f, 0xfe, 0x7f, 0xff, 0xc0, 
  0xff, 0xff, 0x9f, 0xff, 0x3f, 0xff, 0xc0, 0xff, 0xfe, 0x3f, 0xbf, 0x9f, 0xff, 0xc0, 0xff, 0xfe, 
  0x7f, 0xbf, 0xcf, 0xff, 0xc0, 0xff, 0xfe, 0xff, 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 
  0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 
  0xc0, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0
};
const unsigned char wifi [] PROGMEM = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x00, 
  0x00, 0x00, 0x03, 0xfe, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x01, 0xf8, 0x00, 0x00, 0x00, 
  0x0f, 0xc3, 0xf8, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0xfe, 0x1e, 0x00, 0x00, 0x00, 0x0e, 0x3f, 
  0xff, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0xe0, 
  0x00, 0x00, 0x00, 0x01, 0xf0, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xf8, 0xe0, 0x00, 0x00, 
  0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x1e, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x01, 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, 0x20, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00
};
// 'loading', 200x100px
/*
const unsigned char loading [] PROGMEM = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x28, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x61, 0xa0, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x53, 
  0x6d, 0xb6, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x1a, 0x2d, 0x14, 0x40, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0xa2, 0xfa, 0x2d, 0x14, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x9a, 0x6d, 0x14, 0x40, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x9e, 0xfb, 0xed, 0x13, 0xda, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x7f, 0xdf, 0xf3, 
  0xfc, 0xff, 0x3f, 0xcf, 0xf3, 0xfe, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x7f, 0x9f, 0xf7, 0xfd, 0xff, 0x7f, 0xdf, 0xf7, 0xfc, 0xff, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xff, 
  0xbf, 0xe7, 0xf9, 0xfe, 0x7f, 0x9f, 0xe7, 0xfd, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xff, 0xbf, 0xef, 0xfb, 0xfe, 0xff, 0xbf, 0xe7, 
  0xf9, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x1c, 0xff, 0x3f, 0xcf, 0xf3, 0xfc, 0xff, 0xbf, 0xef, 0xfb, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x7f, 0xdf, 0xf7, 0xfd, 0xff, 
  0x3f, 0xcf, 0xf3, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x11, 0xfe, 0x7f, 0x9f, 0xe7, 0xf9, 0xfe, 0x7f, 0xdf, 0xf3, 0xfc, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00
};*/

Credits

ratack0

ratack0

0 projects • 4 followers

Comments

Add projectSign up / Login