├── log.txt ├── anims ├── exp.gif └── fire │ ├── fire1.gif │ ├── fire1.png │ ├── fire10.gif │ ├── fire10.png │ ├── fire11.gif │ ├── fire11.png │ ├── fire12.gif │ ├── fire12.png │ ├── fire2.gif │ ├── fire2.png │ ├── fire3.gif │ ├── fire3.png │ ├── fire4.gif │ ├── fire4.png │ ├── fire5.gif │ ├── fire5.png │ ├── fire6.gif │ ├── fire6.png │ ├── fire7.gif │ ├── fire7.png │ ├── fire8.gif │ ├── fire8.png │ ├── fire9.gif │ └── fire9.png ├── images ├── 1hp.png ├── angry.bmp ├── color.png ├── elmo.png ├── skull.png ├── batman.png ├── donald.png ├── mascotte.png ├── exclamation.bmp └── ghostbuster.png ├── sound └── son1.wav ├── fonts ├── slkscr.pbm ├── slkscr.pil ├── slkscr.ttf ├── default.bmp ├── tallround.bmp ├── tallround.ttf ├── 11x7 Matrix.bmp ├── 11x7 Matrix.ttf ├── Electronic scale.bmp ├── Electronic scale.ttf ├── 5 9x9 Strict Sans.ttf ├── Translux Slim 11x96.ttf ├── LED SCREEN GTAMBLOG CAPS+ 2.0.ttf └── slkscr.bdf ├── .gitattributes ├── timebox.sh ├── README.md ├── timeboximage.py ├── messages.py ├── divoom_image.py └── timebox.py /log.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /anims/exp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/exp.gif -------------------------------------------------------------------------------- /images/1hp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/images/1hp.png -------------------------------------------------------------------------------- /sound/son1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/sound/son1.wav -------------------------------------------------------------------------------- /fonts/slkscr.pbm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/fonts/slkscr.pbm -------------------------------------------------------------------------------- /fonts/slkscr.pil: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/fonts/slkscr.pil -------------------------------------------------------------------------------- /fonts/slkscr.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/fonts/slkscr.ttf -------------------------------------------------------------------------------- /images/angry.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/images/angry.bmp -------------------------------------------------------------------------------- /images/color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/images/color.png -------------------------------------------------------------------------------- /images/elmo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/images/elmo.png -------------------------------------------------------------------------------- /images/skull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/images/skull.png -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /fonts/default.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/fonts/default.bmp -------------------------------------------------------------------------------- /fonts/tallround.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/fonts/tallround.bmp -------------------------------------------------------------------------------- /fonts/tallround.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/fonts/tallround.ttf -------------------------------------------------------------------------------- /images/batman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/images/batman.png -------------------------------------------------------------------------------- /images/donald.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/images/donald.png -------------------------------------------------------------------------------- /images/mascotte.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/images/mascotte.png -------------------------------------------------------------------------------- /anims/fire/fire1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire1.gif -------------------------------------------------------------------------------- /anims/fire/fire1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire1.png -------------------------------------------------------------------------------- /anims/fire/fire10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire10.gif -------------------------------------------------------------------------------- /anims/fire/fire10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire10.png -------------------------------------------------------------------------------- /anims/fire/fire11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire11.gif -------------------------------------------------------------------------------- /anims/fire/fire11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire11.png -------------------------------------------------------------------------------- /anims/fire/fire12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire12.gif -------------------------------------------------------------------------------- /anims/fire/fire12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire12.png -------------------------------------------------------------------------------- /anims/fire/fire2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire2.gif -------------------------------------------------------------------------------- /anims/fire/fire2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire2.png -------------------------------------------------------------------------------- /anims/fire/fire3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire3.gif -------------------------------------------------------------------------------- /anims/fire/fire3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire3.png -------------------------------------------------------------------------------- /anims/fire/fire4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire4.gif -------------------------------------------------------------------------------- /anims/fire/fire4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire4.png -------------------------------------------------------------------------------- /anims/fire/fire5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire5.gif -------------------------------------------------------------------------------- /anims/fire/fire5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire5.png -------------------------------------------------------------------------------- /anims/fire/fire6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire6.gif -------------------------------------------------------------------------------- /anims/fire/fire6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire6.png -------------------------------------------------------------------------------- /anims/fire/fire7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire7.gif -------------------------------------------------------------------------------- /anims/fire/fire7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire7.png -------------------------------------------------------------------------------- /anims/fire/fire8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire8.gif -------------------------------------------------------------------------------- /anims/fire/fire8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire8.png -------------------------------------------------------------------------------- /anims/fire/fire9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire9.gif -------------------------------------------------------------------------------- /anims/fire/fire9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/anims/fire/fire9.png -------------------------------------------------------------------------------- /fonts/11x7 Matrix.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/fonts/11x7 Matrix.bmp -------------------------------------------------------------------------------- /fonts/11x7 Matrix.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/fonts/11x7 Matrix.ttf -------------------------------------------------------------------------------- /images/exclamation.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/images/exclamation.bmp -------------------------------------------------------------------------------- /images/ghostbuster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/images/ghostbuster.png -------------------------------------------------------------------------------- /fonts/Electronic scale.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/fonts/Electronic scale.bmp -------------------------------------------------------------------------------- /fonts/Electronic scale.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/fonts/Electronic scale.ttf -------------------------------------------------------------------------------- /fonts/5 9x9 Strict Sans.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/fonts/5 9x9 Strict Sans.ttf -------------------------------------------------------------------------------- /fonts/Translux Slim 11x96.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/fonts/Translux Slim 11x96.ttf -------------------------------------------------------------------------------- /fonts/LED SCREEN GTAMBLOG CAPS+ 2.0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Smanar/timebox/HEAD/fonts/LED SCREEN GTAMBLOG CAPS+ 2.0.ttf -------------------------------------------------------------------------------- /timebox.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #To debug 4 | #echo "LOG : Params > $*" >> //home//pi//timebox//log.txt 5 | #python2 /home/pi/timebox/timebox.py "$@" &>> //home//pi//timebox//log.txt 6 | 7 | python2 /home/pi/timebox/timebox.py "$@" > /dev/null 2>&1 & 8 | 9 | exit 0 10 | 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # timebox 2 | With this code you can control timebox from divoom (sound + image) and use it as matrix display, for exemple for notification in home automation system. 3 | Most of this code is not from me, for real authors take a look on https://github.com/derHeinz/divoom-adapter or https://github.com/jbfuzier/timeboxmini . 4 | 5 | On Domoticz use the wrapper "timebox.sh", you can enable log with it too. 6 | 7 | Somes exemples 8 | 9 | - python timebox.py time --sound="son1.wav" 10 | - python timebox.py text --c 255,0,0 "hello world" 11 | - python timebox.py temperature --c 0,255,0 12 | - python timebox.py image mascotte.png 13 | 14 | # Requirement 15 | sudo apt-get install bluealsa 16 | pip install Pillow 17 | pip install pybluez 18 | 19 | sudo apt-get install libboost-python-dev libboost-thread-dev libbluetooth-dev libglib2.0-dev 20 | sudo apt-get install mpg123 (If you want to use mpg123 for mp3 ou stream). 21 | -------------------------------------------------------------------------------- /timeboximage.py: -------------------------------------------------------------------------------- 1 | """Module defines the TimeBoxImage class. """ 2 | 3 | 4 | class TimeBoxImage: 5 | """ An image to be display on the TimeBox """ 6 | width = 11 7 | height = 11 8 | image = 0 9 | 10 | gamma_value = None 11 | gamma_table = None 12 | 13 | def __init__(self, height=11, width=11): 14 | self.height = height 15 | self.width = width 16 | self.image = \ 17 | [[[0 for c in range(3)] for x in range(self.width)] for y in range(self.height)] 18 | 19 | def _gamma_correction(self, k): 20 | """ Determine the pixel value for pixel with brightness k, 0<=k<256, considering gamma.""" 21 | 22 | return int(256.0*pow((k/256.0), 1.0 / self.gamma_value)) >> 4 23 | 24 | def set_gamma(self, new_gamma): 25 | """ Change the gamma value. Reocomputa the table.""" 26 | if self.gamma_value != new_gamma: 27 | self.gamma_value = new_gamma 28 | self.gamma_table = dict() 29 | for k in range(256): 30 | self.gamma_table[k] = self._gamma_correction(k) 31 | 32 | def get_pixel_data(self, xix, yix, cix): 33 | """ return value of pixel (xix, yix) nd color c (0..2) """ 34 | return self.image[yix][xix][cix] 35 | 36 | def put_pixel(self, xix, yix, rval, gval, bval): 37 | """Set a pixel in the image.""" 38 | self.image[yix][xix][0] = rval 39 | self.image[yix][xix][1] = gval 40 | self.image[yix][xix][2] = bval 41 | 42 | def put_pixel_gamma(self, xix, yix, rval, gval, bval): 43 | """Set a pixel in the image, applying gamma correction. 44 | Values between 0 and 255.""" 45 | self.image[yix][xix][0] = self.gamma_table[rval] 46 | self.image[yix][xix][1] = self.gamma_table[gval] 47 | self.image[yix][xix][2] = self.gamma_table[bval] 48 | -------------------------------------------------------------------------------- /messages.py: -------------------------------------------------------------------------------- 1 | """ Provides Message class to construct messages for the TimeBox """ 2 | 3 | class TimeBoxMessages: 4 | """Support the formation of messages to communicatie with the TimeBox.""" 5 | 6 | def checksum(self, payload): 7 | """Compute the payload checksum. Returned as list with LSM, MSB""" 8 | csum = sum(payload) 9 | lsb = csum & 0b11111111 10 | msb = csum >> 8 11 | return [lsb, msb] 12 | 13 | def escape_payload(self, payload): 14 | """Escape the payload. It is not allowed to have occurrences of the codes 15 | 0x01, 0x02 and 0x03. They mut be escaped by a leading 0x03 followed by 0x04, 16 | 0x05 or 0x06 respectively""" 17 | escpayload = [] 18 | for payload_data in payload: 19 | escpayload += \ 20 | [0x03, payload_data + 0x03] if payload_data in range(0x01, 0x04) else [payload_data] 21 | return escpayload 22 | 23 | def unescape(self, data): 24 | """unescape the data. """ 25 | unesc = [] 26 | _unescape_next = False 27 | for _item in data: 28 | if _unescape_next: 29 | if _item < 0x04 or _item > 6: 30 | raise Exception('Error in escaped sequence.') 31 | unesc.append(_item - 0x03) 32 | _unescape_next = False 33 | else: 34 | if _item == 0x03: 35 | _unescape_next = True 36 | else: 37 | unesc.append(_item) 38 | return unesc 39 | 40 | def decode(self, msg): 41 | """remove leading 1, trailing 2 and checksum and un-escape. Return 'error' if 42 | msg is not a correctmessage """ 43 | if len(msg) < 4: 44 | raise Exception('error: too short') 45 | if msg[0] != 0x01 or msg[-1] != 0x02: 46 | raise Exception('error: no delimiters') 47 | unesc = self.unescape(msg[1:-1]) 48 | csum = self.checksum(unesc[0:-2]) 49 | if csum != unesc[-2:]: 50 | raise Exception('error: wrong checksum') 51 | return unesc[:-2] 52 | 53 | def _extend_with_checksum(self, payload): 54 | """Extend the payload with two byte with its checksum.""" 55 | return payload + self.checksum(payload) 56 | 57 | def make_message(self, payload): 58 | """Make a complete message from the paload data. Add leading 0x01 and 59 | trailing check sum and 0x02 and escape the payload""" 60 | cs_payload = self._extend_with_checksum(payload) 61 | escaped_payload = self.escape_payload(cs_payload) 62 | return [0x01] + escaped_payload + [0x02] 63 | 64 | @classmethod 65 | def static_image_payload(cls, imag): 66 | """Create the message payload for the image.""" 67 | resmsg = [0] * (((imag.height * imag.width * 3 + 1) >> 1) + 7) 68 | resmsg[0:7] = [0xbd, 0x00, 0x44, 0x00, 0x0a, 0x0a, 0x04] 69 | 70 | # nibble index to write next pixel value 71 | nix = 14 72 | for yix in range(imag.height): 73 | for xix in range(imag.width): 74 | for cix in range(3): 75 | pdat = imag.get_pixel_data(xix, yix, cix) 76 | if nix&1 != 0: 77 | pdat = pdat << 4 78 | resmsg[nix>>1] |= pdat 79 | nix = nix + 1 80 | return resmsg 81 | 82 | @classmethod 83 | def dynamic_image_payload(cls, imag, frame_num, frame_delay): 84 | """Create the message payload for the image in an animation.""" 85 | resmsg = [0] * 191 86 | resmsg[0:9] = [0xbf, 0x00, 0x49, 0x00, 0x0a, 0x0a, 0x04, frame_num, frame_delay] 87 | 88 | # nibble index to write next pixel value 89 | nix = 18 90 | for yix in range(imag.width): 91 | for xix in range(imag.height): 92 | for cix in range(3): 93 | pdat = imag.get_pixel_data(xix, yix, cix) 94 | if nix&1 != 0: 95 | pdat = pdat << 4 96 | resmsg[nix>>1] |= pdat 97 | nix = nix + 1 98 | return resmsg 99 | 100 | def command_message(self, command, arguments=None): 101 | """Make a message from a command number and optional arguments""" 102 | payload = [command] 103 | if not arguments is None: 104 | payload += arguments 105 | return self.make_message(payload) 106 | 107 | def static_image_message(self, image): 108 | """Creates a static image message from a TimeBoxImage.""" 109 | return self.make_message(self.static_image_payload(image)) 110 | 111 | def dynamic_image_message(self, image, frame_num, frame_delay): 112 | """Creates a static image message from a TimeBoxImage.""" 113 | return self.make_message(self.dynamic_image_payload(image, frame_num, frame_delay)) 114 | -------------------------------------------------------------------------------- /divoom_image.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: latin-1 -*- 3 | from PIL import Image 4 | from PIL import ImageDraw 5 | from PIL import ImageFont 6 | import math 7 | import os 8 | import sys 9 | from timeboximage import TimeBoxImage 10 | 11 | """ 12 | Color are encoded in 12 bits, 4bits for each color. 13 | That is not standard for bmp, so when loading an image it is converted to 14 | 24 bits bitmap (8/color), then the 4 LSB bits for each colors are dropped. 15 | """ 16 | 17 | # bmp 16bit palette to divoom palett ... 18 | # bmp pallett 19 | BMP_BLACK = 0 20 | BMP_DARK_RED = 1 21 | BMP_DARK_GREEN = 2 22 | BMP_YELLOW_OCHRE = 3 23 | BMP_GREEN = 6 24 | BMP_PINK = 7 25 | BMP_LIGHT_PINK = 8 26 | BMP_RED = 9 27 | BMP_ANOTHER_GREEN = 10 28 | BMP_YELLOW = 11 29 | BMP_BLUE = 12 30 | BMP_LIGHT_BLUE = 14 31 | BMP_WHITE = 15 32 | 33 | # way: 34 | # 1 horizontal from left to right 35 | # 2 vertical from upper to lower 36 | # 3 horizontal from right to left 37 | # 4 vertical from lower to upper 38 | def _slices(image, way=1, slice_size=11): 39 | '''Create 10x10 images from a bigger image e.g. 10x40.''' 40 | width, height = image.size 41 | # calculate slice size: 42 | slices = 1 43 | if (way == 1) or (way == 3): 44 | slices = width - slice_size 45 | elif (way == 2) or (way == 4): 46 | slices = height - slice_size 47 | 48 | result_images = [] 49 | 50 | if (way == 1): 51 | for slice in range(slices): 52 | new_box = (slice, 0, slice+slice_size, height) 53 | new_img = image.crop(new_box) 54 | result_images.append(new_img) 55 | elif (way == 2): 56 | for slice in range(slices): 57 | new_box = (0, slice, width, slice+slice_size) 58 | new_img = image.crop(new_box) 59 | result_images.append(new_img) 60 | elif (way == 3): 61 | for slice in range(slices,-1,-1): 62 | new_box = (slice, 0, slice+slice_size, height) 63 | new_img = image.crop(new_box) 64 | result_images.append(new_img) 65 | elif (way == 4): 66 | for slice in range(slices,-1,-1): 67 | new_box = (0, slice, width, slice+slice_size) 68 | new_img = image.crop(new_box) 69 | result_images.append(new_img) 70 | 71 | return result_images 72 | 73 | # ways 74 | # 1 horizontal from left to right 75 | # 2 vertical from upper to lower 76 | # 3 horizontal from right to left 77 | # 4 vertical from lower to upper 78 | def scroll_between(old_img, new_img, way=1): 79 | '''Does a scroll between the old and the new image and returns all images in between.''' 80 | img = None 81 | if (way == 1): 82 | img = concatenate(old_img, new_img, 1) 83 | elif (way == 2): 84 | img = concatenate(old_img, new_img, 2) 85 | elif (way == 3): 86 | img = concatenate(new_img, old_img, 1) 87 | elif (way == 4): 88 | img = concatenate(new_img, old_img, 2) 89 | sliced_images = _slices(img, way) 90 | sliced_images.append(new_img) 91 | return sliced_images 92 | 93 | def concatenate(image1, image2, way=1): 94 | '''Concatenates the sencond image to the first''' 95 | if (way == 1): 96 | width = image1.width + image2.width 97 | height = max(image1.height, image2.height) 98 | result_img = create_default_image((width, 11)) 99 | result_img.paste(image1, (0, 0)) 100 | result_img.paste(image2, (image1.width, 0)) 101 | if (way == 2): 102 | result_img = create_default_image((11, 22)) 103 | result_img.paste(image1, (0, 0)) 104 | result_img.paste(image2, (0, 11)) 105 | return result_img 106 | 107 | 108 | 109 | def horizontal_slices(image, slice_size=11): 110 | '''Create 10x10 images from a bigger image e.g. 10x40.''' 111 | return _slices(image=image, way=1, slice_size=slice_size) 112 | 113 | def image_horizontal_slices(image_path, slice_size=11): 114 | '''Create 10x10 images from a bigger image given as path.''' 115 | img = Image.open(image_path) 116 | return horizontal_slices(img, slice_size) 117 | 118 | def create_default_image(size=(11,11)): 119 | '''Create an image with the correct palette''' 120 | # make use of the black image to copy the palette over 121 | # proto = Image.open(os.path.join(os.path.dirname(__file__), "images/black.bmp")) 122 | # im = Image.new("P", size) 123 | # im.putpalette(proto.palette.getdata()[1]) 124 | im = Image.new("RGB", size) 125 | return im 126 | 127 | def draw_text_to_image(text, color="red", size=(0,11), empty_start=True, empty_end=True, font = None): 128 | '''Draws the string in given color to an image and returns this iamge''' 129 | #fn = ImageFont.load(os.path.join(os.path.dirname(__file__),'fonts/slkscr.pil')) 130 | #fn = ImageFont.truetype(os.path.join(os.path.dirname(__file__),'fonts/11x7 Matrix.ttf'),13) 131 | #fn = ImageFont.truetype(os.path.join(os.path.dirname(__file__),'fonts/tallround.ttf'),13) 132 | if not font: 133 | fn = ImageFont.truetype(os.path.join(os.path.dirname(__file__),'fonts/Electronic scale.ttf'),11) 134 | else: 135 | fn = font 136 | draw_txt = ImageDraw.Draw(create_default_image()) 137 | width, height = draw_txt.textsize(text, font=fn) 138 | del draw_txt 139 | if empty_start: 140 | width += size[1] 141 | if empty_end: 142 | width += size[1] 143 | im = create_default_image((width, size[1])) 144 | draw = ImageDraw.Draw(im) 145 | 146 | if empty_start: 147 | offset_x = size[1] 148 | else: 149 | offset_x = 0 150 | 151 | offset_y = (11 - height) / 2 152 | 153 | draw.text((offset_x,offset_y), text, font=fn, fill=color) 154 | del draw 155 | return im 156 | 157 | def draw_multiple_to_image(texts, font=None): 158 | img_result = create_default_image((0,0)) 159 | empty_start = True 160 | for txt, color in texts: 161 | im = draw_text_to_image(txt, color, empty_start=empty_start, empty_end=False, font=font) 162 | empty_start = False 163 | img_result = concatenate(img_result, im) 164 | img_result = concatenate(img_result, create_default_image((11,11))) 165 | return img_result 166 | 167 | 168 | def build_img(img, size=(11,11)): 169 | tb_img = TimeBoxImage() 170 | rgb_im = img.convert('RGB') 171 | rgb_im = rgb_im.resize((size[0], size[1])) 172 | for x in range(rgb_im.width): 173 | for y in range(rgb_im.height): 174 | r,g,b=rgb_im.getpixel((x,y)) 175 | tb_img.put_pixel(x,y,r>>4,g>>4,b>>4) 176 | return tb_img 177 | 178 | 179 | def load_image(file, sz=(11,11)): 180 | with Image.open(file).convert("RGBA") as imagedata: 181 | return build_img(imagedata,sz) 182 | 183 | def analyseImage(im): 184 | ''' 185 | Pre-process pass over the image to determine the mode (full or additive). 186 | Necessary as assessing single frames isn't reliable. Need to know the mode 187 | before processing all frames. 188 | ''' 189 | results = { 190 | 'size': im.size, 191 | 'mode': 'full', 192 | } 193 | try: 194 | while True: 195 | if im.tile: 196 | tile = im.tile[0] 197 | update_region = tile[1] 198 | update_region_dimensions = update_region[2:] 199 | if update_region_dimensions != im.size: 200 | results['mode'] = 'partial' 201 | break 202 | im.seek(im.tell() + 1) 203 | except EOFError: 204 | pass 205 | im.seek(0) 206 | return results 207 | 208 | def getFrames(im): 209 | ''' 210 | Iterate the GIF, extracting each frame. 211 | ''' 212 | mode = analyseImage(im)['mode'] 213 | 214 | p = im.getpalette() 215 | last_frame = im.convert('RGBA') 216 | 217 | try: 218 | while True: 219 | ''' 220 | If the GIF uses local colour tables, each frame will have its own palette. 221 | If not, we need to apply the global palette to the new frame. 222 | ''' 223 | if not im.getpalette(): 224 | im.putpalette(p) 225 | 226 | new_frame = Image.new('RGBA', im.size) 227 | 228 | ''' 229 | Is this file a "partial"-mode GIF where frames update a region of a different size to the entire image? 230 | If so, we need to construct the new frame by pasting it on top of the preceding frames. 231 | ''' 232 | if mode == 'partial': 233 | new_frame.paste(last_frame) 234 | 235 | new_frame.paste(im, (0,0), im.convert('RGBA')) 236 | yield new_frame 237 | 238 | last_frame = new_frame 239 | im.seek(im.tell() + 1) 240 | except EOFError: 241 | pass 242 | 243 | 244 | def load_gif_frames(file,sz=(11,11)): 245 | data = [] 246 | with Image.open(file) as imagedata: 247 | for f in getFrames(imagedata): 248 | data.append(build_img(f,sz)) 249 | return data 250 | 251 | if __name__ == "__main__": 252 | pass 253 | -------------------------------------------------------------------------------- /timebox.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # coding: utf-8 -*- 3 | """Provides class TimeBox that encapsulates the TimeBox communication.""" 4 | 5 | import os 6 | import sys, getopt 7 | 8 | #Use this line, if you have problem with importerror 9 | sys.path.insert(0,'/home/pi/.local/lib/python2.7/site-packages/') 10 | 11 | import select 12 | from bluetooth import BluetoothSocket, RFCOMM, discover_devices 13 | from messages import TimeBoxMessages 14 | import divoom_image 15 | import datetime 16 | from divoom_image import build_img, draw_multiple_to_image, horizontal_slices 17 | import time 18 | 19 | 20 | # Some help here to configure bluetooth 21 | # https://robotzero.one/pi-zero-w-bluetooth-voice/ 22 | 23 | # commands exemple 24 | # python timebox.py time --sound="son1.wav" 25 | # python timebox.py text --c 255,0,0 "hello world" 26 | # python timebox.py temperature --c 0,255,0 27 | # python timebox.py image mascotte.png 28 | 29 | # Config 30 | MAC_TIMEBOX = "11:75:58:E4:71:30" 31 | 32 | 33 | def discover(): 34 | 35 | TimeBoxList = {} 36 | print('scanning for timebox') 37 | discovered = discover_devices(duration=5, lookup_names=True) 38 | 39 | if (not len(discovered)): 40 | print("no devices discovered") 41 | return 42 | else: 43 | for a, n in discovered: 44 | if (n and 'timebox' in n.lower()): 45 | print('checking device %s' % a) 46 | 47 | try: 48 | sock = BluetoothSocket(bluetooth.RFCOMM) 49 | sock.connect((a, 4)) 50 | hello = [ord(c) for c in sock.recv(256)] 51 | 52 | if(hello == TIMEBOX_HELLO): 53 | TimeBoxList['address'] = a 54 | TimeBoxList['sock'] = sock 55 | break 56 | else: 57 | print('invalid hello received') 58 | 59 | sock.close() 60 | except: 61 | pass 62 | 63 | if (not 'address' in TimeBoxList): 64 | print('could not find a timebox ...') 65 | return 66 | else: 67 | print ("Found device : " + TimeBoxList['address'] ) 68 | return 69 | 70 | def checkcolor(c): 71 | if ',' in c: 72 | c2 = c.split(',') 73 | else: 74 | c2 = c.split(' ') 75 | if len(c2) < 3: 76 | return (255,0,0) 77 | else: 78 | return (int(c2[0]),int(c2[1]),int(c2[2])) 79 | 80 | class TimeBox: 81 | """Class TimeBox encapsulates the TimeBox communication.""" 82 | 83 | DEFAULTHOST = '11:75:58:E4:71:30' 84 | 85 | COMMANDS = { 86 | "switch radio": 0x05, 87 | "set volume": 0x08, 88 | "get volume": 0x09, 89 | "set mute": 0x0a, 90 | "get mute": 0x0b, 91 | "set date time": 0x18, 92 | "set image": 0x44, 93 | "set view": 0x45, 94 | "set animation frame": 0x49, 95 | "get temperature": 0x59, 96 | "get radio frequency": 0x60, 97 | "set radio frequency": 0x61 98 | } 99 | 100 | host = None 101 | 102 | socket = None 103 | messages = None 104 | message_buf = [] 105 | 106 | def __init__(self): 107 | self.messages = TimeBoxMessages() 108 | 109 | # mpg123 -a bluealsa:HCI=hci0,DEV=11:75:58:E4:71:30,PROFILE=a2dp http://8.38.78.173:8119/idaradio 110 | # aplay -D bluealsa:HCI=hci0,DEV=11:75:58:E4:71:30,PROFILE=a2dp /home/pi/timebox/sound/son1.wav 111 | def playsound(self,_file): 112 | print('ok') 113 | p = os.path.join(os.path.dirname(__file__),"sound/" + _file) 114 | if _file.endswith('.wav'): 115 | command = "aplay -D bluealsa:HCI=hci0,DEV=" + self.host + ",PROFILE=a2dp " + p 116 | elif '/' in _file: 117 | command = "mpg123 -a bluealsa:HCI=hci0,DEV=" + self.host +",PROFILE=a2dp " + 'http://' + _file + ' &' 118 | else: 119 | command = "mpg123 -a bluealsa:HCI=hci0,DEV=" + self.host +",PROFILE=a2dp " + p 120 | #print(command) 121 | os.system(command) 122 | 123 | def show_text(self, txt, speed=20, font=None): 124 | """ 125 | Display text & scroll, call is blocking 126 | """ 127 | if (type(txt) is not list) or (len(txt)==0) or (type(txt[0]) is not tuple): 128 | raise Exception("a list of tuple is expected") 129 | im = draw_multiple_to_image(txt, font) 130 | slices = horizontal_slices(im) 131 | for i, s in enumerate(slices): 132 | #s.save("./debug/%s.bmp"%i) 133 | self.set_static_image(build_img(s)) 134 | time.sleep(1.0/speed) 135 | 136 | def show_text2(self, txt, font=None): 137 | """ 138 | Use dynamic_image_message to display scolling text 139 | Cannot go faster than 1fps 140 | """ 141 | if (type(txt) is not list) or (len(txt)==0) or (type(txt[0]) is not tuple): 142 | raise Exception("a list of tuple is expected") 143 | imgs = [] 144 | im = divoom_image.draw_multiple_to_image(txt, font) 145 | slices = horizontal_slices(im) 146 | for i, s in enumerate(slices): 147 | # s.save("./debug/%s.bmp"%i) 148 | imgs.append(build_img(s)) 149 | #print len(imgs) 150 | self.set_dynamic_images(imgs) 151 | 152 | def show_static_image(self, path): 153 | self.set_static_image(divoom_image.load_image(path)) 154 | 155 | def show_animated_image(self, path): 156 | self.set_dynamic_images(divoom_image.load_gif_frames(path)) 157 | 158 | def connect(self, host=None, port=4): 159 | """Open a connection to the TimeBox.""" 160 | # Create the client socket 161 | if host is None: 162 | host = self.DEFAULTHOST 163 | print("connecting to %s at %s" % (host, port)) 164 | 165 | if(isinstance(host, BluetoothSocket)): 166 | self.socket = host 167 | #self.addr, _ = self.socket.getpeername() 168 | else: 169 | self.socket = BluetoothSocket(RFCOMM) 170 | self.socket.connect((host, port)) 171 | self.socket.setblocking(0) 172 | 173 | self.host = host 174 | 175 | def close(self): 176 | """Closes the connection to the TimeBox.""" 177 | self.socket.close() 178 | 179 | def receive(self, num_bytes=1024): 180 | """Receive n bytes of data from the TimeBox and put it in the input buffer.""" 181 | ready = select.select([self.socket], [], [], 0.1) 182 | if ready[0]: 183 | self.message_buf += self.socket.recv(num_bytes) 184 | 185 | def send_raw(self, data): 186 | """Send raw data to the TimeBox.""" 187 | return self.socket.send(data) 188 | 189 | def send_payload(self, payload): 190 | """Send raw payload to the TimeBox. (Will be escaped, checksumed and 191 | messaged between 0x01 and 0x02.""" 192 | msg = self.messages.make_message(payload) 193 | return self.socket.send(str(bytearray(msg))) 194 | 195 | def set_time(self, time=None): 196 | if not time: 197 | time=datetime.datetime.now() 198 | args = [] 199 | args.append(int(str(time.year)[2:])) 200 | args.append(int(str(time.year)[0:2])) 201 | args.append(int(time.month)) 202 | args.append(int(time.day)) 203 | args.append(int(time.hour)) 204 | args.append(int(time.minute)) 205 | args.append(int(time.second)) 206 | args.append(0) 207 | self.send_command("set date time", args) 208 | 209 | def send_command(self, command, args=None): 210 | """Send command with optional arguments""" 211 | if args is None: 212 | args = [] 213 | if isinstance(command, str): 214 | command = self.COMMANDS[command] 215 | length = len(args)+3 216 | length_lsb = length & 0xff 217 | length_msb = length >> 8 218 | payload = [length_lsb, length_msb, command] + args 219 | self.send_payload(payload) 220 | 221 | def decode(self, msg): 222 | """remove leading 1, trailing 2 and checksum and un-escape""" 223 | return self.messages.decode(msg) 224 | 225 | def has_message(self): 226 | """Check if there is a complete message *or leading garbage data* in the input buffer.""" 227 | if len(self.message_buf) == 0: 228 | return False 229 | if self.message_buf[0] != 0x01: 230 | return True 231 | endmarks = [x for x in self.message_buf if x == 0x02] 232 | return len(endmarks) > 0 233 | 234 | def buffer_starts_with_garbage(self): 235 | """Check if the input buffer starts with data other than a message.""" 236 | if len(self.message_buf) == 0: 237 | return False 238 | return self.message_buf[0] != 0x01 239 | 240 | def remove_garbage(self): 241 | """Remove data from the input buffer that is nof the start of a message.""" 242 | if not 0x01 in self.message_buf: 243 | pos = len(self.message_buf) 244 | else: 245 | pos = self.message_buf.index(0x01) 246 | res = self.message_buf[0:pos] 247 | self.message_buf = self.message_buf[pos:len(self.message_buf)] 248 | return res 249 | 250 | def remove_message(self): 251 | """Remove a message from the input buffer and return it. Assumes it has been checked that 252 | there is a complete message without leading garbage data""" 253 | if not 0x02 in self.message_buf: 254 | raise Exception('There is no message') 255 | pos = self.message_buf.index(0x02)+1 256 | res = self.message_buf[0:pos] 257 | self.message_buf = self.message_buf[pos:len(self.message_buf)] 258 | return res 259 | 260 | def set_static_image(self, image): 261 | """Set the image on the TimeBox""" 262 | msg = self.messages.static_image_message(image) 263 | self.socket.send(str(bytearray((msg)))) 264 | 265 | def set_dynamic_images(self, images, frame_delay=1): 266 | """Set the image on the TimeBox""" 267 | fnum = 0 268 | for img in images: 269 | msg = self.messages.dynamic_image_message(img, fnum, frame_delay) 270 | fnum = fnum + 1 271 | self.socket.send(str(bytearray((msg)))) 272 | 273 | def show_temperature(self, color=None): 274 | """Show temperature on the TimeBox in Celsius""" 275 | args = [0x01, 0x00] 276 | if color: 277 | args += list(color) 278 | self.send_command("set view", args) 279 | 280 | def show_clock(self, color=None): 281 | """Show clock on the TimeBox in the color""" 282 | args = [0x00, 0x01] 283 | if color: 284 | args += list(color) 285 | self.send_command("set view", args) 286 | 287 | def Set_Off(self): 288 | """Set off the timebox""" 289 | args = [0x02, 0x00] 290 | self.send_command("set view", args) 291 | 292 | def Show_counter(self): 293 | """Show counter""" 294 | # 00 : off, 01 : start counter 295 | args = [0x06, 0x01] 296 | self.send_command("set view", args) 297 | 298 | if len(sys.argv) > 1: 299 | 300 | try: 301 | t = TimeBox() 302 | t.connect(MAC_TIMEBOX) 303 | 304 | except: 305 | print("Can't connect to Timebox") 306 | sys.exit(2) 307 | 308 | try: 309 | options, args = getopt.getopt(sys.argv[2:], "x",["c=", "text=","speed=","font=","size=","sound="]) 310 | except getopt.GetoptError as err: 311 | print (str(err)) 312 | sys.exit(2) 313 | 314 | c = None 315 | text = 'Text' 316 | speed = 15 317 | fontName = None 318 | fontSize= None 319 | font = None 320 | 321 | #print (options) 322 | #print (args) 323 | 324 | for opt, arg in options: 325 | if opt == '--c': 326 | c = checkcolor(arg) 327 | if opt == '--text': 328 | text = arg 329 | if opt == '--speed': 330 | speed = int(arg) 331 | if opt == '--font': 332 | fontName = arg 333 | if opt == '--size': 334 | fontSize = int(arg) 335 | if opt == '--sound': 336 | t.playsound(arg) 337 | 338 | if sys.argv[1] == 'sound': 339 | if len(args) > 0: 340 | t.playsound(args[0]) 341 | else: 342 | os.system('sudo killall mpg123') 343 | #os.system('sudo killall aplay') 344 | sys.exit(0) 345 | 346 | if sys.argv[1] == 'discover': 347 | discover() 348 | sys.exit(0) 349 | 350 | if sys.argv[1] == 'time': 351 | t.set_time(datetime.datetime.now()) 352 | t.show_clock(c) 353 | 354 | if sys.argv[1] == 'temperature': 355 | t.show_temperature(c) 356 | 357 | if sys.argv[1] == 'counter': 358 | t.Show_counter() 359 | 360 | if sys.argv[1] == 'off': 361 | t.Set_Off() 362 | 363 | if sys.argv[1] == 'anim': 364 | t.show_animated_image(os.path.join(os.path.dirname(__file__),"anims/" + args[0])) 365 | 366 | if sys.argv[1] == 'image': 367 | t.show_static_image(os.path.join(os.path.dirname(__file__),"images/" + args[0] ) ) 368 | 369 | if sys.argv[1] == 'text': 370 | from PIL import ImageFont 371 | if fontName: 372 | if fontSize and fontName.endswith('ttf'): 373 | font = ImageFont.truetype(os.path.join(os.path.dirname(__file__), 'fonts/' + fontName),fontSize) 374 | elif fontName.endswith('pil'): 375 | font = ImageFont.load(os.path.join(os.path.dirname(__file__), 'fonts/' + fontName)) 376 | else: 377 | font = ImageFont.truetype(os.path.join(os.path.dirname(__file__),'fonts/Electronic scale.ttf'),9) 378 | 379 | #Fast but stop after 1 loop 380 | t.show_text([(args[0]+ ' ', c)], speed=speed, font=font) 381 | 382 | 383 | #Slow but continue after deconnexion 384 | #t.show_text2([(args[0], c)], font=font) 385 | 386 | sys.exit(0) 387 | 388 | 389 | -------------------------------------------------------------------------------- /fonts/slkscr.bdf: -------------------------------------------------------------------------------- 1 | STARTFONT 2.1 2 | COMMENT 3 | COMMENT Converted from OpenType font "slkscr.ttf" by "otf2bdf 3.0". 4 | COMMENT 5 | FONT -FreeType-Silkscreen-Medium-R-Normal--8-80-72-72-P-41-ISO10646-1 6 | SIZE 8 72 72 7 | FONTBOUNDINGBOX 9 10 0 -2 8 | STARTPROPERTIES 19 9 | FOUNDRY "FreeType" 10 | FAMILY_NAME "Silkscreen" 11 | WEIGHT_NAME "Medium" 12 | SLANT "R" 13 | SETWIDTH_NAME "Normal" 14 | ADD_STYLE_NAME "" 15 | PIXEL_SIZE 8 16 | POINT_SIZE 80 17 | RESOLUTION_X 72 18 | RESOLUTION_Y 72 19 | SPACING "P" 20 | AVERAGE_WIDTH 41 21 | CHARSET_REGISTRY "ISO10646" 22 | CHARSET_ENCODING "1" 23 | FONT_ASCENT 8 24 | FONT_DESCENT 2 25 | COPYRIGHT "Copyright (c) Jason Kottke, 2001. All rights reserved." 26 | _OTF_FONTFILE "slkscr.ttf" 27 | _OTF_PSNAME "Silkscreen" 28 | ENDPROPERTIES 29 | CHARS 218 30 | STARTCHAR 0020 31 | ENCODING 32 32 | SWIDTH 500 0 33 | DWIDTH 4 0 34 | BBX 0 0 0 0 35 | BITMAP 36 | ENDCHAR 37 | STARTCHAR 0021 38 | ENCODING 33 39 | SWIDTH 375 0 40 | DWIDTH 3 0 41 | BBX 1 5 1 0 42 | BITMAP 43 | 80 44 | 80 45 | 80 46 | 00 47 | 80 48 | ENDCHAR 49 | STARTCHAR 0022 50 | ENCODING 34 51 | SWIDTH 625 0 52 | DWIDTH 5 0 53 | BBX 3 2 1 3 54 | BITMAP 55 | A0 56 | A0 57 | ENDCHAR 58 | STARTCHAR 0023 59 | ENCODING 35 60 | SWIDTH 875 0 61 | DWIDTH 7 0 62 | BBX 5 5 1 0 63 | BITMAP 64 | 50 65 | F8 66 | 50 67 | F8 68 | 50 69 | ENDCHAR 70 | STARTCHAR 0024 71 | ENCODING 36 72 | SWIDTH 750 0 73 | DWIDTH 6 0 74 | BBX 4 7 1 -1 75 | BITMAP 76 | 20 77 | 70 78 | 80 79 | 60 80 | 10 81 | E0 82 | 40 83 | ENDCHAR 84 | STARTCHAR 0025 85 | ENCODING 37 86 | SWIDTH 875 0 87 | DWIDTH 7 0 88 | BBX 5 5 1 0 89 | BITMAP 90 | D0 91 | D0 92 | 20 93 | 58 94 | 58 95 | ENDCHAR 96 | STARTCHAR 0026 97 | ENCODING 38 98 | SWIDTH 750 0 99 | DWIDTH 6 0 100 | BBX 4 7 1 -1 101 | BITMAP 102 | 20 103 | 70 104 | 80 105 | 60 106 | 80 107 | 70 108 | 20 109 | ENDCHAR 110 | STARTCHAR 0027 111 | ENCODING 39 112 | SWIDTH 375 0 113 | DWIDTH 3 0 114 | BBX 1 2 1 3 115 | BITMAP 116 | 80 117 | 80 118 | ENDCHAR 119 | STARTCHAR 0028 120 | ENCODING 40 121 | SWIDTH 500 0 122 | DWIDTH 4 0 123 | BBX 2 5 1 0 124 | BITMAP 125 | 40 126 | 80 127 | 80 128 | 80 129 | 40 130 | ENDCHAR 131 | STARTCHAR 0029 132 | ENCODING 41 133 | SWIDTH 500 0 134 | DWIDTH 4 0 135 | BBX 2 5 1 0 136 | BITMAP 137 | 80 138 | 40 139 | 40 140 | 40 141 | 80 142 | ENDCHAR 143 | STARTCHAR 002A 144 | ENCODING 42 145 | SWIDTH 875 0 146 | DWIDTH 7 0 147 | BBX 5 5 1 0 148 | BITMAP 149 | 20 150 | A8 151 | 70 152 | A8 153 | 20 154 | ENDCHAR 155 | STARTCHAR 002B 156 | ENCODING 43 157 | SWIDTH 875 0 158 | DWIDTH 7 0 159 | BBX 5 5 1 0 160 | BITMAP 161 | 20 162 | 20 163 | F8 164 | 20 165 | 20 166 | ENDCHAR 167 | STARTCHAR 002C 168 | ENCODING 44 169 | SWIDTH 500 0 170 | DWIDTH 4 0 171 | BBX 2 2 1 -1 172 | BITMAP 173 | 40 174 | 80 175 | ENDCHAR 176 | STARTCHAR 002D 177 | ENCODING 45 178 | SWIDTH 625 0 179 | DWIDTH 5 0 180 | BBX 3 1 1 2 181 | BITMAP 182 | E0 183 | ENDCHAR 184 | STARTCHAR 002E 185 | ENCODING 46 186 | SWIDTH 375 0 187 | DWIDTH 3 0 188 | BBX 1 1 1 0 189 | BITMAP 190 | 80 191 | ENDCHAR 192 | STARTCHAR 002F 193 | ENCODING 47 194 | SWIDTH 625 0 195 | DWIDTH 5 0 196 | BBX 3 5 1 0 197 | BITMAP 198 | 20 199 | 20 200 | 40 201 | 80 202 | 80 203 | ENDCHAR 204 | STARTCHAR 0030 205 | ENCODING 48 206 | SWIDTH 750 0 207 | DWIDTH 6 0 208 | BBX 4 5 1 0 209 | BITMAP 210 | 60 211 | 90 212 | 90 213 | 90 214 | 60 215 | ENDCHAR 216 | STARTCHAR 0031 217 | ENCODING 49 218 | SWIDTH 625 0 219 | DWIDTH 5 0 220 | BBX 3 5 1 0 221 | BITMAP 222 | C0 223 | 40 224 | 40 225 | 40 226 | E0 227 | ENDCHAR 228 | STARTCHAR 0032 229 | ENCODING 50 230 | SWIDTH 750 0 231 | DWIDTH 6 0 232 | BBX 4 5 1 0 233 | BITMAP 234 | E0 235 | 10 236 | 60 237 | 80 238 | F0 239 | ENDCHAR 240 | STARTCHAR 0033 241 | ENCODING 51 242 | SWIDTH 750 0 243 | DWIDTH 6 0 244 | BBX 4 5 1 0 245 | BITMAP 246 | E0 247 | 10 248 | 60 249 | 10 250 | E0 251 | ENDCHAR 252 | STARTCHAR 0034 253 | ENCODING 52 254 | SWIDTH 750 0 255 | DWIDTH 6 0 256 | BBX 4 5 1 0 257 | BITMAP 258 | A0 259 | A0 260 | F0 261 | 20 262 | 20 263 | ENDCHAR 264 | STARTCHAR 0035 265 | ENCODING 53 266 | SWIDTH 750 0 267 | DWIDTH 6 0 268 | BBX 4 5 1 0 269 | BITMAP 270 | F0 271 | 80 272 | E0 273 | 10 274 | E0 275 | ENDCHAR 276 | STARTCHAR 0036 277 | ENCODING 54 278 | SWIDTH 750 0 279 | DWIDTH 6 0 280 | BBX 4 5 1 0 281 | BITMAP 282 | 60 283 | 80 284 | E0 285 | 90 286 | 60 287 | ENDCHAR 288 | STARTCHAR 0037 289 | ENCODING 55 290 | SWIDTH 750 0 291 | DWIDTH 6 0 292 | BBX 4 5 1 0 293 | BITMAP 294 | F0 295 | 10 296 | 20 297 | 40 298 | 40 299 | ENDCHAR 300 | STARTCHAR 0038 301 | ENCODING 56 302 | SWIDTH 750 0 303 | DWIDTH 6 0 304 | BBX 4 5 1 0 305 | BITMAP 306 | 60 307 | 90 308 | 60 309 | 90 310 | 60 311 | ENDCHAR 312 | STARTCHAR 0039 313 | ENCODING 57 314 | SWIDTH 750 0 315 | DWIDTH 6 0 316 | BBX 4 5 1 0 317 | BITMAP 318 | 60 319 | 90 320 | 70 321 | 10 322 | 60 323 | ENDCHAR 324 | STARTCHAR 003A 325 | ENCODING 58 326 | SWIDTH 375 0 327 | DWIDTH 3 0 328 | BBX 1 3 1 1 329 | BITMAP 330 | 80 331 | 00 332 | 80 333 | ENDCHAR 334 | STARTCHAR 003B 335 | ENCODING 59 336 | SWIDTH 500 0 337 | DWIDTH 4 0 338 | BBX 2 4 1 0 339 | BITMAP 340 | 40 341 | 00 342 | 40 343 | 80 344 | ENDCHAR 345 | STARTCHAR 003C 346 | ENCODING 60 347 | SWIDTH 625 0 348 | DWIDTH 5 0 349 | BBX 3 5 1 0 350 | BITMAP 351 | 20 352 | 40 353 | 80 354 | 40 355 | 20 356 | ENDCHAR 357 | STARTCHAR 003D 358 | ENCODING 61 359 | SWIDTH 625 0 360 | DWIDTH 5 0 361 | BBX 3 3 1 1 362 | BITMAP 363 | E0 364 | 00 365 | E0 366 | ENDCHAR 367 | STARTCHAR 003E 368 | ENCODING 62 369 | SWIDTH 625 0 370 | DWIDTH 5 0 371 | BBX 3 5 1 0 372 | BITMAP 373 | 80 374 | 40 375 | 20 376 | 40 377 | 80 378 | ENDCHAR 379 | STARTCHAR 003F 380 | ENCODING 63 381 | SWIDTH 750 0 382 | DWIDTH 6 0 383 | BBX 4 5 1 0 384 | BITMAP 385 | E0 386 | 10 387 | 60 388 | 00 389 | 40 390 | ENDCHAR 391 | STARTCHAR 0040 392 | ENCODING 64 393 | SWIDTH 875 0 394 | DWIDTH 7 0 395 | BBX 5 5 1 0 396 | BITMAP 397 | 70 398 | A8 399 | B0 400 | 80 401 | 70 402 | ENDCHAR 403 | STARTCHAR 0041 404 | ENCODING 65 405 | SWIDTH 750 0 406 | DWIDTH 6 0 407 | BBX 4 5 1 0 408 | BITMAP 409 | 60 410 | 90 411 | F0 412 | 90 413 | 90 414 | ENDCHAR 415 | STARTCHAR 0042 416 | ENCODING 66 417 | SWIDTH 750 0 418 | DWIDTH 6 0 419 | BBX 4 5 1 0 420 | BITMAP 421 | E0 422 | 90 423 | F0 424 | 90 425 | E0 426 | ENDCHAR 427 | STARTCHAR 0043 428 | ENCODING 67 429 | SWIDTH 750 0 430 | DWIDTH 6 0 431 | BBX 4 5 1 0 432 | BITMAP 433 | 60 434 | 90 435 | 80 436 | 90 437 | 60 438 | ENDCHAR 439 | STARTCHAR 0044 440 | ENCODING 68 441 | SWIDTH 750 0 442 | DWIDTH 6 0 443 | BBX 4 5 1 0 444 | BITMAP 445 | E0 446 | 90 447 | 90 448 | 90 449 | E0 450 | ENDCHAR 451 | STARTCHAR 0045 452 | ENCODING 69 453 | SWIDTH 625 0 454 | DWIDTH 5 0 455 | BBX 3 5 1 0 456 | BITMAP 457 | E0 458 | 80 459 | E0 460 | 80 461 | E0 462 | ENDCHAR 463 | STARTCHAR 0046 464 | ENCODING 70 465 | SWIDTH 625 0 466 | DWIDTH 5 0 467 | BBX 3 5 1 0 468 | BITMAP 469 | E0 470 | 80 471 | E0 472 | 80 473 | 80 474 | ENDCHAR 475 | STARTCHAR 0047 476 | ENCODING 71 477 | SWIDTH 750 0 478 | DWIDTH 6 0 479 | BBX 4 5 1 0 480 | BITMAP 481 | 70 482 | 80 483 | B0 484 | 90 485 | 60 486 | ENDCHAR 487 | STARTCHAR 0048 488 | ENCODING 72 489 | SWIDTH 750 0 490 | DWIDTH 6 0 491 | BBX 4 5 1 0 492 | BITMAP 493 | 90 494 | 90 495 | F0 496 | 90 497 | 90 498 | ENDCHAR 499 | STARTCHAR 0049 500 | ENCODING 73 501 | SWIDTH 375 0 502 | DWIDTH 3 0 503 | BBX 1 5 1 0 504 | BITMAP 505 | 80 506 | 80 507 | 80 508 | 80 509 | 80 510 | ENDCHAR 511 | STARTCHAR 004A 512 | ENCODING 74 513 | SWIDTH 750 0 514 | DWIDTH 6 0 515 | BBX 4 5 1 0 516 | BITMAP 517 | 10 518 | 10 519 | 10 520 | 90 521 | 60 522 | ENDCHAR 523 | STARTCHAR 004B 524 | ENCODING 75 525 | SWIDTH 750 0 526 | DWIDTH 6 0 527 | BBX 4 5 1 0 528 | BITMAP 529 | 90 530 | A0 531 | C0 532 | A0 533 | 90 534 | ENDCHAR 535 | STARTCHAR 004C 536 | ENCODING 76 537 | SWIDTH 625 0 538 | DWIDTH 5 0 539 | BBX 3 5 1 0 540 | BITMAP 541 | 80 542 | 80 543 | 80 544 | 80 545 | E0 546 | ENDCHAR 547 | STARTCHAR 004D 548 | ENCODING 77 549 | SWIDTH 875 0 550 | DWIDTH 7 0 551 | BBX 5 5 1 0 552 | BITMAP 553 | 88 554 | D8 555 | A8 556 | 88 557 | 88 558 | ENDCHAR 559 | STARTCHAR 004E 560 | ENCODING 78 561 | SWIDTH 875 0 562 | DWIDTH 7 0 563 | BBX 5 5 1 0 564 | BITMAP 565 | 88 566 | C8 567 | A8 568 | 98 569 | 88 570 | ENDCHAR 571 | STARTCHAR 004F 572 | ENCODING 79 573 | SWIDTH 750 0 574 | DWIDTH 6 0 575 | BBX 4 5 1 0 576 | BITMAP 577 | 60 578 | 90 579 | 90 580 | 90 581 | 60 582 | ENDCHAR 583 | STARTCHAR 0050 584 | ENCODING 80 585 | SWIDTH 750 0 586 | DWIDTH 6 0 587 | BBX 4 5 1 0 588 | BITMAP 589 | E0 590 | 90 591 | E0 592 | 80 593 | 80 594 | ENDCHAR 595 | STARTCHAR 0051 596 | ENCODING 81 597 | SWIDTH 750 0 598 | DWIDTH 6 0 599 | BBX 4 6 1 -1 600 | BITMAP 601 | 60 602 | 90 603 | 90 604 | 90 605 | 60 606 | 10 607 | ENDCHAR 608 | STARTCHAR 0052 609 | ENCODING 82 610 | SWIDTH 750 0 611 | DWIDTH 6 0 612 | BBX 4 5 1 0 613 | BITMAP 614 | E0 615 | 90 616 | E0 617 | A0 618 | 90 619 | ENDCHAR 620 | STARTCHAR 0053 621 | ENCODING 83 622 | SWIDTH 750 0 623 | DWIDTH 6 0 624 | BBX 4 5 1 0 625 | BITMAP 626 | 70 627 | 80 628 | 60 629 | 10 630 | E0 631 | ENDCHAR 632 | STARTCHAR 0054 633 | ENCODING 84 634 | SWIDTH 625 0 635 | DWIDTH 5 0 636 | BBX 3 5 1 0 637 | BITMAP 638 | E0 639 | 40 640 | 40 641 | 40 642 | 40 643 | ENDCHAR 644 | STARTCHAR 0055 645 | ENCODING 85 646 | SWIDTH 750 0 647 | DWIDTH 6 0 648 | BBX 4 5 1 0 649 | BITMAP 650 | 90 651 | 90 652 | 90 653 | 90 654 | 60 655 | ENDCHAR 656 | STARTCHAR 0056 657 | ENCODING 86 658 | SWIDTH 875 0 659 | DWIDTH 7 0 660 | BBX 5 5 1 0 661 | BITMAP 662 | 88 663 | 88 664 | 50 665 | 50 666 | 20 667 | ENDCHAR 668 | STARTCHAR 0057 669 | ENCODING 87 670 | SWIDTH 875 0 671 | DWIDTH 7 0 672 | BBX 5 5 1 0 673 | BITMAP 674 | 88 675 | A8 676 | A8 677 | A8 678 | 50 679 | ENDCHAR 680 | STARTCHAR 0058 681 | ENCODING 88 682 | SWIDTH 875 0 683 | DWIDTH 7 0 684 | BBX 5 5 1 0 685 | BITMAP 686 | 88 687 | 50 688 | 20 689 | 50 690 | 88 691 | ENDCHAR 692 | STARTCHAR 0059 693 | ENCODING 89 694 | SWIDTH 875 0 695 | DWIDTH 7 0 696 | BBX 5 5 1 0 697 | BITMAP 698 | 88 699 | 50 700 | 20 701 | 20 702 | 20 703 | ENDCHAR 704 | STARTCHAR 005A 705 | ENCODING 90 706 | SWIDTH 625 0 707 | DWIDTH 5 0 708 | BBX 3 5 1 0 709 | BITMAP 710 | E0 711 | 20 712 | 40 713 | 80 714 | E0 715 | ENDCHAR 716 | STARTCHAR 005B 717 | ENCODING 91 718 | SWIDTH 500 0 719 | DWIDTH 4 0 720 | BBX 2 5 1 0 721 | BITMAP 722 | C0 723 | 80 724 | 80 725 | 80 726 | C0 727 | ENDCHAR 728 | STARTCHAR 005C 729 | ENCODING 92 730 | SWIDTH 625 0 731 | DWIDTH 5 0 732 | BBX 3 5 1 0 733 | BITMAP 734 | 80 735 | 80 736 | 40 737 | 20 738 | 20 739 | ENDCHAR 740 | STARTCHAR 005D 741 | ENCODING 93 742 | SWIDTH 500 0 743 | DWIDTH 4 0 744 | BBX 2 5 1 0 745 | BITMAP 746 | C0 747 | 40 748 | 40 749 | 40 750 | C0 751 | ENDCHAR 752 | STARTCHAR 005E 753 | ENCODING 94 754 | SWIDTH 625 0 755 | DWIDTH 5 0 756 | BBX 3 2 1 4 757 | BITMAP 758 | 40 759 | A0 760 | ENDCHAR 761 | STARTCHAR 005F 762 | ENCODING 95 763 | SWIDTH 750 0 764 | DWIDTH 6 0 765 | BBX 4 1 1 -1 766 | BITMAP 767 | F0 768 | ENDCHAR 769 | STARTCHAR 0060 770 | ENCODING 96 771 | SWIDTH 500 0 772 | DWIDTH 4 0 773 | BBX 2 2 1 3 774 | BITMAP 775 | 80 776 | 40 777 | ENDCHAR 778 | STARTCHAR 0061 779 | ENCODING 97 780 | SWIDTH 750 0 781 | DWIDTH 6 0 782 | BBX 4 5 1 0 783 | BITMAP 784 | 60 785 | 90 786 | F0 787 | 90 788 | 90 789 | ENDCHAR 790 | STARTCHAR 0062 791 | ENCODING 98 792 | SWIDTH 750 0 793 | DWIDTH 6 0 794 | BBX 4 5 1 0 795 | BITMAP 796 | E0 797 | 90 798 | F0 799 | 90 800 | E0 801 | ENDCHAR 802 | STARTCHAR 0063 803 | ENCODING 99 804 | SWIDTH 750 0 805 | DWIDTH 6 0 806 | BBX 4 5 1 0 807 | BITMAP 808 | 60 809 | 90 810 | 80 811 | 90 812 | 60 813 | ENDCHAR 814 | STARTCHAR 0064 815 | ENCODING 100 816 | SWIDTH 750 0 817 | DWIDTH 6 0 818 | BBX 4 5 1 0 819 | BITMAP 820 | E0 821 | 90 822 | 90 823 | 90 824 | E0 825 | ENDCHAR 826 | STARTCHAR 0065 827 | ENCODING 101 828 | SWIDTH 625 0 829 | DWIDTH 5 0 830 | BBX 3 5 1 0 831 | BITMAP 832 | E0 833 | 80 834 | E0 835 | 80 836 | E0 837 | ENDCHAR 838 | STARTCHAR 0066 839 | ENCODING 102 840 | SWIDTH 625 0 841 | DWIDTH 5 0 842 | BBX 3 5 1 0 843 | BITMAP 844 | E0 845 | 80 846 | E0 847 | 80 848 | 80 849 | ENDCHAR 850 | STARTCHAR 0067 851 | ENCODING 103 852 | SWIDTH 750 0 853 | DWIDTH 6 0 854 | BBX 4 5 1 0 855 | BITMAP 856 | 70 857 | 80 858 | B0 859 | 90 860 | 60 861 | ENDCHAR 862 | STARTCHAR 0068 863 | ENCODING 104 864 | SWIDTH 750 0 865 | DWIDTH 6 0 866 | BBX 4 5 1 0 867 | BITMAP 868 | 90 869 | 90 870 | F0 871 | 90 872 | 90 873 | ENDCHAR 874 | STARTCHAR 0069 875 | ENCODING 105 876 | SWIDTH 375 0 877 | DWIDTH 3 0 878 | BBX 1 5 1 0 879 | BITMAP 880 | 80 881 | 80 882 | 80 883 | 80 884 | 80 885 | ENDCHAR 886 | STARTCHAR 006A 887 | ENCODING 106 888 | SWIDTH 750 0 889 | DWIDTH 6 0 890 | BBX 4 5 1 0 891 | BITMAP 892 | 10 893 | 10 894 | 10 895 | 90 896 | 60 897 | ENDCHAR 898 | STARTCHAR 006B 899 | ENCODING 107 900 | SWIDTH 750 0 901 | DWIDTH 6 0 902 | BBX 4 5 1 0 903 | BITMAP 904 | 90 905 | A0 906 | C0 907 | A0 908 | 90 909 | ENDCHAR 910 | STARTCHAR 006C 911 | ENCODING 108 912 | SWIDTH 625 0 913 | DWIDTH 5 0 914 | BBX 3 5 1 0 915 | BITMAP 916 | 80 917 | 80 918 | 80 919 | 80 920 | E0 921 | ENDCHAR 922 | STARTCHAR 006D 923 | ENCODING 109 924 | SWIDTH 875 0 925 | DWIDTH 7 0 926 | BBX 5 5 1 0 927 | BITMAP 928 | 88 929 | D8 930 | A8 931 | 88 932 | 88 933 | ENDCHAR 934 | STARTCHAR 006E 935 | ENCODING 110 936 | SWIDTH 875 0 937 | DWIDTH 7 0 938 | BBX 5 5 1 0 939 | BITMAP 940 | 88 941 | C8 942 | A8 943 | 98 944 | 88 945 | ENDCHAR 946 | STARTCHAR 006F 947 | ENCODING 111 948 | SWIDTH 750 0 949 | DWIDTH 6 0 950 | BBX 4 5 1 0 951 | BITMAP 952 | 60 953 | 90 954 | 90 955 | 90 956 | 60 957 | ENDCHAR 958 | STARTCHAR 0070 959 | ENCODING 112 960 | SWIDTH 750 0 961 | DWIDTH 6 0 962 | BBX 4 5 1 0 963 | BITMAP 964 | E0 965 | 90 966 | E0 967 | 80 968 | 80 969 | ENDCHAR 970 | STARTCHAR 0071 971 | ENCODING 113 972 | SWIDTH 750 0 973 | DWIDTH 6 0 974 | BBX 4 6 1 -1 975 | BITMAP 976 | 60 977 | 90 978 | 90 979 | 90 980 | 60 981 | 10 982 | ENDCHAR 983 | STARTCHAR 0072 984 | ENCODING 114 985 | SWIDTH 750 0 986 | DWIDTH 6 0 987 | BBX 4 5 1 0 988 | BITMAP 989 | E0 990 | 90 991 | E0 992 | A0 993 | 90 994 | ENDCHAR 995 | STARTCHAR 0073 996 | ENCODING 115 997 | SWIDTH 750 0 998 | DWIDTH 6 0 999 | BBX 4 5 1 0 1000 | BITMAP 1001 | 70 1002 | 80 1003 | 60 1004 | 10 1005 | E0 1006 | ENDCHAR 1007 | STARTCHAR 0074 1008 | ENCODING 116 1009 | SWIDTH 625 0 1010 | DWIDTH 5 0 1011 | BBX 3 5 1 0 1012 | BITMAP 1013 | E0 1014 | 40 1015 | 40 1016 | 40 1017 | 40 1018 | ENDCHAR 1019 | STARTCHAR 0075 1020 | ENCODING 117 1021 | SWIDTH 750 0 1022 | DWIDTH 6 0 1023 | BBX 4 5 1 0 1024 | BITMAP 1025 | 90 1026 | 90 1027 | 90 1028 | 90 1029 | 60 1030 | ENDCHAR 1031 | STARTCHAR 0076 1032 | ENCODING 118 1033 | SWIDTH 875 0 1034 | DWIDTH 7 0 1035 | BBX 5 5 1 0 1036 | BITMAP 1037 | 88 1038 | 88 1039 | 50 1040 | 50 1041 | 20 1042 | ENDCHAR 1043 | STARTCHAR 0077 1044 | ENCODING 119 1045 | SWIDTH 875 0 1046 | DWIDTH 7 0 1047 | BBX 5 5 1 0 1048 | BITMAP 1049 | 88 1050 | A8 1051 | A8 1052 | A8 1053 | 50 1054 | ENDCHAR 1055 | STARTCHAR 0078 1056 | ENCODING 120 1057 | SWIDTH 875 0 1058 | DWIDTH 7 0 1059 | BBX 5 5 1 0 1060 | BITMAP 1061 | 88 1062 | 50 1063 | 20 1064 | 50 1065 | 88 1066 | ENDCHAR 1067 | STARTCHAR 0079 1068 | ENCODING 121 1069 | SWIDTH 875 0 1070 | DWIDTH 7 0 1071 | BBX 5 5 1 0 1072 | BITMAP 1073 | 88 1074 | 50 1075 | 20 1076 | 20 1077 | 20 1078 | ENDCHAR 1079 | STARTCHAR 007A 1080 | ENCODING 122 1081 | SWIDTH 625 0 1082 | DWIDTH 5 0 1083 | BBX 3 5 1 0 1084 | BITMAP 1085 | E0 1086 | 20 1087 | 40 1088 | 80 1089 | E0 1090 | ENDCHAR 1091 | STARTCHAR 007B 1092 | ENCODING 123 1093 | SWIDTH 625 0 1094 | DWIDTH 5 0 1095 | BBX 3 5 1 0 1096 | BITMAP 1097 | 60 1098 | 40 1099 | 80 1100 | 40 1101 | 60 1102 | ENDCHAR 1103 | STARTCHAR 007C 1104 | ENCODING 124 1105 | SWIDTH 375 0 1106 | DWIDTH 3 0 1107 | BBX 1 7 1 -1 1108 | BITMAP 1109 | 80 1110 | 80 1111 | 80 1112 | 80 1113 | 80 1114 | 80 1115 | 80 1116 | ENDCHAR 1117 | STARTCHAR 007D 1118 | ENCODING 125 1119 | SWIDTH 625 0 1120 | DWIDTH 5 0 1121 | BBX 3 5 1 0 1122 | BITMAP 1123 | C0 1124 | 40 1125 | 20 1126 | 40 1127 | C0 1128 | ENDCHAR 1129 | STARTCHAR 007E 1130 | ENCODING 126 1131 | SWIDTH 750 0 1132 | DWIDTH 6 0 1133 | BBX 4 2 1 3 1134 | BITMAP 1135 | 50 1136 | A0 1137 | ENDCHAR 1138 | STARTCHAR 00A0 1139 | ENCODING 160 1140 | SWIDTH 500 0 1141 | DWIDTH 4 0 1142 | BBX 0 0 0 0 1143 | BITMAP 1144 | ENDCHAR 1145 | STARTCHAR 00A1 1146 | ENCODING 161 1147 | SWIDTH 375 0 1148 | DWIDTH 3 0 1149 | BBX 1 5 1 0 1150 | BITMAP 1151 | 80 1152 | 00 1153 | 80 1154 | 80 1155 | 80 1156 | ENDCHAR 1157 | STARTCHAR 00A2 1158 | ENCODING 162 1159 | SWIDTH 625 0 1160 | DWIDTH 5 0 1161 | BBX 3 5 1 0 1162 | BITMAP 1163 | 40 1164 | E0 1165 | 80 1166 | E0 1167 | 40 1168 | ENDCHAR 1169 | STARTCHAR 00A3 1170 | ENCODING 163 1171 | SWIDTH 750 0 1172 | DWIDTH 6 0 1173 | BBX 4 5 1 0 1174 | BITMAP 1175 | 30 1176 | 20 1177 | E0 1178 | 40 1179 | F0 1180 | ENDCHAR 1181 | STARTCHAR 00A4 1182 | ENCODING 164 1183 | SWIDTH 875 0 1184 | DWIDTH 7 0 1185 | BBX 5 5 1 0 1186 | BITMAP 1187 | A8 1188 | 50 1189 | 50 1190 | 50 1191 | A8 1192 | ENDCHAR 1193 | STARTCHAR 00A5 1194 | ENCODING 165 1195 | SWIDTH 875 0 1196 | DWIDTH 7 0 1197 | BBX 5 5 1 0 1198 | BITMAP 1199 | 88 1200 | 70 1201 | 20 1202 | 70 1203 | 20 1204 | ENDCHAR 1205 | STARTCHAR 00A6 1206 | ENCODING 166 1207 | SWIDTH 375 0 1208 | DWIDTH 3 0 1209 | BBX 1 5 1 0 1210 | BITMAP 1211 | 80 1212 | 80 1213 | 00 1214 | 80 1215 | 80 1216 | ENDCHAR 1217 | STARTCHAR 00A7 1218 | ENCODING 167 1219 | SWIDTH 750 0 1220 | DWIDTH 6 0 1221 | BBX 4 7 1 -1 1222 | BITMAP 1223 | 60 1224 | 80 1225 | 60 1226 | 90 1227 | 60 1228 | 10 1229 | 60 1230 | ENDCHAR 1231 | STARTCHAR 00A8 1232 | ENCODING 168 1233 | SWIDTH 625 0 1234 | DWIDTH 5 0 1235 | BBX 3 1 1 4 1236 | BITMAP 1237 | A0 1238 | ENDCHAR 1239 | STARTCHAR 00A9 1240 | ENCODING 169 1241 | SWIDTH 1125 0 1242 | DWIDTH 9 0 1243 | BBX 7 7 1 -1 1244 | BITMAP 1245 | 7C 1246 | 82 1247 | BA 1248 | A2 1249 | BA 1250 | 82 1251 | 7C 1252 | ENDCHAR 1253 | STARTCHAR 00AA 1254 | ENCODING 170 1255 | SWIDTH 625 0 1256 | DWIDTH 5 0 1257 | BBX 3 3 1 2 1258 | BITMAP 1259 | 40 1260 | A0 1261 | 60 1262 | ENDCHAR 1263 | STARTCHAR 00AB 1264 | ENCODING 171 1265 | SWIDTH 875 0 1266 | DWIDTH 7 0 1267 | BBX 5 3 1 1 1268 | BITMAP 1269 | 48 1270 | 90 1271 | 48 1272 | ENDCHAR 1273 | STARTCHAR 00AC 1274 | ENCODING 172 1275 | SWIDTH 750 0 1276 | DWIDTH 6 0 1277 | BBX 4 2 1 1 1278 | BITMAP 1279 | F0 1280 | 10 1281 | ENDCHAR 1282 | STARTCHAR 00AD 1283 | ENCODING 173 1284 | SWIDTH 625 0 1285 | DWIDTH 5 0 1286 | BBX 3 1 1 2 1287 | BITMAP 1288 | E0 1289 | ENDCHAR 1290 | STARTCHAR 00AE 1291 | ENCODING 174 1292 | SWIDTH 1125 0 1293 | DWIDTH 9 0 1294 | BBX 7 7 1 -1 1295 | BITMAP 1296 | 7C 1297 | 82 1298 | 9A 1299 | A2 1300 | A2 1301 | 82 1302 | 7C 1303 | ENDCHAR 1304 | STARTCHAR 00AF 1305 | ENCODING 175 1306 | SWIDTH 750 0 1307 | DWIDTH 6 0 1308 | BBX 4 1 1 4 1309 | BITMAP 1310 | F0 1311 | ENDCHAR 1312 | STARTCHAR 00B0 1313 | ENCODING 176 1314 | SWIDTH 625 0 1315 | DWIDTH 5 0 1316 | BBX 3 3 1 2 1317 | BITMAP 1318 | 40 1319 | A0 1320 | 40 1321 | ENDCHAR 1322 | STARTCHAR 00B1 1323 | ENCODING 177 1324 | SWIDTH 875 0 1325 | DWIDTH 7 0 1326 | BBX 5 6 1 -1 1327 | BITMAP 1328 | 20 1329 | 20 1330 | F8 1331 | 20 1332 | 20 1333 | F8 1334 | ENDCHAR 1335 | STARTCHAR 00B2 1336 | ENCODING 178 1337 | SWIDTH 625 0 1338 | DWIDTH 5 0 1339 | BBX 3 4 1 1 1340 | BITMAP 1341 | C0 1342 | 20 1343 | 40 1344 | E0 1345 | ENDCHAR 1346 | STARTCHAR 00B3 1347 | ENCODING 179 1348 | SWIDTH 625 0 1349 | DWIDTH 5 0 1350 | BBX 3 4 1 1 1351 | BITMAP 1352 | C0 1353 | 60 1354 | 20 1355 | E0 1356 | ENDCHAR 1357 | STARTCHAR 00B4 1358 | ENCODING 180 1359 | SWIDTH 500 0 1360 | DWIDTH 4 0 1361 | BBX 2 2 1 3 1362 | BITMAP 1363 | 40 1364 | 80 1365 | ENDCHAR 1366 | STARTCHAR 00B5 1367 | ENCODING 181 1368 | SWIDTH 750 0 1369 | DWIDTH 6 0 1370 | BBX 4 6 1 -1 1371 | BITMAP 1372 | 90 1373 | 90 1374 | 90 1375 | 90 1376 | E0 1377 | 80 1378 | ENDCHAR 1379 | STARTCHAR 00B6 1380 | ENCODING 182 1381 | SWIDTH 875 0 1382 | DWIDTH 7 0 1383 | BBX 5 5 1 0 1384 | BITMAP 1385 | 78 1386 | A8 1387 | 78 1388 | 28 1389 | 28 1390 | ENDCHAR 1391 | STARTCHAR 00B7 1392 | ENCODING 183 1393 | SWIDTH 375 0 1394 | DWIDTH 3 0 1395 | BBX 1 1 1 2 1396 | BITMAP 1397 | 80 1398 | ENDCHAR 1399 | STARTCHAR 00B8 1400 | ENCODING 184 1401 | SWIDTH 500 0 1402 | DWIDTH 4 0 1403 | BBX 2 2 1 -1 1404 | BITMAP 1405 | 40 1406 | 80 1407 | ENDCHAR 1408 | STARTCHAR 00B9 1409 | ENCODING 185 1410 | SWIDTH 500 0 1411 | DWIDTH 4 0 1412 | BBX 2 4 1 1 1413 | BITMAP 1414 | C0 1415 | 40 1416 | 40 1417 | 40 1418 | ENDCHAR 1419 | STARTCHAR 00BA 1420 | ENCODING 186 1421 | SWIDTH 625 0 1422 | DWIDTH 5 0 1423 | BBX 3 3 1 2 1424 | BITMAP 1425 | 40 1426 | A0 1427 | 40 1428 | ENDCHAR 1429 | STARTCHAR 00BB 1430 | ENCODING 187 1431 | SWIDTH 875 0 1432 | DWIDTH 7 0 1433 | BBX 5 3 1 1 1434 | BITMAP 1435 | 90 1436 | 48 1437 | 90 1438 | ENDCHAR 1439 | STARTCHAR 00BC 1440 | ENCODING 188 1441 | SWIDTH 1125 0 1442 | DWIDTH 9 0 1443 | BBX 7 5 1 0 1444 | BITMAP 1445 | 90 1446 | 90 1447 | AA 1448 | 4E 1449 | 42 1450 | ENDCHAR 1451 | STARTCHAR 00BD 1452 | ENCODING 189 1453 | SWIDTH 1125 0 1454 | DWIDTH 9 0 1455 | BBX 7 5 1 0 1456 | BITMAP 1457 | 90 1458 | 9C 1459 | A2 1460 | 44 1461 | 4E 1462 | ENDCHAR 1463 | STARTCHAR 00BE 1464 | ENCODING 190 1465 | SWIDTH 1250 0 1466 | DWIDTH 10 0 1467 | BBX 8 5 1 0 1468 | BITMAP 1469 | C8 1470 | 68 1471 | 35 1472 | E7 1473 | 21 1474 | ENDCHAR 1475 | STARTCHAR 00BF 1476 | ENCODING 191 1477 | SWIDTH 750 0 1478 | DWIDTH 6 0 1479 | BBX 4 5 1 0 1480 | BITMAP 1481 | 20 1482 | 00 1483 | 60 1484 | 80 1485 | 70 1486 | ENDCHAR 1487 | STARTCHAR 00C0 1488 | ENCODING 192 1489 | SWIDTH 750 0 1490 | DWIDTH 6 0 1491 | BBX 4 8 1 0 1492 | BITMAP 1493 | 40 1494 | 20 1495 | 00 1496 | 60 1497 | 90 1498 | F0 1499 | 90 1500 | 90 1501 | ENDCHAR 1502 | STARTCHAR 00C1 1503 | ENCODING 193 1504 | SWIDTH 750 0 1505 | DWIDTH 6 0 1506 | BBX 4 8 1 0 1507 | BITMAP 1508 | 20 1509 | 40 1510 | 00 1511 | 60 1512 | 90 1513 | F0 1514 | 90 1515 | 90 1516 | ENDCHAR 1517 | STARTCHAR 00C2 1518 | ENCODING 194 1519 | SWIDTH 750 0 1520 | DWIDTH 6 0 1521 | BBX 4 8 1 0 1522 | BITMAP 1523 | 60 1524 | 90 1525 | 00 1526 | 60 1527 | 90 1528 | F0 1529 | 90 1530 | 90 1531 | ENDCHAR 1532 | STARTCHAR 00C3 1533 | ENCODING 195 1534 | SWIDTH 750 0 1535 | DWIDTH 6 0 1536 | BBX 4 8 1 0 1537 | BITMAP 1538 | 50 1539 | A0 1540 | 00 1541 | 60 1542 | 90 1543 | F0 1544 | 90 1545 | 90 1546 | ENDCHAR 1547 | STARTCHAR 00C4 1548 | ENCODING 196 1549 | SWIDTH 750 0 1550 | DWIDTH 6 0 1551 | BBX 4 7 1 0 1552 | BITMAP 1553 | 90 1554 | 00 1555 | 60 1556 | 90 1557 | F0 1558 | 90 1559 | 90 1560 | ENDCHAR 1561 | STARTCHAR 00C5 1562 | ENCODING 197 1563 | SWIDTH 750 0 1564 | DWIDTH 6 0 1565 | BBX 4 8 1 0 1566 | BITMAP 1567 | 90 1568 | 60 1569 | 00 1570 | 60 1571 | 90 1572 | F0 1573 | 90 1574 | 90 1575 | ENDCHAR 1576 | STARTCHAR 00C6 1577 | ENCODING 198 1578 | SWIDTH 875 0 1579 | DWIDTH 7 0 1580 | BBX 5 5 1 0 1581 | BITMAP 1582 | 78 1583 | A0 1584 | F8 1585 | A0 1586 | B8 1587 | ENDCHAR 1588 | STARTCHAR 00C7 1589 | ENCODING 199 1590 | SWIDTH 750 0 1591 | DWIDTH 6 0 1592 | BBX 4 7 1 -2 1593 | BITMAP 1594 | 60 1595 | 90 1596 | 80 1597 | 90 1598 | 60 1599 | 40 1600 | 80 1601 | ENDCHAR 1602 | STARTCHAR 00C8 1603 | ENCODING 200 1604 | SWIDTH 625 0 1605 | DWIDTH 5 0 1606 | BBX 3 8 1 0 1607 | BITMAP 1608 | 80 1609 | 40 1610 | 00 1611 | E0 1612 | 80 1613 | E0 1614 | 80 1615 | E0 1616 | ENDCHAR 1617 | STARTCHAR 00C9 1618 | ENCODING 201 1619 | SWIDTH 625 0 1620 | DWIDTH 5 0 1621 | BBX 3 8 1 0 1622 | BITMAP 1623 | 20 1624 | 40 1625 | 00 1626 | E0 1627 | 80 1628 | E0 1629 | 80 1630 | E0 1631 | ENDCHAR 1632 | STARTCHAR 00CA 1633 | ENCODING 202 1634 | SWIDTH 625 0 1635 | DWIDTH 5 0 1636 | BBX 3 8 1 0 1637 | BITMAP 1638 | 40 1639 | A0 1640 | 00 1641 | E0 1642 | 80 1643 | E0 1644 | 80 1645 | E0 1646 | ENDCHAR 1647 | STARTCHAR 00CB 1648 | ENCODING 203 1649 | SWIDTH 625 0 1650 | DWIDTH 5 0 1651 | BBX 3 7 1 0 1652 | BITMAP 1653 | A0 1654 | 00 1655 | E0 1656 | 80 1657 | E0 1658 | 80 1659 | E0 1660 | ENDCHAR 1661 | STARTCHAR 00CC 1662 | ENCODING 204 1663 | SWIDTH 375 0 1664 | DWIDTH 3 0 1665 | BBX 2 8 0 0 1666 | BITMAP 1667 | 80 1668 | 40 1669 | 00 1670 | 40 1671 | 40 1672 | 40 1673 | 40 1674 | 40 1675 | ENDCHAR 1676 | STARTCHAR 00CD 1677 | ENCODING 205 1678 | SWIDTH 375 0 1679 | DWIDTH 3 0 1680 | BBX 2 8 1 0 1681 | BITMAP 1682 | 40 1683 | 80 1684 | 00 1685 | 80 1686 | 80 1687 | 80 1688 | 80 1689 | 80 1690 | ENDCHAR 1691 | STARTCHAR 00CE 1692 | ENCODING 206 1693 | SWIDTH 375 0 1694 | DWIDTH 3 0 1695 | BBX 3 8 0 0 1696 | BITMAP 1697 | 40 1698 | A0 1699 | 00 1700 | 40 1701 | 40 1702 | 40 1703 | 40 1704 | 40 1705 | ENDCHAR 1706 | STARTCHAR 00CF 1707 | ENCODING 207 1708 | SWIDTH 375 0 1709 | DWIDTH 3 0 1710 | BBX 3 7 0 0 1711 | BITMAP 1712 | A0 1713 | 00 1714 | 40 1715 | 40 1716 | 40 1717 | 40 1718 | 40 1719 | ENDCHAR 1720 | STARTCHAR 00D0 1721 | ENCODING 208 1722 | SWIDTH 875 0 1723 | DWIDTH 7 0 1724 | BBX 5 5 1 0 1725 | BITMAP 1726 | 70 1727 | 48 1728 | E8 1729 | 48 1730 | 70 1731 | ENDCHAR 1732 | STARTCHAR 00D1 1733 | ENCODING 209 1734 | SWIDTH 875 0 1735 | DWIDTH 7 0 1736 | BBX 5 8 1 0 1737 | BITMAP 1738 | 28 1739 | 50 1740 | 00 1741 | 88 1742 | C8 1743 | A8 1744 | 98 1745 | 88 1746 | ENDCHAR 1747 | STARTCHAR 00D2 1748 | ENCODING 210 1749 | SWIDTH 750 0 1750 | DWIDTH 6 0 1751 | BBX 4 8 1 0 1752 | BITMAP 1753 | 40 1754 | 20 1755 | 00 1756 | 60 1757 | 90 1758 | 90 1759 | 90 1760 | 60 1761 | ENDCHAR 1762 | STARTCHAR 00D3 1763 | ENCODING 211 1764 | SWIDTH 750 0 1765 | DWIDTH 6 0 1766 | BBX 4 8 1 0 1767 | BITMAP 1768 | 20 1769 | 40 1770 | 00 1771 | 60 1772 | 90 1773 | 90 1774 | 90 1775 | 60 1776 | ENDCHAR 1777 | STARTCHAR 00D4 1778 | ENCODING 212 1779 | SWIDTH 750 0 1780 | DWIDTH 6 0 1781 | BBX 4 8 1 0 1782 | BITMAP 1783 | 60 1784 | 90 1785 | 00 1786 | 60 1787 | 90 1788 | 90 1789 | 90 1790 | 60 1791 | ENDCHAR 1792 | STARTCHAR 00D5 1793 | ENCODING 213 1794 | SWIDTH 750 0 1795 | DWIDTH 6 0 1796 | BBX 4 8 1 0 1797 | BITMAP 1798 | 50 1799 | A0 1800 | 00 1801 | 60 1802 | 90 1803 | 90 1804 | 90 1805 | 60 1806 | ENDCHAR 1807 | STARTCHAR 00D6 1808 | ENCODING 214 1809 | SWIDTH 750 0 1810 | DWIDTH 6 0 1811 | BBX 4 7 1 0 1812 | BITMAP 1813 | 90 1814 | 00 1815 | 60 1816 | 90 1817 | 90 1818 | 90 1819 | 60 1820 | ENDCHAR 1821 | STARTCHAR 00D7 1822 | ENCODING 215 1823 | SWIDTH 625 0 1824 | DWIDTH 5 0 1825 | BBX 3 3 1 1 1826 | BITMAP 1827 | A0 1828 | 40 1829 | A0 1830 | ENDCHAR 1831 | STARTCHAR 00D8 1832 | ENCODING 216 1833 | SWIDTH 875 0 1834 | DWIDTH 7 0 1835 | BBX 5 5 1 0 1836 | BITMAP 1837 | 70 1838 | 98 1839 | A8 1840 | C8 1841 | 70 1842 | ENDCHAR 1843 | STARTCHAR 00D9 1844 | ENCODING 217 1845 | SWIDTH 750 0 1846 | DWIDTH 6 0 1847 | BBX 4 8 1 0 1848 | BITMAP 1849 | 40 1850 | 20 1851 | 00 1852 | 90 1853 | 90 1854 | 90 1855 | 90 1856 | 60 1857 | ENDCHAR 1858 | STARTCHAR 00DA 1859 | ENCODING 218 1860 | SWIDTH 750 0 1861 | DWIDTH 6 0 1862 | BBX 4 8 1 0 1863 | BITMAP 1864 | 20 1865 | 40 1866 | 00 1867 | 90 1868 | 90 1869 | 90 1870 | 90 1871 | 60 1872 | ENDCHAR 1873 | STARTCHAR 00DB 1874 | ENCODING 219 1875 | SWIDTH 750 0 1876 | DWIDTH 6 0 1877 | BBX 4 8 1 0 1878 | BITMAP 1879 | 60 1880 | 90 1881 | 00 1882 | 90 1883 | 90 1884 | 90 1885 | 90 1886 | 60 1887 | ENDCHAR 1888 | STARTCHAR 00DC 1889 | ENCODING 220 1890 | SWIDTH 750 0 1891 | DWIDTH 6 0 1892 | BBX 4 7 1 0 1893 | BITMAP 1894 | 90 1895 | 00 1896 | 90 1897 | 90 1898 | 90 1899 | 90 1900 | 60 1901 | ENDCHAR 1902 | STARTCHAR 00DD 1903 | ENCODING 221 1904 | SWIDTH 875 0 1905 | DWIDTH 7 0 1906 | BBX 5 8 1 0 1907 | BITMAP 1908 | 10 1909 | 20 1910 | 00 1911 | 88 1912 | 50 1913 | 20 1914 | 20 1915 | 20 1916 | ENDCHAR 1917 | STARTCHAR 00DE 1918 | ENCODING 222 1919 | SWIDTH 625 0 1920 | DWIDTH 5 0 1921 | BBX 3 5 1 0 1922 | BITMAP 1923 | 80 1924 | C0 1925 | A0 1926 | C0 1927 | 80 1928 | ENDCHAR 1929 | STARTCHAR 00DF 1930 | ENCODING 223 1931 | SWIDTH 750 0 1932 | DWIDTH 6 0 1933 | BBX 4 5 1 0 1934 | BITMAP 1935 | 60 1936 | 90 1937 | A0 1938 | 90 1939 | A0 1940 | ENDCHAR 1941 | STARTCHAR 00E0 1942 | ENCODING 224 1943 | SWIDTH 750 0 1944 | DWIDTH 6 0 1945 | BBX 4 8 1 0 1946 | BITMAP 1947 | 40 1948 | 20 1949 | 00 1950 | 60 1951 | 90 1952 | F0 1953 | 90 1954 | 90 1955 | ENDCHAR 1956 | STARTCHAR 00E1 1957 | ENCODING 225 1958 | SWIDTH 750 0 1959 | DWIDTH 6 0 1960 | BBX 4 8 1 0 1961 | BITMAP 1962 | 20 1963 | 40 1964 | 00 1965 | 60 1966 | 90 1967 | F0 1968 | 90 1969 | 90 1970 | ENDCHAR 1971 | STARTCHAR 00E2 1972 | ENCODING 226 1973 | SWIDTH 750 0 1974 | DWIDTH 6 0 1975 | BBX 4 8 1 0 1976 | BITMAP 1977 | 60 1978 | 90 1979 | 00 1980 | 60 1981 | 90 1982 | F0 1983 | 90 1984 | 90 1985 | ENDCHAR 1986 | STARTCHAR 00E3 1987 | ENCODING 227 1988 | SWIDTH 750 0 1989 | DWIDTH 6 0 1990 | BBX 4 8 1 0 1991 | BITMAP 1992 | 50 1993 | A0 1994 | 00 1995 | 60 1996 | 90 1997 | F0 1998 | 90 1999 | 90 2000 | ENDCHAR 2001 | STARTCHAR 00E4 2002 | ENCODING 228 2003 | SWIDTH 750 0 2004 | DWIDTH 6 0 2005 | BBX 4 7 1 0 2006 | BITMAP 2007 | 90 2008 | 00 2009 | 60 2010 | 90 2011 | F0 2012 | 90 2013 | 90 2014 | ENDCHAR 2015 | STARTCHAR 00E5 2016 | ENCODING 229 2017 | SWIDTH 750 0 2018 | DWIDTH 6 0 2019 | BBX 4 8 1 0 2020 | BITMAP 2021 | 90 2022 | 60 2023 | 00 2024 | 60 2025 | 90 2026 | F0 2027 | 90 2028 | 90 2029 | ENDCHAR 2030 | STARTCHAR 00E6 2031 | ENCODING 230 2032 | SWIDTH 875 0 2033 | DWIDTH 7 0 2034 | BBX 5 5 1 0 2035 | BITMAP 2036 | 78 2037 | A0 2038 | F8 2039 | A0 2040 | B8 2041 | ENDCHAR 2042 | STARTCHAR 00E7 2043 | ENCODING 231 2044 | SWIDTH 750 0 2045 | DWIDTH 6 0 2046 | BBX 4 7 1 -2 2047 | BITMAP 2048 | 60 2049 | 90 2050 | 80 2051 | 90 2052 | 60 2053 | 40 2054 | 80 2055 | ENDCHAR 2056 | STARTCHAR 00E8 2057 | ENCODING 232 2058 | SWIDTH 625 0 2059 | DWIDTH 5 0 2060 | BBX 3 8 1 0 2061 | BITMAP 2062 | 80 2063 | 40 2064 | 00 2065 | E0 2066 | 80 2067 | E0 2068 | 80 2069 | E0 2070 | ENDCHAR 2071 | STARTCHAR 00E9 2072 | ENCODING 233 2073 | SWIDTH 625 0 2074 | DWIDTH 5 0 2075 | BBX 3 8 1 0 2076 | BITMAP 2077 | 20 2078 | 40 2079 | 00 2080 | E0 2081 | 80 2082 | E0 2083 | 80 2084 | E0 2085 | ENDCHAR 2086 | STARTCHAR 00EA 2087 | ENCODING 234 2088 | SWIDTH 625 0 2089 | DWIDTH 5 0 2090 | BBX 3 8 1 0 2091 | BITMAP 2092 | 40 2093 | A0 2094 | 00 2095 | E0 2096 | 80 2097 | E0 2098 | 80 2099 | E0 2100 | ENDCHAR 2101 | STARTCHAR 00EB 2102 | ENCODING 235 2103 | SWIDTH 625 0 2104 | DWIDTH 5 0 2105 | BBX 3 7 1 0 2106 | BITMAP 2107 | A0 2108 | 00 2109 | E0 2110 | 80 2111 | E0 2112 | 80 2113 | E0 2114 | ENDCHAR 2115 | STARTCHAR 00EC 2116 | ENCODING 236 2117 | SWIDTH 375 0 2118 | DWIDTH 3 0 2119 | BBX 2 8 0 0 2120 | BITMAP 2121 | 80 2122 | 40 2123 | 00 2124 | 40 2125 | 40 2126 | 40 2127 | 40 2128 | 40 2129 | ENDCHAR 2130 | STARTCHAR 00ED 2131 | ENCODING 237 2132 | SWIDTH 375 0 2133 | DWIDTH 3 0 2134 | BBX 2 8 1 0 2135 | BITMAP 2136 | 40 2137 | 80 2138 | 00 2139 | 80 2140 | 80 2141 | 80 2142 | 80 2143 | 80 2144 | ENDCHAR 2145 | STARTCHAR 00EE 2146 | ENCODING 238 2147 | SWIDTH 375 0 2148 | DWIDTH 3 0 2149 | BBX 3 8 0 0 2150 | BITMAP 2151 | 40 2152 | A0 2153 | 00 2154 | 40 2155 | 40 2156 | 40 2157 | 40 2158 | 40 2159 | ENDCHAR 2160 | STARTCHAR 00EF 2161 | ENCODING 239 2162 | SWIDTH 375 0 2163 | DWIDTH 3 0 2164 | BBX 3 7 0 0 2165 | BITMAP 2166 | A0 2167 | 00 2168 | 40 2169 | 40 2170 | 40 2171 | 40 2172 | 40 2173 | ENDCHAR 2174 | STARTCHAR 00F0 2175 | ENCODING 240 2176 | SWIDTH 875 0 2177 | DWIDTH 7 0 2178 | BBX 5 5 1 0 2179 | BITMAP 2180 | 70 2181 | 48 2182 | E8 2183 | 48 2184 | 70 2185 | ENDCHAR 2186 | STARTCHAR 00F1 2187 | ENCODING 241 2188 | SWIDTH 875 0 2189 | DWIDTH 7 0 2190 | BBX 5 8 1 0 2191 | BITMAP 2192 | 28 2193 | 50 2194 | 00 2195 | 88 2196 | C8 2197 | A8 2198 | 98 2199 | 88 2200 | ENDCHAR 2201 | STARTCHAR 00F2 2202 | ENCODING 242 2203 | SWIDTH 750 0 2204 | DWIDTH 6 0 2205 | BBX 4 8 1 0 2206 | BITMAP 2207 | 40 2208 | 20 2209 | 00 2210 | 60 2211 | 90 2212 | 90 2213 | 90 2214 | 60 2215 | ENDCHAR 2216 | STARTCHAR 00F3 2217 | ENCODING 243 2218 | SWIDTH 750 0 2219 | DWIDTH 6 0 2220 | BBX 4 8 1 0 2221 | BITMAP 2222 | 20 2223 | 40 2224 | 00 2225 | 60 2226 | 90 2227 | 90 2228 | 90 2229 | 60 2230 | ENDCHAR 2231 | STARTCHAR 00F4 2232 | ENCODING 244 2233 | SWIDTH 750 0 2234 | DWIDTH 6 0 2235 | BBX 4 8 1 0 2236 | BITMAP 2237 | 60 2238 | 90 2239 | 00 2240 | 60 2241 | 90 2242 | 90 2243 | 90 2244 | 60 2245 | ENDCHAR 2246 | STARTCHAR 00F5 2247 | ENCODING 245 2248 | SWIDTH 750 0 2249 | DWIDTH 6 0 2250 | BBX 4 8 1 0 2251 | BITMAP 2252 | 50 2253 | A0 2254 | 00 2255 | 60 2256 | 90 2257 | 90 2258 | 90 2259 | 60 2260 | ENDCHAR 2261 | STARTCHAR 00F6 2262 | ENCODING 246 2263 | SWIDTH 750 0 2264 | DWIDTH 6 0 2265 | BBX 4 7 1 0 2266 | BITMAP 2267 | 90 2268 | 00 2269 | 60 2270 | 90 2271 | 90 2272 | 90 2273 | 60 2274 | ENDCHAR 2275 | STARTCHAR 00F7 2276 | ENCODING 247 2277 | SWIDTH 625 0 2278 | DWIDTH 5 0 2279 | BBX 3 5 1 0 2280 | BITMAP 2281 | 40 2282 | 00 2283 | E0 2284 | 00 2285 | 40 2286 | ENDCHAR 2287 | STARTCHAR 00F8 2288 | ENCODING 248 2289 | SWIDTH 875 0 2290 | DWIDTH 7 0 2291 | BBX 5 5 1 0 2292 | BITMAP 2293 | 70 2294 | 98 2295 | A8 2296 | C8 2297 | 70 2298 | ENDCHAR 2299 | STARTCHAR 00F9 2300 | ENCODING 249 2301 | SWIDTH 750 0 2302 | DWIDTH 6 0 2303 | BBX 4 8 1 0 2304 | BITMAP 2305 | 40 2306 | 20 2307 | 00 2308 | 90 2309 | 90 2310 | 90 2311 | 90 2312 | 60 2313 | ENDCHAR 2314 | STARTCHAR 00FA 2315 | ENCODING 250 2316 | SWIDTH 750 0 2317 | DWIDTH 6 0 2318 | BBX 4 8 1 0 2319 | BITMAP 2320 | 20 2321 | 40 2322 | 00 2323 | 90 2324 | 90 2325 | 90 2326 | 90 2327 | 60 2328 | ENDCHAR 2329 | STARTCHAR 00FB 2330 | ENCODING 251 2331 | SWIDTH 750 0 2332 | DWIDTH 6 0 2333 | BBX 4 8 1 0 2334 | BITMAP 2335 | 60 2336 | 90 2337 | 00 2338 | 90 2339 | 90 2340 | 90 2341 | 90 2342 | 60 2343 | ENDCHAR 2344 | STARTCHAR 00FC 2345 | ENCODING 252 2346 | SWIDTH 750 0 2347 | DWIDTH 6 0 2348 | BBX 4 7 1 0 2349 | BITMAP 2350 | 90 2351 | 00 2352 | 90 2353 | 90 2354 | 90 2355 | 90 2356 | 60 2357 | ENDCHAR 2358 | STARTCHAR 00FD 2359 | ENCODING 253 2360 | SWIDTH 875 0 2361 | DWIDTH 7 0 2362 | BBX 5 8 1 0 2363 | BITMAP 2364 | 10 2365 | 20 2366 | 00 2367 | 88 2368 | 50 2369 | 20 2370 | 20 2371 | 20 2372 | ENDCHAR 2373 | STARTCHAR 00FE 2374 | ENCODING 254 2375 | SWIDTH 625 0 2376 | DWIDTH 5 0 2377 | BBX 3 5 1 0 2378 | BITMAP 2379 | 80 2380 | C0 2381 | A0 2382 | C0 2383 | 80 2384 | ENDCHAR 2385 | STARTCHAR 00FF 2386 | ENCODING 255 2387 | SWIDTH 875 0 2388 | DWIDTH 7 0 2389 | BBX 5 7 1 0 2390 | BITMAP 2391 | 50 2392 | 00 2393 | 88 2394 | 50 2395 | 20 2396 | 20 2397 | 20 2398 | ENDCHAR 2399 | STARTCHAR 0152 2400 | ENCODING 338 2401 | SWIDTH 875 0 2402 | DWIDTH 7 0 2403 | BBX 5 5 1 0 2404 | BITMAP 2405 | 78 2406 | A0 2407 | B8 2408 | A0 2409 | 78 2410 | ENDCHAR 2411 | STARTCHAR 0153 2412 | ENCODING 339 2413 | SWIDTH 875 0 2414 | DWIDTH 7 0 2415 | BBX 5 5 1 0 2416 | BITMAP 2417 | 78 2418 | A0 2419 | B8 2420 | A0 2421 | 78 2422 | ENDCHAR 2423 | STARTCHAR 0160 2424 | ENCODING 352 2425 | SWIDTH 750 0 2426 | DWIDTH 6 0 2427 | BBX 4 8 1 0 2428 | BITMAP 2429 | 90 2430 | 60 2431 | 00 2432 | 70 2433 | 80 2434 | 60 2435 | 10 2436 | E0 2437 | ENDCHAR 2438 | STARTCHAR 0161 2439 | ENCODING 353 2440 | SWIDTH 750 0 2441 | DWIDTH 6 0 2442 | BBX 4 8 1 0 2443 | BITMAP 2444 | 90 2445 | 60 2446 | 00 2447 | 70 2448 | 80 2449 | 60 2450 | 10 2451 | E0 2452 | ENDCHAR 2453 | STARTCHAR 0178 2454 | ENCODING 376 2455 | SWIDTH 875 0 2456 | DWIDTH 7 0 2457 | BBX 5 7 1 0 2458 | BITMAP 2459 | 50 2460 | 00 2461 | 88 2462 | 50 2463 | 20 2464 | 20 2465 | 20 2466 | ENDCHAR 2467 | STARTCHAR 017D 2468 | ENCODING 381 2469 | SWIDTH 625 0 2470 | DWIDTH 5 0 2471 | BBX 3 8 1 0 2472 | BITMAP 2473 | A0 2474 | 40 2475 | 00 2476 | E0 2477 | 20 2478 | 40 2479 | 80 2480 | E0 2481 | ENDCHAR 2482 | STARTCHAR 017E 2483 | ENCODING 382 2484 | SWIDTH 625 0 2485 | DWIDTH 5 0 2486 | BBX 3 8 1 0 2487 | BITMAP 2488 | A0 2489 | 40 2490 | 00 2491 | E0 2492 | 20 2493 | 40 2494 | 80 2495 | E0 2496 | ENDCHAR 2497 | STARTCHAR 0192 2498 | ENCODING 402 2499 | SWIDTH 875 0 2500 | DWIDTH 7 0 2501 | BBX 5 6 1 -1 2502 | BITMAP 2503 | 38 2504 | 20 2505 | 70 2506 | 40 2507 | 40 2508 | 80 2509 | ENDCHAR 2510 | STARTCHAR 02C6 2511 | ENCODING 710 2512 | SWIDTH 625 0 2513 | DWIDTH 5 0 2514 | BBX 3 2 1 4 2515 | BITMAP 2516 | 40 2517 | A0 2518 | ENDCHAR 2519 | STARTCHAR 02DC 2520 | ENCODING 732 2521 | SWIDTH 750 0 2522 | DWIDTH 6 0 2523 | BBX 4 2 1 3 2524 | BITMAP 2525 | 50 2526 | A0 2527 | ENDCHAR 2528 | STARTCHAR 2013 2529 | ENCODING 8211 2530 | SWIDTH 750 0 2531 | DWIDTH 6 0 2532 | BBX 4 1 1 2 2533 | BITMAP 2534 | F0 2535 | ENDCHAR 2536 | STARTCHAR 2014 2537 | ENCODING 8212 2538 | SWIDTH 1000 0 2539 | DWIDTH 8 0 2540 | BBX 6 1 1 2 2541 | BITMAP 2542 | FC 2543 | ENDCHAR 2544 | STARTCHAR 2018 2545 | ENCODING 8216 2546 | SWIDTH 375 0 2547 | DWIDTH 3 0 2548 | BBX 1 2 1 3 2549 | BITMAP 2550 | 80 2551 | 80 2552 | ENDCHAR 2553 | STARTCHAR 2019 2554 | ENCODING 8217 2555 | SWIDTH 375 0 2556 | DWIDTH 3 0 2557 | BBX 1 2 1 3 2558 | BITMAP 2559 | 80 2560 | 80 2561 | ENDCHAR 2562 | STARTCHAR 201A 2563 | ENCODING 8218 2564 | SWIDTH 500 0 2565 | DWIDTH 4 0 2566 | BBX 2 2 1 -1 2567 | BITMAP 2568 | 40 2569 | 80 2570 | ENDCHAR 2571 | STARTCHAR 201C 2572 | ENCODING 8220 2573 | SWIDTH 625 0 2574 | DWIDTH 5 0 2575 | BBX 3 2 1 3 2576 | BITMAP 2577 | A0 2578 | A0 2579 | ENDCHAR 2580 | STARTCHAR 201D 2581 | ENCODING 8221 2582 | SWIDTH 625 0 2583 | DWIDTH 5 0 2584 | BBX 3 2 1 3 2585 | BITMAP 2586 | A0 2587 | A0 2588 | ENDCHAR 2589 | STARTCHAR 201E 2590 | ENCODING 8222 2591 | SWIDTH 625 0 2592 | DWIDTH 5 0 2593 | BBX 3 2 1 0 2594 | BITMAP 2595 | A0 2596 | A0 2597 | ENDCHAR 2598 | STARTCHAR 2020 2599 | ENCODING 8224 2600 | SWIDTH 625 0 2601 | DWIDTH 5 0 2602 | BBX 3 5 1 0 2603 | BITMAP 2604 | 40 2605 | E0 2606 | 40 2607 | 40 2608 | 40 2609 | ENDCHAR 2610 | STARTCHAR 2021 2611 | ENCODING 8225 2612 | SWIDTH 625 0 2613 | DWIDTH 5 0 2614 | BBX 3 5 1 0 2615 | BITMAP 2616 | 40 2617 | E0 2618 | 40 2619 | E0 2620 | 40 2621 | ENDCHAR 2622 | STARTCHAR 2022 2623 | ENCODING 8226 2624 | SWIDTH 375 0 2625 | DWIDTH 3 0 2626 | BBX 1 1 1 2 2627 | BITMAP 2628 | 80 2629 | ENDCHAR 2630 | STARTCHAR 2026 2631 | ENCODING 8230 2632 | SWIDTH 875 0 2633 | DWIDTH 7 0 2634 | BBX 5 1 1 0 2635 | BITMAP 2636 | A8 2637 | ENDCHAR 2638 | STARTCHAR 2030 2639 | ENCODING 8240 2640 | SWIDTH 1000 0 2641 | DWIDTH 8 0 2642 | BBX 6 5 1 0 2643 | BITMAP 2644 | D0 2645 | D0 2646 | 20 2647 | 54 2648 | 54 2649 | ENDCHAR 2650 | STARTCHAR 2039 2651 | ENCODING 8249 2652 | SWIDTH 500 0 2653 | DWIDTH 4 0 2654 | BBX 2 3 1 1 2655 | BITMAP 2656 | 40 2657 | 80 2658 | 40 2659 | ENDCHAR 2660 | STARTCHAR 203A 2661 | ENCODING 8250 2662 | SWIDTH 500 0 2663 | DWIDTH 4 0 2664 | BBX 2 3 1 1 2665 | BITMAP 2666 | 80 2667 | 40 2668 | 80 2669 | ENDCHAR 2670 | STARTCHAR 20AC 2671 | ENCODING 8364 2672 | SWIDTH 875 0 2673 | DWIDTH 7 0 2674 | BBX 5 5 1 0 2675 | BITMAP 2676 | 30 2677 | 48 2678 | E0 2679 | 48 2680 | 30 2681 | ENDCHAR 2682 | STARTCHAR 2122 2683 | ENCODING 8482 2684 | SWIDTH 1250 0 2685 | DWIDTH 10 0 2686 | BBX 8 3 1 3 2687 | BITMAP 2688 | FB 2689 | 55 2690 | 55 2691 | ENDCHAR 2692 | ENDFONT 2693 | --------------------------------------------------------------------------------