diff --git a/temporary/benchmark.py b/temporary/benchmark.py new file mode 100644 index 0000000..82d6092 --- /dev/null +++ b/temporary/benchmark.py @@ -0,0 +1,93 @@ +import framebuf +from writer import Writer +import utime +import courier_virt_25 as font + +def timed_function(f, *args, **kwargs): + myname = str(f).split(' ')[1] + def new_func(*args, **kwargs): + t = utime.ticks_us() + result = f(*args, **kwargs) + delta = utime.ticks_diff(utime.ticks_us(), t) # Argument order new, old + print('Function {} Time = {:6.3f}ms'.format(myname, delta/1000)) + return result + return new_func + +class VirtualDisplay(object): + def __init__(self): + self.width = 256 # 16K framebuf + self.height = 512 + self.pages = self.height // 8 + self.size = self.pages * self.width + self.buffer = bytearray(self.size) + self.framebuf = framebuf.FrameBuffer1(self.buffer, self.width, self.height) + + def show(self): + pass + + def fill(self, col): + val = 0xff if col else 0 + for x in range(self.size): + self.buffer[x] = val + +class SlowWriter(Writer): + def __init__(self, device, font): + super().__init__(device, font) + + def _printchar(self, char): + bmap = Writer.bmap # Buffer mapping + if char == '\n': + self._newline() + return + device = self.device + fbuff = device.framebuf + glyph, char_height, char_width = self.font.get_ch(char) + if Writer.text_row+char_height > self.screenheight and Writer.row_clip: + return + if Writer.text_col + char_width > self.screenwidth: + if Writer.col_clip: + return + else: + self._newline() + + div, mod = divmod(char_height, 8) + gbytes = div + 1 if mod else div # No. of bytes per column of glyph + for scol in range(0, char_width): # Source column + dcol = scol + Writer.text_col # Destination column + drow = Writer.text_row + for row_offset in range(char_height): + gbyte = row_offset >> 3 # Glyph byte in column + gbit = row_offset & 7 + data_byte = glyph[scol * gbytes + gbyte] + fbuff.pixel(dcol, drow + row_offset, data_byte & (1 << gbit)) + Writer.text_col += char_width + +def check(): + x = len(device.buffer) -1 + while device.buffer[x] == 0: + x -= 1 + print('x = ', x) + print(device.buffer[x -16:x]) + +def setup(): + device.fill(0) + Writer.set_textpos(0,0) + +device = VirtualDisplay() +mystr = 'The quick brown fox\n' + +wri = Writer(device, font) +wrislow = SlowWriter(device, font) + +@timed_function +def test(writer): + for _ in range(5): + writer.printstring(mystr) + +setup() +test(wri) # Bytewise output +check() + +setup() +test(wrislow) # Bitwise output +check() diff --git a/temporary/courier_virt_25.py b/temporary/courier_virt_25.py new file mode 100644 index 0000000..656cd6c --- /dev/null +++ b/temporary/courier_virt_25.py @@ -0,0 +1,465 @@ +# Code generated by font-to-py.py. +# Font: Courier Prime.ttf +version = '0.1' + +def height(): + return 25 + +def max_width(): + return 17 + +def hmap(): + return False + +def reverse(): + return False + +def monospaced(): + return False + +_font =\ +b'\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x03\x00\xf8\x87\x07\x00'\ +b'\xf8\x9f\x07\x00\xf8\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x78\x00'\ +b'\x00\x00\xf8\x03\x00\x00\xf8\x03\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x18\x00\x00\x00\xf8\x03\x00\x00\xf8\x03\x00\x00\x18\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x11\x00\x00\x30\x00\x00\x80\x31\x00\x00\x80\xb1\x07\x00'\ +b'\x80\xf1\x03\x00\x80\x7f\x00\x00\xc0\x3f\x00\x00\xf8\x31\x00\x00'\ +b'\xbc\xb1\x07\x00\x80\xf1\x03\x00\x80\x3f\x00\x00\xc0\x37\x00\x00'\ +b'\xf8\x31\x00\x00\x9c\x31\x00\x00\x80\x31\x00\x00\x80\x01\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\xc0\xc3\x03\x00\xe0\xc7'\ +b'\x03\x00\x30\x0e\x01\x00\x30\x0e\x03\x00\xfe\xff\x1f\x00\xfe\xff'\ +b'\x1f\x00\x30\x0c\x03\x00\x20\x1c\x03\x00\x60\x9c\x01\x00\xf0\xf8'\ +b'\x01\x00\xf0\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00'\ +b'\xe0\x00\x01\x00\xf0\x81\x03\x00\x18\xc3\x01\x00\x18\xe3\x00\x00'\ +b'\x18\x73\x00\x00\xf0\x39\x00\x00\xe0\x1c\x00\x00\x00\x0e\x00\x00'\ +b'\x00\xc6\x01\x00\x00\xe3\x03\x00\x80\x31\x06\x00\xc0\x30\x06\x00'\ +b'\x60\x30\x06\x00\x30\xe0\x03\x00\x00\xc0\x01\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x11\x00\x00\xf0\x01\x00\xe0\xf9\x03\x00\xf0\x1f'\ +b'\x07\x00\x38\x0e\x06\x00\x18\x0c\x06\x00\x18\x38\x06\x00\x18\x70'\ +b'\x07\x00\x18\xe0\x03\x00\x70\xe0\x01\x00\x70\xf8\x03\x00\x00\x38'\ +b'\x07\x00\x00\x18\x06\x00\x00\x18\x06\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\xf8\x01\x00\x00'\ +b'\xf8\x03\x00\x00\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x11\x00\x00\xfe\x00\x00\xc0\xff\x07\x00\xe0\x01\x1f\x00\x78\x00'\ +b'\x38\x00\x1c\x00\x70\x00\x0c\x00\xe0\x00\x06\x00\xc0\x01\x06\x00'\ +b'\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x11\x00\x06\x00\x80\x01\x06\x00\xc0\x00'\ +b'\x0c\x00\xe0\x00\x18\x00\x70\x00\x70\x00\x38\x00\xe0\x01\x1f\x00'\ +b'\xc0\xff\x07\x00\x00\xfe\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\xc0\x01'\ +b'\x00\x00\x80\x31\x00\x00\x80\x39\x00\x00\x80\x3d\x00\x00\x38\x0f'\ +b'\x00\x00\xf8\x03\x00\x00\x10\x0f\x00\x00\x80\x3d\x00\x00\x80\x31'\ +b'\x00\x00\xc0\x01\x00\x00\xc0\x01\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x11\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00'\ +b'\x00\x0c\x00\x00\x00\x0c\x00\x00\xe0\xff\x01\x00\xe0\xff\x01\x00'\ +b'\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00'\ +b'\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x70\x00\x00\x00'\ +b'\x7f\x00\x00\x80\x1f\x00\x00\x80\x07\x00\x00\x80\x01\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00'\ +b'\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00'\ +b'\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00'\ +b'\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x11\x00\x00\x00\x03\x00\x00\x80\x07\x00\x00\x80'\ +b'\x07\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x70\x00'\ +b'\x00\x00\x7c\x00\x00\x00\x1f\x00\x00\xc0\x07\x00\x00\xf0\x00\x00'\ +b'\x00\x3e\x00\x00\x80\x0f\x00\x00\xe0\x03\x00\x00\xf8\x00\x00\x00'\ +b'\x1e\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x11\x00\x80\x7f\x00\x00\xe0\xff\x01\x00\xf0\xc0\x03\x00\x38\x00'\ +b'\x07\x00\x18\x00\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00\x38\x00'\ +b'\x07\x00\xf0\xc0\x03\x00\xe0\xff\x01\x00\x80\x7f\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x11\x00\x20\x00\x04\x00\x30\x00\x06\x00'\ +b'\x30\x00\x06\x00\x30\x00\x06\x00\x18\x00\x06\x00\xf8\xff\x07\x00'\ +b'\xf8\xff\x07\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x06\x00'\ +b'\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\xf0\x00'\ +b'\x06\x00\xf0\x00\x07\x00\x38\x80\x07\x00\x18\xc0\x07\x00\x18\xe0'\ +b'\x06\x00\x18\x70\x06\x00\x18\x38\x06\x00\x30\x1e\x06\x00\xf0\x0f'\ +b'\x06\x00\xe0\x83\x07\x00\x00\x80\x07\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x11\x00\x70\x80\x01\x00\x70\x00\x03\x00\x18\x00\x03\x00'\ +b'\x18\x06\x06\x00\x18\x06\x06\x00\x18\x06\x06\x00\x18\x06\x06\x00'\ +b'\x30\x0f\x06\x00\xf0\x0f\x03\x00\xe0\xf9\x03\x00\x00\xf0\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x38\x00\x00\x00\x3c'\ +b'\x00\x00\x00\x3e\x00\x00\x00\x33\x00\x00\xc0\x31\x06\x00\xe0\x30'\ +b'\x06\x00\x30\x30\x06\x00\xf8\xff\x07\x00\xf8\xff\x07\x00\x00\x30'\ +b'\x06\x00\x00\x30\x06\x00\x00\x30\x06\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00'\ +b'\x00\x80\x01\x00\xf8\x07\x03\x00\xf8\x07\x03\x00\x18\x03\x06\x00'\ +b'\x18\x03\x06\x00\x18\x03\x06\x00\x18\x03\x06\x00\x18\x03\x07\x00'\ +b'\x18\x8e\x03\x00\x18\xfe\x01\x00\x00\xf8\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x11\x00\x00\x7e\x00\x00\x80\xff\x01\x00\xc0\x0d'\ +b'\x03\x00\xe0\x04\x06\x00\x70\x06\x06\x00\x30\x06\x06\x00\x38\x06'\ +b'\x06\x00\x18\x06\x06\x00\x18\x0c\x03\x00\x18\xfc\x03\x00\x00\xf0'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x78\x00\x00\x00'\ +b'\x78\x00\x00\x00\x18\x00\x00\x00\x18\x00\x06\x00\x18\xc0\x07\x00'\ +b'\x18\xf0\x01\x00\x18\x7c\x00\x00\x98\x0f\x00\x00\xf8\x03\x00\x00'\ +b'\xf8\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x11\x00\xe0\xf0\x00\x00\xf0\xf9\x03\x00\x30\x0f\x03\x00\x18\x06'\ +b'\x06\x00\x18\x06\x06\x00\x18\x06\x06\x00\x18\x06\x06\x00\x30\x07'\ +b'\x06\x00\xf0\x0f\x03\x00\xe0\xf9\x03\x00\x00\xf0\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x11\x00\xc0\x03\x00\x00\xf0\x0f\x06\x00'\ +b'\x30\x0c\x06\x00\x18\x18\x06\x00\x18\x18\x07\x00\x18\x18\x03\x00'\ +b'\x18\x98\x03\x00\x38\xc8\x01\x00\x30\xec\x00\x00\xe0\x7f\x00\x00'\ +b'\x80\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x80\x01'\ +b'\x03\x00\xc0\x83\x07\x00\xc0\x83\x07\x00\x80\x01\x03\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x11\x00\x00\x00\x70\x00\x80\x01\x7f\x00\xc0\x83\x1f\x00'\ +b'\xc0\x83\x07\x00\x80\x81\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x0c\x00\x00\x00\x1c'\ +b'\x00\x00\x00\x1e\x00\x00\x00\x3e\x00\x00\x00\x33\x00\x00\x00\x33'\ +b'\x00\x00\x80\x61\x00\x00\x80\x61\x00\x00\xc0\xc0\x00\x00\xc0\xc0'\ +b'\x00\x00\x60\x80\x01\x00\x60\x80\x01\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00'\ +b'\x80\x61\x00\x00\x80\x61\x00\x00\x80\x61\x00\x00\x80\x61\x00\x00'\ +b'\x80\x61\x00\x00\x80\x61\x00\x00\x80\x61\x00\x00\x80\x61\x00\x00'\ +b'\x80\x61\x00\x00\x80\x61\x00\x00\x80\x61\x00\x00\x80\x61\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x11\x00\x20\x00\x01\x00\x60\x80\x01\x00\x60\x80'\ +b'\x01\x00\xc0\xc0\x00\x00\xc0\xc0\x00\x00\x80\x61\x00\x00\x80\x61'\ +b'\x00\x00\x00\x33\x00\x00\x00\x33\x00\x00\x00\x1e\x00\x00\x00\x1e'\ +b'\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x70\x00\x00\x00'\ +b'\x70\x00\x00\x00\x18\x00\x00\x00\x18\x00\x03\x00\x18\xfc\x07\x00'\ +b'\x18\xbc\x07\x00\x18\x0c\x03\x00\x38\x06\x00\x00\xf0\x07\x00\x00'\ +b'\xe0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x11\x00\x00\xfc\x00\x00\x00\xff\x03\x00\x80\x03\x07\x00\xc0\xf8'\ +b'\x0c\x00\x60\xfc\x1d\x00\x70\x8e\x19\x00\x30\x87\x19\x00\x30\x83'\ +b'\x18\x00\x30\x63\x18\x00\x30\xfe\x19\x00\x70\x87\x0d\x00\x60\x80'\ +b'\x09\x00\xc0\xc1\x01\x00\x80\xff\x00\x00\x00\x3f\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x06\x00\x00\x00\x06\x00'\ +b'\x00\x00\x07\x00\x18\xe0\x07\x00\x18\xfc\x06\x00\x18\x3f\x06\x00'\ +b'\xf8\x33\x04\x00\x78\x30\x00\x00\x18\x30\x00\x00\xf8\x30\x00\x00'\ +b'\xe0\x37\x06\x00\x80\x3f\x06\x00\x00\xfc\x06\x00\x00\xe0\x07\x00'\ +b'\x00\x00\x07\x00\x00\x00\x06\x00\x00\x00\x06\x00\x11\x00\x18\x00'\ +b'\x06\x00\x18\x00\x06\x00\xf8\xff\x07\x00\xf8\xff\x07\x00\x18\x0c'\ +b'\x06\x00\x18\x0c\x06\x00\x18\x0c\x06\x00\x18\x0c\x06\x00\x18\x0c'\ +b'\x06\x00\x18\x0c\x06\x00\x30\x0e\x06\x00\xf0\x1f\x03\x00\xe0\xf9'\ +b'\x03\x00\x00\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x11\x00\x00\x3f\x00\x00\xc0\xff\x00\x00\xe0\xc0\x01\x00'\ +b'\x70\x00\x03\x00\x38\x00\x07\x00\x18\x00\x06\x00\x18\x00\x06\x00'\ +b'\x18\x00\x06\x00\x18\x00\x06\x00\x30\x00\x06\x00\x70\x00\x03\x00'\ +b'\xf8\x01\x03\x00\xf8\x81\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x18\x00\x06\x00\x18\x00'\ +b'\x06\x00\xf8\xff\x07\x00\xf8\xff\x07\x00\x18\x00\x06\x00\x18\x00'\ +b'\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00\x38\x00'\ +b'\x07\x00\x70\x80\x03\x00\xe0\xc0\x01\x00\xc0\xff\x00\x00\x00\x3f'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00'\ +b'\x18\x00\x06\x00\x18\x00\x06\x00\xf8\xff\x07\x00\xf8\xff\x07\x00'\ +b'\x18\x0c\x06\x00\x18\x0c\x06\x00\x18\x0c\x06\x00\x18\x0c\x06\x00'\ +b'\x18\x3f\x06\x00\x18\x3f\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00'\ +b'\xf8\xe0\x07\x00\xf8\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x11\x00\x18\x00\x06\x00\x18\x00\x06\x00\x18\x00'\ +b'\x06\x00\xf8\xff\x07\x00\xf8\xff\x07\x00\x18\x0c\x06\x00\x18\x0c'\ +b'\x06\x00\x18\x0c\x06\x00\x18\x3f\x06\x00\x18\x3f\x00\x00\x18\x00'\ +b'\x00\x00\x18\x00\x00\x00\xf8\x00\x00\x00\xf8\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x3f\x00\x00'\ +b'\xc0\xff\x00\x00\xe0\xc0\x01\x00\x70\x00\x03\x00\x38\x00\x07\x00'\ +b'\x18\x00\x06\x00\x18\x00\x06\x00\x18\x30\x06\x00\x18\x30\x06\x00'\ +b'\x18\x30\x06\x00\x30\x30\x06\x00\xf8\xf1\x03\x00\xf8\xf1\x03\x00'\ +b'\x00\x30\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x11\x00\x18\x00\x06\x00\x18\x00\x06\x00\xf8\xff\x07\x00\xf8\xff'\ +b'\x07\x00\x18\x0c\x06\x00\x18\x0c\x06\x00\x00\x0c\x00\x00\x00\x0c'\ +b'\x00\x00\x00\x0c\x00\x00\x18\x0c\x06\x00\x18\x0c\x06\x00\xf8\xff'\ +b'\x07\x00\xf8\xff\x07\x00\x18\x00\x06\x00\x18\x00\x06\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x06\x00\x18\x00\x06\x00'\ +b'\x18\x00\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00\xf8\xff\x07\x00'\ +b'\xf8\xff\x07\x00\x18\x00\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00'\ +b'\x18\x00\x06\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\xf8'\ +b'\x01\x00\x00\xf0\x03\x00\x10\x00\x07\x00\x18\x00\x06\x00\x18\x00'\ +b'\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00\x18\x00\x07\x00\xf8\xff'\ +b'\x03\x00\xf8\xff\x01\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18\x00'\ +b'\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x11\x00\x18\x00\x06\x00\x18\x00\x06\x00\xf8\xff\x07\x00'\ +b'\xf8\xff\x07\x00\x18\x0c\x06\x00\x18\x0e\x06\x00\x00\x0f\x06\x00'\ +b'\x00\x0f\x00\x00\x80\x19\x00\x00\xd8\x78\x00\x00\x78\xf0\x01\x00'\ +b'\x38\x80\x07\x00\x38\x00\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x18\x00\x06\x00\x18\x00'\ +b'\x06\x00\x18\x00\x06\x00\xf8\xff\x07\x00\xf8\xff\x07\x00\x18\x00'\ +b'\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00\x00\x00'\ +b'\x06\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\xf0\x07\x00\x00\xf0'\ +b'\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00'\ +b'\x00\x00\x06\x00\x18\x00\x06\x00\xf8\xff\x07\x00\xf8\xff\x07\x00'\ +b'\x78\x00\x06\x00\xf0\x01\x06\x00\xc0\x0f\x00\x00\x00\x3e\x00\x00'\ +b'\x00\x70\x00\x00\x00\x3e\x00\x00\xc0\x0f\x00\x00\xf0\x01\x06\x00'\ +b'\x78\x00\x06\x00\xf8\xff\x07\x00\xf8\xff\x07\x00\x18\x00\x06\x00'\ +b'\x00\x00\x06\x00\x11\x00\x18\x00\x06\x00\x18\x00\x06\x00\xf8\xff'\ +b'\x07\x00\xf8\xff\x07\x00\x78\x00\x06\x00\xe0\x00\x06\x00\x80\x03'\ +b'\x06\x00\x00\x0e\x00\x00\x00\x3c\x00\x00\x18\xf0\x00\x00\x18\xc0'\ +b'\x03\x00\xf8\xff\x07\x00\xf8\xff\x07\x00\x18\x00\x00\x00\x18\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x3f\x00\x00'\ +b'\xc0\xff\x00\x00\xe0\xc0\x01\x00\x70\x80\x03\x00\x30\x00\x03\x00'\ +b'\x18\x00\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00'\ +b'\x18\x00\x06\x00\x30\x00\x03\x00\x70\x80\x03\x00\xe0\xc0\x01\x00'\ +b'\xc0\xff\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x11\x00\x18\x00\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00\xf8\xff'\ +b'\x07\x00\xf8\xff\x07\x00\x18\x18\x06\x00\x18\x18\x06\x00\x18\x18'\ +b'\x06\x00\x18\x18\x06\x00\x18\x18\x00\x00\x38\x18\x00\x00\x30\x0c'\ +b'\x00\x00\xf0\x0f\x00\x00\xc0\x03\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x11\x00\x00\x3f\x00\x00\xc0\xff\x00\x00'\ +b'\xe0\xc0\x21\x00\x70\x80\x73\x00\x30\x00\x3b\x00\x18\x00\x3e\x00'\ +b'\x18\x00\x36\x00\x18\x00\x36\x00\x18\x00\x36\x00\x18\x00\x36\x00'\ +b'\x30\x00\x33\x00\x70\x80\x33\x00\xe0\xc0\x39\x00\xc0\xff\x10\x00'\ +b'\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x18\x00'\ +b'\x06\x00\x18\x00\x06\x00\xf8\xff\x07\x00\xf8\xff\x07\x00\x18\x0c'\ +b'\x06\x00\x18\x0c\x06\x00\x18\x0c\x00\x00\x18\x1c\x00\x00\x18\x1c'\ +b'\x00\x00\x18\x34\x00\x00\x30\xf6\x00\x00\xf0\xc7\x03\x00\xe0\x81'\ +b'\x07\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x11\x00\xe0\xe1\x07\x00\xf0\xc3\x07\x00\x30\x86\x03\x00'\ +b'\x18\x06\x03\x00\x18\x06\x06\x00\x18\x04\x06\x00\x18\x0c\x06\x00'\ +b'\x18\x0c\x06\x00\x30\x0c\x06\x00\x30\x0c\x06\x00\x78\x18\x03\x00'\ +b'\x78\xf8\x03\x00\x00\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\xf8\x03\x00\x00\xf8\x03'\ +b'\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00\x18\x00\x06\x00\xf8\xff'\ +b'\x07\x00\xf8\xff\x07\x00\x18\x00\x06\x00\x18\x00\x06\x00\x18\x00'\ +b'\x06\x00\x18\x00\x06\x00\xf8\x03\x00\x00\xf8\x03\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00'\ +b'\x18\x00\x00\x00\x18\x00\x00\x00\xf8\xff\x00\x00\xf8\xff\x03\x00'\ +b'\x18\x00\x03\x00\x18\x00\x06\x00\x00\x00\x06\x00\x00\x00\x06\x00'\ +b'\x00\x00\x06\x00\x18\x00\x06\x00\x18\x00\x03\x00\xf8\xff\x03\x00'\ +b'\xf8\xff\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x11\x00\x18\x00\x00\x00\x18\x00\x00\x00\x38\x00'\ +b'\x00\x00\xf8\x01\x00\x00\xd8\x0f\x00\x00\x18\x3e\x00\x00\x18\xf8'\ +b'\x01\x00\x00\xc0\x07\x00\x00\x00\x07\x00\x00\xc0\x07\x00\x00\xf8'\ +b'\x01\x00\x18\x3f\x00\x00\xd8\x07\x00\x00\xf8\x01\x00\x00\x38\x00'\ +b'\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x11\x00\x18\x00\x00\x00'\ +b'\x18\x00\x00\x00\xf8\x0f\x00\x00\xf8\xff\x07\x00\x18\xf0\x07\x00'\ +b'\x18\xc0\x07\x00\x00\xf8\x01\x00\x80\x3f\x00\x00\x80\x07\x00\x00'\ +b'\x80\x1f\x00\x00\x00\xfc\x00\x00\x18\xe0\x07\x00\x18\xe0\x07\x00'\ +b'\xf8\xff\x07\x00\xf8\x0f\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00'\ +b'\x11\x00\x00\x00\x06\x00\x18\x00\x06\x00\x18\x00\x07\x00\x38\x80'\ +b'\x07\x00\xf8\xc0\x06\x00\xd8\x71\x06\x00\x98\x3b\x00\x00\x00\x1e'\ +b'\x00\x00\x00\x1f\x00\x00\x80\x3b\x00\x00\xd8\x71\x06\x00\xf8\xc0'\ +b'\x06\x00\x38\x80\x07\x00\x18\x00\x07\x00\x18\x00\x06\x00\x00\x00'\ +b'\x06\x00\x00\x00\x00\x00\x11\x00\x18\x00\x00\x00\x18\x00\x00\x00'\ +b'\x38\x00\x06\x00\xf8\x00\x06\x00\xd8\x03\x06\x00\x18\x07\x06\x00'\ +b'\x00\xfe\x07\x00\x00\xfc\x07\x00\x00\x0f\x06\x00\x98\x03\x06\x00'\ +b'\xf8\x01\x06\x00\x78\x00\x06\x00\x38\x00\x00\x00\x18\x00\x00\x00'\ +b'\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\xf8\x01'\ +b'\x06\x00\xf8\x81\x07\x00\x18\xc0\x07\x00\x18\xe0\x06\x00\x18\x78'\ +b'\x06\x00\x18\x1c\x06\x00\x18\x0f\x06\x00\x98\x03\x06\x00\xf8\x01'\ +b'\x06\x00\xf8\x00\x06\x00\x38\xe0\x07\x00\x18\xe0\x07\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x11\x00\xfe\xff\xff\x00\xfe\xff\xff\x00\x06\x00\xc0\x00'\ +b'\x06\x00\xc0\x00\x06\x00\xc0\x00\x06\x00\xc0\x00\x06\x00\xc0\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x0e\x00\x00\x00\x3e\x00'\ +b'\x00\x00\xf8\x00\x00\x00\xe0\x03\x00\x00\x00\x0f\x00\x00\x00\x7c'\ +b'\x00\x00\x00\xf0\x01\x00\x00\xc0\x07\x00\x00\x00\x1f\x00\x00\x00'\ +b'\x78\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00'\ +b'\x06\x00\xc0\x00\x06\x00\xc0\x00\x06\x00\xc0\x00\x06\x00\xc0\x00'\ +b'\x06\x00\xc0\x00\xfe\xff\xff\x00\xfe\xff\xff\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x11\x00\x00\x08\x00\x00\x00\x1e\x00\x00\x80\x0f'\ +b'\x00\x00\xe0\x03\x00\x00\xf8\x00\x00\x00\x38\x00\x00\x00\xf0\x00'\ +b'\x00\x00\xc0\x03\x00\x00\x00\x0f\x00\x00\x00\x1c\x00\x00\x00\x10'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x18\x00'\ +b'\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18\x00'\ +b'\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18\x00'\ +b'\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18\x00'\ +b'\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18\x00'\ +b'\x11\x00\x07\x00\x00\x00\x07\x00\x00\x00\x06\x00\x00\x00\x0c\x00'\ +b'\x00\x00\x0c\x00\x00\x00\x08\x00\x00\x00\x18\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x11\x00\x00\xe0\x01\x00\x00\xf1\x03\x00'\ +b'\x80\x31\x07\x00\x80\x19\x06\x00\xc0\x18\x06\x00\xc0\x18\x06\x00'\ +b'\xc0\x18\x06\x00\xc0\x18\x07\x00\xc0\x18\x03\x00\xc0\x91\x03\x00'\ +b'\x80\xff\x03\x00\x00\xff\x07\x00\x00\x00\x06\x00\x00\x00\x06\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x06\x00'\ +b'\x06\x00\x06\x00\x06\x00\xfe\xff\x07\x00\xfe\xff\x07\x00\x00\x83'\ +b'\x01\x00\x80\x01\x03\x00\xc0\x00\x06\x00\xc0\x00\x06\x00\xc0\x00'\ +b'\x06\x00\xc0\x00\x06\x00\xc0\x01\x07\x00\x80\x83\x03\x00\x00\xff'\ +b'\x01\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x11\x00\x00\x7c\x00\x00\x00\xff\x01\x00\x80\x83\x03\x00'\ +b'\x80\x01\x03\x00\xc0\x01\x06\x00\xc0\x00\x06\x00\xc0\x00\x06\x00'\ +b'\xc0\x00\x06\x00\xc0\x00\x06\x00\x80\x01\x06\x00\x80\x01\x03\x00'\ +b'\xc0\x0f\x03\x00\xc0\x8f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\xfc\x00\x00\x00\xfe'\ +b'\x01\x00\x00\x87\x03\x00\x80\x03\x07\x00\x80\x01\x06\x00\x80\x01'\ +b'\x06\x00\x86\x01\x06\x00\x86\x01\x06\x00\x06\x03\x03\x00\x06\x86'\ +b'\x01\x00\xfe\xff\x07\x00\xfe\xff\x07\x00\x00\x00\x06\x00\x00\x00'\ +b'\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00'\ +b'\x00\xfc\x00\x00\x00\xff\x01\x00\x80\x9b\x03\x00\x80\x19\x07\x00'\ +b'\xc0\x18\x06\x00\xc0\x18\x06\x00\xc0\x18\x06\x00\xc0\x18\x06\x00'\ +b'\xc0\x18\x06\x00\x80\x19\x07\x00\x80\x1b\x03\x00\x00\x1f\x03\x00'\ +b'\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x11\x00\x80\x01\x06\x00\x80\x01\x06\x00\x80\x01'\ +b'\x06\x00\x80\x01\x06\x00\xf8\xff\x07\x00\xfc\xff\x07\x00\x8e\x01'\ +b'\x06\x00\x86\x01\x06\x00\x86\x01\x06\x00\x86\x01\x06\x00\x86\x01'\ +b'\x06\x00\x8e\x01\x06\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x7c\x00\x00'\ +b'\x00\xff\x61\x00\x80\x83\x63\x00\xc0\x01\xc7\x00\xc0\x00\xc6\x00'\ +b'\xc0\x00\xc6\x00\xc0\x00\xc6\x00\xc0\x00\xc6\x00\x80\x01\xc3\x00'\ +b'\x00\x83\x61\x00\xc0\xff\x7f\x00\xc0\xff\x1f\x00\xc0\x00\x00\x00'\ +b'\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x11\x00\x06\x00\x06\x00\x06\x00\x06\x00\xfe\xff\x07\x00\xfe\xff'\ +b'\x07\x00\x00\x07\x06\x00\x80\x01\x06\x00\x80\x01\x00\x00\xc0\x00'\ +b'\x00\x00\xc0\x00\x00\x00\xc0\x00\x06\x00\xc0\x01\x06\x00\x80\xff'\ +b'\x07\x00\x00\xff\x07\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x06\x00\xc0\x00\x06\x00'\ +b'\xc0\x00\x06\x00\xc0\x00\x06\x00\xc0\x00\x06\x00\xcf\xff\x07\x00'\ +b'\xcf\xff\x07\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x06\x00'\ +b'\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00'\ +b'\x20\x00\xc0\x00\x60\x00\xc0\x00\x60\x00\xc0\x00\xc0\x00\xc0\x00'\ +b'\xc0\x00\xc0\x00\xc0\x00\xc0\x00\xc0\x00\xc0\x00\xe0\x00\xcf\xff'\ +b'\x7f\x00\xcf\xff\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x11\x00\x06\x00\x06\x00\x06\x00\x06\x00\xfe\xff\x07\x00'\ +b'\xfe\xff\x07\x00\x00\x70\x06\x00\x00\x38\x06\x00\x00\x18\x00\x00'\ +b'\x00\x3c\x00\x00\xc0\x76\x00\x00\xc0\xe7\x06\x00\xc0\xc3\x07\x00'\ +b'\xc0\x81\x07\x00\xc0\x00\x06\x00\xc0\x00\x06\x00\x00\x00\x06\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x06\x00\x06\x00\x06\x00'\ +b'\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\xfe\xff'\ +b'\x07\x00\xfe\xff\x07\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00'\ +b'\x06\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00'\ +b'\xc0\x00\x06\x00\xc0\x00\x06\x00\xc0\xff\x07\x00\xc0\xff\x07\x00'\ +b'\x80\x03\x06\x00\xc0\x00\x04\x00\xc0\x00\x00\x00\xc0\x00\x00\x00'\ +b'\xc0\xff\x07\x00\x00\xff\x07\x00\x80\x03\x06\x00\xc0\x00\x06\x00'\ +b'\xc0\x00\x00\x00\xc0\xff\x07\x00\x80\xff\x07\x00\x00\x00\x06\x00'\ +b'\x00\x00\x06\x00\x11\x00\xc0\x00\x06\x00\xc0\x00\x06\x00\xc0\xff'\ +b'\x07\x00\xc0\xff\x07\x00\x00\x07\x06\x00\x80\x01\x06\x00\x80\x00'\ +b'\x00\x00\xc0\x00\x00\x00\xc0\x00\x00\x00\xc0\x00\x06\x00\xc0\x01'\ +b'\x06\x00\x80\xff\x07\x00\x00\xff\x07\x00\x00\x00\x06\x00\x00\x00'\ +b'\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x7c\x00\x00'\ +b'\x00\xff\x01\x00\x80\x83\x03\x00\x80\x01\x03\x00\xc0\x00\x06\x00'\ +b'\xc0\x00\x06\x00\xc0\x00\x06\x00\xc0\x00\x06\x00\xc0\x00\x06\x00'\ +b'\x80\x01\x03\x00\x80\x83\x03\x00\x00\xff\x01\x00\x00\x7c\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x11\x00\xc0\x00\xc0\x00\xc0\x00\xc0\x00\xc0\xff\xff\x00\xc0\xff'\ +b'\xff\x00\x00\x83\xc1\x00\x80\x01\xc3\x00\xc0\x00\xc6\x00\xc0\x00'\ +b'\xc6\x00\xc0\x00\x06\x00\xc0\x00\x06\x00\xc0\x01\x07\x00\x80\x83'\ +b'\x03\x00\x00\xff\x01\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x11\x00\x00\x7c\x00\x00\x00\xff\x01\x00'\ +b'\x80\x83\x03\x00\xc0\x01\x07\x00\xc0\x00\x06\x00\xc0\x00\x06\x00'\ +b'\xc0\x00\xc6\x00\xc0\x00\xc6\x00\x80\x01\xc3\x00\x00\x83\xc1\x00'\ +b'\xc0\xff\xff\x00\xc0\xff\xff\x00\xc0\x00\xc0\x00\xc0\x00\xc0\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\xc0\x00'\ +b'\x06\x00\xc0\x00\x06\x00\xc0\xff\x07\x00\xc0\xff\x07\x00\x00\x0e'\ +b'\x06\x00\x00\x03\x06\x00\x80\x01\x06\x00\xc0\x01\x06\x00\xc0\x00'\ +b'\x06\x00\xc0\x00\x00\x00\xc0\x01\x00\x00\x80\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x11\x00\x00\x87\x07\x00\x80\x8f\x07\x00\xc0\x19\x03\x00'\ +b'\xc0\x18\x06\x00\xc0\x18\x06\x00\xc0\x18\x06\x00\xc0\x18\x06\x00'\ +b'\x80\x30\x06\x00\x80\x31\x07\x00\xc0\xf3\x03\x00\xc0\xe3\x01\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x80\x01\x00\x00\x80\x01'\ +b'\x00\x00\x80\x01\x00\x00\x80\x01\x00\x00\xfc\xff\x01\x00\xfc\xff'\ +b'\x03\x00\x80\x01\x07\x00\x80\x01\x06\x00\x80\x01\x06\x00\x80\x01'\ +b'\x06\x00\x80\x01\x06\x00\x80\x01\x03\x00\x00\x00\x03\x00\x00\x00'\ +b'\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00'\ +b'\xc0\x00\x00\x00\xc0\x00\x00\x00\xc0\xff\x01\x00\xc0\xff\x03\x00'\ +b'\x00\x00\x07\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x06\x00'\ +b'\xc0\x00\x02\x00\xc0\x00\x03\x00\xc0\xc0\x01\x00\xc0\xff\x07\x00'\ +b'\xc0\xff\x07\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x11\x00\xc0\x00\x00\x00\xc0\x00\x00\x00\xc0\x03'\ +b'\x00\x00\xc0\x0f\x00\x00\xc0\x7e\x00\x00\xc0\xf0\x01\x00\x80\xc0'\ +b'\x07\x00\x00\x00\x06\x00\x00\x80\x07\x00\xc0\xf0\x03\x00\xc0\x7c'\ +b'\x00\x00\xc0\x1f\x00\x00\xc0\x07\x00\x00\xc0\x00\x00\x00\xc0\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\xc0\x00\x00\x00'\ +b'\xc0\x01\x00\x00\xc0\x1f\x00\x00\xc0\xfe\x01\x00\xc0\xe0\x07\x00'\ +b'\xc0\x80\x07\x00\x00\xf0\x03\x00\x00\x7e\x00\x00\x00\x0e\x00\x00'\ +b'\x00\x7e\x00\x00\x00\xf0\x03\x00\x00\x80\x07\x00\xc0\xe0\x07\x00'\ +b'\xc0\xfc\x01\x00\xc0\x1f\x00\x00\xc0\x03\x00\x00\xc0\x00\x00\x00'\ +b'\x11\x00\x00\x00\x04\x00\xc0\x00\x06\x00\xc0\x00\x07\x00\xc0\x81'\ +b'\x07\x00\xc0\xc3\x07\x00\xc0\xe6\x06\x00\x00\x3c\x00\x00\x00\x18'\ +b'\x00\x00\x00\x3c\x00\x00\xc0\x66\x06\x00\xc0\xc3\x07\x00\xc0\x81'\ +b'\x07\x00\xc0\x00\x07\x00\xc0\x00\x06\x00\x00\x00\x04\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x11\x00\xc0\x00\x00\x00\xc0\x00\xc0\x00'\ +b'\xc0\x03\xc0\x00\xc0\x07\xc0\x00\xc0\x1e\x60\x00\xc0\x78\x70\x00'\ +b'\x80\xe0\x3d\x00\x00\x80\x0f\x00\x00\xc0\x03\x00\xc0\xf0\x00\x00'\ +b'\xc0\x3c\x00\x00\xc0\x0f\x00\x00\xc0\x03\x00\x00\xc0\x00\x00\x00'\ +b'\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\xc0\x03'\ +b'\x06\x00\xc0\x03\x07\x00\xc0\x80\x07\x00\xc0\xe0\x07\x00\xc0\xf0'\ +b'\x06\x00\xc0\x78\x06\x00\xc0\x3c\x06\x00\xc0\x0e\x06\x00\xc0\x07'\ +b'\x06\x00\xc0\x03\x06\x00\xc0\xc1\x07\x00\xc0\xc0\x07\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x11\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18\x00\x00'\ +b'\x00\x3c\x00\x00\xf8\xff\x3f\x00\xfc\xc7\x7f\x00\x0e\x00\xe0\x00'\ +b'\x06\x00\xc0\x00\x06\x00\xc0\x00\x06\x00\xc0\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\xfe\xff\xff\x00\xfe\xff'\ +b'\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00'\ +b'\x06\x00\xc0\x00\x06\x00\xc0\x00\x06\x00\xc0\x00\x0e\x00\xe0\x00'\ +b'\xfc\xe7\x7f\x00\xf8\xff\x3f\x00\x00\x3c\x00\x00\x00\x18\x00\x00'\ +b'\x00\x18\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x11\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x0c'\ +b'\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x18'\ +b'\x00\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18\x00\x00\x00\x18'\ +b'\x00\x00\x00\x0c\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00'\ +b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + +_index =\ +b'\x00\x00\x46\x00\x8c\x00\xd2\x00\x18\x01\x5e\x01\xa4\x01\xea\x01'\ +b'\x30\x02\x76\x02\xbc\x02\x02\x03\x48\x03\x8e\x03\xd4\x03\x1a\x04'\ +b'\x60\x04\xa6\x04\xec\x04\x32\x05\x78\x05\xbe\x05\x04\x06\x4a\x06'\ +b'\x90\x06\xd6\x06\x1c\x07\x62\x07\xa8\x07\xee\x07\x34\x08\x7a\x08'\ +b'\xc0\x08\x06\x09\x4c\x09\x92\x09\xd8\x09\x1e\x0a\x64\x0a\xaa\x0a'\ +b'\xf0\x0a\x36\x0b\x7c\x0b\xc2\x0b\x08\x0c\x4e\x0c\x94\x0c\xda\x0c'\ +b'\x20\x0d\x66\x0d\xac\x0d\xf2\x0d\x38\x0e\x7e\x0e\xc4\x0e\x0a\x0f'\ +b'\x50\x0f\x96\x0f\xdc\x0f\x22\x10\x68\x10\xae\x10\xf4\x10\x3a\x11'\ +b'\x80\x11\xc6\x11\x0c\x12\x52\x12\x98\x12\xde\x12\x24\x13\x6a\x13'\ +b'\xb0\x13\xf6\x13\x3c\x14\x82\x14\xc8\x14\x0e\x15\x54\x15\x9a\x15'\ +b'\xe0\x15\x26\x16\x6c\x16\xb2\x16\xf8\x16\x3e\x17\x84\x17\xca\x17'\ +b'\x10\x18\x56\x18\x9c\x18\xe2\x18\x28\x19\x6e\x19\xb4\x19\xfa\x19'\ + + + +def _chr_addr(ordch): + offset = 2 * (ordch - 32) + return int.from_bytes(_index[offset:offset + 2], 'little') + +def get_ch(ch): + ordch = ord(ch) + ordch = ordch if ordch >= 32 and ordch <= 126 else ord('?') + offset = _chr_addr(ordch) + width = int.from_bytes(_font[offset:offset + 2], 'little') + next_offs = _chr_addr(ordch +1) + return memoryview(_font[offset + 2:next_offs]), 25, width +