shithub: leaf

Download patch

ref: a80af55313ca99a442b2574dd53ebedfb9e736fc
parent: e586373df54e57b080fb59c06b72ba1f50e975ff
author: spiricom <jeff@snyderphonics.com>
date: Sun Mar 1 10:30:26 EST 2020

not sure - updated things

binary files a/.DS_Store b/.DS_Store differ
binary files a/LEAF/.DS_Store b/LEAF/.DS_Store differ
binary files a/LEAF/Inc/.DS_Store /dev/null differ
--- /dev/null
+++ b/LEAF/Inc/MIDI_application.h
@@ -1,0 +1,50 @@
+/*
+ * MIDI_application.h
+ *  Created on: 6 d�c. 2014
+ *      Author: Xavier Halgand
+ *
+ *	Modified on: 9/12/16 by C.P. to handle the MIDI_IDLE state properly, and
+ *	added required code to be compatible with "NucleoSynth"
+ *
+ */
+
+#ifndef MIDI_APPLICATION_H_
+#define MIDI_APPLICATION_H_
+
+/* Includes ------------------------------------------------------------------*/
+
+#include "stdio.h"
+#include "usbh_core.h"
+#include "usbh_MIDI.h"
+#include "main.h"
+
+#include <math.h>
+#include <stdint.h>
+#include <stdbool.h>
+
+/*------------------------------------------------------------------------------*/
+typedef enum
+{
+	MIDI_APPLICATION_IDLE = 0,
+	MIDI_APPLICATION_START,
+	MIDI_APPLICATION_READY,
+	MIDI_APPLICATION_RUNNING,
+	MIDI_APPLICATION_DISCONNECT
+}
+MIDI_ApplicationTypeDef;
+
+
+#define RX_BUFF_SIZE   64  /* Max Received data 64 bytes */
+
+extern uint8_t MIDI_RX_Buffer[RX_BUFF_SIZE];// __ATTR_RAM_D2; // MIDI reception buffer
+extern uint8_t CCs[128];
+
+extern uint8_t MIDIStartOfFrame;
+
+/* Exported functions ------------------------------------------------------- */
+void MIDI_Application(void);
+void LocalMidiHandler(uint8_t param, uint8_t data);
+void ProcessReceivedMidiDatas(uint32_t myLength);
+
+/*------------------------------------------------------------------------------*/
+#endif /* MIDI_APPLICATION_H_ */
--- /dev/null
+++ b/LEAF/Inc/adc.h
@@ -1,0 +1,58 @@
+/**
+  ******************************************************************************
+  * File Name          : ADC.h
+  * Description        : This file provides code for the configuration
+  *                      of the ADC instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __adc_H
+#define __adc_H
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+extern ADC_HandleTypeDef hadc1;
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_ADC1_Init(void);
+
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__ adc_H */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/audiostream.h
@@ -1,0 +1,93 @@
+/**
+  ******************************************************************************
+  * @file    Audio_playback_and_record/inc/waveplayer.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    26-June-2014
+  * @brief   Header for waveplayer.c module.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __AUDIOSTREAM_H
+#define __AUDIOSTREAM_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32h7xx_hal.h"
+#include "leaf.h"
+#include "main.h"
+
+#define AUDIO_FRAME_SIZE      128
+#define HALF_BUFFER_SIZE      AUDIO_FRAME_SIZE * 2 //number of samples per half of the "double-buffer" (twice the audio frame size because there are interleaved samples for both left and right channels)
+#define AUDIO_BUFFER_SIZE     AUDIO_FRAME_SIZE * 4 //number of samples in the whole data structure (four times the audio frame size because of stereo and also double-buffering/ping-ponging)
+
+
+extern int32_t audioOutBuffer[AUDIO_BUFFER_SIZE];
+extern int32_t audioInBuffer[AUDIO_BUFFER_SIZE];
+extern tMempool smallPool;
+extern tMempool largePool;
+extern uint8_t codecReady;
+extern float sample;
+extern float rightOut;
+extern float rightIn;
+extern tRamp adc[6];
+extern float smoothedADC[6];
+extern float audioDisplayBuffer[128];
+extern uint8_t displayBufferIndex;
+
+/* Exported types ------------------------------------------------------------*/
+typedef enum
+{
+  BUFFER_OFFSET_NONE = 0,
+  BUFFER_OFFSET_HALF,
+  BUFFER_OFFSET_FULL,
+}BUFFER_StateTypeDef;
+
+#ifdef SAMPLERATE96K
+#define SAMPLE_RATE 96000.f
+#else
+#define SAMPLE_RATE 48000.f
+#endif
+
+typedef enum BOOL {
+	FALSE = 0,
+	TRUE
+} BOOL;
+
+#define INV_SAMPLE_RATE 1.f/SAMPLE_RATE
+#define SAMPLE_RATE_MS (SAMPLE_RATE / 1000.f)
+#define INV_SR_MS 1.f/SAMPLE_RATE_MS
+#define SAMPLE_RATE_DIV_PARAMS SAMPLE_RATE / 3
+#define SAMPLE_RATE_DIV_PARAMS_MS (SAMPLE_RATE_DIV_PARAMS / 1000.f)
+#define INV_SR_DIV_PARAMS_MS 1.f/SAMPLE_RATE_DIV_PARAMS_MS
+
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+void audioInit(I2C_HandleTypeDef* hi2c, SAI_HandleTypeDef* hsaiOut, SAI_HandleTypeDef* hsaiIn);
+
+void initFunctionPointers(void);
+
+void audioFrame(uint16_t buffer_offset);
+
+void DMA1_TransferCpltCallback(DMA_HandleTypeDef *hdma);
+void DMA1_HalfTransferCpltCallback(DMA_HandleTypeDef *hdma);
+
+#endif /* __AUDIOSTREAM_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/bdma.h
@@ -1,0 +1,56 @@
+/**
+  ******************************************************************************
+  * File Name          : dma.h
+  * Description        : This file contains all the function prototypes for
+  *                      the dma.c file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __bdma_H
+#define __bdma_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* DMA memory to memory transfer handles -------------------------------------*/
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_BDMA_Init(void);
+
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __bdma_H */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/bsp_driver_sd.h
@@ -1,0 +1,84 @@
+/**
+ ******************************************************************************
+  * @file    bsp_driver_sd.h (based on stm32h743i_eval_sd.h)
+  * @brief   This file contains the common defines and functions prototypes for 
+  *          the bsp_driver_sd.c driver.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32H7_SD_H
+#define __STM32H7_SD_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif 
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32h7xx_hal.h"
+#include "fatfs_platform.h"
+
+/* Exported types --------------------------------------------------------*/ 
+/** 
+  * @brief SD Card information structure 
+  */
+#define BSP_SD_CardInfo HAL_SD_CardInfoTypeDef
+
+/* Exported constants --------------------------------------------------------*/ 
+/**
+  * @brief  SD status structure definition  
+  */     
+#define   MSD_OK                        ((uint8_t)0x00)
+#define   MSD_ERROR                     ((uint8_t)0x01)
+#define   MSD_ERROR_SD_NOT_PRESENT      ((uint8_t)0x02)
+
+/** 
+  * @brief  SD transfer state definition  
+  */     
+#define   SD_TRANSFER_OK                ((uint8_t)0x00)
+#define   SD_TRANSFER_BUSY              ((uint8_t)0x01)
+
+#define SD_PRESENT               ((uint8_t)0x01)
+#define SD_NOT_PRESENT           ((uint8_t)0x00)
+#define SD_DATATIMEOUT           ((uint32_t)100000000)
+
+/* USER CODE BEGIN BSP_H_CODE */
+#define SD_DetectIRQHandler()             HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8)
+
+/* Exported functions --------------------------------------------------------*/
+uint8_t BSP_SD_Init(void);
+uint8_t BSP_SD_ITConfig(void);
+uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout);
+uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout);
+uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks);
+uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks);
+uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr);
+uint8_t BSP_SD_GetCardState(void);
+void    BSP_SD_GetCardInfo(BSP_SD_CardInfo *CardInfo);
+uint8_t BSP_SD_IsDetected(void);
+
+/* These functions can be modified in case the current settings (e.g. DMA stream)
+   need to be changed for specific application needs */
+void    BSP_SD_AbortCallback(void);
+void    BSP_SD_WriteCpltCallback(void);
+void    BSP_SD_ReadCpltCallback(void);
+/* USER CODE END BSP_H_CODE */ 
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32H7_SD_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/codec.h
@@ -1,0 +1,162 @@
+#include "stm32h7xx_hal.h"
+
+#define CODEC_I2C_ADDRESS (0x10 << 1) // 7-bit address goes one bit over to the left to make room for R/W bit
+
+void AudioCodec_init(I2C_HandleTypeDef* hi2c);
+
+
+
+
+
+
+//Settings for CS4271
+// translated from the datasheet by JS
+
+// 01h mode control 1
+//
+// M1 M0 ratio1 ratio0 m/s dac_dif2 dac_dif1 dac_dif0   // unsure if setting bit selects master means 1
+// for 48k == 0 1 0 0 0 0 0 1    ( ratio bit chosen as 0 0 based on assumption of 256X master clock)
+// == 0x41
+// for 96k == 1 0 0 0 0 0 0 1    ( ratio bit chosen as 0 0 based on assumption of <= 256X master clock)
+// == 0x81
+// for 192k == 1 1 1 0 0 0 0 1   ( ratio bit chosen as 1 0 based on assumption of 256X master clock, choose 0 0 (full word would be 0xc1 instead of 0xe1) instead if using something like 64X)
+// == 0xe1
+
+// 02h DAC control
+// AMUTE, FILT_SEL, DEM1, DEM0, RMP_UP, RMP_DN, INV_A, INV_B
+// 0 0 0 0 1 1 0 0
+// == 0x0c
+
+// 03h dac volume and mixing
+// (NA) B=A soft zerocross ATAPI3 ATAPI2 ATAPI1 ATAPI0   (B=A makes channel volumes not independent)
+// 0 1 1 1 1 0 0 1  (the last four bits set channel L to go to output A and channel R to go to output B, but this is easily changed with mixing or reversal)
+// == 0x79
+
+// 04h Volume A
+// MUTE vol6 vol5 vol4 vol3 vol2 vol1 vol0
+// 0 0 0 0 0 0 0 0
+// == 0x00
+
+// 05h Volume B
+// MUTE vol6 vol5 vol4 vol3 vol2 vol1 vol0
+// 0 0 0 0 0 0 0 0
+// == 0x00
+
+// 06h ADC control
+// (NA) (NA) Dither16 ADC_DIF MUTEA MUTEB HPFDisableA HPFDisableB
+// 0 0 0 1 0 0 0 0
+// ==0x10
+
+// 07h mode control 2
+// (NA) (NA) (NA) LOOP MUTECA=B FREEZE CPEN PDN
+// for power down version == 0 0 0 0 0 1 1 1
+// == 0x07
+// to send dry ADC input into DAC == 0 0 0 1 0 0 1 0
+// == 0x12
+// for normal operation == 0 0 0 0 0 0 1 0
+// == 0x02
+
+/*
+
+
+#ifndef ADCHPD
+  #define ADCHPD 0
+#elif (ADCHPD == 0)||(ADCHPD == 1)
+#else
+  #error ADCHPD value not defined
+#endif
+
+#ifndef ADCS
+  #define ADCS 2
+#elif (ADCS >=0)&&(ADCS <= 2)
+#else
+  #error ADCS value not defined
+#endif
+
+#ifndef HYST
+  #define HYST 32
+#elif (HYST >= 0)&&(HYST <= 255)
+#else
+  #error HYST value not defined
+#endif
+
+#ifndef LINVOL
+  #define LINVOL 0x17
+#elif (LINVOL >= 0) && (LINVOL <= 0x1f)
+#else
+  #error LINVOL value not defined
+#endif
+
+#ifndef RINVOL
+  #define RINVOL 0x17
+#elif (RINVOL >= 0) && (RINVOL <= 0x1f)
+#else
+  #error RINVOL value not defined
+#endif
+
+#ifndef LHPVOL
+  #define LHPVOL 127
+#elif (LHPVOL == 0) || ((LHPVOL >= 0x30) && (LHPVOL <= 0x7f))
+#else
+  #error LHPVOL value not defined
+#endif
+
+#ifndef RHPVOL
+  #define RHPVOL 127
+#elif (RHPVOL == 0) || ((RHPVOL >= 0x30) && (RHPVOL <= 0x7f))
+#else
+  #error RHPVOL value not defined
+#endif
+
+#ifndef MICBOOST
+  #define MICBOOST 0
+#elif (MICBOOST == 0)||(MICBOOST == 1)
+#else
+  #error MICBOOST value not defined
+#endif
+
+	// 1 = muted
+#ifndef MUTEMIC
+  #define MUTEMIC 1
+#elif (MUTEMIC == 0)||(MUTEMIC == 1)
+#else
+  #error MUTEMIC value not defined
+#endif
+
+	// 0 = line inputs, 1 = mic in
+#ifndef INSEL
+  #define INSEL 0
+#elif (INSEL == 0)||(INSEL == 1)
+#else
+  #error INSEL value not defined
+#endif
+
+#ifndef BYPASS
+  #define BYPASS 0 //setting this to 1 passes the line input straight to the line output
+#elif (BYPASS == 0)||(BYPASS == 1)
+#else
+  #error BYPASS value not defined
+#endif
+
+#ifndef DACSEL
+  #define DACSEL 1
+#elif (DACSEL == 0)||(DACSEL == 1)
+#else
+  #error DACSEL value not defined
+#endif
+
+#ifndef SIDETONE
+  #define SIDETONE 0 // setting this to 1 passes the mic input straight to the line output
+#elif (SIDETONE == 0)||(SIDETONE == 1)
+#else
+  #error SIDETONE value not defined
+#endif
+
+#ifndef SIDEATT
+  #define SIDEATT 0
+#elif (SIDEATT >= 0)&&(SIDEATT <= 3)
+#else
+  #error SIDEATT value not defined
+#endif
+
+*/
--- /dev/null
+++ b/LEAF/Inc/custom_fonts.h
@@ -1,0 +1,6894 @@
+/*
+ * gothic_font.h
+ *
+ *  Created on: Jul 8, 2018
+ *      Author: jeffsnyder
+ */
+
+#ifndef CUSTOM_FONTS_H_
+#define CUSTOM_FONTS_H_
+
+#include "stm32h7xx_hal.h"
+#include "gfx_font.h"
+
+
+#define PROGMEM
+
+// Created by http://oleddisplay.squix.ch/ Consider a donation
+// In case of problems make sure that you are using the font file with the correct version!
+const uint8_t Monospaced_plain_18Bitmaps[] PROGMEM = {
+
+	// Bitmap Data:
+	0x00, // ' '
+	0xFF,0xFF,0xC3,0xC0, // '!'
+	0xCF,0x3C,0xF3,0xCC, // '"'
+	0x04,0xC1,0x90,0x32,0x04,0xC7,0xFE,0xFF,0xC6,0x40,0x98,0xFF,0xDF,0xF8,0xC8,0x11,0x02,0x60,0xCC,0x00, // '#'
+	0x08,0x04,0x0F,0x8F,0xEC,0x96,0x43,0x20,0xF0,0x0F,0x04,0xC2,0x71,0x3F,0xF3,0xF0,0x20,0x10,0x08,0x00, // '$'
+	0x78,0x19,0x83,0x30,0x66,0x0C,0xC0,0xF3,0x83,0x83,0x9E,0x06,0x60,0xCC,0x19,0x83,0x30,0x3C, // '%'
+	0x1F,0x0F,0xC3,0x00,0xC0,0x18,0x0F,0x06,0xCF,0x3B,0xC7,0xF0,0xEE,0x31,0xF6,0x3D,0xC0, // '&'
+	0xFF,0xC0, // '''
+	0x32,0x66,0x4C,0xCC,0xCC,0xC4,0x66,0x23, // '('
+	0xC4,0x66,0x23,0x33,0x33,0x32,0x66,0x4C, // ')'
+	0x11,0x25,0x51,0xC3,0x8A,0xA4,0x88, // '*'
+	0x0C,0x03,0x00,0xC0,0x30,0xFF,0xFF,0xF0,0xC0,0x30,0x0C,0x03,0x00, // '+'
+	0x6D,0xE8, // ','
+	0xFF,0xC0, // '-'
+	0xFC, // '.'
+	0x01,0x81,0x80,0xC0,0xC0,0x60,0x60,0x30,0x38,0x18,0x0C,0x0C,0x06,0x06,0x03,0x03,0x00, // '/'
+	0x3E,0x3F,0x98,0xD8,0x3C,0x1E,0x6F,0x37,0x83,0xC1,0xE0,0xD8,0xCF,0xE3,0xE0, // '0'
+	0x38,0xF8,0xD8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF, // '1'
+	0x7E,0x7F,0xA0,0xE0,0x30,0x18,0x1C,0x0C,0x1C,0x1C,0x1C,0x18,0x1F,0xFF,0xF8, // '2'
+	0x7E,0x7F,0xA0,0xE0,0x30,0x39,0xF8,0xFC,0x07,0x01,0x80,0xE0,0xFF,0xE7,0xE0, // '3'
+	0x06,0x07,0x03,0x82,0xC3,0x61,0x31,0x99,0x8C,0xFF,0xFF,0xC1,0x80,0xC0,0x60, // '4'
+	0x7F,0x3F,0x98,0x0C,0x07,0xE3,0xF9,0x0E,0x03,0x01,0x80,0xE0,0xFF,0xE7,0xE0, // '5'
+	0x1E,0x3F,0x9C,0x5C,0x0C,0x06,0xF3,0xFD,0xC7,0xC1,0xE0,0xD8,0xEF,0xE3,0xE0, // '6'
+	0xFF,0xFF,0xC0,0xC0,0x60,0x70,0x30,0x18,0x18,0x0C,0x0E,0x06,0x03,0x03,0x00, // '7'
+	0x3E,0x3F,0xB0,0x78,0x3C,0x1B,0xF9,0xFD,0xC7,0xC1,0xE0,0xF8,0xEF,0xE3,0xE0, // '8'
+	0x3E,0x3F,0xB8,0xD8,0x3C,0x1F,0x1D,0xFE,0x7B,0x01,0x81,0xD1,0xCF,0xE3,0xC0, // '9'
+	0xFC,0x0F,0xC0, // ':'
+	0x6D,0x80,0x1B,0x7A,0x00, // ';'
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xc0, 0x1c, 0x03, 0xc0, 0x7c, 0x0f,
+	0xc1, 0xfc, 0x0f, 0xc0, 0x7c, 0x03, 0xc0, 0x1c, 0x00, 0xc0, 0x04, // '<'
+	0xFF,0xFF,0xC0,0x00,0x0F,0xFF,0xFC, // '='
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x60, 0x07, 0x00, 0x78, 0x07, 0xc0, 0x7e,
+	0x07, 0xf0, 0x7e, 0x07, 0xc0, 0x78, 0x07, 0x00, 0x60, 0x04, 0x00, // '>'
+	0x7D,0xFE,0x18,0x30,0xE3,0x8E,0x18,0x30,0x60,0x01,0x83,0x00, // '?'
+	0x1E,0x19,0x98,0x6C,0xFC,0xDE,0x6F,0x37,0x9B,0xCD,0xE6,0xF1,0xEC,0x06,0x01,0x80,0x78, // '@'
+	0x1C,0x0E,0x07,0x03,0x83,0x61,0xB0,0xD8,0x6C,0x7F,0x3F,0x98,0xD8,0x3C,0x18, // 'A'
+	0xFE,0x7F,0xB0,0x78,0x3C,0x1F,0xFB,0xFD,0x87,0xC1,0xE0,0xF0,0xFF,0xEF,0xE0, // 'B'
+	0x1F,0x1F,0xDC,0x3C,0x0C,0x06,0x03,0x01,0x80,0xC0,0x70,0x1C,0x27,0xF1,0xF0, // 'C'
+	0xFC,0x7F,0x31,0xD8,0x7C,0x1E,0x0F,0x07,0x83,0xC1,0xE1,0xF1,0xDF,0xCF,0xC0, // 'D'
+	0xFF,0xFF,0xF0,0x18,0x0C,0x07,0xFF,0xFF,0x80,0xC0,0x60,0x30,0x1F,0xFF,0xF8, // 'E'
+	0xFF,0xFF,0xF0,0x18,0x0C,0x07,0xFB,0xFD,0x80,0xC0,0x60,0x30,0x18,0x0C,0x00, // 'F'
+	0x1F,0x1F,0xDC,0x3C,0x0C,0x06,0x3F,0x1F,0x83,0xC1,0xF0,0xD8,0x67,0xF1,0xE0, // 'G'
+	0xC1,0xE0,0xF0,0x78,0x3C,0x1F,0xFF,0xFF,0x83,0xC1,0xE0,0xF0,0x78,0x3C,0x18, // 'H'
+	0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF, // 'I'
+	0x3E,0x7C,0x18,0x30,0x60,0xC1,0x83,0x06,0x0E,0x1F,0xE7,0x80, // 'J'
+	0xC1,0xB0,0xCC,0x63,0x30,0xD8,0x3E,0x0F,0x83,0x30,0xCE,0x31,0x8C,0x33,0x0E,0xC1,0x80, // 'K'
+	0xC0,0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x80,0xC0,0x60,0x30,0x1F,0xFF,0xF8, // 'L'
+	0xE3,0xF1,0xF8,0xFE,0xFD,0x5E,0xAF,0x77,0x93,0xC1,0xE0,0xF0,0x78,0x3C,0x18, // 'M'
+	0xE1,0xF0,0xFC,0x7A,0x3D,0x1E,0xCF,0x27,0x9B,0xC5,0xE2,0xF1,0xF8,0x7C,0x38, // 'N'
+	0x3E,0x3F,0x98,0xD8,0x3C,0x1E,0x0F,0x07,0x83,0xC1,0xE0,0xD8,0xCF,0xE3,0xE0, // 'O'
+	0xFE,0x7F,0xB0,0xF8,0x3C,0x1E,0x1F,0xFD,0xFC,0xC0,0x60,0x30,0x18,0x0C,0x00, // 'P'
+	0x3E,0x3F,0x98,0xD8,0x3C,0x1E,0x0F,0x07,0x83,0xC1,0xE0,0xD8,0xCF,0xE3,0xE0,0x38,0x0C, // 'Q'
+	0xFE,0x3F,0xCC,0x3B,0x06,0xC1,0xB0,0xEF,0xF3,0xF8,0xC3,0x30,0xEC,0x1B,0x06,0xC0,0xC0, // 'R'
+	0x3E,0x3F,0xB8,0x58,0x0C,0x03,0xE0,0xFC,0x07,0x01,0x80,0xE0,0xFF,0xE7,0xE0, // 'S'
+	0xFF,0xFF,0xF0,0xC0,0x30,0x0C,0x03,0x00,0xC0,0x30,0x0C,0x03,0x00,0xC0,0x30,0x0C,0x00, // 'T'
+	0xC1,0xE0,0xF0,0x78,0x3C,0x1E,0x0F,0x07,0x83,0xC1,0xE0,0xF8,0xEF,0xE3,0xE0, // 'U'
+	0xC1,0xE0,0xD8,0xCC,0x66,0x33,0xB8,0xD8,0x6C,0x36,0x0E,0x07,0x03,0x81,0xC0, // 'V'
+	0xC0,0x78,0x0F,0x01,0xB0,0x66,0xEC,0xDD,0x9A,0xB3,0x56,0x6A,0xCF,0x78,0xC6,0x18,0xC3,0x18, // 'W'
+	0xE3,0xB1,0x9D,0x86,0xC1,0xC0,0xE0,0x70,0x38,0x3E,0x1B,0x1D,0xCC,0x6E,0x38, // 'X'
+	0xE1,0xD8,0x67,0x38,0xCC,0x1E,0x07,0x80,0xC0,0x30,0x0C,0x03,0x00,0xC0,0x30,0x0C,0x00, // 'Y'
+	0xFF,0xFF,0xC0,0xC0,0xE0,0x60,0x60,0x70,0x30,0x38,0x38,0x18,0x1F,0xFF,0xF8, // 'Z'
+	0xFF,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xFF, // '['
+	0xC0,0x30,0x18,0x06,0x03,0x00,0xC0,0x60,0x38,0x0C,0x06,0x01,0x80,0xC0,0x30,0x18,0x06, // '\'
+	0xFF,0x33,0x33,0x33,0x33,0x33,0x33,0xFF, // ']'
+	0x0C,0x07,0x83,0x31,0x86,0xC0,0xC0, // '^'
+	0xFF,0xFF,0xFC, // '_'
+	0xC6,0x30, // '`'
+	0x3E,0x3F,0x90,0xE0,0x33,0xFF,0xFF,0x07,0x87,0xFF,0xBE,0xC0, // 'a'
+	0xC0,0x60,0x30,0x18,0x0D,0xE7,0xFB,0x8F,0x83,0xC1,0xE0,0xF0,0x7C,0x7F,0xF6,0xF0, // 'b'
+	0x1E,0x7F,0x61,0xC0,0xC0,0xC0,0xC0,0x61,0x7F,0x1E, // 'c'
+	0x01,0x80,0xC0,0x60,0x33,0xDB,0xFF,0x8F,0x83,0xC1,0xE0,0xF0,0x7C,0x77,0xF9,0xEC, // 'd'
+	0x3E,0x3F,0x98,0xF8,0x3F,0xFF,0xFF,0x00,0xC1,0x7F,0x8F,0x80, // 'e'
+	0x0F,0x1F,0x18,0x18,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, // 'f'
+	0x3D,0xBF,0xF8,0xF8,0x3C,0x1E,0x0F,0x07,0xC7,0x7F,0x9E,0xC0,0x68,0x77,0xF1,0xF0, // 'g'
+	0xC0,0x60,0x30,0x18,0x0C,0xE7,0xFB,0x8F,0x83,0xC1,0xE0,0xF0,0x78,0x3C,0x1E,0x0C, // 'h'
+	0x18,0x18,0x00,0x00,0xF8,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF, // 'i'
+	0x0C,0x30,0x00,0x7D,0xF0,0xC3,0x0C,0x30,0xC3,0x0C,0x30,0xC3,0xFB,0xC0, // 'j'
+	0xC0,0x60,0x30,0x18,0x0C,0x3E,0x3B,0x39,0xB8,0xF8,0x7E,0x33,0x18,0xCC,0x76,0x1C, // 'k'
+	0xF8,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x0F,0x0F, // 'l'
+	0xDB,0xBF,0xFC,0xCF,0x33,0xCC,0xF3,0x3C,0xCF,0x33,0xCC,0xF3,0x30, // 'm'
+	0xCE,0x7F,0xB8,0xF8,0x3C,0x1E,0x0F,0x07,0x83,0xC1,0xE0,0xC0, // 'n'
+	0x3E,0x3F,0xB8,0xF8,0x3C,0x1E,0x0F,0x07,0xC7,0x7F,0x1F,0x00, // 'o'
+	0xDE,0x7F,0xB8,0xF8,0x3C,0x1E,0x0F,0x07,0xC7,0xFF,0x6F,0x30,0x18,0x0C,0x06,0x00, // 'p'
+	0x3D,0xBF,0xF8,0xF8,0x3C,0x1E,0x0F,0x07,0xC7,0x7F,0x9E,0xC0,0x60,0x30,0x18,0x0C, // 'q'
+	0xDD,0xBF,0x8E,0x0C,0x18,0x30,0x60,0xC1,0x80, // 'r'
+	0x3F,0x7F,0xF0,0x3F,0x07,0xF0,0x3C,0x07,0x03,0xFF,0xBF,0x00, // 's'
+	0x18,0x0C,0x06,0x1F,0xFF,0xF8,0xC0,0x60,0x30,0x18,0x0C,0x06,0x03,0xF0,0xF8, // 't'
+	0xC1,0xE0,0xF0,0x78,0x3C,0x1E,0x0F,0x07,0xC7,0x7F,0x9C,0xC0, // 'u'
+	0xC1,0xB1,0x98,0xCC,0x63,0x61,0xB0,0xD8,0x38,0x1C,0x0E,0x00, // 'v'
+	0xC0,0x78,0x0D,0x83,0x32,0x66,0xEC,0xD5,0x8E,0xE1,0xDC,0x31,0x86,0x30, // 'w'
+	0xE3,0xBB,0x8D,0x83,0x81,0xC0,0xE0,0xF8,0x6C,0x63,0x71,0xC0, // 'x'
+	0xC1,0xB1,0x98,0xCE,0x63,0x61,0xB0,0x78,0x38,0x0C,0x0E,0x06,0x03,0x07,0x83,0x80, // 'y'
+	0xFF,0xFF,0xC1,0xC1,0xC1,0xC0,0xC0,0xC0,0xE0,0xFF,0xFF,0xC0, // 'z'
+	0x0F,0x1F,0x18,0x18,0x18,0x18,0x18,0xF0,0xF0,0x38,0x18,0x18,0x18,0x18,0x18,0x1F,0x0F, // '{'
+	0xFF,0xFF,0xFF,0xFF,0xF0, // '|'
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x81, 0x98, 0x19, 0x81, 0x98, 0x7f,
+	0xe7, 0xfe, 0x7f, 0xe7, 0xfe, 0x7f, 0xe7, 0xfe, 0x7f, 0xe0, 0x00// lock icon
+	//0xF0,0xF8,0x18,0x18,0x18,0x18,0x18,0x0F,0x0F,0x1C,0x18,0x18,0x18,0x18,0x18,0xF8,0xF0 // '}'
+};
+const GFXglyph Monospaced_plain_18Glyphs[] PROGMEM = {
+// bitmapOffset, width, height, xAdvance, xOffset, yOffset
+	  {     0,   1,   1,  12,    0,    0 }, // ' '
+	  {     1,   2,  13,  12,    5,  -13 }, // '!'
+	  {     5,   6,   5,  12,    3,  -13 }, // '"'
+	  {     9,  11,  14,  12,    0,  -14 }, // '#'
+	  {    29,   9,  17,  12,    1,  -14 }, // '$'
+	  {    49,  11,  13,  12,    0,  -13 }, // '%'
+	  {    67,  10,  13,  12,    1,  -13 }, // '&'
+	  {    84,   2,   5,  12,    5,  -13 }, // '''
+	  {    86,   4,  16,  12,    4,  -14 }, // '('
+	  {    94,   4,  16,  12,    3,  -14 }, // ')'
+	  {   102,   7,   8,  12,    2,  -13 }, // '*'
+	  {   109,  10,  10,  12,    1,  -11 }, // '+'
+	  {   122,   3,   5,  12,    3,   -3 }, // ','
+	  {   124,   5,   2,  12,    3,   -6 }, // '-'
+	  {   126,   2,   3,  12,    4,   -3 }, // '.'
+	  {   127,   9,  15,  12,    1,  -13 }, // '/'
+	  {   144,   9,  13,  12,    1,  -13 }, // '0'
+	  {   159,   8,  13,  12,    2,  -13 }, // '1'
+	  {   172,   9,  13,  12,    1,  -13 }, // '2'
+	  {   187,   9,  13,  12,    1,  -13 }, // '3'
+	  {   202,   9,  13,  12,    1,  -13 }, // '4'
+	  {   217,   9,  13,  12,    1,  -13 }, // '5'
+	  {   232,   9,  13,  12,    1,  -13 }, // '6'
+	  {   247,   9,  13,  12,    1,  -13 }, // '7'
+	  {   262,   9,  13,  12,    1,  -13 }, // '8'
+	  {   277,   9,  13,  12,    1,  -13 }, // '9'
+	  {   292,   2,   9,  12,    4,   -9 }, // ':'
+	  {   295,   3,  11,  12,    3,   -9 }, // ';'
+	  {   300,  12,  18,  12,    0,  -18 }, // '<'
+	  {   327,   9,   6,  12,    1,   -9 }, // '='
+	  {   334,  12,  18,  12,    0,  -18 }, // '>'
+	  {   361,   7,  13,  12,    2,  -13 }, // '?'
+	  {   373,   9,  15,  12,    1,  -12 }, // '@'
+	  {   390,   9,  13,  12,    1,  -13 }, // 'A'
+	  {   405,   9,  13,  12,    1,  -13 }, // 'B'
+	  {   420,   9,  13,  12,    1,  -13 }, // 'C'
+	  {   435,   9,  13,  12,    1,  -13 }, // 'D'
+	  {   450,   9,  13,  12,    1,  -13 }, // 'E'
+	  {   465,   9,  13,  12,    1,  -13 }, // 'F'
+	  {   480,   9,  13,  12,    1,  -13 }, // 'G'
+	  {   495,   9,  13,  12,    1,  -13 }, // 'H'
+	  {   510,   8,  13,  12,    2,  -13 }, // 'I'
+	  {   524,   7,  13,  12,    1,  -13 }, // 'J'
+	  {   535,  10,  13,  12,    1,  -13 }, // 'K'
+	  {   552,   9,  13,  12,    1,  -13 }, // 'L'
+	  {   567,   9,  13,  12,    1,  -13 }, // 'M'
+	  {   582,   9,  13,  12,    1,  -13 }, // 'N'
+	  {   597,   9,  13,  12,    1,  -13 }, // 'O'
+	  {   612,   9,  13,  12,    1,  -13 }, // 'P'
+	  {   627,   9,  15,  12,    1,  -13 }, // 'Q'
+	  {   644,  10,  13,  12,    1,  -13 }, // 'R'
+	  {   661,   9,  13,  12,    1,  -13 }, // 'S'
+	  {   676,  10,  13,  12,    1,  -13 }, // 'T'
+	  {   693,   9,  13,  12,    1,  -13 }, // 'U'
+	  {   708,   9,  13,  12,    1,  -13 }, // 'V'
+	  {   723,  11,  13,  12,    0,  -13 }, // 'W'
+	  {   741,   9,  13,  12,    1,  -13 }, // 'X'
+	  {   756,  10,  13,  12,    1,  -13 }, // 'Y'
+	  {   773,   9,  13,  12,    1,  -13 }, // 'Z'
+	  {   788,   4,  16,  12,    4,  -14 }, // '['
+	  {   796,   9,  15,  12,    1,  -13 }, // '\'
+	  {   813,   4,  16,  12,    3,  -14 }, // ']'
+	  {   821,  10,   5,  12,    1,  -13 }, // '^'
+	  {   828,  11,   2,  12,    0,    2 }, // '_'
+	  {   831,   4,   3,  12,    2,  -14 }, // '`'
+	  {   833,   9,  10,  12,    1,  -10 }, // 'a'
+	  {   845,   9,  14,  12,    1,  -14 }, // 'b'
+	  {   861,   8,  10,  12,    1,  -10 }, // 'c'
+	  {   871,   9,  14,  12,    1,  -14 }, // 'd'
+	  {   887,   9,  10,  12,    1,  -10 }, // 'e'
+	  {   899,   8,  14,  12,    1,  -14 }, // 'f'
+	  {   913,   9,  14,  12,    1,  -10 }, // 'g'
+	  {   929,   9,  14,  12,    1,  -14 }, // 'h'
+	  {   945,   8,  14,  12,    2,  -14 }, // 'i'
+	  {   959,   6,  18,  12,    1,  -14 }, // 'j'
+	  {   973,   9,  14,  12,    1,  -14 }, // 'k'
+	  {   989,   8,  14,  12,    1,  -14 }, // 'l'
+	  {  1003,  10,  10,  12,    1,  -10 }, // 'm'
+	  {  1017,   9,  10,  12,    1,  -10 }, // 'n'
+	  {  1028,   9,  10,  12,    1,  -10 }, // 'o'
+	  {  1040,   9,  14,  12,    1,  -10 }, // 'p'
+	  {  1056,   9,  14,  12,    1,  -10 }, // 'q'
+	  {  1072,   7,  10,  12,    3,  -10 }, // 'r'
+	  {  1081,   9,  10,  12,    1,  -10 }, // 's'
+	  {  1093,   9,  13,  12,    1,  -13 }, // 't'
+	  {  1108,   9,  10,  12,    1,  -10 }, // 'u'
+	  {  1120,   9,  10,  12,    1,  -10 }, // 'v'
+	  {  1132,  11,  10,  12,    0,  -10 }, // 'w'
+	  {  1146,   9,  10,  12,    1,  -10 }, // 'x'
+	  {  1158,   9,  14,  12,    1,  -10 }, // 'y'
+	  {  1174,   9,  10,  12,    1,  -10 }, // 'z'
+	  {  1186,   8,  17,  12,    2,  -14 }, // '{'
+	  {  1203,   2,  18,  12,    5,  -14 }, // '|'
+	  {  1208,  12,  18,  12,    0,  -18 }  // lock icon
+	  //{  1176,   8,  17,  12,    2,  -14 } // '}'
+};
+const GFXfont Monospaced_plain_18 PROGMEM = {
+(uint8_t  *)Monospaced_plain_18Bitmaps,(GFXglyph *)Monospaced_plain_18Glyphs,0x20, 0x7E, 16};
+
+
+const uint8_t FreeMono9pt7bBitmaps[]  = {
+  0xAA, 0xA8, 0x0C, 0xED, 0x24, 0x92, 0x48, 0x24, 0x48, 0x91, 0x2F, 0xE4,
+  0x89, 0x7F, 0x28, 0x51, 0x22, 0x40, 0x08, 0x3E, 0x62, 0x40, 0x30, 0x0E,
+  0x01, 0x81, 0xC3, 0xBE, 0x08, 0x08, 0x71, 0x12, 0x23, 0x80, 0x23, 0xB8,
+  0x0E, 0x22, 0x44, 0x70, 0x38, 0x81, 0x02, 0x06, 0x1A, 0x65, 0x46, 0xC8,
+  0xEC, 0xE9, 0x24, 0x5A, 0xAA, 0xA9, 0x40, 0xA9, 0x55, 0x5A, 0x80, 0x10,
+  0x22, 0x4B, 0xE3, 0x05, 0x11, 0x00, 0x10, 0x20, 0x47, 0xF1, 0x02, 0x04,
+  0x00, 0x6B, 0x48, 0xFF, 0x00, 0xF0, 0x02, 0x08, 0x10, 0x60, 0x81, 0x04,
+  0x08, 0x20, 0x41, 0x02, 0x08, 0x00, 0x38, 0x8A, 0x0C, 0x18, 0x30, 0x60,
+  0xC1, 0x82, 0x88, 0xE0, 0x27, 0x28, 0x42, 0x10, 0x84, 0x21, 0x3E, 0x38,
+  0x8A, 0x08, 0x10, 0x20, 0x82, 0x08, 0x61, 0x03, 0xF8, 0x7C, 0x06, 0x02,
+  0x02, 0x1C, 0x06, 0x01, 0x01, 0x01, 0x42, 0x3C, 0x18, 0xA2, 0x92, 0x8A,
+  0x28, 0xBF, 0x08, 0x21, 0xC0, 0x7C, 0x81, 0x03, 0xE4, 0x40, 0x40, 0x81,
+  0x03, 0x88, 0xE0, 0x1E, 0x41, 0x04, 0x0B, 0x98, 0xB0, 0xC1, 0xC2, 0x88,
+  0xE0, 0xFE, 0x04, 0x08, 0x20, 0x40, 0x82, 0x04, 0x08, 0x20, 0x40, 0x38,
+  0x8A, 0x0C, 0x14, 0x47, 0x11, 0x41, 0x83, 0x8C, 0xE0, 0x38, 0x8A, 0x1C,
+  0x18, 0x68, 0xCE, 0x81, 0x04, 0x13, 0xC0, 0xF0, 0x0F, 0x6C, 0x00, 0xD2,
+  0xD2, 0x00, 0x03, 0x04, 0x18, 0x60, 0x60, 0x18, 0x04, 0x03, 0xFF, 0x80,
+  0x00, 0x1F, 0xF0, 0x40, 0x18, 0x03, 0x00, 0x60, 0x20, 0x60, 0xC0, 0x80,
+  0x3D, 0x84, 0x08, 0x30, 0xC2, 0x00, 0x00, 0x00, 0x30, 0x3C, 0x46, 0x82,
+  0x8E, 0xB2, 0xA2, 0xA2, 0x9F, 0x80, 0x80, 0x40, 0x3C, 0x3C, 0x01, 0x40,
+  0x28, 0x09, 0x01, 0x10, 0x42, 0x0F, 0xC1, 0x04, 0x40, 0x9E, 0x3C, 0xFE,
+  0x21, 0x90, 0x48, 0x67, 0xE2, 0x09, 0x02, 0x81, 0x41, 0xFF, 0x80, 0x3E,
+  0xB0, 0xF0, 0x30, 0x08, 0x04, 0x02, 0x00, 0x80, 0x60, 0x8F, 0x80, 0xFE,
+  0x21, 0x90, 0x68, 0x14, 0x0A, 0x05, 0x02, 0x83, 0x43, 0x7F, 0x00, 0xFF,
+  0x20, 0x90, 0x08, 0x87, 0xC2, 0x21, 0x00, 0x81, 0x40, 0xFF, 0xC0, 0xFF,
+  0xA0, 0x50, 0x08, 0x87, 0xC2, 0x21, 0x00, 0x80, 0x40, 0x78, 0x00, 0x1E,
+  0x98, 0x6C, 0x0A, 0x00, 0x80, 0x20, 0xF8, 0x0B, 0x02, 0x60, 0x87, 0xC0,
+  0xE3, 0xA0, 0x90, 0x48, 0x27, 0xF2, 0x09, 0x04, 0x82, 0x41, 0x71, 0xC0,
+  0xF9, 0x08, 0x42, 0x10, 0x84, 0x27, 0xC0, 0x1F, 0x02, 0x02, 0x02, 0x02,
+  0x02, 0x82, 0x82, 0xC6, 0x78, 0xE3, 0xA1, 0x11, 0x09, 0x05, 0x83, 0x21,
+  0x08, 0x84, 0x41, 0x70, 0xC0, 0xE0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x41,
+  0x41, 0x41, 0xFF, 0xE0, 0xEC, 0x19, 0x45, 0x28, 0xA4, 0xA4, 0x94, 0x91,
+  0x12, 0x02, 0x40, 0x5C, 0x1C, 0xC3, 0xB0, 0x94, 0x4A, 0x24, 0x92, 0x49,
+  0x14, 0x8A, 0x43, 0x70, 0x80, 0x1E, 0x31, 0x90, 0x50, 0x18, 0x0C, 0x06,
+  0x02, 0x82, 0x63, 0x0F, 0x00, 0xFE, 0x43, 0x41, 0x41, 0x42, 0x7C, 0x40,
+  0x40, 0x40, 0xF0, 0x1C, 0x31, 0x90, 0x50, 0x18, 0x0C, 0x06, 0x02, 0x82,
+  0x63, 0x1F, 0x04, 0x07, 0x92, 0x30, 0xFE, 0x21, 0x90, 0x48, 0x24, 0x23,
+  0xE1, 0x10, 0x84, 0x41, 0x70, 0xC0, 0x3A, 0xCD, 0x0A, 0x03, 0x01, 0x80,
+  0xC1, 0xC7, 0x78, 0xFF, 0xC4, 0x62, 0x21, 0x00, 0x80, 0x40, 0x20, 0x10,
+  0x08, 0x1F, 0x00, 0xE3, 0xA0, 0x90, 0x48, 0x24, 0x12, 0x09, 0x04, 0x82,
+  0x22, 0x0E, 0x00, 0xF1, 0xE8, 0x10, 0x82, 0x10, 0x42, 0x10, 0x22, 0x04,
+  0x80, 0x50, 0x0C, 0x00, 0x80, 0xF1, 0xE8, 0x09, 0x11, 0x25, 0x44, 0xA8,
+  0x55, 0x0C, 0xA1, 0x8C, 0x31, 0x84, 0x30, 0xE3, 0xA0, 0x88, 0x82, 0x80,
+  0x80, 0xC0, 0x90, 0x44, 0x41, 0x71, 0xC0, 0xE3, 0xA0, 0x88, 0x82, 0x81,
+  0x40, 0x40, 0x20, 0x10, 0x08, 0x1F, 0x00, 0xFD, 0x0A, 0x20, 0x81, 0x04,
+  0x10, 0x21, 0x83, 0xFC, 0xEA, 0xAA, 0xAA, 0xC0, 0x80, 0x81, 0x03, 0x02,
+  0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0xD5, 0x55, 0x55, 0xC0,
+  0x10, 0x51, 0x22, 0x28, 0x20, 0xFF, 0xE0, 0x88, 0x80, 0x7E, 0x00, 0x80,
+  0x47, 0xEC, 0x14, 0x0A, 0x0C, 0xFB, 0xC0, 0x20, 0x10, 0x0B, 0xC6, 0x12,
+  0x05, 0x02, 0x81, 0x40, 0xB0, 0xB7, 0x80, 0x3A, 0x8E, 0x0C, 0x08, 0x10,
+  0x10, 0x9E, 0x03, 0x00, 0x80, 0x47, 0xA4, 0x34, 0x0A, 0x05, 0x02, 0x81,
+  0x21, 0x8F, 0x60, 0x3C, 0x43, 0x81, 0xFF, 0x80, 0x80, 0x61, 0x3E, 0x3D,
+  0x04, 0x3E, 0x41, 0x04, 0x10, 0x41, 0x0F, 0x80, 0x3D, 0xA1, 0xA0, 0x50,
+  0x28, 0x14, 0x09, 0x0C, 0x7A, 0x01, 0x01, 0x87, 0x80, 0xC0, 0x20, 0x10,
+  0x0B, 0xC6, 0x32, 0x09, 0x04, 0x82, 0x41, 0x20, 0xB8, 0xE0, 0x10, 0x01,
+  0xC0, 0x81, 0x02, 0x04, 0x08, 0x11, 0xFC, 0x10, 0x3E, 0x10, 0x84, 0x21,
+  0x08, 0x42, 0x3F, 0x00, 0xC0, 0x40, 0x40, 0x4F, 0x44, 0x58, 0x70, 0x48,
+  0x44, 0x42, 0xC7, 0x70, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, 0x23,
+  0xF8, 0xB7, 0x64, 0x62, 0x31, 0x18, 0x8C, 0x46, 0x23, 0x91, 0x5E, 0x31,
+  0x90, 0x48, 0x24, 0x12, 0x09, 0x05, 0xC7, 0x3E, 0x31, 0xA0, 0x30, 0x18,
+  0x0C, 0x05, 0x8C, 0x7C, 0xDE, 0x30, 0x90, 0x28, 0x14, 0x0A, 0x05, 0x84,
+  0xBC, 0x40, 0x20, 0x38, 0x00, 0x3D, 0xA1, 0xA0, 0x50, 0x28, 0x14, 0x09,
+  0x0C, 0x7A, 0x01, 0x00, 0x80, 0xE0, 0xCE, 0xA1, 0x82, 0x04, 0x08, 0x10,
+  0x7C, 0x3A, 0x8D, 0x0B, 0x80, 0xF0, 0x70, 0xDE, 0x40, 0x40, 0xFC, 0x40,
+  0x40, 0x40, 0x40, 0x40, 0x41, 0x3E, 0xC3, 0x41, 0x41, 0x41, 0x41, 0x41,
+  0x43, 0x3D, 0xE3, 0xA0, 0x90, 0x84, 0x42, 0x20, 0xA0, 0x50, 0x10, 0xE3,
+  0xC0, 0x92, 0x4B, 0x25, 0x92, 0xA9, 0x98, 0x44, 0xE3, 0x31, 0x05, 0x01,
+  0x01, 0x41, 0x11, 0x05, 0xC7, 0xE3, 0xA0, 0x90, 0x84, 0x42, 0x40, 0xA0,
+  0x60, 0x10, 0x10, 0x08, 0x3E, 0x00, 0xFD, 0x08, 0x20, 0x82, 0x08, 0x10,
+  0xBF, 0x29, 0x24, 0xA2, 0x49, 0x26, 0xFF, 0xF8, 0x89, 0x24, 0x8A, 0x49,
+  0x2C, 0x61, 0x24, 0x30 };
+
+const GFXglyph FreeMono9pt7bGlyphs[]  = {
+  {     0,   0,   0,  11,    0,    1 },   // 0x20 ' '
+  {     0,   2,  11,  11,    4,  -10 },   // 0x21 '!'
+  {     3,   6,   5,  11,    2,  -10 },   // 0x22 '"'
+  {     7,   7,  12,  11,    2,  -10 },   // 0x23 '#'
+  {    18,   8,  12,  11,    1,  -10 },   // 0x24 '$'
+  {    30,   7,  11,  11,    2,  -10 },   // 0x25 '%'
+  {    40,   7,  10,  11,    2,   -9 },   // 0x26 '&'
+  {    49,   3,   5,  11,    4,  -10 },   // 0x27 '''
+  {    51,   2,  13,  11,    5,  -10 },   // 0x28 '('
+  {    55,   2,  13,  11,    4,  -10 },   // 0x29 ')'
+  {    59,   7,   7,  11,    2,  -10 },   // 0x2A '*'
+  {    66,   7,   7,  11,    2,   -8 },   // 0x2B '+'
+  {    73,   3,   5,  11,    2,   -1 },   // 0x2C ','
+  {    75,   9,   1,  11,    1,   -5 },   // 0x2D '-'
+  {    77,   2,   2,  11,    4,   -1 },   // 0x2E '.'
+  {    78,   7,  13,  11,    2,  -11 },   // 0x2F '/'
+  {    90,   7,  11,  11,    2,  -10 },   // 0x30 '0'
+  {   100,   5,  11,  11,    3,  -10 },   // 0x31 '1'
+  {   107,   7,  11,  11,    2,  -10 },   // 0x32 '2'
+  {   117,   8,  11,  11,    1,  -10 },   // 0x33 '3'
+  {   128,   6,  11,  11,    3,  -10 },   // 0x34 '4'
+  {   137,   7,  11,  11,    2,  -10 },   // 0x35 '5'
+  {   147,   7,  11,  11,    2,  -10 },   // 0x36 '6'
+  {   157,   7,  11,  11,    2,  -10 },   // 0x37 '7'
+  {   167,   7,  11,  11,    2,  -10 },   // 0x38 '8'
+  {   177,   7,  11,  11,    2,  -10 },   // 0x39 '9'
+  {   187,   2,   8,  11,    4,   -7 },   // 0x3A ':'
+  {   189,   3,  11,  11,    3,   -7 },   // 0x3B ';'
+  {   194,   8,   8,  11,    1,   -8 },   // 0x3C '<'
+  {   202,   9,   4,  11,    1,   -6 },   // 0x3D '='
+  {   207,   9,   8,  11,    1,   -8 },   // 0x3E '>'
+  {   216,   7,  10,  11,    2,   -9 },   // 0x3F '?'
+  {   225,   8,  12,  11,    2,  -10 },   // 0x40 '@'
+  {   237,  11,  10,  11,    0,   -9 },   // 0x41 'A'
+  {   251,   9,  10,  11,    1,   -9 },   // 0x42 'B'
+  {   263,   9,  10,  11,    1,   -9 },   // 0x43 'C'
+  {   275,   9,  10,  11,    1,   -9 },   // 0x44 'D'
+  {   287,   9,  10,  11,    1,   -9 },   // 0x45 'E'
+  {   299,   9,  10,  11,    1,   -9 },   // 0x46 'F'
+  {   311,  10,  10,  11,    1,   -9 },   // 0x47 'G'
+  {   324,   9,  10,  11,    1,   -9 },   // 0x48 'H'
+  {   336,   5,  10,  11,    3,   -9 },   // 0x49 'I'
+  {   343,   8,  10,  11,    2,   -9 },   // 0x4A 'J'
+  {   353,   9,  10,  11,    1,   -9 },   // 0x4B 'K'
+  {   365,   8,  10,  11,    2,   -9 },   // 0x4C 'L'
+  {   375,  11,  10,  11,    0,   -9 },   // 0x4D 'M'
+  {   389,   9,  10,  11,    1,   -9 },   // 0x4E 'N'
+  {   401,   9,  10,  11,    1,   -9 },   // 0x4F 'O'
+  {   413,   8,  10,  11,    1,   -9 },   // 0x50 'P'
+  {   423,   9,  13,  11,    1,   -9 },   // 0x51 'Q'
+  {   438,   9,  10,  11,    1,   -9 },   // 0x52 'R'
+  {   450,   7,  10,  11,    2,   -9 },   // 0x53 'S'
+  {   459,   9,  10,  11,    1,   -9 },   // 0x54 'T'
+  {   471,   9,  10,  11,    1,   -9 },   // 0x55 'U'
+  {   483,  11,  10,  11,    0,   -9 },   // 0x56 'V'
+  {   497,  11,  10,  11,    0,   -9 },   // 0x57 'W'
+  {   511,   9,  10,  11,    1,   -9 },   // 0x58 'X'
+  {   523,   9,  10,  11,    1,   -9 },   // 0x59 'Y'
+  {   535,   7,  10,  11,    2,   -9 },   // 0x5A 'Z'
+  {   544,   2,  13,  11,    5,  -10 },   // 0x5B '['
+  {   548,   7,  13,  11,    2,  -11 },   // 0x5C '\'
+  {   560,   2,  13,  11,    4,  -10 },   // 0x5D ']'
+  {   564,   7,   5,  11,    2,  -10 },   // 0x5E '^'
+  {   569,  11,   1,  11,    0,    2 },   // 0x5F '_'
+  {   571,   3,   3,  11,    3,  -11 },   // 0x60 '`'
+  {   573,   9,   8,  11,    1,   -7 },   // 0x61 'a'
+  {   582,   9,  11,  11,    1,  -10 },   // 0x62 'b'
+  {   595,   7,   8,  11,    2,   -7 },   // 0x63 'c'
+  {   602,   9,  11,  11,    1,  -10 },   // 0x64 'd'
+  {   615,   8,   8,  11,    1,   -7 },   // 0x65 'e'
+  {   623,   6,  11,  11,    3,  -10 },   // 0x66 'f'
+  {   632,   9,  11,  11,    1,   -7 },   // 0x67 'g'
+  {   645,   9,  11,  11,    1,  -10 },   // 0x68 'h'
+  {   658,   7,  10,  11,    2,   -9 },   // 0x69 'i'
+  {   667,   5,  13,  11,    3,   -9 },   // 0x6A 'j'
+  {   676,   8,  11,  11,    2,  -10 },   // 0x6B 'k'
+  {   687,   7,  11,  11,    2,  -10 },   // 0x6C 'l'
+  {   697,   9,   8,  11,    1,   -7 },   // 0x6D 'm'
+  {   706,   9,   8,  11,    1,   -7 },   // 0x6E 'n'
+  {   715,   9,   8,  11,    1,   -7 },   // 0x6F 'o'
+  {   724,   9,  11,  11,    1,   -7 },   // 0x70 'p'
+  {   737,   9,  11,  11,    1,   -7 },   // 0x71 'q'
+  {   750,   7,   8,  11,    3,   -7 },   // 0x72 'r'
+  {   757,   7,   8,  11,    2,   -7 },   // 0x73 's'
+  {   764,   8,  10,  11,    2,   -9 },   // 0x74 't'
+  {   774,   8,   8,  11,    1,   -7 },   // 0x75 'u'
+  {   782,   9,   8,  11,    1,   -7 },   // 0x76 'v'
+  {   791,   9,   8,  11,    1,   -7 },   // 0x77 'w'
+  {   800,   9,   8,  11,    1,   -7 },   // 0x78 'x'
+  {   809,   9,  11,  11,    1,   -7 },   // 0x79 'y'
+  {   822,   7,   8,  11,    2,   -7 },   // 0x7A 'z'
+  {   829,   3,  13,  11,    4,  -10 },   // 0x7B '{'
+  {   834,   1,  13,  11,    5,  -10 },   // 0x7C '|'
+  {   836,   3,  13,  11,    4,  -10 },   // 0x7D '}'
+  {   841,   7,   3,  11,    2,   -6 } }; // 0x7E '~'
+
+const GFXfont FreeMono9pt7b  = {
+  (uint8_t  *)FreeMono9pt7bBitmaps,
+  (GFXglyph *)FreeMono9pt7bGlyphs,
+  0x20, 0x7E, 18 };
+const uint8_t FreeSans12pt7bBitmaps[] PROGMEM = {
+  0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xCF, 0x3C, 0xF3, 0x8A, 0x20, 0x06, 0x30,
+  0x31, 0x03, 0x18, 0x18, 0xC7, 0xFF, 0xBF, 0xFC, 0x31, 0x03, 0x18, 0x18,
+  0xC7, 0xFF, 0xBF, 0xFC, 0x31, 0x01, 0x18, 0x18, 0xC0, 0xC6, 0x06, 0x30,
+  0x04, 0x03, 0xE1, 0xFF, 0x72, 0x6C, 0x47, 0x88, 0xF1, 0x07, 0x20, 0x7E,
+  0x03, 0xF0, 0x17, 0x02, 0x3C, 0x47, 0x88, 0xF1, 0x1B, 0x26, 0x7F, 0xC3,
+  0xE0, 0x10, 0x02, 0x00, 0x00, 0x06, 0x03, 0xC0, 0x40, 0x7E, 0x0C, 0x0E,
+  0x70, 0x80, 0xC3, 0x18, 0x0C, 0x31, 0x00, 0xE7, 0x30, 0x07, 0xE6, 0x00,
+  0x3C, 0x40, 0x00, 0x0C, 0x7C, 0x00, 0x8F, 0xE0, 0x19, 0xC7, 0x01, 0x18,
+  0x30, 0x31, 0x83, 0x02, 0x1C, 0x70, 0x40, 0xFE, 0x04, 0x07, 0xC0, 0x0F,
+  0x00, 0x7E, 0x03, 0x9C, 0x0C, 0x30, 0x30, 0xC0, 0xE7, 0x01, 0xF8, 0x03,
+  0x80, 0x3E, 0x01, 0xCC, 0x6E, 0x19, 0xB0, 0x7C, 0xC0, 0xF3, 0x03, 0xCE,
+  0x1F, 0x9F, 0xE6, 0x1E, 0x1C, 0xFF, 0xA0, 0x08, 0x8C, 0x66, 0x31, 0x98,
+  0xC6, 0x31, 0x8C, 0x63, 0x08, 0x63, 0x08, 0x61, 0x0C, 0x20, 0x82, 0x18,
+  0xC3, 0x18, 0xC3, 0x18, 0xC6, 0x31, 0x8C, 0x62, 0x31, 0x88, 0xC4, 0x62,
+  0x00, 0x10, 0x23, 0x5B, 0xE3, 0x8D, 0x91, 0x00, 0x0C, 0x03, 0x00, 0xC0,
+  0x30, 0xFF, 0xFF, 0xF0, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0xF5, 0x60,
+  0xFF, 0xF0, 0xF0, 0x02, 0x0C, 0x10, 0x20, 0xC1, 0x02, 0x0C, 0x10, 0x20,
+  0xC1, 0x02, 0x0C, 0x10, 0x20, 0xC1, 0x00, 0x1F, 0x07, 0xF1, 0xC7, 0x30,
+  0x6E, 0x0F, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C,
+  0x0E, 0xC1, 0x9C, 0x71, 0xFC, 0x1F, 0x00, 0x08, 0xCF, 0xFF, 0x8C, 0x63,
+  0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0x1F, 0x0F, 0xF9, 0x87, 0x60, 0x7C,
+  0x06, 0x00, 0xC0, 0x18, 0x07, 0x01, 0xC0, 0xF0, 0x78, 0x1C, 0x06, 0x00,
+  0x80, 0x30, 0x07, 0xFF, 0xFF, 0xE0, 0x3F, 0x0F, 0xF3, 0x87, 0x60, 0x6C,
+  0x0C, 0x01, 0x80, 0x70, 0x7C, 0x0F, 0x80, 0x18, 0x01, 0x80, 0x3C, 0x07,
+  0x80, 0xD8, 0x73, 0xFC, 0x1F, 0x00, 0x01, 0x80, 0x70, 0x0E, 0x03, 0xC0,
+  0xD8, 0x1B, 0x06, 0x61, 0x8C, 0x21, 0x8C, 0x33, 0x06, 0x7F, 0xFF, 0xFE,
+  0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x3F, 0xCF, 0xF9, 0x80, 0x30, 0x06,
+  0x00, 0xDE, 0x1F, 0xE7, 0x0E, 0x00, 0xE0, 0x0C, 0x01, 0x80, 0x30, 0x07,
+  0x81, 0xF8, 0x73, 0xFC, 0x1F, 0x00, 0x0F, 0x07, 0xF9, 0xC3, 0x30, 0x74,
+  0x01, 0x80, 0x33, 0xC7, 0xFE, 0xF0, 0xDC, 0x1F, 0x01, 0xE0, 0x3C, 0x06,
+  0xC1, 0xDC, 0x71, 0xFC, 0x1F, 0x00, 0xFF, 0xFF, 0xFC, 0x01, 0x00, 0x60,
+  0x18, 0x02, 0x00, 0xC0, 0x30, 0x06, 0x01, 0x80, 0x30, 0x04, 0x01, 0x80,
+  0x30, 0x06, 0x01, 0x80, 0x30, 0x00, 0x1F, 0x07, 0xF1, 0xC7, 0x30, 0x66,
+  0x0C, 0xC1, 0x8C, 0x61, 0xFC, 0x3F, 0x8E, 0x3B, 0x01, 0xE0, 0x3C, 0x07,
+  0x80, 0xD8, 0x31, 0xFC, 0x1F, 0x00, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x6C,
+  0x07, 0x80, 0xF0, 0x1E, 0x07, 0x61, 0xEF, 0xFC, 0x79, 0x80, 0x30, 0x05,
+  0x81, 0x98, 0x73, 0xFC, 0x1E, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0xF0, 0x00,
+  0x0F, 0x56, 0x00, 0x00, 0x07, 0x01, 0xE0, 0xF8, 0x3C, 0x0F, 0x00, 0xE0,
+  0x07, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0x00,
+  0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x0E, 0x00, 0x78, 0x01, 0xF0, 0x07,
+  0xC0, 0x0F, 0x00, 0x70, 0x1E, 0x0F, 0x03, 0xC0, 0xF0, 0x08, 0x00, 0x1F,
+  0x1F, 0xEE, 0x1B, 0x03, 0xC0, 0xC0, 0x30, 0x0C, 0x06, 0x03, 0x81, 0xC0,
+  0xE0, 0x30, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0xFE,
+  0x00, 0x0F, 0xFE, 0x00, 0xF0, 0x3E, 0x07, 0x00, 0x3C, 0x38, 0x00, 0x30,
+  0xC1, 0xE0, 0x66, 0x0F, 0xD9, 0xD8, 0x61, 0xC3, 0xC3, 0x07, 0x0F, 0x1C,
+  0x1C, 0x3C, 0x60, 0x60, 0xF1, 0x81, 0x83, 0xC6, 0x06, 0x1B, 0x18, 0x38,
+  0xEE, 0x71, 0xE7, 0x18, 0xFD, 0xF8, 0x71, 0xE7, 0xC0, 0xE0, 0x00, 0x01,
+  0xE0, 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFC, 0x00, 0x03, 0xC0, 0x03, 0xC0,
+  0x03, 0xC0, 0x07, 0xE0, 0x06, 0x60, 0x06, 0x60, 0x0E, 0x70, 0x0C, 0x30,
+  0x0C, 0x30, 0x1C, 0x38, 0x18, 0x18, 0x1F, 0xF8, 0x3F, 0xFC, 0x30, 0x1C,
+  0x30, 0x0C, 0x70, 0x0E, 0x60, 0x06, 0x60, 0x06, 0xFF, 0xC7, 0xFF, 0x30,
+  0x19, 0x80, 0x6C, 0x03, 0x60, 0x1B, 0x00, 0xD8, 0x0C, 0xFF, 0xC7, 0xFF,
+  0x30, 0x0D, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x06, 0xFF, 0xF7,
+  0xFE, 0x00, 0x07, 0xE0, 0x3F, 0xF0, 0xE0, 0x73, 0x80, 0x66, 0x00, 0x6C,
+  0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, 0x00,
+  0x06, 0x00, 0x6C, 0x00, 0xDC, 0x03, 0x1E, 0x0E, 0x1F, 0xF8, 0x0F, 0xC0,
+  0xFF, 0x83, 0xFF, 0x8C, 0x07, 0x30, 0x0E, 0xC0, 0x1B, 0x00, 0x7C, 0x00,
+  0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x1F, 0x00,
+  0x6C, 0x03, 0xB0, 0x1C, 0xFF, 0xE3, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xC0,
+  0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xFF, 0xEF, 0xFE, 0xC0,
+  0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+  0xFF, 0xFF, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xFF, 0xDF,
+  0xFB, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x00,
+  0x07, 0xF0, 0x1F, 0xFC, 0x3C, 0x1E, 0x70, 0x06, 0x60, 0x03, 0xE0, 0x00,
+  0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x03, 0xC0, 0x03,
+  0x60, 0x03, 0x60, 0x07, 0x30, 0x0F, 0x3C, 0x1F, 0x1F, 0xFB, 0x07, 0xE1,
+  0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78,
+  0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00,
+  0x78, 0x03, 0xC0, 0x1E, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01,
+  0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60,
+  0x3C, 0x1E, 0x0F, 0x07, 0xC7, 0x7F, 0x1F, 0x00, 0xC0, 0x3B, 0x01, 0xCC,
+  0x0E, 0x30, 0x70, 0xC3, 0x83, 0x1C, 0x0C, 0xE0, 0x33, 0x80, 0xDE, 0x03,
+  0xDC, 0x0E, 0x38, 0x30, 0x60, 0xC1, 0xC3, 0x03, 0x8C, 0x06, 0x30, 0x1C,
+  0xC0, 0x3B, 0x00, 0x60, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C,
+  0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00,
+  0xFF, 0xFF, 0xF0, 0xE0, 0x07, 0xE0, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0xD0,
+  0x0F, 0xD8, 0x1B, 0xD8, 0x1B, 0xD8, 0x1B, 0xCC, 0x33, 0xCC, 0x33, 0xCC,
+  0x33, 0xC6, 0x63, 0xC6, 0x63, 0xC6, 0x63, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
+  0xC3, 0xC1, 0x83, 0xE0, 0x1F, 0x00, 0xFC, 0x07, 0xE0, 0x3D, 0x81, 0xEE,
+  0x0F, 0x30, 0x79, 0xC3, 0xC6, 0x1E, 0x18, 0xF0, 0xE7, 0x83, 0x3C, 0x1D,
+  0xE0, 0x6F, 0x01, 0xF8, 0x0F, 0xC0, 0x3E, 0x01, 0xC0, 0x03, 0xE0, 0x0F,
+  0xFC, 0x0F, 0x07, 0x86, 0x00, 0xC6, 0x00, 0x33, 0x00, 0x1B, 0x00, 0x07,
+  0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x36, 0x00,
+  0x33, 0x00, 0x18, 0xC0, 0x18, 0x78, 0x3C, 0x1F, 0xFC, 0x03, 0xF8, 0x00,
+  0xFF, 0x8F, 0xFE, 0xC0, 0x6C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x07,
+  0xFF, 0xEF, 0xFC, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00,
+  0xC0, 0x0C, 0x00, 0x03, 0xE0, 0x0F, 0xFC, 0x0F, 0x07, 0x86, 0x00, 0xC6,
+  0x00, 0x33, 0x00, 0x1B, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00,
+  0xF0, 0x00, 0x78, 0x00, 0x36, 0x00, 0x33, 0x01, 0x98, 0xC0, 0xFC, 0x78,
+  0x3C, 0x1F, 0xFF, 0x03, 0xF9, 0x80, 0x00, 0x40, 0xFF, 0xC3, 0xFF, 0xCC,
+  0x03, 0xB0, 0x06, 0xC0, 0x1B, 0x00, 0x6C, 0x01, 0xB0, 0x0C, 0xFF, 0xE3,
+  0xFF, 0xCC, 0x03, 0xB0, 0x06, 0xC0, 0x1B, 0x00, 0x6C, 0x01, 0xB0, 0x06,
+  0xC0, 0x1B, 0x00, 0x70, 0x0F, 0xE0, 0x7F, 0xC3, 0x83, 0x9C, 0x07, 0x60,
+  0x0D, 0x80, 0x06, 0x00, 0x1E, 0x00, 0x3F, 0x80, 0x3F, 0xC0, 0x0F, 0x80,
+  0x07, 0xC0, 0x0F, 0x00, 0x3E, 0x00, 0xDE, 0x0E, 0x3F, 0xF0, 0x3F, 0x80,
+  0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60,
+  0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60,
+  0x06, 0x00, 0x60, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0,
+  0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01,
+  0xE0, 0x0F, 0x80, 0xEE, 0x0E, 0x3F, 0xE0, 0x7C, 0x00, 0x60, 0x06, 0xC0,
+  0x1D, 0xC0, 0x31, 0x80, 0x63, 0x01, 0xC7, 0x03, 0x06, 0x06, 0x0C, 0x1C,
+  0x1C, 0x30, 0x18, 0x60, 0x31, 0xC0, 0x73, 0x00, 0x66, 0x00, 0xDC, 0x01,
+  0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x00, 0xE0, 0x30, 0x1D, 0x80, 0xE0,
+  0x76, 0x07, 0x81, 0xD8, 0x1E, 0x06, 0x70, 0x7C, 0x18, 0xC1, 0xB0, 0xE3,
+  0x0C, 0xC3, 0x8C, 0x33, 0x0C, 0x38, 0xC6, 0x30, 0x67, 0x18, 0xC1, 0x98,
+  0x67, 0x06, 0x61, 0xD8, 0x1D, 0x83, 0x60, 0x3C, 0x0D, 0x80, 0xF0, 0x3E,
+  0x03, 0xC0, 0x70, 0x0F, 0x01, 0xC0, 0x18, 0x07, 0x00, 0x70, 0x0E, 0x60,
+  0x38, 0xE0, 0x60, 0xE1, 0xC0, 0xC3, 0x01, 0xCC, 0x01, 0xF8, 0x01, 0xE0,
+  0x03, 0x80, 0x07, 0x80, 0x1F, 0x00, 0x33, 0x00, 0xE7, 0x03, 0x86, 0x06,
+  0x0E, 0x1C, 0x0E, 0x70, 0x0C, 0xC0, 0x1C, 0x60, 0x06, 0x70, 0x0E, 0x30,
+  0x1C, 0x38, 0x18, 0x1C, 0x38, 0x0C, 0x30, 0x0E, 0x70, 0x06, 0x60, 0x03,
+  0xC0, 0x03, 0xC0, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
+  0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xC0, 0x0E,
+  0x00, 0xE0, 0x0E, 0x00, 0x60, 0x07, 0x00, 0x70, 0x07, 0x00, 0x30, 0x03,
+  0x80, 0x38, 0x03, 0x80, 0x18, 0x01, 0xC0, 0x1C, 0x00, 0xFF, 0xFF, 0xFF,
+  0xC0, 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCF,
+  0xF0, 0x81, 0x81, 0x02, 0x06, 0x04, 0x08, 0x18, 0x10, 0x20, 0x60, 0x40,
+  0x81, 0x81, 0x02, 0x06, 0x04, 0xFF, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
+  0x33, 0x33, 0x33, 0x3F, 0xF0, 0x0C, 0x0E, 0x05, 0x86, 0xC3, 0x21, 0x19,
+  0x8C, 0x83, 0xC1, 0x80, 0xFF, 0xFE, 0xE3, 0x8C, 0x30, 0x3F, 0x07, 0xF8,
+  0xE1, 0xCC, 0x0C, 0x00, 0xC0, 0x1C, 0x3F, 0xCF, 0x8C, 0xC0, 0xCC, 0x0C,
+  0xE3, 0xC7, 0xEF, 0x3C, 0x70, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0,
+  0x0C, 0xF8, 0xDF, 0xCF, 0x0E, 0xE0, 0x7C, 0x03, 0xC0, 0x3C, 0x03, 0xC0,
+  0x3C, 0x03, 0xE0, 0x6F, 0x0E, 0xDF, 0xCC, 0xF8, 0x1F, 0x0F, 0xE7, 0x1B,
+  0x83, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x38, 0x37, 0x1C, 0xFE, 0x1F,
+  0x00, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x3C, 0xCF, 0xFB, 0x8F,
+  0xE0, 0xF8, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF8, 0x3B, 0x8F, 0x3F,
+  0x63, 0xCC, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x3C, 0x07, 0xFF, 0xFF, 0xFE,
+  0x00, 0xC0, 0x1C, 0x0D, 0xC3, 0x1F, 0xE1, 0xF0, 0x3B, 0xD8, 0xC6, 0x7F,
+  0xEC, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x00, 0x1E, 0x67, 0xFD, 0xC7,
+  0xF0, 0x7C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x7C, 0x1D, 0xC7, 0x9F,
+  0xB1, 0xE6, 0x00, 0xC0, 0x3E, 0x0E, 0x7F, 0xC7, 0xE0, 0xC0, 0x30, 0x0C,
+  0x03, 0x00, 0xC0, 0x33, 0xCD, 0xFB, 0xC7, 0xE0, 0xF0, 0x3C, 0x0F, 0x03,
+  0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x30, 0xF0, 0x3F, 0xFF, 0xFF,
+  0xF0, 0x33, 0x00, 0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F,
+  0xE0, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x83, 0x30, 0xC6, 0x30,
+  0xCC, 0x1B, 0x83, 0xF0, 0x77, 0x0C, 0x61, 0x8E, 0x30, 0xE6, 0x0C, 0xC1,
+  0xD8, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xCF, 0x1F, 0x6F, 0xDF, 0xFC,
+  0x78, 0xFC, 0x18, 0x3C, 0x0C, 0x1E, 0x06, 0x0F, 0x03, 0x07, 0x81, 0x83,
+  0xC0, 0xC1, 0xE0, 0x60, 0xF0, 0x30, 0x78, 0x18, 0x3C, 0x0C, 0x18, 0xCF,
+  0x37, 0xEF, 0x1F, 0x83, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C,
+  0x0F, 0x03, 0xC0, 0xC0, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x7C, 0x07, 0x80,
+  0xF0, 0x1E, 0x03, 0xC0, 0x7C, 0x1D, 0xC7, 0x1F, 0xC1, 0xF0, 0xCF, 0x8D,
+  0xFC, 0xF0, 0xEE, 0x06, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3E,
+  0x07, 0xF0, 0xEF, 0xFC, 0xCF, 0x8C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x00,
+  0x1E, 0x67, 0xFD, 0xC7, 0xF0, 0x7C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0,
+  0x7C, 0x1D, 0xC7, 0x9F, 0xF1, 0xE6, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x60,
+  0xCF, 0x7F, 0x38, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC0, 0x3E, 0x1F,
+  0xEE, 0x1B, 0x00, 0xC0, 0x3C, 0x07, 0xF0, 0x3E, 0x01, 0xF0, 0x3E, 0x1D,
+  0xFE, 0x3E, 0x00, 0x63, 0x19, 0xFF, 0xB1, 0x8C, 0x63, 0x18, 0xC6, 0x31,
+  0xE7, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0,
+  0xF0, 0x7E, 0x3D, 0xFB, 0x3C, 0xC0, 0xE0, 0x66, 0x06, 0x60, 0x67, 0x0C,
+  0x30, 0xC3, 0x0C, 0x39, 0x81, 0x98, 0x19, 0x81, 0xF0, 0x0F, 0x00, 0xE0,
+  0x0E, 0x00, 0xC1, 0xC1, 0xB0, 0xE1, 0xD8, 0x70, 0xCC, 0x2C, 0x66, 0x36,
+  0x31, 0x9B, 0x18, 0xCD, 0x98, 0x64, 0x6C, 0x16, 0x36, 0x0F, 0x1A, 0x07,
+  0x8F, 0x03, 0x83, 0x80, 0xC1, 0xC0, 0x60, 0xEE, 0x18, 0xC6, 0x0C, 0xC1,
+  0xF0, 0x1C, 0x01, 0x80, 0x78, 0x1B, 0x03, 0x30, 0xC7, 0x30, 0x66, 0x06,
+  0xE0, 0x6C, 0x0D, 0x83, 0x38, 0x63, 0x0C, 0x63, 0x0E, 0x60, 0xCC, 0x1B,
+  0x03, 0x60, 0x3C, 0x07, 0x00, 0xE0, 0x18, 0x03, 0x00, 0xE0, 0x78, 0x0E,
+  0x00, 0xFF, 0xFF, 0xF0, 0x18, 0x0C, 0x07, 0x03, 0x81, 0xC0, 0x60, 0x30,
+  0x18, 0x0E, 0x03, 0xFF, 0xFF, 0xC0, 0x19, 0xCC, 0x63, 0x18, 0xC6, 0x31,
+  0x99, 0x86, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x1C, 0x60, 0xFF, 0xFF, 0xFF,
+  0xFF, 0xFF, 0xFC, 0xC7, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x0C, 0x33, 0x31,
+  0x8C, 0x63, 0x18, 0xC6, 0x73, 0x00, 0x70, 0x3E, 0x09, 0xE4, 0x1F, 0x03,
+  0x80 };
+
+const GFXglyph FreeSans12pt7bGlyphs[] PROGMEM = {
+  {     0,   0,   0,   6,    0,    1 },   // 0x20 ' '
+  {     0,   2,  18,   8,    3,  -17 },   // 0x21 '!'
+  {     5,   6,   6,   8,    1,  -16 },   // 0x22 '"'
+  {    10,  13,  16,  13,    0,  -15 },   // 0x23 '#'
+  {    36,  11,  20,  13,    1,  -17 },   // 0x24 '$'
+  {    64,  20,  17,  21,    1,  -16 },   // 0x25 '%'
+  {   107,  14,  17,  16,    1,  -16 },   // 0x26 '&'
+  {   137,   2,   6,   5,    1,  -16 },   // 0x27 '''
+  {   139,   5,  23,   8,    2,  -17 },   // 0x28 '('
+  {   154,   5,  23,   8,    1,  -17 },   // 0x29 ')'
+  {   169,   7,   7,   9,    1,  -17 },   // 0x2A '*'
+  {   176,  10,  11,  14,    2,  -10 },   // 0x2B '+'
+  {   190,   2,   6,   7,    2,   -1 },   // 0x2C ','
+  {   192,   6,   2,   8,    1,   -7 },   // 0x2D '-'
+  {   194,   2,   2,   6,    2,   -1 },   // 0x2E '.'
+  {   195,   7,  18,   7,    0,  -17 },   // 0x2F '/'
+  {   211,  11,  17,  13,    1,  -16 },   // 0x30 '0'
+  {   235,   5,  17,  13,    3,  -16 },   // 0x31 '1'
+  {   246,  11,  17,  13,    1,  -16 },   // 0x32 '2'
+  {   270,  11,  17,  13,    1,  -16 },   // 0x33 '3'
+  {   294,  11,  17,  13,    1,  -16 },   // 0x34 '4'
+  {   318,  11,  17,  13,    1,  -16 },   // 0x35 '5'
+  {   342,  11,  17,  13,    1,  -16 },   // 0x36 '6'
+  {   366,  11,  17,  13,    1,  -16 },   // 0x37 '7'
+  {   390,  11,  17,  13,    1,  -16 },   // 0x38 '8'
+  {   414,  11,  17,  13,    1,  -16 },   // 0x39 '9'
+  {   438,   2,  13,   6,    2,  -12 },   // 0x3A ':'
+  {   442,   2,  16,   6,    2,  -11 },   // 0x3B ';'
+  {   446,  12,  12,  14,    1,  -11 },   // 0x3C '<'
+  {   464,  12,   6,  14,    1,   -8 },   // 0x3D '='
+  {   473,  12,  12,  14,    1,  -11 },   // 0x3E '>'
+  {   491,  10,  18,  13,    2,  -17 },   // 0x3F '?'
+  {   514,  22,  21,  24,    1,  -17 },   // 0x40 '@'
+  {   572,  16,  18,  16,    0,  -17 },   // 0x41 'A'
+  {   608,  13,  18,  16,    2,  -17 },   // 0x42 'B'
+  {   638,  15,  18,  17,    1,  -17 },   // 0x43 'C'
+  {   672,  14,  18,  17,    2,  -17 },   // 0x44 'D'
+  {   704,  12,  18,  15,    2,  -17 },   // 0x45 'E'
+  {   731,  11,  18,  14,    2,  -17 },   // 0x46 'F'
+  {   756,  16,  18,  18,    1,  -17 },   // 0x47 'G'
+  {   792,  13,  18,  17,    2,  -17 },   // 0x48 'H'
+  {   822,   2,  18,   7,    2,  -17 },   // 0x49 'I'
+  {   827,   9,  18,  13,    1,  -17 },   // 0x4A 'J'
+  {   848,  14,  18,  16,    2,  -17 },   // 0x4B 'K'
+  {   880,  10,  18,  14,    2,  -17 },   // 0x4C 'L'
+  {   903,  16,  18,  20,    2,  -17 },   // 0x4D 'M'
+  {   939,  13,  18,  18,    2,  -17 },   // 0x4E 'N'
+  {   969,  17,  18,  19,    1,  -17 },   // 0x4F 'O'
+  {  1008,  12,  18,  16,    2,  -17 },   // 0x50 'P'
+  {  1035,  17,  19,  19,    1,  -17 },   // 0x51 'Q'
+  {  1076,  14,  18,  17,    2,  -17 },   // 0x52 'R'
+  {  1108,  14,  18,  16,    1,  -17 },   // 0x53 'S'
+  {  1140,  12,  18,  15,    1,  -17 },   // 0x54 'T'
+  {  1167,  13,  18,  17,    2,  -17 },   // 0x55 'U'
+  {  1197,  15,  18,  15,    0,  -17 },   // 0x56 'V'
+  {  1231,  22,  18,  22,    0,  -17 },   // 0x57 'W'
+  {  1281,  15,  18,  16,    0,  -17 },   // 0x58 'X'
+  {  1315,  16,  18,  16,    0,  -17 },   // 0x59 'Y'
+  {  1351,  13,  18,  15,    1,  -17 },   // 0x5A 'Z'
+  {  1381,   4,  23,   7,    2,  -17 },   // 0x5B '['
+  {  1393,   7,  18,   7,    0,  -17 },   // 0x5C '\'
+  {  1409,   4,  23,   7,    1,  -17 },   // 0x5D ']'
+  {  1421,   9,   9,  11,    1,  -16 },   // 0x5E '^'
+  {  1432,  15,   1,  13,   -1,    4 },   // 0x5F '_'
+  {  1434,   5,   4,   6,    1,  -17 },   // 0x60 '`'
+  {  1437,  12,  13,  13,    1,  -12 },   // 0x61 'a'
+  {  1457,  12,  18,  13,    1,  -17 },   // 0x62 'b'
+  {  1484,  10,  13,  12,    1,  -12 },   // 0x63 'c'
+  {  1501,  11,  18,  13,    1,  -17 },   // 0x64 'd'
+  {  1526,  11,  13,  13,    1,  -12 },   // 0x65 'e'
+  {  1544,   5,  18,   7,    1,  -17 },   // 0x66 'f'
+  {  1556,  11,  18,  13,    1,  -12 },   // 0x67 'g'
+  {  1581,  10,  18,  13,    1,  -17 },   // 0x68 'h'
+  {  1604,   2,  18,   5,    2,  -17 },   // 0x69 'i'
+  {  1609,   4,  23,   6,    0,  -17 },   // 0x6A 'j'
+  {  1621,  11,  18,  12,    1,  -17 },   // 0x6B 'k'
+  {  1646,   2,  18,   5,    1,  -17 },   // 0x6C 'l'
+  {  1651,  17,  13,  19,    1,  -12 },   // 0x6D 'm'
+  {  1679,  10,  13,  13,    1,  -12 },   // 0x6E 'n'
+  {  1696,  11,  13,  13,    1,  -12 },   // 0x6F 'o'
+  {  1714,  12,  17,  13,    1,  -12 },   // 0x70 'p'
+  {  1740,  11,  17,  13,    1,  -12 },   // 0x71 'q'
+  {  1764,   6,  13,   8,    1,  -12 },   // 0x72 'r'
+  {  1774,  10,  13,  12,    1,  -12 },   // 0x73 's'
+  {  1791,   5,  16,   7,    1,  -15 },   // 0x74 't'
+  {  1801,  10,  13,  13,    1,  -12 },   // 0x75 'u'
+  {  1818,  12,  13,  12,    0,  -12 },   // 0x76 'v'
+  {  1838,  17,  13,  17,    0,  -12 },   // 0x77 'w'
+  {  1866,  11,  13,  11,    0,  -12 },   // 0x78 'x'
+  {  1884,  11,  18,  11,    0,  -12 },   // 0x79 'y'
+  {  1909,  10,  13,  12,    1,  -12 },   // 0x7A 'z'
+  {  1926,   5,  23,   8,    1,  -17 },   // 0x7B '{'
+  {  1941,   2,  23,   6,    2,  -17 },   // 0x7C '|'
+  {  1947,   5,  23,   8,    2,  -17 },   // 0x7D '}'
+  {  1962,  10,   5,  12,    1,  -10 } }; // 0x7E '~'
+
+const GFXfont FreeSans12pt7b PROGMEM = {
+  (uint8_t  *)FreeSans12pt7bBitmaps,
+  (GFXglyph *)FreeSans12pt7bGlyphs,
+  0x20, 0x7E, 29 };
+
+// Approx. 2641 bytes
+const uint8_t FreeSans9pt7bBitmaps[] PROGMEM = {
+  0xFF, 0xFF, 0xF8, 0xC0, 0xDE, 0xF7, 0x20, 0x09, 0x86, 0x41, 0x91, 0xFF,
+  0x13, 0x04, 0xC3, 0x20, 0xC8, 0xFF, 0x89, 0x82, 0x61, 0x90, 0x10, 0x1F,
+  0x14, 0xDA, 0x3D, 0x1E, 0x83, 0x40, 0x78, 0x17, 0x08, 0xF4, 0x7A, 0x35,
+  0x33, 0xF0, 0x40, 0x20, 0x38, 0x10, 0xEC, 0x20, 0xC6, 0x20, 0xC6, 0x40,
+  0xC6, 0x40, 0x6C, 0x80, 0x39, 0x00, 0x01, 0x3C, 0x02, 0x77, 0x02, 0x63,
+  0x04, 0x63, 0x04, 0x77, 0x08, 0x3C, 0x0E, 0x06, 0x60, 0xCC, 0x19, 0x81,
+  0xE0, 0x18, 0x0F, 0x03, 0x36, 0xC2, 0xD8, 0x73, 0x06, 0x31, 0xE3, 0xC4,
+  0xFE, 0x13, 0x26, 0x6C, 0xCC, 0xCC, 0xC4, 0x66, 0x23, 0x10, 0x8C, 0x46,
+  0x63, 0x33, 0x33, 0x32, 0x66, 0x4C, 0x80, 0x25, 0x7E, 0xA5, 0x00, 0x30,
+  0xC3, 0x3F, 0x30, 0xC3, 0x0C, 0xD6, 0xF0, 0xC0, 0x08, 0x44, 0x21, 0x10,
+  0x84, 0x42, 0x11, 0x08, 0x00, 0x3C, 0x66, 0x42, 0xC3, 0xC3, 0xC3, 0xC3,
+  0xC3, 0xC3, 0xC3, 0x42, 0x66, 0x3C, 0x11, 0x3F, 0x33, 0x33, 0x33, 0x33,
+  0x30, 0x3E, 0x31, 0xB0, 0x78, 0x30, 0x18, 0x1C, 0x1C, 0x1C, 0x18, 0x18,
+  0x10, 0x08, 0x07, 0xF8, 0x3C, 0x66, 0xC3, 0xC3, 0x03, 0x06, 0x1C, 0x07,
+  0x03, 0xC3, 0xC3, 0x66, 0x3C, 0x0C, 0x18, 0x71, 0x62, 0xC9, 0xA3, 0x46,
+  0xFE, 0x18, 0x30, 0x60, 0xC0, 0x7F, 0x20, 0x10, 0x08, 0x08, 0x07, 0xF3,
+  0x8C, 0x03, 0x01, 0x80, 0xF0, 0x6C, 0x63, 0xE0, 0x1E, 0x31, 0x98, 0x78,
+  0x0C, 0x06, 0xF3, 0x8D, 0x83, 0xC1, 0xE0, 0xD0, 0x6C, 0x63, 0xE0, 0xFF,
+  0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x18, 0x18, 0x18, 0x10, 0x30, 0x30,
+  0x3E, 0x31, 0xB0, 0x78, 0x3C, 0x1B, 0x18, 0xF8, 0xC6, 0xC1, 0xE0, 0xF0,
+  0x6C, 0x63, 0xE0, 0x3C, 0x66, 0xC2, 0xC3, 0xC3, 0xC3, 0x67, 0x3B, 0x03,
+  0x03, 0xC2, 0x66, 0x3C, 0xC0, 0x00, 0x30, 0xC0, 0x00, 0x00, 0x64, 0xA0,
+  0x00, 0x81, 0xC7, 0x8E, 0x0C, 0x07, 0x80, 0x70, 0x0E, 0x01, 0x80, 0xFF,
+  0x80, 0x00, 0x1F, 0xF0, 0x00, 0x70, 0x0E, 0x01, 0xC0, 0x18, 0x38, 0x71,
+  0xC0, 0x80, 0x00, 0x3E, 0x31, 0xB0, 0x78, 0x30, 0x18, 0x18, 0x38, 0x18,
+  0x18, 0x0C, 0x00, 0x00, 0x01, 0x80, 0x03, 0xF0, 0x06, 0x0E, 0x06, 0x01,
+  0x86, 0x00, 0x66, 0x1D, 0xBB, 0x31, 0xCF, 0x18, 0xC7, 0x98, 0x63, 0xCC,
+  0x31, 0xE6, 0x11, 0xB3, 0x99, 0xCC, 0xF7, 0x86, 0x00, 0x01, 0x80, 0x00,
+  0x70, 0x40, 0x0F, 0xE0, 0x06, 0x00, 0xF0, 0x0F, 0x00, 0x90, 0x19, 0x81,
+  0x98, 0x10, 0x83, 0x0C, 0x3F, 0xC2, 0x04, 0x60, 0x66, 0x06, 0xC0, 0x30,
+  0xFF, 0x18, 0x33, 0x03, 0x60, 0x6C, 0x0D, 0x83, 0x3F, 0xC6, 0x06, 0xC0,
+  0x78, 0x0F, 0x01, 0xE0, 0x6F, 0xF8, 0x1F, 0x86, 0x19, 0x81, 0xA0, 0x3C,
+  0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x68, 0x0D, 0x83, 0x18, 0x61, 0xF0,
+  0xFF, 0x18, 0x33, 0x03, 0x60, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0,
+  0x78, 0x0F, 0x03, 0x60, 0xCF, 0xF0, 0xFF, 0xE0, 0x30, 0x18, 0x0C, 0x06,
+  0x03, 0xFD, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0F, 0xF8, 0xFF, 0xC0, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xFE, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x0F, 0x83,
+  0x0E, 0x60, 0x66, 0x03, 0xC0, 0x0C, 0x00, 0xC1, 0xFC, 0x03, 0xC0, 0x36,
+  0x03, 0x60, 0x73, 0x0F, 0x0F, 0x10, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C,
+  0x07, 0x80, 0xFF, 0xFE, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x06,
+  0xFF, 0xFF, 0xFF, 0xC0, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x07,
+  0x8F, 0x1E, 0x27, 0x80, 0xC0, 0xD8, 0x33, 0x0C, 0x63, 0x0C, 0xC1, 0xB8,
+  0x3F, 0x07, 0x30, 0xC3, 0x18, 0x63, 0x06, 0x60, 0x6C, 0x0C, 0xC0, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xE0,
+  0x3F, 0x01, 0xFC, 0x1F, 0xE0, 0xFD, 0x05, 0xEC, 0x6F, 0x63, 0x79, 0x13,
+  0xCD, 0x9E, 0x6C, 0xF1, 0x47, 0x8E, 0x3C, 0x71, 0x80, 0xE0, 0x7C, 0x0F,
+  0xC1, 0xE8, 0x3D, 0x87, 0x98, 0xF1, 0x1E, 0x33, 0xC3, 0x78, 0x6F, 0x07,
+  0xE0, 0x7C, 0x0E, 0x0F, 0x81, 0x83, 0x18, 0x0C, 0xC0, 0x6C, 0x01, 0xE0,
+  0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1B, 0x01, 0x98, 0x0C, 0x60, 0xC0, 0xF8,
+  0x00, 0xFF, 0x30, 0x6C, 0x0F, 0x03, 0xC0, 0xF0, 0x6F, 0xF3, 0x00, 0xC0,
+  0x30, 0x0C, 0x03, 0x00, 0xC0, 0x00, 0x0F, 0x81, 0x83, 0x18, 0x0C, 0xC0,
+  0x6C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1B, 0x01, 0x98, 0x6C,
+  0x60, 0xC0, 0xFB, 0x00, 0x08, 0xFF, 0x8C, 0x0E, 0xC0, 0x6C, 0x06, 0xC0,
+  0x6C, 0x0C, 0xFF, 0x8C, 0x0E, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xC0,
+  0x70, 0x3F, 0x18, 0x6C, 0x0F, 0x03, 0xC0, 0x1E, 0x01, 0xF0, 0x0E, 0x00,
+  0xF0, 0x3C, 0x0D, 0x86, 0x3F, 0x00, 0xFF, 0x86, 0x03, 0x01, 0x80, 0xC0,
+  0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0xC0, 0x78, 0x0F,
+  0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01,
+  0xB0, 0x61, 0xF0, 0xC0, 0x6C, 0x0D, 0x81, 0x10, 0x63, 0x0C, 0x61, 0x04,
+  0x60, 0xCC, 0x19, 0x01, 0x60, 0x3C, 0x07, 0x00, 0x60, 0xC1, 0x81, 0x30,
+  0xE1, 0x98, 0x70, 0xCC, 0x28, 0x66, 0x26, 0x21, 0x13, 0x30, 0xC8, 0x98,
+  0x6C, 0x4C, 0x14, 0x34, 0x0A, 0x1A, 0x07, 0x07, 0x03, 0x03, 0x80, 0x81,
+  0x80, 0x60, 0x63, 0x0C, 0x30, 0xC1, 0x98, 0x0F, 0x00, 0xE0, 0x06, 0x00,
+  0xF0, 0x19, 0x01, 0x98, 0x30, 0xC6, 0x0E, 0x60, 0x60, 0xC0, 0x36, 0x06,
+  0x30, 0xC3, 0x0C, 0x19, 0x81, 0xD8, 0x0F, 0x00, 0x60, 0x06, 0x00, 0x60,
+  0x06, 0x00, 0x60, 0x06, 0x00, 0xFF, 0xC0, 0x60, 0x30, 0x0C, 0x06, 0x03,
+  0x01, 0xC0, 0x60, 0x30, 0x18, 0x06, 0x03, 0x00, 0xFF, 0xC0, 0xFB, 0x6D,
+  0xB6, 0xDB, 0x6D, 0xB6, 0xE0, 0x84, 0x10, 0x84, 0x10, 0x84, 0x10, 0x84,
+  0x10, 0x80, 0xED, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0xE0, 0x30, 0x60, 0xA2,
+  0x44, 0xD8, 0xA1, 0x80, 0xFF, 0xC0, 0xC6, 0x30, 0x7E, 0x71, 0xB0, 0xC0,
+  0x60, 0xF3, 0xDB, 0x0D, 0x86, 0xC7, 0x3D, 0xC0, 0xC0, 0x60, 0x30, 0x1B,
+  0xCE, 0x36, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x7C, 0x6D, 0xE0, 0x3C,
+  0x66, 0xC3, 0xC0, 0xC0, 0xC0, 0xC0, 0xC3, 0x66, 0x3C, 0x03, 0x03, 0x03,
+  0x3B, 0x67, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x67, 0x3B, 0x3C, 0x66,
+  0xC3, 0xC3, 0xFF, 0xC0, 0xC0, 0xC3, 0x66, 0x3C, 0x36, 0x6F, 0x66, 0x66,
+  0x66, 0x66, 0x60, 0x3B, 0x67, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x67,
+  0x3B, 0x03, 0x03, 0xC6, 0x7C, 0xC0, 0xC0, 0xC0, 0xDE, 0xE3, 0xC3, 0xC3,
+  0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF, 0xC0, 0x30, 0x03,
+  0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0xE0, 0xC0, 0x60, 0x30, 0x18, 0x4C,
+  0x46, 0x63, 0x61, 0xF0, 0xEC, 0x62, 0x31, 0x98, 0x6C, 0x30, 0xFF, 0xFF,
+  0xFF, 0xC0, 0xDE, 0xF7, 0x1C, 0xF0, 0xC7, 0x86, 0x3C, 0x31, 0xE1, 0x8F,
+  0x0C, 0x78, 0x63, 0xC3, 0x1E, 0x18, 0xC0, 0xDE, 0xE3, 0xC3, 0xC3, 0xC3,
+  0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x3C, 0x66, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
+  0xC3, 0x66, 0x3C, 0xDE, 0x71, 0xB0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83,
+  0xE3, 0x6F, 0x30, 0x18, 0x0C, 0x00, 0x3B, 0x67, 0xC3, 0xC3, 0xC3, 0xC3,
+  0xC3, 0xC3, 0x67, 0x3B, 0x03, 0x03, 0x03, 0xDF, 0x31, 0x8C, 0x63, 0x18,
+  0xC6, 0x00, 0x3E, 0xE3, 0xC0, 0xC0, 0xE0, 0x3C, 0x07, 0xC3, 0xE3, 0x7E,
+  0x66, 0xF6, 0x66, 0x66, 0x66, 0x67, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
+  0xC3, 0xC3, 0xC7, 0x7B, 0xC1, 0xA0, 0x98, 0xCC, 0x42, 0x21, 0xB0, 0xD0,
+  0x28, 0x1C, 0x0C, 0x00, 0xC6, 0x1E, 0x38, 0x91, 0xC4, 0xCA, 0x66, 0xD3,
+  0x16, 0xD0, 0xA6, 0x87, 0x1C, 0x38, 0xC0, 0xC6, 0x00, 0x43, 0x62, 0x36,
+  0x1C, 0x18, 0x1C, 0x3C, 0x26, 0x62, 0x43, 0xC1, 0x21, 0x98, 0xCC, 0x42,
+  0x61, 0xB0, 0xD0, 0x38, 0x1C, 0x0C, 0x06, 0x03, 0x01, 0x03, 0x00, 0xFE,
+  0x0C, 0x30, 0xC1, 0x86, 0x18, 0x20, 0xC1, 0xFC, 0x36, 0x66, 0x66, 0x6E,
+  0xCE, 0x66, 0x66, 0x66, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xC6, 0x66,
+  0x66, 0x67, 0x37, 0x66, 0x66, 0x66, 0xC0, 0x61, 0x24, 0x38 };
+
+const GFXglyph FreeSans9pt7bGlyphs[] PROGMEM = {
+  {     0,   0,   0,   5,    0,    1 },   // 0x20 ' '
+  {     0,   2,  13,   6,    2,  -12 },   // 0x21 '!'
+  {     4,   5,   4,   6,    1,  -12 },   // 0x22 '"'
+  {     7,  10,  12,  10,    0,  -11 },   // 0x23 '#'
+  {    22,   9,  16,  10,    1,  -13 },   // 0x24 '$'
+  {    40,  16,  13,  16,    1,  -12 },   // 0x25 '%'
+  {    66,  11,  13,  12,    1,  -12 },   // 0x26 '&'
+  {    84,   2,   4,   4,    1,  -12 },   // 0x27 '''
+  {    85,   4,  17,   6,    1,  -12 },   // 0x28 '('
+  {    94,   4,  17,   6,    1,  -12 },   // 0x29 ')'
+  {   103,   5,   5,   7,    1,  -12 },   // 0x2A '*'
+  {   107,   6,   8,  11,    3,   -7 },   // 0x2B '+'
+  {   113,   2,   4,   5,    2,    0 },   // 0x2C ','
+  {   114,   4,   1,   6,    1,   -4 },   // 0x2D '-'
+  {   115,   2,   1,   5,    1,    0 },   // 0x2E '.'
+  {   116,   5,  13,   5,    0,  -12 },   // 0x2F '/'
+  {   125,   8,  13,  10,    1,  -12 },   // 0x30 '0'
+  {   138,   4,  13,  10,    3,  -12 },   // 0x31 '1'
+  {   145,   9,  13,  10,    1,  -12 },   // 0x32 '2'
+  {   160,   8,  13,  10,    1,  -12 },   // 0x33 '3'
+  {   173,   7,  13,  10,    2,  -12 },   // 0x34 '4'
+  {   185,   9,  13,  10,    1,  -12 },   // 0x35 '5'
+  {   200,   9,  13,  10,    1,  -12 },   // 0x36 '6'
+  {   215,   8,  13,  10,    0,  -12 },   // 0x37 '7'
+  {   228,   9,  13,  10,    1,  -12 },   // 0x38 '8'
+  {   243,   8,  13,  10,    1,  -12 },   // 0x39 '9'
+  {   256,   2,  10,   5,    1,   -9 },   // 0x3A ':'
+  {   259,   3,  12,   5,    1,   -8 },   // 0x3B ';'
+  {   264,   9,   9,  11,    1,   -8 },   // 0x3C '<'
+  {   275,   9,   4,  11,    1,   -5 },   // 0x3D '='
+  {   280,   9,   9,  11,    1,   -8 },   // 0x3E '>'
+  {   291,   9,  13,  10,    1,  -12 },   // 0x3F '?'
+  {   306,  17,  16,  18,    1,  -12 },   // 0x40 '@'
+  {   340,  12,  13,  12,    0,  -12 },   // 0x41 'A'
+  {   360,  11,  13,  12,    1,  -12 },   // 0x42 'B'
+  {   378,  11,  13,  13,    1,  -12 },   // 0x43 'C'
+  {   396,  11,  13,  13,    1,  -12 },   // 0x44 'D'
+  {   414,   9,  13,  11,    1,  -12 },   // 0x45 'E'
+  {   429,   8,  13,  11,    1,  -12 },   // 0x46 'F'
+  {   442,  12,  13,  14,    1,  -12 },   // 0x47 'G'
+  {   462,  11,  13,  13,    1,  -12 },   // 0x48 'H'
+  {   480,   2,  13,   5,    2,  -12 },   // 0x49 'I'
+  {   484,   7,  13,  10,    1,  -12 },   // 0x4A 'J'
+  {   496,  11,  13,  12,    1,  -12 },   // 0x4B 'K'
+  {   514,   8,  13,  10,    1,  -12 },   // 0x4C 'L'
+  {   527,  13,  13,  15,    1,  -12 },   // 0x4D 'M'
+  {   549,  11,  13,  13,    1,  -12 },   // 0x4E 'N'
+  {   567,  13,  13,  14,    1,  -12 },   // 0x4F 'O'
+  {   589,  10,  13,  12,    1,  -12 },   // 0x50 'P'
+  {   606,  13,  14,  14,    1,  -12 },   // 0x51 'Q'
+  {   629,  12,  13,  13,    1,  -12 },   // 0x52 'R'
+  {   649,  10,  13,  12,    1,  -12 },   // 0x53 'S'
+  {   666,   9,  13,  11,    1,  -12 },   // 0x54 'T'
+  {   681,  11,  13,  13,    1,  -12 },   // 0x55 'U'
+  {   699,  11,  13,  12,    0,  -12 },   // 0x56 'V'
+  {   717,  17,  13,  17,    0,  -12 },   // 0x57 'W'
+  {   745,  12,  13,  12,    0,  -12 },   // 0x58 'X'
+  {   765,  12,  13,  12,    0,  -12 },   // 0x59 'Y'
+  {   785,  10,  13,  11,    1,  -12 },   // 0x5A 'Z'
+  {   802,   3,  17,   5,    1,  -12 },   // 0x5B '['
+  {   809,   5,  13,   5,    0,  -12 },   // 0x5C '\'
+  {   818,   3,  17,   5,    0,  -12 },   // 0x5D ']'
+  {   825,   7,   7,   8,    1,  -12 },   // 0x5E '^'
+  {   832,  10,   1,  10,    0,    3 },   // 0x5F '_'
+  {   834,   4,   3,   5,    0,  -12 },   // 0x60 '`'
+  {   836,   9,  10,  10,    1,   -9 },   // 0x61 'a'
+  {   848,   9,  13,  10,    1,  -12 },   // 0x62 'b'
+  {   863,   8,  10,   9,    1,   -9 },   // 0x63 'c'
+  {   873,   8,  13,  10,    1,  -12 },   // 0x64 'd'
+  {   886,   8,  10,  10,    1,   -9 },   // 0x65 'e'
+  {   896,   4,  13,   5,    1,  -12 },   // 0x66 'f'
+  {   903,   8,  14,  10,    1,   -9 },   // 0x67 'g'
+  {   917,   8,  13,  10,    1,  -12 },   // 0x68 'h'
+  {   930,   2,  13,   4,    1,  -12 },   // 0x69 'i'
+  {   934,   4,  17,   4,    0,  -12 },   // 0x6A 'j'
+  {   943,   9,  13,   9,    1,  -12 },   // 0x6B 'k'
+  {   958,   2,  13,   4,    1,  -12 },   // 0x6C 'l'
+  {   962,  13,  10,  15,    1,   -9 },   // 0x6D 'm'
+  {   979,   8,  10,  10,    1,   -9 },   // 0x6E 'n'
+  {   989,   8,  10,  10,    1,   -9 },   // 0x6F 'o'
+  {   999,   9,  13,  10,    1,   -9 },   // 0x70 'p'
+  {  1014,   8,  13,  10,    1,   -9 },   // 0x71 'q'
+  {  1027,   5,  10,   6,    1,   -9 },   // 0x72 'r'
+  {  1034,   8,  10,   9,    1,   -9 },   // 0x73 's'
+  {  1044,   4,  12,   5,    1,  -11 },   // 0x74 't'
+  {  1050,   8,  10,  10,    1,   -9 },   // 0x75 'u'
+  {  1060,   9,  10,   9,    0,   -9 },   // 0x76 'v'
+  {  1072,  13,  10,  13,    0,   -9 },   // 0x77 'w'
+  {  1089,   8,  10,   9,    0,   -9 },   // 0x78 'x'
+  {  1099,   9,  14,   9,    0,   -9 },   // 0x79 'y'
+  {  1115,   7,  10,   9,    1,   -9 },   // 0x7A 'z'
+  {  1124,   4,  17,   6,    1,  -12 },   // 0x7B '{'
+  {  1133,   2,  17,   4,    2,  -12 },   // 0x7C '|'
+  {  1138,   4,  17,   6,    1,  -12 },   // 0x7D '}'
+  {  1147,   7,   3,   9,    1,   -7 } }; // 0x7E '~'
+
+const GFXfont FreeSans9pt7b PROGMEM = {
+  (uint8_t  *)FreeSans9pt7bBitmaps,
+  (GFXglyph *)FreeSans9pt7bGlyphs,
+  0x20, 0x7E, 22 };
+
+// Approx. 1822 bytes
+// Created by http://oleddisplay.squix.ch/ Consider a donation
+// In case of problems make sure that you are using the font file with the correct version!
+const uint8_t URW_Gothic_L_Book_16Bitmaps[] PROGMEM = {
+
+	// Bitmap Data:
+	0x00, // ' '
+	0xFF,0xB0, // '!'
+	0xB6,0xD0, // '"'
+	0x11,0x08,0x84,0x82,0x4F,0xF9,0x10,0x89,0xFF,0x24,0x22,0x11,0x08,0x80, // '#'
+	0x21,0xCC,0xA1,0x83,0x07,0x06,0x04,0x18,0x72,0x70,0x80, // '$'
+	0x78,0x8C,0xD8,0x85,0x08,0x70,0xCE,0x07,0xA0,0x06,0x00,0x5E,0x0F,0x30,0xA1,0x0B,0x31,0x1E, // '%'
+	0x3C,0x08,0xC1,0x08,0x21,0x03,0xC4,0xF1,0x13,0x64,0x38,0x83,0x10,0x71,0x1B,0x1E,0x30, // '&'
+	0xF0, // '''
+	0x13,0x64,0x88,0x88,0x8C,0x46,0x30, // '('
+	0x8C,0x62,0x11,0x11,0x13,0x26,0xC8, // ')'
+	0x52,0xBE,0x45,0x00, // '*'
+	0x10,0x20,0x40,0x8F,0xE2,0x04,0x08, // '+'
+	0x29,0x00, // ','
+	0xF0, // '-'
+	0xC0, // '.'
+	0x08,0x46,0x21,0x18,0x84,0x62,0x11,0x88,0x40, // '/'
+	0x38,0x8A,0x0C,0x18,0x30,0x60,0xC1,0x83,0x05,0x11,0xC0, // '0'
+	0xE4,0x92,0x49,0x24,0x90, // '1'
+	0x79,0x8A,0x0C,0x10,0x20,0x83,0x0C,0x30,0xC3,0x07,0xF0, // '2'
+	0x3C,0x26,0x42,0x02,0x06,0x1C,0x02,0x01,0xC1,0x41,0x62,0x3C, // '3'
+	0x06,0x06,0x0A,0x0A,0x12,0x32,0x22,0x42,0xC2,0xFF,0x02,0x02, // '4'
+	0x3E,0x20,0x60,0x40,0x7C,0x62,0x01,0x01,0x81,0xC1,0x62,0x3C, // '5'
+	0x08,0x18,0x10,0x20,0x7C,0x42,0x81,0x81,0x81,0x81,0x42,0x3C, // '6'
+	0xFE,0x0C,0x10,0x20,0x81,0x04,0x08,0x30,0x41,0x82,0x00, // '7'
+	0x38,0x89,0x12,0x26,0x47,0x11,0x41,0x83,0x05,0x11,0xC0, // '8'
+	0x3C,0x42,0x81,0x81,0x81,0x81,0x42,0x3E,0x04,0x08,0x18,0x10, // '9'
+	0xC3, // ':'
+	0x50,0x07,0x80, // ';'
+	0x01,0x06,0x38,0xE0,0xC0,0x70,0x0C,0x03, // '<'
+	0xFF,0x00,0x00,0xFF, // '='
+	0x80,0xE0,0x38,0x06,0x03,0x1C,0x70,0xC0, // '>'
+	0x38,0x8A,0x0C,0x10,0x20,0x82,0x08,0x10,0x00,0x40,0x80, // '?'
+	0x0F,0x83,0x04,0x67,0xA4,0xC9,0x88,0x99,0x09,0x91,0x19,0x12,0x53,0x64,0xDC,0x30,0x60,0xF8, // '@'
+	0x06,0x00,0x60,0x0B,0x00,0x90,0x19,0x01,0x08,0x30,0x83,0xFC,0x20,0x46,0x06,0x40,0x2C,0x02, // 'A'
+	0xFC,0x86,0x82,0x82,0x86,0xFC,0x82,0x81,0x81,0x81,0x82,0xFC, // 'B'
+	0x0F,0x86,0x19,0x00,0xA0,0x08,0x01,0x00,0x20,0x04,0x00,0x40,0x08,0x04,0xC3,0x07,0xC0, // 'C'
+	0xFC,0x20,0xC8,0x0A,0x03,0x80,0x60,0x18,0x06,0x01,0x80,0xE0,0x28,0x33,0xF0, // 'D'
+	0xFE,0x08,0x20,0x82,0x0F,0xE0,0x82,0x08,0x3F, // 'E'
+	0xFE,0x08,0x20,0x82,0x0F,0xE0,0x82,0x08,0x20, // 'F'
+	0x0F,0x83,0x0C,0x40,0x24,0x00,0x80,0x08,0x00,0x80,0x08,0xFF,0x40,0x14,0x02,0x30,0x60,0xF8, // 'G'
+	0x80,0xC0,0x60,0x30,0x18,0x0F,0xFE,0x03,0x01,0x80,0xC0,0x60,0x30,0x10, // 'H'
+	0xFF,0xF0, // 'I'
+	0x04,0x10,0x41,0x04,0x10,0x41,0x06,0x1C,0xDE, // 'J'
+	0x83,0x86,0x8C,0x88,0x90,0xB0,0xF0,0xD8,0x88,0x84,0x86,0x83, // 'K'
+	0x82,0x08,0x20,0x82,0x08,0x20,0x82,0x08,0x3F, // 'L'
+	0xC0,0x3C,0x03,0xE0,0x7A,0x05,0xB0,0xD9,0x09,0x90,0x98,0x91,0x89,0x18,0xF1,0x86,0x18,0x61, // 'M'
+	0xC0,0x78,0x1A,0x06,0x41,0x98,0x63,0x18,0x46,0x09,0x83,0x60,0x78,0x0E,0x01, // 'N'
+	0x0F,0x03,0x0C,0x40,0x24,0x02,0x80,0x18,0x01,0x80,0x18,0x01,0x40,0x24,0x02,0x30,0xC0,0xF0, // 'O'
+	0xFC,0x82,0x81,0x81,0x81,0x82,0xFC,0x80,0x80,0x80,0x80,0x80, // 'P'
+	0x0F,0x83,0x0C,0x40,0x24,0x03,0x80,0x18,0x01,0x80,0x1F,0xC1,0x43,0x36,0x0A,0x30,0xC0,0xFB, // 'Q'
+	0xFC,0x82,0x81,0x81,0x81,0x83,0x9E,0x98,0x88,0x84,0x86,0x82, // 'R'
+	0x7B,0x38,0x60,0xC1,0xC1,0x81,0x06,0x1C,0xDE, // 'S'
+	0xFE,0x20,0x40,0x81,0x02,0x04,0x08,0x10,0x20,0x40,0x80, // 'T'
+	0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x42,0x3C, // 'U'
+	0xC0,0x28,0x09,0x01,0x10,0x62,0x08,0x61,0x04,0x40,0x88,0x0B,0x01,0x40,0x38,0x02,0x00, // 'V'
+	0xC1,0x02,0x83,0x05,0x0E,0x12,0x14,0x26,0x28,0x44,0x49,0x89,0x92,0x12,0x24,0x14,0x68,0x28,0x70,0x60,0xC0,0xC1,0x80, // 'W'
+	0x40,0x98,0x42,0x30,0x48,0x1C,0x03,0x00,0xC0,0x58,0x32,0x08,0x44,0x1B,0x02, // 'X'
+	0x80,0xA0,0x90,0x44,0x42,0x20,0xA0,0x50,0x10,0x08,0x04,0x02,0x01,0x00, // 'Y'
+	0xFE,0x02,0x06,0x04,0x08,0x18,0x10,0x30,0x20,0x40,0x40,0xFF, // 'Z'
+	0x2E,0x49,0x24,0x92,0x66,0x40, // '['
+	0x41,0x06,0x08,0x20,0x41,0x06,0x08,0x20,0x41, // '\'
+	0x99,0x92,0x49,0x24,0x9D,0x00, // ']'
+	0x0C,0x06,0x05,0x82,0x42,0x21,0x09,0x84,0x81,0xC0,0x80, // '^'
+	0xFF, // '_'
+	0xC3, // '`'
+	0x3E,0xB1,0xF0,0x70,0x18,0x0C,0x07,0x06,0xC7,0x3E,0x80, // 'a'
+	0x80,0x40,0x20,0x17,0xCE,0x36,0x0E,0x03,0x01,0x80,0xE0,0xF8,0xD7,0xC0, // 'b'
+	0x3E,0x31,0xB0,0x70,0x08,0x04,0x03,0x06,0xC6,0x3E,0x00, // 'c'
+	0x00,0x80,0x40,0x27,0xD6,0x3E,0x0E,0x03,0x01,0x80,0xE0,0xD8,0xE3,0xD0, // 'd'
+	0x3C,0x21,0xA0,0x50,0x3F,0xFC,0x02,0x04,0x86,0x3C,0x00, // 'e'
+	0x34,0x4F,0x44,0x44,0x44,0x44, // 'f'
+	0x3E,0xB1,0xF0,0x70,0x18,0x0C,0x07,0x06,0xC7,0x3E,0xE0,0x58,0x47,0xC0, // 'g'
+	0x80,0x80,0x80,0xBC,0xC2,0x81,0x81,0x81,0x81,0x81,0x81,0x81, // 'h'
+	0xDF,0xF0, // 'i'
+	0x24,0x12,0x49,0x24,0x92,0xF0, // 'j'
+	0x81,0x02,0x04,0x28,0xD3,0x24,0x50,0xF1,0xB2,0x34,0x20, // 'k'
+	0xFF,0xF0, // 'l'
+	0xB8,0xE6,0x28,0xA0,0x83,0x04,0x18,0x20,0xC1,0x06,0x08,0x30,0x41,0x82,0x08, // 'm'
+	0xBC,0xC2,0x81,0x81,0x81,0x81,0x81,0x81,0x81, // 'n'
+	0x3E,0x31,0xB0,0x70,0x18,0x0C,0x07,0x06,0xC6,0x3E,0x00, // 'o'
+	0xBE,0x71,0xB0,0x70,0x18,0x0C,0x07,0x07,0xC6,0xBE,0x40,0x20,0x10,0x00, // 'p'
+	0x3E,0xB1,0xF0,0x70,0x18,0x0C,0x07,0x06,0xC7,0x3E,0x80,0x40,0x20,0x10, // 'q'
+	0xBA,0x49,0x24,0x80, // 'r'
+	0x74,0x61,0x87,0x06,0x31,0x70, // 's'
+	0x21,0x09,0xF2,0x10,0x84,0x21,0x08,0x40, // 't'
+	0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x43,0x3D, // 'u'
+	0xC1,0xA0,0x90,0xC4,0x42,0x21,0xA0,0x50,0x38,0x08,0x00, // 'v'
+	0x80,0x0A,0x10,0xD0,0xC4,0xCA,0x22,0x52,0x12,0xD0,0x72,0x83,0x18,0x18,0xC0, // 'w'
+	0xC2,0x46,0x2C,0x18,0x18,0x38,0x24,0x46,0xC2, // 'x'
+	0xC1,0x41,0x42,0x22,0x26,0x34,0x1C,0x18,0x18,0x10,0x10,0x30, // 'y'
+	0xFC,0x08,0x20,0xC1,0x04,0x18,0x20,0xFE, // 'z'
+	0x69,0x24,0xB6,0x49,0x24,0x40, // '{'
+	0xFF,0xF0, // '|'
+	0xC9,0x24,0x8B,0x49,0x25,0x00 // '}'
+};
+const GFXglyph URW_Gothic_L_Book_16Glyphs[] PROGMEM = {
+// bitmapOffset, width, height, xAdvance, xOffset, yOffset
+	  {     0,   1,   1,   5,    0,    0 }, // ' '
+	  {     1,   1,  12,   6,    2,  -12 }, // '!'
+	  {     3,   3,   4,   6,    1,  -12 }, // '"'
+	  {     5,   9,  12,  10,    0,  -12 }, // '#'
+	  {    19,   6,  14,  10,    2,  -13 }, // '$'
+	  {    30,  12,  12,  13,    0,  -12 }, // '%'
+	  {    48,  11,  12,  13,    1,  -12 }, // '&'
+	  {    65,   1,   4,   4,    1,  -12 }, // '''
+	  {    66,   4,  14,   7,    1,  -12 }, // '('
+	  {    73,   4,  14,   7,    1,  -12 }, // ')'
+	  {    80,   5,   5,   8,    1,  -12 }, // '*'
+	  {    84,   7,   8,  11,    1,   -9 }, // '+'
+	  {    91,   3,   3,   5,    1,   -2 }, // ','
+	  {    93,   4,   1,   6,    1,   -5 }, // '-'
+	  {    94,   1,   2,   5,    2,   -2 }, // '.'
+	  {    95,   5,  14,   8,    1,  -12 }, // '/'
+	  {   104,   7,  12,  10,    1,  -12 }, // '0'
+	  {   115,   3,  12,  10,    3,  -12 }, // '1'
+	  {   120,   7,  12,  10,    1,  -12 }, // '2'
+	  {   131,   8,  12,  10,    0,  -12 }, // '3'
+	  {   143,   8,  12,  10,    0,  -12 }, // '4'
+	  {   155,   8,  12,  10,    0,  -12 }, // '5'
+	  {   167,   8,  12,  10,    0,  -12 }, // '6'
+	  {   179,   7,  12,  10,    1,  -12 }, // '7'
+	  {   190,   7,  12,  10,    1,  -12 }, // '8'
+	  {   201,   8,  12,  10,    0,  -12 }, // '9'
+	  {   213,   1,   8,   5,    2,   -8 }, // ':'
+	  {   214,   2,   9,   5,    1,   -8 }, // ';'
+	  {   217,   8,   8,  11,    1,   -9 }, // '<'
+	  {   225,   8,   4,  11,    1,   -7 }, // '='
+	  {   229,   8,   8,  11,    1,   -9 }, // '>'
+	  {   237,   7,  12,  10,    1,  -12 }, // '?'
+	  {   248,  12,  12,  15,    1,  -12 }, // '@'
+	  {   266,  12,  12,  13,    0,  -12 }, // 'A'
+	  {   284,   8,  12,  10,    1,  -12 }, // 'B'
+	  {   296,  11,  12,  14,    1,  -12 }, // 'C'
+	  {   313,  10,  12,  13,    1,  -12 }, // 'D'
+	  {   328,   6,  12,  10,    1,  -12 }, // 'E'
+	  {   337,   6,  12,   9,    1,  -12 }, // 'F'
+	  {   346,  12,  12,  15,    1,  -12 }, // 'G'
+	  {   364,   9,  12,  12,    1,  -12 }, // 'H'
+	  {   378,   1,  12,   5,    1,  -12 }, // 'I'
+	  {   380,   6,  12,   9,    0,  -12 }, // 'J'
+	  {   389,   8,  12,  10,    1,  -12 }, // 'K'
+	  {   401,   6,  12,   8,    1,  -12 }, // 'L'
+	  {   410,  12,  12,  16,    1,  -12 }, // 'M'
+	  {   428,  10,  12,  13,    1,  -12 }, // 'N'
+	  {   443,  12,  12,  15,    1,  -12 }, // 'O'
+	  {   461,   8,  12,  10,    1,  -12 }, // 'P'
+	  {   473,  12,  12,  15,    1,  -12 }, // 'Q'
+	  {   491,   8,  12,  11,    1,  -12 }, // 'R'
+	  {   503,   6,  12,   9,    1,  -12 }, // 'S'
+	  {   512,   7,  12,   8,    0,  -12 }, // 'T'
+	  {   523,   8,  12,  11,    1,  -12 }, // 'U'
+	  {   535,  11,  12,  12,    0,  -12 }, // 'V'
+	  {   552,  15,  12,  16,    0,  -12 }, // 'W'
+	  {   575,  10,  12,  11,    0,  -12 }, // 'X'
+	  {   590,   9,  12,  10,    0,  -12 }, // 'Y'
+	  {   604,   8,  12,   9,    0,  -12 }, // 'Z'
+	  {   616,   3,  14,   7,    2,  -12 }, // '['
+	  {   622,   6,  12,  11,    1,  -12 }, // '\'
+	  {   631,   3,  14,   7,    1,  -12 }, // ']'
+	  {   637,   9,   9,  11,    0,  -12 }, // '^'
+	  {   648,   8,   1,   9,    0,    1 }, // '_'
+	  {   649,   4,   2,   7,    1,  -12 }, // '`'
+	  {   650,   9,   9,  12,    1,   -9 }, // 'a'
+	  {   661,   9,  12,  12,    1,  -12 }, // 'b'
+	  {   675,   9,   9,  11,    1,   -9 }, // 'c'
+	  {   686,   9,  12,  12,    1,  -12 }, // 'd'
+	  {   700,   9,   9,  11,    1,   -9 }, // 'e'
+	  {   711,   4,  12,   6,    1,  -12 }, // 'f'
+	  {   717,   9,  12,  12,    1,   -9 }, // 'g'
+	  {   731,   8,  12,  11,    1,  -12 }, // 'h'
+	  {   743,   1,  12,   4,    1,  -12 }, // 'i'
+	  {   745,   3,  15,   4,   -1,  -12 }, // 'j'
+	  {   751,   7,  12,   9,    1,  -12 }, // 'k'
+	  {   762,   1,  12,   4,    1,  -12 }, // 'l'
+	  {   764,  13,   9,  16,    1,   -9 }, // 'm'
+	  {   779,   8,   9,  11,    1,   -9 }, // 'n'
+	  {   788,   9,   9,  11,    1,   -9 }, // 'o'
+	  {   799,   9,  12,  12,    1,   -9 }, // 'p'
+	  {   813,   9,  12,  12,    1,   -9 }, // 'q'
+	  {   827,   3,   9,   6,    1,   -9 }, // 'r'
+	  {   831,   5,   9,   7,    1,   -9 }, // 's'
+	  {   837,   5,  12,   6,    0,  -12 }, // 't'
+	  {   845,   8,   9,  11,    1,   -9 }, // 'u'
+	  {   854,   9,   9,  10,    0,   -9 }, // 'v'
+	  {   865,  13,   9,  14,    0,   -9 }, // 'w'
+	  {   880,   8,   9,   9,    0,   -9 }, // 'x'
+	  {   889,   8,  12,  10,    0,   -9 }, // 'y'
+	  {   901,   7,   9,   8,    0,   -9 }, // 'z'
+	  {   909,   3,  14,   7,    1,  -12 }, // '{'
+	  {   915,   1,  12,  12,    5,  -12 }, // '|'
+	  {   917,   3,  14,   7,    1,  -12 } // '}'
+};
+const GFXfont URW_Gothic_L_Book_16 PROGMEM = {
+(uint8_t  *)URW_Gothic_L_Book_16Bitmaps,(GFXglyph *)URW_Gothic_L_Book_16Glyphs,0x20, 0x7E, 20};
+
+// Created by http://oleddisplay.squix.ch/ Consider a donation
+// In case of problems make sure that you are using the font file with the correct version!
+const uint8_t Open_Sans_Condensed_Light_16Bitmaps[] PROGMEM = {
+
+	// Bitmap Data:
+	0x00, // ' '
+	0xAA,0xAA,0x0A, // '!'
+	0xB6,0xD0, // '"'
+	0x24,0x48,0x91,0x27,0xE5,0x0A,0x7E,0x48,0x91,0x22,0x40, // '#'
+	0x22,0x7A,0xAA,0xC3,0x33,0x3E,0x22, // '$'
+	0xC5,0x52,0xA5,0x4B,0x16,0xF6,0x8D,0x2A,0x54,0xAA,0x30, // '%'
+	0x62,0x49,0x24,0x61,0x0A,0x29,0x9A,0x29,0xB9, // '&'
+	0xF0, // '''
+	0x5A,0xAA,0xAA,0x94, // '('
+	0xA5,0x55,0x55,0x68, // ')'
+	0x22,0xF6,0x90, // '*'
+	0x10,0x41,0x3F,0x10,0x41,0x00, // '+'
+	0xF0, // ','
+	0xF0, // '-'
+	0xC0, // '.'
+	0x04,0x20,0x84,0x10,0x42,0x08,0x21,0x04,0x20, // '/'
+	0x69,0x99,0x99,0x99,0x99,0x96, // '0'
+	0x2E,0x92,0x49,0x24,0x90, // '1'
+	0xE1,0x11,0x11,0x22,0x48,0x8F, // '2'
+	0xE1,0x11,0x16,0x11,0x11,0x1E, // '3'
+	0x08,0x61,0x8A,0x29,0x24,0x92,0x8B,0xF0,0x82, // '4'
+	0xF8,0x88,0x8E,0x11,0x11,0x1E, // '5'
+	0x74,0x88,0x8E,0x99,0x99,0x96, // '6'
+	0xF8,0x42,0x10,0x88,0x42,0x21,0x08,0x80, // '7'
+	0x64,0xA5,0x29,0x32,0x92,0x8C,0x64,0xC0, // '8'
+	0x69,0x99,0x99,0xF1,0x11,0x2C, // '9'
+	0xC1,0x80, // ':'
+	0xC1,0xE0, // ';'
+	0x04,0x66,0x20,0x60,0x60,0x40, // '<'
+	0xFC,0x00,0x3F, // '='
+	0x81,0x81,0x81,0x19,0x88,0x00, // '>'
+	0x70,0x82,0x11,0x08,0x84,0x40,0x18,0xC0, // '?'
+	0x3C,0x62,0x41,0x9D,0xA5,0xA5,0xA5,0xA5,0xAD,0x9E,0x80,0x40,0x38, // '@'
+	0x20,0xC3,0x0C,0x51,0x24,0x9E,0x4A,0x18,0x61, // 'A'
+	0xF4,0x63,0x18,0xFA,0x31,0x8C,0x63,0xE0, // 'B'
+	0x39,0x08,0x20,0x82,0x08,0x20,0x82,0x04,0x0E, // 'C'
+	0xF2,0x28,0x61,0x86,0x18,0x61,0x86,0x18,0xBC, // 'D'
+	0xF8,0x88,0x8F,0x88,0x88,0x8F, // 'E'
+	0xFC,0x21,0x08,0x43,0xF0,0x84,0x21,0x00, // 'F'
+	0x39,0x18,0x20,0x82,0x08,0xE1,0x86,0x14,0x4F, // 'G'
+	0x86,0x18,0x61,0x87,0xF8,0x61,0x86,0x18,0x61, // 'H'
+	0xFF,0xF0, // 'I'
+	0x24,0x92,0x49,0x24,0x92,0x70, // 'J'
+	0x8C,0xA5,0x4A,0x62,0x94,0x94,0xA5,0x10, // 'K'
+	0x84,0x21,0x08,0x42,0x10,0x84,0x21,0xF0, // 'L'
+	0xC1,0xE0,0xF0,0x74,0x5A,0x2D,0x16,0x8B,0x29,0x94,0xCA,0x66,0x31,0x10, // 'M'
+	0xC3,0x86,0x8D,0x1A,0x32,0x64,0xC5,0x8B,0x0E,0x1C,0x30, // 'N'
+	0x79,0x28,0x61,0x86,0x18,0x61,0x86,0x14,0x9E, // 'O'
+	0xF4,0x63,0x18,0xC7,0xD0,0x84,0x21,0x00, // 'P'
+	0x79,0x28,0x61,0x86,0x18,0x61,0x86,0x14,0x9E,0x08,0x20,0x80, // 'Q'
+	0xF2,0x28,0xA2,0x8A,0x2F,0x24,0x92,0x28,0xA1, // 'R'
+	0x78,0x88,0x84,0x31,0x11,0x1E, // 'S'
+	0xFC,0x82,0x08,0x20,0x82,0x08,0x20,0x82,0x08, // 'T'
+	0x86,0x18,0x61,0x86,0x18,0x61,0x86,0x14,0x9E, // 'U'
+	0x86,0x18,0x52,0x49,0x24,0x94,0x30,0xC3,0x0C, // 'V'
+	0x84,0x30,0x86,0x28,0xA5,0x24,0xA4,0x94,0x92,0x92,0x8C,0x31,0x86,0x30,0xC6,0x18,0xC0, // 'W'
+	0x45,0x24,0x8A,0x30,0x43,0x0C,0x49,0x24,0xA1, // 'X'
+	0x8C,0x54,0xA5,0x28,0x84,0x21,0x08,0x40, // 'Y'
+	0xF8,0x84,0x21,0x10,0x84,0x42,0x11,0xF0, // 'Z'
+	0xF2,0x49,0x24,0x92,0x49,0x38, // '['
+	0x81,0x04,0x08,0x20,0x81,0x04,0x10,0x20,0x81, // '\'
+	0xE4,0x92,0x49,0x24,0x92,0x78, // ']'
+	0x20,0xC4,0x92,0x84, // '^'
+	0xFE, // '_'
+	0x48,0x80, // '`'
+	0x61,0x11,0x79,0x99,0xF0, // 'a'
+	0x84,0x21,0x0F,0x66,0x31,0x8C,0x63,0x9B,0x00, // 'b'
+	0x78,0x88,0x88,0x88,0x70, // 'c'
+	0x08,0x42,0x16,0xCE,0x31,0x8C,0x63,0x36,0x80, // 'd'
+	0x69,0x99,0xF8,0x88,0x70, // 'e'
+	0x34,0x44,0xF4,0x44,0x44,0x44,0x40, // 'f'
+	0x3D,0x24,0x92,0x48,0xC4,0x10,0x39,0x18,0x61,0x78, // 'g'
+	0x84,0x21,0x0B,0x66,0x31,0x8C,0x63,0x18,0x80, // 'h'
+	0xDF,0xF0, // 'i'
+	0x51,0x55,0x55,0x56, // 'j'
+	0x84,0x21,0x09,0x4A,0x94,0xE4,0xA5,0x28,0x80, // 'k'
+	0xFF,0xF8, // 'l'
+	0xF6,0x99,0x89,0x89,0x89,0x89,0x89,0x89,0x89, // 'm'
+	0xB6,0x63,0x18,0xC6,0x31,0x88, // 'n'
+	0x74,0x63,0x18,0xC6,0x31,0x70, // 'o'
+	0xB6,0x63,0x18,0xC6,0x39,0xB4,0x21,0x08,0x00, // 'p'
+	0x7C,0xE3,0x18,0xC6,0x33,0x68,0x42,0x10,0x80, // 'q'
+	0xF2,0x49,0x24,0x80, // 'r'
+	0xF2,0x44,0x49,0xE0, // 's'
+	0x44,0xF4,0x44,0x44,0x44,0x30, // 't'
+	0x8C,0x63,0x18,0xC6,0x33,0x68, // 'u'
+	0x8C,0x62,0xA5,0x29,0x44,0x20, // 'v'
+	0x88,0xC4,0x55,0x4A,0xA5,0x52,0xA9,0x54,0x44,0x22,0x00, // 'w'
+	0x8A,0x94,0x42,0x11,0x4A,0x88, // 'x'
+	0x8C,0x54,0xA5,0x29,0x44,0x21,0x08,0x8C,0x00, // 'y'
+	0x72,0x22,0x44,0x44,0xF0, // 'z'
+	0x32,0x44,0x44,0x48,0x44,0x44,0x42,0x10, // '{'
+	0x55,0x55,0x55,0x55,0x40, // '|'
+	0x84,0x22,0x22,0x21,0x22,0x22,0x24,0x80 // '}'
+};
+const GFXglyph Open_Sans_Condensed_Light_16Glyphs[] PROGMEM = {
+// bitmapOffset, width, height, xAdvance, xOffset, yOffset
+	  {     0,   1,   1,   4,    0,    0 }, // ' '
+	  {     1,   2,  12,   5,    1,  -12 }, // '!'
+	  {     4,   3,   4,   6,    1,  -12 }, // '"'
+	  {     6,   7,  12,   8,    0,  -12 }, // '#'
+	  {    17,   4,  14,   7,    1,  -13 }, // '$'
+	  {    24,   7,  12,  10,    1,  -12 }, // '%'
+	  {    35,   6,  12,   8,    1,  -12 }, // '&'
+	  {    44,   1,   4,   4,    1,  -12 }, // '''
+	  {    45,   2,  15,   5,    1,  -12 }, // '('
+	  {    49,   2,  15,   5,    1,  -12 }, // ')'
+	  {    53,   4,   5,   7,    1,  -13 }, // '*'
+	  {    56,   6,   7,   7,    0,  -10 }, // '+'
+	  {    62,   1,   4,   4,    1,   -2 }, // ','
+	  {    63,   4,   1,   5,    0,   -5 }, // '-'
+	  {    64,   1,   2,   4,    1,   -2 }, // '.'
+	  {    65,   6,  12,   7,    0,  -12 }, // '/'
+	  {    74,   4,  12,   7,    1,  -12 }, // '0'
+	  {    80,   3,  12,   7,    1,  -12 }, // '1'
+	  {    85,   4,  12,   7,    1,  -12 }, // '2'
+	  {    91,   4,  12,   7,    1,  -12 }, // '3'
+	  {    97,   6,  12,   7,    0,  -12 }, // '4'
+	  {   106,   4,  12,   7,    1,  -12 }, // '5'
+	  {   112,   4,  12,   7,    1,  -12 }, // '6'
+	  {   118,   5,  12,   7,    0,  -12 }, // '7'
+	  {   126,   5,  12,   7,    1,  -12 }, // '8'
+	  {   134,   4,  12,   7,    1,  -12 }, // '9'
+	  {   140,   1,   9,   4,    1,   -9 }, // ':'
+	  {   142,   1,  11,   4,    1,   -9 }, // ';'
+	  {   144,   6,   7,   7,    0,  -10 }, // '<'
+	  {   150,   6,   4,   7,    0,   -8 }, // '='
+	  {   153,   6,   7,   7,    0,  -10 }, // '>'
+	  {   159,   5,  12,   6,    0,  -12 }, // '?'
+	  {   167,   8,  13,  11,    1,  -12 }, // '@'
+	  {   180,   6,  12,   7,    0,  -12 }, // 'A'
+	  {   189,   5,  12,   8,    1,  -12 }, // 'B'
+	  {   197,   6,  12,   8,    1,  -12 }, // 'C'
+	  {   206,   6,  12,   9,    1,  -12 }, // 'D'
+	  {   215,   4,  12,   7,    1,  -12 }, // 'E'
+	  {   221,   5,  12,   7,    1,  -12 }, // 'F'
+	  {   229,   6,  12,   9,    1,  -12 }, // 'G'
+	  {   238,   6,  12,   9,    1,  -12 }, // 'H'
+	  {   247,   1,  12,   4,    1,  -12 }, // 'I'
+	  {   249,   3,  15,   4,   -1,  -12 }, // 'J'
+	  {   255,   5,  12,   7,    1,  -12 }, // 'K'
+	  {   263,   5,  12,   7,    1,  -12 }, // 'L'
+	  {   271,   9,  12,  12,    1,  -12 }, // 'M'
+	  {   285,   7,  12,  10,    1,  -12 }, // 'N'
+	  {   296,   6,  12,   9,    1,  -12 }, // 'O'
+	  {   305,   5,  12,   8,    1,  -12 }, // 'P'
+	  {   313,   6,  15,   9,    1,  -12 }, // 'Q'
+	  {   325,   6,  12,   8,    1,  -12 }, // 'R'
+	  {   334,   4,  12,   7,    1,  -12 }, // 'S'
+	  {   340,   6,  12,   7,    0,  -12 }, // 'T'
+	  {   349,   6,  12,   9,    1,  -12 }, // 'U'
+	  {   358,   6,  12,   7,    0,  -12 }, // 'V'
+	  {   367,  11,  12,  12,    0,  -12 }, // 'W'
+	  {   384,   6,  12,   7,    0,  -12 }, // 'X'
+	  {   393,   5,  12,   6,    0,  -12 }, // 'Y'
+	  {   401,   5,  12,   6,    0,  -12 }, // 'Z'
+	  {   409,   3,  15,   6,    1,  -12 }, // '['
+	  {   415,   6,  12,   7,    0,  -12 }, // '\'
+	  {   424,   3,  15,   6,    1,  -12 }, // ']'
+	  {   430,   6,   5,   7,    0,  -12 }, // '^'
+	  {   434,   7,   1,   8,    0,    1 }, // '_'
+	  {   435,   3,   3,  10,    3,  -13 }, // '`'
+	  {   437,   4,   9,   7,    1,   -9 }, // 'a'
+	  {   442,   5,  13,   8,    1,  -13 }, // 'b'
+	  {   451,   4,   9,   6,    1,   -9 }, // 'c'
+	  {   456,   5,  13,   8,    1,  -13 }, // 'd'
+	  {   465,   4,   9,   7,    1,   -9 }, // 'e'
+	  {   470,   4,  13,   5,    0,  -13 }, // 'f'
+	  {   477,   6,  13,   7,    0,   -9 }, // 'g'
+	  {   487,   5,  13,   8,    1,  -13 }, // 'h'
+	  {   496,   1,  12,   4,    1,  -12 }, // 'i'
+	  {   498,   2,  16,   4,    0,  -12 }, // 'j'
+	  {   502,   5,  13,   7,    1,  -13 }, // 'k'
+	  {   511,   1,  13,   4,    1,  -13 }, // 'l'
+	  {   513,   8,   9,  11,    1,   -9 }, // 'm'
+	  {   522,   5,   9,   8,    1,   -9 }, // 'n'
+	  {   528,   5,   9,   8,    1,   -9 }, // 'o'
+	  {   534,   5,  13,   8,    1,   -9 }, // 'p'
+	  {   543,   5,  13,   8,    1,   -9 }, // 'q'
+	  {   552,   3,   9,   5,    1,   -9 }, // 'r'
+	  {   556,   3,   9,   6,    1,   -9 }, // 's'
+	  {   560,   4,  11,   5,    0,  -11 }, // 't'
+	  {   566,   5,   9,   8,    1,   -9 }, // 'u'
+	  {   572,   5,   9,   6,    0,   -9 }, // 'v'
+	  {   578,   9,   9,  10,    0,   -9 }, // 'w'
+	  {   589,   5,   9,   6,    0,   -9 }, // 'x'
+	  {   595,   5,  13,   6,    0,   -9 }, // 'y'
+	  {   604,   4,   9,   5,    0,   -9 }, // 'z'
+	  {   609,   4,  15,   7,    1,  -12 }, // '{'
+	  {   617,   2,  17,   7,    2,  -13 }, // '|'
+	  {   622,   4,  15,   7,    1,  -12 } // '}'
+};
+const GFXfont Open_Sans_Condensed_Light_16 PROGMEM = {
+(uint8_t  *)Open_Sans_Condensed_Light_16Bitmaps,(GFXglyph *)Open_Sans_Condensed_Light_16Glyphs,0x20, 0x7E, 23};
+
+
+// Created by http://oleddisplay.squix.ch/ Consider a donation
+// In case of problems make sure that you are using the font file with the correct version!
+const uint8_t Open_Sans_Condensed_Light_19Bitmaps[] PROGMEM = {
+
+	// Bitmap Data:
+	0x00, // ' '
+	0xF5,0x55,0x50,0xF0, // '!'
+	0x99,0x99,0x90, // '"'
+	0x12,0x12,0x14,0x24,0x7F,0x24,0x24,0x24,0x24,0xFE,0x24,0x28,0x48,0x48, // '#'
+	0x20,0x87,0xF9,0xA2,0x8A,0x18,0x18,0x92,0x49,0x2F,0xE2,0x08, // '$'
+	0x62,0x51,0x25,0x12,0x89,0x44,0xDA,0x6B,0x59,0x6C,0x8A,0x45,0x22,0x92,0x29,0x18, // '%'
+	0x70,0xA1,0x42,0x85,0x0A,0x08,0x30,0x95,0x2A,0x34,0x28,0xCE,0x40, // '&'
+	0xAA,0x80, // '''
+	0x25,0x29,0x24,0x92,0x48,0x92,0x20, // '('
+	0x89,0x22,0x49,0x24,0x92,0x92,0x80, // ')'
+	0x21,0x3E,0xA5,0x00, // '*'
+	0x20,0x82,0x08,0xFC,0x82,0x08,0x00, // '+'
+	0x6A, // ','
+	0xE0, // '-'
+	0xF0, // '.'
+	0x08,0x20,0x84,0x10,0x42,0x08,0x21,0x04,0x20,0x82,0x00, // '/'
+	0x31,0x28,0x61,0x86,0x18,0x61,0x86,0x18,0x61,0x49,0xC0, // '0'
+	0x13,0xD1,0x11,0x11,0x11,0x11,0x11, // '1'
+	0x7A,0x20,0x41,0x04,0x10,0x82,0x10,0x82,0x10,0x83,0xF0, // '2'
+	0x7A,0x20,0x41,0x04,0x27,0x02,0x04,0x10,0x41,0x0B,0xC0, // '3'
+	0x04,0x0C,0x0C,0x14,0x14,0x24,0x24,0x44,0x44,0x44,0xFF,0x04,0x04,0x04, // '4'
+	0xFA,0x08,0x20,0x82,0x0F,0x83,0x04,0x10,0x41,0x0B,0xC0, // '5'
+	0x39,0x84,0x20,0x82,0xEC,0xE1,0x86,0x18,0x61,0x48,0xE0, // '6'
+	0xFC,0x10,0x42,0x08,0x21,0x04,0x10,0x82,0x08,0x41,0x00, // '7'
+	0x7B,0x38,0x61,0x85,0x23,0x16,0x86,0x18,0x61,0xC5,0xE0, // '8'
+	0x73,0x28,0x61,0x86,0x18,0x73,0x74,0x10,0x82,0x1B,0xC0, // '9'
+	0xF0,0x00,0xF0, // ':'
+	0xF0,0x00,0x6A, // ';'
+	0x04,0x23,0x30,0xC0,0xC0,0x81, // '<'
+	0xFC,0x00,0x00,0xFC, // '='
+	0x81,0x03,0x03,0x0C,0xC4,0x20, // '>'
+	0x70,0x82,0x11,0x08,0x84,0x22,0x00,0x06,0x30, // '?'
+	0x1E,0x11,0x90,0x48,0x18,0xCC,0xA6,0x53,0x29,0x94,0xCA,0x65,0x33,0x68,0x02,0x01,0x80,0x78, // '@'
+	0x18,0x18,0x18,0x18,0x24,0x24,0x24,0x24,0x7E,0x42,0x42,0x42,0x81,0x81, // 'A'
+	0xFA,0x38,0x61,0x86,0x2F,0x23,0x86,0x18,0x61,0x87,0xE0, // 'B'
+	0x1C,0xC1,0x04,0x08,0x10,0x20,0x40,0x81,0x02,0x02,0x06,0x03,0x80, // 'C'
+	0xF9,0x1A,0x14,0x18,0x30,0x60,0xC1,0x83,0x06,0x0C,0x28,0xDF,0x00, // 'D'
+	0xFC,0x21,0x08,0x43,0xF0,0x84,0x21,0x08,0x7C, // 'E'
+	0xFC,0x21,0x08,0x42,0x1E,0x84,0x21,0x08,0x40, // 'F'
+	0x1E,0x21,0x40,0xC0,0x80,0x80,0x80,0x87,0x81,0x81,0xC1,0x41,0x21,0x1F, // 'G'
+	0x86,0x18,0x61,0x86,0x1F,0xE1,0x86,0x18,0x61,0x86,0x10, // 'H'
+	0xAA,0xAA,0xAA,0xA0, // 'I'
+	0x24,0x92,0x49,0x24,0x92,0x49,0xE0, // 'J'
+	0x8A,0x29,0x24,0xA2,0x8C,0x28,0xA2,0x49,0x22,0x8A,0x10, // 'K'
+	0x84,0x21,0x08,0x42,0x10,0x84,0x21,0x08,0x7C, // 'L'
+	0xC0,0x78,0x0E,0x82,0xD0,0x5A,0x0B,0x42,0x64,0x4C,0x89,0x91,0x31,0x46,0x28,0xC5,0x18,0xA3,0x08,0x40, // 'M'
+	0xC1,0xC1,0xA1,0xA1,0x91,0x91,0x91,0x89,0x89,0x85,0x85,0x85,0x83,0x83, // 'N'
+	0x3C,0x66,0x42,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x42,0x66,0x3C, // 'O'
+	0xF4,0xE3,0x18,0xC6,0x7E,0x84,0x21,0x08,0x40, // 'P'
+	0x3C,0x66,0x42,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x42,0x66,0x3C,0x04,0x04,0x02, // 'Q'
+	0xF9,0x1A,0x14,0x28,0x50,0xA3,0x78,0x91,0x12,0x24,0x28,0x50,0x80, // 'R'
+	0x3F,0x18,0x20,0x83,0x06,0x06,0x04,0x10,0x41,0x0F,0xC0, // 'S'
+	0xFE,0x20,0x40,0x81,0x02,0x04,0x08,0x10,0x20,0x40,0x81,0x02,0x00, // 'T'
+	0x83,0x06,0x0C,0x18,0x30,0x60,0xC1,0x83,0x06,0x0A,0x24,0x47,0x00, // 'U'
+	0x83,0x06,0x12,0x24,0x48,0x91,0x14,0x28,0x50,0xA1,0x41,0x02,0x00, // 'V'
+	0x82,0x0C,0x10,0x51,0x44,0x8A,0x24,0x51,0x22,0x89,0x14,0x45,0x14,0x28,0xA1,0x45,0x0A,0x28,0x51,0x41,0x0C,0x08,0x20, // 'W'
+	0x42,0x88,0x91,0x22,0x83,0x04,0x0C,0x28,0x50,0x92,0x24,0x50,0x40, // 'X'
+	0x86,0x14,0x92,0x48,0xC3,0x0C,0x10,0x41,0x04,0x10,0x40, // 'Y'
+	0xF8,0x84,0x22,0x10,0x88,0x42,0x21,0x08,0x7C, // 'Z'
+	0xF2,0x49,0x24,0x92,0x49,0x24,0xE0, // '['
+	0x82,0x08,0x10,0x41,0x02,0x08,0x10,0x41,0x02,0x08,0x20, // '\'
+	0xE4,0x92,0x49,0x24,0x92,0x49,0xE0, // ']'
+	0x18,0x18,0x24,0x24,0x42,0x42,0x42, // '^'
+	0xFF, // '_'
+	0x88,0x80, // '`'
+	0x70,0xC2,0x17,0xC6,0x31,0x9B,0x40, // 'a'
+	0x82,0x08,0x20,0x82,0xEC,0xE1,0x86,0x18,0x61,0x87,0x3B,0x80, // 'b'
+	0x7A,0x21,0x08,0x42,0x10,0x43,0xC0, // 'c'
+	0x04,0x10,0x41,0x05,0xDC,0xE1,0x86,0x18,0x61,0x87,0x37,0x40, // 'd'
+	0x74,0x63,0x1F,0xC2,0x10,0x43,0xC0, // 'e'
+	0x39,0x10,0x84,0x79,0x08,0x42,0x10,0x84,0x21,0x00, // 'f'
+	0x3E,0x89,0x12,0x24,0x48,0x8E,0x10,0x40,0x79,0x0C,0x18,0x28,0x9E,0x00, // 'g'
+	0x82,0x08,0x20,0x82,0xEC,0xA1,0x86,0x18,0x61,0x86,0x18,0x40, // 'h'
+	0xA0,0xAA,0xAA,0xA0, // 'i'
+	0x48,0x04,0x92,0x49,0x24,0x92,0x4B,0x00, // 'j'
+	0x82,0x08,0x20,0x82,0x28,0xA4,0xA2,0xCD,0x24,0x8A,0x28,0x40, // 'k'
+	0xAA,0xAA,0xAA,0xA8, // 'l'
+	0xBB,0xB3,0x28,0x46,0x11,0x84,0x61,0x18,0x46,0x11,0x84,0x61,0x10, // 'm'
+	0xBB,0x28,0x61,0x86,0x18,0x61,0x86,0x10, // 'n'
+	0x79,0x28,0x61,0x86,0x18,0x61,0x49,0xE0, // 'o'
+	0xBB,0x38,0x61,0x86,0x18,0x61,0xCE,0xE8,0x20,0x82,0x08,0x00, // 'p'
+	0x77,0x38,0x61,0x86,0x18,0x61,0xCD,0xD0,0x41,0x04,0x10,0x40, // 'q'
+	0xBC,0xC8,0x88,0x88,0x88, // 'r'
+	0x78,0x88,0x43,0x11,0x1E, // 's'
+	0x44,0xF4,0x44,0x44,0x44,0x43, // 't'
+	0x86,0x18,0x61,0x86,0x18,0x61,0x4D,0xD0, // 'u'
+	0x86,0x14,0x92,0x49,0x23,0x0C,0x30,0xC0, // 'v'
+	0x8C,0x63,0x14,0xC9,0x32,0x4C,0x94,0xA5,0x28,0xCC,0x33,0x08,0x40, // 'w'
+	0x49,0x24,0x8C,0x30,0xC3,0x12,0x4A,0x10, // 'x'
+	0x86,0x14,0x92,0x49,0x23,0x0C,0x30,0xC2,0x08,0x20,0x8C,0x00, // 'y'
+	0xE2,0x22,0x44,0x88,0x8F, // 'z'
+	0x19,0x08,0x42,0x10,0x84,0xC1,0x08,0x42,0x10,0x84,0x18, // '{'
+	0xAA,0xAA,0xAA,0xAA,0xAA, // '|'
+	0xC1,0x08,0x42,0x10,0x84,0x19,0x08,0x42,0x10,0x84,0xC0 // '}'
+};
+const GFXglyph Open_Sans_Condensed_Light_19Glyphs[] PROGMEM = {
+// bitmapOffset, width, height, xAdvance, xOffset, yOffset
+	  {     0,   1,   1,   5,    0,    0 }, // ' '
+	  {     1,   2,  14,   5,    1,  -14 }, // '!'
+	  {     5,   4,   5,   7,    1,  -14 }, // '"'
+	  {     8,   8,  14,   9,    0,  -14 }, // '#'
+	  {    22,   6,  16,   9,    1,  -15 }, // '$'
+	  {    34,   9,  14,  12,    1,  -14 }, // '%'
+	  {    50,   7,  14,   9,    1,  -14 }, // '&'
+	  {    63,   2,   5,   5,    1,  -14 }, // '''
+	  {    65,   3,  17,   6,    1,  -14 }, // '('
+	  {    72,   3,  17,   6,    1,  -14 }, // ')'
+	  {    79,   5,   5,   8,    1,  -15 }, // '*'
+	  {    83,   6,   9,   9,    1,  -12 }, // '+'
+	  {    90,   2,   4,   5,    1,   -2 }, // ','
+	  {    91,   3,   1,   6,    1,   -6 }, // '-'
+	  {    92,   2,   2,   5,    1,   -2 }, // '.'
+	  {    93,   6,  14,   8,    1,  -14 }, // '/'
+	  {   104,   6,  14,   9,    1,  -14 }, // '0'
+	  {   115,   4,  14,   9,    1,  -14 }, // '1'
+	  {   122,   6,  14,   9,    1,  -14 }, // '2'
+	  {   133,   6,  14,   9,    1,  -14 }, // '3'
+	  {   144,   8,  14,   9,    0,  -14 }, // '4'
+	  {   158,   6,  14,   9,    1,  -14 }, // '5'
+	  {   169,   6,  14,   9,    1,  -14 }, // '6'
+	  {   180,   6,  14,   9,    1,  -14 }, // '7'
+	  {   191,   6,  14,   9,    1,  -14 }, // '8'
+	  {   202,   6,  14,   9,    1,  -14 }, // '9'
+	  {   213,   2,  10,   5,    1,  -10 }, // ':'
+	  {   216,   2,  12,   5,    1,  -10 }, // ';'
+	  {   219,   6,   8,   9,    1,  -11 }, // '<'
+	  {   225,   6,   5,   9,    1,  -10 }, // '='
+	  {   229,   6,   8,   9,    1,  -11 }, // '>'
+	  {   235,   5,  14,   6,    0,  -14 }, // '?'
+	  {   244,   9,  16,  12,    1,  -14 }, // '@'
+	  {   262,   8,  14,   9,    0,  -14 }, // 'A'
+	  {   276,   6,  14,   9,    1,  -14 }, // 'B'
+	  {   287,   7,  14,   9,    1,  -14 }, // 'C'
+	  {   300,   7,  14,  10,    1,  -14 }, // 'D'
+	  {   313,   5,  14,   8,    1,  -14 }, // 'E'
+	  {   322,   5,  14,   8,    2,  -14 }, // 'F'
+	  {   331,   8,  14,  11,    1,  -14 }, // 'G'
+	  {   345,   6,  14,  11,    2,  -14 }, // 'H'
+	  {   356,   2,  14,   5,    1,  -14 }, // 'I'
+	  {   360,   3,  17,   5,   -1,  -14 }, // 'J'
+	  {   367,   6,  14,   9,    2,  -14 }, // 'K'
+	  {   378,   5,  14,   8,    2,  -14 }, // 'L'
+	  {   387,  11,  14,  14,    1,  -14 }, // 'M'
+	  {   407,   8,  14,  11,    1,  -14 }, // 'N'
+	  {   421,   8,  14,  11,    1,  -14 }, // 'O'
+	  {   435,   5,  14,   9,    2,  -14 }, // 'P'
+	  {   444,   8,  17,  11,    1,  -14 }, // 'Q'
+	  {   461,   7,  14,   9,    1,  -14 }, // 'R'
+	  {   474,   6,  14,   9,    1,  -14 }, // 'S'
+	  {   485,   7,  14,   8,    0,  -14 }, // 'T'
+	  {   498,   7,  14,  10,    1,  -14 }, // 'U'
+	  {   511,   7,  14,   8,    0,  -14 }, // 'V'
+	  {   524,  13,  14,  14,    0,  -14 }, // 'W'
+	  {   547,   7,  14,   8,    0,  -14 }, // 'X'
+	  {   560,   6,  14,   7,    0,  -14 }, // 'Y'
+	  {   571,   5,  14,   7,    1,  -14 }, // 'Z'
+	  {   580,   3,  17,   7,    2,  -14 }, // '['
+	  {   587,   6,  14,   8,    1,  -14 }, // '\'
+	  {   598,   3,  17,   7,    1,  -14 }, // ']'
+	  {   605,   8,   7,   9,    0,  -14 }, // '^'
+	  {   612,   8,   1,   9,    0,    2 }, // '_'
+	  {   613,   3,   3,  11,    4,  -15 }, // '`'
+	  {   615,   5,  10,   8,    1,  -10 }, // 'a'
+	  {   622,   6,  15,   9,    1,  -15 }, // 'b'
+	  {   634,   5,  10,   7,    1,  -10 }, // 'c'
+	  {   641,   6,  15,   9,    1,  -15 }, // 'd'
+	  {   653,   5,  10,   8,    1,  -10 }, // 'e'
+	  {   660,   5,  15,   5,    0,  -15 }, // 'f'
+	  {   670,   7,  15,   8,    0,  -10 }, // 'g'
+	  {   684,   6,  15,   9,    1,  -15 }, // 'h'
+	  {   696,   2,  14,   5,    1,  -14 }, // 'i'
+	  {   700,   3,  19,   5,    0,  -14 }, // 'j'
+	  {   708,   6,  15,   8,    1,  -15 }, // 'k'
+	  {   720,   2,  15,   5,    1,  -15 }, // 'l'
+	  {   724,  10,  10,  13,    1,  -10 }, // 'm'
+	  {   737,   6,  10,   9,    1,  -10 }, // 'n'
+	  {   745,   6,  10,   9,    1,  -10 }, // 'o'
+	  {   753,   6,  15,   9,    1,  -10 }, // 'p'
+	  {   765,   6,  15,   9,    1,  -10 }, // 'q'
+	  {   777,   4,  10,   6,    1,  -10 }, // 'r'
+	  {   782,   4,  10,   7,    1,  -10 }, // 's'
+	  {   787,   4,  12,   5,    0,  -12 }, // 't'
+	  {   793,   6,  10,   9,    1,  -10 }, // 'u'
+	  {   801,   6,  10,   7,    0,  -10 }, // 'v'
+	  {   809,  10,  10,  11,    0,  -10 }, // 'w'
+	  {   822,   6,  10,   7,    0,  -10 }, // 'x'
+	  {   830,   6,  15,   7,    0,  -10 }, // 'y'
+	  {   842,   4,  10,   6,    1,  -10 }, // 'z'
+	  {   847,   5,  17,   8,    1,  -14 }, // '{'
+	  {   858,   2,  20,   9,    3,  -15 }, // '|'
+	  {   863,   5,  17,   8,    1,  -14 } // '}'
+};
+const GFXfont Open_Sans_Condensed_Light_19 PROGMEM = {
+(uint8_t  *)Open_Sans_Condensed_Light_19Bitmaps,(GFXglyph *)Open_Sans_Condensed_Light_19Glyphs,0x20, 0x7E, 27};
+
+// Created by http://oleddisplay.squix.ch/ Consider a donation
+// In case of problems make sure that you are using the font file with the correct version!
+const uint8_t Open_Sans_Condensed_Light_22Bitmaps[] PROGMEM = {
+
+	// Bitmap Data:
+	0x00, // ' '
+	0xFF,0xF3, // '!'
+	0xDE,0xD6,0xA4,0xA4, // '"'
+	0x12,0x09,0x04,0x82,0x41,0x23,0xFC,0x48,0x44,0x22,0x12,0x3F,0xC4,0x82,0x41,0x20,0x90,0x48, // '#'
+	0x10,0x20,0xF2,0x89,0x12,0x24,0x28,0x70,0x30,0x50,0x91,0x22,0x45,0x7C,0x10,0x20,0x40, // '$'
+	0x61,0x12,0x22,0x44,0x49,0x09,0x21,0x24,0x25,0x34,0xA9,0x95,0x2C,0xA4,0x24,0x84,0x90,0x92,0x22,0x44,0x48,0x86, // '%'
+	0x30,0x48,0x48,0x48,0x48,0x48,0x30,0x20,0x50,0x92,0x8A,0x8A,0x86,0x86,0x8A,0x71, // '&'
+	0xF5,0x50, // '''
+	0x12,0x24,0x44,0xC8,0x88,0x88,0x84,0x44,0x22,0x10, // '('
+	0x84,0x42,0x22,0x31,0x11,0x11,0x12,0x22,0x44,0x80, // ')'
+	0x30,0x4D,0xCC,0x79,0x20, // '*'
+	0x10,0x20,0x40,0x81,0x1F,0xC4,0x08,0x10,0x20,0x40, // '+'
+	0x49,0x48, // ','
+	0xF0, // '-'
+	0xC0, // '.'
+	0x04,0x08,0x10,0x40,0x83,0x04,0x08,0x20,0x40,0x82,0x04,0x08,0x20,0x40, // '/'
+	0x38,0x89,0x14,0x18,0x30,0x60,0xC1,0x83,0x06,0x0C,0x18,0x28,0x91,0x1C, // '0'
+	0x35,0x91,0x11,0x11,0x11,0x11,0x11,0x11, // '1'
+	0x79,0x08,0x10,0x10,0x20,0x81,0x02,0x08,0x10,0x41,0x02,0x08,0x20,0x7F, // '2'
+	0x79,0x08,0x18,0x10,0x20,0x83,0x18,0x0C,0x0C,0x08,0x10,0x20,0xC1,0x7C, // '3'
+	0x06,0x03,0x02,0x81,0x40,0xA0,0x90,0x48,0x44,0x22,0x21,0x10,0x9F,0xF0,0x20,0x10,0x08,0x04, // '4'
+	0x7C,0x82,0x04,0x08,0x10,0x3E,0x02,0x02,0x04,0x08,0x10,0x20,0xA3,0x7C, // '5'
+	0x1C,0x41,0x02,0x04,0x10,0x2E,0x62,0x83,0x06,0x0C,0x18,0x28,0x51,0x1C, // '6'
+	0xFE,0x04,0x08,0x20,0x40,0x82,0x04,0x08,0x20,0x40,0x82,0x04,0x08,0x20, // '7'
+	0x38,0x8A,0x0C,0x18,0x28,0x99,0x1C,0x69,0x8A,0x0C,0x18,0x30,0x51,0x9C, // '8'
+	0x38,0x8A,0x14,0x38,0x30,0x60,0xC3,0x46,0x74,0x08,0x20,0x40,0x82,0x38, // '9'
+	0xC0,0x30, // ':'
+	0x48,0x00,0x00,0x01,0x25,0x20, // ';'
+	0x02,0x08,0x63,0x08,0x0C,0x06,0x03,0x02, // '<'
+	0xFE,0x00,0x00,0x00,0x1F,0xC0, // '='
+	0x80,0x80,0xC0,0x60,0x21,0x8C,0x60,0x80, // '>'
+	0x70,0x20,0x83,0x08,0x20,0x84,0x10,0x82,0x08,0x00,0x02,0x08, // '?'
+	0x0F,0x02,0x30,0x83,0x20,0x24,0x74,0x92,0x62,0x4C,0x99,0x93,0x32,0x46,0x48,0xC9,0x18,0xB4,0x9B,0x90,0x03,0x00,0x31,0x03,0xC0, // '@'
+	0x08,0x04,0x05,0x02,0x81,0x40,0xA0,0x88,0x44,0x22,0x1F,0x10,0x48,0x24,0x12,0x0A,0x03,0x01, // 'A'
+	0xF9,0x0A,0x0C,0x18,0x30,0xE1,0x7C,0x85,0x06,0x0C,0x18,0x30,0x61,0x7C, // 'B'
+	0x1E,0x41,0x02,0x04,0x10,0x20,0x40,0x81,0x02,0x02,0x04,0x0C,0x08,0x0F, // 'C'
+	0xF8,0x8C,0x86,0x82,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x86,0x8C,0xF8, // 'D'
+	0xFC,0x21,0x08,0x42,0x1F,0x84,0x21,0x08,0x42,0x1F, // 'E'
+	0xFE,0x08,0x20,0x82,0x08,0x20,0xFA,0x08,0x20,0x82,0x08,0x20, // 'F'
+	0x0F,0x8C,0x26,0x01,0x00,0x40,0x30,0x08,0x02,0x00,0x83,0xE0,0x1C,0x05,0x01,0x40,0x58,0x13,0x04,0x3E, // 'G'
+	0x83,0x06,0x0C,0x18,0x30,0x60,0xFF,0x83,0x06,0x0C,0x18,0x30,0x60,0xC1, // 'H'
+	0xFF,0xFF, // 'I'
+	0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x2E, // 'J'
+	0x85,0x0A,0x24,0x49,0x16,0x28,0x70,0xE1,0x22,0x44,0x48,0x90,0xA1,0x41, // 'K'
+	0x82,0x08,0x20,0x82,0x08,0x20,0x82,0x08,0x20,0x82,0x08,0x3F, // 'L'
+	0x80,0x38,0x0F,0x01,0xE0,0x3A,0x0B,0x41,0x68,0x2D,0x05,0x91,0x32,0x26,0x44,0xC5,0x18,0xA3,0x14,0x62,0x8C,0x21, // 'M'
+	0x81,0xC1,0xC1,0xA1,0xA1,0xA1,0x91,0x91,0x89,0x89,0x85,0x85,0x87,0x83,0x83,0x81, // 'N'
+	0x1C,0x11,0x10,0x48,0x2C,0x1C,0x06,0x03,0x01,0x80,0xC0,0x60,0x38,0x34,0x12,0x08,0x88,0x38, // 'O'
+	0xF2,0x38,0x61,0x86,0x18,0x62,0xF2,0x08,0x20,0x82,0x08,0x20, // 'P'
+	0x1C,0x11,0x10,0x48,0x2C,0x1C,0x06,0x03,0x01,0x80,0xC0,0x60,0x38,0x34,0x12,0x08,0x88,0x38,0x04,0x01,0x00,0x80,0x20, // 'Q'
+	0xF1,0x12,0x14,0x28,0x50,0xA1,0x44,0xF1,0x22,0x44,0x48,0x91,0xA1,0x42, // 'R'
+	0x3E,0x82,0x04,0x08,0x10,0x10,0x18,0x0C,0x08,0x08,0x10,0x20,0x41,0x7C, // 'S'
+	0xFF,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, // 'T'
+	0x83,0x06,0x0C,0x18,0x30,0x60,0xC1,0x83,0x06,0x0C,0x18,0x30,0x51,0x9E, // 'U'
+	0x80,0xC0,0x50,0x48,0x24,0x12,0x08,0x88,0x44,0x22,0x11,0x05,0x02,0x81,0x40,0xA0,0x20,0x10, // 'V'
+	0x81,0x03,0x82,0x0D,0x0A,0x12,0x14,0x24,0x28,0x48,0x50,0x98,0xA3,0x12,0x24,0x24,0x48,0x48,0x90,0x91,0x20,0xA2,0x81,0x83,0x03,0x06,0x06,0x0C,0x0C,0x18, // 'W'
+	0x41,0x42,0x22,0x24,0x24,0x14,0x18,0x08,0x18,0x18,0x24,0x24,0x26,0x42,0x42,0x81, // 'X'
+	0x83,0x8D,0x12,0x24,0x45,0x0A,0x14,0x10,0x20,0x40,0x81,0x02,0x04,0x08, // 'Y'
+	0xF8,0x20,0x86,0x10,0x43,0x08,0x21,0x84,0x10,0xC2,0x08,0x3F, // 'Z'
+	0xF8,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xF0, // '['
+	0x81,0x01,0x02,0x04,0x04,0x08,0x10,0x10,0x20,0x60,0x40,0x80,0x81,0x02, // '\'
+	0xF1,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xF0, // ']'
+	0x08,0x0A,0x05,0x04,0x82,0x21,0x11,0x04,0x82, // '^'
+	0xFF,0x80, // '_'
+	0x99,0x10, // '`'
+	0x78,0x20,0x81,0x04,0xFC,0x61,0x8E,0x38,0xDD, // 'a'
+	0x81,0x02,0x04,0x08,0x17,0x31,0x43,0x83,0x06,0x0C,0x18,0x30,0x61,0x62,0xB8, // 'b'
+	0x3D,0x04,0x20,0x82,0x08,0x20,0x81,0x04,0x0E, // 'c'
+	0x02,0x04,0x08,0x10,0x27,0x51,0xA1,0x83,0x06,0x0C,0x18,0x30,0x70,0xA3,0x3A, // 'd'
+	0x38,0x89,0x1C,0x18,0x3F,0xE0,0x40,0x80,0x81,0x89,0xE0, // 'e'
+	0x19,0x08,0x42,0x7C,0x84,0x21,0x08,0x42,0x10,0x84,0x20, // 'f'
+	0x3F,0x24,0x42,0x42,0x42,0x42,0x24,0x38,0x20,0x20,0x3E,0x43,0x41,0x81,0x81,0x42,0x3C, // 'g'
+	0x82,0x08,0x20,0x82,0xE4,0xA2,0x86,0x18,0x61,0x86,0x18,0x61,0x84, // 'h'
+	0xF0,0xFF,0xFF,0xFF, // 'i'
+	0x6C,0x06,0xDB,0x6D,0xB6,0xDB,0x6D,0x2C, // 'j'
+	0x82,0x08,0x20,0x82,0x28,0xA4,0xA2,0x8E,0x24,0x92,0x48,0xA2,0x84, // 'k'
+	0xFF,0xFF,0x80, // 'l'
+	0xF3,0xA3,0x18,0xC6,0x11,0x84,0x61,0x18,0x46,0x11,0x84,0x61,0x18,0x46,0x11, // 'm'
+	0x39,0x28,0xA1,0x86,0x18,0x61,0x86,0x18,0x61, // 'n'
+	0x38,0x8B,0x1C,0x18,0x30,0x60,0xC1,0x83,0x8D,0x11,0xC0, // 'o'
+	0xB9,0x8A,0x1C,0x18,0x30,0x60,0xC1,0x83,0x0B,0x15,0xC8,0x10,0x20,0x40,0x80, // 'p'
+	0x3A,0x8D,0x0C,0x18,0x30,0x60,0xC1,0x83,0x85,0x19,0xD0,0x20,0x40,0x81,0x02, // 'q'
+	0xBC,0x88,0x88,0x88,0x88,0x88, // 'r'
+	0x7C,0x21,0x08,0x30,0x41,0x08,0x43,0xE0, // 's'
+	0x21,0x09,0xF2,0x10,0x84,0x21,0x08,0x42,0x10,0xE0, // 't'
+	0x85,0x0A,0x14,0x28,0x50,0xA1,0x43,0x86,0x8D,0x29,0x90, // 'u'
+	0x83,0x05,0x12,0x24,0x48,0x8A,0x14,0x28,0x50,0xC0,0x80, // 'v'
+	0x86,0x14,0x62,0x46,0x24,0x62,0x4A,0x24,0x92,0x29,0x42,0x94,0x29,0x42,0x94,0x30,0xC1,0x08, // 'w'
+	0x44,0x88,0xA1,0x42,0x82,0x04,0x14,0x28,0x89,0x12,0x20, // 'x'
+	0x83,0x05,0x12,0x24,0x48,0x8A,0x14,0x28,0x50,0x40,0x81,0x02,0x08,0x10,0xC0, // 'y'
+	0xF1,0x12,0x22,0x44,0x48,0x8F, // 'z'
+	0x0C,0x43,0x08,0x20,0x82,0x08,0x23,0x02,0x08,0x20,0x82,0x08,0x10,0x40,0xC0, // '{'
+	0xFF,0xFF,0xFC, // '|'
+	0xC0,0x83,0x04,0x10,0x41,0x04,0x10,0x31,0x04,0x10,0x41,0x04,0x20,0x8C,0x00 // '}'
+};
+const GFXglyph Open_Sans_Condensed_Light_22Glyphs[] PROGMEM = {
+// bitmapOffset, width, height, xAdvance, xOffset, yOffset
+	  {     0,   1,   1,   5,    0,    0 }, // ' '
+	  {     1,   1,  16,   6,    2,  -16 }, // '!'
+	  {     3,   5,   6,   8,    1,  -16 }, // '"'
+	  {     7,   9,  16,  10,    0,  -16 }, // '#'
+	  {    25,   7,  19,  10,    1,  -17 }, // '$'
+	  {    42,  11,  16,  14,    1,  -16 }, // '%'
+	  {    64,   8,  16,  10,    1,  -16 }, // '&'
+	  {    80,   2,   6,   5,    1,  -16 }, // '''
+	  {    82,   4,  19,   7,    1,  -16 }, // '('
+	  {    92,   4,  19,   7,    1,  -16 }, // ')'
+	  {   102,   6,   6,   9,    1,  -17 }, // '*'
+	  {   107,   7,  11,  10,    1,  -14 }, // '+'
+	  {   117,   3,   5,   6,    1,   -2 }, // ','
+	  {   119,   4,   1,   7,    1,   -6 }, // '-'
+	  {   120,   1,   2,   6,    2,   -2 }, // '.'
+	  {   121,   7,  16,   9,    1,  -16 }, // '/'
+	  {   135,   7,  16,  10,    1,  -16 }, // '0'
+	  {   149,   4,  16,  10,    2,  -16 }, // '1'
+	  {   157,   7,  16,  10,    1,  -16 }, // '2'
+	  {   171,   7,  16,  10,    1,  -16 }, // '3'
+	  {   185,   9,  16,  10,    0,  -16 }, // '4'
+	  {   203,   7,  16,  10,    1,  -16 }, // '5'
+	  {   217,   7,  16,  10,    1,  -16 }, // '6'
+	  {   231,   7,  16,  10,    1,  -16 }, // '7'
+	  {   245,   7,  16,  10,    1,  -16 }, // '8'
+	  {   259,   7,  16,  10,    1,  -16 }, // '9'
+	  {   273,   1,  12,   6,    2,  -12 }, // ':'
+	  {   275,   3,  15,   6,    1,  -12 }, // ';'
+	  {   281,   7,   9,  10,    1,  -13 }, // '<'
+	  {   289,   7,   6,  10,    1,  -11 }, // '='
+	  {   295,   7,   9,  10,    1,  -13 }, // '>'
+	  {   303,   6,  16,   7,    0,  -16 }, // '?'
+	  {   315,  11,  18,  14,    1,  -16 }, // '@'
+	  {   340,   9,  16,  10,    0,  -16 }, // 'A'
+	  {   358,   7,  16,  11,    2,  -16 }, // 'B'
+	  {   372,   7,  16,  10,    1,  -16 }, // 'C'
+	  {   386,   8,  16,  12,    2,  -16 }, // 'D'
+	  {   402,   5,  16,   9,    2,  -16 }, // 'E'
+	  {   412,   6,  16,   9,    2,  -16 }, // 'F'
+	  {   424,  10,  16,  13,    1,  -16 }, // 'G'
+	  {   444,   7,  16,  12,    2,  -16 }, // 'H'
+	  {   458,   1,  16,   5,    2,  -16 }, // 'I'
+	  {   460,   4,  20,   5,   -1,  -16 }, // 'J'
+	  {   470,   7,  16,  10,    2,  -16 }, // 'K'
+	  {   484,   6,  16,   9,    2,  -16 }, // 'L'
+	  {   496,  11,  16,  16,    2,  -16 }, // 'M'
+	  {   518,   8,  16,  13,    2,  -16 }, // 'N'
+	  {   534,   9,  16,  12,    1,  -16 }, // 'O'
+	  {   552,   6,  16,  10,    2,  -16 }, // 'P'
+	  {   564,   9,  20,  12,    1,  -16 }, // 'Q'
+	  {   587,   7,  16,  10,    2,  -16 }, // 'R'
+	  {   601,   7,  16,  10,    1,  -16 }, // 'S'
+	  {   615,   8,  16,   9,    0,  -16 }, // 'T'
+	  {   631,   7,  16,  12,    2,  -16 }, // 'U'
+	  {   645,   9,  16,  10,    0,  -16 }, // 'V'
+	  {   663,  15,  16,  16,    0,  -16 }, // 'W'
+	  {   693,   8,  16,   9,    0,  -16 }, // 'X'
+	  {   709,   7,  16,   8,    0,  -16 }, // 'Y'
+	  {   723,   6,  16,   8,    1,  -16 }, // 'Z'
+	  {   735,   4,  19,   8,    2,  -16 }, // '['
+	  {   745,   7,  16,   9,    1,  -16 }, // '\'
+	  {   759,   4,  19,   8,    1,  -16 }, // ']'
+	  {   769,   9,   8,  10,    0,  -16 }, // '^'
+	  {   778,   9,   1,  10,    0,    2 }, // '_'
+	  {   780,   3,   4,  13,    5,  -17 }, // '`'
+	  {   782,   6,  12,   9,    1,  -12 }, // 'a'
+	  {   791,   7,  17,  11,    2,  -17 }, // 'b'
+	  {   806,   6,  12,   8,    1,  -12 }, // 'c'
+	  {   815,   7,  17,  11,    1,  -17 }, // 'd'
+	  {   830,   7,  12,  10,    1,  -12 }, // 'e'
+	  {   841,   5,  17,   6,    0,  -17 }, // 'f'
+	  {   852,   8,  17,   9,    0,  -12 }, // 'g'
+	  {   869,   6,  17,  10,    2,  -17 }, // 'h'
+	  {   882,   2,  16,   5,    1,  -16 }, // 'i'
+	  {   886,   3,  21,   5,    0,  -16 }, // 'j'
+	  {   894,   6,  17,   9,    2,  -17 }, // 'k'
+	  {   907,   1,  17,   5,    2,  -17 }, // 'l'
+	  {   910,  10,  12,  15,    2,  -12 }, // 'm'
+	  {   925,   6,  12,  10,    2,  -12 }, // 'n'
+	  {   934,   7,  12,  10,    1,  -12 }, // 'o'
+	  {   945,   7,  17,  11,    2,  -12 }, // 'p'
+	  {   960,   7,  17,  11,    1,  -12 }, // 'q'
+	  {   975,   4,  12,   7,    2,  -12 }, // 'r'
+	  {   981,   5,  12,   8,    1,  -12 }, // 's'
+	  {   989,   5,  15,   6,    0,  -15 }, // 't'
+	  {   999,   7,  12,  10,    1,  -12 }, // 'u'
+	  {  1010,   7,  12,   8,    0,  -12 }, // 'v'
+	  {  1021,  12,  12,  13,    0,  -12 }, // 'w'
+	  {  1039,   7,  12,   8,    0,  -12 }, // 'x'
+	  {  1050,   7,  17,   8,    0,  -12 }, // 'y'
+	  {  1065,   4,  12,   7,    1,  -12 }, // 'z'
+	  {  1071,   6,  19,   9,    1,  -16 }, // '{'
+	  {  1086,   1,  22,  10,    4,  -17 }, // '|'
+	  {  1089,   6,  19,   9,    1,  -16 } // '}'
+};
+const GFXfont Open_Sans_Condensed_Light_22 PROGMEM = {
+(uint8_t  *)Open_Sans_Condensed_Light_22Bitmaps,(GFXglyph *)Open_Sans_Condensed_Light_22Glyphs,0x20, 0x7E, 31};
+
+// Created by http://oleddisplay.squix.ch/ Consider a donation
+// In case of problems make sure that you are using the font file with the correct version!
+const uint8_t Roboto_Condensed_19Bitmaps[] PROGMEM = {
+
+	// Bitmap Data:
+	0x00, // ' '
+	0xFF,0xCC, // '!'
+	0xDD,0x99, // '"'
+	0x09,0x0D,0x84,0xCF,0xF1,0x20,0x90,0xC8,0x6C,0xFF,0x12,0x09,0x04,0x82,0x43,0x20, // '#'
+	0x10,0x20,0xF3,0x2C,0x78,0xF0,0x20,0x70,0x38,0x18,0x38,0x38,0xF1,0xBE,0x10,0x20, // '$'
+	0x70,0x26,0x08,0x92,0x24,0x9A,0x1D,0x80,0x40,0x30,0x0B,0x86,0x91,0x64,0xD9,0x22,0x40,0xE0, // '%'
+	0x38,0x32,0x11,0x08,0x86,0xC3,0xC0,0xC0,0xF0,0xD9,0x66,0xA1,0xD8,0xCC,0x71,0xCC, // '&'
+	0xF0, // '''
+	0x11,0x26,0x64,0x4C,0xCC,0xCC,0x44,0x66,0x21,0x10, // '('
+	0x82,0x08,0x43,0x08,0x43,0x18,0xC6,0x31,0x08,0xC6,0x22,0x20, // ')'
+	0x18,0x18,0x99,0xFF,0x18,0x3C,0x26,0x64, // '*'
+	0x18,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x18, // '+'
+	0x6D,0xAC, // ','
+	0xF0, // '-'
+	0xF0, // '.'
+	0x04,0x10,0xC2,0x08,0x61,0x04,0x30,0x82,0x18,0x41,0x0C,0x00, // '/'
+	0x3C,0xCB,0x1E,0x1C,0x38,0x70,0xE1,0xC3,0x87,0x0A,0x36,0x47,0x80, // '0'
+	0x09,0xF6,0x31,0x8C,0x63,0x18,0xC6,0x31,0x8C, // '1'
+	0x3C,0x46,0xC6,0xC6,0x06,0x06,0x04,0x0C,0x18,0x18,0x30,0x60,0x40,0xFF, // '2'
+	0x79,0x8B,0x18,0x30,0x61,0x8E,0x02,0x06,0x0C,0x1C,0x3C,0x4F,0x00, // '3'
+	0x06,0x03,0x03,0x83,0xC1,0x61,0xB0,0x98,0xCC,0x46,0x7F,0xC1,0x80,0xC0,0x60,0x30, // '4'
+	0x7E,0x60,0x60,0x60,0x40,0x7C,0x66,0x02,0x03,0x03,0xC3,0x42,0x66,0x3C, // '5'
+	0x1C,0x61,0x82,0x0C,0x1F,0xB9,0xE3,0xC3,0x87,0x0E,0x36,0x47,0x00, // '6'
+	0xFF,0x02,0x06,0x06,0x04,0x0C,0x0C,0x18,0x18,0x10,0x30,0x30,0x20,0x60, // '7'
+	0x38,0x8B,0x1E,0x3C,0x68,0x8E,0x22,0xC7,0x8F,0x1E,0x34,0x47,0x00, // '8'
+	0x38,0x9B,0x14,0x38,0x70,0xF1,0xE7,0x7E,0x0C,0x10,0x20,0x8E,0x00, // '9'
+	0xF0,0x00,0xF0, // ':'
+	0x6C,0x00,0x00,0x6D,0xAC, // ';'
+	0x04,0x77,0x30,0xC1,0xC1,0xC1, // '<'
+	0xFE,0x00,0x00,0x0F,0xE0, // '='
+	0x81,0xC0,0xE0,0x70,0xE7,0x38,0x40, // '>'
+	0x7B,0x38,0x41,0x0C,0x31,0x8C,0x30,0xC0,0x00,0x30,0xC0, // '?'
+	0x07,0x80,0xC3,0x0C,0x0C,0x40,0x24,0x39,0x22,0x45,0x32,0x39,0x11,0xC8,0x8E,0x44,0x72,0x27,0x93,0x24,0xEE,0x20,0x00,0x80,0x06,0x10,0x0F,0x80, // '@'
+	0x04,0x01,0xC0,0x28,0x05,0x01,0xB0,0x36,0x04,0x41,0x8C,0x31,0x87,0xF0,0x83,0x30,0x66,0x0D,0x80,0xC0, // 'A'
+	0xFE,0xC3,0xC3,0xC3,0xC3,0xC2,0xFC,0xC3,0xC3,0xC1,0xC1,0xC3,0xC3,0xFE, // 'B'
+	0x1E,0x11,0x98,0x68,0x3C,0x06,0x03,0x01,0x80,0xC0,0x60,0x10,0x6C,0x32,0x30,0xF0, // 'C'
+	0xF8,0x84,0x86,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x82,0x86,0x84,0xF8, // 'D'
+	0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xFE,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF, // 'E'
+	0xFF,0x83,0x06,0x0C,0x18,0x3F,0xE0,0xC1,0x83,0x06,0x0C,0x18,0x00, // 'F'
+	0x3E,0x31,0x90,0x78,0x3C,0x06,0x03,0x01,0x8F,0xC1,0xE0,0xF0,0x68,0x36,0x30,0xF0, // 'G'
+	0x81,0x81,0x81,0x81,0x81,0x81,0xFF,0x81,0x81,0x81,0x81,0x81,0x81,0x81, // 'H'
+	0xFF,0xFC, // 'I'
+	0x06,0x0C,0x18,0x30,0x60,0xC1,0x83,0x06,0x0E,0x1C,0x3C,0xCF,0x00, // 'J'
+	0xC3,0xE1,0xB1,0x99,0x8C,0xC6,0xC3,0xE1,0xF0,0xEC,0x66,0x31,0x98,0x6C,0x36,0x0C, // 'K'
+	0xC1,0x83,0x06,0x0C,0x18,0x30,0x60,0xC1,0x83,0x06,0x0C,0x1F,0xC0, // 'L'
+	0xE0,0x3E,0x07,0xE0,0x7F,0x07,0xF0,0xFD,0x0F,0xD8,0xBD,0x9B,0xC9,0xBC,0xD3,0xCF,0x3C,0x73,0xC6,0x3C,0x63, // 'M'
+	0xC1,0xC1,0xE1,0xE1,0xB1,0xB1,0x99,0x99,0x8D,0x8D,0x87,0x87,0x83,0x83, // 'N'
+	0x3E,0x31,0x90,0x58,0x3C,0x1E,0x0F,0x07,0x83,0xC1,0xE0,0xF0,0x68,0x26,0x31,0xF0, // 'O'
+	0xFC,0x86,0x83,0x83,0x83,0x83,0x86,0xFC,0x80,0x80,0x80,0x80,0x80,0x80, // 'P'
+	0x3E,0x31,0xB0,0x58,0x3C,0x1E,0x0F,0x07,0x83,0xC1,0xE0,0xF0,0x78,0x26,0x31,0xF8,0x0E,0x03, // 'Q'
+	0xFC,0x61,0xB0,0xD8,0x6C,0x36,0x1B,0x09,0xF8,0xC4,0x63,0x31,0x98,0x6C,0x36,0x0C, // 'R'
+	0x3C,0x63,0xC3,0xC3,0xC0,0x60,0x38,0x1E,0x07,0x03,0xC3,0xC3,0xC3,0x3C, // 'S'
+	0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, // 'T'
+	0xC1,0xE0,0xF0,0x78,0x3C,0x1E,0x0F,0x07,0x83,0xC1,0xE0,0xF0,0x68,0x26,0x31,0xF0, // 'U'
+	0xC1,0xE0,0xF0,0x68,0x26,0x33,0x18,0x8C,0x44,0x36,0x1B,0x05,0x03,0x81,0xC0,0x40, // 'V'
+	0x82,0x1E,0x30,0xF1,0xC5,0x8E,0x24,0x51,0x26,0x99,0x34,0xCD,0x36,0x68,0xA3,0x45,0x0E,0x28,0x61,0xC3,0x0E,0x18,0x20, // 'W'
+	0xC1,0xE1,0x98,0xCC,0xC3,0x60,0xE0,0x60,0x38,0x3C,0x1B,0x19,0x8C,0x6C,0x36,0x0C, // 'X'
+	0xC0,0xD8,0x66,0x18,0xCC,0x33,0x04,0x81,0xE0,0x30,0x0C,0x03,0x00,0xC0,0x30,0x0C,0x03,0x00, // 'Y'
+	0xFF,0x03,0x06,0x06,0x0C,0x0C,0x18,0x18,0x30,0x30,0x60,0x40,0xC0,0xFF, // 'Z'
+	0xFB,0x6D,0xB6,0xDB,0x6D,0xB6,0xDC, // '['
+	0xC0,0x81,0x81,0x02,0x06,0x04,0x08,0x18,0x30,0x20,0x60,0xC0,0x81,0x80, // '\'
+	0xE4,0x92,0x49,0x24,0x92,0x49,0x3C, // ']'
+	0x23,0x94,0xAD,0xEE,0x20, // '^'
+	0xFE, // '_'
+	0xCC,0x80, // '`'
+	0x3C,0x8B,0x18,0x33,0xF8,0xF1,0xE3,0xCE,0xEC, // 'a'
+	0xC1,0x83,0x06,0x0F,0xD8,0xF1,0xE1,0xC3,0x87,0x0E,0x3C,0x7F,0x80, // 'b'
+	0x3C,0x8F,0x0E,0x1C,0x18,0x30,0x61,0x46,0x78, // 'c'
+	0x06,0x0C,0x18,0x37,0xF8,0xF1,0xC3,0x87,0x0E,0x1E,0x3C,0x6F,0xC0, // 'd'
+	0x3C,0x8F,0x1E,0x1F,0xF8,0x30,0x60,0x66,0x78, // 'e'
+	0x3B,0x18,0xCF,0x31,0x8C,0x63,0x18,0xC6,0x30, // 'f'
+	0x7F,0x8F,0x1C,0x38,0x70,0xE1,0xE3,0xC6,0xFC,0x1C,0x3C,0x4F,0x00, // 'g'
+	0xC1,0x83,0x06,0x0F,0xD8,0xF1,0xE3,0xC7,0x8F,0x1E,0x3C,0x78,0xC0, // 'h'
+	0xF0,0xFF,0xFF,0xF0, // 'i'
+	0x6C,0x06,0xDB,0x6D,0xB6,0xDB,0x78, // 'j'
+	0xC0,0xC0,0xC0,0xC0,0xC6,0xCC,0xD8,0xD8,0xF0,0xF8,0xC8,0xCC,0xC6,0xC7, // 'k'
+	0xFF,0xFF,0xFF,0xF0, // 'l'
+	0xFD,0xEC,0x63,0xC6,0x3C,0x63,0xC6,0x3C,0x63,0xC6,0x3C,0x63,0xC6,0x3C,0x63, // 'm'
+	0xDD,0xCF,0x1E,0x3C,0x78,0xF1,0xE3,0xC7,0x8C, // 'n'
+	0x3C,0x66,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x66,0x3C, // 'o'
+	0xFD,0x8F,0x1E,0x1C,0x38,0x70,0xE3,0xC7,0xFB,0x06,0x0C,0x18,0x00, // 'p'
+	0x3A,0xCF,0x0E,0x1C,0x38,0x70,0xE1,0x66,0x74,0x08,0x10,0x20,0x40, // 'q'
+	0xFE,0xCC,0xCC,0xCC,0xCC, // 'r'
+	0x3C,0x8B,0x1A,0x07,0x03,0x81,0xE3,0x46,0x78, // 's'
+	0x31,0xBE,0x63,0x18,0xC6,0x31,0x8C,0x30, // 't'
+	0xC7,0x8F,0x1E,0x3C,0x78,0xF1,0xE3,0xC6,0xFC, // 'u'
+	0xC3,0x42,0x66,0x66,0x24,0x24,0x3C,0x18,0x18,0x18, // 'v'
+	0xC6,0x34,0x62,0x46,0x26,0xF6,0x6F,0x62,0x94,0x29,0x43,0x9C,0x30,0xC1,0x08, // 'w'
+	0x63,0x66,0x34,0x3C,0x18,0x18,0x3C,0x34,0x66,0xE3, // 'x'
+	0xC3,0x66,0x66,0x66,0x24,0x3C,0x3C,0x18,0x18,0x18,0x18,0x10,0x30,0x60, // 'y'
+	0xFC,0x18,0x20,0xC3,0x06,0x18,0x30,0xC1,0xFC, // 'z'
+	0x11,0xC8,0xC6,0x31,0x8C,0xC3,0x18,0xC6,0x31,0x84,0x30,0xC0, // '{'
+	0xFF,0xFF,0x80, // '|'
+	0x47,0x08,0x63,0x18,0xC6,0x19,0x8C,0x63,0x18,0xC4,0x66,0x00 // '}'
+};
+const GFXglyph Roboto_Condensed_19Glyphs[] PROGMEM = {
+// bitmapOffset, width, height, xAdvance, xOffset, yOffset
+	  {     0,   1,   1,   5,    0,    0 }, // ' '
+	  {     1,   1,  14,   6,    2,  -14 }, // '!'
+	  {     3,   4,   4,   7,    1,  -14 }, // '"'
+	  {     5,   9,  14,  11,    1,  -14 }, // '#'
+	  {    21,   7,  18,  10,    1,  -16 }, // '$'
+	  {    37,  10,  14,  13,    1,  -14 }, // '%'
+	  {    55,   9,  14,  11,    1,  -14 }, // '&'
+	  {    71,   1,   4,   4,    1,  -14 }, // '''
+	  {    72,   4,  19,   7,    1,  -15 }, // '('
+	  {    82,   5,  19,   7,    0,  -15 }, // ')'
+	  {    94,   8,   8,   9,    0,  -14 }, // '*'
+	  {   102,   8,   9,  10,    1,  -11 }, // '+'
+	  {   111,   3,   5,   5,    0,   -2 }, // ','
+	  {   113,   4,   1,   6,    0,   -6 }, // '-'
+	  {   114,   2,   2,   6,    1,   -2 }, // '.'
+	  {   115,   6,  15,   8,    0,  -14 }, // '/'
+	  {   127,   7,  14,  10,    1,  -14 }, // '0'
+	  {   140,   5,  14,  10,    1,  -14 }, // '1'
+	  {   149,   8,  14,  10,    1,  -14 }, // '2'
+	  {   163,   7,  14,  10,    1,  -14 }, // '3'
+	  {   176,   9,  14,  10,    0,  -14 }, // '4'
+	  {   192,   8,  14,  10,    1,  -14 }, // '5'
+	  {   206,   7,  14,  10,    1,  -14 }, // '6'
+	  {   219,   8,  14,  10,    1,  -14 }, // '7'
+	  {   233,   7,  14,  10,    1,  -14 }, // '8'
+	  {   246,   7,  14,  10,    1,  -14 }, // '9'
+	  {   259,   2,  10,   5,    1,  -10 }, // ':'
+	  {   262,   3,  13,   5,    0,  -10 }, // ';'
+	  {   267,   6,   8,   9,    1,  -10 }, // '<'
+	  {   273,   7,   5,  10,    1,   -9 }, // '='
+	  {   278,   7,   8,  10,    1,  -10 }, // '>'
+	  {   285,   6,  14,   9,    1,  -14 }, // '?'
+	  {   296,  13,  17,  16,    1,  -13 }, // '@'
+	  {   324,  11,  14,  12,    0,  -14 }, // 'A'
+	  {   344,   8,  14,  11,    1,  -14 }, // 'B'
+	  {   358,   9,  14,  12,    1,  -14 }, // 'C'
+	  {   374,   8,  14,  12,    2,  -14 }, // 'D'
+	  {   388,   8,  14,  10,    1,  -14 }, // 'E'
+	  {   402,   7,  14,  10,    1,  -14 }, // 'F'
+	  {   415,   9,  14,  12,    1,  -14 }, // 'G'
+	  {   431,   8,  14,  13,    2,  -14 }, // 'H'
+	  {   445,   1,  14,   6,    2,  -14 }, // 'I'
+	  {   447,   7,  14,  10,    1,  -14 }, // 'J'
+	  {   460,   9,  14,  11,    1,  -14 }, // 'K'
+	  {   476,   7,  14,  10,    1,  -14 }, // 'L'
+	  {   489,  12,  14,  15,    1,  -14 }, // 'M'
+	  {   510,   8,  14,  13,    2,  -14 }, // 'N'
+	  {   524,   9,  14,  12,    1,  -14 }, // 'O'
+	  {   540,   8,  14,  12,    2,  -14 }, // 'P'
+	  {   554,   9,  16,  12,    1,  -14 }, // 'Q'
+	  {   572,   9,  14,  11,    1,  -14 }, // 'R'
+	  {   588,   8,  14,  11,    1,  -14 }, // 'S'
+	  {   602,   8,  14,  11,    1,  -14 }, // 'T'
+	  {   616,   9,  14,  12,    1,  -14 }, // 'U'
+	  {   632,   9,  14,  12,    1,  -14 }, // 'V'
+	  {   648,  13,  14,  15,    1,  -14 }, // 'W'
+	  {   671,   9,  14,  11,    1,  -14 }, // 'X'
+	  {   687,  10,  14,  11,    0,  -14 }, // 'Y'
+	  {   705,   8,  14,  11,    1,  -14 }, // 'Z'
+	  {   719,   3,  18,   6,    1,  -15 }, // '['
+	  {   726,   7,  15,   8,    0,  -14 }, // '\'
+	  {   740,   3,  18,   6,    0,  -15 }, // ']'
+	  {   747,   5,   7,   8,    1,  -14 }, // '^'
+	  {   752,   7,   1,   9,    0,    0 }, // '_'
+	  {   753,   3,   3,   7,    1,  -15 }, // '`'
+	  {   755,   7,  10,  10,    1,  -10 }, // 'a'
+	  {   764,   7,  14,  10,    1,  -14 }, // 'b'
+	  {   777,   7,  10,  10,    1,  -10 }, // 'c'
+	  {   786,   7,  14,  10,    1,  -14 }, // 'd'
+	  {   799,   7,  10,  10,    1,  -10 }, // 'e'
+	  {   808,   5,  14,   7,    1,  -14 }, // 'f'
+	  {   817,   7,  14,  10,    1,  -10 }, // 'g'
+	  {   830,   7,  14,  10,    1,  -14 }, // 'h'
+	  {   843,   2,  14,   5,    1,  -14 }, // 'i'
+	  {   847,   3,  18,   5,    0,  -14 }, // 'j'
+	  {   854,   8,  14,  10,    1,  -14 }, // 'k'
+	  {   868,   2,  14,   5,    1,  -14 }, // 'l'
+	  {   872,  12,  10,  15,    1,  -10 }, // 'm'
+	  {   887,   7,  10,  10,    1,  -10 }, // 'n'
+	  {   896,   8,  10,  11,    1,  -10 }, // 'o'
+	  {   906,   7,  14,  10,    1,  -10 }, // 'p'
+	  {   919,   7,  14,  11,    1,  -10 }, // 'q'
+	  {   932,   4,  10,   7,    1,  -10 }, // 'r'
+	  {   937,   7,  10,  10,    1,  -10 }, // 's'
+	  {   946,   5,  12,   7,    0,  -12 }, // 't'
+	  {   954,   7,  10,  10,    1,  -10 }, // 'u'
+	  {   963,   8,  10,   9,    0,  -10 }, // 'v'
+	  {   973,  12,  10,  13,    0,  -10 }, // 'w'
+	  {   988,   8,  10,   9,    0,  -10 }, // 'x'
+	  {   998,   8,  14,   9,    0,  -10 }, // 'y'
+	  {  1012,   7,  10,   9,    1,  -10 }, // 'z'
+	  {  1021,   5,  18,   7,    1,  -15 }, // '{'
+	  {  1033,   1,  17,   6,    2,  -14 }, // '|'
+	  {  1036,   5,  18,   7,    0,  -15 } // '}'
+};
+const GFXfont Roboto_Condensed_19 PROGMEM = {
+(uint8_t  *)Roboto_Condensed_19Bitmaps,(GFXglyph *)Roboto_Condensed_19Glyphs,0x20, 0x7E, 23};
+
+
+// Created by http://oleddisplay.squix.ch/ Consider a donation
+// In case of problems make sure that you are using the font file with the correct version!
+const uint8_t URW_Palladio_L_Roman_18Bitmaps[] PROGMEM = {
+
+	// Bitmap Data:
+	0x00, // ' '
+	0x7F,0x55,0x0F, // '!'
+	0x9C,0xA5,0x20, // '"'
+	0x13,0x09,0x04,0x82,0x47,0xF9,0x10,0x89,0xFE,0x24,0x12,0x09,0x08,0x80, // '#'
+	0x10,0xFA,0x54,0x89,0x1A,0x1F,0x0F,0x12,0x26,0x4C,0xA7,0x82,0x04,0x00, // '$'
+	0x70,0x44,0x44,0x22,0x21,0x12,0x08,0x90,0x39,0x00,0x09,0xC0,0x99,0x04,0x88,0x44,0x42,0x22,0x21,0x31,0x07,0x00, // '%'
+	0x1C,0x02,0x40,0x24,0x02,0x80,0x28,0x03,0x3F,0x50,0x89,0x88,0x8C,0x88,0x70,0xC3,0x07,0xCE, // '&'
+	0xEA, // '''
+	0x12,0x44,0x88,0x88,0x88,0x88,0x44,0x42,0x10, // '('
+	0x84,0x22,0x21,0x11,0x11,0x11,0x22,0x44,0x80, // ')'
+	0x04,0xB8,0x7E,0xD0,0x40, // '*'
+	0x08,0x04,0x02,0x01,0x0F,0xF8,0x40,0x20,0x10,0x08,0x00, // '+'
+	0x32,0x64,0x80, // ','
+	0x78, // '-'
+	0xF0, // '.'
+	0x02,0x08,0x10,0x20,0x81,0x04,0x08,0x20,0x40,0x82,0x04,0x10,0x20,0x00, // '/'
+	0x38,0x8A,0x1C,0x18,0x30,0x60,0xC1,0x83,0x07,0x12,0x23,0x80, // '0'
+	0x13,0xC1,0x04,0x10,0x41,0x04,0x10,0x41,0x1F, // '1'
+	0x3C,0x46,0x82,0x02,0x02,0x04,0x04,0x08,0x10,0x20,0x43,0xFF, // '2'
+	0x3C,0x8D,0x08,0x10,0x43,0x81,0x81,0x03,0x05,0x13,0xC0, // '3'
+	0x04,0x0C,0x1C,0x14,0x24,0x24,0x44,0x44,0xFF,0x04,0x04,0x1F, // '4'
+	0x7E,0x81,0x02,0x0B,0xC8,0xC0,0x81,0x03,0x0A,0x13,0xC0, // '5'
+	0x04,0x30,0x82,0x04,0x17,0xB1,0xC1,0x83,0x05,0x11,0xC0, // '6'
+	0xFF,0x82,0x86,0x04,0x08,0x08,0x10,0x10,0x20,0x60,0x40,0xC0, // '7'
+	0x3C,0x8E,0x0C,0x1C,0x4F,0x0F,0x23,0x83,0x06,0x0E,0x27,0x80, // '8'
+	0x3C,0x42,0x81,0x81,0x81,0x81,0x43,0x3D,0x02,0x02,0x04,0x08,0x70, // '9'
+	0xF0,0x0F, // ':'
+	0x50,0x05,0xA8, // ';'
+	0x01,0x83,0x06,0x0C,0x0C,0x01,0x80,0x30,0x06,0x00,0x80, // '<'
+	0xFF,0x80,0x00,0x00,0x0F,0xF8, // '='
+	0xC0,0x18,0x03,0x00,0x60,0x18,0x30,0x60,0xC0,0x80,0x00, // '>'
+	0x7A,0x30,0x41,0x08,0x43,0x08,0x00,0x02,0x08, // '?'
+	0x0F,0xC1,0x83,0x18,0x04,0x85,0x98,0xDC,0xCC,0x46,0x46,0x32,0x32,0x53,0xB3,0x66,0xCC,0x0C,0x1F,0x80, // '@'
+	0x02,0x00,0x18,0x01,0x40,0x0B,0x00,0x88,0x04,0x60,0x43,0x03,0xFC,0x10,0x61,0x01,0x88,0x0D,0xE0,0xF0, // 'A'
+	0xFE,0x11,0x88,0x44,0x22,0x21,0xF0,0x86,0x41,0x20,0x90,0x48,0x4F,0xC0, // 'B'
+	0x0F,0x86,0x09,0x01,0x20,0x08,0x01,0x00,0x20,0x04,0x00,0xC0,0x08,0x00,0xC1,0x07,0xC0, // 'C'
+	0xFF,0x82,0x06,0x20,0x22,0x01,0x20,0x12,0x01,0x20,0x12,0x01,0x20,0x22,0x02,0x20,0xC7,0xF0, // 'D'
+	0xFF,0x90,0x48,0x24,0x02,0x11,0xF8,0x84,0x42,0x20,0x10,0x48,0x3F,0xF0, // 'E'
+	0xFF,0x90,0x88,0x04,0x02,0x11,0xF8,0x84,0x42,0x20,0x10,0x08,0x1F,0x00, // 'F'
+	0x0F,0xE1,0x80,0x90,0x00,0x80,0x08,0x00,0x40,0x02,0x00,0x10,0x1F,0xC0,0x13,0x00,0x8E,0x04,0x1F,0xC0, // 'G'
+	0x70,0x38,0x80,0x42,0x01,0x08,0x04,0x20,0x10,0xFF,0xC2,0x01,0x08,0x04,0x20,0x10,0x80,0x42,0x01,0x3E,0x1F, // 'H'
+	0xF9,0x08,0x42,0x10,0x84,0x21,0x09,0xF0, // 'I'
+	0xF9,0x08,0x42,0x10,0x84,0x21,0x08,0x42,0x11,0x10, // 'J'
+	0xF8,0xE2,0x08,0x21,0x02,0x20,0x24,0x03,0x80,0x2C,0x02,0x60,0x23,0x02,0x18,0x20,0xEF,0x87, // 'K'
+	0xF8,0x08,0x02,0x00,0x80,0x20,0x08,0x02,0x00,0x80,0x20,0x08,0x22,0x09,0xFE, // 'L'
+	0xF0,0x07,0x38,0x0C,0x38,0x0C,0x2C,0x14,0x2C,0x14,0x26,0x24,0x26,0x24,0x23,0x44,0x23,0x44,0x21,0x84,0x21,0x84,0xF9,0x0F, // 'M'
+	0xF0,0x3E,0x70,0x10,0xF0,0x21,0x70,0x42,0x60,0x84,0x61,0x08,0x62,0x10,0x64,0x20,0x68,0x40,0xF0,0x80,0xE7,0xC0,0xC0, // 'N'
+	0x0F,0xC1,0x83,0x10,0x05,0x00,0x38,0x00,0xC0,0x06,0x00,0x30,0x01,0xC0,0x13,0x00,0x8C,0x18,0x1F,0x00, // 'O'
+	0xFF,0x88,0x32,0x04,0x81,0x20,0x8B,0xC2,0x00,0x80,0x20,0x08,0x02,0x03,0xE0, // 'P'
+	0x0F,0xC1,0x83,0x10,0x05,0x00,0x38,0x00,0xC0,0x06,0x00,0x30,0x01,0xC0,0x12,0x00,0x8C,0x08,0x3F,0x80,0x70,0x04,0xFC,0x00,0xC0, // 'Q'
+	0xFF,0x04,0x30,0x82,0x10,0x42,0x10,0x4C,0x0B,0x81,0x30,0x23,0x04,0x30,0x87,0x7C,0x70, // 'R'
+	0x3E,0x42,0x82,0x80,0x80,0x78,0x06,0x01,0x01,0x81,0x82,0x7C, // 'S'
+	0xFF,0xC4,0x42,0x01,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x07,0xC0, // 'T'
+	0xF8,0x7C,0x80,0x42,0x01,0x08,0x04,0x20,0x10,0x80,0x42,0x01,0x08,0x04,0x20,0x10,0x80,0x41,0x06,0x03,0xF0, // 'U'
+	0xF8,0x76,0x02,0x30,0x23,0x04,0x18,0x41,0x84,0x08,0x80,0xC8,0x05,0x00,0x70,0x06,0x00,0x20, // 'V'
+	0xF8,0x43,0xB0,0x60,0x88,0x30,0x46,0x2C,0x23,0x16,0x21,0x89,0x10,0x48,0xC8,0x34,0x68,0x1C,0x14,0x0E,0x0E,0x02,0x02,0x01,0x01,0x00, // 'W'
+	0x70,0x66,0x08,0x62,0x0C,0x80,0xD0,0x0C,0x01,0x80,0x58,0x11,0x82,0x30,0x83,0x20,0x30, // 'X'
+	0xE0,0x44,0x18,0xC2,0x08,0x80,0xA0,0x14,0x01,0x00,0x20,0x04,0x00,0x80,0x10,0x0F,0x80, // 'Y'
+	0x7F,0xE8,0x19,0x03,0x00,0xC0,0x30,0x0C,0x03,0x00,0x60,0x18,0x06,0x05,0x80,0xFF,0xF0, // 'Z'
+	0xF2,0x49,0x24,0x92,0x49,0x27, // '['
+	0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x01, // '\'
+	0xE4,0x92,0x49,0x24,0x92,0x4F, // ']'
+	0x18,0x0A,0x09,0x04,0x44,0x32,0x0A,0x06, // '^'
+	0xFF,0x80, // '_'
+	0x84,0x20, // '`'
+	0x39,0x98,0x10,0xE6,0x50,0xA3,0x3B, // 'a'
+	0x00,0xC0,0x40,0x40,0x40,0x5E,0x63,0x41,0x41,0x41,0x42,0x42,0x3C, // 'b'
+	0x1D,0x98,0x20,0x82,0x04,0x0F, // 'c'
+	0x00,0x06,0x02,0x02,0x02,0x1E,0x66,0x82,0x82,0x82,0x82,0x82,0x46,0x3B, // 'd'
+	0x1C,0x62,0x43,0x43,0xFF,0x40,0x40,0x61,0x3E, // 'e'
+	0x1B,0x10,0x84,0x79,0x08,0x42,0x10,0x8E,0x00, // 'f'
+	0x1C,0x33,0xD0,0x88,0x46,0x41,0xC1,0x00,0x80,0x7F,0x20,0x60,0x30,0x1C,0x31,0xE0, // 'g'
+	0x00,0xC0,0x40,0x40,0x40,0x5C,0x66,0x42,0x42,0x42,0x42,0x42,0xE3, // 'h'
+	0x48,0x2C,0x92,0x49,0x70, // 'i'
+	0x22,0x03,0x51,0x11,0x11,0x11,0x11,0x12,0xC0, // 'j'
+	0xC0,0x40,0x40,0x40,0x43,0x44,0x48,0x50,0x70,0x58,0x4C,0x46,0xE3, // 'k'
+	0xC9,0x24,0x92,0x49,0x2E, // 'l'
+	0xDC,0xE3,0x38,0x90,0x84,0x84,0x24,0x21,0x21,0x09,0x08,0x5D,0xF3, // 'm'
+	0xDC,0x66,0x42,0x42,0x42,0x42,0x42,0xE3, // 'n'
+	0x38,0x8A,0x1C,0x18,0x30,0x70,0xA2,0x38, // 'o'
+	0xDC,0x62,0x41,0x41,0x41,0x42,0x62,0x7C,0x40,0x40,0x40,0x40,0xE0, // 'p'
+	0x1C,0x62,0x82,0x82,0x82,0x82,0x82,0x46,0x3A,0x02,0x02,0x02,0x02,0x0F, // 'q'
+	0x5E,0xD8,0x84,0x21,0x08,0xF0, // 'r'
+	0x7A,0x28,0x30,0x78,0x10,0x63,0xF0, // 's'
+	0x44,0x47,0xC4,0x44,0x44,0x70, // 't'
+	0x42,0xC6,0x42,0x42,0x42,0x42,0x42,0x46,0x3B, // 'u'
+	0x71,0x88,0x43,0x20,0xC8,0x12,0x07,0x00,0xC0,0x20, // 'v'
+	0xF1,0x1D,0x84,0x22,0x38,0x88,0xE4,0x34,0x90,0x53,0x81,0x8E,0x06,0x18,0x18,0x40, // 'w'
+	0xE1,0x19,0x0D,0x03,0x00,0x80,0xE0,0x98,0xC6,0xC3,0x80, // 'x'
+	0xF3,0xD8,0x42,0x10,0xC8,0x12,0x07,0x01,0xC0,0x30,0x08,0x02,0x01,0x00,0x40,0x60,0x00, // 'y'
+	0x7F,0x42,0x04,0x0C,0x18,0x30,0x61,0xFF, // 'z'
+	0x49,0x24,0x92,0x89,0x24,0x92, // '{'
+	0xFF,0xF8, // '|'
+	0x89,0x24,0x92,0x29,0x24,0x92 // '}'
+};
+const GFXglyph URW_Palladio_L_Roman_18Glyphs[] PROGMEM = {
+// bitmapOffset, width, height, xAdvance, xOffset, yOffset
+	  {     0,   1,   1,   6,    0,    0 }, // ' '
+	  {     1,   2,  12,   6,    2,  -12 }, // '!'
+	  {     4,   5,   4,   8,    1,  -12 }, // '"'
+	  {     7,   9,  12,  10,    0,  -12 }, // '#'
+	  {    21,   7,  15,  10,    1,  -13 }, // '$'
+	  {    35,  13,  13,  16,    1,  -13 }, // '%'
+	  {    57,  12,  12,  15,    1,  -12 }, // '&'
+	  {    75,   2,   4,   5,    1,  -12 }, // '''
+	  {    76,   4,  17,   7,    1,  -13 }, // '('
+	  {    85,   4,  17,   7,    0,  -13 }, // ')'
+	  {    94,   5,   7,   8,    1,  -13 }, // '*'
+	  {    99,   9,   9,  12,    1,   -9 }, // '+'
+	  {   110,   4,   5,   6,    0,   -2 }, // ','
+	  {   113,   6,   1,   7,    0,   -5 }, // '-'
+	  {   114,   2,   2,   6,    1,   -2 }, // '.'
+	  {   115,   7,  15,  12,    2,  -13 }, // '/'
+	  {   129,   7,  13,  10,    1,  -13 }, // '0'
+	  {   141,   6,  12,  10,    1,  -12 }, // '1'
+	  {   150,   8,  12,  10,    0,  -12 }, // '2'
+	  {   162,   7,  12,  10,    0,  -12 }, // '3'
+	  {   173,   8,  12,  10,    0,  -12 }, // '4'
+	  {   185,   7,  12,  10,    1,  -12 }, // '5'
+	  {   196,   7,  12,  10,    1,  -12 }, // '6'
+	  {   207,   8,  12,  10,    1,  -12 }, // '7'
+	  {   219,   7,  13,  10,    1,  -13 }, // '8'
+	  {   231,   8,  13,  10,    0,  -13 }, // '9'
+	  {   244,   2,   8,   6,    1,   -8 }, // ':'
+	  {   246,   2,  11,   6,    1,   -8 }, // ';'
+	  {   249,   9,   9,  12,    1,   -9 }, // '<'
+	  {   260,   9,   5,  12,    1,   -7 }, // '='
+	  {   266,   9,   9,  12,    1,   -9 }, // '>'
+	  {   277,   6,  12,   9,    0,  -12 }, // '?'
+	  {   286,  13,  12,  14,    0,  -12 }, // '@'
+	  {   306,  13,  12,  15,    0,  -12 }, // 'A'
+	  {   326,   9,  12,  12,    0,  -12 }, // 'B'
+	  {   340,  11,  12,  14,    0,  -12 }, // 'C'
+	  {   357,  12,  12,  15,    0,  -12 }, // 'D'
+	  {   375,   9,  12,  12,    0,  -12 }, // 'E'
+	  {   389,   9,  12,  11,    0,  -12 }, // 'F'
+	  {   403,  13,  12,  15,    0,  -12 }, // 'G'
+	  {   423,  14,  12,  16,    0,  -12 }, // 'H'
+	  {   444,   5,  12,   7,    0,  -12 }, // 'I'
+	  {   452,   5,  16,   7,    0,  -12 }, // 'J'
+	  {   462,  12,  12,  14,    0,  -12 }, // 'K'
+	  {   480,  10,  12,  12,    0,  -12 }, // 'L'
+	  {   495,  16,  12,  18,    0,  -12 }, // 'M'
+	  {   519,  15,  12,  16,    0,  -12 }, // 'N'
+	  {   542,  13,  12,  15,    0,  -12 }, // 'O'
+	  {   562,  10,  12,  12,    0,  -12 }, // 'P'
+	  {   577,  13,  15,  15,    0,  -12 }, // 'Q'
+	  {   602,  11,  12,  13,    0,  -12 }, // 'R'
+	  {   619,   8,  12,  10,    0,  -12 }, // 'S'
+	  {   631,   9,  12,  12,    1,  -12 }, // 'T'
+	  {   645,  14,  12,  15,    0,  -12 }, // 'U'
+	  {   666,  12,  12,  14,    0,  -12 }, // 'V'
+	  {   684,  17,  12,  19,    0,  -12 }, // 'W'
+	  {   710,  11,  12,  13,    0,  -12 }, // 'X'
+	  {   727,  11,  12,  13,    0,  -12 }, // 'Y'
+	  {   744,  11,  12,  13,    0,  -12 }, // 'Z'
+	  {   761,   3,  16,   7,    2,  -14 }, // '['
+	  {   767,   8,  13,  12,    1,  -13 }, // '\'
+	  {   780,   3,  16,   7,    1,  -14 }, // ']'
+	  {   786,   9,   7,  12,    1,  -12 }, // '^'
+	  {   794,   9,   1,  10,    0,    1 }, // '_'
+	  {   796,   4,   3,   7,    1,  -12 }, // '`'
+	  {   798,   7,   8,  10,    1,   -8 }, // 'a'
+	  {   805,   8,  13,  11,    0,  -13 }, // 'b'
+	  {   818,   6,   8,   9,    1,   -8 }, // 'c'
+	  {   824,   8,  14,  12,    1,  -14 }, // 'd'
+	  {   838,   8,   9,  10,    0,   -9 }, // 'e'
+	  {   847,   5,  13,   7,    1,  -13 }, // 'f'
+	  {   856,   9,  14,  11,    0,   -9 }, // 'g'
+	  {   872,   8,  13,  11,    1,  -13 }, // 'h'
+	  {   885,   3,  12,   6,    1,  -12 }, // 'i'
+	  {   890,   4,  17,   5,   -2,  -12 }, // 'j'
+	  {   899,   8,  13,  11,    1,  -13 }, // 'k'
+	  {   912,   3,  13,   6,    1,  -13 }, // 'l'
+	  {   917,  13,   8,  17,    1,   -8 }, // 'm'
+	  {   930,   8,   8,  11,    1,   -8 }, // 'n'
+	  {   938,   7,   9,  11,    1,   -9 }, // 'o'
+	  {   946,   8,  13,  12,    1,   -8 }, // 'p'
+	  {   959,   8,  14,  11,    1,   -9 }, // 'q'
+	  {   973,   5,   9,   8,    1,   -9 }, // 'r'
+	  {   979,   6,   9,   9,    1,   -9 }, // 's'
+	  {   986,   4,  11,   7,    1,  -11 }, // 't'
+	  {   992,   8,   9,  12,    1,   -9 }, // 'u'
+	  {  1001,  10,   8,  11,    0,   -8 }, // 'v'
+	  {  1011,  14,   9,  16,    0,   -9 }, // 'w'
+	  {  1027,   9,   9,  10,    0,   -9 }, // 'x'
+	  {  1038,  10,  13,  11,    0,   -8 }, // 'y'
+	  {  1055,   8,   8,  10,    0,   -8 }, // 'z'
+	  {  1063,   3,  16,   7,    1,  -13 }, // '{'
+	  {  1069,   1,  13,  12,    5,  -13 }, // '|'
+	  {  1071,   3,  16,   7,    1,  -13 } // '}'
+};
+const GFXfont URW_Palladio_L_Roman_18 PROGMEM = {
+(uint8_t  *)URW_Palladio_L_Roman_18Bitmaps,(GFXglyph *)URW_Palladio_L_Roman_18Glyphs,0x20, 0x7E, 24};
+
+// Created by http://oleddisplay.squix.ch/ Consider a donation
+// In case of problems make sure that you are using the font file with the correct version!
+const uint8_t URW_Palladio_L_Bold_18Bitmaps[] PROGMEM = {
+
+	// Bitmap Data:
+	0x00, // ' '
+	0x7F,0xB4,0x92,0x0F,0xF0, // '!'
+	0x67,0xDD,0x9A,0x24,0x48,0x80, // '"'
+	0x13,0x09,0x84,0x82,0x47,0xF9,0x90,0xD9,0xFE,0x24,0x12,0x09,0x0C,0x80, // '#'
+	0x10,0x7E,0xD2,0xD2,0xD0,0xF0,0xFE,0x3F,0x17,0x93,0x93,0x96,0xFC,0x10,0x10, // '$'
+	0x78,0x43,0x31,0x0C,0xC8,0x33,0x20,0xCD,0x01,0xE4,0x00,0x27,0x81,0x33,0x04,0xCC,0x23,0x30,0x8C,0xC4,0x1E, // '%'
+	0x0E,0x00,0x98,0x0C,0xC0,0x64,0x03,0xC0,0x1C,0x7D,0xF1,0x19,0xC8,0xC7,0x47,0x1C,0x1C,0x7E,0x7C,0xE0, // '&'
+	0xFF,0xC0, // '''
+	0x12,0x64,0xCC,0xCC,0xCC,0xC4,0x62,0x10, // '('
+	0x84,0x62,0x33,0x33,0x33,0x32,0x64,0x80, // ')'
+	0x1B,0x43,0xF4,0x18, // '*'
+	0x0C,0x03,0x00,0xC0,0x30,0xFF,0xFF,0xF0,0xC0,0x30,0x0C,0x03,0x00, // '+'
+	0x07,0x66,0xC8, // ','
+	0x7F,0xE0, // '-'
+	0xDF,0x00, // '.'
+	0x08,0xC6,0x23,0x18,0x84,0x63,0x11,0x8C,0x00, // '/'
+	0x38,0xDB,0x1E,0x3C,0x78,0xF1,0xE3,0xC7,0x8D,0xB1,0xC0, // '0'
+	0x19,0xF2,0x60,0xC1,0x83,0x06,0x0C,0x18,0x30,0x63,0xF0, // '1'
+	0x78,0x7E,0xCE,0x86,0x06,0x04,0x0C,0x18,0x10,0x20,0x7F,0xFF, // '2'
+	0x3C,0x7E,0x46,0x86,0x04,0x3C,0x3F,0x03,0x03,0x83,0xC6,0xF8, // '3'
+	0x02,0x07,0x03,0x82,0xC3,0x61,0x31,0x18,0x8C,0x7F,0x83,0x01,0x83,0xF0, // '4'
+	0x7F,0x7F,0x40,0x40,0x5E,0x7F,0x47,0x03,0x03,0x82,0x46,0x78, // '5'
+	0x04,0x31,0x82,0x0D,0xDF,0xF3,0xE3,0xC7,0x8D,0x91,0xC0, // '6'
+	0xFF,0xFE,0x82,0x84,0x04,0x08,0x08,0x10,0x30,0x30,0x60,0x60, // '7'
+	0x3C,0xCF,0x9F,0x3F,0x47,0x8B,0xA3,0xC7,0x8F,0x93,0xC0, // '8'
+	0x38,0x9B,0x1E,0x3C,0x7C,0xFF,0xBB,0x0C,0x18,0x63,0x80, // '9'
+	0xDF,0x01,0xBE, // ':'
+	0x6D,0x80,0x1B,0x5A,0x00, // ';'
+	0x00,0x81,0xC3,0xC7,0x8E,0x07,0x01,0xE0,0x1C,0x03,0x80,0x40, // '<'
+	0xFF,0xFF,0xC0,0x00,0x0F,0xFF,0xFC, // '='
+	0x00,0x70,0x1E,0x03,0xC0,0x38,0x1C,0x3C,0x70,0xE0,0x40,0x00, // '>'
+	0x7B,0xF8,0xC3,0x08,0x42,0x08,0x00,0x86,0x18, // '?'
+	0x0F,0x83,0x04,0x40,0x24,0x69,0x99,0x9B,0x99,0xB1,0x9B,0x32,0x75,0x65,0xDF,0x30,0x60,0xF8, // '@'
+	0x03,0x00,0x0C,0x00,0x78,0x01,0xE0,0x09,0xC0,0x27,0x01,0x8E,0x07,0xF8,0x10,0x60,0x81,0xC2,0x07,0x3E,0x3F, // 'A'
+	0xFF,0x0C,0x63,0x18,0xC6,0x33,0x0F,0xE3,0x1C,0xC3,0x30,0xCC,0x33,0x19,0xFC, // 'B'
+	0x0F,0xC6,0x0D,0x80,0xE0,0x1C,0x01,0x80,0x30,0x06,0x00,0x60,0x0C,0x00,0xE0,0x87,0xE0, // 'C'
+	0xFF,0xE0,0xC1,0xE3,0x01,0x8C,0x03,0x30,0x0C,0xC0,0x33,0x00,0xCC,0x03,0x30,0x18,0xC0,0x63,0x06,0x1F,0xE0, // 'D'
+	0xFF,0x8C,0x23,0x00,0xC0,0x31,0x0F,0xC3,0x10,0xC0,0x30,0x0C,0x13,0x05,0xFE, // 'E'
+	0xFF,0x98,0x4C,0x26,0x03,0x11,0xF8,0xC4,0x62,0x30,0x18,0x0C,0x1F,0x80, // 'F'
+	0x0F,0xE1,0x81,0x98,0x05,0x80,0x2C,0x00,0x60,0x03,0x00,0x18,0x1F,0x60,0x33,0x01,0x8E,0x0C,0x1F,0x80, // 'G'
+	0xFC,0xFC,0xC0,0xC3,0x03,0x0C,0x0C,0x30,0x30,0xFF,0xC3,0x03,0x0C,0x0C,0x30,0x30,0xC0,0xC3,0x03,0x3F,0x3F, // 'H'
+	0xFC,0xC3,0x0C,0x30,0xC3,0x0C,0x30,0xC3,0x3F, // 'I'
+	0xFC,0xC3,0x0C,0x30,0xC3,0x0C,0x30,0xC3,0x0C,0x30,0x82,0x30, // 'J'
+	0xFC,0x79,0x83,0x0C,0x20,0x62,0x03,0x20,0x1F,0x00,0xDC,0x06,0xF0,0x33,0xC1,0x8F,0x0C,0x3D,0xF8,0xF0, // 'K'
+	0xFC,0x0C,0x03,0x00,0xC0,0x30,0x0C,0x03,0x00,0xC0,0x30,0x0C,0x13,0x05,0xFE, // 'L'
+	0xF8,0x07,0x9C,0x07,0x0F,0x03,0x85,0x82,0xC2,0xE1,0x61,0x31,0x30,0x9C,0x98,0x46,0x8C,0x23,0xC6,0x10,0xC3,0x08,0x61,0x9F,0x33,0xF0, // 'M'
+	0xF8,0x3C,0xE0,0x23,0xC0,0x8B,0x82,0x27,0x08,0x9E,0x22,0x3C,0x88,0x7A,0x20,0xF8,0x81,0xE2,0x03,0xBE,0x06, // 'N'
+	0x0F,0xC1,0x83,0x18,0x0D,0x80,0x7C,0x01,0xE0,0x0F,0x00,0x78,0x03,0xE0,0x1B,0x01,0x8C,0x18,0x3F,0x00, // 'O'
+	0xFF,0x8C,0x73,0x0C,0xC3,0x31,0x8D,0xC3,0x00,0xC0,0x30,0x0C,0x03,0x03,0xF0, // 'P'
+	0x0F,0xC1,0x83,0x18,0x0D,0x80,0x7C,0x01,0xE0,0x0F,0x00,0x78,0x03,0xE0,0x1B,0x01,0x8C,0x18,0x3F,0x00,0xF0,0x1F,0xF4,0x01,0xC0, // 'Q'
+	0xFF,0x83,0x1C,0x30,0xC3,0x0C,0x30,0x83,0x30,0x37,0x03,0x38,0x33,0xC3,0x1C,0x30,0xEF,0xCF, // 'R'
+	0x3F,0x31,0xB0,0x58,0x0F,0x03,0xF0,0x7E,0x07,0x81,0xC0,0xF0,0xCF,0xC0, // 'S'
+	0xFF,0xE3,0x18,0xC4,0x30,0x0C,0x03,0x00,0xC0,0x30,0x0C,0x03,0x00,0xC0,0xFC, // 'T'
+	0xFC,0x7C,0xC0,0x43,0x01,0x0C,0x04,0x30,0x10,0xC0,0x43,0x01,0x0C,0x04,0x30,0x10,0xC0,0x41,0x82,0x03,0xF0, // 'U'
+	0xFC,0x3C,0xE0,0x43,0x81,0x07,0x0C,0x1C,0x20,0x30,0x80,0xE4,0x01,0x90,0x07,0x80,0x1E,0x00,0x30,0x00,0xC0, // 'V'
+	0xFC,0x43,0xDC,0x18,0x63,0x0E,0x10,0xE3,0xC4,0x39,0xF1,0x0E,0x4C,0x81,0x93,0xA0,0x78,0xE8,0x1E,0x1E,0x07,0x07,0x00,0xC0,0xC0,0x30,0x30, // 'W'
+	0xF0,0x73,0x84,0x1C,0x81,0xD8,0x0F,0x00,0x60,0x07,0x00,0xB8,0x1B,0x81,0x1C,0x21,0xCE,0x0F, // 'X'
+	0xF0,0x6E,0x08,0xE3,0x0C,0x40,0xD0,0x1A,0x01,0x80,0x30,0x06,0x00,0xC0,0x18,0x0F,0xC0, // 'Y'
+	0x7F,0xE8,0x39,0x07,0x01,0xC0,0x70,0x0E,0x03,0x80,0xE0,0x1C,0x07,0x05,0xC0,0xFF,0xF0, // 'Z'
+	0xFC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xF0, // '['
+	0x40,0x30,0x08,0x06,0x01,0x00,0xC0,0x20,0x18,0x04,0x03,0x00,0x80,0x60,0x10, // '\'
+	0xF3,0x33,0x33,0x33,0x33,0x33,0x33,0xF0, // ']'
+	0x1C,0x0E,0x0D,0x86,0xC6,0x32,0x1B,0x06, // '^'
+	0xFF,0x80, // '_'
+	0xC3,0x0C, // '`'
+	0x78,0x18,0x31,0xEC,0xD9,0xBF,0x37, // 'a'
+	0xE0,0x30,0x18,0x0D,0xE7,0xF3,0x1D,0x86,0xC3,0x61,0xB0,0x98,0x8F,0x80, // 'b'
+	0x1C,0xCB,0x16,0x0C,0x18,0x18,0x1E, // 'c'
+	0x07,0x01,0x80,0xC0,0x61,0xF3,0x3B,0x0D,0x86,0xC3,0x71,0x9F,0xC7,0x70, // 'd'
+	0x3C,0x8F,0x1F,0xFC,0x18,0x38,0x1F, // 'e'
+	0x0C,0xF6,0x18,0x63,0xE6,0x18,0x61,0x86,0x18,0xF8, // 'f'
+	0x3C,0x23,0xF1,0x98,0xCC,0x63,0xC1,0x01,0xFE,0xFF,0xA0,0xF0,0x78,0x3E,0x33,0xE0, // 'g'
+	0xE0,0x30,0x18,0x0D,0xC7,0xF3,0x19,0x8C,0xC6,0x63,0x31,0x98,0xDE,0x70, // 'h'
+	0x66,0x60,0x2E,0x66,0x66,0x66,0xF0, // 'i'
+	0x33,0x30,0x17,0x33,0x33,0x33,0x33,0x33,0x2C, // 'j'
+	0xE0,0x18,0x06,0x01,0x80,0x63,0x99,0x86,0xC1,0xF0,0x6E,0x1B,0xC6,0x7B,0xCF, // 'k'
+	0xE6,0x66,0x66,0x66,0x66,0x6F, // 'l'
+	0x6E,0x73,0xFF,0xE6,0x31,0x98,0xC6,0x63,0x19,0x8C,0x66,0x31,0x98,0xC6,0xF7,0x9C, // 'm'
+	0x2E,0x7F,0x98,0xCC,0x66,0x33,0x19,0x8C,0xC6,0xF3,0x80, // 'n'
+	0x3C,0x66,0xC3,0xC3,0xC3,0xC3,0xC3,0x66,0x3C, // 'o'
+	0x2F,0x7F,0x98,0xEC,0x36,0x1B,0x0D,0x84,0xC4,0x7C,0x30,0x18,0x0C,0x06,0x07,0x80, // 'p'
+	0x1F,0x33,0xB0,0xD8,0x6C,0x37,0x19,0xFC,0xF6,0x03,0x01,0x80,0xC0,0x60,0x78, // 'q'
+	0x2F,0xF6,0x58,0x61,0x86,0x18,0xF8, // 'r'
+	0x7B,0x2C,0x3C,0x7C,0x78,0xE3,0xF8, // 's'
+	0x23,0x18,0xCF,0xB1,0x8C,0x63,0x1E,0x60, // 't'
+	0x21,0x73,0x98,0xCC,0x66,0x33,0x19,0x8C,0xFE,0x3B,0x80, // 'u'
+	0x71,0x8C,0x43,0x10,0xEC,0x1A,0x07,0x81,0xC0,0x30, // 'v'
+	0xF9,0x9E,0x63,0x18,0xC7,0x21,0x96,0x43,0xAD,0x83,0x9E,0x07,0x1C,0x0C,0x38,0x18,0x20, // 'w'
+	0xE1,0x99,0x0F,0x03,0x81,0xC0,0xF0,0xD8,0x4E,0xC3,0x80, // 'x'
+	0xF3,0xB0,0x9C,0x46,0x43,0x21,0xE0,0x70,0x30,0x08,0x04,0x04,0x12,0x0E,0x00, // 'y'
+	0x7F,0x46,0x0E,0x1C,0x18,0x30,0x71,0xFF, // 'z'
+	0x18,0xC3,0x0C,0x30,0xC3,0x10,0x30,0xC3,0x0C,0x30,0xC1,0x80, // '{'
+	0xFF,0xFF,0xFF,0xC0, // '|'
+	0x60,0xC3,0x0C,0x30,0xC3,0x02,0x30,0xC3,0x0C,0x30,0xC6,0x00 // '}'
+};
+const GFXglyph URW_Palladio_L_Bold_18Glyphs[] PROGMEM = {
+// bitmapOffset, width, height, xAdvance, xOffset, yOffset
+	  {     0,   1,   1,   6,    0,    0 }, // ' '
+	  {     1,   3,  12,   6,    1,  -12 }, // '!'
+	  {     6,   7,   6,   8,    0,  -12 }, // '"'
+	  {    12,   9,  12,  10,    0,  -12 }, // '#'
+	  {    26,   8,  15,  10,    1,  -13 }, // '$'
+	  {    41,  14,  12,  17,    1,  -12 }, // '%'
+	  {    62,  13,  12,  16,    1,  -12 }, // '&'
+	  {    82,   2,   6,   5,    1,  -12 }, // '''
+	  {    84,   4,  15,   7,    1,  -13 }, // '('
+	  {    92,   4,  15,   7,    1,  -13 }, // ')'
+	  {   100,   6,   5,   9,    1,  -12 }, // '*'
+	  {   104,  10,  10,  12,    1,  -10 }, // '+'
+	  {   117,   4,   6,   6,    0,   -3 }, // ','
+	  {   120,   6,   2,   7,    0,   -6 }, // '-'
+	  {   122,   3,   3,   6,    1,   -3 }, // '.'
+	  {   124,   5,  13,   6,    0,  -13 }, // '/'
+	  {   133,   7,  12,  10,    1,  -12 }, // '0'
+	  {   144,   7,  12,  10,    1,  -12 }, // '1'
+	  {   155,   8,  12,  10,    1,  -12 }, // '2'
+	  {   167,   8,  12,  10,    0,  -12 }, // '3'
+	  {   179,   9,  12,  10,    0,  -12 }, // '4'
+	  {   193,   8,  12,  10,    0,  -12 }, // '5'
+	  {   205,   7,  12,  10,    1,  -12 }, // '6'
+	  {   216,   8,  12,  10,    1,  -12 }, // '7'
+	  {   228,   7,  12,  10,    1,  -12 }, // '8'
+	  {   239,   7,  12,  10,    1,  -12 }, // '9'
+	  {   250,   3,   8,   6,    1,   -8 }, // ':'
+	  {   253,   3,  11,   6,    0,   -8 }, // ';'
+	  {   258,   9,  10,  12,    1,  -10 }, // '<'
+	  {   270,   9,   6,  12,    1,   -8 }, // '='
+	  {   277,   9,  10,  12,    1,  -10 }, // '>'
+	  {   289,   6,  12,   9,    1,  -12 }, // '?'
+	  {   298,  12,  12,  14,    1,  -12 }, // '@'
+	  {   316,  14,  12,  15,    0,  -12 }, // 'A'
+	  {   337,  10,  12,  13,    0,  -12 }, // 'B'
+	  {   352,  11,  12,  14,    1,  -12 }, // 'C'
+	  {   369,  14,  12,  16,    0,  -12 }, // 'D'
+	  {   390,  10,  12,  12,    0,  -12 }, // 'E'
+	  {   405,   9,  12,  11,    0,  -12 }, // 'F'
+	  {   419,  13,  12,  16,    1,  -12 }, // 'G'
+	  {   439,  14,  12,  16,    0,  -12 }, // 'H'
+	  {   460,   6,  12,   8,    0,  -12 }, // 'I'
+	  {   469,   6,  16,   8,    0,  -12 }, // 'J'
+	  {   481,  13,  12,  15,    0,  -12 }, // 'K'
+	  {   501,  10,  12,  12,    0,  -12 }, // 'L'
+	  {   516,  17,  12,  19,    0,  -12 }, // 'M'
+	  {   542,  14,  12,  16,    0,  -12 }, // 'N'
+	  {   563,  13,  12,  16,    1,  -12 }, // 'O'
+	  {   583,  10,  12,  12,    0,  -12 }, // 'P'
+	  {   598,  13,  15,  16,    1,  -12 }, // 'Q'
+	  {   623,  12,  12,  14,    0,  -12 }, // 'R'
+	  {   641,   9,  12,  12,    1,  -12 }, // 'S'
+	  {   655,  10,  12,  13,    1,  -12 }, // 'T'
+	  {   670,  14,  12,  15,    0,  -12 }, // 'U'
+	  {   691,  14,  12,  15,    0,  -12 }, // 'V'
+	  {   712,  18,  12,  19,    0,  -12 }, // 'W'
+	  {   739,  12,  12,  13,    0,  -12 }, // 'X'
+	  {   757,  11,  12,  13,    0,  -12 }, // 'Y'
+	  {   774,  11,  12,  13,    0,  -12 }, // 'Z'
+	  {   791,   4,  15,   7,    1,  -13 }, // '['
+	  {   799,   9,  13,  12,    1,  -13 }, // '\'
+	  {   814,   4,  15,   7,    1,  -13 }, // ']'
+	  {   822,   9,   7,  12,    1,  -12 }, // '^'
+	  {   830,   9,   1,  10,    0,    1 }, // '_'
+	  {   832,   5,   3,   7,    0,  -12 }, // '`'
+	  {   834,   7,   8,  10,    1,   -8 }, // 'a'
+	  {   841,   9,  12,  12,    1,  -12 }, // 'b'
+	  {   855,   7,   8,   9,    1,   -8 }, // 'c'
+	  {   862,   9,  12,  12,    1,  -12 }, // 'd'
+	  {   876,   7,   8,  10,    1,   -8 }, // 'e'
+	  {   883,   6,  13,   8,    1,  -13 }, // 'f'
+	  {   893,   9,  14,  11,    1,   -9 }, // 'g'
+	  {   909,   9,  12,  12,    1,  -12 }, // 'h'
+	  {   923,   4,  13,   7,    1,  -13 }, // 'i'
+	  {   930,   4,  18,   7,    0,  -13 }, // 'j'
+	  {   939,  10,  12,  12,    1,  -12 }, // 'k'
+	  {   954,   4,  12,   7,    1,  -12 }, // 'l'
+	  {   960,  14,   9,  17,    1,   -9 }, // 'm'
+	  {   976,   9,   9,  12,    1,   -9 }, // 'n'
+	  {   987,   8,   9,  11,    1,   -9 }, // 'o'
+	  {   996,   9,  14,  12,    1,   -9 }, // 'p'
+	  {  1012,   9,  13,  12,    1,   -8 }, // 'q'
+	  {  1027,   6,   9,   8,    1,   -9 }, // 'r'
+	  {  1034,   6,   9,   9,    1,   -9 }, // 's'
+	  {  1041,   5,  12,   7,    1,  -12 }, // 't'
+	  {  1049,   9,   9,  12,    1,   -9 }, // 'u'
+	  {  1060,  10,   8,  11,    0,   -8 }, // 'v'
+	  {  1070,  15,   9,  16,    0,   -9 }, // 'w'
+	  {  1087,   9,   9,  10,    0,   -9 }, // 'x'
+	  {  1098,   9,  13,  11,    0,   -8 }, // 'y'
+	  {  1113,   8,   8,  10,    0,   -8 }, // 'z'
+	  {  1121,   6,  15,   7,    0,  -14 }, // '{'
+	  {  1133,   2,  13,  12,    5,  -13 }, // '|'
+	  {  1137,   6,  15,   7,    0,  -14 } // '}'
+};
+const GFXfont URW_Palladio_L_Bold_18 PROGMEM = {
+(uint8_t  *)URW_Palladio_L_Bold_18Bitmaps,(GFXglyph *)URW_Palladio_L_Bold_18Glyphs,0x20, 0x7E, 24};
+
+// Created by http://oleddisplay.squix.ch/ Consider a donation
+// In case of problems make sure that you are using the font file with the correct version!
+const uint8_t Lato_Hairline_16Bitmaps[] PROGMEM = {
+
+	// Bitmap Data:
+	0x00, // ' '
+	0x55,0x55,0x07, // '!'
+	0xB6,0xDA, // '"'
+	0x12,0x12,0x12,0xFF,0x24,0x24,0x24,0x24,0xFF,0x48,0x48,0x48, // '#'
+	0x08,0x08,0x1C,0x6A,0x48,0x48,0x48,0x30,0x0E,0x12,0x11,0x12,0xD2,0x3C,0x10,0x10, // '$'
+	0x60,0x53,0x12,0x22,0x44,0x88,0xA1,0xA8,0x09,0x70,0x51,0x12,0x24,0x44,0x88,0xA0,0xE0, // '%'
+	0x1C,0x04,0x40,0x88,0x10,0x02,0x00,0x60,0x12,0x24,0x24,0x82,0x90,0x23,0x0A,0x1E,0x30, // '&'
+	0xF8, // '''
+	0x25,0x29,0x24,0x92,0x24,0x88, // '('
+	0x91,0x24,0x49,0x25,0x25,0x20, // ')'
+	0x27,0x4D,0xD2,0x00, // '*'
+	0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10, // '+'
+	0x76, // ','
+	0xF0, // '-'
+	0x70, // '.'
+	0x04,0x20,0x82,0x10,0x42,0x08,0x41,0x04,0x20,0x80, // '/'
+	0x18,0x66,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x42,0x3C, // '0'
+	0x10,0xC5,0x24,0x10,0x41,0x04,0x10,0x41,0x3F, // '1'
+	0x18,0x66,0x42,0x81,0x02,0x02,0x04,0x08,0x10,0x20,0x40,0xFF, // '2'
+	0x18,0x66,0x42,0x82,0x02,0x06,0x1E,0x02,0x01,0x81,0x42,0x3C, // '3'
+	0x02,0x01,0x01,0x81,0x41,0x21,0x10,0x88,0x84,0xFF,0x81,0x00,0x80,0x40, // '4'
+	0x3E,0x41,0x02,0x04,0x0F,0x80,0x81,0x02,0x06,0x0B,0xE0, // '5'
+	0x04,0x08,0x08,0x10,0x20,0x7E,0x42,0x81,0x81,0x81,0x42,0x3C, // '6'
+	0xFF,0x01,0x02,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x60, // '7'
+	0x18,0x66,0x42,0x82,0x42,0x66,0x7E,0x82,0x81,0x81,0x42,0x3C, // '8'
+	0x18,0x66,0x82,0x81,0x83,0x66,0x1E,0x04,0x08,0x18,0x10,0x20, // '9'
+	0x70,0x01,0xC0, // ':'
+	0x70,0x01,0xD8, // ';'
+	0x06,0x30,0x86,0x03,0x01,0x80,0x80, // '<'
+	0xFF,0x00,0xFF, // '='
+	0xC0,0xC0,0x81,0x19,0x88,0x00, // '>'
+	0x74,0x42,0x10,0x88,0x84,0x00,0x08,0xC0, // '?'
+	0x1F,0x82,0x06,0x40,0x24,0x79,0x88,0x99,0x11,0x91,0x19,0x12,0x93,0x24,0xCC,0x20,0x01,0x8E,0x07,0x00, // '@'
+	0x04,0x00,0x80,0x28,0x05,0x01,0x20,0x22,0x04,0x41,0x04,0x3F,0x88,0x09,0x01,0x40,0x30, // 'A'
+	0xF9,0x0A,0x0C,0x18,0x30,0xBF,0x41,0x83,0x06,0x0F,0xE0, // 'B'
+	0x0E,0x0C,0x74,0x01,0x00,0x80,0x20,0x08,0x02,0x00,0x80,0x10,0x02,0x0C,0x7C, // 'C'
+	0xFC,0x20,0xC8,0x0A,0x02,0x80,0x60,0x18,0x06,0x01,0x80,0xA0,0x28,0x13,0xF8, // 'D'
+	0xFF,0x02,0x04,0x08,0x10,0x3F,0x40,0x81,0x02,0x07,0xF0, // 'E'
+	0xFF,0x02,0x04,0x08,0x10,0x3F,0x40,0x81,0x02,0x04,0x00, // 'F'
+	0x0F,0x0C,0x34,0x01,0x00,0x80,0x20,0x08,0x02,0x07,0x80,0x50,0x12,0x04,0x7E, // 'G'
+	0x80,0xC0,0x60,0x30,0x18,0x0C,0x07,0xFF,0x01,0x80,0xC0,0x60,0x30,0x10, // 'H'
+	0xFF,0xF0, // 'I'
+	0x08,0x42,0x10,0x84,0x21,0x08,0x43,0xE0, // 'J'
+	0x81,0x41,0x21,0x11,0x09,0x05,0x03,0x81,0x20,0x88,0x42,0x20,0x90,0x30, // 'K'
+	0x82,0x08,0x20,0x82,0x08,0x20,0x82,0x08,0x3F, // 'L'
+	0x80,0x30,0x07,0x01,0xD0,0x5A,0x0B,0x22,0x64,0x4C,0x51,0x8A,0x30,0x86,0x00,0xC0,0x10, // 'M'
+	0x80,0xC0,0x70,0x34,0x19,0x0C,0x86,0x23,0x09,0x84,0xC1,0x60,0x70,0x10, // 'N'
+	0x0E,0x06,0x31,0x01,0x20,0x18,0x03,0x00,0x60,0x0C,0x01,0x80,0x28,0x08,0x82,0x0F,0x80, // 'O'
+	0xF1,0x1A,0x0C,0x18,0x30,0xA3,0x78,0x81,0x02,0x04,0x00, // 'P'
+	0x0E,0x03,0x18,0x40,0x44,0x02,0x80,0x28,0x02,0x80,0x28,0x02,0x80,0x24,0x04,0x20,0xC1,0xF8,0x00,0x40,0x02,0x00,0x30, // 'Q'
+	0xF8,0x84,0x82,0x82,0x82,0x8C,0xF0,0x90,0x88,0x84,0x82,0x81, // 'R'
+	0x38,0x8E,0x04,0x04,0x06,0x03,0x01,0x02,0x06,0x1B,0xC0, // 'S'
+	0xFF,0xC2,0x00,0x80,0x20,0x08,0x02,0x00,0x80,0x20,0x08,0x02,0x00,0x80,0x20, // 'T'
+	0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x42,0x3C, // 'U'
+	0x80,0x28,0x09,0x01,0x20,0x42,0x08,0x41,0x04,0x40,0x88,0x0A,0x01,0x40,0x30,0x02,0x00, // 'V'
+	0x80,0x81,0x40,0x81,0x41,0x81,0x41,0x42,0x22,0x42,0x22,0x22,0x22,0x24,0x14,0x24,0x14,0x14,0x14,0x18,0x08,0x18,0x08,0x08, // 'W'
+	0x80,0x50,0x22,0x10,0x44,0x12,0x03,0x00,0xC0,0x28,0x11,0x08,0x44,0x0B,0x01, // 'X'
+	0x80,0x50,0x24,0x10,0x84,0x12,0x05,0x00,0xC0,0x20,0x08,0x02,0x00,0x80,0x20, // 'Y'
+	0xFF,0x01,0x02,0x06,0x04,0x08,0x10,0x10,0x20,0x40,0x80,0xFF, // 'Z'
+	0xF2,0x49,0x24,0x92,0x49,0x38, // '['
+	0x82,0x08,0x10,0x40,0x82,0x04,0x10,0x40,0x82,0x04, // '\'
+	0xE4,0x92,0x49,0x24,0x92,0x78, // ']'
+	0x10,0x30,0x61,0x24,0x58,0x40, // '^'
+	0xFE, // '_'
+	0x89,0x80, // '`'
+	0x33,0x20,0x41,0x7E,0x18,0x63,0x74, // 'a'
+	0x81,0x02,0x04,0xCE,0x78,0x60,0xC1,0x83,0x07,0x0D,0xE0, // 'b'
+	0x38,0x8A,0x04,0x08,0x10,0x20,0x23,0x3C, // 'c'
+	0x02,0x04,0x09,0xD4,0x70,0x60,0xC1,0x83,0x05,0x19,0xD0, // 'd'
+	0x38,0x8A,0x0C,0x1F,0xF0,0x20,0x21,0x3C, // 'e'
+	0x1C,0x82,0x3F,0x20,0x82,0x08,0x20,0x82,0x08, // 'f'
+	0x3E,0x8A,0x14,0x24,0xCE,0x20,0x20,0xFF,0x06,0x0B,0xE0, // 'g'
+	0x81,0x02,0x04,0xCE,0x58,0x60,0xC1,0x83,0x06,0x0C,0x10, // 'h'
+	0xB2,0xAA,0xAA, // 'i'
+	0x23,0x02,0x22,0x22,0x22,0x22,0x22,0xE0, // 'j'
+	0x81,0x02,0x04,0x38,0x92,0x28,0x70,0xB1,0x32,0x34,0x30, // 'k'
+	0xAA,0xAA,0xAA, // 'l'
+	0x91,0x9D,0xCA,0x10,0xC2,0x18,0x43,0x08,0x61,0x0C,0x21,0x84,0x20, // 'm'
+	0x99,0xCB,0x0C,0x18,0x30,0x60,0xC1,0x82, // 'n'
+	0x38,0x8A,0x0C,0x18,0x30,0x60,0xA1,0x3C, // 'o'
+	0x99,0xCF,0x0C,0x18,0x30,0x60,0xE1,0xFD,0x02,0x04,0x00, // 'p'
+	0x3A,0x8E,0x0C,0x18,0x30,0x60,0xA3,0x3A,0x04,0x08,0x10, // 'q'
+	0x9F,0x31,0x08,0x42,0x10,0x80, // 'r'
+	0x36,0x61,0x07,0x04,0x31,0x70, // 's'
+	0x42,0x11,0xE4,0x21,0x08,0x42,0x12,0xE0, // 't'
+	0x83,0x06,0x0C,0x18,0x30,0x60,0xA3,0x3A, // 'u'
+	0x81,0x41,0x42,0x22,0x24,0x24,0x14,0x18,0x08, // 'v'
+	0x82,0x14,0x21,0x46,0x14,0x52,0x25,0x22,0x92,0x28,0xC1,0x0C,0x10,0x80, // 'w'
+	0x82,0x42,0x24,0x28,0x10,0x18,0x24,0x42,0xC3, // 'x'
+	0x81,0x41,0x42,0x22,0x22,0x24,0x14,0x18,0x08,0x10,0x10,0x30, // 'y'
+	0xFC,0x10,0x84,0x20,0x84,0x20,0xFC, // 'z'
+	0x74,0x44,0x44,0x4C,0x44,0x44,0x44,0x30, // '{'
+	0xFF,0xFF, // '|'
+	0xC2,0x22,0x44,0x43,0x44,0x22,0x24,0x80 // '}'
+};
+const GFXglyph Lato_Hairline_16Glyphs[] PROGMEM = {
+// bitmapOffset, width, height, xAdvance, xOffset, yOffset
+	  {     0,   1,   1,   7,    0,    0 }, // ' '
+	  {     1,   2,  12,   6,    1,  -12 }, // '!'
+	  {     4,   3,   5,   7,    1,  -12 }, // '"'
+	  {     6,   8,  12,  11,    1,  -12 }, // '#'
+	  {    18,   8,  16,  11,    1,  -14 }, // '$'
+	  {    34,  11,  12,  14,    1,  -12 }, // '%'
+	  {    51,  11,  12,  13,    1,  -12 }, // '&'
+	  {    68,   1,   5,   5,    1,  -12 }, // '''
+	  {    69,   3,  15,   6,    1,  -13 }, // '('
+	  {    75,   3,  15,   6,    1,  -13 }, // ')'
+	  {    81,   5,   5,   9,    1,  -12 }, // '*'
+	  {    85,   8,   8,  11,    1,  -10 }, // '+'
+	  {    93,   2,   4,   5,    1,   -2 }, // ','
+	  {    94,   4,   1,   8,    1,   -5 }, // '-'
+	  {    95,   2,   2,   6,    1,   -2 }, // '.'
+	  {    96,   6,  13,   9,    1,  -12 }, // '/'
+	  {   106,   8,  12,  11,    1,  -12 }, // '0'
+	  {   118,   6,  12,  11,    2,  -12 }, // '1'
+	  {   127,   8,  12,  11,    1,  -12 }, // '2'
+	  {   139,   8,  12,  11,    1,  -12 }, // '3'
+	  {   151,   9,  12,  11,    0,  -12 }, // '4'
+	  {   165,   7,  12,  11,    1,  -12 }, // '5'
+	  {   176,   8,  12,  11,    1,  -12 }, // '6'
+	  {   188,   8,  12,  11,    1,  -12 }, // '7'
+	  {   200,   8,  12,  11,    1,  -12 }, // '8'
+	  {   212,   8,  12,  11,    1,  -12 }, // '9'
+	  {   224,   2,   9,   6,    1,   -9 }, // ':'
+	  {   227,   2,  11,   6,    1,   -9 }, // ';'
+	  {   230,   7,   7,  11,    1,   -9 }, // '<'
+	  {   237,   8,   3,  11,    1,   -7 }, // '='
+	  {   240,   6,   7,  11,    2,   -9 }, // '>'
+	  {   246,   5,  12,   9,    1,  -12 }, // '?'
+	  {   254,  12,  13,  15,    1,  -11 }, // '@'
+	  {   274,  11,  12,  12,    0,  -12 }, // 'A'
+	  {   291,   7,  12,  12,    2,  -12 }, // 'B'
+	  {   302,  10,  12,  13,    1,  -12 }, // 'C'
+	  {   317,  10,  12,  14,    2,  -12 }, // 'D'
+	  {   332,   7,  12,  11,    2,  -12 }, // 'E'
+	  {   343,   7,  12,  11,    2,  -12 }, // 'F'
+	  {   354,  10,  12,  14,    1,  -12 }, // 'G'
+	  {   369,   9,  12,  14,    2,  -12 }, // 'H'
+	  {   383,   1,  12,   6,    2,  -12 }, // 'I'
+	  {   385,   5,  12,   9,    0,  -12 }, // 'J'
+	  {   393,   9,  12,  12,    2,  -12 }, // 'K'
+	  {   407,   6,  12,  10,    2,  -12 }, // 'L'
+	  {   416,  11,  12,  16,    2,  -12 }, // 'M'
+	  {   433,   9,  12,  14,    2,  -12 }, // 'N'
+	  {   447,  11,  12,  15,    1,  -12 }, // 'O'
+	  {   464,   7,  12,  11,    2,  -12 }, // 'P'
+	  {   475,  12,  15,  15,    1,  -12 }, // 'Q'
+	  {   498,   8,  12,  11,    2,  -12 }, // 'R'
+	  {   510,   7,  12,  10,    1,  -12 }, // 'S'
+	  {   521,  10,  12,  11,    0,  -12 }, // 'T'
+	  {   536,   8,  12,  14,    2,  -12 }, // 'U'
+	  {   548,  11,  12,  12,    0,  -12 }, // 'V'
+	  {   565,  16,  12,  18,    0,  -12 }, // 'W'
+	  {   589,  10,  12,  12,    0,  -12 }, // 'X'
+	  {   604,  10,  12,  11,    0,  -12 }, // 'Y'
+	  {   619,   8,  12,  12,    1,  -12 }, // 'Z'
+	  {   631,   3,  15,   7,    2,  -13 }, // '['
+	  {   637,   6,  13,   9,    1,  -12 }, // '\'
+	  {   647,   3,  15,   7,    1,  -13 }, // ']'
+	  {   653,   7,   6,  11,    1,  -12 }, // '^'
+	  {   659,   7,   1,   9,    0,    1 }, // '_'
+	  {   660,   3,   3,   8,    2,  -12 }, // '`'
+	  {   662,   6,   9,  10,    1,   -9 }, // 'a'
+	  {   669,   7,  12,  11,    1,  -12 }, // 'b'
+	  {   680,   7,   9,   9,    1,   -9 }, // 'c'
+	  {   688,   7,  12,  11,    1,  -12 }, // 'd'
+	  {   699,   7,   9,  10,    1,   -9 }, // 'e'
+	  {   707,   6,  12,   7,    0,  -12 }, // 'f'
+	  {   716,   7,  12,  10,    1,   -9 }, // 'g'
+	  {   727,   7,  12,  11,    1,  -12 }, // 'h'
+	  {   738,   2,  12,   5,    1,  -12 }, // 'i'
+	  {   741,   4,  15,   5,   -1,  -12 }, // 'j'
+	  {   749,   7,  12,   9,    1,  -12 }, // 'k'
+	  {   760,   2,  12,   5,    1,  -12 }, // 'l'
+	  {   763,  11,   9,  15,    1,   -9 }, // 'm'
+	  {   776,   7,   9,  11,    1,   -9 }, // 'n'
+	  {   784,   7,   9,  11,    1,   -9 }, // 'o'
+	  {   792,   7,  12,  11,    1,   -9 }, // 'p'
+	  {   803,   7,  12,  11,    1,   -9 }, // 'q'
+	  {   814,   5,   9,   8,    1,   -9 }, // 'r'
+	  {   820,   5,   9,   9,    1,   -9 }, // 's'
+	  {   826,   5,  12,   7,    1,  -12 }, // 't'
+	  {   834,   7,   9,  11,    1,   -9 }, // 'u'
+	  {   842,   8,   9,  10,    0,   -9 }, // 'v'
+	  {   851,  12,   9,  14,    0,   -9 }, // 'w'
+	  {   865,   8,   9,   9,    0,   -9 }, // 'x'
+	  {   874,   8,  12,  10,    0,   -9 }, // 'y'
+	  {   886,   6,   9,   9,    1,   -9 }, // 'z'
+	  {   893,   4,  15,   7,    1,  -13 }, // '{'
+	  {   901,   1,  16,   6,    2,  -13 }, // '|'
+	  {   903,   4,  15,   7,    1,  -13 } // '}'
+};
+const GFXfont Lato_Hairline_16 PROGMEM = {
+(uint8_t  *)Lato_Hairline_16Bitmaps,(GFXglyph *)Lato_Hairline_16Glyphs,0x20, 0x7E, 20};
+
+
+
+const uint8_t sourcesans8pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0x60, 0x99, 0x99, 0x12, 0x12, 0x3F, 0x24, 0x24, 0x24, 0xFC,
+  0x24, 0x48, 0x48, 0x10, 0x47, 0xB1, 0x83, 0x07, 0x06, 0x04, 0x18, 0x5E,
+  0x10, 0x60, 0x89, 0x10, 0x91, 0x09, 0x20, 0x92, 0xE9, 0x5B, 0x69, 0x10,
+  0x91, 0x11, 0x11, 0x11, 0x20, 0xE0, 0x30, 0x48, 0x48, 0x58, 0x70, 0x61,
+  0xF3, 0x9A, 0x8E, 0xCE, 0x79, 0xF0, 0x09, 0x29, 0x24, 0x92, 0x24, 0x88,
+  0x09, 0x22, 0x49, 0x24, 0xA4, 0xA0, 0x25, 0x5C, 0xE5, 0x00, 0x21, 0x09,
+  0xF2, 0x10, 0x80, 0xD8, 0xE0, 0xC0, 0x00, 0x44, 0x21, 0x08, 0x84, 0x22,
+  0x10, 0x84, 0x42, 0x00, 0x79, 0x28, 0x61, 0x86, 0x18, 0x61, 0x49, 0xE0,
+  0xE1, 0x08, 0x42, 0x10, 0x84, 0x27, 0xC0, 0x79, 0x98, 0x10, 0x20, 0xC1,
+  0x04, 0x10, 0x41, 0xFC, 0x79, 0x10, 0x43, 0x30, 0x30, 0x41, 0x8D, 0xE0,
+  0x18, 0x62, 0x8A, 0x4A, 0x2F, 0xC2, 0x08, 0x20, 0x7E, 0x08, 0x20, 0xF8,
+  0x30, 0x41, 0x8D, 0xE0, 0x39, 0x0C, 0x20, 0xBB, 0x18, 0x61, 0x4C, 0xE0,
+  0xFC, 0x20, 0x84, 0x10, 0x42, 0x08, 0x20, 0x80, 0x39, 0x14, 0x51, 0x39,
+  0x28, 0x61, 0xC5, 0xE0, 0x73, 0x28, 0x61, 0x8D, 0xD0, 0x43, 0x09, 0xC0,
+  0xC3, 0xC1, 0xC0, 0x00, 0x37, 0x20, 0xE0, 0x70, 0x40, 0xFC, 0x00, 0x00,
+  0xFC, 0x03, 0x03, 0x81, 0x1F, 0x88, 0x00, 0x74, 0x42, 0x11, 0x10, 0x84,
+  0x01, 0x08, 0x0F, 0x83, 0x06, 0x60, 0x24, 0x71, 0x89, 0x19, 0x11, 0x91,
+  0x19, 0x32, 0x8D, 0xC4, 0x00, 0x60, 0x01, 0xF0, 0x18, 0x18, 0x1C, 0x24,
+  0x24, 0x24, 0x66, 0x7E, 0x42, 0xC3, 0x81, 0xF9, 0x1A, 0x14, 0x28, 0xDF,
+  0x21, 0xC1, 0x83, 0x0F, 0xF0, 0x3C, 0xC7, 0x04, 0x08, 0x10, 0x20, 0x40,
+  0xC0, 0xC4, 0xF0, 0xF8, 0x86, 0x82, 0x81, 0x81, 0x81, 0x81, 0x81, 0x82,
+  0x86, 0xF8, 0xFE, 0x08, 0x20, 0x83, 0xE8, 0x20, 0x82, 0x0F, 0xC0, 0xFE,
+  0x08, 0x20, 0x83, 0xE8, 0x20, 0x82, 0x08, 0x00, 0x1E, 0x61, 0x40, 0x80,
+  0x80, 0x87, 0x81, 0x81, 0x41, 0x61, 0x1E, 0x81, 0x81, 0x81, 0x81, 0x81,
+  0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xE0, 0x08, 0x42, 0x10, 0x84,
+  0x21, 0x0C, 0x5C, 0x87, 0x1A, 0x64, 0x8B, 0x1E, 0x36, 0x44, 0x85, 0x0E,
+  0x08, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x3E, 0xC1, 0xE0, 0xF0, 0x74,
+  0x5A, 0x2D, 0x16, 0x53, 0x29, 0x88, 0xC4, 0x60, 0x20, 0x81, 0xC1, 0xE1,
+  0xA1, 0x91, 0x99, 0x89, 0x85, 0x87, 0x83, 0x81, 0x3C, 0x42, 0x42, 0x81,
+  0x81, 0x81, 0x81, 0x81, 0x42, 0x42, 0x3C, 0xFD, 0x0E, 0x0C, 0x18, 0x7F,
+  0x20, 0x40, 0x81, 0x02, 0x00, 0x3C, 0x42, 0x42, 0x81, 0x81, 0x81, 0x81,
+  0x81, 0xC3, 0x42, 0x3C, 0x18, 0x0C, 0x07, 0xFC, 0x86, 0x82, 0x82, 0x86,
+  0xFC, 0x88, 0x8C, 0x84, 0x86, 0x82, 0x3E, 0x63, 0x40, 0x40, 0x30, 0x1E,
+  0x07, 0x01, 0x01, 0xC3, 0x3C, 0xFE, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08,
+  0x10, 0x20, 0x40, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+  0x42, 0x3C, 0x81, 0x81, 0x42, 0x42, 0x42, 0x24, 0x24, 0x24, 0x38, 0x18,
+  0x18, 0x86, 0x18, 0x61, 0x86, 0x14, 0xD2, 0x4D, 0x24, 0x92, 0x49, 0x25,
+  0x8A, 0x38, 0xC3, 0x0C, 0x30, 0xC0, 0x43, 0x62, 0x24, 0x34, 0x18, 0x18,
+  0x1C, 0x24, 0x26, 0x42, 0x43, 0x82, 0x89, 0x13, 0x62, 0x85, 0x04, 0x08,
+  0x10, 0x20, 0x40, 0xFE, 0x08, 0x30, 0x41, 0x82, 0x08, 0x30, 0x41, 0x83,
+  0xF8, 0xF2, 0x49, 0x24, 0x92, 0x49, 0xC0, 0x81, 0x04, 0x10, 0x20, 0x82,
+  0x04, 0x10, 0x20, 0x82, 0x04, 0x00, 0xE4, 0x92, 0x49, 0x24, 0x93, 0xC0,
+  0x30, 0xC3, 0x12, 0x4A, 0x30, 0xFF, 0xCC, 0x78, 0x10, 0x4F, 0xC6, 0x18,
+  0xDD, 0x81, 0x02, 0x05, 0xEC, 0x50, 0x60, 0xC1, 0x83, 0x8A, 0xE0, 0x79,
+  0x08, 0x20, 0x82, 0x04, 0x1E, 0x04, 0x10, 0x5F, 0x46, 0x18, 0x61, 0x87,
+  0x37, 0x40, 0x39, 0x38, 0x7F, 0x82, 0x04, 0x0E, 0x34, 0x44, 0xE4, 0x44,
+  0x44, 0x44, 0x7F, 0x9A, 0x14, 0x2C, 0xCF, 0x20, 0x3E, 0x83, 0x07, 0x13,
+  0xC0, 0x82, 0x08, 0x2E, 0xC6, 0x18, 0x61, 0x86, 0x18, 0x40, 0xBF, 0xC0,
+  0x20, 0x92, 0x49, 0x24, 0x9E, 0x82, 0x08, 0x22, 0x9A, 0xCA, 0x34, 0x9A,
+  0x28, 0xC0, 0xAA, 0xAA, 0xAC, 0xB9, 0xD8, 0xC6, 0x10, 0xC2, 0x18, 0x43,
+  0x08, 0x61, 0x0C, 0x21, 0xBB, 0x18, 0x61, 0x86, 0x18, 0x61, 0x38, 0x8A,
+  0x0C, 0x18, 0x30, 0x51, 0x1C, 0xBD, 0x8A, 0x0C, 0x18, 0x30, 0x71, 0x5C,
+  0x81, 0x02, 0x00, 0x7D, 0x18, 0x61, 0x86, 0x1C, 0xDD, 0x04, 0x10, 0x40,
+  0xBC, 0x88, 0x88, 0x88, 0x74, 0x20, 0xC3, 0x86, 0x3E, 0x44, 0xF4, 0x44,
+  0x44, 0x43, 0x86, 0x18, 0x61, 0x86, 0x18, 0xDD, 0xC2, 0x8D, 0x13, 0x22,
+  0x45, 0x0E, 0x0C, 0x86, 0x30, 0xC5, 0x29, 0x25, 0x24, 0x94, 0x52, 0x8A,
+  0x61, 0x8C, 0x44, 0xC8, 0xA0, 0xC3, 0x85, 0x11, 0x23, 0xC2, 0x89, 0x11,
+  0x22, 0x87, 0x06, 0x08, 0x10, 0x61, 0x80, 0x7C, 0x30, 0x84, 0x30, 0x84,
+  0x3F, 0x69, 0x24, 0x94, 0x49, 0x24, 0xC0, 0xFF, 0xFF, 0xC9, 0x24, 0x91,
+  0x49, 0x25, 0x80, 0xE0, 0x70 };
+
+const GFXglyph sourcesans8pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   3,    0,    0 },   // 0x20 ' '
+  {     1,   1,  11,   5,    1,  -10 },   // 0x21 '!'
+  {     3,   4,   4,   7,    1,  -10 },   // 0x22 '"'
+  {     5,   8,  10,   8,    0,   -9 },   // 0x23 '#'
+  {    15,   6,  13,   8,    1,  -11 },   // 0x24 '$'
+  {    25,  12,  11,  13,    1,  -10 },   // 0x25 '%'
+  {    42,   8,  11,  10,    1,  -10 },   // 0x26 '&'
+  {    53,   1,   4,   4,    1,  -10 },   // 0x27 '''
+  {    54,   3,  15,   5,    1,  -11 },   // 0x28 '('
+  {    60,   3,  15,   5,    0,  -11 },   // 0x29 ')'
+  {    66,   5,   5,   7,    1,  -11 },   // 0x2A '*'
+  {    70,   5,   7,   8,    1,   -8 },   // 0x2B '+'
+  {    75,   2,   4,   4,    1,    0 },   // 0x2C ','
+  {    76,   3,   1,   5,    1,   -4 },   // 0x2D '-'
+  {    77,   1,   2,   4,    1,   -1 },   // 0x2E '.'
+  {    78,   5,  15,   6,    0,  -11 },   // 0x2F '/'
+  {    88,   6,  10,   8,    1,   -9 },   // 0x30 '0'
+  {    96,   5,  10,   8,    2,   -9 },   // 0x31 '1'
+  {   103,   7,  10,   8,    0,   -9 },   // 0x32 '2'
+  {   112,   6,  10,   8,    1,   -9 },   // 0x33 '3'
+  {   120,   6,  10,   8,    1,   -9 },   // 0x34 '4'
+  {   128,   6,  10,   8,    1,   -9 },   // 0x35 '5'
+  {   136,   6,  10,   8,    1,   -9 },   // 0x36 '6'
+  {   144,   6,  10,   8,    1,   -9 },   // 0x37 '7'
+  {   152,   6,  10,   8,    1,   -9 },   // 0x38 '8'
+  {   160,   6,  10,   8,    1,   -9 },   // 0x39 '9'
+  {   168,   1,   8,   4,    1,   -7 },   // 0x3A ':'
+  {   169,   1,  11,   4,    1,   -7 },   // 0x3B ';'
+  {   171,   6,   7,   8,    1,   -8 },   // 0x3C '<'
+  {   177,   6,   5,   8,    1,   -7 },   // 0x3D '='
+  {   181,   6,   7,   8,    1,   -8 },   // 0x3E '>'
+  {   187,   5,  11,   7,    1,  -10 },   // 0x3F '?'
+  {   194,  12,  12,  14,    1,   -9 },   // 0x40 '@'
+  {   212,   8,  11,   9,    0,  -10 },   // 0x41 'A'
+  {   223,   7,  11,   9,    1,  -10 },   // 0x42 'B'
+  {   233,   7,  11,   9,    1,  -10 },   // 0x43 'C'
+  {   243,   8,  11,  10,    1,  -10 },   // 0x44 'D'
+  {   254,   6,  11,   8,    1,  -10 },   // 0x45 'E'
+  {   263,   6,  11,   8,    1,  -10 },   // 0x46 'F'
+  {   272,   8,  11,  10,    1,  -10 },   // 0x47 'G'
+  {   283,   8,  11,  10,    1,  -10 },   // 0x48 'H'
+  {   294,   1,  11,   4,    1,  -10 },   // 0x49 'I'
+  {   296,   5,  11,   8,    1,  -10 },   // 0x4A 'J'
+  {   303,   7,  11,   9,    1,  -10 },   // 0x4B 'K'
+  {   313,   5,  11,   8,    1,  -10 },   // 0x4C 'L'
+  {   320,   9,  11,  12,    1,  -10 },   // 0x4D 'M'
+  {   333,   8,  11,  10,    1,  -10 },   // 0x4E 'N'
+  {   344,   8,  11,  11,    1,  -10 },   // 0x4F 'O'
+  {   355,   7,  11,   9,    1,  -10 },   // 0x50 'P'
+  {   365,   8,  14,  11,    1,  -10 },   // 0x51 'Q'
+  {   379,   8,  11,   9,    1,  -10 },   // 0x52 'R'
+  {   390,   8,  11,   9,    0,  -10 },   // 0x53 'S'
+  {   401,   7,  11,   9,    1,  -10 },   // 0x54 'T'
+  {   411,   8,  11,  10,    1,  -10 },   // 0x55 'U'
+  {   422,   8,  11,   8,    0,  -10 },   // 0x56 'V'
+  {   433,  12,  11,  13,    0,  -10 },   // 0x57 'W'
+  {   450,   8,  11,   8,    0,  -10 },   // 0x58 'X'
+  {   461,   7,  11,   8,    0,  -10 },   // 0x59 'Y'
+  {   471,   7,  11,   9,    1,  -10 },   // 0x5A 'Z'
+  {   481,   3,  14,   5,    2,  -11 },   // 0x5B '['
+  {   487,   6,  14,   6,    0,  -10 },   // 0x5C '\'
+  {   498,   3,  14,   5,    1,  -11 },   // 0x5D ']'
+  {   504,   6,   6,   8,    1,  -10 },   // 0x5E '^'
+  {   509,   8,   1,   8,    0,    2 },   // 0x5F '_'
+  {   510,   3,   2,   9,    3,  -10 },   // 0x60 '`'
+  {   511,   6,   8,   8,    1,   -7 },   // 0x61 'a'
+  {   517,   7,  11,   9,    1,  -10 },   // 0x62 'b'
+  {   527,   6,   8,   7,    1,   -7 },   // 0x63 'c'
+  {   533,   6,  11,   9,    1,  -10 },   // 0x64 'd'
+  {   542,   6,   8,   8,    1,   -7 },   // 0x65 'e'
+  {   548,   4,  12,   5,    1,  -11 },   // 0x66 'f'
+  {   554,   7,  12,   8,    1,   -7 },   // 0x67 'g'
+  {   565,   6,  11,   9,    1,  -10 },   // 0x68 'h'
+  {   574,   1,  10,   4,    1,   -9 },   // 0x69 'i'
+  {   576,   3,  13,   4,   -1,   -9 },   // 0x6A 'j'
+  {   581,   6,  11,   8,    1,  -10 },   // 0x6B 'k'
+  {   590,   2,  11,   4,    1,  -10 },   // 0x6C 'l'
+  {   593,  11,   8,  13,    1,   -7 },   // 0x6D 'm'
+  {   604,   6,   8,   9,    1,   -7 },   // 0x6E 'n'
+  {   610,   7,   8,   9,    1,   -7 },   // 0x6F 'o'
+  {   617,   7,  11,   9,    1,   -7 },   // 0x70 'p'
+  {   627,   6,  11,   9,    1,   -7 },   // 0x71 'q'
+  {   636,   4,   8,   6,    1,   -7 },   // 0x72 'r'
+  {   640,   5,   8,   7,    1,   -7 },   // 0x73 's'
+  {   645,   4,  10,   5,    1,   -9 },   // 0x74 't'
+  {   650,   6,   8,   9,    1,   -7 },   // 0x75 'u'
+  {   656,   7,   8,   7,    0,   -7 },   // 0x76 'v'
+  {   663,  11,   8,  11,    0,   -7 },   // 0x77 'w'
+  {   674,   7,   8,   7,    0,   -7 },   // 0x78 'x'
+  {   681,   7,  11,   7,    0,   -7 },   // 0x79 'y'
+  {   691,   6,   8,   7,    0,   -7 },   // 0x7A 'z'
+  {   697,   3,  14,   5,    1,  -11 },   // 0x7B '{'
+  {   703,   1,  16,   4,    1,  -11 },   // 0x7C '|'
+  {   705,   3,  14,   5,    1,  -11 },   // 0x7D '}'
+  {   711,   6,   2,   8,    1,   -5 } }; // 0x7E '~'
+
+const GFXfont sourcesans8pt7b PROGMEM = {
+  (uint8_t  *)sourcesans8pt7bBitmaps,
+  (GFXglyph *)sourcesans8pt7bGlyphs,
+  0x20, 0x7E, 21 };
+
+
+const uint8_t sourcesans10pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xFF, 0xCF, 0xC0, 0xDE, 0xF7, 0xBD, 0x80, 0x22, 0x22, 0xFF,
+  0xFF, 0x22, 0x22, 0xFF, 0xFF, 0x44, 0x44, 0x44, 0x44, 0x30, 0x61, 0xF6,
+  0x2C, 0x18, 0x38, 0x38, 0x1C, 0x1C, 0x18, 0x38, 0xFF, 0x9E, 0x18, 0x78,
+  0x10, 0xFC, 0x20, 0xCC, 0x20, 0xCC, 0x40, 0xCC, 0x9C, 0xCC, 0xBE, 0xCD,
+  0x77, 0x7A, 0x63, 0x32, 0x63, 0x04, 0x63, 0x08, 0x63, 0x08, 0x7F, 0x10,
+  0x3E, 0x1E, 0x03, 0xE0, 0xCC, 0x19, 0x83, 0x60, 0x38, 0x0E, 0x1B, 0x62,
+  0xC6, 0xD8, 0x73, 0x8F, 0x3F, 0xB3, 0xC2, 0xFF, 0xC0, 0x11, 0x22, 0x64,
+  0xCC, 0xCC, 0xCC, 0xC4, 0x62, 0x21, 0x00, 0x88, 0x44, 0x62, 0x33, 0x33,
+  0x33, 0x32, 0x64, 0x48, 0x00, 0x10, 0x21, 0xF1, 0xC2, 0x88, 0x80, 0x30,
+  0xC3, 0x3F, 0xFC, 0xC3, 0x0C, 0x33, 0x36, 0xC0, 0xFF, 0xFC, 0x00, 0x03,
+  0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x18, 0x18, 0x18, 0x30, 0x30, 0x30,
+  0x60, 0x60, 0x60, 0xC0, 0x00, 0x3C, 0x7E, 0x66, 0xC3, 0xC3, 0xC3, 0xC3,
+  0xC3, 0xC3, 0xC3, 0xC3, 0x66, 0x7E, 0x3C, 0x71, 0xC3, 0x0C, 0x30, 0xC3,
+  0x0C, 0x30, 0xC3, 0x3F, 0xFC, 0x3C, 0x3F, 0x31, 0xC0, 0x60, 0x30, 0x18,
+  0x0C, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0xFC, 0x1E, 0x1F, 0x98,
+  0xE0, 0x30, 0x18, 0x1C, 0x38, 0x1E, 0x03, 0x80, 0xC0, 0x60, 0x3C, 0x31,
+  0xF0, 0x06, 0x0E, 0x16, 0x16, 0x26, 0x46, 0x86, 0xFF, 0xFF, 0x06, 0x06,
+  0x06, 0x06, 0x3F, 0x18, 0x0C, 0x07, 0xC3, 0xF1, 0x1C, 0x06, 0x03, 0x01,
+  0x80, 0xF0, 0xC7, 0x80, 0x1F, 0x18, 0x98, 0x18, 0x0C, 0xE6, 0xFB, 0x8F,
+  0x83, 0xC1, 0xF0, 0xD8, 0xEF, 0xE1, 0xE0, 0xFE, 0x0C, 0x10, 0x60, 0x83,
+  0x06, 0x08, 0x30, 0x60, 0xC1, 0x80, 0x1C, 0x3E, 0x63, 0x63, 0x63, 0x32,
+  0x1C, 0x2E, 0xC3, 0xC3, 0xC3, 0xE3, 0x7E, 0x3C, 0x3C, 0x7E, 0xE6, 0xC3,
+  0xC3, 0xC3, 0xE7, 0x7F, 0x3B, 0x03, 0x02, 0x06, 0x44, 0x78, 0xFC, 0x03,
+  0xF0, 0xFC, 0x00, 0xFF, 0x80, 0x00, 0x07, 0x1C, 0xF0, 0xC0, 0x70, 0x1E,
+  0x03, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xE0, 0x38, 0x0F, 0x03,
+  0x0E, 0x70, 0xC0, 0x7D, 0x0C, 0x18, 0x30, 0xC3, 0x04, 0x18, 0x00, 0x00,
+  0xC1, 0x83, 0x00, 0x03, 0xF0, 0x0F, 0xF8, 0x1C, 0x1C, 0x38, 0x06, 0x70,
+  0x06, 0x63, 0x83, 0xE7, 0xA3, 0xC6, 0x63, 0xCC, 0x63, 0xCC, 0x63, 0xCC,
+  0x66, 0xCF, 0xFE, 0xE7, 0x38, 0x70, 0x00, 0x38, 0x00, 0x1F, 0xE0, 0x07,
+  0xC0, 0x0E, 0x01, 0x40, 0x28, 0x0D, 0x81, 0xB0, 0x22, 0x0C, 0x61, 0x8C,
+  0x3F, 0x8F, 0xF9, 0x83, 0x30, 0x6C, 0x06, 0xFC, 0x7F, 0xB0, 0xD8, 0x6C,
+  0x37, 0xE3, 0xFD, 0x87, 0xC1, 0xE0, 0xF0, 0xFF, 0xEF, 0xE0, 0x0F, 0x0F,
+  0xE7, 0x09, 0x80, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x18, 0x07, 0x0C,
+  0xFE, 0x0F, 0x00, 0xFE, 0x3F, 0xCC, 0x3B, 0x07, 0xC0, 0xF0, 0x3C, 0x0F,
+  0x03, 0xC0, 0xF0, 0x6C, 0x3B, 0xFC, 0xFC, 0x00, 0xFF, 0x83, 0x06, 0x0C,
+  0x18, 0x3F, 0x60, 0xC1, 0x83, 0x06, 0x0F, 0xE0, 0xFF, 0x83, 0x06, 0x0C,
+  0x18, 0x3F, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x00, 0x1F, 0x0F, 0xE7, 0x0B,
+  0x80, 0xC0, 0x30, 0x0C, 0x3F, 0x03, 0xC0, 0xD8, 0x37, 0x0C, 0xFF, 0x1F,
+  0x00, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0x03, 0xC0,
+  0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0x03,
+  0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xC7, 0x7E, 0x3C, 0xC1,
+  0xB0, 0xCC, 0x63, 0x18, 0xCC, 0x37, 0x0F, 0xC3, 0x98, 0xC2, 0x30, 0xCC,
+  0x1B, 0x06, 0xC0, 0xC0, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1,
+  0x83, 0x06, 0x0F, 0xE0, 0xE0, 0xFC, 0x1F, 0x83, 0xF8, 0x7D, 0x17, 0xA2,
+  0xF4, 0x5E, 0x53, 0xCA, 0x79, 0x4F, 0x11, 0xE2, 0x3C, 0x06, 0xC0, 0xF8,
+  0x3F, 0x0F, 0x43, 0xD8, 0xF2, 0x3C, 0xCF, 0x13, 0xC6, 0xF0, 0xBC, 0x3F,
+  0x07, 0xC0, 0xC0, 0x1F, 0x83, 0xFC, 0x70, 0xE6, 0x06, 0xC0, 0x3C, 0x03,
+  0xC0, 0x3C, 0x03, 0xC0, 0x36, 0x06, 0x70, 0xE3, 0xFC, 0x1F, 0x80, 0xFE,
+  0x7F, 0xB0, 0xF8, 0x3C, 0x1E, 0x1F, 0xF9, 0x80, 0xC0, 0x60, 0x30, 0x18,
+  0x0C, 0x00, 0x0F, 0x03, 0xFC, 0x70, 0xE6, 0x06, 0xC0, 0x3C, 0x03, 0xC0,
+  0x3C, 0x03, 0xC0, 0x3C, 0x03, 0x60, 0x67, 0x0E, 0x1F, 0x80, 0x60, 0x03,
+  0x00, 0x1F, 0xFE, 0x7F, 0xB0, 0xF8, 0x3C, 0x1E, 0x1B, 0xF9, 0x98, 0xC6,
+  0x63, 0x30, 0xD8, 0x6C, 0x18, 0x1F, 0x0F, 0xE7, 0x09, 0x80, 0x60, 0x0E,
+  0x00, 0xF0, 0x0E, 0x00, 0xC0, 0x36, 0x1D, 0xFE, 0x1F, 0x00, 0xFF, 0x18,
+  0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xC0,
+  0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x36,
+  0x19, 0xFE, 0x3F, 0x00, 0xC0, 0x68, 0x0D, 0x83, 0x30, 0x62, 0x0C, 0x63,
+  0x0C, 0x60, 0x8C, 0x19, 0x03, 0x60, 0x2C, 0x07, 0x00, 0xE0, 0xC1, 0x03,
+  0xC1, 0x83, 0x43, 0x86, 0x62, 0x86, 0x62, 0x86, 0x62, 0x46, 0x66, 0x4C,
+  0x24, 0x4C, 0x34, 0x4C, 0x34, 0x2C, 0x3C, 0x38, 0x38, 0x38, 0x18, 0x38,
+  0x60, 0x98, 0x63, 0x10, 0x4C, 0x1A, 0x03, 0x80, 0xC0, 0x78, 0x12, 0x0C,
+  0xC2, 0x19, 0x86, 0x40, 0xC0, 0xC0, 0xD8, 0x26, 0x18, 0x84, 0x33, 0x04,
+  0x81, 0xE0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x00, 0x7F, 0x81,
+  0x80, 0xC0, 0xC0, 0x60, 0x60, 0x60, 0x30, 0x30, 0x10, 0x18, 0x18, 0x0F,
+  0xF8, 0xFB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB6, 0xE0, 0x80, 0x80, 0x40, 0x40,
+  0x20, 0x20, 0x10, 0x10, 0x10, 0x08, 0x08, 0x04, 0x04, 0x04, 0x02, 0x02,
+  0x01, 0xED, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0xE0, 0x18, 0x38, 0x24, 0x24,
+  0x66, 0x42, 0x42, 0xFF, 0xFF, 0xF0, 0xC8, 0x80, 0x3C, 0x7E, 0x03, 0x1F,
+  0x7F, 0xE3, 0xC3, 0xC7, 0xFF, 0x7B, 0xC0, 0xC0, 0xC0, 0xC0, 0xDC, 0xE6,
+  0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xE6, 0xFC, 0x1E, 0x3F, 0x60, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xC0, 0x61, 0x1E, 0x01, 0x80, 0xC0, 0x60, 0x33, 0xFB,
+  0x1D, 0x87, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x36, 0x39, 0xEC, 0x3E, 0x3F,
+  0xB0, 0x7F, 0xFF, 0xFE, 0x03, 0x00, 0xC2, 0x7F, 0x0F, 0x00, 0x3D, 0xF6,
+  0x18, 0x63, 0xCF, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x00, 0x3F, 0x9F,
+  0xEE, 0x63, 0x0C, 0xC3, 0x39, 0xC7, 0xE3, 0x70, 0xFF, 0x9F, 0xFC, 0x0F,
+  0x07, 0xFF, 0x9F, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xDE, 0xE3, 0xC3, 0xC3,
+  0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xF0, 0xFF, 0xFF, 0xF0, 0x33, 0x00,
+  0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0xFE, 0xC0, 0xC0, 0xC0, 0xC0, 0xC3,
+  0xC6, 0xCC, 0xD8, 0xD8, 0xFC, 0xE4, 0xC6, 0xC3, 0xC3, 0xDB, 0x6D, 0xB6,
+  0xDB, 0x6C, 0xC0, 0xDE, 0x77, 0x3C, 0xF0, 0xC7, 0x86, 0x3C, 0x31, 0xE1,
+  0x8F, 0x0C, 0x78, 0x63, 0xC3, 0x1E, 0x18, 0xC0, 0xDE, 0xE3, 0xC3, 0xC3,
+  0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x1C, 0x3F, 0x98, 0xD8, 0x3C, 0x1E,
+  0x0F, 0x07, 0x83, 0x63, 0x1F, 0x00, 0xDC, 0xE6, 0xC3, 0xC3, 0xC3, 0xC3,
+  0xC3, 0xC3, 0xE6, 0xFC, 0xC0, 0xC0, 0xC0, 0xC0, 0x3D, 0xB1, 0xD8, 0x78,
+  0x3C, 0x1E, 0x0F, 0x07, 0x83, 0x63, 0x9E, 0xC0, 0x60, 0x30, 0x18, 0x0C,
+  0xDF, 0xEE, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x00, 0x79, 0xFB, 0x16, 0x07,
+  0x03, 0x81, 0xC3, 0xFC, 0xF0, 0x61, 0x8F, 0xBE, 0x61, 0x86, 0x18, 0x61,
+  0x87, 0xCF, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC7, 0x7B,
+  0xC1, 0xA0, 0xD8, 0x4C, 0x62, 0x31, 0x90, 0x58, 0x2C, 0x1C, 0x06, 0x00,
+  0xC7, 0x0F, 0x1C, 0x36, 0x78, 0x99, 0xA6, 0x66, 0x98, 0x9A, 0x43, 0x6D,
+  0x0F, 0x14, 0x3C, 0x60, 0x71, 0x80, 0x63, 0x31, 0x8D, 0x82, 0x81, 0xC0,
+  0xE0, 0xD0, 0x4C, 0x63, 0x20, 0x80, 0xC1, 0xE0, 0x90, 0xCC, 0x62, 0x21,
+  0x30, 0xD8, 0x28, 0x1C, 0x0E, 0x06, 0x07, 0x0F, 0x07, 0x00, 0xFF, 0xFC,
+  0x30, 0x41, 0x06, 0x18, 0x20, 0xFF, 0xFC, 0x19, 0x8C, 0x63, 0x18, 0xDC,
+  0xE1, 0x8C, 0x63, 0x18, 0xC6, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3,
+  0x18, 0xC6, 0x31, 0x87, 0x3B, 0x18, 0xC6, 0x31, 0x8C, 0xC0, 0x60, 0xF1,
+  0x8F, 0x06 };
+
+const GFXglyph sourcesans10pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   4,    0,    0 },   // 0x20 ' '
+  {     1,   2,  13,   6,    2,  -12 },   // 0x21 '!'
+  {     5,   5,   5,   9,    2,  -13 },   // 0x22 '"'
+  {     9,   8,  12,  10,    1,  -11 },   // 0x23 '#'
+  {    21,   7,  16,  10,    2,  -14 },   // 0x24 '$'
+  {    35,  16,  13,  16,    1,  -12 },   // 0x25 '%'
+  {    61,  11,  13,  12,    1,  -12 },   // 0x26 '&'
+  {    79,   2,   5,   5,    2,  -13 },   // 0x27 '''
+  {    81,   4,  19,   6,    2,  -14 },   // 0x28 '('
+  {    91,   4,  19,   6,    1,  -14 },   // 0x29 ')'
+  {   101,   7,   6,   8,    1,  -13 },   // 0x2A '*'
+  {   107,   6,   8,  10,    2,  -10 },   // 0x2B '+'
+  {   113,   4,   5,   5,    1,   -1 },   // 0x2C ','
+  {   116,   4,   2,   6,    1,   -5 },   // 0x2D '-'
+  {   117,   2,   3,   5,    1,   -2 },   // 0x2E '.'
+  {   118,   8,  19,   7,    0,  -14 },   // 0x2F '/'
+  {   137,   8,  14,  10,    1,  -13 },   // 0x30 '0'
+  {   151,   6,  13,  10,    3,  -12 },   // 0x31 '1'
+  {   161,   9,  14,  10,    1,  -13 },   // 0x32 '2'
+  {   177,   9,  14,  10,    0,  -13 },   // 0x33 '3'
+  {   193,   8,  13,  10,    1,  -12 },   // 0x34 '4'
+  {   206,   9,  12,  10,    0,  -11 },   // 0x35 '5'
+  {   220,   9,  13,  10,    1,  -12 },   // 0x36 '6'
+  {   235,   7,  12,  10,    2,  -11 },   // 0x37 '7'
+  {   246,   8,  14,  10,    1,  -13 },   // 0x38 '8'
+  {   260,   8,  14,  10,    1,  -13 },   // 0x39 '9'
+  {   274,   2,  10,   5,    1,   -9 },   // 0x3A ':'
+  {   277,   2,  13,   4,    1,   -9 },   // 0x3B ';'
+  {   281,   8,   8,  10,    1,  -10 },   // 0x3C '<'
+  {   289,   8,   6,  10,    1,   -9 },   // 0x3D '='
+  {   295,   8,   8,  10,    1,  -10 },   // 0x3E '>'
+  {   303,   7,  13,   8,    1,  -12 },   // 0x3F '?'
+  {   315,  16,  17,  17,    1,  -13 },   // 0x40 '@'
+  {   349,  11,  13,  11,    0,  -12 },   // 0x41 'A'
+  {   367,   9,  13,  12,    2,  -12 },   // 0x42 'B'
+  {   382,  10,  13,  11,    1,  -12 },   // 0x43 'C'
+  {   399,  10,  13,  12,    2,  -12 },   // 0x44 'D'
+  {   416,   7,  13,  11,    2,  -12 },   // 0x45 'E'
+  {   428,   7,  13,  10,    2,  -12 },   // 0x46 'F'
+  {   440,  10,  13,  12,    1,  -12 },   // 0x47 'G'
+  {   457,  10,  13,  13,    2,  -12 },   // 0x48 'H'
+  {   474,   2,  13,   5,    2,  -12 },   // 0x49 'I'
+  {   478,   8,  13,  10,    0,  -12 },   // 0x4A 'J'
+  {   491,  10,  13,  12,    2,  -12 },   // 0x4B 'K'
+  {   508,   7,  13,  10,    2,  -12 },   // 0x4C 'L'
+  {   520,  11,  13,  15,    2,  -12 },   // 0x4D 'M'
+  {   538,  10,  13,  13,    2,  -12 },   // 0x4E 'N'
+  {   555,  12,  13,  13,    1,  -12 },   // 0x4F 'O'
+  {   575,   9,  13,  12,    2,  -12 },   // 0x50 'P'
+  {   590,  12,  16,  13,    1,  -12 },   // 0x51 'Q'
+  {   614,   9,  13,  12,    2,  -12 },   // 0x52 'R'
+  {   629,  10,  13,  11,    0,  -12 },   // 0x53 'S'
+  {   646,   8,  13,  11,    2,  -12 },   // 0x54 'T'
+  {   659,  10,  13,  13,    2,  -12 },   // 0x55 'U'
+  {   676,  11,  13,  10,    0,  -12 },   // 0x56 'V'
+  {   694,  16,  13,  16,    0,  -12 },   // 0x57 'W'
+  {   720,  10,  13,  10,    0,  -12 },   // 0x58 'X'
+  {   737,  10,  13,  10,    0,  -12 },   // 0x59 'Y'
+  {   754,   9,  13,  11,    1,  -12 },   // 0x5A 'Z'
+  {   769,   3,  17,   6,    2,  -13 },   // 0x5B '['
+  {   776,   8,  17,   7,    0,  -13 },   // 0x5C '\'
+  {   793,   3,  17,   6,    1,  -13 },   // 0x5D ']'
+  {   800,   8,   7,  10,    1,  -12 },   // 0x5E '^'
+  {   807,  10,   2,  10,    0,    2 },   // 0x5F '_'
+  {   810,   3,   3,  11,    3,  -13 },   // 0x60 '`'
+  {   812,   8,  10,  10,    1,   -9 },   // 0x61 'a'
+  {   822,   8,  14,  11,    2,  -13 },   // 0x62 'b'
+  {   836,   8,  10,   9,    1,   -9 },   // 0x63 'c'
+  {   846,   9,  14,  11,    1,  -13 },   // 0x64 'd'
+  {   862,   9,  10,  10,    1,   -9 },   // 0x65 'e'
+  {   874,   6,  15,   6,    1,  -14 },   // 0x66 'f'
+  {   886,  10,  14,  10,    1,   -9 },   // 0x67 'g'
+  {   904,   8,  14,  11,    2,  -13 },   // 0x68 'h'
+  {   918,   2,  14,   5,    1,  -13 },   // 0x69 'i'
+  {   922,   4,  18,   5,    0,  -13 },   // 0x6A 'j'
+  {   931,   8,  14,  10,    2,  -13 },   // 0x6B 'k'
+  {   945,   3,  14,   5,    2,  -13 },   // 0x6C 'l'
+  {   951,  13,  10,  17,    2,   -9 },   // 0x6D 'm'
+  {   968,   8,  10,  11,    2,   -9 },   // 0x6E 'n'
+  {   978,   9,  10,  11,    1,   -9 },   // 0x6F 'o'
+  {   990,   8,  14,  11,    2,   -9 },   // 0x70 'p'
+  {  1004,   9,  14,  11,    1,   -9 },   // 0x71 'q'
+  {  1020,   6,  10,   7,    2,   -9 },   // 0x72 'r'
+  {  1028,   7,  10,   8,    1,   -9 },   // 0x73 's'
+  {  1037,   6,  12,   7,    1,  -11 },   // 0x74 't'
+  {  1046,   8,  10,  11,    2,   -9 },   // 0x75 'u'
+  {  1056,   9,  10,   9,    0,   -9 },   // 0x76 'v'
+  {  1068,  14,  10,  14,    0,   -9 },   // 0x77 'w'
+  {  1086,   9,  10,   9,    0,   -9 },   // 0x78 'x'
+  {  1098,   9,  14,   9,    1,   -9 },   // 0x79 'y'
+  {  1114,   7,  10,   8,    1,   -9 },   // 0x7A 'z'
+  {  1123,   5,  17,   6,    0,  -13 },   // 0x7B '{'
+  {  1134,   2,  20,   5,    2,  -14 },   // 0x7C '|'
+  {  1139,   5,  17,   6,    2,  -13 },   // 0x7D '}'
+  {  1150,   8,   4,  10,    1,   -8 } }; // 0x7E '~'
+
+const GFXfont sourcesans10pt7b PROGMEM = {
+  (uint8_t  *)sourcesans10pt7bBitmaps,
+  (GFXglyph *)sourcesans10pt7bGlyphs,
+  0x20, 0x7E, 26 };
+
+const uint8_t sourcesans9pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xFF, 0x0F, 0xDE, 0xF7, 0xBD, 0x80, 0x24, 0x48, 0x97, 0xF2,
+  0x4D, 0xBF, 0xA4, 0x48, 0x91, 0x20, 0x18, 0x31, 0xF7, 0x2C, 0x18, 0x18,
+  0x0C, 0x0E, 0x0C, 0x1C, 0x37, 0xC3, 0x00, 0x78, 0x43, 0x21, 0x0C, 0xC8,
+  0x33, 0x20, 0xCD, 0x03, 0x35, 0xE7, 0xAC, 0xC1, 0x33, 0x04, 0xCC, 0x23,
+  0x30, 0x84, 0x84, 0x1E, 0x1E, 0x06, 0x60, 0xCC, 0x19, 0x81, 0x60, 0x30,
+  0x1E, 0x1F, 0x22, 0xC2, 0xD8, 0x71, 0x8F, 0x1F, 0x30, 0xFF, 0xC0, 0x12,
+  0x26, 0x4C, 0xCC, 0xCC, 0xC4, 0x62, 0x21, 0x84, 0x46, 0x23, 0x33, 0x33,
+  0x32, 0x64, 0x48, 0x21, 0x3E, 0xED, 0x80, 0x30, 0xC3, 0x3F, 0x30, 0xC3,
+  0x00, 0x33, 0x64, 0xF0, 0xF0, 0x00, 0x08, 0x10, 0x20, 0x81, 0x02, 0x08,
+  0x10, 0x40, 0x81, 0x04, 0x08, 0x20, 0x00, 0x3C, 0x66, 0x42, 0xC3, 0xC3,
+  0xC3, 0xC3, 0xC3, 0xC3, 0x42, 0x66, 0x3C, 0x71, 0x8C, 0x63, 0x18, 0xC6,
+  0x31, 0xBE, 0x78, 0x8C, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x18, 0x30,
+  0x20, 0x7F, 0x3C, 0x66, 0x03, 0x03, 0x03, 0x06, 0x0C, 0x03, 0x03, 0x03,
+  0xC6, 0x7C, 0x0C, 0x18, 0xF1, 0x64, 0xD1, 0xA3, 0x7F, 0x0C, 0x18, 0x30,
+  0x7E, 0x60, 0x60, 0x40, 0xFC, 0x46, 0x03, 0x03, 0x03, 0xC6, 0x7C, 0x3E,
+  0x62, 0x60, 0xC0, 0xDC, 0xE7, 0xC3, 0xC3, 0x43, 0x66, 0x3C, 0xFC, 0x21,
+  0x84, 0x30, 0xC2, 0x18, 0x61, 0x86, 0x00, 0x3E, 0x63, 0x63, 0x63, 0x32,
+  0x1C, 0x2E, 0xC3, 0xC3, 0xC3, 0x63, 0x3C, 0x3C, 0x66, 0xC6, 0xC3, 0xC3,
+  0xC3, 0x67, 0x3B, 0x03, 0x06, 0x46, 0x7C, 0xF0, 0x0F, 0xF0, 0x03, 0xF8,
+  0x00, 0x0C, 0xE6, 0x0C, 0x07, 0x03, 0x80, 0xFE, 0x00, 0x00, 0x0F, 0xE0,
+  0x01, 0x80, 0xE0, 0x30, 0x67, 0x38, 0x00, 0x7B, 0x30, 0xC3, 0x08, 0x41,
+  0x0C, 0x00, 0x03, 0x0C, 0x07, 0xC0, 0x60, 0xC3, 0x01, 0x98, 0x07, 0x67,
+  0x0F, 0x32, 0x3D, 0x88, 0xF6, 0x23, 0xD8, 0x8B, 0x66, 0x6C, 0xEF, 0x18,
+  0x00, 0x60, 0x00, 0xE0, 0x00, 0xF8, 0x00, 0x0C, 0x03, 0x01, 0xE0, 0x48,
+  0x12, 0x0C, 0xC3, 0x30, 0xFC, 0x61, 0x98, 0x64, 0x0B, 0x03, 0xFC, 0xC6,
+  0xC6, 0xC6, 0xC4, 0xF8, 0xC6, 0xC3, 0xC3, 0xC3, 0xC6, 0xFC, 0x1F, 0x18,
+  0xD8, 0x08, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x30, 0x0C, 0x63, 0xE0,
+  0xFC, 0x63, 0x30, 0xD8, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE1, 0xB1,
+  0x9F, 0x80, 0xFF, 0x0C, 0x30, 0xC3, 0xEC, 0x30, 0xC3, 0x0C, 0x3F, 0xFF,
+  0x0C, 0x30, 0xC3, 0x0F, 0xF0, 0xC3, 0x0C, 0x30, 0x1F, 0x8C, 0x26, 0x03,
+  0x00, 0xC0, 0x30, 0x0C, 0x1F, 0x03, 0xC0, 0xD8, 0x33, 0x0C, 0x7E, 0xC1,
+  0xE0, 0xF0, 0x78, 0x3C, 0x1F, 0xFF, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78,
+  0x30, 0xFF, 0xFF, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06,
+  0x0F, 0x33, 0xC0, 0xC1, 0x61, 0x31, 0x99, 0x8D, 0x87, 0xE3, 0xB1, 0xCC,
+  0xC2, 0x61, 0xB0, 0x58, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3,
+  0x0C, 0x3F, 0xC0, 0xF8, 0x7E, 0x1F, 0x87, 0xD2, 0xF4, 0xBD, 0x2F, 0x33,
+  0xCC, 0xF3, 0x3C, 0x0F, 0x03, 0xC1, 0xF0, 0xF8, 0x7A, 0x3D, 0x1E, 0x4F,
+  0x27, 0x8B, 0xC5, 0xE1, 0xF0, 0xF8, 0x30, 0x1E, 0x1C, 0xE6, 0x1B, 0x03,
+  0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xD8, 0x63, 0x30, 0x78, 0xFC, 0xC7,
+  0xC3, 0xC3, 0xC3, 0xC6, 0xFC, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x1E, 0x1C,
+  0xE6, 0x1B, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xD8, 0x66, 0x18,
+  0xFC, 0x0C, 0x01, 0x80, 0x3C, 0xFC, 0xC7, 0xC3, 0xC3, 0xC3, 0xC6, 0xFC,
+  0xC8, 0xCC, 0xC6, 0xC6, 0xC3, 0x3C, 0xE2, 0xC0, 0xC0, 0x60, 0x38, 0x0E,
+  0x07, 0x03, 0x03, 0xC6, 0x7C, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+  0x18, 0x18, 0x18, 0x18, 0x18, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F,
+  0x07, 0x83, 0xC1, 0xE0, 0xD8, 0xC7, 0xC0, 0xC0, 0xD0, 0x36, 0x19, 0x86,
+  0x21, 0x8C, 0xC3, 0x30, 0x4C, 0x16, 0x07, 0x80, 0xE0, 0x30, 0xC3, 0x0F,
+  0x0C, 0x34, 0x30, 0x99, 0xC6, 0x64, 0x99, 0x92, 0x66, 0x49, 0x09, 0x24,
+  0x38, 0x70, 0xE1, 0xC3, 0x86, 0x0E, 0x18, 0x41, 0x31, 0x88, 0x86, 0xC1,
+  0xC0, 0x60, 0x70, 0x28, 0x36, 0x11, 0x98, 0xC8, 0x30, 0x40, 0x98, 0x62,
+  0x10, 0xCC, 0x12, 0x07, 0x80, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30,
+  0xFF, 0x02, 0x06, 0x04, 0x0C, 0x18, 0x10, 0x30, 0x60, 0x60, 0xC0, 0xFF,
+  0xFB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB7, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08,
+  0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x81, 0x01, 0xED, 0xB6, 0xDB, 0x6D,
+  0xB6, 0xDF, 0x10, 0x50, 0xA3, 0x64, 0x48, 0xB1, 0x80, 0xFF, 0x80, 0xC8,
+  0x80, 0x7C, 0x8C, 0x18, 0xF6, 0x78, 0xF1, 0xE7, 0x76, 0xC0, 0x60, 0x30,
+  0x18, 0x0D, 0xE7, 0x1B, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x7C, 0x6D, 0xE0,
+  0x1E, 0xC5, 0x06, 0x0C, 0x18, 0x30, 0x31, 0x1E, 0x03, 0x03, 0x03, 0x03,
+  0x3F, 0x63, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x67, 0x3B, 0x3C, 0x66, 0xC3,
+  0xC3, 0xFF, 0xC0, 0xC0, 0x62, 0x3E, 0x39, 0x86, 0x18, 0xF1, 0x86, 0x18,
+  0x61, 0x86, 0x18, 0x60, 0x7F, 0x62, 0x31, 0x98, 0xCE, 0xC3, 0xC3, 0x01,
+  0x80, 0x7F, 0x60, 0xF0, 0x78, 0x67, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xDE,
+  0xE3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF, 0x30,
+  0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3E, 0xC0, 0xC0, 0xC0, 0xC0, 0xC6,
+  0xC4, 0xC8, 0xD8, 0xF8, 0xEC, 0xC4, 0xC6, 0xC3, 0xDB, 0x6D, 0xB6, 0xDB,
+  0x6E, 0xDE, 0x77, 0x1C, 0xF0, 0xC7, 0x86, 0x3C, 0x31, 0xE1, 0x8F, 0x0C,
+  0x78, 0x63, 0xC3, 0x18, 0xDE, 0xE3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
+  0xC3, 0x3C, 0x66, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x66, 0x3C, 0xDE, 0x71,
+  0xB0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0xC6, 0xDE, 0x60, 0x30, 0x18, 0x0C,
+  0x00, 0x3F, 0x63, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x67, 0x3B, 0x03, 0x03,
+  0x03, 0xDF, 0x31, 0x8C, 0x63, 0x18, 0xC0, 0x7D, 0x8B, 0x07, 0x03, 0xC1,
+  0xC1, 0xC3, 0x7C, 0x61, 0x8F, 0x18, 0x61, 0x86, 0x18, 0x61, 0x83, 0xC0,
+  0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC7, 0x7B, 0xC1, 0x43, 0x62,
+  0x62, 0x26, 0x34, 0x34, 0x1C, 0x18, 0xC2, 0x1E, 0x38, 0xD9, 0x4C, 0xCA,
+  0x66, 0x53, 0x14, 0xD0, 0xE2, 0x87, 0x1C, 0x38, 0xC0, 0x42, 0x66, 0x34,
+  0x1C, 0x18, 0x3C, 0x24, 0x66, 0x42, 0x41, 0xA0, 0x98, 0xC4, 0x62, 0x21,
+  0xB0, 0x58, 0x28, 0x0C, 0x06, 0x06, 0x02, 0x06, 0x00, 0xFC, 0x31, 0x84,
+  0x31, 0x84, 0x30, 0xFC, 0x19, 0x8C, 0x63, 0x18, 0xD8, 0x31, 0x8C, 0x63,
+  0x18, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xC3, 0x18, 0xC6, 0x31, 0x83,
+  0x63, 0x18, 0xC6, 0x31, 0x98, 0xE3, 0x3C };
+
+const GFXglyph sourcesans9pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   4,    0,    0 },   // 0x20 ' '
+  {     1,   2,  12,   5,    2,  -11 },   // 0x21 '!'
+  {     4,   5,   5,   8,    2,  -12 },   // 0x22 '"'
+  {     8,   7,  11,   9,    1,  -10 },   // 0x23 '#'
+  {    18,   7,  14,   9,    1,  -12 },   // 0x24 '$'
+  {    31,  14,  12,  15,    1,  -11 },   // 0x25 '%'
+  {    52,  11,  12,  11,    1,  -11 },   // 0x26 '&'
+  {    69,   2,   5,   4,    2,  -12 },   // 0x27 '''
+  {    71,   4,  16,   5,    1,  -12 },   // 0x28 '('
+  {    79,   4,  16,   5,    1,  -12 },   // 0x29 ')'
+  {    87,   5,   5,   8,    1,  -12 },   // 0x2A '*'
+  {    91,   6,   7,   9,    2,   -8 },   // 0x2B '+'
+  {    97,   4,   4,   4,    0,    0 },   // 0x2C ','
+  {    99,   4,   1,   6,    1,   -4 },   // 0x2D '-'
+  {   100,   2,   2,   4,    1,   -1 },   // 0x2E '.'
+  {   101,   7,  16,   6,    0,  -12 },   // 0x2F '/'
+  {   115,   8,  12,   9,    1,  -11 },   // 0x30 '0'
+  {   127,   5,  11,   9,    2,  -10 },   // 0x31 '1'
+  {   134,   8,  12,   9,    1,  -11 },   // 0x32 '2'
+  {   146,   8,  12,   9,    1,  -11 },   // 0x33 '3'
+  {   158,   7,  11,   9,    1,  -10 },   // 0x34 '4'
+  {   168,   8,  11,   9,    1,  -10 },   // 0x35 '5'
+  {   179,   8,  11,   9,    1,  -10 },   // 0x36 '6'
+  {   190,   6,  11,   9,    2,  -10 },   // 0x37 '7'
+  {   199,   8,  12,   9,    1,  -11 },   // 0x38 '8'
+  {   211,   8,  12,   9,    1,  -11 },   // 0x39 '9'
+  {   223,   2,   8,   4,    1,   -7 },   // 0x3A ':'
+  {   225,   2,  11,   4,    1,   -7 },   // 0x3B ';'
+  {   228,   7,   8,   9,    1,   -9 },   // 0x3C '<'
+  {   235,   7,   5,   9,    1,   -7 },   // 0x3D '='
+  {   240,   7,   8,   9,    1,   -9 },   // 0x3E '>'
+  {   247,   6,  12,   8,    1,  -11 },   // 0x3F '?'
+  {   256,  14,  15,  15,    1,  -11 },   // 0x40 '@'
+  {   283,  10,  12,  10,    0,  -11 },   // 0x41 'A'
+  {   298,   8,  12,  11,    2,  -11 },   // 0x42 'B'
+  {   310,   9,  12,  10,    1,  -11 },   // 0x43 'C'
+  {   324,   9,  12,  11,    2,  -11 },   // 0x44 'D'
+  {   338,   6,  12,   9,    2,  -11 },   // 0x45 'E'
+  {   347,   6,  12,   9,    2,  -11 },   // 0x46 'F'
+  {   356,  10,  12,  11,    1,  -11 },   // 0x47 'G'
+  {   371,   9,  12,  12,    2,  -11 },   // 0x48 'H'
+  {   385,   2,  12,   5,    2,  -11 },   // 0x49 'I'
+  {   388,   7,  12,   9,    1,  -11 },   // 0x4A 'J'
+  {   399,   9,  12,  10,    2,  -11 },   // 0x4B 'K'
+  {   413,   6,  12,   9,    2,  -11 },   // 0x4C 'L'
+  {   422,  10,  12,  13,    2,  -11 },   // 0x4D 'M'
+  {   437,   9,  12,  12,    2,  -11 },   // 0x4E 'N'
+  {   451,  10,  12,  12,    1,  -11 },   // 0x4F 'O'
+  {   466,   8,  12,  10,    2,  -11 },   // 0x50 'P'
+  {   478,  10,  15,  12,    1,  -11 },   // 0x51 'Q'
+  {   497,   8,  12,  10,    2,  -11 },   // 0x52 'R'
+  {   509,   8,  12,  10,    1,  -11 },   // 0x53 'S'
+  {   521,   8,  12,  10,    1,  -11 },   // 0x54 'T'
+  {   533,   9,  12,  12,    2,  -11 },   // 0x55 'U'
+  {   547,  10,  12,   9,    0,  -11 },   // 0x56 'V'
+  {   562,  14,  12,  14,    0,  -11 },   // 0x57 'W'
+  {   583,   9,  12,   9,    0,  -11 },   // 0x58 'X'
+  {   597,  10,  12,   9,    0,  -11 },   // 0x59 'Y'
+  {   612,   8,  12,  10,    1,  -11 },   // 0x5A 'Z'
+  {   624,   3,  16,   5,    2,  -12 },   // 0x5B '['
+  {   630,   7,  16,   6,    0,  -12 },   // 0x5C '\'
+  {   644,   3,  16,   5,    1,  -12 },   // 0x5D ']'
+  {   650,   7,   7,   9,    1,  -11 },   // 0x5E '^'
+  {   657,   9,   1,   9,    0,    2 },   // 0x5F '_'
+  {   659,   3,   3,  10,    3,  -12 },   // 0x60 '`'
+  {   661,   7,   9,   9,    1,   -8 },   // 0x61 'a'
+  {   669,   9,  13,  10,    1,  -12 },   // 0x62 'b'
+  {   684,   7,   9,   8,    1,   -8 },   // 0x63 'c'
+  {   692,   8,  13,  10,    1,  -12 },   // 0x64 'd'
+  {   705,   8,   9,   9,    1,   -8 },   // 0x65 'e'
+  {   714,   6,  13,   5,    1,  -12 },   // 0x66 'f'
+  {   724,   9,  13,   9,    1,   -8 },   // 0x67 'g'
+  {   739,   8,  13,  10,    1,  -12 },   // 0x68 'h'
+  {   752,   2,  12,   4,    1,  -11 },   // 0x69 'i'
+  {   755,   4,  16,   4,    0,  -11 },   // 0x6A 'j'
+  {   763,   8,  13,   9,    1,  -12 },   // 0x6B 'k'
+  {   776,   3,  13,   5,    1,  -12 },   // 0x6C 'l'
+  {   781,  13,   9,  15,    1,   -8 },   // 0x6D 'm'
+  {   796,   8,   9,  10,    1,   -8 },   // 0x6E 'n'
+  {   805,   8,   9,  10,    1,   -8 },   // 0x6F 'o'
+  {   814,   9,  13,  10,    1,   -8 },   // 0x70 'p'
+  {   829,   8,  12,  10,    1,   -8 },   // 0x71 'q'
+  {   841,   5,   9,   6,    1,   -8 },   // 0x72 'r'
+  {   847,   7,   9,   8,    1,   -8 },   // 0x73 's'
+  {   855,   6,  11,   6,    1,  -10 },   // 0x74 't'
+  {   864,   8,   9,  10,    1,   -8 },   // 0x75 'u'
+  {   873,   8,   9,   8,    0,   -8 },   // 0x76 'v'
+  {   882,  13,   9,  13,    0,   -8 },   // 0x77 'w'
+  {   897,   8,   9,   8,    0,   -8 },   // 0x78 'x'
+  {   906,   9,  13,   8,    0,   -8 },   // 0x79 'y'
+  {   921,   6,   9,   8,    1,   -8 },   // 0x7A 'z'
+  {   928,   5,  16,   5,    0,  -12 },   // 0x7B '{'
+  {   938,   2,  19,   4,    2,  -13 },   // 0x7C '|'
+  {   943,   5,  16,   5,    1,  -12 },   // 0x7D '}'
+  {   953,   7,   2,   9,    1,   -6 } }; // 0x7E '~'
+
+const GFXfont sourcesans9pt7b PROGMEM = {
+  (uint8_t  *)sourcesans9pt7bBitmaps,
+  (GFXglyph *)sourcesans9pt7bGlyphs,
+  0x20, 0x7E, 24 };
+
+// Approx. 1627 bytes
+const uint8_t sourcesans_semi9pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xD5, 0x3F, 0xCF, 0x3C, 0xF3, 0xCC, 0x24, 0x4B, 0xFF, 0xF2,
+  0x5F, 0xFF, 0xA4, 0x48, 0x91, 0x20, 0x18, 0x31, 0xFE, 0x2C, 0x1C, 0x1E,
+  0x0E, 0x0E, 0x0E, 0x1F, 0xF7, 0xC3, 0x00, 0x78, 0x43, 0xF1, 0x0C, 0xC8,
+  0x33, 0x20, 0xCD, 0x7B, 0x35, 0xE7, 0xAC, 0xDE, 0xB3, 0x04, 0xCC, 0x13,
+  0x30, 0x8F, 0xC2, 0x1E, 0x3C, 0x1F, 0x86, 0x61, 0x98, 0x6C, 0x0E, 0x07,
+  0x8F, 0x76, 0xCF, 0x31, 0xE7, 0xFC, 0xF3, 0xFF, 0xC0, 0x32, 0x66, 0xCC,
+  0xCC, 0xCC, 0xCC, 0x66, 0x23, 0xC4, 0x66, 0x33, 0x33, 0x33, 0x33, 0x66,
+  0x4C, 0x10, 0x21, 0xF1, 0xC2, 0x85, 0x00, 0x30, 0xCF, 0xFF, 0x30, 0xC0,
+  0x33, 0x36, 0xC0, 0xFF, 0xFC, 0x00, 0x10, 0x82, 0x18, 0x41, 0x0C, 0x30,
+  0x82, 0x18, 0x41, 0x08, 0x00, 0x3C, 0x7E, 0x66, 0xC3, 0xC3, 0xC3, 0xC3,
+  0xC3, 0xC3, 0x66, 0x7E, 0x3C, 0xF3, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x33,
+  0xFF, 0xC0, 0x78, 0xFC, 0xCE, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x70,
+  0xFF, 0xFF, 0x3E, 0x7F, 0x23, 0x03, 0x07, 0x1E, 0x1E, 0x03, 0x03, 0x43,
+  0xFE, 0x3C, 0x0E, 0x1E, 0x1E, 0x36, 0x66, 0x46, 0xFF, 0xFF, 0x06, 0x06,
+  0x06, 0x3E, 0x3E, 0x30, 0x60, 0x6C, 0x7E, 0x07, 0x03, 0x03, 0x47, 0x7E,
+  0x3C, 0x1E, 0x7F, 0x62, 0xC0, 0xDC, 0xFE, 0xE3, 0xC3, 0xC3, 0x67, 0x7E,
+  0x3C, 0xFF, 0xFC, 0x10, 0x60, 0x83, 0x06, 0x08, 0x30, 0x60, 0xC1, 0x80,
+  0x38, 0xFB, 0x1E, 0x3E, 0x6F, 0x9F, 0x63, 0xC7, 0x8D, 0xF1, 0xC0, 0x38,
+  0xFB, 0x36, 0x3C, 0x79, 0xDF, 0xBB, 0x06, 0x1B, 0xF3, 0xC0, 0xFC, 0x0F,
+  0xC0, 0xFC, 0x03, 0xFE, 0x01, 0x0F, 0x3C, 0xE0, 0xE0, 0x7C, 0x0F, 0x01,
+  0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xE0, 0x7C, 0x0F, 0x0F, 0x7C,
+  0xE0, 0x80, 0x79, 0xFD, 0x18, 0x30, 0xE3, 0x86, 0x18, 0x30, 0x00, 0xC1,
+  0x83, 0x00, 0x07, 0xC0, 0xFF, 0x8E, 0x0C, 0xE6, 0xB6, 0x7C, 0xE7, 0x67,
+  0x33, 0x39, 0x91, 0xCC, 0x9E, 0x7F, 0xB9, 0x98, 0xC0, 0x07, 0x84, 0x1F,
+  0xE0, 0x3E, 0x00, 0x0C, 0x07, 0x81, 0xE0, 0x48, 0x33, 0x0C, 0xC3, 0x31,
+  0xFE, 0x7F, 0x98, 0x6C, 0x0F, 0x03, 0xFC, 0xFE, 0xC6, 0xC6, 0xFC, 0xFE,
+  0xC7, 0xC3, 0xC3, 0xC7, 0xFE, 0xFC, 0x1E, 0x1F, 0xDC, 0x5C, 0x0C, 0x06,
+  0x03, 0x01, 0x80, 0xE0, 0x30, 0x9F, 0xE3, 0xC0, 0xF8, 0xFE, 0xC6, 0xC3,
+  0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC6, 0xFE, 0xF8, 0xFF, 0xFF, 0x06, 0x0C,
+  0x1F, 0xBF, 0x60, 0xC1, 0x83, 0xFF, 0xF0, 0xFF, 0xFF, 0x06, 0x0C, 0x1F,
+  0xBF, 0x60, 0xC1, 0x83, 0x06, 0x00, 0x1E, 0x1F, 0xDC, 0x4C, 0x0C, 0x06,
+  0x03, 0x1F, 0x8F, 0xC1, 0xB0, 0xDF, 0xE3, 0xE0, 0xC3, 0xC3, 0xC3, 0xC3,
+  0xC3, 0xFF, 0xFF, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF, 0xFF, 0x06,
+  0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x8D, 0xF1, 0xE0, 0xC3, 0x63,
+  0x33, 0x99, 0x8D, 0x87, 0xC3, 0xF1, 0xDC, 0xC6, 0x63, 0xB0, 0xD8, 0x30,
+  0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0F, 0xFF, 0xE0, 0xF8, 0x7E,
+  0x1F, 0xC7, 0xF3, 0xF4, 0xBD, 0x2F, 0x7B, 0xCC, 0xF3, 0x3C, 0xCF, 0x03,
+  0xC3, 0xE3, 0xE3, 0xF3, 0xD3, 0xDB, 0xDB, 0xCB, 0xCF, 0xC7, 0xC7, 0xC3,
+  0x1E, 0x1F, 0xE6, 0x1B, 0x87, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xE1, 0xD8,
+  0x67, 0xF0, 0x78, 0xFC, 0xFE, 0xC3, 0xC3, 0xC3, 0xC7, 0xFE, 0xFC, 0xC0,
+  0xC0, 0xC0, 0xC0, 0x1E, 0x0F, 0xF1, 0x86, 0x70, 0xEC, 0x0D, 0x81, 0xB0,
+  0x36, 0x06, 0xC0, 0xCC, 0x30, 0xFC, 0x0F, 0x00, 0xE0, 0x0F, 0x80, 0xF8,
+  0xFC, 0x7F, 0x31, 0xD8, 0x6C, 0x36, 0x3B, 0xF9, 0xF8, 0xCC, 0x63, 0x31,
+  0xD8, 0x60, 0x1E, 0x1F, 0xD8, 0x4C, 0x07, 0x01, 0xF0, 0x3C, 0x07, 0x01,
+  0xB0, 0xDF, 0xC7, 0xC0, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+  0x18, 0x18, 0x18, 0x18, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07,
+  0x83, 0xC1, 0xF1, 0xDF, 0xC7, 0xC0, 0xC0, 0xF0, 0x36, 0x19, 0x86, 0x61,
+  0x8C, 0xC3, 0x30, 0xCC, 0x1E, 0x07, 0x81, 0xE0, 0x70, 0xC3, 0x8F, 0x0E,
+  0x3E, 0x38, 0xD8, 0xE2, 0x66, 0xD9, 0x9B, 0x66, 0x4D, 0x9D, 0x36, 0x3C,
+  0xD0, 0xF1, 0xC3, 0xC7, 0x0E, 0x1C, 0x61, 0x98, 0xC3, 0x30, 0xD8, 0x1E,
+  0x07, 0x01, 0xC0, 0x78, 0x37, 0x0C, 0xC6, 0x39, 0x86, 0x61, 0x98, 0x63,
+  0x30, 0xCC, 0x1A, 0x07, 0x80, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30,
+  0xFF, 0xFF, 0x06, 0x0E, 0x0C, 0x18, 0x38, 0x30, 0x60, 0xE0, 0xFF, 0xFF,
+  0xFB, 0x6D, 0xB6, 0xDB, 0x6D, 0xB7, 0x01, 0x01, 0x02, 0x02, 0x04, 0x0C,
+  0x08, 0x10, 0x30, 0x20, 0x40, 0x40, 0x81, 0x01, 0xED, 0xB6, 0xDB, 0x6D,
+  0xB6, 0xDF, 0x18, 0x70, 0xA3, 0x66, 0x48, 0xF1, 0x80, 0xFF, 0xFF, 0xC0,
+  0xC9, 0x80, 0x3D, 0xFC, 0x18, 0xF7, 0xFC, 0xF1, 0xFF, 0x76, 0xC0, 0xC0,
+  0xC0, 0xDC, 0xFE, 0xC7, 0xC3, 0xC3, 0xC3, 0xC7, 0xFE, 0xDC, 0x3C, 0xFF,
+  0x86, 0x0C, 0x18, 0x38, 0x3F, 0x3C, 0x03, 0x03, 0x03, 0x3B, 0x7F, 0xE3,
+  0xC3, 0xC3, 0xC3, 0xE3, 0x7F, 0x3B, 0x3C, 0xFE, 0x1F, 0xFF, 0xF0, 0x30,
+  0x3E, 0x3C, 0x3B, 0xD8, 0xCF, 0x79, 0x8C, 0x63, 0x18, 0xC6, 0x00, 0x7F,
+  0xFF, 0xC6, 0xC6, 0x7E, 0x7C, 0xC0, 0xFE, 0x7F, 0xC3, 0xC3, 0xFE, 0x7C,
+  0xC0, 0xC0, 0xC0, 0xDE, 0xFF, 0xE3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
+  0xF3, 0xFF, 0xFF, 0x33, 0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0xFE, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xC6, 0xCC, 0xDC, 0xD8, 0xF8, 0xEC, 0xCC, 0xC6, 0xC7,
+  0xDB, 0x6D, 0xB6, 0xDB, 0xB0, 0xDE, 0x77, 0xFF, 0xF8, 0xE7, 0x86, 0x3C,
+  0x31, 0xE1, 0x8F, 0x0C, 0x78, 0x63, 0xC3, 0x18, 0xDE, 0xFF, 0xE3, 0xC3,
+  0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x3C, 0x7E, 0xE7, 0xC3, 0xC3, 0xC3, 0xE7,
+  0x7E, 0x3C, 0xDC, 0xFE, 0xC7, 0xC3, 0xC3, 0xC3, 0xC7, 0xFE, 0xDC, 0xC0,
+  0xC0, 0xC0, 0x3B, 0x7F, 0xE3, 0xC3, 0xC3, 0xC3, 0xE3, 0x7F, 0x3B, 0x03,
+  0x03, 0xDF, 0xF9, 0x8C, 0x63, 0x18, 0xC0, 0x7B, 0xFC, 0x38, 0x78, 0x38,
+  0xFF, 0x78, 0x61, 0x8F, 0xBE, 0x61, 0x86, 0x18, 0x61, 0xE3, 0xC0, 0xC3,
+  0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC7, 0xFF, 0x7B, 0xC1, 0xB1, 0x98, 0xCC,
+  0x63, 0x61, 0xB0, 0xD8, 0x38, 0x1C, 0x00, 0xC3, 0x1E, 0x1C, 0xD9, 0xE4,
+  0xCB, 0x66, 0x5B, 0x3A, 0xD8, 0xF3, 0x87, 0x1C, 0x38, 0xE0, 0x63, 0x76,
+  0x36, 0x1C, 0x1C, 0x3C, 0x36, 0x66, 0x63, 0xC3, 0xC3, 0xC6, 0x66, 0x66,
+  0x2C, 0x3C, 0x3C, 0x18, 0x18, 0x30, 0xF0, 0xE0, 0xFD, 0xF8, 0x70, 0xC3,
+  0x0C, 0x38, 0x7F, 0xFE, 0x19, 0x8C, 0x63, 0x18, 0xDC, 0xE1, 0x8C, 0x63,
+  0x18, 0xC3, 0xFF, 0xFF, 0xE0, 0xC3, 0x18, 0xC6, 0x31, 0x87, 0x3B, 0x18,
+  0xC6, 0x31, 0x98, 0x60, 0xF2, 0x9E, 0x0C };
+
+const GFXglyph sourcesans_semi9pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   4,    0,    0 },   // 0x20 ' '
+  {     1,   2,  12,   6,    2,  -11 },   // 0x21 '!'
+  {     4,   6,   5,   9,    1,  -11 },   // 0x22 '"'
+  {     8,   7,  11,   9,    1,  -10 },   // 0x23 '#'
+  {    18,   7,  14,   9,    1,  -12 },   // 0x24 '$'
+  {    31,  14,  12,  15,    1,  -11 },   // 0x25 '%'
+  {    52,  10,  12,  12,    1,  -11 },   // 0x26 '&'
+  {    67,   2,   5,   5,    1,  -11 },   // 0x27 '''
+  {    69,   4,  16,   6,    1,  -12 },   // 0x28 '('
+  {    77,   4,  16,   6,    1,  -12 },   // 0x29 ')'
+  {    85,   7,   6,   8,    0,  -12 },   // 0x2A '*'
+  {    91,   6,   6,   9,    2,   -8 },   // 0x2B '+'
+  {    96,   4,   5,   5,    1,   -1 },   // 0x2C ','
+  {    99,   4,   2,   6,    1,   -5 },   // 0x2D '-'
+  {   100,   2,   3,   5,    1,   -2 },   // 0x2E '.'
+  {   101,   6,  16,   6,    0,  -12 },   // 0x2F '/'
+  {   113,   8,  12,   9,    1,  -11 },   // 0x30 '0'
+  {   125,   6,  11,   9,    2,  -10 },   // 0x31 '1'
+  {   134,   8,  12,   9,    1,  -11 },   // 0x32 '2'
+  {   146,   8,  12,   9,    0,  -11 },   // 0x33 '3'
+  {   158,   8,  11,   9,    0,  -10 },   // 0x34 '4'
+  {   169,   8,  12,   9,    0,  -11 },   // 0x35 '5'
+  {   181,   8,  12,   9,    1,  -11 },   // 0x36 '6'
+  {   193,   7,  12,   9,    1,  -11 },   // 0x37 '7'
+  {   204,   7,  12,   9,    1,  -11 },   // 0x38 '8'
+  {   215,   7,  12,   9,    1,  -11 },   // 0x39 '9'
+  {   226,   2,   9,   5,    1,   -8 },   // 0x3A ':'
+  {   229,   2,  12,   4,    1,   -8 },   // 0x3B ';'
+  {   232,   8,   8,   9,    1,   -9 },   // 0x3C '<'
+  {   240,   8,   6,   9,    1,   -8 },   // 0x3D '='
+  {   246,   8,   8,   9,    1,   -9 },   // 0x3E '>'
+  {   254,   7,  13,   8,    0,  -12 },   // 0x3F '?'
+  {   266,  13,  15,  16,    1,  -11 },   // 0x40 '@'
+  {   291,  10,  12,  10,    0,  -11 },   // 0x41 'A'
+  {   306,   8,  12,  11,    2,  -11 },   // 0x42 'B'
+  {   318,   9,  12,  10,    1,  -11 },   // 0x43 'C'
+  {   332,   8,  12,  11,    2,  -11 },   // 0x44 'D'
+  {   344,   7,  12,  10,    2,  -11 },   // 0x45 'E'
+  {   355,   7,  12,   9,    2,  -11 },   // 0x46 'F'
+  {   366,   9,  12,  11,    1,  -11 },   // 0x47 'G'
+  {   380,   8,  12,  12,    2,  -11 },   // 0x48 'H'
+  {   392,   2,  12,   5,    2,  -11 },   // 0x49 'I'
+  {   395,   7,  12,   9,    0,  -11 },   // 0x4A 'J'
+  {   406,   9,  12,  11,    2,  -11 },   // 0x4B 'K'
+  {   420,   6,  12,   9,    2,  -11 },   // 0x4C 'L'
+  {   429,  10,  12,  13,    2,  -11 },   // 0x4D 'M'
+  {   444,   8,  12,  12,    2,  -11 },   // 0x4E 'N'
+  {   456,  10,  12,  12,    1,  -11 },   // 0x4F 'O'
+  {   471,   8,  12,  11,    2,  -11 },   // 0x50 'P'
+  {   483,  11,  15,  12,    1,  -11 },   // 0x51 'Q'
+  {   504,   9,  12,  11,    2,  -11 },   // 0x52 'R'
+  {   518,   9,  12,  10,    0,  -11 },   // 0x53 'S'
+  {   532,   8,  12,  10,    1,  -11 },   // 0x54 'T'
+  {   544,   9,  12,  12,    1,  -11 },   // 0x55 'U'
+  {   558,  10,  12,  10,    0,  -11 },   // 0x56 'V'
+  {   573,  14,  12,  14,    0,  -11 },   // 0x57 'W'
+  {   594,  10,  12,  10,    0,  -11 },   // 0x58 'X'
+  {   609,  10,  12,   9,   -1,  -11 },   // 0x59 'Y'
+  {   624,   8,  12,  10,    1,  -11 },   // 0x5A 'Z'
+  {   636,   3,  16,   6,    2,  -12 },   // 0x5B '['
+  {   642,   7,  16,   6,    0,  -12 },   // 0x5C '\'
+  {   656,   3,  16,   6,    1,  -12 },   // 0x5D ']'
+  {   662,   7,   7,   9,    1,  -11 },   // 0x5E '^'
+  {   669,   9,   2,   9,    0,    1 },   // 0x5F '_'
+  {   672,   3,   3,  10,    3,  -12 },   // 0x60 '`'
+  {   674,   7,   9,   9,    1,   -8 },   // 0x61 'a'
+  {   682,   8,  12,  10,    1,  -11 },   // 0x62 'b'
+  {   694,   7,   9,   8,    1,   -8 },   // 0x63 'c'
+  {   702,   8,  12,  10,    1,  -11 },   // 0x64 'd'
+  {   714,   7,   9,   9,    2,   -8 },   // 0x65 'e'
+  {   722,   5,  13,   6,    1,  -12 },   // 0x66 'f'
+  {   731,   8,  13,   9,    1,   -8 },   // 0x67 'g'
+  {   744,   8,  12,  10,    1,  -11 },   // 0x68 'h'
+  {   756,   2,  12,   5,    1,  -11 },   // 0x69 'i'
+  {   759,   4,  16,   5,   -1,  -11 },   // 0x6A 'j'
+  {   767,   8,  13,   9,    1,  -12 },   // 0x6B 'k'
+  {   780,   3,  12,   5,    1,  -11 },   // 0x6C 'l'
+  {   785,  13,   9,  15,    1,   -8 },   // 0x6D 'm'
+  {   800,   8,   9,  10,    1,   -8 },   // 0x6E 'n'
+  {   809,   8,   9,  10,    1,   -8 },   // 0x6F 'o'
+  {   818,   8,  12,  10,    1,   -8 },   // 0x70 'p'
+  {   830,   8,  11,  10,    1,   -8 },   // 0x71 'q'
+  {   841,   5,   9,   7,    1,   -8 },   // 0x72 'r'
+  {   847,   6,   9,   8,    1,   -8 },   // 0x73 's'
+  {   854,   6,  11,   6,    1,  -10 },   // 0x74 't'
+  {   863,   8,   9,  10,    1,   -8 },   // 0x75 'u'
+  {   872,   9,   9,   9,    0,   -8 },   // 0x76 'v'
+  {   883,  13,   9,  13,    0,   -8 },   // 0x77 'w'
+  {   898,   8,   9,   9,    0,   -8 },   // 0x78 'x'
+  {   907,   8,  13,   9,    1,   -8 },   // 0x79 'y'
+  {   920,   7,   9,   8,    1,   -8 },   // 0x7A 'z'
+  {   928,   5,  16,   6,    0,  -12 },   // 0x7B '{'
+  {   938,   1,  19,   5,    2,  -13 },   // 0x7C '|'
+  {   941,   5,  16,   6,    1,  -12 },   // 0x7D '}'
+  {   951,   8,   4,   9,    1,   -7 } }; // 0x7E '~'
+
+const GFXfont sourcesans_semi9pt7b PROGMEM = {
+  (uint8_t  *)sourcesans_semi9pt7bBitmaps,
+  (GFXglyph *)sourcesans_semi9pt7bGlyphs,
+  0x20, 0x7E, 24 };
+
+// Approx. 1627 bytes
+const uint8_t sourcesans_bold9pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0xF0, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0x42,
+  0x24, 0x4B, 0xFF, 0xF2, 0x4D, 0xBF, 0xFF, 0x48, 0x91, 0x20, 0x18, 0x18,
+  0x7E, 0xFF, 0xE2, 0xE0, 0xF0, 0x7C, 0x1E, 0x0F, 0x07, 0xC7, 0xFE, 0x7C,
+  0x18, 0x18, 0x78, 0x21, 0xF8, 0xC3, 0x31, 0x06, 0x66, 0x0C, 0xC9, 0x99,
+  0xB7, 0x9E, 0xD9, 0x99, 0x33, 0x06, 0x66, 0x08, 0xCC, 0x31, 0xF8, 0x41,
+  0xE0, 0x0E, 0x01, 0xF0, 0x3B, 0x03, 0xB0, 0x3E, 0x01, 0xC7, 0x7C, 0x7F,
+  0x6E, 0xE7, 0xCE, 0x3E, 0x7F, 0xF3, 0xE3, 0xFF, 0xFE, 0x80, 0x19, 0x9C,
+  0xE6, 0x73, 0x9C, 0xE7, 0x38, 0xC7, 0x38, 0xC3, 0xC3, 0x1C, 0xE3, 0x1C,
+  0xE7, 0x39, 0xCE, 0x67, 0x39, 0x98, 0x10, 0x23, 0xFB, 0xE3, 0x8D, 0x80,
+  0x00, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0xDF, 0x97, 0xA0,
+  0xFF, 0xFF, 0x80, 0x00, 0x86, 0x31, 0x8C, 0x46, 0x31, 0x88, 0x46, 0x31,
+  0x88, 0x46, 0x31, 0x88, 0x00, 0x3C, 0x7E, 0x66, 0xE7, 0xE7, 0xE7, 0xE7,
+  0xE7, 0xE7, 0x66, 0x7E, 0x3C, 0x79, 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x3B,
+  0xFF, 0xC0, 0x3C, 0x7F, 0x11, 0xC0, 0xE0, 0x70, 0x38, 0x38, 0x3C, 0x1C,
+  0x1C, 0x1F, 0xEF, 0xF0, 0x1E, 0x3F, 0x88, 0xE0, 0x70, 0x78, 0xF0, 0x7C,
+  0x07, 0x03, 0xA1, 0xFF, 0xC7, 0xC0, 0x0E, 0x1E, 0x3E, 0x2E, 0x6E, 0xCE,
+  0xFF, 0xFF, 0x0E, 0x0E, 0x0E, 0x3F, 0x1F, 0x9C, 0x0E, 0x07, 0xE3, 0xF8,
+  0x0E, 0x07, 0x43, 0xFF, 0x8F, 0x80, 0x1E, 0x7F, 0x72, 0xE0, 0xE0, 0xEE,
+  0xFF, 0xE7, 0xE7, 0xE7, 0x7E, 0x3C, 0xFF, 0xF0, 0x86, 0x18, 0xC3, 0x1C,
+  0x71, 0xC7, 0x00, 0x3C, 0x7E, 0xE7, 0xE7, 0xF7, 0x7C, 0x7E, 0xE7, 0xE7,
+  0xE7, 0x7E, 0x3C, 0x3C, 0x7E, 0xE6, 0xE7, 0xE7, 0xE7, 0x7F, 0x37, 0x07,
+  0x0E, 0xFE, 0x7C, 0xFF, 0x80, 0x3F, 0xE0, 0xFF, 0x80, 0x3F, 0xE5, 0xE8,
+  0x03, 0x0F, 0x7E, 0xF0, 0xF0, 0x7E, 0x0F, 0x03, 0xFF, 0xFF, 0x00, 0x00,
+  0xFF, 0xFF, 0x80, 0xF0, 0x7C, 0x0F, 0x0F, 0x7C, 0xF0, 0x80, 0x3C, 0xFF,
+  0x47, 0x07, 0x0E, 0x1C, 0x38, 0x38, 0x00, 0x38, 0x38, 0x38, 0x07, 0xE0,
+  0x7F, 0xC3, 0xC1, 0x9C, 0x02, 0x63, 0xE7, 0x9F, 0x9C, 0xEC, 0x73, 0x31,
+  0xCC, 0xCF, 0x3D, 0xEE, 0x77, 0x18, 0x00, 0x78, 0x00, 0xFF, 0x00, 0xFC,
+  0x00, 0x0E, 0x03, 0xE0, 0x6C, 0x0D, 0x83, 0xB8, 0x77, 0x0C, 0x63, 0xFE,
+  0x7F, 0xCE, 0x3B, 0x83, 0xF0, 0x70, 0xFE, 0x3F, 0xEE, 0x3B, 0x8E, 0xE3,
+  0xBF, 0xCF, 0xFB, 0x87, 0xE1, 0xF8, 0x7F, 0xFB, 0xFC, 0x1F, 0x0F, 0xE7,
+  0x11, 0xC0, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xF0, 0x1C, 0x63, 0xFC, 0x7C,
+  0xFE, 0x3F, 0xCE, 0x3B, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE3, 0xF8,
+  0xEF, 0xF3, 0xF8, 0xFF, 0xFF, 0x87, 0x0E, 0x1F, 0xBF, 0x70, 0xE1, 0xC3,
+  0xFF, 0xF0, 0xFF, 0xFF, 0x87, 0x0E, 0x1F, 0xBF, 0x70, 0xE1, 0xC3, 0x87,
+  0x00, 0x1F, 0x0F, 0xF7, 0x13, 0x80, 0xE0, 0x38, 0xFE, 0x3F, 0x87, 0xF1,
+  0xDC, 0x73, 0xFC, 0x7E, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xFF, 0xFF,
+  0xFF, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+  0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x47, 0xFE, 0x3C,
+  0xE3, 0xB8, 0xCE, 0x73, 0xB8, 0xFC, 0x3F, 0x0F, 0xE3, 0xDC, 0xE7, 0x38,
+  0xEE, 0x3B, 0x87, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3,
+  0xFF, 0xF0, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x9F, 0xF9, 0xFF, 0x9F, 0xEF,
+  0x7E, 0xF7, 0xE6, 0x7E, 0x67, 0xE6, 0x7E, 0x07, 0xE1, 0xFC, 0x7F, 0x1F,
+  0xE7, 0xF9, 0xFB, 0x7E, 0xDF, 0x9F, 0xE7, 0xF8, 0xFE, 0x3F, 0x87, 0x1F,
+  0x07, 0xF1, 0xC7, 0x70, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xEE,
+  0x38, 0xFE, 0x0F, 0x80, 0xFF, 0x3F, 0xEE, 0x3F, 0x87, 0xE1, 0xF8, 0xFF,
+  0xFB, 0xFC, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0x1F, 0x07, 0xF1, 0xC7, 0x70,
+  0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xEE, 0x38, 0xFE, 0x0F, 0x80,
+  0x70, 0x0F, 0xC0, 0x78, 0xFF, 0x3F, 0xEE, 0x3F, 0x87, 0xE1, 0xF8, 0xFF,
+  0xFB, 0xFC, 0xE7, 0x38, 0xEE, 0x3B, 0x87, 0x3E, 0x3F, 0xB8, 0xDC, 0x0F,
+  0x83, 0xF0, 0xFC, 0x0F, 0x03, 0xA1, 0xFF, 0xCF, 0xC0, 0xFF, 0xFC, 0xE1,
+  0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC0, 0xE1, 0xF8, 0x7E, 0x1F,
+  0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xDC, 0xE7, 0xF8, 0xFC, 0xE1,
+  0xF8, 0x77, 0x39, 0xCE, 0x73, 0x8C, 0xC3, 0x30, 0xFC, 0x1E, 0x07, 0x81,
+  0xE0, 0x70, 0xE3, 0x8F, 0xC7, 0x1F, 0x8E, 0x33, 0x1C, 0xE7, 0x7D, 0xCE,
+  0xDB, 0x9D, 0xB7, 0x3B, 0x6C, 0x34, 0xD8, 0x79, 0xF0, 0xF1, 0xE1, 0xE3,
+  0xC0, 0x71, 0xDC, 0xE3, 0x38, 0xEC, 0x1F, 0x07, 0x81, 0xE0, 0x7C, 0x3F,
+  0x0C, 0xE7, 0x3B, 0x87, 0x60, 0xCE, 0x38, 0xC6, 0x1D, 0xC1, 0xB0, 0x3E,
+  0x07, 0xC0, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xFF, 0xFF, 0x06,
+  0x0E, 0x1C, 0x1C, 0x38, 0x30, 0x70, 0xE0, 0xFF, 0xFF, 0xFF, 0xCC, 0xCC,
+  0xCC, 0xCC, 0xCC, 0xCC, 0xFF, 0x08, 0x8C, 0xCC, 0x44, 0x46, 0x66, 0x62,
+  0x22, 0x33, 0x31, 0x20, 0xFF, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0xFF,
+  0x38, 0x38, 0x3C, 0x6C, 0x66, 0x66, 0xC6, 0xFF, 0xFF, 0xC0, 0x63, 0x3C,
+  0x7E, 0x47, 0x1F, 0x7F, 0xE7, 0xE7, 0xFF, 0x7F, 0xE0, 0x70, 0x38, 0x1C,
+  0x0E, 0xE7, 0xFB, 0x8F, 0xC7, 0xE3, 0xF1, 0xF9, 0xFF, 0xED, 0xE0, 0x1E,
+  0x7E, 0xF0, 0xE0, 0xE0, 0xE0, 0xF2, 0x7E, 0x3E, 0x07, 0x07, 0x07, 0x07,
+  0x3F, 0x7F, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0x7F, 0x3F, 0x3C, 0x7E, 0xC7,
+  0xFF, 0xFF, 0xC0, 0xE0, 0x7E, 0x3E, 0x1D, 0xF7, 0x1C, 0xFB, 0xE7, 0x1C,
+  0x71, 0xC7, 0x1C, 0x70, 0x3F, 0xFF, 0xF9, 0xDC, 0xE7, 0xF3, 0xE1, 0x80,
+  0xFE, 0x7F, 0xF1, 0xF8, 0xFF, 0xE7, 0xE0, 0xE0, 0x70, 0x38, 0x1C, 0x0E,
+  0xF7, 0xFF, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x38, 0xFC, 0x7F,
+  0xFF, 0xFF, 0xF0, 0x39, 0xC0, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9F,
+  0xFE, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x77, 0x3B, 0xB9, 0xF8, 0xFC, 0x7F,
+  0x39, 0x9C, 0xEE, 0x38, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEF, 0x70, 0xFE,
+  0x7B, 0xFF, 0xFE, 0x71, 0xF9, 0xC7, 0xE7, 0x1F, 0x9C, 0x7E, 0x71, 0xF9,
+  0xC7, 0xE7, 0x1C, 0xEF, 0x7F, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7,
+  0xE3, 0x80, 0x3E, 0x3F, 0xB8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8E, 0xFE, 0x3E,
+  0x00, 0xFE, 0x7F, 0xB8, 0xFC, 0x7E, 0x3F, 0x1F, 0x9F, 0xFE, 0xFE, 0x70,
+  0x38, 0x1C, 0x00, 0x3B, 0x7F, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0x7F, 0x3F,
+  0x07, 0x07, 0x07, 0xEF, 0xFF, 0x38, 0xE3, 0x8E, 0x38, 0xE0, 0x7D, 0xFF,
+  0x97, 0x87, 0xC3, 0xD3, 0xFF, 0x7C, 0x71, 0xCF, 0xBE, 0x71, 0xC7, 0x1C,
+  0x71, 0xF3, 0xC0, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xFF, 0x7F,
+  0xC3, 0xF1, 0xB9, 0xCC, 0xE6, 0x63, 0xB0, 0xF8, 0x78, 0x3C, 0x00, 0xE3,
+  0x1F, 0x8E, 0x77, 0x79, 0x9D, 0xEE, 0x77, 0xB8, 0xD3, 0xC3, 0xCF, 0x0F,
+  0x3C, 0x3C, 0xF0, 0x73, 0xBB, 0x8F, 0x87, 0xC1, 0xC1, 0xF0, 0xD8, 0xEE,
+  0x63, 0x80, 0xE3, 0xB1, 0xDC, 0xC6, 0x63, 0x71, 0xF0, 0x78, 0x38, 0x0C,
+  0x0E, 0x1E, 0x0E, 0x00, 0xFF, 0xFC, 0x71, 0xC3, 0x8E, 0x38, 0x7F, 0xFE,
+  0x3B, 0xDC, 0xE3, 0x18, 0xDE, 0xF1, 0x8C, 0xE7, 0x39, 0xE7, 0xFF, 0xFF,
+  0xE0, 0xE7, 0x9C, 0xE6, 0x31, 0x8F, 0x7B, 0x18, 0xC7, 0x3B, 0xDC, 0x72,
+  0xFF, 0x8E };
+
+const GFXglyph sourcesans_bold9pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   4,    0,    0 },   // 0x20 ' '
+  {     1,   3,  12,   6,    1,  -11 },   // 0x21 '!'
+  {     6,   8,   6,  10,    1,  -11 },   // 0x22 '"'
+  {    12,   7,  11,  10,    1,  -10 },   // 0x23 '#'
+  {    22,   8,  16,   9,    1,  -13 },   // 0x24 '$'
+  {    38,  15,  12,  15,    0,  -11 },   // 0x25 '%'
+  {    61,  12,  12,  12,    0,  -11 },   // 0x26 '&'
+  {    79,   3,   6,   5,    1,  -11 },   // 0x27 '''
+  {    82,   5,  16,   6,    1,  -12 },   // 0x28 '('
+  {    92,   5,  16,   6,    1,  -12 },   // 0x29 ')'
+  {   102,   7,   7,   8,    0,  -12 },   // 0x2A '*'
+  {   109,   8,   8,   9,    1,   -9 },   // 0x2B '+'
+  {   117,   3,   7,   5,    1,   -2 },   // 0x2C ','
+  {   120,   4,   2,   6,    1,   -5 },   // 0x2D '-'
+  {   121,   3,   3,   5,    1,   -2 },   // 0x2E '.'
+  {   123,   5,  22,   6,    0,  -15 },   // 0x2F '/'
+  {   137,   8,  12,  10,    1,  -11 },   // 0x30 '0'
+  {   149,   6,  11,   9,    2,  -10 },   // 0x31 '1'
+  {   158,   9,  12,   9,    1,  -11 },   // 0x32 '2'
+  {   172,   9,  12,   9,    0,  -11 },   // 0x33 '3'
+  {   186,   8,  11,   9,    1,  -10 },   // 0x34 '4'
+  {   197,   9,  11,   9,    0,  -10 },   // 0x35 '5'
+  {   210,   8,  12,  10,    1,  -11 },   // 0x36 '6'
+  {   222,   6,  11,   9,    2,  -10 },   // 0x37 '7'
+  {   231,   8,  12,  10,    1,  -11 },   // 0x38 '8'
+  {   243,   8,  12,  10,    1,  -11 },   // 0x39 '9'
+  {   255,   3,   9,   5,    1,   -8 },   // 0x3A ':'
+  {   259,   3,  13,   5,    1,   -8 },   // 0x3B ';'
+  {   264,   8,   8,  10,    1,   -9 },   // 0x3C '<'
+  {   272,   8,   6,   9,    1,   -8 },   // 0x3D '='
+  {   278,   8,   8,  10,    1,   -9 },   // 0x3E '>'
+  {   286,   8,  12,   8,    0,  -11 },   // 0x3F '?'
+  {   298,  14,  15,  16,    1,  -11 },   // 0x40 '@'
+  {   325,  11,  12,  10,    0,  -11 },   // 0x41 'A'
+  {   342,  10,  12,  11,    1,  -11 },   // 0x42 'B'
+  {   357,  10,  12,  10,    1,  -11 },   // 0x43 'C'
+  {   372,  10,  12,  11,    1,  -11 },   // 0x44 'D'
+  {   387,   7,  12,  10,    1,  -11 },   // 0x45 'E'
+  {   398,   7,  12,   9,    1,  -11 },   // 0x46 'F'
+  {   409,  10,  12,  11,    1,  -11 },   // 0x47 'G'
+  {   424,  10,  12,  12,    1,  -11 },   // 0x48 'H'
+  {   439,   3,  12,   5,    1,  -11 },   // 0x49 'I'
+  {   444,   8,  12,   9,    0,  -11 },   // 0x4A 'J'
+  {   456,  10,  12,  11,    1,  -11 },   // 0x4B 'K'
+  {   471,   7,  12,   9,    1,  -11 },   // 0x4C 'L'
+  {   482,  12,  12,  14,    1,  -11 },   // 0x4D 'M'
+  {   500,  10,  12,  12,    1,  -11 },   // 0x4E 'N'
+  {   515,  11,  12,  12,    1,  -11 },   // 0x4F 'O'
+  {   532,  10,  12,  11,    1,  -11 },   // 0x50 'P'
+  {   547,  11,  15,  12,    1,  -11 },   // 0x51 'Q'
+  {   568,  10,  12,  11,    1,  -11 },   // 0x52 'R'
+  {   583,   9,  12,  10,    1,  -11 },   // 0x53 'S'
+  {   597,   7,  12,  10,    2,  -11 },   // 0x54 'T'
+  {   608,  10,  12,  12,    1,  -11 },   // 0x55 'U'
+  {   623,  10,  12,  10,    0,  -11 },   // 0x56 'V'
+  {   638,  15,  12,  15,    0,  -11 },   // 0x57 'W'
+  {   661,  10,  12,  10,    0,  -11 },   // 0x58 'X'
+  {   676,  11,  12,   9,   -1,  -11 },   // 0x59 'Y'
+  {   693,   8,  12,  10,    1,  -11 },   // 0x5A 'Z'
+  {   705,   4,  16,   6,    2,  -12 },   // 0x5B '['
+  {   713,   4,  22,   6,    1,  -15 },   // 0x5C '\'
+  {   724,   4,  16,   6,    1,  -12 },   // 0x5D ']'
+  {   732,   8,   7,  10,    1,  -11 },   // 0x5E '^'
+  {   739,   9,   2,   9,    0,    2 },   // 0x5F '_'
+  {   742,   4,   2,  10,    2,  -11 },   // 0x60 '`'
+  {   743,   8,   9,  10,    1,   -8 },   // 0x61 'a'
+  {   752,   9,  13,  10,    1,  -12 },   // 0x62 'b'
+  {   767,   8,   9,   8,    1,   -8 },   // 0x63 'c'
+  {   776,   8,  13,  10,    1,  -12 },   // 0x64 'd'
+  {   789,   8,   9,   9,    1,   -8 },   // 0x65 'e'
+  {   798,   6,  13,   6,    1,  -12 },   // 0x66 'f'
+  {   808,   9,  13,  10,    1,   -8 },   // 0x67 'g'
+  {   823,   9,  13,  10,    1,  -12 },   // 0x68 'h'
+  {   838,   3,  12,   5,    1,  -11 },   // 0x69 'i'
+  {   843,   5,  16,   5,   -1,  -11 },   // 0x6A 'j'
+  {   853,   9,  13,  10,    1,  -12 },   // 0x6B 'k'
+  {   868,   4,  13,   5,    1,  -12 },   // 0x6C 'l'
+  {   875,  14,   9,  15,    1,   -8 },   // 0x6D 'm'
+  {   891,   9,   9,  10,    1,   -8 },   // 0x6E 'n'
+  {   902,   9,   9,  10,    1,   -8 },   // 0x6F 'o'
+  {   913,   9,  12,  10,    1,   -8 },   // 0x70 'p'
+  {   927,   8,  12,  10,    1,   -8 },   // 0x71 'q'
+  {   939,   6,   9,   7,    1,   -8 },   // 0x72 'r'
+  {   946,   7,   9,   8,    1,   -8 },   // 0x73 's'
+  {   954,   6,  11,   7,    1,  -10 },   // 0x74 't'
+  {   963,   8,   9,  10,    1,   -8 },   // 0x75 'u'
+  {   972,   9,   9,   9,    1,   -8 },   // 0x76 'v'
+  {   983,  14,   9,  14,    0,   -8 },   // 0x77 'w'
+  {   999,   9,   9,   9,    0,   -8 },   // 0x78 'x'
+  {  1010,   9,  12,   9,    0,   -8 },   // 0x79 'y'
+  {  1024,   7,   9,   8,    1,   -8 },   // 0x7A 'z'
+  {  1032,   5,  16,   6,    1,  -12 },   // 0x7B '{'
+  {  1042,   1,  19,   5,    2,  -13 },   // 0x7C '|'
+  {  1045,   5,  16,   6,    1,  -12 },   // 0x7D '}'
+  {  1055,   8,   3,   9,    1,   -6 } }; // 0x7E '~'
+
+const GFXfont sourcesans_bold9pt7b PROGMEM = {
+  (uint8_t  *)sourcesans_bold9pt7bBitmaps,
+  (GFXglyph *)sourcesans_bold9pt7bGlyphs,
+  0x20, 0x7E, 24 };
+
+const uint8_t DINAlternateBold9pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xFF, 0xCF, 0xFF, 0xF0, 0x32, 0x32, 0x36, 0xFF, 0x26, 0x24,
+  0x64, 0xFF, 0x64, 0x4C, 0x4C, 0x4C, 0x08, 0x08, 0x3E, 0x7E, 0x68, 0x68,
+  0x68, 0x3C, 0x1E, 0x0B, 0x0B, 0x4B, 0xFE, 0x3C, 0x08, 0x08, 0xE3, 0x4A,
+  0x97, 0x40, 0x82, 0x04, 0x17, 0x2A, 0x95, 0x2C, 0x70, 0x3C, 0x0F, 0xC1,
+  0x98, 0x33, 0x03, 0xC0, 0x70, 0x13, 0x06, 0x36, 0xC3, 0x9C, 0x71, 0xFF,
+  0x1E, 0x60, 0xFC, 0x22, 0x64, 0xCC, 0xCC, 0xCC, 0x46, 0x22, 0x84, 0x62,
+  0x33, 0x33, 0x33, 0x26, 0x48, 0x27, 0xC9, 0xF2, 0x00, 0x18, 0x0C, 0x06,
+  0x03, 0x0F, 0xFF, 0xFC, 0x60, 0x30, 0x18, 0x00, 0xF8, 0xFF, 0xC0, 0xF0,
+  0x0C, 0x21, 0x86, 0x10, 0xC2, 0x08, 0x61, 0x04, 0x30, 0x39, 0xFF, 0x1E,
+  0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0xF9, 0xC0, 0x7F, 0xB3, 0x33, 0x33,
+  0x33, 0x33, 0x38, 0xFB, 0x1E, 0x30, 0x61, 0x86, 0x18, 0x70, 0xC3, 0xFF,
+  0xF0, 0x79, 0xFF, 0x18, 0x33, 0xC7, 0x83, 0x83, 0x07, 0x9F, 0xF3, 0xC0,
+  0x0C, 0x18, 0x18, 0x30, 0x30, 0x66, 0x66, 0xC6, 0xFF, 0xFF, 0x06, 0x06,
+  0xFF, 0xFF, 0x07, 0xEF, 0xD8, 0xC1, 0x83, 0x07, 0x8F, 0xF1, 0xC0, 0x18,
+  0x30, 0xC1, 0x86, 0x0F, 0x3F, 0x63, 0xC7, 0x8F, 0x3F, 0xE3, 0x00, 0xFF,
+  0xFF, 0x1E, 0x60, 0xC1, 0x86, 0x0C, 0x30, 0x60, 0xC3, 0x00, 0x7D, 0xFF,
+  0x1E, 0x37, 0xCF, 0xBB, 0xE3, 0xC7, 0xDD, 0xF1, 0xC0, 0x7D, 0xCF, 0x1E,
+  0x3C, 0x7F, 0xDF, 0x06, 0x18, 0x30, 0xC1, 0x80, 0xF0, 0xF0, 0xF0, 0xF8,
+  0x00, 0x81, 0xC7, 0x8E, 0x0C, 0x03, 0x80, 0x70, 0x0F, 0x00, 0x80, 0xFF,
+  0xFF, 0xC0, 0x1F, 0xFF, 0xF8, 0x80, 0x70, 0x0F, 0x00, 0xE0, 0x18, 0x38,
+  0x71, 0xE0, 0x80, 0x00, 0x7B, 0xFC, 0xF3, 0x0C, 0x63, 0x8C, 0x30, 0x03,
+  0x0C, 0x0F, 0xC1, 0xFF, 0x1F, 0xDD, 0xF1, 0xFF, 0x89, 0xF8, 0x4F, 0xC6,
+  0x7E, 0x26, 0x7F, 0xC3, 0x83, 0x8F, 0xF8, 0x1F, 0x00, 0x0C, 0x01, 0xC0,
+  0x38, 0x0D, 0x81, 0xB0, 0x62, 0x0C, 0x61, 0xFC, 0x7F, 0x8C, 0x19, 0x83,
+  0x60, 0x30, 0xFE, 0x7F, 0xF0, 0x78, 0x3C, 0x3F, 0xFB, 0xFD, 0x83, 0xC1,
+  0xE0, 0xFF, 0xDF, 0xC0, 0x3E, 0x3F, 0xB8, 0xF8, 0x3C, 0x06, 0x03, 0x01,
+  0x80, 0xC1, 0xF1, 0xDF, 0xC7, 0xC0, 0xFE, 0x7F, 0xB0, 0xF8, 0x3C, 0x1E,
+  0x0F, 0x07, 0x83, 0xC1, 0xE1, 0xFF, 0xDF, 0xC0, 0xFF, 0xFF, 0xC0, 0xC0,
+  0xC0, 0xFE, 0xFE, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xC0,
+  0xC0, 0xFE, 0xFE, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x3E, 0x3F, 0xB8, 0xF8,
+  0x0C, 0x06, 0x3F, 0x1F, 0x83, 0xC1, 0xF1, 0xDF, 0xC7, 0xC0, 0xC1, 0xE0,
+  0xF0, 0x78, 0x3C, 0x1F, 0xFF, 0xFF, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x30,
+  0xFF, 0xFF, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x1F,
+  0xF3, 0xC0, 0xC1, 0xB0, 0xCC, 0x63, 0x30, 0xDC, 0x37, 0x0F, 0xE3, 0x98,
+  0xC3, 0x30, 0xCC, 0x1B, 0x07, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xC0, 0x7C, 0x1F, 0x83, 0xF0, 0xFF, 0x1F,
+  0xE3, 0xF6, 0xDE, 0xDB, 0xCE, 0x79, 0xCF, 0x01, 0xE0, 0x30, 0xC1, 0xF0,
+  0xF8, 0x7E, 0x3D, 0x9E, 0xCF, 0x37, 0x9B, 0xC7, 0xE1, 0xF0, 0xF8, 0x30,
+  0x3E, 0x3F, 0xB8, 0xF8, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xF1, 0xDF,
+  0xC7, 0xC0, 0xFE, 0x7F, 0xB0, 0xF8, 0x3C, 0x3F, 0xFB, 0xF9, 0x80, 0xC0,
+  0x60, 0x30, 0x18, 0x00, 0x3E, 0x1F, 0xCE, 0x3B, 0x06, 0xC1, 0xB0, 0x6C,
+  0x1B, 0x16, 0xCF, 0xB8, 0xE7, 0xFC, 0xFB, 0xFE, 0x3F, 0xCC, 0x1B, 0x06,
+  0xC3, 0xBF, 0xCF, 0xE3, 0x18, 0xC6, 0x30, 0xCC, 0x3B, 0x06, 0x1F, 0x0F,
+  0xF7, 0x09, 0x80, 0x60, 0x0F, 0x80, 0xF8, 0x03, 0x00, 0xD8, 0x77, 0xF8,
+  0x7C, 0xFF, 0xFF, 0xC6, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
+  0x06, 0x03, 0x00, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83,
+  0xC1, 0xF1, 0xDF, 0xC7, 0xC0, 0xC0, 0xD0, 0x66, 0x19, 0x86, 0x23, 0x0C,
+  0xC3, 0x30, 0x58, 0x1E, 0x07, 0x80, 0xC0, 0x30, 0xC3, 0x0D, 0x8C, 0x36,
+  0x38, 0xD8, 0xE3, 0x66, 0x98, 0x9B, 0x63, 0x4D, 0x8F, 0x36, 0x3C, 0x70,
+  0x71, 0xC1, 0x87, 0x06, 0x08, 0xE1, 0x98, 0xC3, 0x30, 0xD8, 0x1E, 0x07,
+  0x01, 0xC0, 0x78, 0x36, 0x1C, 0xC6, 0x1B, 0x06, 0xE1, 0xD8, 0x63, 0x30,
+  0xCC, 0x1E, 0x07, 0x80, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0xFF,
+  0xFF, 0x06, 0x06, 0x0C, 0x18, 0x18, 0x30, 0x60, 0xE0, 0xFF, 0xFF, 0xFC,
+  0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCF, 0xC1, 0x04, 0x18, 0x20, 0x83, 0x04,
+  0x18, 0x60, 0x83, 0xF3, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x08, 0x0C,
+  0x05, 0x06, 0x82, 0x63, 0x11, 0x0D, 0x82, 0xFF, 0x80, 0xE6, 0x30, 0x3C,
+  0xFC, 0x1B, 0xFF, 0xF8, 0xF1, 0xFF, 0x7E, 0xC1, 0x83, 0x06, 0xEF, 0xF8,
+  0xF1, 0xC3, 0xC7, 0x8F, 0xFE, 0xE0, 0x3C, 0xFF, 0x8E, 0x0C, 0x18, 0x38,
+  0x3F, 0x3C, 0x06, 0x0C, 0x1B, 0xBF, 0xF8, 0xF1, 0xE3, 0xC7, 0x8F, 0xFB,
+  0xB0, 0x38, 0xFB, 0x1F, 0xFF, 0xF8, 0x39, 0x3F, 0x3C, 0x3B, 0xD9, 0xFF,
+  0xB1, 0x8C, 0x63, 0x18, 0xC0, 0x77, 0xFF, 0x1E, 0x3C, 0x78, 0xF1, 0xFF,
+  0x76, 0x0D, 0x3F, 0xE7, 0x80, 0xC1, 0x83, 0x06, 0xEF, 0xF8, 0xF1, 0xE3,
+  0xC7, 0x8F, 0x1E, 0x30, 0xF3, 0xFF, 0xFF, 0x33, 0x03, 0x33, 0x33, 0x33,
+  0x33, 0x33, 0xFE, 0xC0, 0xC0, 0xC0, 0xC6, 0xCC, 0xD8, 0xD8, 0xF8, 0xEC,
+  0xCC, 0xC6, 0xC3, 0xDB, 0x6D, 0xB6, 0xDB, 0xB0, 0xDD, 0xEF, 0xFF, 0xC6,
+  0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xC6, 0x30, 0xDD, 0xFF,
+  0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC6, 0x38, 0xFB, 0x1E, 0x3C, 0x78, 0xF1,
+  0xBE, 0x38, 0xDD, 0xFF, 0x1E, 0x38, 0x78, 0xF1, 0xFF, 0xDD, 0x83, 0x06,
+  0x0C, 0x00, 0x77, 0xFF, 0x1E, 0x3C, 0x78, 0xF1, 0xFF, 0x76, 0x0C, 0x18,
+  0x30, 0x60, 0xDF, 0xFC, 0x30, 0xC3, 0x0C, 0x30, 0xC0, 0x3E, 0x7F, 0x62,
+  0x60, 0x3E, 0x03, 0x43, 0x7F, 0x3E, 0x66, 0x6F, 0xF6, 0x66, 0x66, 0x73,
+  0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xFF, 0x76, 0xC3, 0xC2, 0x66, 0x66,
+  0x24, 0x3C, 0x3C, 0x18, 0x18, 0xC2, 0x1A, 0x31, 0x99, 0xCC, 0xCA, 0x66,
+  0xD2, 0x16, 0xF0, 0xE7, 0x87, 0x18, 0x18, 0xC0, 0x63, 0x66, 0x3E, 0x1C,
+  0x18, 0x3C, 0x36, 0x66, 0xE3, 0xC3, 0xC2, 0x66, 0x66, 0x24, 0x3C, 0x3C,
+  0x18, 0x18, 0x18, 0x30, 0x70, 0x60, 0xFF, 0xF0, 0x86, 0x31, 0x84, 0x3F,
+  0xFC, 0x1C, 0xC3, 0x0C, 0x30, 0xCC, 0x1C, 0x30, 0xC3, 0x0C, 0x30, 0x70,
+  0xFF, 0xFF, 0xFF, 0xE1, 0x8C, 0x63, 0x18, 0x63, 0x31, 0x8C, 0x63, 0x70,
+  0x71, 0xFF, 0x8E };
+
+const GFXglyph DINAlternateBold9pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   4,    0,    0 },   // 0x20 ' '
+  {     1,   2,  12,   4,    1,  -11 },   // 0x21 '!'
+  {     4,   4,   3,   6,    1,  -11 },   // 0x22 '"'
+  {     6,   8,  12,  10,    1,  -11 },   // 0x23 '#'
+  {    18,   8,  16,   9,    0,  -13 },   // 0x24 '$'
+  {    34,   7,  12,   9,    1,  -11 },   // 0x25 '%'
+  {    45,  11,  12,  12,    1,  -11 },   // 0x26 '&'
+  {    62,   2,   3,   4,    1,  -11 },   // 0x27 '''
+  {    63,   4,  14,   5,    1,  -11 },   // 0x28 '('
+  {    70,   4,  14,   5,    0,  -11 },   // 0x29 ')'
+  {    77,   5,   5,   7,    1,  -11 },   // 0x2A '*'
+  {    81,   9,   9,  11,    1,   -8 },   // 0x2B '+'
+  {    92,   2,   3,   4,    1,   -1 },   // 0x2C ','
+  {    93,   5,   2,   7,    1,   -5 },   // 0x2D '-'
+  {    95,   2,   2,   4,    1,   -1 },   // 0x2E '.'
+  {    96,   6,  12,   6,    0,  -11 },   // 0x2F '/'
+  {   105,   7,  12,   8,    1,  -11 },   // 0x30 '0'
+  {   116,   4,  12,   8,    2,  -11 },   // 0x31 '1'
+  {   122,   7,  12,   8,    1,  -11 },   // 0x32 '2'
+  {   133,   7,  12,   8,    1,  -11 },   // 0x33 '3'
+  {   144,   8,  12,   8,    1,  -11 },   // 0x34 '4'
+  {   156,   7,  12,   8,    1,  -11 },   // 0x35 '5'
+  {   167,   7,  13,   8,    1,  -11 },   // 0x36 '6'
+  {   179,   7,  12,   8,    1,  -11 },   // 0x37 '7'
+  {   190,   7,  12,   8,    1,  -11 },   // 0x38 '8'
+  {   201,   7,  12,   8,    1,  -11 },   // 0x39 '9'
+  {   212,   2,   6,   4,    1,   -5 },   // 0x3A ':'
+  {   214,   2,   7,   4,    1,   -5 },   // 0x3B ';'
+  {   216,   9,   9,  11,    1,   -8 },   // 0x3C '<'
+  {   227,   9,   5,  11,    1,   -6 },   // 0x3D '='
+  {   233,   9,   9,  11,    1,   -8 },   // 0x3E '>'
+  {   244,   6,  12,   8,    1,  -11 },   // 0x3F '?'
+  {   253,  13,  12,  15,    1,  -11 },   // 0x40 '@'
+  {   273,  11,  12,  11,    0,  -11 },   // 0x41 'A'
+  {   290,   9,  12,  11,    1,  -11 },   // 0x42 'B'
+  {   304,   9,  12,  10,    1,  -11 },   // 0x43 'C'
+  {   318,   9,  12,  11,    1,  -11 },   // 0x44 'D'
+  {   332,   8,  12,  10,    1,  -11 },   // 0x45 'E'
+  {   344,   8,  12,  10,    1,  -11 },   // 0x46 'F'
+  {   356,   9,  12,  11,    1,  -11 },   // 0x47 'G'
+  {   370,   9,  12,  11,    1,  -11 },   // 0x48 'H'
+  {   384,   2,  12,   4,    1,  -11 },   // 0x49 'I'
+  {   387,   7,  12,   8,    0,  -11 },   // 0x4A 'J'
+  {   398,  10,  12,  11,    1,  -11 },   // 0x4B 'K'
+  {   413,   8,  12,  10,    1,  -11 },   // 0x4C 'L'
+  {   425,  11,  12,  13,    1,  -11 },   // 0x4D 'M'
+  {   442,   9,  12,  11,    1,  -11 },   // 0x4E 'N'
+  {   456,   9,  12,  11,    1,  -11 },   // 0x4F 'O'
+  {   470,   9,  12,  11,    1,  -11 },   // 0x50 'P'
+  {   484,  10,  12,  11,    1,  -11 },   // 0x51 'Q'
+  {   499,  10,  12,  11,    1,  -11 },   // 0x52 'R'
+  {   514,  10,  12,  11,    0,  -11 },   // 0x53 'S'
+  {   529,   9,  12,  11,    1,  -11 },   // 0x54 'T'
+  {   543,   9,  12,  11,    1,  -11 },   // 0x55 'U'
+  {   557,  10,  12,  10,    0,  -11 },   // 0x56 'V'
+  {   572,  14,  12,  15,    0,  -11 },   // 0x57 'W'
+  {   593,  10,  12,   9,    0,  -11 },   // 0x58 'X'
+  {   608,  10,  12,  10,    0,  -11 },   // 0x59 'Y'
+  {   623,   8,  12,  10,    1,  -11 },   // 0x5A 'Z'
+  {   635,   4,  14,   5,    1,  -11 },   // 0x5B '['
+  {   642,   6,  12,   6,    0,  -11 },   // 0x5C '\'
+  {   651,   4,  14,   5,    0,  -11 },   // 0x5D ']'
+  {   658,   9,   8,  11,    1,  -12 },   // 0x5E '^'
+  {   667,   9,   1,   9,    0,    2 },   // 0x5F '_'
+  {   669,   4,   3,   4,   -1,  -12 },   // 0x60 '`'
+  {   671,   7,   9,   9,    1,   -8 },   // 0x61 'a'
+  {   679,   7,  12,   9,    1,  -11 },   // 0x62 'b'
+  {   690,   7,   9,   9,    1,   -8 },   // 0x63 'c'
+  {   698,   7,  12,   9,    1,  -11 },   // 0x64 'd'
+  {   709,   7,   9,   9,    1,   -8 },   // 0x65 'e'
+  {   717,   5,  12,   6,    1,  -11 },   // 0x66 'f'
+  {   725,   7,  13,   9,    1,   -8 },   // 0x67 'g'
+  {   737,   7,  12,   9,    1,  -11 },   // 0x68 'h'
+  {   748,   2,  12,   4,    1,  -11 },   // 0x69 'i'
+  {   751,   4,  16,   4,   -1,  -11 },   // 0x6A 'j'
+  {   759,   8,  12,   9,    1,  -11 },   // 0x6B 'k'
+  {   771,   3,  12,   5,    1,  -11 },   // 0x6C 'l'
+  {   776,  12,   9,  14,    1,   -8 },   // 0x6D 'm'
+  {   790,   7,   9,   9,    1,   -8 },   // 0x6E 'n'
+  {   798,   7,   9,   9,    1,   -8 },   // 0x6F 'o'
+  {   806,   7,  13,   9,    1,   -8 },   // 0x70 'p'
+  {   818,   7,  13,   9,    1,   -8 },   // 0x71 'q'
+  {   830,   6,   9,   7,    1,   -8 },   // 0x72 'r'
+  {   837,   8,   9,   9,    0,   -8 },   // 0x73 's'
+  {   846,   4,  12,   6,    1,  -11 },   // 0x74 't'
+  {   852,   7,   9,   9,    1,   -8 },   // 0x75 'u'
+  {   860,   8,   9,   8,    0,   -8 },   // 0x76 'v'
+  {   869,  13,   9,  13,    0,   -8 },   // 0x77 'w'
+  {   884,   8,   9,   8,    0,   -8 },   // 0x78 'x'
+  {   893,   8,  13,   8,    0,   -8 },   // 0x79 'y'
+  {   906,   6,   9,   8,    1,   -8 },   // 0x7A 'z'
+  {   913,   6,  14,   6,    0,  -11 },   // 0x7B '{'
+  {   924,   2,  12,   4,    1,  -11 },   // 0x7C '|'
+  {   927,   5,  14,   6,    0,  -11 },   // 0x7D '}'
+  {   936,   8,   3,  11,    1,   -5 } }; // 0x7E '~'
+
+const GFXfont DINAlternateBold9pt7b PROGMEM = {
+  (uint8_t  *)DINAlternateBold9pt7bBitmaps,
+  (GFXglyph *)DINAlternateBold9pt7bGlyphs,
+  0x20, 0x7E, 21 };
+
+// Approx. 1611 bytes
+const uint8_t DINCondensedBold9pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xFF, 0xCF, 0xFF, 0xF0, 0x25, 0x96, 0xFF, 0x49, 0x24, 0xBF,
+  0xDB, 0x69, 0x24, 0x10, 0xE7, 0xF7, 0xDF, 0x4F, 0x0F, 0x1C, 0x7D, 0xF7,
+  0x7C, 0x41, 0x00, 0xEE, 0xAE, 0x86, 0x10, 0x42, 0x08, 0x7D, 0x55, 0x77,
+  0x78, 0xFC, 0xCC, 0xCC, 0x78, 0x30, 0x70, 0xDB, 0xCE, 0xCE, 0xFE, 0x73,
+  0xFC, 0x2D, 0x2D, 0xB6, 0xD9, 0x26, 0x40, 0x99, 0x26, 0xDB, 0x6D, 0x2D,
+  0x00, 0x25, 0x5C, 0xEA, 0x90, 0x18, 0x0C, 0x06, 0x03, 0x0F, 0xFF, 0xFC,
+  0x60, 0x30, 0x18, 0x00, 0xF8, 0xFF, 0xC0, 0xF0, 0x33, 0x22, 0x26, 0x64,
+  0x44, 0xCC, 0x77, 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xFE, 0xE0, 0x7F, 0xB3,
+  0x33, 0x33, 0x33, 0x33, 0x77, 0xF7, 0xB1, 0x98, 0xCC, 0x66, 0x3F, 0xF0,
+  0x77, 0xF6, 0x33, 0x98, 0x63, 0xDE, 0xFE, 0xE0, 0x30, 0xC6, 0x18, 0x61,
+  0x6D, 0xB6, 0xFF, 0xF1, 0x86, 0xFF, 0xF1, 0x8F, 0x7E, 0x63, 0x1E, 0xFE,
+  0xE0, 0x31, 0x88, 0xC6, 0x7F, 0x7B, 0xDE, 0xFE, 0xE0, 0xFF, 0xFC, 0x86,
+  0x18, 0x63, 0x0C, 0x31, 0x86, 0x18, 0x77, 0xF7, 0xBF, 0xFF, 0x7B, 0xDE,
+  0xFE, 0xE0, 0x77, 0xF7, 0xBD, 0xEF, 0xE6, 0x31, 0x18, 0xC0, 0xF0, 0xF0,
+  0xF0, 0xF8, 0x00, 0x81, 0xC7, 0x8E, 0x0C, 0x03, 0x80, 0x70, 0x0E, 0x00,
+  0x80, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xF8, 0x80, 0x70, 0x0F, 0x00, 0xE0,
+  0x18, 0x38, 0x70, 0xE0, 0x80, 0x00, 0x77, 0xF3, 0x90, 0x8C, 0xC6, 0x30,
+  0x0C, 0x60, 0x0F, 0x81, 0xC3, 0x1B, 0xDC, 0xFE, 0xBD, 0x89, 0xF8, 0x4F,
+  0xC6, 0xFE, 0x26, 0x7F, 0xF3, 0xE7, 0x8E, 0x18, 0x1F, 0x00, 0x10, 0x70,
+  0xE1, 0x42, 0x85, 0x9B, 0x3E, 0x7C, 0x8F, 0x1E, 0x30, 0xFB, 0xFC, 0xF3,
+  0xFB, 0xEC, 0xF3, 0xCF, 0x3F, 0xFE, 0x7B, 0xFC, 0xF3, 0xC3, 0x0C, 0x30,
+  0xCF, 0x3F, 0xDE, 0xFB, 0xFC, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0x3F, 0xFE,
+  0xFF, 0xFC, 0x30, 0xC3, 0xEF, 0xB0, 0xC3, 0x0F, 0xFF, 0xFF, 0xFC, 0x30,
+  0xC3, 0xEF, 0xB0, 0xC3, 0x0C, 0x30, 0x7B, 0xFC, 0xF0, 0xC3, 0x7D, 0xF3,
+  0xCF, 0x3F, 0xDE, 0xCF, 0x3C, 0xF3, 0xCF, 0xFF, 0xF3, 0xCF, 0x3C, 0xF3,
+  0xFF, 0xFF, 0xFF, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x37, 0xDE,
+  0xCD, 0x9B, 0x66, 0xCF, 0x1E, 0x3E, 0x7C, 0xCD, 0x9B, 0x36, 0x30, 0xC3,
+  0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0F, 0xFF, 0xC3, 0xC3, 0xE7, 0xE7,
+  0xE7, 0xFF, 0xDB, 0xDB, 0xDB, 0xDB, 0xC3, 0xC3, 0xCF, 0x3E, 0xFB, 0xEF,
+  0xBD, 0xF7, 0xDF, 0x7C, 0xF3, 0x7B, 0xFC, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF,
+  0x3F, 0xDE, 0xFB, 0xFC, 0xF3, 0xCF, 0xFF, 0xB0, 0xC3, 0x0C, 0x30, 0x79,
+  0xFB, 0x36, 0x6C, 0xD9, 0xB3, 0x66, 0xDD, 0xBB, 0xF3, 0xA0, 0xFB, 0xFC,
+  0xF3, 0xCF, 0xFF, 0x36, 0xDB, 0x2C, 0xF3, 0x7B, 0xFC, 0xF3, 0xC1, 0xC1,
+  0xC3, 0xCF, 0x3F, 0xDE, 0xFF, 0xF3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3,
+  0x0C, 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0x3F, 0xDE, 0xC6, 0x8D,
+  0x93, 0x66, 0xCD, 0x8B, 0x14, 0x38, 0x70, 0xE0, 0x80, 0xCC, 0xD3, 0x34,
+  0xCD, 0xBB, 0x6E, 0x9F, 0xA7, 0xA9, 0xEE, 0x33, 0x8C, 0xE3, 0x38, 0xC4,
+  0xC6, 0xD9, 0xB1, 0xC3, 0x86, 0x0E, 0x1C, 0x68, 0xD9, 0x36, 0x30, 0xCF,
+  0x3C, 0xDE, 0x79, 0xE3, 0x0C, 0x30, 0xC3, 0x0C, 0xFF, 0xC6, 0x23, 0x19,
+  0x8C, 0x46, 0x3F, 0xF0, 0xFB, 0x6D, 0xB6, 0xDB, 0x6D, 0xC0, 0xCC, 0x44,
+  0x46, 0x62, 0x22, 0x33, 0xED, 0xB6, 0xDB, 0x6D, 0xB7, 0xC0, 0x08, 0x0C,
+  0x07, 0x06, 0x82, 0x23, 0x11, 0x05, 0x82, 0xFF, 0x80, 0xC6, 0x20, 0x7B,
+  0xF0, 0xDF, 0xFF, 0x3C, 0xFF, 0x6C, 0xC6, 0x31, 0xFF, 0xEF, 0x7B, 0xDE,
+  0xFF, 0xF0, 0x73, 0xEC, 0xB0, 0xC3, 0x0C, 0xBE, 0x70, 0x18, 0xC7, 0xFF,
+  0xEF, 0x7B, 0xDE, 0xFF, 0xF0, 0x77, 0xF7, 0xFF, 0xE3, 0x7F, 0x70, 0x37,
+  0x6F, 0xF6, 0x66, 0x66, 0x66, 0xFF, 0xF7, 0xBD, 0xEF, 0x7F, 0xF8, 0xF7,
+  0xF7, 0x00, 0xC6, 0x31, 0xFF, 0xEF, 0x7B, 0xDE, 0xF7, 0xB0, 0xF3, 0xFF,
+  0xFF, 0x6C, 0x36, 0xDB, 0x6D, 0xB6, 0xFE, 0xC3, 0x0C, 0x33, 0xDB, 0x6F,
+  0x3C, 0xFB, 0x6C, 0xF3, 0xDB, 0x6D, 0xB6, 0xDB, 0xB0, 0xF6, 0xFF, 0xDB,
+  0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xFF, 0xF7, 0xBD, 0xEF, 0x7B, 0xD8,
+  0x77, 0xF7, 0xBD, 0xEF, 0x7F, 0x70, 0xFF, 0xF7, 0xBD, 0xEF, 0x7F, 0xFE,
+  0x31, 0x8C, 0x00, 0xFF, 0xF7, 0xBD, 0xEF, 0x7F, 0xF8, 0xC6, 0x31, 0x80,
+  0xDF, 0xCC, 0xCC, 0xCC, 0xC0, 0x77, 0xF7, 0x87, 0x0F, 0x7F, 0x70, 0x66,
+  0x6F, 0xF6, 0x66, 0x66, 0x73, 0xDE, 0xF7, 0xBD, 0xEF, 0x7F, 0xF8, 0xCF,
+  0x34, 0xDA, 0x79, 0xE3, 0x8C, 0x30, 0xCD, 0xE6, 0xD3, 0x6F, 0xB7, 0xD3,
+  0xB8, 0xDC, 0x6E, 0x32, 0x00, 0xCD, 0x67, 0x8C, 0x31, 0xC7, 0x96, 0xCC,
+  0xC4, 0xD9, 0xB3, 0x62, 0x85, 0x0E, 0x1C, 0x18, 0x20, 0xC3, 0x86, 0x00,
+  0xFF, 0xC6, 0x62, 0x33, 0x1F, 0xF8, 0x36, 0x66, 0x66, 0x68, 0x66, 0x66,
+  0x63, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xC6, 0x66, 0x66, 0x61, 0x66, 0x66,
+  0x6C, 0x71, 0xFF, 0x8E };
+
+const GFXglyph DINCondensedBold9pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   3,    0,    0 },   // 0x20 ' '
+  {     1,   2,  12,   4,    1,  -11 },   // 0x21 '!'
+  {     4,   4,   3,   6,    1,  -11 },   // 0x22 '"'
+  {     6,   6,  12,   8,    1,  -11 },   // 0x23 '#'
+  {    15,   6,  15,   8,    1,  -12 },   // 0x24 '$'
+  {    27,   6,  12,   8,    1,  -11 },   // 0x25 '%'
+  {    36,   8,  12,   9,    1,  -11 },   // 0x26 '&'
+  {    48,   2,   3,   4,    1,  -11 },   // 0x27 '''
+  {    49,   3,  14,   4,    1,  -11 },   // 0x28 '('
+  {    55,   3,  14,   4,    0,  -11 },   // 0x29 ')'
+  {    61,   5,   6,   7,    1,  -11 },   // 0x2A '*'
+  {    65,   9,   9,  11,    1,   -8 },   // 0x2B '+'
+  {    76,   2,   3,   4,    1,   -1 },   // 0x2C ','
+  {    77,   5,   2,   7,    1,   -5 },   // 0x2D '-'
+  {    79,   2,   2,   4,    1,   -1 },   // 0x2E '.'
+  {    80,   4,  12,   4,    0,  -11 },   // 0x2F '/'
+  {    86,   5,  12,   7,    1,  -11 },   // 0x30 '0'
+  {    94,   4,  12,   7,    1,  -11 },   // 0x31 '1'
+  {   100,   5,  12,   7,    1,  -11 },   // 0x32 '2'
+  {   108,   5,  12,   7,    1,  -11 },   // 0x33 '3'
+  {   116,   6,  12,   7,    1,  -11 },   // 0x34 '4'
+  {   125,   5,  12,   7,    1,  -11 },   // 0x35 '5'
+  {   133,   5,  12,   7,    1,  -11 },   // 0x36 '6'
+  {   141,   6,  12,   7,    1,  -11 },   // 0x37 '7'
+  {   150,   5,  12,   7,    1,  -11 },   // 0x38 '8'
+  {   158,   5,  12,   7,    1,  -11 },   // 0x39 '9'
+  {   166,   2,   6,   4,    1,   -5 },   // 0x3A ':'
+  {   168,   2,   7,   4,    1,   -5 },   // 0x3B ';'
+  {   170,   9,   9,  11,    1,   -8 },   // 0x3C '<'
+  {   181,   9,   5,  11,    1,   -6 },   // 0x3D '='
+  {   187,   9,   9,  11,    1,   -8 },   // 0x3E '>'
+  {   198,   5,  12,   7,    1,  -11 },   // 0x3F '?'
+  {   206,  13,  12,  15,    1,  -11 },   // 0x40 '@'
+  {   226,   7,  12,   7,    0,  -11 },   // 0x41 'A'
+  {   237,   6,  12,   8,    1,  -11 },   // 0x42 'B'
+  {   246,   6,  12,   8,    1,  -11 },   // 0x43 'C'
+  {   255,   6,  12,   8,    1,  -11 },   // 0x44 'D'
+  {   264,   6,  12,   7,    1,  -11 },   // 0x45 'E'
+  {   273,   6,  12,   7,    1,  -11 },   // 0x46 'F'
+  {   282,   6,  12,   8,    1,  -11 },   // 0x47 'G'
+  {   291,   6,  12,   8,    1,  -11 },   // 0x48 'H'
+  {   300,   2,  12,   4,    1,  -11 },   // 0x49 'I'
+  {   303,   6,  12,   6,   -1,  -11 },   // 0x4A 'J'
+  {   312,   7,  12,   8,    1,  -11 },   // 0x4B 'K'
+  {   323,   6,  12,   7,    1,  -11 },   // 0x4C 'L'
+  {   332,   8,  12,  10,    1,  -11 },   // 0x4D 'M'
+  {   344,   6,  12,   8,    1,  -11 },   // 0x4E 'N'
+  {   353,   6,  12,   8,    1,  -11 },   // 0x4F 'O'
+  {   362,   6,  12,   8,    1,  -11 },   // 0x50 'P'
+  {   371,   7,  12,   8,    1,  -11 },   // 0x51 'Q'
+  {   382,   6,  12,   8,    1,  -11 },   // 0x52 'R'
+  {   391,   6,  12,   8,    1,  -11 },   // 0x53 'S'
+  {   400,   6,  12,   6,    0,  -11 },   // 0x54 'T'
+  {   409,   6,  12,   8,    1,  -11 },   // 0x55 'U'
+  {   418,   7,  12,   7,    0,  -11 },   // 0x56 'V'
+  {   429,  10,  12,  10,    0,  -11 },   // 0x57 'W'
+  {   444,   7,  12,   7,    0,  -11 },   // 0x58 'X'
+  {   455,   6,  12,   8,    1,  -11 },   // 0x59 'Y'
+  {   464,   5,  12,   7,    1,  -11 },   // 0x5A 'Z'
+  {   472,   3,  14,   4,    1,  -11 },   // 0x5B '['
+  {   478,   4,  12,   4,    0,  -11 },   // 0x5C '\'
+  {   484,   3,  14,   4,    0,  -11 },   // 0x5D ']'
+  {   490,   9,   8,  11,    1,  -12 },   // 0x5E '^'
+  {   499,   9,   1,   9,    0,    2 },   // 0x5F '_'
+  {   501,   4,   3,   3,   -1,  -12 },   // 0x60 '`'
+  {   503,   6,   9,   8,    1,   -8 },   // 0x61 'a'
+  {   510,   5,  12,   7,    1,  -11 },   // 0x62 'b'
+  {   518,   6,   9,   7,    1,   -8 },   // 0x63 'c'
+  {   525,   5,  12,   7,    1,  -11 },   // 0x64 'd'
+  {   533,   5,   9,   7,    1,   -8 },   // 0x65 'e'
+  {   539,   4,  12,   5,    1,  -11 },   // 0x66 'f'
+  {   545,   5,  13,   7,    1,   -8 },   // 0x67 'g'
+  {   554,   5,  12,   7,    1,  -11 },   // 0x68 'h'
+  {   562,   2,  12,   4,    1,  -11 },   // 0x69 'i'
+  {   565,   3,  16,   4,    0,  -11 },   // 0x6A 'j'
+  {   571,   6,  12,   7,    1,  -11 },   // 0x6B 'k'
+  {   580,   3,  12,   4,    1,  -11 },   // 0x6C 'l'
+  {   585,   8,   9,  10,    1,   -8 },   // 0x6D 'm'
+  {   594,   5,   9,   7,    1,   -8 },   // 0x6E 'n'
+  {   600,   5,   9,   7,    1,   -8 },   // 0x6F 'o'
+  {   606,   5,  13,   7,    1,   -8 },   // 0x70 'p'
+  {   615,   5,  13,   7,    1,   -8 },   // 0x71 'q'
+  {   624,   4,   9,   5,    1,   -8 },   // 0x72 'r'
+  {   629,   5,   9,   7,    1,   -8 },   // 0x73 's'
+  {   635,   4,  12,   4,    0,  -11 },   // 0x74 't'
+  {   641,   5,   9,   7,    1,   -8 },   // 0x75 'u'
+  {   647,   6,   9,   6,    0,   -8 },   // 0x76 'v'
+  {   654,   9,   9,   9,    0,   -8 },   // 0x77 'w'
+  {   665,   6,   9,   6,    0,   -8 },   // 0x78 'x'
+  {   672,   7,  13,   6,    0,   -8 },   // 0x79 'y'
+  {   684,   5,   9,   7,    1,   -8 },   // 0x7A 'z'
+  {   690,   4,  14,   5,    1,  -11 },   // 0x7B '{'
+  {   697,   2,  17,   4,    1,  -12 },   // 0x7C '|'
+  {   702,   4,  14,   4,    0,  -11 },   // 0x7D '}'
+  {   709,   8,   3,  11,    1,   -5 } }; // 0x7E '~'
+
+const GFXfont DINCondensedBold9pt7b PROGMEM = {
+  (uint8_t  *)DINCondensedBold9pt7bBitmaps,
+  (GFXglyph *)DINCondensedBold9pt7bGlyphs,
+  0x20, 0x7E, 21 };
+
+// Approx. 1384 bytes
+const uint8_t EuphemiaCAS9pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xFF, 0xF0, 0x40, 0xDE, 0xD2, 0x0C, 0x20, 0x20, 0x80, 0x82,
+  0x1F, 0xFF, 0x08, 0x60, 0x21, 0x01, 0x84, 0x06, 0x10, 0x10, 0x40, 0x41,
+  0x0F, 0xFF, 0x84, 0x30, 0x10, 0x80, 0xC2, 0x03, 0x08, 0x00, 0x08, 0x1E,
+  0x3B, 0x4A, 0x48, 0x48, 0x68, 0x3C, 0x0E, 0x0B, 0x09, 0x09, 0x49, 0xEA,
+  0x3E, 0x08, 0x08, 0x70, 0x14, 0x41, 0x22, 0x19, 0x10, 0x88, 0x88, 0x44,
+  0x82, 0x2C, 0x0E, 0xDE, 0x05, 0x08, 0x48, 0x46, 0x42, 0x62, 0x12, 0x19,
+  0xA0, 0x7B, 0x00, 0x00, 0x3C, 0x0C, 0x41, 0x08, 0x21, 0x02, 0x40, 0x70,
+  0x1E, 0x06, 0x63, 0x84, 0x50, 0x5A, 0x06, 0x21, 0xE3, 0xE6, 0xF4, 0x12,
+  0x44, 0xC8, 0x88, 0x88, 0x84, 0x44, 0x21, 0x84, 0x22, 0x31, 0x11, 0x11,
+  0x12, 0x22, 0x48, 0x11, 0xAC, 0xE0, 0x83, 0x9A, 0xC4, 0x00, 0x08, 0x04,
+  0x02, 0x01, 0x0F, 0xF8, 0x40, 0x20, 0x10, 0x08, 0x00, 0xD6, 0xF8, 0xC0,
+  0x00, 0x80, 0x40, 0x40, 0x60, 0x20, 0x30, 0x10, 0x10, 0x08, 0x08, 0x04,
+  0x04, 0x02, 0x02, 0x01, 0x01, 0x00, 0x80, 0x00, 0x3C, 0x42, 0x42, 0x81,
+  0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x42, 0x3C, 0x33, 0xC9, 0x04,
+  0x10, 0x41, 0x04, 0x10, 0x41, 0x04, 0x7C, 0x3E, 0x63, 0x01, 0x01, 0x01,
+  0x03, 0x06, 0x0C, 0x10, 0x60, 0x40, 0x80, 0xFE, 0x7C, 0x82, 0x01, 0x02,
+  0x02, 0x1C, 0x02, 0x01, 0x01, 0x01, 0x01, 0x82, 0xFC, 0x02, 0x06, 0x0A,
+  0x0A, 0x12, 0x22, 0x62, 0x42, 0xFF, 0x02, 0x02, 0x02, 0x02, 0xFD, 0x02,
+  0x04, 0x0F, 0x90, 0x80, 0x81, 0x02, 0x04, 0x0C, 0x2F, 0x80, 0x1F, 0x22,
+  0x40, 0xC0, 0xFC, 0xC2, 0x81, 0x81, 0x81, 0x81, 0xC1, 0x42, 0x3C, 0xFF,
+  0x01, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x08, 0x18, 0x10, 0x30, 0x20,
+  0x3C, 0xC3, 0x81, 0x81, 0xC3, 0x3C, 0x3C, 0x42, 0x81, 0x81, 0x81, 0x42,
+  0x3C, 0x3C, 0x42, 0x81, 0x81, 0x81, 0x81, 0x43, 0x3F, 0x03, 0x03, 0x02,
+  0x84, 0xF8, 0xC0, 0x03, 0xC0, 0x03, 0x58, 0x04, 0x1C, 0x61, 0x82, 0x08,
+  0x20, 0x20, 0x20, 0x60, 0x60, 0x60, 0x60, 0xFF, 0x80, 0x00, 0x1F, 0xF0,
+  0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x86, 0x18, 0x61, 0x86, 0x08, 0x00,
+  0xFA, 0x20, 0x41, 0x04, 0x10, 0x8C, 0x21, 0x86, 0x00, 0x40, 0x07, 0xE0,
+  0x18, 0x18, 0x30, 0x04, 0x60, 0x02, 0x40, 0x02, 0x87, 0xE1, 0x88, 0x21,
+  0x90, 0x21, 0x90, 0x21, 0x90, 0x21, 0x90, 0x22, 0x88, 0x62, 0x47, 0xBC,
+  0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x07, 0xC0, 0x04, 0x01, 0x40, 0x28,
+  0x05, 0x81, 0x10, 0x22, 0x04, 0x61, 0xFC, 0x20, 0x84, 0x19, 0x03, 0x20,
+  0x2C, 0x06, 0xFD, 0x0E, 0x0C, 0x18, 0x5F, 0x21, 0x41, 0x83, 0x06, 0x0C,
+  0x2F, 0x80, 0x1F, 0x30, 0xD0, 0x18, 0x08, 0x04, 0x02, 0x01, 0x00, 0x80,
+  0x60, 0x10, 0x2C, 0x31, 0xF0, 0xFC, 0x20, 0xC8, 0x0A, 0x03, 0x80, 0x60,
+  0x18, 0x06, 0x01, 0x80, 0x60, 0x28, 0x1A, 0x0C, 0xFC, 0x00, 0xFF, 0x02,
+  0x04, 0x08, 0x1F, 0xA0, 0x40, 0x81, 0x02, 0x04, 0x0F, 0xE0, 0xFF, 0x02,
+  0x04, 0x08, 0x1F, 0xA0, 0x40, 0x81, 0x02, 0x04, 0x08, 0x00, 0x1F, 0x88,
+  0x34, 0x01, 0x00, 0x80, 0x20, 0x08, 0x02, 0x01, 0x80, 0x50, 0x14, 0x04,
+  0xC1, 0x1F, 0x80, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x1F, 0xFE,
+  0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x40, 0xFF, 0xF8, 0x02, 0x04,
+  0x08, 0x10, 0x20, 0x40, 0x81, 0x02, 0x07, 0x0E, 0x37, 0xC0, 0x83, 0x43,
+  0x23, 0x13, 0x0B, 0x07, 0x03, 0x01, 0xC0, 0xB0, 0x4C, 0x23, 0x10, 0xC8,
+  0x38, 0x81, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x81, 0x02, 0x04, 0x0F,
+  0xE0, 0x80, 0x1C, 0x03, 0xC0, 0x3E, 0x07, 0xA0, 0x5A, 0x05, 0xB0, 0xD9,
+  0x09, 0x99, 0x98, 0x91, 0x8F, 0x18, 0x61, 0x86, 0x10, 0x80, 0x70, 0x1E,
+  0x06, 0xC1, 0x90, 0x66, 0x18, 0xC6, 0x19, 0x86, 0x60, 0xD8, 0x1E, 0x07,
+  0x80, 0xC0, 0x0F, 0x83, 0x0C, 0x40, 0x24, 0x02, 0x80, 0x18, 0x01, 0x80,
+  0x18, 0x01, 0x80, 0x14, 0x02, 0x40, 0x23, 0x0C, 0x1F, 0x00, 0xFC, 0x82,
+  0x81, 0x81, 0x81, 0x86, 0xFC, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x0F,
+  0x83, 0x0C, 0x40, 0x24, 0x02, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80,
+  0x14, 0x03, 0x40, 0x23, 0x0C, 0x1F, 0x80, 0x10, 0x01, 0x80, 0x0C, 0x00,
+  0x60, 0xFC, 0x41, 0x20, 0x50, 0x28, 0x14, 0x33, 0xF1, 0x18, 0x84, 0x43,
+  0x20, 0x90, 0x68, 0x18, 0x1F, 0x10, 0xD0, 0x08, 0x06, 0x01, 0xC0, 0x38,
+  0x06, 0x00, 0x80, 0x50, 0x3C, 0x23, 0xE0, 0xFF, 0x84, 0x02, 0x01, 0x00,
+  0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x80, 0x80, 0x30,
+  0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06,
+  0x00, 0xB0, 0x63, 0xF8, 0xC0, 0x50, 0x36, 0x0D, 0x82, 0x21, 0x8C, 0x43,
+  0x10, 0x4C, 0x1A, 0x06, 0x80, 0xE0, 0x30, 0x0C, 0x00, 0xC1, 0x06, 0x83,
+  0x0D, 0x06, 0x13, 0x14, 0x26, 0x28, 0xC4, 0x59, 0x89, 0x92, 0x1A, 0x24,
+  0x34, 0x68, 0x28, 0xF0, 0x70, 0xC0, 0xC1, 0x81, 0x83, 0x00, 0x60, 0xC4,
+  0x10, 0xC6, 0x0D, 0x80, 0xA0, 0x18, 0x03, 0x80, 0x50, 0x1B, 0x02, 0x20,
+  0x82, 0x30, 0x6C, 0x06, 0xC1, 0xA0, 0x98, 0xC4, 0x41, 0x40, 0xA0, 0x20,
+  0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x80, 0x7F, 0x80, 0xC0, 0x40, 0x40,
+  0x60, 0x20, 0x20, 0x30, 0x10, 0x18, 0x18, 0x08, 0x0F, 0xF8, 0xF2, 0x49,
+  0x24, 0x92, 0x49, 0x24, 0xE0, 0x80, 0x40, 0x10, 0x08, 0x02, 0x01, 0x00,
+  0x40, 0x20, 0x08, 0x04, 0x01, 0x00, 0xC0, 0x20, 0x18, 0x04, 0x03, 0x00,
+  0x80, 0xE4, 0x92, 0x49, 0x24, 0x92, 0x49, 0xE0, 0x08, 0x05, 0x01, 0x20,
+  0x88, 0x61, 0x10, 0x68, 0x0C, 0xFF, 0x80, 0x4C, 0x21, 0x3C, 0x31, 0x00,
+  0x80, 0x47, 0xE6, 0x12, 0x09, 0x0C, 0x7B, 0x80, 0x80, 0x80, 0x80, 0x80,
+  0xBC, 0xC2, 0x81, 0x81, 0x81, 0x81, 0x83, 0x86, 0xFC, 0x3E, 0x43, 0x80,
+  0x80, 0x80, 0x80, 0xC0, 0x63, 0x3E, 0x01, 0x01, 0x01, 0x01, 0x3F, 0x41,
+  0xC1, 0x81, 0x81, 0x81, 0xC1, 0x41, 0x3F, 0x3C, 0x8E, 0x0F, 0xF8, 0x10,
+  0x30, 0x23, 0x3C, 0x3D, 0x04, 0x10, 0xF1, 0x04, 0x10, 0x41, 0x04, 0x10,
+  0x40, 0x3F, 0xE3, 0x20, 0x90, 0x4C, 0x63, 0xE2, 0x01, 0x00, 0x7C, 0x43,
+  0x20, 0x90, 0xC7, 0xC0, 0x80, 0x80, 0x80, 0x80, 0xBE, 0xC3, 0x81, 0x81,
+  0x81, 0x81, 0x81, 0x81, 0x81, 0xC0, 0x55, 0x55, 0x40, 0x30, 0x00, 0x22,
+  0x22, 0x22, 0x22, 0x22, 0x26, 0xC0, 0x81, 0x02, 0x04, 0x08, 0x73, 0x2C,
+  0x70, 0xB1, 0x32, 0x24, 0x68, 0x60, 0x92, 0x49, 0x24, 0x92, 0x4E, 0xB9,
+  0xD8, 0xC6, 0x10, 0xC2, 0x18, 0x43, 0x08, 0x61, 0x0C, 0x21, 0x84, 0x20,
+  0xBE, 0xC3, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x3E, 0x30, 0xB0,
+  0x70, 0x18, 0x0C, 0x07, 0x06, 0xC6, 0x3E, 0x00, 0xBC, 0xC2, 0x81, 0x81,
+  0x81, 0x81, 0x81, 0x82, 0xFC, 0x80, 0x80, 0x80, 0x80, 0x3F, 0x41, 0x81,
+  0x81, 0x81, 0x81, 0xC1, 0x41, 0x3F, 0x01, 0x01, 0x01, 0x01, 0xBE, 0x21,
+  0x08, 0x42, 0x10, 0x80, 0x7D, 0x0E, 0x06, 0x03, 0x80, 0xC0, 0xE1, 0x7C,
+  0x42, 0x11, 0xE4, 0x21, 0x08, 0x42, 0x10, 0xF0, 0x83, 0x06, 0x0C, 0x18,
+  0x30, 0x60, 0xC3, 0x7A, 0x81, 0x83, 0x82, 0x46, 0x46, 0x24, 0x2C, 0x2C,
+  0x18, 0xC4, 0x34, 0x62, 0x46, 0x66, 0xA6, 0x29, 0x42, 0x94, 0x29, 0xC1,
+  0x18, 0x10, 0x80, 0x43, 0x26, 0x24, 0x18, 0x18, 0x1C, 0x24, 0x66, 0xC3,
+  0xC1, 0xA0, 0x98, 0xC4, 0x43, 0x20, 0xA0, 0x50, 0x38, 0x08, 0x04, 0x06,
+  0x02, 0x0E, 0x00, 0xFE, 0x08, 0x30, 0xC3, 0x04, 0x10, 0x60, 0xFE, 0x19,
+  0x08, 0x42, 0x10, 0x84, 0xC1, 0x08, 0x42, 0x10, 0x84, 0x18, 0xFF, 0xFF,
+  0x80, 0xC1, 0x08, 0x42, 0x10, 0x84, 0x19, 0x08, 0x42, 0x10, 0x84, 0xC0,
+  0x70, 0xC7, 0x80 };
+
+const GFXglyph EuphemiaCAS9pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   9,    0,    0 },   // 0x20 ' '
+  {     1,   2,  13,   4,    1,  -12 },   // 0x21 '!'
+  {     5,   5,   3,   7,    1,  -12 },   // 0x22 '"'
+  {     7,  14,  15,  16,    1,  -13 },   // 0x23 '#'
+  {    34,   8,  17,  10,    1,  -14 },   // 0x24 '$'
+  {    51,  13,  15,  17,    2,  -13 },   // 0x25 '%'
+  {    76,  11,  13,  13,    1,  -12 },   // 0x26 '&'
+  {    94,   2,   3,   4,    1,  -12 },   // 0x27 '''
+  {    95,   4,  16,   6,    1,  -14 },   // 0x28 '('
+  {   103,   4,  16,   6,    1,  -14 },   // 0x29 ')'
+  {   111,   7,   7,   9,    1,  -14 },   // 0x2A '*'
+  {   118,   9,   9,  11,    1,   -9 },   // 0x2B '+'
+  {   129,   2,   4,   4,    1,    0 },   // 0x2C ','
+  {   130,   5,   1,   7,    1,   -6 },   // 0x2D '-'
+  {   131,   2,   1,   4,    1,    0 },   // 0x2E '.'
+  {   132,   9,  17,  11,    1,  -14 },   // 0x2F '/'
+  {   152,   8,  13,  10,    1,  -12 },   // 0x30 '0'
+  {   165,   6,  13,  10,    2,  -12 },   // 0x31 '1'
+  {   175,   8,  13,  10,    1,  -12 },   // 0x32 '2'
+  {   188,   8,  13,  10,    1,  -12 },   // 0x33 '3'
+  {   201,   8,  13,  10,    1,  -12 },   // 0x34 '4'
+  {   214,   7,  13,  10,    2,  -12 },   // 0x35 '5'
+  {   226,   8,  13,  10,    1,  -12 },   // 0x36 '6'
+  {   239,   8,  13,  10,    1,  -12 },   // 0x37 '7'
+  {   252,   8,  13,  10,    1,  -12 },   // 0x38 '8'
+  {   265,   8,  13,  10,    1,  -12 },   // 0x39 '9'
+  {   278,   2,   8,   4,    1,   -7 },   // 0x3A ':'
+  {   280,   2,  11,   4,    1,   -7 },   // 0x3B ';'
+  {   283,   7,  13,   9,    1,  -12 },   // 0x3C '<'
+  {   295,   9,   4,  11,    1,   -8 },   // 0x3D '='
+  {   300,   7,  13,   9,    1,  -12 },   // 0x3E '>'
+  {   312,   6,  13,   9,    1,  -12 },   // 0x3F '?'
+  {   322,  16,  17,  18,    1,  -12 },   // 0x40 '@'
+  {   356,  11,  13,  11,    0,  -12 },   // 0x41 'A'
+  {   374,   7,  13,  11,    2,  -12 },   // 0x42 'B'
+  {   386,   9,  13,  12,    1,  -12 },   // 0x43 'C'
+  {   401,  10,  13,  12,    1,  -12 },   // 0x44 'D'
+  {   418,   7,  13,  10,    2,  -12 },   // 0x45 'E'
+  {   430,   7,  13,   9,    2,  -12 },   // 0x46 'F'
+  {   442,  10,  13,  12,    1,  -12 },   // 0x47 'G'
+  {   459,  10,  13,  12,    1,  -12 },   // 0x48 'H'
+  {   476,   1,  13,   4,    2,  -12 },   // 0x49 'I'
+  {   478,   7,  13,   9,    1,  -12 },   // 0x4A 'J'
+  {   490,   9,  13,  11,    2,  -12 },   // 0x4B 'K'
+  {   505,   7,  13,   9,    2,  -12 },   // 0x4C 'L'
+  {   517,  12,  13,  14,    1,  -12 },   // 0x4D 'M'
+  {   537,  10,  13,  12,    1,  -12 },   // 0x4E 'N'
+  {   554,  12,  13,  14,    1,  -12 },   // 0x4F 'O'
+  {   574,   8,  13,  10,    1,  -12 },   // 0x50 'P'
+  {   587,  12,  17,  14,    1,  -12 },   // 0x51 'Q'
+  {   613,   9,  13,  11,    1,  -12 },   // 0x52 'R'
+  {   628,   9,  13,  11,    0,  -12 },   // 0x53 'S'
+  {   643,   9,  13,  11,    1,  -12 },   // 0x54 'T'
+  {   658,  11,  13,  13,    1,  -12 },   // 0x55 'U'
+  {   676,  10,  13,  11,    0,  -12 },   // 0x56 'V'
+  {   693,  15,  13,  16,    0,  -12 },   // 0x57 'W'
+  {   718,  11,  13,  11,    0,  -12 },   // 0x58 'X'
+  {   736,   9,  13,  10,    1,  -12 },   // 0x59 'Y'
+  {   751,   9,  13,  10,    0,  -12 },   // 0x5A 'Z'
+  {   766,   3,  17,   5,    1,  -14 },   // 0x5B '['
+  {   773,   9,  17,  11,    1,  -14 },   // 0x5C '\'
+  {   793,   3,  17,   5,    1,  -14 },   // 0x5D ']'
+  {   800,  10,   7,  11,    1,  -13 },   // 0x5E '^'
+  {   809,   9,   1,   9,    0,    3 },   // 0x5F '_'
+  {   811,   4,   4,   0,   -2,  -13 },   // 0x60 '`'
+  {   813,   9,   9,  10,    1,   -8 },   // 0x61 'a'
+  {   824,   8,  13,  10,    1,  -12 },   // 0x62 'b'
+  {   837,   8,   9,   9,    1,   -8 },   // 0x63 'c'
+  {   846,   8,  13,  11,    1,  -12 },   // 0x64 'd'
+  {   859,   7,   9,  10,    1,   -8 },   // 0x65 'e'
+  {   867,   6,  13,   6,    1,  -12 },   // 0x66 'f'
+  {   877,   9,  13,  10,    1,   -8 },   // 0x67 'g'
+  {   892,   8,  13,  10,    1,  -12 },   // 0x68 'h'
+  {   905,   2,  13,   4,    1,  -12 },   // 0x69 'i'
+  {   909,   4,  17,   4,   -1,  -12 },   // 0x6A 'j'
+  {   918,   7,  13,   9,    1,  -12 },   // 0x6B 'k'
+  {   930,   3,  13,   4,    1,  -12 },   // 0x6C 'l'
+  {   935,  11,   9,  13,    1,   -8 },   // 0x6D 'm'
+  {   948,   8,   9,  10,    1,   -8 },   // 0x6E 'n'
+  {   957,   9,   9,  11,    1,   -8 },   // 0x6F 'o'
+  {   968,   8,  13,  10,    1,   -8 },   // 0x70 'p'
+  {   981,   8,  13,  10,    1,   -8 },   // 0x71 'q'
+  {   994,   5,   9,   7,    1,   -8 },   // 0x72 'r'
+  {  1000,   7,   9,   9,    1,   -8 },   // 0x73 's'
+  {  1008,   5,  12,   6,    1,  -11 },   // 0x74 't'
+  {  1016,   7,   9,  10,    1,   -8 },   // 0x75 'u'
+  {  1024,   8,   9,   8,   -1,   -8 },   // 0x76 'v'
+  {  1033,  12,   9,  12,    0,   -8 },   // 0x77 'w'
+  {  1047,   8,   9,   8,    0,   -8 },   // 0x78 'x'
+  {  1056,   9,  13,   9,    0,   -8 },   // 0x79 'y'
+  {  1071,   7,   9,   9,    1,   -8 },   // 0x7A 'z'
+  {  1079,   5,  17,   6,    0,  -13 },   // 0x7B '{'
+  {  1090,   1,  17,   9,    4,  -12 },   // 0x7C '|'
+  {  1093,   5,  17,   6,    1,  -13 },   // 0x7D '}'
+  {  1104,   9,   2,  11,    1,   -5 } }; // 0x7E '~'
+
+const GFXfont EuphemiaCAS9pt7b PROGMEM = {
+  (uint8_t  *)EuphemiaCAS9pt7bBitmaps,
+  (GFXglyph *)EuphemiaCAS9pt7bGlyphs,
+  0x20, 0x7E, 24 };
+
+// Approx. 1779 bytes
+const uint8_t Futura9pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xFF, 0xFC, 0xF0, 0xDE, 0xF7, 0xBD, 0x80, 0x11, 0x84, 0x61,
+  0x18, 0xC6, 0xFF, 0xFF, 0xF3, 0x30, 0xCC, 0xFF, 0xFF, 0xF2, 0x31, 0x8C,
+  0x62, 0x18, 0x80, 0x0C, 0x06, 0x0F, 0xCE, 0x76, 0x03, 0x01, 0xC0, 0x78,
+  0x1F, 0x03, 0xC0, 0x68, 0x3C, 0x1B, 0x1D, 0xFC, 0x7C, 0x0C, 0x06, 0x00,
+  0x38, 0x30, 0xF8, 0x43, 0x19, 0x86, 0x32, 0x0C, 0x6C, 0x0F, 0x90, 0x0E,
+  0x40, 0x00, 0x9C, 0x02, 0x7C, 0x05, 0x8C, 0x13, 0x18, 0x66, 0x30, 0x87,
+  0xC3, 0x07, 0x00, 0x1E, 0x03, 0xF0, 0x33, 0x03, 0x30, 0x3F, 0x01, 0xE0,
+  0x3C, 0x07, 0xE0, 0xE7, 0x6C, 0x3C, 0xC1, 0x8E, 0x3C, 0x7E, 0xE3, 0xC6,
+  0xFF, 0xC0, 0x76, 0x66, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xE6, 0x66, 0x20,
+  0xC6, 0x66, 0x33, 0x33, 0x33, 0x33, 0x33, 0x76, 0x66, 0x40, 0x18, 0x18,
+  0x7E, 0x7E, 0x3C, 0x66, 0x24, 0x0C, 0x06, 0x03, 0x1F, 0xFF, 0xF8, 0x60,
+  0x30, 0x18, 0x0C, 0x00, 0x23, 0x26, 0x6C, 0xFF, 0xF0, 0x01, 0x80, 0xC0,
+  0xC0, 0x60, 0x60, 0x30, 0x18, 0x18, 0x0C, 0x0C, 0x06, 0x02, 0x03, 0x01,
+  0x81, 0x80, 0xC0, 0xC0, 0x60, 0x10, 0x00, 0x1C, 0x1F, 0x18, 0xDC, 0x6C,
+  0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF8, 0xCC, 0x63, 0xE0, 0xE0, 0x7F,
+  0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x3F, 0x98, 0xEC, 0x30, 0x18,
+  0x0C, 0x0C, 0x0E, 0x0E, 0x06, 0x06, 0x06, 0x07, 0xFF, 0xFC, 0x3C, 0x7E,
+  0xE7, 0x03, 0x03, 0x1E, 0x1E, 0x07, 0x03, 0x03, 0xC3, 0xC7, 0x7E, 0x3C,
+  0x00, 0x00, 0x10, 0x06, 0x00, 0xC0, 0x38, 0x0F, 0x01, 0xE0, 0x6C, 0x1D,
+  0x83, 0x30, 0xC6, 0x3F, 0xF7, 0xFE, 0x03, 0x00, 0x60, 0x1F, 0x8F, 0xC6,
+  0x06, 0x03, 0xE1, 0xF9, 0x8C, 0x03, 0x01, 0x80, 0xD0, 0x7C, 0x67, 0xF1,
+  0xE0, 0x00, 0x03, 0x03, 0x81, 0x81, 0x81, 0xC0, 0xF8, 0xFE, 0xE3, 0xE0,
+  0xF0, 0x78, 0x3E, 0x33, 0xF8, 0x78, 0xFF, 0xFF, 0xE0, 0x30, 0x0C, 0x06,
+  0x01, 0x80, 0xC0, 0x70, 0x18, 0x0C, 0x03, 0x01, 0x80, 0xE0, 0x30, 0x00,
+  0x3C, 0x7E, 0xE7, 0xC3, 0xC3, 0xE7, 0x7E, 0x7E, 0xE7, 0xC3, 0xC3, 0xE7,
+  0x7E, 0x3C, 0x3C, 0x3F, 0xB8, 0xF8, 0x3C, 0x1E, 0x0F, 0x8E, 0xFE, 0x3E,
+  0x07, 0x03, 0x03, 0x03, 0x81, 0x80, 0x00, 0xF0, 0x03, 0xC0, 0x33, 0x00,
+  0x00, 0x32, 0x66, 0x44, 0x01, 0x83, 0xC7, 0x8F, 0x0E, 0x07, 0x01, 0xE0,
+  0x3C, 0x07, 0x80, 0xC0, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xF8, 0xC0, 0x78,
+  0x0E, 0x01, 0xC0, 0x38, 0x3C, 0x78, 0xF0, 0xE0, 0x40, 0x00, 0x38, 0xFB,
+  0x1E, 0x30, 0xE7, 0xBC, 0x60, 0xCD, 0xF9, 0xE0, 0x03, 0x06, 0x00, 0x0F,
+  0xC0, 0x61, 0xC3, 0x01, 0x99, 0xD6, 0xCF, 0xCF, 0x73, 0x3D, 0x84, 0xF6,
+  0x33, 0xD8, 0xDB, 0xBD, 0xE7, 0x77, 0x0E, 0x00, 0x3F, 0xE0, 0x3F, 0x00,
+  0x02, 0x00, 0x10, 0x01, 0xC0, 0x0E, 0x00, 0xF8, 0x06, 0xC0, 0x73, 0x03,
+  0x18, 0x18, 0xE1, 0xFF, 0x0F, 0xF8, 0xC0, 0x66, 0x03, 0x60, 0x0C, 0xF8,
+  0xFC, 0xCE, 0xC6, 0xC6, 0xCE, 0xFC, 0xFE, 0xC7, 0xC3, 0xC3, 0xC7, 0xFE,
+  0xFC, 0x0F, 0x83, 0xFC, 0xE1, 0xB0, 0x0E, 0x01, 0x80, 0x30, 0x06, 0x00,
+  0xC0, 0x1C, 0x01, 0x80, 0x9C, 0x31, 0xFE, 0x1F, 0x00, 0xFC, 0x3F, 0xCC,
+  0x7B, 0x06, 0xC1, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x7C, 0x1B, 0x1E,
+  0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x06, 0x0C, 0x1F, 0xFF, 0xE0, 0xC1, 0x83,
+  0x06, 0x0F, 0xFF, 0xC0, 0xFF, 0xFF, 0x06, 0x0C, 0x1F, 0xFF, 0xE0, 0xC1,
+  0x83, 0x06, 0x0C, 0x18, 0x00, 0x0F, 0x80, 0xFF, 0x0E, 0x1C, 0xC0, 0x4E,
+  0x00, 0x60, 0x03, 0x07, 0xF8, 0x3F, 0xC0, 0x1F, 0x01, 0xD8, 0x0C, 0x71,
+  0xE1, 0xFE, 0x07, 0xC0, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xFF, 0xFF,
+  0xFF, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x30, 0xFF, 0xFF,
+  0xFF, 0xF0, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC7, 0xFB,
+  0xC0, 0xC1, 0xB0, 0xCC, 0x73, 0x38, 0xDC, 0x3E, 0x0F, 0x03, 0xE0, 0xDC,
+  0x33, 0x0C, 0x63, 0x1C, 0xC3, 0xB0, 0x70, 0xC3, 0x0C, 0x30, 0xC3, 0x0C,
+  0x30, 0xC3, 0x0C, 0x30, 0xFF, 0xF0, 0x00, 0x00, 0x20, 0x20, 0xC0, 0x61,
+  0x80, 0xC3, 0x83, 0x87, 0x07, 0x0F, 0x1E, 0x16, 0x34, 0x6C, 0xEC, 0xCD,
+  0x99, 0x9B, 0x33, 0x1C, 0x66, 0x38, 0xD8, 0x21, 0xB0, 0x41, 0x80, 0x80,
+  0x00, 0x08, 0x03, 0xC0, 0x3E, 0x03, 0xF0, 0x3F, 0x83, 0xDC, 0x3C, 0xE3,
+  0xC7, 0x3C, 0x3B, 0xC1, 0xFC, 0x0F, 0xC0, 0x7C, 0x03, 0xC0, 0x10, 0x00,
+  0x0F, 0xC0, 0x7F, 0x83, 0x87, 0x18, 0x06, 0xE0, 0x1F, 0x00, 0x3C, 0x00,
+  0xF0, 0x03, 0xC0, 0x0F, 0x80, 0x76, 0x01, 0x8E, 0x1C, 0x1F, 0xE0, 0x3F,
+  0x00, 0xF9, 0xFB, 0x3E, 0x3C, 0x79, 0xFF, 0x7C, 0xC1, 0x83, 0x06, 0x0C,
+  0x18, 0x00, 0x0F, 0xC0, 0x7F, 0x83, 0x87, 0x18, 0x06, 0xE0, 0x1F, 0x00,
+  0x3C, 0x00, 0xF0, 0x03, 0xC3, 0x8F, 0x87, 0x76, 0x0F, 0x8E, 0x1C, 0x1F,
+  0xF8, 0x3E, 0x70, 0xF8, 0xFC, 0xCE, 0xC6, 0xC6, 0xCE, 0xFC, 0xF8, 0xD0,
+  0xD8, 0xCC, 0xCC, 0xC6, 0xC7, 0x1E, 0x1F, 0x9C, 0xCC, 0x06, 0x01, 0xC0,
+  0x78, 0x0E, 0x01, 0x80, 0xF8, 0x6C, 0x77, 0xF0, 0xF0, 0xFF, 0xFF, 0x18,
+  0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xC0,
+  0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C,
+  0x0D, 0x86, 0x7F, 0x87, 0x80, 0xC0, 0x76, 0x06, 0x60, 0x67, 0x0C, 0x30,
+  0xC3, 0x0C, 0x19, 0x81, 0x98, 0x1F, 0x00, 0xF0, 0x0F, 0x00, 0x60, 0x06,
+  0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x19, 0x81, 0x03, 0x30,
+  0x60, 0xE7, 0x0E, 0x18, 0x63, 0xC3, 0x0C, 0x78, 0xC0, 0xCD, 0x98, 0x1B,
+  0x37, 0x03, 0x63, 0xC0, 0x3C, 0x78, 0x07, 0x0E, 0x00, 0xE0, 0xC0, 0x0C,
+  0x18, 0x01, 0x02, 0x00, 0x00, 0x00, 0x60, 0xC6, 0x38, 0xC6, 0x0D, 0xC1,
+  0xB0, 0x1C, 0x03, 0x80, 0x70, 0x1F, 0x03, 0x60, 0xC6, 0x18, 0xC6, 0x0D,
+  0xC1, 0x80, 0xC0, 0xF8, 0x76, 0x18, 0xCC, 0x33, 0x07, 0x81, 0xE0, 0x30,
+  0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0x7F, 0x9F, 0xE0, 0x30,
+  0x0C, 0x06, 0x03, 0x80, 0xC0, 0x70, 0x18, 0x0E, 0x03, 0x01, 0x80, 0x7F,
+  0xFF, 0xF0, 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCF, 0xF0,
+  0xC0, 0x20, 0x18, 0x0C, 0x03, 0x01, 0x80, 0x40, 0x30, 0x18, 0x06, 0x03,
+  0x00, 0xC0, 0x60, 0x30, 0x0C, 0x06, 0x01, 0x80, 0xC0, 0x00, 0xFF, 0x33,
+  0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0xF0, 0x0C, 0x07, 0x81, 0xE0,
+  0xCC, 0x33, 0x18, 0x66, 0x18, 0xFF, 0xFF, 0xF0, 0xCE, 0x62, 0x3D, 0xBF,
+  0xF8, 0xF8, 0x3C, 0x1E, 0x0F, 0x8E, 0xFF, 0x3D, 0x80, 0xC0, 0x60, 0x30,
+  0x18, 0x0C, 0x06, 0x03, 0x79, 0xFE, 0xE3, 0xE0, 0xF0, 0x78, 0x3E, 0x3F,
+  0xFB, 0x78, 0x3E, 0xFF, 0x8E, 0x0C, 0x18, 0x38, 0xBF, 0x3E, 0x01, 0x80,
+  0xC0, 0x60, 0x30, 0x18, 0x0C, 0xF6, 0xFF, 0xE3, 0xE0, 0xF0, 0x78, 0x3E,
+  0x3B, 0xFC, 0xF6, 0x3C, 0x7E, 0xE3, 0xFF, 0xFF, 0xC0, 0xE3, 0x7E, 0x3C,
+  0x3B, 0xD8, 0xC6, 0x33, 0xFF, 0x63, 0x18, 0xC6, 0x31, 0x80, 0x3D, 0xBF,
+  0xF8, 0xF8, 0x3C, 0x1E, 0x0F, 0x8E, 0xFF, 0x3D, 0x80, 0xF0, 0x6C, 0x77,
+  0xF0, 0xF0, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x37, 0x7F, 0xE7, 0x8F, 0x1E,
+  0x3C, 0x78, 0xF1, 0x80, 0xF0, 0x3F, 0xFF, 0xF0, 0xF0, 0x3F, 0xFF, 0xFF,
+  0xFC, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xCE, 0xDC, 0xF8, 0xF0, 0xF0,
+  0xD8, 0xDC, 0xCC, 0xC6, 0xFF, 0xFF, 0xFF, 0xFC, 0xDD, 0xEF, 0xFF, 0xE7,
+  0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xC6, 0x30, 0xDD, 0xFF,
+  0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC6, 0x3E, 0x3F, 0xB8, 0xF8, 0x3C, 0x1E,
+  0x0F, 0x8E, 0xFE, 0x3E, 0x00, 0xDE, 0x7F, 0xB8, 0xF8, 0x3C, 0x1E, 0x0F,
+  0x8F, 0xFE, 0xDE, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x3D, 0xBF, 0xF8,
+  0xF8, 0x3C, 0x1E, 0x0F, 0x8E, 0xFF, 0x3D, 0x80, 0xC0, 0x60, 0x30, 0x18,
+  0x0C, 0xFB, 0xEE, 0x30, 0xC3, 0x0C, 0x30, 0xC0, 0x73, 0xEC, 0x38, 0x38,
+  0x3C, 0xFF, 0x78, 0x66, 0x6F, 0xF6, 0x66, 0x66, 0x66, 0xC7, 0x8F, 0x1E,
+  0x3C, 0x78, 0xF1, 0xBE, 0x38, 0xC3, 0xB1, 0x99, 0xC6, 0xC3, 0x60, 0xE0,
+  0x70, 0x10, 0x08, 0x00, 0x00, 0x03, 0x08, 0x66, 0x31, 0x99, 0xCC, 0x37,
+  0xB0, 0xDF, 0x81, 0xCE, 0x07, 0x38, 0x08, 0xC0, 0x21, 0x00, 0x61, 0x8C,
+  0xC1, 0xE0, 0x78, 0x0C, 0x07, 0x83, 0x31, 0xCE, 0xE1, 0x80, 0xE1, 0xB0,
+  0xDC, 0xC6, 0x63, 0xE0, 0xF0, 0x70, 0x18, 0x18, 0x0C, 0x0C, 0x06, 0x07,
+  0x03, 0x00, 0x7F, 0xBF, 0x81, 0x81, 0x81, 0xC1, 0xC0, 0xC0, 0xFF, 0xFF,
+  0x80, 0x3B, 0xD8, 0xC6, 0x31, 0x8C, 0xE6, 0x38, 0xC6, 0x31, 0x8C, 0x63,
+  0xCE, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xE7, 0x8C, 0x63, 0x18, 0xC6, 0x38,
+  0xCE, 0x63, 0x18, 0xC6, 0x37, 0xB8, 0x78, 0xFF, 0xE3, 0xC0 };
+
+const GFXglyph Futura9pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   5,    0,    0 },   // 0x20 ' '
+  {     1,   2,  14,   6,    2,  -13 },   // 0x21 '!'
+  {     5,   5,   5,   7,    1,  -13 },   // 0x22 '"'
+  {     9,  10,  14,  12,    1,  -13 },   // 0x23 '#'
+  {    27,   9,  18,  11,    1,  -15 },   // 0x24 '$'
+  {    48,  15,  14,  17,    1,  -13 },   // 0x25 '%'
+  {    75,  12,  14,  13,    1,  -13 },   // 0x26 '&'
+  {    96,   2,   5,   4,    1,  -13 },   // 0x27 '''
+  {    98,   4,  19,   7,    2,  -14 },   // 0x28 '('
+  {   108,   4,  19,   7,    1,  -14 },   // 0x29 ')'
+  {   118,   8,   7,  12,    2,  -14 },   // 0x2A '*'
+  {   125,   9,   9,  11,    1,  -11 },   // 0x2B '+'
+  {   136,   4,   6,   5,    0,   -2 },   // 0x2C ','
+  {   139,   4,   2,   4,    0,   -5 },   // 0x2D '-'
+  {   140,   2,   2,   6,    2,   -1 },   // 0x2E '.'
+  {   141,   9,  19,   9,    0,  -14 },   // 0x2F '/'
+  {   163,   9,  14,  11,    1,  -13 },   // 0x30 '0'
+  {   179,   4,  14,  11,    3,  -13 },   // 0x31 '1'
+  {   186,   9,  14,  11,    0,  -13 },   // 0x32 '2'
+  {   202,   8,  14,  11,    1,  -13 },   // 0x33 '3'
+  {   216,  11,  15,  11,    0,  -14 },   // 0x34 '4'
+  {   237,   9,  14,  11,    1,  -13 },   // 0x35 '5'
+  {   253,   9,  15,  11,    1,  -14 },   // 0x36 '6'
+  {   270,  10,  14,  11,    1,  -13 },   // 0x37 '7'
+  {   288,   8,  14,  11,    1,  -13 },   // 0x38 '8'
+  {   302,   9,  15,  11,    1,  -13 },   // 0x39 '9'
+  {   319,   2,   9,   6,    2,   -8 },   // 0x3A ':'
+  {   322,   4,  12,   5,    0,   -8 },   // 0x3B ';'
+  {   328,   9,  10,  11,    1,  -11 },   // 0x3C '<'
+  {   340,   9,   5,  11,    1,   -9 },   // 0x3D '='
+  {   346,   9,  10,  11,    1,  -11 },   // 0x3E '>'
+  {   358,   7,  14,   9,    1,  -13 },   // 0x3F '?'
+  {   371,  14,  14,  16,    1,  -13 },   // 0x40 '@'
+  {   396,  13,  14,  13,    0,  -13 },   // 0x41 'A'
+  {   419,   8,  14,  11,    2,  -13 },   // 0x42 'B'
+  {   433,  11,  14,  12,    1,  -13 },   // 0x43 'C'
+  {   453,  10,  14,  13,    2,  -13 },   // 0x44 'D'
+  {   471,   7,  14,  10,    2,  -13 },   // 0x45 'E'
+  {   484,   7,  14,   9,    2,  -13 },   // 0x46 'F'
+  {   497,  13,  14,  15,    1,  -13 },   // 0x47 'G'
+  {   520,  10,  14,  14,    2,  -13 },   // 0x48 'H'
+  {   538,   2,  14,   6,    2,  -13 },   // 0x49 'I'
+  {   542,   6,  14,   8,    0,  -13 },   // 0x4A 'J'
+  {   553,  10,  14,  12,    2,  -13 },   // 0x4B 'K'
+  {   571,   6,  14,   9,    2,  -13 },   // 0x4C 'L'
+  {   582,  15,  16,  17,    1,  -14 },   // 0x4D 'M'
+  {   612,  12,  16,  16,    2,  -14 },   // 0x4E 'N'
+  {   636,  14,  14,  16,    1,  -13 },   // 0x4F 'O'
+  {   661,   7,  14,  10,    2,  -13 },   // 0x50 'P'
+  {   674,  14,  14,  16,    1,  -13 },   // 0x51 'Q'
+  {   699,   8,  14,  11,    2,  -13 },   // 0x52 'R'
+  {   713,   9,  14,  11,    1,  -13 },   // 0x53 'S'
+  {   729,   8,  14,  10,    1,  -13 },   // 0x54 'T'
+  {   743,  10,  14,  14,    2,  -13 },   // 0x55 'U'
+  {   761,  12,  15,  12,    0,  -13 },   // 0x56 'V'
+  {   784,  19,  16,  19,    0,  -14 },   // 0x57 'W'
+  {   822,  11,  14,  11,    0,  -13 },   // 0x58 'X'
+  {   842,  10,  14,  10,    0,  -13 },   // 0x59 'Y'
+  {   860,  10,  14,  11,    1,  -13 },   // 0x5A 'Z'
+  {   878,   4,  19,   6,    2,  -14 },   // 0x5B '['
+  {   888,   9,  19,   9,    0,  -14 },   // 0x5C '\'
+  {   910,   4,  19,   6,    0,  -14 },   // 0x5D ']'
+  {   920,  10,   7,  10,    0,  -13 },   // 0x5E '^'
+  {   929,  10,   2,  10,    0,    2 },   // 0x5F '_'
+  {   932,   4,   4,  10,    2,  -13 },   // 0x60 '`'
+  {   934,   9,   9,  11,    1,   -8 },   // 0x61 'a'
+  {   945,   9,  15,  11,    1,  -14 },   // 0x62 'b'
+  {   962,   7,   9,   9,    1,   -8 },   // 0x63 'c'
+  {   970,   9,  15,  11,    1,  -14 },   // 0x64 'd'
+  {   987,   8,   9,  10,    1,   -8 },   // 0x65 'e'
+  {   996,   5,  15,   6,    1,  -14 },   // 0x66 'f'
+  {  1006,   9,  14,  11,    1,   -8 },   // 0x67 'g'
+  {  1022,   7,  15,   9,    1,  -14 },   // 0x68 'h'
+  {  1036,   2,  14,   4,    1,  -13 },   // 0x69 'i'
+  {  1040,   2,  19,   4,    1,  -13 },   // 0x6A 'j'
+  {  1045,   8,  15,   9,    1,  -14 },   // 0x6B 'k'
+  {  1060,   2,  15,   4,    1,  -14 },   // 0x6C 'l'
+  {  1064,  12,   9,  14,    1,   -8 },   // 0x6D 'm'
+  {  1078,   7,   9,   9,    1,   -8 },   // 0x6E 'n'
+  {  1086,   9,   9,  11,    1,   -8 },   // 0x6F 'o'
+  {  1097,   9,  14,  11,    1,   -8 },   // 0x70 'p'
+  {  1113,   9,  14,  11,    1,   -8 },   // 0x71 'q'
+  {  1129,   6,   9,   6,    1,   -8 },   // 0x72 'r'
+  {  1136,   6,   9,   8,    1,   -8 },   // 0x73 's'
+  {  1143,   4,  12,   6,    1,  -11 },   // 0x74 't'
+  {  1149,   7,   9,   9,    1,   -8 },   // 0x75 'u'
+  {  1157,   9,   9,   9,    0,   -8 },   // 0x76 'v'
+  {  1168,  14,  10,  14,    0,   -9 },   // 0x77 'w'
+  {  1186,  10,   9,  10,    0,   -8 },   // 0x78 'x'
+  {  1198,   9,  14,  10,    0,   -8 },   // 0x79 'y'
+  {  1214,   9,   9,   9,    0,   -8 },   // 0x7A 'z'
+  {  1225,   5,  19,   6,    1,  -14 },   // 0x7B '{'
+  {  1237,   2,  17,  10,    4,  -13 },   // 0x7C '|'
+  {  1242,   5,  19,   6,    0,  -14 },   // 0x7D '}'
+  {  1254,   9,   3,  13,    2,  -14 } }; // 0x7E '~'
+
+const GFXfont Futura9pt7b PROGMEM = {
+  (uint8_t  *)Futura9pt7bBitmaps,
+  (GFXglyph *)Futura9pt7bGlyphs,
+  0x20, 0x7E, 23 };
+
+// Approx. 1930 bytes
+const uint8_t GillSans9pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xFE, 0x0F, 0xDE, 0xF7, 0xBD, 0x80, 0x08, 0x82, 0x10, 0x42,
+  0x7F, 0xF1, 0x08, 0x42, 0x08, 0x47, 0xFF, 0x21, 0x0C, 0x21, 0x08, 0x21,
+  0x00, 0x18, 0x3C, 0xFE, 0xDA, 0xD8, 0xF8, 0x7C, 0x1E, 0x1B, 0x9B, 0xFF,
+  0x7E, 0x18, 0x18, 0x70, 0x5F, 0x13, 0x64, 0x7C, 0x87, 0x20, 0x08, 0x01,
+  0x00, 0x4E, 0x13, 0xE2, 0x6C, 0x8F, 0xA0, 0xE0, 0x1E, 0x07, 0xE0, 0xCC,
+  0x19, 0x83, 0xE0, 0x30, 0x0F, 0x3B, 0x3E, 0xC3, 0x98, 0xF3, 0xF3, 0x3C,
+  0x70, 0xFF, 0xC0, 0x18, 0x88, 0xC4, 0x63, 0x18, 0xC6, 0x30, 0x86, 0x10,
+  0xC3, 0xC3, 0x08, 0x61, 0x0C, 0x63, 0x18, 0xC6, 0x23, 0x11, 0x18, 0x10,
+  0x23, 0x5B, 0xE1, 0x0F, 0xB5, 0x88, 0x10, 0x08, 0x04, 0x02, 0x01, 0x0F,
+  0xF8, 0x40, 0x20, 0x10, 0x08, 0x00, 0xF6, 0xFF, 0xF0, 0x08, 0x44, 0x21,
+  0x10, 0x88, 0x42, 0x21, 0x00, 0x38, 0xF9, 0xB6, 0x3C, 0x78, 0xF1, 0xE3,
+  0xC6, 0xD9, 0xF1, 0xC0, 0xFF, 0xFF, 0xFF, 0x78, 0xFC, 0xCE, 0x86, 0x06,
+  0x04, 0x0C, 0x18, 0x10, 0x20, 0x7F, 0xFF, 0x7B, 0xF8, 0xC3, 0x0C, 0xE3,
+  0xC3, 0x0E, 0x3F, 0x9C, 0x06, 0x06, 0x0E, 0x1E, 0x36, 0x26, 0x66, 0xFF,
+  0xFF, 0x06, 0x06, 0x06, 0x7C, 0xF9, 0x83, 0x07, 0x8F, 0x83, 0x83, 0x07,
+  0x1F, 0xF3, 0xC0, 0x10, 0x70, 0xC3, 0x86, 0x1F, 0xBF, 0xE3, 0xC7, 0x8D,
+  0xF1, 0xC0, 0xFF, 0xFE, 0x06, 0x0C, 0x0C, 0x0C, 0x18, 0x18, 0x30, 0x30,
+  0x60, 0x60, 0x38, 0xFB, 0x1E, 0x3C, 0x67, 0x1F, 0x63, 0xC7, 0x8D, 0xF1,
+  0xC0, 0x38, 0xFB, 0x1E, 0x3C, 0x6F, 0xCF, 0x86, 0x1C, 0x71, 0xC1, 0x00,
+  0xF0, 0x0F, 0xF0, 0x0F, 0x60, 0x00, 0x83, 0xCF, 0xDF, 0x0C, 0x07, 0xC0,
+  0xFC, 0x0F, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x1F, 0xF0, 0x80, 0x78, 0x1F,
+  0x81, 0xF0, 0x18, 0x7D, 0xF9, 0xE0, 0x80, 0x00, 0x6F, 0x33, 0x37, 0x66,
+  0x20, 0x66, 0x07, 0xF0, 0x0F, 0xF8, 0x3C, 0x1C, 0x30, 0x06, 0x63, 0x9F,
+  0x67, 0xF3, 0xC6, 0x73, 0xCC, 0x33, 0xCC, 0x33, 0xCC, 0x66, 0xCC, 0x6E,
+  0xCF, 0xFC, 0x67, 0x78, 0x70, 0x03, 0x3C, 0x0E, 0x1F, 0xFC, 0x07, 0xF0,
+  0x02, 0x00, 0x38, 0x01, 0xC0, 0x1B, 0x00, 0xD8, 0x0C, 0x60, 0x63, 0x07,
+  0xFC, 0x3F, 0xE3, 0x01, 0x98, 0x0D, 0x80, 0x30, 0xFC, 0xFE, 0xC6, 0xC6,
+  0xC6, 0xFC, 0xFE, 0xC3, 0xC3, 0xC3, 0xFE, 0xFC, 0x0F, 0xC7, 0xFD, 0xC0,
+  0xB0, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0x60, 0x0E, 0x04, 0xFF, 0x87,
+  0xE0, 0xFF, 0x0F, 0xFC, 0xC0, 0xEC, 0x06, 0xC0, 0x3C, 0x03, 0xC0, 0x3C,
+  0x03, 0xC0, 0x6C, 0x0E, 0xFF, 0xCF, 0xF0, 0xFF, 0xFF, 0x06, 0x0C, 0x1F,
+  0xFF, 0xE0, 0xC1, 0x83, 0xFF, 0xF0, 0xFF, 0xFC, 0x30, 0xC3, 0xFF, 0xF0,
+  0xC3, 0x0C, 0x30, 0x0F, 0xC7, 0xFD, 0xC0, 0xB0, 0x0C, 0x01, 0x80, 0x30,
+  0x7E, 0x0F, 0xE0, 0x6E, 0x0C, 0xFF, 0x87, 0xC0, 0xC0, 0x78, 0x0F, 0x01,
+  0xE0, 0x3C, 0x07, 0xFF, 0xFF, 0xFE, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0,
+  0x30, 0xFF, 0xFF, 0xFF, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0xFE,
+  0xC1, 0xB0, 0xCC, 0x63, 0x30, 0xD8, 0x3C, 0x0D, 0x83, 0x30, 0xC6, 0x30,
+  0xCC, 0x1B, 0x03, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83,
+  0xFF, 0xF0, 0xC0, 0xFC, 0x1F, 0xC7, 0xED, 0xBD, 0xF7, 0x9C, 0xF1, 0x1E,
+  0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x30, 0xC0, 0x3E, 0x03, 0xF0, 0x3D,
+  0x83, 0xCC, 0x3C, 0x63, 0xC6, 0x3C, 0x33, 0xC1, 0xBC, 0x0F, 0xC0, 0x7C,
+  0x03, 0x0F, 0x81, 0xFF, 0x1C, 0x1C, 0xC0, 0x6C, 0x01, 0xE0, 0x0F, 0x00,
+  0x78, 0x03, 0x60, 0x33, 0x83, 0x8F, 0xF8, 0x1F, 0x00, 0xFC, 0xFE, 0xC3,
+  0xC3, 0xC3, 0xFE, 0xFC, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x0F, 0x81, 0xFF,
+  0x1C, 0x1C, 0xC0, 0x6C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xE0, 0x33,
+  0x83, 0x8F, 0xF8, 0x3F, 0x00, 0x3F, 0x80, 0x78, 0xF8, 0x7E, 0x31, 0x98,
+  0xCC, 0x67, 0xE3, 0xE1, 0x98, 0xC6, 0x63, 0x30, 0xD8, 0x30, 0x7B, 0xFC,
+  0x70, 0xC1, 0xC3, 0x83, 0x0E, 0x3F, 0xDE, 0xFF, 0xFF, 0xF0, 0xC0, 0x30,
+  0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0xC0, 0x78,
+  0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x7C, 0x1D,
+  0xFF, 0x0F, 0x80, 0xC0, 0x6C, 0x19, 0x83, 0x30, 0x63, 0x18, 0x63, 0x06,
+  0xC0, 0xD8, 0x0E, 0x01, 0xC0, 0x38, 0x02, 0x00, 0xC0, 0xE0, 0x6C, 0x1C,
+  0x19, 0x86, 0x83, 0x38, 0xD8, 0xE3, 0x1B, 0x18, 0x66, 0x33, 0x06, 0xC6,
+  0xC0, 0xD8, 0xD8, 0x0E, 0x0E, 0x01, 0xC1, 0xC0, 0x38, 0x38, 0x02, 0x02,
+  0x00, 0xC0, 0x1B, 0x01, 0x8C, 0x18, 0x31, 0x80, 0xD8, 0x03, 0x80, 0x1C,
+  0x01, 0xB0, 0x18, 0xC1, 0x83, 0x18, 0x0D, 0x80, 0x70, 0xC0, 0x6C, 0x18,
+  0xC6, 0x0C, 0xC0, 0xF0, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18,
+  0x03, 0x00, 0x7F, 0xEF, 0xF8, 0x06, 0x01, 0x80, 0x70, 0x0C, 0x03, 0x00,
+  0xC0, 0x18, 0x06, 0x01, 0xFF, 0xFF, 0xF0, 0xFF, 0xCC, 0xCC, 0xCC, 0xCC,
+  0xCC, 0xCC, 0xFF, 0x84, 0x10, 0x84, 0x10, 0x82, 0x10, 0x82, 0x10, 0xFF,
+  0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0xFF, 0x38, 0x71, 0xB3, 0x66, 0xD8,
+  0xF1, 0x80, 0xFF, 0xC0, 0xCC, 0x80, 0x79, 0xFA, 0x30, 0xE6, 0xD9, 0xB3,
+  0x3F, 0xC1, 0x83, 0x06, 0x0D, 0xDF, 0xB3, 0xE3, 0xC7, 0x9F, 0xF7, 0xC0,
+  0x3D, 0xFE, 0x30, 0xC3, 0x87, 0xCF, 0x06, 0x0C, 0x18, 0x33, 0xEF, 0xF9,
+  0xE3, 0xC7, 0x8D, 0xF9, 0xF0, 0x38, 0xFB, 0x1F, 0xFC, 0x1C, 0x1F, 0x9F,
+  0x3B, 0xD8, 0xCF, 0x79, 0x8C, 0x63, 0x18, 0xC0, 0x7F, 0x9F, 0x36, 0x67,
+  0x98, 0x3C, 0x3E, 0xCF, 0x0F, 0x3B, 0xE0, 0xC1, 0x83, 0x06, 0x0D, 0xDF,
+  0xF9, 0xE3, 0xC7, 0x8F, 0x1E, 0x30, 0xF3, 0xFF, 0xFC, 0x6C, 0x36, 0xDB,
+  0x6D, 0xB7, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC6, 0xCC, 0xD8, 0xF0, 0xD8,
+  0xCC, 0xC6, 0xC3, 0xFF, 0xFF, 0xFF, 0xDC, 0xEF, 0xFF, 0xC6, 0x3C, 0x63,
+  0xC6, 0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xDD, 0xFF, 0x1E, 0x3C, 0x78, 0xF1,
+  0xE3, 0x3C, 0x7E, 0xE7, 0xC3, 0xC3, 0xE7, 0x7E, 0x3C, 0xF9, 0xFB, 0x3E,
+  0x3C, 0x79, 0xFF, 0x7C, 0xC1, 0x83, 0x06, 0x00, 0x3E, 0xFF, 0x9E, 0x3C,
+  0x7C, 0xDF, 0x9F, 0x06, 0x0C, 0x18, 0x30, 0xDB, 0xFE, 0xB0, 0xC3, 0x0C,
+  0x30, 0x77, 0xF2, 0xC3, 0x4F, 0xEE, 0x00, 0x87, 0xFF, 0x61, 0x86, 0x18,
+  0x7C, 0xF0, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xFF, 0xBB, 0xC7, 0x8D, 0xB3,
+  0x66, 0xC7, 0x8E, 0x1C, 0xC7, 0x1E, 0x38, 0xD9, 0xCC, 0xDB, 0x66, 0xDB,
+  0x1C, 0x70, 0xE3, 0x86, 0x0C, 0xC1, 0xB1, 0x8D, 0x83, 0x81, 0xC1, 0xB1,
+  0x8D, 0x83, 0xC3, 0x66, 0x66, 0x3C, 0x3C, 0x18, 0x18, 0x30, 0x30, 0x60,
+  0x60, 0xC0, 0xFF, 0xF8, 0x70, 0xC3, 0x0E, 0x1F, 0xFF, 0x1C, 0xF3, 0x0C,
+  0x30, 0xC3, 0x18, 0x83, 0x87, 0x0C, 0x30, 0xC3, 0x0F, 0x1C, 0xFF, 0xFF,
+  0xE3, 0xC3, 0x0C, 0x30, 0xC3, 0x06, 0x04, 0x73, 0x8C, 0x30, 0xC3, 0x3C,
+  0xE0, 0xF8, 0xC7, 0xC0 };
+
+const GFXglyph GillSans9pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   5,    0,    0 },   // 0x20 ' '
+  {     1,   2,  12,   5,    1,  -11 },   // 0x21 '!'
+  {     4,   5,   5,   6,    1,  -11 },   // 0x22 '"'
+  {     8,  11,  12,  11,    0,  -11 },   // 0x23 '#'
+  {    25,   8,  14,  10,    1,  -11 },   // 0x24 '$'
+  {    39,  11,  12,  12,    0,  -11 },   // 0x25 '%'
+  {    56,  11,  12,  11,    1,  -11 },   // 0x26 '&'
+  {    73,   2,   5,   3,    1,  -11 },   // 0x27 '''
+  {    75,   5,  16,   6,    1,  -11 },   // 0x28 '('
+  {    85,   5,  16,   6,    0,  -11 },   // 0x29 ')'
+  {    95,   7,   9,   8,    0,  -12 },   // 0x2A '*'
+  {   103,   9,   9,  11,    1,  -10 },   // 0x2B '+'
+  {   114,   2,   4,   4,    1,   -1 },   // 0x2C ','
+  {   115,   4,   2,   6,    1,   -4 },   // 0x2D '-'
+  {   116,   2,   2,   4,    1,   -1 },   // 0x2E '.'
+  {   117,   5,  12,   5,    0,  -11 },   // 0x2F '/'
+  {   125,   7,  12,   9,    1,  -11 },   // 0x30 '0'
+  {   136,   2,  12,   9,    3,  -11 },   // 0x31 '1'
+  {   139,   8,  12,   9,    1,  -11 },   // 0x32 '2'
+  {   151,   6,  12,   9,    1,  -11 },   // 0x33 '3'
+  {   160,   8,  12,   9,    0,  -11 },   // 0x34 '4'
+  {   172,   7,  12,   9,    1,  -11 },   // 0x35 '5'
+  {   183,   7,  12,   9,    1,  -11 },   // 0x36 '6'
+  {   194,   8,  12,   9,    1,  -11 },   // 0x37 '7'
+  {   206,   7,  12,   9,    1,  -11 },   // 0x38 '8'
+  {   217,   7,  12,   9,    1,  -11 },   // 0x39 '9'
+  {   228,   2,   8,   4,    1,   -7 },   // 0x3A ':'
+  {   230,   2,  10,   4,    1,   -7 },   // 0x3B ';'
+  {   233,   9,   9,  11,    1,  -10 },   // 0x3C '<'
+  {   244,   9,   4,  11,    1,   -8 },   // 0x3D '='
+  {   249,   9,   9,  11,    1,  -10 },   // 0x3E '>'
+  {   260,   4,  12,   6,    1,  -11 },   // 0x3F '?'
+  {   266,  16,  17,  18,    1,  -12 },   // 0x40 '@'
+  {   300,  13,  12,  12,    0,  -11 },   // 0x41 'A'
+  {   320,   8,  12,  10,    1,  -11 },   // 0x42 'B'
+  {   332,  11,  12,  13,    1,  -11 },   // 0x43 'C'
+  {   349,  12,  12,  14,    1,  -11 },   // 0x44 'D'
+  {   367,   7,  12,   9,    1,  -11 },   // 0x45 'E'
+  {   378,   6,  12,   8,    1,  -11 },   // 0x46 'F'
+  {   387,  11,  12,  13,    1,  -11 },   // 0x47 'G'
+  {   404,  11,  12,  13,    1,  -11 },   // 0x48 'H'
+  {   421,   2,  12,   5,    1,  -11 },   // 0x49 'I'
+  {   424,   4,  16,   5,   -1,  -11 },   // 0x4A 'J'
+  {   432,  10,  12,  12,    1,  -11 },   // 0x4B 'K'
+  {   447,   7,  12,   9,    1,  -11 },   // 0x4C 'L'
+  {   458,  11,  12,  14,    1,  -11 },   // 0x4D 'M'
+  {   475,  12,  12,  14,    1,  -11 },   // 0x4E 'N'
+  {   493,  13,  12,  15,    1,  -11 },   // 0x4F 'O'
+  {   513,   8,  12,   9,    1,  -11 },   // 0x50 'P'
+  {   525,  13,  14,  15,    1,  -11 },   // 0x51 'Q'
+  {   548,   9,  12,  11,    1,  -11 },   // 0x52 'R'
+  {   562,   6,  12,   8,    1,  -11 },   // 0x53 'S'
+  {   571,  10,  12,  11,    0,  -11 },   // 0x54 'T'
+  {   586,  11,  12,  13,    1,  -11 },   // 0x55 'U'
+  {   603,  11,  12,  11,    0,  -11 },   // 0x56 'V'
+  {   620,  19,  12,  19,    0,  -11 },   // 0x57 'W'
+  {   649,  13,  12,  13,    0,  -11 },   // 0x58 'X'
+  {   669,  11,  12,  11,    0,  -11 },   // 0x59 'Y'
+  {   686,  11,  12,  12,    0,  -11 },   // 0x5A 'Z'
+  {   703,   4,  16,   6,    2,  -11 },   // 0x5B '['
+  {   711,   5,  12,   5,    0,  -11 },   // 0x5C '\'
+  {   719,   4,  16,   6,    0,  -11 },   // 0x5D ']'
+  {   727,   7,   7,   8,    0,  -11 },   // 0x5E '^'
+  {   734,  10,   1,  10,    0,    4 },   // 0x5F '_'
+  {   736,   3,   3,   6,    1,  -12 },   // 0x60 '`'
+  {   738,   7,   8,   8,    1,   -7 },   // 0x61 'a'
+  {   745,   7,  12,   9,    1,  -11 },   // 0x62 'b'
+  {   756,   6,   8,   8,    1,   -7 },   // 0x63 'c'
+  {   762,   7,  12,   9,    1,  -11 },   // 0x64 'd'
+  {   773,   7,   8,   9,    1,   -7 },   // 0x65 'e'
+  {   780,   5,  12,   5,    0,  -11 },   // 0x66 'f'
+  {   788,   7,  12,   8,    1,   -7 },   // 0x67 'g'
+  {   799,   7,  12,   9,    1,  -11 },   // 0x68 'h'
+  {   810,   2,  11,   4,    1,  -10 },   // 0x69 'i'
+  {   813,   3,  15,   4,    0,  -10 },   // 0x6A 'j'
+  {   819,   8,  12,   9,    1,  -11 },   // 0x6B 'k'
+  {   831,   2,  12,   4,    1,  -11 },   // 0x6C 'l'
+  {   834,  12,   8,  14,    1,   -7 },   // 0x6D 'm'
+  {   846,   7,   8,   9,    1,   -7 },   // 0x6E 'n'
+  {   853,   8,   8,  10,    1,   -7 },   // 0x6F 'o'
+  {   861,   7,  12,   9,    1,   -7 },   // 0x70 'p'
+  {   872,   7,  12,   9,    1,   -7 },   // 0x71 'q'
+  {   883,   6,   8,   7,    1,   -7 },   // 0x72 'r'
+  {   889,   5,   8,   7,    1,   -7 },   // 0x73 's'
+  {   894,   6,  10,   6,    0,   -9 },   // 0x74 't'
+  {   902,   7,   8,   9,    1,   -7 },   // 0x75 'u'
+  {   909,   7,   8,   8,    0,   -7 },   // 0x76 'v'
+  {   916,  13,   8,  13,    0,   -7 },   // 0x77 'w'
+  {   929,   9,   8,   9,    0,   -7 },   // 0x78 'x'
+  {   938,   8,  12,   8,    0,   -7 },   // 0x79 'y'
+  {   950,   7,   8,   8,    0,   -7 },   // 0x7A 'z'
+  {   957,   6,  17,   6,    0,  -12 },   // 0x7B '{'
+  {   970,   1,  16,   5,    2,  -11 },   // 0x7C '|'
+  {   972,   6,  17,   6,    0,  -12 },   // 0x7D '}'
+  {   985,   9,   2,  11,    1,   -6 } }; // 0x7E '~'
+
+const GFXfont GillSans9pt7b PROGMEM = {
+  (uint8_t  *)GillSans9pt7bBitmaps,
+  (GFXglyph *)GillSans9pt7bGlyphs,
+  0x20, 0x7E, 20 };
+
+// Approx. 1660 bytes
+const uint8_t ptmono9pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xFF, 0xCF, 0xC0, 0xCF, 0x3C, 0xF3, 0xCE, 0x20, 0x1D, 0xC6,
+  0x61, 0x99, 0xFF, 0x7F, 0xCC, 0xC3, 0x33, 0xFE, 0xFF, 0x8C, 0xC6, 0x61,
+  0x98, 0x18, 0x18, 0x3E, 0x7E, 0xCA, 0xC8, 0xE8, 0x78, 0x7E, 0x1F, 0x17,
+  0x13, 0x93, 0xFE, 0xFC, 0x18, 0x18, 0x70, 0x5F, 0x0F, 0x63, 0x6C, 0xCF,
+  0xB0, 0xEC, 0x01, 0x00, 0x6E, 0x1B, 0xE6, 0x6D, 0x8D, 0xE1, 0xF4, 0x1C,
+  0x3C, 0x1F, 0x86, 0x61, 0x98, 0x3C, 0x0E, 0x07, 0x8F, 0x33, 0xC6, 0xF0,
+  0xEE, 0x39, 0xFF, 0x3C, 0x40, 0xFF, 0xE0, 0x06, 0x3C, 0xE3, 0x86, 0x1C,
+  0x30, 0x60, 0xC1, 0x83, 0x07, 0x06, 0x0E, 0x0E, 0x0F, 0x06, 0xC1, 0xE0,
+  0xE0, 0xE0, 0xC1, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x70, 0xC3, 0x8E, 0x78,
+  0xC0, 0x22, 0x3B, 0x85, 0x1F, 0xFF, 0xF8, 0xA1, 0xD8, 0x46, 0x18, 0x18,
+  0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x67, 0x71, 0x2C, 0xFF,
+  0xC0, 0xFF, 0x80, 0x02, 0x03, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x18, 0x18,
+  0x30, 0x30, 0x70, 0x60, 0x60, 0xC0, 0x40, 0x3E, 0x3F, 0x98, 0xD8, 0x3C,
+  0x7E, 0x7F, 0x77, 0xF3, 0xE1, 0xE0, 0xD8, 0xCF, 0xE3, 0xE0, 0x18, 0x38,
+  0x78, 0xD8, 0x98, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x7C,
+  0xFE, 0x47, 0x03, 0x03, 0x03, 0x06, 0x0C, 0x18, 0x38, 0x60, 0xFF, 0xFF,
+  0xFE, 0xFE, 0x0C, 0x1C, 0x18, 0x3E, 0x3F, 0x07, 0x03, 0x03, 0x87, 0xFE,
+  0xFC, 0x03, 0x01, 0xC0, 0xF0, 0x7C, 0x3B, 0x0C, 0xC6, 0x33, 0xFF, 0xFF,
+  0xC0, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x7C,
+  0x7E, 0x07, 0x03, 0x03, 0x87, 0xFE, 0xFC, 0x06, 0x0F, 0x0E, 0x0E, 0x06,
+  0x06, 0xF3, 0xFD, 0xC7, 0xC1, 0xE0, 0xF8, 0xEF, 0xE3, 0xE0, 0xFF, 0xFF,
+  0x07, 0x06, 0x0E, 0x0C, 0x0C, 0x18, 0x18, 0x30, 0x30, 0x60, 0xE0, 0x3E,
+  0x3F, 0xF8, 0xF8, 0x3E, 0x31, 0xF0, 0xFC, 0xCF, 0xC1, 0xE0, 0xF8, 0xEF,
+  0xE3, 0xE0, 0x3E, 0x3F, 0xB8, 0xF8, 0x3C, 0x1F, 0x0D, 0xFE, 0x7B, 0x03,
+  0x01, 0x83, 0x87, 0x83, 0x80, 0xFF, 0x80, 0x07, 0xFC, 0x77, 0x70, 0x00,
+  0x06, 0x77, 0x12, 0xC0, 0x01, 0x01, 0xC3, 0xC7, 0x87, 0x07, 0x01, 0xE0,
+  0x78, 0x0F, 0x01, 0xC0, 0x40, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFC,
+  0x40, 0x70, 0x1E, 0x03, 0xC0, 0x70, 0x1C, 0x3C, 0x3C, 0x78, 0x70, 0x10,
+  0x00, 0x3E, 0x3F, 0xF0, 0x60, 0x30, 0x38, 0x38, 0x38, 0x30, 0x18, 0x00,
+  0x06, 0x03, 0x81, 0x80, 0x0F, 0x07, 0xF1, 0xC3, 0x30, 0x6E, 0x0D, 0x9F,
+  0xB7, 0xF6, 0xC6, 0xD8, 0xDB, 0xFF, 0xBB, 0xB0, 0x07, 0x88, 0x7F, 0x83,
+  0xF0, 0x0C, 0x03, 0x01, 0xE0, 0x78, 0x1E, 0x0C, 0xC3, 0x30, 0xCC, 0x7F,
+  0x9F, 0xE6, 0x1B, 0x03, 0xC0, 0xC0, 0xFE, 0x7F, 0xF0, 0x78, 0x3C, 0x37,
+  0xF3, 0xFD, 0x87, 0xC1, 0xE0, 0xF0, 0xFF, 0xEF, 0xE0, 0x1F, 0x9F, 0xDC,
+  0x6C, 0x3C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x70, 0xDC, 0x67, 0xF1, 0xF0,
+  0xFC, 0x7F, 0xB0, 0xD8, 0x7C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE1, 0xF1,
+  0xDF, 0xCF, 0xC0, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xFE, 0xFE, 0xC0, 0xC0,
+  0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x1F, 0x9F, 0xDC, 0x6C, 0x3C, 0x06, 0x03,
+  0x1F, 0x8F, 0xC1, 0xB0, 0xDC, 0x67, 0xF1, 0xF0, 0xC1, 0xE0, 0xF0, 0x78,
+  0x3C, 0x1F, 0xFF, 0xFF, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x18, 0xFF,
+  0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF,
+  0xFF, 0xFF, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x87, 0xFE,
+  0x7C, 0xC1, 0xF0, 0xEC, 0x73, 0x1C, 0xCE, 0x3F, 0x0F, 0xC3, 0x38, 0xC6,
+  0x31, 0xCC, 0x3B, 0x0E, 0xC1, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+  0xC0, 0xC0, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF, 0xC1, 0xF1, 0xFD, 0xFE, 0xFF,
+  0xFE, 0xEF, 0x27, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x18, 0xC1, 0xF0,
+  0xF8, 0x7E, 0x3F, 0x9F, 0xCF, 0x77, 0xBF, 0xCF, 0xE3, 0xF1, 0xF8, 0x7C,
+  0x18, 0x1E, 0x1F, 0xE6, 0x1B, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0,
+  0xF0, 0x36, 0x19, 0xFE, 0x1E, 0x00, 0xFE, 0x7F, 0xB0, 0xF8, 0x3C, 0x1E,
+  0x0F, 0x0F, 0xFE, 0xFC, 0x60, 0x30, 0x18, 0x0C, 0x00, 0x1E, 0x1F, 0xE6,
+  0x1B, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x36, 0x19, 0xFE,
+  0x1E, 0x03, 0x00, 0x7C, 0x0F, 0xFC, 0x7F, 0x31, 0xD8, 0x6C, 0x36, 0x3B,
+  0xF9, 0xF8, 0xCE, 0x67, 0x31, 0xD8, 0xEC, 0x38, 0x3F, 0xBF, 0xF0, 0x78,
+  0x3E, 0x03, 0xC0, 0xF8, 0x1F, 0x01, 0xE0, 0xF0, 0xFF, 0xE7, 0xE0, 0xFF,
+  0xFF, 0xFC, 0xCF, 0x33, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00,
+  0xC0, 0xFC, 0x3F, 0x00, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07,
+  0x83, 0xC1, 0xE0, 0xF8, 0xEF, 0xE3, 0xE0, 0xE1, 0xF8, 0x76, 0x19, 0xC6,
+  0x73, 0x8C, 0xC3, 0x30, 0xEC, 0x3F, 0x07, 0x81, 0xE0, 0x78, 0x0E, 0x00,
+  0xC0, 0x78, 0x0F, 0x01, 0xF0, 0x3E, 0x66, 0xDD, 0x9B, 0xB3, 0x5E, 0x7B,
+  0xCF, 0x79, 0xC7, 0x38, 0xE7, 0x1C, 0xE0, 0xEE, 0x38, 0xE6, 0x1D, 0xC1,
+  0xF0, 0x3E, 0x03, 0x80, 0xF8, 0x1B, 0x07, 0x71, 0xC7, 0x38, 0xEE, 0x0E,
+  0xE1, 0xD8, 0x67, 0x38, 0xCC, 0x3F, 0x07, 0x81, 0xE0, 0x30, 0x0C, 0x03,
+  0x00, 0xC0, 0x30, 0x0C, 0x00, 0xFF, 0xFF, 0xC0, 0xE0, 0xE0, 0xE0, 0x60,
+  0x70, 0x70, 0x70, 0x38, 0x38, 0x1F, 0xFF, 0xF8, 0xFF, 0xFF, 0x06, 0x0C,
+  0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x7F, 0xFE, 0x40,
+  0xC0, 0x60, 0x60, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0C, 0x0C, 0x0C, 0x06,
+  0x06, 0x03, 0x02, 0xFF, 0xFC, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
+  0x18, 0x30, 0x60, 0xC1, 0xFF, 0xFE, 0x0C, 0x03, 0x81, 0xE0, 0xCC, 0x33,
+  0x18, 0x6E, 0x1C, 0xFF, 0xFF, 0xE7, 0x30, 0x7E, 0x3F, 0x80, 0xC7, 0xEF,
+  0xF6, 0x1B, 0x0D, 0xFF, 0x7B, 0x80, 0xE0, 0x38, 0x06, 0x01, 0x80, 0x6F,
+  0x1F, 0xE7, 0x1D, 0x83, 0x60, 0xD8, 0x36, 0x1D, 0xFE, 0x3E, 0x00, 0x1F,
+  0x3F, 0xF8, 0x78, 0x3C, 0x06, 0x03, 0x84, 0xFF, 0x3F, 0x00, 0x03, 0x80,
+  0xE0, 0x18, 0x06, 0x1F, 0x9F, 0xEE, 0x1B, 0x06, 0xC1, 0xB0, 0x6E, 0x39,
+  0xFF, 0x3C, 0xC0, 0x3E, 0x3F, 0xB0, 0x7F, 0xFF, 0xFE, 0x03, 0x84, 0xFF,
+  0x3F, 0x00, 0x0F, 0x8F, 0xCC, 0x46, 0x0F, 0xF7, 0xF8, 0xC0, 0x60, 0x30,
+  0x18, 0x0C, 0x1F, 0xEF, 0xF0, 0x3F, 0xBF, 0xF8, 0x78, 0x3C, 0x1E, 0x0F,
+  0x8E, 0xFF, 0x3F, 0x80, 0xC8, 0xEF, 0xE3, 0xE0, 0xE0, 0x70, 0x18, 0x0C,
+  0x06, 0xF3, 0xFD, 0xC6, 0xC3, 0x61, 0xB0, 0xD8, 0x6C, 0x36, 0x18, 0x1C,
+  0x1C, 0x1C, 0x00, 0xF8, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF,
+  0x0E, 0x1C, 0x38, 0x07, 0xEF, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x60,
+  0xE3, 0xFE, 0x78, 0xE0, 0x38, 0x06, 0x01, 0x80, 0x63, 0x99, 0xC6, 0xE1,
+  0xB0, 0x7C, 0x1B, 0x86, 0x71, 0x9F, 0x63, 0xC0, 0xF0, 0xF0, 0x30, 0x30,
+  0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F, 0x1E, 0xFB, 0xBF, 0xFC,
+  0xCF, 0x33, 0xCC, 0xF3, 0x3C, 0xCF, 0x33, 0xCC, 0xC0, 0xEF, 0x7F, 0xDC,
+  0xEC, 0x36, 0x1B, 0x0D, 0x86, 0xC3, 0x61, 0x80, 0x3F, 0x1F, 0xEE, 0x1F,
+  0x03, 0xC0, 0xF0, 0x3E, 0x1D, 0xFE, 0x3F, 0x00, 0xEF, 0x3F, 0xE7, 0x1D,
+  0x83, 0x60, 0xD8, 0x36, 0x1D, 0xFE, 0x7F, 0x18, 0x06, 0x01, 0x80, 0x60,
+  0x00, 0x1F, 0xBF, 0xF8, 0x78, 0x3C, 0x1E, 0x0F, 0x8E, 0xFF, 0x3D, 0x80,
+  0xC0, 0x60, 0x30, 0x18, 0xF7, 0x7F, 0xCE, 0x66, 0x03, 0x01, 0x80, 0xC1,
+  0xFE, 0xFF, 0x00, 0x7E, 0xFF, 0xC2, 0xF0, 0x7E, 0x07, 0x43, 0xFF, 0x3E,
+  0x10, 0x0C, 0x03, 0x03, 0xFE, 0xFF, 0x8C, 0x03, 0x00, 0xC0, 0x30, 0x0E,
+  0x21, 0xFC, 0x3C, 0xE3, 0xB8, 0xE6, 0x19, 0x86, 0x61, 0x98, 0x66, 0x39,
+  0xFF, 0x3C, 0xC0, 0xE1, 0xD8, 0x67, 0x18, 0xCE, 0x3B, 0x0E, 0xC1, 0xE0,
+  0x78, 0x0E, 0x00, 0xC0, 0x7C, 0x0D, 0x9B, 0x37, 0x66, 0xEC, 0xDF, 0x9E,
+  0xF1, 0xDC, 0x39, 0x80, 0xE3, 0xB9, 0x8D, 0x87, 0xC1, 0xC1, 0xF1, 0xDC,
+  0xC6, 0xE3, 0x80, 0xE1, 0xD8, 0x76, 0x19, 0xC6, 0x33, 0x8E, 0xC1, 0xB0,
+  0x7C, 0x0E, 0x01, 0x84, 0xE1, 0xF0, 0x38, 0x00, 0xFF, 0xFF, 0x06, 0x0C,
+  0x18, 0x30, 0x60, 0xFF, 0xFF, 0x0F, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18,
+  0x38, 0xF0, 0xF0, 0x38, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x0F, 0xFF, 0xFF,
+  0xFF, 0xFC, 0xF0, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1C, 0x0F, 0x0F,
+  0x1C, 0x18, 0x18, 0x18, 0x18, 0xF8, 0xF0, 0x72, 0xFF, 0x8F };
+
+const GFXglyph ptmono9pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,  11,    0,    0 },   // 0x20 ' '
+  {     1,   2,  13,  11,    4,  -12 },   // 0x21 '!'
+  {     5,   6,   6,  11,    2,  -12 },   // 0x22 '"'
+  {    10,  10,  12,  11,    0,  -11 },   // 0x23 '#'
+  {    25,   8,  17,  11,    1,  -14 },   // 0x24 '$'
+  {    42,  11,  13,  11,    0,  -12 },   // 0x25 '%'
+  {    60,  10,  13,  11,    0,  -12 },   // 0x26 '&'
+  {    77,   2,   6,  11,    4,  -12 },   // 0x27 '''
+  {    79,   7,  17,  11,    2,  -12 },   // 0x28 '('
+  {    94,   7,  17,  11,    2,  -12 },   // 0x29 ')'
+  {   109,   9,   8,  11,    1,  -12 },   // 0x2A '*'
+  {   118,   8,  10,  11,    1,  -10 },   // 0x2B '+'
+  {   128,   4,   6,  11,    3,   -2 },   // 0x2C ','
+  {   131,   5,   2,  11,    3,   -5 },   // 0x2D '-'
+  {   133,   3,   3,  11,    4,   -2 },   // 0x2E '.'
+  {   135,   8,  16,  11,    1,  -12 },   // 0x2F '/'
+  {   151,   9,  13,  11,    1,  -12 },   // 0x30 '0'
+  {   166,   8,  13,  11,    2,  -12 },   // 0x31 '1'
+  {   179,   8,  13,  11,    1,  -12 },   // 0x32 '2'
+  {   192,   8,  13,  11,    2,  -12 },   // 0x33 '3'
+  {   205,  10,  13,  11,    0,  -12 },   // 0x34 '4'
+  {   222,   8,  13,  11,    1,  -12 },   // 0x35 '5'
+  {   235,   9,  13,  11,    1,  -12 },   // 0x36 '6'
+  {   250,   8,  13,  11,    1,  -12 },   // 0x37 '7'
+  {   263,   9,  13,  11,    1,  -12 },   // 0x38 '8'
+  {   278,   9,  13,  11,    1,  -12 },   // 0x39 '9'
+  {   293,   3,  10,  11,    4,   -9 },   // 0x3A ':'
+  {   297,   4,  13,  11,    3,   -9 },   // 0x3B ';'
+  {   304,   9,  11,  11,    1,  -10 },   // 0x3C '<'
+  {   317,   9,   6,  11,    1,   -8 },   // 0x3D '='
+  {   324,   9,  11,  11,    1,  -10 },   // 0x3E '>'
+  {   337,   9,  13,  11,    1,  -12 },   // 0x3F '?'
+  {   352,  11,  15,  11,    0,  -10 },   // 0x40 '@'
+  {   373,  10,  13,  11,    0,  -12 },   // 0x41 'A'
+  {   390,   9,  13,  11,    1,  -12 },   // 0x42 'B'
+  {   405,   9,  13,  11,    1,  -12 },   // 0x43 'C'
+  {   420,   9,  13,  11,    1,  -12 },   // 0x44 'D'
+  {   435,   8,  13,  11,    1,  -12 },   // 0x45 'E'
+  {   448,   8,  13,  11,    2,  -12 },   // 0x46 'F'
+  {   461,   9,  13,  11,    1,  -12 },   // 0x47 'G'
+  {   476,   9,  13,  11,    1,  -12 },   // 0x48 'H'
+  {   491,   8,  13,  11,    1,  -12 },   // 0x49 'I'
+  {   504,   8,  13,  11,    1,  -12 },   // 0x4A 'J'
+  {   517,  10,  13,  11,    1,  -12 },   // 0x4B 'K'
+  {   534,   8,  13,  11,    2,  -12 },   // 0x4C 'L'
+  {   547,   9,  13,  11,    1,  -12 },   // 0x4D 'M'
+  {   562,   9,  13,  11,    1,  -12 },   // 0x4E 'N'
+  {   577,  10,  13,  11,    0,  -12 },   // 0x4F 'O'
+  {   594,   9,  13,  11,    1,  -12 },   // 0x50 'P'
+  {   609,  10,  16,  11,    0,  -12 },   // 0x51 'Q'
+  {   629,   9,  13,  11,    1,  -12 },   // 0x52 'R'
+  {   644,   9,  13,  11,    1,  -12 },   // 0x53 'S'
+  {   659,  10,  13,  11,    0,  -12 },   // 0x54 'T'
+  {   676,   9,  13,  11,    1,  -12 },   // 0x55 'U'
+  {   691,  10,  13,  11,    0,  -12 },   // 0x56 'V'
+  {   708,  11,  13,  11,    0,  -12 },   // 0x57 'W'
+  {   726,  11,  13,  11,    0,  -12 },   // 0x58 'X'
+  {   744,  10,  13,  11,    0,  -12 },   // 0x59 'Y'
+  {   761,   9,  13,  11,    1,  -12 },   // 0x5A 'Z'
+  {   776,   7,  17,  11,    2,  -12 },   // 0x5B '['
+  {   791,   8,  16,  11,    1,  -12 },   // 0x5C '\'
+  {   807,   7,  17,  11,    2,  -12 },   // 0x5D ']'
+  {   822,  10,   7,  11,    0,  -12 },   // 0x5E '^'
+  {   831,   8,   2,  11,    1,    3 },   // 0x5F '_'
+  {   833,   4,   3,  11,    3,  -12 },   // 0x60 '`'
+  {   835,   9,   9,  11,    1,   -8 },   // 0x61 'a'
+  {   846,  10,  13,  11,    0,  -12 },   // 0x62 'b'
+  {   863,   9,   9,  11,    1,   -8 },   // 0x63 'c'
+  {   874,  10,  13,  11,    0,  -12 },   // 0x64 'd'
+  {   891,   9,   9,  11,    1,   -8 },   // 0x65 'e'
+  {   902,   9,  13,  11,    1,  -12 },   // 0x66 'f'
+  {   917,   9,  13,  11,    1,   -8 },   // 0x67 'g'
+  {   932,   9,  13,  11,    0,  -12 },   // 0x68 'h'
+  {   947,   8,  13,  11,    1,  -12 },   // 0x69 'i'
+  {   960,   7,  17,  11,    1,  -12 },   // 0x6A 'j'
+  {   975,  10,  13,  11,    1,  -12 },   // 0x6B 'k'
+  {   992,   8,  13,  11,    1,  -12 },   // 0x6C 'l'
+  {  1005,  10,   9,  11,    0,   -8 },   // 0x6D 'm'
+  {  1017,   9,   9,  11,    1,   -8 },   // 0x6E 'n'
+  {  1028,  10,   9,  11,    0,   -8 },   // 0x6F 'o'
+  {  1040,  10,  13,  11,    0,   -8 },   // 0x70 'p'
+  {  1057,   9,  13,  11,    1,   -8 },   // 0x71 'q'
+  {  1072,   9,   9,  11,    1,   -8 },   // 0x72 'r'
+  {  1083,   8,   9,  11,    1,   -8 },   // 0x73 's'
+  {  1092,  10,  12,  11,    0,  -11 },   // 0x74 't'
+  {  1107,  10,   9,  11,    0,   -8 },   // 0x75 'u'
+  {  1119,  10,   9,  11,    0,   -8 },   // 0x76 'v'
+  {  1131,  11,   9,  11,    0,   -8 },   // 0x77 'w'
+  {  1144,   9,   9,  11,    1,   -8 },   // 0x78 'x'
+  {  1155,  10,  13,  11,    0,   -8 },   // 0x79 'y'
+  {  1172,   8,   9,  11,    1,   -8 },   // 0x7A 'z'
+  {  1181,   8,  17,  11,    1,  -12 },   // 0x7B '{'
+  {  1198,   2,  15,  11,    4,  -12 },   // 0x7C '|'
+  {  1202,   8,  17,  11,    2,  -12 },   // 0x7D '}'
+  {  1219,   8,   3,  11,    1,   -7 } }; // 0x7E '~'
+
+const GFXfont ptmono9pt7b PROGMEM = {
+  (uint8_t  *)ptmono9pt7bBitmaps,
+  (GFXglyph *)ptmono9pt7bGlyphs,
+  0x20, 0x7E, 20 };
+
+// Approx. 1894 bytes
+const uint8_t SourceCodePro_Regular9pt7bBitmaps[] PROGMEM = {
+  0x00, 0x49, 0x24, 0x90, 0x1B, 0xE0, 0xCF, 0x34, 0x51, 0x45, 0x10, 0x24,
+  0x48, 0x97, 0xF4, 0x48, 0xBF, 0xA4, 0x48, 0x91, 0x20, 0x10, 0x21, 0xF6,
+  0x38, 0x18, 0x1E, 0x0E, 0x06, 0x06, 0x1B, 0xE1, 0x02, 0x04, 0x00, 0x38,
+  0x13, 0x14, 0x4D, 0x16, 0x4D, 0x0E, 0x80, 0x38, 0x13, 0x14, 0x49, 0x16,
+  0x4F, 0x0E, 0x38, 0x32, 0x11, 0x0D, 0x83, 0x81, 0x85, 0xC3, 0xB3, 0x8D,
+  0x43, 0x31, 0xEF, 0x10, 0xF5, 0x50, 0x11, 0xD8, 0x8C, 0x42, 0x10, 0x84,
+  0x21, 0x84, 0x30, 0xC3, 0xC3, 0x08, 0x21, 0x0C, 0x21, 0x08, 0x46, 0x21,
+  0x11, 0x98, 0x10, 0x22, 0x4B, 0xE3, 0x8D, 0x11, 0x00, 0x10, 0x20, 0x40,
+  0x8F, 0xE2, 0x04, 0x08, 0x10, 0xFF, 0x97, 0xA0, 0xFC, 0xFF, 0x80, 0x02,
+  0x08, 0x10, 0x60, 0x81, 0x06, 0x08, 0x10, 0x60, 0x83, 0x04, 0x08, 0x30,
+  0x40, 0x3C, 0x31, 0x10, 0x58, 0x2D, 0x96, 0xEF, 0x05, 0x82, 0x41, 0x31,
+  0x0F, 0x00, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+  0xFF, 0x3C, 0xC2, 0x03, 0x03, 0x03, 0x06, 0x04, 0x08, 0x30, 0x60, 0xFF,
+  0x3C, 0xC3, 0x03, 0x03, 0x06, 0x1C, 0x03, 0x01, 0x01, 0xC3, 0x7E, 0x06,
+  0x05, 0x06, 0x82, 0x42, 0x22, 0x13, 0x09, 0xFF, 0x02, 0x01, 0x00, 0x80,
+  0x7F, 0x60, 0x60, 0x40, 0x7E, 0x43, 0x01, 0x01, 0x01, 0xC3, 0x7C, 0x1F,
+  0x10, 0x98, 0x08, 0x0D, 0xE7, 0x1B, 0x06, 0x83, 0x41, 0x31, 0x87, 0x80,
+  0xFF, 0x81, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x30, 0x18, 0x0C, 0x06,
+  0x00, 0x3E, 0x31, 0x90, 0x4C, 0x23, 0x31, 0xF1, 0x99, 0x82, 0xC1, 0xA1,
+  0x8F, 0x80, 0x3C, 0x42, 0xC1, 0xC1, 0x41, 0x3F, 0x01, 0x01, 0x03, 0x46,
+  0xFC, 0xFF, 0x80, 0x3F, 0xE0, 0xFF, 0x80, 0x3F, 0xE5, 0xE8, 0x02, 0x18,
+  0x63, 0x08, 0x0C, 0x06, 0x06, 0x02, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x80,
+  0x80, 0xC0, 0x60, 0x61, 0x8C, 0x20, 0x80, 0x79, 0x88, 0x18, 0x20, 0x82,
+  0x0C, 0x00, 0x00, 0x60, 0xC1, 0x80, 0x1E, 0x10, 0x90, 0x38, 0x18, 0x7C,
+  0xC6, 0x43, 0x23, 0x8E, 0xC0, 0x30, 0x08, 0x02, 0x10, 0xF0, 0x18, 0x0A,
+  0x05, 0x06, 0x82, 0x61, 0x11, 0x88, 0xFE, 0x41, 0x60, 0xB0, 0x70, 0x10,
+  0xFC, 0x86, 0x82, 0x82, 0x86, 0xF8, 0x86, 0x83, 0x83, 0x83, 0x86, 0xFC,
+  0x1F, 0x18, 0xD8, 0x08, 0x0C, 0x06, 0x03, 0x01, 0x80, 0x40, 0x30, 0x0C,
+  0x63, 0xE0, 0xF8, 0x8C, 0x82, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x86,
+  0x8C, 0xF8, 0xFE, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0xC0, 0xC0, 0xC0, 0xC0,
+  0xC0, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFE, 0xC0, 0xC0, 0xC0,
+  0xC0, 0xC0, 0x1F, 0x10, 0x90, 0x18, 0x0C, 0x06, 0x03, 0x1F, 0x83, 0xC1,
+  0xA0, 0xD8, 0x63, 0xC0, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xFF, 0xC1, 0xC1,
+  0xC1, 0xC1, 0xC1, 0xC1, 0xFE, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10,
+  0x20, 0x47, 0xF0, 0x7F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+  0x83, 0x42, 0x3C, 0x83, 0x86, 0x8C, 0x98, 0x90, 0xB8, 0xE8, 0xCC, 0x84,
+  0x86, 0x83, 0x83, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+  0xC0, 0xC0, 0xFF, 0xC1, 0xE3, 0xE3, 0xE5, 0xD5, 0xD5, 0xD9, 0xC9, 0xC1,
+  0xC1, 0xC1, 0xC1, 0xC1, 0xE1, 0xE1, 0xD1, 0xD1, 0xD9, 0xC9, 0xCD, 0xC5,
+  0xC3, 0xC3, 0xC1, 0x3C, 0x31, 0x90, 0x58, 0x3C, 0x1C, 0x0E, 0x07, 0x83,
+  0xC1, 0xA0, 0x98, 0xC7, 0x80, 0xFC, 0x82, 0x83, 0x83, 0x83, 0x86, 0xFC,
+  0x80, 0x80, 0x80, 0x80, 0x80, 0x3C, 0x31, 0x90, 0x58, 0x3C, 0x1C, 0x0E,
+  0x07, 0x83, 0xC1, 0xA0, 0x98, 0xC7, 0x80, 0x80, 0x60, 0x0E, 0xFC, 0x86,
+  0x83, 0x83, 0x82, 0x86, 0xFC, 0x88, 0x8C, 0x84, 0x86, 0x83, 0x3E, 0x30,
+  0x90, 0x08, 0x06, 0x01, 0xE0, 0x3C, 0x06, 0x01, 0x80, 0xF0, 0xC7, 0xC0,
+  0xFF, 0x84, 0x02, 0x01, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02,
+  0x01, 0x00, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x41,
+  0x63, 0x3E, 0x81, 0xE0, 0xD0, 0x48, 0x26, 0x33, 0x10, 0x88, 0x4C, 0x34,
+  0x0A, 0x05, 0x03, 0x00, 0xC0, 0x78, 0x09, 0x01, 0x20, 0x24, 0x44, 0x98,
+  0x92, 0xB3, 0x56, 0x6A, 0x86, 0x30, 0xC6, 0x18, 0xC0, 0xC1, 0xB1, 0x88,
+  0x86, 0xC1, 0x40, 0xE0, 0x70, 0x28, 0x26, 0x31, 0x10, 0xD8, 0x30, 0xC1,
+  0xE0, 0x98, 0xCC, 0x43, 0x60, 0xA0, 0x70, 0x10, 0x08, 0x04, 0x02, 0x01,
+  0x00, 0x7F, 0x81, 0x80, 0x80, 0xC0, 0x40, 0x60, 0x60, 0x20, 0x30, 0x30,
+  0x10, 0x1F, 0xF0, 0xFC, 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, 0x42,
+  0x1F, 0x81, 0x81, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x10, 0x30, 0x20, 0x40,
+  0xC0, 0x81, 0x01, 0xF8, 0x42, 0x10, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84,
+  0x3F, 0x10, 0x70, 0xA3, 0x44, 0x48, 0xA1, 0x80, 0xFF, 0x80, 0xC6, 0x30,
+  0x3E, 0x43, 0x01, 0x0F, 0x71, 0x41, 0xC1, 0x43, 0x3D, 0x80, 0x80, 0x80,
+  0x80, 0xBC, 0xC6, 0x82, 0x83, 0x83, 0x83, 0x82, 0xC6, 0xBC, 0x1F, 0x10,
+  0xD8, 0x08, 0x0C, 0x02, 0x01, 0x00, 0xC2, 0x1F, 0x80, 0x01, 0x01, 0x01,
+  0x01, 0x3D, 0x63, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x63, 0x3D, 0x1E, 0x31,
+  0x90, 0x58, 0x3F, 0xFE, 0x01, 0x00, 0xC2, 0x1F, 0x00, 0x0F, 0x10, 0x30,
+  0x30, 0xFE, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F, 0xB1,
+  0x10, 0xC8, 0x66, 0x21, 0xE1, 0x00, 0x80, 0x3F, 0x20, 0x70, 0x28, 0x33,
+  0xE0, 0x81, 0x02, 0x04, 0x09, 0xDC, 0xE0, 0xC1, 0x83, 0x06, 0x0C, 0x18,
+  0x20, 0x18, 0xC0, 0x0F, 0x84, 0x21, 0x08, 0x42, 0x10, 0x80, 0x0C, 0x30,
+  0x00, 0x7C, 0x10, 0x41, 0x04, 0x10, 0x41, 0x04, 0x10, 0x43, 0xF8, 0x80,
+  0x80, 0x80, 0x80, 0x83, 0x84, 0x88, 0x98, 0xB8, 0xCC, 0x84, 0x82, 0x83,
+  0xF8, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
+  0x01, 0x00, 0x78, 0xBB, 0x66, 0xF2, 0x39, 0x1C, 0x8E, 0x47, 0x23, 0x91,
+  0xC8, 0x80, 0x9D, 0xCE, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x82, 0x3C, 0x31,
+  0xB0, 0x58, 0x3C, 0x1E, 0x0F, 0x04, 0xC6, 0x3C, 0x00, 0xBC, 0xC6, 0x82,
+  0x83, 0x83, 0x83, 0x82, 0xC6, 0xBC, 0x80, 0x80, 0x80, 0x80, 0x3D, 0x63,
+  0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x63, 0x3D, 0x01, 0x01, 0x01, 0x01, 0x9F,
+  0x43, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x3E, 0x61, 0x40, 0x70, 0x1E,
+  0x03, 0x01, 0x43, 0xBE, 0x10, 0x08, 0x3F, 0xC2, 0x01, 0x00, 0x80, 0x40,
+  0x20, 0x10, 0x0C, 0x03, 0xE0, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC3,
+  0x45, 0x39, 0xC1, 0xA0, 0x90, 0xCC, 0x42, 0x21, 0xB0, 0x50, 0x28, 0x18,
+  0x00, 0xC4, 0x78, 0x89, 0x29, 0x25, 0x26, 0xAC, 0xD5, 0x8C, 0xA1, 0x8C,
+  0x31, 0x80, 0xC3, 0x31, 0x0D, 0x82, 0x81, 0x80, 0xE0, 0x98, 0xC6, 0xC1,
+  0x80, 0xC1, 0xA0, 0x90, 0x4C, 0x62, 0x21, 0xB0, 0x50, 0x38, 0x0C, 0x04,
+  0x06, 0x02, 0x0E, 0x00, 0x7F, 0x01, 0x81, 0x81, 0x81, 0x80, 0x80, 0xC0,
+  0xC0, 0xFF, 0x80, 0x1E, 0x20, 0x40, 0x81, 0x02, 0x0C, 0x60, 0x30, 0x20,
+  0x40, 0x81, 0x02, 0x04, 0x0F, 0xFF, 0xFF, 0xC0, 0xE0, 0x20, 0x40, 0x81,
+  0x02, 0x04, 0x07, 0x18, 0x20, 0x40, 0x81, 0x02, 0x04, 0x70, 0x31, 0x49,
+  0x86 };
+
+const GFXglyph SourceCodePro_Regular9pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,  11,    0,    0 },   // 0x20 ' '
+  {     1,   3,  12,  11,    4,  -11 },   // 0x21 '!'
+  {     6,   6,   6,  11,    2,  -11 },   // 0x22 '"'
+  {    11,   7,  11,  11,    2,  -10 },   // 0x23 '#'
+  {    21,   7,  15,  11,    2,  -12 },   // 0x24 '$'
+  {    35,  10,  12,  11,    0,  -11 },   // 0x25 '%'
+  {    50,   9,  12,  11,    1,  -11 },   // 0x26 '&'
+  {    64,   2,   6,  11,    4,  -11 },   // 0x27 '''
+  {    66,   5,  16,  11,    4,  -12 },   // 0x28 '('
+  {    76,   5,  16,  11,    2,  -12 },   // 0x29 ')'
+  {    86,   7,   7,  11,    2,  -12 },   // 0x2A '*'
+  {    93,   7,   9,  11,    2,   -9 },   // 0x2B '+'
+  {   101,   3,   7,  11,    4,   -2 },   // 0x2C ','
+  {   104,   6,   1,  11,    2,   -5 },   // 0x2D '-'
+  {   105,   3,   3,  11,    4,   -2 },   // 0x2E '.'
+  {   107,   7,  16,  11,    2,  -12 },   // 0x2F '/'
+  {   121,   9,  11,  11,    1,  -10 },   // 0x30 '0'
+  {   134,   8,  11,  11,    2,  -10 },   // 0x31 '1'
+  {   145,   8,  11,  11,    1,  -10 },   // 0x32 '2'
+  {   156,   8,  11,  11,    1,  -10 },   // 0x33 '3'
+  {   167,   9,  11,  11,    1,  -10 },   // 0x34 '4'
+  {   180,   8,  11,  11,    1,  -10 },   // 0x35 '5'
+  {   191,   9,  11,  11,    1,  -10 },   // 0x36 '6'
+  {   204,   9,  11,  11,    1,  -10 },   // 0x37 '7'
+  {   217,   9,  11,  11,    1,  -10 },   // 0x38 '8'
+  {   230,   8,  11,  11,    1,  -10 },   // 0x39 '9'
+  {   241,   3,   9,  11,    4,   -8 },   // 0x3A ':'
+  {   245,   3,  13,  11,    4,   -8 },   // 0x3B ';'
+  {   250,   7,   9,  11,    2,   -9 },   // 0x3C '<'
+  {   258,   7,   5,  11,    2,   -7 },   // 0x3D '='
+  {   263,   7,   9,  11,    2,   -9 },   // 0x3E '>'
+  {   271,   7,  12,  11,    2,  -11 },   // 0x3F '?'
+  {   282,   9,  14,  11,    1,  -10 },   // 0x40 '@'
+  {   298,   9,  12,  11,    1,  -11 },   // 0x41 'A'
+  {   312,   8,  12,  11,    2,  -11 },   // 0x42 'B'
+  {   324,   9,  12,  11,    1,  -11 },   // 0x43 'C'
+  {   338,   8,  12,  11,    2,  -11 },   // 0x44 'D'
+  {   350,   8,  12,  11,    2,  -11 },   // 0x45 'E'
+  {   362,   8,  12,  11,    2,  -11 },   // 0x46 'F'
+  {   374,   9,  12,  11,    1,  -11 },   // 0x47 'G'
+  {   388,   8,  12,  11,    1,  -11 },   // 0x48 'H'
+  {   400,   7,  12,  11,    2,  -11 },   // 0x49 'I'
+  {   411,   8,  12,  11,    1,  -11 },   // 0x4A 'J'
+  {   423,   8,  12,  11,    2,  -11 },   // 0x4B 'K'
+  {   435,   8,  12,  11,    2,  -11 },   // 0x4C 'L'
+  {   447,   8,  12,  11,    1,  -11 },   // 0x4D 'M'
+  {   459,   8,  12,  11,    1,  -11 },   // 0x4E 'N'
+  {   471,   9,  12,  11,    1,  -11 },   // 0x4F 'O'
+  {   485,   8,  12,  11,    2,  -11 },   // 0x50 'P'
+  {   497,   9,  15,  11,    1,  -11 },   // 0x51 'Q'
+  {   514,   8,  12,  11,    2,  -11 },   // 0x52 'R'
+  {   526,   9,  12,  11,    1,  -11 },   // 0x53 'S'
+  {   540,   9,  12,  11,    1,  -11 },   // 0x54 'T'
+  {   554,   8,  12,  11,    1,  -11 },   // 0x55 'U'
+  {   566,   9,  12,  11,    1,  -11 },   // 0x56 'V'
+  {   580,  11,  12,  11,    0,  -11 },   // 0x57 'W'
+  {   597,   9,  12,  11,    1,  -11 },   // 0x58 'X'
+  {   611,   9,  12,  11,    1,  -11 },   // 0x59 'Y'
+  {   625,   9,  12,  11,    1,  -11 },   // 0x5A 'Z'
+  {   639,   5,  16,  11,    4,  -12 },   // 0x5B '['
+  {   649,   7,  16,  11,    2,  -12 },   // 0x5C '\'
+  {   663,   5,  16,  11,    2,  -12 },   // 0x5D ']'
+  {   673,   7,   7,  11,    2,  -11 },   // 0x5E '^'
+  {   680,   9,   1,  11,    1,    2 },   // 0x5F '_'
+  {   682,   4,   3,  11,    3,  -12 },   // 0x60 '`'
+  {   684,   8,   9,  11,    1,   -8 },   // 0x61 'a'
+  {   693,   8,  13,  11,    2,  -12 },   // 0x62 'b'
+  {   706,   9,   9,  11,    1,   -8 },   // 0x63 'c'
+  {   717,   8,  13,  11,    1,  -12 },   // 0x64 'd'
+  {   730,   9,   9,  11,    1,   -8 },   // 0x65 'e'
+  {   741,   8,  13,  11,    2,  -12 },   // 0x66 'f'
+  {   754,   9,  13,  11,    1,   -8 },   // 0x67 'g'
+  {   769,   7,  13,  11,    2,  -12 },   // 0x68 'h'
+  {   781,   5,  13,  11,    2,  -12 },   // 0x69 'i'
+  {   790,   6,  17,  11,    1,  -12 },   // 0x6A 'j'
+  {   803,   8,  13,  11,    2,  -12 },   // 0x6B 'k'
+  {   816,   9,  13,  11,    1,  -12 },   // 0x6C 'l'
+  {   831,   9,   9,  11,    1,   -8 },   // 0x6D 'm'
+  {   842,   7,   9,  11,    2,   -8 },   // 0x6E 'n'
+  {   850,   9,   9,  11,    1,   -8 },   // 0x6F 'o'
+  {   861,   8,  13,  11,    2,   -8 },   // 0x70 'p'
+  {   874,   8,  13,  11,    1,   -8 },   // 0x71 'q'
+  {   887,   7,   9,  11,    3,   -8 },   // 0x72 'r'
+  {   895,   8,   9,  11,    1,   -8 },   // 0x73 's'
+  {   904,   9,  11,  11,    1,  -10 },   // 0x74 't'
+  {   917,   8,   9,  11,    1,   -8 },   // 0x75 'u'
+  {   926,   9,   9,  11,    1,   -8 },   // 0x76 'v'
+  {   937,  11,   9,  11,    0,   -8 },   // 0x77 'w'
+  {   950,   9,   9,  11,    1,   -8 },   // 0x78 'x'
+  {   961,   9,  13,  11,    1,   -8 },   // 0x79 'y'
+  {   976,   9,   9,  11,    1,   -8 },   // 0x7A 'z'
+  {   987,   7,  16,  11,    2,  -12 },   // 0x7B '{'
+  {  1001,   1,  18,  11,    5,  -12 },   // 0x7C '|'
+  {  1004,   7,  16,  11,    2,  -12 },   // 0x7D '}'
+  {  1018,   8,   3,  11,    1,   -6 } }; // 0x7E '~'
+
+const GFXfont SourceCodePro_Regular9pt7b PROGMEM = {
+  (uint8_t  *)SourceCodePro_Regular9pt7bBitmaps,
+  (GFXglyph *)SourceCodePro_Regular9pt7bGlyphs,
+  0x20, 0x7E, 22 };
+
+// Approx. 1693 bytes
+const uint8_t SourceCodePro_SemiBold9pt7bBitmaps[] PROGMEM = {
+  0x00, 0xDB, 0x64, 0x92, 0x1F, 0xF0, 0xEF, 0xDF, 0xBE, 0x64, 0x48, 0x80,
+  0x12, 0x12, 0x7F, 0x7F, 0x22, 0x26, 0xFF, 0xFF, 0x24, 0x24, 0x64, 0x08,
+  0x08, 0x3E, 0x7F, 0x62, 0x70, 0x3C, 0x0F, 0x03, 0x43, 0xFF, 0x3E, 0x08,
+  0x08, 0x08, 0x38, 0x1F, 0x14, 0xCD, 0x36, 0x7F, 0x0E, 0x00, 0x38, 0x1F,
+  0x14, 0xCD, 0x36, 0x7F, 0x0E, 0x38, 0x3E, 0x1B, 0x0D, 0x87, 0xC1, 0xCF,
+  0xC7, 0xB3, 0xCF, 0x63, 0xBF, 0xEF, 0x10, 0xFF, 0xE4, 0x80, 0x08, 0x73,
+  0x08, 0x61, 0x84, 0x30, 0xC1, 0x06, 0x18, 0x20, 0xC1, 0x83, 0x47, 0x0C,
+  0x61, 0x8C, 0x61, 0x08, 0xC6, 0x33, 0x19, 0x98, 0x10, 0x23, 0x5F, 0xF3,
+  0x87, 0x1B, 0x22, 0x08, 0x08, 0x08, 0xFF, 0xFF, 0x08, 0x08, 0x08, 0x77,
+  0x71, 0x36, 0xC0, 0xFF, 0xF0, 0xFF, 0xF0, 0x06, 0x0C, 0x10, 0x60, 0xC3,
+  0x06, 0x08, 0x30, 0x60, 0x83, 0x06, 0x18, 0x30, 0x60, 0x3C, 0x3F, 0x98,
+  0xDB, 0x6D, 0xDE, 0xCF, 0x07, 0x86, 0x63, 0x3F, 0x8F, 0x00, 0xF8, 0xF8,
+  0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x3C, 0x3F, 0x30,
+  0xC0, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30, 0x7F, 0xFF, 0xE0, 0x3E, 0x7F,
+  0xC3, 0x03, 0x1E, 0x1E, 0x03, 0x03, 0xC3, 0xFF, 0x3E, 0x0E, 0x07, 0x07,
+  0x86, 0xC6, 0x66, 0x33, 0xFF, 0xFF, 0x06, 0x03, 0x01, 0x80, 0x7F, 0x7F,
+  0x60, 0x7E, 0x7F, 0x63, 0x03, 0x03, 0xC3, 0xFF, 0x3C, 0x1E, 0x1F, 0x98,
+  0x6C, 0x0D, 0xE7, 0xFB, 0x8F, 0x83, 0x63, 0xBF, 0x87, 0x80, 0xFF, 0xFF,
+  0xC0, 0xC0, 0xC0, 0x40, 0x60, 0x20, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x3E,
+  0x3F, 0x98, 0xCC, 0x63, 0xE1, 0xF1, 0x9D, 0x83, 0xC3, 0xBF, 0x8F, 0x80,
+  0x3C, 0x3F, 0x30, 0xD8, 0x2C, 0x3B, 0xFC, 0xE4, 0x06, 0x47, 0x7F, 0x0F,
+  0x00, 0xFF, 0xF0, 0x3F, 0xFC, 0x77, 0x77, 0x00, 0x07, 0x77, 0x13, 0x6C,
+  0x02, 0x0C, 0x31, 0xC7, 0x18, 0x30, 0x38, 0x38, 0x18, 0x18, 0x10, 0xFF,
+  0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x81, 0x83, 0x81, 0xC1, 0xC1, 0xC3, 0x8E,
+  0x39, 0xC3, 0x04, 0x00, 0x79, 0xF9, 0x38, 0x30, 0xC3, 0x0C, 0x18, 0x00,
+  0x60, 0xE1, 0x80, 0x1E, 0x1F, 0x98, 0x78, 0x3C, 0x0C, 0x3E, 0x3F, 0x33,
+  0x99, 0xCF, 0xF3, 0xB8, 0x06, 0x11, 0xF8, 0x78, 0x0E, 0x03, 0x81, 0xA0,
+  0x6C, 0x1B, 0x0C, 0xC3, 0x18, 0xFE, 0x7F, 0x98, 0x76, 0x0F, 0x83, 0xFC,
+  0xFE, 0xC6, 0xC6, 0xFC, 0xFE, 0xC7, 0xC3, 0xC3, 0xC7, 0xFE, 0xFC, 0x1E,
+  0x1F, 0xDC, 0x5C, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xE0, 0x38, 0xCF, 0xE3,
+  0xE0, 0xFC, 0x7F, 0x31, 0xD8, 0x7C, 0x1E, 0x0F, 0x07, 0x83, 0xC3, 0xE3,
+  0xBF, 0x9F, 0x80, 0xFE, 0xFE, 0xC0, 0xC0, 0xC0, 0xFE, 0xFE, 0xC0, 0xC0,
+  0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xFE, 0xFE, 0xC0, 0xC0,
+  0xC0, 0xC0, 0xC0, 0x1E, 0x3F, 0x9C, 0x7C, 0x0C, 0x06, 0x3F, 0x1F, 0x83,
+  0xE1, 0xB0, 0xDF, 0xE3, 0xC0, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3F, 0xFF,
+  0xFF, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x70, 0xFF, 0xFC, 0xC1, 0x83, 0x06,
+  0x0C, 0x18, 0x30, 0x63, 0xFF, 0xF0, 0x7F, 0x7F, 0x03, 0x03, 0x03, 0x03,
+  0x03, 0x03, 0x03, 0x47, 0xFE, 0x3C, 0xE3, 0xB8, 0xCE, 0x63, 0xB0, 0xFC,
+  0x3F, 0x0F, 0xE3, 0x98, 0xE7, 0x38, 0xCE, 0x3B, 0x87, 0xC0, 0xC0, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xE3, 0xE3, 0xE3,
+  0xE7, 0xF5, 0xD5, 0xD5, 0xD9, 0xC9, 0xC1, 0xC1, 0xC1, 0xE3, 0xE3, 0xF3,
+  0xD3, 0xDB, 0xDB, 0xCB, 0xCD, 0xC5, 0xC7, 0xC3, 0xC3, 0x3C, 0x3F, 0xB8,
+  0xD8, 0x7C, 0x1E, 0x0F, 0x07, 0x83, 0xC3, 0xB1, 0x9F, 0xC7, 0x80, 0xFC,
+  0xFE, 0xC7, 0xC3, 0xC3, 0xC7, 0xFE, 0xFC, 0xC0, 0xC0, 0xC0, 0xC0, 0x3C,
+  0x3F, 0xB8, 0xD8, 0x7C, 0x1E, 0x0F, 0x07, 0x83, 0xC3, 0xF1, 0x9F, 0xC7,
+  0xC0, 0xC0, 0x7C, 0x1E, 0xFC, 0xFE, 0xC7, 0xC3, 0xC7, 0xFE, 0xFC, 0xCC,
+  0xCC, 0xC6, 0xC6, 0xC3, 0x3E, 0x3F, 0x98, 0x4C, 0x07, 0x01, 0xE0, 0x7C,
+  0x07, 0x01, 0xA1, 0xFF, 0xC7, 0xC0, 0xFF, 0xFF, 0xC6, 0x03, 0x01, 0x80,
+  0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xC3, 0xE1, 0xF0, 0xF8,
+  0x7C, 0x3E, 0x1F, 0x0F, 0x86, 0xE3, 0x31, 0x9F, 0xC7, 0xC0, 0xE0, 0xD8,
+  0x36, 0x1C, 0xC6, 0x31, 0x8C, 0x63, 0x30, 0x6C, 0x1B, 0x06, 0x80, 0xE0,
+  0x38, 0xC0, 0x78, 0x0B, 0x03, 0x32, 0x66, 0xEC, 0xD5, 0x9A, 0xB3, 0x56,
+  0x7B, 0xCF, 0x70, 0xC6, 0x18, 0xC0, 0xC3, 0xB1, 0x99, 0xC6, 0xC3, 0x40,
+  0xE0, 0x70, 0x7C, 0x36, 0x33, 0xB8, 0xD8, 0x30, 0xE0, 0xD8, 0x73, 0x18,
+  0xC6, 0x1B, 0x06, 0xC0, 0xE0, 0x38, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x7F,
+  0xBF, 0xC0, 0xC0, 0xC0, 0xE0, 0x60, 0x60, 0x60, 0x30, 0x30, 0x3F, 0xFF,
+  0xF0, 0xFF, 0xE1, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, 0x43, 0xFF, 0xC1,
+  0x83, 0x03, 0x06, 0x04, 0x0C, 0x18, 0x10, 0x30, 0x60, 0x60, 0xC0, 0x81,
+  0x83, 0xFF, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8F, 0xFF, 0x30,
+  0x70, 0xA3, 0x64, 0xD8, 0xB1, 0x80, 0xFF, 0xFF, 0xC0, 0xC6, 0x30, 0x3E,
+  0x7F, 0x43, 0x1F, 0x7F, 0xE3, 0xC3, 0x7F, 0x79, 0xE0, 0x70, 0x38, 0x1C,
+  0x0F, 0xE7, 0xFB, 0x8F, 0xC3, 0xE1, 0xF0, 0xF8, 0xDF, 0xED, 0xE0, 0x1E,
+  0x3F, 0xDC, 0x5C, 0x0C, 0x07, 0x01, 0xC4, 0xFF, 0x1E, 0x00, 0x03, 0x03,
+  0x03, 0x03, 0x3F, 0x7F, 0xE3, 0xC3, 0xC3, 0xC3, 0xE3, 0x7F, 0x39, 0x1E,
+  0x3F, 0x98, 0x7F, 0xFF, 0xFE, 0x01, 0x84, 0xFE, 0x1E, 0x00, 0x0F, 0x1F,
+  0x38, 0x30, 0xFF, 0xFF, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F,
+  0xBF, 0xD8, 0x8C, 0x67, 0xE3, 0xE1, 0x00, 0xFE, 0x7F, 0xE0, 0xFF, 0xEF,
+  0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0C, 0xE7, 0xFB, 0xCD, 0xC7, 0xE3, 0xF1,
+  0xF8, 0xFC, 0x7E, 0x38, 0x18, 0x71, 0x80, 0x03, 0xEF, 0x86, 0x18, 0x61,
+  0x86, 0x18, 0x60, 0x0C, 0x1C, 0x30, 0x00, 0x0F, 0x9F, 0x06, 0x0C, 0x18,
+  0x30, 0x60, 0xC1, 0x83, 0x7E, 0xF8, 0xC0, 0xC0, 0xC0, 0xC0, 0xC7, 0xCE,
+  0xDC, 0xF8, 0xF8, 0xEC, 0xCE, 0xC6, 0xC3, 0xF8, 0x7C, 0x06, 0x03, 0x01,
+  0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0xE0, 0xF8, 0xFB, 0x7F,
+  0xF3, 0x79, 0x3C, 0x9E, 0x4F, 0x27, 0x93, 0xC9, 0x80, 0xCE, 0x7F, 0xBC,
+  0xDC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0x80, 0x3E, 0x3F, 0xB8, 0xD8,
+  0x3C, 0x1E, 0x0F, 0x8C, 0xFE, 0x3E, 0x00, 0xDE, 0x7F, 0xB8, 0xFC, 0x3E,
+  0x1F, 0x0F, 0x8D, 0xFE, 0xFE, 0x70, 0x38, 0x1C, 0x00, 0x3D, 0x7F, 0xE3,
+  0xC3, 0xC3, 0xC3, 0xE3, 0x7F, 0x3B, 0x03, 0x03, 0x03, 0xCF, 0xDF, 0xF0,
+  0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x3E, 0x3F, 0x98, 0x4E, 0x03, 0xE0,
+  0x39, 0x07, 0xFE, 0x3E, 0x00, 0x10, 0x08, 0x3F, 0xFF, 0xF3, 0x01, 0x80,
+  0xC0, 0x70, 0x18, 0x0F, 0xC3, 0xE0, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
+  0xE7, 0x7F, 0x79, 0xC1, 0xE0, 0x98, 0xCC, 0x67, 0x61, 0xB0, 0xD8, 0x38,
+  0x1C, 0x00, 0xC4, 0x79, 0xC9, 0xBB, 0x35, 0x66, 0xAC, 0xD5, 0x9E, 0xB1,
+  0xDC, 0x31, 0x80, 0xE3, 0xB1, 0x8D, 0x83, 0x81, 0xC1, 0xE0, 0xD8, 0xC6,
+  0xC3, 0x80, 0xC1, 0xE0, 0x98, 0xCC, 0x63, 0x21, 0xB0, 0x50, 0x38, 0x1C,
+  0x0C, 0x3E, 0x1C, 0x00, 0x7F, 0xBF, 0x81, 0x81, 0xC1, 0xC1, 0xC1, 0xC1,
+  0xFF, 0xFF, 0x80, 0x1E, 0x3C, 0xC1, 0x81, 0x02, 0x0C, 0x78, 0xF0, 0x60,
+  0x40, 0x83, 0x06, 0x07, 0x8F, 0xFF, 0xFF, 0xC0, 0xF1, 0xE0, 0x40, 0x81,
+  0x02, 0x06, 0x0F, 0x1E, 0x30, 0x40, 0x81, 0x02, 0x3C, 0x78, 0x79, 0xBF,
+  0xB3, 0x80 };
+
+const GFXglyph SourceCodePro_SemiBold9pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,  11,    0,    0 },   // 0x20 ' '
+  {     1,   3,  12,  11,    4,  -11 },   // 0x21 '!'
+  {     6,   7,   6,  11,    2,  -11 },   // 0x22 '"'
+  {    12,   8,  11,  11,    1,  -10 },   // 0x23 '#'
+  {    23,   8,  15,  11,    1,  -12 },   // 0x24 '$'
+  {    38,  10,  12,  11,    0,  -11 },   // 0x25 '%'
+  {    53,   9,  12,  11,    1,  -11 },   // 0x26 '&'
+  {    67,   3,   6,  11,    4,  -11 },   // 0x27 '''
+  {    70,   6,  16,  11,    3,  -12 },   // 0x28 '('
+  {    82,   5,  16,  11,    2,  -12 },   // 0x29 ')'
+  {    92,   7,   8,  11,    2,  -12 },   // 0x2A '*'
+  {    99,   8,   8,  11,    1,   -9 },   // 0x2B '+'
+  {   107,   4,   7,  11,    3,   -2 },   // 0x2C ','
+  {   111,   6,   2,  11,    2,   -5 },   // 0x2D '-'
+  {   113,   3,   4,  11,    4,   -3 },   // 0x2E '.'
+  {   115,   7,  16,  11,    2,  -12 },   // 0x2F '/'
+  {   129,   9,  11,  11,    1,  -10 },   // 0x30 '0'
+  {   142,   8,  11,  11,    2,  -10 },   // 0x31 '1'
+  {   153,   9,  11,  11,    1,  -10 },   // 0x32 '2'
+  {   166,   8,  11,  11,    1,  -10 },   // 0x33 '3'
+  {   177,   9,  11,  11,    1,  -10 },   // 0x34 '4'
+  {   190,   8,  11,  11,    1,  -10 },   // 0x35 '5'
+  {   201,   9,  11,  11,    1,  -10 },   // 0x36 '6'
+  {   214,   9,  11,  11,    1,  -10 },   // 0x37 '7'
+  {   227,   9,  11,  11,    1,  -10 },   // 0x38 '8'
+  {   240,   9,  11,  11,    1,  -10 },   // 0x39 '9'
+  {   253,   3,  10,  11,    4,   -9 },   // 0x3A ':'
+  {   257,   4,  14,  11,    3,   -9 },   // 0x3B ';'
+  {   264,   7,  12,  11,    2,  -11 },   // 0x3C '<'
+  {   275,   8,   6,  11,    1,   -8 },   // 0x3D '='
+  {   281,   7,  12,  11,    2,  -11 },   // 0x3E '>'
+  {   292,   7,  12,  11,    2,  -11 },   // 0x3F '?'
+  {   303,   9,  15,  11,    1,  -11 },   // 0x40 '@'
+  {   320,  10,  12,  11,    0,  -11 },   // 0x41 'A'
+  {   335,   8,  12,  11,    2,  -11 },   // 0x42 'B'
+  {   347,   9,  12,  11,    1,  -11 },   // 0x43 'C'
+  {   361,   9,  12,  11,    1,  -11 },   // 0x44 'D'
+  {   375,   8,  12,  11,    2,  -11 },   // 0x45 'E'
+  {   387,   8,  12,  11,    2,  -11 },   // 0x46 'F'
+  {   399,   9,  12,  11,    1,  -11 },   // 0x47 'G'
+  {   413,   9,  12,  11,    1,  -11 },   // 0x48 'H'
+  {   427,   7,  12,  11,    2,  -11 },   // 0x49 'I'
+  {   438,   8,  12,  11,    1,  -11 },   // 0x4A 'J'
+  {   450,  10,  12,  11,    1,  -11 },   // 0x4B 'K'
+  {   465,   8,  12,  11,    2,  -11 },   // 0x4C 'L'
+  {   477,   8,  12,  11,    1,  -11 },   // 0x4D 'M'
+  {   489,   8,  12,  11,    1,  -11 },   // 0x4E 'N'
+  {   501,   9,  12,  11,    1,  -11 },   // 0x4F 'O'
+  {   515,   8,  12,  11,    2,  -11 },   // 0x50 'P'
+  {   527,   9,  15,  11,    1,  -11 },   // 0x51 'Q'
+  {   544,   8,  12,  11,    2,  -11 },   // 0x52 'R'
+  {   556,   9,  12,  11,    1,  -11 },   // 0x53 'S'
+  {   570,   9,  12,  11,    1,  -11 },   // 0x54 'T'
+  {   584,   9,  12,  11,    1,  -11 },   // 0x55 'U'
+  {   598,  10,  12,  11,    0,  -11 },   // 0x56 'V'
+  {   613,  11,  12,  11,    0,  -11 },   // 0x57 'W'
+  {   630,   9,  12,  11,    1,  -11 },   // 0x58 'X'
+  {   644,  10,  12,  11,    0,  -11 },   // 0x59 'Y'
+  {   659,   9,  12,  11,    1,  -11 },   // 0x5A 'Z'
+  {   673,   5,  16,  11,    4,  -12 },   // 0x5B '['
+  {   683,   7,  16,  11,    2,  -12 },   // 0x5C '\'
+  {   697,   5,  16,  11,    2,  -12 },   // 0x5D ']'
+  {   707,   7,   7,  11,    2,  -11 },   // 0x5E '^'
+  {   714,   9,   2,  11,    1,    2 },   // 0x5F '_'
+  {   717,   4,   3,  11,    3,  -12 },   // 0x60 '`'
+  {   719,   8,   9,  11,    1,   -8 },   // 0x61 'a'
+  {   728,   9,  13,  11,    1,  -12 },   // 0x62 'b'
+  {   743,   9,   9,  11,    1,   -8 },   // 0x63 'c'
+  {   754,   8,  13,  11,    1,  -12 },   // 0x64 'd'
+  {   767,   9,   9,  11,    1,   -8 },   // 0x65 'e'
+  {   778,   8,  13,  11,    2,  -12 },   // 0x66 'f'
+  {   791,   9,  12,  11,    1,   -8 },   // 0x67 'g'
+  {   805,   9,  13,  11,    1,  -12 },   // 0x68 'h'
+  {   820,   6,  14,  11,    2,  -13 },   // 0x69 'i'
+  {   831,   7,  17,  11,    1,  -13 },   // 0x6A 'j'
+  {   846,   8,  13,  11,    2,  -12 },   // 0x6B 'k'
+  {   859,   9,  13,  11,    1,  -12 },   // 0x6C 'l'
+  {   874,   9,   9,  11,    1,   -8 },   // 0x6D 'm'
+  {   885,   9,   9,  11,    1,   -8 },   // 0x6E 'n'
+  {   896,   9,   9,  11,    1,   -8 },   // 0x6F 'o'
+  {   907,   9,  12,  11,    1,   -8 },   // 0x70 'p'
+  {   921,   8,  12,  11,    1,   -8 },   // 0x71 'q'
+  {   933,   8,   9,  11,    2,   -8 },   // 0x72 'r'
+  {   942,   9,   9,  11,    1,   -8 },   // 0x73 's'
+  {   953,   9,  11,  11,    1,  -10 },   // 0x74 't'
+  {   966,   8,   9,  11,    1,   -8 },   // 0x75 'u'
+  {   975,   9,   9,  11,    1,   -8 },   // 0x76 'v'
+  {   986,  11,   9,  11,    0,   -8 },   // 0x77 'w'
+  {   999,   9,   9,  11,    1,   -8 },   // 0x78 'x'
+  {  1010,   9,  12,  11,    1,   -8 },   // 0x79 'y'
+  {  1024,   9,   9,  11,    1,   -8 },   // 0x7A 'z'
+  {  1035,   7,  16,  11,    2,  -12 },   // 0x7B '{'
+  {  1049,   1,  18,  11,    5,  -12 },   // 0x7C '|'
+  {  1052,   7,  16,  11,    2,  -12 },   // 0x7D '}'
+  {  1066,   9,   3,  11,    1,   -6 } }; // 0x7E '~'
+
+const GFXfont SourceCodePro_SemiBold9pt7b PROGMEM = {
+  (uint8_t  *)SourceCodePro_SemiBold9pt7bBitmaps,
+  (GFXglyph *)SourceCodePro_SemiBold9pt7bGlyphs,
+  0x20, 0x7E, 22 };
+
+// Approx. 1742 bytes
+const uint8_t Shree7149pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xEA, 0x80, 0xC0, 0x99, 0x99, 0x04, 0x20, 0x21, 0x01, 0x10,
+  0x77, 0xE0, 0x84, 0x04, 0x40, 0x42, 0x1F, 0xFE, 0x11, 0x01, 0x08, 0x08,
+  0x40, 0x04, 0x07, 0x82, 0x59, 0x13, 0x44, 0x51, 0x06, 0x40, 0xF0, 0x07,
+  0x01, 0x30, 0x45, 0x11, 0x44, 0x59, 0x21, 0xF0, 0x10, 0x04, 0x00, 0x00,
+  0x09, 0xE0, 0x44, 0x42, 0x20, 0x90, 0x82, 0x41, 0x12, 0x03, 0x90, 0x00,
+  0x80, 0x02, 0xF0, 0x12, 0x20, 0x90, 0x44, 0x42, 0x10, 0x88, 0x81, 0xC0,
+  0x00, 0x03, 0xC0, 0x84, 0x11, 0x01, 0x20, 0x28, 0x06, 0x01, 0x20, 0x42,
+  0x50, 0x2A, 0x05, 0x20, 0x44, 0x14, 0x7C, 0x40, 0xEA, 0x12, 0x44, 0x44,
+  0x88, 0x88, 0x84, 0x44, 0x21, 0x04, 0x22, 0x21, 0x11, 0x11, 0x12, 0x22,
+  0x40, 0x18, 0x18, 0xF3, 0x24, 0x24, 0x53, 0x18, 0x18, 0x08, 0x04, 0x02,
+  0x01, 0x0F, 0xF8, 0x40, 0x20, 0x10, 0x08, 0x00, 0xD4, 0x7E, 0xC0, 0x01,
+  0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40,
+  0x40, 0x3E, 0x20, 0x90, 0x50, 0x28, 0x14, 0x06, 0x03, 0x01, 0x81, 0x40,
+  0x90, 0x48, 0x43, 0xC0, 0x11, 0xF1, 0x11, 0x11, 0x11, 0x11, 0x10, 0x3E,
+  0x41, 0x41, 0x01, 0x01, 0x01, 0x02, 0x0C, 0x30, 0x40, 0x40, 0x80, 0xFF,
+  0x7E, 0x20, 0xA0, 0x40, 0x20, 0x10, 0x10, 0x78, 0x02, 0x01, 0x40, 0x60,
+  0x48, 0x23, 0xE0, 0x06, 0x03, 0x02, 0x82, 0x41, 0x21, 0x11, 0x08, 0x84,
+  0x82, 0x7F, 0xC0, 0x80, 0x40, 0x20, 0x7E, 0x20, 0x10, 0x08, 0x04, 0x03,
+  0xF1, 0x04, 0x02, 0x00, 0x80, 0x60, 0x48, 0x23, 0xE0, 0x3E, 0x30, 0x90,
+  0x30, 0x08, 0x05, 0xF3, 0x05, 0x82, 0x80, 0xC0, 0x50, 0x48, 0x23, 0xE0,
+  0x7F, 0x02, 0x02, 0x04, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10, 0x20, 0x20,
+  0x20, 0x3E, 0x20, 0x90, 0x48, 0x24, 0x11, 0xB0, 0xB8, 0x82, 0x81, 0x40,
+  0x60, 0x48, 0x23, 0xE0, 0x7E, 0x21, 0xA0, 0x50, 0x28, 0x14, 0x0D, 0x0A,
+  0x79, 0x01, 0x00, 0xA0, 0x48, 0x43, 0xC0, 0xF0, 0x00, 0x30, 0xF0, 0x00,
+  0x35, 0x00, 0x02, 0x18, 0xC2, 0x0C, 0x04, 0x06, 0x03, 0x00, 0xFF, 0x00,
+  0x00, 0x00, 0xFF, 0x00, 0x80, 0xC0, 0x60, 0x20, 0x43, 0x18, 0x41, 0x00,
+  0x18, 0x66, 0x41, 0x81, 0x01, 0x01, 0x02, 0x04, 0x08, 0x08, 0x00, 0x00,
+  0x00, 0x08, 0x07, 0xF8, 0x06, 0x01, 0x82, 0x00, 0x11, 0x00, 0x02, 0x40,
+  0x00, 0xA0, 0xFA, 0x18, 0x41, 0x86, 0x10, 0x21, 0x84, 0x08, 0x61, 0x02,
+  0x18, 0x40, 0x86, 0x08, 0x62, 0x41, 0x6C, 0x90, 0x20, 0xC2, 0x00, 0x00,
+  0x60, 0x08, 0x07, 0xFC, 0x00, 0x06, 0x00, 0x60, 0x09, 0x00, 0x90, 0x09,
+  0x01, 0x08, 0x10, 0x82, 0x04, 0x3F, 0xC2, 0x04, 0x40, 0x24, 0x02, 0x80,
+  0x10, 0xFF, 0xA0, 0x28, 0x06, 0x02, 0x80, 0xA0, 0x6F, 0xFA, 0x01, 0x80,
+  0x60, 0x18, 0x06, 0x02, 0xFF, 0x00, 0x06, 0x07, 0x31, 0x81, 0x20, 0x18,
+  0x01, 0x00, 0x20, 0x04, 0x00, 0x80, 0x10, 0x02, 0x00, 0xA0, 0x12, 0x04,
+  0x3F, 0x00, 0xFF, 0x10, 0x12, 0x01, 0x40, 0x28, 0x03, 0x00, 0x60, 0x0C,
+  0x01, 0x80, 0x50, 0x0A, 0x01, 0x40, 0x4F, 0xF0, 0xFF, 0xC0, 0x20, 0x10,
+  0x08, 0x04, 0x03, 0xFD, 0x00, 0x80, 0x40, 0x20, 0x10, 0x0F, 0xF8, 0xFF,
+  0xC0, 0x20, 0x10, 0x08, 0x04, 0x03, 0xFD, 0x00, 0x80, 0x40, 0x20, 0x10,
+  0x08, 0x00, 0x06, 0x03, 0x31, 0x81, 0x20, 0x18, 0x01, 0x00, 0x20, 0x04,
+  0x1F, 0x80, 0x30, 0x06, 0x00, 0xA0, 0x32, 0x06, 0x3F, 0x40, 0x80, 0x60,
+  0x18, 0x06, 0x01, 0x80, 0x60, 0x1F, 0xFE, 0x01, 0x80, 0x60, 0x18, 0x06,
+  0x01, 0x80, 0x40, 0xFF, 0xF8, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x81,
+  0x03, 0x06, 0x0A, 0x13, 0xC0, 0x80, 0xE0, 0x48, 0x22, 0x10, 0x88, 0x26,
+  0x0A, 0x83, 0x10, 0x82, 0x20, 0x48, 0x1A, 0x02, 0x80, 0x40, 0x80, 0x80,
+  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFF, 0xC0,
+  0x1D, 0x00, 0xE8, 0x0B, 0x40, 0x59, 0x02, 0xC8, 0x26, 0x21, 0x31, 0x11,
+  0x88, 0x8C, 0x24, 0x61, 0x43, 0x06, 0x18, 0x20, 0x80, 0xC0, 0x34, 0x06,
+  0x80, 0xC8, 0x18, 0x83, 0x10, 0x61, 0x0C, 0x11, 0x82, 0x30, 0x26, 0x02,
+  0xC0, 0x58, 0x06, 0x0E, 0x03, 0x18, 0x40, 0x44, 0x02, 0x80, 0x28, 0x02,
+  0x80, 0x28, 0x01, 0x80, 0x28, 0x02, 0x80, 0x24, 0x04, 0x20, 0xC1, 0xF0,
+  0xFF, 0x20, 0x28, 0x0A, 0x01, 0x80, 0xA0, 0x2F, 0xF2, 0x00, 0x80, 0x20,
+  0x08, 0x02, 0x00, 0x80, 0x00, 0x06, 0x07, 0x31, 0x81, 0x20, 0x28, 0x03,
+  0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xA0, 0xB2, 0x0C, 0x37,
+  0xC1, 0x08, 0xFF, 0xA0, 0x18, 0x06, 0x01, 0x80, 0x60, 0x2F, 0xF2, 0x02,
+  0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x40, 0x18, 0x33, 0xA0, 0x50, 0x18,
+  0x04, 0x01, 0x80, 0x3C, 0x01, 0x00, 0x60, 0x30, 0x1C, 0x13, 0xF0, 0xFF,
+  0xC1, 0x00, 0x40, 0x10, 0x04, 0x01, 0x00, 0x40, 0x10, 0x04, 0x01, 0x00,
+  0x40, 0x10, 0x04, 0x00, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18,
+  0x06, 0x01, 0x80, 0x60, 0x14, 0x05, 0x02, 0x3F, 0x00, 0xC0, 0x48, 0x09,
+  0x01, 0x10, 0x42, 0x08, 0x41, 0x04, 0x40, 0x88, 0x11, 0x01, 0x40, 0x28,
+  0x05, 0x00, 0x40, 0x81, 0x81, 0x41, 0x81, 0x41, 0x41, 0x41, 0x42, 0x22,
+  0x42, 0x22, 0x22, 0x22, 0x24, 0x24, 0x24, 0x14, 0x24, 0x14, 0x14, 0x14,
+  0x18, 0x18, 0x18, 0x08, 0x18, 0x40, 0xC8, 0x22, 0x10, 0x44, 0x0A, 0x03,
+  0x00, 0xC0, 0x28, 0x12, 0x0C, 0x42, 0x09, 0x02, 0x40, 0x40, 0x40, 0x6C,
+  0x08, 0x82, 0x08, 0xC1, 0x90, 0x14, 0x01, 0x80, 0x20, 0x04, 0x00, 0x80,
+  0x10, 0x02, 0x00, 0x40, 0x7F, 0xC0, 0x20, 0x18, 0x04, 0x02, 0x01, 0x00,
+  0xC0, 0x20, 0x10, 0x08, 0x06, 0x01, 0x00, 0xFF, 0xC0, 0xF8, 0x88, 0x88,
+  0x88, 0x88, 0x88, 0x88, 0x8F, 0x01, 0x04, 0x10, 0x20, 0x81, 0x04, 0x10,
+  0x20, 0x82, 0x04, 0xF1, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1F, 0x08,
+  0x0A, 0x09, 0x04, 0x44, 0x12, 0x08, 0xFF, 0x80, 0x49, 0x00, 0x38, 0xC6,
+  0x82, 0x02, 0x06, 0x7A, 0x82, 0x82, 0x82, 0x7F, 0x80, 0x40, 0x20, 0x13,
+  0x8A, 0x26, 0x0B, 0x03, 0x01, 0x80, 0xC0, 0x70, 0x58, 0x2B, 0xE0, 0x1C,
+  0x62, 0xC1, 0x80, 0x80, 0x80, 0x80, 0x81, 0x41, 0x3E, 0x01, 0x01, 0x01,
+  0x3D, 0x43, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x43, 0x3D, 0x3C, 0x42,
+  0x81, 0x81, 0xFF, 0x80, 0x80, 0x81, 0x41, 0x3E, 0x32, 0x22, 0x72, 0x22,
+  0x22, 0x22, 0x20, 0x3D, 0x43, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x43,
+  0x3D, 0x81, 0x81, 0x7E, 0x80, 0x80, 0x80, 0x9C, 0xA2, 0xC1, 0x81, 0x81,
+  0x81, 0x81, 0x81, 0x81, 0x81, 0x9F, 0xF8, 0x20, 0x12, 0x49, 0x24, 0x92,
+  0x49, 0xC0, 0x80, 0x80, 0x80, 0x83, 0x84, 0x88, 0x90, 0xB0, 0xC8, 0x84,
+  0x84, 0x82, 0x81, 0xFF, 0xF8, 0x98, 0x65, 0x3C, 0xF0, 0x83, 0x04, 0x18,
+  0x20, 0xC1, 0x06, 0x08, 0x30, 0x41, 0x82, 0x0C, 0x10, 0x40, 0x9C, 0xA2,
+  0xC1, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x3C, 0x21, 0xA0, 0x50,
+  0x18, 0x0C, 0x06, 0x03, 0x02, 0x41, 0x1F, 0x00, 0x9C, 0x51, 0xB0, 0x58,
+  0x18, 0x0C, 0x06, 0x03, 0x82, 0xA1, 0x4B, 0x22, 0x10, 0x08, 0x04, 0x00,
+  0x3D, 0x43, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x43, 0x25, 0x19, 0x01,
+  0x01, 0x01, 0x9D, 0x31, 0x88, 0x42, 0x10, 0x84, 0x00, 0x79, 0x0A, 0x0C,
+  0x06, 0x03, 0x80, 0x81, 0x82, 0xF8, 0x44, 0xF4, 0x44, 0x44, 0x44, 0x43,
+  0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x83, 0x43, 0x7D, 0x81, 0x41,
+  0x41, 0x42, 0x22, 0x24, 0x24, 0x14, 0x18, 0x08, 0x82, 0x0C, 0x10, 0x51,
+  0x44, 0x8A, 0x24, 0x51, 0x12, 0x90, 0xA2, 0x85, 0x14, 0x18, 0xC0, 0x82,
+  0x00, 0x41, 0x21, 0x08, 0x82, 0x81, 0x80, 0xC0, 0x50, 0x44, 0x42, 0x20,
+  0x80, 0x80, 0x41, 0x41, 0x42, 0x22, 0x22, 0x24, 0x14, 0x18, 0x08, 0x08,
+  0x10, 0x30, 0x40, 0x7E, 0x02, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40,
+  0xFF, 0x08, 0x42, 0x08, 0x20, 0x82, 0x08, 0xC0, 0x82, 0x08, 0x20, 0x82,
+  0x04, 0x18, 0x10, 0xFF, 0xFF, 0x80, 0x40, 0x82, 0x04, 0x10, 0x41, 0x04,
+  0x0C, 0x41, 0x04, 0x10, 0x41, 0x08, 0x62, 0x00, 0x70, 0x0F };
+
+const GFXglyph Shree7149pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   7,    0,    0 },   // 0x20 ' '
+  {     1,   2,  13,   4,    1,  -12 },   // 0x21 '!'
+  {     5,   4,   4,   6,    1,  -13 },   // 0x22 '"'
+  {     7,  13,  11,  15,    1,  -10 },   // 0x23 '#'
+  {    25,  10,  17,  13,    1,  -14 },   // 0x24 '$'
+  {    47,  14,  14,  16,    1,  -13 },   // 0x25 '%'
+  {    72,  11,  14,  11,    0,  -13 },   // 0x26 '&'
+  {    92,   2,   4,   4,    1,  -13 },   // 0x27 '''
+  {    93,   4,  16,   6,    1,  -13 },   // 0x28 '('
+  {   101,   4,  16,   6,    1,  -13 },   // 0x29 ')'
+  {   109,   8,   8,  10,    1,  -13 },   // 0x2A '*'
+  {   117,   9,   9,  11,    1,   -8 },   // 0x2B '+'
+  {   128,   2,   4,   4,    1,    0 },   // 0x2C ','
+  {   129,   8,   1,  10,    1,   -4 },   // 0x2D '-'
+  {   130,   2,   1,   4,    1,    0 },   // 0x2E '.'
+  {   131,   8,  14,  11,    1,  -12 },   // 0x2F '/'
+  {   145,   9,  13,  11,    1,  -12 },   // 0x30 '0'
+  {   160,   4,  13,  11,    3,  -12 },   // 0x31 '1'
+  {   167,   8,  13,  11,    1,  -12 },   // 0x32 '2'
+  {   180,   9,  13,  11,    1,  -12 },   // 0x33 '3'
+  {   195,   9,  13,  11,    1,  -12 },   // 0x34 '4'
+  {   210,   9,  13,  11,    1,  -12 },   // 0x35 '5'
+  {   225,   9,  13,  11,    1,  -12 },   // 0x36 '6'
+  {   240,   8,  13,  11,    1,  -12 },   // 0x37 '7'
+  {   253,   9,  13,  11,    1,  -12 },   // 0x38 '8'
+  {   268,   9,  13,  11,    1,  -12 },   // 0x39 '9'
+  {   283,   2,  10,   4,    1,   -9 },   // 0x3A ':'
+  {   286,   2,  13,   4,    1,   -9 },   // 0x3B ';'
+  {   290,   7,   9,  10,    1,   -8 },   // 0x3C '<'
+  {   298,   8,   5,  10,    1,   -6 },   // 0x3D '='
+  {   303,   7,  10,  10,    1,   -9 },   // 0x3E '>'
+  {   312,   8,  14,  11,    1,  -13 },   // 0x3F '?'
+  {   326,  18,  17,  20,    1,  -13 },   // 0x40 '@'
+  {   365,  12,  13,  12,    0,  -12 },   // 0x41 'A'
+  {   385,  10,  13,  12,    1,  -12 },   // 0x42 'B'
+  {   402,  11,  14,  12,    1,  -13 },   // 0x43 'C'
+  {   422,  11,  13,  12,    1,  -12 },   // 0x44 'D'
+  {   440,   9,  13,  10,    1,  -12 },   // 0x45 'E'
+  {   455,   9,  13,  10,    1,  -12 },   // 0x46 'F'
+  {   470,  11,  14,  13,    1,  -13 },   // 0x47 'G'
+  {   490,  10,  13,  13,    1,  -12 },   // 0x48 'H'
+  {   507,   1,  13,   4,    1,  -12 },   // 0x49 'I'
+  {   509,   7,  13,   9,    0,  -12 },   // 0x4A 'J'
+  {   521,  10,  13,  12,    1,  -12 },   // 0x4B 'K'
+  {   538,   8,  13,  10,    1,  -12 },   // 0x4C 'L'
+  {   551,  13,  13,  15,    1,  -12 },   // 0x4D 'M'
+  {   573,  11,  13,  13,    1,  -12 },   // 0x4E 'N'
+  {   591,  12,  14,  13,    1,  -13 },   // 0x4F 'O'
+  {   612,  10,  13,  11,    1,  -12 },   // 0x50 'P'
+  {   629,  11,  15,  13,    1,  -13 },   // 0x51 'Q'
+  {   650,  10,  13,  12,    1,  -12 },   // 0x52 'R'
+  {   667,   9,  14,  11,    1,  -13 },   // 0x53 'S'
+  {   683,  10,  13,  10,    0,  -12 },   // 0x54 'T'
+  {   700,  10,  13,  12,    1,  -12 },   // 0x55 'U'
+  {   717,  11,  13,  11,    0,  -12 },   // 0x56 'V'
+  {   735,  16,  13,  17,    0,  -12 },   // 0x57 'W'
+  {   761,  10,  13,  11,    0,  -12 },   // 0x58 'X'
+  {   778,  11,  13,  11,    0,  -12 },   // 0x59 'Y'
+  {   796,  10,  13,  11,    0,  -12 },   // 0x5A 'Z'
+  {   813,   4,  16,   6,    1,  -13 },   // 0x5B '['
+  {   821,   6,  13,   8,    1,  -11 },   // 0x5C '\'
+  {   831,   4,  16,   6,    1,  -13 },   // 0x5D ']'
+  {   839,   9,   6,  11,    1,   -7 },   // 0x5E '^'
+  {   846,   9,   1,   9,    0,    3 },   // 0x5F '_'
+  {   848,   3,   3,   5,    1,  -13 },   // 0x60 '`'
+  {   850,   8,  10,  10,    1,   -9 },   // 0x61 'a'
+  {   860,   9,  13,  11,    1,  -12 },   // 0x62 'b'
+  {   875,   8,  10,  10,    1,   -9 },   // 0x63 'c'
+  {   885,   8,  13,  11,    1,  -12 },   // 0x64 'd'
+  {   898,   8,  10,  10,    1,   -9 },   // 0x65 'e'
+  {   908,   4,  13,   4,    0,  -12 },   // 0x66 'f'
+  {   915,   8,  13,  11,    1,   -9 },   // 0x67 'g'
+  {   928,   8,  13,  10,    1,  -12 },   // 0x68 'h'
+  {   941,   1,  13,   4,    1,  -12 },   // 0x69 'i'
+  {   943,   3,  17,   4,    0,  -12 },   // 0x6A 'j'
+  {   950,   8,  13,   9,    1,  -12 },   // 0x6B 'k'
+  {   963,   1,  13,   4,    1,  -12 },   // 0x6C 'l'
+  {   965,  13,  10,  15,    1,   -9 },   // 0x6D 'm'
+  {   982,   8,  10,  10,    1,   -9 },   // 0x6E 'n'
+  {   992,   9,  10,  11,    1,   -9 },   // 0x6F 'o'
+  {  1004,   9,  14,  11,    1,   -9 },   // 0x70 'p'
+  {  1020,   8,  14,  11,    1,   -9 },   // 0x71 'q'
+  {  1034,   5,  10,   6,    1,   -9 },   // 0x72 'r'
+  {  1041,   7,  10,   9,    1,   -9 },   // 0x73 's'
+  {  1050,   4,  12,   4,    0,  -11 },   // 0x74 't'
+  {  1056,   8,  10,  10,    1,   -9 },   // 0x75 'u'
+  {  1066,   8,  10,   9,    0,   -9 },   // 0x76 'v'
+  {  1076,  13,  10,  13,    0,   -9 },   // 0x77 'w'
+  {  1093,   9,  10,   9,    0,   -9 },   // 0x78 'x'
+  {  1105,   8,  14,   9,    0,   -9 },   // 0x79 'y'
+  {  1119,   8,  10,   8,    0,   -9 },   // 0x7A 'z'
+  {  1129,   6,  18,   8,    1,  -13 },   // 0x7B '{'
+  {  1143,   1,  17,   4,    1,  -13 },   // 0x7C '|'
+  {  1146,   6,  18,   8,    1,  -13 },   // 0x7D '}'
+  {  1160,   8,   2,  11,    1,   -5 } }; // 0x7E '~'
+
+const GFXfont Shree7149pt7b PROGMEM = {
+  (uint8_t  *)Shree7149pt7bBitmaps,
+  (GFXglyph *)Shree7149pt7bGlyphs,
+  0x20, 0x7E, 26 };
+
+// Approx. 1834 bytes
+
+
+// Approx. 1730 bytes
+
+// Approx. 1385 bytes
+
+const uint8_t C649pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xF0, 0xF0, 0x7F, 0x83,
+  0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3C, 0x3C, 0x1E, 0x0F, 0x07, 0x83,
+  0xC1, 0xE0, 0xF0, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xC1, 0xE0, 0xF0,
+  0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E,
+  0x0F, 0x07, 0x83, 0xC1, 0xE0, 0x07, 0x80, 0x3C, 0x0F, 0xFE, 0x7F, 0xFF,
+  0x00, 0x78, 0x00, 0xFF, 0x87, 0xFC, 0x00, 0x78, 0x03, 0xC0, 0x19, 0xFF,
+  0xCF, 0xFE, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x1F, 0x01, 0xF0, 0xFF, 0x0F,
+  0x03, 0xC0, 0x3C, 0x07, 0x80, 0x78, 0x04, 0x03, 0xC0, 0x30, 0x0F, 0x0F,
+  0xF0, 0xFC, 0x0F, 0xC0, 0xF0, 0x3F, 0xE0, 0x7F, 0xC3, 0xC1, 0xE7, 0x83,
+  0xC3, 0xFE, 0x07, 0xFC, 0x0F, 0xE0, 0x1F, 0xC0, 0x30, 0x81, 0xE0, 0xFF,
+  0xC1, 0xFF, 0x83, 0xCF, 0x07, 0x87, 0xFF, 0xCF, 0xFF, 0x80, 0x07, 0x83,
+  0xCF, 0x07, 0x8F, 0x07, 0x80, 0x07, 0x83, 0xCF, 0x07, 0x8F, 0x07, 0x83,
+  0xC1, 0xE0, 0xF0, 0x78, 0x0F, 0x07, 0x83, 0xC0, 0x3C, 0x1E, 0xF0, 0x78,
+  0x0F, 0x07, 0x80, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xCF, 0x07, 0x83,
+  0xC7, 0x83, 0xC0, 0x3C, 0x1E, 0x0F, 0x07, 0x80, 0xFF, 0x80, 0x3F, 0xE0,
+  0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0x80, 0x3F, 0xE0, 0x3C, 0x1E, 0x0F,
+  0x07, 0x80, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x7F, 0xFF,
+  0xFF, 0xE0, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x3C, 0xF3, 0xCF, 0xF3,
+  0xC0, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0x00, 0x0F, 0x80, 0x07, 0xC0,
+  0x1E, 0x00, 0x0F, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x06, 0x00, 0x0F, 0x00,
+  0x3C, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x00, 0x3F,
+  0xE1, 0xFF, 0x3C, 0x1F, 0xE0, 0xFF, 0x3F, 0xF9, 0xFF, 0xF9, 0xFF, 0xCF,
+  0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0x9F, 0xF0, 0xFF, 0x80,
+  0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x03, 0xF8, 0x1F, 0xC0, 0x1E, 0x00,
+  0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x7F, 0xFF, 0xFF,
+  0xE0, 0x3F, 0xE1, 0xFF, 0x3C, 0x1F, 0xE0, 0xF0, 0x07, 0x80, 0x3C, 0x07,
+  0x80, 0x3C, 0x3C, 0x01, 0xE0, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x7F, 0xFF,
+  0xFF, 0xE0, 0x3F, 0xE1, 0xFF, 0x3C, 0x1F, 0xE0, 0xF0, 0x07, 0x80, 0x3C,
+  0x3F, 0x81, 0xFC, 0x00, 0x60, 0x03, 0xC0, 0x1F, 0xE0, 0xFF, 0x07, 0x9F,
+  0xF0, 0xFF, 0x80, 0x00, 0x78, 0x00, 0x78, 0x03, 0xF8, 0x03, 0xF8, 0x0F,
+  0xF8, 0x0F, 0xF8, 0xF0, 0x78, 0xF0, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+  0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0xFF, 0xFF, 0xFF,
+  0xFC, 0x01, 0xE0, 0x0F, 0xFE, 0x7F, 0xF0, 0x01, 0x80, 0x0F, 0x00, 0x78,
+  0x03, 0xC0, 0x1F, 0xE0, 0xFF, 0x07, 0x9F, 0xF0, 0xFF, 0x80, 0x3F, 0xE1,
+  0xFF, 0x3C, 0x1F, 0xE0, 0xFF, 0x00, 0x78, 0x03, 0xFF, 0x9F, 0xFC, 0xF0,
+  0x67, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0x9F, 0xF0, 0xFF, 0x80, 0xFF,
+  0xFF, 0xFF, 0xFC, 0x1F, 0xE0, 0xF0, 0x1E, 0x00, 0xF0, 0x1E, 0x00, 0xF0,
+  0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00,
+  0x3F, 0xE1, 0xFF, 0x3C, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3C, 0xFF, 0x87,
+  0xFC, 0x30, 0x67, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0x9F, 0xF0, 0xFF,
+  0x80, 0x3F, 0xE1, 0xFF, 0x3C, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3C, 0xFF,
+  0xE7, 0xFF, 0x00, 0x78, 0x03, 0xC0, 0x1F, 0xE0, 0xFF, 0x07, 0x9F, 0xF0,
+  0xFF, 0x80, 0xFF, 0x00, 0x00, 0xFF, 0x3C, 0xF0, 0x00, 0x00, 0x00, 0x0F,
+  0x3C, 0xF3, 0xFC, 0xF0, 0x03, 0xF8, 0x1F, 0xC1, 0xE0, 0x0F, 0x03, 0xC0,
+  0x1E, 0x03, 0xC0, 0x1E, 0x00, 0x30, 0x01, 0xE0, 0x01, 0xE0, 0x0F, 0x00,
+  0x78, 0x01, 0xFC, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x0F,
+  0xFF, 0xFF, 0xFC, 0xFE, 0x07, 0xF0, 0x01, 0xE0, 0x0F, 0x00, 0x1E, 0x00,
+  0xF0, 0x01, 0xE0, 0x0F, 0x00, 0x60, 0x0F, 0x01, 0xE0, 0x0F, 0x00, 0x78,
+  0x7F, 0x03, 0xF8, 0x00, 0x3F, 0xE1, 0xFF, 0x3C, 0x1F, 0xE0, 0xF0, 0x07,
+  0x80, 0x3C, 0x07, 0x80, 0x3C, 0x07, 0x80, 0x3C, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x03, 0xC0, 0x1E, 0x00, 0x3F, 0xE1, 0xFF, 0x3C, 0x1F, 0xE0, 0xFF,
+  0x3F, 0xF9, 0xFF, 0xCF, 0xFE, 0x7F, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0,
+  0x3F, 0x01, 0x9F, 0xF0, 0xFF, 0x80, 0x07, 0x80, 0x3C, 0x0F, 0xF8, 0x7F,
+  0xCF, 0x07, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0x83, 0xFC, 0x1F,
+  0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xE0, 0xFF, 0xE7, 0xFF, 0x3C, 0x1F,
+  0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xFF, 0x9F, 0xFC, 0xF0, 0x67, 0x83, 0xFC,
+  0x1F, 0xE0, 0xFF, 0x07, 0xFF, 0xF3, 0xFF, 0x80, 0x3F, 0xE1, 0xFF, 0x3C,
+  0x1F, 0xE0, 0xFF, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80,
+  0x3C, 0x01, 0xE0, 0xFF, 0x07, 0x9F, 0xF0, 0xFF, 0x80, 0xFF, 0x87, 0xFC,
+  0x3C, 0x79, 0xE3, 0xCF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F,
+  0x83, 0xFC, 0x79, 0xE3, 0xCF, 0x1E, 0x7F, 0xC3, 0xFE, 0x00, 0xFF, 0xFF,
+  0xFF, 0xFC, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xFE, 0x1F, 0xF0, 0xF0,
+  0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0xFF,
+  0xFF, 0xFF, 0xFC, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xFE, 0x1F, 0xF0,
+  0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x00,
+  0x3F, 0xE1, 0xFF, 0x3C, 0x1F, 0xE0, 0xFF, 0x00, 0x78, 0x03, 0xCF, 0xFE,
+  0x7F, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0x9F, 0xF0, 0xFF,
+  0x80, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xFF,
+  0xFF, 0xFF, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F,
+  0xC1, 0xE0, 0xFF, 0xFF, 0xCF, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C,
+  0x1E, 0x0F, 0x07, 0x83, 0xC7, 0xFF, 0xFE, 0x0F, 0xF8, 0x7F, 0xC0, 0x78,
+  0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00,
+  0x79, 0xE3, 0xCF, 0x1E, 0x1F, 0xC0, 0xFE, 0x00, 0xF0, 0x7F, 0x83, 0xFC,
+  0x79, 0xE3, 0xCF, 0xF8, 0x7F, 0xC3, 0xF8, 0x1F, 0xC0, 0xFE, 0x07, 0xFC,
+  0x3C, 0x79, 0xE3, 0xCF, 0x1E, 0x78, 0x3F, 0xC1, 0xE0, 0xF0, 0x07, 0x80,
+  0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07,
+  0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0xF0, 0x1F,
+  0xE0, 0x3F, 0xF9, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x67, 0xF8,
+  0xCF, 0xF0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F, 0x80, 0xFF, 0x01, 0xFE, 0x03,
+  0xFC, 0x07, 0x80, 0xF0, 0x7F, 0x83, 0xFF, 0x9F, 0xFC, 0xFF, 0xFF, 0xFF,
+  0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x9F, 0xFC, 0x1F, 0xE0, 0xFF, 0x07,
+  0xF8, 0x3F, 0xC1, 0xE0, 0x3F, 0xE1, 0xFF, 0x3C, 0x1F, 0xE0, 0xFF, 0x07,
+  0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF,
+  0x07, 0x9F, 0xF0, 0xFF, 0x80, 0xFF, 0xE7, 0xFF, 0x3C, 0x1F, 0xE0, 0xFF,
+  0x07, 0xF8, 0x3F, 0xFF, 0x9F, 0xFC, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0,
+  0x0F, 0x00, 0x78, 0x03, 0xC0, 0x00, 0x3F, 0xE1, 0xFF, 0x3C, 0x1F, 0xE0,
+  0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1E,
+  0x7F, 0xC3, 0xFE, 0x01, 0xFC, 0x0F, 0xE0, 0xFF, 0xE7, 0xFF, 0x3C, 0x1F,
+  0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xFF, 0x9F, 0xFC, 0xFF, 0x87, 0xFC, 0x3C,
+  0x79, 0xE3, 0xCF, 0x1E, 0x78, 0x3F, 0xC1, 0xE0, 0x3F, 0xE1, 0xFF, 0x3C,
+  0x1F, 0xE0, 0xFF, 0x00, 0x78, 0x00, 0xFF, 0x87, 0xFC, 0x00, 0x60, 0x03,
+  0xC0, 0x1F, 0xE0, 0xFF, 0x07, 0x9F, 0xF0, 0xFF, 0x80, 0xFF, 0xFF, 0xFF,
+  0xC1, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80,
+  0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x7F,
+  0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0,
+  0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0x9F, 0xF0, 0xFF, 0x80, 0xF0,
+  0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F,
+  0xF0, 0x7F, 0x83, 0xFC, 0x1E, 0x7F, 0xC3, 0xFE, 0x03, 0xC0, 0x1E, 0x00,
+  0xF0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F, 0x80, 0xFF, 0x01, 0xFE, 0x03, 0xFC,
+  0x67, 0xF8, 0xCF, 0xF1, 0x9F, 0xFF, 0xFF, 0xF9, 0xFF, 0xF3, 0xFF, 0xE7,
+  0xFE, 0x03, 0xFC, 0x07, 0x80, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xF3,
+  0xFE, 0x1F, 0xF0, 0x1E, 0x00, 0xF0, 0x3F, 0xE1, 0xFF, 0x0C, 0x19, 0xE0,
+  0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xE0, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0,
+  0xFF, 0x07, 0xF8, 0x3C, 0xFF, 0x87, 0xFC, 0x07, 0x80, 0x3C, 0x01, 0xE0,
+  0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x1E,
+  0x00, 0xF0, 0x1E, 0x00, 0xF0, 0x1E, 0x00, 0xF0, 0x3C, 0x01, 0xE0, 0x3C,
+  0x01, 0xE0, 0x0F, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFC, 0x1E,
+  0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0xFF,
+  0xFE, 0xF0, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00,
+  0x3C, 0x00, 0x06, 0x00, 0x03, 0xE0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E,
+  0x00, 0x01, 0xF0, 0x00, 0xF8, 0xFF, 0xFF, 0xC1, 0xE0, 0xF0, 0x78, 0x3C,
+  0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x7F, 0xFF, 0xFE, 0x01, 0x80,
+  0x03, 0x00, 0x1F, 0x80, 0x3F, 0x00, 0x46, 0x07, 0x8F, 0x0E, 0x06, 0x7C,
+  0x0F, 0xF8, 0x1F, 0x80, 0x0F, 0x00, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+  0xC3, 0x00, 0x0C, 0x30, 0x30, 0xC0, 0x3F, 0xE1, 0xFF, 0x00, 0x1E, 0x00,
+  0xF3, 0xFF, 0x9F, 0xFC, 0xC1, 0xFE, 0x0F, 0xF0, 0x79, 0xFF, 0xCF, 0xFE,
+  0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0xFE, 0x7F, 0xF3, 0xC1, 0x9E,
+  0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xFF, 0xCF, 0xFE, 0x00, 0x3F, 0xE7,
+  0xFF, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0x30, 0x07, 0xFC,
+  0xFF, 0x80, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF3, 0xFF, 0x9F, 0xFC,
+  0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1E, 0x7F, 0xF3, 0xFF, 0x80,
+  0x3F, 0xE1, 0xFF, 0x3C, 0x1F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x1E,
+  0x00, 0x30, 0x01, 0xFF, 0x0F, 0xF8, 0x0F, 0xE1, 0xFC, 0xF0, 0x1E, 0x0F,
+  0xFF, 0xFF, 0xCF, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0,
+  0x3F, 0xF9, 0xFF, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3C, 0xFF, 0xE7,
+  0xFF, 0x00, 0x78, 0x03, 0xC0, 0x1F, 0xFF, 0xCF, 0xFE, 0x00, 0xF0, 0x07,
+  0x80, 0x3C, 0x01, 0xE0, 0x0F, 0xFE, 0x7F, 0xF3, 0xC1, 0x9E, 0x0F, 0xF0,
+  0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0x80, 0x3C, 0x1E, 0x00, 0x00,
+  0x0F, 0xC7, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x1F, 0xFF, 0xF8, 0x01,
+  0xE0, 0x3C, 0x00, 0x00, 0x00, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0,
+  0x3C, 0x07, 0x80, 0xF0, 0x1F, 0xFF, 0x3F, 0xE0, 0xF0, 0x07, 0x80, 0x3C,
+  0x01, 0xE0, 0x0F, 0x1E, 0x78, 0xF3, 0xFE, 0x1F, 0xF0, 0xF1, 0xE7, 0x8F,
+  0x3C, 0x79, 0xE0, 0xFF, 0x07, 0x80, 0xFC, 0x7E, 0x0F, 0x07, 0x83, 0xC1,
+  0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x1F, 0xFF, 0xF8, 0xF0, 0x79, 0xE0,
+  0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x67, 0xF8, 0xCF,
+  0xF1, 0x9F, 0xE0, 0x3F, 0xC0, 0x78, 0xFF, 0xE7, 0xFF, 0x3C, 0x1F, 0xE0,
+  0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1E,
+  0x3F, 0xE1, 0xFF, 0x3C, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE,
+  0x0F, 0x30, 0x61, 0xFF, 0x0F, 0xF8, 0xFF, 0xE7, 0xFF, 0x3C, 0x1F, 0xE0,
+  0xFF, 0x07, 0xF8, 0x3F, 0xFF, 0x9F, 0xFC, 0xF0, 0x07, 0x80, 0x3C, 0x01,
+  0xE0, 0x0F, 0x00, 0x00, 0x3F, 0xF9, 0xFF, 0xFC, 0x1F, 0xE0, 0xFF, 0x07,
+  0xF8, 0x3C, 0xFF, 0xE7, 0xFF, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0,
+  0x07, 0x80, 0xFF, 0xE7, 0xFF, 0x3C, 0x1F, 0xE0, 0xFF, 0x00, 0x78, 0x03,
+  0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x00, 0x3F, 0xF9, 0xFF, 0xFC,
+  0x01, 0xE0, 0x03, 0xFE, 0x1F, 0xF0, 0x01, 0x80, 0x0F, 0x00, 0x7F, 0xFF,
+  0x3F, 0xF8, 0x07, 0x80, 0x3C, 0x3F, 0xFF, 0xFF, 0xF0, 0x78, 0x03, 0xC0,
+  0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x07, 0xF0, 0x3F, 0x80,
+  0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE,
+  0x0F, 0xF0, 0x79, 0xFF, 0xCF, 0xFE, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0,
+  0xFF, 0x07, 0xF8, 0x3C, 0xC1, 0x87, 0xFC, 0x3F, 0xE0, 0x3C, 0x01, 0xE0,
+  0xF0, 0x1F, 0xE0, 0x3F, 0xC6, 0x7F, 0x8C, 0xFF, 0x19, 0xFF, 0xFF, 0xCF,
+  0xFE, 0x1F, 0xFC, 0x3C, 0x78, 0x78, 0xF0, 0xF1, 0xE0, 0xF0, 0x7F, 0x83,
+  0xCF, 0xF8, 0x7F, 0xC0, 0x78, 0x03, 0xC0, 0xFF, 0x87, 0xFC, 0x30, 0x67,
+  0x83, 0xFC, 0x1E, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8,
+  0x3C, 0xFF, 0xE7, 0xFF, 0x01, 0xE0, 0x0F, 0x00, 0x79, 0xFF, 0x0F, 0xF8,
+  0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x78, 0x03, 0xC0, 0x78, 0x03, 0xC0, 0x1E,
+  0x07, 0x80, 0x3C, 0x07, 0xFF, 0xFF, 0xFE, 0x07, 0x83, 0xCF, 0x07, 0x83,
+  0xC1, 0xE3, 0xC1, 0xE0, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC0, 0x3C, 0x1E,
+  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0x78, 0x0F,
+  0x07, 0x83, 0xC1, 0xE0, 0x1E, 0x0F, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC7,
+  0x83, 0xC0, 0x3F, 0x86, 0x7F, 0x0F, 0x0F, 0xE6, 0x1F, 0xC0 };
+
+const GFXglyph C649pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,  18,    0,    0 },   // 0x20 ' '
+  {     1,   4,  15,  18,    7,  -14 },   // 0x21 '!'
+  {     9,  13,   6,  18,    2,  -14 },   // 0x22 '"'
+  {    19,  18,  15,  18,    0,  -14 },   // 0x23 '#'
+  {    53,  13,  15,  18,    2,  -14 },   // 0x24 '$'
+  {    78,  12,  15,  18,    2,  -14 },   // 0x25 '%'
+  {   101,  15,  15,  18,    2,  -14 },   // 0x26 '&'
+  {   130,   9,   6,  18,    7,  -14 },   // 0x27 '''
+  {   137,   9,  15,  18,    4,  -14 },   // 0x28 '('
+  {   154,   9,  15,  18,    4,  -14 },   // 0x29 ')'
+  {   171,  18,  10,  18,    0,  -12 },   // 0x2A '*'
+  {   194,  13,  11,  18,    2,  -12 },   // 0x2B '+'
+  {   212,   6,   6,  18,    4,   -3 },   // 0x2C ','
+  {   217,  13,   2,  18,    2,   -8 },   // 0x2D '-'
+  {   221,   4,   4,  18,    7,   -3 },   // 0x2E '.'
+  {   223,  17,  13,  18,    2,  -12 },   // 0x2F '/'
+  {   251,  13,  15,  18,    2,  -14 },   // 0x30 '0'
+  {   276,  13,  15,  18,    2,  -14 },   // 0x31 '1'
+  {   301,  13,  15,  18,    2,  -14 },   // 0x32 '2'
+  {   326,  13,  15,  18,    2,  -14 },   // 0x33 '3'
+  {   351,  16,  15,  18,    2,  -14 },   // 0x34 '4'
+  {   381,  13,  15,  18,    2,  -14 },   // 0x35 '5'
+  {   406,  13,  15,  18,    2,  -14 },   // 0x36 '6'
+  {   431,  13,  15,  18,    2,  -14 },   // 0x37 '7'
+  {   456,  13,  15,  18,    2,  -14 },   // 0x38 '8'
+  {   481,  13,  15,  18,    2,  -14 },   // 0x39 '9'
+  {   506,   4,   8,  18,    7,  -10 },   // 0x3A ':'
+  {   510,   6,  13,  18,    4,  -10 },   // 0x3B ';'
+  {   520,  13,  15,  18,    2,  -14 },   // 0x3C '<'
+  {   545,  13,   6,  18,    2,  -10 },   // 0x3D '='
+  {   555,  13,  15,  18,    2,  -14 },   // 0x3E '>'
+  {   580,  13,  15,  18,    2,  -14 },   // 0x3F '?'
+  {   605,  13,  15,  18,    2,  -14 },   // 0x40 '@'
+  {   630,  13,  15,  18,    2,  -14 },   // 0x41 'A'
+  {   655,  13,  15,  18,    2,  -14 },   // 0x42 'B'
+  {   680,  13,  15,  18,    2,  -14 },   // 0x43 'C'
+  {   705,  13,  15,  18,    2,  -14 },   // 0x44 'D'
+  {   730,  13,  15,  18,    2,  -14 },   // 0x45 'E'
+  {   755,  13,  15,  18,    2,  -14 },   // 0x46 'F'
+  {   780,  13,  15,  18,    2,  -14 },   // 0x47 'G'
+  {   805,  13,  15,  18,    2,  -14 },   // 0x48 'H'
+  {   830,   9,  15,  18,    4,  -14 },   // 0x49 'I'
+  {   847,  13,  15,  18,    2,  -14 },   // 0x4A 'J'
+  {   872,  13,  15,  18,    2,  -14 },   // 0x4B 'K'
+  {   897,  13,  15,  18,    2,  -14 },   // 0x4C 'L'
+  {   922,  15,  15,  18,    2,  -14 },   // 0x4D 'M'
+  {   951,  13,  15,  18,    2,  -14 },   // 0x4E 'N'
+  {   976,  13,  15,  18,    2,  -14 },   // 0x4F 'O'
+  {  1001,  13,  15,  18,    2,  -14 },   // 0x50 'P'
+  {  1026,  13,  15,  18,    2,  -14 },   // 0x51 'Q'
+  {  1051,  13,  15,  18,    2,  -14 },   // 0x52 'R'
+  {  1076,  13,  15,  18,    2,  -14 },   // 0x53 'S'
+  {  1101,  13,  15,  18,    2,  -14 },   // 0x54 'T'
+  {  1126,  13,  15,  18,    2,  -14 },   // 0x55 'U'
+  {  1151,  13,  15,  18,    2,  -14 },   // 0x56 'V'
+  {  1176,  15,  15,  18,    2,  -14 },   // 0x57 'W'
+  {  1205,  13,  15,  18,    2,  -14 },   // 0x58 'X'
+  {  1230,  13,  15,  18,    2,  -14 },   // 0x59 'Y'
+  {  1255,  13,  15,  18,    2,  -14 },   // 0x5A 'Z'
+  {  1280,   9,  15,  18,    4,  -14 },   // 0x5B '['
+  {  1297,  17,  13,  18,    2,  -12 },   // 0x5C '\'
+  {  1325,   9,  15,  18,    4,  -14 },   // 0x5D ']'
+  {  1342,  15,  11,  18,    2,  -14 },   // 0x5E '^'
+  {  1363,  18,   2,  18,    0,    1 },   // 0x5F '_'
+  {  1368,   6,   7,  18,    4,  -15 },   // 0x60 '`'
+  {  1374,  13,  11,  18,    2,  -10 },   // 0x61 'a'
+  {  1392,  13,  13,  18,    2,  -12 },   // 0x62 'b'
+  {  1414,  11,  11,  18,    2,  -10 },   // 0x63 'c'
+  {  1430,  13,  13,  18,    2,  -12 },   // 0x64 'd'
+  {  1452,  13,  11,  18,    2,  -10 },   // 0x65 'e'
+  {  1470,  11,  13,  18,    4,  -12 },   // 0x66 'f'
+  {  1488,  13,  13,  18,    2,  -10 },   // 0x67 'g'
+  {  1510,  13,  13,  18,    2,  -12 },   // 0x68 'h'
+  {  1532,   9,  13,  18,    4,  -12 },   // 0x69 'i'
+  {  1547,  11,  15,  18,    4,  -12 },   // 0x6A 'j'
+  {  1568,  13,  13,  18,    2,  -12 },   // 0x6B 'k'
+  {  1590,   9,  13,  18,    4,  -12 },   // 0x6C 'l'
+  {  1605,  15,  11,  18,    2,  -10 },   // 0x6D 'm'
+  {  1626,  13,  11,  18,    2,  -10 },   // 0x6E 'n'
+  {  1644,  13,  11,  18,    2,  -10 },   // 0x6F 'o'
+  {  1662,  13,  13,  18,    2,  -10 },   // 0x70 'p'
+  {  1684,  13,  13,  18,    2,  -10 },   // 0x71 'q'
+  {  1706,  13,  11,  18,    2,  -10 },   // 0x72 'r'
+  {  1724,  13,  11,  18,    2,  -10 },   // 0x73 's'
+  {  1742,  13,  13,  18,    2,  -12 },   // 0x74 't'
+  {  1764,  13,  11,  18,    2,  -10 },   // 0x75 'u'
+  {  1782,  13,  11,  18,    2,  -10 },   // 0x76 'v'
+  {  1800,  15,  11,  18,    2,  -10 },   // 0x77 'w'
+  {  1821,  13,  11,  18,    2,  -10 },   // 0x78 'x'
+  {  1839,  13,  13,  18,    2,  -10 },   // 0x79 'y'
+  {  1861,  13,  11,  18,    2,  -10 },   // 0x7A 'z'
+  {  1879,   9,  15,  18,    4,  -14 },   // 0x7B '{'
+  {  1896,   4,  17,  18,    7,  -14 },   // 0x7C '|'
+  {  1905,   9,  15,  18,    4,  -14 },   // 0x7D '}'
+  {  1922,  15,   4,  18,    2,   -7 } }; // 0x7E '~'
+
+const GFXfont C649pt7b PROGMEM = {
+  (uint8_t  *)C649pt7bBitmaps,
+  (GFXglyph *)C649pt7bGlyphs,
+  0x20, 0x7E, 18 };
+
+// Approx. 2602 bytes
+const uint8_t C645pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xC3, 0xC7, 0x8F, 0x18, 0x63, 0x18, 0xCF, 0xFD, 0x8C, 0xFF,
+  0xD8, 0xC6, 0x31, 0x8C, 0x18, 0xFF, 0x03, 0xE0, 0x60, 0xBF, 0x0C, 0xC3,
+  0x31, 0x86, 0x21, 0x0C, 0xE3, 0x7C, 0xC6, 0x7C, 0x78, 0x48, 0xC7, 0xC6,
+  0x7F, 0x1B, 0x30, 0x1B, 0x31, 0x8C, 0x21, 0x83, 0xC3, 0x06, 0x31, 0x91,
+  0x98, 0x63, 0x0F, 0x8F, 0xFC, 0xF8, 0x63, 0x00, 0x18, 0x30, 0x67, 0xF1,
+  0x83, 0x00, 0x6F, 0x00, 0xFE, 0xF0, 0x01, 0xC1, 0x80, 0xE0, 0x20, 0x30,
+  0x18, 0x0C, 0x00, 0x7D, 0x8F, 0x7F, 0xBC, 0x78, 0xF1, 0xBE, 0x18, 0x31,
+  0xE0, 0xC1, 0x83, 0x06, 0x7F, 0x7D, 0x8C, 0x18, 0x66, 0x08, 0x30, 0x7F,
+  0x7D, 0x8C, 0x19, 0xE0, 0x40, 0xF1, 0xBE, 0x06, 0x1E, 0x3E, 0xC6, 0xFF,
+  0x06, 0x06, 0x06, 0xFF, 0x83, 0xF0, 0x20, 0x60, 0xF1, 0xBE, 0x7D, 0x8F,
+  0x07, 0xEC, 0x58, 0xF1, 0xBE, 0xFF, 0x8C, 0x30, 0xC1, 0x83, 0x06, 0x0C,
+  0x7D, 0x8F, 0x1B, 0xE4, 0x58, 0xF1, 0xBE, 0x7D, 0x8F, 0x1B, 0xF0, 0x60,
+  0xF1, 0xBE, 0xC3, 0x60, 0x06, 0xF0, 0x0F, 0x18, 0x60, 0xC0, 0x40, 0x20,
+  0x18, 0x0F, 0xFE, 0x03, 0xF8, 0xF0, 0x30, 0x30, 0x30, 0x41, 0x06, 0x78,
+  0x7D, 0x8C, 0x18, 0x61, 0x80, 0x00, 0x0C, 0x7D, 0x8F, 0x3E, 0x7C, 0x18,
+  0x30, 0xBE, 0x18, 0xFB, 0x1F, 0xFC, 0x78, 0xF1, 0xE3, 0xFD, 0x8F, 0x1F,
+  0xEC, 0x58, 0xF1, 0xFE, 0x7D, 0x8F, 0x06, 0x0C, 0x18, 0x31, 0xBE, 0xF9,
+  0x9B, 0x1E, 0x3C, 0x78, 0xB3, 0x7C, 0xFF, 0x83, 0x07, 0x8C, 0x18, 0x30,
+  0x7F, 0xFF, 0x83, 0x07, 0x8C, 0x18, 0x30, 0x60, 0x7D, 0x8F, 0x06, 0xFC,
+  0x78, 0xF1, 0xBE, 0xC7, 0x8F, 0x1F, 0xFC, 0x78, 0xF1, 0xE3, 0xFB, 0x18,
+  0xC6, 0x31, 0x9F, 0x3E, 0x18, 0x30, 0x60, 0xC1, 0xB3, 0x3C, 0xC7, 0x9B,
+  0xE7, 0x8F, 0x19, 0x33, 0x63, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x7F,
+  0xC3, 0xF7, 0xFF, 0xCB, 0xC3, 0xC3, 0xC3, 0xC3, 0xC7, 0xEF, 0xFF, 0xFD,
+  0xF8, 0xF1, 0xE3, 0x7D, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xBE, 0xFD, 0x8F,
+  0x1F, 0xEC, 0x18, 0x30, 0x60, 0x7C, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x7C,
+  0x0F, 0xFD, 0x8F, 0x1F, 0xEF, 0x99, 0x31, 0x63, 0x7D, 0x8F, 0x03, 0xE0,
+  0x40, 0xF1, 0xBE, 0xFE, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0xC7, 0x8F,
+  0x1E, 0x3C, 0x78, 0xF1, 0xBE, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xDF, 0x0C,
+  0xC3, 0xC3, 0xC3, 0xCB, 0xCB, 0xF7, 0xF7, 0xC3, 0xC7, 0x8D, 0xF0, 0xC1,
+  0x8C, 0xB1, 0xE3, 0xC7, 0x8F, 0x1B, 0xE1, 0x83, 0x06, 0x0C, 0xFE, 0x0C,
+  0x30, 0xC6, 0x08, 0x30, 0x7F, 0xFC, 0xCC, 0xCC, 0xCF, 0xC0, 0x18, 0x01,
+  0x80, 0x20, 0x06, 0x01, 0x80, 0x1C, 0xF3, 0x33, 0x33, 0x3F, 0x08, 0x3C,
+  0x24, 0x42, 0xC3, 0x81, 0xFF, 0xC0, 0x81, 0x10, 0x7C, 0x0D, 0xFA, 0x3C,
+  0x6F, 0xC0, 0xC1, 0x83, 0xF6, 0x2C, 0x78, 0xFF, 0x00, 0x7F, 0x0C, 0x30,
+  0x41, 0xF0, 0x06, 0x0D, 0xFA, 0x3C, 0x78, 0xDF, 0x80, 0x7D, 0x8F, 0xFE,
+  0x04, 0x0F, 0x80, 0x3D, 0x8F, 0xD8, 0x61, 0x86, 0x00, 0x7F, 0x8F, 0x1B,
+  0xF0, 0x60, 0xFF, 0x00, 0xC1, 0x83, 0xF6, 0x2C, 0x78, 0xF1, 0x80, 0x60,
+  0x38, 0xC6, 0x33, 0xE0, 0x0C, 0x00, 0xC3, 0x0C, 0x30, 0xFE, 0xC1, 0x83,
+  0x37, 0xCC, 0x99, 0xB1, 0x80, 0xE3, 0x18, 0xC6, 0x33, 0xE0, 0xC6, 0xFF,
+  0xFF, 0xCB, 0xC3, 0xC3, 0xFD, 0x8F, 0x1E, 0x3C, 0x78, 0xC0, 0x7D, 0x8F,
+  0x1E, 0x34, 0x4F, 0x80, 0xFD, 0x8F, 0x1F, 0xEC, 0x18, 0x30, 0x00, 0x7F,
+  0x8F, 0x1B, 0xF0, 0x60, 0xC1, 0x80, 0xFD, 0x8F, 0x06, 0x0C, 0x18, 0x00,
+  0x7F, 0x81, 0xF0, 0x20, 0x7F, 0x80, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x18,
+  0x0F, 0xC7, 0x8F, 0x1E, 0x3C, 0x6F, 0xC0, 0xC7, 0x8F, 0x1A, 0x23, 0x83,
+  0x00, 0xC3, 0xCB, 0xCB, 0x7E, 0x66, 0x66, 0xC6, 0xF8, 0x60, 0xC6, 0x58,
+  0xC0, 0xC7, 0x8F, 0x1B, 0xF0, 0xC1, 0xBE, 0x00, 0xFE, 0x18, 0x60, 0xC6,
+  0x1F, 0xC0, 0x1B, 0x19, 0x86, 0x31, 0x83, 0xFF, 0xFF, 0xC0, 0xC3, 0x18,
+  0x36, 0x31, 0x98, 0x79, 0x8F };
+
+const GFXglyph C645pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,  10,    0,    0 },   // 0x20 ' '
+  {     1,   2,   8,  10,    4,   -7 },   // 0x21 '!'
+  {     3,   7,   3,  10,    1,   -7 },   // 0x22 '"'
+  {     6,  10,   8,  10,    0,   -7 },   // 0x23 '#'
+  {    16,   7,   8,  10,    1,   -7 },   // 0x24 '$'
+  {    23,   6,   8,  10,    1,   -7 },   // 0x25 '%'
+  {    29,   8,   8,  10,    1,   -7 },   // 0x26 '&'
+  {    37,   5,   3,  10,    4,   -7 },   // 0x27 '''
+  {    39,   5,   8,  10,    2,   -7 },   // 0x28 '('
+  {    44,   5,   8,  10,    2,   -7 },   // 0x29 ')'
+  {    49,  10,   5,  10,    0,   -6 },   // 0x2A '*'
+  {    56,   7,   6,  10,    1,   -6 },   // 0x2B '+'
+  {    62,   3,   3,  10,    2,   -1 },   // 0x2C ','
+  {    64,   7,   1,  10,    1,   -4 },   // 0x2D '-'
+  {    65,   2,   2,  10,    4,   -1 },   // 0x2E '.'
+  {    66,  10,   7,  10,    1,   -6 },   // 0x2F '/'
+  {    75,   7,   8,  10,    1,   -7 },   // 0x30 '0'
+  {    82,   7,   8,  10,    1,   -7 },   // 0x31 '1'
+  {    89,   7,   8,  10,    1,   -7 },   // 0x32 '2'
+  {    96,   7,   8,  10,    1,   -7 },   // 0x33 '3'
+  {   103,   8,   8,  10,    1,   -7 },   // 0x34 '4'
+  {   111,   7,   8,  10,    1,   -7 },   // 0x35 '5'
+  {   118,   7,   8,  10,    1,   -7 },   // 0x36 '6'
+  {   125,   7,   8,  10,    1,   -7 },   // 0x37 '7'
+  {   132,   7,   8,  10,    1,   -7 },   // 0x38 '8'
+  {   139,   7,   8,  10,    1,   -7 },   // 0x39 '9'
+  {   146,   2,   4,  10,    4,   -5 },   // 0x3A ':'
+  {   147,   3,   7,  10,    2,   -5 },   // 0x3B ';'
+  {   150,   8,   8,  10,    1,   -7 },   // 0x3C '<'
+  {   158,   7,   3,  10,    1,   -5 },   // 0x3D '='
+  {   161,   7,   8,  10,    1,   -7 },   // 0x3E '>'
+  {   168,   7,   8,  10,    1,   -7 },   // 0x3F '?'
+  {   175,   7,   8,  10,    1,   -7 },   // 0x40 '@'
+  {   182,   7,   8,  10,    1,   -7 },   // 0x41 'A'
+  {   189,   7,   8,  10,    1,   -7 },   // 0x42 'B'
+  {   196,   7,   8,  10,    1,   -7 },   // 0x43 'C'
+  {   203,   7,   8,  10,    1,   -7 },   // 0x44 'D'
+  {   210,   7,   8,  10,    1,   -7 },   // 0x45 'E'
+  {   217,   7,   8,  10,    1,   -7 },   // 0x46 'F'
+  {   224,   7,   8,  10,    1,   -7 },   // 0x47 'G'
+  {   231,   7,   8,  10,    1,   -7 },   // 0x48 'H'
+  {   238,   5,   8,  10,    2,   -7 },   // 0x49 'I'
+  {   243,   7,   8,  10,    1,   -7 },   // 0x4A 'J'
+  {   250,   7,   8,  10,    1,   -7 },   // 0x4B 'K'
+  {   257,   7,   8,  10,    1,   -7 },   // 0x4C 'L'
+  {   264,   8,   8,  10,    1,   -7 },   // 0x4D 'M'
+  {   272,   7,   8,  10,    1,   -7 },   // 0x4E 'N'
+  {   279,   7,   8,  10,    1,   -7 },   // 0x4F 'O'
+  {   286,   7,   8,  10,    1,   -7 },   // 0x50 'P'
+  {   293,   8,   8,  10,    1,   -7 },   // 0x51 'Q'
+  {   301,   7,   8,  10,    1,   -7 },   // 0x52 'R'
+  {   308,   7,   8,  10,    1,   -7 },   // 0x53 'S'
+  {   315,   7,   8,  10,    1,   -7 },   // 0x54 'T'
+  {   322,   7,   8,  10,    1,   -7 },   // 0x55 'U'
+  {   329,   7,   8,  10,    1,   -7 },   // 0x56 'V'
+  {   336,   8,   8,  10,    1,   -7 },   // 0x57 'W'
+  {   344,   7,   8,  10,    1,   -7 },   // 0x58 'X'
+  {   351,   7,   8,  10,    1,   -7 },   // 0x59 'Y'
+  {   358,   7,   8,  10,    1,   -7 },   // 0x5A 'Z'
+  {   365,   4,   8,  10,    2,   -7 },   // 0x5B '['
+  {   369,  10,   7,  10,    1,   -6 },   // 0x5C '\'
+  {   378,   4,   8,  10,    3,   -7 },   // 0x5D ']'
+  {   382,   8,   6,  10,    1,   -7 },   // 0x5E '^'
+  {   388,  10,   1,  10,    0,    1 },   // 0x5F '_'
+  {   390,   3,   4,  10,    2,   -8 },   // 0x60 '`'
+  {   392,   7,   6,  10,    1,   -5 },   // 0x61 'a'
+  {   398,   7,   7,  10,    1,   -6 },   // 0x62 'b'
+  {   405,   6,   6,  10,    1,   -5 },   // 0x63 'c'
+  {   410,   7,   7,  10,    1,   -6 },   // 0x64 'd'
+  {   417,   7,   6,  10,    1,   -5 },   // 0x65 'e'
+  {   423,   6,   7,  10,    2,   -6 },   // 0x66 'f'
+  {   429,   7,   7,  10,    1,   -5 },   // 0x67 'g'
+  {   436,   7,   7,  10,    1,   -6 },   // 0x68 'h'
+  {   443,   5,   7,  10,    2,   -6 },   // 0x69 'i'
+  {   448,   6,   8,  10,    2,   -6 },   // 0x6A 'j'
+  {   454,   7,   7,  10,    1,   -6 },   // 0x6B 'k'
+  {   461,   5,   7,  10,    2,   -6 },   // 0x6C 'l'
+  {   466,   8,   6,  10,    1,   -5 },   // 0x6D 'm'
+  {   472,   7,   6,  10,    1,   -5 },   // 0x6E 'n'
+  {   478,   7,   6,  10,    1,   -5 },   // 0x6F 'o'
+  {   484,   7,   7,  10,    1,   -5 },   // 0x70 'p'
+  {   491,   7,   7,  10,    1,   -5 },   // 0x71 'q'
+  {   498,   7,   6,  10,    1,   -5 },   // 0x72 'r'
+  {   504,   7,   6,  10,    1,   -5 },   // 0x73 's'
+  {   510,   8,   7,  10,    1,   -6 },   // 0x74 't'
+  {   517,   7,   6,  10,    1,   -5 },   // 0x75 'u'
+  {   523,   7,   6,  10,    1,   -5 },   // 0x76 'v'
+  {   529,   8,   6,  10,    1,   -5 },   // 0x77 'w'
+  {   535,   7,   6,  10,    1,   -5 },   // 0x78 'x'
+  {   541,   7,   7,  10,    1,   -5 },   // 0x79 'y'
+  {   548,   7,   6,  10,    1,   -5 },   // 0x7A 'z'
+  {   554,   5,   8,  10,    2,   -7 },   // 0x7B '{'
+  {   559,   2,   9,  10,    4,   -7 },   // 0x7C '|'
+  {   562,   5,   8,  10,    2,   -7 },   // 0x7D '}'
+  {   567,   8,   2,  10,    1,   -4 } }; // 0x7E '~'
+
+const GFXfont C645pt7b PROGMEM = {
+  (uint8_t  *)C645pt7bBitmaps,
+  (GFXglyph *)C645pt7bGlyphs,
+  0x20, 0x7E, 10 };
+
+// Approx. 1241 bytes
+
+const uint8_t FUTRFW8pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xD0, 0x99, 0x99, 0x90, 0x16, 0x14, 0x14, 0x14, 0x7F, 0x28,
+  0x28, 0xFE, 0x28, 0x50, 0x50, 0x18, 0x3C, 0x5A, 0x58, 0x58, 0x78, 0x1C,
+  0x1F, 0x19, 0xD9, 0xDB, 0x7E, 0x18, 0x18, 0x70, 0x46, 0xC2, 0x22, 0x21,
+  0x12, 0x08, 0x90, 0x39, 0x00, 0x18, 0x00, 0x9E, 0x09, 0x08, 0x48, 0x44,
+  0x46, 0x61, 0xE0, 0x3C, 0x10, 0x84, 0x21, 0x08, 0x24, 0x0E, 0x06, 0x83,
+  0x32, 0x84, 0xA0, 0xC4, 0x78, 0xF2, 0xF8, 0x29, 0x69, 0x24, 0x92, 0x24,
+  0x88, 0x89, 0x32, 0x49, 0x24, 0xA4, 0xA0, 0x25, 0x5C, 0xEE, 0x90, 0x10,
+  0x20, 0x47, 0xF1, 0x02, 0x04, 0x08, 0x2D, 0x20, 0xF0, 0x80, 0x04, 0x08,
+  0x10, 0x40, 0x82, 0x04, 0x18, 0x20, 0x41, 0x02, 0x00, 0x38, 0x89, 0x14,
+  0x18, 0x30, 0x60, 0xC1, 0x83, 0x89, 0x11, 0xC0, 0x71, 0x11, 0x11, 0x11,
+  0x11, 0x11, 0x78, 0x8E, 0x0C, 0x10, 0x20, 0x81, 0x04, 0x18, 0x61, 0x87,
+  0xF0, 0x7C, 0x8A, 0x08, 0x10, 0x20, 0x86, 0x03, 0x03, 0x07, 0x1B, 0xE0,
+  0x04, 0x04, 0x0C, 0x1C, 0x14, 0x24, 0x24, 0x44, 0xC4, 0xFF, 0x04, 0x04,
+  0x3E, 0x40, 0x82, 0x04, 0x0F, 0x01, 0x81, 0x03, 0x07, 0x13, 0xC0, 0x0C,
+  0x10, 0x41, 0x82, 0x0F, 0x11, 0xC1, 0x83, 0x05, 0x13, 0xC0, 0xFE, 0x04,
+  0x10, 0x20, 0x81, 0x04, 0x08, 0x20, 0x41, 0x04, 0x00, 0x7D, 0x8E, 0x0C,
+  0x14, 0x47, 0x11, 0x41, 0x83, 0x05, 0x11, 0xC0, 0x38, 0x8A, 0x0C, 0x18,
+  0x28, 0x8F, 0x04, 0x18, 0x20, 0x80, 0xC0, 0x20, 0x20, 0x02, 0x56, 0xC0,
+  0x03, 0x1C, 0xE0, 0xE0, 0x1C, 0x03, 0xFF, 0x00, 0x00, 0xFF, 0xC0, 0x38,
+  0x07, 0x07, 0x38, 0xC0, 0x7B, 0x18, 0x43, 0x19, 0xCC, 0x22, 0x89, 0xC0,
+  0x08, 0x1F, 0x06, 0x11, 0x01, 0x67, 0x59, 0x1B, 0x43, 0x68, 0x4D, 0x09,
+  0xF3, 0x4B, 0xB0, 0xC0, 0x0F, 0xC0, 0x04, 0x00, 0x80, 0x28, 0x05, 0x01,
+  0x90, 0x22, 0x04, 0x21, 0xFC, 0x20, 0x88, 0x09, 0x01, 0x20, 0x10, 0xF9,
+  0x0A, 0x0C, 0x18, 0x30, 0xBF, 0x43, 0x83, 0x06, 0x1F, 0xE0, 0x1F, 0x18,
+  0x50, 0x08, 0x08, 0x04, 0x02, 0x01, 0x00, 0xC0, 0x20, 0x0C, 0x23, 0xF0,
+  0xFE, 0x20, 0xC8, 0x0A, 0x03, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0xE0,
+  0x28, 0x13, 0xF8, 0xFE, 0x08, 0x20, 0x83, 0xF8, 0x20, 0x82, 0x08, 0x3F,
+  0xFE, 0x08, 0x20, 0x83, 0xF8, 0x20, 0x82, 0x08, 0x20, 0x1F, 0x83, 0x0E,
+  0x40, 0x2C, 0x00, 0x80, 0x08, 0x00, 0x81, 0xF8, 0x01, 0xC0, 0x14, 0x02,
+  0x30, 0x40, 0xF8, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0F, 0xFE, 0x03, 0x01,
+  0x80, 0xC0, 0x60, 0x30, 0x10, 0xFF, 0xF0, 0x08, 0x42, 0x10, 0x84, 0x21,
+  0x08, 0x42, 0xE0, 0x83, 0x43, 0x23, 0x11, 0x09, 0x07, 0x02, 0x41, 0x30,
+  0x8C, 0x42, 0x20, 0x90, 0x20, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x21,
+  0xF0, 0x20, 0x20, 0xC0, 0xC3, 0x03, 0x0A, 0x14, 0x28, 0x50, 0xA1, 0x44,
+  0x49, 0x91, 0x26, 0x43, 0x09, 0x0C, 0x24, 0x20, 0xA0, 0x02, 0x00, 0x60,
+  0x1C, 0x06, 0x81, 0x90, 0x66, 0x18, 0xC6, 0x19, 0x83, 0x60, 0x78, 0x0E,
+  0x01, 0x0F, 0x81, 0x83, 0x18, 0x0C, 0x80, 0x28, 0x00, 0xC0, 0x06, 0x00,
+  0x30, 0x01, 0x40, 0x13, 0x01, 0x8C, 0x18, 0x1F, 0x00, 0xF9, 0x0E, 0x0C,
+  0x18, 0x30, 0xBE, 0x40, 0x81, 0x02, 0x04, 0x00, 0x0F, 0x81, 0x83, 0x10,
+  0x04, 0x80, 0x28, 0x00, 0xC0, 0x06, 0x00, 0x30, 0x01, 0x41, 0x9B, 0x06,
+  0x8C, 0x08, 0x1F, 0xE0, 0x01, 0x00, 0xFD, 0x0A, 0x0C, 0x18, 0x30, 0xFF,
+  0x70, 0xB1, 0x32, 0x34, 0x30, 0x7D, 0x8E, 0x04, 0x04, 0x06, 0x03, 0x01,
+  0x03, 0x07, 0x13, 0xC0, 0xFE, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10,
+  0x20, 0x40, 0x80, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01,
+  0x80, 0xC0, 0xD0, 0x47, 0xC0, 0x80, 0xB0, 0x24, 0x19, 0x04, 0x61, 0x08,
+  0x82, 0x20, 0x48, 0x14, 0x07, 0x00, 0x80, 0x20, 0xC1, 0x02, 0x83, 0x05,
+  0x06, 0x1B, 0x0C, 0x22, 0x2C, 0x44, 0x49, 0x8C, 0x92, 0x0A, 0x34, 0x1C,
+  0x38, 0x38, 0x60, 0x20, 0xC0, 0x40, 0x80, 0x41, 0x31, 0x08, 0x82, 0x81,
+  0x40, 0x40, 0x20, 0x28, 0x22, 0x11, 0x10, 0x58, 0x30, 0x80, 0xA0, 0x98,
+  0xC4, 0x41, 0x40, 0xA0, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x7F,
+  0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x60, 0x20, 0x20, 0x10, 0x10, 0x1F,
+  0xF0, 0xF2, 0x49, 0x24, 0x92, 0x49, 0x38, 0x40, 0x40, 0x20, 0x10, 0x10,
+  0x08, 0x0C, 0x04, 0x02, 0x02, 0x01, 0xE4, 0x92, 0x49, 0x24, 0x92, 0x78,
+  0x32, 0x96, 0x7F, 0xFE, 0xC8, 0x80, 0x3D, 0x43, 0x81, 0x81, 0x81, 0x43,
+  0x3D, 0x81, 0x02, 0x04, 0x08, 0x17, 0xB1, 0x41, 0x83, 0x07, 0x15, 0xC0,
+  0x3D, 0x08, 0x20, 0x81, 0x03, 0xC0, 0x02, 0x04, 0x08, 0x10, 0x27, 0x51,
+  0xC1, 0x83, 0x05, 0x19, 0xD0, 0x3C, 0x8E, 0x0F, 0xF8, 0x08, 0xCF, 0x00,
+  0x3A, 0x10, 0x84, 0x7D, 0x08, 0x42, 0x10, 0x80, 0x3D, 0x43, 0x81, 0x81,
+  0x81, 0x43, 0x3D, 0x01, 0x83, 0x7C, 0x82, 0x08, 0x20, 0x83, 0xEC, 0xE1,
+  0x86, 0x18, 0x61, 0x8F, 0xF0, 0x8F, 0xFE, 0x81, 0x02, 0x04, 0x08, 0x11,
+  0xA6, 0x58, 0xE1, 0x22, 0x24, 0x20, 0xFF, 0xF0, 0xF7, 0x46, 0x62, 0x31,
+  0x18, 0x8C, 0x46, 0x22, 0xBB, 0x18, 0x61, 0x86, 0x18, 0x40, 0x3C, 0x42,
+  0x81, 0x81, 0x81, 0x42, 0x3C, 0xB9, 0x8A, 0x0C, 0x18, 0x38, 0xAF, 0x40,
+  0x81, 0x00, 0x3A, 0x8E, 0x0C, 0x18, 0x28, 0xCE, 0x81, 0x02, 0x04, 0xBC,
+  0x88, 0x88, 0x80, 0x7A, 0x18, 0x1E, 0x04, 0x1F, 0x80, 0x49, 0x2E, 0x92,
+  0x49, 0x00, 0x86, 0x18, 0x61, 0x87, 0x37, 0x80, 0xC2, 0x42, 0x64, 0x24,
+  0x38, 0x18, 0x10, 0x44, 0x34, 0x62, 0x66, 0x62, 0x94, 0x29, 0x41, 0x08,
+  0x10, 0x80, 0x42, 0x24, 0x18, 0x18, 0x3C, 0x24, 0x42, 0x42, 0x62, 0x24,
+  0x24, 0x18, 0x18, 0x10, 0x10, 0x20, 0x20, 0xFC, 0x21, 0x08, 0x61, 0x0F,
+  0xC0, 0x74, 0x44, 0x44, 0x48, 0x44, 0x44, 0x44, 0x70, 0xFF, 0xE0, 0xE2,
+  0x22, 0x22, 0x21, 0x22, 0x22, 0x22, 0xE0, 0x71, 0x59, 0x86 };
+
+const GFXglyph FUTRFW8pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,  16,    0,    0 },   // 0x20 ' '
+  {     1,   1,  12,  16,    7,  -11 },   // 0x21 '!'
+  {     3,   4,   5,  16,    5,  -11 },   // 0x22 '"'
+  {     6,   8,  11,  16,    4,  -10 },   // 0x23 '#'
+  {    17,   8,  14,  16,    4,  -11 },   // 0x24 '$'
+  {    31,  13,  12,  16,    1,  -11 },   // 0x25 '%'
+  {    51,  10,  12,  16,    3,  -11 },   // 0x26 '&'
+  {    66,   1,   5,  16,    7,  -11 },   // 0x27 '''
+  {    67,   3,  15,  16,    6,  -11 },   // 0x28 '('
+  {    73,   3,  15,  16,    6,  -11 },   // 0x29 ')'
+  {    79,   5,   6,  16,    5,  -11 },   // 0x2A '*'
+  {    83,   7,   8,  16,    4,   -7 },   // 0x2B '+'
+  {    90,   3,   5,  16,    6,   -1 },   // 0x2C ','
+  {    92,   4,   1,  16,    6,   -3 },   // 0x2D '-'
+  {    93,   1,   1,  16,    4,    0 },   // 0x2E '.'
+  {    94,   7,  12,  16,    3,  -11 },   // 0x2F '/'
+  {   105,   7,  12,  16,    3,  -11 },   // 0x30 '0'
+  {   116,   4,  12,  16,    5,  -11 },   // 0x31 '1'
+  {   122,   7,  12,  16,    4,  -11 },   // 0x32 '2'
+  {   133,   7,  12,  16,    4,  -11 },   // 0x33 '3'
+  {   144,   8,  12,  16,    3,  -11 },   // 0x34 '4'
+  {   156,   7,  12,  16,    4,  -11 },   // 0x35 '5'
+  {   167,   7,  12,  16,    4,  -11 },   // 0x36 '6'
+  {   178,   7,  12,  16,    4,  -11 },   // 0x37 '7'
+  {   189,   7,  12,  16,    4,  -11 },   // 0x38 '8'
+  {   200,   7,  11,  16,    4,  -11 },   // 0x39 '9'
+  {   210,   2,   6,  16,    5,   -5 },   // 0x3A ':'
+  {   212,   3,   9,  16,    4,   -5 },   // 0x3B ';'
+  {   216,   8,   6,  16,    3,   -6 },   // 0x3C '<'
+  {   222,   8,   4,  16,    4,   -5 },   // 0x3D '='
+  {   226,   8,   6,  16,    4,   -6 },   // 0x3E '>'
+  {   232,   6,  12,  16,    5,  -11 },   // 0x3F '?'
+  {   241,  11,  12,  16,    2,  -11 },   // 0x40 '@'
+  {   258,  11,  12,  16,    2,  -11 },   // 0x41 'A'
+  {   275,   7,  12,  16,    4,  -11 },   // 0x42 'B'
+  {   286,   9,  12,  16,    2,  -11 },   // 0x43 'C'
+  {   300,  10,  12,  16,    3,  -11 },   // 0x44 'D'
+  {   315,   6,  12,  16,    4,  -11 },   // 0x45 'E'
+  {   324,   6,  12,  16,    5,  -11 },   // 0x46 'F'
+  {   333,  12,  12,  16,    2,  -11 },   // 0x47 'G'
+  {   351,   9,  12,  16,    3,  -11 },   // 0x48 'H'
+  {   365,   1,  12,  16,    7,  -11 },   // 0x49 'I'
+  {   367,   5,  12,  16,    4,  -11 },   // 0x4A 'J'
+  {   375,   9,  12,  16,    4,  -11 },   // 0x4B 'K'
+  {   389,   5,  12,  16,    4,  -11 },   // 0x4C 'L'
+  {   397,  14,  12,  16,    1,  -11 },   // 0x4D 'M'
+  {   418,  10,  12,  16,    3,  -11 },   // 0x4E 'N'
+  {   433,  13,  12,  16,    1,  -11 },   // 0x4F 'O'
+  {   453,   7,  12,  16,    5,  -11 },   // 0x50 'P'
+  {   464,  13,  13,  16,    2,  -11 },   // 0x51 'Q'
+  {   486,   7,  12,  16,    4,  -11 },   // 0x52 'R'
+  {   497,   7,  12,  16,    4,  -11 },   // 0x53 'S'
+  {   508,   7,  12,  16,    3,  -11 },   // 0x54 'T'
+  {   519,   9,  12,  16,    3,  -11 },   // 0x55 'U'
+  {   533,  10,  12,  16,    2,  -11 },   // 0x56 'V'
+  {   548,  15,  12,  16,    0,  -11 },   // 0x57 'W'
+  {   571,   9,  12,  16,    3,  -11 },   // 0x58 'X'
+  {   585,   9,  12,  16,    3,  -11 },   // 0x59 'Y'
+  {   599,   9,  12,  16,    3,  -11 },   // 0x5A 'Z'
+  {   613,   3,  15,  16,    6,  -11 },   // 0x5B '['
+  {   619,   8,  11,  16,    4,  -10 },   // 0x5C '\'
+  {   630,   3,  15,  16,    6,  -11 },   // 0x5D ']'
+  {   636,   5,   3,  16,    5,  -10 },   // 0x5E '^'
+  {   638,  16,   1,  16,    0,    1 },   // 0x5F '_'
+  {   640,   3,   3,  16,    5,  -10 },   // 0x60 '`'
+  {   642,   8,   7,  16,    4,   -6 },   // 0x61 'a'
+  {   649,   7,  12,  16,    4,  -11 },   // 0x62 'b'
+  {   660,   6,   7,  16,    4,   -6 },   // 0x63 'c'
+  {   666,   7,  12,  16,    3,  -11 },   // 0x64 'd'
+  {   677,   7,   7,  16,    4,   -6 },   // 0x65 'e'
+  {   684,   5,  12,  16,    5,  -11 },   // 0x66 'f'
+  {   692,   8,  10,  16,    4,   -6 },   // 0x67 'g'
+  {   702,   6,  12,  16,    5,  -11 },   // 0x68 'h'
+  {   711,   1,  12,  16,    7,  -11 },   // 0x69 'i'
+  {   713,   1,  15,  16,    7,  -11 },   // 0x6A 'j'
+  {   715,   7,  12,  16,    5,  -11 },   // 0x6B 'k'
+  {   726,   1,  12,  16,    7,  -11 },   // 0x6C 'l'
+  {   728,   9,   7,  16,    3,   -6 },   // 0x6D 'm'
+  {   736,   6,   7,  16,    5,   -6 },   // 0x6E 'n'
+  {   742,   8,   7,  16,    4,   -6 },   // 0x6F 'o'
+  {   749,   7,  10,  16,    4,   -6 },   // 0x70 'p'
+  {   758,   7,  10,  16,    4,   -6 },   // 0x71 'q'
+  {   767,   4,   7,  16,    6,   -6 },   // 0x72 'r'
+  {   771,   6,   7,  16,    5,   -6 },   // 0x73 's'
+  {   777,   3,  11,  16,    6,  -10 },   // 0x74 't'
+  {   782,   6,   7,  16,    5,   -6 },   // 0x75 'u'
+  {   788,   8,   7,  16,    4,   -6 },   // 0x76 'v'
+  {   795,  12,   7,  16,    2,   -6 },   // 0x77 'w'
+  {   806,   8,   7,  16,    4,   -6 },   // 0x78 'x'
+  {   813,   8,  10,  16,    4,   -6 },   // 0x79 'y'
+  {   823,   6,   7,  16,    4,   -6 },   // 0x7A 'z'
+  {   829,   4,  15,  16,    5,  -11 },   // 0x7B '{'
+  {   837,   1,  11,  16,    7,  -10 },   // 0x7C '|'
+  {   839,   4,  15,  16,    6,  -11 },   // 0x7D '}'
+  {   847,   8,   3,  16,    4,   -4 } }; // 0x7E '~'
+
+const GFXfont FUTRFW8pt7b PROGMEM = {
+  (uint8_t  *)FUTRFW8pt7bBitmaps,
+  (GFXglyph *)FUTRFW8pt7bGlyphs,
+  0x20, 0x7E, 20 };
+const uint8_t nk57_monospace_cd_rg9pt7bBitmaps[] PROGMEM = {
+  0x00, 0xDB, 0x64, 0x92, 0x48, 0x0D, 0xF0, 0x8C, 0x63, 0x18, 0xC4, 0x00,
+  0x12, 0x09, 0x0C, 0x86, 0x43, 0x23, 0xFC, 0x88, 0x44, 0x26, 0x7F, 0xBF,
+  0xC4, 0x82, 0x43, 0x21, 0x90, 0x08, 0x08, 0x3E, 0x7F, 0x63, 0x43, 0x40,
+  0x60, 0x1C, 0x03, 0x01, 0xC1, 0x41, 0x63, 0x7E, 0x18, 0x08, 0x08, 0x20,
+  0x78, 0x26, 0x11, 0x08, 0x8C, 0xCF, 0xC8, 0x48, 0x18, 0x11, 0x13, 0xD1,
+  0x30, 0x88, 0x44, 0x26, 0x1E, 0x07, 0x00, 0x3C, 0x1F, 0x18, 0x8C, 0x46,
+  0x21, 0x30, 0xF0, 0x30, 0x79, 0xA4, 0xB1, 0xD8, 0xCC, 0x63, 0xF8, 0xE6,
+  0xFC, 0x0C, 0x63, 0x0C, 0x61, 0x84, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C,
+  0x10, 0x61, 0x83, 0x0C, 0x18, 0x30, 0xC1, 0x82, 0x0C, 0x10, 0x61, 0x82,
+  0x0C, 0x30, 0xC3, 0x0C, 0x30, 0x86, 0x18, 0x43, 0x08, 0x63, 0x00, 0x10,
+  0x22, 0x5B, 0xE3, 0x0F, 0xA5, 0x88, 0x10, 0x08, 0x08, 0x08, 0x08, 0xFF,
+  0xFF, 0x08, 0x08, 0x08, 0xDF, 0xA5, 0x00, 0xFF, 0xF0, 0xDF, 0x00, 0x01,
+  0x80, 0x80, 0x40, 0x60, 0x20, 0x30, 0x18, 0x08, 0x0C, 0x04, 0x02, 0x03,
+  0x01, 0x01, 0x80, 0xC0, 0x40, 0x60, 0x20, 0x10, 0x18, 0x00, 0x38, 0xFB,
+  0x16, 0x28, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1E, 0x3C, 0x4F, 0x8E, 0x00,
+  0x10, 0x20, 0x47, 0x8F, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x81, 0x1F,
+  0xFF, 0x80, 0x79, 0xFA, 0x1C, 0x30, 0x60, 0xC1, 0x82, 0x0C, 0x10, 0x61,
+  0x86, 0x1F, 0xFF, 0x80, 0x79, 0xFA, 0x1C, 0x30, 0x60, 0xCF, 0x1E, 0x06,
+  0x0E, 0x0C, 0x3C, 0x7F, 0x9E, 0x00, 0x02, 0x06, 0x06, 0x0E, 0x1A, 0x12,
+  0x32, 0x22, 0x62, 0x42, 0xFF, 0xFF, 0x02, 0x02, 0x02, 0x7E, 0xFD, 0x06,
+  0x0C, 0x1F, 0xBF, 0x43, 0x06, 0x04, 0x0C, 0x38, 0x7F, 0x9E, 0x00, 0x3C,
+  0xFF, 0x1E, 0x38, 0x17, 0xBF, 0xC3, 0x83, 0x06, 0x0E, 0x3C, 0x6F, 0x9E,
+  0x00, 0xFF, 0xFC, 0x18, 0x20, 0xC1, 0x82, 0x0C, 0x18, 0x20, 0xC1, 0x83,
+  0x04, 0x18, 0x00, 0x3C, 0x7E, 0x63, 0x41, 0x41, 0x63, 0x3E, 0x3E, 0x63,
+  0x41, 0xC1, 0x41, 0x63, 0x7E, 0x3C, 0x3E, 0x7F, 0x63, 0x43, 0xC1, 0xC1,
+  0x41, 0x43, 0x63, 0x3F, 0x1A, 0x06, 0x04, 0x0C, 0x18, 0xDF, 0x00, 0x37,
+  0xC0, 0xDF, 0x00, 0x37, 0xE9, 0x40, 0x01, 0x03, 0x0E, 0x18, 0x70, 0xC0,
+  0xE0, 0x38, 0x1C, 0x07, 0x01, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF,
+  0xFF, 0x80, 0xE0, 0x30, 0x1C, 0x07, 0x01, 0x03, 0x0E, 0x38, 0x70, 0xC0,
+  0x80, 0x7D, 0xFE, 0x1C, 0x10, 0x20, 0xC1, 0x86, 0x18, 0x20, 0x40, 0x03,
+  0x07, 0x0C, 0x00, 0x3E, 0x7F, 0x41, 0x41, 0x4D, 0x4F, 0xD9, 0xD9, 0xD9,
+  0xC9, 0x4F, 0x45, 0x40, 0x41, 0x7F, 0x3E, 0x18, 0x1C, 0x1C, 0x14, 0x14,
+  0x34, 0x36, 0x26, 0x22, 0x22, 0x7E, 0x7F, 0x43, 0x43, 0xC1, 0xFD, 0xFE,
+  0x1C, 0x38, 0x70, 0xFF, 0x7E, 0x87, 0x06, 0x0C, 0x18, 0x7F, 0xFF, 0x00,
+  0x7D, 0xFF, 0x1E, 0x38, 0x10, 0x20, 0x40, 0x81, 0x02, 0x06, 0x3C, 0x7F,
+  0x9F, 0x00, 0xF9, 0xFA, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C,
+  0x38, 0x7F, 0xBE, 0x00, 0xFF, 0xFE, 0x04, 0x08, 0x10, 0x3F, 0xFF, 0x81,
+  0x02, 0x04, 0x08, 0x1F, 0xFF, 0x80, 0xFF, 0xFE, 0x04, 0x08, 0x10, 0x20,
+  0x7F, 0xFF, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x7D, 0xFF, 0x1E, 0x38,
+  0x10, 0x20, 0x47, 0x8F, 0x0E, 0x1E, 0x3C, 0x7F, 0xDC, 0x80, 0x87, 0x0E,
+  0x1C, 0x38, 0x70, 0xFF, 0xFF, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0x80,
+  0xFF, 0xFC, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x81, 0x1F,
+  0xFF, 0x80, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0E, 0x1C,
+  0x38, 0x7F, 0x9E, 0x00, 0x83, 0x86, 0x84, 0x8C, 0x98, 0x98, 0xB8, 0xAC,
+  0xEC, 0xC4, 0xC4, 0x86, 0x86, 0x86, 0x83, 0xC1, 0x83, 0x06, 0x0C, 0x18,
+  0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x1F, 0xFF, 0x80, 0xC1, 0xC3, 0xE3,
+  0xE3, 0xF5, 0xD5, 0xDD, 0xD9, 0xC9, 0xC9, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1,
+  0xC3, 0x87, 0x0F, 0x1E, 0x34, 0x6C, 0xC9, 0x9B, 0x16, 0x2C, 0x78, 0x70,
+  0xE0, 0x80, 0x7D, 0xFF, 0x1C, 0x38, 0x70, 0x60, 0xC1, 0x83, 0x06, 0x1C,
+  0x3C, 0x7F, 0xDF, 0x00, 0xFD, 0xFE, 0x1C, 0x18, 0x30, 0x60, 0xC3, 0xFF,
+  0xFA, 0x04, 0x08, 0x10, 0x20, 0x00, 0x7D, 0xFF, 0x1C, 0x38, 0x30, 0x60,
+  0xC1, 0x83, 0x06, 0x0C, 0x3C, 0x7F, 0xDF, 0x04, 0x08, 0x1C, 0x18, 0xFC,
+  0xFE, 0x86, 0x82, 0x82, 0x82, 0x86, 0xFE, 0xFC, 0x98, 0x88, 0x8C, 0x84,
+  0x86, 0x83, 0x3E, 0x7F, 0x43, 0xC3, 0x40, 0x60, 0x7C, 0x1E, 0x03, 0x03,
+  0x01, 0xC3, 0x43, 0x7E, 0x3C, 0xFF, 0xFF, 0x08, 0x08, 0x08, 0x08, 0x08,
+  0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x87, 0x0E, 0x1C, 0x38,
+  0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x3C, 0x7F, 0xDF, 0x00, 0xC1, 0x43,
+  0x63, 0x63, 0x62, 0x62, 0x26, 0x26, 0x36, 0x34, 0x14, 0x1C, 0x1C, 0x18,
+  0x18, 0xC1, 0xE0, 0xF2, 0x79, 0x2D, 0x96, 0xC9, 0x74, 0xAA, 0x55, 0x2A,
+  0x99, 0xCC, 0xE6, 0x33, 0x19, 0x8C, 0x63, 0x31, 0x8C, 0x86, 0xC1, 0x40,
+  0xE0, 0x70, 0x38, 0x1C, 0x1A, 0x0D, 0x84, 0xC6, 0x32, 0x1B, 0x06, 0xC1,
+  0xB1, 0x98, 0xC6, 0xC3, 0x60, 0xE0, 0x70, 0x10, 0x08, 0x04, 0x02, 0x01,
+  0x00, 0x80, 0x40, 0x20, 0xFF, 0xFC, 0x10, 0x60, 0xC3, 0x06, 0x18, 0x30,
+  0x41, 0x83, 0x0C, 0x1F, 0xFF, 0x80, 0xFF, 0xE1, 0x08, 0x42, 0x10, 0x84,
+  0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0x0F, 0xFC, 0xC0, 0x60, 0x10, 0x0C,
+  0x06, 0x01, 0x00, 0xC0, 0x20, 0x10, 0x0C, 0x02, 0x01, 0x80, 0xC0, 0x20,
+  0x18, 0x04, 0x02, 0x01, 0x80, 0x40, 0x30, 0xFF, 0xF0, 0xC3, 0x0C, 0x30,
+  0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0xFF, 0xF0,
+  0x18, 0x0E, 0x05, 0x06, 0x82, 0x63, 0x11, 0x8D, 0x83, 0xFF, 0xFF, 0xC0,
+  0xE2, 0x10, 0x79, 0xFB, 0x18, 0x33, 0xFC, 0xE1, 0xC3, 0xFE, 0xEC, 0xC1,
+  0x83, 0x06, 0x0C, 0x1B, 0xBF, 0x63, 0xC7, 0x8F, 0x1E, 0x3C, 0x7F, 0xF7,
+  0x00, 0x7D, 0xFF, 0x1E, 0x38, 0x10, 0x30, 0x63, 0xFC, 0xF8, 0x06, 0x0C,
+  0x18, 0x30, 0x6E, 0xFF, 0xE3, 0x87, 0x0E, 0x1C, 0x3C, 0x7F, 0xDD, 0x80,
+  0x78, 0xFB, 0x1C, 0x3F, 0xFF, 0xE0, 0x63, 0xFC, 0xF8, 0x1E, 0x3F, 0x21,
+  0x20, 0x20, 0xFF, 0xFF, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+  0x01, 0x81, 0xC0, 0x87, 0xC7, 0xF3, 0x19, 0x0C, 0xC6, 0x7F, 0x1F, 0x18,
+  0x0F, 0xC7, 0xF2, 0x0F, 0x07, 0xFE, 0x7F, 0x00, 0xC1, 0x83, 0x06, 0x0C,
+  0x1B, 0xBF, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0x80, 0x31, 0xC3,
+  0x00, 0xE3, 0x82, 0x08, 0x20, 0x82, 0x08, 0xFF, 0xF0, 0x0C, 0x30, 0xC0,
+  0x3C, 0xF0, 0x41, 0x04, 0x10, 0x41, 0x04, 0x18, 0x61, 0xFD, 0xE0, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xC0, 0xC7, 0xCC, 0xD8, 0xD8, 0xEC, 0xEC, 0xC4, 0xC6,
+  0xC6, 0xC3, 0xF3, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x33,
+  0xFF, 0xC0, 0xF3, 0x7F, 0xB2, 0x79, 0x3C, 0x9E, 0x4F, 0x27, 0x93, 0xC9,
+  0xE4, 0xC0, 0xDD, 0xFF, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8C, 0x79,
+  0xFB, 0x1E, 0x38, 0x70, 0xF1, 0xE3, 0xFC, 0xF0, 0xFD, 0xFB, 0x1E, 0x3C,
+  0x78, 0xF1, 0xE3, 0xFD, 0xBB, 0x06, 0x0C, 0x18, 0x00, 0x77, 0xFF, 0x1C,
+  0x38, 0x70, 0xE1, 0xE3, 0xFE, 0xEC, 0x18, 0x30, 0x60, 0xC0, 0xDD, 0xFF,
+  0x8E, 0x1C, 0x18, 0x30, 0x60, 0xC1, 0x80, 0x79, 0xFA, 0x14, 0x07, 0x81,
+  0xC1, 0xC3, 0xFC, 0xF0, 0x20, 0x20, 0x20, 0xFF, 0xFF, 0x20, 0x20, 0x20,
+  0x20, 0x21, 0x21, 0x37, 0x1E, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3,
+  0xFE, 0xEC, 0xC1, 0x43, 0x63, 0x62, 0x26, 0x36, 0x34, 0x1C, 0x1C, 0x18,
+  0xC1, 0xE0, 0xF2, 0x49, 0x25, 0x92, 0xA9, 0x5C, 0xCE, 0x67, 0x31, 0x00,
+  0x63, 0x11, 0x0D, 0x83, 0x81, 0x80, 0xE0, 0xD0, 0x4C, 0x63, 0x60, 0xC0,
+  0xC1, 0x63, 0x62, 0x26, 0x36, 0x3C, 0x1C, 0x18, 0x18, 0x10, 0x30, 0x30,
+  0x20, 0x60, 0xFF, 0xFC, 0x30, 0xC1, 0x86, 0x18, 0x20, 0xFF, 0xFC, 0x1E,
+  0x3C, 0xC0, 0x81, 0x02, 0x06, 0x0C, 0x18, 0x33, 0xE7, 0x81, 0x83, 0x06,
+  0x0C, 0x18, 0x20, 0x41, 0x81, 0xE3, 0xC0, 0xFF, 0xFF, 0xFC, 0xF8, 0xF8,
+  0x08, 0x08, 0x18, 0x18, 0x18, 0x10, 0x10, 0x10, 0x1F, 0x1F, 0x10, 0x10,
+  0x10, 0x18, 0x18, 0x18, 0x08, 0x08, 0xF8, 0xF8, 0x71, 0xDF, 0x87 };
+
+const GFXglyph nk57_monospace_cd_rg9pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   9,    0,    0 },   // 0x20 ' '
+  {     1,   3,  15,   9,    3,  -14 },   // 0x21 '!'
+  {     7,   5,   7,   9,    2,  -14 },   // 0x22 '"'
+  {    12,   9,  15,   9,    0,  -14 },   // 0x23 '#'
+  {    29,   8,  18,   9,    0,  -15 },   // 0x24 '$'
+  {    47,   9,  17,   9,    0,  -15 },   // 0x25 '%'
+  {    67,   9,  15,   9,    0,  -14 },   // 0x26 '&'
+  {    84,   1,   6,   9,    4,  -14 },   // 0x27 '''
+  {    85,   6,  22,   9,    2,  -17 },   // 0x28 '('
+  {   102,   6,  22,   9,    1,  -17 },   // 0x29 ')'
+  {   119,   7,   9,   9,    1,  -14 },   // 0x2A '*'
+  {   127,   8,   9,   9,    0,  -11 },   // 0x2B '+'
+  {   136,   3,   6,   9,    3,   -2 },   // 0x2C ','
+  {   139,   6,   2,   9,    1,   -6 },   // 0x2D '-'
+  {   141,   3,   3,   9,    3,   -2 },   // 0x2E '.'
+  {   143,   9,  20,   9,    0,  -16 },   // 0x2F '/'
+  {   166,   7,  15,   9,    1,  -14 },   // 0x30 '0'
+  {   180,   7,  15,   9,    1,  -14 },   // 0x31 '1'
+  {   194,   7,  15,   9,    1,  -14 },   // 0x32 '2'
+  {   208,   7,  15,   9,    1,  -14 },   // 0x33 '3'
+  {   222,   8,  15,   9,    0,  -14 },   // 0x34 '4'
+  {   237,   7,  15,   9,    1,  -14 },   // 0x35 '5'
+  {   251,   7,  15,   9,    1,  -14 },   // 0x36 '6'
+  {   265,   7,  15,   9,    1,  -14 },   // 0x37 '7'
+  {   279,   8,  15,   9,    0,  -14 },   // 0x38 '8'
+  {   294,   8,  15,   9,    0,  -14 },   // 0x39 '9'
+  {   309,   3,   9,   9,    3,   -8 },   // 0x3A ':'
+  {   313,   3,  12,   9,    3,   -9 },   // 0x3B ';'
+  {   318,   8,  12,   9,    0,  -12 },   // 0x3C '<'
+  {   330,   8,   7,   9,    0,  -10 },   // 0x3D '='
+  {   337,   8,  12,   9,    0,  -12 },   // 0x3E '>'
+  {   349,   7,  15,   9,    1,  -14 },   // 0x3F '?'
+  {   363,   8,  16,   9,    0,  -12 },   // 0x40 '@'
+  {   379,   8,  15,   9,    0,  -14 },   // 0x41 'A'
+  {   394,   7,  15,   9,    1,  -14 },   // 0x42 'B'
+  {   408,   7,  15,   9,    1,  -14 },   // 0x43 'C'
+  {   422,   7,  15,   9,    1,  -14 },   // 0x44 'D'
+  {   436,   7,  15,   9,    1,  -14 },   // 0x45 'E'
+  {   450,   7,  15,   9,    1,  -14 },   // 0x46 'F'
+  {   464,   7,  15,   9,    1,  -14 },   // 0x47 'G'
+  {   478,   7,  15,   9,    1,  -14 },   // 0x48 'H'
+  {   492,   7,  15,   9,    1,  -14 },   // 0x49 'I'
+  {   506,   7,  15,   9,    1,  -14 },   // 0x4A 'J'
+  {   520,   8,  15,   9,    1,  -14 },   // 0x4B 'K'
+  {   535,   7,  15,   9,    1,  -14 },   // 0x4C 'L'
+  {   549,   8,  15,   9,    0,  -14 },   // 0x4D 'M'
+  {   564,   7,  15,   9,    1,  -14 },   // 0x4E 'N'
+  {   578,   7,  15,   9,    1,  -14 },   // 0x4F 'O'
+  {   592,   7,  15,   9,    1,  -14 },   // 0x50 'P'
+  {   606,   7,  19,   9,    1,  -14 },   // 0x51 'Q'
+  {   623,   8,  15,   9,    1,  -14 },   // 0x52 'R'
+  {   638,   8,  15,   9,    0,  -14 },   // 0x53 'S'
+  {   653,   8,  15,   9,    0,  -14 },   // 0x54 'T'
+  {   668,   7,  15,   9,    1,  -14 },   // 0x55 'U'
+  {   682,   8,  15,   9,    0,  -14 },   // 0x56 'V'
+  {   697,   9,  15,   9,    0,  -14 },   // 0x57 'W'
+  {   714,   9,  15,   9,    0,  -14 },   // 0x58 'X'
+  {   731,   9,  15,   9,    0,  -14 },   // 0x59 'Y'
+  {   748,   7,  15,   9,    1,  -14 },   // 0x5A 'Z'
+  {   762,   5,  22,   9,    3,  -17 },   // 0x5B '['
+  {   776,   9,  20,   9,    0,  -16 },   // 0x5C '\'
+  {   799,   6,  22,   9,    0,  -17 },   // 0x5D ']'
+  {   816,   9,   8,   9,    0,  -14 },   // 0x5E '^'
+  {   825,   9,   2,   9,    0,    2 },   // 0x5F '_'
+  {   828,   4,   3,   9,    2,  -13 },   // 0x60 '`'
+  {   830,   7,  10,   9,    1,   -9 },   // 0x61 'a'
+  {   839,   7,  15,   9,    1,  -14 },   // 0x62 'b'
+  {   853,   7,  10,   9,    1,   -9 },   // 0x63 'c'
+  {   862,   7,  15,   9,    1,  -14 },   // 0x64 'd'
+  {   876,   7,  10,   9,    1,   -9 },   // 0x65 'e'
+  {   885,   8,  15,   9,    0,  -14 },   // 0x66 'f'
+  {   900,   9,  17,   9,    0,  -12 },   // 0x67 'g'
+  {   920,   7,  15,   9,    1,  -14 },   // 0x68 'h'
+  {   934,   6,  14,   9,    2,  -13 },   // 0x69 'i'
+  {   945,   6,  18,   9,    1,  -13 },   // 0x6A 'j'
+  {   959,   8,  15,   9,    1,  -14 },   // 0x6B 'k'
+  {   974,   6,  15,   9,    2,  -14 },   // 0x6C 'l'
+  {   986,   9,  10,   9,    0,   -9 },   // 0x6D 'm'
+  {   998,   7,  10,   9,    1,   -9 },   // 0x6E 'n'
+  {  1007,   7,  10,   9,    1,   -9 },   // 0x6F 'o'
+  {  1016,   7,  14,   9,    1,   -9 },   // 0x70 'p'
+  {  1029,   7,  14,   9,    1,   -9 },   // 0x71 'q'
+  {  1042,   7,  10,   9,    1,   -9 },   // 0x72 'r'
+  {  1051,   7,  10,   9,    1,   -9 },   // 0x73 's'
+  {  1060,   8,  13,   9,    0,  -12 },   // 0x74 't'
+  {  1073,   7,  10,   9,    1,   -9 },   // 0x75 'u'
+  {  1082,   8,  10,   9,    0,   -9 },   // 0x76 'v'
+  {  1092,   9,  10,   9,    0,   -9 },   // 0x77 'w'
+  {  1104,   9,  10,   9,    0,   -9 },   // 0x78 'x'
+  {  1116,   8,  14,   9,    0,   -9 },   // 0x79 'y'
+  {  1130,   7,  10,   9,    1,   -9 },   // 0x7A 'z'
+  {  1139,   7,  22,   9,    1,  -17 },   // 0x7B '{'
+  {  1159,   1,  22,   9,    4,  -17 },   // 0x7C '|'
+  {  1162,   8,  22,   9,    0,  -17 },   // 0x7D '}'
+  {  1184,   8,   3,   9,    0,   -8 } }; // 0x7E '~'
+
+const GFXfont nk57_monospace_cd_rg9pt7b PROGMEM = {
+  (uint8_t  *)nk57_monospace_cd_rg9pt7bBitmaps,
+  (GFXglyph *)nk57_monospace_cd_rg9pt7bGlyphs,
+  0x20, 0x7E, 21 };
+
+// Approx. 1859 bytes
+
+const uint8_t nk57_monospace_no_rg9pt7bBitmaps[] PROGMEM = {
+  0x00, 0xDB, 0x6D, 0xB6, 0xD8, 0x0D, 0xF0, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
+  0xC3, 0x00, 0x08, 0x40, 0x84, 0x08, 0xC1, 0x8C, 0x18, 0xC7, 0xFF, 0x18,
+  0x81, 0x08, 0x10, 0x8F, 0xFE, 0xFF, 0xE3, 0x18, 0x31, 0x83, 0x18, 0x21,
+  0x00, 0x0C, 0x01, 0x80, 0xFE, 0x7F, 0xEC, 0x0D, 0x81, 0xB0, 0x07, 0x00,
+  0x3F, 0x00, 0x78, 0x03, 0x00, 0x3C, 0x05, 0x81, 0xBF, 0xF1, 0xF8, 0x0C,
+  0x01, 0x80, 0x18, 0x07, 0xE0, 0x62, 0x04, 0x20, 0x42, 0x16, 0x23, 0x7E,
+  0xC1, 0xB0, 0x06, 0x01, 0x98, 0x67, 0xE8, 0x62, 0x04, 0x20, 0x42, 0x04,
+  0x20, 0x7E, 0x03, 0xC0, 0x1F, 0x03, 0xFC, 0x30, 0xC2, 0x0C, 0x20, 0xC3,
+  0x18, 0x1F, 0x00, 0xE0, 0x36, 0x36, 0x22, 0xC1, 0x6C, 0x1C, 0xE0, 0xC7,
+  0xFE, 0x3E, 0x30, 0xFF, 0xF0, 0x07, 0x0C, 0x18, 0x30, 0x30, 0x60, 0x60,
+  0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x60, 0x60, 0x30, 0x30,
+  0x18, 0x0C, 0x07, 0xE0, 0x30, 0x18, 0x0C, 0x0E, 0x06, 0x07, 0x03, 0x03,
+  0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x06, 0x0E, 0x0C, 0x18, 0x30,
+  0xE0, 0x0C, 0x03, 0x04, 0xCB, 0xFF, 0x1E, 0x07, 0x8F, 0x7D, 0x32, 0x0C,
+  0x03, 0x00, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x0F, 0xFF, 0xFF, 0xC3, 0x00,
+  0x60, 0x0C, 0x00, 0xDF, 0xAD, 0x00, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x30,
+  0x03, 0x00, 0x60, 0x06, 0x00, 0xC0, 0x0C, 0x01, 0x80, 0x10, 0x03, 0x00,
+  0x20, 0x06, 0x00, 0x40, 0x0C, 0x01, 0x80, 0x18, 0x03, 0x00, 0x30, 0x06,
+  0x00, 0x60, 0x0C, 0x00, 0x1E, 0x0F, 0xC6, 0x1B, 0x06, 0xC0, 0xF0, 0x3C,
+  0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0D, 0x06, 0x61, 0x8F, 0xC1, 0xE0, 0x04,
+  0x03, 0x00, 0xC1, 0xF0, 0x7C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00,
+  0xC0, 0x30, 0x0C, 0x3F, 0xFF, 0xFC, 0x3F, 0x3F, 0xEC, 0x0F, 0x03, 0x00,
+  0xC0, 0x30, 0x0C, 0x06, 0x03, 0x81, 0xC0, 0xE0, 0x60, 0x30, 0x3F, 0xFF,
+  0xFC, 0x3F, 0x3F, 0xEC, 0x0F, 0x03, 0x00, 0xC0, 0x31, 0xF8, 0x7E, 0x00,
+  0xC0, 0x3C, 0x0F, 0x03, 0xC0, 0xDF, 0xE3, 0xF0, 0x01, 0x80, 0x70, 0x0E,
+  0x03, 0xC0, 0xD8, 0x33, 0x0C, 0x61, 0x0C, 0x61, 0x98, 0x33, 0xFF, 0xFF,
+  0xF0, 0x18, 0x03, 0x00, 0x60, 0x7F, 0xDF, 0xF6, 0x01, 0x80, 0x60, 0x17,
+  0xC7, 0xFB, 0x03, 0x00, 0xC0, 0x30, 0x0F, 0x03, 0xC0, 0xDF, 0xE3, 0xF0,
+  0x1F, 0x8F, 0xF6, 0x0D, 0x03, 0xC0, 0x37, 0xCF, 0xFF, 0x03, 0xC0, 0xF0,
+  0x1C, 0x07, 0x03, 0x60, 0xDF, 0xE3, 0xF0, 0xFF, 0xFF, 0xF0, 0x0C, 0x06,
+  0x01, 0x80, 0xC0, 0x30, 0x18, 0x06, 0x01, 0x80, 0xC0, 0x30, 0x18, 0x06,
+  0x03, 0x00, 0x3F, 0x1F, 0xEC, 0x0F, 0x03, 0xC0, 0xF0, 0x37, 0xF9, 0xFE,
+  0xE1, 0xF0, 0x3C, 0x07, 0x03, 0xC0, 0xDF, 0xE3, 0xF0, 0x3F, 0x1F, 0xEC,
+  0x0F, 0x03, 0xC0, 0x70, 0x1C, 0x0F, 0x03, 0xE1, 0xDF, 0xF1, 0x98, 0x0C,
+  0x03, 0x01, 0x81, 0xC0, 0xDF, 0x00, 0x37, 0xC0, 0xDF, 0x00, 0x37, 0xEB,
+  0x40, 0x00, 0x60, 0x3C, 0x1E, 0x0E, 0x0F, 0x01, 0x80, 0x38, 0x01, 0xC0,
+  0x0F, 0x00, 0x78, 0x03, 0x80, 0x10, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00,
+  0x01, 0xFF, 0xFF, 0xF8, 0x80, 0x1C, 0x01, 0xE0, 0x07, 0x00, 0x3C, 0x01,
+  0xC0, 0x78, 0x38, 0x3C, 0x1E, 0x03, 0x00, 0x40, 0x00, 0x3F, 0x3F, 0xFC,
+  0x0F, 0x03, 0x00, 0xC0, 0x30, 0x1C, 0x0C, 0x06, 0x03, 0x00, 0xC0, 0x00,
+  0x0C, 0x03, 0x80, 0xC0, 0x3F, 0x0F, 0xFB, 0x03, 0x60, 0x28, 0x75, 0x1F,
+  0xA2, 0x14, 0x42, 0x88, 0x51, 0x8A, 0x3F, 0x43, 0x2C, 0x01, 0x80, 0x5F,
+  0xF9, 0xFC, 0x06, 0x00, 0x70, 0x0F, 0x00, 0xF0, 0x0D, 0x81, 0x98, 0x19,
+  0x81, 0x88, 0x30, 0xC3, 0x0C, 0x3F, 0xC3, 0xFE, 0x60, 0x66, 0x06, 0xC0,
+  0x30, 0xFF, 0x1F, 0xFB, 0x03, 0x60, 0x6C, 0x0D, 0x81, 0xBF, 0xE7, 0xFC,
+  0xC0, 0xD8, 0x1B, 0x01, 0xE0, 0x3C, 0x0D, 0xFF, 0xBF, 0xE0, 0x3F, 0x9F,
+  0xFE, 0x0F, 0x03, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03,
+  0x03, 0xE0, 0xDF, 0xE3, 0xF0, 0xFF, 0x3F, 0xEC, 0x1F, 0x03, 0xC0, 0xF0,
+  0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC1, 0xFF, 0xEF, 0xF0,
+  0xFF, 0xFF, 0xFC, 0x03, 0x00, 0xC0, 0x30, 0x0F, 0xFF, 0xFF, 0xC0, 0x30,
+  0x0C, 0x03, 0x00, 0xC0, 0x3F, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0x03, 0x00,
+  0xC0, 0x30, 0x0C, 0x03, 0xFF, 0xFF, 0xF0, 0x0C, 0x03, 0x00, 0xC0, 0x30,
+  0x0C, 0x00, 0x3F, 0x9F, 0xFE, 0x0F, 0x03, 0xC0, 0x30, 0x0C, 0x03, 0x1F,
+  0xC7, 0xF0, 0x3C, 0x0F, 0x03, 0xE1, 0xDF, 0xD3, 0xE4, 0xC0, 0xF0, 0x3C,
+  0x0F, 0x03, 0xC0, 0xF0, 0x3F, 0xFF, 0xFF, 0xC0, 0xF0, 0x3C, 0x0F, 0x03,
+  0xC0, 0xF0, 0x3C, 0x0C, 0xFF, 0xFF, 0xF0, 0xC0, 0x30, 0x0C, 0x03, 0x00,
+  0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x3F, 0xFF, 0xFC, 0x00,
+  0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x3C,
+  0x0F, 0x03, 0xC1, 0xDF, 0xE3, 0xF0, 0xC0, 0xF8, 0x1B, 0x06, 0x61, 0x8C,
+  0x61, 0x9C, 0x33, 0xC6, 0xD8, 0xF3, 0x9C, 0x33, 0x06, 0x60, 0x6C, 0x0D,
+  0x81, 0xB0, 0x18, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03,
+  0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x3F, 0xFF, 0xFC, 0xC0, 0x78,
+  0x1F, 0x83, 0xD0, 0xFB, 0x37, 0x26, 0xE7, 0x9C, 0x73, 0x8C, 0x70, 0x8E,
+  0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x18, 0xC0, 0xF8, 0x3E, 0x0F, 0xC3,
+  0xF8, 0xF6, 0x3C, 0xCF, 0x33, 0xC6, 0xF1, 0xBC, 0x3F, 0x07, 0xC1, 0xF0,
+  0x3C, 0x0C, 0x3F, 0x9F, 0xFC, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03,
+  0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xDF, 0xF3, 0xF8, 0xFF, 0x9F, 0xFB,
+  0x03, 0x60, 0x6C, 0x07, 0x80, 0xF0, 0x36, 0x06, 0xFF, 0xDF, 0xF3, 0x00,
+  0x60, 0x0C, 0x01, 0x80, 0x30, 0x00, 0x3F, 0x0F, 0xF3, 0x03, 0x60, 0x6C,
+  0x0D, 0x81, 0xB0, 0x36, 0x06, 0xC0, 0xD8, 0x1B, 0x03, 0x60, 0x6C, 0x0C,
+  0xFF, 0x8F, 0xC0, 0x10, 0x02, 0x00, 0x7C, 0x07, 0x80, 0xFF, 0x9F, 0xFB,
+  0x03, 0x60, 0x3C, 0x07, 0x80, 0xF0, 0x37, 0xFE, 0xFF, 0x98, 0xC3, 0x0C,
+  0x61, 0xCC, 0x19, 0x81, 0xB0, 0x38, 0x3F, 0x9F, 0xFC, 0x0F, 0x03, 0xC0,
+  0x38, 0x07, 0xE0, 0x7E, 0x01, 0xC0, 0x30, 0x0F, 0x03, 0xC0, 0xFF, 0xE3,
+  0xF0, 0xFF, 0xFF, 0xFC, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x60,
+  0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x03, 0x00, 0xC0, 0xF0,
+  0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F,
+  0x03, 0xC0, 0xDF, 0xF3, 0xF8, 0xE0, 0x36, 0x06, 0x60, 0x63, 0x06, 0x30,
+  0xC3, 0x0C, 0x30, 0xC1, 0x88, 0x19, 0x81, 0x98, 0x0D, 0x00, 0xF0, 0x0F,
+  0x00, 0x70, 0x06, 0x00, 0xC0, 0x3C, 0x03, 0xC6, 0x3C, 0x63, 0x46, 0x34,
+  0x73, 0x6F, 0x26, 0x92, 0x69, 0x66, 0x9E, 0x79, 0xE7, 0x0E, 0x30, 0xE3,
+  0x0E, 0x30, 0xC0, 0x70, 0x73, 0x06, 0x38, 0xC1, 0x9C, 0x0D, 0x80, 0xF0,
+  0x07, 0x00, 0x70, 0x0F, 0x01, 0xD8, 0x19, 0x83, 0x0C, 0x30, 0xE6, 0x06,
+  0xE0, 0x70, 0xE0, 0x36, 0x06, 0x30, 0xC1, 0x8C, 0x19, 0x80, 0xF0, 0x07,
+  0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06,
+  0x00, 0xFF, 0xFF, 0xF0, 0x18, 0x0E, 0x03, 0x01, 0x80, 0x60, 0x30, 0x1C,
+  0x06, 0x03, 0x01, 0xC0, 0x60, 0x3F, 0xFF, 0xFC, 0xFF, 0xFF, 0xC0, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xC0, 0x04, 0x00, 0x60, 0x02, 0x00,
+  0x30, 0x01, 0x00, 0x18, 0x00, 0xC0, 0x0C, 0x00, 0x60, 0x06, 0x00, 0x30,
+  0x03, 0x00, 0x18, 0x01, 0x80, 0x0C, 0x00, 0x40, 0x06, 0x00, 0x20, 0x03,
+  0xFF, 0xFF, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+  0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0x06, 0x00,
+  0xF0, 0x0D, 0x01, 0x98, 0x18, 0xC3, 0x0C, 0x60, 0x6E, 0x07, 0xFF, 0xFF,
+  0xFF, 0xE0, 0xC0, 0xC0, 0x3F, 0x0F, 0xF1, 0x02, 0x00, 0x61, 0xFC, 0xF1,
+  0xB0, 0x36, 0x0E, 0xFF, 0xEF, 0x9C, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0,
+  0x33, 0xCF, 0xFB, 0x83, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xE0, 0xFF, 0xEC,
+  0xF0, 0x3F, 0x1F, 0xF6, 0x0F, 0x03, 0xC0, 0x30, 0x0C, 0x01, 0x83, 0x7F,
+  0x8F, 0xC0, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xCF, 0x37, 0xFF, 0x87,
+  0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xE1, 0xDF, 0xF3, 0xEC, 0x3F, 0x1F, 0xE6,
+  0x0F, 0x03, 0xFF, 0xFF, 0xFC, 0x01, 0x83, 0x7F, 0x8F, 0xC0, 0x0F, 0xC3,
+  0xFC, 0xC1, 0x98, 0x03, 0x01, 0xFF, 0xFF, 0xF9, 0x80, 0x30, 0x06, 0x00,
+  0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x00, 0x00, 0x70, 0x0F, 0x00, 0x81,
+  0xF8, 0x3F, 0xC6, 0x06, 0x60, 0x66, 0x06, 0x3F, 0xE1, 0xF8, 0x30, 0x07,
+  0xFC, 0x7F, 0xF4, 0x03, 0xC0, 0x3F, 0xFF, 0x7F, 0xE0, 0xC0, 0x30, 0x0C,
+  0x03, 0x00, 0xC0, 0x33, 0xEF, 0xFB, 0x83, 0xC0, 0xF0, 0x3C, 0x0F, 0x03,
+  0xC0, 0xF0, 0x3C, 0x0C, 0x1C, 0x0E, 0x07, 0x00, 0x0F, 0x87, 0xC0, 0x60,
+  0x30, 0x18, 0x0C, 0x06, 0x03, 0x0F, 0xFF, 0xFC, 0x01, 0x81, 0xC0, 0x60,
+  0x01, 0xF8, 0xFC, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0F,
+  0x07, 0x83, 0x7F, 0x9F, 0x80, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01,
+  0x81, 0xF0, 0x66, 0x38, 0xCF, 0x1B, 0x63, 0xC6, 0x60, 0xCC, 0x0D, 0x81,
+  0xB0, 0x18, 0xFC, 0x7E, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
+  0x06, 0x03, 0x01, 0x80, 0xC7, 0xFF, 0xFE, 0xDC, 0xEF, 0xFF, 0xC6, 0x3C,
+  0x63, 0xC6, 0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xCF, 0xBF,
+  0xEE, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x30, 0x3F,
+  0x1F, 0xE6, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0D, 0x83, 0x7F, 0x8F, 0xC0,
+  0xCF, 0x3F, 0xEE, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x83, 0xDF, 0xB3,
+  0xEC, 0x03, 0x00, 0xC0, 0x30, 0x00, 0x3C, 0xDF, 0xFE, 0x1F, 0x03, 0xC0,
+  0xF0, 0x3C, 0x0F, 0x87, 0x7F, 0xCF, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30,
+  0xC7, 0xB7, 0xFF, 0x07, 0x81, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30,
+  0x00, 0x3F, 0x1F, 0xEC, 0x0B, 0x00, 0x7F, 0x00, 0xE0, 0x0F, 0x03, 0x73,
+  0x8F, 0xC0, 0x30, 0x06, 0x00, 0xC0, 0x7F, 0xFF, 0xFE, 0x60, 0x0C, 0x01,
+  0x80, 0x30, 0x06, 0x0C, 0xC1, 0x8F, 0xF0, 0xFC, 0xC0, 0xF0, 0x3C, 0x0F,
+  0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x07, 0x7F, 0xCF, 0x30, 0xE0, 0x36, 0x06,
+  0x30, 0x63, 0x0C, 0x10, 0xC1, 0x98, 0x19, 0x80, 0xF0, 0x0F, 0x00, 0x60,
+  0xC0, 0x3C, 0x63, 0x46, 0x34, 0x62, 0x6F, 0x66, 0x96, 0x69, 0x63, 0x9E,
+  0x30, 0xC3, 0x0C, 0x70, 0x73, 0x8C, 0x19, 0x80, 0xF0, 0x07, 0x00, 0xF0,
+  0x19, 0x83, 0x8C, 0x70, 0xEE, 0x07, 0xE0, 0x76, 0x06, 0x30, 0xC3, 0x0C,
+  0x19, 0x81, 0xB0, 0x0F, 0x00, 0x60, 0x06, 0x00, 0xC0, 0x18, 0x01, 0x80,
+  0x30, 0x07, 0x00, 0xFF, 0xFF, 0xF0, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81,
+  0xC0, 0xFF, 0xFF, 0xF0, 0x07, 0xE1, 0xFC, 0x30, 0x06, 0x00, 0xC0, 0x18,
+  0x01, 0x80, 0x30, 0x06, 0x00, 0xC3, 0xF8, 0x7F, 0x00, 0x60, 0x0C, 0x01,
+  0x80, 0x30, 0x06, 0x01, 0x80, 0x30, 0x06, 0x00, 0xFE, 0x0F, 0xC0, 0xFF,
+  0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF8, 0x3F, 0x00, 0xC0, 0x30, 0x0C, 0x03,
+  0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0xFC, 0x3F, 0x18, 0x06, 0x01, 0x80,
+  0x60, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0xFC, 0x3E, 0x00, 0x78, 0x3B, 0xFE,
+  0x1E, 0x00 };
+
+const GFXglyph nk57_monospace_no_rg9pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,  12,    0,    0 },   // 0x20 ' '
+  {     1,   3,  15,  12,    5,  -14 },   // 0x21 '!'
+  {     7,   8,   7,  12,    2,  -14 },   // 0x22 '"'
+  {    14,  12,  15,  12,    0,  -14 },   // 0x23 '#'
+  {    37,  11,  18,  12,    1,  -15 },   // 0x24 '$'
+  {    62,  12,  17,  12,    0,  -15 },   // 0x25 '%'
+  {    88,  12,  15,  12,    0,  -14 },   // 0x26 '&'
+  {   111,   2,   6,  12,    5,  -14 },   // 0x27 '''
+  {   113,   8,  22,  12,    3,  -17 },   // 0x28 '('
+  {   135,   8,  22,  12,    1,  -17 },   // 0x29 ')'
+  {   157,  10,  10,  12,    1,  -14 },   // 0x2A '*'
+  {   170,  11,   9,  12,    1,  -11 },   // 0x2B '+'
+  {   183,   3,   6,  12,    5,   -2 },   // 0x2C ','
+  {   186,   8,   2,  12,    2,   -6 },   // 0x2D '-'
+  {   188,   3,   3,  12,    5,   -2 },   // 0x2E '.'
+  {   190,  12,  20,  12,    0,  -16 },   // 0x2F '/'
+  {   220,  10,  15,  12,    1,  -14 },   // 0x30 '0'
+  {   239,  10,  15,  12,    1,  -14 },   // 0x31 '1'
+  {   258,  10,  15,  12,    1,  -14 },   // 0x32 '2'
+  {   277,  10,  15,  12,    1,  -14 },   // 0x33 '3'
+  {   296,  11,  15,  12,    1,  -14 },   // 0x34 '4'
+  {   317,  10,  15,  12,    1,  -14 },   // 0x35 '5'
+  {   336,  10,  15,  12,    1,  -14 },   // 0x36 '6'
+  {   355,  10,  15,  12,    1,  -14 },   // 0x37 '7'
+  {   374,  10,  15,  12,    1,  -14 },   // 0x38 '8'
+  {   393,  10,  15,  12,    1,  -14 },   // 0x39 '9'
+  {   412,   3,   9,  12,    5,   -8 },   // 0x3A ':'
+  {   416,   3,  12,  12,    5,   -9 },   // 0x3B ';'
+  {   421,  11,  12,  12,    1,  -12 },   // 0x3C '<'
+  {   438,  11,   7,  12,    1,  -10 },   // 0x3D '='
+  {   448,  11,  12,  12,    1,  -12 },   // 0x3E '>'
+  {   465,  10,  15,  12,    1,  -14 },   // 0x3F '?'
+  {   484,  11,  16,  12,    1,  -12 },   // 0x40 '@'
+  {   506,  12,  15,  12,    0,  -14 },   // 0x41 'A'
+  {   529,  11,  15,  12,    1,  -14 },   // 0x42 'B'
+  {   550,  10,  15,  12,    1,  -14 },   // 0x43 'C'
+  {   569,  10,  15,  12,    1,  -14 },   // 0x44 'D'
+  {   588,  10,  15,  12,    1,  -14 },   // 0x45 'E'
+  {   607,  10,  15,  12,    1,  -14 },   // 0x46 'F'
+  {   626,  10,  15,  12,    1,  -14 },   // 0x47 'G'
+  {   645,  10,  15,  12,    1,  -14 },   // 0x48 'H'
+  {   664,  10,  15,  12,    1,  -14 },   // 0x49 'I'
+  {   683,  10,  15,  12,    1,  -14 },   // 0x4A 'J'
+  {   702,  11,  15,  12,    1,  -14 },   // 0x4B 'K'
+  {   723,  10,  15,  12,    1,  -14 },   // 0x4C 'L'
+  {   742,  11,  15,  12,    1,  -14 },   // 0x4D 'M'
+  {   763,  10,  15,  12,    1,  -14 },   // 0x4E 'N'
+  {   782,  10,  15,  12,    1,  -14 },   // 0x4F 'O'
+  {   801,  11,  15,  12,    1,  -14 },   // 0x50 'P'
+  {   822,  11,  19,  12,    1,  -14 },   // 0x51 'Q'
+  {   849,  11,  15,  12,    1,  -14 },   // 0x52 'R'
+  {   870,  10,  15,  12,    1,  -14 },   // 0x53 'S'
+  {   889,  11,  15,  12,    1,  -14 },   // 0x54 'T'
+  {   910,  10,  15,  12,    1,  -14 },   // 0x55 'U'
+  {   929,  12,  15,  12,    0,  -14 },   // 0x56 'V'
+  {   952,  12,  15,  12,    0,  -14 },   // 0x57 'W'
+  {   975,  12,  15,  12,    0,  -14 },   // 0x58 'X'
+  {   998,  12,  15,  12,    0,  -14 },   // 0x59 'Y'
+  {  1021,  10,  15,  12,    1,  -14 },   // 0x5A 'Z'
+  {  1040,   8,  22,  12,    4,  -17 },   // 0x5B '['
+  {  1062,  12,  20,  12,    0,  -16 },   // 0x5C '\'
+  {  1092,   8,  22,  12,    1,  -17 },   // 0x5D ']'
+  {  1114,  12,   8,  12,    0,  -14 },   // 0x5E '^'
+  {  1126,  12,   2,  12,    0,    2 },   // 0x5F '_'
+  {  1129,   6,   3,  12,    3,  -13 },   // 0x60 '`'
+  {  1132,  11,  10,  12,    1,   -9 },   // 0x61 'a'
+  {  1146,  10,  15,  12,    1,  -14 },   // 0x62 'b'
+  {  1165,  10,  10,  12,    1,   -9 },   // 0x63 'c'
+  {  1178,  10,  15,  12,    1,  -14 },   // 0x64 'd'
+  {  1197,  10,  10,  12,    1,   -9 },   // 0x65 'e'
+  {  1210,  11,  15,  12,    0,  -14 },   // 0x66 'f'
+  {  1231,  12,  17,  12,    0,  -12 },   // 0x67 'g'
+  {  1257,  10,  15,  12,    1,  -14 },   // 0x68 'h'
+  {  1276,   9,  14,  12,    2,  -13 },   // 0x69 'i'
+  {  1292,   9,  18,  12,    1,  -13 },   // 0x6A 'j'
+  {  1313,  11,  15,  12,    1,  -14 },   // 0x6B 'k'
+  {  1334,   9,  15,  12,    2,  -14 },   // 0x6C 'l'
+  {  1351,  12,  10,  12,    0,   -9 },   // 0x6D 'm'
+  {  1366,  10,  10,  12,    1,   -9 },   // 0x6E 'n'
+  {  1379,  10,  10,  12,    1,   -9 },   // 0x6F 'o'
+  {  1392,  10,  14,  12,    1,   -9 },   // 0x70 'p'
+  {  1410,  10,  14,  12,    1,   -9 },   // 0x71 'q'
+  {  1428,  10,  10,  12,    1,   -9 },   // 0x72 'r'
+  {  1441,  10,  10,  12,    1,   -9 },   // 0x73 's'
+  {  1454,  11,  13,  12,    0,  -12 },   // 0x74 't'
+  {  1472,  10,  10,  12,    1,   -9 },   // 0x75 'u'
+  {  1485,  12,  10,  12,    0,   -9 },   // 0x76 'v'
+  {  1500,  12,  10,  12,    0,   -9 },   // 0x77 'w'
+  {  1515,  12,  10,  12,    0,   -9 },   // 0x78 'x'
+  {  1530,  12,  14,  12,    0,   -9 },   // 0x79 'y'
+  {  1551,  10,  10,  12,    1,   -9 },   // 0x7A 'z'
+  {  1564,  11,  22,  12,    1,  -17 },   // 0x7B '{'
+  {  1595,   2,  22,  12,    5,  -17 },   // 0x7C '|'
+  {  1601,  10,  22,  12,    1,  -17 },   // 0x7D '}'
+  {  1629,  11,   3,  12,    1,   -8 } }; // 0x7E '~'
+
+const GFXfont nk57_monospace_no_rg9pt7b PROGMEM = {
+  (uint8_t  *)nk57_monospace_no_rg9pt7bBitmaps,
+  (GFXglyph *)nk57_monospace_no_rg9pt7bGlyphs,
+  0x20, 0x7E, 21 };
+
+// Approx. 2306 bytes
+const uint8_t nk57_monospace_no_rg7pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0xEA, 0x3F, 0xCE, 0x28, 0xA2, 0x88, 0x00, 0x11, 0x08, 0x84,
+  0x42, 0x67, 0xF9, 0x90, 0x89, 0xFF, 0x22, 0x11, 0x09, 0x8C, 0xC0, 0x10,
+  0x10, 0x7E, 0xC3, 0x83, 0x80, 0xE0, 0x3C, 0x03, 0x03, 0x83, 0xC3, 0x7E,
+  0x10, 0x10, 0x78, 0x64, 0x22, 0x11, 0x17, 0x88, 0x18, 0x30, 0x20, 0x67,
+  0x46, 0x42, 0x21, 0x10, 0xC8, 0x3C, 0x3E, 0x31, 0x98, 0xCC, 0x62, 0x60,
+  0xC0, 0xE2, 0x9B, 0xC7, 0x61, 0x99, 0xC7, 0x90, 0xEA, 0x80, 0x0E, 0x30,
+  0xC1, 0x06, 0x08, 0x30, 0x60, 0xC1, 0x83, 0x02, 0x06, 0x04, 0x0C, 0x0C,
+  0x0E, 0xC0, 0x81, 0x06, 0x08, 0x30, 0xC1, 0x04, 0x10, 0xC3, 0x08, 0x61,
+  0x08, 0xC0, 0x11, 0x27, 0x59, 0xE3, 0x9A, 0xE4, 0x88, 0x08, 0x04, 0x02,
+  0x1F, 0xF0, 0x80, 0x40, 0x20, 0xFE, 0xFC, 0xFC, 0x00, 0x80, 0x40, 0x40,
+  0x20, 0x20, 0x30, 0x10, 0x18, 0x08, 0x0C, 0x04, 0x06, 0x02, 0x03, 0x01,
+  0x01, 0x80, 0x38, 0x66, 0xC6, 0x82, 0x83, 0x83, 0x83, 0x83, 0x82, 0xC6,
+  0x66, 0x3C, 0x18, 0x30, 0x67, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x67,
+  0xF0, 0x7C, 0xC6, 0x83, 0x03, 0x03, 0x02, 0x06, 0x0C, 0x18, 0x30, 0xC0,
+  0xFF, 0x7C, 0xC6, 0x83, 0x03, 0x02, 0x3C, 0x02, 0x03, 0x83, 0x83, 0xC6,
+  0x7C, 0x03, 0x03, 0x81, 0xC1, 0x61, 0xB1, 0x98, 0x8C, 0x86, 0xFF, 0x81,
+  0x80, 0xC0, 0x60, 0x7E, 0x40, 0x40, 0xC0, 0xFC, 0xC6, 0x03, 0x03, 0x83,
+  0x83, 0xC6, 0x7C, 0x3E, 0x63, 0xC3, 0x80, 0xBC, 0xE6, 0x83, 0x83, 0x83,
+  0xC3, 0x66, 0x7C, 0xFF, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x18, 0x10,
+  0x30, 0x30, 0x60, 0x7C, 0xC6, 0x83, 0x83, 0xC2, 0x7C, 0xC6, 0x83, 0x83,
+  0x83, 0xC6, 0x7C, 0x7C, 0xC6, 0x83, 0x83, 0x83, 0x83, 0xC3, 0x7E, 0x06,
+  0x0C, 0x08, 0x30, 0xFC, 0x0F, 0xC0, 0xFC, 0x03, 0xF8, 0x01, 0x83, 0x87,
+  0x0C, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0x80, 0xFF, 0x80, 0x00, 0x00,
+  0x0F, 0xF8, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x18, 0x38, 0xE1, 0xC0, 0x80,
+  0x00, 0x7E, 0xC7, 0x83, 0x03, 0x03, 0x0C, 0x18, 0x18, 0x00, 0x18, 0x18,
+  0x18, 0x3F, 0x30, 0x90, 0x29, 0xD4, 0x9A, 0x47, 0x22, 0x93, 0x4F, 0xA0,
+  0x10, 0x0C, 0x13, 0xF8, 0x0C, 0x06, 0x07, 0x02, 0xC1, 0x61, 0x90, 0xCC,
+  0x46, 0x63, 0x3F, 0x90, 0x78, 0x30, 0xFE, 0x86, 0x83, 0x83, 0x82, 0xFC,
+  0x83, 0x83, 0x83, 0x83, 0x83, 0xFE, 0x7E, 0xC3, 0xC3, 0x80, 0x80, 0x80,
+  0x80, 0x80, 0x83, 0xC3, 0xC6, 0x7C, 0xFC, 0x86, 0x82, 0x83, 0x83, 0x83,
+  0x83, 0x83, 0x83, 0x82, 0x86, 0xFC, 0xFF, 0x80, 0x80, 0x80, 0x80, 0xFF,
+  0x80, 0x80, 0x80, 0x80, 0x80, 0xFF, 0xFF, 0x80, 0x80, 0x80, 0x80, 0xFF,
+  0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7E, 0xC3, 0xC3, 0x80, 0x80, 0x8F,
+  0x83, 0x83, 0x83, 0xC3, 0xC7, 0x79, 0x83, 0x83, 0x83, 0x83, 0x83, 0xFF,
+  0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0xFE, 0x30, 0x60, 0xC1, 0x83, 0x06,
+  0x0C, 0x18, 0x30, 0x67, 0xF0, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+  0x03, 0x83, 0x82, 0xC6, 0x7C, 0x83, 0x86, 0x84, 0x8C, 0x9C, 0xBC, 0xA4,
+  0xC6, 0xC6, 0x82, 0x83, 0x83, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xC1, 0xF0, 0xF8, 0xFE, 0x5D, 0x6E, 0xE7,
+  0x33, 0x91, 0xC0, 0xE0, 0x70, 0x38, 0x10, 0xC3, 0xC3, 0xE3, 0xA3, 0xB3,
+  0x93, 0x9B, 0x8B, 0x87, 0x87, 0x83, 0x83, 0x7E, 0xC6, 0x83, 0x83, 0x83,
+  0x83, 0x83, 0x83, 0x83, 0x83, 0xC6, 0x7E, 0xFE, 0x87, 0x83, 0x83, 0x83,
+  0x83, 0x83, 0xFE, 0x80, 0x80, 0x80, 0x80, 0x7C, 0xC6, 0x83, 0x83, 0x83,
+  0x83, 0x83, 0x83, 0x83, 0x83, 0xC6, 0x7E, 0x08, 0x0C, 0x07, 0xFE, 0x83,
+  0x83, 0x83, 0x83, 0x83, 0xFE, 0x88, 0x8C, 0x86, 0x82, 0x83, 0x3F, 0x31,
+  0xD0, 0x68, 0x06, 0x01, 0xF0, 0x1C, 0x03, 0xC1, 0xA0, 0xD8, 0xC7, 0xC0,
+  0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+  0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0xC3, 0xC6, 0x7E,
+  0xC1, 0xA0, 0xD8, 0x4C, 0x22, 0x31, 0x10, 0xC8, 0x2C, 0x16, 0x0E, 0x03,
+  0x01, 0x80, 0xC0, 0xE4, 0x72, 0x39, 0x94, 0xCA, 0xAD, 0x56, 0xA7, 0x53,
+  0x31, 0x98, 0xCC, 0x20, 0x61, 0x91, 0x8C, 0xC2, 0xC1, 0xC0, 0x60, 0x70,
+  0x2C, 0x32, 0x11, 0x98, 0x78, 0x30, 0xC1, 0xB0, 0x88, 0xC6, 0xC1, 0xC0,
+  0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xFE, 0x04, 0x18, 0x60,
+  0xC3, 0x04, 0x18, 0x60, 0xC3, 0x07, 0xF0, 0xFE, 0x08, 0x20, 0x82, 0x08,
+  0x20, 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, 0xFC, 0x80, 0x20, 0x10, 0x04,
+  0x03, 0x00, 0x80, 0x60, 0x10, 0x0C, 0x02, 0x01, 0x80, 0x40, 0x30, 0x08,
+  0x06, 0x01, 0xFE, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18,
+  0x30, 0x60, 0xC1, 0x83, 0xFE, 0x0C, 0x0E, 0x05, 0x86, 0x42, 0x33, 0x0B,
+  0x06, 0xFF, 0x80, 0xC3, 0x7C, 0xC6, 0xC2, 0x1E, 0xE2, 0x82, 0xCE, 0x7B,
+  0xC0, 0xC0, 0xC0, 0xC0, 0xDE, 0xE6, 0xC3, 0xC3, 0xC3, 0xC3, 0xE6, 0xDE,
+  0x7D, 0x8F, 0x0C, 0x08, 0x18, 0x71, 0xBE, 0x02, 0x04, 0x08, 0x17, 0xB8,
+  0xF0, 0xC1, 0x83, 0x87, 0x1B, 0xD0, 0x7D, 0x8E, 0x0F, 0xF8, 0x18, 0x71,
+  0xBE, 0x1F, 0x18, 0xC8, 0x64, 0x0F, 0xF1, 0x00, 0x80, 0x40, 0x20, 0x10,
+  0x08, 0x04, 0x00, 0x01, 0x81, 0x0F, 0x8C, 0x24, 0x1B, 0x08, 0xFC, 0x60,
+  0x40, 0x3F, 0xF0, 0x38, 0x17, 0xF8, 0xC1, 0x83, 0x06, 0x0D, 0xFC, 0xF0,
+  0xE1, 0xC3, 0x87, 0x0E, 0x10, 0x30, 0xC0, 0x00, 0xF0, 0xC3, 0x0C, 0x30,
+  0xC3, 0x3F, 0x06, 0x0C, 0x00, 0x03, 0xE0, 0xC1, 0x83, 0x06, 0x0C, 0x18,
+  0x38, 0x78, 0xDF, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC3, 0xC4, 0xDC, 0xF4,
+  0xE6, 0xC2, 0xC3, 0xC1, 0xF0, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3,
+  0x3F, 0xFB, 0xE6, 0x72, 0x39, 0x1C, 0x8E, 0x47, 0x23, 0x91, 0xDF, 0xCF,
+  0x0E, 0x1C, 0x38, 0x70, 0xE1, 0x7C, 0xC6, 0xC2, 0x83, 0x83, 0xC2, 0xC6,
+  0x7C, 0xFE, 0xE6, 0xC3, 0xC3, 0xC3, 0xC3, 0xE6, 0xFE, 0xC0, 0xC0, 0xC0,
+  0x7B, 0x8F, 0x0C, 0x18, 0x38, 0x71, 0xBD, 0x02, 0x04, 0x08, 0xDE, 0xF3,
+  0xC3, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x7D, 0x8E, 0x03, 0xE0, 0x70, 0x71,
+  0xBE, 0x20, 0x10, 0x3F, 0xC4, 0x02, 0x01, 0x00, 0x80, 0x43, 0x31, 0x8F,
+  0x80, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x71, 0xBD, 0xC1, 0xB0, 0x98, 0xC4,
+  0x63, 0x20, 0xB0, 0x70, 0x18, 0x80, 0xE4, 0x53, 0x2B, 0xB5, 0x5A, 0x99,
+  0x8C, 0x46, 0x61, 0x99, 0x87, 0x81, 0x81, 0xC1, 0xB1, 0x8D, 0x83, 0xC1,
+  0xB0, 0x88, 0xC6, 0xC1, 0x40, 0xE0, 0x20, 0x30, 0x30, 0x10, 0x18, 0x00,
+  0xFE, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0x7F, 0x1F, 0x18, 0x10, 0x18, 0x18,
+  0x08, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x08, 0x18, 0x18, 0x10, 0x18, 0x1F,
+  0xFF, 0xFF, 0x80, 0xF8, 0x0C, 0x0C, 0x08, 0x08, 0x18, 0x18, 0x18, 0x0F,
+  0x18, 0x10, 0x18, 0x08, 0x08, 0x0C, 0x0C, 0xF8, 0x78, 0xC7, 0xC0 };
+
+const GFXglyph nk57_monospace_no_rg7pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   9,    0,    0 },   // 0x20 ' '
+  {     1,   2,  12,   9,    4,  -11 },   // 0x21 '!'
+  {     4,   6,   6,   9,    2,  -11 },   // 0x22 '"'
+  {     9,   9,  12,   9,    0,  -11 },   // 0x23 '#'
+  {    23,   8,  15,   9,    1,  -13 },   // 0x24 '$'
+  {    38,   9,  14,   9,    0,  -11 },   // 0x25 '%'
+  {    54,   9,  12,   9,    0,  -11 },   // 0x26 '&'
+  {    68,   2,   5,   9,    4,  -11 },   // 0x27 '''
+  {    70,   7,  17,   9,    2,  -13 },   // 0x28 '('
+  {    85,   6,  17,   9,    1,  -13 },   // 0x29 ')'
+  {    98,   7,   8,   9,    1,  -11 },   // 0x2A '*'
+  {   105,   9,   7,   9,    0,   -8 },   // 0x2B '+'
+  {   113,   2,   4,   9,    4,   -1 },   // 0x2C ','
+  {   114,   6,   1,   9,    2,   -5 },   // 0x2D '-'
+  {   115,   2,   3,   9,    4,   -2 },   // 0x2E '.'
+  {   116,   9,  16,   9,    0,  -13 },   // 0x2F '/'
+  {   134,   8,  12,   9,    1,  -11 },   // 0x30 '0'
+  {   146,   7,  12,   9,    1,  -11 },   // 0x31 '1'
+  {   157,   8,  12,   9,    1,  -11 },   // 0x32 '2'
+  {   169,   8,  12,   9,    1,  -11 },   // 0x33 '3'
+  {   181,   9,  12,   9,    0,  -11 },   // 0x34 '4'
+  {   195,   8,  12,   9,    1,  -11 },   // 0x35 '5'
+  {   207,   8,  12,   9,    1,  -11 },   // 0x36 '6'
+  {   219,   8,  12,   9,    1,  -11 },   // 0x37 '7'
+  {   231,   8,  12,   9,    1,  -11 },   // 0x38 '8'
+  {   243,   8,  12,   9,    1,  -11 },   // 0x39 '9'
+  {   255,   2,   9,   9,    4,   -8 },   // 0x3A ':'
+  {   258,   2,  11,   9,    4,   -8 },   // 0x3B ';'
+  {   261,   9,   9,   9,    0,   -9 },   // 0x3C '<'
+  {   272,   9,   5,   9,    0,   -7 },   // 0x3D '='
+  {   278,   9,   9,   9,    0,   -9 },   // 0x3E '>'
+  {   289,   8,  12,   9,    1,  -11 },   // 0x3F '?'
+  {   301,   9,  13,   9,    0,  -10 },   // 0x40 '@'
+  {   316,   9,  12,   9,    0,  -11 },   // 0x41 'A'
+  {   330,   8,  12,   9,    1,  -11 },   // 0x42 'B'
+  {   342,   8,  12,   9,    1,  -11 },   // 0x43 'C'
+  {   354,   8,  12,   9,    1,  -11 },   // 0x44 'D'
+  {   366,   8,  12,   9,    1,  -11 },   // 0x45 'E'
+  {   378,   8,  12,   9,    1,  -11 },   // 0x46 'F'
+  {   390,   8,  12,   9,    1,  -11 },   // 0x47 'G'
+  {   402,   8,  12,   9,    1,  -11 },   // 0x48 'H'
+  {   414,   7,  12,   9,    1,  -11 },   // 0x49 'I'
+  {   425,   8,  12,   9,    1,  -11 },   // 0x4A 'J'
+  {   437,   8,  12,   9,    1,  -11 },   // 0x4B 'K'
+  {   449,   8,  12,   9,    1,  -11 },   // 0x4C 'L'
+  {   461,   9,  12,   9,    0,  -11 },   // 0x4D 'M'
+  {   475,   8,  12,   9,    1,  -11 },   // 0x4E 'N'
+  {   487,   8,  12,   9,    1,  -11 },   // 0x4F 'O'
+  {   499,   8,  12,   9,    1,  -11 },   // 0x50 'P'
+  {   511,   8,  15,   9,    1,  -11 },   // 0x51 'Q'
+  {   526,   8,  12,   9,    1,  -11 },   // 0x52 'R'
+  {   538,   9,  12,   9,    0,  -11 },   // 0x53 'S'
+  {   552,   8,  12,   9,    1,  -11 },   // 0x54 'T'
+  {   564,   8,  12,   9,    1,  -11 },   // 0x55 'U'
+  {   576,   9,  12,   9,    0,  -11 },   // 0x56 'V'
+  {   590,   9,  12,   9,    0,  -11 },   // 0x57 'W'
+  {   604,   9,  12,   9,    0,  -11 },   // 0x58 'X'
+  {   618,   9,  12,   9,    0,  -11 },   // 0x59 'Y'
+  {   632,   7,  12,   9,    1,  -11 },   // 0x5A 'Z'
+  {   643,   6,  17,   9,    3,  -13 },   // 0x5B '['
+  {   656,   9,  16,   9,    0,  -13 },   // 0x5C '\'
+  {   674,   7,  17,   9,    0,  -13 },   // 0x5D ']'
+  {   689,   9,   7,   9,    0,  -11 },   // 0x5E '^'
+  {   697,   9,   1,   9,    0,    2 },   // 0x5F '_'
+  {   699,   4,   2,   9,    3,  -11 },   // 0x60 '`'
+  {   700,   8,   8,   9,    1,   -7 },   // 0x61 'a'
+  {   708,   8,  12,   9,    1,  -11 },   // 0x62 'b'
+  {   720,   7,   8,   9,    1,   -7 },   // 0x63 'c'
+  {   727,   7,  12,   9,    1,  -11 },   // 0x64 'd'
+  {   738,   7,   8,   9,    1,   -7 },   // 0x65 'e'
+  {   745,   9,  12,   9,    0,  -11 },   // 0x66 'f'
+  {   759,   9,  13,   9,    0,   -9 },   // 0x67 'g'
+  {   774,   7,  12,   9,    1,  -11 },   // 0x68 'h'
+  {   785,   6,  12,   9,    2,  -11 },   // 0x69 'i'
+  {   794,   7,  15,   9,    1,  -11 },   // 0x6A 'j'
+  {   808,   8,  12,   9,    1,  -11 },   // 0x6B 'k'
+  {   820,   6,  12,   9,    2,  -11 },   // 0x6C 'l'
+  {   829,   9,   8,   9,    0,   -7 },   // 0x6D 'm'
+  {   838,   7,   8,   9,    1,   -7 },   // 0x6E 'n'
+  {   845,   8,   8,   9,    1,   -7 },   // 0x6F 'o'
+  {   853,   8,  11,   9,    1,   -7 },   // 0x70 'p'
+  {   864,   7,  11,   9,    1,   -7 },   // 0x71 'q'
+  {   874,   8,   8,   9,    1,   -7 },   // 0x72 'r'
+  {   882,   7,   8,   9,    1,   -7 },   // 0x73 's'
+  {   889,   9,  10,   9,    0,   -9 },   // 0x74 't'
+  {   901,   7,   8,   9,    1,   -7 },   // 0x75 'u'
+  {   908,   9,   8,   9,    0,   -7 },   // 0x76 'v'
+  {   917,   9,   8,   9,    0,   -7 },   // 0x77 'w'
+  {   926,   9,   8,   9,    0,   -7 },   // 0x78 'x'
+  {   935,   9,  11,   9,    0,   -7 },   // 0x79 'y'
+  {   948,   7,   8,   9,    1,   -7 },   // 0x7A 'z'
+  {   955,   8,  17,   9,    1,  -13 },   // 0x7B '{'
+  {   972,   1,  17,   9,    4,  -13 },   // 0x7C '|'
+  {   975,   8,  17,   9,    0,  -13 },   // 0x7D '}'
+  {   992,   9,   2,   9,    0,   -6 } }; // 0x7E '~'
+
+const GFXfont nk57_monospace_no_rg7pt7b PROGMEM = {
+  (uint8_t  *)nk57_monospace_no_rg7pt7bBitmaps,
+  (GFXglyph *)nk57_monospace_no_rg7pt7bGlyphs,
+  0x20, 0x7E, 16 };
+
+// Approx. 1667 bytes
+const uint8_t nk57_monospace_cd_rg7pt7bBitmaps[] PROGMEM = {
+  0x00, 0x55, 0x55, 0x1D, 0x4A, 0x52, 0x94, 0x80, 0x24, 0x48, 0x91, 0x2F,
+  0xE5, 0x12, 0x7E, 0x48, 0x91, 0x22, 0x40, 0x10, 0x47, 0xD1, 0xC7, 0x06,
+  0x0F, 0x04, 0x1C, 0x51, 0x78, 0x41, 0x00, 0x70, 0xA2, 0x42, 0x97, 0x41,
+  0x04, 0x10, 0x5D, 0x28, 0x91, 0x21, 0x43, 0x80, 0x38, 0x91, 0x12, 0x47,
+  0x86, 0x1D, 0xEA, 0x8D, 0x13, 0x33, 0xB0, 0xF8, 0x32, 0x44, 0xC8, 0x88,
+  0x88, 0x88, 0xC4, 0x42, 0x30, 0x84, 0x62, 0x31, 0x11, 0x11, 0x11, 0x32,
+  0x64, 0x80, 0x11, 0x5F, 0xC4, 0xFD, 0x51, 0x00, 0x10, 0x41, 0x3F, 0x10,
+  0x41, 0x00, 0xD5, 0xF8, 0x74, 0x02, 0x08, 0x10, 0x20, 0x81, 0x06, 0x08,
+  0x10, 0x60, 0x81, 0x04, 0x08, 0x10, 0x40, 0x39, 0xA4, 0x51, 0x47, 0x1C,
+  0x51, 0x45, 0x16, 0x8E, 0x21, 0x09, 0xC2, 0x10, 0x84, 0x21, 0x09, 0xF0,
+  0xF4, 0xE2, 0x10, 0x84, 0x62, 0x22, 0x21, 0xF0, 0xF4, 0xE2, 0x10, 0xB8,
+  0x21, 0x8C, 0x66, 0xE0, 0x0C, 0x18, 0x70, 0xE2, 0xC5, 0x93, 0x26, 0xFE,
+  0x18, 0x30, 0x60, 0xFC, 0x21, 0x0F, 0x4C, 0x21, 0x8C, 0x66, 0xE0, 0x7E,
+  0x63, 0x0F, 0x6E, 0x31, 0x8C, 0x76, 0xE0, 0xF8, 0x42, 0x31, 0x08, 0xC4,
+  0x23, 0x10, 0x80, 0x39, 0x34, 0x51, 0x44, 0xE4, 0xF1, 0xC7, 0x16, 0xCE,
+  0x39, 0x3C, 0x71, 0xC7, 0x14, 0x5F, 0x0C, 0x21, 0x0C, 0x74, 0x07, 0x40,
+  0x74, 0x03, 0x54, 0x04, 0x73, 0x30, 0xC1, 0x81, 0x83, 0x04, 0xFC, 0x00,
+  0x00, 0xFC, 0xC1, 0x81, 0x83, 0x04, 0x63, 0x30, 0x80, 0xF4, 0xE2, 0x10,
+  0x88, 0x84, 0x01, 0x18, 0x40, 0x79, 0x14, 0x67, 0x96, 0x59, 0x65, 0x9E,
+  0x04, 0x11, 0x7C, 0x10, 0x60, 0xE1, 0x42, 0x85, 0x1A, 0x26, 0x4C, 0xF9,
+  0x16, 0x30, 0xF4, 0x63, 0x18, 0xFA, 0x31, 0x8C, 0x63, 0xF0, 0x3D, 0x94,
+  0x50, 0xC3, 0x0C, 0x30, 0x45, 0x16, 0xCE, 0xF4, 0xE3, 0x18, 0xC6, 0x31,
+  0x8C, 0x67, 0xE0, 0xFC, 0x21, 0x08, 0x7E, 0x10, 0x84, 0x21, 0xF0, 0xFC,
+  0x21, 0x08, 0x7E, 0x10, 0x84, 0x21, 0x00, 0x3D, 0x94, 0x50, 0xC3, 0x3C,
+  0x71, 0x45, 0x14, 0xDD, 0x8C, 0x63, 0x18, 0xFE, 0x31, 0x8C, 0x63, 0x10,
+  0xF9, 0x08, 0x42, 0x10, 0x84, 0x21, 0x09, 0xF0, 0x04, 0x10, 0x41, 0x04,
+  0x10, 0x41, 0xC5, 0x14, 0xDE, 0x8E, 0x29, 0x24, 0xB2, 0xCD, 0x36, 0x8A,
+  0x28, 0xA3, 0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0xF0, 0xC7, 0x8F,
+  0x3D, 0x7A, 0xF6, 0xE5, 0xCB, 0x87, 0x0E, 0x1C, 0x30, 0x8C, 0x73, 0x9E,
+  0xD6, 0xB3, 0x9C, 0xE3, 0x10, 0x79, 0x34, 0x71, 0xC7, 0x1C, 0x71, 0xC5,
+  0x14, 0xDE, 0xF4, 0xE3, 0x18, 0xC6, 0x3F, 0x84, 0x21, 0x00, 0x78, 0x99,
+  0x12, 0x2C, 0x58, 0xB1, 0x62, 0x44, 0x89, 0x33, 0xC0, 0x81, 0x03, 0x80,
+  0xFA, 0x28, 0xA2, 0x8A, 0x2F, 0xAC, 0x92, 0x68, 0xA3, 0x3D, 0x3C, 0x70,
+  0x41, 0xE0, 0xC1, 0xC7, 0x14, 0xDE, 0xFC, 0x41, 0x04, 0x10, 0x41, 0x04,
+  0x10, 0x41, 0x04, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x67, 0xE0, 0xC6,
+  0x89, 0x12, 0x24, 0xCD, 0x0A, 0x14, 0x28, 0x70, 0xC0, 0x80, 0x83, 0x06,
+  0x5C, 0xBD, 0x5E, 0x9B, 0x36, 0x6C, 0xD9, 0x32, 0x20, 0x44, 0xC8, 0xA1,
+  0x43, 0x82, 0x0C, 0x14, 0x68, 0x99, 0x16, 0x30, 0xC6, 0x89, 0xB1, 0x43,
+  0x82, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0xF8, 0x46, 0x23, 0x11, 0x8C,
+  0x46, 0x21, 0xF0, 0xFC, 0x21, 0x08, 0x42, 0x10, 0x84, 0x21, 0x08, 0x42,
+  0x10, 0xF8, 0x81, 0x81, 0x02, 0x06, 0x04, 0x08, 0x08, 0x10, 0x20, 0x20,
+  0x40, 0xC0, 0x81, 0x03, 0xF8, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31,
+  0x8C, 0x63, 0xF8, 0x10, 0x70, 0xA1, 0x44, 0xC8, 0xB1, 0x80, 0xFE, 0xCC,
+  0x74, 0xE2, 0x7C, 0xC6, 0x7D, 0x84, 0x21, 0x0B, 0x6E, 0x31, 0x8C, 0x77,
+  0x60, 0x76, 0x63, 0x08, 0x47, 0x6E, 0x08, 0x42, 0x1E, 0xCE, 0x31, 0x8C,
+  0x67, 0xD0, 0x74, 0xE3, 0xF8, 0x47, 0x6E, 0x3D, 0x94, 0x50, 0xFD, 0x04,
+  0x10, 0x41, 0x04, 0x10, 0x06, 0x11, 0xE2, 0x24, 0x48, 0x9F, 0x30, 0x40,
+  0xFA, 0x0C, 0x3F, 0xC0, 0x84, 0x21, 0x0B, 0x6E, 0x31, 0x8C, 0x63, 0x10,
+  0x21, 0x00, 0x0E, 0x10, 0x84, 0x21, 0x09, 0xF0, 0x18, 0xC0, 0x07, 0x8C,
+  0x63, 0x18, 0xC6, 0x39, 0xCF, 0xC0, 0x82, 0x08, 0x20, 0x8E, 0x4B, 0x3C,
+  0xD2, 0x28, 0xA3, 0xE1, 0x08, 0x42, 0x10, 0x84, 0x21, 0x09, 0xF0, 0xFD,
+  0xAE, 0x4C, 0x99, 0x32, 0x64, 0xC9, 0xB6, 0xE3, 0x18, 0xC6, 0x31, 0x76,
+  0xE3, 0x18, 0xC7, 0x6E, 0xB6, 0xE3, 0x18, 0xC7, 0x76, 0x84, 0x20, 0xEC,
+  0xE3, 0x18, 0xC6, 0x7D, 0x08, 0x42, 0xBE, 0x63, 0x08, 0x42, 0x10, 0xF4,
+  0xE1, 0xE1, 0xC6, 0x7E, 0x41, 0x0F, 0xD0, 0x41, 0x04, 0x11, 0x64, 0xF0,
+  0x8C, 0x63, 0x18, 0xC6, 0x7D, 0xC6, 0x89, 0x13, 0x42, 0x85, 0x0C, 0x08,
+  0x83, 0x0E, 0x56, 0xA6, 0xCD, 0x9B, 0x26, 0x44, 0xD8, 0xA0, 0x83, 0x85,
+  0x13, 0x63, 0xC6, 0x89, 0x31, 0x43, 0x86, 0x04, 0x10, 0x20, 0xC1, 0x00,
+  0xF8, 0xC4, 0x46, 0x22, 0x1F, 0x3C, 0x82, 0x08, 0x20, 0xC3, 0x0C, 0xE0,
+  0xC3, 0x0C, 0x20, 0x82, 0x08, 0x3C, 0xFF, 0xFF, 0x80, 0xF0, 0x41, 0x04,
+  0x30, 0xC2, 0x08, 0x1C, 0x82, 0x08, 0x30, 0x41, 0x04, 0xF0, 0x76, 0x70 };
+
+const GFXglyph nk57_monospace_cd_rg7pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   7,    0,    0 },   // 0x20 ' '
+  {     1,   2,  12,   7,    2,  -11 },   // 0x21 '!'
+  {     4,   5,   6,   7,    1,  -11 },   // 0x22 '"'
+  {     8,   7,  12,   7,    0,  -11 },   // 0x23 '#'
+  {    19,   6,  15,   7,    0,  -13 },   // 0x24 '$'
+  {    31,   7,  14,   7,    0,  -11 },   // 0x25 '%'
+  {    44,   7,  12,   7,    0,  -11 },   // 0x26 '&'
+  {    55,   1,   5,   7,    3,  -11 },   // 0x27 '''
+  {    56,   4,  17,   7,    2,  -13 },   // 0x28 '('
+  {    65,   4,  17,   7,    1,  -13 },   // 0x29 ')'
+  {    74,   6,   7,   7,    0,  -11 },   // 0x2A '*'
+  {    80,   6,   7,   7,    0,   -8 },   // 0x2B '+'
+  {    86,   2,   4,   7,    2,   -1 },   // 0x2C ','
+  {    87,   5,   1,   7,    1,   -5 },   // 0x2D '-'
+  {    88,   2,   3,   7,    2,   -2 },   // 0x2E '.'
+  {    89,   7,  16,   7,    0,  -13 },   // 0x2F '/'
+  {   103,   6,  12,   7,    0,  -11 },   // 0x30 '0'
+  {   112,   5,  12,   7,    1,  -11 },   // 0x31 '1'
+  {   120,   5,  12,   7,    1,  -11 },   // 0x32 '2'
+  {   128,   5,  12,   7,    1,  -11 },   // 0x33 '3'
+  {   136,   7,  12,   7,    0,  -11 },   // 0x34 '4'
+  {   147,   5,  12,   7,    1,  -11 },   // 0x35 '5'
+  {   155,   5,  12,   7,    1,  -11 },   // 0x36 '6'
+  {   163,   5,  12,   7,    1,  -11 },   // 0x37 '7'
+  {   171,   6,  12,   7,    0,  -11 },   // 0x38 '8'
+  {   180,   6,  12,   7,    0,  -11 },   // 0x39 '9'
+  {   189,   2,   9,   7,    2,   -8 },   // 0x3A ':'
+  {   192,   2,  11,   7,    2,   -8 },   // 0x3B ';'
+  {   195,   6,   9,   7,    0,   -9 },   // 0x3C '<'
+  {   202,   6,   5,   7,    0,   -7 },   // 0x3D '='
+  {   206,   6,   9,   7,    0,   -9 },   // 0x3E '>'
+  {   213,   5,  12,   7,    1,  -11 },   // 0x3F '?'
+  {   221,   6,  13,   7,    0,  -10 },   // 0x40 '@'
+  {   231,   7,  12,   7,    0,  -11 },   // 0x41 'A'
+  {   242,   5,  12,   7,    1,  -11 },   // 0x42 'B'
+  {   250,   6,  12,   7,    0,  -11 },   // 0x43 'C'
+  {   259,   5,  12,   7,    1,  -11 },   // 0x44 'D'
+  {   267,   5,  12,   7,    1,  -11 },   // 0x45 'E'
+  {   275,   5,  12,   7,    1,  -11 },   // 0x46 'F'
+  {   283,   6,  12,   7,    0,  -11 },   // 0x47 'G'
+  {   292,   5,  12,   7,    1,  -11 },   // 0x48 'H'
+  {   300,   5,  12,   7,    1,  -11 },   // 0x49 'I'
+  {   308,   6,  12,   7,    0,  -11 },   // 0x4A 'J'
+  {   317,   6,  12,   7,    1,  -11 },   // 0x4B 'K'
+  {   326,   5,  12,   7,    1,  -11 },   // 0x4C 'L'
+  {   334,   7,  12,   7,    0,  -11 },   // 0x4D 'M'
+  {   345,   5,  12,   7,    1,  -11 },   // 0x4E 'N'
+  {   353,   6,  12,   7,    0,  -11 },   // 0x4F 'O'
+  {   362,   5,  12,   7,    1,  -11 },   // 0x50 'P'
+  {   370,   7,  15,   7,    0,  -11 },   // 0x51 'Q'
+  {   384,   6,  12,   7,    1,  -11 },   // 0x52 'R'
+  {   393,   6,  12,   7,    0,  -11 },   // 0x53 'S'
+  {   402,   6,  12,   7,    0,  -11 },   // 0x54 'T'
+  {   411,   5,  12,   7,    1,  -11 },   // 0x55 'U'
+  {   419,   7,  12,   7,    0,  -11 },   // 0x56 'V'
+  {   430,   7,  12,   7,    0,  -11 },   // 0x57 'W'
+  {   441,   7,  12,   7,    0,  -11 },   // 0x58 'X'
+  {   452,   7,  12,   7,    0,  -11 },   // 0x59 'Y'
+  {   463,   5,  12,   7,    1,  -11 },   // 0x5A 'Z'
+  {   471,   5,  17,   7,    2,  -13 },   // 0x5B '['
+  {   482,   7,  16,   7,    0,  -13 },   // 0x5C '\'
+  {   496,   5,  17,   7,    0,  -13 },   // 0x5D ']'
+  {   507,   7,   7,   7,    0,  -11 },   // 0x5E '^'
+  {   514,   7,   1,   7,    0,    2 },   // 0x5F '_'
+  {   515,   3,   2,   7,    2,  -11 },   // 0x60 '`'
+  {   516,   5,   8,   7,    1,   -7 },   // 0x61 'a'
+  {   521,   5,  12,   7,    1,  -11 },   // 0x62 'b'
+  {   529,   5,   8,   7,    1,   -7 },   // 0x63 'c'
+  {   534,   5,  12,   7,    1,  -11 },   // 0x64 'd'
+  {   542,   5,   8,   7,    1,   -7 },   // 0x65 'e'
+  {   547,   6,  12,   7,    0,  -11 },   // 0x66 'f'
+  {   556,   7,  13,   7,    0,   -9 },   // 0x67 'g'
+  {   568,   5,  12,   7,    1,  -11 },   // 0x68 'h'
+  {   576,   5,  12,   7,    1,  -11 },   // 0x69 'i'
+  {   584,   5,  15,   7,    1,  -11 },   // 0x6A 'j'
+  {   594,   6,  12,   7,    1,  -11 },   // 0x6B 'k'
+  {   603,   5,  12,   7,    1,  -11 },   // 0x6C 'l'
+  {   611,   7,   8,   7,    0,   -7 },   // 0x6D 'm'
+  {   618,   5,   8,   7,    1,   -7 },   // 0x6E 'n'
+  {   623,   5,   8,   7,    1,   -7 },   // 0x6F 'o'
+  {   628,   5,  11,   7,    1,   -7 },   // 0x70 'p'
+  {   635,   5,  11,   7,    1,   -7 },   // 0x71 'q'
+  {   642,   5,   8,   7,    1,   -7 },   // 0x72 'r'
+  {   647,   5,   8,   7,    1,   -7 },   // 0x73 's'
+  {   652,   6,  10,   7,    0,   -9 },   // 0x74 't'
+  {   660,   5,   8,   7,    1,   -7 },   // 0x75 'u'
+  {   665,   7,   8,   7,    0,   -7 },   // 0x76 'v'
+  {   672,   7,   8,   7,    0,   -7 },   // 0x77 'w'
+  {   679,   7,   8,   7,    0,   -7 },   // 0x78 'x'
+  {   686,   7,  11,   7,    0,   -7 },   // 0x79 'y'
+  {   696,   5,   8,   7,    1,   -7 },   // 0x7A 'z'
+  {   701,   6,  17,   7,    1,  -13 },   // 0x7B '{'
+  {   714,   1,  17,   7,    3,  -13 },   // 0x7C '|'
+  {   717,   6,  17,   7,    0,  -13 },   // 0x7D '}'
+  {   730,   6,   2,   7,    0,   -6 } }; // 0x7E '~'
+
+const GFXfont nk57_monospace_cd_rg7pt7b PROGMEM = {
+  (uint8_t  *)nk57_monospace_cd_rg7pt7bBitmaps,
+  (GFXglyph *)nk57_monospace_cd_rg7pt7bGlyphs,
+  0x20, 0x7E, 16 };
+
+// Approx. 1404 bytes
+const uint8_t nk57_monospace_no_bd7pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFD, 0xB6, 0xD8, 0xFF, 0x80, 0xCF, 0x3C, 0xF3, 0xCC, 0x13, 0x09,
+  0x8C, 0xCF, 0xF7, 0xF9, 0x93, 0xFF, 0xFF, 0x26, 0x33, 0x19, 0x80, 0x18,
+  0x18, 0x7E, 0xC3, 0xC0, 0xE0, 0xFC, 0x1F, 0x07, 0xC3, 0xC7, 0xFE, 0x18,
+  0x18, 0x78, 0x64, 0x32, 0x19, 0x17, 0x98, 0x18, 0x30, 0x60, 0xC7, 0xC6,
+  0x43, 0x21, 0x90, 0x78, 0x3E, 0x3F, 0x98, 0xC6, 0xC3, 0xC3, 0xCD, 0xB7,
+  0x8E, 0xE3, 0x3F, 0x8F, 0x60, 0xFF, 0xC0, 0x0E, 0x30, 0xC3, 0x86, 0x0C,
+  0x38, 0x70, 0xE1, 0xC3, 0x83, 0x06, 0x0E, 0x0C, 0x0C, 0x0E, 0xE1, 0xC3,
+  0x06, 0x1C, 0x70, 0xC3, 0x0C, 0x30, 0xC7, 0x1C, 0x63, 0x1C, 0xE0, 0x19,
+  0x27, 0x5B, 0xE3, 0xDE, 0xE4, 0x8C, 0x0C, 0x06, 0x03, 0x1F, 0xFF, 0xF8,
+  0x60, 0x30, 0x7F, 0xB6, 0xFF, 0xF0, 0xFF, 0x80, 0x01, 0x80, 0xC0, 0xC0,
+  0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0C, 0x0C, 0x06, 0x06, 0x03, 0x03,
+  0x00, 0x3C, 0x7E, 0xC6, 0xC6, 0xC7, 0xC7, 0xC7, 0xC6, 0xC6, 0x7E, 0x3C,
+  0x18, 0x33, 0xE6, 0xC1, 0x83, 0x06, 0x0C, 0x19, 0xFF, 0xF8, 0x7C, 0xFE,
+  0xC7, 0x07, 0x06, 0x06, 0x0C, 0x18, 0x70, 0xFF, 0xFF, 0x7C, 0xFE, 0xC7,
+  0x07, 0x3E, 0x3E, 0x07, 0x03, 0xC7, 0xFE, 0x7C, 0x03, 0x03, 0x83, 0xC3,
+  0x63, 0x31, 0x99, 0x8D, 0xFF, 0xFF, 0x81, 0x80, 0xC0, 0x7E, 0x7E, 0x60,
+  0xFC, 0xFE, 0x47, 0x03, 0x03, 0xC7, 0xFE, 0x7C, 0x3E, 0x7F, 0xC3, 0xDC,
+  0xFE, 0xC7, 0xC3, 0xC3, 0xC7, 0xFE, 0x7C, 0xFF, 0xFF, 0x06, 0x06, 0x0C,
+  0x0C, 0x18, 0x18, 0x38, 0x30, 0x70, 0x7C, 0xFE, 0xC3, 0xC3, 0xFE, 0xFE,
+  0xC7, 0xC3, 0xC3, 0xFE, 0x7C, 0x7C, 0xFE, 0xC7, 0xC3, 0xC3, 0xC3, 0xFE,
+  0x36, 0x0C, 0x1C, 0x38, 0xFF, 0x80, 0x3F, 0xE0, 0xFF, 0x80, 0x1F, 0xED,
+  0x80, 0x00, 0x83, 0xC7, 0x8F, 0x0E, 0x03, 0xC0, 0x7C, 0x07, 0x00, 0x80,
+  0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFC, 0xC0, 0x78, 0x0F, 0x00, 0xF0,
+  0x18, 0x7C, 0xF1, 0xE0, 0x80, 0x00, 0x7E, 0xFF, 0xC3, 0x03, 0x06, 0x0C,
+  0x18, 0x00, 0x38, 0x38, 0x38, 0x1E, 0x3F, 0x98, 0x68, 0x34, 0xFA, 0x4F,
+  0x26, 0x93, 0x4F, 0xA0, 0x18, 0x2F, 0xF3, 0xF0, 0x0C, 0x0E, 0x07, 0x83,
+  0xC3, 0x61, 0xB8, 0xCC, 0xFE, 0x7F, 0x30, 0xF8, 0x60, 0xFE, 0xFE, 0xC7,
+  0xC7, 0xFE, 0xFE, 0xC7, 0xC3, 0xC3, 0xFF, 0xFE, 0x7E, 0xFF, 0xC7, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xC0, 0xC7, 0xFE, 0x7C, 0xFC, 0xFE, 0xC6, 0xC7, 0xC7,
+  0xC7, 0xC7, 0xC7, 0xC6, 0xFE, 0xFC, 0xFF, 0xFF, 0xC0, 0xC0, 0xFF, 0xFF,
+  0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xC0, 0xFF, 0xFF, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xC0, 0x7E, 0xFF, 0xC7, 0xC0, 0xCF, 0xCF, 0xC3, 0xC3,
+  0xC3, 0xFF, 0x7B, 0xC7, 0xC7, 0xC7, 0xC7, 0xFF, 0xFF, 0xC7, 0xC7, 0xC7,
+  0xC7, 0xC7, 0xFF, 0xFC, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x19, 0xFF, 0xF8,
+  0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xC6, 0xFE, 0x7C, 0xC7,
+  0xC6, 0xCC, 0xDC, 0xFC, 0xFC, 0xEE, 0xC6, 0xC6, 0xC7, 0xC3, 0xC0, 0xC0,
+  0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xE1, 0xF1, 0xFC,
+  0xFE, 0xFF, 0xDF, 0x6F, 0xA7, 0xC3, 0xE1, 0xF0, 0xF8, 0x60, 0xC3, 0xE3,
+  0xE3, 0xF3, 0xF3, 0xDB, 0xDF, 0xCF, 0xC7, 0xC7, 0xC3, 0x7E, 0xFE, 0xC7,
+  0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC7, 0xFE, 0x7E, 0xFE, 0xFF, 0xC3, 0xC3,
+  0xC3, 0xC7, 0xFE, 0xFC, 0xC0, 0xC0, 0xC0, 0x7E, 0xFE, 0xC7, 0xC3, 0xC3,
+  0xC3, 0xC3, 0xC3, 0xC7, 0xFE, 0x7E, 0x08, 0x0F, 0x07, 0xFE, 0xFF, 0xC3,
+  0xC3, 0xC3, 0xFF, 0xFC, 0xCC, 0xCE, 0xC6, 0xC7, 0x3F, 0x3F, 0xD8, 0xEC,
+  0x07, 0xC1, 0xF8, 0x0F, 0x03, 0x63, 0xBF, 0x8F, 0x80, 0xFF, 0xFF, 0x18,
+  0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xC7, 0xC7, 0xC7, 0xC7,
+  0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xFE, 0x7E, 0xE1, 0xB1, 0xD8, 0xCE, 0x63,
+  0x31, 0xB0, 0xD8, 0x3C, 0x1E, 0x0E, 0x07, 0x00, 0xC1, 0xE4, 0xF3, 0x79,
+  0xBD, 0xDB, 0xED, 0xDE, 0xEF, 0x73, 0xB1, 0xD8, 0xC0, 0x73, 0x99, 0x8F,
+  0xC3, 0xC1, 0xE0, 0xE0, 0x78, 0x6C, 0x77, 0x31, 0xF8, 0xE0, 0xE1, 0xB9,
+  0x8D, 0xC7, 0xC1, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xFF,
+  0xFC, 0x38, 0x61, 0xC7, 0x0C, 0x38, 0x61, 0xFF, 0xF8, 0xFF, 0xFC, 0x30,
+  0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x3F, 0xFC, 0xC0, 0x30,
+  0x18, 0x06, 0x03, 0x00, 0xC0, 0x60, 0x18, 0x0C, 0x03, 0x01, 0x80, 0x60,
+  0x30, 0x0C, 0x06, 0xFF, 0xFC, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C,
+  0x38, 0x70, 0xE1, 0xC3, 0xFF, 0xFE, 0x1C, 0x0F, 0x0D, 0x86, 0x66, 0x37,
+  0x0C, 0xFF, 0xFF, 0xC0, 0xE0, 0xC0, 0x7C, 0xFE, 0xC6, 0x3E, 0xF6, 0xC6,
+  0xFF, 0x7F, 0xC0, 0xC0, 0xC0, 0xDE, 0xFE, 0xC7, 0xC7, 0xC7, 0xC7, 0xFE,
+  0xDE, 0x7D, 0xFF, 0x1E, 0x0C, 0x18, 0xFF, 0xBE, 0x06, 0x0C, 0x1B, 0xFF,
+  0xF8, 0xF1, 0xE3, 0xC7, 0xFD, 0xF8, 0x7D, 0xFF, 0x1F, 0xFF, 0xF8, 0x3F,
+  0xBE, 0x1F, 0x1F, 0xCC, 0x1F, 0xEF, 0xF1, 0x80, 0xC0, 0x60, 0x30, 0x18,
+  0x0C, 0x00, 0x03, 0x81, 0xCF, 0x8F, 0xE6, 0x3B, 0x1D, 0xFC, 0x3C, 0x7F,
+  0x3F, 0xF0, 0x7F, 0xF7, 0xF8, 0xC1, 0x83, 0x06, 0xFF, 0xF8, 0xF1, 0xE3,
+  0xC7, 0x8F, 0x18, 0x30, 0xC3, 0x3C, 0xF0, 0xC3, 0x0C, 0x33, 0xFF, 0xC0,
+  0x0E, 0x1C, 0x19, 0xF3, 0xE0, 0xC1, 0x83, 0x06, 0x0C, 0x1E, 0x3F, 0xEF,
+  0x80, 0xC0, 0xC0, 0xC0, 0xC7, 0xCE, 0xDC, 0xFC, 0xE6, 0xC6, 0xC7, 0xC3,
+  0xF3, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x33, 0xFF, 0xC0, 0xFB, 0xFF, 0xF3,
+  0x79, 0xBC, 0xDE, 0x6F, 0x37, 0x9B, 0xDF, 0xFF, 0x1E, 0x3C, 0x78, 0xF1,
+  0xE3, 0x7C, 0xFE, 0xC6, 0xC7, 0xC7, 0xC6, 0xFE, 0x7C, 0xDE, 0xFE, 0xC7,
+  0xC7, 0xC7, 0xC7, 0xFE, 0xDE, 0xC0, 0xC0, 0xC0, 0x7F, 0xFF, 0x1E, 0x3C,
+  0x78, 0xFF, 0xBF, 0x06, 0x0C, 0x18, 0xDE, 0xFF, 0xC3, 0xC0, 0xC0, 0xC0,
+  0xC0, 0xC0, 0x7D, 0xFF, 0x1B, 0xC0, 0xF8, 0xFF, 0xBE, 0x30, 0x18, 0x3F,
+  0xDF, 0xE3, 0x01, 0x80, 0xC0, 0x63, 0x3F, 0x8F, 0x80, 0xC7, 0x8F, 0x1E,
+  0x3C, 0x78, 0xFF, 0xBF, 0xE1, 0xB1, 0xDC, 0xC6, 0x63, 0x60, 0xF0, 0x70,
+  0x38, 0xC1, 0xE4, 0xF3, 0x6F, 0xB7, 0x5B, 0xBD, 0xCC, 0xC6, 0x73, 0x99,
+  0x87, 0x83, 0x81, 0xE1, 0xB1, 0xCD, 0xC3, 0xE1, 0xB1, 0x8C, 0xC6, 0xC1,
+  0xE0, 0xE0, 0x70, 0x30, 0x38, 0x18, 0x18, 0x00, 0xFF, 0xFC, 0x30, 0xC3,
+  0x0C, 0x3F, 0xFF, 0x1F, 0x1F, 0x18, 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0xF8,
+  0xF8, 0x0C, 0x1C, 0x18, 0x18, 0x18, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF,
+  0xC0, 0xF8, 0xFC, 0x0C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x18,
+  0x18, 0x18, 0x1C, 0x0C, 0xFC, 0xF8, 0x78, 0xFF, 0xE1, 0xC0 };
+
+const GFXglyph nk57_monospace_no_bd7pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   9,    0,    0 },   // 0x20 ' '
+  {     1,   3,  11,   9,    3,  -10 },   // 0x21 '!'
+  {     6,   6,   5,   9,    2,  -10 },   // 0x22 '"'
+  {    10,   9,  11,   9,    0,  -10 },   // 0x23 '#'
+  {    23,   8,  14,   9,    1,  -12 },   // 0x24 '$'
+  {    37,   9,  13,   9,    0,  -11 },   // 0x25 '%'
+  {    52,   9,  11,   9,    0,  -10 },   // 0x26 '&'
+  {    65,   2,   5,   9,    4,  -10 },   // 0x27 '''
+  {    67,   7,  17,   9,    2,  -13 },   // 0x28 '('
+  {    82,   6,  17,   9,    1,  -13 },   // 0x29 ')'
+  {    95,   7,   8,   9,    1,  -10 },   // 0x2A '*'
+  {   102,   9,   7,   9,    0,   -8 },   // 0x2B '+'
+  {   110,   3,   5,   9,    3,   -2 },   // 0x2C ','
+  {   112,   6,   2,   9,    2,   -5 },   // 0x2D '-'
+  {   114,   3,   3,   9,    3,   -2 },   // 0x2E '.'
+  {   116,   9,  15,   9,    0,  -12 },   // 0x2F '/'
+  {   133,   8,  11,   9,    1,  -10 },   // 0x30 '0'
+  {   144,   7,  11,   9,    1,  -10 },   // 0x31 '1'
+  {   154,   8,  11,   9,    1,  -10 },   // 0x32 '2'
+  {   165,   8,  11,   9,    1,  -10 },   // 0x33 '3'
+  {   176,   9,  11,   9,    0,  -10 },   // 0x34 '4'
+  {   189,   8,  11,   9,    1,  -10 },   // 0x35 '5'
+  {   200,   8,  11,   9,    1,  -10 },   // 0x36 '6'
+  {   211,   8,  11,   9,    1,  -10 },   // 0x37 '7'
+  {   222,   8,  11,   9,    1,  -10 },   // 0x38 '8'
+  {   233,   8,  11,   9,    1,  -10 },   // 0x39 '9'
+  {   244,   3,   9,   9,    3,   -8 },   // 0x3A ':'
+  {   248,   3,  11,   9,    3,   -8 },   // 0x3B ';'
+  {   253,   9,   9,   9,    0,   -9 },   // 0x3C '<'
+  {   264,   9,   6,   9,    0,   -8 },   // 0x3D '='
+  {   271,   9,   9,   9,    0,   -9 },   // 0x3E '>'
+  {   282,   8,  11,   9,    1,  -10 },   // 0x3F '?'
+  {   293,   9,  13,   9,    0,  -10 },   // 0x40 '@'
+  {   308,   9,  11,   9,    0,  -10 },   // 0x41 'A'
+  {   321,   8,  11,   9,    1,  -10 },   // 0x42 'B'
+  {   332,   8,  11,   9,    1,  -10 },   // 0x43 'C'
+  {   343,   8,  11,   9,    1,  -10 },   // 0x44 'D'
+  {   354,   8,  11,   9,    1,  -10 },   // 0x45 'E'
+  {   365,   8,  11,   9,    1,  -10 },   // 0x46 'F'
+  {   376,   8,  11,   9,    1,  -10 },   // 0x47 'G'
+  {   387,   8,  11,   9,    1,  -10 },   // 0x48 'H'
+  {   398,   7,  11,   9,    1,  -10 },   // 0x49 'I'
+  {   408,   8,  11,   9,    1,  -10 },   // 0x4A 'J'
+  {   419,   8,  11,   9,    1,  -10 },   // 0x4B 'K'
+  {   430,   8,  11,   9,    1,  -10 },   // 0x4C 'L'
+  {   441,   9,  11,   9,    0,  -10 },   // 0x4D 'M'
+  {   454,   8,  11,   9,    1,  -10 },   // 0x4E 'N'
+  {   465,   8,  11,   9,    1,  -10 },   // 0x4F 'O'
+  {   476,   8,  11,   9,    1,  -10 },   // 0x50 'P'
+  {   487,   8,  14,   9,    1,  -10 },   // 0x51 'Q'
+  {   501,   8,  11,   9,    1,  -10 },   // 0x52 'R'
+  {   512,   9,  11,   9,    0,  -10 },   // 0x53 'S'
+  {   525,   8,  11,   9,    1,  -10 },   // 0x54 'T'
+  {   536,   8,  11,   9,    1,  -10 },   // 0x55 'U'
+  {   547,   9,  11,   9,    0,  -10 },   // 0x56 'V'
+  {   560,   9,  11,   9,    0,  -10 },   // 0x57 'W'
+  {   573,   9,  11,   9,    0,  -10 },   // 0x58 'X'
+  {   586,   9,  11,   9,    0,  -10 },   // 0x59 'Y'
+  {   599,   7,  11,   9,    1,  -10 },   // 0x5A 'Z'
+  {   609,   6,  17,   9,    3,  -13 },   // 0x5B '['
+  {   622,   9,  15,   9,    0,  -12 },   // 0x5C '\'
+  {   639,   7,  17,   9,    0,  -13 },   // 0x5D ']'
+  {   654,   9,   6,   9,    0,  -10 },   // 0x5E '^'
+  {   661,   9,   2,   9,    0,    2 },   // 0x5F '_'
+  {   664,   5,   2,   9,    2,  -10 },   // 0x60 '`'
+  {   666,   8,   8,   9,    1,   -7 },   // 0x61 'a'
+  {   674,   8,  11,   9,    1,  -10 },   // 0x62 'b'
+  {   685,   7,   8,   9,    1,   -7 },   // 0x63 'c'
+  {   692,   7,  11,   9,    1,  -10 },   // 0x64 'd'
+  {   702,   7,   8,   9,    1,   -7 },   // 0x65 'e'
+  {   709,   9,  11,   9,    0,  -10 },   // 0x66 'f'
+  {   722,   9,  13,   9,    0,   -9 },   // 0x67 'g'
+  {   737,   7,  11,   9,    1,  -10 },   // 0x68 'h'
+  {   747,   6,  11,   9,    2,  -10 },   // 0x69 'i'
+  {   756,   7,  14,   9,    1,  -10 },   // 0x6A 'j'
+  {   769,   8,  11,   9,    1,  -10 },   // 0x6B 'k'
+  {   780,   6,  11,   9,    2,  -10 },   // 0x6C 'l'
+  {   789,   9,   8,   9,    0,   -7 },   // 0x6D 'm'
+  {   798,   7,   8,   9,    1,   -7 },   // 0x6E 'n'
+  {   805,   8,   8,   9,    1,   -7 },   // 0x6F 'o'
+  {   813,   8,  11,   9,    1,   -7 },   // 0x70 'p'
+  {   824,   7,  11,   9,    1,   -7 },   // 0x71 'q'
+  {   834,   8,   8,   9,    1,   -7 },   // 0x72 'r'
+  {   842,   7,   8,   9,    1,   -7 },   // 0x73 's'
+  {   849,   9,  10,   9,    0,   -9 },   // 0x74 't'
+  {   861,   7,   8,   9,    1,   -7 },   // 0x75 'u'
+  {   868,   9,   8,   9,    0,   -7 },   // 0x76 'v'
+  {   877,   9,   8,   9,    0,   -7 },   // 0x77 'w'
+  {   886,   9,   8,   9,    0,   -7 },   // 0x78 'x'
+  {   895,   9,  11,   9,    0,   -7 },   // 0x79 'y'
+  {   908,   7,   8,   9,    1,   -7 },   // 0x7A 'z'
+  {   915,   8,  17,   9,    1,  -13 },   // 0x7B '{'
+  {   932,   2,  17,   9,    4,  -13 },   // 0x7C '|'
+  {   937,   8,  17,   9,    0,  -13 },   // 0x7D '}'
+  {   954,   9,   3,   9,    0,   -6 } }; // 0x7E '~'
+
+const GFXfont nk57_monospace_no_bd7pt7b PROGMEM = {
+  (uint8_t  *)nk57_monospace_no_bd7pt7bBitmaps,
+  (GFXglyph *)nk57_monospace_no_bd7pt7bGlyphs,
+  0x20, 0x7E, 16 };
+
+// Approx. 1630 bytes
+const uint8_t EuphemiaCAS7pt7bBitmaps[] PROGMEM = {
+  0x00, 0xFF, 0x40, 0xB4, 0x11, 0x84, 0x41, 0x13, 0xFF, 0x11, 0x08, 0x42,
+  0x10, 0x88, 0xFF, 0xC8, 0x82, 0x21, 0x88, 0x10, 0x79, 0x52, 0x85, 0x06,
+  0x07, 0x0B, 0x12, 0x27, 0x5B, 0xE1, 0x00, 0x70, 0x51, 0x12, 0x24, 0x44,
+  0x88, 0xA0, 0xEB, 0x82, 0x88, 0x51, 0x12, 0x24, 0x45, 0x87, 0x20, 0x00,
+  0x30, 0x48, 0x48, 0x50, 0x20, 0xD0, 0x89, 0x8A, 0xC6, 0x7B, 0xC0, 0x29,
+  0x49, 0x24, 0x89, 0x22, 0x91, 0x12, 0x49, 0x29, 0x48, 0xAB, 0x88, 0xEA,
+  0x80, 0x10, 0x20, 0x47, 0xF1, 0x02, 0x04, 0x00, 0x58, 0xE0, 0x80, 0x01,
+  0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
+  0x80, 0x79, 0x28, 0x61, 0x86, 0x18, 0x61, 0x49, 0xE0, 0x65, 0x08, 0x42,
+  0x10, 0x84, 0x27, 0xC0, 0x7A, 0x10, 0x41, 0x08, 0x42, 0x10, 0x83, 0xF0,
+  0x7A, 0x20, 0x42, 0x30, 0x30, 0x41, 0x8F, 0xE0, 0x04, 0x18, 0x51, 0x22,
+  0x48, 0xBF, 0x82, 0x04, 0x08, 0xFA, 0x08, 0x3E, 0x8C, 0x10, 0x41, 0x8B,
+  0xE0, 0x3D, 0x08, 0x3E, 0x8E, 0x18, 0x61, 0xCD, 0xE0, 0xFC, 0x10, 0x82,
+  0x08, 0x41, 0x08, 0x21, 0x00, 0x7A, 0x18, 0x73, 0x31, 0x28, 0x61, 0xCD,
+  0xE0, 0x7B, 0x38, 0x61, 0xC5, 0xF0, 0x43, 0x0B, 0xC0, 0x82, 0x40, 0x05,
+  0x80, 0x08, 0x88, 0x88, 0x41, 0x04, 0x10, 0x40, 0xFE, 0x03, 0xF8, 0x86,
+  0x18, 0x61, 0x8C, 0xCC, 0xC4, 0x00, 0xF4, 0xC2, 0x11, 0x91, 0x08, 0x02,
+  0x00, 0x0F, 0x83, 0x04, 0x40, 0x24, 0x01, 0x8F, 0x99, 0x09, 0x90, 0x99,
+  0x09, 0x99, 0xA4, 0xFE, 0x60, 0x03, 0x00, 0x0F, 0x00, 0x08, 0x18, 0x14,
+  0x14, 0x24, 0x22, 0x7E, 0x43, 0x41, 0xC1, 0xFA, 0x18, 0x63, 0xF2, 0x38,
+  0x61, 0x8F, 0xE0, 0x3C, 0x42, 0xC0, 0x80, 0x80, 0x80, 0x80, 0xC0, 0x63,
+  0x3C, 0xF9, 0x1A, 0x1C, 0x18, 0x30, 0x60, 0xC2, 0x8D, 0xF0, 0xFA, 0x08,
+  0x20, 0xFA, 0x08, 0x20, 0x83, 0xF0, 0xFC, 0x21, 0x0F, 0xC2, 0x10, 0x84,
+  0x00, 0x3C, 0x8F, 0x04, 0x08, 0x10, 0x60, 0xE1, 0x42, 0x7C, 0x83, 0x06,
+  0x0C, 0x1F, 0xF0, 0x60, 0xC1, 0x83, 0x04, 0xFF, 0xC0, 0x04, 0x10, 0x41,
+  0x04, 0x10, 0x61, 0x45, 0xE0, 0x87, 0x12, 0x45, 0x0C, 0x18, 0x28, 0x48,
+  0x89, 0x0C, 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, 0x83, 0xF0, 0x80, 0xE0,
+  0xF0, 0x78, 0x3A, 0x2D, 0x16, 0x53, 0x29, 0x94, 0xC4, 0x40, 0x81, 0xC1,
+  0xA1, 0xB1, 0x91, 0x89, 0x8D, 0x85, 0x83, 0x83, 0x3E, 0x31, 0x90, 0x70,
+  0x18, 0x0C, 0x06, 0x03, 0x82, 0x63, 0x1F, 0x00, 0xFA, 0x38, 0x61, 0x8F,
+  0xC8, 0x20, 0x82, 0x00, 0x3E, 0x31, 0x90, 0x50, 0x18, 0x0C, 0x06, 0x03,
+  0x83, 0x63, 0x1F, 0x01, 0x00, 0x40, 0x10, 0xF9, 0x1A, 0x14, 0x28, 0xDE,
+  0x24, 0x44, 0x8D, 0x0C, 0x3C, 0x8D, 0x02, 0x03, 0x01, 0x80, 0x81, 0xC6,
+  0xF8, 0xFE, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, 0x20, 0x81, 0x81,
+  0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xC3, 0x7C, 0xC1, 0x43, 0x42, 0x62,
+  0x26, 0x24, 0x34, 0x18, 0x18, 0x18, 0xC6, 0x34, 0x62, 0x46, 0x24, 0x62,
+  0x69, 0x62, 0x94, 0x29, 0x42, 0x94, 0x30, 0xC1, 0x08, 0x43, 0x22, 0x24,
+  0x1C, 0x08, 0x18, 0x34, 0x26, 0x42, 0xC1, 0x82, 0x89, 0x11, 0x43, 0x02,
+  0x04, 0x08, 0x10, 0x20, 0x7E, 0x08, 0x10, 0x41, 0x02, 0x08, 0x30, 0x41,
+  0xFC, 0xEA, 0xAA, 0xAA, 0xC0, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10,
+  0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x01, 0xD5, 0x55, 0x55, 0xC0, 0x08,
+  0x18, 0x14, 0x22, 0x62, 0xC1, 0xFE, 0x5C, 0x80, 0x72, 0x20, 0x9E, 0x8A,
+  0x2F, 0xC0, 0x82, 0x08, 0x3E, 0x8E, 0x18, 0x61, 0x8F, 0xE0, 0x39, 0x18,
+  0x20, 0x81, 0x17, 0x80, 0x04, 0x10, 0x5F, 0x46, 0x18, 0x61, 0xC5, 0xF0,
+  0x7A, 0x1F, 0xE0, 0x83, 0x17, 0x80, 0x3A, 0x11, 0xE4, 0x21, 0x08, 0x42,
+  0x00, 0x7E, 0x28, 0xA2, 0x72, 0x07, 0xA2, 0x8B, 0xC0, 0x82, 0x08, 0x2E,
+  0xC6, 0x18, 0x61, 0x86, 0x10, 0x9F, 0xC0, 0x20, 0x12, 0x49, 0x24, 0x9C,
+  0x84, 0x21, 0x3B, 0x72, 0x94, 0x94, 0x40, 0xAA, 0xAA, 0xB0, 0xF7, 0x44,
+  0x62, 0x31, 0x18, 0x8C, 0x46, 0x22, 0xBB, 0x18, 0x61, 0x86, 0x18, 0x40,
+  0x7B, 0x38, 0x61, 0x87, 0x37, 0x80, 0xFA, 0x38, 0x61, 0x86, 0x3F, 0xA0,
+  0x82, 0x00, 0x7F, 0x18, 0x61, 0x87, 0x17, 0xC1, 0x04, 0x10, 0xBC, 0x88,
+  0x88, 0x80, 0x74, 0x60, 0xE0, 0xC5, 0xC0, 0x44, 0xF4, 0x44, 0x44, 0x70,
+  0x86, 0x18, 0x61, 0x86, 0x17, 0xC0, 0x82, 0x89, 0x12, 0x22, 0x85, 0x04,
+  0x00, 0x88, 0xA4, 0xD5, 0x4A, 0xA3, 0x51, 0x90, 0x88, 0xC5, 0x23, 0x04,
+  0x31, 0x2C, 0x40, 0xC6, 0x89, 0x11, 0x42, 0x83, 0x04, 0x08, 0x21, 0xC0,
+  0x7C, 0x31, 0x84, 0x21, 0x0F, 0xC0, 0x19, 0x08, 0x42, 0x33, 0x0C, 0x21,
+  0x08, 0x41, 0x80, 0xFF, 0xF8, 0xC2, 0x22, 0x22, 0x12, 0x22, 0x22, 0xC0,
+  0x71, 0xCE };
+
+const GFXglyph EuphemiaCAS7pt7bGlyphs[] PROGMEM = {
+  {     0,   1,   1,   7,    0,    0 },   // 0x20 ' '
+  {     1,   1,  10,   3,    1,   -9 },   // 0x21 '!'
+  {     3,   3,   2,   5,    1,   -9 },   // 0x22 '"'
+  {     4,  10,  12,  12,    1,  -10 },   // 0x23 '#'
+  {    19,   7,  13,   8,    0,  -11 },   // 0x24 '$'
+  {    31,  11,  12,  13,    1,  -10 },   // 0x25 '%'
+  {    48,   8,  10,  10,    1,   -9 },   // 0x26 '&'
+  {    58,   1,   2,   3,    1,   -9 },   // 0x27 '''
+  {    59,   3,  13,   4,    1,  -11 },   // 0x28 '('
+  {    64,   3,  13,   4,    1,  -11 },   // 0x29 ')'
+  {    69,   5,   5,   7,    1,  -10 },   // 0x2A '*'
+  {    73,   7,   7,   8,    1,   -7 },   // 0x2B '+'
+  {    80,   2,   3,   3,    0,    0 },   // 0x2C ','
+  {    81,   3,   1,   5,    1,   -4 },   // 0x2D '-'
+  {    82,   1,   1,   3,    1,    0 },   // 0x2E '.'
+  {    83,   8,  14,   8,    0,  -11 },   // 0x2F '/'
+  {    97,   6,  10,   8,    1,   -9 },   // 0x30 '0'
+  {   105,   5,  10,   8,    2,   -9 },   // 0x31 '1'
+  {   112,   6,  10,   8,    1,   -9 },   // 0x32 '2'
+  {   120,   6,  10,   8,    1,   -9 },   // 0x33 '3'
+  {   128,   7,  10,   8,    0,   -9 },   // 0x34 '4'
+  {   137,   6,  10,   8,    1,   -9 },   // 0x35 '5'
+  {   145,   6,  10,   8,    1,   -9 },   // 0x36 '6'
+  {   153,   6,  10,   8,    1,   -9 },   // 0x37 '7'
+  {   161,   6,  10,   8,    1,   -9 },   // 0x38 '8'
+  {   169,   6,  10,   8,    1,   -9 },   // 0x39 '9'
+  {   177,   1,   7,   3,    1,   -6 },   // 0x3A ':'
+  {   178,   2,   9,   3,    0,   -6 },   // 0x3B ';'
+  {   181,   5,  10,   7,    1,   -9 },   // 0x3C '<'
+  {   188,   7,   3,   9,    1,   -6 },   // 0x3D '='
+  {   191,   5,  10,   7,    1,   -9 },   // 0x3E '>'
+  {   198,   5,  10,   7,    1,   -9 },   // 0x3F '?'
+  {   205,  12,  13,  15,    1,   -9 },   // 0x40 '@'
+  {   225,   8,  10,   9,    0,   -9 },   // 0x41 'A'
+  {   235,   6,  10,   9,    1,   -9 },   // 0x42 'B'
+  {   243,   8,  10,   9,    1,   -9 },   // 0x43 'C'
+  {   253,   7,  10,   9,    1,   -9 },   // 0x44 'D'
+  {   262,   6,  10,   8,    1,   -9 },   // 0x45 'E'
+  {   270,   5,  10,   7,    1,   -9 },   // 0x46 'F'
+  {   277,   7,  10,   9,    1,   -9 },   // 0x47 'G'
+  {   286,   7,  10,  10,    1,   -9 },   // 0x48 'H'
+  {   295,   1,  10,   3,    1,   -9 },   // 0x49 'I'
+  {   297,   6,  10,   7,    0,   -9 },   // 0x4A 'J'
+  {   305,   7,  10,   9,    1,   -9 },   // 0x4B 'K'
+  {   314,   6,  10,   7,    1,   -9 },   // 0x4C 'L'
+  {   322,   9,  10,  11,    1,   -9 },   // 0x4D 'M'
+  {   334,   8,  10,  10,    1,   -9 },   // 0x4E 'N'
+  {   344,   9,  10,  11,    1,   -9 },   // 0x4F 'O'
+  {   356,   6,  10,   8,    1,   -9 },   // 0x50 'P'
+  {   364,   9,  13,  11,    1,   -9 },   // 0x51 'Q'
+  {   379,   7,  10,   8,    1,   -9 },   // 0x52 'R'
+  {   388,   7,  10,   8,    0,   -9 },   // 0x53 'S'
+  {   397,   7,  10,   8,    1,   -9 },   // 0x54 'T'
+  {   406,   8,  10,  10,    1,   -9 },   // 0x55 'U'
+  {   416,   8,  10,   8,    0,   -9 },   // 0x56 'V'
+  {   426,  12,  10,  12,    0,   -9 },   // 0x57 'W'
+  {   441,   8,  10,   9,    0,   -9 },   // 0x58 'X'
+  {   451,   7,  10,   8,    0,   -9 },   // 0x59 'Y'
+  {   460,   7,  10,   8,    0,   -9 },   // 0x5A 'Z'
+  {   469,   2,  13,   4,    1,  -11 },   // 0x5B '['
+  {   473,   8,  14,   9,    0,  -11 },   // 0x5C '\'
+  {   487,   2,  13,   4,    1,  -11 },   // 0x5D ']'
+  {   491,   8,   6,   9,    0,  -10 },   // 0x5E '^'
+  {   497,   7,   1,   7,    0,    3 },   // 0x5F '_'
+  {   498,   3,   3,   0,   -2,  -10 },   // 0x60 '`'
+  {   500,   6,   7,   8,    1,   -6 },   // 0x61 'a'
+  {   506,   6,  10,   8,    1,   -9 },   // 0x62 'b'
+  {   514,   6,   7,   7,    1,   -6 },   // 0x63 'c'
+  {   520,   6,  10,   8,    1,   -9 },   // 0x64 'd'
+  {   528,   6,   7,   8,    1,   -6 },   // 0x65 'e'
+  {   534,   5,  10,   4,    0,   -9 },   // 0x66 'f'
+  {   541,   6,  10,   8,    1,   -6 },   // 0x67 'g'
+  {   549,   6,  10,   8,    1,   -9 },   // 0x68 'h'
+  {   557,   1,  10,   3,    1,   -9 },   // 0x69 'i'
+  {   559,   3,  13,   3,   -1,   -9 },   // 0x6A 'j'
+  {   564,   5,  10,   7,    1,   -9 },   // 0x6B 'k'
+  {   571,   2,  10,   3,    1,   -9 },   // 0x6C 'l'
+  {   574,   9,   7,  11,    1,   -6 },   // 0x6D 'm'
+  {   582,   6,   7,   8,    1,   -6 },   // 0x6E 'n'
+  {   588,   6,   7,   8,    1,   -6 },   // 0x6F 'o'
+  {   594,   6,  10,   8,    1,   -6 },   // 0x70 'p'
+  {   602,   6,  10,   8,    1,   -6 },   // 0x71 'q'
+  {   610,   4,   7,   5,    1,   -6 },   // 0x72 'r'
+  {   614,   5,   7,   7,    1,   -6 },   // 0x73 's'
+  {   619,   4,   9,   5,    0,   -8 },   // 0x74 't'
+  {   624,   6,   7,   8,    1,   -6 },   // 0x75 'u'
+  {   630,   7,   7,   7,    0,   -6 },   // 0x76 'v'
+  {   637,   9,   7,   9,    0,   -6 },   // 0x77 'w'
+  {   645,   6,   7,   6,    0,   -6 },   // 0x78 'x'
+  {   651,   7,  10,   7,    0,   -6 },   // 0x79 'y'
+  {   660,   6,   7,   7,    0,   -6 },   // 0x7A 'z'
+  {   666,   5,  13,   5,    0,  -10 },   // 0x7B '{'
+  {   675,   1,  13,   7,    3,   -9 },   // 0x7C '|'
+  {   677,   4,  13,   5,    0,  -10 },   // 0x7D '}'
+  {   684,   8,   2,   9,    0,   -4 } }; // 0x7E '~'
+
+const GFXfont EuphemiaCAS7pt7b PROGMEM = {
+  (uint8_t  *)EuphemiaCAS7pt7bBitmaps,
+  (GFXglyph *)EuphemiaCAS7pt7bGlyphs,
+  0x20, 0x7E, 19 };
+
+// Approx. 1358 bytes
+
+
+// Approx. 1522 bytes
+
+#endif /* CUSTOM_FONTS_H_ */
--- /dev/null
+++ b/LEAF/Inc/debug.h
@@ -1,0 +1,56 @@
+/**
+  ******************************************************************************
+  * File Name          : DEBUG.h
+  * Description        : This file provides code for the configuration
+  *                      of the DEBUG instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __debug_H
+#define __debug_H
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_DEBUG_Init(void);
+
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__ debug_H */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/dma.h
@@ -1,0 +1,56 @@
+/**
+  ******************************************************************************
+  * File Name          : dma.h
+  * Description        : This file contains all the function prototypes for
+  *                      the dma.c file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __dma_H
+#define __dma_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* DMA memory to memory transfer handles -------------------------------------*/
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_DMA_Init(void);
+
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __dma_H */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/eeprom.h
@@ -1,0 +1,125 @@
+
+
+/**
+  ******************************************************************************
+  * @file    EEPROM_Emulation/inc/eeprom.h
+  * @author  MCD Application Team
+  * @brief   This file contains all the functions prototypes for the EEPROM
+  *          emulation firmware library.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __EEPROM_H
+#define __EEPROM_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32h7xx_hal.h"
+#include "main.h"
+
+/* Exported constants --------------------------------------------------------*/
+/* EEPROM emulation firmware error codes */
+#define EE_OK      (uint32_t)HAL_OK
+#define EE_ERROR   (uint32_t)HAL_ERROR
+#define EE_BUSY    (uint32_t)HAL_BUSY
+#define EE_TIMEOUT (uint32_t)HAL_TIMEOUT
+
+
+#define FLASH_BASE_ADDR      (uint32_t)(FLASH_BASE)
+#define FLASH_END_ADDR       (uint32_t)(0x081FFFFF)
+
+/* Base address of the Flash sectors Bank 1 */
+#define ADDR_FLASH_SECTOR_0_BANK1     ((uint32_t)0x08000000) /* Base @ of Sector 0, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_1_BANK1     ((uint32_t)0x08020000) /* Base @ of Sector 1, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_2_BANK1     ((uint32_t)0x08040000) /* Base @ of Sector 2, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_3_BANK1     ((uint32_t)0x08060000) /* Base @ of Sector 3, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_4_BANK1     ((uint32_t)0x08080000) /* Base @ of Sector 4, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_5_BANK1     ((uint32_t)0x080A0000) /* Base @ of Sector 5, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_6_BANK1     ((uint32_t)0x080C0000) /* Base @ of Sector 6, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_7_BANK1     ((uint32_t)0x080E0000) /* Base @ of Sector 7, 128 Kbytes */
+
+/* Base address of the Flash sectors Bank 2 */
+#define ADDR_FLASH_SECTOR_0_BANK2     ((uint32_t)0x08100000) /* Base @ of Sector 0, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_1_BANK2     ((uint32_t)0x08120000) /* Base @ of Sector 1, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_2_BANK2     ((uint32_t)0x08140000) /* Base @ of Sector 2, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_3_BANK2     ((uint32_t)0x08160000) /* Base @ of Sector 3, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_4_BANK2     ((uint32_t)0x08180000) /* Base @ of Sector 4, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_5_BANK2     ((uint32_t)0x081A0000) /* Base @ of Sector 5, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_6_BANK2     ((uint32_t)0x081C0000) /* Base @ of Sector 6, 128 Kbytes */
+#define ADDR_FLASH_SECTOR_7_BANK2     ((uint32_t)0x081E0000) /* Base @ of Sector 7, 128 Kbytes */
+
+
+/* Define the size of the sectors to be used */
+
+  #define PAGE_SIZE               (uint32_t)0x20000  /* Page size = 128KByte */
+
+
+/* Device voltage range supposed to be [2.7V to 3.6V], the operation will
+   be done by word  */
+#define VOLTAGE_RANGE           (uint8_t)VOLTAGE_RANGE_3
+
+/* EEPROM emulation start address in Flash */
+
+  #define EEPROM_START_ADDRESS  ADDR_FLASH_SECTOR_6_BANK2 /* sector6 of bank 2 */
+
+
+/* Pages 0 and 1 base and end addresses */
+#define PAGE0_BASE_ADDRESS    ((uint32_t)(EEPROM_START_ADDRESS + 0x0000))
+#define PAGE0_END_ADDRESS     ((uint32_t)(EEPROM_START_ADDRESS + (PAGE_SIZE - 1)))
+
+  #define PAGE0_ID               FLASH_SECTOR_6
+
+
+#define PAGE1_BASE_ADDRESS    ((uint32_t)(EEPROM_START_ADDRESS + PAGE_SIZE))
+#define PAGE1_END_ADDRESS     ((uint32_t)(EEPROM_START_ADDRESS + (2 * PAGE_SIZE - 1)))
+
+  #define PAGE1_ID               FLASH_SECTOR_7
+
+
+/* Used Flash pages for EEPROM emulation */
+#define PAGE0                 ((uint16_t)0x0000)
+#define PAGE1                 ((uint16_t)0x0001) /* Page nb between PAGE0_BASE_ADDRESS & PAGE1_BASE_ADDRESS*/
+
+/* No valid page define */
+#define NO_VALID_PAGE         ((uint16_t)0x00AB)
+
+/* Page status definitions */
+#define ERASED                ((uint16_t)0xFFFF)     /* Page is empty */
+#define RECEIVE_DATA          ((uint16_t)0xEEEE)     /* Page is marked to receive data */
+#define VALID_PAGE            ((uint16_t)0x0000)     /* Page containing valid data */
+
+/* Valid pages in read and write defines */
+#define READ_FROM_VALID_PAGE  ((uint8_t)0x00)
+#define WRITE_IN_VALID_PAGE   ((uint8_t)0x01)
+
+/* Page full define */
+#define PAGE_FULL             ((uint8_t)0x80)
+
+/* Variables' number */
+#define NB_OF_VAR             ((uint8_t)0x03)
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+
+/* Virtual address defined by the user: 0xFFFF value is prohibited */
+extern uint16_t VirtAddVarTab[NB_OF_VAR];
+uint16_t EE_Init(void);
+uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data);
+uint16_t EE_WriteVariable(uint16_t VirtAddress, uint16_t Data);
+
+#endif /* __EEPROM_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
--- /dev/null
+++ b/LEAF/Inc/fatfs.h
@@ -1,0 +1,49 @@
+/**
+  ******************************************************************************
+  * @file   fatfs.h
+  * @brief  Header for fatfs applications
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __fatfs_H
+#define __fatfs_H
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+#include "ff.h"
+#include "ff_gen_drv.h"
+#include "sd_diskio.h" /* defines SD_Driver as external */
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+extern uint8_t retSD; /* Return value for SD */
+extern char SDPath[4]; /* SD logical drive path */
+extern FATFS SDFatFS; /* File system object for SD logical drive */
+extern FIL SDFile; /* File object for SD */
+
+void MX_FATFS_Init(void);
+
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+#ifdef __cplusplus
+}
+#endif
+#endif /*__fatfs_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/fatfs_platform.h
@@ -1,0 +1,26 @@
+/**
+  ******************************************************************************
+  * @file           : fatfs_platform.h
+  * @brief          : fatfs_platform header file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+*/
+/* Includes ------------------------------------------------------------------*/
+#include "stm32h7xx_hal.h"           
+/* Defines ------------------------------------------------------------------*/
+#define SD_PRESENT               ((uint8_t)0x01)  /* also in bsp_driver_sd.h */
+#define SD_NOT_PRESENT           ((uint8_t)0x00)  /* also in bsp_driver_sd.h */
+#define SD_DETECT_PIN         GPIO_PIN_13
+#define SD_DETECT_GPIO_PORT   GPIOC
+/* Prototypes ---------------------------------------------------------------*/
+uint8_t	BSP_PlatformIsDetected(void);
--- /dev/null
+++ b/LEAF/Inc/ffconf.h
@@ -1,0 +1,269 @@
+/* USER CODE BEGIN Header */
+/**
+  ******************************************************************************
+  *  FatFs - Generic FAT file system module  R0.12c (C)ChaN, 2017
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* USER CODE END Header */
+
+#ifndef _FFCONF
+#define _FFCONF 68300	/* Revision ID */
+
+/*-----------------------------------------------------------------------------/
+/ Additional user header to be used  
+/-----------------------------------------------------------------------------*/
+#include "main.h"
+#include "stm32h7xx_hal.h"
+#include "bsp_driver_sd.h"
+
+/*-----------------------------------------------------------------------------/
+/ Function Configurations
+/-----------------------------------------------------------------------------*/
+
+#define _FS_READONLY         0      /* 0:Read/Write or 1:Read only */
+/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
+/  Read-only configuration removes writing API functions, f_write(), f_sync(),
+/  f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
+/  and optional writing functions as well. */
+
+#define _FS_MINIMIZE         0      /* 0 to 3 */
+/* This option defines minimization level to remove some basic API functions.
+/
+/   0: All basic functions are enabled.
+/   1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename()
+/      are removed.
+/   2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
+/   3: f_lseek() function is removed in addition to 2. */
+
+#define _USE_STRFUNC         2      /* 0:Disable or 1-2:Enable */
+/* This option switches string functions, f_gets(), f_putc(), f_puts() and
+/  f_printf().
+/
+/  0: Disable string functions.
+/  1: Enable without LF-CRLF conversion.
+/  2: Enable with LF-CRLF conversion. */
+
+#define _USE_FIND            0
+/* This option switches filtered directory read functions, f_findfirst() and
+/  f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
+
+#define _USE_MKFS            1
+/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
+
+#define _USE_FASTSEEK        1
+/* This option switches fast seek feature. (0:Disable or 1:Enable) */
+
+#define	_USE_EXPAND		0
+/* This option switches f_expand function. (0:Disable or 1:Enable) */
+
+#define _USE_CHMOD		0
+/* This option switches attribute manipulation functions, f_chmod() and f_utime().
+/  (0:Disable or 1:Enable) Also _FS_READONLY needs to be 0 to enable this option. */
+
+#define _USE_LABEL           0
+/* This option switches volume label functions, f_getlabel() and f_setlabel().
+/  (0:Disable or 1:Enable) */
+
+#define _USE_FORWARD         0
+/* This option switches f_forward() function. (0:Disable or 1:Enable) */
+
+/*-----------------------------------------------------------------------------/
+/ Locale and Namespace Configurations
+/-----------------------------------------------------------------------------*/
+
+#define _CODE_PAGE         850
+/* This option specifies the OEM code page to be used on the target system.
+/  Incorrect setting of the code page can cause a file open failure.
+/
+/   1   - ASCII (No extended character. Non-LFN cfg. only)
+/   437 - U.S.
+/   720 - Arabic
+/   737 - Greek
+/   771 - KBL
+/   775 - Baltic
+/   850 - Latin 1
+/   852 - Latin 2
+/   855 - Cyrillic
+/   857 - Turkish
+/   860 - Portuguese
+/   861 - Icelandic
+/   862 - Hebrew
+/   863 - Canadian French
+/   864 - Arabic
+/   865 - Nordic
+/   866 - Russian
+/   869 - Greek 2
+/   932 - Japanese (DBCS)
+/   936 - Simplified Chinese (DBCS)
+/   949 - Korean (DBCS)
+/   950 - Traditional Chinese (DBCS)
+*/
+
+#define _USE_LFN     0    /* 0 to 3 */
+#define _MAX_LFN     255  /* Maximum LFN length to handle (12 to 255) */
+/* The _USE_LFN switches the support of long file name (LFN).
+/
+/   0: Disable support of LFN. _MAX_LFN has no effect.
+/   1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
+/   2: Enable LFN with dynamic working buffer on the STACK.
+/   3: Enable LFN with dynamic working buffer on the HEAP.
+/
+/  To enable the LFN, Unicode handling functions (option/unicode.c) must be added
+/  to the project. The working buffer occupies (_MAX_LFN + 1) * 2 bytes and
+/  additional 608 bytes at exFAT enabled. _MAX_LFN can be in range from 12 to 255.
+/  It should be set 255 to support full featured LFN operations.
+/  When use stack for the working buffer, take care on stack overflow. When use heap
+/  memory for the working buffer, memory management functions, ff_memalloc() and
+/  ff_memfree(), must be added to the project. */
+
+#define _LFN_UNICODE    0 /* 0:ANSI/OEM or 1:Unicode */
+/* This option switches character encoding on the API. (0:ANSI/OEM or 1:UTF-16)
+/  To use Unicode string for the path name, enable LFN and set _LFN_UNICODE = 1.
+/  This option also affects behavior of string I/O functions. */
+
+#define _STRF_ENCODE    3
+/* When _LFN_UNICODE == 1, this option selects the character encoding ON THE FILE to
+/  be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf().
+/
+/  0: ANSI/OEM
+/  1: UTF-16LE
+/  2: UTF-16BE
+/  3: UTF-8
+/
+/  This option has no effect when _LFN_UNICODE == 0. */
+
+#define _FS_RPATH       0 /* 0 to 2 */
+/* This option configures support of relative path.
+/
+/   0: Disable relative path and remove related functions.
+/   1: Enable relative path. f_chdir() and f_chdrive() are available.
+/   2: f_getcwd() function is available in addition to 1.
+*/
+
+/*---------------------------------------------------------------------------/
+/ Drive/Volume Configurations
+/----------------------------------------------------------------------------*/
+
+#define _VOLUMES    1
+/* Number of volumes (logical drives) to be used. */
+
+/* USER CODE BEGIN Volumes */  
+#define _STR_VOLUME_ID          0	/* 0:Use only 0-9 for drive ID, 1:Use strings for drive ID */
+#define _VOLUME_STRS            "RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3"
+/* _STR_VOLUME_ID switches string support of volume ID.
+/  When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive
+/  number in the path name. _VOLUME_STRS defines the drive ID strings for each
+/  logical drives. Number of items must be equal to _VOLUMES. Valid characters for
+/  the drive ID strings are: A-Z and 0-9. */
+/* USER CODE END Volumes */  
+
+#define _MULTI_PARTITION     0 /* 0:Single partition, 1:Multiple partition */
+/* This option switches support of multi-partition on a physical drive.
+/  By default (0), each logical drive number is bound to the same physical drive
+/  number and only an FAT volume found on the physical drive will be mounted.
+/  When multi-partition is enabled (1), each logical drive number can be bound to
+/  arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
+/  funciton will be available. */
+#define _MIN_SS    512  /* 512, 1024, 2048 or 4096 */
+#define _MAX_SS    512  /* 512, 1024, 2048 or 4096 */
+/* These options configure the range of sector size to be supported. (512, 1024,
+/  2048 or 4096) Always set both 512 for most systems, all type of memory cards and
+/  harddisk. But a larger value may be required for on-board flash memory and some
+/  type of optical media. When _MAX_SS is larger than _MIN_SS, FatFs is configured
+/  to variable sector size and GET_SECTOR_SIZE command must be implemented to the
+/  disk_ioctl() function. */
+
+#define	_USE_TRIM      0
+/* This option switches support of ATA-TRIM. (0:Disable or 1:Enable)
+/  To enable Trim function, also CTRL_TRIM command should be implemented to the
+/  disk_ioctl() function. */
+
+#define _FS_NOFSINFO    0 /* 0,1,2 or 3 */
+/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
+/  option, and f_getfree() function at first time after volume mount will force
+/  a full FAT scan. Bit 1 controls the use of last allocated cluster number.
+/
+/  bit0=0: Use free cluster count in the FSINFO if available.
+/  bit0=1: Do not trust free cluster count in the FSINFO.
+/  bit1=0: Use last allocated cluster number in the FSINFO if available.
+/  bit1=1: Do not trust last allocated cluster number in the FSINFO.
+*/
+
+/*---------------------------------------------------------------------------/
+/ System Configurations
+/----------------------------------------------------------------------------*/
+
+#define _FS_TINY    0      /* 0:Normal or 1:Tiny */
+/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
+/  At the tiny configuration, size of file object (FIL) is reduced _MAX_SS bytes.
+/  Instead of private sector buffer eliminated from the file object, common sector
+/  buffer in the file system object (FATFS) is used for the file data transfer. */
+
+#define _FS_EXFAT	0
+/* This option switches support of exFAT file system. (0:Disable or 1:Enable)
+/  When enable exFAT, also LFN needs to be enabled. (_USE_LFN >= 1)
+/  Note that enabling exFAT discards C89 compatibility. */
+
+#define _FS_NORTC	0
+#define _NORTC_MON	6
+#define _NORTC_MDAY	4
+#define _NORTC_YEAR	2015
+/* The option _FS_NORTC switches timestamp functiton. If the system does not have
+/  any RTC function or valid timestamp is not needed, set _FS_NORTC = 1 to disable
+/  the timestamp function. All objects modified by FatFs will have a fixed timestamp
+/  defined by _NORTC_MON, _NORTC_MDAY and _NORTC_YEAR in local time.
+/  To enable timestamp function (_FS_NORTC = 0), get_fattime() function need to be
+/  added to the project to get current time form real-time clock. _NORTC_MON,
+/  _NORTC_MDAY and _NORTC_YEAR have no effect. 
+/  These options have no effect at read-only configuration (_FS_READONLY = 1). */
+
+#define _FS_LOCK    2     /* 0:Disable or >=1:Enable */
+/* The option _FS_LOCK switches file lock function to control duplicated file open
+/  and illegal operation to open objects. This option must be 0 when _FS_READONLY
+/  is 1.
+/
+/  0:  Disable file lock function. To avoid volume corruption, application program
+/      should avoid illegal open, remove and rename to the open objects.
+/  >0: Enable file lock function. The value defines how many files/sub-directories
+/      can be opened simultaneously under file lock control. Note that the file
+/      lock control is independent of re-entrancy. */
+
+#define _FS_REENTRANT    0  /* 0:Disable or 1:Enable */
+#define _FS_TIMEOUT      1000 /* Timeout period in unit of time ticks */
+#define _SYNC_t          NULL
+/* The option _FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs
+/  module itself. Note that regardless of this option, file access to different
+/  volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
+/  and f_fdisk() function, are always not re-entrant. Only file/directory access
+/  to the same volume is under control of this function.
+/
+/   0: Disable re-entrancy. _FS_TIMEOUT and _SYNC_t have no effect.
+/   1: Enable re-entrancy. Also user provided synchronization handlers,
+/      ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj()
+/      function, must be added to the project. Samples are available in
+/      option/syscall.c.
+/
+/  The _FS_TIMEOUT defines timeout period in unit of time tick.
+/  The _SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*,
+/  SemaphoreHandle_t and etc.. A header file for O/S definitions needs to be
+/  included somewhere in the scope of ff.h. */
+
+/* define the ff_malloc ff_free macros as standard malloc free */
+#if !defined(ff_malloc) && !defined(ff_free)
+#include <stdlib.h>
+#define ff_malloc  malloc
+#define ff_free  free
+#endif
+
+#endif /* _FFCONF */
--- /dev/null
+++ b/LEAF/Inc/fmc.h
@@ -1,0 +1,60 @@
+/**
+  ******************************************************************************
+  * File Name          : FMC.h
+  * Description        : This file provides code for the configuration
+  *                      of the FMC peripheral.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __FMC_H
+#define __FMC_H
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+extern SDRAM_HandleTypeDef hsdram1;
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_FMC_Init(void);
+void HAL_SDRAM_MspInit(SDRAM_HandleTypeDef* hsdram);
+void HAL_SDRAM_MspDeInit(SDRAM_HandleTypeDef* hsdram);
+
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__FMC_H */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/gfx.h
@@ -1,0 +1,120 @@
+/*
+ * gfx.h
+ *
+ *  Created on: Jul 8, 2018
+ *      Author: jeffsnyder
+ */
+
+#ifndef GFX_H_
+#define GFX_H_
+
+
+#include "gfx_font.h"
+#include "ssd1306.h"
+
+typedef struct _GFX
+{
+	int16_t WIDTH;
+	int16_t HEIGHT;
+	uint16_t _width;
+    uint16_t _height;
+    uint16_t rotation;
+    uint16_t cursor_y;
+	uint16_t cursor_x;
+    uint16_t textsize;
+    uint16_t textcolor;
+    uint16_t textbgcolor;
+    uint16_t wrap;
+    uint16_t _cp437;
+    GFXfont *gfxFont;
+} GFX;
+
+void GFXinit(GFX* myGfx, int16_t w, int16_t h); // Constructor
+
+  // This MUST be defined by the subclass:
+void GFXdrawPixel(GFX* myGfx, int16_t x, int16_t y, uint16_t color);
+
+  // TRANSACTION API / CORE DRAW API
+  // These MAY be overridden by the subclass to provide device-specific
+  // optimized code.  Otherwise 'generic' versions are used.
+void GFXstartWrite(GFX* myGfx);
+void GFXwritePixel(GFX* myGfx, int16_t x, int16_t y, uint16_t color);
+void GFXwriteFillRect(GFX* myGfx, int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
+void GFXwriteFastVLine(GFX* myGfx, int16_t x, int16_t y, int16_t h, uint16_t color);
+void GFXwriteFastHLine(GFX* myGfx, int16_t x, int16_t y, int16_t w, uint16_t color);
+void GFXwriteLine(GFX* myGfx, int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
+void GFXendWrite(GFX* myGfx);
+
+  // CONTROL API
+  // These MAY be overridden by the subclass to provide device-specific
+  // optimized code.  Otherwise 'generic' versions are used.
+void GFXsetRotation(GFX* myGfx, uint8_t r);
+void GFXinvertDisplay(GFX* myGfx, uint8_t i);
+
+  // BASIC DRAW API
+  // These MAY be overridden by the subclass to provide device-specific
+  // optimized code.  Otherwise 'generic' versions are used.
+
+    // It's good to implement those, even if using transaction API
+void GFXdrawFastVLine(GFX* myGfx, int16_t x, int16_t y, int16_t h, uint16_t color);
+void    GFXdrawFastHLine(GFX* myGfx, int16_t x, int16_t y, int16_t w, uint16_t color);
+void    GFXfillRect(GFX* myGfx, int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
+void    GFXfillScreen(GFX* myGfx, uint16_t color);
+    // Optional and probably not necessary to change
+void    GFXdrawLine(GFX* myGfx, int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
+void    GFXdrawRect(GFX* myGfx, int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
+
+  // These exist only with Adafruit_GFX (no subclass overrides)
+
+void    GFXdrawCircle(GFX* myGfx, int16_t x0, int16_t y0, int16_t r, uint16_t color);
+void    GFXdrawCircleHelper(GFX* myGfx, int16_t x0, int16_t y0, int16_t r, uint8_t cornername,
+      uint16_t color);
+void    GFXfillCircle(GFX* myGfx, int16_t x0, int16_t y0, int16_t r, uint16_t color);
+void    GFXfillCircleHelper(GFX* myGfx, int16_t x0, int16_t y0, int16_t r, uint8_t cornername,
+      int16_t delta, uint16_t color);
+void    GFXdrawTriangle(GFX* myGfx, int16_t x0, int16_t y0, int16_t x1, int16_t y1,
+      int16_t x2, int16_t y2, uint16_t color);
+void    GFXfillTriangle(GFX* myGfx, int16_t x0, int16_t y0, int16_t x1, int16_t y1,
+      int16_t x2, int16_t y2, uint16_t color);
+void    GFXdrawRoundRect(GFX* myGfx, int16_t x0, int16_t y0, int16_t w, int16_t h,
+      int16_t radius, uint16_t color);
+void    GFXfillRoundRect(GFX* myGfx, int16_t x0, int16_t y0, int16_t w, int16_t h,
+      int16_t radius, uint16_t color);
+void    GFXdrawBitmap(GFX* myGfx, int16_t x, int16_t y, uint8_t *bitmap,
+      int16_t w, int16_t h, uint16_t color, uint16_t bg);
+void    GFXdrawChar(GFX* myGfx, int16_t x, int16_t y, unsigned char c, uint16_t color,
+      uint16_t bg, uint8_t size);
+void    GFXsetCursor(GFX* myGfx, int16_t x, int16_t y);
+void   GFXsetTextColor(GFX* myGfx, uint16_t c, uint16_t bg);
+void    GFXsetTextSize(GFX* myGfx, uint8_t s);
+void   GFXsetTextWrap(GFX* myGfx, uint8_t w);
+void   GFXcp437(GFX* myGfx, uint8_t x);
+void    GFXsetFont(GFX* myGfx, const GFXfont *f);
+void   GFXgetTextBounds(GFX* myGfx, char *string, int16_t x, int16_t y,
+      int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h);
+
+
+void   GFXwrite(GFX* myGfx, uint8_t);
+
+
+  int16_t GFXheight(GFX* myGfx );
+  int16_t GFXwidth(GFX* myGfx );
+
+  uint8_t GFXgetRotation(GFX* myGfx );
+
+  // get current cursor position (get rotation safe maximum values, using: width() for x, height() for y)
+  int16_t GFXgetCursorX(GFX* myGfx);
+  int16_t GFXgetCursorY(GFX* myGfx );
+
+  void GFXcharBounds(GFX* myGfx, char c, int16_t *x, int16_t *y,
+      int16_t *minx, int16_t *miny, int16_t *maxx, int16_t *maxy);
+
+int OLEDparseInt(char* buffer, uint32_t myNumber, uint8_t numDigits);
+
+int OLEDparsePitch(char* buffer, float midi);
+
+int OLEDparsePitchClass(char* buffer, float midi);
+
+int OLEDparseFixedFloat(char* buffer, float input, uint8_t numDigits, uint8_t numDecimal);
+
+#endif /* GFX_H_ */
--- /dev/null
+++ b/LEAF/Inc/gfx_font.h
@@ -1,0 +1,24 @@
+// Font structures for newer Adafruit_GFX (1.1 and later).
+// Example fonts are included in 'Fonts' directory.
+// To use a font in your Arduino sketch, #include the corresponding .h
+// file and pass address of GFXfont struct to setFont().  Pass NULL to
+// revert to 'classic' fixed-space bitmap font.
+
+#ifndef _GFXFONT_H_
+#define _GFXFONT_H_
+
+typedef struct { // Data stored PER GLYPH
+	uint16_t bitmapOffset;     // Pointer into GFXfont->bitmap
+	uint8_t  width, height;    // Bitmap dimensions in pixels
+	uint8_t  xAdvance;         // Distance to advance cursor (x axis)
+	int8_t   xOffset, yOffset; // Dist from cursor pos to UL corner
+} GFXglyph;
+
+typedef struct { // Data stored for FONT AS A WHOLE:
+	uint8_t  *bitmap;      // Glyph bitmaps, concatenated
+	GFXglyph *glyph;       // Glyph array
+	uint8_t   first, last; // ASCII extents
+	uint8_t   yAdvance;    // Newline distance (y axis)
+} GFXfont;
+
+#endif // _GFXFONT_H_
--- /dev/null
+++ b/LEAF/Inc/gpio.h
@@ -1,0 +1,57 @@
+/**
+  ******************************************************************************
+  * File Name          : gpio.h
+  * Description        : This file contains all the functions prototypes for 
+  *                      the gpio  
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __gpio_H
+#define __gpio_H
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_GPIO_Init(void);
+
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__ pinoutConfig_H */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/i2c.h
@@ -1,0 +1,60 @@
+/**
+  ******************************************************************************
+  * File Name          : I2C.h
+  * Description        : This file provides code for the configuration
+  *                      of the I2C instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __i2c_H
+#define __i2c_H
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+extern I2C_HandleTypeDef hi2c2;
+extern I2C_HandleTypeDef hi2c4;
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_I2C2_Init(void);
+void MX_I2C4_Init(void);
+
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__ i2c_H */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/LEAF/Inc/leaf-analysis.h
+++ /dev/null
@@ -1,258 +1,0 @@
-/*==============================================================================
- 
- leaf-analysis.h
- Created: 25 Oct 2019 10:30:52am
- Author:  Matthew Wang
- 
- ==============================================================================*/
-
-#ifndef LEAF_ANALYSIS_H_INCLUDED
-#define LEAF_ANALYSIS_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-    
-#include "leaf-global.h"
-#include "leaf-mempool.h"
-#include "leaf-math.h"
-#include "leaf-filters.h"
-#include "leaf-envelopes.h"
-    
-    //==============================================================================
-    
-    /* Envelope Follower */
-    typedef struct _tEnvelopeFollower
-    {
-        float y;
-        float a_thresh;
-        float d_coeff;
-        
-    } _tEnvelopeFollower;
-    
-    typedef _tEnvelopeFollower* tEnvelopeFollower;
-    
-    void    tEnvelopeFollower_init          (tEnvelopeFollower* const, float attackThreshold, float decayCoeff);
-    void    tEnvelopeFollower_free          (tEnvelopeFollower* const);
-    void    tEnvelopeFollower_initToPool    (tEnvelopeFollower* const, float attackThreshold, float decayCoeff, tMempool* const);
-    void    tEnvelopeFollower_freeFromPool  (tEnvelopeFollower* const, tMempool* const);
-    
-    float   tEnvelopeFollower_tick          (tEnvelopeFollower* const, float x);
-    int     tEnvelopeFollower_decayCoeff    (tEnvelopeFollower* const, float decayCoeff);
-    int     tEnvelopeFollower_attackThresh  (tEnvelopeFollower* const, float attackThresh);
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    /* PowerEnvelopeFollower */
-    typedef struct _tPowerFollower {
-        float factor, oneminusfactor;
-        float curr;
-        
-    } _tPowerFollower;
-    
-    typedef _tPowerFollower* tPowerFollower;
-    
-    void    tPowerFollower_init         (tPowerFollower* const, float factor);
-    void    tPowerFollower_free         (tPowerFollower* const);
-    void    tPowerFollower_initToPool   (tPowerFollower* const, float factor, tMempool* const);
-    void    tPowerFollower_freeFromPool (tPowerFollower* const, tMempool* const);
-    
-    float   tPowerFollower_tick         (tPowerFollower* const, float input);
-    float   tPowerFollower_sample       (tPowerFollower* const);
-    int     tPowerFollower_setFactor    (tPowerFollower* const, float factor);
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    // ENV~ from PD, modified for LEAF
-#define MAXOVERLAP 32
-#define INITVSTAKEN 64
-#define ENV_WINDOW_SIZE 1024
-#define ENV_HOP_SIZE 256
-    
-    typedef struct _tEnvPD
-    {
-        float buf[ENV_WINDOW_SIZE + INITVSTAKEN];
-        uint16_t x_phase;                    /* number of points since last output */
-        uint16_t x_period;                   /* requested period of output */
-        uint16_t x_realperiod;               /* period rounded up to vecsize multiple */
-        uint16_t x_npoints;                  /* analysis window size in samples */
-        float x_result;                 /* result to output */
-        float x_sumbuf[MAXOVERLAP];     /* summing buffer */
-        float x_f;
-        uint16_t windowSize, hopSize, blockSize;
-        uint16_t x_allocforvs;               /* extra buffer for DSP vector size */
-    } _tEnvPD;
-    
-    typedef _tEnvPD* tEnvPD;
-    
-    void    tEnvPD_init             (tEnvPD* const, int windowSize, int hopSize, int blockSize);
-    void    tEnvPD_free             (tEnvPD* const);
-    void    tEnvPD_initToPool       (tEnvPD* const, int windowSize, int hopSize, int blockSize, tMempool* const);
-    void    tEnvPD_freeFromPool     (tEnvPD* const, tMempool* const);
-    
-    float   tEnvPD_tick             (tEnvPD* const);
-    void    tEnvPD_processBlock     (tEnvPD* const, float* in);
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    /* tAttackDetection */
-#define DEFBLOCKSIZE 1024
-#define DEFTHRESHOLD 6
-#define DEFATTACK    10
-#define DEFRELEASE    10
-    
-    typedef struct _tAttackDetection
-    {
-        float env;
-        
-        //Attack & Release times in msec
-        int atk;
-        int rel;
-        
-        //Attack & Release coefficients based on times
-        float atk_coeff;
-        float rel_coeff;
-        
-        int blocksize;
-        int samplerate;
-        
-        //RMS amplitude of previous block - used to decide if attack is present
-        float prevAmp;
-        
-        float threshold;
-    } _tAttackDetection;
-    
-    typedef _tAttackDetection* tAttackDetection;
-    
-    void    tAttackDetection_init           (tAttackDetection* const, int blocksize, int atk, int rel);
-    void    tAttackDetection_free           (tAttackDetection* const);
-    void    tAttackDetection_initToPool     (tAttackDetection* const, int blocksize, int atk, int rel, tMempool* const);
-    void    tAttackDetection_freeFromPool   (tAttackDetection* const, tMempool* const);
-    
-    // set expected input blocksize
-    void    tAttackDetection_setBlocksize   (tAttackDetection* const, int size);
-    
-    // change atkDetector sample rate
-    void    tAttackDetection_setSamplerate  (tAttackDetection* const, int inRate);
-    
-    // set attack time and coeff
-    void    tAttackDetection_setAttack      (tAttackDetection* const, int inAtk);
-    
-    // set release time and coeff
-    void    tAttackDetection_setRelease     (tAttackDetection* const, int inRel);
-    
-    // set level above which values are identified as attacks
-    void    tAttackDetection_setThreshold   (tAttackDetection* const, float thres);
-    
-    // find largest transient in input block, return index of attack
-    int     tAttackDetection_detect         (tAttackDetection* const, float *in);
-    
-    //==============================================================================
-    
-    // tSNAC: period detector
-    // from Katja Vetters http://www.katjaas.nl/helmholtz/helmholtz.html
-#define SNAC_FRAME_SIZE 1024           // default analysis framesize // should be the same as (or smaller than?) PS_FRAME_SIZE
-#define DEFOVERLAP 1                // default overlap
-#define DEFBIAS 0.2f        // default bias
-#define DEFMINRMS 0.003f   // default minimum RMS
-#define SEEK 0.85f       // seek-length as ratio of framesize
-    
-    typedef struct _tSNAC
-    {
-        float* inputbuf;
-        float* processbuf;
-        float* spectrumbuf;
-        float* biasbuf;
-        uint16_t timeindex;
-        uint16_t framesize;
-        uint16_t overlap;
-        uint16_t periodindex;
-        
-        float periodlength;
-        float fidelity;
-        float biasfactor;
-        float minrms;
-        
-    } _tSNAC;
-    
-    typedef _tSNAC* tSNAC;
-    
-    void    tSNAC_init          (tSNAC* const, int overlaparg);
-    void    tSNAC_free          (tSNAC* const);
-    void    tSNAC_initToPool    (tSNAC* const, int overlaparg, tMempool* const);
-    void    tSNAC_freeFromPool  (tSNAC* const, tMempool* const);
-    
-    void    tSNAC_ioSamples     (tSNAC *s, float *in, float *out, int size);
-    void    tSNAC_setOverlap    (tSNAC *s, int lap);
-    void    tSNAC_setBias       (tSNAC *s, float bias);
-    void    tSNAC_setMinRMS     (tSNAC *s, float rms);
-    
-    /*To get freq, perform SAMPLE_RATE/snac_getperiod() */
-    float   tSNAC_getPeriod     (tSNAC *s);
-    float   tSNAC_getFidelity   (tSNAC *s);
-    
-#define DEFPITCHRATIO 2.0f
-#define DEFTIMECONSTANT 100.0f
-#define DEFHOPSIZE 64
-#define DEFWINDOWSIZE 64
-#define FBA 20
-#define HPFREQ 40.0f
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    // Period detection
-    typedef struct _tPeriodDetection
-    {
-        tEnvPD env;
-        tSNAC snac;
-        float* inBuffer;
-        float* outBuffer;
-        int frameSize;
-        int bufSize;
-        int framesPerBuffer;
-        int curBlock;
-        int lastBlock;
-        int i;
-        int indexstore;
-        int iLast;
-        int index;
-        float period;
-        
-        uint16_t hopSize;
-        uint16_t windowSize;
-        uint8_t fba;
-        
-        float timeConstant;
-        float radius;
-        float max;
-        float lastmax;
-        float deltamax;
-        
-        float fidelityThreshold;
-        
-    } _tPeriodDetection;
-    
-    typedef _tPeriodDetection* tPeriodDetection;
-    
-    void    tPeriodDetection_init               (tPeriodDetection* const, float* in, float* out, int bufSize, int frameSize);
-    void    tPeriodDetection_free               (tPeriodDetection* const);
-    void    tPeriodDetection_initToPool         (tPeriodDetection* const, float* in, float* out, int bufSize, int frameSize, tMempool* const);
-    void    tPeriodDetection_freeFromPool       (tPeriodDetection* const, tMempool* const);
-    
-    float   tPeriodDetection_tick               (tPeriodDetection* const, float sample);
-    float   tPeriodDetection_getPeriod          (tPeriodDetection* const);
-    void    tPeriodDetection_setHopSize         (tPeriodDetection* const, int hs);
-    void    tPeriodDetection_setWindowSize      (tPeriodDetection* const, int ws);
-    void    tPeriodDetection_setFidelityThreshold(tPeriodDetection* const, float threshold);
-    
-    //==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // LEAF_ANALYSIS_H_INCLUDED
-
-//==============================================================================
-
--- a/LEAF/Inc/leaf-delay.h
+++ /dev/null
@@ -1,221 +1,0 @@
-/*==============================================================================
- 
- leaf-delay.h
- Created: 20 Jan 2017 12:01:24pm
- Author:  Michael R Mulshine
- 
- ==============================================================================*/
-
-#ifndef LEAF_DELAY_H_INCLUDED
-#define LEAF_DELAY_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-    
-#include "leaf-math.h"
-#include "leaf-mempool.h"
-    
-    //==============================================================================
-    
-    /* Non-interpolating delay, reimplemented from STK (Cook and Scavone). */
-    typedef struct _tDelay
-    {
-        float gain;
-        float* buff;
-        
-        float lastOut, lastIn;
-        
-        uint32_t inPoint, outPoint;
-        
-        uint32_t delay, maxDelay;
-        
-    } _tDelay;
-    
-    typedef _tDelay* tDelay;
-    
-    void        tDelay_init         (tDelay* const, uint32_t delay, uint32_t maxDelay);
-    void        tDelay_free         (tDelay* const);
-    void        tDelay_initToPool   (tDelay* const, uint32_t delay, uint32_t maxDelay, tMempool* const);
-    void        tDelay_freeFromPool (tDelay* const, tMempool* const);
-    
-    void        tDelay_clear        (tDelay* const);
-    int         tDelay_setDelay     (tDelay* const, uint32_t delay);
-    uint32_t    tDelay_getDelay     (tDelay* const);
-    void        tDelay_tapIn        (tDelay* const, float in, uint32_t tapDelay);
-    float       tDelay_tapOut       (tDelay* const, uint32_t tapDelay);
-    float       tDelay_addTo        (tDelay* const, float value, uint32_t tapDelay);
-    float       tDelay_tick         (tDelay* const, float sample);
-    float       tDelay_getLastOut   (tDelay* const);
-    float       tDelay_getLastIn    (tDelay* const);
-    
-    //==============================================================================
-    
-    /* Linearly-interpolating delay, reimplemented from STK (Cook and Scavone). */
-    typedef struct _tLinearDelay
-    {
-        float gain;
-        float* buff;
-        
-        float lastOut, lastIn;
-        
-        uint32_t inPoint, outPoint;
-        
-        uint32_t maxDelay;
-        
-        float delay;
-        
-        float alpha, omAlpha;
-        
-    } _tLinearDelay;
-    
-    typedef _tLinearDelay* tLinearDelay;
-    
-    void    tLinearDelay_init        (tLinearDelay* const, float delay, uint32_t maxDelay);
-    void    tLinearDelay_free        (tLinearDelay* const);
-    void    tLinearDelay_initToPool  (tLinearDelay* const, float delay, uint32_t maxDelay, tMempool* const);
-    void    tLinearDelay_freeFromPool(tLinearDelay* const, tMempool* const);
-    void    tLinearDelay_clear		 (tLinearDelay* const dl);
-    int     tLinearDelay_setDelay    (tLinearDelay* const, float delay);
-    float   tLinearDelay_getDelay    (tLinearDelay* const);
-    void    tLinearDelay_tapIn       (tLinearDelay* const, float in, uint32_t tapDelay);
-    float 	tLinearDelay_tapOut 	 (tLinearDelay* const, uint32_t tapDelay);
-    float   tLinearDelay_addTo       (tLinearDelay* const, float value, uint32_t tapDelay);
-    float   tLinearDelay_tick        (tLinearDelay* const, float sample);
-    void    tLinearDelay_tickIn      (tLinearDelay* const, float input);
-    float   tLinearDelay_tickOut     (tLinearDelay* const);
-    float   tLinearDelay_getLastOut  (tLinearDelay* const);
-    float   tLinearDelay_getLastIn   (tLinearDelay* const);
-    
-
-
-    //==============================================================================
-
-    /* Hermite-interpolating delay, created by adapting STK linear delay with Hermite interpolation */
-    typedef struct _tHermiteDelay
-    {
-        float gain;
-        float* buff;
-
-        float lastOut, lastIn;
-
-        uint32_t inPoint, outPoint;
-
-        uint32_t maxDelay;
-
-        float delay;
-
-        float alpha, omAlpha;
-
-    } _tHermiteDelay;
-
-    typedef _tHermiteDelay* tHermiteDelay;
-
-    void   	tHermiteDelay_init 			(tHermiteDelay* const dl, float delay, uint32_t maxDelay);
-    void 	tHermiteDelay_free			(tHermiteDelay* const dl);
-    void    tHermiteDelay_initToPool  	(tHermiteDelay* const dl, float delay, uint32_t maxDelay, tMempool* const mp);
-    void    tHermiteDelay_freeFromPool	(tHermiteDelay* const dl, tMempool* const mp);
-    void    tHermiteDelay_clear			(tHermiteDelay* const dl);
-    float   tHermiteDelay_tick 			(tHermiteDelay* const dl, float input);
-    void   	tHermiteDelay_tickIn 		(tHermiteDelay* const dl, float input);
-    float   tHermiteDelay_tickOut 		(tHermiteDelay* const dl);
-    int     tHermiteDelay_setDelay 		(tHermiteDelay* const dl, float delay);
-    float 	tHermiteDelay_tapOut 		(tHermiteDelay* const dl, uint32_t tapDelay);
-    void 	tHermiteDelay_tapIn 		(tHermiteDelay* const dl, float value, uint32_t tapDelay);
-    float 	tHermiteDelay_addTo 		(tHermiteDelay* const dl, float value, uint32_t tapDelay);
-    float   tHermiteDelay_getDelay 		(tHermiteDelay* const dl);
-    float   tHermiteDelay_getLastOut 	(tHermiteDelay* const dl);
-    float   tHermiteDelay_getLastIn 	(tHermiteDelay* const dl);
-    void 	tHermiteDelay_setGain 		(tHermiteDelay* const dl, float gain);
-    float 	tHermiteDelay_getGain 		(tHermiteDelay* const dl);
-
-
-    //==============================================================================
-    
-    /* Allpass-interpolating delay, reimplemented from STK (Cook and Scavone). */
-    typedef struct _tAllpassDelay
-    {
-        float gain;
-        float* buff;
-        
-        float lastOut, lastIn;
-        
-        uint32_t inPoint, outPoint;
-        
-        uint32_t maxDelay;
-        
-        float delay;
-        
-        float alpha, omAlpha, coeff;
-        
-        float apInput;
-        
-    } _tAllpassDelay;
-    
-    typedef _tAllpassDelay* tAllpassDelay;
-    
-    void    tAllpassDelay_init        (tAllpassDelay* const, float delay, uint32_t maxDelay);
-    void    tAllpassDelay_free        (tAllpassDelay* const);
-    void    tAllpassDelay_initToPool  (tAllpassDelay* const, float delay, uint32_t maxDelay, tMempool* const);
-    void    tAllpassDelay_freeFromPool(tAllpassDelay* const, tMempool* const);
-    
-    void    tAllpassDelay_clear       (tAllpassDelay* const);
-    int     tAllpassDelay_setDelay    (tAllpassDelay* const, float delay);
-    float   tAllpassDelay_getDelay    (tAllpassDelay* const);
-    void    tAllpassDelay_tapIn       (tAllpassDelay* const, float in, uint32_t tapDelay);
-    float   tAllpassDelay_tapOut      (tAllpassDelay* const, uint32_t tapDelay);
-    float   tAllpassDelay_addTo       (tAllpassDelay* const, float value, uint32_t tapDelay);
-    float   tAllpassDelay_tick        (tAllpassDelay* const, float sample);
-    float   tAllpassDelay_getLastOut  (tAllpassDelay* const);
-    float   tAllpassDelay_getLastIn   (tAllpassDelay* const);
-    
-    //==============================================================================
-    
-    /* Linear interpolating delay with fixed read and write pointers, variable rate. */
-    typedef struct _tTapeDelay
-    {
-        float gain;
-        float* buff;
-        
-        float lastOut, lastIn;
-        
-        uint32_t inPoint;
-        
-        uint32_t maxDelay;
-        
-        float delay, inc, idx;
-        
-        float apInput;
-        
-    } _tTapeDelay;
-    
-    typedef _tTapeDelay* tTapeDelay;
-    
-    void    tTapeDelay_init        (tTapeDelay* const, float delay, uint32_t maxDelay);
-    void    tTapeDelay_free        (tTapeDelay* const);
-    void    tTapeDelay_initToPool  (tTapeDelay* const, float delay, uint32_t maxDelay, tMempool* const);
-    void    tTapeDelay_freeFromPool(tTapeDelay* const, tMempool* const);
-    
-    void    tTapeDelay_clear       (tTapeDelay* const);
-    void    tTapeDelay_setDelay    (tTapeDelay* const, float delay);
-    float   tTapeDelay_getDelay    (tTapeDelay* const);
-    void    tTapeDelay_tapIn       (tTapeDelay* const, float in, uint32_t tapDelay);
-    float   tTapeDelay_tapOut      (tTapeDelay* const d, float tapDelay);
-    float   tTapeDelay_addTo       (tTapeDelay* const, float value, uint32_t tapDelay);
-    float   tTapeDelay_tick        (tTapeDelay* const, float sample);
-    void    tTapeDelay_incrementInPoint(tTapeDelay* const dl);
-    float   tTapeDelay_getLastOut  (tTapeDelay* const);
-    float   tTapeDelay_getLastIn   (tTapeDelay* const);
-    
-    //==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // LEAF_DELAY_H_INCLUDED
-
-//==============================================================================
-
--- a/LEAF/Inc/leaf-distortion.h
+++ /dev/null
@@ -1,148 +1,0 @@
-/*==============================================================================
- 
- leaf-distortion.h
- Created: 25 Oct 2019 10:23:28am
- Author:  Matthew Wang
- 
- ==============================================================================*/
-
-#ifndef LEAF_DISTORTION_H_INCLUDED
-#define LEAF_DISTORTION_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-    
-#include "leaf-global.h"
-#include "leaf-mempool.h"
-#include "leaf-math.h"
-    
-    //==============================================================================
-    
-    typedef struct _tSampleReducer
-    {
-        float invRatio;
-        float hold;
-        uint32_t count;
-    } _tSampleReducer;
-    
-    typedef _tSampleReducer* tSampleReducer;
-    
-    void    tSampleReducer_init    (tSampleReducer* const);
-    void    tSampleReducer_free    (tSampleReducer* const);
-    void    tSampleReducer_initToPool   (tSampleReducer* const, tMempool* const);
-    void    tSampleReducer_freeFromPool (tSampleReducer* const, tMempool* const);
-    
-    float   tSampleReducer_tick    (tSampleReducer* const, float input);
-    
-    // sampling ratio
-    void    tSampleReducer_setRatio (tSampleReducer* const, float ratio);
-    
-    //==============================================================================
-    
-    typedef struct _tOversampler
-    {
-        int ratio;
-        float* pCoeffs;
-        float* upState;
-        float* downState;
-        int numTaps;
-        int phaseLength;
-    } _tOversampler;
-    
-    typedef _tOversampler* tOversampler;
-    
-    void    tOversampler_init           (tOversampler* const, int order, oBool extraQuality);
-    void    tOversampler_free           (tOversampler* const);
-    void    tOversampler_initToPool     (tOversampler* const, int order, oBool extraQuality, tMempool* const);
-    void    tOversampler_freeFromPool   (tOversampler* const, tMempool* const);
-    
-    void    tOversampler_upsample       (tOversampler* const, float input, float* output);
-    float   tOversampler_downsample     (tOversampler* const os, float* input);
-    float   tOversampler_tick           (tOversampler* const, float input, float (*effectTick)(float));
-    int     tOversampler_getLatency     (tOversampler* const os);
-    
-    //==============================================================================
-    
-    /* tLockhartWavefolder */
-    
-    typedef struct _tLockhartWavefolder
-    {
-        double Ln1;
-        double Fn1;
-        float xn1;
-
-        double RL;
-        double R;
-        double VT;
-        double Is;
-
-        double a;
-        double b;
-        double d;
-
-        // Antialiasing error threshold
-        double thresh;
-        double half_a;
-        double longthing;
-
-    } _tLockhartWavefolder;
-    
-    typedef _tLockhartWavefolder* tLockhartWavefolder;
-    
-    void    tLockhartWavefolder_init    (tLockhartWavefolder* const);
-    void    tLockhartWavefolder_free    (tLockhartWavefolder* const);
-    void    tLockhartWavefolder_initToPool   (tLockhartWavefolder* const, tMempool* const);
-    void    tLockhartWavefolder_freeFromPool (tLockhartWavefolder* const, tMempool* const);
-    
-    float   tLockhartWavefolder_tick    (tLockhartWavefolder* const, float samp);
-
-    //==============================================================================
-
-    typedef struct _tCrusher
-    {
-        float srr;
-        float mult, div;
-        float rnd;
-        
-        uint32_t  op; //which bitwise operation (0-7)
-        
-        float gain;
-        tSampleReducer sReducer;
-        
-    } _tCrusher;
-    
-    typedef _tCrusher* tCrusher;
-    
-    void    tCrusher_init    (tCrusher* const);
-    void    tCrusher_free    (tCrusher* const);
-    void    tCrusher_initToPool   (tCrusher* const, tMempool* const);
-    void    tCrusher_freeFromPool (tCrusher* const, tMempool* const);
-    
-    float   tCrusher_tick    (tCrusher* const, float input);
-    
-    // 0.0 - 1.0
-    void    tCrusher_setOperation (tCrusher* const, float op);
-    
-    // 0.0 - 1.0
-    void    tCrusher_setQuality (tCrusher* const, float val);
-    
-    // what division to round to
-    void    tCrusher_setRound (tCrusher* const, float rnd);
-    
-    // sampling ratio
-    void    tCrusher_setSamplingRatio (tCrusher* const, float ratio);
-    
-    //==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif // LEAF_DISTORTION_H_INCLUDED
-
-//==============================================================================
-
-
--- a/LEAF/Inc/leaf-dynamics.h
+++ /dev/null
@@ -1,90 +1,0 @@
-/*==============================================================================
- 
- leaf-dynamics.h
- Created: 30 Nov 2018 11:57:05am
- Author:  airship
- 
- ==============================================================================*/
-
-#ifndef LEAF_DYNAMICS_H_INCLUDED
-#define LEAF_DYNAMICS_H_INCLUDED
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-    
-#include "leaf-global.h"
-#include "leaf-math.h"
-#include "leaf-mempool.h"
-#include "leaf-analysis.h"
-    
-    //==============================================================================
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    /* Compressor */
-    typedef struct _tCompressor
-    {
-        float tauAttack, tauRelease;
-        float T, R, W, M; // Threshold, compression Ratio, decibel Width of knee transition, decibel Make-up gain
-        
-        float x_G[2], y_G[2], x_T[2], y_T[2];
-        
-        oBool isActive;
-        
-    } _tCompressor;
-    
-    typedef _tCompressor* tCompressor;
-    
-    void    tCompressor_init        (tCompressor* const);
-    void    tCompressor_free        (tCompressor* const);
-    void    tCompressor_initToPool  (tCompressor* const, tMempool* const);
-    void    tCompressor_freeFromPool(tCompressor* const, tMempool* const);
-    
-    float   tCompressor_tick        (tCompressor* const, float input);
-    
-    ///
-    /* Feedback leveller */
-    // An auto VCA that you put into a feedback circuit to make it stay at the same level.
-    // It can enforce level bidirectionally (amplifying and attenuating as needed) or
-    // just attenutating. The former option allows for infinite sustain strings, for example, while
-    // The latter option allows for decaying strings, which can never exceed
-    // a specific level.
-    
-    typedef struct _tFeedbackLeveler {
-        float targetLevel;    // target power level
-        float strength;        // how strongly level difference affects the VCA
-        int      mode;            // 0 for upwards limiting only, 1 for biderctional limiting
-        float curr;
-        tPowerFollower pwrFlw;    // internal power follower needed for level tracking
-        
-    } _tFeedbackLeveler;
-    
-    typedef _tFeedbackLeveler* tFeedbackLeveler;
-    
-    void    tFeedbackLeveler_init           (tFeedbackLeveler* const, float targetLevel, float factor, float strength, int mode);
-    void    tFeedbackLeveler_free           (tFeedbackLeveler* const);
-    void    tFeedbackLeveler_initToPool     (tFeedbackLeveler* const, float targetLevel, float factor, float strength, int mode, tMempool* const);
-    void    tFeedbackLeveler_freeFromPool   (tFeedbackLeveler* const, tMempool* const);
-    
-    float   tFeedbackLeveler_tick           (tFeedbackLeveler* const, float input);
-    float   tFeedbackLeveler_sample         (tFeedbackLeveler* const);
-    void    tFeedbackLeveler_setTargetLevel (tFeedbackLeveler* const, float TargetLevel);
-    void    tFeedbackLeveler_setFactor      (tFeedbackLeveler* const, float factor);
-    void    tFeedbackLeveler_setMode        (tFeedbackLeveler* const, int mode); // 0 for upwards limiting only, 1 for biderctional limiting
-    void    tFeedbackLeveler_setStrength    (tFeedbackLeveler* const, float strength);
-    
-    
-    //==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif // LEAF_DYNAMICS_H_INCLUDED
-
-//==============================================================================
-
--- a/LEAF/Inc/leaf-effects.h
+++ /dev/null
@@ -1,316 +1,0 @@
-/*==============================================================================
- 
- leaf-effects.h
- Created: 20 Jan 2017 12:01:54pm
- Author:  Michael R Mulshine
- 
- ==============================================================================*/
-
-#ifndef LEAF_EFFECTS_H_INCLUDED
-#define LEAF_EFFECTS_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-#include "leaf-global.h"
-#include "leaf-math.h"
-#include "leaf-mempool.h"
-#include "leaf-dynamics.h"
-#include "leaf-analysis.h"
-#include "leaf-envelopes.h"
-    
-    //==============================================================================
-    
-    /* tTalkbox */
-#define NUM_TALKBOX_PARAM 4
-    
-    typedef struct _tTalkbox
-    {
-        float param[NUM_TALKBOX_PARAM];
-        
-        int bufsize;
-        float* car0;
-        float* car1;
-        float* window;
-        float* buf0;
-        float* buf1;
-        
-        float emphasis;
-        int32_t K, N, O, pos;
-        float wet, dry, FX;
-        float d0, d1, d2, d3, d4;
-        float u0, u1, u2, u3, u4;
-        
-    } _tTalkbox;
-    
-    typedef _tTalkbox* tTalkbox;
-    
-    void    tTalkbox_init           (tTalkbox* const, int bufsize);
-    void    tTalkbox_free           (tTalkbox* const);
-    void    tTalkbox_initToPool     (tTalkbox* const, int bufsize, tMempool* const);
-    void    tTalkbox_freeFromPool   (tTalkbox* const, tMempool* const);
-    
-    float   tTalkbox_tick           (tTalkbox* const, float synth, float voice);
-    void    tTalkbox_update         (tTalkbox* const);
-    void    tTalkbox_suspend        (tTalkbox* const);
-    void    tTalkbox_lpcDurbin      (float *r, int p, float *k, float *g);
-    void    tTalkbox_lpc            (float *buf, float *car, int32_t n, int32_t o);
-    void    tTalkbox_setQuality     (tTalkbox* const, float quality);
-    
-    //==============================================================================
-    
-    /* tVocoder */
-#define NUM_VOCODER_PARAM 8
-#define NBANDS 16
-    
-    typedef struct _tVocoder
-    {
-        float param[NUM_VOCODER_PARAM];
-        
-        float gain;         //output level
-        float thru, high;   //hf thru
-        float kout;         //downsampled output
-        int32_t  kval;      //downsample counter
-        int32_t  nbnd;      //number of bands
-        
-        //filter coeffs and buffers - seems it's faster to leave this global than make local copy
-        float f[NBANDS][13]; //[0-8][0 1 2 | 0 1 2 3 | 0 1 2 3 | val rate]
-        
-    } _tVocoder;
-    
-    typedef _tVocoder* tVocoder;
-    
-    void    tVocoder_init           (tVocoder* const);
-    void    tVocoder_free           (tVocoder* const);
-    void    tVocoder_initToPool     (tVocoder* const, tMempool* const);
-    void    tVocoder_freeFromPool   (tVocoder* const, tMempool* const);
-    
-    float   tVocoder_tick           (tVocoder* const, float synth, float voice);
-    void    tVocoder_update         (tVocoder* const);
-    void    tVocoder_suspend        (tVocoder* const);
-    
-    //==============================================================================
-    
-    
-    //==============================================================================
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    /* tSOLAD : pitch shifting algorithm that underlies tRetune etc */
-    // from Katja Vetters http://www.katjaas.nl/pitchshiftlowlatency/pitchshiftlowlatency.html
-#define LOOPSIZE (2048*2)      // (4096*2) // loop size must be power of two
-#define LOOPMASK (LOOPSIZE - 1)
-#define PITCHFACTORDEFAULT 1.0f
-#define INITPERIOD 64.0f
-#define MAXPERIOD (float)((LOOPSIZE - w->blocksize) * 0.8f)
-#define MINPERIOD 8.0f
-    
-    typedef struct _tSOLAD
-    {
-        uint16_t timeindex;              // current reference time, write index
-        uint16_t blocksize;              // signal input / output block size
-        float pitchfactor;        // pitch factor between 0.25 and 4
-        float readlag;            // read pointer's lag behind write pointer
-        float period;             // period length in input signal
-        float jump;               // read pointer jump length and direction
-        float xfadelength;        // crossfade length expressed at input sample rate
-        float xfadevalue;         // crossfade phase and value
-        
-        float* delaybuf;
-        
-    } _tSOLAD;
-    
-    typedef _tSOLAD* tSOLAD;
-    
-    void    tSOLAD_init             (tSOLAD* const);
-    void    tSOLAD_free             (tSOLAD* const);
-    void    tSOLAD_initToPool       (tSOLAD* const, tMempool* const);
-    void    tSOLAD_freeFromPool     (tSOLAD* const, tMempool* const);
-    
-    // send one block of input samples, receive one block of output samples
-    void    tSOLAD_ioSamples        (tSOLAD *w, float* in, float* out, int blocksize);
-    // set periodicity analysis data
-    void    tSOLAD_setPeriod        (tSOLAD *w, float period);
-    // set pitch factor between 0.25 and 4
-    void    tSOLAD_setPitchFactor   (tSOLAD *w, float pitchfactor);
-    // force readpointer lag
-    void    tSOLAD_setReadLag       (tSOLAD *w, float readlag);
-    // reset state variables
-    void    tSOLAD_resetState       (tSOLAD *w);
-    
-    // Pitch shift
-    typedef struct _tPitchShift
-    {
-        tSOLAD sola;
-        tHighpass hp;
-        tPeriodDetection* p;
-        
-        float* outBuffer;
-        int frameSize;
-        int bufSize;
-        
-        int framesPerBuffer;
-        int curBlock;
-        int lastBlock;
-        int index;
-        
-        float pitchFactor;
-        float timeConstant;
-        float radius;
-    } _tPitchShift;
-    
-    typedef _tPitchShift* tPitchShift;
-    
-    void    tPitchShift_init            (tPitchShift* const, tPeriodDetection* const, float* out, int bufSize);
-    void    tPitchShift_free            (tPitchShift* const);
-    void    tPitchShift_initToPool      (tPitchShift* const, tPeriodDetection* const, float* out, int bufSize, tMempool* const);
-    void    tPitchShift_freeFromPool    (tPitchShift* const, tMempool* const);
-    
-    float   tPitchShift_shift           (tPitchShift* const);
-    float   tPitchShift_shiftToFunc     (tPitchShift* const, float (*fun)(float));
-    float   tPitchShift_shiftToFreq     (tPitchShift* const, float freq);
-    void    tPitchShift_setPitchFactor  (tPitchShift* const, float pf);
-    
-    // Retune
-    typedef struct _tRetune
-    {
-        tPeriodDetection pd;
-        tPitchShift* ps;
-        
-        float* inBuffer;
-        float** outBuffers;
-        float* tickOutput;
-        int frameSize;
-        int bufSize;
-        
-        uint16_t hopSize;
-        uint16_t windowSize;
-        uint8_t fba;
-        
-        float* pitchFactor;
-        float timeConstant;
-        float radius;
-        
-        float inputPeriod;
-        
-        int numVoices;
-    } _tRetune;
-    
-    typedef _tRetune* tRetune;
-    
-    void    tRetune_init                (tRetune* const, int numVoices, int bufSize, int frameSize);
-    void    tRetune_free                (tRetune* const);
-    void    tRetune_initToPool          (tRetune* const, int numVoices, int bufSize, int frameSize, tMempool* const);
-    void    tRetune_freeFromPool        (tRetune* const, tMempool* const);
-    
-    float*  tRetune_tick                (tRetune* const, float sample);
-    void    tRetune_setNumVoices        (tRetune* const, int numVoices);
-    void    tRetune_setPitchFactors     (tRetune* const, float pf);
-    void    tRetune_setPitchFactor      (tRetune* const, float pf, int voice);
-    void    tRetune_setTimeConstant     (tRetune* const, float tc);
-    void    tRetune_setHopSize          (tRetune* const, int hs);
-    void    tRetune_setWindowSize       (tRetune* const, int ws);
-    void    tRetune_setFidelityThreshold(tRetune* const, float threshold);
-    float   tRetune_getInputPeriod      (tRetune* const);
-    float   tRetune_getInputFreq        (tRetune* const);
-    
-    // Autotune
-    typedef struct _tAutotune
-    {
-        tPeriodDetection pd;
-        tPitchShift* ps;
-        
-        float* inBuffer;
-        float** outBuffers;
-        float* tickOutput;
-        int frameSize;
-        int bufSize;
-        
-        uint16_t hopSize;
-        uint16_t windowSize;
-        uint8_t fba;
-        
-        float* freq;
-        float timeConstant;
-        float radius;
-        
-        float inputPeriod;
-        
-        int numVoices;
-    } _tAutotune;
-    
-    typedef _tAutotune* tAutotune;
-    
-    void    tAutotune_init                  (tAutotune* const, int numVoices, int bufSize, int frameSize);
-    void    tAutotune_free                  (tAutotune* const);
-    void    tAutotune_initToPool            (tAutotune* const, int numVoices, int bufSize, int frameSize, tMempool* const);
-    void    tAutotune_freeFromPool          (tAutotune* const, tMempool* const);
-    
-    float*  tAutotune_tick                  (tAutotune* const, float sample);
-    void    tAutotune_setNumVoices          (tAutotune* const, int numVoices);
-    void    tAutotune_setFreqs              (tAutotune* const, float f);
-    void    tAutotune_setFreq               (tAutotune* const, float f, int voice);
-    void    tAutotune_setTimeConstant       (tAutotune* const, float tc);
-    void    tAutotune_setHopSize            (tAutotune* const, int hs);
-    void    tAutotune_setWindowSize         (tAutotune* const, int ws);
-    void    tAutotune_setFidelityThreshold  (tAutotune* const, float threshold);
-    float   tAutotune_getInputPeriod        (tAutotune* const);
-    float   tAutotune_getInputFreq          (tAutotune* const);
-    
-    //==============================================================================
-    
-    
-    typedef struct _tFormantShifter
-    {
-        int ford;
-        float falph;
-        float flamb;
-        float* fk;
-        float* fb;
-        float* fc;
-        float* frb;
-        float* frc;
-        float* fsig;
-        float* fsmooth;
-        float fhp;
-        float flp;
-        float flpa;
-        float* fbuff;
-        float* ftvec;
-        float fmute;
-        float fmutealph;
-        unsigned int cbi;
-        float shiftFactor;
-        float intensity, invIntensity;
-        tHighpass hp;
-        tHighpass hp2;
-        tFeedbackLeveler fbl1;
-        tFeedbackLeveler fbl2;
-        
-    } _tFormantShifter;
-    
-    typedef _tFormantShifter* tFormantShifter;
-    
-    void    tFormantShifter_init            (tFormantShifter* const, int order);
-    void    tFormantShifter_free            (tFormantShifter* const);
-    void    tFormantShifter_initToPool      (tFormantShifter* const, int order, tMempool* const);
-    void    tFormantShifter_freeFromPool    (tFormantShifter* const, tMempool* const);
-    
-    float   tFormantShifter_tick            (tFormantShifter* const, float input);
-    float   tFormantShifter_remove          (tFormantShifter* const, float input);
-    float   tFormantShifter_add             (tFormantShifter* const, float input);
-    void    tFormantShifter_ioSamples       (tFormantShifter* const, float* in, float* out, int size, float fwarp);
-    void    tFormantShifter_setShiftFactor  (tFormantShifter* const, float shiftFactor);
-    void    tFormantShifter_setIntensity    (tFormantShifter* const, float intensity);
-    
-    //==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // LEAF_EFFECTS_H_INCLUDED
-
-//==============================================================================
--- a/LEAF/Inc/leaf-electrical.h
+++ /dev/null
@@ -1,95 +1,0 @@
-/*
- * leaf-electrical.h
- *
- *  Created on: Sep 25, 2019
- *      Author: jeffsnyder
- */
-
-#ifndef LEAF_INC_LEAF_ELECTRICAL_H_
-#define LEAF_INC_LEAF_ELECTRICAL_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-    
-#include "leaf-global.h"
-#include "leaf-math.h"
-#include "leaf-mempool.h"
-    
-    //==============================================================================
-    
-    typedef enum WDFComponentType
-    {
-        SeriesAdaptor = 0,
-        ParallelAdaptor,
-        Resistor,
-        Capacitor,
-        Inductor,
-        Inverter,
-        ResistiveSource,
-        IdealSource,
-        Diode,
-        DiodePair,
-        RootNil,
-        WDFComponentNil
-    } WDFComponentType;
-    
-    typedef struct _tWDF _tWDF; // needed to allow tWDF pointers in struct
-    typedef _tWDF* tWDF;
-    struct _tWDF
-    {
-        WDFComponentType type;
-        float port_resistance_up;
-        float port_resistance_left;
-        float port_resistance_right;
-        float port_conductance_up;
-        float port_conductance_left;
-        float port_conductance_right;
-        float incident_wave_up;
-        float incident_wave_left;
-        float incident_wave_right;
-        float reflected_wave_up;
-        float reflected_wave_left;
-        float reflected_wave_right;
-        float gamma_zero;
-        float sample_rate;
-        float value;
-        tWDF* child_left;
-        tWDF* child_right;
-        float (*get_port_resistance)(tWDF* const);
-        float (*get_reflected_wave_up)(tWDF* const, float);
-        float (*get_reflected_wave_down)(tWDF* const, float, float);
-        void (*set_incident_wave)(tWDF* const, float, float);
-    };
-    
-    //WDF Linear Components
-    void    tWDF_init                   (tWDF* const, WDFComponentType type, float value, tWDF* const rL, tWDF* const rR);
-    void    tWDF_free                   (tWDF* const);
-    void    tWDF_initToPool             (tWDF* const, WDFComponentType type, float value, tWDF* const rL, tWDF* const rR, tMempool* const);
-    void    tWDF_freeFromPool           (tWDF* const, tMempool* const);
-    
-    float   tWDF_tick                   (tWDF* const, float sample, tWDF* const outputPoint, uint8_t paramsChanged);
-    
-    void    tWDF_setValue               (tWDF* const, float value);
-    void    tWDF_setSampleRate          (tWDF* const, float sample_rate);
-    uint8_t tWDF_isLeaf                 (tWDF* const);
-    
-    float   tWDF_getPortResistance      (tWDF* const);
-    float   tWDF_getReflectedWaveUp     (tWDF* const, float input); //for tree, only uses input for resistive source
-    float   tWDF_getReflectedWaveDown   (tWDF* const, float input, float incident_wave); //for roots
-    void    tWDF_setIncidentWave        (tWDF* const, float incident_wave, float input);
-    
-    float   tWDF_getVoltage             (tWDF* const);
-    float   tWDF_getCurrent             (tWDF* const);
-    
-    
-    //==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LEAF_INC_LEAF_ELECTRICAL_H_ */
-
--- a/LEAF/Inc/leaf-envelopes.h
+++ /dev/null
@@ -1,154 +1,0 @@
-/*
- ==============================================================================
- 
- leaf-envelopes.h
- Created: 20 Jan 2017 12:02:17pm
- Author:  Michael R Mulshine
- 
- ==============================================================================
- */
-
-#ifndef LEAF_ENVELOPES_H_INCLUDED
-#define LEAF_ENVELOPES_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-#include "leaf-math.h"
-#include "leaf-mempool.h"
-#include "leaf-filters.h"
-#include "leaf-delay.h"
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    /* Attack-Decay envelope */
-    typedef struct _tEnvelope {
-        
-       const float *exp_buff;
-       const float *inc_buff;
-        uint32_t buff_size;
-        
-        float next;
-        
-        float attackInc, decayInc, rampInc;
-        
-        oBool inAttack, inDecay, inRamp;
-        
-        oBool loop;
-        
-        float gain, rampPeak;
-        
-        float attackPhase, decayPhase, rampPhase;
-        
-    } _tEnvelope;
-    
-    typedef _tEnvelope* tEnvelope;
-    
-    void    tEnvelope_init          (tEnvelope* const, float attack, float decay, oBool loop);
-    void    tEnvelope_free          (tEnvelope* const);
-    void    tEnvelope_initToPool    (tEnvelope* const, float attack, float decay, oBool loop, tMempool* const);
-    void    tEnvelope_freeFromPool  (tEnvelope* const, tMempool* const);
-    
-    float   tEnvelope_tick          (tEnvelope* const);
-    void    tEnvelope_setAttack     (tEnvelope* const, float attack);
-    void    tEnvelope_setDecay      (tEnvelope* const, float decay);
-    void    tEnvelope_loop          (tEnvelope* const, oBool loop);
-    void    tEnvelope_on            (tEnvelope* const, float velocity);
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    /* ADSR */
-    typedef struct _tADSR
-    {
-       const float *exp_buff;
-       const float *inc_buff;
-        uint32_t buff_size;
-        
-        float next;
-        
-        float attackInc, decayInc, releaseInc, rampInc;
-        
-        oBool inAttack, inDecay, inSustain, inRelease, inRamp;
-        
-        float sustain, gain, rampPeak, releasePeak;
-        
-        float attackPhase, decayPhase, releasePhase, rampPhase;
-        
-    } _tADSR;
-    
-    typedef _tADSR* tADSR;
-    
-    void    tADSR_init          (tADSR* const, float attack, float decay, float sustain, float release);
-    void    tADSR_free          (tADSR* const);
-    void    tADSR_initToPool    (tADSR* const, float attack, float decay, float sustain, float release, tMempool* const);
-    void    tADSR_freeFromPool  (tADSR* const, tMempool* const);
-    
-    float   tADSR_tick          (tADSR* const);
-    void    tADSR_setAttack     (tADSR* const, float attack);
-    void    tADSR_setDecay      (tADSR* const, float decay);
-    void    tADSR_setSustain    (tADSR* const, float sustain);
-    void    tADSR_setRelease    (tADSR* const, float release);
-    void    tADSR_on            (tADSR* const, float velocity);
-    void    tADSR_off           (tADSR* const);
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    /* Ramp */
-    typedef struct _tRamp {
-        float inc;
-        float inv_sr_ms;
-        float minimum_time;
-        float curr,dest;
-        float time;
-        int samples_per_tick;
-        
-    } _tRamp;
-    
-    typedef _tRamp* tRamp;
-    
-    void    tRamp_init          (tRamp* const, float time, int samplesPerTick);
-    void    tRamp_free          (tRamp* const);
-    void    tRamp_initToPool    (tRamp* const, float time, int samplesPerTick, tMempool* const);
-    void    tRamp_freeFromPool  (tRamp* const, tMempool* const);
-    
-    float   tRamp_tick          (tRamp* const);
-    float   tRamp_sample        (tRamp* const);
-    void    tRamp_setTime       (tRamp* const, float time);
-    void    tRamp_setDest       (tRamp* const, float dest);
-    void    tRamp_setVal        (tRamp* const, float val);
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    /* Exponential Smoother */
-    typedef struct _tExpSmooth {
-        float factor, oneminusfactor;
-        float curr,dest;
-        
-    } _tExpSmooth;
-    
-    typedef _tExpSmooth* tExpSmooth;
-    
-    void    tExpSmooth_init         (tExpSmooth* const, float val, float factor);
-    void    tExpSmooth_free         (tExpSmooth* const);
-    void    tExpSmooth_initToPool   (tExpSmooth* const, float val, float factor, tMempool* const);
-    void    tExpSmooth_freeFromPool (tExpSmooth* const, tMempool* const);
-    
-    float   tExpSmooth_tick         (tExpSmooth* const);
-    float   tExpSmooth_sample       (tExpSmooth* const);
-    void    tExpSmooth_setFactor    (tExpSmooth* const, float factor);
-    void    tExpSmooth_setDest      (tExpSmooth* const, float dest);
-    void    tExpSmooth_setVal       (tExpSmooth* const, float val);
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // LEAF_ENVELOPES_H_INCLUDED
-
-
-
--- a/LEAF/Inc/leaf-filters.h
+++ /dev/null
@@ -1,358 +1,0 @@
-/*==============================================================================
- 
- leaf-filters.h
- Created: 20 Jan 2017 12:01:10pm
- Author:  Michael R Mulshine
- 
- ==============================================================================*/
-
-#ifndef LEAF_FILTERS_H_INCLUDED
-#define LEAF_FILTERS_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-    
-#include "leaf-math.h"
-#include "leaf-mempool.h"
-#include "leaf-delay.h"
-#include "leaf-tables.h"
-    
-    //==============================================================================
-    
-    /* tAllpass: Schroeder allpass. Comb-filter with feedforward and feedback. */
-    typedef struct _tAllpass
-    {
-        float gain;
-        
-        tLinearDelay delay;
-        
-        float lastOut;
-        
-    } _tAllpass;
-    
-    typedef _tAllpass* tAllpass;
-    
-    void    tAllpass_init           (tAllpass* const, float initDelay, uint32_t maxDelay);
-    void    tAllpass_free           (tAllpass* const);
-    void    tAllpass_initToPool     (tAllpass* const, float initDelay, uint32_t maxDelay, tMempool* const);
-    void    tAllpass_freeFromPool   (tAllpass* const, tMempool* const);
-    
-    float   tAllpass_tick           (tAllpass* const, float input);
-    void    tAllpass_setGain        (tAllpass* const, float gain);
-    void    tAllpass_setDelay       (tAllpass* const, float delay);
-    
-    
-    //==============================================================================
-    
-    /* tOnePole: OnePole filter, reimplemented from STK (Cook and Scavone). */
-    typedef struct _tOnePole
-    {
-        float gain;
-        float a0,a1;
-        float b0,b1;
-        float lastIn, lastOut;
-
-        
-    } _tOnePole;
-    
-    typedef _tOnePole* tOnePole;
-    
-    void    tOnePole_init           (tOnePole* const, float thePole);
-    void    tOnePole_free           (tOnePole* const);
-    void    tOnePole_initToPool     (tOnePole* const, float thePole, tMempool* const);
-    void    tOnePole_freeFromPool   (tOnePole* const, tMempool* const);
-    
-    float   tOnePole_tick           (tOnePole* const, float input);
-    void    tOnePole_setB0          (tOnePole* const, float b0);
-    void    tOnePole_setA1          (tOnePole* const, float a1);
-    void    tOnePole_setPole        (tOnePole* const, float thePole);
-    void    tOnePole_setFreq        (tOnePole* const, float freq);
-    void    tOnePole_setCoefficients(tOnePole* const, float b0, float a1);
-    void    tOnePole_setGain        (tOnePole* const, float gain);
-    
-    //==============================================================================
-    
-    /* TwoPole filter, reimplemented from STK (Cook and Scavone). */
-    typedef struct _tTwoPole
-    {
-        float gain;
-        float a0, a1, a2;
-        float b0;
-        
-        float radius, frequency;
-        oBool normalize;
-
-        float lastOut[2];
-        
-    } _tTwoPole;
-    
-    typedef _tTwoPole* tTwoPole;
-    
-    void    tTwoPole_init           (tTwoPole* const);
-    void    tTwoPole_free           (tTwoPole* const);
-    void    tTwoPole_initToPool     (tTwoPole* const, tMempool* const);
-    void    tTwoPole_freeFromPool   (tTwoPole* const, tMempool* const);
-    
-    float   tTwoPole_tick           (tTwoPole* const, float input);
-    void    tTwoPole_setB0          (tTwoPole* const, float b0);
-    void    tTwoPole_setA1          (tTwoPole* const, float a1);
-    void    tTwoPole_setA2          (tTwoPole* const, float a2);
-    void    tTwoPole_setResonance   (tTwoPole* const, float freq, float radius, oBool normalize);
-    void    tTwoPole_setCoefficients(tTwoPole* const, float b0, float a1, float a2);
-    void    tTwoPole_setGain        (tTwoPole* const, float gain);
-    
-    //==============================================================================
-    
-    /* OneZero filter, reimplemented from STK (Cook and Scavone). */
-    typedef struct _tOneZero
-    {
-        float gain;
-        float b0,b1;
-        float lastIn, lastOut, frequency;
-        
-    } _tOneZero;
-    
-    typedef _tOneZero* tOneZero;
-    
-    void    tOneZero_init           (tOneZero* const, float theZero);
-    void    tOneZero_free           (tOneZero* const);
-    void    tOneZero_initToPool     (tOneZero* const, float theZero, tMempool* const);
-    void    tOneZero_freeFromPool   (tOneZero* const, tMempool* const);
-    
-    float   tOneZero_tick           (tOneZero* const, float input);
-    void    tOneZero_setB0          (tOneZero* const, float b0);
-    void    tOneZero_setB1          (tOneZero* const, float b1);
-    void    tOneZero_setZero        (tOneZero* const, float theZero);
-    void    tOneZero_setCoefficients(tOneZero* const, float b0, float b1);
-    void    tOneZero_setGain        (tOneZero* const, float gain);
-    float   tOneZero_getPhaseDelay  (tOneZero *f, float frequency );
-    
-    //==============================================================================
-    
-    /* TwoZero filter, reimplemented from STK (Cook and Scavone). */
-    typedef struct _tTwoZero
-    {
-        float gain;
-        float b0, b1, b2;
-        
-        float frequency, radius;
-        
-        float lastIn[2];
-        
-    } _tTwoZero;
-    
-    typedef _tTwoZero* tTwoZero;
-    
-    void    tTwoZero_init           (tTwoZero* const);
-    void    tTwoZero_free           (tTwoZero* const);
-    void    tTwoZero_initToPool     (tTwoZero* const, tMempool* const);
-    void    tTwoZero_freeFromPool   (tTwoZero* const, tMempool* const);
-    
-    float   tTwoZero_tick           (tTwoZero* const, float input);
-    void    tTwoZero_setB0          (tTwoZero* const, float b0);
-    void    tTwoZero_setB1          (tTwoZero* const, float b1);
-    void    tTwoZero_setB2          (tTwoZero* const, float b2);
-    void    tTwoZero_setNotch       (tTwoZero* const, float frequency, float radius);
-    void    tTwoZero_setCoefficients(tTwoZero* const, float b0, float b1, float b2);
-    void    tTwoZero_setGain        (tTwoZero* const, float gain);
-    
-    //==============================================================================
-    
-    /* PoleZero filter, reimplemented from STK (Cook and Scavone). */
-    typedef struct _tPoleZero
-    {
-        float gain;
-        float a0,a1;
-        float b0,b1;
-        
-        float lastIn, lastOut;
-        
-    } _tPoleZero;
-    
-    typedef _tPoleZero* tPoleZero;
-    
-    void    tPoleZero_init              (tPoleZero* const);
-    void    tPoleZero_free              (tPoleZero* const);
-    void    tPoleZero_initToPool        (tPoleZero* const, tMempool* const);
-    void    tPoleZero_freeFromPool      (tPoleZero* const, tMempool* const);
-    
-    float   tPoleZero_tick              (tPoleZero* const, float input);
-    void    tPoleZero_setB0             (tPoleZero* const, float b0);
-    void    tPoleZero_setB1             (tPoleZero* const, float b1);
-    void    tPoleZero_setA1             (tPoleZero* const, float a1);
-    void    tPoleZero_setCoefficients   (tPoleZero* const, float b0, float b1, float a1);
-    void    tPoleZero_setAllpass        (tPoleZero* const, float coeff);
-    void    tPoleZero_setBlockZero      (tPoleZero* const, float thePole);
-    void    tPoleZero_setGain           (tPoleZero* const, float gain);
-    
-    //==============================================================================
-    
-    /* BiQuad filter, reimplemented from STK (Cook and Scavone). */
-    typedef struct _tBiQuad
-    {
-        float gain;
-        float a0, a1, a2;
-        float b0, b1, b2;
-        
-        float lastIn[2];
-        float lastOut[2];
-        
-        float frequency, radius;
-        oBool normalize;
-    } _tBiQuad;
-    
-    typedef _tBiQuad* tBiQuad;
-    
-    void    tBiQuad_init           (tBiQuad* const);
-    void    tBiQuad_free           (tBiQuad* const);
-    void    tBiQuad_initToPool     (tBiQuad* const, tMempool* const);
-    void    tBiQuad_freeFromPool   (tBiQuad* const, tMempool* const);
-    
-    float   tBiQuad_tick           (tBiQuad* const, float input);
-    void    tBiQuad_setB0          (tBiQuad* const, float b0);
-    void    tBiQuad_setB1          (tBiQuad* const, float b1);
-    void    tBiQuad_setB2          (tBiQuad* const, float b2);
-    void    tBiQuad_setA1          (tBiQuad* const, float a1);
-    void    tBiQuad_setA2          (tBiQuad* const, float a2);
-    void    tBiQuad_setNotch       (tBiQuad* const, float freq, float radius);
-    void    tBiQuad_setResonance   (tBiQuad* const, float freq, float radius, oBool normalize);
-    void    tBiQuad_setCoefficients(tBiQuad* const, float b0, float b1, float b2, float a1, float a2);
-    void    tBiQuad_setGain        (tBiQuad* const, float gain);
-    
-    //==============================================================================
-    
-    /* State Variable Filter, algorithm from Andy Simper. */
-    typedef enum SVFType
-    {
-        SVFTypeHighpass = 0,
-        SVFTypeLowpass,
-        SVFTypeBandpass,
-        SVFTypeNotch,
-        SVFTypePeak,
-    } SVFType;
-    
-    typedef struct _tSVF
-    {
-        SVFType type;
-        float cutoff, Q;
-        float ic1eq,ic2eq;
-        float g,k,a1,a2,a3;
-        
-    } _tSVF;
-    
-    typedef _tSVF* tSVF;
-    
-    void    tSVF_init           (tSVF* const, SVFType type, float freq, float Q);
-    void    tSVF_free           (tSVF* const);
-    void    tSVF_initToPool     (tSVF* const, SVFType type, float freq, float Q, tMempool* const);
-    void    tSVF_freeFromPool   (tSVF* const, tMempool* const);
-    
-    float   tSVF_tick           (tSVF* const, float v0);
-    void    tSVF_setFreq        (tSVF* const, float freq);
-    void    tSVF_setQ           (tSVF* const, float Q);
-    
-    //==============================================================================
-    
-    /* Efficient State Variable Filter for 14-bit control input, [0, 4096). */
-    typedef struct _tEfficientSVF
-    {
-        SVFType type;
-        float cutoff, Q;
-        float ic1eq,ic2eq;
-        float g,k,a1,a2,a3;
-        
-    } _tEfficientSVF;
-    
-    typedef _tEfficientSVF* tEfficientSVF;
-    
-    void    tEfficientSVF_init          (tEfficientSVF* const, SVFType type, uint16_t input, float Q);
-    void    tEfficientSVF_free          (tEfficientSVF* const);
-    void    tEfficientSVF_initToPool    (tEfficientSVF* const, SVFType type, uint16_t input, float Q, tMempool* const);
-    void    tEfficientSVF_freeFromPool  (tEfficientSVF* const, tMempool* const);
-    
-    float   tEfficientSVF_tick          (tEfficientSVF* const, float v0);
-    void    tEfficientSVF_setFreq       (tEfficientSVF* const, uint16_t controlFreq);
-    void    tEfficientSVF_setQ          (tEfficientSVF* const, float Q);
-    
-    //==============================================================================
-    
-    /* Simple Highpass filter. */
-    typedef struct _tHighpass
-    {
-        float xs, ys, R;
-        float frequency;
-        
-    } _tHighpass;
-    
-    typedef _tHighpass* tHighpass;
-    
-    void    tHighpass_init          (tHighpass* const, float freq);
-    void    tHighpass_free          (tHighpass* const);
-    void    tHighpass_initToPool    (tHighpass* const, float freq, tMempool* const);
-    void    tHighpass_freeFromPool  (tHighpass* const, tMempool* const);
-    
-    float   tHighpass_tick          (tHighpass* const, float x);
-    void    tHighpass_setFreq       (tHighpass* const, float freq);
-    float   tHighpass_getFreq       (tHighpass* const);
-    
-    //==============================================================================
-    
-    // Butterworth Filter
-#define NUM_SVF_BW 16
-    typedef struct _tButterworth
-    {
-        float gain;
-        
-        int N;
-        
-        tSVF low[NUM_SVF_BW];
-        tSVF high[NUM_SVF_BW];
-        
-        float f1,f2;
-        
-    } _tButterworth;
-    
-    typedef _tButterworth* tButterworth;
-    
-    void    tButterworth_init           (tButterworth* const, int N, float f1, float f2);
-    void    tButterworth_free           (tButterworth* const);
-    void    tButterworth_initToPool     (tButterworth* const, int N, float f1, float f2, tMempool* const);
-    void    tButterworth_freeFromPool   (tButterworth* const, tMempool* const);
-    
-    float   tButterworth_tick           (tButterworth* const, float input);
-    void    tButterworth_setF1          (tButterworth* const, float in);
-    void    tButterworth_setF2          (tButterworth* const, float in);
-    void    tButterworth_setFreqs       (tButterworth* const, float f1, float f2);
-    
-    //==============================================================================
-    
-    typedef struct _tFIR
-    {
-        float* past;
-        float* coeff;
-        int numTaps;
-    } _tFIR;
-    
-    typedef _tFIR* tFIR;
-    
-    void    tFIR_init           (tFIR* const, float* coeffs, int numTaps);
-    void    tFIR_free           (tFIR* const);
-    void    tFIR_initToPool     (tFIR* const, float* coeffs, int numTaps, tMempool* const);
-    void    tFIR_freeFromPool   (tFIR* const, tMempool* const);
-    
-    float   tFIR_tick           (tFIR* const, float input);
-    void    tFIR_coeffs         (tFIR* const, float in);
-    
-    //==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // LEAF_FILTERS_H_INCLUDED
-
-//==============================================================================
-
--- a/LEAF/Inc/leaf-global.h
+++ /dev/null
@@ -1,39 +1,0 @@
-/*
- ==============================================================================
- 
- leaf-global.h
- Created: 24 Oct 2019 2:24:38pm
- Author:  Matthew Wang
- 
- ==============================================================================
- */
-
-#ifndef LEAF_GLOBAL_H_INCLUDED
-#define LEAF_GLOBAL_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    typedef struct _LEAF
-    {
-        float   sampleRate;
-        float   invSampleRate;
-        int     blockSize;
-        float   twoPiTimesInvSampleRate;
-        float   (*random)(void);
-        int     clearOnAllocation;
-    } LEAF;
-    
-    extern LEAF leaf; // The global instance of LEAF.
-    
-    //==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // LEAF_GLOBAL_H_INCLUDED
-
-//==============================================================================
-
--- a/LEAF/Inc/leaf-instruments.h
+++ /dev/null
@@ -1,201 +1,0 @@
-/*==============================================================================
- 
- leaf-instruments.h
- Created: 30 Nov 2018 10:24:44am
- Author:  airship
- 
- ==============================================================================*/
-
-#ifndef LEAF_INSTRUMENTS_H_INCLUDED
-#define LEAF_INSTRUMENTS_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-    
-#include "leaf-math.h"
-#include "leaf-mempool.h"
-#include "leaf-oscillators.h"
-#include "leaf-filters.h"
-#include "leaf-envelopes.h"
-    
-    //==============================================================================
-    
-    // 808 Cowbell
-    typedef struct _t808Cowbell {
-        
-        tSquare p[2];
-        tNoise stick;
-        tSVF bandpassOsc;
-        tSVF bandpassStick;
-        tEnvelope envGain;
-        tEnvelope envStick;
-        tEnvelope envFilter;
-        tHighpass highpass;
-        float oscMix;
-        float filterCutoff;
-        oBool useStick;
-        
-    } _t808Cowbell;
-    
-    typedef _t808Cowbell* t808Cowbell;
-    
-    void    t808Cowbell_init            (t808Cowbell* const, int useStick);
-    void    t808Cowbell_free            (t808Cowbell* const);
-    void    t808Cowbell_initToPool      (t808Cowbell* const, int useStick, tMempool* const);
-    void    t808Cowbell_freeFromPool    (t808Cowbell* const, tMempool* const);
-    
-    float   t808Cowbell_tick            (t808Cowbell* const);
-    void    t808Cowbell_on              (t808Cowbell* const, float vel);
-    void    t808Cowbell_setDecay        (t808Cowbell* const, float decay);
-    void    t808Cowbell_setHighpassFreq (t808Cowbell* const, float freq);
-    void    t808Cowbell_setBandpassFreq (t808Cowbell* const, float freq);
-    void    t808Cowbell_setFreq         (t808Cowbell* const, float freq);
-    void    t808Cowbell_setOscMix       (t808Cowbell* const, float oscMix);
-    void    t808Cowbell_setStick        (t808Cowbell* const, int useStick);
-    
-    //==============================================================================
-    
-    // 808 Hihat
-    typedef struct _t808Hihat {
-        
-        // 6 Square waves
-        tSquare p[6];
-        tNoise n;
-        tSVF bandpassOsc;
-        tSVF bandpassStick;
-        tEnvelope envGain;
-        tEnvelope envStick;
-        tEnvelope noiseFMGain;
-        tHighpass highpass;
-        tNoise stick;
-        
-        float freq;
-        float stretch;
-        float FM_amount;
-        float oscNoiseMix;
-        
-    } _t808Hihat;
-    
-    typedef _t808Hihat* t808Hihat;
-    
-    void    t808Hihat_init                  (t808Hihat* const);
-    void    t808Hihat_free                  (t808Hihat* const);
-    void    t808Hihat_initToPool            (t808Hihat* const, tMempool* const);
-    void    t808Hihat_freeFromPool          (t808Hihat* const, tMempool* const);
-    
-    float   t808Hihat_tick                  (t808Hihat* const);
-    void    t808Hihat_on                    (t808Hihat* const, float vel);
-    void    t808Hihat_setOscNoiseMix        (t808Hihat* const, float oscNoiseMix);
-    void    t808Hihat_setDecay              (t808Hihat* const, float decay);
-    void    t808Hihat_setHighpassFreq       (t808Hihat* const, float freq);
-    void    t808Hihat_setOscBandpassFreq    (t808Hihat* const, float freq);
-    void    t808Hihat_setOscBandpassQ       (t808Hihat* const hihat, float Q);
-    void    t808Hihat_setStickBandPassFreq  (t808Hihat* const, float freq);
-    void    t808Hihat_setStickBandPassQ     (t808Hihat* const hihat, float Q);
-    void    t808Hihat_setOscFreq            (t808Hihat* const, float freq);
-    void    t808Hihat_setStretch            (t808Hihat* const hihat, float stretch);
-    void    t808Hihat_setFM                 (t808Hihat* const hihat, float FM_amount);
-    
-    //==============================================================================
-    
-    // 808 Snare
-    typedef struct _t808Snare {
-        
-        // Tone 1, Tone 2, Noise
-        tTriangle tone[2]; // Tri (not yet antialiased or wavetabled)
-        tNoise noiseOsc;
-        tSVF toneLowpass[2];
-        tSVF noiseLowpass; // Lowpass from SVF filter
-        tEnvelope toneEnvOsc[2];
-        tEnvelope toneEnvGain[2];
-        tEnvelope noiseEnvGain;
-        tEnvelope toneEnvFilter[2];
-        tEnvelope noiseEnvFilter;
-        
-        float toneGain[2];
-        float noiseGain;
-        
-        float toneNoiseMix;
-        
-        float tone1Freq, tone2Freq;
-        
-        float noiseFilterFreq;
-        
-    } _t808Snare;
-    
-    typedef _t808Snare* t808Snare;
-    
-    void    t808Snare_init                  (t808Snare* const);
-    void    t808Snare_free                  (t808Snare* const);
-    void    t808Snare_initToPool            (t808Snare* const, tMempool* const);
-    void    t808Snare_freeFromPool          (t808Snare* const, tMempool* const);
-    
-    float   t808Snare_tick                  (t808Snare* const);
-    void    t808Snare_on                    (t808Snare* const, float vel);
-    void    t808Snare_setTone1Freq          (t808Snare* const, float freq);
-    void    t808Snare_setTone2Freq          (t808Snare* const, float freq);
-    void    t808Snare_setTone1Decay         (t808Snare* const, float decay);
-    void    t808Snare_setTone2Decay         (t808Snare* const, float decay);
-    void    t808Snare_setNoiseDecay         (t808Snare* const, float decay);
-    void    t808Snare_setToneNoiseMix       (t808Snare* const, float toneNoiseMix);
-    void    t808Snare_setNoiseFilterFreq    (t808Snare* const, float noiseFilterFreq);
-    void    t808Snare_setNoiseFilterQ       (t808Snare* const, float noiseFilterQ);
-    
-    //==============================================================================
-    
-    // 808 Kick
-    typedef struct _t808Kick {
-        
-        
-        tCycle tone; // Tri
-        tNoise noiseOsc;
-        tSVF toneLowpass;
-        tEnvelope toneEnvOscChirp;
-        tEnvelope toneEnvOscSigh;
-        tEnvelope toneEnvGain;
-        tEnvelope noiseEnvGain;
-        tEnvelope toneEnvFilter;
-        
-        float toneGain;
-        float noiseGain;
-        
-        float toneInitialFreq;
-        float sighAmountInHz;
-        float chirpRatioMinusOne;
-        float noiseFilterFreq;
-        
-    } _t808Kick;
-    
-    typedef _t808Kick* t808Kick;
-    
-    void    t808Kick_init               (t808Kick* const);
-    void    t808Kick_free               (t808Kick* const);
-    void    t808Kick_initToPool         (t808Kick* const, tMempool* const);
-    void    t808Kick_freeFromPool       (t808Kick* const, tMempool* const);
-    
-    float   t808Kick_tick               (t808Kick* const);
-    void    t808Kick_on                 (t808Kick* const, float vel);
-    void    t808Kick_setToneFreq        (t808Kick* const, float freq);
-    void    t808Kick_setToneDecay       (t808Kick* const, float decay);
-    void    t808Kick_setNoiseDecay      (t808Kick* const, float decay);
-    void    t808Kick_setSighAmount      (t808Kick* const, float sigh);
-    void    t808Kick_setChirpAmount     (t808Kick* const, float chirp);
-    void    t808Kick_setToneNoiseMix    (t808Kick* const, float toneNoiseMix);
-    void    t808Kick_setNoiseFilterFreq (t808Kick* const, float noiseFilterFreq);
-    void    t808Kick_setNoiseFilterQ    (t808Kick* const, float noiseFilterQ);
-    
-    //==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif // LEAF_INSTRUMENTS_H_INCLUDED
-
-//==============================================================================
-
-
-
--- a/LEAF/Inc/leaf-math.h
+++ /dev/null
@@ -1,179 +1,0 @@
-/*==============================================================================
- 
- leaf-math.h
- Created: 22 Jan 2017 7:02:56pm
- Author:  Michael R Mulshine
- 
- ==============================================================================*/
-
-#ifndef LEAF_MATH_H_INCLUDED
-#define LEAF_MATH_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-#include "leaf-global.h"
-#include "math.h"
-#include "stdint.h"
-#include "stdlib.h"
-    
-    //==============================================================================
-    
-    //==============================================================================
-    
-    typedef enum oBool
-    {
-        OTRUE  = 1,
-        OFALSE = 0
-    }oBool;
-    
-    // Allows for bitwise operations on floats
-    union unholy_t { /* a union between a float and an integer */
-        float f;
-        int i;
-    };
-    
-#define SQRT8 2.82842712475f
-#define WSCALE 1.30612244898f
-#define PI              (3.14159265358979f)
-#define TWO_PI          (2 * PI)
-    
-#define VSF             1.0e-38f
-    
-#define MAX_DELAY       8192
-#define INV_128         0.0078125f
-    
-#define INV_20         0.05f
-#define INV_40         0.025f
-#define INV_80         0.0125f
-#define INV_160        0.00625f
-#define INV_320        0.003125f
-#define INV_640        0.0015625f
-#define INV_1280       0.00078125f
-#define INV_2560       0.000390625f
-#define INV_5120       0.0001953125f
-#define INV_10240      0.00009765625f
-#define INV_20480      0.000048828125f
-    
-    
-#define INV_TWELVE                 0.0833333333f
-#define INV_440                     0.0022727273f
-    
-#define LOG2                             0.3010299957f
-#define INV_LOG2                     3.321928095f
-    
-#define SOS_M                         343.0f
-#define TWO_TO_5                     32.0f
-#define INV_TWO_TO_5             0.03125f
-#define TWO_TO_7                     128.f
-#define INV_TWO_TO_7             0.0078125f
-#define TWO_TO_8                     256.f
-#define INV_TWO_TO_8             0.00390625f
-#define TWO_TO_9                     512.f
-#define INV_TWO_TO_9             0.001953125f
-#define TWO_TO_10                 1024.f
-#define INV_TWO_TO_10         0.0009765625f
-#define TWO_TO_11                 2048.f
-#define INV_TWO_TO_11         0.00048828125f
-#define TWO_TO_12                 4096.f
-#define INV_TWO_TO_12         0.00024414062f
-#define TWO_TO_15                 32768.f
-#define TWO_TO_16                 65536.f
-#define INV_TWO_TO_15         0.00003051757f
-#define INV_TWO_TO_16         0.00001525878f
-#define TWO_TO_16_MINUS_ONE 65535.0f
-#define TWO_TO_23        8388608.0f
-#define INV_TWO_TO_23    0.00000011920929f
-#define TWO_TO_31        2147483648.0f
-#define INV_TWO_TO_31    0.000000000465661f
-#define TWO_TO_32        4294967296.0f
-#define INV_TWO_TO_32    0.000000000232831f
-    
-
-#define LOGTEN 2.302585092994
-
-    // Jones shaper
-    float LEAF_shaper     (float input, float m_drive);
-    float LEAF_reedTable  (float input, float offset, float slope);
-    
-    float LEAF_reduct (float input, float ratio);
-    float LEAF_round (float input, float rnd);
-    float LEAF_bitwise_xor(float input, uint32_t op);
-    
-    float LEAF_reduct (float input, float ratio);
-    float LEAF_round (float input, float rnd);
-    float LEAF_bitwise_xor(float input, uint32_t op);
-    
-    float       LEAF_clip               (float min, float val, float max);
-    int         LEAF_clipInt            (int min, int val, int max);
-    float       LEAF_softClip            (float val, float thresh);
-    oBool       LEAF_isPrime            (uint64_t number );
-    
-    float       LEAF_midiToFrequency    (float f);
-    float       LEAF_frequencyToMidi(float f);
-    
-    void        LEAF_generate_sine     (float* buffer, int size);
-    void        LEAF_generate_sawtooth (float* buffer, float basefreq, int size);
-    void        LEAF_generate_triangle (float* buffer, float basefreq, int size);
-    void        LEAF_generate_square   (float* buffer, float basefreq, int size);
-    
-    // dope af
-    float       LEAF_chebyshevT(float in, int n);
-    float       LEAF_CompoundChebyshevT(float in, int n, float* amps);
-    
-    // Hermite interpolation
-    float LEAF_interpolate_hermite (float A, float B, float C, float D, float t);
-    float LEAF_interpolate_hermite_x(float yy0, float yy1, float yy2, float yy3, float xx);
-    float LEAF_interpolation_linear (float A, float B, float t);
-    
-    float interpolate3max(float *buf, const int peakindex);
-    float interpolate3phase(float *buf, const int peakindex);
-    
-    // alternative implementation for abs()
-    // REQUIRES: 32 bit integers
-    int fastabs_int(int in);
-    
-    // alternative implementation for abs()
-    // REQUIRES: 32 bit floats
-    float fastabsf(float f);
-    
-    float fastexp2f(float f);
-    
-    
-    void LEAF_crossfade(float fade, float* volumes);
-
-
-
-    float fast_mtof(float f);
-
-    float fastexpf(float x);
-
-    float fasterexpf(float x);
-
-    float mtof(float f);
-    
-    float fast_mtof(float f);
-
-    float faster_mtof(float f);
-
-    float ftom(float f);
-    
-    float powtodb(float f);
-    
-    float rmstodb(float f);
-    
-    float dbtopow(float f);
-    
-    float dbtorms(float f);
-    
-    //==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // LEAF_MATH_H_INCLUDED
-
-//==============================================================================
-
--- a/LEAF/Inc/leaf-mempool.h
+++ /dev/null
@@ -1,127 +1,0 @@
-/*==============================================================================
- 
- In short, mpool is distributed under so called "BSD license",
- 
- Copyright (c) 2009-2010 Tatsuhiko Kubo <cubicdaiya@gmail.com>
- All rights reserved.
- 
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
- 
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- 
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- 
- * Neither the name of the authors nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
- 
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- 
- written by C99 style
- ==============================================================================*/
-
-#ifndef LEAF_MPOOL_H_INCLUDED
-#define LEAF_MPOOL_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-    
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdbool.h>
-    
-    //==============================================================================
-    
-#define MPOOL_ALIGN_SIZE (8)
-    
-    //#define size_t unsigned long
-    
-    /**
-     * memory pool structure
-     */
-    
-    // node of free list
-    typedef struct mpool_node_t {
-        void                *pool;     // memory pool field
-        struct mpool_node_t *next;     // next node pointer
-        struct mpool_node_t *prev;     // prev node pointer
-        size_t size;
-    } mpool_node_t;
-    
-    typedef struct mpool_t {
-        void*         mpool;       // start of the mpool
-        size_t        usize;       // used size of the pool
-        size_t        msize;       // max size of the pool
-        mpool_node_t* head;        // first node of memory pool free list
-    } mpool_t;
-    
-    void mpool_create (char* memory, size_t size, mpool_t* pool);
-
-    void* mpool_alloc(size_t size, mpool_t* pool);
-    void* mpool_calloc(size_t asize, mpool_t* pool);
-
-    void mpool_free(void* ptr, mpool_t* pool);
-    
-    size_t mpool_get_size(mpool_t* pool);
-    size_t mpool_get_used(mpool_t* pool);
-    
-    void leaf_pool_init(char* memory, size_t size);
-    
-    void* leaf_alloc(size_t size);
-    void* leaf_calloc(size_t size);
-
-    void leaf_free(void* ptr);
-    
-    size_t leaf_pool_get_size(void);
-    size_t leaf_pool_get_used(void);
-    
-    void* leaf_pool_get_pool(void);
-    
-    void leaf_mempool_overrun(void);
-    
-    // User object for creating additional mempools
-    
-    typedef struct _tMempool
-    {
-        mpool_t pool;
-    } _tMempool;
-    
-    typedef _tMempool* tMempool;
-    
-    void    tMempool_init           (tMempool* const, char* memory, size_t size);
-    void    tMempool_free           (tMempool* const);
-    void    tMempool_initToPool     (tMempool* const, char* memory, size_t size, tMempool* const);
-    void    tMempool_freeFromPool   (tMempool* const, tMempool* const);
-    
-    //==============================================================================
-    
-    extern tMempool leaf_mempool;
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif // LEAF_MPOOL_H
-
-//==============================================================================
-
-
-
--- a/LEAF/Inc/leaf-midi.h
+++ /dev/null
@@ -1,133 +1,0 @@
-/*==============================================================================
- 
- leaf-midi.h
- Created: 30 Nov 2018 11:29:26am
- Author:  airship
- 
- ==============================================================================*/
-
-#ifndef LEAF_MIDI_H_INCLUDED
-#define LEAF_MIDI_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-    
-#include "leaf-global.h"
-#include "leaf-mempool.h"
-#include "leaf-math.h"
-#include "leaf-envelopes.h"
-    
-    //==============================================================================
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    // STACK implementation (fixed size)
-#define STACK_SIZE 128
-    typedef struct _tStack
-    {
-        int data[STACK_SIZE];
-        uint16_t pos;
-        uint16_t size;
-        uint16_t capacity;
-        oBool ordered;
-        
-    } _tStack;
-    
-    typedef _tStack* tStack;
-    
-    void    tStack_init                 (tStack* const);
-    void    tStack_free                 (tStack* const);
-    void    tStack_initToPool           (tStack* const, tMempool* const);
-    void    tStack_freeFromPool         (tStack* const, tMempool* const);
-    
-    void    tStack_setCapacity          (tStack* const, uint16_t cap);
-    int     tStack_addIfNotAlreadyThere (tStack* const, uint16_t item);
-    void    tStack_add                  (tStack* const, uint16_t item);
-    int     tStack_remove               (tStack* const, uint16_t item);
-    void    tStack_clear                (tStack* const);
-    int     tStack_first                (tStack* const);
-    int     tStack_getSize              (tStack* const);
-    int     tStack_contains             (tStack* const, uint16_t item);
-    int     tStack_next                 (tStack* const);
-    int     tStack_get                  (tStack* const, int which);
-    
-    /* tPoly */
-    typedef struct _tPoly
-    {
-        tStack stack;
-        tStack orderStack;
-        
-        tRamp* ramps;
-        float* rampVals;
-        oBool* firstReceived;
-        float glideTime;
-        oBool pitchGlideIsActive;
-        
-        int numVoices;
-        int maxNumVoices;
-        
-        //int voices[POLY_NUM_MAX_VOICES][2];
-        int** voices;
-        
-        int notes[128][2];
-        
-        int CCs[128];
-        
-        uint8_t CCsRaw[128];
-        
-        int lastVoiceToChange;
-        
-        float pitchBend;
-        tRamp pitchBendRamp;
-        
-        int currentNote;
-        int currentVoice;
-        int currentVelocity;
-        int maxLength;
-        
-    } _tPoly;
-    
-    typedef _tPoly* tPoly;
-    
-    /* MPoly*/
-    void    tPoly_init                  (tPoly* const, int maxNumVoices);
-    void    tPoly_free                  (tPoly* const);
-    void    tPoly_initToPool            (tPoly* const, int maxNumVoices, tMempool* const);
-    void    tPoly_freeFromPool          (tPoly* const, tMempool* const);
-    
-    //ADDING A NOTE
-    int     tPoly_noteOn                (tPoly* const, int note, uint8_t vel);
-    int     tPoly_noteOff               (tPoly* const, uint8_t note);
-    void    tPoly_orderedAddToStack     (tPoly* const, uint8_t noteVal);
-    void    tPoly_setNumVoices          (tPoly* const, uint8_t numVoices);
-    
-    void    tPoly_setPitchBend          (tPoly* const, float pitchBend);
-    void    tPoly_setPitchGlideActive   (tPoly* const, oBool isActive);
-    void    tPoly_setPitchGlideTime     (tPoly* const, float t);
-    void 	tPoly_setBendGlideTime		(tPoly* const polyh, float t);
-    void 	tPoly_setBendSamplesPerTick	(tPoly* const polyh, float t);
-    void    tPoly_tickPitch             (tPoly* const);
-    void    tPoly_tickPitchGlide        (tPoly* const);
-    void    tPoly_tickPitchBend         (tPoly* const);
-    
-    int     tPoly_getNumVoices          (tPoly* const);
-    int     tPoly_getNumActiveVoices    (tPoly* const);
-    float   tPoly_getPitch              (tPoly* const, uint8_t voice);
-    int     tPoly_getKey                (tPoly* const, uint8_t voice);
-    int     tPoly_getVelocity           (tPoly* const, uint8_t voice);
-    int     tPoly_isOn                  (tPoly* const, uint8_t voice);
-    
-    //==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif // LEAF_MIDI_H_INCLUDED
-
-//==============================================================================
-
-
--- a/LEAF/Inc/leaf-oscillators.h
+++ /dev/null
@@ -1,208 +1,0 @@
-/*==============================================================================
- leaf-oscillators.h
- Created: 20 Jan 2017 12:00:58pm
- Author:  Michael R Mulshine
- ==============================================================================*/
-
-#ifndef LEAF_OSCILLATORS_H_INCLUDED
-#define LEAF_OSCILLATORS_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-    
-#include "leaf-math.h"
-#include "leaf-mempool.h"
-#include "leaf-filters.h"
-    
-    //==============================================================================
-    
-    /* tCycle: Cycle/Sine waveform. Wavetable synthesis.*/
-    typedef struct _tCycle
-    {
-        // Underlying phasor
-        float phase;
-        float inc,freq;
-        
-    } _tCycle;
-    
-    typedef _tCycle* tCycle;
-    
-    void    tCycle_init         (tCycle* const);
-    void    tCycle_free         (tCycle* const);
-    void    tCycle_initToPool   (tCycle* const, tMempool* const);
-    void    tCycle_freeFromPool (tCycle* const, tMempool* const);
-    
-    float   tCycle_tick         (tCycle* const);
-    int     tCycle_setFreq      (tCycle* const, float freq);
-    
-    //==============================================================================
-    
-    /* tTriangle: Anti-aliased Triangle waveform using wavetable interpolation. Wavetables constructed from sine components. */
-    typedef struct _tTriangle
-    {
-        // Underlying phasor
-        float phase;
-        float inc,freq;
-        
-    } _tTriangle;
-    
-    typedef _tTriangle* tTriangle;
-    
-    void    tTriangle_init          (tTriangle* const);
-    void    tTriangle_free          (tTriangle* const);
-    void    tTriangle_initToPool    (tTriangle* const, tMempool* const);
-    void    tTriangle_freeFromPool  (tTriangle* const, tMempool* const);
-    
-    float   tTriangle_tick          (tTriangle* const);
-    int     tTriangle_setFreq       (tTriangle* const, float freq);
-    
-    //==============================================================================
-    
-    /* tSquare: Anti-aliased Square waveform using wavetable interpolation. Wavetables constructed from sine components. */
-    typedef struct _tSquare
-    {
-        // Underlying phasor
-        float phase;
-        float inc,freq;
-        
-    } _tSquare;
-    
-    typedef _tSquare* tSquare;
-    
-    void    tSquare_init        (tSquare* const);
-    void    tSquare_free        (tSquare* const);
-    void    tSquare_initToPool  (tSquare* const, tMempool* const);
-    void    tSquare_freeFromPool(tSquare* const, tMempool* const);
-    
-    float   tSquare_tick        (tSquare* const);
-    int     tSquare_setFreq     (tSquare* const, float freq);
-    
-    //==============================================================================
-    
-    /* tSawtooth: Anti-aliased Sawtooth waveform using wavetable interpolation. Wavetables constructed from sine components. */
-    typedef struct _tSawtooth
-    {
-        // Underlying phasor
-        float phase;
-        float inc,freq;
-        
-    } _tSawtooth;
-    
-    typedef _tSawtooth* tSawtooth;
-    
-    void    tSawtooth_init          (tSawtooth* const);
-    void    tSawtooth_free          (tSawtooth* const);
-    void    tSawtooth_initToPool    (tSawtooth* const, tMempool* const);
-    void    tSawtooth_freeFromPool  (tSawtooth* const, tMempool* const);
-    
-    float   tSawtooth_tick          (tSawtooth* const);
-    int     tSawtooth_setFreq       (tSawtooth* const, float freq);
-    
-    //==============================================================================
-    
-    /* tPhasor: Aliasing phasor [0.0, 1.0) */
-    typedef struct _tPhasor
-    {
-        float phase;
-        float inc,freq;
-        
-    } _tPhasor;
-    
-    typedef _tPhasor* tPhasor;
-    
-    void    tPhasor_init        (tPhasor* const);
-    void    tPhasor_free        (tPhasor* const);
-    void    tPhasor_initToPool  (tPhasor* const, tMempool* const);
-    void    tPhasor_freeFromPool(tPhasor* const, tMempool* const);
-    
-    float   tPhasor_tick        (tPhasor* const);
-    int     tPhasor_setFreq     (tPhasor* const, float freq);
-    
-    //==============================================================================
-    
-    /* tNoise. WhiteNoise, PinkNoise. */
-    typedef enum NoiseType
-    {
-        WhiteNoise=0,
-        PinkNoise,
-        NoiseTypeNil,
-    } NoiseType;
-    
-    typedef struct _tNoise
-    {
-        NoiseType type;
-        float pinkb0, pinkb1, pinkb2;
-        float(*rand)(void);
-        
-    } _tNoise;
-    
-    typedef _tNoise* tNoise;
-    
-    void    tNoise_init         (tNoise* const, NoiseType type);
-    void    tNoise_free         (tNoise* const);
-    void    tNoise_initToPool   (tNoise* const, NoiseType type, tMempool* const);
-    void    tNoise_freeFromPool (tNoise* const, tMempool* const);
-    
-    float   tNoise_tick         (tNoise* const);
-    
-    //==============================================================================
-    
-    /* tNeuron */
-    typedef enum NeuronMode
-    {
-        NeuronNormal = 0,
-        NeuronTanh,
-        NeuronAaltoShaper,
-        NeuronModeNil
-    } NeuronMode;
-    
-    typedef struct _tNeuron
-    {
-        tPoleZero f;
-        
-        NeuronMode mode;
-        
-        float voltage, current;
-        float timeStep;
-        
-        float alpha[3];
-        float beta[3];
-        float rate[3];
-        float V[3];
-        float P[3];
-        float gK, gN, gL, C;
-    } _tNeuron;
-    
-    typedef _tNeuron* tNeuron;
-    
-    void    tNeuron_init        (tNeuron* const);
-    void    tNeuron_free        (tNeuron* const);
-    void    tNeuron_initToPool  (tNeuron* const, tMempool* const);
-    void    tNeuron_freeFromPool(tNeuron* const, tMempool* const);
-    
-    void    tNeuron_reset       (tNeuron* const);
-    float   tNeuron_tick        (tNeuron* const);
-    void    tNeuron_setMode     (tNeuron* const, NeuronMode mode);
-    void    tNeuron_setCurrent  (tNeuron* const, float current);
-    void    tNeuron_setK        (tNeuron* const, float K);
-    void    tNeuron_setL        (tNeuron* const, float L);
-    void    tNeuron_setN        (tNeuron* const, float N);
-    void    tNeuron_setC        (tNeuron* const, float C);
-    void    tNeuron_setV1       (tNeuron* const, float V1);
-    void    tNeuron_setV2       (tNeuron* const, float V2);
-    void    tNeuron_setV3       (tNeuron* const, float V3);
-    void    tNeuron_setTimeStep (tNeuron* const, float timestep);
-    
-    //==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // LEAF_OSCILLATORS_H_INCLUDED
-
-//==============================================================================
-
--- a/LEAF/Inc/leaf-physical.h
+++ /dev/null
@@ -1,251 +1,0 @@
-/*
- ==============================================================================
- 
- leaf-physical.h
- Created: 30 Nov 2018 10:41:55am
- Author:  airship
- 
- ==============================================================================
- */
-
-#ifndef LEAF_PHYSICAL_H_INCLUDED
-#define LEAF_PHYSICAL_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-    
-#include "leaf-global.h"
-#include "leaf-math.h"
-#include "leaf-mempool.h"
-#include "leaf-delay.h"
-#include "leaf-filters.h"
-#include "leaf-oscillators.h"
-#include "leaf-envelopes.h"
-#include "leaf-dynamics.h"
-    
-    //==============================================================================
-    
-    /* Karplus Strong model */
-    typedef struct _tPluck
-    {
-        tAllpassDelay     delayLine; // Allpass or Linear??  big difference...
-        tOneZero    loopFilter;
-        tOnePole    pickFilter;
-        tNoise      noise;
-        
-        float lastOut;
-        float loopGain;
-        float lastFreq;
-        
-        float sr;
-        
-    } _tPluck;
-    
-    typedef _tPluck* tPluck;
-    
-    void    tPluck_init          (tPluck* const, float lowestFrequency); //float delayBuff[DELAY_LENGTH]);
-    void    tPluck_free          (tPluck* const);
-    void    tPluck_initToPool    (tPluck* const, float lowestFrequency, tMempool* const);
-    void    tPluck_freeFromPool  (tPluck* const, tMempool* const);
-    
-    float       tPluck_tick          (tPluck* const);
-    
-    // Pluck the string.
-    void    tPluck_pluck         (tPluck* const, float amplitude);
-    
-    // Start a note with the given frequency and amplitude.;
-    void    tPluck_noteOn        (tPluck* const, float frequency, float amplitude );
-    
-    // Stop a note with the given amplitude (speed of decay).
-    void    tPluck_noteOff       (tPluck* const, float amplitude );
-    
-    // Set instrument parameters for a particular frequency.
-    void    tPluck_setFrequency  (tPluck* const, float frequency );
-    
-    // Perform the control change specified by \e number and \e value (0.0 - 128.0).
-    void    tPluck_controlChange (tPluck* const, int number, float value);
-    
-    // tPluck Utilities.
-    float   tPluck_getLastOut    (tPluck* const);
-    
-    //==============================================================================
-    
-    typedef enum SKControlType
-    {
-        SKPickPosition = 0,
-        SKStringDamping,
-        SKDetune,
-        SKControlTypeNil
-    } SKControlType;
-    
-    /* Stif Karplus Strong model */
-    typedef struct _tKarplusStrong
-    {
-        tAllpassDelay  delayLine;
-        tLinearDelay combDelay;
-        tOneZero filter;
-        tNoise   noise;
-        tBiQuad  biquad[4];
-        
-        uint32_t length;
-        float loopGain;
-        float baseLoopGain;
-        float lastFrequency;
-        float lastLength;
-        float stretching;
-        float pluckAmplitude;
-        float pickupPosition;
-        
-        float lastOut;
-        
-    } _tKarplusStrong;
-    
-    typedef _tKarplusStrong* tKarplusStrong;
-    
-    void    tKarplusStrong_init               (tKarplusStrong* const, float lowestFrequency); // float delayBuff[2][DELAY_LENGTH]);
-    void    tKarplusStrong_free               (tKarplusStrong* const);
-    void    tKarplusStrong_initToPool         (tKarplusStrong* const, float lowestFrequency, tMempool* const);
-    void    tKarplusStrong_freeFromPool       (tKarplusStrong* const, tMempool* const);
-    
-    float   tKarplusStrong_tick               (tKarplusStrong* const);
-    
-    // Pluck the string.
-    void    tKarplusStrong_pluck              (tKarplusStrong* const, float amplitude);
-    
-    // Start a note with the given frequency and amplitude.;
-    void    tKarplusStrong_noteOn             (tKarplusStrong* const, float frequency, float amplitude );
-    
-    // Stop a note with the given amplitude (speed of decay).
-    void    tKarplusStrong_noteOff            (tKarplusStrong* const, float amplitude );
-    
-    // Set instrument parameters for a particular frequency.
-    void    tKarplusStrong_setFrequency       (tKarplusStrong* const, float frequency );
-    
-    // Perform the control change specified by \e number and \e value (0.0 - 128.0).
-    // Use SKPickPosition, SKStringDamping, or SKDetune for type.
-    void    tKarplusStrong_controlChange      (tKarplusStrong* const, SKControlType type, float value);
-    
-    // Set the stretch "factor" of the string (0.0 - 1.0).
-    void    tKarplusStrong_setStretch         (tKarplusStrong* const, float stretch );
-    
-    // Set the pluck or "excitation" position along the string (0.0 - 1.0).
-    void    tKarplusStrong_setPickupPosition  (tKarplusStrong* const, float position );
-    
-    // Set the base loop gain.
-    void    tKarplusStrong_setBaseLoopGain    (tKarplusStrong* const, float aGain );
-    
-    // tKarplusStrong utilities.
-    float   tKarplusStrong_getLastOut         (tKarplusStrong* const);
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    /* Simple Living String */
-    typedef struct _tSimpleLivingString {
-        float freq, waveLengthInSamples;        // the frequency of the string, determining delay length
-        float dampFreq;    // frequency for the bridge LP filter, in Hz
-        float decay; // amplitude damping factor for the string (only active in mode 0)
-        float levMode;
-        float curr;
-        tLinearDelay delayLine;
-        tOnePole bridgeFilter;
-        tHighpass DCblocker;
-        tFeedbackLeveler fbLev;
-        tExpSmooth wlSmooth;
-    } _tSimpleLivingString;
-    
-    typedef _tSimpleLivingString* tSimpleLivingString;
-    
-    void    tSimpleLivingString_init                (tSimpleLivingString* const, float freq, float dampFreq,
-                                                     float decay, float targetLev, float levSmoothFactor,
-                                                     float levStrength, int levMode);
-    void    tSimpleLivingString_free                (tSimpleLivingString* const);
-    void    tSimpleLivingString_initToPool          (tSimpleLivingString* const, float freq, float dampFreq,
-                                                     float decay, float targetLev, float levSmoothFactor,
-                                                     float levStrength, int levMode, tMempool* const);
-    void    tSimpleLivingString_freeFromPool        (tSimpleLivingString* const, tMempool* const);
-    
-    float   tSimpleLivingString_tick                (tSimpleLivingString* const, float input);
-    float   tSimpleLivingString_sample              (tSimpleLivingString* const);
-    void    tSimpleLivingString_setFreq             (tSimpleLivingString* const, float freq);
-    void    tSimpleLivingString_setWaveLength       (tSimpleLivingString* const, float waveLength); // in samples
-    void    tSimpleLivingString_setDampFreq         (tSimpleLivingString* const, float dampFreq);
-    void    tSimpleLivingString_setDecay            (tSimpleLivingString* const, float decay); // should be near 1.0
-    void    tSimpleLivingString_setTargetLev        (tSimpleLivingString* const, float targetLev);
-    void    tSimpleLivingString_setLevSmoothFactor  (tSimpleLivingString* const, float levSmoothFactor);
-    void    tSimpleLivingString_setLevStrength      (tSimpleLivingString* const, float levStrength);
-    void    tSimpleLivingString_setLevMode          (tSimpleLivingString* const, int levMode);
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    /* Living String */
-    typedef struct _tLivingString {
-        float freq, waveLengthInSamples;        // the frequency of the whole string, determining delay length
-        float pickPos;    // the pick position, dividing the string in two, in ratio
-        float prepIndex;    // the amount of pressure on the pickpoint of the string (near 0=soft obj, near 1=hard obj)
-        float dampFreq;    // frequency for the bridge LP filter, in Hz
-        float decay; // amplitude damping factor for the string (only active in mode 0)
-        float levMode;
-        float curr;
-        tLinearDelay delLF,delUF,delUB,delLB;    // delay for lower/upper/forward/backward part of the waveguide model
-        tOnePole bridgeFilter, nutFilter, prepFilterU, prepFilterL;
-        tHighpass DCblockerL, DCblockerU;
-        tFeedbackLeveler fbLevU, fbLevL;
-        tExpSmooth wlSmooth, ppSmooth;
-    } _tLivingString;
-    
-    typedef _tLivingString* tLivingString;
-    
-    void    tLivingString_init                  (tLivingString* const, float freq, float pickPos, float prepIndex,
-                                                 float dampFreq, float decay, float targetLev, float levSmoothFactor,
-                                                 float levStrength, int levMode);
-    void    tLivingString_free                  (tLivingString* const);
-    void    tLivingString_initToPool            (tLivingString* const, float freq, float pickPos, float prepIndex,
-                                                 float dampFreq, float decay, float targetLev, float levSmoothFactor,
-                                                 float levStrength, int levMode, tMempool* const);
-    void    tLivingString_freeFromPool          (tLivingString* const, tMempool* const);
-    
-    float   tLivingString_tick                  (tLivingString* const, float input);
-    float   tLivingString_sample                (tLivingString* const);
-    void    tLivingString_setFreq               (tLivingString* const, float freq);
-    void    tLivingString_setWaveLength         (tLivingString* const, float waveLength); // in samples
-    void    tLivingString_setPickPos            (tLivingString* const, float pickPos);
-    void    tLivingString_setPrepIndex          (tLivingString* const, float prepIndex);
-    void    tLivingString_setDampFreq           (tLivingString* const, float dampFreq);
-    void    tLivingString_setDecay              (tLivingString* const, float decay); // should be near 1.0
-    void    tLivingString_setTargetLev          (tLivingString* const, float targetLev);
-    void    tLivingString_setLevSmoothFactor    (tLivingString* const, float levSmoothFactor);
-    void    tLivingString_setLevStrength        (tLivingString* const, float levStrength);
-    void    tLivingString_setLevMode            (tLivingString* const, int levMode);
-    
-    // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
-    
-    //Reed Table - borrowed from STK
-    typedef struct _tReedTable {
-        float offset, slope;
-    } _tReedTable;
-    
-    typedef _tReedTable* tReedTable;
-    
-    void    tReedTable_init         (tReedTable* const, float offset, float slope);
-    void    tReedTable_free         (tReedTable* const);
-    void    tReedTable_initToPool   (tReedTable* const, float offset, float slope, tMempool* const);
-    void    tReedTable_freeFromPool (tReedTable* const, tMempool* const);
-    
-    float   tReedTable_tick         (tReedTable* const, float input);
-    float   tReedTable_tanh_tick    (tReedTable* const, float input); //tanh softclip version of reed table - replacing the hard clip in original stk code
-    void    tReedTable_setOffset    (tReedTable* const, float offset);
-    void    tReedTable_setSlope     (tReedTable* const, float slope);
-    
-    //==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif // LEAF_PHYSICAL_H_INCLUDED
-
-//==============================================================================
-
--- a/LEAF/Inc/leaf-reverb.h
+++ /dev/null
@@ -1,167 +1,0 @@
-/*==============================================================================
- 
- leaf-reverb.h
- Created: 20 Jan 2017 12:02:04pm
- Author:  Michael R Mulshine
- 
- ==============================================================================*/
-
-#ifndef LEAF_REVERB_H_INCLUDED
-#define LEAF_REVERB_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-    
-#include "leaf-global.h"
-#include "leaf-math.h"
-#include "leaf-mempool.h"
-#include "leaf-delay.h"
-#include "leaf-filters.h"
-#include "leaf-oscillators.h"
-    
-    //==============================================================================
-    
-    /* PRCReverb: Reverb, reimplemented from STK (Cook and Scavone). */
-    typedef struct _tPRCReverb
-    {
-        float mix, t60;
-        
-        float inv_441;
-        
-        tDelay allpassDelays[2];
-        tDelay combDelay;
-        float allpassCoeff;
-        float combCoeff;
-        
-        float lastIn, lastOut;
-        
-    } _tPRCReverb;
-    
-    typedef _tPRCReverb* tPRCReverb;
-    
-    void    tPRCReverb_init         (tPRCReverb* const, float t60);
-    void    tPRCReverb_free         (tPRCReverb* const);
-    void    tPRCReverb_initToPool   (tPRCReverb* const, float t60, tMempool* const);
-    void    tPRCReverb_freeFromPool (tPRCReverb* const, tMempool* const);
-    
-    void    tPRCReverb_clear        (tPRCReverb* const);
-    float   tPRCReverb_tick         (tPRCReverb* const, float input);
-    
-    // Set reverb time in seconds.
-    void    tPRCReverb_setT60       (tPRCReverb* const, float t60);
-    
-    // Set mix between dry input and wet output signal.
-    void    tPRCReverb_setMix       (tPRCReverb* const, float mix);
-    
-    //==============================================================================
-    
-    /* NReverb: Reverb, reimplemented from STK (Cook and Scavone). */
-    typedef struct _tNReverb
-    {
-        float mix, t60;
-        
-        float inv_sr, inv_441;
-        
-        tLinearDelay allpassDelays[8];
-        tLinearDelay combDelays[6];
-        float allpassCoeff;
-        float combCoeffs[6];
-        float lowpassState;
-        
-        float lastIn, lastOut;
-        
-    } _tNReverb;
-    
-    typedef _tNReverb* tNReverb;
-    
-    void    tNReverb_init           (tNReverb* const, float t60);
-    void    tNReverb_free           (tNReverb* const);
-    void    tNReverb_initToPool     (tNReverb* const, float t60, tMempool* const);
-    void    tNReverb_freeFromPool   (tNReverb* const, tMempool* const);
-    
-    void    tNReverb_clear          (tNReverb* const);
-    float   tNReverb_tick           (tNReverb* const, float input);
-    void    tNReverb_tickStereo     (tNReverb* const rev, float input, float* output);
-    
-    // Set reverb time in seconds.
-    void    tNReverb_setT60         (tNReverb* const, float t60);
-    
-    // Set mix between dry input and wet output signal.
-    void    tNReverb_setMix         (tNReverb* const, float mix);
-    
-    //==============================================================================
-    
-    typedef struct _tDattorroReverb
-    {
-        float   predelay;
-        float   input_filter;
-        float   feedback_filter;
-        float   feedback_gain;
-        float   mix;
-        uint32_t frozen;
-        
-        float   size, size_max, t;
-        
-        float   f1_delay_2_last,
-        f2_delay_2_last;
-        
-        float   f1_last,
-        f2_last;
-        
-        // INPUT
-        tTapeDelay  in_delay;
-        tOnePole    in_filter;
-        tAllpass    in_allpass[4];
-        
-        // FEEDBACK 1
-        tAllpass    f1_allpass;
-        tTapeDelay  f1_delay_1;
-        tOnePole    f1_filter;
-        tTapeDelay  f1_delay_2;
-        tTapeDelay  f1_delay_3;
-        tHighpass   f1_hp;
-        
-        tCycle      f1_lfo;
-        
-        // FEEDBACK 2
-        tAllpass    f2_allpass;
-        tTapeDelay  f2_delay_1;
-        tOnePole    f2_filter;
-        tTapeDelay  f2_delay_2;
-        tTapeDelay  f2_delay_3;
-        tHighpass   f2_hp;
-        
-        tCycle      f2_lfo;
-        
-    } _tDattorroReverb;
-    
-    typedef _tDattorroReverb* tDattorroReverb;
-    
-    void    tDattorroReverb_init              (tDattorroReverb* const);
-    void    tDattorroReverb_free              (tDattorroReverb* const);
-    void    tDattorroReverb_initToPool        (tDattorroReverb* const, tMempool* const);
-    void    tDattorroReverb_freeFromPool      (tDattorroReverb* const, tMempool* const);
-    
-    void    tDattorroReverb_clear             (tDattorroReverb* const);
-    float   tDattorroReverb_tick              (tDattorroReverb* const, float input);
-    void    tDattorroReverb_tickStereo        (tDattorroReverb* const rev, float input, float* output);
-    void    tDattorroReverb_setMix            (tDattorroReverb* const, float mix);
-    void    tDattorroReverb_setFreeze         (tDattorroReverb* const rev, uint32_t freeze);
-    void    tDattorroReverb_setHP             (tDattorroReverb* const, float freq);
-    void    tDattorroReverb_setSize           (tDattorroReverb* const, float size);
-    void    tDattorroReverb_setInputDelay     (tDattorroReverb* const, float preDelay);
-    void    tDattorroReverb_setInputFilter    (tDattorroReverb* const, float freq);
-    void    tDattorroReverb_setFeedbackFilter (tDattorroReverb* const, float freq);
-    void    tDattorroReverb_setFeedbackGain   (tDattorroReverb* const, float gain);
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // LEAF_REVERB_H_INCLUDED
-
-//==============================================================================
-
--- a/LEAF/Inc/leaf-sampling.h
+++ /dev/null
@@ -1,176 +1,0 @@
-/*==============================================================================
- 
- leaf-sampling.h
- Created: 23 Jan 2019 11:22:09am
- Author:  Mike Mulshine
- 
- ==============================================================================*/
-
-
-#ifndef LEAF_SAMPLING_H_INCLUDED
-#define LEAF_SAMPLING_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    //==============================================================================
-    
-#include "leaf-global.h"
-#include "leaf-math.h"
-#include "leaf-mempool.h"
-#include "leaf-envelopes.h"
-#include "leaf-mempool.h"
-#include "leaf-analysis.h"
-    
-    //==============================================================================
-    
-    typedef enum RecordMode
-    {
-        RecordOneShot = 0,
-        RecordLoop,
-        RecordModeNil
-    } RecordMode;
-    
-    typedef struct _tBuffer
-    {
-        float* buff;
-        
-        uint32_t idx;
-        uint32_t bufferLength;
-        uint32_t recordedLength;
-        RecordMode mode;
-        
-        int active;
-        
-    } _tBuffer;
-    
-    typedef _tBuffer* tBuffer;
-    
-    void  tBuffer_init                  (tBuffer* const, uint32_t length);
-    void  tBuffer_free                  (tBuffer* const);
-    void  tBuffer_initToPool            (tBuffer* const, uint32_t length, tMempool* const);
-    void  tBuffer_freeFromPool          (tBuffer* const, tMempool* const);
-    
-    void  tBuffer_tick                  (tBuffer* const, float sample);
-    
-    void  tBuffer_read                  (tBuffer* const, float* buff, uint32_t len);
-    
-    float tBuffer_get                   (tBuffer* const, int idx);
-    
-    void  tBuffer_record                (tBuffer* const);
-    void  tBuffer_stop                  (tBuffer* const);
-    int   tBuffer_getRecordPosition     (tBuffer* const);
-    
-    void  tBuffer_setRecordMode         (tBuffer* const, RecordMode mode);
-    
-    void  tBuffer_clear                 (tBuffer* const);
-    
-    uint32_t tBuffer_getBufferLength    (tBuffer* const);
-    uint32_t tBuffer_getRecordedLength  (tBuffer* const sb);
-    
-    //==============================================================================
-    
-    typedef enum PlayMode
-    {
-        PlayNormal,
-        PlayLoop,
-        PlayBackAndForth,
-        PlayModeNil
-    } PlayMode;
-    
-    typedef struct _tSampler
-    {
-        tBuffer samp;
-        
-        tRamp gain;
-        
-        float idx;
-        float inc;
-        float last;
-        float iinc;
-        int8_t dir;
-        int8_t flip;
-        int8_t bnf;
-        
-        int32_t start, targetstart;
-        int32_t end, targetend;
-
-        uint32_t len;
-        uint32_t cfxlen;
-        float numticks;
-        PlayMode mode;
-        int retrigger;
-        
-        int active;
-        
-    } _tSampler;
-    
-    typedef _tSampler* tSampler;
-    
-    void    tSampler_init               (tSampler* const, tBuffer* const);
-    void    tSampler_free               (tSampler* const);
-    void    tSampler_initToPool         (tSampler* const, tBuffer* const, tMempool* const);
-    void    tSampler_freeFromPool       (tSampler* const, tMempool* const);
-    
-    float   tSampler_tick               (tSampler* const);
-    
-    void    tSampler_setSample          (tSampler* const, tBuffer* const);
-    
-    void    tSampler_setMode            (tSampler* const, PlayMode mode);
-    
-    void    tSampler_play               (tSampler* const);
-    void    tSampler_stop               (tSampler* const);
-    
-    void    tSampler_setStart           (tSampler* const, int32_t start);
-    void    tSampler_setEnd             (tSampler* const, int32_t end);
-
-    static void handleStartEndChange    (tSampler* const sp);
-
-    void 	tSampler_setCrossfadeLength (tSampler* const sp, uint32_t length);
-    
-    void    tSampler_setRate            (tSampler* const, float rate);
-    
-    //==============================================================================
-    
-    typedef struct _tAutoSampler
-    {
-        tSampler sampler;
-        tEnvelopeFollower ef;
-        uint32_t windowSize;
-        float threshold;
-        float previousPower;
-        uint32_t sampleCounter;
-        uint32_t powerCounter;
-        uint8_t sampleTriggered;
-    } _tAutoSampler;
-    
-    typedef _tAutoSampler* tAutoSampler;
-    
-    void    tAutoSampler_init               (tAutoSampler* const, tBuffer* const);
-    void    tAutoSampler_free               (tAutoSampler* const);
-    void    tAutoSampler_initToPool         (tAutoSampler* const, tBuffer* const, tMempool* const);
-    void    tAutoSampler_freeFromPool       (tAutoSampler* const, tMempool* const);
-    
-    float   tAutoSampler_tick               (tAutoSampler* const, float input);
-    
-    void    tAutoSampler_setBuffer          (tAutoSampler* const, tBuffer* const);
-    
-    void    tAutoSampler_setMode            (tAutoSampler* const, PlayMode mode);
-    
-    void    tAutoSampler_play               (tAutoSampler* const);
-    void    tAutoSampler_stop               (tAutoSampler* const);
-    
-    void    tAutoSampler_setThreshold       (tAutoSampler* const, float thresh);
-    void    tAutoSampler_setWindowSize      (tAutoSampler* const, uint32_t size);
-    void    tAutoSampler_setCrossfadeLength (tAutoSampler* const, uint32_t length);
-    
-    void    tAutoSampler_setRate            (tAutoSampler* const, float rate);
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif // LEAF_SAMPLING_H_INCLUDED
-
-//==============================================================================
--- a/LEAF/Inc/leaf-tables.h
+++ /dev/null
@@ -1,100 +1,0 @@
-/*==============================================================================
-
-    leaf-tables.h
-    Created: 4 Dec 2016 9:42:41pm
-    Author:  Michael R Mulshine
-
-==============================================================================*/
-
-#ifndef LEAF_TABLES_H_INCLUDED
-#define LEAF_TABLES_H_INCLUDED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-//==============================================================================
-
-#include "leaf-math.h"
-
-//==============================================================================
-
-
-#define SINE_TABLE_SIZE 2048
-#define SAW_TABLE_SIZE 2048
-#define SQR_TABLE_SIZE 2048
-#define TRI_TABLE_SIZE 2048
-#define EXP_DECAY_TABLE_SIZE 65536
-#define ATTACK_DECAY_INC_TABLE_SIZE 65536
-#define TANH1_TABLE_SIZE 65536
-#define DECAY_COEFF_TABLE_SIZE 4096
-#define MTOF1_TABLE_SIZE 4096
-#define FILTERTAN_TABLE_SIZE 4096
-    
-#define SHAPER1_TABLE_SIZE 65536
-extern const float shaper1[SHAPER1_TABLE_SIZE];
-    
-#define COEFFS_SIZE 32
-extern const float* firCoeffs[COEFFS_SIZE];
-extern const float firNumTaps[COEFFS_SIZE];
-extern const float fir2XLow[32];
-extern const float fir4XLow[64];
-extern const float fir8XLow[64];
-extern const float fir16XLow[128];
-extern const float fir32XLow[256];
-extern const float fir64XLow[256];
-extern const float fir2XHigh[128];
-extern const float fir4XHigh[256];
-extern const float fir8XHigh[256];
-extern const float fir16XHigh[512];
-extern const float fir32XHigh[512];
-extern const float fir64XHigh[1024];
-
-typedef enum TableName
-{
-    T20 = 0,
-    T40,
-    T80,
-    T160,
-    T320,
-    T640,
-    T1280,
-    T2560,
-    T5120,
-    T10240,
-    T20480,
-    TableNameNil
-} TableName;
-
-// mtof lookup table based on input range [0.0,1.0) in 4096 increments - midi frequency values scaled between m25 and m134 (from the Snyderphonics DrumBox code)
-
-extern const float exp_decay[EXP_DECAY_TABLE_SIZE];
-extern const float attack_decay_inc[ATTACK_DECAY_INC_TABLE_SIZE];
-
-extern const float filtertan[FILTERTAN_TABLE_SIZE];
-
-extern const float mtof1[MTOF1_TABLE_SIZE];
-extern const float decayCoeffTable[DECAY_COEFF_TABLE_SIZE];
-
-extern const float tanh1[TANH1_TABLE_SIZE];
-
-//==============================================================================
-
-/* Sine wave table ripped from http://aquaticus.info/pwm-sine-wave. */
-extern const float sinewave[SINE_TABLE_SIZE];
-
-extern const float sawtooth[11][SAW_TABLE_SIZE];
-
-extern const float triangle[11][TRI_TABLE_SIZE];
-
-extern const float squarewave[11][SQR_TABLE_SIZE];
-
-//==============================================================================
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif  // LEAF_TABLES_H_INCLUDED
-
-//==============================================================================
--- /dev/null
+++ b/LEAF/Inc/main.h
@@ -1,0 +1,81 @@
+/* USER CODE BEGIN Header */
+/**
+  ******************************************************************************
+  * @file           : main.h
+  * @brief          : Header for main.c file.
+  *                   This file contains the common defines of the application.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __MAIN_H
+#define __MAIN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32h7xx_hal.h"
+#include "stm32h7xx_hal.h"
+
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* Exported types ------------------------------------------------------------*/
+/* USER CODE BEGIN ET */
+
+/* USER CODE END ET */
+
+/* Exported constants --------------------------------------------------------*/
+/* USER CODE BEGIN EC */
+
+/* USER CODE END EC */
+
+/* Exported macro ------------------------------------------------------------*/
+/* USER CODE BEGIN EM */
+#define __ATTR_RAM_D1	__attribute__ ((section(".RAM_D1"))) __attribute__ ((aligned (32)))
+#define __ATTR_RAM_D2	__attribute__ ((section(".RAM_D2"))) __attribute__ ((aligned (32)))
+#define __ATTR_RAM_D3	__attribute__ ((section(".RAM_D3"))) __attribute__ ((aligned (32)))
+#define __ATTR_SDRAM	__attribute__ ((section(".SDRAM"))) __attribute__ ((aligned (32)))
+
+#define STM32 // define this so that LEAF knows you are building for STM32
+/* USER CODE END EM */
+
+/* Exported functions prototypes ---------------------------------------------*/
+void Error_Handler(void);
+
+/* USER CODE BEGIN EFP */
+float randomNumber(void);
+static void HardFault_Handler(void) __attribute__ ((naked));
+void prvGetRegistersFromStack( uint32_t *pulFaultStackAddress );
+void writeIntToFlash(uint32_t data, uint32_t location);
+uint32_t readIntFromFlash (uint32_t location);
+/* USER CODE END EFP */
+
+/* Private defines -----------------------------------------------------------*/
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MAIN_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/oled.h
@@ -1,0 +1,90 @@
+/*
+ * oled.h
+ *
+ *  Created on: Feb 05, 2020
+ *      Author: Matthew Wang
+ */
+
+#ifndef OLED_H_
+#define OLED_H_
+
+extern char oled_buffer[32];
+
+typedef enum _OLEDLine
+{
+	FirstLine = 0,
+	SecondLine,
+	BothLines,
+	NilLine
+} OLEDLine;
+
+void OLED_init(I2C_HandleTypeDef* hi2c);
+
+void initUIFunctionPointers(void);
+
+void setLED_Edit(uint8_t onOff);
+
+void setLED_USB(uint8_t onOff);
+
+void setLED_1(uint8_t onOff);
+
+void setLED_2(uint8_t onOff);
+
+void setLED_A(uint8_t onOff);
+
+void setLED_B(uint8_t onOff);
+
+void setLED_C(uint8_t onOff);
+
+void setLED_leftout_clip(uint8_t onOff);
+
+void setLED_rightout_clip(uint8_t onOff);
+
+void setLED_leftin_clip(uint8_t onOff);
+
+void setLED_rightin_clip(uint8_t onOff);
+
+int getCursorX(void);
+
+void OLED_process(void);
+
+void OLED_writePreset(void);
+
+void OLED_writeEditScreen(void);
+
+void OLED_writeKnobParameter(uint8_t whichParam);
+
+void OLED_writeButtonAction(uint8_t whichButton, uint8_t whichAction);
+
+void OLED_writeTuning(void);
+
+void OLED_draw(void);
+
+void OLEDclear(void);
+
+void OLEDclearLine(OLEDLine line);
+
+void OLEDwriteString(char* myCharArray, uint8_t arrayLength, uint8_t startCursor, OLEDLine line);
+
+void OLEDwriteLine(char* myCharArray, uint8_t arrayLength, OLEDLine line);
+
+void OLEDwriteInt(uint32_t myNumber, uint8_t numDigits, uint8_t startCursor, OLEDLine line);
+
+void OLEDwriteIntLine(uint32_t myNumber, uint8_t numDigits, OLEDLine line);
+
+void OLEDwritePitch(float midi, uint8_t startCursor, OLEDLine line);
+
+void OLEDwritePitchClass(float midi, uint8_t startCursor, OLEDLine line);
+
+void OLEDwritePitchLine(float midi, OLEDLine line);
+
+void OLEDwriteFixedFloat(float input, uint8_t numDigits, uint8_t numDecimal, uint8_t startCursor, OLEDLine line);
+
+void OLEDwriteFixedFloatLine(float input, uint8_t numDigits, uint8_t numDecimal, OLEDLine line);
+
+void OLEDwriteFloat(float input, uint8_t startCursor, OLEDLine line);
+
+void OLEDdrawFloatArray(float* input, float min, float max, uint8_t size, uint8_t offset, uint8_t startCursor, OLEDLine line);
+
+#endif /* OLED_H_ */
+
--- /dev/null
+++ b/LEAF/Inc/rng.h
@@ -1,0 +1,58 @@
+/**
+  ******************************************************************************
+  * File Name          : RNG.h
+  * Description        : This file provides code for the configuration
+  *                      of the RNG instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __rng_H
+#define __rng_H
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+extern RNG_HandleTypeDef hrng;
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_RNG_Init(void);
+
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__ rng_H */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/sai.h
@@ -1,0 +1,59 @@
+/**
+  ******************************************************************************
+  * File Name          : SAI.h
+  * Description        : This file provides code for the configuration
+  *                      of the SAI instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __sai_H
+#define __sai_H
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+extern SAI_HandleTypeDef hsai_BlockA1;
+extern SAI_HandleTypeDef hsai_BlockB1;
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_SAI1_Init(void);
+
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__ sai_H */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/sd_diskio.h
@@ -1,0 +1,45 @@
+/* USER CODE BEGIN Header */
+/**
+  ******************************************************************************
+  * @file    sd_diskio.h
+  * @brief   Header for sd_diskio.c module
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* USER CODE END Header */
+
+/* Note: code generation based on sd_diskio_template.h */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __SD_DISKIO_H
+#define __SD_DISKIO_H
+
+/* USER CODE BEGIN firstSection */ 
+/* can be used to modify / undefine following code or add new definitions */
+/* USER CODE END firstSection */
+
+/* Includes ------------------------------------------------------------------*/
+#include "bsp_driver_sd.h"
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+extern const Diskio_drvTypeDef  SD_Driver;
+
+/* USER CODE BEGIN lastSection */ 
+/* can be used to modify / undefine previous code or add new definitions */
+/* USER CODE END lastSection */
+
+#endif /* __SD_DISKIO_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
--- /dev/null
+++ b/LEAF/Inc/sdmmc.h
@@ -1,0 +1,58 @@
+/**
+  ******************************************************************************
+  * File Name          : SDMMC.h
+  * Description        : This file provides code for the configuration
+  *                      of the SDMMC instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __sdmmc_H
+#define __sdmmc_H
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+extern SD_HandleTypeDef hsd1;
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_SDMMC1_SD_Init(void);
+
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__ sdmmc_H */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/sfx.h
@@ -1,0 +1,177 @@
+/*
+ * sfx.h
+ *
+ *  Created on: Dec 23, 2019
+ *      Author: josnyder
+ */
+#ifndef SFX_H_
+#define SFX_H_
+
+#include "audiostream.h"
+#include "ui.h"
+
+#define NUM_VOC_VOICES 8
+#define NUM_OSC_PER_VOICE 3
+#define NUM_VOC_OSC 1
+#define INV_NUM_VOC_VOICES 0.125
+#define INV_NUM_VOC_OSC 1
+#define NUM_AUTOTUNE 2
+#define NUM_RETUNE 1
+#define OVERSAMPLER_RATIO 8
+#define OVERSAMPLER_HQ FALSE
+
+extern float presetKnobValues[PresetNil][NUM_ADC_CHANNELS];
+extern uint8_t knobActive[NUM_ADC_CHANNELS];
+
+extern tPoly poly;
+extern tRamp polyRamp[NUM_VOC_VOICES];
+extern tSawtooth osc[NUM_VOC_VOICES * NUM_OSC_PER_VOICE];
+
+extern PlayMode samplerMode;
+extern float sampleLength;
+
+extern uint32_t freeze;
+
+void initGlobalSFXObjects();
+
+//1 vocoder internal poly
+extern uint8_t numVoices;
+extern uint8_t internalExternal;
+
+void SFXVocoderAlloc();
+void SFXVocoderFrame();
+void SFXVocoderTick(float audioIn);
+void SFXVocoderFree(void);
+
+//4 pitch shift
+void SFXPitchShiftAlloc();
+void SFXPitchShiftFrame();
+void SFXPitchShiftTick(float audioIn);
+void SFXPitchShiftFree(void);
+
+//5 neartune
+extern uint8_t autotuneChromatic;
+
+void SFXNeartuneAlloc();
+void SFXNeartuneFrame();
+void SFXNeartuneTick(float audioIn);
+void SFXNeartuneFree(void);
+
+//6 autotune
+void SFXAutotuneAlloc();
+void SFXAutotuneFrame();
+void SFXAutotuneTick(float audioIn);
+void SFXAutotuneFree(void);
+
+//7 sampler - button press
+extern uint8_t samplePlaying;
+
+void SFXSamplerBPAlloc();
+void SFXSamplerBPFrame();
+void SFXSamplerBPTick(float audioIn);
+void SFXSamplerBPFree(void);
+
+
+//8 sampler - auto ch1
+extern uint8_t triggerChannel;
+
+void SFXSamplerAutoAlloc();
+void SFXSamplerAutoFrame();
+void SFXSamplerAutoTick(float audioIn);
+void SFXSamplerAutoFree(void);
+
+//10 distortion tanh
+extern uint8_t distortionMode;
+
+void SFXDistortionAlloc();
+void SFXDistortionFrame();
+void SFXDistortionTick(float audioIn);
+void SFXDistortionFree(void);
+
+//12 distortion wave folder
+void SFXWaveFolderAlloc();
+void SFXWaveFolderFrame();
+void SFXWaveFolderTick(float audioIn);
+void SFXWaveFolderFree(void);
+
+
+//13 bitcrusher
+void SFXBitcrusherAlloc();
+void SFXBitcrusherFrame();
+void SFXBitcrusherTick(float audioIn);
+void SFXBitcrusherFree(void);
+
+
+//14 delay
+extern int delayShaper;
+
+void SFXDelayAlloc();
+void SFXDelayFrame();
+void SFXDelayTick(float audioIn);
+void SFXDelayFree(void);
+
+
+//15 reverb
+void SFXReverbAlloc();
+void SFXReverbFrame();
+void SFXReverbTick(float audioIn);
+void SFXReverbFree(void);
+
+//16 reverb2
+void SFXReverb2Alloc();
+void SFXReverb2Frame();
+void SFXReverb2Tick(float audioIn);
+void SFXReverb2Free(void);
+
+//17 living string
+void SFXLivingStringAlloc();
+void SFXLivingStringFrame();
+void SFXLivingStringTick(float audioIn);
+void SFXLivingStringFree(void);
+
+//17 living string
+void SFXLivingStringSynthAlloc();
+void SFXLivingStringSynthFrame();
+void SFXLivingStringSynthTick(float audioIn);
+void SFXLivingStringSynthFree(void);
+
+
+//17 living string
+void SFXClassicSynthAlloc();
+void SFXClassicSynthFrame();
+void SFXClassicSynthTick(float audioIn);
+void SFXClassicSynthFree(void);
+
+
+//17 living string
+void SFXRhodesAlloc();
+void SFXRhodesFrame();
+void SFXRhodesTick(float audioIn);
+void SFXRhodesFree(void);
+
+
+// MIDI FUNCTIONS
+void noteOn(int key, int velocity);
+void noteOff(int key, int velocity);
+void pitchBend(int data);
+void sustainOn(void);
+void sustainOff(void);
+void toggleBypass(void);
+void toggleSustain(void);
+
+void calculateFreq(int voice);
+
+float calculateTunedMidiNote(float tempNote);
+
+
+void calculateNoteArray(void);
+//void calculatePeriodArray(void);
+float nearestNote(float period);
+//float nearestPeriod(float period);
+
+void clearNotes(void);
+
+void ctrlInput(int ctrl, int value);
+
+
+#endif /* SFX_H_ */
--- /dev/null
+++ b/LEAF/Inc/ssd1306.h
@@ -1,0 +1,127 @@
+
+/*
+ * ssd1306.h
+ *
+ *  Created on: Jul 6, 2018
+ *      Author: jeffsnyder
+ */
+#include "stm32h7xx_hal.h"
+#include "main.h"
+
+#ifndef SSD1306_H_
+#define SSD1306_H_
+
+#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
+
+#define BLACK 0
+#define WHITE 1
+#define INVERSE 2
+
+#define SSD1306_I2C_ADDRESS   (0x3C<<1)  // 011110+SA0+RW - 0x3C or 0x3D
+// Address for 128x32 is 0x3C
+// Address for 128x64 is 0x3D (default) or 0x3C (if SA0 is grounded)
+
+/*=========================================================================
+    SSD1306 Displays
+    -----------------------------------------------------------------------
+    The driver is used in multiple displays (128x64, 128x32, etc.).
+    Select the appropriate display below to create an appropriately
+    sized framebuffer, etc.
+
+    SSD1306_128_64  128x64 pixel display
+
+    SSD1306_128_32  128x32 pixel display
+
+    SSD1306_96_16
+
+    -----------------------------------------------------------------------*/
+//   #define SSD1306_128_64
+   #define SSD1306_128_32
+//   #define SSD1306_96_16
+/*=========================================================================*/
+
+#if defined SSD1306_128_64 && defined SSD1306_128_32
+  #error "Only one SSD1306 display can be specified at once in SSD1306.h"
+#endif
+#if !defined SSD1306_128_64 && !defined SSD1306_128_32 && !defined SSD1306_96_16
+  #error "At least one SSD1306 display must be specified in SSD1306.h"
+#endif
+
+#if defined SSD1306_128_64
+  #define SSD1306_LCDWIDTH                  128
+  #define SSD1306_LCDHEIGHT                 64
+#endif
+#if defined SSD1306_128_32
+  #define SSD1306_LCDWIDTH                  128
+  #define SSD1306_LCDHEIGHT                 32
+#endif
+#if defined SSD1306_96_16
+  #define SSD1306_LCDWIDTH                  96
+  #define SSD1306_LCDHEIGHT                 16
+#endif
+
+#define SSD1306_SETCONTRAST 0x81
+#define SSD1306_DISPLAYALLON_RESUME 0xA4
+#define SSD1306_DISPLAYALLON 0xA5
+#define SSD1306_NORMALDISPLAY 0xA6
+#define SSD1306_INVERTDISPLAY 0xA7
+#define SSD1306_DISPLAYOFF 0xAE
+#define SSD1306_DISPLAYON 0xAF
+
+#define SSD1306_SETDISPLAYOFFSET 0xD3
+#define SSD1306_SETCOMPINS 0xDA
+
+#define SSD1306_SETVCOMDETECT 0xDB
+
+#define SSD1306_SETDISPLAYCLOCKDIV 0xD5
+#define SSD1306_SETPRECHARGE 0xD9
+
+#define SSD1306_SETMULTIPLEX 0xA8
+
+#define SSD1306_SETLOWCOLUMN 0x00
+#define SSD1306_SETHIGHCOLUMN 0x10
+
+#define SSD1306_SETSTARTLINE 0x40
+
+#define SSD1306_MEMORYMODE 0x20
+#define SSD1306_COLUMNADDR 0x21
+#define SSD1306_PAGEADDR   0x22
+
+#define SSD1306_COMSCANINC 0xC0
+#define SSD1306_COMSCANDEC 0xC8
+
+#define SSD1306_SEGREMAP 0xA0
+
+#define SSD1306_CHARGEPUMP 0x8D
+
+#define SSD1306_EXTERNALVCC 0x1
+#define SSD1306_SWITCHCAPVCC 0x2
+
+// Scrolling #defines
+#define SSD1306_ACTIVATE_SCROLL 0x2F
+#define SSD1306_DEACTIVATE_SCROLL 0x2E
+#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3
+#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26
+#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27
+#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29
+#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A
+
+extern unsigned char buffer [];
+
+void ssd1306_begin(I2C_HandleTypeDef* hi2c, uint8_t vccstate, uint8_t i2caddr);
+void ssd1306_drawPixel(int16_t x, int16_t y, uint16_t color);
+void sdd1306_invertDisplay(uint8_t i);
+void ssd1306_command(uint8_t c);
+void ssd1306_dim(uint8_t dim);
+void ssd1306_display_full_buffer(void);
+void ssd1306_display(void);
+void ssd1306_write(uint8_t* data, uint16_t numBytes);
+void ssd1306_move(uint8_t row, uint8_t column);
+void ssd1306_move_raw(uint8_t row, uint8_t column);
+void ssd1306_home(void);
+
+
+
+
+
+#endif /* SSD1306_H_ */
--- /dev/null
+++ b/LEAF/Inc/stm32h7xx_hal_conf.h
@@ -1,0 +1,493 @@
+/**
+  ******************************************************************************
+  * @file    stm32h7xx_hal_conf.h
+  * @author  MCD Application Team
+  * @brief   HAL configuration file.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under BSD 3-Clause license,
+  * the "License"; You may not use this file except in compliance with the
+  * License. You may obtain a copy of the License at:
+  *                        opensource.org/licenses/BSD-3-Clause
+  *
+  ******************************************************************************
+  */ 
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32H7xx_HAL_CONF_H
+#define __STM32H7xx_HAL_CONF_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+
+/* ########################## Module Selection ############################## */
+/**
+  * @brief This is the list of modules to be used in the HAL driver 
+  */
+#define HAL_MODULE_ENABLED  
+
+  #define HAL_ADC_MODULE_ENABLED
+/* #define HAL_FDCAN_MODULE_ENABLED   */
+/* #define HAL_CEC_MODULE_ENABLED   */
+/* #define HAL_COMP_MODULE_ENABLED   */
+/* #define HAL_CRC_MODULE_ENABLED   */
+/* #define HAL_CRYP_MODULE_ENABLED   */
+/* #define HAL_DAC_MODULE_ENABLED   */
+/* #define HAL_DCMI_MODULE_ENABLED   */
+/* #define HAL_DMA2D_MODULE_ENABLED   */
+/* #define HAL_ETH_MODULE_ENABLED   */
+/* #define HAL_NAND_MODULE_ENABLED   */
+/* #define HAL_NOR_MODULE_ENABLED   */
+/* #define HAL_OTFDEC_MODULE_ENABLED   */
+/* #define HAL_SRAM_MODULE_ENABLED   */
+#define HAL_SDRAM_MODULE_ENABLED
+/* #define HAL_HASH_MODULE_ENABLED   */
+/* #define HAL_HRTIM_MODULE_ENABLED   */
+/* #define HAL_HSEM_MODULE_ENABLED   */
+/* #define HAL_GFXMMU_MODULE_ENABLED   */
+/* #define HAL_JPEG_MODULE_ENABLED   */
+/* #define HAL_OPAMP_MODULE_ENABLED   */
+/* #define HAL_OSPI_MODULE_ENABLED   */
+/* #define HAL_OSPI_MODULE_ENABLED   */
+/* #define HAL_I2S_MODULE_ENABLED   */
+/* #define HAL_SMBUS_MODULE_ENABLED   */
+/* #define HAL_IWDG_MODULE_ENABLED   */
+/* #define HAL_LPTIM_MODULE_ENABLED   */
+/* #define HAL_LTDC_MODULE_ENABLED   */
+/* #define HAL_QSPI_MODULE_ENABLED   */
+#define HAL_RNG_MODULE_ENABLED
+/* #define HAL_RTC_MODULE_ENABLED   */
+#define HAL_SAI_MODULE_ENABLED
+#define HAL_SD_MODULE_ENABLED
+/* #define HAL_MMC_MODULE_ENABLED   */
+/* #define HAL_SPDIFRX_MODULE_ENABLED   */
+/* #define HAL_SPI_MODULE_ENABLED   */
+/* #define HAL_SWPMI_MODULE_ENABLED   */
+#define HAL_TIM_MODULE_ENABLED
+/* #define HAL_UART_MODULE_ENABLED   */
+/* #define HAL_USART_MODULE_ENABLED   */
+/* #define HAL_IRDA_MODULE_ENABLED   */
+/* #define HAL_SMARTCARD_MODULE_ENABLED   */
+/* #define HAL_WWDG_MODULE_ENABLED   */
+/* #define HAL_PCD_MODULE_ENABLED   */
+#define HAL_HCD_MODULE_ENABLED
+/* #define HAL_DFSDM_MODULE_ENABLED   */
+/* #define HAL_DSI_MODULE_ENABLED   */
+/* #define HAL_JPEG_MODULE_ENABLED   */
+/* #define HAL_MDIOS_MODULE_ENABLED   */
+/* #define HAL_PSSI_MODULE_ENABLED   */
+/* #define HAL_DTS_MODULE_ENABLED   */
+#define HAL_GPIO_MODULE_ENABLED
+#define HAL_DMA_MODULE_ENABLED
+#define HAL_MDMA_MODULE_ENABLED
+#define HAL_RCC_MODULE_ENABLED
+#define HAL_FLASH_MODULE_ENABLED
+#define HAL_EXTI_MODULE_ENABLED
+#define HAL_PWR_MODULE_ENABLED
+#define HAL_I2C_MODULE_ENABLED
+#define HAL_CORTEX_MODULE_ENABLED
+#define HAL_HSEM_MODULE_ENABLED
+
+/* ########################## Oscillator Values adaptation ####################*/
+/**
+  * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
+  *        This value is used by the RCC HAL module to compute the system frequency
+  *        (when HSE is used as system clock source, directly or through the PLL).  
+  */
+#if !defined  (HSE_VALUE) 
+#define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz : FPGA case fixed to 60MHZ */
+#endif /* HSE_VALUE */
+
+#if !defined  (HSE_STARTUP_TIMEOUT)
+  #define HSE_STARTUP_TIMEOUT    ((uint32_t)100U)   /*!< Time out for HSE start up, in ms */
+#endif /* HSE_STARTUP_TIMEOUT */
+
+/**
+  * @brief Internal  oscillator (CSI) default value.
+  *        This value is the default CSI value after Reset.
+  */
+#if !defined  (CSI_VALUE)
+  #define CSI_VALUE    ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* CSI_VALUE */
+   
+/**
+  * @brief Internal High Speed oscillator (HSI) value.
+  *        This value is used by the RCC HAL module to compute the system frequency
+  *        (when HSI is used as system clock source, directly or through the PLL). 
+  */
+#if !defined  (HSI_VALUE)
+  #define HSI_VALUE    ((uint32_t)64000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+  * @brief External Low Speed oscillator (LSE) value.
+  *        This value is used by the UART, RTC HAL module to compute the system frequency
+  */
+#if !defined  (LSE_VALUE)
+  #define LSE_VALUE    ((uint32_t)32768U) /*!< Value of the External oscillator in Hz*/
+#endif /* LSE_VALUE */
+
+#if !defined  (LSE_STARTUP_TIMEOUT)
+  #define LSE_STARTUP_TIMEOUT    ((uint32_t)5000U)   /*!< Time out for LSE start up, in ms */
+#endif /* LSE_STARTUP_TIMEOUT */
+
+/**
+  * @brief External clock source for I2S peripheral
+  *        This value is used by the I2S HAL module to compute the I2S clock source 
+  *        frequency, this source is inserted directly through I2S_CKIN pad. 
+  */
+#if !defined  (EXTERNAL_CLOCK_VALUE)
+  #define EXTERNAL_CLOCK_VALUE    12288000U /*!< Value of the External clock in Hz*/
+#endif /* EXTERNAL_CLOCK_VALUE */
+
+/* Tip: To avoid modifying this file each time you need to use different HSE,
+   ===  you can define the HSE value in your toolchain compiler preprocessor. */
+
+/* ########################### System Configuration ######################### */
+/**
+  * @brief This is the HAL system configuration section
+  */     
+#define  VDD_VALUE                    ((uint32_t)3300U) /*!< Value of VDD in mv */
+#define  TICK_INT_PRIORITY            ((uint32_t)0U) /*!< tick interrupt priority */
+#define  USE_RTOS                     0U
+#define  USE_SD_TRANSCEIVER           1U               /*!< use uSD Transceiver */
+
+#define  USE_HAL_ADC_REGISTER_CALLBACKS     0U /* ADC register callback disabled     */
+#define  USE_HAL_CEC_REGISTER_CALLBACKS     0U /* CEC register callback disabled     */
+#define  USE_HAL_COMP_REGISTER_CALLBACKS    0U /* COMP register callback disabled    */
+#define  USE_HAL_CRYP_REGISTER_CALLBACKS    0U /* CRYP register callback disabled    */
+#define  USE_HAL_DAC_REGISTER_CALLBACKS     0U /* DAC register callback disabled     */
+#define  USE_HAL_DCMI_REGISTER_CALLBACKS    0U /* DCMI register callback disabled    */
+#define  USE_HAL_DFSDM_REGISTER_CALLBACKS   0U /* DFSDM register callback disabled   */
+#define  USE_HAL_DMA2D_REGISTER_CALLBACKS   0U /* DMA2D register callback disabled   */
+#define  USE_HAL_DSI_REGISTER_CALLBACKS     0U /* DSI register callback disabled     */
+#define  USE_HAL_DTS_REGISTER_CALLBACKS     0U /* DTS register callback disabled     */
+#define  USE_HAL_ETH_REGISTER_CALLBACKS     0U /* ETH register callback disabled     */
+#define  USE_HAL_FDCAN_REGISTER_CALLBACKS   0U /* FDCAN register callback disabled   */
+#define  USE_HAL_NAND_REGISTER_CALLBACKS    0U /* NAND register callback disabled    */
+#define  USE_HAL_NOR_REGISTER_CALLBACKS     0U /* NOR register callback disabled     */
+#define  USE_HAL_SDRAM_REGISTER_CALLBACKS   0U /* SDRAM register callback disabled   */
+#define  USE_HAL_SRAM_REGISTER_CALLBACKS    0U /* SRAM register callback disabled    */
+#define  USE_HAL_HASH_REGISTER_CALLBACKS    0U /* HASH register callback disabled    */
+#define  USE_HAL_HCD_REGISTER_CALLBACKS     0U /* HCD register callback disabled     */
+#define  USE_HAL_GFXMMU_REGISTER_CALLBACKS  0U /* GFXMMU register callback disabled  */
+#define  USE_HAL_HRTIM_REGISTER_CALLBACKS   0U /* HRTIM register callback disabled   */
+#define  USE_HAL_I2C_REGISTER_CALLBACKS     0U /* I2C register callback disabled     */
+#define  USE_HAL_I2S_REGISTER_CALLBACKS     0U /* I2S register callback disabled     */
+#define  USE_HAL_IRDA_REGISTER_CALLBACKS    0U /* IRDA register callback disabled    */
+#define  USE_HAL_JPEG_REGISTER_CALLBACKS    0U /* JPEG register callback disabled    */
+#define  USE_HAL_LPTIM_REGISTER_CALLBACKS   0U /* LPTIM register callback disabled   */
+#define  USE_HAL_LTDC_REGISTER_CALLBACKS    0U /* LTDC register callback disabled    */
+#define  USE_HAL_MDIOS_REGISTER_CALLBACKS   0U /* MDIO register callback disabled    */
+#define  USE_HAL_MMC_REGISTER_CALLBACKS     0U /* MMC register callback disabled     */
+#define  USE_HAL_OPAMP_REGISTER_CALLBACKS   0U /* MDIO register callback disabled    */
+#define  USE_HAL_OSPI_REGISTER_CALLBACKS    0U /* OSPI register callback disabled    */
+#define  USE_HAL_OTFDEC_REGISTER_CALLBACKS  0U /* OTFDEC register callback disabled  */
+#define  USE_HAL_PCD_REGISTER_CALLBACKS     0U /* PCD register callback disabled     */
+#define  USE_HAL_QSPI_REGISTER_CALLBACKS    0U /* QSPI register callback disabled    */
+#define  USE_HAL_RNG_REGISTER_CALLBACKS     0U /* RNG register callback disabled     */
+#define  USE_HAL_RTC_REGISTER_CALLBACKS     0U /* RTC register callback disabled     */
+#define  USE_HAL_SAI_REGISTER_CALLBACKS     0U /* SAI register callback disabled     */
+#define  USE_HAL_SD_REGISTER_CALLBACKS      0U /* SD register callback disabled      */
+#define  USE_HAL_SMARTCARD_REGISTER_CALLBACKS  0U /* SMARTCARD register callback disabled */
+#define  USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */
+#define  USE_HAL_SMBUS_REGISTER_CALLBACKS   0U /* SMBUS register callback disabled   */
+#define  USE_HAL_SPI_REGISTER_CALLBACKS     0U /* SPI register callback disabled     */
+#define  USE_HAL_SWPMI_REGISTER_CALLBACKS   0U /* SWPMI register callback disabled   */
+#define  USE_HAL_TIM_REGISTER_CALLBACKS     0U /* TIM register callback disabled     */
+#define  USE_HAL_UART_REGISTER_CALLBACKS    0U /* UART register callback disabled    */
+#define  USE_HAL_USART_REGISTER_CALLBACKS   0U /* USART register callback disabled   */
+#define  USE_HAL_WWDG_REGISTER_CALLBACKS    0U /* WWDG register callback disabled    */
+
+/* ########################### Ethernet Configuration ######################### */
+#define ETH_TX_DESC_CNT         4  /* number of Ethernet Tx DMA descriptors */
+#define ETH_RX_DESC_CNT         4  /* number of Ethernet Rx DMA descriptors */
+
+#define ETH_MAC_ADDR0    ((uint8_t)0x02)
+#define ETH_MAC_ADDR1    ((uint8_t)0x00)
+#define ETH_MAC_ADDR2    ((uint8_t)0x00)
+#define ETH_MAC_ADDR3    ((uint8_t)0x00)
+#define ETH_MAC_ADDR4    ((uint8_t)0x00)
+#define ETH_MAC_ADDR5    ((uint8_t)0x00)
+
+/* ########################## Assert Selection ############################## */
+/**
+  * @brief Uncomment the line below to expanse the "assert_param" macro in the 
+  *        HAL drivers code
+  */
+/* #define USE_FULL_ASSERT    1U */ 
+
+/* Includes ------------------------------------------------------------------*/
+/**
+  * @brief Include module's header file 
+  */
+
+#ifdef HAL_RCC_MODULE_ENABLED
+  #include "stm32h7xx_hal_rcc.h"
+#endif /* HAL_RCC_MODULE_ENABLED */
+
+#ifdef HAL_GPIO_MODULE_ENABLED
+  #include "stm32h7xx_hal_gpio.h"
+#endif /* HAL_GPIO_MODULE_ENABLED */
+
+#ifdef HAL_DMA_MODULE_ENABLED
+  #include "stm32h7xx_hal_dma.h"
+#endif /* HAL_DMA_MODULE_ENABLED */
+
+#ifdef HAL_MDMA_MODULE_ENABLED
+ #include "stm32h7xx_hal_mdma.h"
+#endif /* HAL_MDMA_MODULE_ENABLED */
+
+#ifdef HAL_HASH_MODULE_ENABLED
+  #include "stm32h7xx_hal_hash.h"
+#endif /* HAL_HASH_MODULE_ENABLED */
+
+#ifdef HAL_DCMI_MODULE_ENABLED
+  #include "stm32h7xx_hal_dcmi.h"
+#endif /* HAL_DCMI_MODULE_ENABLED */
+
+#ifdef HAL_DMA2D_MODULE_ENABLED
+  #include "stm32h7xx_hal_dma2d.h"
+#endif /* HAL_DMA2D_MODULE_ENABLED */
+
+#ifdef HAL_DSI_MODULE_ENABLED
+  #include "stm32h7xx_hal_dsi.h"
+#endif /* HAL_DSI_MODULE_ENABLED */
+
+#ifdef HAL_DFSDM_MODULE_ENABLED
+  #include "stm32h7xx_hal_dfsdm.h"
+#endif /* HAL_DFSDM_MODULE_ENABLED */
+
+#ifdef HAL_ETH_MODULE_ENABLED
+  #include "stm32h7xx_hal_eth.h"
+#endif /* HAL_ETH_MODULE_ENABLED */
+
+#ifdef HAL_EXTI_MODULE_ENABLED
+  #include "stm32h7xx_hal_exti.h"
+#endif /* HAL_EXTI_MODULE_ENABLED */
+
+#ifdef HAL_CORTEX_MODULE_ENABLED
+  #include "stm32h7xx_hal_cortex.h"
+#endif /* HAL_CORTEX_MODULE_ENABLED */
+
+#ifdef HAL_ADC_MODULE_ENABLED
+  #include "stm32h7xx_hal_adc.h"
+#endif /* HAL_ADC_MODULE_ENABLED */
+
+#ifdef HAL_FDCAN_MODULE_ENABLED
+  #include "stm32h7xx_hal_fdcan.h"
+#endif /* HAL_FDCAN_MODULE_ENABLED */
+
+#ifdef HAL_CEC_MODULE_ENABLED
+  #include "stm32h7xx_hal_cec.h"
+#endif /* HAL_CEC_MODULE_ENABLED */
+
+#ifdef HAL_COMP_MODULE_ENABLED
+  #include "stm32h7xx_hal_comp.h"
+#endif /* HAL_COMP_MODULE_ENABLED */
+
+#ifdef HAL_CRC_MODULE_ENABLED
+  #include "stm32h7xx_hal_crc.h"
+#endif /* HAL_CRC_MODULE_ENABLED */
+
+#ifdef HAL_CRYP_MODULE_ENABLED
+  #include "stm32h7xx_hal_cryp.h"
+#endif /* HAL_CRYP_MODULE_ENABLED */
+
+#ifdef HAL_DAC_MODULE_ENABLED
+  #include "stm32h7xx_hal_dac.h"
+#endif /* HAL_DAC_MODULE_ENABLED */
+
+#ifdef HAL_FLASH_MODULE_ENABLED
+  #include "stm32h7xx_hal_flash.h"
+#endif /* HAL_FLASH_MODULE_ENABLED */
+
+#ifdef HAL_GFXMMU_MODULE_ENABLED
+  #include "stm32h7xx_hal_gfxmmu.h"
+#endif /* HAL_GFXMMU_MODULE_ENABLED */
+
+#ifdef HAL_HRTIM_MODULE_ENABLED
+  #include "stm32h7xx_hal_hrtim.h"
+#endif /* HAL_HRTIM_MODULE_ENABLED */
+
+#ifdef HAL_HSEM_MODULE_ENABLED
+  #include "stm32h7xx_hal_hsem.h"
+#endif /* HAL_HSEM_MODULE_ENABLED */
+
+#ifdef HAL_SRAM_MODULE_ENABLED
+  #include "stm32h7xx_hal_sram.h"
+#endif /* HAL_SRAM_MODULE_ENABLED */
+
+#ifdef HAL_NOR_MODULE_ENABLED
+  #include "stm32h7xx_hal_nor.h"
+#endif /* HAL_NOR_MODULE_ENABLED */
+
+#ifdef HAL_NAND_MODULE_ENABLED
+  #include "stm32h7xx_hal_nand.h"
+#endif /* HAL_NAND_MODULE_ENABLED */
+
+#ifdef HAL_I2C_MODULE_ENABLED
+ #include "stm32h7xx_hal_i2c.h"
+#endif /* HAL_I2C_MODULE_ENABLED */
+
+#ifdef HAL_I2S_MODULE_ENABLED
+ #include "stm32h7xx_hal_i2s.h"
+#endif /* HAL_I2S_MODULE_ENABLED */
+
+#ifdef HAL_IWDG_MODULE_ENABLED
+ #include "stm32h7xx_hal_iwdg.h"
+#endif /* HAL_IWDG_MODULE_ENABLED */
+
+#ifdef HAL_JPEG_MODULE_ENABLED
+ #include "stm32h7xx_hal_jpeg.h"
+#endif /* HAL_JPEG_MODULE_ENABLED */
+
+#ifdef HAL_MDIOS_MODULE_ENABLED
+ #include "stm32h7xx_hal_mdios.h"
+#endif /* HAL_MDIOS_MODULE_ENABLED */
+
+#ifdef HAL_MMC_MODULE_ENABLED
+ #include "stm32h7xx_hal_mmc.h"
+#endif /* HAL_MMC_MODULE_ENABLED */
+
+#ifdef HAL_LPTIM_MODULE_ENABLED
+#include "stm32h7xx_hal_lptim.h"
+#endif /* HAL_LPTIM_MODULE_ENABLED */
+
+#ifdef HAL_LTDC_MODULE_ENABLED
+#include "stm32h7xx_hal_ltdc.h"
+#endif /* HAL_LTDC_MODULE_ENABLED */
+
+#ifdef HAL_OPAMP_MODULE_ENABLED
+#include "stm32h7xx_hal_opamp.h"
+#endif /* HAL_OPAMP_MODULE_ENABLED */
+
+#ifdef HAL_OSPI_MODULE_ENABLED
+  #include "stm32h7xx_hal_ospi.h"
+#endif /* HAL_OSPI_MODULE_ENABLED */
+   
+#ifdef HAL_OTFDEC_MODULE_ENABLED
+#include "stm32h7xx_hal_otfdec.h"
+#endif /* HAL_OTFDEC_MODULE_ENABLED */
+
+#ifdef HAL_PWR_MODULE_ENABLED
+ #include "stm32h7xx_hal_pwr.h"
+#endif /* HAL_PWR_MODULE_ENABLED */
+
+#ifdef HAL_QSPI_MODULE_ENABLED
+ #include "stm32h7xx_hal_qspi.h"
+#endif /* HAL_QSPI_MODULE_ENABLED */
+
+#ifdef HAL_RAMECC_MODULE_ENABLED
+ #include "stm32h7xx_hal_ramecc.h"
+#endif /* HAL_HCD_MODULE_ENABLED */
+
+#ifdef HAL_RNG_MODULE_ENABLED
+ #include "stm32h7xx_hal_rng.h"
+#endif /* HAL_RNG_MODULE_ENABLED */
+
+#ifdef HAL_RTC_MODULE_ENABLED
+ #include "stm32h7xx_hal_rtc.h"
+#endif /* HAL_RTC_MODULE_ENABLED */
+
+#ifdef HAL_SAI_MODULE_ENABLED
+ #include "stm32h7xx_hal_sai.h"
+#endif /* HAL_SAI_MODULE_ENABLED */
+
+#ifdef HAL_SD_MODULE_ENABLED
+ #include "stm32h7xx_hal_sd.h"
+#endif /* HAL_SD_MODULE_ENABLED */
+
+#ifdef HAL_SDRAM_MODULE_ENABLED
+ #include "stm32h7xx_hal_sdram.h"
+#endif /* HAL_SDRAM_MODULE_ENABLED */
+
+#ifdef HAL_SPI_MODULE_ENABLED
+ #include "stm32h7xx_hal_spi.h"
+#endif /* HAL_SPI_MODULE_ENABLED */
+
+#ifdef HAL_SPDIFRX_MODULE_ENABLED
+ #include "stm32h7xx_hal_spdifrx.h"
+#endif /* HAL_SPDIFRX_MODULE_ENABLED */
+
+#ifdef HAL_SWPMI_MODULE_ENABLED
+ #include "stm32h7xx_hal_swpmi.h"
+#endif /* HAL_SWPMI_MODULE_ENABLED */
+
+#ifdef HAL_TIM_MODULE_ENABLED
+ #include "stm32h7xx_hal_tim.h"
+#endif /* HAL_TIM_MODULE_ENABLED */
+
+#ifdef HAL_UART_MODULE_ENABLED
+ #include "stm32h7xx_hal_uart.h"
+#endif /* HAL_UART_MODULE_ENABLED */
+
+#ifdef HAL_USART_MODULE_ENABLED
+ #include "stm32h7xx_hal_usart.h"
+#endif /* HAL_USART_MODULE_ENABLED */
+
+#ifdef HAL_IRDA_MODULE_ENABLED
+ #include "stm32h7xx_hal_irda.h"
+#endif /* HAL_IRDA_MODULE_ENABLED */
+
+#ifdef HAL_SMARTCARD_MODULE_ENABLED
+ #include "stm32h7xx_hal_smartcard.h"
+#endif /* HAL_SMARTCARD_MODULE_ENABLED */
+
+#ifdef HAL_SMBUS_MODULE_ENABLED
+ #include "stm32h7xx_hal_smbus.h"
+#endif /* HAL_SMBUS_MODULE_ENABLED */
+
+#ifdef HAL_WWDG_MODULE_ENABLED
+ #include "stm32h7xx_hal_wwdg.h"
+#endif /* HAL_WWDG_MODULE_ENABLED */
+
+#ifdef HAL_PCD_MODULE_ENABLED
+ #include "stm32h7xx_hal_pcd.h"
+#endif /* HAL_PCD_MODULE_ENABLED */
+
+#ifdef HAL_HCD_MODULE_ENABLED
+ #include "stm32h7xx_hal_hcd.h"
+#endif /* HAL_HCD_MODULE_ENABLED */
+
+#ifdef HAL_PSSI_MODULE_ENABLED
+  #include "stm32h7xx_hal_pssi.h"
+#endif /* HAL_PSSI_MODULE_ENABLED */
+
+#ifdef HAL_DTS_MODULE_ENABLED
+  #include "stm32h7xx_hal_dts.h"
+#endif /* HAL_DTS_MODULE_ENABLED */
+
+/* Exported macro ------------------------------------------------------------*/
+#ifdef  USE_FULL_ASSERT
+/**
+  * @brief  The assert_param macro is used for function's parameters check.
+  * @param  expr: If expr is false, it calls assert_failed function
+  *         which reports the name of the source file and the source
+  *         line number of the call that failed. 
+  *         If expr is true, it returns no value.
+  * @retval None
+  */
+  #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
+/* Exported functions ------------------------------------------------------- */
+  void assert_failed(uint8_t* file, uint32_t line);
+#else
+  #define assert_param(expr) ((void)0U)
+#endif /* USE_FULL_ASSERT */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32H7xx_HAL_CONF_H */
+ 
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/stm32h7xx_it.h
@@ -1,0 +1,81 @@
+/* USER CODE BEGIN Header */
+/**
+  ******************************************************************************
+  * @file    stm32h7xx_it.h
+  * @brief   This file contains the headers of the interrupt handlers.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+ ******************************************************************************
+  */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32H7xx_IT_H
+#define __STM32H7xx_IT_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif 
+
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* Exported types ------------------------------------------------------------*/
+/* USER CODE BEGIN ET */
+
+/* USER CODE END ET */
+
+/* Exported constants --------------------------------------------------------*/
+/* USER CODE BEGIN EC */
+
+/* USER CODE END EC */
+
+/* Exported macro ------------------------------------------------------------*/
+/* USER CODE BEGIN EM */
+
+/* USER CODE END EM */
+
+/* Exported functions prototypes ---------------------------------------------*/
+void NMI_Handler(void);
+void HardFault_Handler(void);
+void MemManage_Handler(void);
+void BusFault_Handler(void);
+void UsageFault_Handler(void);
+void SVC_Handler(void);
+void DebugMon_Handler(void);
+void PendSV_Handler(void);
+void SysTick_Handler(void);
+void DMA1_Stream0_IRQHandler(void);
+void DMA1_Stream1_IRQHandler(void);
+void DMA1_Stream2_IRQHandler(void);
+void ADC_IRQHandler(void);
+void I2C4_EV_IRQHandler(void);
+void I2C4_ER_IRQHandler(void);
+void OTG_FS_EP1_OUT_IRQHandler(void);
+void OTG_FS_EP1_IN_IRQHandler(void);
+void OTG_FS_IRQHandler(void);
+void DMAMUX1_OVR_IRQHandler(void);
+void BDMA_Channel0_IRQHandler(void);
+void BDMA_Channel1_IRQHandler(void);
+/* USER CODE BEGIN EFP */
+
+/* USER CODE END EFP */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32H7xx_IT_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/sys.h
@@ -1,0 +1,56 @@
+/**
+  ******************************************************************************
+  * File Name          : SYS.h
+  * Description        : This file provides code for the configuration
+  *                      of the SYS instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __sys_H
+#define __sys_H
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_SYS_Init(void);
+
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__ sys_H */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/tim.h
@@ -1,0 +1,62 @@
+/**
+  ******************************************************************************
+  * File Name          : TIM.h
+  * Description        : This file provides code for the configuration
+  *                      of the TIM instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __tim_H
+#define __tim_H
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+extern TIM_HandleTypeDef htim3;
+extern TIM_HandleTypeDef htim4;
+
+/* USER CODE BEGIN Private defines */
+
+/* USER CODE END Private defines */
+
+void MX_TIM3_Init(void);
+void MX_TIM4_Init(void);
+                        
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
+                                        
+/* USER CODE BEGIN Prototypes */
+
+/* USER CODE END Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__ tim_H */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/tunings.h
@@ -1,0 +1,20 @@
+/*
+ * tunings.h
+ *
+ *  Created on: Dec 18, 2019
+ *      Author: josnyder
+ */
+
+#ifndef TUNINGS_H_
+#define TUNINGS_H_
+
+#define NUM_TUNINGS 66
+
+extern float centsDeviation[12];
+extern float tuningPresets[NUM_TUNINGS][12];
+extern uint32_t currentTuning;
+extern uint8_t keyCenter;
+extern char tuningNames[NUM_TUNINGS][6];
+
+
+#endif /* TUNINGS_H_ */
--- /dev/null
+++ b/LEAF/Inc/ui.h
@@ -1,0 +1,116 @@
+/*
+ * ui.h
+ *
+ *  Created on: Aug 30, 2019
+ *      Author: jeffsnyder
+ */
+#ifndef UI_H_
+#define UI_H_
+
+#define NUM_ADC_CHANNELS 6
+#define NUM_BUTTONS 10
+
+//PresetNil is used as a counter for the size of the enum
+typedef enum _VocodecPresetType
+{
+	Vocoder = 0,
+	Pitchshift,
+	AutotuneMono,
+	AutotunePoly,
+	SamplerButtonPress,
+	SamplerAutoGrab,
+	Distortion,
+	Wavefolder,
+	BitCrusher,
+	Delay,
+	Reverb,
+	Reverb2,
+	LivingString,
+	LivingStringSynth,
+	ClassicSynth,
+	Rhodes,
+	PresetNil
+} VocodecPresetType;
+
+typedef enum _VocodecButton
+{
+	ButtonEdit = 0,
+	ButtonLeft,
+	ButtonRight,
+	ButtonDown,
+	ButtonUp,
+	ButtonA,
+	ButtonB,
+	ButtonC,
+	ButtonD,
+	ButtonE,
+	ButtonNil
+} VocodecButton;
+
+typedef enum _ButtonAction
+{
+	ActionPress = 0,
+	ActionRelease,
+	ActionHoldInstant,
+	ActionHoldContinuous,
+	ActionNil
+} ButtonAction;
+
+extern uint16_t ADC_values[NUM_ADC_CHANNELS];
+
+extern uint8_t buttonValues[NUM_BUTTONS];
+//extern uint8_t buttonPressed[NUM_BUTTONS];
+//extern uint8_t buttonReleased[NUM_BUTTONS];
+
+extern int8_t writeKnobFlag;
+extern int8_t writeButtonFlag;
+extern int8_t writeActionFlag;
+
+extern float floatADCUI[NUM_ADC_CHANNELS];
+
+extern uint8_t currentPreset;
+extern uint8_t previousPreset;
+extern uint8_t loadingPreset;
+// Display values
+extern char* modeNames[PresetNil];
+extern char* modeNamesDetails[PresetNil];
+extern char* shortModeNames[PresetNil];
+extern char* paramNames[PresetNil][NUM_ADC_CHANNELS + NUM_BUTTONS];
+extern float knobParams[NUM_ADC_CHANNELS];
+extern int8_t cvAddParam;
+extern uint8_t buttonActionsSFX[NUM_BUTTONS][ActionNil];
+extern char* (*buttonActionFunctions[PresetNil])(VocodecButton, ButtonAction);
+
+void initModeNames(void);
+
+void buttonCheck(void);
+
+void adcCheck(void);
+
+void clearButtonActions(void);
+
+void changeTuning(void);
+
+void writeCurrentPresetToFlash(void);
+
+char* UIVocoderButtons(VocodecButton button, ButtonAction action);
+char* UIPitchShiftButtons(VocodecButton button, ButtonAction action);
+char* UINeartuneButtons(VocodecButton button, ButtonAction action);
+char* UIAutotuneButtons(VocodecButton button, ButtonAction action);
+char* UISamplerBPButtons(VocodecButton button, ButtonAction action);
+char* UISamplerAutoButtons(VocodecButton button, ButtonAction action);
+char* UIDistortionButtons(VocodecButton button, ButtonAction action);
+char* UIWaveFolderButtons(VocodecButton button, ButtonAction action);
+char* UIBitcrusherButtons(VocodecButton button, ButtonAction action);
+char* UIDelayButtons(VocodecButton button, ButtonAction action);
+char* UIReverbButtons(VocodecButton button, ButtonAction action);
+char* UIReverb2Buttons(VocodecButton button, ButtonAction action);
+char* UILivingStringButtons(VocodecButton button, ButtonAction action);
+char* UILivingStringSynthButtons(VocodecButton button, ButtonAction action);
+char* UIClassicSynthButtons(VocodecButton button, ButtonAction action);
+char* UIRhodesButtons(VocodecButton button, ButtonAction action);
+
+
+
+#endif /* UI_H_ */
+
--- /dev/null
+++ b/LEAF/Inc/usb_host.h
@@ -1,0 +1,94 @@
+/* USER CODE BEGIN Header */
+/**
+  ******************************************************************************
+  * @file           : usb_host.h
+  * @version        : v1.0_Cube
+  * @brief          : Header for usb_host.c file.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USB_HOST__H__
+#define __USB_HOST__H__
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32h7xx.h"
+#include "stm32h7xx_hal.h"
+
+/* USER CODE BEGIN INCLUDE */
+
+/* USER CODE END INCLUDE */
+
+/** @addtogroup USBH_OTG_DRIVER
+  * @{
+  */
+
+/** @defgroup USBH_HOST USBH_HOST
+  * @brief Host file for Usb otg low level driver.
+  * @{
+  */
+
+/** @defgroup USBH_HOST_Exported_Variables USBH_HOST_Exported_Variables
+  * @brief Public variables.
+  * @{
+  */
+
+/**
+  * @}
+  */
+
+/** Status of the application. */
+typedef enum {
+  APPLICATION_IDLE = 0,
+  APPLICATION_START,
+  APPLICATION_READY,
+  APPLICATION_DISCONNECT
+}ApplicationTypeDef;
+
+/** @defgroup USBH_HOST_Exported_FunctionsPrototype USBH_HOST_Exported_FunctionsPrototype
+  * @brief Declaration of public functions for Usb host.
+  * @{
+  */
+
+/* Exported functions -------------------------------------------------------*/
+
+/** @brief USB Host initialization function. */
+void MX_USB_HOST_Init(void);
+
+void MX_USB_HOST_Process(void);
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __USB_HOST__H__ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/usbh_MIDI.h
@@ -1,0 +1,211 @@
+/**
+ ******************************************************************************
+ * @file    usbh_MIDI.h
+ * @author  Xavier Halgand
+ * @version 
+ * @date    
+ * @brief   This file contains all the prototypes for the usbh_MIDI.c
+ ******************************************************************************
+ */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+/* Define to prevent recursive  ----------------------------------------------*/
+#ifndef __USBH_MIDI_CORE_H
+#define __USBH_MIDI_CORE_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbh_core.h"
+//#include "stm32f7xx_nucleo_144.h"
+
+/*-------------------------------------------------------------------------------*/
+// buffer size (should be at least >= MIOS32_USB_MIDI_DESC_DATA_*_SIZE/4)
+#define USB_MIDI_RX_BUFFER_SIZE   64 // packages
+#define USB_MIDI_TX_BUFFER_SIZE   64 // packages
+
+// size of IN/OUT pipe
+#define USB_MIDI_DATA_IN_SIZE           64
+#define USB_MIDI_DATA_OUT_SIZE          64
+
+// endpoint assignments (don't change!)
+#define USB_MIDI_DATA_OUT_EP 0x02
+#define USB_MIDI_DATA_IN_EP  0x81
+/** @defgroup USBH_MIDI_CORE_Exported_Defines
+ * @{
+ */
+#define USB_AUDIO_CLASS                                 0x01
+#define USB_MIDISTREAMING_SubCLASS                      0x03
+#define USB_MIDI_DESC_SIZE                                 9
+#define USBH_MIDI_CLASS    &MIDI_Class
+
+/*-------------------------------------------------------------------------------*/
+
+extern USBH_ClassTypeDef  MIDI_Class;
+
+/* -------------------- Exported_Types ------------------------------------------*/
+
+typedef enum {
+	NoteOff       = 0x8,
+	NoteOn        = 0x9,
+	PolyPressure  = 0xa,
+	CC            = 0xb,
+	ProgramChange = 0xc,
+	Aftertouch    = 0xd,
+	PitchBend     = 0xe
+} midi_event_t;
+
+
+typedef enum {
+	Chn1,
+	Chn2,
+	Chn3,
+	Chn4,
+	Chn5,
+	Chn6,
+	Chn7,
+	Chn8,
+	Chn9,
+	Chn10,
+	Chn11,
+	Chn12,
+	Chn13,
+	Chn14,
+	Chn15,
+	Chn16
+} midi_chn_t;
+
+#pragma anon_unions
+
+typedef union {
+	struct {
+		uint32_t ALL;
+	};
+	struct {
+		uint8_t cin_cable;
+		uint8_t evnt0;
+		uint8_t evnt1;
+		uint8_t evnt2;
+	};
+	struct {
+		uint8_t type:4;
+		uint8_t cable:4;
+		uint8_t chn:4; // mios32_midi_chn_t
+		uint8_t event:4; // mios32_midi_event_t
+		uint8_t value1;
+		uint8_t value2;
+	};
+
+	// C++ doesn't allow to redefine names in anonymous unions
+	// as a simple workaround, we rename these redundant names
+	struct {
+		uint8_t cin:4;
+		uint8_t dummy1_cable:4;
+		uint8_t dummy1_chn:4; // mios32_midi_chn_t
+		uint8_t dummy1_event:4; // mios32_midi_event_t
+		uint8_t note:8;
+		uint8_t velocity:8;
+	};
+	struct {
+		uint8_t dummy2_cin:4;
+		uint8_t dummy2_cable:4;
+		uint8_t dummy2_chn:4; // mios32_midi_chn_t
+		uint8_t dummy2_event:4; // mios32_midi_event_t
+		uint8_t cc_number:8;
+		uint8_t value:8;
+	};
+	struct {
+		uint8_t dummy3_cin:4;
+		uint8_t dummy3_cable:4;
+		uint8_t dummy3_chn:4; // mios32_midi_chn_t
+		uint8_t dummy3_event:4; // mios32_midi_event_t
+		uint8_t program_change:8;
+		uint8_t dummy3:8;
+	};
+} midi_package_t;
+
+/* States for MIDI State Machine */
+typedef enum
+{
+	MIDI_IDLE= 0,
+	MIDI_SEND_DATA,
+	MIDI_SEND_DATA_WAIT,
+	MIDI_RECEIVE_DATA,
+	MIDI_RECEIVE_DATA_WAIT,
+}
+MIDI_DataStateTypeDef;
+
+typedef enum
+{
+	MIDI_IDLE_STATE= 0,
+	MIDI_TRANSFER_DATA,
+	MIDI_ERROR_STATE,
+}
+MIDI_StateTypeDef;
+
+/* Structure for MIDI process */
+typedef struct _MIDI_Process
+{
+	MIDI_StateTypeDef			state;
+	uint8_t			InPipe;
+	uint8_t			OutPipe;
+	uint8_t			OutEp;
+	uint8_t			InEp;
+	uint16_t		OutEpSize;
+	uint16_t		InEpSize;
+
+	uint8_t			*pTxData;
+	uint8_t			*pRxData;
+	uint16_t		TxDataLength;
+	uint16_t		RxDataLength;
+	MIDI_DataStateTypeDef		data_tx_state;
+	MIDI_DataStateTypeDef		data_rx_state;
+	uint8_t						Rx_Poll;
+	//uint8_t			buff[8];
+	//MIDI_DataItfTypedef                DataItf;
+	//CDC_InterfaceDesc_Typedef         CDC_Desc;
+}
+MIDI_HandleTypeDef;
+
+/*---------------------------Exported_FunctionsPrototype-------------------------------------*/
+
+USBH_StatusTypeDef  USBH_MIDI_Transmit(USBH_HandleTypeDef *phost,
+                                      uint8_t *pbuff,
+                                      uint16_t length);
+
+USBH_StatusTypeDef  USBH_MIDI_Receive(USBH_HandleTypeDef *phost,
+                                     uint8_t *pbuff,
+                                     uint16_t length);
+
+
+uint32_t            USBH_MIDI_GetLastReceivedDataSize(USBH_HandleTypeDef *phost);
+
+USBH_StatusTypeDef  USBH_MIDI_Stop(USBH_HandleTypeDef *phost);
+
+void USBH_MIDI_TransmitCallback(USBH_HandleTypeDef *phost);
+
+void USBH_MIDI_ReceiveCallback(USBH_HandleTypeDef *phost, uint32_t myLength);
+
+/*-------------------------------------------------------------------------------------------*/
+#endif /* __USBH_MIDI_CORE_H */
+
+
+/*****************************END OF FILE*************************************************************/
+
--- /dev/null
+++ b/LEAF/Inc/usbh_conf.h
@@ -1,0 +1,199 @@
+/* USER CODE BEGIN Header */
+/**
+  ******************************************************************************
+  * @file           : usbh_conf.h
+  * @version        : v1.0_Cube
+  * @brief          : Header for usbh_conf.c file.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBH_CONF__H__
+#define __USBH_CONF__H__
+#ifdef __cplusplus
+ extern "C" {
+#endif
+/* Includes ------------------------------------------------------------------*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "main.h"
+
+#include "stm32h7xx.h"
+#include "stm32h7xx_hal.h"
+
+/* USER CODE BEGIN INCLUDE */
+
+/* USER CODE END INCLUDE */
+
+/** @addtogroup STM32_USB_HOST_LIBRARY
+  * @{
+  */
+
+/** @defgroup USBH_CONF
+  * @brief usb host low level driver configuration file
+  * @{
+  */
+
+/** @defgroup USBH_CONF_Exported_Variables USBH_CONF_Exported_Variables
+  * @brief Public variables.
+  * @{
+  */
+
+/**
+  * @}
+  */
+
+/** @defgroup USBH_CONF_Exported_Defines USBH_CONF_Exported_Defines
+  * @brief Defines for configuration of the Usb host.
+  * @{
+  */
+
+/*----------   -----------*/
+#define USBH_MAX_NUM_ENDPOINTS      2U
+ 
+/*----------   -----------*/
+#define USBH_MAX_NUM_INTERFACES      10U
+ 
+/*----------   -----------*/
+#define USBH_MAX_NUM_CONFIGURATION      10U
+ 
+/*----------   -----------*/
+#define USBH_KEEP_CFG_DESCRIPTOR      1U
+ 
+/*----------   -----------*/
+#define USBH_MAX_NUM_SUPPORTED_CLASS      1U
+ 
+/*----------   -----------*/
+#define USBH_MAX_SIZE_CONFIGURATION      256U
+ 
+/*----------   -----------*/
+#define USBH_MAX_DATA_BUFFER      512U
+ 
+/*----------   -----------*/
+#define USBH_DEBUG_LEVEL      0U
+ 
+/*----------   -----------*/
+#define USBH_USE_OS      0U
+ 
+ 
+ 
+
+/****************************************/
+/* #define for FS and HS identification */
+#define HOST_HS 		0
+#define HOST_FS 		1
+
+#if (USBH_USE_OS == 1)
+  #include "cmsis_os.h"
+  #define USBH_PROCESS_PRIO          osPriorityNormal
+  #define USBH_PROCESS_STACK_SIZE    ((uint16_t)0)
+#endif /* (USBH_USE_OS == 1) */
+
+/**
+  * @}
+  */
+
+/** @defgroup USBH_CONF_Exported_Macros USBH_CONF_Exported_Macros
+  * @brief Aliases.
+  * @{
+  */
+
+/* Memory management macros */
+
+/** Alias for memory allocation. */
+#define USBH_malloc         malloc
+
+/** Alias for memory release. */
+#define USBH_free           free
+
+/** Alias for memory set. */
+#define USBH_memset         memset
+
+/** Alias for memory copy. */
+#define USBH_memcpy         memcpy
+
+/* DEBUG macros */
+
+#if (USBH_DEBUG_LEVEL > 0U)
+#define  USBH_UsrLog(...)   do { \
+                            printf(__VA_ARGS__); \
+                            printf("\n"); \
+} while (0)
+#else
+#define USBH_UsrLog(...) do {} while (0)
+#endif
+
+#if (USBH_DEBUG_LEVEL > 1U)
+
+#define  USBH_ErrLog(...) do { \
+                            printf("ERROR: ") ; \
+                            printf(__VA_ARGS__); \
+                            printf("\n"); \
+} while (0)
+#else
+#define USBH_ErrLog(...) do {} while (0)
+#endif
+
+#if (USBH_DEBUG_LEVEL > 2U)
+#define  USBH_DbgLog(...)   do { \
+                            printf("DEBUG : ") ; \
+                            printf(__VA_ARGS__); \
+                            printf("\n"); \
+} while (0)
+#else
+#define USBH_DbgLog(...) do {} while (0)
+#endif
+
+/**
+  * @}
+  */
+
+/** @defgroup USBH_CONF_Exported_Types USBH_CONF_Exported_Types
+  * @brief Types.
+  * @{
+  */
+
+/**
+  * @}
+  */
+
+/** @defgroup USBH_CONF_Exported_FunctionsPrototype USBH_CONF_Exported_FunctionsPrototype
+  * @brief Declaration of public functions for Usb host.
+  * @{
+  */
+
+/* Exported functions -------------------------------------------------------*/
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __USBH_CONF__H__ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Inc/usbh_platform.h
@@ -1,0 +1,44 @@
+/* USER CODE BEGIN Header */
+/**
+  ******************************************************************************
+  * @file           : usbh_platform.h
+  * @brief          : Header for usbh_platform.c file.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+/* USER CODE END Header */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBH_PLATFORM_H__
+#define __USBH_PLATFORM_H__
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_host.h"
+
+/* USER CODE BEGIN INCLUDE */
+
+/* USER CODE END INCLUDE */
+
+void MX_DriverVbusFS(uint8_t state); 
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __USBH_PLATFORM_H__ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
binary files a/LEAF/Src/.DS_Store /dev/null differ
--- /dev/null
+++ b/LEAF/Src/MIDI_application.c
@@ -1,0 +1,192 @@
+/*
+ * MIDI_application.c
+ *
+ *  Created on: 6 d�c. 2014
+ *      Author: Xavier Halgand
+ *
+ *	Modified on: 9/12/16 by C.P. to handle the MIDI_IDLE state properly, and
+ *	added required code to be compatible with "NucleoSynth"
+ *
+ *	11/8/17 by C.P.: Version 0.7.7 - Use for Casio CTK-6200 Keyboard
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "audiostream.h"
+#include "MIDI_application.h"
+#include "usbh_core.h"
+#include "usbh_MIDI.h"
+#include "usb_host.h"
+#include "sfx.h"
+
+MIDI_ApplicationTypeDef MIDI_Appli_state = MIDI_APPLICATION_READY;
+extern ApplicationTypeDef Appli_state;
+extern USBH_HandleTypeDef hUsbHostFS;
+uint8_t MIDI_RX_Buffer[RX_BUFF_SIZE]__ATTR_RAM_D2; // MIDI reception buffer
+
+uint8_t key, velocity, ctrl, data, sustainInverted;
+
+uint8_t CCs[128];
+/* Private define ------------------------------------------------------------*/
+
+/* Private function prototypes -----------------------------------------------*/
+
+
+
+
+/*-----------------------------------------------------------------------------*/
+/**
+ * @brief  Main routine for MIDI application, looped in main.c
+ * @param  None
+ * @retval none
+ */
+void MIDI_Application(void)
+{
+	if(Appli_state == APPLICATION_READY)
+	{
+		if(MIDI_Appli_state == MIDI_APPLICATION_READY)
+		{
+
+			USBH_MIDI_Receive(&hUsbHostFS, MIDI_RX_Buffer, RX_BUFF_SIZE); // just once at the beginning, start the first reception
+			MIDI_Appli_state = MIDI_APPLICATION_RUNNING;
+		}
+	}
+	if(Appli_state == APPLICATION_DISCONNECT)
+	{
+		MIDI_Appli_state = MIDI_APPLICATION_READY;
+		USBH_MIDI_Stop(&hUsbHostFS);
+	}
+}
+
+/*-----------------------------------------------------------------------------*/
+void ProcessReceivedMidiDatas(uint32_t myLength)
+{
+	uint16_t numberOfPackets;
+	uint8_t *ptr = MIDI_RX_Buffer;
+	midi_package_t pack;
+
+	numberOfPackets = myLength >> 2; //each USB midi package is 4 bytes long
+
+	if (numberOfPackets != 0)
+	{
+		while(numberOfPackets--)
+		{
+			pack.cin_cable = *ptr ; ptr++ ;
+			pack.evnt0 = *ptr ; ptr++ ;
+			pack.evnt1 = *ptr ; ptr++ ;
+			pack.evnt2 = *ptr ; ptr++ ;
+
+			// Handle MIDI messages
+			switch(pack.evnt0)
+			{
+				case (0x80): // Note Off
+					key = pack.evnt1;
+					velocity = pack.evnt2;
+
+					noteOff(key, velocity);
+
+					break;
+				case (0x90): // Note On
+					key = pack.evnt1;
+					velocity = pack.evnt2;
+
+					noteOn(key, velocity);
+
+					break;
+				case (0xA0):
+					break;
+				case (0xB0):
+					ctrl = pack.evnt1;
+					data = pack.evnt2;
+					CCs[ctrl] = data;
+					switch(ctrl)
+					{
+						case (0x01):
+							break;
+						case (0x02):
+							break;
+						case (0x03):
+							break;
+						case (0x04):
+							break;
+						case (0x0D):
+							break;
+						case (0x4B):
+							break;
+						case (0x4C):
+							break;
+						case (0x5C):
+							break;
+						case (0x5F):
+							break;
+						case (0x49):
+							break;
+						case (0x48):
+							break;
+						case (0x5B):
+							break;
+						case (0x5D):
+							break;
+						case (0x4A):
+							break;
+						case (0x47):
+							break;
+						case (0x05):
+							break;
+						case (0x54):
+							break;
+						case (0x10):
+							break;
+						case (0x11):
+							break;
+						case (0x12):
+							break;
+						case (0x07):
+							break;
+						case (0x13):
+							break;
+						case (0x14):
+							break;
+						case (64): // sustain
+							if (data)
+							{
+								if (sustainInverted) 	sustainOff();
+								else					sustainOn();
+							}
+							else
+							{
+								if (sustainInverted) 	sustainOn();
+								else					sustainOff();
+							}
+							break;
+					}
+
+
+          break;
+				case (0xC0): // Program Change
+					break;
+				case (0xD0): // Mono Aftertouch
+					break;
+				case (0xE0): // Pitch Bend
+					pitchBend((pack.evnt1) + (pack.evnt2 << 7));
+					break;
+				case (0xF0):
+					break;
+			}
+		}
+	}
+}
+
+
+
+/*-----------------------------------------------------------------------------*/
+/**
+ * @brief  MIDI data receive callback.
+ * @param  phost: Host handle
+ * @retval None
+ */
+void USBH_MIDI_ReceiveCallback(USBH_HandleTypeDef *phost, uint32_t myLength)
+{
+	ProcessReceivedMidiDatas(myLength);
+	USBH_MIDI_Receive(&hUsbHostFS, MIDI_RX_Buffer, RX_BUFF_SIZE); // start a new reception
+}
+
--- /dev/null
+++ b/LEAF/Src/adc.c
@@ -1,0 +1,239 @@
+/**
+  ******************************************************************************
+  * File Name          : ADC.c
+  * Description        : This file provides code for the configuration
+  *                      of the ADC instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "adc.h"
+
+/* USER CODE BEGIN 0 */
+
+/* USER CODE END 0 */
+
+ADC_HandleTypeDef hadc1;
+DMA_HandleTypeDef hdma_adc1;
+
+/* ADC1 init function */
+void MX_ADC1_Init(void)
+{
+  ADC_MultiModeTypeDef multimode = {0};
+  ADC_ChannelConfTypeDef sConfig = {0};
+
+  /** Common config 
+  */
+  hadc1.Instance = ADC1;
+  hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4;
+  hadc1.Init.Resolution = ADC_RESOLUTION_16B;
+  hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
+  hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV;
+  hadc1.Init.LowPowerAutoWait = DISABLE;
+  hadc1.Init.ContinuousConvMode = ENABLE;
+  hadc1.Init.NbrOfConversion = 6;
+  hadc1.Init.DiscontinuousConvMode = DISABLE;
+  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
+  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
+  hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_CIRCULAR;
+  hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
+  hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
+  hadc1.Init.OversamplingMode = ENABLE;
+  hadc1.Init.Oversampling.Ratio = 64;
+  hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_6;
+  hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
+  hadc1.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
+  if (HAL_ADC_Init(&hadc1) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /** Configure the ADC multi-mode 
+  */
+  multimode.Mode = ADC_MODE_INDEPENDENT;
+  if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /** Configure Regular Channel 
+  */
+  sConfig.Channel = ADC_CHANNEL_7;
+  sConfig.Rank = ADC_REGULAR_RANK_1;
+  sConfig.SamplingTime = ADC_SAMPLETIME_64CYCLES_5;
+  sConfig.SingleDiff = ADC_SINGLE_ENDED;
+  sConfig.OffsetNumber = ADC_OFFSET_NONE;
+  sConfig.Offset = 0;
+  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /** Configure Regular Channel 
+  */
+  sConfig.Channel = ADC_CHANNEL_19;
+  sConfig.Rank = ADC_REGULAR_RANK_2;
+  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /** Configure Regular Channel 
+  */
+  sConfig.Channel = ADC_CHANNEL_14;
+  sConfig.Rank = ADC_REGULAR_RANK_3;
+  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /** Configure Regular Channel 
+  */
+  sConfig.Channel = ADC_CHANNEL_16;
+  sConfig.Rank = ADC_REGULAR_RANK_4;
+  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /** Configure Regular Channel 
+  */
+  sConfig.Channel = ADC_CHANNEL_15;
+  sConfig.Rank = ADC_REGULAR_RANK_5;
+  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /** Configure Regular Channel 
+  */
+  sConfig.Channel = ADC_CHANNEL_8;
+  sConfig.Rank = ADC_REGULAR_RANK_6;
+  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+  {
+    Error_Handler();
+  }
+
+}
+
+void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
+{
+
+  GPIO_InitTypeDef GPIO_InitStruct = {0};
+  HAL_DMA_MuxSyncConfigTypeDef pSyncConfig= {0};
+  if(adcHandle->Instance==ADC1)
+  {
+  /* USER CODE BEGIN ADC1_MspInit 0 */
+
+  /* USER CODE END ADC1_MspInit 0 */
+    /* ADC1 clock enable */
+    __HAL_RCC_ADC12_CLK_ENABLE();
+  
+    __HAL_RCC_GPIOC_CLK_ENABLE();
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+    /**ADC1 GPIO Configuration    
+    PC1     ------> ADC1_INP11
+    PA0     ------> ADC1_INP16
+    PA2     ------> ADC1_INP14
+    PA3     ------> ADC1_INP15
+    PA5     ------> ADC1_INP19
+    PA7     ------> ADC1_INP7
+    PC5     ------> ADC1_INP8 
+    */
+    GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_5;
+    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+    GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_5 
+                          |GPIO_PIN_7;
+    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+    /* ADC1 DMA Init */
+    /* ADC1 Init */
+    hdma_adc1.Instance = DMA1_Stream0;
+    hdma_adc1.Init.Request = DMA_REQUEST_ADC1;
+    hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
+    hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
+    hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
+    hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
+    hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
+    hdma_adc1.Init.Mode = DMA_CIRCULAR;
+    hdma_adc1.Init.Priority = DMA_PRIORITY_HIGH;
+    hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_ENABLE;
+    hdma_adc1.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_1QUARTERFULL;
+    hdma_adc1.Init.MemBurst = DMA_MBURST_SINGLE;
+    hdma_adc1.Init.PeriphBurst = DMA_PBURST_SINGLE;
+    if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
+    {
+      Error_Handler();
+    }
+
+    pSyncConfig.SyncSignalID = HAL_DMAMUX1_SYNC_EXTI0;
+    pSyncConfig.SyncPolarity = HAL_DMAMUX_SYNC_RISING;
+    pSyncConfig.SyncEnable = DISABLE;
+    pSyncConfig.EventEnable = ENABLE;
+    pSyncConfig.RequestNumber = 1;
+    if (HAL_DMAEx_ConfigMuxSync(&hdma_adc1, &pSyncConfig) != HAL_OK)
+    {
+      Error_Handler();
+    }
+
+    __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);
+
+    /* ADC1 interrupt Init */
+    HAL_NVIC_SetPriority(ADC_IRQn, 0, 0);
+    HAL_NVIC_EnableIRQ(ADC_IRQn);
+  /* USER CODE BEGIN ADC1_MspInit 1 */
+
+  /* USER CODE END ADC1_MspInit 1 */
+  }
+}
+
+void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
+{
+
+  if(adcHandle->Instance==ADC1)
+  {
+  /* USER CODE BEGIN ADC1_MspDeInit 0 */
+
+  /* USER CODE END ADC1_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_ADC12_CLK_DISABLE();
+  
+    /**ADC1 GPIO Configuration    
+    PC1     ------> ADC1_INP11
+    PA0     ------> ADC1_INP16
+    PA2     ------> ADC1_INP14
+    PA3     ------> ADC1_INP15
+    PA5     ------> ADC1_INP19
+    PA7     ------> ADC1_INP7
+    PC5     ------> ADC1_INP8 
+    */
+    HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1|GPIO_PIN_5);
+
+    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_5 
+                          |GPIO_PIN_7);
+
+    /* ADC1 DMA DeInit */
+    HAL_DMA_DeInit(adcHandle->DMA_Handle);
+
+    /* ADC1 interrupt Deinit */
+    HAL_NVIC_DisableIRQ(ADC_IRQn);
+  /* USER CODE BEGIN ADC1_MspDeInit 1 */
+
+  /* USER CODE END ADC1_MspDeInit 1 */
+  }
+} 
+
+/* USER CODE BEGIN 1 */
+
+/* USER CODE END 1 */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Src/audiostream.c
@@ -1,0 +1,518 @@
+/*
+ * audiostream.c
+ *
+ *  Created on: Aug 30, 2019
+ *      Author: jeffsnyder
+ */
+
+
+/* Includes ------------------------------------------------------------------*/
+#include "audiostream.h"
+#include "main.h"
+#include "leaf.h"
+#include "codec.h"
+#include "ui.h"
+#include "oled.h"
+#include "tunings.h"
+#include "i2c.h"
+#include "gpio.h"
+#include "sfx.h"
+#include "tim.h"
+
+//the audio buffers are put in the D2 RAM area because that is a memory location that the DMA has access to.
+int32_t audioOutBuffer[AUDIO_BUFFER_SIZE] __ATTR_RAM_D2;
+int32_t audioInBuffer[AUDIO_BUFFER_SIZE] __ATTR_RAM_D2;
+
+#define SMALL_MEM_SIZE 8192
+#define MED_MEM_SIZE 500000
+#define LARGE_MEM_SIZE 33554432 //32 MBytes - size of SDRAM IC
+char small_memory[SMALL_MEM_SIZE];
+char medium_memory[MED_MEM_SIZE]__ATTR_RAM_D1;
+char large_memory[LARGE_MEM_SIZE] __ATTR_SDRAM;
+
+#define DISPLAY_BLOCK_SIZE 512
+float audioDisplayBuffer[128];
+uint8_t displayBufferIndex = 0;
+float displayBlockVal = 0.0f;
+uint32_t displayBlockCount = 0;
+
+
+void audioFrame(uint16_t buffer_offset);
+float audioTickL(float audioIn);
+float audioTickR(float audioIn);
+void buttonCheck(void);
+
+HAL_StatusTypeDef transmit_status;
+HAL_StatusTypeDef receive_status;
+
+uint8_t codecReady = 0;
+
+uint16_t frameCounter = 0;
+
+tMempool smallPool;
+tMempool largePool;
+
+tRamp adc[6];
+
+tNoise myNoise;
+tCycle mySine[2];
+float smoothedADC[6];
+tEnvelopeFollower LED_envelope[4];
+
+uint32_t clipCounter[4] = {0,0,0,0};
+uint8_t clipped[4] = {0,0,0,0};
+
+
+float rightIn = 0.0f;
+float rightOut = 0.0f;
+float sample = 0.0f;
+
+
+
+// Vocoder
+float glideTimeVoc = 5.0f;
+
+// Formant
+float formantShiftFactor = -1.0f;
+float formantKnob = 0.0f;
+
+// PitchShift
+float pitchFactor = 2.0f;
+float formantWarp = 1.0f;
+float formantIntensity = 1.0f;
+
+// Autotune1
+
+// Autotune2
+float glideTimeAuto = 5.0f;
+
+// Sampler Button Press
+
+
+// Sampler Auto Grab
+
+
+
+
+
+
+BOOL frameCompleted = TRUE;
+
+BOOL bufferCleared = TRUE;
+
+int numBuffersToClearOnLoad = 2;
+int numBuffersCleared = 0;
+
+/**********************************************/
+
+void (*allocFunctions[PresetNil])(void);
+void (*frameFunctions[PresetNil])(void);
+void (*tickFunctions[PresetNil])(float);
+void (*freeFunctions[PresetNil])(void);
+
+void audioInit(I2C_HandleTypeDef* hi2c, SAI_HandleTypeDef* hsaiOut, SAI_HandleTypeDef* hsaiIn)
+{
+	// Initialize LEAF.
+
+	LEAF_init(SAMPLE_RATE, AUDIO_FRAME_SIZE, medium_memory, MED_MEM_SIZE, &randomNumber);
+
+	tMempool_init (&smallPool, small_memory, SMALL_MEM_SIZE);
+	tMempool_init (&largePool, large_memory, LARGE_MEM_SIZE);
+
+	initFunctionPointers();
+
+	//ramps to smooth the knobs
+	for (int i = 0; i < 6; i++)
+	{
+		tRamp_init(&adc[i],19.0f, 1); //set all ramps for knobs to be 9ms ramp time and let the init function know they will be ticked every sample
+	}
+
+	for (int i = 0; i < 4; i++)
+	{
+		tEnvelopeFollower_init(&LED_envelope[i], 0.02f, .9995f);
+	}
+
+	initGlobalSFXObjects();
+
+//	allocFunctions[currentPreset]();
+
+	loadingPreset = 1;
+	previousPreset = PresetNil;
+
+	HAL_Delay(10);
+
+	for (int i = 0; i < AUDIO_BUFFER_SIZE; i++)
+	{
+		audioOutBuffer[i] = 0;
+	}
+
+	HAL_Delay(1);
+
+	// set up the I2S driver to send audio data to the codec (and retrieve input as well)
+	transmit_status = HAL_SAI_Transmit_DMA(hsaiOut, (uint8_t *)&audioOutBuffer[0], AUDIO_BUFFER_SIZE);
+	receive_status = HAL_SAI_Receive_DMA(hsaiIn, (uint8_t *)&audioInBuffer[0], AUDIO_BUFFER_SIZE);
+
+	// with the CS4271 codec IC, the SAI Transmit and Receive must be happening before the chip will respond to
+	// I2C setup messages (it seems to use the masterclock input as it's own internal clock for i2c data, etc)
+	// so while we used to set up codec before starting SAI, now we need to set up codec afterwards, and set a flag to make sure it's ready
+
+	//now to send all the necessary messages to the codec
+	AudioCodec_init(hi2c);
+	HAL_Delay(1);
+
+	//now reconfigue so buttons C and E can be used (they were also connected to I2C for codec setup)
+	HAL_I2C_MspDeInit(hi2c);
+
+	GPIO_InitTypeDef GPIO_InitStruct = {0};
+
+    //PB10, PB11     ------> buttons C and E
+    GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
+    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+    GPIO_InitStruct.Pull = GPIO_PULLUP;
+    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+}
+
+void audioFrame(uint16_t buffer_offset)
+{
+	frameCompleted = FALSE;
+
+	int i;
+	int32_t current_sample;
+
+	buttonCheck();
+	adcCheck();
+
+	if (!loadingPreset)
+	{
+		frameFunctions[currentPreset]();
+	}
+
+	//if the codec isn't ready, keep the buffer as all zeros
+	//otherwise, start computing audio!
+
+	bufferCleared = TRUE;
+
+	if (codecReady)
+	{
+		for (i = 0; i < (HALF_BUFFER_SIZE); i++)
+		{
+			if ((i & 1) == 0)
+			{
+				current_sample = (int32_t)(audioTickR((float) (audioInBuffer[buffer_offset + i] << 8) * INV_TWO_TO_31) * TWO_TO_23);
+			}
+			else
+			{
+				current_sample = (int32_t)(audioTickL((float) (audioInBuffer[buffer_offset + i] << 8) * INV_TWO_TO_31) * TWO_TO_23);
+			}
+
+			audioOutBuffer[buffer_offset + i] = current_sample;
+		}
+
+	}
+
+	if (bufferCleared)
+	{
+		numBuffersCleared++;
+		if (numBuffersCleared >= numBuffersToClearOnLoad)
+		{
+			numBuffersCleared = numBuffersToClearOnLoad;
+			if (loadingPreset)
+			{
+				if (previousPreset != PresetNil)
+				{
+					// do this if you want to save knob values when changing off a preset
+//					for (int i = 0; i < NUM_ADC_CHANNELS; i++)
+//					{
+//						presetKnobValues[previousPreset][i] = smoothedADC[i];
+//					}
+					freeFunctions[previousPreset]();
+				}
+				else
+				{
+					leaf.clearOnAllocation = 1;
+				}
+				setLED_A(0);
+				setLED_B(0);
+				setLED_1(0);
+				allocFunctions[currentPreset]();
+				for (int i = 0; i < NUM_ADC_CHANNELS; i++)
+				{
+					knobActive[i] = 0;
+					floatADCUI[i] = -1.0f;
+					tRamp_setVal(&adc[i], presetKnobValues[currentPreset][i]);
+					tRamp_setDest(&adc[i], presetKnobValues[currentPreset][i]);
+					smoothedADC[i] = presetKnobValues[currentPreset][i];
+				}
+				leaf.clearOnAllocation = 0;
+				loadingPreset = 0;
+			}
+		}
+	}
+	else numBuffersCleared = 0;
+
+	frameCompleted = TRUE;
+
+	OLED_process(); // process what to write to the screen but don't actually draw
+}
+
+
+
+
+float audioTickL(float audioIn)
+{
+	sample = 0.0f;
+
+	for (int i = 0; i < NUM_ADC_CHANNELS; i++)
+	{
+		smoothedADC[i] = tRamp_tick(&adc[i]);
+	}
+
+	if (loadingPreset) return sample;
+
+	bufferCleared = FALSE;
+
+	tickFunctions[currentPreset](audioIn);
+/*
+	displayBlockVal += fabsf(sample);
+	displayBlockCount++;
+	if (displayBlockCount >= DISPLAY_BLOCK_SIZE)
+	{
+		displayBlockVal *= INV_TWO_TO_9;
+		audioDisplayBuffer[displayBufferIndex] = displayBlockVal;
+		displayBlockVal = 0.0f;
+		displayBlockCount = 0;
+		displayBufferIndex++;
+		if (displayBufferIndex >= 128) displayBufferIndex = 0;
+	}
+	*/
+
+	if ((audioIn >= 0.999999f) || (audioIn <= -0.999999f))
+	{
+		setLED_leftin_clip(1);
+		clipCounter[0] = 10000;
+		clipped[0] = 1;
+	}
+	if ((clipCounter[0] > 0) && (clipped[0] == 1))
+	{
+		clipCounter[0]--;
+	}
+	else if ((clipCounter[0] == 0) && (clipped[0] == 1))
+	{
+		setLED_leftin_clip(0);
+		clipped[0] = 0;
+	}
+
+	float current_env = tEnvelopeFollower_tick(&LED_envelope[0], audioIn);
+	uint16_t audioLEDLevel = LEAF_clip(0, (current_env * 32.0f), 16);
+	 __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, audioLEDLevel);
+
+
+	current_env = tEnvelopeFollower_tick(&LED_envelope[1], sample);
+	audioLEDLevel = LEAF_clip(0, (current_env * 32.0f), 15);
+	 __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, audioLEDLevel);
+
+
+
+	if ((sample >= 0.999999f) || (sample <= -0.999999f))
+	{
+		setLED_leftout_clip(1);
+		clipCounter[2] = 10000;
+		clipped[2] = 1;
+	}
+	if ((clipCounter[2] > 0) && (clipped[2] == 1))
+	{
+		clipCounter[2]--;
+	}
+	else if ((clipCounter[2] == 0) && (clipped[2] == 1))
+	{
+		setLED_leftout_clip(0);
+		clipped[2] = 0;
+	}
+
+	return sample;
+}
+
+
+
+float audioTickR(float audioIn)
+{
+	rightIn = audioIn;
+
+
+	if ((rightIn >= 0.999999f) || (rightIn <= -0.999999f))
+	{
+		setLED_rightin_clip(1);
+		clipCounter[1] = 10000;
+		clipped[1] = 1;
+	}
+	if ((clipCounter[1] > 0) && (clipped[1] == 1))
+	{
+		clipCounter[1]--;
+	}
+	else if ((clipCounter[1] == 0) && (clipped[1] == 1))
+	{
+		setLED_rightin_clip(0);
+		clipped[1] = 0;
+	}
+
+
+
+	if ((rightOut >= 0.999999f) || (rightOut <= -0.999999f))
+	{
+		setLED_rightout_clip(1);
+		clipCounter[3] = 10000;
+		clipped[3] = 1;
+	}
+	if ((clipCounter[3] > 0) && (clipped[3] == 1))
+	{
+		clipCounter[3]--;
+	}
+	else if ((clipCounter[3] == 0) && (clipped[3] == 1))
+	{
+		setLED_rightout_clip(0);
+		clipped[3] = 0;
+	}
+
+
+	float current_env = tEnvelopeFollower_tick(&LED_envelope[2], rightIn);
+	uint16_t audioLEDLevel = LEAF_clip(0, (current_env * 32.0f), 16);
+	 __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_2, audioLEDLevel);
+
+
+	current_env = tEnvelopeFollower_tick(&LED_envelope[3], rightOut);
+	audioLEDLevel = LEAF_clip(0, (current_env * 32.0f), 16);
+	 __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1, audioLEDLevel);
+
+
+	return rightOut;
+}
+
+void initFunctionPointers(void)
+{
+	allocFunctions[Vocoder] = SFXVocoderAlloc;
+	frameFunctions[Vocoder] = SFXVocoderFrame;
+	tickFunctions[Vocoder] = SFXVocoderTick;
+	freeFunctions[Vocoder] = SFXVocoderFree;
+
+	allocFunctions[Pitchshift] = SFXPitchShiftAlloc;
+	frameFunctions[Pitchshift] = SFXPitchShiftFrame;
+	tickFunctions[Pitchshift] = SFXPitchShiftTick;
+	freeFunctions[Pitchshift] = SFXPitchShiftFree;
+
+	allocFunctions[AutotuneMono] = SFXNeartuneAlloc;
+	frameFunctions[AutotuneMono] = SFXNeartuneFrame;
+	tickFunctions[AutotuneMono] = SFXNeartuneTick;
+	freeFunctions[AutotuneMono] = SFXNeartuneFree;
+
+	allocFunctions[AutotunePoly] = SFXAutotuneAlloc;
+	frameFunctions[AutotunePoly] = SFXAutotuneFrame;
+	tickFunctions[AutotunePoly] = SFXAutotuneTick;
+	freeFunctions[AutotunePoly] = SFXAutotuneFree;
+
+	allocFunctions[SamplerButtonPress] = SFXSamplerBPAlloc;
+	frameFunctions[SamplerButtonPress] = SFXSamplerBPFrame;
+	tickFunctions[SamplerButtonPress] = SFXSamplerBPTick;
+	freeFunctions[SamplerButtonPress] = SFXSamplerBPFree;
+
+	allocFunctions[SamplerAutoGrab] = SFXSamplerAutoAlloc;
+	frameFunctions[SamplerAutoGrab] = SFXSamplerAutoFrame;
+	tickFunctions[SamplerAutoGrab] = SFXSamplerAutoTick;
+	freeFunctions[SamplerAutoGrab] = SFXSamplerAutoFree;
+
+	allocFunctions[Distortion] = SFXDistortionAlloc;
+	frameFunctions[Distortion] = SFXDistortionFrame;
+	tickFunctions[Distortion] = SFXDistortionTick;
+	freeFunctions[Distortion] = SFXDistortionFree;
+
+	allocFunctions[Wavefolder] = SFXWaveFolderAlloc;
+	frameFunctions[Wavefolder] = SFXWaveFolderFrame;
+	tickFunctions[Wavefolder] = SFXWaveFolderTick;
+	freeFunctions[Wavefolder] = SFXWaveFolderFree;
+
+	allocFunctions[BitCrusher] = SFXBitcrusherAlloc;
+	frameFunctions[BitCrusher] = SFXBitcrusherFrame;
+	tickFunctions[BitCrusher] = SFXBitcrusherTick;
+	freeFunctions[BitCrusher] = SFXBitcrusherFree;
+
+	allocFunctions[Delay] = SFXDelayAlloc;
+	frameFunctions[Delay] = SFXDelayFrame;
+	tickFunctions[Delay] = SFXDelayTick;
+	freeFunctions[Delay] = SFXDelayFree;
+
+	allocFunctions[Reverb] = SFXReverbAlloc;
+	frameFunctions[Reverb] = SFXReverbFrame;
+	tickFunctions[Reverb] = SFXReverbTick;
+	freeFunctions[Reverb] = SFXReverbFree;
+
+	allocFunctions[Reverb2] = SFXReverb2Alloc;
+	frameFunctions[Reverb2] = SFXReverb2Frame;
+	tickFunctions[Reverb2] = SFXReverb2Tick;
+	freeFunctions[Reverb2] = SFXReverb2Free;
+
+	allocFunctions[LivingString] = SFXLivingStringAlloc;
+	frameFunctions[LivingString] = SFXLivingStringFrame;
+	tickFunctions[LivingString] = SFXLivingStringTick;
+	freeFunctions[LivingString] = SFXLivingStringFree;
+
+	allocFunctions[LivingStringSynth] = SFXLivingStringSynthAlloc;
+	frameFunctions[LivingStringSynth] = SFXLivingStringSynthFrame;
+	tickFunctions[LivingStringSynth] = SFXLivingStringSynthTick;
+	freeFunctions[LivingStringSynth] = SFXLivingStringSynthFree;
+
+	allocFunctions[ClassicSynth] = SFXClassicSynthAlloc;
+	frameFunctions[ClassicSynth] = SFXClassicSynthFrame;
+	tickFunctions[ClassicSynth] = SFXClassicSynthTick;
+	freeFunctions[ClassicSynth] = SFXClassicSynthFree;
+
+	allocFunctions[Rhodes] = SFXRhodesAlloc;
+	frameFunctions[Rhodes] = SFXRhodesFrame;
+	tickFunctions[Rhodes] = SFXRhodesTick;
+	freeFunctions[Rhodes] = SFXRhodesFree;
+}
+
+
+
+void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai)
+{
+	if (!frameCompleted)
+	{
+		setLED_C(1);
+	}
+}
+
+void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai)
+{
+	if (!frameCompleted)
+		{
+			setLED_C(1);
+		}
+}
+
+void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai)
+{
+	if (!frameCompleted)
+		{
+			setLED_C(1);
+		}
+}
+
+
+void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai)
+{
+	if (!frameCompleted)
+	{
+		setLED_C(1);
+	}
+
+	audioFrame(HALF_BUFFER_SIZE);
+}
+
+void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai)
+{
+	if (!frameCompleted)
+	{
+		setLED_C(1);
+	}
+
+	audioFrame(0);
+}
--- /dev/null
+++ b/LEAF/Src/bdma.c
@@ -1,0 +1,66 @@
+/**
+  ******************************************************************************
+  * File Name          : dma.c
+  * Description        : This file provides code for the configuration
+  *                      of all the requested memory to memory DMA transfers.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "bdma.h"
+
+/* USER CODE BEGIN 0 */
+
+/* USER CODE END 0 */
+
+/*----------------------------------------------------------------------------*/
+/* Configure DMA                                                              */
+/*----------------------------------------------------------------------------*/
+
+/* USER CODE BEGIN 1 */
+
+/* USER CODE END 1 */
+
+/** 
+  * Enable DMA controller clock
+  */
+void MX_BDMA_Init(void) 
+{
+
+  /* DMA controller clock enable */
+  __HAL_RCC_BDMA_CLK_ENABLE();
+
+  /* DMA interrupt init */
+  /* BDMA_Channel0_IRQn interrupt configuration */
+  HAL_NVIC_SetPriority(BDMA_Channel0_IRQn, 0, 0);
+  HAL_NVIC_EnableIRQ(BDMA_Channel0_IRQn);
+  /* BDMA_Channel1_IRQn interrupt configuration */
+  HAL_NVIC_SetPriority(BDMA_Channel1_IRQn, 0, 0);
+  HAL_NVIC_EnableIRQ(BDMA_Channel1_IRQn);
+
+}
+
+/* USER CODE BEGIN 2 */
+
+/* USER CODE END 2 */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Src/bsp_driver_sd.c
@@ -1,0 +1,307 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file    bsp_driver_sd.c for H7 (based on stm32h743i_eval_sd.c)
+ * @brief   This file includes a generic uSD card driver.
+ *          To be completed by the user according to the board used for the project.
+ * @note    Functions generated as weak: they can be overriden by
+ *          - code in user files
+ *          - or BSP code from the FW pack files
+ *          if such files are added to the generated project (by the user).
+ ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* USER CODE BEGIN FirstSection */
+/* can be used to modify / undefine following code or add new definitions */
+/* USER CODE END FirstSection */
+/* Includes ------------------------------------------------------------------*/
+#include "bsp_driver_sd.h"
+
+/* Extern variables ---------------------------------------------------------*/ 
+  
+extern SD_HandleTypeDef hsd1;
+
+/* USER CODE BEGIN BeforeInitSection */
+/* can be used to modify / undefine following code or add code */
+/* USER CODE END BeforeInitSection */
+/**
+  * @brief  Initializes the SD card device.
+  * @retval SD status
+  */
+__weak uint8_t BSP_SD_Init(void)
+{
+  uint8_t sd_state = MSD_OK;
+  /* Check if the SD card is plugged in the slot */
+  if (BSP_SD_IsDetected() != SD_PRESENT)
+  {
+    return MSD_ERROR_SD_NOT_PRESENT;
+  }
+  /* HAL SD initialization */
+  sd_state = HAL_SD_Init(&hsd1);
+  /* Configure SD Bus width (4 bits mode selected) */
+  if (sd_state == MSD_OK)
+  {
+    /* Enable wide operation */
+    if (HAL_SD_ConfigWideBusOperation(&hsd1, SDMMC_BUS_WIDE_4B) != HAL_OK)
+    {
+      sd_state = MSD_ERROR;
+    }
+  }
+
+  return sd_state;
+}
+/* USER CODE BEGIN AfterInitSection */
+/* can be used to modify previous code / undefine following code / add code */
+/* USER CODE END AfterInitSection */
+
+/* USER CODE BEGIN InterruptMode */
+/**
+  * @brief  Configures Interrupt mode for SD detection pin.
+  * @retval Returns 0
+  */
+__weak uint8_t BSP_SD_ITConfig(void)
+{  
+  /* Code to be updated by the user or replaced by one from the FW pack (in a stmxxxx_sd.c file) */
+  
+  return (uint8_t)0;
+}
+
+/* USER CODE END InterruptMode */
+
+/* USER CODE BEGIN BeforeReadBlocksSection */
+/* can be used to modify previous code / undefine following code / add code */
+/* USER CODE END BeforeReadBlocksSection */
+/**
+  * @brief  Reads block(s) from a specified address in an SD card, in polling mode.
+  * @param  pData: Pointer to the buffer that will contain the data to transmit
+  * @param  ReadAddr: Address from where data is to be read
+  * @param  NumOfBlocks: Number of SD blocks to read
+  * @param  Timeout: Timeout for read operation
+  * @retval SD status
+  */
+__weak uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout)
+{
+  uint8_t sd_state = MSD_OK;
+
+  if (HAL_SD_ReadBlocks(&hsd1, (uint8_t *)pData, ReadAddr, NumOfBlocks, Timeout) != HAL_OK)
+  {
+    sd_state = MSD_ERROR;
+  }
+
+  return sd_state;  
+}
+
+/* USER CODE BEGIN BeforeWriteBlocksSection */
+/* can be used to modify previous code / undefine following code / add code */
+/* USER CODE END BeforeWriteBlocksSection */
+/**
+  * @brief  Writes block(s) to a specified address in an SD card, in polling mode. 
+  * @param  pData: Pointer to the buffer that will contain the data to transmit
+  * @param  WriteAddr: Address from where data is to be written
+  * @param  NumOfBlocks: Number of SD blocks to write
+  * @param  Timeout: Timeout for write operation
+  * @retval SD status
+  */
+__weak uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout)
+{
+  uint8_t sd_state = MSD_OK;
+
+  if (HAL_SD_WriteBlocks(&hsd1, (uint8_t *)pData, WriteAddr, NumOfBlocks, Timeout) != HAL_OK) 
+  {
+    sd_state = MSD_ERROR;
+  }
+
+  return sd_state;  
+}
+
+/* USER CODE BEGIN BeforeReadDMABlocksSection */
+/* can be used to modify previous code / undefine following code / add code */
+/* USER CODE END BeforeReadDMABlocksSection */
+/**
+  * @brief  Reads block(s) from a specified address in an SD card, in DMA mode.
+  * @param  pData: Pointer to the buffer that will contain the data to transmit
+  * @param  ReadAddr: Address from where data is to be read
+  * @param  NumOfBlocks: Number of SD blocks to read 
+  * @retval SD status
+  */
+__weak uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks)
+{
+  uint8_t sd_state = MSD_OK;
+  
+  /* Read block(s) in DMA transfer mode */
+  if (HAL_SD_ReadBlocks_DMA(&hsd1, (uint8_t *)pData, ReadAddr, NumOfBlocks) != HAL_OK)
+  {
+    sd_state = MSD_ERROR;
+  }
+  
+  return sd_state; 
+}
+
+/* USER CODE BEGIN BeforeWriteDMABlocksSection */
+/* can be used to modify previous code / undefine following code / add code */
+/* USER CODE END BeforeWriteDMABlocksSection */
+/**
+  * @brief  Writes block(s) to a specified address in an SD card, in DMA mode.
+  * @param  pData: Pointer to the buffer that will contain the data to transmit
+  * @param  WriteAddr: Address from where data is to be written
+  * @param  NumOfBlocks: Number of SD blocks to write 
+  * @retval SD status
+  */
+__weak uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks)
+{
+  uint8_t sd_state = MSD_OK;
+  
+  /* Write block(s) in DMA transfer mode */
+  if (HAL_SD_WriteBlocks_DMA(&hsd1, (uint8_t *)pData, WriteAddr, NumOfBlocks) != HAL_OK)
+  {
+    sd_state = MSD_ERROR;
+  }
+  
+  return sd_state; 
+}
+
+/* USER CODE BEGIN BeforeEraseSection */
+/* can be used to modify previous code / undefine following code / add code */
+/* USER CODE END BeforeEraseSection */
+/**
+  * @brief  Erases the specified memory area of the given SD card. 
+  * @param  StartAddr: Start byte address
+  * @param  EndAddr: End byte address
+  * @retval SD status
+  */
+__weak uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr)
+{
+  uint8_t sd_state = MSD_OK;
+
+  if (HAL_SD_Erase(&hsd1, StartAddr, EndAddr) != HAL_OK)  
+  {
+    sd_state = MSD_ERROR;
+  }
+
+  return sd_state; 
+}
+
+/* USER CODE BEGIN BeforeGetCardStateSection */
+/* can be used to modify previous code / undefine following code / add code */
+/* USER CODE END BeforeGetCardStateSection */
+
+/**
+  * @brief  Gets the current SD card data status.
+  * @param  None
+  * @retval Data transfer state.
+  *          This value can be one of the following values:
+  *            @arg  SD_TRANSFER_OK: No data transfer is acting
+  *            @arg  SD_TRANSFER_BUSY: Data transfer is acting
+  */
+__weak uint8_t BSP_SD_GetCardState(void)
+{
+  return ((HAL_SD_GetCardState(&hsd1) == HAL_SD_CARD_TRANSFER ) ? SD_TRANSFER_OK : SD_TRANSFER_BUSY);
+}
+
+/**
+  * @brief  Get SD information about specific SD card.
+  * @param  CardInfo: Pointer to HAL_SD_CardInfoTypedef structure
+  * @retval None 
+  */
+__weak void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo)
+{
+  /* Get SD card Information */
+  HAL_SD_GetCardInfo(&hsd1, CardInfo);
+}
+
+/* USER CODE BEGIN BeforeCallBacksSection */
+/* can be used to modify previous code / undefine following code / add code */
+/* USER CODE END BeforeCallBacksSection */
+/**
+  * @brief SD Abort callbacks
+  * @param hsd: SD handle
+  * @retval None
+  */
+__weak void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd)
+{
+  BSP_SD_AbortCallback();
+}
+
+/**
+  * @brief Tx Transfer completed callback
+  * @param hsd: SD handle
+  * @retval None
+  */
+__weak void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd)
+{
+  BSP_SD_WriteCpltCallback();
+}
+
+/**
+  * @brief Rx Transfer completed callback
+  * @param hsd: SD handle
+  * @retval None
+  */
+__weak void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd)
+{
+  BSP_SD_ReadCpltCallback();
+}
+
+/* USER CODE BEGIN CallBacksSection_C */
+/**
+  * @brief BSP SD Abort callback
+  * @retval None
+  */
+__weak void BSP_SD_AbortCallback(void)
+{
+
+}
+
+/**
+  * @brief BSP Tx Transfer completed callback
+  * @retval None
+  */
+__weak void BSP_SD_WriteCpltCallback(void)
+{
+
+}
+
+/**
+  * @brief BSP Rx Transfer completed callback
+  * @retval None
+  */
+__weak void BSP_SD_ReadCpltCallback(void)
+{
+
+}
+/* USER CODE END CallBacksSection_C */
+
+/**
+ * @brief  Detects if SD card is correctly plugged in the memory slot or not.
+ * @param  None
+ * @retval Returns if SD is detected or not
+ */
+__weak uint8_t BSP_SD_IsDetected(void)
+{
+  __IO uint8_t status = SD_PRESENT;
+
+  if (BSP_PlatformIsDetected() == 0x0) 
+  {
+    status = SD_NOT_PRESENT;
+  }
+
+  return status;
+}
+
+/* USER CODE BEGIN AdditionalCode */
+/* user code can be inserted here */
+/* USER CODE END AdditionalCode */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Src/codec.c
@@ -1,0 +1,125 @@
+#include "codec.h"
+#include "main.h"
+#include "gpio.h"
+#include "audiostream.h"
+
+uint16_t i2cDataSize = 2;
+uint8_t myI2cData[2] = {0,0};
+uint32_t I2Ctimeout = 2000;
+
+//Settings for CS4271
+// translated from the datasheet by JS
+
+// 01h mode control 1
+//
+// M1 M0 ratio1 ratio0 m/s dac_dif2 dac_dif1 dac_dif0   // unsure if setting bit selects master means 1
+// for 48k == 0 1 0 0 0 0 0 1    ( ratio bit chosen as 0 0 based on assumption of 256X master clock)
+// == 0x41
+// for 96k == 1 0 0 0 0 0 0 1    ( ratio bit chosen as 0 0 based on assumption of <= 256X master clock)
+// == 0x81
+// for 192k == 1 1 1 0 0 0 0 1   ( ratio bit chosen as 1 0 based on assumption of 256X master clock, choose 0 0 (full word would be 0xc1 instead of 0xe1) instead if using something like 64X)
+// == 0xe1
+
+// 02h DAC control
+// AMUTE, FILT_SEL, DEM1, DEM0, RMP_UP, RMP_DN, INV_A, INV_B
+// 0 0 0 0 1 1 0 0
+// == 0x0c if you want a slow ramp up when the part turns on
+// == 0x00 if you want quick start up (which may click)
+
+// 03h dac volume and mixing
+// (NA) B=A soft zerocross ATAPI3 ATAPI2 ATAPI1 ATAPI0   (B=A makes channel volumes not independent)
+// 0 1 1 1 1 0 0 1  (the last four bits set channel L to go to output A and channel R to go to output B, but this is easily changed with mixing or reversal)
+// == 0x79
+//or without soft ramp for any programmed volume changes // == 0x39
+
+// 04h Volume A
+// MUTE vol6 vol5 vol4 vol3 vol2 vol1 vol0
+// 0 0 0 0 0 0 0 0
+// == 0x00
+//or 0x14 for -20db
+
+// 05h Volume B
+// MUTE vol6 vol5 vol4 vol3 vol2 vol1 vol0
+// 0 0 0 0 0 0 0 0
+// == 0x00
+//or 0x14 for -20db
+
+// 06h ADC control
+// (NA) (NA) Dither16 ADC_DIF MUTEA MUTEB HPFDisableA HPFDisableB
+// 0 0 0 1 0 0 0 0
+// ==0x10
+
+// 07h mode control 2
+// (NA) (NA) (NA) LOOP MUTECA=B FREEZE CPEN PDN
+// for power down version == 0 0 0 0 0 0 1 1
+// == 0x03
+// to send dry ADC input into DAC (it seems this will mute the normal DAC output) == 0 0 0 1 0 0 1 0
+// == 0x12
+// for normal operation == 0 0 0 0 0 0 1 0
+// == 0x02
+
+HAL_StatusTypeDef testVal;
+
+
+volatile int blankCount = 0;
+uint16_t addressCounter = 0;
+
+
+void AudioCodec_init(I2C_HandleTypeDef* hi2c) {
+
+	//pull codec reset pin high to start codec working
+	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_SET);
+
+	HAL_Delay(2);
+	//enable control port and put part in power-down mode while loading registers
+	myI2cData[0] = 0x07;
+	myI2cData[1] = 0x03;
+	testVal = HAL_I2C_Master_Transmit(hi2c, CODEC_I2C_ADDRESS, myI2cData, i2cDataSize, I2Ctimeout);
+	//HAL_Delay(2);
+
+	myI2cData[0] = 0x01;
+	myI2cData[1] = 0x41;
+	testVal = HAL_I2C_Master_Transmit(hi2c, CODEC_I2C_ADDRESS, myI2cData, i2cDataSize, I2Ctimeout);
+
+	//HAL_Delay(1); // might not be necessary
+
+	myI2cData[0] = 0x02;
+	myI2cData[1] = 0x00;
+	testVal = HAL_I2C_Master_Transmit(hi2c, CODEC_I2C_ADDRESS, myI2cData, i2cDataSize, I2Ctimeout);
+
+	//HAL_Delay(1); // might not be necessary
+
+	myI2cData[0] = 0x03;
+	myI2cData[1] = 0x79;
+	testVal = HAL_I2C_Master_Transmit(hi2c, CODEC_I2C_ADDRESS, myI2cData, i2cDataSize, I2Ctimeout);
+
+	//HAL_Delay(1); // might not be necessary
+
+	myI2cData[0] = 0x04;
+	myI2cData[1] = 0x01;
+	testVal = HAL_I2C_Master_Transmit(hi2c, CODEC_I2C_ADDRESS, myI2cData, i2cDataSize, I2Ctimeout);
+
+	//HAL_Delay(1); // might not be necessary
+
+	myI2cData[0] = 0x05;
+	myI2cData[1] = 0x01;
+	testVal = HAL_I2C_Master_Transmit(hi2c, CODEC_I2C_ADDRESS, myI2cData, i2cDataSize, I2Ctimeout);
+
+	//HAL_Delay(1); // might not be necessary
+
+	myI2cData[0] = 0x06;
+	myI2cData[1] = 0x10;
+	testVal = HAL_I2C_Master_Transmit(hi2c, CODEC_I2C_ADDRESS, myI2cData, i2cDataSize, I2Ctimeout);
+
+	//HAL_Delay(1); // might not be necessary
+
+	//turn off power down bit to start things cookin'
+	myI2cData[0] = 0x07;
+	myI2cData[1] = 0x02;
+	HAL_I2C_Master_Transmit(hi2c, CODEC_I2C_ADDRESS, myI2cData, i2cDataSize, I2Ctimeout);
+
+
+	//HAL_Delay(1); // might not be necessary
+	codecReady = 1;
+
+}
--- /dev/null
+++ b/LEAF/Src/debug.c
@@ -1,0 +1,37 @@
+/**
+  ******************************************************************************
+  * File Name          : DEBUG.c
+  * Description        : This file provides code for the configuration
+  *                      of the DEBUG instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "debug.h"
+
+/* USER CODE BEGIN 0 */
+
+/* USER CODE END 0 */
+
+/* DEBUG init function */
+void MX_DEBUG_Init(void)
+{
+
+}
+
+/* USER CODE BEGIN 1 */
+
+/* USER CODE END 1 */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Src/dma.c
@@ -1,0 +1,72 @@
+/**
+  ******************************************************************************
+  * File Name          : dma.c
+  * Description        : This file provides code for the configuration
+  *                      of all the requested memory to memory DMA transfers.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "dma.h"
+
+/* USER CODE BEGIN 0 */
+
+/* USER CODE END 0 */
+
+/*----------------------------------------------------------------------------*/
+/* Configure DMA                                                              */
+/*----------------------------------------------------------------------------*/
+
+/* USER CODE BEGIN 1 */
+
+/* USER CODE END 1 */
+
+/** 
+  * Enable DMA controller clock
+  */
+void MX_DMA_Init(void) 
+{
+
+  /* DMA controller clock enable */
+  __HAL_RCC_DMA1_CLK_ENABLE();
+
+  /* DMA interrupt init */
+  /* DMA1_Stream0_IRQn interrupt configuration */
+  HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 5, 0);
+  HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
+  /* DMA1_Stream1_IRQn interrupt configuration */
+  HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 2, 0);
+  HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
+  /* DMA1_Stream2_IRQn interrupt configuration */
+  HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 2, 0);
+  HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);
+  /* DMAMUX1_OVR_IRQn interrupt configuration */
+  HAL_NVIC_SetPriority(DMAMUX1_OVR_IRQn, 0, 0);
+  HAL_NVIC_EnableIRQ(DMAMUX1_OVR_IRQn);
+
+}
+
+/* USER CODE BEGIN 2 */
+
+/* USER CODE END 2 */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Src/eeprom.c
@@ -1,0 +1,718 @@
+
+
+/** @addtogroup EEPROM_Emulation
+  * @{
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "eeprom.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+
+/* Global variable used to store variable value in read sequence */
+uint16_t DataVar = 0;
+
+/* Virtual address defined by the user: 0xFFFF value is prohibited */
+
+uint16_t VirtAddVarTab[NB_OF_VAR] = {0x5555, 0x6666, 0x7777};
+uint32_t Address = 0;
+/* Private function prototypes -----------------------------------------------*/
+/* Private functions ---------------------------------------------------------*/
+static HAL_StatusTypeDef EE_Format(void);
+static uint16_t EE_FindValidPage(uint8_t Operation);
+static uint16_t EE_VerifyPageFullWriteVariable(uint16_t VirtAddress, uint16_t Data);
+static uint16_t EE_PageTransfer(uint16_t VirtAddress, uint16_t Data);
+static uint16_t EE_VerifyPageFullyErased(uint32_t Address);
+
+/**
+  * @brief  Restore the pages to a known good state in case of page's status
+  *   corruption after a power loss.
+  * @param  None.
+  * @retval - Flash error code: on write Flash error
+  *         - FLASH_COMPLETE: on success
+  */
+
+uint16_t EE_Init(void)
+{
+  uint16_t PageStatus0 = 6, PageStatus1 = 6;
+  uint16_t VarIdx = 0;
+  uint16_t EepromStatus = 0, ReadStatus = 0;
+  int16_t x = -1;
+  HAL_StatusTypeDef  FlashStatus;
+  uint32_t SectorError = 0;
+  FLASH_EraseInitTypeDef pEraseInit;
+  uint32_t valid[8] = {0x0000};
+
+  /* Get Page0 status */
+  PageStatus0 = (*(__IO uint16_t*)PAGE0_BASE_ADDRESS);
+  /* Get Page1 status */
+  PageStatus1 = (*(__IO uint16_t*)PAGE1_BASE_ADDRESS);
+
+  pEraseInit.TypeErase = TYPEERASE_SECTORS;
+  pEraseInit.Banks = FLASH_BANK_2 ;
+  pEraseInit.Sector = PAGE0_ID;
+  pEraseInit.NbSectors = 1;
+  pEraseInit.VoltageRange = VOLTAGE_RANGE;
+
+  /* Check for invalid header states and repair if necessary */
+  switch (PageStatus0)
+  {
+    case ERASED:
+      if (PageStatus1 == VALID_PAGE) /* Page0 erased, Page1 valid */
+      {
+          /* Erase Page0 */
+        if(!EE_VerifyPageFullyErased(PAGE0_BASE_ADDRESS))
+        {
+          FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+          /* If erase operation was failed, a Flash error code is returned */
+          if (FlashStatus != HAL_OK)
+          {
+            return FlashStatus;
+          }
+        }
+      }
+      else if (PageStatus1 == RECEIVE_DATA) /* Page0 erased, Page1 receive */
+      {
+        /* Erase Page0 */
+        if(!EE_VerifyPageFullyErased(PAGE0_BASE_ADDRESS))
+        {
+          FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+          /* If erase operation was failed, a Flash error code is returned */
+          if (FlashStatus != HAL_OK)
+          {
+            return FlashStatus;
+          }
+        }
+        /* Mark Page1 as valid */
+        FlashStatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, PAGE1_BASE_ADDRESS, ((uint32_t)valid));
+
+        /* If program operation was failed, a Flash error code is returned */
+        if (FlashStatus != HAL_OK)
+        {
+          return FlashStatus;
+        }
+      }
+      else /* First EEPROM access (Page0&1 are erased) or invalid state -> format EEPROM */
+      {
+        /* Erase both Page0 and Page1 and set Page0 as valid page */
+        FlashStatus = EE_Format();
+        /* If erase/program operation was failed, a Flash error code is returned */
+        if (FlashStatus != HAL_OK)
+        {
+          return FlashStatus;
+        }
+      }
+      break;
+
+    case RECEIVE_DATA:
+      if (PageStatus1 == VALID_PAGE) /* Page0 receive, Page1 valid */
+      {
+        /* Transfer data from Page1 to Page0 */
+        for (VarIdx = 0; VarIdx < NB_OF_VAR; VarIdx++)
+        {
+          if (( *(__IO uint16_t*)(PAGE0_BASE_ADDRESS + 6)) == VirtAddVarTab[VarIdx])
+          {
+            x = VarIdx;
+          }
+          if (VarIdx != x)
+          {
+            /* Read the last variables' updates */
+            ReadStatus = EE_ReadVariable(VirtAddVarTab[VarIdx], &DataVar);
+            /* In case variable corresponding to the virtual address was found */
+            if (ReadStatus != 0x1)
+            {
+              /* Transfer the variable to the Page0 */
+              EepromStatus = EE_VerifyPageFullWriteVariable(VirtAddVarTab[VarIdx], DataVar);
+              /* If program operation was failed, a Flash error code is returned */
+              if (EepromStatus != HAL_OK)
+              {
+                return EepromStatus;
+              }
+            }
+          }
+        }
+        /* Mark Page0 as valid */
+        FlashStatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, PAGE0_BASE_ADDRESS, ((uint32_t)valid));
+
+        /* If program operation was failed, a Flash error code is returned */
+        if (FlashStatus != HAL_OK)
+        {
+          return FlashStatus;
+        }
+        pEraseInit.Sector = PAGE1_ID;
+        pEraseInit.Banks = FLASH_BANK_2 ;
+        pEraseInit.NbSectors = 1;
+        pEraseInit.VoltageRange = VOLTAGE_RANGE;
+        /* Erase Page1 */
+        if(!EE_VerifyPageFullyErased(PAGE1_BASE_ADDRESS))
+        {
+          FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+          /* If erase operation was failed, a Flash error code is returned */
+          if (FlashStatus != HAL_OK)
+          {
+            return FlashStatus;
+          }
+        }
+      }
+      else if (PageStatus1 == ERASED) /* Page0 receive, Page1 erased */
+      {
+        pEraseInit.Sector = PAGE1_ID;
+        pEraseInit.Banks = FLASH_BANK_1 ;
+        pEraseInit.NbSectors = 1;
+        pEraseInit.VoltageRange = VOLTAGE_RANGE;
+        /* Erase Page1 */
+        if(!EE_VerifyPageFullyErased(PAGE1_BASE_ADDRESS))
+        {
+          FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+          /* If erase operation was failed, a Flash error code is returned */
+          if (FlashStatus != HAL_OK)
+          {
+            return FlashStatus;
+          }
+        }
+        /* Mark Page0 as valid */
+        FlashStatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, PAGE0_BASE_ADDRESS, ((uint32_t)valid));
+        /* If program operation was failed, a Flash error code is returned */
+        if (FlashStatus != HAL_OK)
+        {
+          return FlashStatus;
+        }
+      }
+      else /* Invalid state -> format eeprom */
+      {
+        /* Erase both Page0 and Page1 and set Page0 as valid page */
+        FlashStatus = EE_Format();
+        /* If erase/program operation was failed, a Flash error code is returned */
+        if (FlashStatus != HAL_OK)
+        {
+          return FlashStatus;
+        }
+      }
+      break;
+
+    case VALID_PAGE:
+      if (PageStatus1 == VALID_PAGE) /* Invalid state -> format eeprom */
+      {
+        /* Erase both Page0 and Page1 and set Page0 as valid page */
+        FlashStatus = EE_Format();
+        /* If erase/program operation was failed, a Flash error code is returned */
+        if (FlashStatus != HAL_OK)
+        {
+          return FlashStatus;
+        }
+      }
+      else if (PageStatus1 == ERASED) /* Page0 valid, Page1 erased */
+      {
+        pEraseInit.Sector = PAGE1_ID;
+        pEraseInit.Banks = FLASH_BANK_2 ;
+        pEraseInit.NbSectors = 1;
+        pEraseInit.VoltageRange = VOLTAGE_RANGE;
+        /* Erase Page1 */
+        if(!EE_VerifyPageFullyErased(PAGE1_BASE_ADDRESS))
+        {
+          FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+          /* If erase operation was failed, a Flash error code is returned */
+          if (FlashStatus != HAL_OK)
+          {
+            return FlashStatus;
+          }
+        }
+      }
+      else /* Page0 valid, Page1 receive */
+      {
+        /* Transfer data from Page0 to Page1 */
+        for (VarIdx = 0; VarIdx < NB_OF_VAR; VarIdx++)
+        {
+          if ((*(__IO uint16_t*)(PAGE1_BASE_ADDRESS + 6)) == VirtAddVarTab[VarIdx])
+          {
+            x = VarIdx;
+          }
+          if (VarIdx != x)
+          {
+            /* Read the last variables' updates */
+            ReadStatus = EE_ReadVariable(VirtAddVarTab[VarIdx], &DataVar);
+            /* In case variable corresponding to the virtual address was found */
+            if (ReadStatus != 0x1)
+            {
+              /* Transfer the variable to the Page1 */
+              EepromStatus = EE_VerifyPageFullWriteVariable(VirtAddVarTab[VarIdx], DataVar);
+              /* If program operation was failed, a Flash error code is returned */
+              if (EepromStatus != HAL_OK)
+              {
+                return EepromStatus;
+              }
+            }
+          }
+        }
+        /* Mark Page1 as valid */
+        FlashStatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, PAGE1_BASE_ADDRESS, ((uint32_t)valid));
+
+        /* If program operation was failed, a Flash error code is returned */
+        if (FlashStatus != HAL_OK)
+        {
+          return FlashStatus;
+        }
+        pEraseInit.Sector = PAGE0_ID;
+        pEraseInit.Banks = FLASH_BANK_2 ;
+        pEraseInit.NbSectors = 1;
+        pEraseInit.VoltageRange = VOLTAGE_RANGE;
+        /* Erase Page0 */
+        if(!EE_VerifyPageFullyErased(PAGE0_BASE_ADDRESS))
+        {
+          FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+          /* If erase operation was failed, a Flash error code is returned */
+          if (FlashStatus != HAL_OK)
+          {
+            return FlashStatus;
+          }
+        }
+      }
+      break;
+
+    default:  /* Any other state -> format eeprom */
+      /* Erase both Page0 and Page1 and set Page0 as valid page */
+      FlashStatus = EE_Format();
+      /* If erase/program operation was failed, a Flash error code is returned */
+      if (FlashStatus != HAL_OK)
+      {
+        return FlashStatus;
+      }
+      break;
+  }
+
+  return HAL_OK;
+}
+
+/**
+  * @brief  Verify if specified page is fully erased.
+  * @param  Address: page address
+  *   This parameter can be one of the following values:
+  *     @arg PAGE0_BASE_ADDRESS: Page0 base address
+  *     @arg PAGE1_BASE_ADDRESS: Page1 base address
+  * @retval page fully erased status:
+  *           - 0: if Page not erased
+  *           - 1: if Page erased
+  */
+uint16_t EE_VerifyPageFullyErased(uint32_t Address)
+{
+  uint32_t ReadStatus = 1;
+  uint16_t AddressValue = 0x5555;
+
+  /* Check each active page address starting from end */
+  while (Address <= PAGE0_END_ADDRESS)
+  {
+    /* Get the current location content to be compared with virtual address */
+    AddressValue = (*(__IO uint16_t*)Address);
+
+    /* Compare the read address with the virtual address */
+    if (AddressValue != ERASED)
+    {
+
+      /* In case variable value is read, reset ReadStatus flag */
+      ReadStatus = 0;
+
+      break;
+    }
+    /* Next address location */
+    Address = Address + 4;
+  }
+
+  /* Return ReadStatus value: (0: Page not erased, 1: Sector erased) */
+  return ReadStatus;
+}
+
+/**
+  * @brief  Returns the last stored variable data, if found, which correspond to
+  *   the passed virtual address
+  * @param  VirtAddress: Variable virtual address
+  * @param  Data: Global variable contains the read variable value
+  * @retval Success or error status:
+  *           - 0: if variable was found
+  *           - 1: if the variable was not found
+  *           - NO_VALID_PAGE: if no valid page was found.
+  */
+uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data)
+{
+  uint16_t ValidPage = PAGE0;
+  uint16_t AddressValue = 0x5555, ReadStatus = 1;
+  uint32_t Address = EEPROM_START_ADDRESS, PageStartAddress = EEPROM_START_ADDRESS;
+
+  /* Get active Page for read operation */
+  ValidPage = EE_FindValidPage(READ_FROM_VALID_PAGE);
+
+  /* Check if there is no valid page */
+  if (ValidPage == NO_VALID_PAGE)
+  {
+    return  NO_VALID_PAGE;
+  }
+
+  /* Get the valid Page start Address */
+  PageStartAddress = (uint32_t)(EEPROM_START_ADDRESS + (uint32_t)(ValidPage * PAGE_SIZE));
+
+  /* Get the valid Page end Address */
+  Address = (uint32_t)((EEPROM_START_ADDRESS - 32) + (uint32_t)((1 + ValidPage) * PAGE_SIZE));
+
+  /* Check each active page address starting from end */
+  while (Address > (PageStartAddress + 32))
+  {
+    /* Get the current location content to be compared with virtual address */
+    AddressValue = (*(__IO uint16_t*)Address);
+
+    /* Compare the read address with the virtual address */
+    if (AddressValue == VirtAddress)
+    {
+      /* Get content of Address-2 which is variable value */
+      *Data = (*(__IO uint16_t*)(Address - 32));
+
+      /* In case variable value is read, reset ReadStatus flag */
+      ReadStatus = 0;
+
+      break;
+    }
+    else
+    {
+      /* Next address location */
+      Address = Address - 32;
+    }
+  }
+
+  /* Return ReadStatus value: (0: variable exist, 1: variable doesn't exist) */
+  return ReadStatus;
+}
+
+/**
+  * @brief  Writes/upadtes variable data in EEPROM.
+  * @param  VirtAddress: Variable virtual address
+  * @param  Data: 16 bit data to be written
+  * @retval Success or error status:
+  *           - FLASH_COMPLETE: on success
+  *           - PAGE_FULL: if valid page is full
+  *           - NO_VALID_PAGE: if no valid page was found
+  *           - Flash error code: on write Flash error
+  */
+uint16_t EE_WriteVariable(uint16_t VirtAddress, uint16_t Data)
+{
+  uint16_t Status = 0;
+
+  /* Write the variable virtual address and value in the EEPROM */
+  Status = EE_VerifyPageFullWriteVariable(VirtAddress, Data);
+
+  /* In case the EEPROM active page is full */
+  if (Status == PAGE_FULL)
+  {
+    /* Perform Page transfer */
+    Status = EE_PageTransfer(VirtAddress, Data);
+  }
+
+  /* Return last operation status */
+  return Status;
+}
+
+/**
+  * @brief  Erases PAGE and PAGE1 and writes VALID_PAGE header to PAGE
+  * @param  None
+  * @retval Status of the last operation (Flash write or erase) done during
+  *         EEPROM formating
+  */
+static HAL_StatusTypeDef EE_Format(void)
+{
+  HAL_StatusTypeDef FlashStatus = HAL_OK;
+  uint32_t SectorError = 0;
+  FLASH_EraseInitTypeDef pEraseInit;
+  uint32_t valid[8] = {0x0000};
+
+  pEraseInit.TypeErase = FLASH_TYPEERASE_SECTORS;
+  pEraseInit.Banks = FLASH_BANK_2 ;
+  pEraseInit.Sector = PAGE0_ID;
+  pEraseInit.NbSectors = 1;
+  pEraseInit.VoltageRange = VOLTAGE_RANGE;
+
+  /* Erase Page0 */
+  if(!EE_VerifyPageFullyErased(PAGE0_BASE_ADDRESS))
+  {
+    FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+    /* If erase operation was failed, a Flash error code is returned */
+    if (FlashStatus != HAL_OK)
+    {
+      return FlashStatus;
+    }
+  }
+
+  /* Set Page0 as valid page: Write VALID_PAGE at Page0 base address */
+  FlashStatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, PAGE0_BASE_ADDRESS,((uint32_t)valid));
+
+  /* If program operation was failed, a Flash error code is returned */
+  if (FlashStatus != HAL_OK)
+  {
+    return FlashStatus;
+  }
+
+  pEraseInit.Sector = PAGE1_ID;
+  /* Erase Page1 */
+  if(!EE_VerifyPageFullyErased(PAGE1_BASE_ADDRESS))
+  {
+    FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+    /* If erase operation was failed, a Flash error code is returned */
+    if (FlashStatus != HAL_OK)
+    {
+      return FlashStatus;
+    }
+  }
+
+  return HAL_OK;
+}
+
+/**
+  * @brief  Find valid Page for write or read operation
+  * @param  Operation: operation to achieve on the valid page.
+  *   This parameter can be one of the following values:
+  *     @arg READ_FROM_VALID_PAGE: read operation from valid page
+  *     @arg WRITE_IN_VALID_PAGE: write operation from valid page
+  * @retval Valid page number (PAGE or PAGE1) or NO_VALID_PAGE in case
+  *   of no valid page was found
+  */
+static uint16_t EE_FindValidPage(uint8_t Operation)
+{
+  uint16_t PageStatus0 = 6, PageStatus1 = 6;
+
+  /* Get Page0 actual status */
+  PageStatus0 = (*(__IO uint16_t*)PAGE0_BASE_ADDRESS);
+
+  /* Get Page1 actual status */
+  PageStatus1 = (*(__IO uint16_t*)PAGE1_BASE_ADDRESS);
+
+  /* Write or read operation */
+  switch (Operation)
+  {
+    case WRITE_IN_VALID_PAGE:   /* ---- Write operation ---- */
+      if (PageStatus1 == VALID_PAGE)
+      {
+        /* Page0 receiving data */
+        if (PageStatus0 == RECEIVE_DATA)
+        {
+          return PAGE0;         /* Page0 valid */
+        }
+        else
+        {
+          return PAGE1;         /* Page1 valid */
+        }
+      }
+      else if (PageStatus0 == VALID_PAGE)
+      {
+        /* Page1 receiving data */
+        if (PageStatus1 == RECEIVE_DATA)
+        {
+          return PAGE1;         /* Page1 valid */
+        }
+        else
+        {
+          return PAGE0;         /* Page0 valid */
+        }
+      }
+      else
+      {
+        return NO_VALID_PAGE;   /* No valid Page */
+      }
+
+    case READ_FROM_VALID_PAGE:  /* ---- Read operation ---- */
+      if (PageStatus0 == VALID_PAGE)
+      {
+        return PAGE0;           /* Page0 valid */
+      }
+      else if (PageStatus1 == VALID_PAGE)
+      {
+        return PAGE1;           /* Page1 valid */
+      }
+      else
+      {
+        return NO_VALID_PAGE ;  /* No valid Page */
+      }
+
+    default:
+      return PAGE0;             /* Page0 valid */
+  }
+}
+
+/**
+  * @brief  Verify if active page is full and Writes variable in EEPROM.
+  * @param  VirtAddress: 16 bit virtual address of the variable
+  * @param  Data: 16 bit data to be written as variable value
+  * @retval Success or error status:
+  *           - FLASH_COMPLETE: on success
+  *           - PAGE_FULL: if valid page is full
+  *           - NO_VALID_PAGE: if no valid page was found
+  *           - Flash error code: on write Flash error
+  */
+static uint16_t EE_VerifyPageFullWriteVariable(uint16_t VirtAddress, uint16_t Data)
+{
+  HAL_StatusTypeDef FlashStatus = HAL_OK;
+  uint16_t ValidPage = PAGE0;
+  uint32_t Address = EEPROM_START_ADDRESS, PageEndAddress = EEPROM_START_ADDRESS+PAGE_SIZE;
+
+  uint32_t data32[8] = {Data};
+  uint32_t VirtAddress1[8] = {VirtAddress};
+  /* Get valid Page for write operation */
+  ValidPage = EE_FindValidPage(WRITE_IN_VALID_PAGE);
+
+  /* Check if there is no valid page */
+  if (ValidPage == NO_VALID_PAGE)
+  {
+    return  NO_VALID_PAGE;
+  }
+
+  /* Get the valid Page start Address */
+  Address = (uint32_t)(EEPROM_START_ADDRESS + (uint32_t)(ValidPage * PAGE_SIZE));
+
+  /* Get the valid Page end Address */
+  PageEndAddress = (uint32_t)((EEPROM_START_ADDRESS - 1) + (uint32_t)((ValidPage + 1) * PAGE_SIZE));
+
+  /* Check each active page address starting from begining */
+  while (Address < PageEndAddress)
+  {
+    /* Verify if Address and Address+2 contents are 0xFFFFFFFF */
+    if ((*(__IO uint32_t*)Address) == 0xFFFFFFFF)
+    {
+      /* Set variable data */
+      FlashStatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, Address, ((uint32_t)data32));
+
+      /* If program operation was failed, a Flash error code is returned */
+      if (FlashStatus != HAL_OK)
+      {
+        return FlashStatus;
+      }
+      /* Set variable virtual address */
+     FlashStatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, Address + 32, ((uint32_t)VirtAddress1));
+
+      /* Return program operation status */
+     return FlashStatus;
+    }
+    else
+    {
+      /* Next address location */
+      Address = Address + 64;
+    }
+  }
+
+  /* Return PAGE_FULL in case the valid page is full */
+  return PAGE_FULL;
+}
+
+/**
+  * @brief  Transfers last updated variables data from the full Page to
+  *   an empty one.
+  * @param  VirtAddress: 16 bit virtual address of the variable
+  * @param  Data: 16 bit data to be written as variable value
+  * @retval Success or error status:
+  *           - FLASH_COMPLETE: on success
+  *           - PAGE_FULL: if valid page is full
+  *           - NO_VALID_PAGE: if no valid page was found
+  *           - Flash error code: on write Flash error
+  */
+static uint16_t EE_PageTransfer(uint16_t VirtAddress, uint16_t Data)
+{
+  HAL_StatusTypeDef FlashStatus = HAL_OK;
+  uint32_t NewPageAddress = EEPROM_START_ADDRESS;
+  uint16_t OldPageId=0;
+  uint16_t ValidPage = PAGE0, VarIdx = 0;
+  uint16_t EepromStatus = 0, ReadStatus = 0;
+  uint32_t SectorError = 0;
+  FLASH_EraseInitTypeDef pEraseInit;
+  uint32_t valid[8] = {0x0000};
+  uint32_t receive[8] = {0xEEEE};
+  /* Get active Page for read operation */
+  ValidPage = EE_FindValidPage(READ_FROM_VALID_PAGE);
+
+  if (ValidPage == PAGE1)       /* Page1 valid */
+  {
+    /* New page address where variable will be moved to */
+    NewPageAddress = PAGE0_BASE_ADDRESS;
+
+    /* Old page ID where variable will be taken from */
+    OldPageId = PAGE1_ID;
+  }
+  else if (ValidPage == PAGE0)  /* Page0 valid */
+  {
+    /* New page address  where variable will be moved to */
+    NewPageAddress = PAGE1_BASE_ADDRESS;
+
+    /* Old page ID where variable will be taken from */
+    OldPageId = PAGE0_ID;
+  }
+  else
+  {
+    return NO_VALID_PAGE;       /* No valid Page */
+  }
+
+  /* Set the new Page status to RECEIVE_DATA status */
+
+  FlashStatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, NewPageAddress, ((uint32_t)receive));
+
+  /* If program operation was failed, a Flash error code is returned */
+  if (FlashStatus != HAL_OK)
+  {
+    return FlashStatus;
+  }
+
+  /* Write the variable passed as parameter in the new active page */
+  EepromStatus = EE_VerifyPageFullWriteVariable(VirtAddress, Data);
+  /* If program operation was failed, a Flash error code is returned */
+  if (EepromStatus != HAL_OK)
+  {
+    return EepromStatus;
+  }
+
+  /* Transfer process: transfer variables from old to the new active page */
+  for (VarIdx = 0; VarIdx < NB_OF_VAR; VarIdx++)
+  {
+    if (VirtAddVarTab[VarIdx] != VirtAddress)  /* Check each variable except the one passed as parameter */
+    {
+      /* Read the other last variable updates */
+      ReadStatus = EE_ReadVariable(VirtAddVarTab[VarIdx], &DataVar);
+      /* In case variable corresponding to the virtual address was found */
+      if (ReadStatus != 0x1)
+      {
+        /* Transfer the variable to the new active page */
+        EepromStatus = EE_VerifyPageFullWriteVariable(VirtAddVarTab[VarIdx], DataVar);
+        /* If program operation was failed, a Flash error code is returned */
+        if (EepromStatus != HAL_OK)
+        {
+          return EepromStatus;
+        }
+      }
+    }
+  }
+
+  HAL_FLASH_Unlock();
+
+  /* Clear pending flags (if any) */
+  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |
+                         FLASH_FLAG_PGSERR | FLASH_FLAG_WRPERR);
+
+  pEraseInit.TypeErase = TYPEERASE_SECTORS;
+  pEraseInit.Banks = FLASH_BANK_2 ;
+  pEraseInit.Sector = OldPageId;
+  pEraseInit.NbSectors = 1;
+  pEraseInit.VoltageRange = VOLTAGE_RANGE;
+
+  /* Erase the old Page: Set old Page status to ERASED status */
+  FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+  /* If erase operation was failed, a Flash error code is returned */
+  if (FlashStatus != HAL_OK)
+  {
+    return FlashStatus;
+  }
+
+  /* Set new Page status to VALID_PAGE status */
+  FlashStatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, NewPageAddress, ((uint32_t)valid));
+  /* If program operation was failed, a Flash error code is returned */
+  if (FlashStatus != HAL_OK)
+  {
+    return FlashStatus;
+  }
+
+  /* Return last operation flash status */
+  return FlashStatus;
+}
--- /dev/null
+++ b/LEAF/Src/fatfs.c
@@ -1,0 +1,56 @@
+/**
+  ******************************************************************************
+  * @file   fatfs.c
+  * @brief  Code for fatfs applications
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+
+#include "fatfs.h"
+
+uint8_t retSD;    /* Return value for SD */
+char SDPath[4];   /* SD logical drive path */
+FATFS SDFatFS;    /* File system object for SD logical drive */
+FIL SDFile;       /* File object for SD */
+
+/* USER CODE BEGIN Variables */
+
+/* USER CODE END Variables */    
+
+void MX_FATFS_Init(void) 
+{
+  /*## FatFS: Link the SD driver ###########################*/
+  retSD = FATFS_LinkDriver(&SD_Driver, SDPath);
+
+  /* USER CODE BEGIN Init */
+  /* additional user code for init */     
+  /* USER CODE END Init */
+}
+
+/**
+  * @brief  Gets Time from RTC 
+  * @param  None
+  * @retval Time in DWORD
+  */
+DWORD get_fattime(void)
+{
+  /* USER CODE BEGIN get_fattime */
+  return 0;
+  /* USER CODE END get_fattime */  
+}
+
+/* USER CODE BEGIN Application */
+     
+/* USER CODE END Application */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Src/fatfs_platform.c
@@ -1,0 +1,31 @@
+/**
+  ******************************************************************************
+  * @file           : fatfs_platform.c
+  * @brief          : fatfs_platform source file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+*/
+#include "fatfs_platform.h"
+
+uint8_t	BSP_PlatformIsDetected(void) {
+    uint8_t status = SD_PRESENT;
+    /* Check SD card detect pin */
+    if(HAL_GPIO_ReadPin(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) != GPIO_PIN_RESET)
+    {
+        status = SD_NOT_PRESENT;
+    }
+    /* USER CODE BEGIN 1 */
+    /* user code can be inserted here */
+    /* USER CODE END 1 */ 
+    return status;
+}  
--- /dev/null
+++ b/LEAF/Src/fmc.c
@@ -1,0 +1,281 @@
+/**
+  ******************************************************************************
+  * File Name          : FMC.c
+  * Description        : This file provides code for the configuration
+  *                      of the FMC peripheral.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fmc.h"
+
+/* USER CODE BEGIN 0 */
+
+/* USER CODE END 0 */
+
+SDRAM_HandleTypeDef hsdram1;
+
+/* FMC initialization function */
+void MX_FMC_Init(void)
+{
+  FMC_SDRAM_TimingTypeDef SdramTiming = {0};
+
+  /** Perform the SDRAM1 memory initialization sequence
+  */
+  hsdram1.Instance = FMC_SDRAM_DEVICE;
+  /* hsdram1.Init */
+  hsdram1.Init.SDBank = FMC_SDRAM_BANK1;
+  hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_9;
+  hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_13;
+  hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_16;
+  hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
+  hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_2;
+  hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
+  hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_3;
+  hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;
+  hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0;
+  /* SdramTiming */
+  SdramTiming.LoadToActiveDelay = 2;
+  SdramTiming.ExitSelfRefreshDelay = 6;
+  SdramTiming.SelfRefreshTime = 4;
+  SdramTiming.RowCycleDelay = 6;
+  SdramTiming.WriteRecoveryTime = 2;
+  SdramTiming.RPDelay = 2;
+  SdramTiming.RCDDelay = 2;
+
+  if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
+  {
+    Error_Handler( );
+  }
+
+  HAL_SetFMCMemorySwappingConfig(FMC_SWAPBMAP_SDRAM_SRAM);
+
+}
+
+static uint32_t FMC_Initialized = 0;
+
+static void HAL_FMC_MspInit(void){
+  /* USER CODE BEGIN FMC_MspInit 0 */
+
+  /* USER CODE END FMC_MspInit 0 */
+  GPIO_InitTypeDef GPIO_InitStruct = {0};
+  if (FMC_Initialized) {
+    return;
+  }
+  FMC_Initialized = 1;
+
+  /* Peripheral clock enable */
+  __HAL_RCC_FMC_CLK_ENABLE();
+  
+  /** FMC GPIO Configuration  
+  PF0   ------> FMC_A0
+  PF1   ------> FMC_A1
+  PF2   ------> FMC_A2
+  PF3   ------> FMC_A3
+  PF4   ------> FMC_A4
+  PF5   ------> FMC_A5
+  PC0   ------> FMC_SDNWE
+  PC2_C   ------> FMC_SDNE0
+  PC3_C   ------> FMC_SDCKE0
+  PF11   ------> FMC_SDNRAS
+  PF12   ------> FMC_A6
+  PF13   ------> FMC_A7
+  PF14   ------> FMC_A8
+  PF15   ------> FMC_A9
+  PG0   ------> FMC_A10
+  PG1   ------> FMC_A11
+  PE7   ------> FMC_D4
+  PE8   ------> FMC_D5
+  PE9   ------> FMC_D6
+  PE10   ------> FMC_D7
+  PE11   ------> FMC_D8
+  PE12   ------> FMC_D9
+  PE13   ------> FMC_D10
+  PE14   ------> FMC_D11
+  PE15   ------> FMC_D12
+  PD8   ------> FMC_D13
+  PD9   ------> FMC_D14
+  PD10   ------> FMC_D15
+  PD14   ------> FMC_D0
+  PD15   ------> FMC_D1
+  PG2   ------> FMC_A12
+  PG4   ------> FMC_BA0
+  PG5   ------> FMC_BA1
+  PG8   ------> FMC_SDCLK
+  PD0   ------> FMC_D2
+  PD1   ------> FMC_D3
+  PG15   ------> FMC_SDNCAS
+  PE0   ------> FMC_NBL0
+  PE1   ------> FMC_NBL1
+  */
+  /* GPIO_InitStruct */
+  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 
+                          |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_11|GPIO_PIN_12 
+                          |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
+  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+  GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
+
+  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
+
+  /* GPIO_InitStruct */
+  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3;
+  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+  GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
+
+  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+  /* GPIO_InitStruct */
+  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_4 
+                          |GPIO_PIN_5|GPIO_PIN_8|GPIO_PIN_15;
+  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+  GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
+
+  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
+
+  /* GPIO_InitStruct */
+  GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10 
+                          |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 
+                          |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1;
+  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+  GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
+
+  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
+
+  /* GPIO_InitStruct */
+  GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_14 
+                          |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1;
+  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+  GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
+
+  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+
+  /* USER CODE BEGIN FMC_MspInit 1 */
+
+  /* USER CODE END FMC_MspInit 1 */
+}
+
+void HAL_SDRAM_MspInit(SDRAM_HandleTypeDef* sdramHandle){
+  /* USER CODE BEGIN SDRAM_MspInit 0 */
+
+  /* USER CODE END SDRAM_MspInit 0 */
+  HAL_FMC_MspInit();
+  /* USER CODE BEGIN SDRAM_MspInit 1 */
+
+  /* USER CODE END SDRAM_MspInit 1 */
+}
+
+static uint32_t FMC_DeInitialized = 0;
+
+static void HAL_FMC_MspDeInit(void){
+  /* USER CODE BEGIN FMC_MspDeInit 0 */
+
+  /* USER CODE END FMC_MspDeInit 0 */
+  if (FMC_DeInitialized) {
+    return;
+  }
+  FMC_DeInitialized = 1;
+  /* Peripheral clock enable */
+  __HAL_RCC_FMC_CLK_DISABLE();
+  
+  /** FMC GPIO Configuration  
+  PF0   ------> FMC_A0
+  PF1   ------> FMC_A1
+  PF2   ------> FMC_A2
+  PF3   ------> FMC_A3
+  PF4   ------> FMC_A4
+  PF5   ------> FMC_A5
+  PC0   ------> FMC_SDNWE
+  PC2_C   ------> FMC_SDNE0
+  PC3_C   ------> FMC_SDCKE0
+  PF11   ------> FMC_SDNRAS
+  PF12   ------> FMC_A6
+  PF13   ------> FMC_A7
+  PF14   ------> FMC_A8
+  PF15   ------> FMC_A9
+  PG0   ------> FMC_A10
+  PG1   ------> FMC_A11
+  PE7   ------> FMC_D4
+  PE8   ------> FMC_D5
+  PE9   ------> FMC_D6
+  PE10   ------> FMC_D7
+  PE11   ------> FMC_D8
+  PE12   ------> FMC_D9
+  PE13   ------> FMC_D10
+  PE14   ------> FMC_D11
+  PE15   ------> FMC_D12
+  PD8   ------> FMC_D13
+  PD9   ------> FMC_D14
+  PD10   ------> FMC_D15
+  PD14   ------> FMC_D0
+  PD15   ------> FMC_D1
+  PG2   ------> FMC_A12
+  PG4   ------> FMC_BA0
+  PG5   ------> FMC_BA1
+  PG8   ------> FMC_SDCLK
+  PD0   ------> FMC_D2
+  PD1   ------> FMC_D3
+  PG15   ------> FMC_SDNCAS
+  PE0   ------> FMC_NBL0
+  PE1   ------> FMC_NBL1
+  */
+
+  HAL_GPIO_DeInit(GPIOF, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 
+                          |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_11|GPIO_PIN_12 
+                          |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
+
+  HAL_GPIO_DeInit(GPIOC, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3);
+
+  HAL_GPIO_DeInit(GPIOG, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_4 
+                          |GPIO_PIN_5|GPIO_PIN_8|GPIO_PIN_15);
+
+  HAL_GPIO_DeInit(GPIOE, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10 
+                          |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 
+                          |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1);
+
+  HAL_GPIO_DeInit(GPIOD, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_14 
+                          |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1);
+
+  /* USER CODE BEGIN FMC_MspDeInit 1 */
+
+  /* USER CODE END FMC_MspDeInit 1 */
+}
+
+void HAL_SDRAM_MspDeInit(SDRAM_HandleTypeDef* sdramHandle){
+  /* USER CODE BEGIN SDRAM_MspDeInit 0 */
+
+  /* USER CODE END SDRAM_MspDeInit 0 */
+  HAL_FMC_MspDeInit();
+  /* USER CODE BEGIN SDRAM_MspDeInit 1 */
+
+  /* USER CODE END SDRAM_MspDeInit 1 */
+}
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Src/gfx.c
@@ -1,0 +1,983 @@
+/*
+ * gfx.c
+ *  a C port of the Adafruit GFX library
+ *  Created on: Jul 8, 2018
+ *      Author: jeffsnyder
+ */
+
+
+/*
+This is the core graphics library for all our displays, providing a common
+set of graphics primitives (points, lines, circles, etc.).  It needs to be
+paired with a hardware-specific library for each display device we carry
+(to handle the lower-level functions).
+
+Adafruit invests time and resources providing this open source code, please
+support Adafruit & open-source hardware by purchasing products from Adafruit!
+
+Copyright (c) 2013 Adafruit Industries.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+- Redistributions of source code must retain the above copyright notice,
+  this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "stm32h7xx_hal.h"
+#include "gfx.h"
+#include "gfx_font.c"
+#include "main.h"
+
+// Many (but maybe not all) non-AVR board installs define macros
+// for compatibility with existing PROGMEM-reading AVR code.
+// Do our own checks and defines here for good measure...
+
+#ifndef pgm_read_byte
+ #define pgm_read_byte(addr) (*(const unsigned char *)(addr))
+#endif
+#ifndef pgm_read_word
+ #define pgm_read_word(addr) (*(const unsigned short *)(addr))
+#endif
+#ifndef pgm_read_dword
+ #define pgm_read_dword(addr) (*(const unsigned long *)(addr))
+#endif
+
+// Pointers are a peculiar case...typically 16-bit on AVR boards,
+// 32 bits elsewhere.  Try to accommodate both...
+
+
+ #define pgm_read_pointer(addr) ((void *)pgm_read_dword(addr))
+
+
+#ifndef min
+#define min(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
+#ifndef _swap_int16_t
+#define _swap_int16_t(a, b) { int16_t t = a; a = b; b = t; }
+#endif
+
+void GFXinit(GFX* myGfx, int16_t w, int16_t h)
+{
+	myGfx->WIDTH = w;
+	myGfx->HEIGHT = h;
+	myGfx->_width    = w;
+	myGfx->_height   = h;
+	myGfx->rotation  = 0;
+	myGfx->cursor_y  = 0;
+	myGfx->cursor_x = 0;
+	myGfx->textsize  = 1;
+	myGfx->textcolor = 0xFFFF;
+	myGfx->textbgcolor = 0xFFFF;
+	myGfx->wrap      = 1;
+	myGfx->_cp437    = 0;
+	myGfx->gfxFont   = NULL;
+}
+
+// Bresenham's algorithm - thx wikpedia
+void GFXwriteLine(GFX* myGFX, int16_t x0, int16_t y0, int16_t x1, int16_t y1,
+        uint16_t color) {
+    int16_t steep = abs(y1 - y0) > abs(x1 - x0);
+    if (steep) {
+        _swap_int16_t(x0, y0);
+        _swap_int16_t(x1, y1);
+    }
+
+    if (x0 > x1) {
+        _swap_int16_t(x0, x1);
+        _swap_int16_t(y0, y1);
+    }
+
+    int16_t dx, dy;
+    dx = x1 - x0;
+    dy = abs(y1 - y0);
+
+    int16_t err = dx / 2;
+    int16_t ystep;
+
+    if (y0 < y1) {
+        ystep = 1;
+    } else {
+        ystep = -1;
+    }
+
+    for (; x0<=x1; x0++) {
+        if (steep) {
+        	GFXwritePixel(myGFX, y0, x0, color);
+        } else {
+        	GFXwritePixel(myGFX, x0, y0, color);
+        }
+        err -= dy;
+        if (err < 0) {
+            y0 += ystep;
+            err += dx;
+        }
+    }
+}
+
+void GFXstartWrite(GFX* myGFX){
+    // Overwrite in subclasses if desired!
+}
+
+// the most basic function, set a single pixel
+void GFXdrawPixel(GFX* myGFX, int16_t x, int16_t y, uint16_t color) {
+  if ((x < 0) || (x >= myGFX->_width) || (y < 0) || (y >= myGFX->_height))
+    return;
+
+  // check rotation, move pixel around if necessary
+  switch (GFXgetRotation(myGFX)) {
+  case 1:
+    _swap_int16_t(x, y);
+    x = myGFX->WIDTH - x - 1;
+    break;
+  case 2:
+    x = myGFX->WIDTH - x - 1;
+    y = myGFX->HEIGHT - y - 1;
+    break;
+  case 3:
+	_swap_int16_t(x, y);
+    y = myGFX->HEIGHT - y - 1;
+    break;
+  }
+
+  // x is which column
+    switch (color)
+    {
+      case WHITE:   buffer[x+ (y/8)*myGFX->WIDTH] |=  (1 << (y&7)); break;
+      case BLACK:   buffer[x+ (y/8)*myGFX->WIDTH] &= ~(1 << (y&7)); break;
+      case INVERSE: buffer[x+ (y/8)*myGFX->WIDTH] ^=  (1 << (y&7)); break;
+    }
+
+}
+
+void GFXwritePixel(GFX* myGFX,int16_t x, int16_t y, uint16_t color){
+    // Overwrite in subclasses if startWrite is defined!
+    GFXdrawPixel(myGFX, x, y, color);
+}
+
+// (x,y) is topmost point; if unsure, calling function
+// should sort endpoints or call writeLine() instead
+void GFXwriteFastVLine(GFX* myGFX,int16_t x, int16_t y,
+        int16_t h, uint16_t color) {
+    // Overwrite in subclasses if startWrite is defined!
+    // Can be just writeLine(x, y, x, y+h-1, color);
+    // or writeFillRect(x, y, 1, h, color);
+    GFXdrawFastVLine(myGFX, x, y, h, color);
+}
+
+// (x,y) is leftmost point; if unsure, calling function
+// should sort endpoints or call writeLine() instead
+void GFXwriteFastHLine(GFX* myGFX, int16_t x, int16_t y,
+        int16_t w, uint16_t color) {
+    // Overwrite in subclasses if startWrite is defined!
+    // Example: writeLine(x, y, x+w-1, y, color);
+    // or writeFillRect(x, y, w, 1, color);
+    GFXdrawFastHLine(myGFX,x, y, w, color);
+}
+
+void GFXwriteFillRect(GFX* myGFX,int16_t x, int16_t y, int16_t w, int16_t h,
+        uint16_t color) {
+    // Overwrite in subclasses if desired!
+    GFXfillRect(myGFX,x,y,w,h,color);
+}
+
+void GFXendWrite(GFX* myGFX){
+    // Overwrite in subclasses if startWrite is defined!
+}
+
+// (x,y) is topmost point; if unsure, calling function
+// should sort endpoints or call drawLine() instead
+void GFXdrawFastVLine(GFX* myGFX,int16_t x, int16_t y,
+        int16_t h, uint16_t color) {
+    // Update in subclasses if desired!
+    GFXwriteLine(myGFX,x, y, x, y+h-1, color);
+}
+
+// (x,y) is leftmost point; if unsure, calling function
+// should sort endpoints or call drawLine() instead
+void GFXdrawFastHLine(GFX* myGFX,int16_t x, int16_t y,
+        int16_t w, uint16_t color) {
+    // Update in subclasses if desired!
+    GFXwriteLine(myGFX,x, y, x+w-1, y, color);
+}
+
+void GFXfillRect(GFX* myGFX,int16_t x, int16_t y, int16_t w, int16_t h,
+        uint16_t color) {
+    // Update in subclasses if desired!
+    for (int16_t i=x; i<x+w; i++) {
+        GFXwriteFastVLine(myGFX,i, y, h, color);
+    }
+}
+
+void GFXfillScreen(GFX* myGFX,uint16_t color) {
+    // Update in subclasses if desired!
+    GFXfillRect(myGFX,0, 0, myGFX->_width, myGFX->_height, color);
+}
+
+void GFXdrawLine(GFX* myGFX,int16_t x0, int16_t y0, int16_t x1, int16_t y1,
+        uint16_t color) {
+    // Update in subclasses if desired!
+    if(x0 == x1){
+        if(y0 > y1) _swap_int16_t(y0, y1);
+        GFXdrawFastVLine(myGFX,x0, y0, y1 - y0 + 1, color);
+    } else if(y0 == y1){
+        if(x0 > x1) _swap_int16_t(x0, x1);
+        GFXdrawFastHLine(myGFX,x0, y0, x1 - x0 + 1, color);
+    } else {
+        GFXwriteLine(myGFX,x0, y0, x1, y1, color);
+    }
+}
+
+// Draw a circle outline
+void GFXdrawCircle(GFX* myGFX,int16_t x0, int16_t y0, int16_t r,
+        uint16_t color) {
+    int16_t f = 1 - r;
+    int16_t ddF_x = 1;
+    int16_t ddF_y = -2 * r;
+    int16_t x = 0;
+    int16_t y = r;
+
+    GFXwritePixel(myGFX,x0  , y0+r, color);
+    GFXwritePixel(myGFX,x0  , y0-r, color);
+    GFXwritePixel(myGFX,x0+r, y0  , color);
+    GFXwritePixel(myGFX,x0-r, y0  , color);
+
+    while (x<y) {
+        if (f >= 0) {
+            y--;
+            ddF_y += 2;
+            f += ddF_y;
+        }
+        x++;
+        ddF_x += 2;
+        f += ddF_x;
+
+        GFXwritePixel(myGFX,x0 + x, y0 + y, color);
+        GFXwritePixel(myGFX,x0 - x, y0 + y, color);
+        GFXwritePixel(myGFX,x0 + x, y0 - y, color);
+        GFXwritePixel(myGFX,x0 - x, y0 - y, color);
+        GFXwritePixel(myGFX,x0 + y, y0 + x, color);
+        GFXwritePixel(myGFX,x0 - y, y0 + x, color);
+        GFXwritePixel(myGFX,x0 + y, y0 - x, color);
+        GFXwritePixel(myGFX,x0 - y, y0 - x, color);
+    }
+
+}
+
+void GFXdrawCircleHelper(GFX* myGFX,int16_t x0, int16_t y0,
+        int16_t r, uint8_t cornername, uint16_t color) {
+    int16_t f     = 1 - r;
+    int16_t ddF_x = 1;
+    int16_t ddF_y = -2 * r;
+    int16_t x     = 0;
+    int16_t y     = r;
+
+    while (x<y) {
+        if (f >= 0) {
+            y--;
+            ddF_y += 2;
+            f     += ddF_y;
+        }
+        x++;
+        ddF_x += 2;
+        f     += ddF_x;
+        if (cornername & 0x4) {
+            GFXwritePixel(myGFX, x0 + x, y0 + y, color);
+            GFXwritePixel(myGFX, x0 + y, y0 + x, color);
+        }
+        if (cornername & 0x2) {
+        	GFXwritePixel(myGFX, x0 + x, y0 - y, color);
+        	GFXwritePixel(myGFX, x0 + y, y0 - x, color);
+        }
+        if (cornername & 0x8) {
+        	GFXwritePixel(myGFX, x0 - y, y0 + x, color);
+        	GFXwritePixel(myGFX, x0 - x, y0 + y, color);
+        }
+        if (cornername & 0x1) {
+        	GFXwritePixel(myGFX, x0 - y, y0 - x, color);
+        	GFXwritePixel(myGFX, x0 - x, y0 - y, color);
+        }
+    }
+}
+
+void GFXfillCircle(GFX* myGFX, int16_t x0, int16_t y0, int16_t r,
+        uint16_t color) {
+
+    GFXwriteFastVLine(myGFX, x0, y0-r, 2*r+1, color);
+    GFXfillCircleHelper(myGFX, x0, y0, r, 3, 0, color);
+
+}
+
+// Used to do circles and roundrects
+void GFXfillCircleHelper(GFX* myGFX, int16_t x0, int16_t y0, int16_t r,
+        uint8_t cornername, int16_t delta, uint16_t color) {
+
+    int16_t f     = 1 - r;
+    int16_t ddF_x = 1;
+    int16_t ddF_y = -2 * r;
+    int16_t x     = 0;
+    int16_t y     = r;
+
+    while (x<y) {
+        if (f >= 0) {
+            y--;
+            ddF_y += 2;
+            f     += ddF_y;
+        }
+        x++;
+        ddF_x += 2;
+        f     += ddF_x;
+
+        if (cornername & 0x1) {
+            GFXwriteFastVLine(myGFX, x0+x, y0-y, 2*y+1+delta, color);
+            GFXwriteFastVLine(myGFX, x0+y, y0-x, 2*x+1+delta, color);
+        }
+        if (cornername & 0x2) {
+        	GFXwriteFastVLine(myGFX, x0-x, y0-y, 2*y+1+delta, color);
+        	GFXwriteFastVLine(myGFX, x0-y, y0-x, 2*x+1+delta, color);
+        }
+    }
+}
+
+// Draw a rectangle
+void GFXdrawRect(GFX* myGFX, int16_t x, int16_t y, int16_t w, int16_t h,
+        uint16_t color) {
+
+    GFXwriteFastHLine(myGFX, x, y, w, color);
+    GFXwriteFastHLine(myGFX, x, y+h-1, w, color);
+    GFXwriteFastVLine(myGFX, x, y, h, color);
+    GFXwriteFastVLine(myGFX, x+w-1, y, h, color);
+
+}
+
+// Draw a rounded rectangle
+void GFXdrawRoundRect(GFX* myGFX, int16_t x, int16_t y, int16_t w,
+        int16_t h, int16_t r, uint16_t color) {
+    // smarter version
+    GFXwriteFastHLine(myGFX, x+r  , y    , w-2*r, color); // Top
+    GFXwriteFastHLine(myGFX, x+r  , y+h-1, w-2*r, color); // Bottom
+    GFXwriteFastVLine(myGFX, x    , y+r  , h-2*r, color); // Left
+    GFXwriteFastVLine(myGFX, x+w-1, y+r  , h-2*r, color); // Right
+    // draw four corners
+    GFXdrawCircleHelper(myGFX, x+r    , y+r    , r, 1, color);
+    GFXdrawCircleHelper(myGFX, x+w-r-1, y+r    , r, 2, color);
+    GFXdrawCircleHelper(myGFX, x+w-r-1, y+h-r-1, r, 4, color);
+    GFXdrawCircleHelper(myGFX, x+r    , y+h-r-1, r, 8, color);
+
+}
+
+// Fill a rounded rectangle
+void GFXfillRoundRect(GFX* myGFX, int16_t x, int16_t y, int16_t w,
+        int16_t h, int16_t r, uint16_t color) {
+    // smarter version
+    GFXwriteFillRect(myGFX, x+r, y, w-2*r, h, color);
+    // draw four corners
+    GFXfillCircleHelper(myGFX, x+w-r-1, y+r, r, 1, h-2*r-1, color);
+    GFXfillCircleHelper(myGFX, x+r    , y+r, r, 2, h-2*r-1, color);
+
+}
+
+// Draw a triangle
+void GFXdrawTriangle(GFX* myGFX, int16_t x0, int16_t y0,
+        int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color) {
+    GFXdrawLine(myGFX, x0, y0, x1, y1, color);
+    GFXdrawLine(myGFX, x1, y1, x2, y2, color);
+    GFXdrawLine(myGFX, x2, y2, x0, y0, color);
+}
+
+// Fill a triangle
+void GFXfillTriangle(GFX* myGFX, int16_t x0, int16_t y0,
+        int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color) {
+
+    int16_t a, b, y, last;
+
+    // Sort coordinates by Y order (y2 >= y1 >= y0)
+    if (y0 > y1) {
+        _swap_int16_t(y0, y1); _swap_int16_t(x0, x1);
+    }
+    if (y1 > y2) {
+        _swap_int16_t(y2, y1); _swap_int16_t(x2, x1);
+    }
+    if (y0 > y1) {
+        _swap_int16_t(y0, y1); _swap_int16_t(x0, x1);
+    }
+
+
+    if(y0 == y2) { // Handle awkward all-on-same-line case as its own thing
+        a = b = x0;
+        if(x1 < a)      a = x1;
+        else if(x1 > b) b = x1;
+        if(x2 < a)      a = x2;
+        else if(x2 > b) b = x2;
+        GFXwriteFastHLine(myGFX, a, y0, b-a+1, color);
+
+        return;
+    }
+
+    int16_t
+    dx01 = x1 - x0,
+    dy01 = y1 - y0,
+    dx02 = x2 - x0,
+    dy02 = y2 - y0,
+    dx12 = x2 - x1,
+    dy12 = y2 - y1;
+    int32_t
+    sa   = 0,
+    sb   = 0;
+
+    // For upper part of triangle, find scanline crossings for segments
+    // 0-1 and 0-2.  If y1=y2 (flat-bottomed triangle), the scanline y1
+    // is included here (and second loop will be skipped, avoiding a /0
+    // error there), otherwise scanline y1 is skipped here and handled
+    // in the second loop...which also avoids a /0 error here if y0=y1
+    // (flat-topped triangle).
+    if(y1 == y2) last = y1;   // Include y1 scanline
+    else         last = y1-1; // Skip it
+
+    for(y=y0; y<=last; y++) {
+        a   = x0 + sa / dy01;
+        b   = x0 + sb / dy02;
+        sa += dx01;
+        sb += dx02;
+        /* longhand:
+        a = x0 + (x1 - x0) * (y - y0) / (y1 - y0);
+        b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);
+        */
+        if(a > b) _swap_int16_t(a,b);
+        GFXwriteFastHLine(myGFX,a, y, b-a+1, color);
+    }
+
+    // For lower part of triangle, find scanline crossings for segments
+    // 0-2 and 1-2.  This loop is skipped if y1=y2.
+    sa = dx12 * (y - y1);
+    sb = dx02 * (y - y0);
+    for(; y<=y2; y++) {
+        a   = x1 + sa / dy12;
+        b   = x0 + sb / dy02;
+        sa += dx12;
+        sb += dx02;
+        /* longhand:
+        a = x1 + (x2 - x1) * (y - y1) / (y2 - y1);
+        b = x0 + (x2 - x0) * (y - y0) / (y2 - y0);
+        */
+        if(a > b) _swap_int16_t(a,b);
+        GFXwriteFastHLine(myGFX, a, y, b-a+1, color);
+    }
+
+}
+
+// BITMAP / XBITMAP / GRAYSCALE / RGB BITMAP FUNCTIONS ---------------------
+
+
+
+// Draw a RAM-resident 1-bit image at the specified (x,y) position,
+// using the specified foreground (for set bits) and background (unset
+// bits) colors.
+void GFXdrawBitmap(GFX* myGFX, int16_t x, int16_t y,
+  uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg) {
+
+    int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte
+    uint8_t byte = 0;
+
+    startWrite();
+    for(int16_t j=0; j<h; j++, y++) {
+        for(int16_t i=0; i<w; i++ ) {
+            if(i & 7) byte <<= 1;
+            else      byte   = bitmap[j * byteWidth + i / 8];
+            GFXwritePixel(myGFX, x+i, y, (byte & 0x80) ? color : bg);
+        }
+    }
+    endWrite();
+}
+
+
+
+// TEXT- AND CHARACTER-HANDLING FUNCTIONS ----------------------------------
+
+// Draw a character
+void GFXdrawChar(GFX* myGFX, int16_t x, int16_t y, unsigned char c,
+  uint16_t color, uint16_t bg, uint8_t size) {
+
+    if(!myGFX->gfxFont) { // 'Classic' built-in font
+
+        if((x >= myGFX->_width)            || // Clip right
+           (y >= myGFX->_height)           || // Clip bottom
+           ((x + 6 * size - 1) < 0) || // Clip left
+           ((y + 8 * size - 1) < 0))   // Clip top
+            return;
+
+        if(!myGFX->_cp437 && (c >= 176)) c++; // Handle 'classic' charset behavior
+
+
+        for(int8_t i=0; i<5; i++ ) { // Char bitmap = 5 columns
+            uint8_t line = pgm_read_byte(&standardGFXfont[c * 5 + i]);
+            for(int8_t j=0; j<8; j++, line >>= 1) {
+                if(line & 1) {
+                    if(size == 1)
+                        GFXwritePixel(myGFX, x+i, y+j, color);
+                    else
+                        GFXwriteFillRect(myGFX, x+i*size, y+j*size, size, size, color);
+                } else if(bg != color) {
+                    if(size == 1)
+                        GFXwritePixel(myGFX, x+i, y+j, bg);
+                    else
+                        GFXwriteFillRect(myGFX, x+i*size, y+j*size, size, size, bg);
+                }
+            }
+        }
+        if(bg != color) { // If opaque, draw vertical line for last column
+            if(size == 1) GFXwriteFastVLine(myGFX, x+5, y, 8, bg);
+            else          GFXwriteFillRect(myGFX, x+5*size, y, size, 8*size, bg);
+        }
+
+
+    } else { // Custom font
+
+        // Character is assumed previously filtered by write() to eliminate
+        // newlines, returns, non-printable characters, etc.  Calling
+        // drawChar() directly with 'bad' characters of font may cause mayhem!
+
+        c -= (uint8_t)pgm_read_byte(&myGFX->gfxFont->first);
+        GFXglyph *glyph  = &(((GFXglyph *)pgm_read_pointer(&myGFX->gfxFont->glyph))[c]);
+        uint8_t  *bitmap = (uint8_t *)pgm_read_pointer(&myGFX->gfxFont->bitmap);
+
+        uint16_t bo = pgm_read_word(&glyph->bitmapOffset);
+        uint8_t  w  = pgm_read_byte(&glyph->width),
+                 h  = pgm_read_byte(&glyph->height);
+        int8_t   xo = pgm_read_byte(&glyph->xOffset),
+                 yo = pgm_read_byte(&glyph->yOffset);
+        uint8_t  xx, yy, bits = 0, bit = 0;
+        int16_t  xo16 = 0, yo16 = 0;
+
+        if(size > 1) {
+            xo16 = xo;
+            yo16 = yo;
+        }
+
+        // Todo: Add character clipping here
+
+        // NOTE: THERE IS NO 'BACKGROUND' COLOR OPTION ON CUSTOM FONTS.
+        // THIS IS ON PURPOSE AND BY DESIGN.  The background color feature
+        // has typically been used with the 'classic' font to overwrite old
+        // screen contents with new data.  This ONLY works because the
+        // characters are a uniform size; it's not a sensible thing to do with
+        // proportionally-spaced fonts with glyphs of varying sizes (and that
+        // may overlap).  To replace previously-drawn text when using a custom
+        // font, use the getTextBounds() function to determine the smallest
+        // rectangle encompassing a string, erase the area with fillRect(),
+        // then draw new text.  This WILL infortunately 'blink' the text, but
+        // is unavoidable.  Drawing 'background' pixels will NOT fix this,
+        // only creates a new set of problems.  Have an idea to work around
+        // this (a canvas object type for MCUs that can afford the RAM and
+        // displays supporting setAddrWindow() and pushColors()), but haven't
+        // implemented this yet.
+
+
+        for(yy=0; yy<h; yy++) {
+            for(xx=0; xx<w; xx++) {
+                if(!(bit++ & 7)) {
+                    bits = pgm_read_byte(&bitmap[bo++]);
+                }
+                if(bits & 0x80) {
+                    if(size == 1) {
+                        GFXwritePixel(myGFX, x+xo+xx, y+yo+yy, color);
+                    } else {
+                        GFXwriteFillRect(myGFX, x+(xo16+xx)*size, y+(yo16+yy)*size,
+                          size, size, color);
+                    }
+                }
+                bits <<= 1;
+            }
+        }
+
+
+    } // End classic vs custom font
+}
+
+
+void GFXwrite(GFX* myGFX, uint8_t c) {
+
+    if(!myGFX->gfxFont) { // 'Classic' built-in font
+
+        if(c == '\n') {                        // Newline?
+        	myGFX->cursor_x  = 0;                     // Reset x to zero,
+        	myGFX->cursor_y += myGFX->textsize * 8;          // advance y one line
+        } else if(c != '\r') {                 // Ignore carriage returns
+            if(myGFX->wrap && ((myGFX->cursor_x + myGFX->textsize * 6) > myGFX->_width)) { // Off right?
+            	myGFX->cursor_x  = 0;                 // Reset x to zero,
+            	myGFX->cursor_y += myGFX->textsize * 8;      // advance y one line
+            }
+            GFXdrawChar(myGFX, myGFX->cursor_x, myGFX->cursor_y, c, myGFX->textcolor, myGFX->textbgcolor, myGFX->textsize);
+            myGFX->cursor_x += myGFX->textsize * 6;          // Advance x one char
+        }
+
+    } else { // Custom font
+
+        if(c == '\n') {
+        	myGFX->cursor_x  = 0;
+        	myGFX->cursor_y += (int16_t)myGFX->textsize *
+                        (uint8_t)pgm_read_byte(&myGFX->gfxFont->yAdvance);
+        } else if(c != '\r') {
+            uint8_t first = pgm_read_byte(&myGFX->gfxFont->first);
+            if((c >= first) && (c <= (uint8_t)pgm_read_byte(&myGFX->gfxFont->last))) {
+                GFXglyph *glyph = &(((GFXglyph *)pgm_read_pointer(
+                  &myGFX->gfxFont->glyph))[c - first]);
+                uint8_t   w     = pgm_read_byte(&glyph->width),
+                          h     = pgm_read_byte(&glyph->height);
+                if((w > 0) && (h > 0)) { // Is there an associated bitmap?
+                    int16_t xo = (int8_t)pgm_read_byte(&glyph->xOffset); // sic
+                    if(myGFX->wrap && ((myGFX->cursor_x + myGFX->textsize * (xo + w)) > myGFX->_width)) {
+                    	myGFX->cursor_x  = 0;
+                    	myGFX->cursor_y += (int16_t)myGFX->textsize *
+                          (uint8_t)pgm_read_byte(&myGFX->gfxFont->yAdvance);
+                    }
+                    GFXdrawChar(myGFX, myGFX->cursor_x, myGFX->cursor_y, c, myGFX->textcolor, myGFX->textbgcolor, myGFX->textsize);
+                }
+                myGFX->cursor_x += (uint8_t)pgm_read_byte(&glyph->xAdvance) * (int16_t)myGFX->textsize;
+            }
+        }
+
+    }
+
+}
+
+void GFXsetCursor(GFX* myGFX, int16_t x, int16_t y) {
+	myGFX->cursor_x = x;
+	myGFX->cursor_y = y;
+}
+
+int16_t GFXgetCursorX(GFX* myGFX)
+{
+    return myGFX->cursor_x;
+}
+
+int16_t GFXgetCursorY(GFX* myGFX)
+{
+    return myGFX->cursor_y;
+}
+
+void GFXsetTextSize(GFX* myGFX, uint8_t s) {
+	myGFX->textsize = (s > 0) ? s : 1;
+}
+
+void GFXsetTextColor(GFX* myGFX, uint16_t c, uint16_t b) {
+	myGFX->textcolor   = c;
+	myGFX->textbgcolor = b;
+}
+
+void GFXsetTextWrap(GFX* myGFX, uint8_t w) {
+	myGFX->wrap = w;
+}
+
+uint8_t GFXgetRotation(GFX* myGFX)  {
+    return myGFX->rotation;
+}
+
+void GFXsetRotation(GFX* myGFX, uint8_t x) {
+	myGFX->rotation = (x & 3);
+    switch(myGFX->rotation) {
+        case 0:
+        case 2:
+        	myGFX->_width  = myGFX->WIDTH;
+        	myGFX->_height = myGFX->HEIGHT;
+            break;
+        case 1:
+        case 3:
+        	myGFX->_width  = myGFX->HEIGHT;
+        	myGFX->_height = myGFX->WIDTH;
+            break;
+    }
+}
+
+// Enable (or disable) Code Page 437-compatible charset.
+// There was an error in glcdfont.c for the longest time -- one character
+// (#176, the 'light shade' block) was missing -- this threw off the index
+// of every character that followed it.  But a TON of code has been written
+// with the erroneous character indices.  By default, the library uses the
+// original 'wrong' behavior and old sketches will still work.  Pass 'true'
+// to this function to use correct CP437 character values in your code.
+void GFXcp437(GFX* myGFX, uint8_t x) {
+	myGFX->_cp437 = x;
+}
+
+void GFXsetFont(GFX* myGFX, const GFXfont *f) {
+    if(f) {            // Font struct pointer passed in?
+        if(!myGFX->gfxFont) { // And no current font struct?
+            // Switching from classic to new font behavior.
+            // Move cursor pos down 6 pixels so it's on baseline.
+        	myGFX->cursor_y += 6;
+        }
+    } else if(myGFX->gfxFont) { // NULL passed.  Current font struct defined?
+        // Switching from new to classic font behavior.
+        // Move cursor pos up 6 pixels so it's at top-left of char.
+    	myGFX->cursor_y -= 6;
+    }
+    myGFX->gfxFont = (GFXfont *)f;
+}
+
+// Broke this out as it's used by both the PROGMEM- and RAM-resident
+// getTextBounds() functions.
+void GFXcharBounds(GFX* myGFX, char c, int16_t *x, int16_t *y,
+  int16_t *minx, int16_t *miny, int16_t *maxx, int16_t *maxy) {
+
+    if(myGFX->gfxFont) {
+
+        if(c == '\n') { // Newline?
+            *x  = 0;    // Reset x to zero, advance y by one line
+            *y += myGFX->textsize * (uint8_t)pgm_read_byte(&myGFX->gfxFont->yAdvance);
+        } else if(c != '\r') { // Not a carriage return; is normal char
+            uint8_t first = pgm_read_byte(&myGFX->gfxFont->first),
+                    last  = pgm_read_byte(&myGFX->gfxFont->last);
+            if((c >= first) && (c <= last)) { // Char present in this font?
+                GFXglyph *glyph = &(((GFXglyph *)pgm_read_pointer(
+                  &myGFX->gfxFont->glyph))[c - first]);
+                uint8_t gw = pgm_read_byte(&glyph->width),
+                        gh = pgm_read_byte(&glyph->height),
+                        xa = pgm_read_byte(&glyph->xAdvance);
+                int8_t  xo = pgm_read_byte(&glyph->xOffset),
+                        yo = pgm_read_byte(&glyph->yOffset);
+                if(myGFX->wrap && ((*x+(((int16_t)xo+gw)*myGFX->textsize)) > myGFX->_width)) {
+                    *x  = 0; // Reset x to zero, advance y by one line
+                    *y += myGFX->textsize * (uint8_t)pgm_read_byte(&myGFX->gfxFont->yAdvance);
+                }
+                int16_t ts = (int16_t)myGFX->textsize,
+                        x1 = *x + xo * ts,
+                        y1 = *y + yo * ts,
+                        x2 = x1 + gw * ts - 1,
+                        y2 = y1 + gh * ts - 1;
+                if(x1 < *minx) *minx = x1;
+                if(y1 < *miny) *miny = y1;
+                if(x2 > *maxx) *maxx = x2;
+                if(y2 > *maxy) *maxy = y2;
+                *x += xa * ts;
+            }
+        }
+
+    } else { // Default font
+
+        if(c == '\n') {                     // Newline?
+            *x  = 0;                        // Reset x to zero,
+            *y += myGFX->textsize * 8;             // advance y one line
+            // min/max x/y unchaged -- that waits for next 'normal' character
+        } else if(c != '\r') {  // Normal char; ignore carriage returns
+            if(myGFX->wrap && ((*x + myGFX->textsize * 6) > myGFX->_width)) { // Off right?
+                *x  = 0;                    // Reset x to zero,
+                *y += myGFX->textsize * 8;         // advance y one line
+            }
+            int x2 = *x + myGFX->textsize * 6 - 1, // Lower-right pixel of char
+                y2 = *y + myGFX->textsize * 8 - 1;
+            if(x2 > *maxx) *maxx = x2;      // Track max x, y
+            if(y2 > *maxy) *maxy = y2;
+            if(*x < *minx) *minx = *x;      // Track min x, y
+            if(*y < *miny) *miny = *y;
+            *x += myGFX->textsize * 6;             // Advance x one char
+        }
+    }
+}
+
+// Pass string and a cursor position, returns UL corner and W,H.
+void GFXgetTextBounds(GFX* myGFX, char *str, int16_t x, int16_t y,
+        int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h) {
+    uint8_t c; // Current character
+
+    *x1 = x;
+    *y1 = y;
+    *w  = *h = 0;
+
+    int16_t minx = myGFX->_width, miny = myGFX->_height, maxx = -1, maxy = -1;
+
+    while((c = *str++))
+    	GFXcharBounds(myGFX, c, &x, &y, &minx, &miny, &maxx, &maxy);
+
+    if(maxx >= minx) {
+        *x1 = minx;
+        *w  = maxx - minx + 1;
+    }
+    if(maxy >= miny) {
+        *y1 = miny;
+        *h  = maxy - miny + 1;
+    }
+}
+
+
+
+// Return the size of the display (per current rotation)
+int16_t GFXwidth(GFX* myGFX ) {
+    return myGFX->_width;
+}
+
+int16_t GFXheight(GFX* myGFX)  {
+    return myGFX->_height;
+}
+
+void GFXinvertDisplay(GFX* myGFX, uint8_t i) {
+    // Do nothing, must be subclassed if supported by hardware
+}
+
+uint8_t pitches[24] =
+{
+	'C', ' ',
+	'C', '#',
+	'D', ' ',
+	'D', '#',
+	'E', ' ',
+	'F', ' ',
+	'F', '#',
+	'G', ' ',
+	'G', '#',
+	'A', ' ',
+	'A', '#',
+	'B', ' '
+};
+
+int OLEDparseInt(char* buffer, uint32_t myNumber, uint8_t numDigits)
+{
+	for (int i = 0; i < numDigits; i++)
+	{
+		int whichPlace = (uint32_t)(powf(10.0f,(numDigits - 1) - i));
+		int thisDigit = (myNumber / whichPlace);
+		buffer[i] = thisDigit + 48;
+		myNumber -= thisDigit * whichPlace;
+	}
+
+	return numDigits;
+}
+
+int OLEDparsePitch(char* buffer, float midi)
+{
+	int pclass, octave, note, neg = 0; float offset;
+
+	note = (int)midi;
+	offset = midi - note;
+
+	if ((midi + 0.5f) > (note+1))
+	{
+		note += 1;
+		offset = (1.0f - offset) + 0.01f;
+		neg = 1;
+	}
+
+	pclass = (note % 12);
+	octave = (int)(note / 12) - 1;
+
+	int idx = 0;
+
+	buffer[idx++] = pitches[pclass*2];
+	buffer[idx++] = pitches[pclass*2+1];
+
+	OLEDparseInt(&buffer[idx++], octave, 1);
+
+	buffer[idx++] = ' ';
+
+	if (neg == 1)
+		buffer[idx++] = '-';
+	else
+		buffer[idx++] = '+';
+
+	OLEDparseInt(&buffer[idx], (uint32_t) (offset * 100.0f), 2);
+
+	return idx+2;
+}
+
+int OLEDparsePitchClass(char* buffer, float midi)
+{
+	int pclass, note;
+	float offset;
+
+	note = (int)midi;
+	offset = midi - note;
+
+	if ((midi + 0.5f) > (note+1))
+	{
+		note += 1;
+		offset = (1.0f - offset) + 0.01f;
+	}
+
+	pclass = (note % 12);
+
+	int idx = 0;
+
+	buffer[idx++] = pitches[pclass*2];
+	buffer[idx++] = pitches[pclass*2+1];
+
+	return idx;
+}
+
+int OLEDparseFixedFloat(char* buffer, float input, uint8_t numDigits, uint8_t numDecimal)
+{
+	float power = powf(10.0f, numDecimal);
+	float f = ((float)(int)(input * power + 0.5f)) / power;
+
+	int nonzeroHasHappened = 0, decimalHasHappened = 0;
+
+	int myNumber = (int)(f * power);
+
+	int idx = 0, i = 0;
+
+	if (myNumber < 0)
+	{
+		myNumber *= -1;
+		buffer[idx++] = '-';
+		i++;
+	}
+
+	while (i < numDigits)
+	{
+		if ((decimalHasHappened == 0) && ((numDigits-i) == numDecimal))
+		{
+			if (nonzeroHasHappened == 0)
+			{
+				idx++; //get past the negative if there is one - this is hacky should figure out how to do it right
+				buffer[idx-1] = '0';
+				nonzeroHasHappened = 1;
+			}
+
+			buffer[idx++] = '.';
+			decimalHasHappened = 1;
+		}
+		else
+		{
+
+			int whichPlace = (uint32_t) powf(10.0f,(numDigits - 1 - i));
+			int thisDigit = (myNumber / whichPlace);
+
+			if (nonzeroHasHappened == 0)
+			{
+				if (thisDigit > 0)
+				{
+					buffer[idx++] = thisDigit + 48;
+					nonzeroHasHappened = 1;
+				}
+				else
+				{
+					buffer[idx++] = ' ';
+				}
+			}
+			else
+			{
+				buffer[idx++] = thisDigit + 48;
+			}
+
+			myNumber -= thisDigit * whichPlace;
+
+			i++;
+		}
+	}
+
+	return idx;
+}
--- /dev/null
+++ b/LEAF/Src/gfx_font.c
@@ -1,0 +1,281 @@
+/*
+ * gfx_font.c
+ *
+ *  Created on: Jul 8, 2018
+ *      Author: jeffsnyder
+ */
+
+
+// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
+// See gfxfont.h for newer custom bitmap font info.
+
+#ifndef FONT5X7_H
+#define FONT5X7_H
+
+
+ #define PROGMEM
+
+
+// Standard ASCII 5x7 font
+
+static const unsigned char standardGFXfont[] = {
+	0x00, 0x00, 0x00, 0x00, 0x00,
+	0x3E, 0x5B, 0x4F, 0x5B, 0x3E,
+	0x3E, 0x6B, 0x4F, 0x6B, 0x3E,
+	0x1C, 0x3E, 0x7C, 0x3E, 0x1C,
+	0x18, 0x3C, 0x7E, 0x3C, 0x18,
+	0x1C, 0x57, 0x7D, 0x57, 0x1C,
+	0x1C, 0x5E, 0x7F, 0x5E, 0x1C,
+	0x00, 0x18, 0x3C, 0x18, 0x00,
+	0xFF, 0xE7, 0xC3, 0xE7, 0xFF,
+	0x00, 0x18, 0x24, 0x18, 0x00,
+	0xFF, 0xE7, 0xDB, 0xE7, 0xFF,
+	0x30, 0x48, 0x3A, 0x06, 0x0E,
+	0x26, 0x29, 0x79, 0x29, 0x26,
+	0x40, 0x7F, 0x05, 0x05, 0x07,
+	0x40, 0x7F, 0x05, 0x25, 0x3F,
+	0x5A, 0x3C, 0xE7, 0x3C, 0x5A,
+	0x7F, 0x3E, 0x1C, 0x1C, 0x08,
+	0x08, 0x1C, 0x1C, 0x3E, 0x7F,
+	0x14, 0x22, 0x7F, 0x22, 0x14,
+	0x5F, 0x5F, 0x00, 0x5F, 0x5F,
+	0x06, 0x09, 0x7F, 0x01, 0x7F,
+	0x00, 0x66, 0x89, 0x95, 0x6A,
+	0x60, 0x60, 0x60, 0x60, 0x60,
+	0x94, 0xA2, 0xFF, 0xA2, 0x94,
+	0x08, 0x04, 0x7E, 0x04, 0x08,
+	0x10, 0x20, 0x7E, 0x20, 0x10,
+	0x08, 0x08, 0x2A, 0x1C, 0x08,
+	0x08, 0x1C, 0x2A, 0x08, 0x08,
+	0x1E, 0x10, 0x10, 0x10, 0x10,
+	0x0C, 0x1E, 0x0C, 0x1E, 0x0C,
+	0x30, 0x38, 0x3E, 0x38, 0x30,
+	0x06, 0x0E, 0x3E, 0x0E, 0x06,
+	0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x5F, 0x00, 0x00,
+	0x00, 0x07, 0x00, 0x07, 0x00,
+	0x14, 0x7F, 0x14, 0x7F, 0x14,
+	0x24, 0x2A, 0x7F, 0x2A, 0x12,
+	0x23, 0x13, 0x08, 0x64, 0x62,
+	0x36, 0x49, 0x56, 0x20, 0x50,
+	0x00, 0x08, 0x07, 0x03, 0x00,
+	0x00, 0x1C, 0x22, 0x41, 0x00,
+	0x00, 0x41, 0x22, 0x1C, 0x00,
+	0x2A, 0x1C, 0x7F, 0x1C, 0x2A,
+	0x08, 0x08, 0x3E, 0x08, 0x08,
+	0x00, 0x80, 0x70, 0x30, 0x00,
+	0x08, 0x08, 0x08, 0x08, 0x08,
+	0x00, 0x00, 0x60, 0x60, 0x00,
+	0x20, 0x10, 0x08, 0x04, 0x02,
+	0x3E, 0x51, 0x49, 0x45, 0x3E,
+	0x00, 0x42, 0x7F, 0x40, 0x00,
+	0x72, 0x49, 0x49, 0x49, 0x46,
+	0x21, 0x41, 0x49, 0x4D, 0x33,
+	0x18, 0x14, 0x12, 0x7F, 0x10,
+	0x27, 0x45, 0x45, 0x45, 0x39,
+	0x3C, 0x4A, 0x49, 0x49, 0x31,
+	0x41, 0x21, 0x11, 0x09, 0x07,
+	0x36, 0x49, 0x49, 0x49, 0x36,
+	0x46, 0x49, 0x49, 0x29, 0x1E,
+	0x00, 0x00, 0x14, 0x00, 0x00,
+	0x00, 0x40, 0x34, 0x00, 0x00,
+	0x00, 0x08, 0x14, 0x22, 0x41,
+	0x14, 0x14, 0x14, 0x14, 0x14,
+	0x00, 0x41, 0x22, 0x14, 0x08,
+	0x02, 0x01, 0x59, 0x09, 0x06,
+	0x3E, 0x41, 0x5D, 0x59, 0x4E,
+	0x7C, 0x12, 0x11, 0x12, 0x7C,
+	0x7F, 0x49, 0x49, 0x49, 0x36,
+	0x3E, 0x41, 0x41, 0x41, 0x22,
+	0x7F, 0x41, 0x41, 0x41, 0x3E,
+	0x7F, 0x49, 0x49, 0x49, 0x41,
+	0x7F, 0x09, 0x09, 0x09, 0x01,
+	0x3E, 0x41, 0x41, 0x51, 0x73,
+	0x7F, 0x08, 0x08, 0x08, 0x7F,
+	0x00, 0x41, 0x7F, 0x41, 0x00,
+	0x20, 0x40, 0x41, 0x3F, 0x01,
+	0x7F, 0x08, 0x14, 0x22, 0x41,
+	0x7F, 0x40, 0x40, 0x40, 0x40,
+	0x7F, 0x02, 0x1C, 0x02, 0x7F,
+	0x7F, 0x04, 0x08, 0x10, 0x7F,
+	0x3E, 0x41, 0x41, 0x41, 0x3E,
+	0x7F, 0x09, 0x09, 0x09, 0x06,
+	0x3E, 0x41, 0x51, 0x21, 0x5E,
+	0x7F, 0x09, 0x19, 0x29, 0x46,
+	0x26, 0x49, 0x49, 0x49, 0x32,
+	0x03, 0x01, 0x7F, 0x01, 0x03,
+	0x3F, 0x40, 0x40, 0x40, 0x3F,
+	0x1F, 0x20, 0x40, 0x20, 0x1F,
+	0x3F, 0x40, 0x38, 0x40, 0x3F,
+	0x63, 0x14, 0x08, 0x14, 0x63,
+	0x03, 0x04, 0x78, 0x04, 0x03,
+	0x61, 0x59, 0x49, 0x4D, 0x43,
+	0x00, 0x7F, 0x41, 0x41, 0x41,
+	0x02, 0x04, 0x08, 0x10, 0x20,
+	0x00, 0x41, 0x41, 0x41, 0x7F,
+	0x04, 0x02, 0x01, 0x02, 0x04,
+	0x40, 0x40, 0x40, 0x40, 0x40,
+	0x00, 0x03, 0x07, 0x08, 0x00,
+	0x20, 0x54, 0x54, 0x78, 0x40,
+	0x7F, 0x28, 0x44, 0x44, 0x38,
+	0x38, 0x44, 0x44, 0x44, 0x28,
+	0x38, 0x44, 0x44, 0x28, 0x7F,
+	0x38, 0x54, 0x54, 0x54, 0x18,
+	0x00, 0x08, 0x7E, 0x09, 0x02,
+	0x18, 0xA4, 0xA4, 0x9C, 0x78,
+	0x7F, 0x08, 0x04, 0x04, 0x78,
+	0x00, 0x44, 0x7D, 0x40, 0x00,
+	0x20, 0x40, 0x40, 0x3D, 0x00,
+	0x7F, 0x10, 0x28, 0x44, 0x00,
+	0x00, 0x41, 0x7F, 0x40, 0x00,
+	0x7C, 0x04, 0x78, 0x04, 0x78,
+	0x7C, 0x08, 0x04, 0x04, 0x78,
+	0x38, 0x44, 0x44, 0x44, 0x38,
+	0xFC, 0x18, 0x24, 0x24, 0x18,
+	0x18, 0x24, 0x24, 0x18, 0xFC,
+	0x7C, 0x08, 0x04, 0x04, 0x08,
+	0x48, 0x54, 0x54, 0x54, 0x24,
+	0x04, 0x04, 0x3F, 0x44, 0x24,
+	0x3C, 0x40, 0x40, 0x20, 0x7C,
+	0x1C, 0x20, 0x40, 0x20, 0x1C,
+	0x3C, 0x40, 0x30, 0x40, 0x3C,
+	0x44, 0x28, 0x10, 0x28, 0x44,
+	0x4C, 0x90, 0x90, 0x90, 0x7C,
+	0x44, 0x64, 0x54, 0x4C, 0x44,
+	0x00, 0x08, 0x36, 0x41, 0x00,
+	0x00, 0x00, 0x77, 0x00, 0x00,
+	0x00, 0x41, 0x36, 0x08, 0x00,
+	0x02, 0x01, 0x02, 0x04, 0x02,
+	0x3C, 0x26, 0x23, 0x26, 0x3C,
+	0x1E, 0xA1, 0xA1, 0x61, 0x12,
+	0x3A, 0x40, 0x40, 0x20, 0x7A,
+	0x38, 0x54, 0x54, 0x55, 0x59,
+	0x21, 0x55, 0x55, 0x79, 0x41,
+	0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut
+	0x21, 0x55, 0x54, 0x78, 0x40,
+	0x20, 0x54, 0x55, 0x79, 0x40,
+	0x0C, 0x1E, 0x52, 0x72, 0x12,
+	0x39, 0x55, 0x55, 0x55, 0x59,
+	0x39, 0x54, 0x54, 0x54, 0x59,
+	0x39, 0x55, 0x54, 0x54, 0x58,
+	0x00, 0x00, 0x45, 0x7C, 0x41,
+	0x00, 0x02, 0x45, 0x7D, 0x42,
+	0x00, 0x01, 0x45, 0x7C, 0x40,
+	0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut
+	0xF0, 0x28, 0x25, 0x28, 0xF0,
+	0x7C, 0x54, 0x55, 0x45, 0x00,
+	0x20, 0x54, 0x54, 0x7C, 0x54,
+	0x7C, 0x0A, 0x09, 0x7F, 0x49,
+	0x32, 0x49, 0x49, 0x49, 0x32,
+	0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut
+	0x32, 0x4A, 0x48, 0x48, 0x30,
+	0x3A, 0x41, 0x41, 0x21, 0x7A,
+	0x3A, 0x42, 0x40, 0x20, 0x78,
+	0x00, 0x9D, 0xA0, 0xA0, 0x7D,
+	0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut
+	0x3D, 0x40, 0x40, 0x40, 0x3D,
+	0x3C, 0x24, 0xFF, 0x24, 0x24,
+	0x48, 0x7E, 0x49, 0x43, 0x66,
+	0x2B, 0x2F, 0xFC, 0x2F, 0x2B,
+	0xFF, 0x09, 0x29, 0xF6, 0x20,
+	0xC0, 0x88, 0x7E, 0x09, 0x03,
+	0x20, 0x54, 0x54, 0x79, 0x41,
+	0x00, 0x00, 0x44, 0x7D, 0x41,
+	0x30, 0x48, 0x48, 0x4A, 0x32,
+	0x38, 0x40, 0x40, 0x22, 0x7A,
+	0x00, 0x7A, 0x0A, 0x0A, 0x72,
+	0x7D, 0x0D, 0x19, 0x31, 0x7D,
+	0x26, 0x29, 0x29, 0x2F, 0x28,
+	0x26, 0x29, 0x29, 0x29, 0x26,
+	0x30, 0x48, 0x4D, 0x40, 0x20,
+	0x38, 0x08, 0x08, 0x08, 0x08,
+	0x08, 0x08, 0x08, 0x08, 0x38,
+	0x2F, 0x10, 0xC8, 0xAC, 0xBA,
+	0x2F, 0x10, 0x28, 0x34, 0xFA,
+	0x00, 0x00, 0x7B, 0x00, 0x00,
+	0x08, 0x14, 0x2A, 0x14, 0x22,
+	0x22, 0x14, 0x2A, 0x14, 0x08,
+	0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code
+	0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block
+	0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block
+	0x00, 0x00, 0x00, 0xFF, 0x00,
+	0x10, 0x10, 0x10, 0xFF, 0x00,
+	0x14, 0x14, 0x14, 0xFF, 0x00,
+	0x10, 0x10, 0xFF, 0x00, 0xFF,
+	0x10, 0x10, 0xF0, 0x10, 0xF0,
+	0x14, 0x14, 0x14, 0xFC, 0x00,
+	0x14, 0x14, 0xF7, 0x00, 0xFF,
+	0x00, 0x00, 0xFF, 0x00, 0xFF,
+	0x14, 0x14, 0xF4, 0x04, 0xFC,
+	0x14, 0x14, 0x17, 0x10, 0x1F,
+	0x10, 0x10, 0x1F, 0x10, 0x1F,
+	0x14, 0x14, 0x14, 0x1F, 0x00,
+	0x10, 0x10, 0x10, 0xF0, 0x00,
+	0x00, 0x00, 0x00, 0x1F, 0x10,
+	0x10, 0x10, 0x10, 0x1F, 0x10,
+	0x10, 0x10, 0x10, 0xF0, 0x10,
+	0x00, 0x00, 0x00, 0xFF, 0x10,
+	0x10, 0x10, 0x10, 0x10, 0x10,
+	0x10, 0x10, 0x10, 0xFF, 0x10,
+	0x00, 0x00, 0x00, 0xFF, 0x14,
+	0x00, 0x00, 0xFF, 0x00, 0xFF,
+	0x00, 0x00, 0x1F, 0x10, 0x17,
+	0x00, 0x00, 0xFC, 0x04, 0xF4,
+	0x14, 0x14, 0x17, 0x10, 0x17,
+	0x14, 0x14, 0xF4, 0x04, 0xF4,
+	0x00, 0x00, 0xFF, 0x00, 0xF7,
+	0x14, 0x14, 0x14, 0x14, 0x14,
+	0x14, 0x14, 0xF7, 0x00, 0xF7,
+	0x14, 0x14, 0x14, 0x17, 0x14,
+	0x10, 0x10, 0x1F, 0x10, 0x1F,
+	0x14, 0x14, 0x14, 0xF4, 0x14,
+	0x10, 0x10, 0xF0, 0x10, 0xF0,
+	0x00, 0x00, 0x1F, 0x10, 0x1F,
+	0x00, 0x00, 0x00, 0x1F, 0x14,
+	0x00, 0x00, 0x00, 0xFC, 0x14,
+	0x00, 0x00, 0xF0, 0x10, 0xF0,
+	0x10, 0x10, 0xFF, 0x10, 0xFF,
+	0x14, 0x14, 0x14, 0xFF, 0x14,
+	0x10, 0x10, 0x10, 0x1F, 0x00,
+	0x00, 0x00, 0x00, 0xF0, 0x10,
+	0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+	0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
+	0xFF, 0xFF, 0xFF, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0xFF, 0xFF,
+	0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+	0x38, 0x44, 0x44, 0x38, 0x44,
+	0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta
+	0x7E, 0x02, 0x02, 0x06, 0x06,
+	0x02, 0x7E, 0x02, 0x7E, 0x02,
+	0x63, 0x55, 0x49, 0x41, 0x63,
+	0x38, 0x44, 0x44, 0x3C, 0x04,
+	0x40, 0x7E, 0x20, 0x1E, 0x20,
+	0x06, 0x02, 0x7E, 0x02, 0x02,
+	0x99, 0xA5, 0xE7, 0xA5, 0x99,
+	0x1C, 0x2A, 0x49, 0x2A, 0x1C,
+	0x4C, 0x72, 0x01, 0x72, 0x4C,
+	0x30, 0x4A, 0x4D, 0x4D, 0x30,
+	0x30, 0x48, 0x78, 0x48, 0x30,
+	0xBC, 0x62, 0x5A, 0x46, 0x3D,
+	0x3E, 0x49, 0x49, 0x49, 0x00,
+	0x7E, 0x01, 0x01, 0x01, 0x7E,
+	0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+	0x44, 0x44, 0x5F, 0x44, 0x44,
+	0x40, 0x51, 0x4A, 0x44, 0x40,
+	0x40, 0x44, 0x4A, 0x51, 0x40,
+	0x00, 0x00, 0xFF, 0x01, 0x03,
+	0xE0, 0x80, 0xFF, 0x00, 0x00,
+	0x08, 0x08, 0x6B, 0x6B, 0x08,
+	0x36, 0x12, 0x36, 0x24, 0x36,
+	0x06, 0x0F, 0x09, 0x0F, 0x06,
+	0x00, 0x00, 0x18, 0x18, 0x00,
+	0x00, 0x00, 0x10, 0x10, 0x00,
+	0x30, 0x40, 0xFF, 0x01, 0x01,
+	0x00, 0x1F, 0x01, 0x01, 0x1E,
+	0x00, 0x19, 0x1D, 0x17, 0x12,
+	0x00, 0x3C, 0x3C, 0x3C, 0x3C,
+	0x00, 0x00, 0x00, 0x00, 0x00  // #255 NBSP
+};
+
+
+#endif // FONT5X7_H
--- /dev/null
+++ b/LEAF/Src/gpio.c
@@ -1,0 +1,176 @@
+/**
+  ******************************************************************************
+  * File Name          : gpio.c
+  * Description        : This file provides code for the configuration
+  *                      of all used GPIO pins.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "gpio.h"
+/* USER CODE BEGIN 0 */
+
+/* USER CODE END 0 */
+
+/*----------------------------------------------------------------------------*/
+/* Configure GPIO                                                             */
+/*----------------------------------------------------------------------------*/
+/* USER CODE BEGIN 1 */
+
+/* USER CODE END 1 */
+
+/** Configure pins
+     PH0-OSC_IN (PH0)   ------> RCC_OSC_IN
+     PH1-OSC_OUT (PH1)   ------> RCC_OSC_OUT
+     PA13 (JTMS/SWDIO)   ------> DEBUG_JTMS-SWDIO
+     PA14 (JTCK/SWCLK)   ------> DEBUG_JTCK-SWCLK
+     PB3 (JTDO/TRACESWO)   ------> DEBUG_JTDO-SWO
+*/
+void MX_GPIO_Init(void)
+{
+
+  GPIO_InitTypeDef GPIO_InitStruct = {0};
+
+  /* GPIO Ports Clock Enable */
+  __HAL_RCC_GPIOE_CLK_ENABLE();
+  __HAL_RCC_GPIOC_CLK_ENABLE();
+  __HAL_RCC_GPIOF_CLK_ENABLE();
+  __HAL_RCC_GPIOH_CLK_ENABLE();
+  __HAL_RCC_GPIOA_CLK_ENABLE();
+  __HAL_RCC_GPIOB_CLK_ENABLE();
+  __HAL_RCC_GPIOG_CLK_ENABLE();
+  __HAL_RCC_GPIOD_CLK_ENABLE();
+
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14|GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_RESET);
+
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_RESET);
+
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_8|GPIO_PIN_9 
+                          |GPIO_PIN_10, GPIO_PIN_RESET);
+
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_4, GPIO_PIN_RESET);
+
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(GPIOG, GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_10, GPIO_PIN_RESET);
+
+  /*Configure GPIO pin : PC13 */
+  GPIO_InitStruct.Pin = GPIO_PIN_13;
+  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : PC14 PC4 PC6 PC7 */
+  GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+  /*Configure GPIO pin : PC15 */
+  GPIO_InitStruct.Pin = GPIO_PIN_15;
+  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+  /*Configure GPIO pin : PF6 */
+  GPIO_InitStruct.Pin = GPIO_PIN_6;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : PF7 PF8 PF9 PF10 */
+  GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10;
+  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : PA1 PA15 */
+  GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_15;
+  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : PA4 PA6 PA8 PA9 
+                           PA10 */
+  GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_8|GPIO_PIN_9 
+                          |GPIO_PIN_10;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : PB0 PB4 */
+  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_4;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : PB1 PB12 PB13 PB14 
+                           PB15 */
+  GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 
+                          |GPIO_PIN_15;
+  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+  GPIO_InitStruct.Pull = GPIO_PULLUP;
+  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : PB2 PB9 */
+  GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_9;
+  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : PD11 PD7 */
+  GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_7;
+  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+  GPIO_InitStruct.Pull = GPIO_PULLUP;
+  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : PG3 PG9 PG13 PG14 */
+  GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_9|GPIO_PIN_13|GPIO_PIN_14;
+  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : PG6 PG7 PG10 */
+  GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_10;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : PD3 PD4 PD5 PD6 */
+  GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6;
+  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : PG11 PG12 */
+  GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
+  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+  GPIO_InitStruct.Pull = GPIO_PULLUP;
+  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
+
+}
+
+/* USER CODE BEGIN 2 */
+
+/* USER CODE END 2 */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- /dev/null
+++ b/LEAF/Src/i2c.c
@@ -1,0 +1,242 @@
+/**
+  ******************************************************************************
+  * File Name          : I2C.c
+  * Description        : This file provides code for the configuration
+  *                      of the I2C instances.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+  * All rights reserved.</center></h2>
+  *
+  * This software component is licensed by ST under Ultimate Liberty license
+  * SLA0044, the "License"; You may not use this file except in compliance with
+  * the License. You may obtain a copy of the License at:
+  *                             www.st.com/SLA0044
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "i2c.h"
+
+/* USER CODE BEGIN 0 */
+
+/* USER CODE END 0 */
+
+I2C_HandleTypeDef hi2c2;
+I2C_HandleTypeDef hi2c4;
+DMA_HandleTypeDef hdma_i2c4_rx;
+DMA_HandleTypeDef hdma_i2c4_tx;
+
+/* I2C2 init function */
+void MX_I2C2_Init(void)
+{
+
+  hi2c2.Instance = I2C2;
+  hi2c2.Init.Timing = 0x505097F4;
+  hi2c2.Init.OwnAddress1 = 0;
+  hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
+  hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
+  hi2c2.Init.OwnAddress2 = 0;
+  hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
+  hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
+  hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
+  if (HAL_I2C_Init(&hi2c2) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /** Configure Analogue filter 
+  */
+  if (HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /** Configure Digital filter 
+  */
+  if (HAL_I2CEx_ConfigDigitalFilter(&hi2c2, 0) != HAL_OK)
+  {
+    Error_Handler();
+  }
+
+}
+/* I2C4 init function */
+void MX_I2C4_Init(void)
+{
+
+  hi2c4.Instance = I2C4;
+  hi2c4.Init.Timing = 0x307075B1;
+  hi2c4.Init.OwnAddress1 = 0;
+  hi2c4.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
+  hi2c4.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
+  hi2c4.Init.OwnAddress2 = 0;
+  hi2c4.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
+  hi2c4.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
+  hi2c4.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
+  if (HAL_I2C_Init(&hi2c4) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /** Configure Analogue filter 
+  */
+  if (HAL_I2CEx_ConfigAnalogFilter(&hi2c4, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
+  {
+    Error_Handler();
+  }
+  /** Configure Digital filter 
+  */
+  if (HAL_I2CEx_ConfigDigitalFilter(&hi2c4, 0) != HAL_OK)
+  {
+    Error_Handler();
+  }
+
+}
+
+void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
+{
+
+  GPIO_InitTypeDef GPIO_InitStruct = {0};
+  if(i2cHandle->Instance==I2C2)
+  {
+  /* USER CODE BEGIN I2C2_MspInit 0 */
+
+  /* USER CODE END I2C2_MspInit 0 */
+  
+    __HAL_RCC_GPIOB_CLK_ENABLE();
+    /**I2C2 GPIO Configuration    
+    PB10     ------> I2C2_SCL
+    PB11     ------> I2C2_SDA 
+    */
+    GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+    GPIO_InitStruct.Alternate = GPIO_AF4_I2C2;
+    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+    /* I2C2 clock enable */
+    __HAL_RCC_I2C2_CLK_ENABLE();
+  /* USER CODE BEGIN I2C2_MspInit 1 */
+
+  /* USER CODE END I2C2_MspInit 1 */
+  }
+  else if(i2cHandle->Instance==I2C4)
+  {
+  /* USER CODE BEGIN I2C4_MspInit 0 */
+
+  /* USER CODE END I2C4_MspInit 0 */
+  
+    __HAL_RCC_GPIOD_CLK_ENABLE();
+    /**I2C4 GPIO Configuration    
+    PD12     ------> I2C4_SCL
+    PD13     ------> I2C4_SDA 
+    */
+    GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
+    GPIO_InitStruct.Alternate = GPIO_AF4_I2C4;
+    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+
+    /* I2C4 clock enable */
+    __HAL_RCC_I2C4_CLK_ENABLE();
+  
+    /* I2C4 DMA Init */
+    /* I2C4_RX Init */
+    hdma_i2c4_rx.Instance = BDMA_Channel0;
+    hdma_i2c4_rx.Init.Request = BDMA_REQUEST_I2C4_RX;
+    hdma_i2c4_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
+    hdma_i2c4_rx.Init.PeriphInc = DMA_PINC_DISABLE;
+    hdma_i2c4_rx.Init.MemInc = DMA_MINC_ENABLE;
+    hdma_i2c4_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+    hdma_i2c4_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+    hdma_i2c4_rx.Init.Mode = DMA_NORMAL;
+    hdma_i2c4_rx.Init.Priority = DMA_PRIORITY_LOW;
+    if (HAL_DMA_Init(&hdma_i2c4_rx) != HAL_OK)
+    {
+      Error_Handler();
+    }
+
+    __HAL_LINKDMA(i2cHandle,hdmarx,hdma_i2c4_rx);
+
+    /* I2C4_TX Init */
+    hdma_i2c4_tx.Instance = BDMA_Channel1;
+    hdma_i2c4_tx.Init.Request = BDMA_REQUEST_I2C4_TX;
+    hdma_i2c4_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
+    hdma_i2c4_tx.Init.PeriphInc = DMA_PINC_DISABLE;
+    hdma_i2c4_tx.Init.MemInc = DMA_MINC_ENABLE;
+    hdma_i2c4_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+    hdma_i2c4_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+    hdma_i2c4_tx.Init.Mode = DMA_NORMAL;
+    hdma_i2c4_tx.Init.Priority = DMA_PRIORITY_LOW;
+    if (HAL_DMA_Init(&hdma_i2c4_tx) != HAL_OK)
+    {
+      Error_Handler();
+    }
+
+    __HAL_LINKDMA(i2cHandle,hdmatx,hdma_i2c4_tx);
+
+    /* I2C4 interrupt Init */
+    HAL_NVIC_SetPriority(I2C4_EV_IRQn, 6, 0);
+    HAL_NVIC_EnableIRQ(I2C4_EV_IRQn);
+    HAL_NVIC_SetPriority(I2C4_ER_IRQn, 6, 0);
+    HAL_NVIC_EnableIRQ(I2C4_ER_IRQn);
+  /* USER CODE BEGIN I2C4_MspInit 1 */
+
+  /* USER CODE END I2C4_MspInit 1 */
+  }
+}
+
+void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle)
+{
+
+  if(i2cHandle->Instance==I2C2)
+  {
+  /* USER CODE BEGIN I2C2_MspDeInit 0 */
+
+  /* USER CODE END I2C2_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_I2C2_CLK_DISABLE();
+  
+    /**I2C2 GPIO Configuration    
+    PB10     ------> I2C2_SCL
+    PB11     ------> I2C2_SDA 
+    */
+    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_11);
+
+  /* USER CODE BEGIN I2C2_MspDeInit 1 */
+
+  /* USER CODE END I2C2_MspDeInit 1 */
+  }
+  else if(i2cHandle->Instance==I2C4)
+  {
+  /* USER CODE BEGIN I2C4_MspDeInit 0 */
+
+  /* USER CODE END I2C4_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_I2C4_CLK_DISABLE();
+  
+    /**I2C4 GPIO Configuration    
+    PD12     ------> I2C4_SCL
+    PD13     ------> I2C4_SDA 
+    */
+    HAL_GPIO_DeInit(GPIOD, GPIO_PIN_12|GPIO_PIN_13);
+
+    /* I2C4 DMA DeInit */
+    HAL_DMA_DeInit(i2cHandle->hdmarx);
+    HAL_DMA_DeInit(i2cHandle->hdmatx);
+
+    /* I2C4 interrupt Deinit */
+    HAL_NVIC_DisableIRQ(I2C4_EV_IRQn);
+    HAL_NVIC_DisableIRQ(I2C4_ER_IRQn);
+  /* USER CODE BEGIN I2C4_MspDeInit 1 */
+
+  /* USER CODE END I2C4_MspDeInit 1 */
+  }
+} 
+
+/* USER CODE BEGIN 1 */
+
+/* USER CODE END 1 */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/LEAF/Src/leaf-analysis.c
+++ /dev/null
@@ -1,946 +1,0 @@
-/*==============================================================================
-
-    leaf-analysis.c
-    Created: 30 Nov 2018 11:56:49am
-    Author:  airship
-
-==============================================================================*/
-
-#if _WIN32 || _WIN64
-
-#include "..\Inc\leaf-analysis.h"
-#include "..\Externals\d_fft_mayer.h"
-
-#else
-
-#include "../Inc/leaf-analysis.h"
-#include "../Externals/d_fft_mayer.h"
-
-#endif
-
-//===========================================================================
-/* Envelope Follower */
-//===========================================================================
-
-void    tEnvelopeFollower_init(tEnvelopeFollower* const ef, float attackThreshold, float decayCoeff)
-{
-    _tEnvelopeFollower* e = *ef = (_tEnvelopeFollower*) leaf_alloc(sizeof(_tEnvelopeFollower));
-    
-    e->y = 0.0f;
-    e->a_thresh = attackThreshold;
-    e->d_coeff = decayCoeff;
-}
-
-void tEnvelopeFollower_free(tEnvelopeFollower* const ef)
-{
-    _tEnvelopeFollower* e = *ef;
-    
-    leaf_free(e);
-}
-
-void    tEnvelopeFollower_initToPool    (tEnvelopeFollower* const ef, float attackThreshold, float decayCoeff, tMempool* const mp)
-{
-    _tMempool* m = *mp;
-    _tEnvelopeFollower* e = *ef = (_tEnvelopeFollower*) mpool_alloc(sizeof(_tEnvelopeFollower), &m->pool);
-    
-    e->y = 0.0f;
-    e->a_thresh = attackThreshold;
-    e->d_coeff = decayCoeff;
-}
-
-void    tEnvelopeFollower_freeFromPool  (tEnvelopeFollower* const ef, tMempool* const mp)
-{
-    _tMempool* m = *mp;
-    _tEnvelopeFollower* e = *ef;
-    
-    mpool_free(e, &m->pool);
-}
-
-float   tEnvelopeFollower_tick(tEnvelopeFollower* const ef, float x)
-{
-    _tEnvelopeFollower* e = *ef;
-    
-    if (x < 0.0f ) x = -x;  /* Absolute value. */
-    
-    if ((x >= e->y) && (x > e->a_thresh)) e->y = x;                      /* If we hit a peak, ride the peak to the top. */
-    else                                    e->y = e->y * e->d_coeff;    /* Else, exponential decay of output. */
-    
-    //ef->y = envelope_pow[(uint16_t)(ef->y * (float)UINT16_MAX)] * ef->d_coeff; //not quite the right behavior - too much loss of precision?
-    //ef->y = powf(ef->y, 1.000009f) * ef->d_coeff;  // too expensive
-    
-    if( e->y < VSF)   e->y = 0.0f;
-    
-    return e->y;
-}
-
-int     tEnvelopeFollower_decayCoeff(tEnvelopeFollower* const ef, float decayCoeff)
-{
-    _tEnvelopeFollower* e = *ef;
-    return e->d_coeff = decayCoeff;
-}
-
-int     tEnvelopeFollower_attackThresh(tEnvelopeFollower* const ef, float attackThresh)
-{
-    _tEnvelopeFollower* e = *ef;
-    return e->a_thresh = attackThresh;
-}
-
-
-//===========================================================================
-/* Power Follower */
-//===========================================================================
-void    tPowerFollower_init(tPowerFollower* const pf, float factor)
-{
-    _tPowerFollower* p = *pf = (_tPowerFollower*) leaf_alloc(sizeof(_tPowerFollower));
-    
-    p->curr=0.0f;
-    p->factor=factor;
-    p->oneminusfactor=1.0f-factor;
-}
-
-void tPowerFollower_free(tPowerFollower* const pf)
-{
-    _tPowerFollower* p = *pf;
-    
-    leaf_free(p);
-}
-
-void    tPowerFollower_initToPool   (tPowerFollower* const pf, float factor, tMempool* const mp)
-{
-    _tMempool* m = *mp;
-    _tPowerFollower* p = *pf = (_tPowerFollower*) mpool_alloc(sizeof(_tPowerFollower), &m->pool);
-    
-    p->curr=0.0f;
-    p->factor=factor;
-    p->oneminusfactor=1.0f-factor;
-}
-
-void    tPowerFollower_freeFromPool (tPowerFollower* const pf, tMempool* const mp)
-{
-    _tMempool* m = *mp;
-    _tPowerFollower* p = *pf;
-    
-    mpool_free(p, &m->pool);
-}
-
-int     tPowerFollower_setFactor(tPowerFollower* const pf, float factor)
-{
-    _tPowerFollower* p = *pf;
-    
-    if (factor<0) factor=0;
-    if (factor>1) factor=1;
-    p->factor=factor;
-    p->oneminusfactor=1.0f-factor;
-    return 0;
-}
-
-float   tPowerFollower_tick(tPowerFollower* const pf, float input)
-{
-    _tPowerFollower* p = *pf;
-    p->curr = p->factor*input*input+p->oneminusfactor*p->curr;
-    return p->curr;
-}
-
-float   tPowerFollower_sample(tPowerFollower* const pf)
-{
-    _tPowerFollower* p = *pf;
-    return p->curr;
-}
-
-
-
-
-//===========================================================================
-/* ---------------- env~ - simple envelope follower. ----------------- */
-//===========================================================================
-
-void tEnvPD_init(tEnvPD* const xpd, int ws, int hs, int bs)
-{
-    _tEnvPD* x = *xpd = (_tEnvPD*) leaf_calloc(sizeof(_tEnvPD));
-    
-    int period = hs, npoints = ws;
-    
-    int i;
-    
-    if (npoints < 1) npoints = 1024;
-    if (period < 1) period = npoints/2;
-    if (period < npoints / MAXOVERLAP + 1)
-        period = npoints / MAXOVERLAP + 1;
-    
-    x->x_npoints = npoints;
-    x->x_phase = 0;
-    x->x_period = period;
-    
-    x->windowSize = npoints;
-    x->hopSize = period;
-    x->blockSize = bs;
-    
-    for (i = 0; i < MAXOVERLAP; i++) x->x_sumbuf[i] = 0.0f;
-    for (i = 0; i < npoints; i++)
-        x->buf[i] = (1.0f - cosf((TWO_PI * i) / npoints))/npoints;
-    for (; i < npoints+INITVSTAKEN; i++) x->buf[i] = 0.0f;
-    
-    x->x_f = 0.0f;
-    
-    x->x_allocforvs = INITVSTAKEN;
-    
-    // ~ ~ ~ dsp ~ ~ ~
-    if (x->x_period % x->blockSize)
-    {
-        x->x_realperiod = x->x_period + x->blockSize - (x->x_period % x->blockSize);
-    }
-    else
-    {
-        x->x_realperiod = x->x_period;
-    }
-    // ~ ~ ~ ~ ~ ~ ~ ~
-}
-
-void tEnvPD_free (tEnvPD* const xpd)
-{
-    _tEnvPD* x = *xpd;
-    
-    leaf_free(x);
-}
-
-void    tEnvPD_initToPool       (tEnvPD* const xpd, int ws, int hs, int bs, tMempool* const mp)
-{
-    _tMempool* m = *mp;
-    _tEnvPD* x = *xpd = (_tEnvPD*) mpool_calloc(sizeof(_tEnvPD), &m->pool);
-    
-    int period = hs, npoints = ws;
-    
-    int i;
-    
-    if (npoints < 1) npoints = 1024;
-    if (period < 1) period = npoints/2;
-    if (period < npoints / MAXOVERLAP + 1)
-        period = npoints / MAXOVERLAP + 1;
-    
-    x->x_npoints = npoints;
-    x->x_phase = 0;
-    x->x_period = period;
-    
-    x->windowSize = npoints;
-    x->hopSize = period;
-    x->blockSize = bs;
-    
-    for (i = 0; i < MAXOVERLAP; i++) x->x_sumbuf[i] = 0;
-    for (i = 0; i < npoints; i++)
-        x->buf[i] = (1.0f - cosf((2 * PI * i) / npoints))/npoints;
-    for (; i < npoints+INITVSTAKEN; i++) x->buf[i] = 0;
-    
-    x->x_f = 0;
-    
-    x->x_allocforvs = INITVSTAKEN;
-    
-    // ~ ~ ~ dsp ~ ~ ~
-    if (x->x_period % x->blockSize)
-    {
-        x->x_realperiod = x->x_period + x->blockSize - (x->x_period % x->blockSize);
-    }
-    else
-    {
-        x->x_realperiod = x->x_period;
-    }
-    // ~ ~ ~ ~ ~ ~ ~ ~
-}
-
-void    tEnvPD_freeFromPool     (tEnvPD* const xpd, tMempool* const mp)
-{
-    _tMempool* m = *mp;
-    _tEnvPD* x = *xpd;
-    
-    mpool_free(x, &m->pool);
-}
-
-float tEnvPD_tick (tEnvPD* const xpd)
-{
-    _tEnvPD* x = *xpd;
-    return powtodb(x->x_result);
-}
-
-void tEnvPD_processBlock(tEnvPD* const xpd, float* in)
-{
-    _tEnvPD* x = *xpd;
-    
-    int n = x->blockSize;
-    
-    int count;
-    t_sample *sump;
-    in += n;
-    for (count = x->x_phase, sump = x->x_sumbuf;
-         count < x->x_npoints; count += x->x_realperiod, sump++)
-    {
-        t_sample *hp = x->buf + count;
-        t_sample *fp = in;
-        t_sample sum = *sump;
-        int i;
-        
-        for (i = 0; i < n; i++)
-        {
-            fp--;
-            sum += *hp++ * (*fp * *fp);
-        }
-        *sump = sum;
-    }
-    sump[0] = 0;
-    x->x_phase -= n;
-    if (x->x_phase < 0)
-    {
-        x->x_result = x->x_sumbuf[0];
-        for (count = x->x_realperiod, sump = x->x_sumbuf;
-             count < x->x_npoints; count += x->x_realperiod, sump++)
-            sump[0] = sump[1];
-        sump[0] = 0;
-        x->x_phase = x->x_realperiod - n;
-    }
-}
-
-//===========================================================================
-// ATTACKDETECTION
-//===========================================================================
-/********Private function prototypes**********/
-static void atkdtk_init(tAttackDetection* const a, int blocksize, int atk, int rel);
-static void atkdtk_envelope(tAttackDetection* const a, float *in);
-
-/********Constructor/Destructor***************/
-
-void tAttackDetection_init(tAttackDetection* const ad, int blocksize, int atk, int rel)
-{
-    *ad = (_tAttackDetection*) leaf_alloc(sizeof(_tAttackDetection));
-    
-    atkdtk_init(ad, blocksize, atk, rel);
-}
-
-void tAttackDetection_free(tAttackDetection* const ad)
-{
-    _tAttackDetection* a = *ad;
-    
-    leaf_free(a);
-}
-
-void    tAttackDetection_initToPool     (tAttackDetection* const ad, int blocksize, int atk, int rel, tMempool* const mp)
-{
-    _tMempool* m = *mp;
-    *ad = (_tAttackDetection*) mpool_alloc(sizeof(_tAttackDetection), &m->pool);
-    
-    atkdtk_init(ad, blocksize, atk, rel);
-}
-
-void    tAttackDetection_freeFromPool   (tAttackDetection* const ad, tMempool* const mp)
-{
-    _tMempool* m = *mp;
-    _tAttackDetection* a = *ad;
-    
-    mpool_free(a, &m->pool);
-}
-
-/*******Public Functions***********/
-
-
-void tAttackDetection_setBlocksize(tAttackDetection* const ad, int size)
-{
-    _tAttackDetection* a = *ad;
-    
-    if(!((size==64)|(size==128)|(size==256)|(size==512)|(size==1024)|(size==2048)))
-        size = DEFBLOCKSIZE;
-    a->blocksize = size;
-    
-    return;
-    
-}
-
-void tAttackDetection_setSamplerate(tAttackDetection* const ad, int inRate)
-{
-    _tAttackDetection* a = *ad;
-    
-    a->samplerate = inRate;
-    
-    //Reset atk and rel to recalculate coeff
-    tAttackDetection_setAttack(ad, a->atk);
-    tAttackDetection_setRelease(ad, a->rel);
-}
-
-void tAttackDetection_setThreshold(tAttackDetection* const ad, float thres)
-{
-    _tAttackDetection* a = *ad;
-    a->threshold = thres;
-}
-
-void tAttackDetection_setAttack(tAttackDetection* const ad, int inAtk)
-{
-    _tAttackDetection* a = *ad;
-    a->atk = inAtk;
-    a->atk_coeff = pow(0.01, 1.0/(a->atk * a->samplerate * 0.001));
-}
-
-void tAttackDetection_setRelease(tAttackDetection* const ad, int inRel)
-{
-    _tAttackDetection* a = *ad;
-    a->rel = inRel;
-    a->rel_coeff = pow(0.01, 1.0/(a->rel * a->samplerate * 0.001));
-}
-
-
-int tAttackDetection_detect(tAttackDetection* const ad, float *in)
-{
-    _tAttackDetection* a = *ad;
-    
-    int result;
-    
-    atkdtk_envelope(ad, in);
-    
-    if(a->env >= a->prevAmp*2) //2 times greater = 6dB increase
-        result = 1;
-    else
-        result = 0;
-    
-    a->prevAmp = a->env;
-    
-    return result;
-}
-
-/*******Private Functions**********/
-
-static void atkdtk_init(tAttackDetection* const ad, int blocksize, int atk, int rel)
-{
-    _tAttackDetection* a = *ad;
-    
-    a->env = 0;
-    a->blocksize = blocksize;
-    a->threshold = DEFTHRESHOLD;
-    a->samplerate = leaf.sampleRate;
-    a->prevAmp = 0;
-    
-    a->env = 0;
-    
-    tAttackDetection_setAttack(ad, atk);
-    tAttackDetection_setRelease(ad, rel);
-}
-
-static void atkdtk_envelope(tAttackDetection* const ad, float *in)
-{
-    _tAttackDetection* a = *ad;
-    
-    int i = 0;
-    float tmp;
-    for(i = 0; i < a->blocksize; ++i){
-        tmp = fastabsf(in[i]);
-        
-        if(tmp > a->env)
-            a->env = a->atk_coeff * (a->env - tmp) + tmp;
-        else
-            a->env = a->rel_coeff * (a->env - tmp) + tmp;
-    }
-    
-}
-
-//===========================================================================
-// SNAC
-//===========================================================================
-/******************************************************************************/
-/***************************** private procedures *****************************/
-/******************************************************************************/
-
-#define REALFFT mayer_realfft
-#define REALIFFT mayer_realifft
-
-static void snac_analyzeframe(tSNAC* const s);
-static void snac_autocorrelation(tSNAC* const s);
-static void snac_normalize(tSNAC* const s);
-static void snac_pickpeak(tSNAC* const s);
-static void snac_periodandfidelity(tSNAC* const s);
-static void snac_biasbuf(tSNAC* const s);
-static float snac_spectralpeak(tSNAC* const s, float periodlength);
-
-
-/******************************************************************************/
-/******************************** constructor, destructor *********************/
-/******************************************************************************/
-
-
-void tSNAC_init(tSNAC* const snac, int overlaparg)
-{
-    _tSNAC* s = *snac = (_tSNAC*) leaf_calloc(sizeof(_tSNAC));
-    
-    s->biasfactor = DEFBIAS;
-    s->timeindex = 0;
-    s->periodindex = 0;
-    s->periodlength = 0.;
-    s->fidelity = 0.;
-    s->minrms = DEFMINRMS;
-    s->framesize = SNAC_FRAME_SIZE;
-    
-    s->inputbuf = (float*) leaf_calloc(sizeof(float) * SNAC_FRAME_SIZE);
-    s->processbuf = (float*) leaf_calloc(sizeof(float) * (SNAC_FRAME_SIZE * 2));
-    s->spectrumbuf = (float*) leaf_calloc(sizeof(float) * (SNAC_FRAME_SIZE / 2));
-    s->biasbuf = (float*) leaf_calloc(sizeof(float) * SNAC_FRAME_SIZE);
-    
-    snac_biasbuf(snac);
-    tSNAC_setOverlap(snac, overlaparg);
-}
-
-void tSNAC_free(tSNAC* const snac)
-{
-    _tSNAC* s = *snac;
-    
-    leaf_free(s->inputbuf);
-    leaf_free(s->processbuf);
-    leaf_free(s->spectrumbuf);
-    leaf_free(s->biasbuf);
-    leaf_free(s);
-}
-
-void    tSNAC_initToPool    (tSNAC* const snac, int overlaparg, tMempool* const mp)
-{
-    _tMempool* m = *mp;
-    _tSNAC* s = *snac = (_tSNAC*) mpool_alloc(sizeof(_tSNAC), &m->pool);
-    
-    s->biasfactor = DEFBIAS;
-    s->timeindex = 0;
-    s->periodindex = 0;
-    s->periodlength = 0.;
-    s->fidelity = 0.;
-    s->minrms = DEFMINRMS;
-    s->framesize = SNAC_FRAME_SIZE;
-
-    s->inputbuf = (float*) mpool_calloc(sizeof(float) * SNAC_FRAME_SIZE, &m->pool);
-    s->processbuf = (float*) mpool_calloc(sizeof(float) * (SNAC_FRAME_SIZE * 2), &m->pool);
-    s->spectrumbuf = (float*) mpool_calloc(sizeof(float) * (SNAC_FRAME_SIZE / 2), &m->pool);
-    s->biasbuf = (float*) mpool_calloc(sizeof(float) * SNAC_FRAME_SIZE, &m->pool);
-    
-    snac_biasbuf(snac);
-    tSNAC_setOverlap(snac, overlaparg);
-}
-
-void    tSNAC_freeFromPool  (tSNAC* const snac, tMempool* const mp)
-{
-    _tMempool* m = *mp;
-    _tSNAC* s = *snac;
-    
-    mpool_free(s->inputbuf, &m->pool);
-    mpool_free(s->processbuf, &m->pool);
-    mpool_free(s->spectrumbuf, &m->pool);
-    mpool_free(s->biasbuf, &m->pool);
-    mpool_free(s, &m->pool);
-}
-
-/******************************************************************************/
-/************************** public access functions****************************/
-/******************************************************************************/
-
-
-void tSNAC_ioSamples(tSNAC* const snac, float *in, float *out, int size)
-{
-    _tSNAC* s = *snac;
-    
-    int timeindex = s->timeindex;
-    int mask = s->framesize - 1;
-    int outindex = 0;
-    float *inputbuf = s->inputbuf;
-    float *processbuf = s->processbuf;
-    
-    // call analysis function when it is time
-    if(!(timeindex & (s->framesize / s->overlap - 1))) snac_analyzeframe(snac);
-    
-    while(size--)
-    {
-        inputbuf[timeindex] = *in++;
-        out[outindex++] = processbuf[timeindex++];
-        timeindex &= mask;
-    }
-    s->timeindex = timeindex;
-}
-
-void tSNAC_setOverlap(tSNAC* const snac, int lap)
-{
-    _tSNAC* s = *snac;
-    if(!((lap==1)|(lap==2)|(lap==4)|(lap==8))) lap = DEFOVERLAP;
-    s->overlap = lap;
-}
-
-
-void tSNAC_setBias(tSNAC* const snac, float bias)
-{
-    _tSNAC* s = *snac;
-    if(bias > 1.) bias = 1.;
-    if(bias < 0.) bias = 0.;
-    s->biasfactor = bias;
-    snac_biasbuf(snac);
-    return;
-}
-
-
-void tSNAC_setMinRMS(tSNAC* const snac, float rms)
-{
-    _tSNAC* s = *snac;
-    if(rms > 1.) rms = 1.;
-    if(rms < 0.) rms = 0.;
-    s->minrms = rms;
-    return;
-}
-
-
-float tSNAC_getPeriod(tSNAC* const snac)
-{
-    _tSNAC* s = *snac;
-    return(s->periodlength);
-}
-
-
-float tSNAC_getFidelity(tSNAC* const snac)
-{
-    _tSNAC* s = *snac;
-    return(s->fidelity);
-}
-
-
-/******************************************************************************/
-/***************************** private procedures *****************************/
-/******************************************************************************/
-
-
-// main analysis function
-static void snac_analyzeframe(tSNAC* const snac)
-{
-    _tSNAC* s = *snac;
-    
-    int n, tindex = s->timeindex;
-    int framesize = s->framesize;
-    int mask = framesize - 1;
-    float norm = 1. / sqrt((float)(framesize * 2));
-    
-    float *inputbuf = s->inputbuf;
-    float *processbuf = s->processbuf;
-    
-    // copy input to processing buffers
-    for(n=0; n<framesize; n++)
-    {
-        processbuf[n] = inputbuf[tindex] * norm;
-        tindex++;
-        tindex &= mask;
-    }
-    
-    // zeropadding
-    for(n=framesize; n<(framesize<<1); n++) processbuf[n] = 0.;
-    
-    // call analysis procedures
-    snac_autocorrelation(snac);
-    snac_normalize(snac);
-    snac_pickpeak(snac);
-    snac_periodandfidelity(snac);
-}
-
-
-static void snac_autocorrelation(tSNAC* const snac)
-{
-    _tSNAC* s = *snac;
-    
-    int n, m;
-    int framesize = s->framesize;
-    int fftsize = framesize * 2;
-    float *processbuf = s->processbuf;
-    float *spectrumbuf = s->spectrumbuf;
-    
-    REALFFT(fftsize, processbuf);
-    
-    // compute power spectrum
-    processbuf[0] *= processbuf[0];                      // DC
-    processbuf[framesize] *= processbuf[framesize];      // Nyquist
-    
-    for(n=1; n<framesize; n++)
-    {
-        processbuf[n] = processbuf[n] * processbuf[n]
-        + processbuf[fftsize-n] * processbuf[fftsize-n]; // imag coefficients appear reversed
-        processbuf[fftsize-n] = 0.;
-    }
-    
-    // store power spectrum up to SR/4 for possible later use
-    for(m=0; m<(framesize>>1); m++)
-    {
-        spectrumbuf[m] = processbuf[m];
-    }
-    
-    // transform power spectrum to autocorrelation function
-    REALIFFT(fftsize, processbuf);
-    return;
-}
-
-
-static void snac_normalize(tSNAC* const snac)
-{
-    _tSNAC* s = *snac;
-    
-    int framesize = s->framesize;
-    int framesizeplustimeindex = s->framesize + s->timeindex;
-    int timeindexminusone = s->timeindex - 1;
-    int n, m;
-    int mask = framesize - 1;
-    int seek = framesize * SEEK;
-    float *inputbuf = s->inputbuf;
-    float *processbuf= s->processbuf;
-    float signal1, signal2;
-    
-    // minimum RMS implemented as minimum autocorrelation at index 0
-    // functionally equivalent to white noise floor
-    float rms = s->minrms / sqrt(1.0f / (float)framesize);
-    float minrzero = rms * rms;
-    float rzero = processbuf[0];
-    if(rzero < minrzero) rzero = minrzero;
-    double normintegral = (double)rzero * 2.;
-    
-    // normalize biased autocorrelation function
-    // inputbuf is circular buffer: timeindex may be non-zero when overlap > 1
-    processbuf[0] = 1;
-    for(n=1, m=s->timeindex+1; n<seek; n++, m++)
-    {
-        signal1 = inputbuf[(n + timeindexminusone)&mask];
-        signal2 = inputbuf[(framesizeplustimeindex - n)&mask];
-        normintegral -= (double)(signal1 * signal1 + signal2 * signal2);
-        processbuf[n] /= (float)normintegral * 0.5f;
-    }
<