1 parent
c590e8ac05
commit
47d19bab40
130 files changed
+2853
-69
No files matched your search
@@ -76,6 +76,12 @@
|
||||
//#define TOUCH_UI_PORTRAIT
|
||||
//#define TOUCH_UI_MIRRORED
|
||||
|
||||
// Enable UTF8 rendering capabilities.
|
||||
//#define TOUCH_UI_USE_UTF8
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
#define TOUCH_UI_UTF8_WESTERN_CHARSET
|
||||
#endif
|
||||
|
||||
// Use a numeric passcode for "Parental lock".
|
||||
// This is a recommended for smaller displays.
|
||||
//#define TOUCH_UI_PASSCODE
|
||||
@@ -90,7 +96,7 @@
|
||||
//#define DEVELOPER_SCREENS
|
||||
|
||||
// Maximum feed rate for manual extrusion (mm/s)
|
||||
//#define MAX_MANUAL_FEEDRATE 240
|
||||
#define MAX_MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60}
|
||||
|
||||
// Sets the SPI speed in Hz
|
||||
|
||||
|
||||
@@ -159,6 +159,7 @@ class CLCD::FontMetrics {
|
||||
uint32_t height;
|
||||
uint32_t ptr;
|
||||
|
||||
FontMetrics() {}
|
||||
FontMetrics(uint8_t font) {load(font);}
|
||||
|
||||
void load(uint8_t font);
|
||||
|
||||
+35
-23
@@ -67,14 +67,14 @@ class CommandProcessor : public CLCD::CommandFifo {
|
||||
}
|
||||
|
||||
FORCEDINLINE void linear_widget_box(int16_t &x, int16_t &y, int16_t &w, int16_t &h, bool tracker = false) {
|
||||
const uint16_t th = widget_thickness()/2;
|
||||
const uint16_t th = widget_thickness() / 2;
|
||||
if (w > h) {
|
||||
x += tracker ? th * 2.5 : th;
|
||||
y += h/2 - th/2;
|
||||
y += (h - th) / 2;
|
||||
w -= tracker ? th * 5.0 : th * 2;
|
||||
h = th;
|
||||
} else {
|
||||
x += w/2 - th/2;
|
||||
x += (w - th) / 2;
|
||||
y += tracker ? th * 2.5 : th;
|
||||
w = th;
|
||||
h -= tracker ? th * 5.0 : th * 2;
|
||||
@@ -82,9 +82,9 @@ class CommandProcessor : public CLCD::CommandFifo {
|
||||
}
|
||||
|
||||
FORCEDINLINE uint16_t circular_widget_box(int16_t &x, int16_t &y, int16_t &w, int16_t &h) {
|
||||
const uint16_t r = min(w,h)/2;
|
||||
x += w/2;
|
||||
y += h/2;
|
||||
const uint16_t r = min(w,h) / 2;
|
||||
x += w / 2;
|
||||
y += h / 2;
|
||||
w = 1;
|
||||
h = 1;
|
||||
return r;
|
||||
@@ -200,22 +200,22 @@ class CommandProcessor : public CLCD::CommandFifo {
|
||||
inline CommandProcessor& rectangle(int16_t x, int16_t y, int16_t w, int16_t h) {
|
||||
using namespace FTDI;
|
||||
CLCD::CommandFifo::cmd(BEGIN(RECTS));
|
||||
CLCD::CommandFifo::cmd(VERTEX2F(x*16,y*16));
|
||||
CLCD::CommandFifo::cmd(VERTEX2F((x+w)*16,(y+h)*16));
|
||||
CLCD::CommandFifo::cmd(VERTEX2F(x * 16, y * 16));
|
||||
CLCD::CommandFifo::cmd(VERTEX2F((x + w) * 16, (y + h) * 16));
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
FORCEDINLINE CommandProcessor& toggle(int16_t x, int16_t y, int16_t w, int16_t h, T text, bool state, uint16_t options = FTDI::OPT_3D) {
|
||||
CLCD::FontMetrics fm(_font);
|
||||
const int16_t widget_h = fm.height * 20.0/16;
|
||||
const int16_t widget_h = fm.height * 20.0 / 16;
|
||||
//const int16_t outer_bar_r = widget_h / 2;
|
||||
//const int16_t knob_r = outer_bar_r - 1.5;
|
||||
// The y coordinate of the toggle is the baseline of the text,
|
||||
// so we must introduce a fudge factor based on the line height to
|
||||
// actually center the control.
|
||||
const int16_t fudge_y = fm.height*5/16;
|
||||
CLCD::CommandFifo::toggle(x + h/2, y + h/2 - widget_h/2 + fudge_y, w - h, _font, options, state);
|
||||
const int16_t fudge_y = fm.height * 5 / 16;
|
||||
CLCD::CommandFifo::toggle(x + h / 2, y + (h - widget_h) / 2 + fudge_y, w - h, _font, options, state);
|
||||
CLCD::CommandFifo::str(text);
|
||||
return *this;
|
||||
}
|
||||
@@ -286,23 +286,29 @@ class CommandProcessor : public CLCD::CommandFifo {
|
||||
return *this;
|
||||
}
|
||||
|
||||
void apply_text_alignment(int16_t &x, int16_t &y, int16_t w, int16_t h, uint16_t options) {
|
||||
using namespace FTDI;
|
||||
x += ((options & OPT_CENTERX) ? w / 2 : ((options & OPT_RIGHTX) ? w : 0));
|
||||
y += ((options & OPT_CENTERY) ? h / 2 : h);
|
||||
}
|
||||
|
||||
CommandProcessor& number(int16_t x, int16_t y, int16_t w, int16_t h, int32_t n, uint16_t options = FTDI::OPT_CENTER) {
|
||||
using namespace FTDI;
|
||||
CLCD::CommandFifo::number(
|
||||
x + ((options & OPT_CENTERX) ? w/2 : ((options & OPT_RIGHTX) ? w : 0)),
|
||||
y + ((options & OPT_CENTERY) ? h/2 : h),
|
||||
_font, options, n);
|
||||
apply_text_alignment(x, y, w, h, options);
|
||||
CLCD::CommandFifo::number(x, y, _font, options, n);
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename T> FORCEDINLINE
|
||||
CommandProcessor& text(int16_t x, int16_t y, int16_t w, int16_t h, T text, uint16_t options = FTDI::OPT_CENTER) {
|
||||
using namespace FTDI;
|
||||
CLCD::CommandFifo::text(
|
||||
x + ((options & OPT_CENTERX) ? w/2 : ((options & OPT_RIGHTX) ? w : 0)),
|
||||
y + ((options & OPT_CENTERY) ? h/2 : h),
|
||||
_font, options);
|
||||
CLCD::CommandFifo::str(text);
|
||||
apply_text_alignment(x, y, w, h, options);
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
draw_utf8_text(*this, x, y, text, font_size_t::from_romfont(_font), options);
|
||||
#else
|
||||
CLCD::CommandFifo::text(x, y, _font, options);
|
||||
CLCD::CommandFifo::str(text);
|
||||
#endif
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -313,8 +319,8 @@ class CommandProcessor : public CLCD::CommandFifo {
|
||||
cmd(BITMAP_TRANSFORM_A(uint32_t(float(256)/scale)));
|
||||
cmd(BITMAP_TRANSFORM_E(uint32_t(float(256)/scale)));
|
||||
}
|
||||
cmd(BITMAP_SIZE(info.filter, info.wrapx, info.wrapy, info.width*scale, info.height*scale));
|
||||
cmd(VERTEX2F((x + w/2 - info.width*scale/2)*16, (y + h/2 - info.height*scale/2)*16));
|
||||
cmd(BITMAP_SIZE(info.filter, info.wrapx, info.wrapy, info.width * scale, info.height * scale));
|
||||
cmd(VERTEX2F((x + w / 2 - info.width * scale / 2) * 16, (y + h / 2 - info.height * scale / 2) * 16));
|
||||
if (scale != 1) {
|
||||
cmd(BITMAP_TRANSFORM_A(256));
|
||||
cmd(BITMAP_TRANSFORM_E(256));
|
||||
@@ -328,7 +334,13 @@ class CommandProcessor : public CLCD::CommandFifo {
|
||||
bool styleModified = false;
|
||||
if (_btn_style_callback) styleModified = _btn_style_callback(*this, _tag, _style, options, false);
|
||||
CLCD::CommandFifo::button(x, y, w, h, _font, options);
|
||||
CLCD::CommandFifo::str(text);
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
apply_text_alignment(x, y, w, h, OPT_CENTER);
|
||||
CLCD::CommandFifo::str(F(""));
|
||||
draw_utf8_text(*this, x, y, text, font_size_t::from_romfont(_font), OPT_CENTER);
|
||||
#else
|
||||
CLCD::CommandFifo::str(text);
|
||||
#endif
|
||||
if (_btn_style_callback && styleModified) _btn_style_callback(*this, _tag, _style, options, true);
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -30,14 +30,19 @@
|
||||
#endif
|
||||
|
||||
#ifdef FTDI_EXTENDED
|
||||
#include "unicode/font_size_t.h"
|
||||
#include "unicode/unicode.h"
|
||||
#include "unicode/standard_char_set.h"
|
||||
#include "unicode/western_char_set.h"
|
||||
#include "unicode/font_bitmaps.h"
|
||||
#include "rgb_t.h"
|
||||
#include "bitmap_info.h"
|
||||
#include "tiny_timer.h"
|
||||
#include "grid_layout.h"
|
||||
#include "dl_cache.h"
|
||||
#include "screen_types.h"
|
||||
#include "event_loop.h"
|
||||
#include "command_processor.h"
|
||||
#include "screen_types.h"
|
||||
#include "sound_player.h"
|
||||
#include "sound_list.h"
|
||||
#include "polygon.h"
|
||||
|
||||
@@ -156,8 +156,11 @@ class UncachedScreen {
|
||||
public:
|
||||
static void onRefresh() {
|
||||
using namespace FTDI;
|
||||
CLCD::CommandFifo cmd;
|
||||
CommandProcessor cmd;
|
||||
cmd.cmd(CMD_DLSTART);
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
load_utf8_bitmaps(cmd);
|
||||
#endif
|
||||
|
||||
current_screen.onRedraw(BOTH);
|
||||
|
||||
@@ -183,9 +186,12 @@ class CachedScreen {
|
||||
static void repaintBackground() {
|
||||
using namespace FTDI;
|
||||
DLCache dlcache(DL_SLOT);
|
||||
CLCD::CommandFifo cmd;
|
||||
CommandProcessor cmd;
|
||||
|
||||
cmd.cmd(CMD_DLSTART);
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
load_utf8_bitmaps(cmd);
|
||||
#endif
|
||||
current_screen.onRedraw(BACKGROUND);
|
||||
|
||||
dlcache.store(DL_SIZE);
|
||||
@@ -195,14 +201,16 @@ class CachedScreen {
|
||||
static void onRefresh() {
|
||||
using namespace FTDI;
|
||||
DLCache dlcache(DL_SLOT);
|
||||
CLCD::CommandFifo cmd;
|
||||
CommandProcessor cmd;
|
||||
|
||||
cmd.cmd(CMD_DLSTART);
|
||||
|
||||
if (dlcache.has_data()) {
|
||||
dlcache.append();
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
load_utf8_bitmaps(cmd);
|
||||
#endif
|
||||
current_screen.onRedraw(BACKGROUND);
|
||||
dlcache.store(DL_SIZE);
|
||||
}
|
||||
|
||||
@@ -29,41 +29,33 @@ namespace FTDI {
|
||||
* be broken so that the display width is less than w. The line will also
|
||||
* be broken after a '\n'. Returns the display width of the line.
|
||||
*/
|
||||
static uint16_t find_line_break(const CLCD::FontMetrics &fm, uint16_t w, const char *str, const char *&end) {
|
||||
static uint16_t find_line_break(const FontMetrics &fm, uint16_t w, const char *str, const char *&end) {
|
||||
w -= fm.get_char_width(' ');
|
||||
const char *p = str;
|
||||
end = str + strlen(str);
|
||||
uint16_t width = fm.get_text_width(str);
|
||||
end = str;
|
||||
uint16_t lw = 0, result = 0;
|
||||
for(;;) {
|
||||
// Find next tentative line break.
|
||||
char delim = *(p);
|
||||
while (delim && delim != ' ' && delim != '\n') {
|
||||
delim = *(++p);
|
||||
}
|
||||
// Check to see whether to break the line.
|
||||
const uint16_t margin = fm.get_text_width(" ");
|
||||
const uint16_t lw = p > str ? fm.get_text_width(str, p - str) + margin : 0;
|
||||
if (lw < w) {
|
||||
width = lw;
|
||||
switch (delim) {
|
||||
case '\0':
|
||||
end = p;
|
||||
break;
|
||||
case '\n':
|
||||
end = ++p;
|
||||
break;
|
||||
case ' ':
|
||||
end = ++p;
|
||||
continue;
|
||||
utf8_char_t c = get_utf8_char_and_inc(p);
|
||||
if (c == ' ' || c == '\n' || c == '\0') {
|
||||
if (lw < w || end == str) {
|
||||
end = (c == '\0') ? p-1 : p;
|
||||
result = lw;
|
||||
}
|
||||
if (c == '\0' || c == '\n') break;
|
||||
}
|
||||
return width;
|
||||
lw += fm.get_char_width(c);
|
||||
}
|
||||
if (end == str) {
|
||||
end = p-1;
|
||||
result = lw;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function returns a measurements of the word-wrapped text box.
|
||||
*/
|
||||
static void measure_text_box(const CLCD::FontMetrics &fm, const char *str, uint16_t &width, uint16_t &height) {
|
||||
static void measure_text_box(const FontMetrics &fm, const char *str, uint16_t &width, uint16_t &height) {
|
||||
const char *line_start = (const char*)str;
|
||||
const char *line_end;
|
||||
const uint16_t wrap_width = width;
|
||||
@@ -72,7 +64,7 @@ namespace FTDI {
|
||||
uint16_t line_width = find_line_break(fm, wrap_width, line_start, line_end);
|
||||
if (line_end == line_start) break;
|
||||
width = max(width, line_width);
|
||||
height += fm.height;
|
||||
height += fm.get_height();
|
||||
line_start = line_end;
|
||||
}
|
||||
}
|
||||
@@ -81,10 +73,11 @@ namespace FTDI {
|
||||
* This function draws text inside a bounding box, doing word wrapping and using the largest font that will fit.
|
||||
*/
|
||||
void draw_text_box(CommandProcessor& cmd, int x, int y, int w, int h, const char *str, uint16_t options, uint8_t font) {
|
||||
CLCD::FontMetrics fm(font);
|
||||
|
||||
uint16_t box_width, box_height;
|
||||
|
||||
FontMetrics fm(font);
|
||||
|
||||
// Shrink the font until we find a font that fits
|
||||
for(;;) {
|
||||
box_width = w;
|
||||
measure_text_box(fm, str, box_width, box_height);
|
||||
@@ -110,10 +103,14 @@ namespace FTDI {
|
||||
if (line[line_len - 1] == '\n' || line[line_len - 1] == ' ')
|
||||
line[line_len - 1] = 0;
|
||||
|
||||
cmd.CLCD::CommandFifo::text(x + dx, y + dy, font, options & ~OPT_CENTERY);
|
||||
cmd.CLCD::CommandFifo::str(line);
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
draw_utf8_text(cmd, x + dx, y + dy, line, fm.fs, options & ~OPT_CENTERY);
|
||||
#else
|
||||
cmd.CLCD::CommandFifo::text(x + dx, y + dy, font, options & ~OPT_CENTERY);
|
||||
cmd.CLCD::CommandFifo::str(line);
|
||||
#endif
|
||||
}
|
||||
y += fm.height;
|
||||
y += fm.get_height();
|
||||
|
||||
line_start = line_end;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
FTDI EVE Unicode Rendering
|
||||
--------------------------
|
||||
|
||||
The FTDI EVE chips have several fonts in ROM, but these fonts only contain a
|
||||
subset of ASCII characters. Notably, this excludes diacritics and accents
|
||||
used in most Western languages.
|
||||
|
||||
While the FTDI EVE has the capability for user-defined fonts, such fonts only
|
||||
support 127 character positions, making them as limiting as the built-in fonts.
|
||||
|
||||
As a further complication, high resolution TFT displays require high resolution
|
||||
fonts. It is not feasible to put a complete international font into the limited
|
||||
flash memory of most microprocessors.
|
||||
|
||||
To work around these limitations, this library uses a custom font renderer with
|
||||
the following characteristics:
|
||||
|
||||
1) Rather than providing bitmaps for different font sizes, it uses a single
|
||||
bitmap for the largest font size (romfont 31) and emulates other sizes by
|
||||
scaling the bitmaps using BITMAP_TRANSFORM.
|
||||
|
||||
2) Rather than loading an entire font, it combines symbols from romfont 31
|
||||
with a limited number of symbols from a custom font. For accented letters,
|
||||
the rendering code combine basic letter shapes from romfont 31 with
|
||||
bitmaps containing only the accent themselves.
|
||||
|
||||
3) The custom bitmap is RLE compressed into PROGMEM. For accents, which have
|
||||
a fairly small number of non-white pixels, the savings are significant.
|
||||
|
||||
These characteristics enable an alphabet for Western languages to be
|
||||
synthesized from only a few dozen custom symbols and modest PROGMEM use (~10k)
|
||||
|
||||
The text layout is done by the code in "unicode.cpp" with the help of one of
|
||||
more character renderers (e.g. "western_char_set.cpp"). Each character render
|
||||
is responsible for loading the necessary bitmap data into RAMG and drawing
|
||||
characters as requested.
|
||||
|
||||
To add symbols for other languages, it will only be necessary to make a bitmap
|
||||
and implement a corresponding character renderer.
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
/*******************
|
||||
* font_bitmap.cpp *
|
||||
*******************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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 3 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#include "../ftdi_extended.h"
|
||||
|
||||
#ifdef FTDI_EXTENDED
|
||||
|
||||
namespace FTDI {
|
||||
|
||||
void write_rle_data(uint16_t addr, const uint8_t *data, size_t n) {
|
||||
for (; n > 2; n -= 2) {
|
||||
uint8_t count = pgm_read_byte(data++);
|
||||
uint8_t value = pgm_read_byte(data++);
|
||||
while (count--) CLCD::mem_write_8(addr++, value);
|
||||
}
|
||||
}
|
||||
|
||||
void set_font_bitmap(CommandProcessor& cmd, CLCD::FontMetrics &fm, uint8_t handle) {
|
||||
cmd.cmd(BITMAP_HANDLE(handle));
|
||||
cmd.cmd(BITMAP_SOURCE(fm.ptr));
|
||||
cmd.bitmap_layout(fm.format, fm.stride, fm.height);
|
||||
cmd.bitmap_size(BILINEAR, BORDER, BORDER, fm.width, fm.height);
|
||||
}
|
||||
|
||||
void ext_vertex2ii(CommandProcessor &cmd, int x, int y, uint8_t handle, uint8_t cell) {
|
||||
if (x < 0 || y < 0 || x > 511 || y > 511) {
|
||||
cmd.cmd(BITMAP_HANDLE(handle));
|
||||
cmd.cmd(CELL(cell));
|
||||
cmd.cmd(VERTEX2F(x * 16, y * 16));
|
||||
} else {
|
||||
cmd.cmd(VERTEX2II(x, y, handle, cell));
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace FTDI
|
||||
|
||||
#endif // FTDI_EXTENDED
|
||||
@@ -0,0 +1,30 @@
|
||||
/******************
|
||||
* font_bitmaps.h *
|
||||
******************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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 3 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
class CommandProcessor;
|
||||
|
||||
namespace FTDI {
|
||||
void write_rle_data(uint16_t addr, const uint8_t *data, size_t n);
|
||||
void set_font_bitmap(CommandProcessor& cmd, CLCD::FontMetrics &fm, uint8_t handle);
|
||||
void ext_vertex2ii(CommandProcessor &cmd, int x, int y, uint8_t handle, uint8_t cell);
|
||||
}
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
+343
@@ -0,0 +1,343 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="38"
|
||||
height="1225"
|
||||
viewBox="0 0 10.054166 324.11458"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
sodipodi:docname="western_european_bitmap_31.svg"
|
||||
inkscape:export-filename="/home/aleph/git-repos/marlin-devel/tests/ftdi-eve-lib-examples/unicode_demo/src/ftdi_eve_lib/extended/unicode/font_bitmaps/western_european_bitmap_31.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.6948106"
|
||||
inkscape:cx="25.324413"
|
||||
inkscape:cy="265.38829"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="1382"
|
||||
inkscape:window-height="815"
|
||||
inkscape:window-x="2126"
|
||||
inkscape:window-y="131"
|
||||
inkscape:window-maximized="0">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4838"
|
||||
spacingx="10.583333"
|
||||
spacingy="12.964583"
|
||||
originy="0"
|
||||
empspacing="1"
|
||||
color="#000000"
|
||||
opacity="0"
|
||||
originx="0"
|
||||
empcolor="#3fff69"
|
||||
empopacity="0.25098039" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4528"
|
||||
spacingx="10.583333"
|
||||
spacingy="12.964583"
|
||||
originx="0"
|
||||
originy="2.6987499"
|
||||
color="#c93f24"
|
||||
opacity="0.1254902"
|
||||
dotted="false"
|
||||
empspacing="1"
|
||||
visible="true" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4530"
|
||||
spacingx="10.583333"
|
||||
spacingy="12.964583"
|
||||
color="#3f5fff"
|
||||
opacity="0.69019608"
|
||||
originy="8.8106248"
|
||||
empcolor="#593fff"
|
||||
empopacity="0.25098039"
|
||||
empspacing="1"
|
||||
visible="true"
|
||||
enabled="true" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4532"
|
||||
spacingx="10.583333"
|
||||
spacingy="12.964583"
|
||||
empspacing="1"
|
||||
color="#ffa03f"
|
||||
opacity="0.1254902"
|
||||
originy="10.689166"
|
||||
visible="true" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4653"
|
||||
empcolor="#ff663f"
|
||||
empopacity="0.25098039"
|
||||
spacingx="10.583333"
|
||||
spacingy="12.964583"
|
||||
originy="6.6145831"
|
||||
visible="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,27.114583)">
|
||||
<image
|
||||
y="-947.59998"
|
||||
x="-1.7763568e-15"
|
||||
id="image4606"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAABJgCAYAAACFiF0FAAAABHNCSVQICAgIfAhkiAAAIABJREFU eJztnetu6zrSKJnBev9X9vlxPgWOI6l4aZKt7CpgMNgriVUmdSOb3fx6vV6vkoj/7Rb4RCFCIUIh QiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiHi3/t/fH19 /fjhjkUP6VpIIUIhQiFCIUIhQiFCIUIhQiHixzt1hoXD6VpIIUIhwpEroRDhnZpQiFCIUIhQiFCI UIhQiFCISCdUNQxaOTxK10IKEQoRzxG6urRnj26f00K7OBXa1V2llPJlVQtAIUIhQiFCIUIhQiFC IUIhQiFCIUIhQiFCIUIhQiFCIUIhQiHiH//K/+c9iHc2cUs/ryVdCz1TaFV3VQutRCEindCPaNDn goEIWk/ydC2UTgiXL6+8B5WSsIWqhejbR0VKb4XoqptxVT63y1aRTujr9Xq9MtyhD9K1UDqhf6Xk uEMfpGuhZwjt6q5LoZ0oRChEuAaNUIhQiFCIUIhQiEgnVB1aOJj5+lpKwhZSiEgnVHVSX82OzDjB cUqvdqomakrnUqjnABFSp1129sE0pH7/t+khzpWpOb+EWpu9tuW6hWoO2PM7taS7D6UTan7aX7Hk xljKnHjGHb+Eoq+aVqrPoVVSTTmKLc+2Xm7nh2oOvnQWtuZg0a1WdaeuFYuga0rv7uBbVsfctdpo Sw09OlKOy5a/ftQQ2VJWGyRyC3120eox2S+hqINNHwbdDaWjn/6nj46Rg0x5dPR+aMRt4vIl/6rU zywRFDo72Oz5xVKy34cykE6oaeS64mGbroUUIhQiFCIUIhQiFCLSCQ2Fp2ZQHQ1aMQP7S6jmgLOl cBh0JjIaNbzju4VoiNMiMNK94VfZ1knPTyLOr2n3oe1pFOGZwFdj+OgDEpeXfcv5MC3xtickPj0D 724Vw4rn2WmX1R54+XKd1TKlPOV9iLhrndF3qbB1jHe3ieNnNWIhXRYZgmhqoZoTeTSg17Wyobar 6HOGhGqIWBoWUkQikqbwlLOwn7S2zvRX2EPiToZEP0cg9PtN0aAaUow6aqVrfi98ld7yhythMZvZ KEQoRChEKEQoRChEKEQoRAylBM4YyQ7NU88IUw13WXSksSvmOjOqWBVz/eyWmflD3Rl4LqzcRUho oZSJsY6amfmlVxkxexnG0KMjWqaUgRXnswJ6l102Mq84Qmh6ewS/zqFdIgdd6e0UG3v/XyvfLdR6 Oc9aslN9Uq/KEP5fywe3SvW0YPN9aHZLdWdxfhL1Ktv9tJ9VazhnWmlv5t3Z3179W5PQGbXjsuhL /3SF1d0Bj/+uWcnQw9Qq8D1dF5ISeDeIbJW6XdDUeheOaGFLaBIKEQoRChEKEQoRChEKEQoR6YSs rkMoRChEdM3kz+Q5LbSL0PpDEaRrIdwDbzXpWkghQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiFC IUIhIp1QeDGbUbqK2cykuXZMKZvW5F9hMZsrmVVUd9m2qqcHu9IpToV2RqfT3am7cxRnUZXFuZLn ddlqqmpYreSH0O7zp5SnddkOFCIUIhQiFCJ+CKVfjJJ61LEKhQgsIrGaprH9CvJ3WSljibijPKOF StnXSrmHQcTyTWjOWN114WU2Rkk3pefGjoRChEJEU+2YFXyVUr6v5d1vi6VknNLb+TJ2xnCplmhu K6PsIHd4KkPX5bwxvrO7lfK3UCkPyC9z5JqJ56SVXhXTms1zWmgXChEKEQoRChHPEdq1Du05LbSL ZwptX8eYYrIhC7iOcfvCynfSh6dWcDnHuP0lf/fc4sHpPHWqyYbdc435Js5rNpFdyek89U5y34cy oBChEKEQoRChEKEQkU4IV1ilynPdgULEZfVl2pmr5veGha4Oevdv0QwPpaMlv1uodXvUWbeA5l1x thUAuGqlLauFU2eTr9r77qA6eXvVMp7LnZWutiWctV0hCu0i3bNMIUIhQiFCIUIhQiFCIUIhQiFC IUIhQiFCIUIhQiEinVB1AYBVE6HpWkghQiFCISKd0PeNsTV2Qb/fe+NM10LphE5jrmf4LMuCQoRC hEJEOqHqUYdJk1lQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiLhc +7G9UlwWFCIUIk6FUlUb3E1+od3Z7tVLvlaRv8t2oxChEKEQoRChEKEQoRChEKEQoRChEKEQoRCR TuiyLmwNM2ZM0rVQOqEfXZZh0ipdCylEKEQoRChEKEQoRChEKEQoRChEKEQoRChEKEQoRChEKEQo RChEKEQoRChEKEQoRChEKEQoRNwutdgRx0/XQgoRrv0gFCIUIhQiFCIUIhQiFCIUItIJVRfuf+d9 uBT92tvcQq3L5FsZ6rLta/Jnt04pAy3kNj2frOiuUjpbaOYI95ldtqq7SuloodkTEii0snVKaWyh FdM1zzqpV3dXKQ0t5L5Bn+zorlIqW2jlZOip0K7WKaWihVZPFec/qXd2VynQQkaDyofQ7u4q5aaF ttf0zNA6pVy0kPUY3/hfKXm6q5STFtodVUzXZf9K2d8q76RrIYUIhQiFCIUIhQiFCIWIqgDe1Svu jPeoS6Ga9+zjdyLFQuaHIgcJ1bMfr9fr+38zpaomrD4lrsQipG4nG+jc2B5zXcHlZEPtt//8vdFu y9tCWVCIUIhQiFCIUIhQiMgr1PteE50ClreFSmlvpRkxEhy5ng0GZ45kv14nn9LzzaNGICEBvMjh 0GWXHQdZOdFwKzT7wFfkvuwzoBChEKEQoRChEKEQoRDxbKHjdXbmErFfr7A7xmLv5O6yDKv1fg2l j1HG5/9vETrYKZX7HMqAQoRChEKEQoRChEKEQoRChEKEQoRCRDqh6vpDFgDIgkKEQoRChEKEQoRC hEKEQsRQBl4p8a+2t0I7svDCalhFBf9OW+jsw2vWyX59fcWvFq6ROf5tS8Jb60FD88t6FmtvL1Q7 m3RCf297jP9WkkAGhoRmbOvTLTRrj6EuoZmraJqFap91vXQt+ZolU8rgSb01vX3VRllVQqmqL684 b965FVotU0rjS/626su7ZEqpPKlXvifd7oG3g+Gh9BW9rfq33odm8Pde8qNRiFCIUIhQiFCIUIhQ iFCISCf0nBKadyJnP586x/j19bUtgFcVLztYUUazuxDJVeWU0ajicNLk0knP7Vus7MrcfOdXC+2W Snen/lsBvC1FtWoPvDU89cm2aNAVPc++y886KzvWIvLJ1pN6Rkno4S5LFcA7iKzA/Pfu1NFcvjGm 2Edxt0wpHRHF2dxWrKwl8onfFQRu+XkrTRUrV5TRPH39eL1elwsnZ3PZZT1lNCMeI7cvaKsqnVYL zTzwFfkfHbtRiFCIUIhQiFCIUIhQiFCIqH6FfWfmStB0LRSyJj+SZ7fQ1pHrJ6umZp7ZZasyFkrp mB/atiZ/F01zjNuSBM7YPvuRYp76YEdXHeQ/qXe2TinZl1pkSDT5FtrdVQfpTuqv1+v1mtFVpuLM 4l8pfc2bKjV5JgoRChHphLpmP0rZnLy9EoUIhQiFCIUIhQiFCIUIhYh0QtX1GGuxMNtsqkYdTgtn Iv889e76MU1ppStIdw5VTzasKrSFQnddGF3ouJSE+WXdC7xnnfwYDbpaaz8jt+yX0OdB6NxYclKP HiQ0m7yHlBl4kShEmIFHhKe3jxKeEhg6Lmt9HMzo2q41aFdP94ibZFNK4B1Tg8Ct2XSRj4+qDLw0 5X5mHviK/I+O3ShEKEQoRChEKEQoRChEKEQ0rUG7GvpEbKT2fQwqqtUyJJq+b9D26jrv3I1MqZTm CNUj1+2pOO9sHZelC+Dt5ja0sD3zJQPDd+pSNsTLKB4WeQMd3j7183enFNU6Y0sAr1bm+LflBSJr nlePCE9tLxCZLkweiUJEbqFVN787wtZ+vLO1YmU0w0u+lpTQvDvQ7AhRczrX7K3lb0to7gjiVe+1 kGYN2syDn5H7Tp0BhQiFCIUIhQiFCIUIhQiFiO9X2OjxleV+ZvHdZSOjisjuntJCW7MWUm8XNj0q vYNuoVQ1rGZGHp/fZbPjskMtNGOKpkkodW1hS0btoivRZGux49UoRDRHg6xPvRuFCIUIhYju3dtn ka6FFCIUIhQiFCIUIhQiFCIUItIJVa1Bm71U8J1LodoJzujibKdd1jPbOq0wW+2S0qvN1KcvPb06 AK2J7QUrxbUyPdGESBXrmMGzhLYnCWTYrqc78XZpDaurA94xPQi8q4ZVU/J2xO8S1Q9XyiCPkvp1 DrVcNTNO7KHU5KlR6d4mj864CrnKInnWs2wHzxFqHXVE8S0UdRJPXYNG3356Cc2r7PCrIc8MnlNC c4dMKTcDxZqB4JYMPAN4uwU+UYhQiFCIUIhQiFCIUIhQiOjeyGjWq213AO/959MnPVvHZVMnPe+6 aPmkZ+sk5vRJz9YPTznpGc3wpOeyWdhdKEQ8R2j7Vk+7QgmfDM/CTl1q0VKjc1aXDi9oiua0dN2u APCpUO2BZlXwrtpZaSXPuTHu4m+VSJhBaM2GCMJKJJQSc1XermOcUe65Wajn4KlqNkxfnPt+gNXB u1OhFQe942/dh2agEKEQoRChEKEQoRChEKEQoRChEKEQkU7ox8jVLedOUIj4cQ5lCFGlayGFCIUI hQiFCIUIhYh0Qr7CEgoRvsISChEKEQoRChEKEQoRChEKEQoRChEKEQoRzn4QChHOfhAKEQoRChEK EQoRChG+MRIKEQoRw5VRonlOC+3iVGjncMhxGaEQoRChEKEQoRChEKEQoRChEKEQ8feEplYbbOG9 9GGkVFW1wU+RT7aUjLorBrm0hehgaTLine truncated
|
||||
preserveAspectRatio="none"
|
||||
height="1244.6"
|
||||
width="9.5249996"
|
||||
style="display:none" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#fd0000;fill-opacity:0.6350711;stroke:none;stroke-width:0.26458332;stroke-opacity:1"
|
||||
x="-2.5308407e-06"
|
||||
y="-873.23492"
|
||||
id="text4630"><tspan
|
||||
sodipodi:role="line"
|
||||
x="-2.5308407e-06"
|
||||
y="-863.87115"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.58194447px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#fd0000;fill-opacity:0.6350711;stroke:none;stroke-width:0.26458332;stroke-opacity:1"
|
||||
id="tspan4634" /></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.26181126px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20578496"
|
||||
x="-3.5527137e-15"
|
||||
y="-38.800373"
|
||||
id="text4642"
|
||||
inkscape:export-xdpi="91.400002"
|
||||
inkscape:export-ydpi="91.400002"><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="-29.721075"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.3770504px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4614" /><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="-16.761999"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4658"> ̀</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="-3.8029218"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4553"> ́</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="9.1561546"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4555"> ̂</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="22.115232"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4557"> ̃</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="35.07431"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4559"> ̈</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="48.033386"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4561"> ̊</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="60.992462"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4609"> ̧</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="73.951538"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan8898">ı</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="86.910614"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4565">ß</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="99.86969"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4742">Ø</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="112.82877"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4750">ø</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="125.78785"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4626">Æ</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="138.74692"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4788">æ</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="151.70599"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4792">Ð</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="164.66507"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4796">ð</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="177.62415"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4798">Þ</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="190.58324"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4637">þ</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="203.54231"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4767">«</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="216.50139"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4771">»</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="229.46046"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4643">¡</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="242.41954"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4720">¿</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="255.37862"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4775">¢</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="268.33768"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4724">£</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="281.29675"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4726">¤</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="-3.5527137e-15"
|
||||
y="294.25583"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.93611145px;line-height:1.16499996;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#000000;fill-opacity:1;stroke-width:0.20578496"
|
||||
id="tspan4654">¥</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
x="0"
|
||||
y="-1286.5312"
|
||||
id="text5550"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5548"
|
||||
x="0"
|
||||
y="-1277.1675"
|
||||
style="stroke-width:0.26458332" /></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
x="0"
|
||||
y="-1286.5312"
|
||||
id="text8872"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan8870"
|
||||
x="0"
|
||||
y="-1277.1675"
|
||||
style="stroke-width:0.26458332" /></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
x="0"
|
||||
y="-1269.8625"
|
||||
id="text8876"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan8874"
|
||||
x="0"
|
||||
y="-1260.4988"
|
||||
style="stroke-width:0.26458332" /></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
x="0"
|
||||
y="196.98749"
|
||||
id="text4641"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4639"
|
||||
x="0"
|
||||
y="206.35126"
|
||||
style="stroke-width:0.26458332" /></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
x="0"
|
||||
y="230.325"
|
||||
id="text4649"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4647"
|
||||
x="0"
|
||||
y="239.68877"
|
||||
style="stroke-width:0.26458332" /></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
x="0"
|
||||
y="10.456248"
|
||||
id="text4532"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4530"
|
||||
x="0"
|
||||
y="19.820017"
|
||||
style="stroke-width:0.26458332" /></text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 33 KiB |
+46
@@ -0,0 +1,46 @@
|
||||
/*******************
|
||||
* font_size_t.cpp *
|
||||
*******************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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 3 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#include "../ftdi_extended.h"
|
||||
|
||||
#if defined(FTDI_EXTENDED) && defined(TOUCH_UI_USE_UTF8)
|
||||
|
||||
namespace FTDI {
|
||||
// Returns the height of a standard FTDI romfont
|
||||
uint8_t font_size_t::get_romfont_height(uint8_t font) {
|
||||
static const uint8_t tbl[] PROGMEM = {
|
||||
8, 8, 16, 16, 13, 17, 20, 22, 29, 38, 16, 20, 25, 28, 36, 49, 63, 83, 108
|
||||
};
|
||||
return pgm_read_byte(&tbl[font - 16]);
|
||||
}
|
||||
|
||||
// Sets the scaling coefficient to match a romfont size
|
||||
font_size_t font_size_t::from_romfont(uint8_t font) {
|
||||
return font_size_t(uint32_t(std_height) * 256 / get_romfont_height(font));
|
||||
}
|
||||
|
||||
// Returns the height of the font
|
||||
uint8_t font_size_t::get_height() const {
|
||||
return scale(std_height);
|
||||
}
|
||||
}
|
||||
|
||||
#endif // FTDI_EXTENDED && TOUCH_UI_USE_UTF8
|
||||
@@ -0,0 +1,55 @@
|
||||
/*****************
|
||||
* font_size_t.h *
|
||||
*****************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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 3 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
class CommandProcessor;
|
||||
|
||||
namespace FTDI {
|
||||
|
||||
/* The unicode rendering of different font sizes happens by scaling a
|
||||
* large-sized font bitmap using the FTDI bitmap transformation matrix.
|
||||
* This keeps us from having to have load bitmaps for all font sizes.
|
||||
*
|
||||
* The font_size_t class helps manage this scaling factor.
|
||||
*/
|
||||
class font_size_t {
|
||||
private:
|
||||
// Standard height for font bitmaps
|
||||
static constexpr uint8_t std_height = 49;
|
||||
|
||||
// 8.8 fixed point scaling coefficient
|
||||
uint16_t coefficient;
|
||||
|
||||
font_size_t(uint16_t v) : coefficient(v) {}
|
||||
public:
|
||||
font_size_t() : coefficient(256) {}
|
||||
|
||||
static uint8_t get_romfont_height(uint8_t font);
|
||||
|
||||
static font_size_t from_romfont(uint8_t size);
|
||||
|
||||
template<typename T> T scale(T val) const {return (int32_t(val) * 256 / coefficient);}
|
||||
|
||||
uint8_t get_height() const;
|
||||
uint16_t get_coefficient() const {return coefficient;}
|
||||
};
|
||||
}
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
/*************************
|
||||
* standard_char_set.cpp *
|
||||
*************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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 3 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#include "../ftdi_extended.h"
|
||||
|
||||
#if defined(FTDI_EXTENDED) && defined(TOUCH_UI_USE_UTF8)
|
||||
|
||||
constexpr static uint8_t std_font = 31;
|
||||
|
||||
/* Lookup table of the char widths for standard ROMFONT 31 */
|
||||
|
||||
uint8_t FTDI::StandardCharSet::std_char_width(char c) {
|
||||
static const uint8_t tbl[] PROGMEM = {
|
||||
10, 11, 15, 26, 25, 31, 26, 10, 15, 14, 18, 24, 9, 18, 11, 17, 24, 24,
|
||||
24, 24, 24, 24, 24, 24, 24, 24, 10, 10, 21, 23, 22, 20, 37, 27, 27, 26,
|
||||
28, 23, 22, 28, 29, 12, 23, 26, 22, 35, 29, 28, 26, 29, 27, 26, 26, 28,
|
||||
27, 36, 27, 26, 25, 12, 18, 12, 18, 21, 13, 23, 24, 22, 24, 22, 15, 24,
|
||||
24, 10, 11, 22, 10, 36, 24, 24, 24, 24, 15, 22, 14, 24, 21, 32, 21, 21,
|
||||
22, 15, 10, 15, 29, 10
|
||||
};
|
||||
return pgm_read_byte(&tbl[c - ' ']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load bitmap data into RAMG. This function is called once at the start
|
||||
* of the program.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* addr - Address in RAMG where the font data is written
|
||||
*/
|
||||
|
||||
void FTDI::StandardCharSet::load_data(uint32_t) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Populates the bitmap handles for the custom into the display list.
|
||||
* This function is called once at the start of each display list.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* cmd - Object used for writing to the FTDI chip command queue.
|
||||
*/
|
||||
|
||||
void FTDI::StandardCharSet::load_bitmaps(CommandProcessor& cmd) {
|
||||
CLCD::FontMetrics std_fm(std_font);
|
||||
set_font_bitmap(cmd, std_fm, std_font);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a character at location x and y. The x position is incremented
|
||||
* by the width of the character.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* cmd - If non-NULL the symbol is drawn to the screen.
|
||||
* If NULL, only increment position for text measurement.
|
||||
*
|
||||
* x, y - The location at which to draw the character. On output,
|
||||
* incremented to the location of the next character.
|
||||
*
|
||||
* fs - A scaling object used to scale the font. The display will
|
||||
* already be configured to scale bitmaps, but positions
|
||||
* must be scaled using fs.scale()
|
||||
*
|
||||
* c - The unicode code point to draw. If the renderer does not
|
||||
* support the character, it should draw nothing.
|
||||
*/
|
||||
|
||||
bool FTDI::StandardCharSet::render_glyph(CommandProcessor* cmd, int &x, int &y, font_size_t fs, utf8_char_t c) {
|
||||
uint8_t which = (c >= ' ' && c < 128) ? c : '?';
|
||||
uint8_t width = std_char_width(which);
|
||||
|
||||
// Draw the character
|
||||
if (cmd) ext_vertex2ii(*cmd, x, y, std_font, which);
|
||||
|
||||
// Increment X to the next character position
|
||||
x += fs.scale(width);
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif // FTDI_EXTENDED
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
/***********************
|
||||
* standard_char_set.h *
|
||||
***********************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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 3 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
namespace FTDI {
|
||||
class StandardCharSet {
|
||||
public:
|
||||
static uint8_t std_char_width(char);
|
||||
static void load_data(uint32_t addr);
|
||||
static void load_bitmaps(CommandProcessor&);
|
||||
static bool render_glyph(CommandProcessor*, int &x, int &y, font_size_t, utf8_char_t);
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
/***************
|
||||
* unicode.cpp *
|
||||
***************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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 3 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#include "../ftdi_extended.h"
|
||||
|
||||
#if defined(FTDI_EXTENDED) && defined(TOUCH_UI_USE_UTF8)
|
||||
|
||||
using namespace FTDI;
|
||||
|
||||
/**
|
||||
* Return a character in a UTF8 string and increment the
|
||||
* pointer to the next character
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* c - Pointer to a UTF8 encoded string.
|
||||
*
|
||||
* Returns: The packed bytes of a UTF8 encoding of a single
|
||||
* character (this is not the unicode codepoint)
|
||||
*/
|
||||
|
||||
utf8_char_t FTDI::get_utf8_char_and_inc(const char *&c) {
|
||||
utf8_char_t val = *(uint8_t*)c++;
|
||||
while ((*c & 0xC0) == 0x80)
|
||||
val = (val << 8) | *(uint8_t*)c++;
|
||||
return val;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to draw and/or measure a UTF8 string
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* cmd - If non-NULL the symbol is drawn to the screen.
|
||||
* If NULL, only increment position for text measurement.
|
||||
*
|
||||
* x, y - The location at which to draw the string.
|
||||
*
|
||||
* str - The UTF8 string to draw or measure.
|
||||
*
|
||||
* fs - A scaling object used to specify the font size.
|
||||
*/
|
||||
|
||||
static uint16_t render_utf8_text(CommandProcessor* cmd, int x, int y, const char *str, font_size_t fs) {
|
||||
const int start_x = x;
|
||||
while (*str) {
|
||||
const utf8_char_t c = get_utf8_char_and_inc(str);
|
||||
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET
|
||||
WesternCharSet::render_glyph(cmd, x, y, fs, c) ||
|
||||
#endif
|
||||
StandardCharSet::render_glyph(cmd, x, y, fs, c);
|
||||
}
|
||||
return x - start_x;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the font bitmap data into RAMG. Called once at program start.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* addr - Address in RAMG where the font data is written
|
||||
*/
|
||||
|
||||
void FTDI::load_utf8_data(uint16_t addr) {
|
||||
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET
|
||||
WesternCharSet::load_data(addr);
|
||||
#endif
|
||||
StandardCharSet::load_data(addr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Populate the bitmap handles for the custom fonts into the display list.
|
||||
* Called once at the start of each display list.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* cmd - Object used for writing to the FTDI chip command queue.
|
||||
*/
|
||||
|
||||
void FTDI::load_utf8_bitmaps(CommandProcessor &cmd) {
|
||||
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET
|
||||
WesternCharSet::load_bitmaps(cmd);
|
||||
#endif
|
||||
StandardCharSet::load_bitmaps(cmd);
|
||||
}
|
||||
|
||||
/**
|
||||
* Measure a UTF8 text character
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* c - The unicode code point to measure.
|
||||
*
|
||||
* fs - A scaling object used to specify the font size.
|
||||
*
|
||||
* Returns: A width in pixels
|
||||
*/
|
||||
|
||||
uint16_t FTDI::get_utf8_char_width(utf8_char_t c, font_size_t fs) {
|
||||
int x = 0, y = 0;
|
||||
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET
|
||||
WesternCharSet::render_glyph(NULL, x, y, fs, c) ||
|
||||
#endif
|
||||
StandardCharSet::render_glyph(NULL, x, y, fs, c);
|
||||
return x;
|
||||
}
|
||||
|
||||
/**
|
||||
* Measure a UTF8 text string
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* str - The UTF8 string to measure.
|
||||
*
|
||||
* fs - A scaling object used to specify the font size.
|
||||
*
|
||||
* Returns: A width in pixels
|
||||
*/
|
||||
|
||||
uint16_t FTDI::get_utf8_text_width(const char *str, font_size_t fs) {
|
||||
return render_utf8_text(NULL, 0, 0, str, fs);
|
||||
}
|
||||
|
||||
uint16_t FTDI::get_utf8_text_width(progmem_str pstr, font_size_t fs) {
|
||||
char str[strlen_P((const char*)pstr) + 1];
|
||||
strcpy_P(str, (const char*)pstr);
|
||||
return get_utf8_text_width((const char*) pstr, fs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw a UTF8 text string
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* cmd - Object used for writing to the FTDI chip command queue.
|
||||
*
|
||||
* x, y - The location at which to draw the string.
|
||||
*
|
||||
* str - The UTF8 string to draw.
|
||||
*
|
||||
* fs - A scaling object used to specify the font size.
|
||||
*
|
||||
* options - Text alignment options (i.e. OPT_CENTERX, OPT_CENTERY, OPT_CENTER or OPT_RIGHTX)
|
||||
*
|
||||
*/
|
||||
|
||||
void FTDI::draw_utf8_text(CommandProcessor& cmd, int x, int y, const char *str, font_size_t fs, uint16_t options) {
|
||||
cmd.cmd(SAVE_CONTEXT());
|
||||
cmd.cmd(BITMAP_TRANSFORM_A(fs.get_coefficient()));
|
||||
cmd.cmd(BITMAP_TRANSFORM_E(fs.get_coefficient()));
|
||||
cmd.cmd(BEGIN(BITMAPS));
|
||||
|
||||
// Apply alignment options
|
||||
if (options & OPT_CENTERX)
|
||||
x -= get_utf8_text_width(str, fs) / 2;
|
||||
else if (options & OPT_RIGHTX)
|
||||
x -= get_utf8_text_width(str, fs);
|
||||
if (options & OPT_CENTERY)
|
||||
y -= fs.get_height()/2;
|
||||
|
||||
// Render the text
|
||||
render_utf8_text(&cmd, x, y, str, fs);
|
||||
cmd.cmd(RESTORE_CONTEXT());
|
||||
}
|
||||
|
||||
void FTDI::draw_utf8_text(CommandProcessor& cmd, int x, int y, progmem_str pstr, font_size_t fs, uint16_t options) {
|
||||
char str[strlen_P((const char*)pstr) + 1];
|
||||
strcpy_P(str, (const char*)pstr);
|
||||
draw_utf8_text(cmd, x, y, (const char*) str, fs, options);
|
||||
}
|
||||
|
||||
#endif // FTDI_EXTENDED && TOUCH_UI_USE_UTF8
|
||||
@@ -0,0 +1,106 @@
|
||||
/*************
|
||||
* unicode.h *
|
||||
*************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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 3 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
class CommandProcessor;
|
||||
|
||||
namespace FTDI {
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
typedef uint16_t utf8_char_t;
|
||||
|
||||
/**
|
||||
* Converts a 32-bit codepoint into UTF-8. This compile-time function
|
||||
* will be useful until the u8'a' character literal becomes more common.
|
||||
*/
|
||||
constexpr uint32_t utf8(const uint32_t c) {
|
||||
return (c < 0x7F ) ? c :
|
||||
(c < 0x7FF) ? (0x0000C080 | ((c & 0b011111000000) << 2) | (c & 0b111111)) :
|
||||
(c < 0xFFFF) ? (0x00E08080 | ((c & 0b001111000000000000) << 4) | ((c & 0b111111000000) << 2) | (c & 0b111111)) :
|
||||
(0xF0808080 | ((c & 0b000111000000000000000000) << 6) | ((c & 0b111111000000000000) << 4) | ((c & 0b111111000000) << 2) | (c & 0b111111));
|
||||
}
|
||||
|
||||
/* Returns the next character in a UTF8 string and increments the
|
||||
* pointer to the next character */
|
||||
|
||||
utf8_char_t get_utf8_char_and_inc(const char *&c);
|
||||
|
||||
/* Returns the next character in a UTF8 string, without incrementing */
|
||||
|
||||
inline utf8_char_t get_utf8_char(const char *c) {return get_utf8_char_and_inc(c);}
|
||||
|
||||
void load_utf8_data(uint16_t addr);
|
||||
#else
|
||||
typedef char utf8_char_t;
|
||||
|
||||
inline utf8_char_t get_utf8_char_and_inc(const char *&c) {return *c++;}
|
||||
inline utf8_char_t get_utf8_char(const char *c) {return *c;}
|
||||
|
||||
inline void load_utf8_data(uint16_t) {}
|
||||
#endif
|
||||
|
||||
void load_utf8_bitmaps(CommandProcessor& cmd);
|
||||
|
||||
uint16_t get_utf8_char_width(utf8_char_t, font_size_t);
|
||||
uint16_t get_utf8_text_width(progmem_str, font_size_t);
|
||||
uint16_t get_utf8_text_width(const char *, font_size_t);
|
||||
|
||||
void draw_utf8_text(CommandProcessor&, int x, int y, progmem_str, font_size_t, uint16_t options = 0);
|
||||
void draw_utf8_text(CommandProcessor&, int x, int y, const char *, font_size_t, uint16_t options = 0);
|
||||
|
||||
// Similar to CLCD::FontMetrics, but can be used with UTF8 encoded strings.
|
||||
|
||||
struct FontMetrics {
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
font_size_t fs;
|
||||
#else
|
||||
CLCD::FontMetrics fm;
|
||||
#endif
|
||||
|
||||
inline void load(uint8_t rom_font_size) {
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
fs = font_size_t::from_romfont(rom_font_size);
|
||||
#else
|
||||
fm.load(rom_font_size);
|
||||
#endif
|
||||
}
|
||||
|
||||
inline uint16_t get_char_width(utf8_char_t c) const {
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
return get_utf8_char_width(c, fs);
|
||||
#else
|
||||
return fm.char_widths[(uint8_t)c];
|
||||
#endif
|
||||
}
|
||||
|
||||
inline uint8_t get_height() const {
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
return fs.get_height();
|
||||
#else
|
||||
return fm.height;
|
||||
#endif
|
||||
}
|
||||
|
||||
inline FontMetrics(uint8_t rom_font_size) {
|
||||
load(rom_font_size);
|
||||
}
|
||||
};
|
||||
}
|
||||
+338
@@ -0,0 +1,338 @@
|
||||
/************************
|
||||
* western_char_set.cpp *
|
||||
************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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 3 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#include "../ftdi_extended.h"
|
||||
|
||||
#if defined(FTDI_EXTENDED) && defined(TOUCH_UI_USE_UTF8) && defined(TOUCH_UI_UTF8_WESTERN_CHARSET)
|
||||
#include "western_char_set_bitmap_31.h"
|
||||
|
||||
#define NUM_ELEMENTS(a) (sizeof(a)/sizeof(a[0]))
|
||||
|
||||
using namespace FTDI;
|
||||
|
||||
constexpr static uint8_t std_font = 31;
|
||||
constexpr static uint8_t alt_font = 1;
|
||||
|
||||
static uint32_t bitmap_addr;
|
||||
|
||||
/* Glyphs in the WesternCharSet bitmap */
|
||||
|
||||
enum {
|
||||
GRAVE,
|
||||
ACUTE,
|
||||
CIRCUMFLEX,
|
||||
TILDE,
|
||||
DIAERESIS,
|
||||
DOT_ABOVE,
|
||||
CEDILLA,
|
||||
NO_DOT_I,
|
||||
SHARP_S,
|
||||
LRG_O_STROKE,
|
||||
SML_O_STROKE,
|
||||
LRG_AE,
|
||||
SML_AE,
|
||||
LRG_ETH,
|
||||
SML_ETH,
|
||||
LRG_THORN,
|
||||
SML_THORN,
|
||||
LEFT_DBL_QUOTE,
|
||||
RIGHT_DBL_QUOTE,
|
||||
INV_EXCLAMATION,
|
||||
INV_QUESTION,
|
||||
CENT_SIGN,
|
||||
POUND_SIGN,
|
||||
CURRENCY_SIGN,
|
||||
YEN_SIGN
|
||||
};
|
||||
|
||||
/* Centerline of characters that can take accents */
|
||||
|
||||
constexpr int8_t mid_a = 12;
|
||||
constexpr int8_t mid_e = 12;
|
||||
constexpr int8_t mid_i = 5;
|
||||
constexpr int8_t mid_o = 12;
|
||||
constexpr int8_t mid_u = 12;
|
||||
constexpr int8_t mid_y = 11;
|
||||
constexpr int8_t mid_n = 12;
|
||||
constexpr int8_t mid_c = 12;
|
||||
constexpr int8_t mid_A = 13;
|
||||
constexpr int8_t mid_E = 13;
|
||||
constexpr int8_t mid_I = 6;
|
||||
constexpr int8_t mid_O = 14;
|
||||
constexpr int8_t mid_U = 14;
|
||||
constexpr int8_t mid_Y = 13;
|
||||
constexpr int8_t mid_N = 15;
|
||||
constexpr int8_t mid_C = 13;
|
||||
|
||||
/* Centerline of accent glyphs */
|
||||
|
||||
constexpr int8_t mid_accent = 16;
|
||||
|
||||
/* When reusing the DOT_ABOVE accent glyph for the degree sign, we need to trim the leading space */
|
||||
constexpr uint8_t deg_sign_leading = 9;
|
||||
|
||||
/* Look-up table for constructing characters (must be ordered by unicode)
|
||||
*
|
||||
* Characters are either complete symbols from the Western Char Set bitmap,
|
||||
* or they are constructed using a standard letter from the romfont and
|
||||
* drawing an accent from the Western Char Set bitmap over it.
|
||||
*/
|
||||
|
||||
#define UTF8(A) uint16_t(utf8(U##A))
|
||||
|
||||
PROGMEM constexpr struct {
|
||||
uint16_t unicode;
|
||||
uint8_t std_char; // Glyph from standard ROMFONT (zero if none)
|
||||
uint8_t alt_char; // Glyph from Western Char Set bitmap
|
||||
uint8_t alt_data; // For accented characters, the centerline; else char width
|
||||
} char_recipe[] = {
|
||||
{0, 0, NO_DOT_I, 10 },
|
||||
{UTF8('¡'), 0 , INV_EXCLAMATION, 13 },
|
||||
{UTF8('¢'), 0 , CENT_SIGN, 23 },
|
||||
{UTF8('£'), 0 , POUND_SIGN, 24 },
|
||||
{UTF8('¤'), 0 , CURRENCY_SIGN, 26 },
|
||||
{UTF8('¥'), 0 , YEN_SIGN, 26 },
|
||||
{UTF8('«'), 0 , LEFT_DBL_QUOTE, 23 },
|
||||
{UTF8('°'), 0 , DOT_ABOVE, 24 },
|
||||
{UTF8('»'), 0 , RIGHT_DBL_QUOTE, 24 },
|
||||
{UTF8('¿'), 0 , INV_QUESTION, 21 },
|
||||
{UTF8('À'), 'A', GRAVE, mid_A},
|
||||
{UTF8('Á'), 'A', ACUTE, mid_A},
|
||||
{UTF8('Â'), 'A', CIRCUMFLEX, mid_A},
|
||||
{UTF8('Ã'), 'A', TILDE, mid_A},
|
||||
{UTF8('Ä'), 'A', DIAERESIS, mid_A},
|
||||
{UTF8('Å'), 'A', DOT_ABOVE, mid_A},
|
||||
{UTF8('Æ'), 0 , LRG_AE, mid_E},
|
||||
{UTF8('Ç'), 'C', CEDILLA, mid_C},
|
||||
{UTF8('È'), 'E', GRAVE, mid_E},
|
||||
{UTF8('É'), 'E', ACUTE, mid_E},
|
||||
{UTF8('Ê'), 'E', CIRCUMFLEX, mid_E},
|
||||
{UTF8('Ë'), 'E', DIAERESIS, mid_E},
|
||||
{UTF8('Ì'), 'I', GRAVE, mid_I},
|
||||
{UTF8('Í'), 'I', ACUTE, mid_I},
|
||||
{UTF8('Î'), 'I', CIRCUMFLEX, mid_I},
|
||||
{UTF8('Ï'), 'I', DIAERESIS, mid_I},
|
||||
{UTF8('Ð'), 0, LRG_ETH, 31 },
|
||||
{UTF8('Ñ'), 'N', TILDE, mid_N},
|
||||
{UTF8('Ò'), 'O', GRAVE, mid_O},
|
||||
{UTF8('Ó'), 'O', ACUTE, mid_O},
|
||||
{UTF8('Ô'), 'O', CIRCUMFLEX, mid_O},
|
||||
{UTF8('Õ'), 'O', TILDE, mid_O},
|
||||
{UTF8('Ö'), 'O', DIAERESIS, mid_O},
|
||||
{UTF8('Ø'), 0 , LRG_O_STROKE, 32 },
|
||||
{UTF8('Ù'), 'U', GRAVE, mid_U},
|
||||
{UTF8('Ú'), 'U', ACUTE, mid_U},
|
||||
{UTF8('Û'), 'U', CIRCUMFLEX, mid_U},
|
||||
{UTF8('Ü'), 'U', DIAERESIS, mid_U},
|
||||
{UTF8('Ý'), 'Y', ACUTE, mid_Y},
|
||||
{UTF8('Þ'), 0 , LRG_THORN, 25 },
|
||||
{UTF8('ß'), 0 , SHARP_S, 26 },
|
||||
{UTF8('à'), 'a', GRAVE, mid_a},
|
||||
{UTF8('á'), 'a', ACUTE, mid_a},
|
||||
{UTF8('â'), 'a', CIRCUMFLEX, mid_a},
|
||||
{UTF8('ã'), 'a', TILDE, mid_a},
|
||||
{UTF8('ä'), 'a', DIAERESIS, mid_a},
|
||||
{UTF8('å'), 'a', DOT_ABOVE, mid_a},
|
||||
{UTF8('æ'), 0 , SML_AE, 40 },
|
||||
{UTF8('ç'), 'c', CEDILLA, mid_c},
|
||||
{UTF8('è'), 'e', GRAVE, mid_e},
|
||||
{UTF8('é'), 'e', ACUTE, mid_e},
|
||||
{UTF8('ê'), 'e', CIRCUMFLEX, mid_e},
|
||||
{UTF8('ë'), 'e', DIAERESIS, mid_e},
|
||||
{UTF8('ì'), 'i', GRAVE, mid_i},
|
||||
{UTF8('í'), 'i', ACUTE, mid_i},
|
||||
{UTF8('î'), 'i', CIRCUMFLEX, mid_i},
|
||||
{UTF8('ï'), 'i', DIAERESIS, mid_i},
|
||||
{UTF8('ð'), 0, SML_ETH, 24 },
|
||||
{UTF8('ñ'), 'n', TILDE, mid_n},
|
||||
{UTF8('ò'), 'o', GRAVE, mid_o},
|
||||
{UTF8('ó'), 'o', ACUTE, mid_o},
|
||||
{UTF8('ô'), 'o', CIRCUMFLEX, mid_o},
|
||||
{UTF8('õ'), 'o', TILDE, mid_o},
|
||||
{UTF8('ö'), 'o', DIAERESIS, mid_o},
|
||||
{UTF8('ø'), 0 , SML_O_STROKE, 25 },
|
||||
{UTF8('ù'), 'u', GRAVE, mid_u},
|
||||
{UTF8('ú'), 'u', ACUTE, mid_u},
|
||||
{UTF8('û'), 'u', CIRCUMFLEX, mid_u},
|
||||
{UTF8('ü'), 'u', DIAERESIS, mid_u},
|
||||
{UTF8('ý'), 'y', ACUTE, mid_y},
|
||||
{UTF8('þ'), 0 , SML_THORN, 25 },
|
||||
{UTF8('ÿ'), 'y', DIAERESIS, mid_y}
|
||||
};
|
||||
|
||||
static_assert(UTF8('¡') == 0xC2A1, "Incorrect encoding for character");
|
||||
|
||||
/* Compile-time check that the table is in sorted order */
|
||||
|
||||
constexpr bool is_sorted(size_t n) {
|
||||
return n < 2 ? true : char_recipe[n-2].unicode < char_recipe[n-1].unicode && is_sorted(n-1);
|
||||
}
|
||||
|
||||
static_assert(is_sorted(NUM_ELEMENTS(char_recipe)), "The table must be sorted by unicode value");
|
||||
|
||||
/* Performs a binary search to find a unicode character in the table */
|
||||
|
||||
static int8_t find_char_data(FTDI::utf8_char_t c) {
|
||||
int8_t min = 0, max = NUM_ELEMENTS(char_recipe), index;
|
||||
for (;;) {
|
||||
index = (min + max)/2;
|
||||
const uint16_t char_at = pgm_read_word(&char_recipe[index].unicode);
|
||||
if (char_at == c) break;
|
||||
if (min == max) return -1;
|
||||
if (c > char_at)
|
||||
min = index + 1;
|
||||
else
|
||||
max = index;
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
static void get_char_data(uint8_t index, uint8_t &std_char, uint8_t &alt_char, uint8_t &alt_data) {
|
||||
std_char = pgm_read_byte(&char_recipe[index].std_char);
|
||||
alt_char = pgm_read_byte(&char_recipe[index].alt_char);
|
||||
alt_data = pgm_read_byte(&char_recipe[index].alt_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load bitmap data into RAMG. This function is called once at the start
|
||||
* of the program.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* addr - Address in RAMG where the font data is written
|
||||
*/
|
||||
|
||||
void FTDI::WesternCharSet::load_data(uint32_t addr) {
|
||||
// Load the alternative font metrics
|
||||
CLCD::FontMetrics alt_fm;
|
||||
alt_fm.ptr = addr + 148;
|
||||
alt_fm.format = L4;
|
||||
alt_fm.stride = 19;
|
||||
alt_fm.width = 38;
|
||||
alt_fm.height = 49;
|
||||
for (uint8_t i = 0; i < 127; i++) {
|
||||
alt_fm.char_widths[i] = 0;
|
||||
}
|
||||
// For special characters, copy the character widths from the char tables
|
||||
for (uint8_t i = 0; i < NUM_ELEMENTS(char_recipe); i++) {
|
||||
uint8_t std_char, alt_char, alt_data;
|
||||
get_char_data(i, std_char, alt_char, alt_data);
|
||||
if (std_char == 0)
|
||||
alt_fm.char_widths[alt_char] = alt_data;
|
||||
}
|
||||
CLCD::mem_write_bulk(addr, &alt_fm, 148);
|
||||
|
||||
// Decode the RLE data and load it into RAMG as a bitmap
|
||||
write_rle_data(addr + 148, font, sizeof(font));
|
||||
|
||||
bitmap_addr = addr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Populates the bitmap handles for the custom into the display list.
|
||||
* This function is called once at the start of each display list.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* cmd - Object used for writing to the FTDI chip command queue.
|
||||
*/
|
||||
|
||||
void FTDI::WesternCharSet::load_bitmaps(CommandProcessor& cmd) {
|
||||
CLCD::FontMetrics alt_fm;
|
||||
alt_fm.ptr = bitmap_addr + 148;
|
||||
alt_fm.format = L4;
|
||||
alt_fm.stride = 19;
|
||||
alt_fm.width = 38;
|
||||
alt_fm.height = 49;
|
||||
set_font_bitmap(cmd, alt_fm, alt_font);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a character at location x and y. The x position is incremented
|
||||
* by the width of the character.
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* cmd - If non-NULL the symbol is drawn to the screen.
|
||||
* If NULL, only increment position for text measurement.
|
||||
*
|
||||
* x, y - The location at which to draw the character. On output,
|
||||
* incremented to the location of the next character.
|
||||
*
|
||||
* fs - A scaling object used to scale the font. The display will
|
||||
* already be configured to scale bitmaps, but positions
|
||||
* must be scaled using fs.scale()
|
||||
*
|
||||
* c - The unicode code point to draw. If the renderer does not
|
||||
* support the character, it should return false.
|
||||
|
||||
* Returns: Whether the character was supported.
|
||||
*/
|
||||
|
||||
bool FTDI::WesternCharSet::render_glyph(CommandProcessor* cmd, int &x, int &y, font_size_t fs, utf8_char_t c) {
|
||||
|
||||
// A supported character?
|
||||
if (c < UTF8('¡') || c > UTF8('ÿ')) return false;
|
||||
|
||||
int8_t index = find_char_data(c);
|
||||
if (index == -1) return false;
|
||||
|
||||
// Determine character characteristics
|
||||
uint8_t std_char, alt_char, alt_data;
|
||||
get_char_data(index, std_char, alt_char, alt_data);
|
||||
|
||||
bool base_special;
|
||||
uint8_t base_width;
|
||||
uint8_t base_char;
|
||||
uint8_t accent_char;
|
||||
int8_t accent_dx, accent_dy;
|
||||
|
||||
if (std_char == 0) {
|
||||
// Special character, non-accented
|
||||
base_width = alt_data;
|
||||
base_special = true;
|
||||
base_char = alt_char;
|
||||
accent_char = 0;
|
||||
if (c == UTF8('°'))
|
||||
x -= fs.scale(deg_sign_leading);
|
||||
} else {
|
||||
// Regular character with accent:
|
||||
accent_dx = alt_data - mid_accent;
|
||||
accent_dy = isupper(std_char) ? -7 : 0;
|
||||
accent_char = alt_char;
|
||||
base_width = StandardCharSet::std_char_width(std_char);
|
||||
base_special = std_char == 'i';
|
||||
base_char = base_special ? NO_DOT_I : std_char;
|
||||
}
|
||||
|
||||
// If cmd != NULL, draw the glyph to the screen
|
||||
if (cmd) {
|
||||
ext_vertex2ii(*cmd, x, y, base_special ? alt_font : std_font, base_char);
|
||||
if (accent_char)
|
||||
ext_vertex2ii(*cmd, x + fs.scale(accent_dx), y + fs.scale(accent_dy), alt_font, accent_char);
|
||||
}
|
||||
|
||||
// Increment X to the next character position
|
||||
x += fs.scale(base_width);
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif // FTDI_EXTENDED && TOUCH_UI_USE_UTF8 && TOUCH_UI_UTF8_WESTERN_CHARSET
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
/**********************
|
||||
* western_char_set.h *
|
||||
**********************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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 3 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
namespace FTDI {
|
||||
class WesternCharSet {
|
||||
public:
|
||||
static void load_data(uint32_t addr);
|
||||
static void load_bitmaps(CommandProcessor&);
|
||||
static bool render_glyph(CommandProcessor*, int &x, int &y, font_size_t, utf8_char_t);
|
||||
};
|
||||
}
|
||||
+665
@@ -0,0 +1,665 @@
|
||||
/********************************
|
||||
* western_european_bitmap_31.h *
|
||||
********************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. *
|
||||
* *
|
||||
* 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 3 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. *
|
||||
* *
|
||||
* To view a copy of the GNU General Public License, go to the following *
|
||||
* location: <http://www.gnu.org/licenses/>. *
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
/* This is a dump of "font_bitmaps/western_european_bitmap_31.png"
|
||||
* using the tool "bitmap2cpp.py". The tool converts the image into
|
||||
* 16-level grayscale and packs two pixels per byte. The resulting
|
||||
* bytes are then RLE compressed to yield (count, byte) pairs.
|
||||
*/
|
||||
|
||||
const unsigned char font[] PROGMEM = {
|
||||
0x76, 0x00, 0x01, 0x08, 0x01, 0xee, 0x01, 0xe5, 0x11, 0x00, 0x01, 0xaf,
|
||||
0x01, 0xff, 0x01, 0x20, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xd0,
|
||||
0x10, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x01, 0xf9, 0x11, 0x00, 0x01, 0x2e,
|
||||
0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf2,
|
||||
0x11, 0x00, 0x01, 0x5f, 0x01, 0xfd, 0x11, 0x00, 0x01, 0x06, 0x01, 0x99,
|
||||
0x01, 0x40, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x20, 0x00, 0x01, 0x9e,
|
||||
0x01, 0xee, 0x01, 0x50, 0x0f, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf8,
|
||||
0x10, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0xcf,
|
||||
0x01, 0xfc, 0x10, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xd1, 0x10, 0x00,
|
||||
0x01, 0x4f, 0x01, 0xfe, 0x01, 0x20, 0x0f, 0x00, 0x01, 0x01, 0x01, 0xef,
|
||||
0x01, 0xf3, 0x10, 0x00, 0x01, 0x07, 0x01, 0xaa, 0x01, 0x40, 0xff, 0x00,
|
||||
0xff, 0x00, 0xff, 0x00, 0x1f, 0x00, 0x01, 0xcf, 0x01, 0xfc, 0x10, 0x00,
|
||||
0x01, 0x07, 0x02, 0xff, 0x01, 0x60, 0x0f, 0x00, 0x01, 0x2f, 0x02, 0xff,
|
||||
0x01, 0xf2, 0x0f, 0x00, 0x01, 0xcf, 0x01, 0xf6, 0x01, 0x6f, 0x01, 0xfb,
|
||||
0x0e, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xa0, 0x01, 0x0a, 0x01, 0xff,
|
||||
0x01, 0x60, 0x0d, 0x00, 0x01, 0x1f, 0x01, 0xfd, 0x01, 0x00, 0x01, 0x01,
|
||||
0x01, 0xdf, 0x01, 0xf1, 0x0d, 0x00, 0x01, 0xbf, 0x01, 0xf3, 0x02, 0x00,
|
||||
0x01, 0x3f, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x02, 0x01, 0x99, 0x01, 0x50,
|
||||
0x02, 0x00, 0x01, 0x05, 0x01, 0x99, 0x01, 0x20, 0xff, 0x00, 0xff, 0x00,
|
||||
0xff, 0x00, 0x1f, 0x00, 0x01, 0x11, 0x0d, 0x00, 0x01, 0x09, 0x01, 0xff,
|
||||
0x01, 0xc3, 0x02, 0x00, 0x01, 0xff, 0x01, 0x80, 0x0c, 0x00, 0x01, 0xaf,
|
||||
0x02, 0xff, 0x01, 0x50, 0x01, 0x01, 0x01, 0xff, 0x01, 0x60, 0x0b, 0x00,
|
||||
0x01, 0x02, 0x01, 0xff, 0x01, 0xd9, 0x01, 0xff, 0x01, 0xf7, 0x01, 0x07,
|
||||
0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x20,
|
||||
0x01, 0x3e, 0x02, 0xff, 0x01, 0xfd, 0x0c, 0x00, 0x01, 0x09, 0x01, 0xfe,
|
||||
0x01, 0x00, 0x01, 0x02, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xf4, 0x0c, 0x00,
|
||||
0x01, 0x07, 0x01, 0xa8, 0x02, 0x00, 0x01, 0x06, 0x01, 0x98, 0x01, 0x20,
|
||||
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x41, 0x00, 0x02, 0x44, 0x02, 0x00,
|
||||
0x02, 0x44, 0x0d, 0x00, 0x02, 0xff, 0x01, 0x10, 0x01, 0x01, 0x02, 0xff,
|
||||
0x0d, 0x00, 0x02, 0xff, 0x01, 0x10, 0x01, 0x01, 0x02, 0xff, 0x0d, 0x00,
|
||||
0x02, 0xff, 0x01, 0x10, 0x01, 0x01, 0x02, 0xff, 0x0d, 0x00, 0x02, 0xcc,
|
||||
0x01, 0x10, 0x01, 0x01, 0x02, 0xcc, 0xff, 0x00, 0xff, 0x00, 0xf6, 0x00,
|
||||
0x01, 0x13, 0x01, 0x30, 0x10, 0x00, 0x01, 0x2b, 0x02, 0xff, 0x01, 0xa1,
|
||||
0x0e, 0x00, 0x01, 0x02, 0x01, 0xef, 0x02, 0xff, 0x01, 0xfd, 0x01, 0x10,
|
||||
0x0d, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0x94, 0x01, 0x5a, 0x01, 0xff,
|
||||
0x01, 0xb0, 0x0d, 0x00, 0x01, 0x4f, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x9f,
|
||||
0x01, 0xf2, 0x0d, 0x00, 0x01, 0x8f, 0x01, 0xf0, 0x02, 0x00, 0x01, 0x2f,
|
||||
0x01, 0xf6, 0x0d, 0x00, 0x01, 0x8f, 0x01, 0xe0, 0x02, 0x00, 0x01, 0x0f,
|
||||
0x01, 0xf7, 0x0d, 0x00, 0x01, 0x7f, 0x01, 0xf2, 0x02, 0x00, 0x01, 0x4f,
|
||||
0x01, 0xf5, 0x0d, 0x00, 0x01, 0x2f, 0x01, 0xfc, 0x01, 0x10, 0x01, 0x02,
|
||||
0x01, 0xdf, 0x01, 0xf0, 0x0d, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb,
|
||||
0x01, 0xcf, 0x01, 0xff, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x9f, 0x02, 0xff,
|
||||
0x01, 0xf8, 0x0f, 0x00, 0x01, 0x03, 0x01, 0x9c, 0x01, 0xc9, 0x01, 0x30,
|
||||
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x93, 0x00,
|
||||
0x01, 0x06, 0x01, 0xff, 0x01, 0x20, 0x11, 0x00, 0x01, 0xcf, 0x01, 0xc0,
|
||||
0x11, 0x00, 0x01, 0x3f, 0x01, 0xf6, 0x11, 0x00, 0x01, 0x0f, 0x01, 0xfb,
|
||||
0x11, 0x00, 0x01, 0x3f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0x07, 0x01, 0xd9,
|
||||
0x01, 0x89, 0x01, 0xff, 0x01, 0xfb, 0x0e, 0x00, 0x01, 0x07, 0x03, 0xff,
|
||||
0x01, 0xf3, 0x0e, 0x00, 0x01, 0x04, 0x01, 0xbd, 0x01, 0xee, 0x01, 0xd9,
|
||||
0x01, 0x20, 0xff, 0x00, 0x61, 0x00, 0x01, 0x01, 0x01, 0x99, 0x01, 0x96,
|
||||
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01,
|
||||
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9,
|
||||
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01,
|
||||
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9,
|
||||
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01,
|
||||
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9,
|
||||
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01,
|
||||
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9,
|
||||
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01,
|
||||
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9,
|
||||
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01,
|
||||
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9,
|
||||
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01,
|
||||
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9,
|
||||
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0xff, 0x00, 0x58, 0x00,
|
||||
0x01, 0x35, 0x01, 0x66, 0x01, 0x52, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xaf,
|
||||
0x03, 0xff, 0x01, 0xe7, 0x0d, 0x00, 0x01, 0x7f, 0x05, 0xff, 0x01, 0xc1,
|
||||
0x0b, 0x00, 0x01, 0x07, 0x02, 0xff, 0x01, 0xfc, 0x01, 0xaa, 0x01, 0xdf,
|
||||
0x01, 0xff, 0x01, 0xfc, 0x0b, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xf9,
|
||||
0x01, 0x10, 0x01, 0x00, 0x01, 0x02, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x70,
|
||||
0x0a, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x80, 0x03, 0x00, 0x01, 0x0d,
|
||||
0x01, 0xff, 0x01, 0xe0, 0x0a, 0x00, 0x01, 0xef, 0x01, 0xff, 0x04, 0x00,
|
||||
0x01, 0x05, 0x01, 0xff, 0x01, 0xf3, 0x09, 0x00, 0x01, 0x02, 0x01, 0xff,
|
||||
0x01, 0xfb, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf7, 0x09, 0x00,
|
||||
0x01, 0x03, 0x01, 0xff, 0x01, 0xf9, 0x03, 0x00, 0x01, 0x03, 0x01, 0x9e,
|
||||
0x01, 0xff, 0x01, 0xf8, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8,
|
||||
0x02, 0x00, 0x01, 0x01, 0x01, 0xaf, 0x02, 0xff, 0x01, 0xd7, 0x09, 0x00,
|
||||
0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x1d, 0x01, 0xff,
|
||||
0x01, 0xfc, 0x01, 0x50, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8,
|
||||
0x02, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x70, 0x0b, 0x00, 0x01, 0x03,
|
||||
0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfa,
|
||||
0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x05,
|
||||
0x01, 0xff, 0x01, 0xf4, 0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8,
|
||||
0x01, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf4, 0x0c, 0x00, 0x01, 0x03,
|
||||
0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf9,
|
||||
0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x02,
|
||||
0x02, 0xff, 0x01, 0x50, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8,
|
||||
0x02, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0xf8, 0x0b, 0x00, 0x01, 0x03,
|
||||
0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x1d, 0x02, 0xff, 0x01, 0xd3,
|
||||
0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x01,
|
||||
0x01, 0xcf, 0x02, 0xff, 0x01, 0x70, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xf8, 0x03, 0x00, 0x01, 0x07, 0x02, 0xff, 0x01, 0xfb, 0x09, 0x00,
|
||||
0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x2b, 0x02, 0xff,
|
||||
0x01, 0xb0, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00,
|
||||
0x01, 0x6f, 0x01, 0xff, 0x01, 0xf6, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xf8, 0x05, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfd, 0x08, 0x00,
|
||||
0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xdf, 0x01, 0xff,
|
||||
0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xbf,
|
||||
0x01, 0xff, 0x01, 0x10, 0x07, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8,
|
||||
0x06, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xf8, 0x05, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfd, 0x08, 0x00,
|
||||
0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x02, 0x01, 0x84, 0x03, 0x00,
|
||||
0x01, 0x2d, 0x01, 0xff, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xf8, 0x01, 0x02, 0x01, 0xff, 0x01, 0xec, 0x01, 0xa9, 0x01, 0xac,
|
||||
0x02, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8,
|
||||
0x01, 0x02, 0x05, 0xff, 0x01, 0xfe, 0x01, 0x20, 0x08, 0x00, 0x01, 0x03,
|
||||
0x01, 0xee, 0x01, 0xe7, 0x01, 0x01, 0x01, 0xbf, 0x03, 0xff, 0x01, 0xfe,
|
||||
0x01, 0x80, 0x0e, 0x00, 0x01, 0x35, 0x01, 0x78, 0x01, 0x76, 0x01, 0x30,
|
||||
0xff, 0x00, 0x48, 0x00, 0x01, 0x40, 0x0a, 0x00, 0x01, 0x47, 0x01, 0x9a,
|
||||
0x01, 0xba, 0x01, 0x95, 0x01, 0x10, 0x02, 0x00, 0x01, 0x07, 0x01, 0xf8,
|
||||
0x08, 0x00, 0x01, 0x02, 0x01, 0xae, 0x04, 0xff, 0x01, 0xfc, 0x01, 0x50,
|
||||
0x01, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0x30, 0x07, 0x00, 0x01, 0x8f,
|
||||
0x06, 0xff, 0x01, 0xfc, 0x01, 0x23, 0x01, 0xff, 0x01, 0xf6, 0x07, 0x00,
|
||||
0x01, 0x1c, 0x03, 0xff, 0x01, 0xca, 0x01, 0x9b, 0x01, 0xdf, 0x02, 0xff,
|
||||
0x01, 0xfe, 0x01, 0xff, 0x01, 0x80, 0x07, 0x00, 0x01, 0xcf, 0x01, 0xff,
|
||||
0x01, 0xfd, 0x01, 0x50, 0x02, 0x00, 0x01, 0x02, 0x01, 0x9f, 0x02, 0xff,
|
||||
0x01, 0xfa, 0x07, 0x00, 0x01, 0x09, 0x02, 0xff, 0x01, 0x90, 0x04, 0x00,
|
||||
0x01, 0x03, 0x01, 0xef, 0x01, 0xff, 0x01, 0xf3, 0x07, 0x00, 0x01, 0x5f,
|
||||
0x01, 0xff, 0x01, 0xf9, 0x06, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0xfc,
|
||||
0x07, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0x06,
|
||||
0x03, 0xff, 0x01, 0x60, 0x05, 0x00, 0x01, 0x04, 0x02, 0xff, 0x01, 0x30,
|
||||
0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xc0,
|
||||
0x05, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x02,
|
||||
0x01, 0xef, 0x01, 0xf7, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xf3, 0x05, 0x00,
|
||||
0x01, 0x0f, 0x01, 0xff, 0x01, 0xf6, 0x05, 0x00, 0x01, 0x1d, 0x01, 0xff,
|
||||
0x01, 0xa0, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x3f,
|
||||
0x01, 0xff, 0x01, 0xf2, 0x05, 0x00, 0x01, 0xcf, 0x01, 0xfc, 0x01, 0x00,
|
||||
0x01, 0x09, 0x01, 0xff, 0x01, 0xfb, 0x05, 0x00, 0x01, 0x6f, 0x01, 0xff,
|
||||
0x01, 0xe0, 0x04, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xd1, 0x01, 0x00,
|
||||
0x01, 0x06, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x8f, 0x01, 0xff,
|
||||
0x01, 0xc0, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xfe, 0x01, 0x20, 0x01, 0x00,
|
||||
0x01, 0x03, 0x02, 0xff, 0x05, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0xb0,
|
||||
0x03, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf4, 0x02, 0x00, 0x01, 0x02,
|
||||
0x02, 0xff, 0x01, 0x10, 0x04, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0,
|
||||
0x03, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0x60, 0x02, 0x00, 0x01, 0x01,
|
||||
0x02, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0,
|
||||
0x02, 0x00, 0x01, 0x01, 0x01, 0xef, 0x01, 0xf8, 0x03, 0x00, 0x01, 0x02,
|
||||
0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0xb0,
|
||||
0x02, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xb0, 0x03, 0x00, 0x01, 0x03,
|
||||
0x02, 0xff, 0x01, 0x10, 0x04, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0xc0,
|
||||
0x02, 0x00, 0x01, 0xbf, 0x01, 0xfd, 0x04, 0x00, 0x01, 0x04, 0x02, 0xff,
|
||||
0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x08,
|
||||
0x01, 0xff, 0x01, 0xe1, 0x04, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfe,
|
||||
0x05, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xf2, 0x01, 0x00, 0x01, 0x6f,
|
||||
0x01, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xfa,
|
||||
0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf6, 0x01, 0x04, 0x01, 0xff,
|
||||
0x01, 0xf5, 0x05, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf7, 0x05, 0x00,
|
||||
0x01, 0x09, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x2e, 0x01, 0xff, 0x01, 0x70,
|
||||
0x05, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xf2, 0x05, 0x00, 0x01, 0x03,
|
||||
0x02, 0xff, 0x01, 0xef, 0x01, 0xf9, 0x06, 0x00, 0x01, 0xcf, 0x01, 0xff,
|
||||
0x01, 0xb0, 0x06, 0x00, 0x01, 0xcf, 0x02, 0xff, 0x01, 0xc0, 0x05, 0x00,
|
||||
0x01, 0x06, 0x02, 0xff, 0x01, 0x40, 0x06, 0x00, 0x01, 0x2f, 0x02, 0xff,
|
||||
0x01, 0x20, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xfb, 0x07, 0x00,
|
||||
0x01, 0x0b, 0x02, 0xff, 0x01, 0xd2, 0x04, 0x00, 0x01, 0x06, 0x02, 0xff,
|
||||
0x01, 0xe1, 0x07, 0x00, 0x01, 0x5f, 0x03, 0xff, 0x01, 0x93, 0x02, 0x00,
|
||||
0x01, 0x05, 0x01, 0xcf, 0x02, 0xff, 0x01, 0x30, 0x06, 0x00, 0x01, 0x03,
|
||||
0x01, 0xff, 0x01, 0xfb, 0x03, 0xff, 0x01, 0xfd, 0x01, 0xde, 0x03, 0xff,
|
||||
0x01, 0xe3, 0x07, 0x00, 0x01, 0x1e, 0x01, 0xff, 0x01, 0x80, 0x01, 0x4d,
|
||||
0x06, 0xff, 0x01, 0xfa, 0x01, 0x10, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xfb,
|
||||
0x02, 0x00, 0x01, 0x5c, 0x04, 0xff, 0x01, 0xe9, 0x01, 0x30, 0x08, 0x00,
|
||||
0x01, 0x1c, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x04, 0x01, 0x67, 0x01, 0x86,
|
||||
0x01, 0x53, 0x0b, 0x00, 0x01, 0x10, 0xff, 0x00, 0xbd, 0x00, 0x01, 0x02,
|
||||
0x01, 0x20, 0x0c, 0x00, 0x01, 0x02, 0x01, 0x32, 0x01, 0x10, 0x02, 0x00,
|
||||
0x01, 0x1e, 0x01, 0xe3, 0x0a, 0x00, 0x01, 0x01, 0x01, 0x7c, 0x02, 0xff,
|
||||
0x01, 0xfd, 0x01, 0x82, 0x01, 0x00, 0x01, 0xcf, 0x01, 0xf7, 0x0a, 0x00,
|
||||
0x01, 0x6e, 0x05, 0xff, 0x01, 0x8a, 0x01, 0xff, 0x01, 0xa0, 0x09, 0x00,
|
||||
0x01, 0x08, 0x07, 0xff, 0x01, 0xfc, 0x0a, 0x00, 0x01, 0x6f, 0x01, 0xff,
|
||||
0x01, 0xfc, 0x01, 0x50, 0x01, 0x00, 0x01, 0x3a, 0x02, 0xff, 0x01, 0xf1,
|
||||
0x09, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x90, 0x03, 0x00, 0x01, 0x7f,
|
||||
0x01, 0xff, 0x01, 0xf5, 0x09, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfc,
|
||||
0x03, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xfd, 0x09, 0x00,
|
||||
0x01, 0x0e, 0x01, 0xff, 0x01, 0xf3, 0x03, 0x00, 0x01, 0x0b, 0x03, 0xff,
|
||||
0x01, 0x30, 0x08, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xd0, 0x03, 0x00,
|
||||
0x01, 0x9f, 0x01, 0xfa, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x80, 0x08, 0x00,
|
||||
0x01, 0x7f, 0x01, 0xff, 0x01, 0x80, 0x02, 0x00, 0x01, 0x06, 0x01, 0xff,
|
||||
0x01, 0xc0, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xb0, 0x08, 0x00, 0x01, 0x9f,
|
||||
0x01, 0xff, 0x01, 0x50, 0x02, 0x00, 0x01, 0x3f, 0x01, 0xfe, 0x01, 0x10,
|
||||
0x01, 0x1f, 0x01, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0xaf, 0x01, 0xff,
|
||||
0x01, 0x40, 0x01, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xf3, 0x01, 0x00,
|
||||
0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0xbf, 0x01, 0xff,
|
||||
0x01, 0x30, 0x01, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0x50, 0x01, 0x00,
|
||||
0x01, 0x0e, 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0xaf, 0x01, 0xff,
|
||||
0x01, 0x30, 0x01, 0x00, 0x01, 0xbf, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x0f,
|
||||
0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x40,
|
||||
0x01, 0x08, 0x01, 0xff, 0x01, 0xb0, 0x02, 0x00, 0x01, 0x0f, 0x01, 0xff,
|
||||
0x01, 0xe0, 0x08, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x60, 0x01, 0x5f,
|
||||
0x01, 0xfd, 0x03, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x08, 0x00,
|
||||
0x01, 0x4f, 0x01, 0xff, 0x01, 0xa3, 0x01, 0xff, 0x01, 0xe2, 0x03, 0x00,
|
||||
0x01, 0x7f, 0x01, 0xff, 0x01, 0x90, 0x08, 0x00, 0x01, 0x0f, 0x01, 0xff,
|
||||
0x01, 0xfe, 0x01, 0xff, 0x01, 0x40, 0x03, 0x00, 0x01, 0xcf, 0x01, 0xff,
|
||||
0x01, 0x50, 0x08, 0x00, 0x01, 0x0a, 0x02, 0xff, 0x01, 0xf6, 0x03, 0x00,
|
||||
0x01, 0x05, 0x01, 0xff, 0x01, 0xfe, 0x09, 0x00, 0x01, 0x02, 0x02, 0xff,
|
||||
0x01, 0xb0, 0x03, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0xf8, 0x0a, 0x00,
|
||||
0x01, 0xbf, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x05, 0x01, 0xef,
|
||||
0x01, 0xff, 0x01, 0xd0, 0x09, 0x00, 0x01, 0x04, 0x03, 0xff, 0x01, 0xfc,
|
||||
0x01, 0xab, 0x01, 0xef, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x20, 0x09, 0x00,
|
||||
0x01, 0x2f, 0x01, 0xff, 0x01, 0xaf, 0x05, 0xff, 0x01, 0xd2, 0x09, 0x00,
|
||||
0x01, 0x01, 0x01, 0xdf, 0x01, 0xf5, 0x01, 0x04, 0x01, 0xbf, 0x03, 0xff,
|
||||
0x01, 0xd6, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0x70, 0x01, 0x00,
|
||||
0x01, 0x01, 0x01, 0x46, 0x01, 0x76, 0x01, 0x52, 0x0c, 0x00, 0x01, 0x28,
|
||||
0xff, 0x00, 0x48, 0x00, 0x01, 0x14, 0x0b, 0x44, 0x01, 0x41, 0x06, 0x00,
|
||||
0x01, 0x8f, 0x0b, 0xff, 0x01, 0xf3, 0x06, 0x00, 0x01, 0xef, 0x0b, 0xff,
|
||||
0x01, 0xf3, 0x05, 0x00, 0x01, 0x05, 0x02, 0xff, 0x01, 0xee, 0x09, 0xff,
|
||||
0x01, 0xf3, 0x05, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf5, 0x01, 0x00,
|
||||
0x01, 0xdf, 0x01, 0xff, 0x01, 0x63, 0x06, 0x33, 0x01, 0x30, 0x05, 0x00,
|
||||
0x01, 0x3f, 0x01, 0xff, 0x01, 0xe0, 0x01, 0x00, 0x01, 0xdf, 0x01, 0xff,
|
||||
0x01, 0x40, 0x0c, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x80, 0x01, 0x00,
|
||||
0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, 0x01, 0x01, 0x02, 0xff,
|
||||
0x01, 0x10, 0x01, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00,
|
||||
0x01, 0x07, 0x01, 0xff, 0x01, 0xfa, 0x02, 0x00, 0x01, 0xdf, 0x01, 0xff,
|
||||
0x01, 0x40, 0x0b, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf3, 0x02, 0x00,
|
||||
0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, 0x01, 0x4f, 0x01, 0xff,
|
||||
0x01, 0xd0, 0x02, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00,
|
||||
0x01, 0xbf, 0x01, 0xff, 0x01, 0x60, 0x02, 0x00, 0x01, 0xdf, 0x01, 0xff,
|
||||
0x01, 0x40, 0x0a, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xfe, 0x03, 0x00,
|
||||
0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0a, 0x00, 0x01, 0x08, 0x01, 0xff,
|
||||
0x01, 0xf9, 0x03, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xed, 0x06, 0xdd,
|
||||
0x01, 0x80, 0x03, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x03, 0x00,
|
||||
0x01, 0xdf, 0x08, 0xff, 0x01, 0xa0, 0x03, 0x00, 0x01, 0x6f, 0x01, 0xff,
|
||||
0x01, 0xb0, 0x03, 0x00, 0x01, 0xdf, 0x08, 0xff, 0x01, 0xa0, 0x03, 0x00,
|
||||
0x01, 0xcf, 0x01, 0xff, 0x01, 0x40, 0x03, 0x00, 0x01, 0xdf, 0x01, 0xff,
|
||||
0x01, 0xa8, 0x06, 0x88, 0x01, 0x50, 0x02, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xfe, 0x04, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x09, 0x00,
|
||||
0x01, 0x0a, 0x01, 0xff, 0x01, 0xf7, 0x04, 0x00, 0x01, 0xdf, 0x01, 0xff,
|
||||
0x01, 0x40, 0x09, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf4, 0x04, 0x33,
|
||||
0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x09, 0x00, 0x01, 0x7f, 0x08, 0xff,
|
||||
0x01, 0x40, 0x09, 0x00, 0x01, 0xef, 0x08, 0xff, 0x01, 0x40, 0x08, 0x00,
|
||||
0x01, 0x05, 0x09, 0xff, 0x01, 0x40, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff,
|
||||
0x01, 0xf7, 0x05, 0x33, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x08, 0x00,
|
||||
0x01, 0x2f, 0x01, 0xff, 0x01, 0xe0, 0x05, 0x00, 0x01, 0xdf, 0x01, 0xff,
|
||||
0x01, 0x40, 0x08, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00,
|
||||
0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x08, 0x00, 0x02, 0xff, 0x01, 0x20,
|
||||
0x05, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x07, 0x00, 0x01, 0x06,
|
||||
0x01, 0xff, 0x01, 0xfb, 0x06, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xa8,
|
||||
0x06, 0x88, 0x01, 0x85, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf4, 0x06, 0x00,
|
||||
0x01, 0xdf, 0x08, 0xff, 0x01, 0xf9, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xe0,
|
||||
0x06, 0x00, 0x01, 0xdf, 0x08, 0xff, 0x01, 0xf9, 0x01, 0x8d, 0x01, 0xdd,
|
||||
0x01, 0x60, 0x06, 0x00, 0x01, 0xbd, 0x08, 0xdd, 0x01, 0xd8, 0xff, 0x00,
|
||||
0xe0, 0x00, 0x01, 0x01, 0x01, 0x34, 0x01, 0x31, 0x06, 0x00, 0x01, 0x12,
|
||||
0x01, 0x42, 0x01, 0x10, 0x05, 0x00, 0x01, 0x02, 0x01, 0x7b, 0x01, 0xef,
|
||||
0x02, 0xff, 0x01, 0xfb, 0x01, 0x60, 0x02, 0x00, 0x01, 0x03, 0x01, 0x9e,
|
||||
0x02, 0xff, 0x01, 0xfd, 0x01, 0x81, 0x04, 0x00, 0x01, 0xbf, 0x05, 0xff,
|
||||
0x01, 0xfe, 0x01, 0x40, 0x01, 0x01, 0x01, 0x9f, 0x05, 0xff, 0x01, 0x60,
|
||||
0x03, 0x00, 0x01, 0xdf, 0x02, 0xff, 0x01, 0xee, 0x03, 0xff, 0x01, 0xf5,
|
||||
0x01, 0x1d, 0x03, 0xff, 0x01, 0xef, 0x02, 0xff, 0x01, 0xf8, 0x03, 0x00,
|
||||
0x01, 0xdf, 0x01, 0xb6, 0x01, 0x20, 0x01, 0x00, 0x01, 0x01, 0x01, 0x5d,
|
||||
0x02, 0xff, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xe7, 0x01, 0x20, 0x01, 0x00,
|
||||
0x01, 0x29, 0x02, 0xff, 0x01, 0x50, 0x02, 0x00, 0x01, 0x71, 0x05, 0x00,
|
||||
0x01, 0xaf, 0x02, 0xff, 0x01, 0xfb, 0x01, 0x10, 0x03, 0x00, 0x01, 0x4f,
|
||||
0x01, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0x0d, 0x02, 0xff, 0x01, 0xd0,
|
||||
0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf7, 0x08, 0x00, 0x01, 0x06,
|
||||
0x02, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0xef, 0x01, 0xfd, 0x08, 0x00,
|
||||
0x01, 0x03, 0x01, 0xff, 0x01, 0xfd, 0x06, 0x00, 0x01, 0x9f, 0x01, 0xff,
|
||||
0x04, 0x00, 0x01, 0x02, 0x01, 0x45, 0x02, 0x66, 0x01, 0x67, 0x01, 0xff,
|
||||
0x01, 0xf9, 0x06, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x03, 0x00, 0x01, 0x4a,
|
||||
0x06, 0xff, 0x01, 0xfb, 0x03, 0x66, 0x01, 0x67, 0x02, 0x77, 0x01, 0xaf,
|
||||
0x01, 0xff, 0x02, 0x00, 0x01, 0x1b, 0x10, 0xff, 0x01, 0x00, 0x01, 0x01,
|
||||
0x01, 0xdf, 0x02, 0xff, 0x01, 0xcb, 0x01, 0xa8, 0x01, 0x88, 0x01, 0x89,
|
||||
0x0a, 0xff, 0x01, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x40,
|
||||
0x03, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xfa, 0x08, 0x77, 0x01, 0x00,
|
||||
0x01, 0x1f, 0x01, 0xff, 0x01, 0xd0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xf7, 0x09, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0x60, 0x04, 0x00,
|
||||
0x01, 0x05, 0x01, 0xff, 0x01, 0xfa, 0x09, 0x00, 0x01, 0x7f, 0x01, 0xff,
|
||||
0x01, 0x30, 0x04, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xfe, 0x09, 0x00,
|
||||
0x01, 0x7f, 0x01, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff,
|
||||
0x01, 0x50, 0x08, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0x60, 0x04, 0x00,
|
||||
0x01, 0x8f, 0x02, 0xff, 0x01, 0xe1, 0x08, 0x00, 0x01, 0x3f, 0x01, 0xff,
|
||||
0x01, 0xd0, 0x03, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfe, 0x01, 0xff,
|
||||
0x01, 0xfc, 0x01, 0x10, 0x05, 0x00, 0x01, 0x45, 0x01, 0x00, 0x01, 0x0d,
|
||||
0x01, 0xff, 0x01, 0xfc, 0x01, 0x20, 0x01, 0x00, 0x01, 0x01, 0x01, 0x9f,
|
||||
0x01, 0xff, 0x01, 0xa2, 0x02, 0xff, 0x01, 0xe6, 0x01, 0x10, 0x02, 0x00,
|
||||
0x01, 0x02, 0x01, 0x8d, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x05, 0x02, 0xff,
|
||||
0x01, 0xfd, 0x01, 0xab, 0x01, 0xcf, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00,
|
||||
0x01, 0x3f, 0x02, 0xff, 0x01, 0xfd, 0x01, 0xba, 0x01, 0xbc, 0x02, 0xff,
|
||||
0x01, 0xf8, 0x02, 0x00, 0x01, 0x7f, 0x05, 0xff, 0x01, 0xa0, 0x01, 0x00,
|
||||
0x01, 0x02, 0x01, 0xcf, 0x06, 0xff, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x03,
|
||||
0x01, 0xbf, 0x03, 0xff, 0x01, 0xb4, 0x03, 0x00, 0x01, 0x05, 0x01, 0xbf,
|
||||
0x04, 0xff, 0x01, 0xb7, 0x01, 0x10, 0x03, 0x00, 0x01, 0x01, 0x01, 0x46,
|
||||
0x01, 0x76, 0x01, 0x41, 0x06, 0x00, 0x01, 0x35, 0x01, 0x67, 0x01, 0x64,
|
||||
0x01, 0x20, 0xff, 0x00, 0x48, 0x00, 0x01, 0x34, 0x03, 0x44, 0x01, 0x43,
|
||||
0x01, 0x21, 0x0d, 0x00, 0x01, 0xbf, 0x05, 0xff, 0x01, 0xfe, 0x01, 0xb8,
|
||||
0x01, 0x40, 0x0a, 0x00, 0x01, 0xbf, 0x07, 0xff, 0x01, 0xfe, 0x01, 0x81,
|
||||
0x09, 0x00, 0x01, 0xbf, 0x08, 0xff, 0x01, 0xfe, 0x01, 0x60, 0x08, 0x00,
|
||||
0x01, 0xbf, 0x01, 0xff, 0x01, 0x61, 0x02, 0x11, 0x01, 0x23, 0x01, 0x58,
|
||||
0x01, 0xcf, 0x02, 0xff, 0x01, 0xf9, 0x08, 0x00, 0x01, 0xbf, 0x01, 0xff,
|
||||
0x01, 0x50, 0x04, 0x00, 0x01, 0x02, 0x01, 0x9f, 0x02, 0xff, 0x01, 0x80,
|
||||
0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x05, 0x00, 0x01, 0x04,
|
||||
0x01, 0xef, 0x01, 0xff, 0x01, 0xf4, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff,
|
||||
0x01, 0x50, 0x06, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xfd, 0x07, 0x00,
|
||||
0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x06, 0x00, 0x01, 0x06, 0x02, 0xff,
|
||||
0x01, 0x50, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00,
|
||||
0x01, 0xef, 0x01, 0xff, 0x01, 0xb0, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff,
|
||||
0x01, 0x50, 0x07, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00,
|
||||
0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, 0x01, 0x3f, 0x01, 0xff,
|
||||
0x01, 0xf3, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00,
|
||||
0x01, 0x0f, 0x01, 0xff, 0x01, 0xf5, 0x04, 0x00, 0x01, 0x23, 0x01, 0x33,
|
||||
0x01, 0xcf, 0x01, 0xff, 0x01, 0x73, 0x02, 0x33, 0x01, 0x30, 0x04, 0x00,
|
||||
0x01, 0x0d, 0x01, 0xff, 0x01, 0xf6, 0x04, 0x00, 0x01, 0xcf, 0x06, 0xff,
|
||||
0x01, 0xf2, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf7, 0x04, 0x00,
|
||||
0x01, 0xcf, 0x06, 0xff, 0x01, 0xf2, 0x04, 0x00, 0x01, 0x0b, 0x01, 0xff,
|
||||
0x01, 0xf9, 0x04, 0x00, 0x01, 0x9b, 0x01, 0xbb, 0x01, 0xef, 0x01, 0xff,
|
||||
0x01, 0xdb, 0x02, 0xbb, 0x01, 0xb1, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff,
|
||||
0x01, 0xf8, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00,
|
||||
0x01, 0x0d, 0x01, 0xff, 0x01, 0xf7, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff,
|
||||
0x01, 0x50, 0x07, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf6, 0x06, 0x00,
|
||||
0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, 0x01, 0x1f, 0x01, 0xff,
|
||||
0x01, 0xf4, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00,
|
||||
0x01, 0x5f, 0x01, 0xff, 0x01, 0xf1, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff,
|
||||
0x01, 0x50, 0x07, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xd0, 0x06, 0x00,
|
||||
0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x06, 0x00, 0x01, 0x01, 0x02, 0xff,
|
||||
0x01, 0x80, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x06, 0x00,
|
||||
0x01, 0x0b, 0x02, 0xff, 0x01, 0x20, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff,
|
||||
0x01, 0x50, 0x06, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0xf9, 0x07, 0x00,
|
||||
0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x05, 0x00, 0x01, 0x1a, 0x02, 0xff,
|
||||
0x01, 0xe1, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x04, 0x00,
|
||||
0x01, 0x29, 0x03, 0xff, 0x01, 0x30, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff,
|
||||
0x01, 0xa7, 0x01, 0x77, 0x01, 0x78, 0x01, 0x9a, 0x01, 0xbf, 0x03, 0xff,
|
||||
0x01, 0xe3, 0x08, 0x00, 0x01, 0xbf, 0x08, 0xff, 0x01, 0xf9, 0x01, 0x10,
|
||||
0x08, 0x00, 0x01, 0xbf, 0x07, 0xff, 0x01, 0xd8, 0x01, 0x10, 0x09, 0x00,
|
||||
0x01, 0xad, 0x03, 0xdd, 0x01, 0xdc, 0x01, 0xbb, 0x01, 0xa7, 0x01, 0x41,
|
||||
0xff, 0x00, 0x50, 0x00, 0x01, 0x38, 0x01, 0x88, 0x01, 0x81, 0x10, 0x00,
|
||||
0x01, 0x0b, 0x01, 0xff, 0x01, 0xfc, 0x03, 0x00, 0x01, 0x5a, 0x01, 0x40,
|
||||
0x0c, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xb0, 0x01, 0x04, 0x01, 0xaf,
|
||||
0x01, 0xff, 0x01, 0xa0, 0x0c, 0x00, 0x01, 0x1e, 0x01, 0xff, 0x01, 0xfc,
|
||||
0x02, 0xff, 0x01, 0xd8, 0x01, 0x20, 0x0c, 0x00, 0x01, 0x07, 0x02, 0xff,
|
||||
0x01, 0xfd, 0x01, 0x82, 0x0d, 0x00, 0x01, 0x5a, 0x03, 0xff, 0x01, 0xf4,
|
||||
0x0d, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x87, 0x02, 0xff,
|
||||
0x01, 0x30, 0x0c, 0x00, 0x01, 0x6f, 0x01, 0xe9, 0x01, 0x30, 0x01, 0x00,
|
||||
0x01, 0x8f, 0x01, 0xff, 0x01, 0xe2, 0x0c, 0x00, 0x01, 0x03, 0x03, 0x00,
|
||||
0x01, 0x0a, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x10, 0x0e, 0x00, 0x01, 0x23,
|
||||
0x01, 0x44, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xb0, 0x0c, 0x00, 0x01, 0x02,
|
||||
0x01, 0x9e, 0x04, 0xff, 0x01, 0xf7, 0x0c, 0x00, 0x01, 0x7f, 0x06, 0xff,
|
||||
0x01, 0x30, 0x0a, 0x00, 0x01, 0x09, 0x02, 0xff, 0x01, 0xfe, 0x01, 0xcb,
|
||||
0x01, 0xdf, 0x02, 0xff, 0x01, 0xd0, 0x0a, 0x00, 0x01, 0x6f, 0x01, 0xff,
|
||||
0x01, 0xfb, 0x01, 0x30, 0x02, 0x00, 0x01, 0x4e, 0x01, 0xff, 0x01, 0xf5,
|
||||
0x09, 0x00, 0x01, 0x02, 0x02, 0xff, 0x01, 0x70, 0x03, 0x00, 0x01, 0x05,
|
||||
0x01, 0xff, 0x01, 0xfd, 0x09, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xfa,
|
||||
0x05, 0x00, 0x01, 0xef, 0x01, 0xff, 0x01, 0x20, 0x08, 0x00, 0x01, 0x0f,
|
||||
0x01, 0xff, 0x01, 0xf1, 0x05, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x70,
|
||||
0x08, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa0, 0x05, 0x00, 0x01, 0x4f,
|
||||
0x01, 0xff, 0x01, 0xb0, 0x08, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x70,
|
||||
0x05, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x9f,
|
||||
0x01, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0,
|
||||
0x08, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, 0x05, 0x00, 0x01, 0x0e,
|
||||
0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x30,
|
||||
0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x9f,
|
||||
0x01, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xe0,
|
||||
0x08, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x70, 0x05, 0x00, 0x01, 0x2f,
|
||||
0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa0,
|
||||
0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0x90, 0x08, 0x00, 0x01, 0x0f,
|
||||
0x01, 0xff, 0x01, 0xf1, 0x05, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50,
|
||||
0x08, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xf9, 0x04, 0x00, 0x01, 0x05,
|
||||
0x01, 0xff, 0x01, 0xfe, 0x09, 0x00, 0x01, 0x02, 0x02, 0xff, 0x01, 0x60,
|
||||
0x03, 0x00, 0x01, 0x3e, 0x01, 0xff, 0x01, 0xf6, 0x0a, 0x00, 0x01, 0x7f,
|
||||
0x01, 0xff, 0x01, 0xf9, 0x01, 0x20, 0x01, 0x00, 0x01, 0x07, 0x02, 0xff,
|
||||
0x01, 0xb0, 0x0a, 0x00, 0x01, 0x09, 0x02, 0xff, 0x01, 0xfd, 0x01, 0xbd,
|
||||
0x02, 0xff, 0x01, 0xfd, 0x01, 0x10, 0x0b, 0x00, 0x01, 0x7f, 0x05, 0xff,
|
||||
0x01, 0xb0, 0x0c, 0x00, 0x01, 0x02, 0x01, 0xae, 0x03, 0xff, 0x01, 0xb4,
|
||||
0x0f, 0x00, 0x01, 0x35, 0x01, 0x65, 0x01, 0x40, 0xff, 0x00, 0x51, 0x00,
|
||||
0x02, 0x55, 0x11, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff,
|
||||
0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff,
|
||||
0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x05, 0xff,
|
||||
0x01, 0xed, 0x01, 0xa7, 0x01, 0x10, 0x0b, 0x00, 0x07, 0xff, 0x01, 0xfa,
|
||||
0x01, 0x10, 0x0a, 0x00, 0x08, 0xff, 0x01, 0xe2, 0x0a, 0x00, 0x02, 0xff,
|
||||
0x01, 0x65, 0x01, 0x55, 0x01, 0x56, 0x01, 0x7a, 0x02, 0xff, 0x01, 0xfe,
|
||||
0x01, 0x10, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x03, 0x00, 0x01, 0x1b,
|
||||
0x02, 0xff, 0x01, 0x80, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00,
|
||||
0x01, 0xcf, 0x01, 0xff, 0x01, 0xf0, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20,
|
||||
0x04, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xf3, 0x09, 0x00, 0x02, 0xff,
|
||||
0x01, 0x20, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf6, 0x09, 0x00,
|
||||
0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf7,
|
||||
0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x0d, 0x01, 0xff,
|
||||
0x01, 0xf7, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x0f,
|
||||
0x01, 0xff, 0x01, 0xf6, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00,
|
||||
0x01, 0x4f, 0x01, 0xff, 0x01, 0xf3, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20,
|
||||
0x04, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0xf0, 0x09, 0x00, 0x02, 0xff,
|
||||
0x01, 0x20, 0x03, 0x00, 0x01, 0x1b, 0x02, 0xff, 0x01, 0x80, 0x09, 0x00,
|
||||
0x02, 0xff, 0x01, 0x65, 0x02, 0x55, 0x01, 0x7a, 0x02, 0xff, 0x01, 0xfe,
|
||||
0x01, 0x10, 0x09, 0x00, 0x08, 0xff, 0x01, 0xe2, 0x0a, 0x00, 0x07, 0xff,
|
||||
0x01, 0xfa, 0x01, 0x10, 0x0a, 0x00, 0x05, 0xff, 0x01, 0xed, 0x01, 0xa7,
|
||||
0x01, 0x10, 0x0b, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff,
|
||||
0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff,
|
||||
0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff,
|
||||
0x01, 0x20, 0x10, 0x00, 0x02, 0xcc, 0x01, 0x10, 0xff, 0x00, 0x53, 0x00,
|
||||
0x01, 0x02, 0x01, 0x99, 0x01, 0x94, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00,
|
||||
0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00,
|
||||
0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00,
|
||||
0x01, 0x13, 0x01, 0x54, 0x01, 0x20, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xf7, 0x01, 0x00, 0x01, 0x5c, 0x02, 0xff, 0x01, 0xfd, 0x01, 0x70,
|
||||
0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x01, 0x0a, 0x04, 0xff,
|
||||
0x01, 0xfd, 0x01, 0x20, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7,
|
||||
0x01, 0xaf, 0x01, 0xff, 0x01, 0xec, 0x01, 0xdf, 0x02, 0xff, 0x01, 0xe1,
|
||||
0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfd, 0x01, 0xff, 0x01, 0xc3,
|
||||
0x02, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xfc, 0x09, 0x00, 0x01, 0x03,
|
||||
0x02, 0xff, 0x01, 0xfa, 0x03, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xff,
|
||||
0x01, 0x60, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, 0x01, 0xe0, 0x04, 0x00,
|
||||
0x01, 0x5f, 0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff,
|
||||
0x01, 0x60, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf3, 0x08, 0x00,
|
||||
0x01, 0x03, 0x02, 0xff, 0x05, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf7,
|
||||
0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x02,
|
||||
0x01, 0xff, 0x01, 0xfb, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf9,
|
||||
0x06, 0x00, 0x01, 0xff, 0x01, 0xfd, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xf8, 0x06, 0x00, 0x01, 0xef, 0x01, 0xfe, 0x08, 0x00, 0x01, 0x03,
|
||||
0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xef, 0x01, 0xff, 0x08, 0x00,
|
||||
0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xef, 0x01, 0xfe,
|
||||
0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf9, 0x06, 0x00, 0x01, 0xff,
|
||||
0x01, 0xfd, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00,
|
||||
0x01, 0x02, 0x01, 0xff, 0x01, 0xfb, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff,
|
||||
0x05, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x03,
|
||||
0x02, 0xff, 0x01, 0x60, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf3,
|
||||
0x08, 0x00, 0x01, 0x03, 0x02, 0xff, 0x01, 0xd0, 0x04, 0x00, 0x01, 0x5f,
|
||||
0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, 0x01, 0xfa,
|
||||
0x03, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, 0x01, 0x60, 0x08, 0x00,
|
||||
0x01, 0x03, 0x01, 0xff, 0x01, 0xfd, 0x01, 0xff, 0x01, 0xc3, 0x02, 0x00,
|
||||
0x01, 0x6e, 0x01, 0xff, 0x01, 0xfc, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xf7, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xec, 0x01, 0xcf, 0x02, 0xff,
|
||||
0x01, 0xe2, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x01, 0x0b,
|
||||
0x04, 0xff, 0x01, 0xfd, 0x01, 0x20, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xf7, 0x01, 0x00, 0x01, 0x6c, 0x02, 0xff, 0x01, 0xfe, 0x01, 0x70,
|
||||
0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x23,
|
||||
0x01, 0x54, 0x01, 0x20, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7,
|
||||
0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03,
|
||||
0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7,
|
||||
0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03,
|
||||
0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7,
|
||||
0x10, 0x00, 0x01, 0x01, 0x01, 0x66, 0x01, 0x63, 0xff, 0x00, 0x6c, 0x00,
|
||||
0x01, 0x30, 0x03, 0x00, 0x01, 0x02, 0x0d, 0x00, 0x01, 0x08, 0x01, 0xa0,
|
||||
0x02, 0x00, 0x01, 0x01, 0x01, 0xc6, 0x0d, 0x00, 0x01, 0xaf, 0x01, 0xa0,
|
||||
0x02, 0x00, 0x01, 0x1d, 0x01, 0xf6, 0x0c, 0x00, 0x01, 0x1c, 0x01, 0xff,
|
||||
0x01, 0xa0, 0x01, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xf6, 0x0b, 0x00,
|
||||
0x01, 0x01, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x50, 0x01, 0x00, 0x01, 0x3e,
|
||||
0x01, 0xff, 0x01, 0xe2, 0x0b, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0xf4,
|
||||
0x01, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x20, 0x0a, 0x00,
|
||||
0x01, 0x04, 0x01, 0xef, 0x01, 0xfe, 0x01, 0x30, 0x01, 0x00, 0x01, 0x6f,
|
||||
0x01, 0xff, 0x01, 0xd1, 0x0b, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xd2,
|
||||
0x01, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb, 0x0b, 0x00, 0x01, 0x06,
|
||||
0x01, 0xff, 0x01, 0xfc, 0x01, 0x10, 0x01, 0x00, 0x01, 0xaf, 0x01, 0xff,
|
||||
0x01, 0xa0, 0x0b, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xd0, 0x02, 0x00,
|
||||
0x01, 0xff, 0x01, 0xfa, 0x0c, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf8,
|
||||
0x02, 0x00, 0x01, 0xef, 0x01, 0xff, 0x01, 0x50, 0x0c, 0x00, 0x01, 0xaf,
|
||||
0x01, 0xff, 0x01, 0xa0, 0x01, 0x00, 0x01, 0x1c, 0x01, 0xff, 0x01, 0xf6,
|
||||
0x0c, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb, 0x02, 0x00, 0x01, 0xbf,
|
||||
0x01, 0xff, 0x01, 0x90, 0x0c, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xd1,
|
||||
0x01, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xfa, 0x0c, 0x00, 0x01, 0x05,
|
||||
0x01, 0xff, 0x01, 0xfd, 0x01, 0x20, 0x01, 0x00, 0x01, 0x8f, 0x01, 0xff,
|
||||
0x01, 0xb0, 0x0c, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa0, 0x01, 0x00,
|
||||
0x01, 0x07, 0x01, 0xff, 0x01, 0xf6, 0x0c, 0x00, 0x01, 0x02, 0x01, 0xef,
|
||||
0x01, 0xa0, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xf6, 0x0d, 0x00, 0x01, 0x1d,
|
||||
0x01, 0xa0, 0x02, 0x00, 0x01, 0x04, 0x01, 0xe6, 0x0d, 0x00, 0x01, 0x01,
|
||||
0x01, 0x60, 0x03, 0x00, 0x01, 0x24, 0xff, 0x00, 0xff, 0x00, 0x46, 0x00,
|
||||
0x01, 0x20, 0x03, 0x00, 0x01, 0x20, 0x0d, 0x00, 0x01, 0x01, 0x01, 0xe3,
|
||||
0x03, 0x00, 0x01, 0x5d, 0x01, 0x10, 0x0c, 0x00, 0x01, 0x01, 0x01, 0xff,
|
||||
0x01, 0x50, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xe2, 0x0c, 0x00, 0x01, 0x01,
|
||||
0x01, 0xff, 0x01, 0xf6, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xfe, 0x01, 0x30,
|
||||
0x0c, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x80, 0x01, 0x00, 0x01, 0x2e,
|
||||
0x01, 0xff, 0x01, 0xf5, 0x0c, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xfa,
|
||||
0x01, 0x00, 0x01, 0x01, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x60, 0x0c, 0x00,
|
||||
0x01, 0x8f, 0x01, 0xff, 0x01, 0xb0, 0x01, 0x00, 0x01, 0x0b, 0x01, 0xff,
|
||||
0x01, 0xf9, 0x0c, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x10,
|
||||
0x01, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0, 0x0c, 0x00, 0x01, 0x5f,
|
||||
0x01, 0xff, 0x01, 0xd1, 0x01, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb,
|
||||
0x0c, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf5, 0x02, 0x00, 0x01, 0x9f,
|
||||
0x01, 0xff, 0x01, 0x10, 0x0b, 0x00, 0x01, 0x2d, 0x01, 0xff, 0x01, 0xf3,
|
||||
0x01, 0x00, 0x01, 0x04, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x10, 0x0a, 0x00,
|
||||
0x01, 0x03, 0x01, 0xef, 0x01, 0xff, 0x01, 0x40, 0x01, 0x00, 0x01, 0x5f,
|
||||
0x01, 0xff, 0x01, 0xd2, 0x0b, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xe3,
|
||||
0x01, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x10, 0x0a, 0x00,
|
||||
0x01, 0x05, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x10, 0x01, 0x00, 0x01, 0x9f,
|
||||
0x01, 0xff, 0x01, 0xb0, 0x0b, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xc1,
|
||||
0x01, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf9, 0x0b, 0x00, 0x01, 0x01,
|
||||
0x01, 0xff, 0x01, 0xfa, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0x70,
|
||||
0x0b, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0x90, 0x02, 0x00, 0x01, 0x5f,
|
||||
0x01, 0xf6, 0x0c, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x03, 0x00, 0x01, 0x5f,
|
||||
0x01, 0x40, 0x0c, 0x00, 0x01, 0x01, 0x01, 0x50, 0x03, 0x00, 0x01, 0x43,
|
||||
0xff, 0x00, 0xff, 0x00, 0x38, 0x00, 0x01, 0xad, 0x01, 0xdd, 0x01, 0x40,
|
||||
0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf,
|
||||
0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50,
|
||||
0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0x34,
|
||||
0x01, 0x44, 0x01, 0x10, 0x49, 0x00, 0x01, 0x02, 0x01, 0x22, 0x11, 0x00,
|
||||
0x01, 0x6f, 0x01, 0xff, 0x11, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x11, 0x00,
|
||||
0x01, 0x7f, 0x01, 0xff, 0x01, 0x10, 0x10, 0x00, 0x01, 0x8f, 0x01, 0xff,
|
||||
0x01, 0x20, 0x10, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x30, 0x10, 0x00,
|
||||
0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, 0x10, 0x00, 0x01, 0xbf, 0x01, 0xff,
|
||||
0x01, 0x40, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00,
|
||||
0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff,
|
||||
0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00,
|
||||
0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff,
|
||||
0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00,
|
||||
0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff,
|
||||
0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00,
|
||||
0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff,
|
||||
0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00,
|
||||
0x01, 0x34, 0x01, 0x44, 0x01, 0x10, 0xff, 0x00, 0x69, 0x00, 0x02, 0xdd,
|
||||
0x11, 0x00, 0x02, 0xff, 0x11, 0x00, 0x02, 0xff, 0x11, 0x00, 0x02, 0xff,
|
||||
0x11, 0x00, 0x02, 0xff, 0x11, 0x00, 0x02, 0x44, 0x37, 0x00, 0x01, 0xbc,
|
||||
0x01, 0xcb, 0x11, 0x00, 0x01, 0xef, 0x01, 0xfe, 0x11, 0x00, 0x01, 0xef,
|
||||
0x01, 0xfe, 0x11, 0x00, 0x01, 0xef, 0x01, 0xfe, 0x11, 0x00, 0x01, 0xff,
|
||||
0x01, 0xfd, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfb, 0x10, 0x00,
|
||||
0x01, 0x0c, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0xaf, 0x01, 0xff,
|
||||
0x01, 0xd0, 0x0f, 0x00, 0x01, 0x0a, 0x02, 0xff, 0x01, 0x30, 0x0f, 0x00,
|
||||
0x01, 0xaf, 0x01, 0xff, 0x01, 0xf4, 0x0f, 0x00, 0x01, 0x09, 0x02, 0xff,
|
||||
0x01, 0x40, 0x0f, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf4, 0x0f, 0x00,
|
||||
0x01, 0x03, 0x02, 0xff, 0x01, 0x40, 0x0f, 0x00, 0x01, 0x0a, 0x01, 0xff,
|
||||
0x01, 0xf8, 0x10, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00,
|
||||
0x01, 0x1f, 0x01, 0xff, 0x01, 0xf0, 0x10, 0x00, 0x01, 0x0f, 0x01, 0xff,
|
||||
0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00,
|
||||
0x01, 0x05, 0x01, 0xd0, 0x0a, 0x00, 0x01, 0x08, 0x02, 0xff, 0x01, 0x70,
|
||||
0x02, 0x00, 0x01, 0x05, 0x01, 0xcf, 0x01, 0xf0, 0x0a, 0x00, 0x01, 0x01,
|
||||
0x01, 0xef, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x98, 0x01, 0x8b, 0x02, 0xff,
|
||||
0x01, 0xf0, 0x0b, 0x00, 0x01, 0x3f, 0x06, 0xff, 0x01, 0xc0, 0x0b, 0x00,
|
||||
0x01, 0x02, 0x01, 0xcf, 0x04, 0xff, 0x01, 0xc5, 0x0d, 0x00, 0x01, 0x03,
|
||||
0x01, 0x8b, 0x01, 0xcc, 0x01, 0xb9, 0x01, 0x62, 0xe2, 0x00, 0x01, 0x01,
|
||||
0x01, 0x32, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05,
|
||||
0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05,
|
||||
0x01, 0xfc, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x11, 0x00, 0x01, 0x39,
|
||||
0x01, 0xfd, 0x01, 0x42, 0x0e, 0x00, 0x01, 0x05, 0x01, 0xbf, 0x03, 0xff,
|
||||
0x01, 0xfb, 0x01, 0x50, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xcf, 0x05, 0xff,
|
||||
0x01, 0xf6, 0x0b, 0x00, 0x01, 0x4f, 0x02, 0xff, 0x02, 0xfe, 0x01, 0xce,
|
||||
0x01, 0xff, 0x01, 0xf6, 0x0a, 0x00, 0x01, 0x02, 0x02, 0xff, 0x01, 0xe6,
|
||||
0x01, 0x05, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x38, 0x01, 0xe6, 0x0a, 0x00,
|
||||
0x01, 0x0c, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x10, 0x01, 0x05, 0x01, 0xfc,
|
||||
0x02, 0x00, 0x01, 0x02, 0x0a, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xe1,
|
||||
0x01, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0d, 0x00, 0x01, 0xcf, 0x01, 0xff,
|
||||
0x01, 0x60, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0d, 0x00, 0x02, 0xff,
|
||||
0x02, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0c, 0x00, 0x01, 0x04, 0x01, 0xff,
|
||||
0x01, 0xfb, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0c, 0x00, 0x01, 0x06,
|
||||
0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0c, 0x00,
|
||||
0x01, 0x07, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfb,
|
||||
0x0c, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xf6, 0x02, 0x00, 0x01, 0x05,
|
||||
0x01, 0xfc, 0x0c, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00,
|
||||
0x01, 0x05, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf9,
|
||||
0x02, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xfc, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0d, 0x00, 0x02, 0xff,
|
||||
0x01, 0x10, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0d, 0x00, 0x01, 0xaf,
|
||||
0x01, 0xff, 0x01, 0x80, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0d, 0x00,
|
||||
0x01, 0x4f, 0x01, 0xff, 0x01, 0xf3, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfb,
|
||||
0x0d, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x30, 0x01, 0x05,
|
||||
0x01, 0xfb, 0x02, 0x00, 0x01, 0x33, 0x0a, 0x00, 0x01, 0x01, 0x01, 0xef,
|
||||
0x01, 0xff, 0x01, 0xf9, 0x01, 0x35, 0x01, 0xfb, 0x01, 0x02, 0x01, 0x6c,
|
||||
0x01, 0xf6, 0x0b, 0x00, 0x01, 0x2d, 0x06, 0xff, 0x01, 0xf6, 0x0b, 0x00,
|
||||
0x01, 0x01, 0x01, 0x9f, 0x05, 0xff, 0x01, 0xf5, 0x0c, 0x00, 0x01, 0x02,
|
||||
0x01, 0x8d, 0x03, 0xff, 0x01, 0xc7, 0x01, 0x20, 0x0e, 0x00, 0x01, 0x06,
|
||||
0x01, 0xfc, 0x01, 0x20, 0x10, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00,
|
||||
0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00,
|
||||
0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0xf5, 0x00,
|
||||
0x01, 0x6b, 0x01, 0xdf, 0x01, 0xfd, 0x01, 0xc9, 0x01, 0x40, 0x0d, 0x00,
|
||||
0x01, 0x6e, 0x05, 0xff, 0x01, 0x30, 0x0b, 0x00, 0x01, 0x07, 0x06, 0xff,
|
||||
0x01, 0x30, 0x0b, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x85,
|
||||
0x01, 0x34, 0x01, 0x7b, 0x01, 0xff, 0x01, 0x30, 0x0b, 0x00, 0x01, 0xaf,
|
||||
0x01, 0xff, 0x01, 0xc1, 0x03, 0x00, 0x01, 0x18, 0x01, 0x30, 0x0a, 0x00,
|
||||
0x01, 0x01, 0x02, 0xff, 0x01, 0x30, 0x0f, 0x00, 0x01, 0x04, 0x01, 0xff,
|
||||
0x01, 0xfd, 0x10, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfa, 0x10, 0x00,
|
||||
0x01, 0x08, 0x01, 0xff, 0x01, 0xf8, 0x10, 0x00, 0x01, 0x09, 0x01, 0xff,
|
||||
0x01, 0xf7, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00,
|
||||
0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff,
|
||||
0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00,
|
||||
0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x0e, 0x00, 0x01, 0x0a, 0x07, 0xff,
|
||||
0x01, 0xf4, 0x0a, 0x00, 0x01, 0x0a, 0x07, 0xff, 0x01, 0xf4, 0x0a, 0x00,
|
||||
0x01, 0x08, 0x01, 0xdd, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xfe, 0x03, 0xdd,
|
||||
0x01, 0xd4, 0x0c, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00,
|
||||
0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff,
|
||||
0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00,
|
||||
0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff,
|
||||
0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00,
|
||||
0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff,
|
||||
0x01, 0xf6, 0x0e, 0x00, 0x01, 0x4b, 0x01, 0xbb, 0x01, 0xbe, 0x01, 0xff,
|
||||
0x01, 0xfd, 0x05, 0xbb, 0x01, 0x70, 0x08, 0x00, 0x01, 0x6f, 0x09, 0xff,
|
||||
0x01, 0xa0, 0x08, 0x00, 0x01, 0x6f, 0x09, 0xff, 0x01, 0xa0, 0x08, 0x00,
|
||||
0x01, 0x4a, 0x09, 0xaa, 0x01, 0x60, 0xff, 0x00, 0xd2, 0x00, 0x01, 0x30,
|
||||
0x07, 0x00, 0x01, 0x01, 0x01, 0x40, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xf5,
|
||||
0x07, 0x00, 0x01, 0x1d, 0x01, 0xf4, 0x08, 0x00, 0x01, 0xbf, 0x01, 0xff,
|
||||
0x01, 0x40, 0x05, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x30,
|
||||
0x07, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xf4, 0x01, 0x00, 0x01, 0x6b,
|
||||
0x01, 0xdd, 0x01, 0xc8, 0x01, 0x20, 0x01, 0x1d, 0x01, 0xff, 0x01, 0xfa,
|
||||
0x08, 0x00, 0x01, 0x05, 0x02, 0xff, 0x01, 0x8e, 0x03, 0xff, 0x01, 0xfa,
|
||||
0x01, 0xdf, 0x01, 0xff, 0x01, 0xa0, 0x09, 0x00, 0x01, 0x5f, 0x07, 0xff,
|
||||
0x01, 0xfa, 0x0a, 0x00, 0x01, 0x05, 0x02, 0xff, 0x01, 0xe9, 0x01, 0x55,
|
||||
0x01, 0x7c, 0x02, 0xff, 0x01, 0xa0, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff,
|
||||
0x01, 0xfb, 0x01, 0x10, 0x02, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xa0,
|
||||
0x0a, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x07,
|
||||
0x01, 0xff, 0x01, 0xf2, 0x0a, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x30,
|
||||
0x04, 0x00, 0x01, 0xdf, 0x01, 0xf7, 0x0a, 0x00, 0x01, 0x4f, 0x01, 0xfd,
|
||||
0x05, 0x00, 0x01, 0x8f, 0x01, 0xfa, 0x0a, 0x00, 0x01, 0x6f, 0x01, 0xfc,
|
||||
0x05, 0x00, 0x01, 0x6f, 0x01, 0xfc, 0x0a, 0x00, 0x01, 0x5f, 0x01, 0xfc,
|
||||
0x05, 0x00, 0x01, 0x7f, 0x01, 0xfb, 0x0a, 0x00, 0x01, 0x3f, 0x01, 0xff,
|
||||
0x01, 0x10, 0x04, 0x00, 0x01, 0xbf, 0x01, 0xf8, 0x0a, 0x00, 0x01, 0x0e,
|
||||
0x01, 0xff, 0x01, 0x80, 0x03, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf3,
|
||||
0x0a, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf5, 0x03, 0x00, 0x01, 0x1d,
|
||||
0x01, 0xff, 0x01, 0xc0, 0x0a, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x92,
|
||||
0x01, 0x00, 0x01, 0x16, 0x01, 0xef, 0x01, 0xff, 0x01, 0x60, 0x0a, 0x00,
|
||||
0x01, 0x1d, 0x03, 0xff, 0x01, 0xfe, 0x03, 0xff, 0x01, 0xf4, 0x09, 0x00,
|
||||
0x01, 0x01, 0x01, 0xdf, 0x05, 0xff, 0x01, 0xfe, 0x02, 0xff, 0x01, 0x40,
|
||||
0x08, 0x00, 0x01, 0x1d, 0x01, 0xff, 0x01, 0xfa, 0x01, 0x06, 0x01, 0xdf,
|
||||
0x01, 0xff, 0x01, 0xfe, 0x01, 0x81, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xf4,
|
||||
0x08, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0xa0, 0x01, 0x00, 0x01, 0x01,
|
||||
0x01, 0x44, 0x01, 0x20, 0x01, 0x00, 0x01, 0x05, 0x02, 0xff, 0x01, 0x20,
|
||||
0x07, 0x00, 0x01, 0x4f, 0x01, 0xfa, 0x07, 0x00, 0x01, 0x4f, 0x01, 0xf8,
|
||||
0x08, 0x00, 0x01, 0x05, 0x01, 0xa0, 0x07, 0x00, 0x01, 0x05, 0x01, 0x80,
|
||||
0xff, 0x00, 0x84, 0x00, 0x01, 0x01, 0x01, 0x88, 0x01, 0x85, 0x07, 0x00,
|
||||
0x01, 0x38, 0x01, 0x88, 0x01, 0x40, 0x07, 0x00, 0x01, 0xcf, 0x01, 0xff,
|
||||
0x01, 0x10, 0x06, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x10, 0x07, 0x00,
|
||||
0x01, 0x3f, 0x01, 0xff, 0x01, 0x90, 0x05, 0x00, 0x01, 0x05, 0x01, 0xff,
|
||||
0x01, 0xf8, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xf2, 0x05, 0x00,
|
||||
0x01, 0x0d, 0x01, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0x02, 0x01, 0xff,
|
||||
0x01, 0xfa, 0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0x60, 0x09, 0x00,
|
||||
0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0xef, 0x01, 0xfd,
|
||||
0x0a, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x07,
|
||||
0x01, 0xff, 0x01, 0xf5, 0x0a, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xf4,
|
||||
0x03, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xc0, 0x0a, 0x00, 0x01, 0x01,
|
||||
0x01, 0xef, 0x01, 0xfd, 0x03, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x40,
|
||||
0x0b, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x50, 0x01, 0x00, 0x01, 0x02,
|
||||
0x01, 0xff, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xe0,
|
||||
0x01, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf3, 0x0c, 0x00, 0x01, 0x06,
|
||||
0x01, 0xff, 0x01, 0xf7, 0x01, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xa0,
|
||||
0x0a, 0x00, 0x01, 0x2a, 0x02, 0xaa, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x10,
|
||||
0x01, 0xbf, 0x01, 0xff, 0x01, 0xca, 0x01, 0xaa, 0x01, 0xa5, 0x08, 0x00,
|
||||
0x01, 0x4f, 0x04, 0xff, 0x01, 0x83, 0x04, 0xff, 0x01, 0xf8, 0x08, 0x00,
|
||||
0x01, 0x3c, 0x02, 0xcc, 0x01, 0xce, 0x01, 0xff, 0x01, 0xfd, 0x01, 0xff,
|
||||
0x01, 0xfc, 0x02, 0xcc, 0x01, 0xc6, 0x0b, 0x00, 0x01, 0x03, 0x03, 0xff,
|
||||
0x01, 0x70, 0x0f, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xfe, 0x10, 0x00,
|
||||
0x01, 0x2f, 0x01, 0xff, 0x01, 0xf5, 0x0c, 0x00, 0x01, 0x01, 0x03, 0x11,
|
||||
0x01, 0x1e, 0x01, 0xff, 0x01, 0xf3, 0x03, 0x11, 0x01, 0x10, 0x08, 0x00,
|
||||
0x01, 0x4f, 0x09, 0xff, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x4f, 0x09, 0xff,
|
||||
0x01, 0xf8, 0x08, 0x00, 0x01, 0x27, 0x03, 0x77, 0x01, 0x7e, 0x01, 0xff,
|
||||
0x01, 0xf8, 0x03, 0x77, 0x01, 0x73, 0x0c, 0x00, 0x01, 0x0e, 0x01, 0xff,
|
||||
0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00,
|
||||
0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff,
|
||||
0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00,
|
||||
0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff,
|
||||
0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00,
|
||||
0x01, 0x08, 0x01, 0x99, 0x01, 0x91, 0xc9, 0x00
|
||||
};
|
||||
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
# Written By Marcio Teixeira 2018 - Aleph Objects, Inc.
|
||||
#
|
||||
# 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 3 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.
|
||||
#
|
||||
# To view a copy of the GNU General Public License, go to the following
|
||||
# location: <http://www.gnu.org/licenses/>.
|
||||
|
||||
from __future__ import print_function
|
||||
from PIL import Image
|
||||
import argparse
|
||||
import textwrap
|
||||
|
||||
def pack_rle(data):
|
||||
"""Use run-length encoding to pack the bytes"""
|
||||
rle = []
|
||||
value = data[0]
|
||||
count = 0
|
||||
for i in data:
|
||||
if i != value or count == 255:
|
||||
rle.append(count)
|
||||
rle.append(value)
|
||||
value = i
|
||||
count = 1
|
||||
else:
|
||||
count += 1
|
||||
rle.append(count)
|
||||
rle.append(value)
|
||||
return rle
|
||||
|
||||
class WriteSource:
|
||||
def __init__(self):
|
||||
self.values = []
|
||||
|
||||
def add_pixel(self, value):
|
||||
self.values.append(value)
|
||||
|
||||
def convert_to_4bpp(self, data):
|
||||
# Invert the image
|
||||
data = map(lambda i: 255 - i, data)
|
||||
# Quanitize 8-bit values into 4-bits
|
||||
data = map(lambda i: i >> 4, data)
|
||||
# Make sure there is an even number of elements
|
||||
if (len(data) & 1) == 1:
|
||||
result.append(0)
|
||||
# Combine each two adjacent values into one
|
||||
i = iter(data)
|
||||
data = map(lambda a, b: a << 4 | b, i ,i)
|
||||
# Pack the data
|
||||
data = pack_rle(data)
|
||||
# Convert values into hex strings
|
||||
return map(lambda a: "0x" + format(a, '02x'), data)
|
||||
|
||||
def end_row(self):
|
||||
# Pad each row into even number of values
|
||||
if len(self.values) & 1:
|
||||
self.values.append(0)
|
||||
|
||||
def write(self):
|
||||
data = self.convert_to_4bpp(self.values)
|
||||
data = ', '.join(data)
|
||||
data = textwrap.fill(data, 75, initial_indent = ' ', subsequent_indent = ' ')
|
||||
|
||||
print("const unsigned char font[] PROGMEM = {")
|
||||
print(data);
|
||||
print("};")
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description='Converts a grayscale bitmap into a 16-level RLE packed C array for use as font data')
|
||||
parser.add_argument("input")
|
||||
args = parser.parse_args()
|
||||
|
||||
img = Image.open(args.input).convert('L')
|
||||
|
||||
writer = WriteSource()
|
||||
for y in range(img.height):
|
||||
for x in range(img.width):
|
||||
writer.add_pixel(img.getpixel((x,y)))
|
||||
writer.end_row()
|
||||
writer.write()
|
||||
@@ -62,6 +62,7 @@ void BootScreen::onIdle() {
|
||||
PUSH_SCREEN(StatusScreen);
|
||||
} else {
|
||||
if (!UIFlashStorage::is_valid()) {
|
||||
StatusScreen::loadBitmaps();
|
||||
SpinnerDialogBox::show(F("Please wait..."));
|
||||
UIFlashStorage::format_flash();
|
||||
SpinnerDialogBox::hide();
|
||||
@@ -73,12 +74,16 @@ void BootScreen::onIdle() {
|
||||
if (!MediaPlayerScreen::playBootMedia())
|
||||
showSplashScreen();
|
||||
}
|
||||
|
||||
StatusScreen::loadBitmaps();
|
||||
|
||||
#ifdef LULZBOT_USE_BIOPRINTER_UI
|
||||
GOTO_SCREEN(BioConfirmHomeXYZ);
|
||||
current_screen.forget();
|
||||
PUSH_SCREEN(StatusScreen);
|
||||
PUSH_SCREEN(BioConfirmHomeE);
|
||||
#else
|
||||
StatusScreen::setStatusMessage(F(WELCOME_MSG));
|
||||
GOTO_SCREEN(StatusScreen);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ void MediaPlayerScreen::playStream(void *obj, media_streamer_func_t *data_stream
|
||||
// everything that is stored in RAMG.
|
||||
cmd.cmd(CMD_DLSTART).execute();
|
||||
DLCache::init();
|
||||
StatusScreen::onStartup();
|
||||
StatusScreen::loadBitmaps();
|
||||
}
|
||||
#endif // FTDI_API_LEVEL >= 810
|
||||
}
|
||||
|
||||
@@ -193,8 +193,13 @@ void StatusScreen::draw_temperature(draw_mode_t what) {
|
||||
int8_t(getActualFan_percent(FAN0))
|
||||
);
|
||||
|
||||
const char *idle = PSTR("%-3d C / idle");
|
||||
const char *not_idle = PSTR("%-3d / %-3d C");
|
||||
#if defined(TOUCH_UI_USE_UTF8) && defined(TOUCH_UI_UTF8_WESTERN_CHARSET)
|
||||
const char *idle = PSTR(u8"%3d°C / idle");
|
||||
const char *not_idle = PSTR(u8"%3d / %3d°C");
|
||||
#else
|
||||
const char *idle = PSTR("%3d C / idle");
|
||||
const char *not_idle = PSTR("%3d / %3d C");
|
||||
#endif
|
||||
|
||||
sprintf_P(
|
||||
bed_str,
|
||||
@@ -353,10 +358,14 @@ void StatusScreen::setStatusMessage(const char* message) {
|
||||
.cmd(CLEAR(true,true,true));
|
||||
|
||||
draw_temperature(BACKGROUND);
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
load_utf8_bitmaps(cmd);
|
||||
#endif
|
||||
draw_progress(BACKGROUND);
|
||||
draw_axis_position(BACKGROUND);
|
||||
draw_status_message(BACKGROUND, message);
|
||||
draw_interaction_buttons(BACKGROUND);
|
||||
|
||||
storeBackground();
|
||||
|
||||
#ifdef UI_FRAMEWORK_DEBUG
|
||||
@@ -369,9 +378,8 @@ void StatusScreen::setStatusMessage(const char* message) {
|
||||
}
|
||||
}
|
||||
|
||||
void StatusScreen::onStartup() {
|
||||
void StatusScreen::loadBitmaps() {
|
||||
// Load the bitmaps for the status screen
|
||||
|
||||
using namespace Theme;
|
||||
constexpr uint32_t base = ftdi_memory_map::RAM_G;
|
||||
CLCD::mem_write_pgm(base + TD_Icon_Info.RAMG_offset, TD_Icon, sizeof(TD_Icon));
|
||||
@@ -379,8 +387,13 @@ void StatusScreen::onStartup() {
|
||||
CLCD::mem_write_pgm(base + Bed_Heat_Icon_Info.RAMG_offset, Bed_Heat_Icon, sizeof(Bed_Heat_Icon));
|
||||
CLCD::mem_write_pgm(base + Fan_Icon_Info.RAMG_offset, Fan_Icon, sizeof(Fan_Icon));
|
||||
|
||||
setStatusMessage(F(WELCOME_MSG));
|
||||
// Load fonts for internationalization
|
||||
#ifdef TOUCH_UI_USE_UTF8
|
||||
load_utf8_data(base + UTF8_FONT_OFFSET);
|
||||
#endif
|
||||
}
|
||||
|
||||
void StatusScreen::onStartup() {
|
||||
UIFlashStorage::initialize();
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,14 @@ using namespace ExtUI;
|
||||
|
||||
void TemperatureScreen::onRedraw(draw_mode_t what) {
|
||||
widgets_t w(what);
|
||||
w.precision(0).color(temp).units(PSTR("C"));
|
||||
w.precision(0).color(temp).units(
|
||||
PSTR(
|
||||
#if defined(TOUCH_UI_USE_UTF8) && defined(TOUCH_UI_UTF8_WESTERN_CHARSET)
|
||||
u8"°C"
|
||||
#else
|
||||
"C"
|
||||
#endif
|
||||
));
|
||||
w.heading( PSTR("Temperature:"));
|
||||
w.button(30, PSTR("Cooldown (All Off)"));
|
||||
#ifndef LULZBOT_DISABLE_TOOLHEAD_HEATER
|
||||
|
||||
@@ -178,4 +178,6 @@ namespace Theme {
|
||||
0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFC, 0x00
|
||||
};
|
||||
|
||||
constexpr PROGMEM uint32_t UTF8_FONT_OFFSET = 10000;
|
||||
}; // namespace Theme
|
||||
Reference in new issue
Block a user